2009年5月22日金曜日

強制的に自分自身をフォアグラウンドアプリにする

http://hpcgi1.nifty.com/~kokubu/index.cgi?%B5%BB%BD%D1%A5%E1%A5%E2#i4

実は何をやってるのかよくわかっていなかったり。

------------------------------------

HWND hWnd_ = /* フォアグラウンドにするウインドウ */ ;
int fromId = GetWindowThreadProcessId(hWnd_, 0);
int toId = GetWindowThreadProcessId(GetForegroundWindow(), 0);
if (fromId == toId)
{
/* 既に自身がアクティブ ; そのままフォアグラウンド化して OK */
SetForegroundWindow(hWnd_);
}
else if (AttachThreadInput(fromId, toId, TRUE))
{
/* 違うスレッドがアクティブ ; 入力状態を共有した */
DWORD backup = 0UL;
SetActiveWindow(hWnd_);
SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, &backup, 0);
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, (LPVOID)0, 0);
SetActiveWindow(hWnd_);
SetForegroundWindow(hWnd_);
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, (LPVOID)backup, 0);
/* 入力状態共有を解除 */
AttachThreadInput(fromId, toId, FALSE);
}
else
{
/* 失敗 */
}

2009年5月14日木曜日

DocBook 5.0

4/1 のトピックで「Xalan(Xerces)はRELAXER NGを解さない」とか書いたけど、考えてみればvalidationだけ別ツール使えばいいんだ、ということに(ようやく)気づいた。

validation ツールに jing を使うこととする。RELAX NG ホームページからリンクが張ってあるのでそこからダウンロードする。

http://fortunecat.sourceforge.net/

(別のページから古いバージョンのjingを拾ったら処理できずに何故かしばらく悩むハメになった)

あわせて本家から5.0のスキーマ(RELAX NG版)を取得、またDocBookスタールシートがバージョンアップ(1.75.0)されていたのでこれもダウンロード。


DocBook 5 の解説ページ(英語)

http://www.sagehill.net/docbookxsl/

かなり詳細に書いてあり、これ熟読すればよさそうである。

WINDOWSダンプファイル解析

最小メモリ ダンプ ファイルの解析
http://support.microsoft.com/kb/315263/ja

memory.dmp の解析
http://www.microsoft.com/downloads/details.aspx?familyid=e84d3b35-63c3-445b-810d-9fed3fdeb13f&displaylang=en
http://www.hoster.jp/tag/memorydmp/

2009年5月6日水曜日

DocBook サンプル

http://d.hatena.ne.jp/kakurasan/20070918/p1
http://d.hatena.ne.jp/kakurasan/20080528/p1

DocBook4 から 5で変わった部分

・bookinfoタグがinfoタグに(汎用化?)
・DTD 宣言の書き方が変わった?
・ID の与え方が変わった

下の二つはNameSpaceに対応したことによるものらしい。

サンプルの中のIDはエレメントごとのIDなのだろうけれど、どういう使い道があるのか?
なんとなく想像はできるけれど、具体的なモノが判らない。調査中。




2009/5/13 追記

Ver5で変化した部分に関する記述

http://yoshihiro.toda.name/docbook/docs/howto/

2009年5月5日火曜日

500回突破

臨時メンテや帰省があったとはいえ。わずか4日前倒しできただけ。

次回目標は1000回 6/13

2009年4月23日木曜日

DocBook,FOP,ビルド

いろいろいじくった挙句の DocBook -> fo -> PDF まで一括で行うbuild.xml

-----------------------------------------------

<project name="docbooktest" basedir="." default="pdf">

<property name="LIBDIR" value="D:/DocBook"/>
<property name="DOCBOOK_DTD" value="${LIBDIR}/xml-4.5/docbookx.dtd"/>
<property name="XSLTLIBDIR" value="${LIBDIR}/xalan-j_2_7_1"/>
<property name="FOPBASEDIR" value="${LIBDIR}/fop-0.95"/>
<property name="FOPOPT" value="-c ${FOPBASEDIR}/conf/JFConf.xml"/>

<property name="DOCBOOK_PUBLIC_ID" value="-//OASIS//DTD DocBook XML V4.5//EN"/>

<property name="STYLESHEET" value="${LIBDIR}/docbook-xsl-1.74.3/fo/docbook.xsl"/>

<!-- ********************************************************** -->
<!-- **** コメントなどに日本語を使うならUTF8で保存すること **** -->
<!-- ********************************************************** -->

<property name="DOCNAME" value="sourceDocs"/>

<!--
property name="SOURCE" value="${basedir}/sourceDocs.xml"/ <= この書き方だとだめ
-->
<property name="SOURCE" value="${DOCNAME}.xml"/>


<!-- ********************************************************** -->

<taskdef name="fop" classname="org.apache.fop.tools.anttasks.Fop">
<classpath>
<fileset dir="${FOPBASEDIR}/lib">
<include name="*.jar"/>
</fileset>
<pathelement location="${FOPBASEDIR}/build/fop.jar"/>
</classpath>
</taskdef>

<!-- ********************************************************** -->

<target name="fo">

<xmlvalidate warn="false">

<xmlcatalog>
<dtd publicId="${DOCBOOK_PUBLIC_ID}" location="${DOCBOOK_DTD}"/>
</xmlcatalog>
<fileset dir="${basedir}">
<include name="${SOURCE}"/>
</fileset>
</xmlvalidate>

<xslt basedir="${basedir}"
destdir="${basedir}"
style="${STYLESHEET}"
extension=".fo"
includes="${SOURCE}">

<classpath>
<pathelement location="${XSLTLIBDIR}/xalan.jar"/>
</classpath>
<xmlcatalog>
<dtd publicId="${DOCBOOK_PUBLIC_ID}" location="${DOCBOOK_DTD}"/>
</xmlcatalog>

<outputproperty name="method" value="xml"/>
<outputproperty name="encoding" value="UTF-8"/>
<outputproperty name="indent" value="yes"/>

<!-- param name="admon.graphics" expression="1"/ -->
<!-- param name="section.autolabel" expression="1"/ -->
<!-- param name="html.stylesheet" expression="doc.css"/ -->

</xslt>

</target>

<target name="pdf" depends="fo">

<!--

<java classname="org.apache.fop.cli.Main" fork="true">

<jvmarg line="-Denv.windir=C:\WINDOWS"/>
<arg line="${FOPOPT} -fo ${DOCNAME}.fo -pdf ${DOCNAME}.pdf"/>

<classpath>
<pathelement location="${FOPBASEDIR}/build/fop.jar"/>
<pathelement location="${FOPBASEDIR}/build/fop-sandbox.jar"/>
<pathelement location="${FOPBASEDIR}/build/fop-hyph.jar"/>
<pathelement location="${FOPBASEDIR}/lib/xml-apis-1.3.04.jar"/>
<pathelement location="${FOPBASEDIR}/lib/xml-apis-ext-1.3.04.jar"/>
<pathelement location="${FOPBASEDIR}/lib/xercesImpl-2.7.1.jar"/>
<pathelement location="${FOPBASEDIR}/lib/xalan-2.7.0.jar"/>
<pathelement location="${FOPBASEDIR}/lib/serializer-2.7.0.jar"/>
<pathelement location="${FOPBASEDIR}/lib/batik-all-1.7.jar"/>
<pathelement location="${FOPBASEDIR}/lib/xmlgraphics-commons-1.3.1.jar"/>
<pathelement location="${FOPBASEDIR}/lib/avalon-framework-4.2.0.jar"/>
<pathelement location="${FOPBASEDIR}/lib/commons-io-1.3.1.jar"/>
<pathelement location="${FOPBASEDIR}/lib/commons-logging-1.0.4.jar"/>
<pathelement location="${FOPBASEDIR}/lib/jai_imageio.jar"/>
<pathelement location="${FOPBASEDIR}/lib/fop-hyph.jar"/>
</classpath>

</java>

-->

<fop format="application/pdf"
basedir="${basedir}"
outdir="${basedir}"
messagelevel="debug"
userconfig="${FOPBASEDIR}/conf/JFConf.xml">

<fileset dir="${basedir}">
<include name="${DOCNAME}.fo"/>
</fileset>

</fop>

</target>

</project>

-----------------------------------------------

コメントアウトした部分はFOPの起動バッチを参考にした場合。この場合は fork="true" 設定をしないと駄目だった。セキュリティとかクラスローダとかの関係らしいが、よくわからない。

ant から呼び出す場合は専用のクラスが準備されているのでそちらを利用する。

2009年4月21日火曜日

FOP

http://ja.wikipedia.org/wiki/XSL_Formatting_Objects
http://ja.wikipedia.org/wiki/Apache_FOP
http://nanasi.jp/articles/others/fop.html
http://www.sm.u-tokai.ac.jp/~sugita/xml/japanese.html
http://xmlgraphics.apache.org/fop/

---------------------------------------------

そのままでは日本語が表示できないのでフォント設定を行う

http://www.02.246.ne.jp/~torutk/fop/fop4sdoc.html
http://www.nslabs.jp/apache_fop.rhtml
http://d.hatena.ne.jp/ditahack/20090331/1238513240
http://d.hatena.ne.jp/mitsu48/
http://liosk.blog103.fc2.com/blog-entry-71.html

手順(1) MSゴシック/MS明朝のフォント名を調べる

コマンドプロンプトより

java -cp ../build/fop.jar;../lib/commons-io-1.3.1.jar;../lib/commons-logging-1.0.4.jar org.apache.fop.fonts.apps.TTFReader c:/windows/Fonts/msmincho.ttc msmincho.xml
java -cp ../build/fop.jar;../lib/commons-io-1.3.1.jar;../lib/commons-logging-1.0.4.jar org.apache.fop.fonts.apps.TTFReader c:/windows/Fonts/msgothic.ttc msgothic.xml

すると下記のような形でエラーと共にフォント名(ttcname)を表示してくれる。

D:\DocBook\fop-0.95\JFonts>java -cp ../build/fop.jar;../lib/commons-io-1.3.1.jar;../lib/commons-logging-1.0.4.jar org.apache.fop.fonts.apps.TTFReader c:/windows/Fonts/msmincho.ttc msmincho.xml
TTF Reader for Apache FOP 0.95

Parsing font...
Reading c:/windows/Fonts/msmincho.ttc...
This is a TrueType collection file with 2 fonts
Containing the following fonts:
MS Mincho
MS PMincho
Error while building XML font metrics file.
java.lang.IllegalArgumentException: For TrueType collection you must specify which font to select (-ttcname)


手順(2) フォントメトリクスファイルを作成する

上記の手順で得たフォント名をコマンドラインに追加して実行

java -cp ../build/fop.jar;../lib/commons-io-1.3.1.jar;../lib/commons-logging-1.0.4.jar;../lib/xmlgraphics-commons-1.3.1.jar org.apache.fop.fonts.apps.TTFReader -ttcname "MS Mincho" c:/windows/Fonts/msmincho.ttc msmincho.xml
java -cp ../build/fop.jar;../lib/commons-io-1.3.1.jar;../lib/commons-logging-1.0.4.jar;../lib/xmlgraphics-commons-1.3.1.jar org.apache.fop.fonts.apps.TTFReader -ttcname "MS Gothic" c:/windows/Fonts/msgothic.ttc msgothic.xml

※必要なクラスライブラリが増えている


手順(3) フォントメトリクスファイルを修正する

TTFReader にはバグがあって、msmincho.xml / msgothic.xml ないのフォントファミリ名の部分が文字化けしているのでそれぞれ MS 明朝 MS ゴシック に修正する。


手順(4) ユーザコンフィグファイルの作成

fop の conf フォルダに fop.xconf というファイルがあるが、これはただのサンプルファイル。
これをベースにユーザコンフィグファイル JFConf.xml を作成する(ファイル名はxmlファイルあるなら何でもかまわない)

<?xml version="1.0" ?>
<fop version="1.0">
<renderers>
<renderer mime="application/pdf">
<fonts>
<font metrics-url="D:\DocBook\fop-0.95\JFonts\msmincho.xml" kerning="yes" embed-url="C:\windows\Fonts\msmincho.ttc">
<font-triplet name="MS-Mincho" style="normal" weight="normal"/>
<font-triplet name="MS-Mincho" style="normal" weight="bold"/>
<font-triplet name="MS-Mincho" style="italic" weight="normal"/>
<font-triplet name="MS-Mincho" style="italic" weight="bold"/>
<font-triplet name="MSMincho" style="normal" weight="normal"/>
<font-triplet name="MSMincho" style="normal" weight="bold"/>
<font-triplet name="MSMincho" style="italic" weight="normal"/>
<font-triplet name="MSMincho" style="italic" weight="bold"/>
<font-triplet name="Mincho" style="normal" weight="normal"/>
<font-triplet name="Mincho" style="normal" weight="bold"/>
<font-triplet name="Mincho" style="italic" weight="normal"/>
<font-triplet name="Mincho" style="italic" weight="bold"/>
<font-triplet name="MS明朝" style="normal" weight="normal"/>
<font-triplet name="MS明朝" style="normal" weight="bold"/>
<font-triplet name="MS明朝" style="italic" weight="normal"/>
<font-triplet name="MS明朝" style="italic" weight="bold"/>
<font-triplet name="serif" style="normal" weight="normal"/>
<font-triplet name="serif" style="normal" weight="bold"/>
<font-triplet name="serif" style="italic" weight="normal"/>
<font-triplet name="serif" style="italic" weight="bold"/>
</font>
<font metrics-url="D:\DocBook\fop-0.95\JFonts\msgothic.xml" kerning="yes" embed-url="C:\windows\Fonts\msgothic.ttc">
<font-triplet name="MS-Gothic" style="normal" weight="normal"/>
<font-triplet name="MS-Gothic" style="normal" weight="bold"/>
<font-triplet name="MS-Gothic" style="italic" weight="normal"/>
<font-triplet name="MS-Gothic" style="italic" weight="bold"/>
<font-triplet name="MSGothic" style="normal" weight="normal"/>
<font-triplet name="MSGothic" style="normal" weight="bold"/>
<font-triplet name="MSGothic" style="italic" weight="normal"/>
<font-triplet name="MSGothic" style="italic" weight="bold"/>
<font-triplet name="Gothic" style="normal" weight="normal"/>
<font-triplet name="Gothic" style="normal" weight="bold"/>
<font-triplet name="Gothic" style="italic" weight="normal"/>
<font-triplet name="Gothic" style="italic" weight="bold"/>
<font-triplet name="MSゴシック" style="normal" weight="normal"/>
<font-triplet name="MSゴシック" style="normal" weight="bold"/>
<font-triplet name="MSゴシック" style="italic" weight="normal"/>
<font-triplet name="MSゴシック" style="italic" weight="bold"/>
<font-triplet name="sans-serif" style="normal" weight="normal"/>
<font-triplet name="sans-serif" style="normal" weight="bold"/>
<font-triplet name="sans-serif" style="italic" weight="normal"/>
<font-triplet name="sans-serif" style="italic" weight="bold"/>
</font>
</fonts>
</renderer>
</renderers>
</fop>


手順(5) サンプル実行

テストファイル JFT2.fo

<fo:root fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master name="PageMaster">
<fo:region-body top="3cm">
</fo:region-body>
</fo:simple-page-master>
<fo:page-sequence reference="PageMaster">
<fo:flow name="xsl-region-body">
<fo:block size="18pt" align="center">
Hello: XSL-FO to PDF 日本語フォントはどうか?
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:layout-master-set>

コマンドラインより

..\fop -c D:\DocBook\fop-0.95\conf\JFConf.xml -fo JFT2.fo -pdf a.pdf

と実行する。