Hatena::Groupnadesiko

そっとなでしこ RSSフィード


メインのブログに書くまでもない、なでしこ学習帳【記事一覧】 【このブログは何?】


特設!→【目次】なでしこ用Twitter 連携ライブラリ「なこったー」で遊ぶ


2010-07-14

【主要機能2】カーソル位置への定型文挿入機能、を実装

| 【主要機能2】カーソル位置への定型文挿入機能、を実装 - そっとなでしこ を含むブックマーク はてなブックマーク - 【主要機能2】カーソル位置への定型文挿入機能、を実装 - そっとなでしこ

 エディタ部品上のカーソル位置に定型文を挿入する処理を実装。

 実装する機能は、【主要機能2】の内、

  • カーソル位置に、画像表示用@wiki記法のテンプレートを挿入する
  • カーソル位置に、サムネイル画像表示用@wiki記法(blankimg)のテンプレートを挿入する

■ソースコード

#-----------------------------------------------------------------------
# GUI定義
#-----------------------------------------------------------------------
母艦のX=0
母艦のY=0
母艦のH=500
母艦のW=900

スレ引用ツールとはTエディタ
スレ引用ツールについて
 レイアウトは「全体」
 #ポップアップメニューは右クリックメニュー
 #左バーはオフ
 #ルーラーはオフ
 表示記号は「スペース{~}タブ{~}全角スペース{~}EOF{~}改行」
 折り返しは110
 オートインデントはオフ

# メニューバーの定義
「#親,部品名,テキスト,ショートカット,チェック,イベント
なし,ファイルメニュー,ファイル(&F)
-,出力メニュー,出力(&Q),Ctrl+Q,,出力処理
なし,編集メニュー,編集(&E)
-,AA記法挿入メニュー,AA記法挿入,F1,,AA記法挿入処理
-,画像記法挿入メニュー,画像記法挿入,F2,,画像記法挿入処理
-,サムネ画像記法挿入メニュー,サムネ画像記法挿入,F3,,サムネ画像記法挿入処理
-,-
-,文字装飾メニュー,文字装飾(&E),Ctrl+E,,文字装飾処理
」を、メニュー一括作成。
#-----------------------------------------------------------------------
# イベント処理
#-----------------------------------------------------------------------
スレ引用ツールのクリックした時は
 文字列選択状態別処理
スレ引用ツールのキー押した時は
 文字列選択状態別処理
#-----------------------------------------------------------------------
# 起動処理
#-----------------------------------------------------------------------
文字列選択状態別処理する。

#-----------------------------------------------------------------------
# 関数定義
#-----------------------------------------------------------------------
●文字列選択状態別処理
 もし、(スレ引用ツールの選択文字列)が「」ならば、
  画像記法挿入メニューの有効はオン。
  サムネ画像記法挿入メニューの有効はオン。
  AA記法挿入メニューの有効はオフ。
  文字装飾メニューの有効はオフ。
 違えば
  画像記法挿入メニューの有効はオフ。
  サムネ画像記法挿入メニューの有効はオフ。
  AA記法挿入メニューの有効はオン。
  文字装飾メニューの有効はオン。

●出力処理
 「エディタ上の文字列を出力変換処理をしてメモ記入する」と言う。

●AA記法挿入処理
 「選択した文字をAA記法で囲う」と言う。 

●画像記法挿入処理
 #「画像記法を挿入する」と言う。
 スレ引用ツールの選択文字列は、「#ref(【ファイル名】,【ページ名】,width=【幅】)」。

●サムネ画像記法挿入処理
 #「サムネ画像記法を挿入する」と言う。 
 スレ引用ツールの選択文字列は、「&blankimg(【ファイル名/URL】)←クリックで拡大表示」。

●文字装飾処理
 「選択した文字のサイズ・色を選択するフォームをポップアップする」と言う。

■コメント

■エディタ上のカーソル位置に文字列を挿入

 ググって、以下の記事が見つからなければ、自分には実装できなかったかも…orz

項目「選択文字列」に代入すると、カーソル位置に挿入されます。

エディタで文字列が選択状態の場合は、選択文字列との置き換えになります。

元の文字列を活かしたい場合は「選択文字列」を参照し、代入文字列に含めます。

●日本語プログラミング言語なでしこ 初心者掲示板 [One Message View / 選択文字列]

http://www.himanavi.net/cgi/nade-1st/cbbs.cgi?mode=one&number=3337&type=3331&space=15&no=0

 今回実装した機能は、エディタ上で文字列が選択状態の場合は無効になり呼び出されることは無いので、「元の文字列を活かしたい場合」を考慮する必要は無し。

■画像系の@wiki記法のパラメータ

 例えば、挿入される画像表示用@wiki記法のテンプレート。

#ref(【ファイル名】,【ページ名】,width=【幅】)

【】で囲まれている場所にはパラメータを指定する。

 このパラメータを入力するフォームを作った方が便利だろうかとも考えた。

 しかし、自作の不恰好なフォームでパラメータを入力するより、エディタ上で編集した方が作業効率が良いのでは、と考え却下した。

 ただし、今後実際に使い続けてみて、パラメータ入力フォームがあった方が作業が楽になるかも、と思う時がくれば、それが更なる機能改良の"母"になるかも。



【主要機能1】選択した文字列に対する変換機能、を実装

| 【主要機能1】選択した文字列に対する変換機能、を実装 - そっとなでしこ を含むブックマーク はてなブックマーク - 【主要機能1】選択した文字列に対する変換機能、を実装 - そっとなでしこ

 エディタ部品上で選択された文字列を加工して返す処理を実装。

 実装する機能は、【主要機能1】の内、

  • 選択した文字列を、アスキーアート表示用@wiki記法で囲む

 同じく【主要機能1】の

  • 選択した文字列を、指定した文字サイズ、文字色で装飾する@wiki記法で囲む

は、リストやボタンなど複数部品で構成される独自フォームを呼び出す比較的に複雑な機能なので、後回しw

■ソースコード

#-----------------------------------------------------------------------
# GUI定義
#-----------------------------------------------------------------------
母艦のX=0
母艦のY=0
母艦のH=500
母艦のW=900

スレ引用ツールとはTエディタ
スレ引用ツールについて
 レイアウトは「全体」
 #ポップアップメニューは右クリックメニュー
 #左バーはオフ
 #ルーラーはオフ
 表示記号は「スペース{~}タブ{~}全角スペース{~}EOF{~}改行」
 折り返しは110
 オートインデントはオフ

# メニューバーの定義
「#親,部品名,テキスト,ショートカット,チェック,イベント
なし,ファイルメニュー,ファイル(&F)
-,出力メニュー,出力(&Q),Ctrl+Q,,出力処理
なし,編集メニュー,編集(&E)
-,AA記法挿入メニュー,AA記法挿入,F1,,AA記法挿入処理
-,画像記法挿入メニュー,画像記法挿入,F2,,画像記法挿入処理
-,サムネ画像記法挿入メニュー,サムネ画像記法挿入,F3,,サムネ画像記法挿入処理
-,-
-,文字装飾メニュー,文字装飾(&E),Ctrl+E,,文字装飾処理
」を、メニュー一括作成。
#-----------------------------------------------------------------------
# イベント処理
#-----------------------------------------------------------------------
スレ引用ツールのクリックした時は
 文字列選択状態別処理
スレ引用ツールのキー押した時は
 文字列選択状態別処理
#-----------------------------------------------------------------------
# 起動処理
#-----------------------------------------------------------------------
文字列選択状態別処理する。

#-----------------------------------------------------------------------
# 関数定義
#-----------------------------------------------------------------------
●文字列選択状態別処理
 もし、(スレ引用ツールの選択文字列)が「」ならば、
  画像記法挿入メニューの有効はオン。
  サムネ画像記法挿入メニューの有効はオン。
  AA記法挿入メニューの有効はオフ。
  文字装飾メニューの有効はオフ。
 違えば
  画像記法挿入メニューの有効はオフ。
  サムネ画像記法挿入メニューの有効はオフ。
  AA記法挿入メニューの有効はオン。
  文字装飾メニューの有効はオン。

●出力処理
 「エディタ上の文字列を出力変換処理をしてメモ記入する」と言う。

●AA記法挿入処理
 #「選択した文字をAA記法で囲う」と言う。 
 処理済み文字列は、「#aa{波カッコ}{波カッコ}{波カッコ}{波カッコ}{~}」&
 「{スレ引用ツールの選択文字列}{~}」&
 「{波カッコ閉じ}{波カッコ閉じ}{波カッコ閉じ}{波カッコ閉じ}」。
 スレ引用ツールの選択文字列は、処理済み文字列。

●画像記法挿入処理
 「画像記法を挿入する」と言う。 

●サムネ画像記法挿入処理
 「サムネ画像記法を挿入する」と言う。 

●文字装飾処理
 「選択した文字のサイズ・色を選択するフォームをポップアップする」と言う。

■コメント

■アスキーアート表示用@wiki記法の中カッコが4重になっている理由

 アスキーアート表示用@wiki記法では、対象となるアスキーアート文字列を最低限一つの中カッコで囲えば足ります。

 ただし、対象のアスキーアート文字列に中カッコが含まれた場合には正しく動作しません。その場合は、囲む中カッコの数を増やします。

 例えば4重に囲んだ場合は、アスキーアート内に「{」「}」「{{」「}}」「{{{」「}}}」が含まれても正しく機能します。しかし「{{{{」「}}}}」が含まれる場合は、正しく機能しません。

 経験上、「{{{{」「}}}}」を含むアスキーアートに出会ったことが無いので、ここでは4重の中カッコで囲っています。



2ちゃんねるスレまとめツールのGUIをざっくり作る

| 2ちゃんねるスレまとめツールのGUIをざっくり作る - そっとなでしこ を含むブックマーク はてなブックマーク - 2ちゃんねるスレまとめツールのGUIをざっくり作る - そっとなでしこ

 必要はツールの母。

 そろそろ、2ちゃんねるの某アニメ作品のスレッドをまとめる作業に取り掛かろうと思うので、懸案のツールに着手。

 当初の計画に、

  • ツール起動時に、変換形式を、はてな記法と@wiki記法から選択できる

という仕様があるが、とりあえずは(極めて個人的にw)早急に必要な@wiki記法にのみ対応版を優先。

 主な機能は次の通り。

  • 【主要機能1】選択した文字列に対する変換機能
    • 選択した文字列を、指定した文字サイズ、文字色で装飾する@wiki記法で囲む
    • 選択した文字列を、アスキーアート表示用@wiki記法で囲む
  • 【主要機能2】カーソル位置への定型文挿入機能
    • カーソル位置に、画像表示用@wiki記法のテンプレートを挿入する
    • カーソル位置に、サムネイル画像表示用@wiki記法(blankimg)のテンプレートを挿入する
  • 【主要機能3】テキスト全体への一括変換機能
    • 行頭の「>」や「>」の前に全角空白を挿入(引用文の@wiki記法として誤認されることを防ぐ)
    • 行頭の半角空白の前に全角空白を挿入(整形済みテキストの@wiki記法として誤認されることを防ぐ)
    • レスのヘッダー行頭に、識別文字「▼」を挿入

 GUIはエディタ部品を母艦のレイアウト全体に指定。

 「メニュー一括作成」でウィンドウの上部にメニューバーを表示。メニューバーから、上記の【主要機能1】【主要機能2】を呼び出し、エディタ上のテキストを任意編集。

 編集終了後に、メニューバーから「出力」メニューを呼び出すと、【主要機能3】の一括変換処理が行われ、その結果を「メモ記入」して出力する。

…というイメージで、まずGUIを作ってみた。

■ソースコード

#-----------------------------------------------------------------------
# GUI定義
#-----------------------------------------------------------------------
母艦のX=0
母艦のY=0
母艦のH=500
母艦のW=900

スレ引用ツールとはTエディタ
スレ引用ツールについて
 レイアウトは「全体」
 #ポップアップメニューは右クリックメニュー
 #左バーはオフ
 #ルーラーはオフ
 表示記号は「スペース{~}タブ{~}全角スペース{~}EOF{~}改行」
 折り返しは110
 オートインデントはオフ

# メニューバーの定義
「#親,部品名,テキスト,ショートカット,チェック,イベント
なし,ファイルメニュー,ファイル(&F)
-,出力メニュー,出力(&Q),Ctrl+Q,,出力処理
なし,編集メニュー,編集(&E)
-,AA記法挿入メニュー,AA記法挿入,F1,,AA記法挿入処理
-,画像記法挿入メニュー,画像記法挿入,F2,,画像記法挿入処理
-,サムネ画像記法挿入メニュー,サムネ画像記法挿入,F3,,サムネ画像記法挿入処理
-,-
-,文字装飾メニュー,文字装飾(&E),Ctrl+E,,文字装飾処理
」を、メニュー一括作成。
#-----------------------------------------------------------------------
# イベント処理
#-----------------------------------------------------------------------
スレ引用ツールのクリックした時は
 文字列選択状態別処理
スレ引用ツールのキー押した時は
 文字列選択状態別処理
#-----------------------------------------------------------------------
# 起動処理
#-----------------------------------------------------------------------
文字列選択状態別処理する。

#-----------------------------------------------------------------------
# 関数定義
#-----------------------------------------------------------------------
●文字列選択状態別処理
 もし、(スレ引用ツールの選択文字列)が「」ならば、
  画像記法挿入メニューの有効はオン。
  サムネ画像記法挿入メニューの有効はオン。
  AA記法挿入メニューの有効はオフ。
  文字装飾メニューの有効はオフ。
 違えば
  画像記法挿入メニューの有効はオフ。
  サムネ画像記法挿入メニューの有効はオフ。
  AA記法挿入メニューの有効はオン。
  文字装飾メニューの有効はオン。

●出力処理
 「エディタ上の文字列を一括変換処理をしてメモ記入する」と言う。

●AA記法挿入処理
 「選択した文字をAA記法で囲う」と言う。 

●画像記法挿入処理
 「画像記法を挿入する」と言う。 

●サムネ画像記法挿入処理
 「サムネ画像記法を挿入する」と言う。 

●文字装飾処理
 「選択した文字のサイズ・色を選択するフォームをポップアップする」と言う。

■コメント

■Tエディタ

 今回のツールの主要部品であるエディタには、高機能な「Tエディタ」を選択。

 選択理由は、指定した文字数での自動折り返し表示がしたかったため。テキストの右端を見るために一々横スクロールするのは、使っていて絶対にイライラするだろうな、自分は。ということでw

 折り返しは、110バイト。全角で55文字。自分がまとめるスレのレスヘッダーが大体50文字前後なので、最低限その程度の横幅があれば見易いかなと。

 この折り返し文字数設定に合わせて、母艦の幅も指定。

■【主要機能1】【主要機能2】のメニューの有効/無効切替

 エディタ上で文字列が選択されているか否かで、【主要機能1】【主要機能2】のメニューの有効/無効を切り替えている。

 文字列が選択されている場合は、選択した文字列に対する変換機能である【主要機能1】の機能を有効にし、文字列を挿入する【主要機能2】は無効にしている。文字列が選択されていない場合は、その逆の動きになる。

 文字列が選択されているか否かをチェックするタイミングは、

  • ツール起動時
  • マウスのクリック時
  • キーボードの押下時
■「メニュー一括作成」のショートカットキー設定

 「メニュー一括作成」のショートカットキー設定は、プルダウンメニューを表示しなくても指定したショートカットキーから直接呼び出せて非常に便利、快適!

 ただし、「Ctrl+数字キー」(「Ctrl+1」etc)がショートカットキーに設定できないのはナゼ?(涙)

 調べても設定の仕方が分からなかったので、泣く泣くファンクションキー(「F1」etc)を指定。