Hatena::Groupnadesiko

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


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


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


2010-07-17

「2ちゃんねるスレまとめツール」、ちょっと修正

| 「2ちゃんねるスレまとめツール」、ちょっと修正 - そっとなでしこ を含むブックマーク はてなブックマーク - 「2ちゃんねるスレまとめツール」、ちょっと修正 - そっとなでしこ

 昨夜、色々と問題点を残しつつ、いちおう「完成」としたツール。

 ちょっと使ってみたら、細かな問題が見つかったので数箇所を修正。ついでに懸案の「アスキーアート行頭の半角空白の扱い」問題にも対応。

 修正内容は以下の通り

  • アスキーアート表示用の@wiki記法で囲まれている行は一括置換処理の対象外に
  • 引用テキスト全体(アスキーアート行も含め)の行頭に引用表示用@wiki記法を挿入
  • アスキーアート表示用の@wiki記法の文字列は、プログラム内の複数箇所で使用するため、定数で宣言
  • 選択した文字列をアスキーアート表示用@wiki記法で囲む際、アスキーアート表示用@wiki記法の開始記述の直後には(見易さのため)改行を入れる

■ソースコード

#-----------------------------------------------------------------------
# 定数定義
#-----------------------------------------------------------------------
!AA記法開始文字列=「#aa{波カッコ}{波カッコ}{波カッコ}{波カッコ}」
!AA記法終了文字列=「{波カッコ閉じ}{波カッコ閉じ}{波カッコ閉じ}{波カッコ閉じ}」

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

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

# メニューの定義
#-----------------------------------------------------------------------
「#親,部品名,テキスト,ショートカット,チェック,イベント
なし,ファイルメニュー,ファイル(&F)
-,出力メニュー,出力(&Q),Ctrl+Q,,出力処理
なし,編集メニュー,編集(&E)
-,AA記法挿入メニュー,AA記法挿入,F1,,AA記法挿入処理
-,画像記法挿入メニュー,画像記法挿入,F2,,画像記法挿入処理
-,サムネ画像記法挿入メニュー,サムネ画像記法挿入,F3,,サムネ画像記法挿入処理
-,-
-,太字化メニュー,太字化,F4,,太字化処理
-,斜体化メニュー,斜体化,F5,,斜体化処理
-,文字装飾メニュー,文字装飾(&E),Ctrl+E,,文字装飾処理
」を、メニュー一括作成。

# 自作フォームの定義
#-----------------------------------------------------------------------
文字装飾フォームとはフォーム
そのタイトルは「文字装飾」

文字サイズリストとはリスト。
その親部品は文字装飾フォーム。
そのアイテムは「4{~}5{~}6{~}7」。
文字サイズリストの値は0。

文字色リストとはリスト。
その親部品は文字装飾フォーム。
そのアイテムは「black{~}red{~}blue{~}green」
文字色リストの値は0。

選択ボタンとはボタン。
その親部品は文字装飾フォーム。
選択ボタンをクリックした時は
 スレ引用ツールの選択文字列は、
 「&sizex({文字サイズリストのテキスト}){波カッコ}」&
 「&color({文字色リストのテキスト}){波カッコ}」&
 「{スレ引用ツールの選択文字列}{波カッコ閉じ}{波カッコ閉じ}」。
 文字装飾フォームを閉じる。

キャンセルボタンとはボタン。
その親部品は文字装飾フォーム。
キャンセルボタンをクリックした時は
 文字装飾フォームを閉じる。

#-----------------------------------------------------------------------
# イベント処理
#-----------------------------------------------------------------------
スレ引用ツールのクリックした時は
 文字列選択状態別処理
スレ引用ツールのキー押した時は
 文字列選択状態別処理

#-----------------------------------------------------------------------
# 起動処理
#-----------------------------------------------------------------------
文字列選択状態別処理する。
母艦のタイトルは「2ch引用ツール」。

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

●出力処理
 出力文字は、「」。
 AA記法フラグは、いいえ。
 スレ引用ツールのテキストを反復
  一行テキストは、それ。
  AA記法フラグは、AA記法フラグを一行テキストでAA記法開始チェック。
  もし、AA記法フラグがいいえならば
   一行テキストは、一行テキストを出力変換処理。
  ここまで。
  出力文字は、「{出力文字}{一行テキスト}{~}」。
  AA記法フラグは、AA記法フラグを一行テキストでAA記法終了チェック。
 ここまで
 # 全行頭に引用記法「>」を挿入
 出力文字は、出力文字の「^」を「>」へ正規表現置換。
 出力文字をメモ記入。
 出力文字は、それ。
 もし、出力文字が「」でないならば
  出力文字をコピー。

●AA記法開始チェック(フラグを、対象文字列で)
 もし、フラグがいいえならば
  もし、(対象文字列が「{AA記法開始文字列}」に正規表現一致)ならば
   フラグは、はい。
  ここまで
 ここまで
 フラグで戻る。

●AA記法終了チェック(フラグを、対象文字列で)
 もし、フラグがはいならば
  もし、(対象文字列が「{AA記法終了文字列}」に正規表現一致)ならば
   フラグは、いいえ。
  ここまで
 ここまで
 フラグで戻る。

●出力変換処理(対象文字列を)
 # レスのヘッダー行頭に、識別文字「▼」を挿入
 対象文字列は、対象文字列の「^(\d+ 名前:)」を「▼$1」へ正規表現置換。
 # 行頭の「>」や「>」の前に全角空白を挿入
 対象文字列は、対象文字列の「^([>>])」を「 $1」へ正規表現置換。
 # 行頭の半角空白の前に全角空白を挿入
 対象文字列は、対象文字列の「^( )」を「 $1」へ正規表現置換。
 対象文字列で戻る。

●AA記法挿入処理
 処理済み文字列は、「{AA記法開始文字列}{~}」&
 「{スレ引用ツールの選択文字列}{~}」&
 「{AA記法終了文字列}」。
 スレ引用ツールの選択文字列は、処理済み文字列。

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

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

●太字化処理
 処理済み文字列は、「&b(){波カッコ}」&
 「{スレ引用ツールの選択文字列}{波カッコ閉じ}」。
 スレ引用ツールの選択文字列は、処理済み文字列。

●斜体化処理
 処理済み文字列は、「&i(){波カッコ}」&
 「{スレ引用ツールの選択文字列}{波カッコ閉じ}」。
 スレ引用ツールの選択文字列は、処理済み文字列。

●文字装飾処理
 文字サイズリストの値は0。
 文字色リストの値は0。
 文字装飾フォームをモーダル表示。

2010-07-16

「2ちゃんねるスレまとめツール」、とりあえず完成

| 「2ちゃんねるスレまとめツール」、とりあえず完成 - そっとなでしこ を含むブックマーク はてなブックマーク - 「2ちゃんねるスレまとめツール」、とりあえず完成 - そっとなでしこ

 以下の流れの果て、なんとか形になりました。(相変わらず、既に問題点も出ていたりしますがw)

 また、「【主要機能1】選択した文字列に対する変換機能」に、最初の予定には無かった以下の機能を追加しました。

  • 選択した文字列を、太字表示する@wiki記法で囲む
  • 選択した文字列を、斜体表示する@wiki記法で囲む

 使いながら、必要だと思った機能を比較的簡単に追加できるのも、なでしこの良さだなぁと実感。

【追記】さっそく修正しました

■ソースコード

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

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

# メニューの定義
#-----------------------------------------------------------------------
「#親,部品名,テキスト,ショートカット,チェック,イベント
なし,ファイルメニュー,ファイル(&F)
-,出力メニュー,出力(&Q),Ctrl+Q,,出力処理
なし,編集メニュー,編集(&E)
-,AA記法挿入メニュー,AA記法挿入,F1,,AA記法挿入処理
-,画像記法挿入メニュー,画像記法挿入,F2,,画像記法挿入処理
-,サムネ画像記法挿入メニュー,サムネ画像記法挿入,F3,,サムネ画像記法挿入処理
-,-
-,太字化メニュー,太字化,F4,,太字化処理
-,斜体化メニュー,斜体化,F5,,斜体化処理
-,文字装飾メニュー,文字装飾(&E),Ctrl+E,,文字装飾処理
」を、メニュー一括作成。

# 自作フォームの定義
#-----------------------------------------------------------------------
文字装飾フォームとはフォーム
そのタイトルは「文字装飾」

文字サイズリストとはリスト。
その親部品は文字装飾フォーム。
そのアイテムは「4{~}5{~}6{~}7」。
文字サイズリストの値は0。

文字色リストとはリスト。
その親部品は文字装飾フォーム。
そのアイテムは「black{~}red{~}blue{~}green」
文字色リストの値は0。

選択ボタンとはボタン。
その親部品は文字装飾フォーム。
選択ボタンをクリックした時は
 スレ引用ツールの選択文字列は、
 「&sizex({文字サイズリストのテキスト}){波カッコ}」&
 「&color({文字色リストのテキスト}){波カッコ}」&
 「{スレ引用ツールの選択文字列}{波カッコ閉じ}{波カッコ閉じ}」。
 文字装飾フォームを閉じる。

キャンセルボタンとはボタン。
その親部品は文字装飾フォーム。
キャンセルボタンをクリックした時は
 文字装飾フォームを閉じる。

#-----------------------------------------------------------------------
# イベント処理
#-----------------------------------------------------------------------
スレ引用ツールのクリックした時は
 文字列選択状態別処理
スレ引用ツールのキー押した時は
 文字列選択状態別処理
#-----------------------------------------------------------------------
# 起動処理
#-----------------------------------------------------------------------
文字列選択状態別処理する。
母艦のタイトルは「2ch引用ツール」。


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

●出力処理
 出力文字は、(スレ引用ツールのテキスト)を出力変換処理。
 出力文字をメモ記入。
 出力文字は、それ。
 もし、出力文字が「」でないならば
  出力文字をコピー。

●出力変換処理(対象文字列を)
 # レスのヘッダー行頭に、識別文字「▼」を挿入
 対象文字列は、対象文字列の「^(\d+ 名前:)」を「▼$1」へ正規表現置換。
 # 行頭の「>」や「>」の前に全角空白を挿入
 対象文字列は、対象文字列の「^([>>])」を「 $1」へ正規表現置換。
 # 行頭の半角空白の前に全角空白を挿入
 対象文字列は、対象文字列の「^( )」を「 $1」へ正規表現置換。
 対象文字列で戻る。

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

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

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

●太字化処理
 処理済み文字列は、「&b(){波カッコ}」&
 「{スレ引用ツールの選択文字列}{波カッコ閉じ}」。
 スレ引用ツールの選択文字列は、処理済み文字列。

●斜体化処理
 処理済み文字列は、「&i(){波カッコ}」&
 「{スレ引用ツールの選択文字列}{波カッコ閉じ}」。
 スレ引用ツールの選択文字列は、処理済み文字列。

●文字装飾処理
 文字サイズリストの値は0。
 文字色リストの値は0。
 文字装飾フォームをモーダル表示。


■コメント

■問題点~アスキーアート行頭の半角空白の扱い~

 以下の処理に問題点があることが判明。

  • 【主要機能3】テキスト全体への一括変換機能
    • 行頭の「>」や「>」の前に全角空白を挿入(引用文の@wiki記法として誤認されることを防ぐ)
    • 行頭の半角空白の前に全角空白を挿入(整形済みテキストの@wiki記法として誤認されることを防ぐ)

 現在、エディタ上のテキスト全体を対象に正規表現置換をしていますが、アスキーアートを引用する場合、そのアスキーアートの行頭に「>」や「>」、半角空白があると全角空白が挿入されてしまい、アスキーアートが崩れてしまうワケです。

 考えられる改善策は、アスキーアート表示用の@wiki記法で囲まれている行はこの一括置換処理の対象外にする、というチェックを入れること。これを実装するには、対象のテキストをループさせ1行1行読み込む形に変更かな。で、ループ内にアスキーアート表示用の@wiki記法の開始タグと終了タグをチェックする「門番」を置くと…

 サクっと書けそうだけれど、今モチベーションメーターの針が低いので、実際に困った目に会ってやる気が溜まるの待ちw

■はてなダイアリー向けの機能拡張

 これもモチベーションゲージが溜まるの待ち。最近、自分のはてなダイアリーで2ちゃんねるからの引用ってやらないしなぁ。

 機能拡張する場合は、「つぶやき引用ツール」のように、「@wiki記法」グループと、「はてな記法」グループに分けて整理して実装する予定。

2010-07-15

リストやボタンなど複数部品で構成される独自フォーム、を実装

| リストやボタンなど複数部品で構成される独自フォーム、を実装 - そっとなでしこ を含むブックマーク はてなブックマーク - リストやボタンなど複数部品で構成される独自フォーム、を実装 - そっとなでしこ

 以下のGUI部品から構成されるフォームを実装。

  • リスト部品
    • 文字サイズリスト
      • 4~7の整数から選択するリスト
      • 初期値は4
    • 文字色リスト
      • 文字列「black、red、blue、green」の中から選択するリスト
      • 初期値は「black」
  • ボタン部品
    • 選択ボタン
      • 押下すると、文字サイズリストおよび文字色リストの選択テキストと、エディタ上の選択文字列とを整形した文字列で、エディタ上の選択文字列を置換する。
      • フォームを閉じる
    • キャンセルボタン
      • フォームを閉じる

■ソースコード

#-----------------------------------------------------------------------
# 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,,文字装飾処理
」を、メニュー一括作成。

# 自作フォームの定義
文字装飾フォームとはフォーム
そのタイトルは「文字装飾」

文字サイズリストとはリスト。
その親部品は文字装飾フォーム。
そのアイテムは「4{~}5{~}6{~}7」。

文字色リストとはリスト。
その親部品は文字装飾フォーム。
そのアイテムは「black{~}red{~}blue{~}green」

選択ボタンとはボタン。
その親部品は文字装飾フォーム。
選択ボタンをクリックした時は
 スレ引用ツールの選択文字列は、
 「&sizex({文字サイズリストのテキスト}){波カッコ}」&
 「&color({文字色リストのテキスト}){波カッコ}」&
 「{スレ引用ツールの選択文字列}{波カッコ閉じ}{波カッコ閉じ}」。
 文字装飾フォームを閉じる。

キャンセルボタンとはボタン。
その親部品は文字装飾フォーム。
キャンセルボタンをクリックした時は
 文字装飾フォームを閉じる。


#-----------------------------------------------------------------------
# イベント処理
#-----------------------------------------------------------------------
スレ引用ツールのクリックした時は
 文字列選択状態別処理
スレ引用ツールのキー押した時は
 文字列選択状態別処理
#-----------------------------------------------------------------------
# 起動処理
#-----------------------------------------------------------------------
文字列選択状態別処理する。
母艦のタイトルは「2ch引用ツール」。


#-----------------------------------------------------------------------
# 関数定義
#-----------------------------------------------------------------------

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

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

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

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

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

●文字装飾処理
 #「選択した文字のサイズ・色を選択するフォームをポップアップする」と言う。
 文字サイズリストの値は0。
 文字色リストの値は0。
 文字装飾フォームをモーダル表示。

■コメント

■複数のGUI部品から構成されるフォーム

 上記のソースでは、ベースとなるフォームとして「文字装飾フォーム」を定義しています。

 このフォームの上にリスト部品やボタン部品を配置するには、それぞれの部品定義で「親部品」として「文字装飾フォーム」を指定すればOK。

 出来ればフォーム上の部品配置も細かく位置指定したり、レイアウトに凝るべきなのだろうけれど、とりあえず自分で作って自分で使うツールなので、今回はノータッチ。今後の課題ということで。

■フォームのポップアップ表示

 「文字装飾フォーム」を母艦からポップアップ表示するために、呼び出し元の「文字装飾処理」関数では、「モーダル表示」関数を使って「文字装飾フォーム」を呼び出しています。

■リストの初期値

 リストの項目には、0から順番に値が振られています。逆に、この値を指定することでリスト内の任意の項目を選択状態にすることができるようです。

 例えば、リスト内の1番目の項目を選択状態にしたい場合は、そのリストの値に0を代入します。

■文字列のサイズや色を指定する@wiki記法

 今回実装した機能で出力する@wiki記法文字列については、以下のリンク先を参照のこと。

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)を指定。