
ihtml は、「ISO-HTML又はXHTML 1.1の文書を作るのにちょっと便利な小物」を目指して製作してゐる、xyzzyで動くLISPです。
β版です。恐らくファイルを破壊することは無いと思ひますが、自己責任で。無限ループに陥ったらC-g (Ctrl + g)でquitしてください。
書庫に含まれる全てのファイルに於いて、私、空拇が作った部分は、著作権抛棄とします。自由に変更・転載してください。(CC0です)
License: CC0 (Please feel free to reproduce or edit, except quotation.)
xyzzy を導入し、 site-lisp/ に ihtml.l (.lc) と html+-mode-u.l (.lc) を置いた後、次のどちらかのコードを .xyzzy 又は siteinit.l に追記してください。
(pushnew '("\\.s?html?$" . ihtml-mode) *auto-mode-alist* :test 'equal)(in-package "editor")
(export 'ed::html+-mode "ed")
;(autoload 'html+-mode "html+-mode" t)
(autoload 'html+-mode "html+-mode-u" t)
(pushnew '("\\.s?html?$" . html+-mode) *auto-mode-alist* :test 'equal)
(in-package "user")siteinit.lに追記した場合は、siteinit.lをバイトコンパイルし直して、xyzzyのダンプファイルを再生成(Ctrl+Shiftを押しながら起動)してください。
オプションとして、ISO-HTMLではなくXHTML 1.1のマークアップをする場合は、更に次のコードも追加してください。
(setq *ihtml-xhtml11* t)
また、ポップアップ(右クリック)メニューを追加するには、.xyzzy に次のコードを追記してください。(siteinit.l への追記はエラーになるので不可です)
(require "ihtml-menu")
インライン要素: 文字列を範囲選択してから、キー操作又は右クリック操作でマークアップします。<img>などの空要素は、範囲選択は不要で、そのままカーソル位置に挿入できます。
ブロック・リスト要素: マークアップ操作を行ふと、カーソルが行末に無くても、その行全体がマークアップされ、次の行に移ります。
次に、ihtml特有の機能について述べます。
<a href="...">が相対パスで生成されます。*.png等、*ihtml-img-extensions*で判断)をドロップすると、<img>が挿入されます。その際、alt文字列の入力を促されます。<h2>がある時にC-+を押すと、その行が<h3>でマークアップされます。<p>でマークアップします。<li>でマークアップします。<br>を挿入しつつ改行します。class、id、title属性を一括で修正できます。右クリックメニューから「Attributes」⇒「core」と選んでも同じです。<>&"」の4文字がそれぞれ「<>&"」に変ります。「unescape」は逆の動作です。<ins>と<del>はdatetime属性を自動で振ります。dir、rel)では補完が効きます。<br />といった形で挿入されます。idの駄目文字判定(最初の文字に数字は許されない等)は未実装です。*ihtml-imgs*を*ihtml-img-extensions*に改名。(中身は同じ)*ihtml-xhtml11*のtとnilを切り替へる函数ihtml-toggle-xhtml11を追加。ihtml-markup-line: *ihtml-line-break*がnilの時は、改行しないで次の行に移る様にした。(HTML化する前のテキストを、行ごとにマークアップする時に便利)*ihtml-line-break*のtとnilを切り替へる函数ihtml-toggle-line-breakを追加。ihtml-comment: 選択範囲内に「<!--」「-->」がある場合は全部削除し、一つもない場合は選択範囲をコメント化する様に挙動を変更。(選択範囲が無い場合は今までと同じ挙動)ihtml-completing-markup: *ihtml-xhtml11*がtの時は、XHTML 1.1の要素を補完する様にした。*ihtml-tags*: <fieldset>が抜けてゐたので追加。ihtml-markup、ihtml-markup-empty: 属性リストattrの属性リスト値にnilが与へられた時は、HTML属性値を省略する様にした。例: (ihtml-markup-empty "input" '("type" "checkbox" "checked" nil)) => <input type="checkbox" checked>ihtml-set-attribute: 補完入力も可能な様に改造。ihtml-attr-bdoで使用。ihtml-escape、ihtml-unescape: nilを受け取ると、エラーではなくnilを返す様に変更。(ihtml-markupの(mapcar #'ihtml-auto-escape attr)で、attrの属性リスト値がnilでもエラーにならない様に)ihtml-defun-markup-selectionなど: docstringを入力できる様に改良。ihtml-a: 挙動をihtml-a-globalからihtml-a-local相当に修正。ihtml-br、ihtml-hr: ブロック要素と同じ挙動に変更。ihtml-markup-line: 引数tagを受け付ける様に変更。ihtml-a-fragment: 追加。文書内のid属性値を抽出して<a href="#...">を生成。ihtml-aをihtml-a-localとihtml-a-globalに分離。ihtml-a: 挙動をihtml-a-localからihtml-a-global相当に戻し、デフォルトの挙動を切り替へる変数*ihtml-a-local*を追加。ihtml-string-to-uri: si::www-url-encodeを適用するかを選択する変数*ihtml-string-to-uri-escape*を追加。ihtml-meta: 新しく追加。http-equivの属性値を*ihtml-meta-http-equiv*に従って補完入力可能(*ihtml-meta-name*も同様)。ポップアップメニューのOthersにも<link>、<meta>を追加。ihtml-defun-markup-line、ihtml-implied-attr: 新しく追加。コードを短く書くためのマクロ。ihtml-object: 誤って空要素扱ひにしてゐて、終了タグが挿入されなかったバグを修正。ihtml-set-attribute: XHTML 1.1モードの時、<hr />などの空要素に使用すると「/」と「>」の間に属性が挿入されるバグを修正。