xml-mode の CraftLaunchEx 用キーワード定義

以下の環境で動作確認しました。

xml-modeCraftLaunchEx のコマンド定義ファイル command.xml の要素/属性名に色をつけたり、補完できるようにします。
キーワード定義は CraftLaunchEx 0.991 のものです。

コード

(in-package "xml")

(defvar *xml-mode-craftlaunchex-suffix* nil)

(defvar *xml-mode-craftlaunchex-keyword-list*
  '((t
     "craftlaunch"
     "command-group"
     "shellexec"
     "activate"
     "activate-or-shellexec"
     "url"
     "script"
     "switch"
     "@name"
     "@verb"
     "@file"
     "@param"
     "@directory"
     "@swmode"
     "@window-class"
     "@window-class-re"
     "@window-title"
     "@window-title-re"
     "@url"
     "@encoding"
     "@paramlist"
     "@format"
     "@mod"
     )))

(defvar *xml-mode-craftlaunchex-guess-list*
  (let ((cmdelmlst '("shellexec" "activate" "activate-or-shellexec" "url"
                     "script" "switch"
                     )))
    (list (cons ""
                '("craftlaunch"))
          (cons "command-group"
                cmdelmlst)
          (cons "switch"
                (remove "switch" cmdelmlst :test #'string=))
          )))

(pushnew (list "CraftLaunchEx"
               nil
               nil
               nil
               nil
               nil
               *xml-mode-craftlaunchex-keyword-list*
               *xml-mode-craftlaunchex-guess-list*)
         *xml-doctypes*
         :test #'equal)

(in-package "user")

設定例

*xml-mode-craftlaunchex-suffix* に command.xml のパスの正規表現をセットして、*xml-auto-doctype-alist* と *auto-mode-alist* に push します。

(setq xml::*xml-mode-craftlaunchex-suffix*
      (concat "^"
              (regexp-quote (merge-pathnames "../CLNCHEX/command.xml"
                                             (si:system-root)))
              "$"))
(pushnew (list xml::*xml-mode-craftlaunchex-suffix* nil "CraftLaunchEx")
         *xml-auto-doctype-alist*
         :test #'equal)
(pushnew (cons xml::*xml-mode-craftlaunchex-suffix* 'xml-mode)
         *auto-mode-alist*
         :test 'equal)