#pragma section-numbers off
[[TableOfContents]]

= 概要 =
["DocBook"]があまりにひどいのでほかの文書記述用XML形式を探していたときに見つけたもの。

とりあえず日本語とかは問題ないし、最低限の機能は実装されている。

初期設定の色が派手すぎたり、出力するHTMLや["LaTeX"]の一部が変だったりするのはご愛嬌だと思っている。

最近の文書は大概SmartDoc形式で記述している。

http://www.asahi-net.or.jp/~dp8t-asm/java/tools/SmartDoc/index_ja.html

= インストール =
http://www.smartdoc.jp/download/beta.zip

{{{
sudo java -cp setup.zip setup
sudo chmod 755 /usr/local/bin/sdoc
}}}

= マニュアル =
配布物を解凍した中にarchive.jarというjarがあります。これをさらに解凍すると、docフォルダがあります。

この中にリファレンスマニュアルが同梱されていますので、説明を読んでHTMLを作成しておくとよいでしょう。

= nxmlで SmartDocを記述する =
psgmlは古く、ショートカット類も使いずらいため [[nxml-mode]] に移行しました。

{{{
(load "nxml-mode-20041004/rng-auto.el")
(setq auto-mode-alist
      (cons '("\\.\\(xml\\|xsl\\|rng\\|sdoc\\|xhtml\\|html\\)\\'" . nxml-mode)
            auto-mode-alist))
}}}

smartdoc.rnc をどっかから持ってきてschemas.xmlに以下を追加
{{{
  <uri pattern="*.sdoc" typeId="SDOC"/>
  <typeId id="SDOC" uri="smartdoc.rnc"/>
}}}

= PGSMLでSmartDocを記述する =
{{{SmartDocMode}}}が同梱されていますが、これがぼくは使いずらいので、["psgml-mode"]で記述できるようにしています。

[http://www.t3.rim.or.jp/~harunaga/freebsd/xemacs.html PSGMLでSmartDoc文書を書く]を参考に改造した。

.emacsのsgml-custom-dtdに以下追加
{{{
("SmartDoc"
    "<!DOCTYPE doc PUBLIC
    \"-//Tomoharu Asami//DTD PureSmartDoc XML V1.0.0//EN\"
    \"file:////Users/sakito/etc/psgml/PureSmartDoc.dtd\">\n")
}}}

CATALOG.txtに以下追加
{{{
PUBLIC  "-//Tomoharu Asami//DTD PureSmartDoc XML V1.0.0//EN" "PureSmartDoc.dtd"
}}}

ECAT.txtに以下追加
{{{
PUBLIC  "-//Tomoharu Asami//DTD PureSmartDoc XML V1.0.0//EN" cdtd/PureSmartDoc.dtd
}}}

{{{PureSmartDoc.dtd}}}を改造してしまいます。
{{{
<!ENTITY % HTMLlat1 PUBLIC "-//W3C//ENTITIES Latin 1 for XHTML//EN"
   "file:///Users/sakito/etc/psgml/xhtml-lat1.ent">
%HTMLlat1;
<!ENTITY % HTMLsymbol PUBLIC "-//W3C//ENTITIES Symbols for XHTML//EN"
   "file:///Users/sakito/etc/psgml/xhtml-symbol.ent">
%HTMLsymbol;
<!ENTITY % HTMLspecial PUBLIC "-//W3C//ENTITIES Special for XHTML//EN"
   "file:///Users/sakito/etc/psgml/xhtml-special.ent">
%HTMLspecial;
<!ATTLIST doc xml:lang NMTOKEN #IMPLIED>
<!ATTLIST div xml:lang NMTOKEN #IMPLIED>
<!ATTLIST div normalizer (none) #IMPLIED>
<!ATTLIST span xml:lang NMTOKEN #IMPLIED>
<!ATTLIST a href CDATA #IMPLIED>
<!ATTLIST native format (html|latex2e|plain) #IMPLIED>
<!ATTLIST native src CDATA #IMPLIED>
}}}
を付加し、titleなどの幾つかの要素を属性に変更します。

以下の関数を定義しておくと便利かもしれません。
{{{
(setq sdoc-command-line "sdoc")
(defun sdoc ()
  (interactive)
  (let (
        (sdocbuf "*SmartDoc*"))
    (call-process sdoc-command-line nil sdocbuf nil (buffer-file-name))
    (display-buffer sdocbuf)
    ))
;; ぼくはあまりC-cC-c(sgml-show-context)利用しないので以下に設定している。
(define-key xml-mode-map "\C-c\C-c" 'sdoc)
}}}

= 複数のSdocファイルをまとめてあつかう =
{{{
<p src="hogehoge.sdoc" />
}}}
を記述する事で、外部のファイルを読み込む事が可能です。

以下のような方法もあります。
{{{
<?xml version='1.0' encoding="iso-2022-jp"?>

<!DOCTYPE doc [
  <!ENTITY sdocpart1 SYSTEM "/Users/sakito/doc/emacs21/part1.sdoc">
  <!ENTITY sdocpart2 SYSTEM "/Users/sakito/doc/emacs21/part2.sdoc">
  <!ENTITY sdocpart3 SYSTEM "/Users/sakito/doc/emacs21/part3.sdoc">
]>

<doc xml:lang="ja">
<head>
<title>Emacs21</title>
<author>sakito</author>
<date></date>
</head>
<body>
&sdocpart1;

&sdocpart2;

&sdocpart3;

</body>
</doc>
}}}

= 関連 =
[http://pocketclub.com/program/index_p2_c1.html SmartDocTask]

[http://sourceforge.jp/projects/sdoctask/files/ SmartDocTask SourceForge.jp: Project File List]

["texi2sdoc"]

----
----
CategoryDocumentation