2013年3月3日日曜日

[Emacs]psgml モード (SGML 入力支援 lisp)

インストール
  1. A GNU Emacs mode for SGML files から stable バージョンをダウンロードする (2009/5/15 時点 version 1.2.5)
  2. 解凍したディレクトリを emacs/site-lisp 以下に置く
  3. .emacs に以下を追記
    ;;; ===== PSGML =====
    (autoload 'sgml-mode "psgml" "Major mode to edit SGML files." t)
    (autoload 'xml-mode "psgml" "Major mode to edit XML files." t)
    (setq auto-mode-alist
        (append (list (cons "\\.xml\\'" 'xml-mode))
            auto-mode-alist))
    (setq sgml-catalog-files '("CATALOG" "C:/usr/emacs/site-lisp/psgml-1.2.5/catalog"))
    (setq sgml-ecat-files '("ECAT" "C:/usr/emacs/site-lisp/psgml-1.2.5/ecat"))
    CATALOG ファイルには psgml が参照する DTD ファイルを記載する
    ECAT ファイルには psgml が DTD ファイルを parse した結果を保存する場所を記載する
  4. emacs/site-lisp/psgml-1.2.5/catalog ファイルを作成する
    PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "docbook/xml/4.5/docbookx.dtd"
  5. emacs/site-lisp/psgml-1.2.5/ecat ファイルを作成する
    PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "cust/docbook/xml/4.5/docbookx.dtd"
  6. psgml-1.2.5 ディレクトリ以下に catalog ファイルで指定した DTD ファイルを置く
  7. psgml-1.2.5 ディレクトリ以下に ecat ファイルで指定した cust/docbook/xml/4.5 というディレクトリを作成しておく

使用方法
DocBook XML のファイルを開き C-c C-p を押すと DTD ファイルの parse が始まる
Table: psgml mode 使用方法
C-c C-pDTD の Parse
C-c C-o文章の Parse
C-c C-eelement の挿入
C-c /終了タグを挿入

Ant を PSGML モードで使用する
  1. まずは PSGML モードで使用するための定義ファイル (DTD) を準備する
    1. 以下の ant-dtd.xml を準備する
      <?xml version="1.0"?>
      <project name="ant-dtd" default="ant.dtd" basedir=".">
        <target name="ant.dtd">
          <antstructure output="ant.dtd"/>
        </target>
      </project>
    2. ant.dtd を生成する
      > ant -buildfile ant-dtd.xml
      Buildfile: ant-dtd.xml
      
      ant.dtd:
      
      BUILD FAILED
      java.lang.NoClassDefFoundError: org/apache/commons/net/ftp/FTPClientConfig
       at org.apache.tools.ant.taskdefs.optional.net.FTP$LanguageCode.getValidLanguageCodes(FTP.java:2544)
       at org.apache.tools.ant.taskdefs.optional.net.FTP$LanguageCode.<clinit>(FTP.java:2540)
       at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
       at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
       at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
      (中略)
      Total time: 0 seconds
    3. エラーが表示されるが下記のような ant.dtd は生成された
      <?xml version="1.0" encoding="UTF-8" ?>
      <!ENTITY % boolean "(true|false|on|off|yes|no)">
      <!ENTITY % tasks "propertyfile | ccmkdir | importtypelib | vsscheckin | sql | cvspass | p4reopen | csc | loadresource | dirname | wlrun | p4label | p4revert | replaceregexp | get | jjtree | sleep | jarlib-display | length | dependset | zip | patch | jspc | style | nice | tstamp | unwar | vsshistory | cvschangelog | retry | p4submit | ccmcheckin | p4change | bzip2 | sync | p4delete | vssadd | javadoc | makeurl | p4integrate | translate | signjar | cclock | classloader | chown | jarlib-available | rexec | WsdlToDotnet | buildnumber | resourcecount | cvsversion | apt | ejbjar | war | stlist | copypath | rename | sequential | serverdeploy | property | subant | move | ildasm | copydir | schemavalidate | cccheckin | ccunlock | wljspc | fixcrlf | telnet | sosget | pathconvert | record | p4sync | exec | ccmklabel | p4edit | manifest | antlr | netrexxc | ftp | execon | ccmcheckout | ant | xmlvalidate | xslt | p4resolve | iplanet-ejbc | ccmcheckintask | gzip | native2ascii | ccrmtype | starteam | ear | input | presetdef | rmic | checksum | mail | loadfile | vsscheckout | stylebook | soscheckin | mimemail | stlabel | gunzip | concat | cab | touch | parallel | splash | antcall | ccmkbl | cccheckout | typedef | p4have | filter | xmlproperty | import | copy | jsharpc | symlink | antstructure | script | ccmcreatetask | rpm | delete | replace | attrib | verifyjar | waitfor | untar | loadproperties | available | echoproperties | junit | stcheckin | chgrp | stcheckout | bunzip2 | whichresource | copyfile | p4labelsync | manifestclasspath | vsscreate | macrodef | unjar | ejbc | echoxml | vbc | wsdltodotnet | mkdir | cvs | condition | tempfile | junitreport | ccmkattr | taskdef | echo | ccupdate | java | vsslabel | renameext | basename | javadoc2 | tar | vsscp | p4fstat | setproxy | antversion | p4counter | wlstop | diagnostics | ilasm | soscheckout | apply | jarlib-resolve | ccuncheckout | cvstagdiff | jlink | javacc | chmod | jarlib-manifest | pvcs | jar | ccmklbtype | sound | truncate | scriptdef | defaultexcludes | blgenclient | uptodate | jjdoc | genkey | javah | ccmkelem | ccmreconfigure | fail | unzip | javac | p4add | soslabel | depend | vssget | deltree | ddcreator">
      <!ENTITY % types "difference | isfileselected | mergemapper | extensionSet | stringtokenizer | url | scriptcondition | filterreader | selector | propertyset | dirset | chainedmapper | tarfileset | regexpmapper | zipentry | resources | scriptmapper | unpackagemapper | compositemapper | first | string | propertyresource | flattenmapper | description | scriptfilter | last | concatfilter | scriptselector | xmlcatalog | extension | file | filetokenizer | filtermapper | packagemapper | regexp | bzip2resource | filterchain | filterset | classfileset | linetokenizer | files | patternset | intersect | mapper | union | resource | tokens | assertions | substitution | libfileset | zipfileset | signedselector | tarentry | redirector | filelist | path | fileset | restrict | globmapper | identitymapper | javaresource | gzipresource | sort">
      
      <!ELEMENT project (target | %tasks; | %types;)*>
      <!ATTLIST project
       name CDATA #IMPLIED
       default CDATA #IMPLIED
       basedir CDATA #IMPLIED>
      
      <!ELEMENT target (%tasks; | %types;)*>
      (以下略)
  2. 作成した ant.dtd を apache-ant をインストールしたディレクトリ以下に置く
  3. 作成した ant.dtd を psgml をインストールしたディレクトリ以下に置き、PSGML の catalog ファイルに以下を追加
    PUBLIC "-//ANT//DTD project//EN" "ant/ant.dtd" 
    
  4. ディレクトリを作成し ecat に以下を追加
    PUBLIC "-//ANT//DTD project//EN" "cust/ant/ant.dtd"
    
  5. 対象の build.xml ファイルの先頭に以下を記述する
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE project PUBLIC "-//ANT//DTD project//EN" "file:///usr/apache-ant/ant.dtd">
    
  6. C-c C-p で DTD ファイルを parse する

0 件のコメント:

コメントを投稿