ぺんちゃん日記

食と歴史と IT と。 Web の旅人ぺんじろうが好奇心赴くままに彷徨います 。

普通のページもブログ編集サポートスクリプトでかっこよく引用したい【AutoHotkey】。

f:id:yasushiito:20190403184928p:plain

これまでと現在の状況。

以前の機能追加でGitHubのソースコードを見栄えよく引用することに成功したのでした。
ただ、GitHubのページだけでなく普通のページも参照したいのは当然であります。
対象がはてなブログのページであれば、ボタン一発でストックに突っ込んで引用貼り付けができます。
はてなブログであれば。
そんなに頻繁にはてなブログを参照することはないので、それだけではどうにも物足りません。
どちらかと言うと Auto HOT Key の Wiki ページなどが リファレンスされる中心となりますので。

もちろんはてなブログは普通の引用にも対応しています。
編集ページで本文の上にあるダブルクォーテーションのボタンをクリックするだけなんですが、コピーペーストの作業を伴う上に、参照元への誘導リンクまでは用意してくれないので、こちらで参照したページへのリンクを用意しなければなりません。
黙って引用するのも悪いですしね。
そこで、はてなブログを引用するのと同じように できないかなあと思ったのでした。

どのようにしたいか。

表示中のページが何らかのテキストを選択していたら、そのページを単純な埋め込みリンクではなく、参照として選択中のテキストを引用形式で差し込めばどうでしょうか。
これならば、これまでの機能と競合せずに、新しいボタンも 必要とせず機能追加できます。
まあなんとなくページを選択してしまったりすることもあるので、埋め込みリンクしたいのに参照してしまうこともあるかもしれませんが。
たぶんデメリットよりメリットが上回ると思います。
実装の前の段階では技術的な不安はありませんし。

実装してみる。

基本的には前回GitHubソースコードを引用するように実装したものと延長線上にあります。
ブラウザのページ上の選択テキストを積極的に取得してみて、 範囲選択されているようなら必ず引用形式のタグを差し込むようにします。
逆に言えば、一切選択されてない時だけ埋め込みリンクの差し込みとなります。
ここでいう埋め込みリンクとは、こんな感じのやつです。
ahkwiki.net


今後GitHub以外のドメインでも特殊なスタイルで運用することが想定されますので、 URL を元にスタイルを切り替えやすいように関数化しておきます。

;ドメインごとに適切な引用スタイルでタグを生成してクリップボードにセットする。
clipblockquotefordomain(url, title, selectedtext){
    ;GitHubページからソースコードを引用するならタグを受け取る。
    txt := blockquotegithub(url, title, selectedtext)
    ;引用文字列が帰ってきたならクリップボードに転送して呼び出し元に復帰する。
    if strlen(txt) > 0
    {
        clipboard := txt
        return
    }
    ;対応すべきドメインが見つからないので汎用の引用スタイルでタグを返す。
    txt :=
    ;引用のタグを生成する。
    ;txt := ">>`n" . selectedtext . "`n<<`n"
    txt := "><blockquote cite=""" . url . """><p>" . selectedtext . "</p><cite><a href=""" . url . """>" . title . "</a></cite></blockquote><`n"
    ;クリップボードに転送して呼び出し元に復帰する。
    clipboard := txt
    return
}

myahk/blogrefemb.ahk at master · yasushiito/myahk


こんな具合に関数に切り出してあれば、何らかの条件に合致した時に直ちに処理を中断して元の処理に変えることができます。
もちろん、いずれの条件にも該当しなければ汎用的なスタイルで引用します。
引用する場合はページの URL とタイトルはつきものと考えるので、関数では引用する 文字列と合わせてパラメーターを送ります。

ソースコード全体はこんな感じになります。
結構長くなりました。

使ってみる。

GitHubソースコードの引用は以前と変わらずこんな感じです。

    global editor := 0
    global work := 0
    ; 作業ウィンドウ探す。
    detectchrome()
    ;必要なウィンドウが揃ってない場合は警告をメッセージを表示してアプリケーションを終了する。
    warnBox(editor = 0, 201)
    warnBox(work = 0, 202)

myahk/blogrefemb.ahk at master · yasushiito/myahk

どのドメインにも該当しない汎用的な営業スタイルはこんな感じです。

ウィンドウハンドルは16進数の形式で取得される。 取得したハンドルは、ウィンドウ関連コマンドのWinTitleを指定するところで ahk_id %OutputVar%というようにして使用できる。

WinGet - AutoHotkey Wiki

この記事に登場するAutohotkey スクリプトについて

この記事の中で私が作成したプログラムは、全て自由に使うことができます。
詳しくはこちら