コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

利用者:FeZn/Ware/Scripts

FeZnWareふぇずんうぇあ)とは、楽をするためには労力を惜しまないWikipedianであるFeZnが、少ない脳味噌を使って考案したツール群の総称である。このサブページ「/Scripts」には、不完全なスクリプト類が置かれている。

(ちなみにスクリプト類の名付け方がスミスっぽいのは秘密です)


はじめに

[編集]

Wikipeditorを作るまで、最近FeZnが使用していたのは以下のような組み合わせです。このセットでかなりの投稿をしてきました。

  1. タグ挿入型テキストエディタ。
    これは挿入型でなくてOKです。むしろWYSIWYGHTMLエディタのほうが、より良いかもしれません(ただし余分なマークアップが入るとも思いますが。このたびWikipeditorを作ってしまったので、このためにカスタマイズして機能を絞り込んだスクリプトにする必要があるかもしれません。
  2. 自作のsedスクリプト。
    sedを使うというのは実は同時にネックであり、自分がそうであったように、こういったツールに馴れていない人には敷居が高いのではないか、という問題があります。そのため、下記で解説してみました。

これでなにができるか

[編集]

この状態で打ったテキストが、以下にある手段を使うことで自動的にこの状態に仕上がります。ようするにテキストデータの整形ですね。

もうひとつ実例を。……このような変換ができます。

背景と経緯

[編集]

ブラウザ上で作業する場合、これらの手段はまったく役に立たないのですが、安全性という面だけから見ても、テキストエディタ上で作業することをおすすめします。さらに、これから提示する手段の導入によって、マークの使い方を気にすることが少なくなる、筈です。

さて、もともと、2バイト言語であるところの日本語環境では、マークアップと本文の入力で「半角/全角」ボタンを入力の前と後に1度ずつ押すとか、あるいは日本語モードで入力しつつF10キーを打鍵するなどの手段が必要でした。そこでFeZnは考えました。

  1. 文字列を選択してキーボードショートカットでマークアップできれば良いではないか。
  2. ついでに、自分がリンクしたいと思っているところに自動的に[[ ]]が入れば楽なこと、この上なし。初出だけにリンクされるようにすれば、既存の記事をエディタ上で変換するときに気軽に出来て素敵。

専用テキストエディタを作る前に、とりあえずFeZnは既存のツールを組み合わせてみました。

  1. まずはsedスクリプトを組んでみる。
    1. HTMLエディタで文章を書いて、マークアップをWikipedia用に一括変換。
      これはmark.sedとしていちおう完成。同時に、全角で書かれたマークアップも半角化。これによって、気楽な編集が可能に。
    2. 誤字脱字や機種依存文字の訂正。
      手持ちのスクリプトを調整して投入。hitton.sedと名付けましたが、どちらも長すぎなかったので分割せずmark.sedと統合してあります。これ、最初の計画には入っていませんでしたが、便利かもしれません。
    3. リンクを張りたい記事一覧をあらかじめリストアップしておき、自動的に初出だけに[[ ]]できるようにしたい……。
      suzdal.sedと名付けたこのスクリプトは頓挫。初出だけにという箇所がネックで、sedでは行単位での初出チェックは可能でも、ファイル単位では不可能な模様です。つまり、出てくるたびにリンクしてしまうという。 ……Perlスクリプトで解決しそうな気配ですので、これもどなたかにお願いしたいところです。
というわけで、一部機能は実現したわけです。次に、その使い方について見ていきましょう。

エディタの使い方

[編集]

お使いのHTMLエディタそのままで、基本的には良い筈です。もしどうしても余分なタグがついてしまう、ということでしたら、その部分を削除するスクリプトを追加しますのでノートにお願いします。

タグ挿入式HTMLエディタは、Google窓の杜、Vector検索するとそれなりに出てきます。現在FeZnは、へてむるらいた~を使っていますが、よりシンプルなツールのほうが良いかもしれません。

作業中のファイルは、とりあえずwork1.txtという名前にしておきましょう。(とは言え、Macで使う分には関係ないのですが)

sedの使い方

[編集]

まず、下にあるスクリプト実例mark.sedをコピーして、テキストファイルとして保存します。なお、作業ファイルはwork1.txtということにしておきます。

CUI環境の場合

[編集]

UNIXLinuxなどにおけるCUI環境に馴れていらっしゃる方には、扱いは簡単です。一例としては以下の通り。

sed -f mark.sed work1.txt > work1.new

Macintoshの場合

[編集]

Macintoshユーザーの方なら、話は簡単です。山下巌氏のサイトで、Macintosh用sedおよびインターフェイスアプリケーションが公開されており、GUIで操作できます。ファイル名や拡張子の制限がほとんど無いと言えますし、操作法も簡単です。インターフェイスは英語ですが……。※現在サイト閉鎖中のようです。

また、下記でWin用として紹介しているLigyWayTextはMacOS版もあり(というかMacが本流)、こちらもsedツールが使えるようです。

"Sed Mac"本体と、操作用の"Sed Mac Interfac"をダウンロードしてください。Sad Macっぽいキャラが可愛いアプリです。68kMac用ですが、PowerPCプロセッサ上で動作します。「scripts」フォルダにmark.sedを放り込めば、プルダウンメニューに出てくる筈です。出力先は「.new」にしておくほうが安全です。上書きせずに、新しいファイルに保存されます。「-n 出力抑制」は使いません。

※ただし、現在手元に電源の入れられるMacが無いので、Sed Macでこのスクリプトが使えるかは調査できていません。また、OS X環境も不明です。

Windowsの場合

[編集]
GUI環境で使う
[編集]

テキストエディタLightWayTextを使うのが便利です。Windows用としては初めて、GUIによるsedツールを実装したテキストエディタです。mark.sedを好きなところに保存しておいて、LighWay上のsedツールを起動し、スクリプトからの処理をおこないます。

LightWayでは、マウスで選択した範囲のみ処理する、といった芸当ができるので、きわめて便利です。
※LightWayでスクリプトエラーが出る場合は、エラーの出た行を削って処理してみてください。あるいは、CUI的な方法で試します。
バッチファイルを使う
[編集]

たとえばVectorのSed LOGOS版など、Windows用のsedを入手することができます。これらはコマンドラインで使うわけですが、CUIでの操作が出来なくても、おそれることはありません。以下の方法を用いれば、LightaWayでエラーが出るようなひねくれたスクリプトも、サクサクと処理できます。

  1. まず、ダウンロードして解凍したsed本体と、同じフォルダにmark.sedを置きます。
  2. さらにauto.txtというテキストファイルを作って、これも同じフォルダに置きます。
  3. auto.txtの中身は、以下の1行だけ。
    sed -f mark.sed work1.txt > work1.new
  4. で、auto.txtのファイル名をauto.batに変更します。
    「拡張子を変更すると~~云々」という警告が出ると思いますが、この場合は問題ありません。気に入らなければ戻せば良いだけですから。
    アイコンが「MS-DOSバッチファイル」に変わります。これが、CUIの入力を代行してくれるわけです。本来は複数のファイルへの処理を一括で行ったりするためのものですが、work1.txtという名前のファイルの中身を替えて何度も処理するので、この方法が便利なわけです。
  5. auto.batをダブルクリックします。
    1. MS-DOSプロンプト(Windows XPなどならコマンドプロンプト)が自動的に立ち上がって、なにやら一瞬で処理してくれます。
    2. 自動的にプロンプトが終了します。
    3. work1.newという新しいファイルが出来ています。.newというのは見慣れない拡張子ですが、中身はテキストファイルです。

これで仕上がったファイルを、テキストエディタで開けばできあがりです。

わけのわからない拡張子がイヤだ、という場合には、バッチファイルの中身をsed -f mark.sed work1.txt > work2.txtにしておくと、出来上がりがwork2.txtという名前のファイルになります。

ユーザーサポート

[編集]

もしあなたがこのページの目次を見て、「お、サポートがあるのか」と期待してクリックされたならば、その期待を裏切らなければならないことを心苦しく思います。FeZnWareにおけるユーザーサポートとは、ユーザーサポートするという言語道断なシステムです。しかしそれこそWikipediaであると思って納得してください。いや本当に。

掲載したスクリプトは、それなりに動作試験はしていますが、あくまでもFeZnが書いてみた範囲で問題が無かっただけで、ある特定の文字の組み合わせによる文章の場合にとんでもない処理結果を出すかもしれません。

ですから、掲載のスクリプトをガリガリ書き換えて改善してくださることを期待しております。

が、エラーレポートがございましたら、このページのノートに、異常の出た箇所とともに書き込んで書き込んでください。ある程度ならFeZnの力でもバグフィックスできると思います。

「こういった機能が欲しい」というご要望については、対応できるかどうかについてはあまり自信ありません。もとより「穴を埋める」スクリプトですから……。

課題

[編集]
  1. やはり初出チェッカーが欲しいです。そうすれば、リンク化作業すらほとんど自動的にできますから。(ただし一般語にリンクしてしまわないように注意が必要)
    ……それがあると本業のほうも楽になるのでいつか挑戦したいですが、むしろ今すでにそのスキルをお持ちの方にお願いしたいところです。
  2. HTML→Wikipediaマークアップへの、より良い変換ルールはないか。
  3. 表組みの自動化
    (これは下記の理由から不要かもしれませんが、タブ区切りテキストを表組にできれば、Microsoft Excelなどのアプリケーションで作った表を、無用なタグを噛まさずに綺麗なHTMLにできます。
    sedスクリプトには機種依存文字チェックなどを一括して実行できるなどの強みもあるので、専用ブラウザにに取り込まれる形がよいのかな……と考えたりします。Wikipeditorに内蔵できると良いのですが。


スクリプト実例

[編集]

Mark.sed

[編集]
#-------------マークアップアシスタント Mark.sed-------------#
#◆冒頭(項目名)&読みの太字化
#一行目だけに適用されるので、空白行が冒頭にあると作動しない。読みを太字化しないならば、スクリプトを修正する。
1s/^\(.+\)[((]\(.+\)[))][  ]/\1\2)/g
s/'//g
#◆ミスの補正
#リンク内の丸パーレン&スペースは半角に。
s/\[\[\(.+\)[  ]*[((]\(.+\)[))]\]\]/\1 (\2)/g
#2バイトで入力されたマークアップ用の記号を1バイトに。
s/^###[  ]/###:/g
s/^##[  ]/##:/g
s/^#[  ]/#:/g
s/^###/###/g
s/^##/##/g
s/^#/#/g
s/^***[::]/***:/g
s/^**[::]/**:/g
s/^*[::]/*:/g
s/^***/***/g
s/^**/**/g
s/^*/*/g
s/^\([ #\*]*\):::/\1:::/g
s/^\([ #\*]*\)::/\1::/g
s/^\([ #\*]*\):/\1:/g
s/======/======/g
s/=====/=====/g
s/====/====/g
s/===/===/g
s/==/==/g
s/^=/=/g
#↑本文の「=」が半角化しないように、行頭のみに限定。
#◆HTMLマークアップをWikipediaマークアップに変換◆
#これにより、タグ挿入型HTMLエディタで記事を編集・加筆し、変換できる。
s/<\/*[iI]>//g
s/<\/*[bB]>//g
s/<[hH][rR]>/----/g
#リンクに関しては、アンダーライン(Uタグ)で入力しておくこととする。
s/<[uU]>/[[/g
s/<\/[uU]>/]]/g
#現時点、取消線の タグを とする。
#(より良いアイディア有りませんか?)
s/<[sS]>//g
 s/<\/[sS]>/<\/nowiki>/g
 #s//\n/g
 #↑タグを改行コードに変換。OS(というより改行コード)によっては\nを\rにしないと動作しない。現時点オフなので、使いたい場合には行頭の「#」(「命令を読み込まない」コード)を削除。
 #◆段落の入力補助◆
 #使用頻度の高い「==」を標準とする。行頭にのみ入れればOK。
 #再読込時のエラー防止。
 s/ *\([=]+\) */\1/g
 #行末の「=」を消しておく。
 s/=+$//g
 #イコールで挟む。
 s/^======\([^=].+\)$/====== \1 ======/g
 s/^=====\([^=].+\)$/===== \1 =====/g
 s/^====\([^=].+\)$/==== \1 ====/g
 s/^===\([^=].+\)$/=== \1 ===/g
 s/^==\([^=].+\)$/== \1 ==/g
 s/^=\([^=].+\)$/= \1 =/g
 #◆字下げ◆
 #行頭に全角空白を持つ行は、個数に応じて字下げ。 ←2004.04.13.やはり廃止。
 #(行頭一字下げをするなら、この節は行頭に「#」を入れることでオフにする)
 #s/^    \([^ ].+\)/::::\1/g
 #s/^   \([^ ].+\)/:::\1/g
 #s/^  \([^ ].+\)/::\1/g
 #s/^ \([^ ].+\)/:\1/g


=== Hitton.sed ===
:※上の操作法解説では、<TT>mark.sed</TT>と結合して使用している。
 #-----------------表記統一 hitton.sed-----------------#
 #◆日本語としての表記統一◆
 #句読点を,.から、。に戻す。
 y/,./、。/
 #三点リーダの補正
 #(通常の組版ルールでは二つずつ入れるので)
 s/・・・/……/g
 s/・・・・/……/g
 s/‥‥/……/g
 s/・・・/……/g
 s/…/……/g
 s/…+/……/g
 s/‥+/……/g
 #和文・欧文で共通の記号は半角化(丸パーレン以外)
 y/?!/?!/
 y/{}[]〈〉/{}[]<>/
 y/+-=#$%&¥*@/+-=#$%&\\\*@/
 #2バイト英数を1バイトに
 y/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/
 y/0123456789/0123456789/
 #◆データ整形◆
 # Windows機種依存文字を日本語文字セット互換に。
 #○つき数字
 y/①②③④⑤⑥⑦⑧⑨/123456789/
 s/⑩/10/g
 s/⑪/11/g
 s/⑫/12/g
 s/⑬/13/g
 s/⑭/14/g
 s/⑮/15/g
 s/⑯/16/g
 s/⑰/17/g
 s/⑱/18/g
 s/⑲/19/g
 s/⑳/20/g
 #ローマ数字
 s/Ⅰ/I/g
 s/Ⅱ/II/g
 s/Ⅲ/III/g
 s/Ⅳ/IV/g
 s/Ⅴ/V/g
 s/Ⅵ/VI/g
 s/Ⅶ/VII/g
 s/Ⅷ/VIII/g
 s/Ⅸ/IX/g
 s/Ⅹ/X/g
 s/ⅰ/i/g
 s/ⅱ/ii/g
 s/ⅲ/iii/g
 s/ⅳ/iv/g
 s/ⅴ/v/g
 s/ⅵ/iv/g
 s/ⅶ/vii/g
 s/ⅷ/viii/g
 s/ⅸ/ix/g
 s/ⅹ/x/g
 #記号類 全角
 s/㈱/(株)/g
 s/㈲/(有)/g
 s/㈹/(代)/g
 s/㊤/○上/g
 s/㊥/○中/g
 s/㊦/○下/g
 s/㊧/○左/g
 s/㊨/○右/g
 #単位関係
 s/㍉/ミリ/g
 s/㌢/センチ/g
 s/㌔/キロ/g
 s/㍍/メートル/g
 s/㌃/アール/g
 s/㌶/ヘクタール/g
 s/㌘/グラム/g
 s/㌧/トン/g
 s/㌫/パーセント/g
 s/㍊/ミリバール/g
 s/㍑/リットル/g
 s/㌍/カロリー/g
 s/㍗/ワット/g
 s/㌻/ページ/g
 s/㌣/セント/g
 s/㌦/ドル/g
 s/㎜/mm/g
 s/㎝/cm/g
 s/㎞/km/g
 s/㎡/m^2/g
 s/㎎/mg/g
 s/㎏/kg/g
 s/㏄/cc/g
 #↓ここから下は、いわゆる「半角カナ」なので、ウェブに掲載した場合、表示環境によっては正しく表示されない可能性がある。
 #カナをカナにする。
 y/。、ー・「」/。、ー・「」/
 s/ガ/ガ/g
 s/ギ/ギ/g
 s/グ/グ/g
 s/ゲ/ゲ/g
 s/ゴ/ゴ/g
 s/ザ/ザ/g
 s/ジ/ジ/g
 s/ズ/ズ/g
 s/ゼ/ゼ/g
 s/ゾ/ゾ/g
 s/ダ/ダ/g
 s/ヂ/ヂ/g
 s/ヅ/ヅ/g
 s/デ/デ/g
 s/ド/ド/g
 s/バ/バ/g
 s/ビ/ビ/g
 s/ブ/ブ/g
 s/ベ/ベ/g
 s/ボ/ボ/g
 s/パ/パ/g
 s/ピ/ピ/g
 s/プ/プ/g
 s/ペ/ペ/g
 s/ポ/ポ/g
 y/ァィゥェォャュョッ/ァィゥェォャュョッ/
 y/アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン/アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン/
 #y/゙/゛/
 #↑現時点、なぜかうまく作動しない。