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 />
などの空要素に使用すると「/
」と「>
」の間に属性が挿入されるバグを修正。