epojava logo

『epo-sdoc』

  The Editing Process Organizer -- SmartDoc dependent settings for Emacs.

関連URL(ダウンロード/他)

名称URL
epojava epojava
epojava のダウンロード
※ epojava.zip には epojava と epoxml のフルセットが入っています。
SmartDoc http://www.asahi-net.or.jp/~DP8T-ASM/java/tools/SmartDoc/index_ja.html
SmartDoc



epo-sdoc あぶすとらくと

  epo-sdoc.elSmartDoc 用の epo 依存設定です。
  epo-sdoc.el を用いることにより、 SmartDoc のタグの補完入力ランチャ起動 を行うことができます。

  さらに epojava におまけとして付属している epoxml.el では、 SmartDoc の仕様に基づき SmartDoc 専用のさまざまな特殊設定を施しています。

SmartDoc 独自用の特殊(依存)設定

ランチャ起動先の修正

  通常epo では、[prefix] t j と挿入するとランチャ起動が行われ、カレントバッファ (現在カーソルがあるバッファ)上のファイルをコンパイル しようとします。 しかし *.sdoc のファイルが複数あるようなときは カレントバッファをコンパイルしてしまうと 逆にまずいような場合があります。
  そのような場合、 以下の行を *.sdoc の中に記述することで、 コンパイル目標となるファイルを変更することができます。
書式:
<!-- #!コマンド  引数1  引数2 ... -->
サンプル:
<!-- #!c:/java2/sdoc/bin/sdoc.bat index.sdoc -->

Jakarta-Ant からの起動

  要望により sdoc を Jakarta-Ant から起動し、一度に複数コンパイルを行いたいという話がありました。
  epo-sdoc.el では、 これに対応するために、[prefix] t r をバインドしています。
  そのときの build.xmlの記述サンプルは以下のようになります。
  このようにすることで同一フォルダ内での細かなオプション指定 ((例)あるファイルは目次をつけるけど、他のページは目次を外す) といったことが可能になります。
※arg のパラメータ設定時の文字列区切りが、 プロパティファイルの時(=)と違い :となっていることに注意してください。
<?xml version="1.0" encoding="Shift_JIS"?>
<project name="anrun" default="all" basedir=".">
  <target name="all"
    depends="book,basic" />
  <target name="index">
    <java classname="jp.gr.java_conf.jaba2.SmartDoc.SmartDoc"
      fork="yes" maxmemory="256m">
      <arg value="index.sdoc" />
      <classpath>
        <pathelement path="c:/java2/sdoc/SmartDoc.jar" />
      </classpath>
    </java>
  </target>
  <target name="basic">
    <java classname="jp.gr.java_conf.jaba2.SmartDoc.SmartDoc"
      fork="yes" maxmemory="256m">
      <arg value="-toc:true" />
      <arg value="basic.sdoc" />
      <classpath>
        <pathelement path="c:/java2/sdoc/SmartDoc.jar" />
      </classpath>
    </java>
  </target>
</project>

スペース行のみの改行

  通常 TeX では、

\begin{quotation}
 aaaa

 bbbb
\end{quotation}
  という文章と、

\begin{quotation}
 ccc
 
 ddd
\end{quotation}
  という文章では出力結果は同じですが、 SmartDoc では

 <section title="aaa">
   aaa

   bbb
 </section>
  という文章と、

 <section title="aaa">
   aaa
   
   bbb
 </section>
  という文章では出力される結果が違います (要点は、改行だけのコードに見える部分に空白が入っていると、 SmartDoc 的に空白とみなされない)。
  これはSmartDoc の仕様です (SmartDoc の ML にて確認済み)ので、 epoxml.el では以下の対抗措置を 他のXML モードと違い実装しています。
  1. 空白だけの行を赤色でhilit して警告とした (makefile-mode と同じ仕様)
  2. 空白だけの行では、[tab]を打っても インデントを入れないようにした。
  この「[tab]を打ってもインデントを入れない」 という仕様は、M-q(全行インデント)でも同様です。
  他の XML/java/C/C++ のモードで M-q をかけたときも同様に消すように変更しました (普通の処理として[tab]を打ったときはインデント下げます)。

YaHTML + epo の組み合わせでのインデント

  SmartDoc を YaHTML + epo の組み合わせで行う場合は、 以下のように ~/.emacs に記述することで、 正しいsdoc のインデントの補正を行えます。
(add-hook
 'yahtml-mode-hook
 '(lambda ()
    (substitute-key-definition
     'yahtml-indent-line 'an-sdoc-yahtml-indent-line yahtml-mode-map)))
(defun an-sdoc-yahtml-indent-line ()
  "vs sdoc"
  (interactive)
  (let ((len) (next-flag t) )
    (if (and (buffer-file-name)
	     (string= "sdoc" (file-name-extension buffer-file-name)) )
	(save-excursion
	  (beginning-of-line)
	  (if (looking-at "^[\t ]*$")
	      (progn (replace-match "")
		     (setq next-flag nil)))))
    (if next-flag (yahtml-indent-line))))

空白の挿入について

  通常の epoxml.el のモードでは [prefix] a 6 で&nbsp; (non break space/ 強制空白文字の挿入/ Latin-1 の文字) を入れます(YaHTML と統一です)。
  この強制空白に &nbsp; を使う手法は、JavaDoc でも見られる非常に一般的な方法です。
  しかし SmartDoc では(パーサの仕様上) &nbsp; を直接コンパイルできません。
  &nbsp;の省略前コードである &#160;を使えばコンパイルだけは通ります。 しかしこの方式ですと、 TeX 側では?に変換されてしまうため、 強制スペースとして使えません。
  従って、文章の最後に?  があって、 次の文との間に空白を入れたい場合や、 li タグ内でインデントを取りたい場合は、 それぞれ以下のようにする必要があります。

HTML のみを考えた場合
「&#160; 」を使う。
TeX のみを考えた場合
「<native format="latex2e" normalizer="none">\ </native>」 を使う。
両方に対応できるようにしたい場合
「<or> <native format="latex2e" normalizer="none">\ </native> <native format="html">&amp;nbsp;&amp;nbsp;</native> </or>」 を使う。

  epoxml.el では HTML 用に [prefix] a 6、TeX 用に[prefix] a 7 をキーバインドすることで対応しています。

※ 以下のような記述を行うと、&space; で空白行が入るようになりますが、 XML のファイル分割機能を使用すると分割した先で この表現が使えません(実行時エラー)。
  しかしファイル分割を考えない (または、section タグ内等で src アトリビュートを使う)場合は、 こちらを使用した方が良いかと思います。
<?xml version="1.0" encoding="Windows-31J"?>
<!DOCTYPE doc [
<!-- no-break space = non-breaking space,U+00A0 ISOnum -->
<!ENTITY space "<or>
  <native format='latex2e' normalizer='none'>\ </native>
  <native format='html'>&amp;nbsp;&amp;nbsp;</native>
</or>"> ]>
<doc xml:lang="ja">
 <head />
 <body>
 aaa?!&space;bbb
 </body>
</doc>
※ 最後の手段として「全角のスペースを使う」 という手もありますが、 日本語にしか適用できないためお勧めできかねます。
ando@park.ruru.ne.jp