[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Groff] Re: Bug#552201: groff-base: Japanese manpages are shown with
From: |
Werner LEMBERG |
Subject: |
Re: [Groff] Re: Bug#552201: groff-base: Japanese manpages are shown with too wide spaces |
Date: |
Sat, 18 Dec 2010 10:12:55 +0100 (CET) |
>> The only thing which I consider bad is that there is `(' at the
>> line end. Can this be improved by adjusting the calls to .cflags?
>
> Hmm, I tried to add `(' to CJKpostpunct class, but it did not help.
>
>> リストでは合計実行時間、呼び出し回 数、そのルーチン自身で消費した時間 (
>
> Groff adds a space between (non-punct) Japanese characters instead
> of breaking the line. The expected result would be something like:
>
>> リストでは合計実行時間、呼び出し回数、そのルーチン自身で消費した時間
>> (...
>
> or:
>
>> リストでは合計実行時間、呼び出し回数、そのルーチン自身で消費した時
>> 間 (...
>
> Perhaps assigning IGNORE_HCODE to whole CJK range is not perfectly
> enough to control the line breaking rule.
I should have activated my brain before asking such questions :-)
Here are my observations.
. Attached you can find an improved version of the Japanese
`gprof.1' man page (I'm calling it `gprofx.1' for convenience).
Note the many backslashes at the end of lines to suppress unwanted
spaces caused by newline characters. Alternatively, it might be
useful to have long lines to avoid linebreaks at all. Most
editors provide automatic line breaking anyways.
In groff, there is nothing similar to a `CJK*' environment (as
provided by my CJK package for LaTeX) to handle suppression of
unwanted spaces automatically. It would need more cflags trickery
(with new values) to emulate this behaviour since groff doesn't
know the concept of active characters.
. Formatting the improved man page, you get a lot of warning
messages like
gprofx.1:45: warning [p 1, 2.2i]: cannot adjust line
This gets much better if you ensure that the indented part of the
main page (which is the majority of text) has an even number of
characters so that the double-width CJK characters fit exactly.
Try, for example, this:
groff -Keuc-japan -Tutf8 -rIN=8n \
-ww -man -mja gprofx.1 > gprofx.txt
and the number of warnings decreases from 15 to only 4 (output
attached). I strongly suggest to add something like this to the
Japanese locale configuration for man.
. To get really rid of the warnings, and to improve formatting CJK
stuff in general, we need inter-character glue between CJK
characters. Without that, groff produces too short lines (it then
emits the `cannot adjust line' warning). This is a TODO.
An alternative is to add `.ad l' for Japanese manpages.
. To come back to the abovementioned problem of `(' in the original
output of `gprof.1', this isn't solvable at all with the current
set of cflags: The problem is conflicting cflags values: The
character right after the open parenthesis, `ミ', has value 66,
which means
lines can be broken before the character (regardless of the
hcode values of the surrounding characters)
What ever cflags value I set for `(', the value `66' of `ミ'
inserts a breakpoint, causing a line break right before the
character.
I've now implemented three new cflags values, completely
independent of hcode values:
don't break before character but allow break after: 128
don't break after character but allow break before: 256
allow break before and after character: 512
which are handled internally similar to kern pairs so that the new
`inter_char_space_node'[1] sees the cflags values of both the left
and right character to decide whether there should be a zero-width
break inbetween. I've also updated ja.tmac accordingly.
Please test.
Werner
[1] Contrary to its name, inter-character spacing isn't yet
implemented. As soon as it is, value 512 becomes `allow
inter-character breaks and insert stretchable space'; this should
eventually fix all line adjust warnings.
.\" Copyright (c) 1983, 1990 The Regents of the University of California.
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms are permitted provided
.\" that: (1) source distributions retain this entire copyright notice and
.\" comment, and (2) distributions including binaries display the following
.\" acknowledgement: ``This product includes software developed by the
.\" University of California, Berkeley and its contributors'' in the
.\" documentation or other materials provided with the distribution and in
.\" all advertising materials mentioning features or use of this software.
.\" Neither the name of the University nor the names of its contributors may
.\" be used to endorse or promote products derived from this software without
.\" specific prior written permission.
.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
.\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
.\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
.\"
.\" @(#)gprof.1 6.6 (Berkeley) 7/24/90
.\"
.\" Japanese Version Copyright (c) 1997-2000 NAKANO Takeo all rights reserved.
.\" Translated Fri Jan 9 1998 by NAKANO Takeo <nakano@@apm.seikei.ac.jp>
.\" Updated Fri 27 Oct 2000 by NAKANO Takeo
.\"
.TH GPROF 1 "January 29, 1993"
.SH 名前
gprof \- コール・グラフ (call graph) のプロファイルを表示する
.SH 書式
.B gprof [ \-abcsz ] [ \-e|\-E
.I name
.B ] [ \-f|\-F
.I name
.B ]
.B [ \-k
.I fromname toname
.B ] [
.I objfile
.B [
.I gmon.out
.B ]
.B ]
.SH 説明
.B gprof
は C, Pascal, Fortran77 プログラムの実行プロファイルを生成する。呼び出\
されたルーチンの値は呼び出し元に取り込まれる。プロファイルのためのデー\
タはコール・グラフ (call graph: 関数コールの親子関係のグラフ) のプロファ\
イルデータファイル (デフォルトでは `gmon.out') から取り\
込まれる。このファイルは
.BR cc ( 1 ) 、
.BR pc ( 1 ) 、
.BR f77 ( 1 )
で
.B \-pg
オプションを指定してコンパイルされたプログラムによって作成される。
.B \-pg
オプションでは、リンクされるライブラリもプロファイル用にコンパイルされ\
たものになる。
.B gprof
は指定されたオブジェクトファイル (デフォルトは `a.out') からシンボ\
ルテーブルを読み、これと `gmon.out' のコール・グラフ・プロファイルとを\
関連付ける。\
複数のプロファイルデータファイルが指定された場合には、
.B gprof
はそれらのプロファイル情報をすべて合計して表示する。
.PP
.B gprof
はそれぞれのルーチンによって消費された時間を計算する。次にこれらの時間\
をコール・グラフの枝に沿って親ルーチンへと伝播させる。プログラムの\
サイクル (cycle: 再帰呼び出しの循環) をまとめ、サイクルへのコールを行っ\
たルーチンは、サイクルで消費した時間を共有するとみなす。最初のリストは\
関数で、消費時間の順にソートされている。\
消費時間にはコール・グラフでの子孫の分も含まれる。それぞれの関数エントリ\
の下には、その関数のコール・グラフでの (直接の) 子と、そこで消費された\
時間がどのように関数に伝播したかが表示される。同様の表示は関数の上にも\
表示されており、その関数とそれらの子孫で消費された時間がどのようにコー\
ル・グラフの (直接の) 親へ伝播するかが示される。
.PP
サイクルも表示される。サイクル全体としてのエントリ、そのサイクルに属す\
るメンバーのリストとそれぞれのメンバーによって消費された時間、その\
サイクルの呼び出し回数などが表示される。
.PP
次にフラットプロファイル
.RB ( prof (1)
の結果と似たもの) が与えられる。このリストでは合計実行時間、呼び出し回\
数、そのルーチン自身で消費した時間 (ミリ秒単位)、子孫の分も含めて消費\
した時間 (ミリ秒単位) が表示される。
.PP
最後に関数名の索引が与えられる。
.SH オプション
以下のオプションが指定できる:
.TP
.B \-a
スタティックに宣言された関数を表示しない。このオプションが指定され\
ると、スタティックな関数に関する全ての情報 (実行時間、他の関数の呼び出\
し、他の関数から呼び出される関係など) は、ファイル `objfile' 中でこの\
スタティックな関数の直前にロードされた関数に属することになる。
.TP
.B \-b
プロファイルのそれぞれのフィールドに関する説明を表示しない。
.TP
.B \-c
プログラムのスタティックなコール・グラフを、オブジェクトファイルのテキ\
ストセグメントを調べるという発見的 (heuristic) な手法で作成する。ス\
タティック・コールだけの親や子の呼び出し回数は 0 として表示する。
.TP
.BI "\-e " name
ルーチン
.I name
と、その子孫すべてに関するグラフプロファイルのエントリを表示しない
(子孫に関しては、別の祖先がいれば表示される)。
.B \-e
オプションは複数回指定できる。一つの
.B \-e
オプションについて指定できる
.I name
は一つだけである。
.TP
.BI "\-E " name
.B \-e
と同様にルーチン
.I name
とその子孫に関するグラフプロファイルのエントリを表示しない。また
.I name
(とその子孫) によって消費された時間も、プログラム実行の総時間 (および\
パーセンテージの計算) から除かれる。例えば
.BI "\-E " mcount
.BI "\-E " mcleanup
はデフォルトになっている。
.TP
.BI "\-f " name
ルーチン
.I name
とその子孫に関してのみ、グラフプロファイルのエントリを表示する。
.B \-f
オプションは複数回指定できる。一つの
.B \-f
オプションについて指定できる
.I name
は一つだけである。
.TP
.BI "\-F " name
.B \-f
と同様に、ルーチン
.I name
とその子孫に関してのみ、グラフプロファイルのエントリを表示する。またこ\
れらによって用いられた時間だけを合計の実行時間とパーセンテージの計算に\
用いる。
.B \-F
オプションは複数指定できる。一つの
.B \-F
オプションについて指定できる
.I name
は一つだけである。
.B \-F
オプションは
.B \-E
オプションによる設定を上書きする。
.TP
.BI "\-k " "fromname toname"
ルーチン
.I fromname
からルーチン
.I toname
までの枝を削除する。これは不要なサイクルの循環を破壊するのに便利である。
.B \-k
は複数指定できる。一つの
.B \-k
オプションに対して指定できるのは一組のルーチン名だけである。
.TP
.B \-s
プロファイルファイル `gmon.sum' を作成し、指定したプロファイルファイル\
の情報すべてからのプロファイル情報を総計したものを書き込む。この合計プ\
ロファイルファイルは後に gprof を (おそらくは
.B \-s
と共に) 実行する際に与えて、 `objfile' ファイルを複数回実行して得られ\
たプロファイルデータを累積するために用いることもできる。
.TP
.B \-v
gprof のバージョン番号を表示して終了する。
.TP
.B \-z
用いられなかった関数 (呼び出し回数と実行時間でわかる) も表示する。これ\
を
.B \-c
オプションと共に用いると、呼び出されなかったルーチンを見つけるのに役\
に立つ。
.PP
.SH ファイル
a.out 名前のリストとテキスト空間
.br
gmon.out ダイナミックなコール・グラフとプロファイル
.br
gmon.sum ダイナミックなコール・グラフとプロファイルのまとめ
.SH 関連項目
.BR monitor ( 3 ) ,
.BR profil ( 2 ) ,
.BR cc ( 1 ) ,
.BR prof ( 1 )
.sp
``An Execution Profiler for Modular Programs'',
by S. Graham, P. Kessler, M. McKusick;
.I
Software \- Practice and Experience,
Vol. 13, pp. 671-685, 1983.
.sp
``gprof: A Call Graph Execution Profiler'',
by S. Graham, P. Kessler, M. McKusick;
.I
Proceedings of the SIGPLAN '82 Symposium on Compiler Construction,
SIGPLAN Notices, Vol. 17, No 6, pp. 120-126, June 1982.
.SH 履歴
.B gprof
は 4.2 BSD から登場した。
.SH バグ
サンプリングの粒度 (granularity) も表示されるが、せいぜい統計的なもの\
でしかない。ここでは関数の一回あたりの実行時間は、関数の消費した合計時\
間を呼び出し回数で割ったものと仮定している。したがって、呼び出しグラフの\
枝を伝播して関数の親に伝わる時間は、枝を通過した回数に直に比例すること\
になる。
.PP
自分自身がプロファイルされていない親でも、子から伝播してくる時間を保有\
することになる。しかしこれらのルーチンは、呼び出しグラフの中で (どこか\
ら呼び出されたのでもなく) 勝手に起動するように見えるので、その時間はそ\
れ以上どこへも伝播しない。同様に、シグナルをキャッチしたルーチンは、プ\
ロファイルされていても勝手に起動するように見えてしまう (理由はもう少し\
複雑だが)。シグナルをキャッチしたルーチンの子がプロファイルされてい\
ればその時間を正しく伝播させることができるが、親ルーチンがプロファ\
イルルーチンの途中でシグナルがキャッチされた場合には全ての情報は失われる。
.PP
プロファイルされるプログラムは
.BR exit ( 2 )
をコールして終了するか、 main ルーチンからの return で終了しなければな\
らない。さもないと終了時にプロファイル情報が `gmon.out' ファイルにセー\
ブされない。
GPROF(1) GPROF(1)
[1m名前[0m
gprof - コール・グラフ (call graph) のプロファイルを表示する
[1m書式[0m
[1mgprof [ -abcsz ] [ -e|-E [4m[22mname[24m [1m] [ -f|-F
[4m[22mname[24m [1m] [ -k [4m[22mfromname[24m [4mtoname[24m [1m][0m
[1m[ [4m[22mobjfile[24m [1m[ [4m[22mgmon.out[24m [1m] ][0m
[1m説明[0m
[1mgprof [22mは C, Pascal, Fortran77 プログラムの実行プロファイルを生成す
る。呼び出されたルーチンの値は呼び出し元に取り込まれる。プロファイルの
ためのデータはコール・グラフ (call graph: 関数コールの親子関係のグラ
フ) のプロファイルデータファイル (デフォルトでは `gmon.out') から取り
込まれる。このファイルは [1mcc[22m([1m1[22m)[1m、 pc[22m([1m1[22m)[1m、
f77[22m([1m1[22m) で [1m-pg [22mオプションを指
定してコンパイルされたプログラムによって作成される。 [1m-pg [22mオプションで
は、リンクされるライブラリもプロファイル用にコンパイルされたものにな
る。 [1mgprof [22mは指定されたオブジェクトファイル (デフォルトは `a.out') か
らシンボルテーブルを読み、これと `gmon.out' のコール・グラフ・プロファ
イルとを関連付ける。複数のプロファイルデータファイルが指定された場合に
は、 [1mgprof [22mはそれらのプロファイル情報をすべて合計して表示する。
[1mgprof [22mはそれぞれのルーチンによって消費された時間を計算する。次にこれら
の時間をコール・グラフの枝に沿って親ルーチンへと伝播させる。プログラム
のサイクル (cycle: 再帰呼び出しの循環) をまとめ、サイクルへのコールを
行ったルーチンは、サイクルで消費した時間を共有するとみなす。最初のリス
トは関数で、消費時間の順にソートされている。消費時間にはコール・グラフ
での子孫の分も含まれる。それぞれの関数エントリの下には、その関数のコー
ル・グラフでの (直接の) 子と、そこで消費された時間がどのように関数に伝
播したかが表示される。同様の表示は関数の上にも表示されており、その関数
とそれらの子孫で消費された時間がどのようにコール・グラフの (直接の) 親
へ伝播するかが示される。
サイクルも表示される。サイクル全体としてのエントリ、そのサイクルに属す
るメンバーのリストとそれぞれのメンバーによって消費された時間、そのサイ
クルの呼び出し回数などが表示される。
次にフラットプロファイル ([1mprof[22m(1) の結果と似たもの) が与えられる。この
リストでは合計実行時間、呼び出し回数、そのルーチン自身で消費した時間
(ミリ秒単位)、子孫の分も含めて消費した時間 (ミリ秒単位) が表示される。
最後に関数名の索引が与えられる。
[1mオプション[0m
以下のオプションが指定できる:
[1m-a [22mスタティックに宣言された関数を表示しない。このオプションが指定
されると、スタティックな関数に関する全ての情報 (実行時間、他の
関数の呼び出し、他の関数から呼び出される関係など) は、ファイル
`objfile' 中でこのスタティックな関数の直前にロードされた関数に
属することになる。
[1m-b [22mプロファイルのそれぞれのフィールドに関する説明を表示しない。
[1m-c [22mプログラムのスタティックなコール・グラフを、オブジェクトファイ
ルのテキストセグメントを調べるという発見的 (heuristic) な手法
で作成する。スタティック・コールだけの親や子の呼び出し回数は 0
として表示する。
[1m-e [4m[22mname[24m ルーチン [4mname[24m と、その子孫すべてに関するグラフプロファイルのエ
ントリを表示しない (子孫に関しては、別の祖先がいれば表示され
る)。 [1m-e [22mオプションは複数回指定できる。一つの [1m-e [22mオプションに
ついて指定できる [4mname[24m は一つだけである。
[1m-E [4m[22mname[24m [1m-e [22mと同様にルーチン [4mname[24m
とその子孫に関するグラフプロファイル
のエントリを表示しない。また [4mname[24m (とその子孫) によって消費さ
れた時間も、プログラム実行の総時間 (およびパーセンテージの計
算) から除かれる。例えば [1m-E [4m[22mmcount[24m [1m-E
[4m[22mmcleanup[24m はデフォルトに
なっている。
[1m-f [4m[22mname[24m ルーチン [4mname[24m とその子孫に関してのみ、グラフプロファイルのエン
トリを表示する。 [1m-f [22mオプションは複数回指定できる。一つの [1m-f [22mオ
プションについて指定できる [4mname[24m は一つだけである。
[1m-F [4m[22mname[24m [1m-f [22mと同様に、ルーチン [4mname[24m
とその子孫に関してのみ、グラフプロ
ファイルのエントリを表示する。またこれらによって用いられた時間
だけを合計の実行時間とパーセンテージの計算に用いる。 [1m-F [22mオプ
ションは複数指定できる。一つの [1m-F [22mオプションについて指定できる
[4mname[24m は一つだけである。 [1m-F [22mオプションは [1m-E
[22mオプションによる設
定を上書きする。
[1m-k [4m[22mfromname[24m [4mtoname[0m
ルーチン [4mfromname[24m からルーチン [4mtoname[24m までの枝を削除する。これ
は不要なサイクルの循環を破壊するのに便利である。 [1m-k [22mは複数指定
できる。一つの [1m-k [22mオプションに対して指定できるのは一組のルーチ
ン名だけである。
[1m-s [22mプロファイルファイル `gmon.sum' を作成し、指定したプロファイル
ファイルの情報すべてからのプロファイル情報を総計したものを書き
込む。この合計プロファイルファイルは後に gprof を (おそらくは
[1m-s [22mと共に) 実行する際に与えて、 `objfile' ファイルを複数回実行
して得られたプロファイルデータを累積するために用いることもでき
る。
[1m-v [22mgprof のバージョン番号を表示して終了する。
[1m-z [22m用いられなかった関数 (呼び出し回数と実行時間でわかる) も表示す
る。これを [1m-c [22mオプションと共に用いると、呼び出されなかったルー
チンを見つけるのに役に立つ。
[1mファイル[0m
a.out 名前のリストとテキスト空間
gmon.out ダイナミックなコール・グラフとプロファイル
gmon.sum ダイナミックなコール・グラフとプロファイルのまとめ
[1m関連項目[0m
[1mmonitor[22m([1m3[22m)[1m, profil[22m([1m2[22m)[1m,
cc[22m([1m1[22m)[1m, prof[22m([1m1[22m)
``An Execution Profiler for Modular Programs'', by S. Graham, P.
Kessler, M. McKusick; [4mSoftware[24m [4m-[24m [4mPractice[24m
[4mand[24m [4mExperience,[24m Vol. 13, pp.
671-685, 1983.
``gprof: A Call Graph Execution Profiler'', by S. Graham, P. Kessler,
M. McKusick; [4mProceedings[24m [4mof[24m [4mthe[24m
[4mSIGPLAN[24m [4m'82[24m [4mSymposium[24m [4mon[24m [4mCompiler[24m
[4mCon‐[0m
[4mstruction,[24m SIGPLAN Notices, Vol. 17, No 6, pp. 120-126, June
1982.
[1m履歴[0m
[1mgprof [22mは 4.2 BSD から登場した。
[1mバグ[0m
サンプリングの粒度 (granularity) も表示されるが、せいぜい統計的なもの
でしかない。ここでは関数の一回あたりの実行時間は、関数の消費した合計時
間を呼び出し回数で割ったものと仮定している。したがって、呼び出しグラフ
の枝を伝播して関数の親に伝わる時間は、枝を通過した回数に直に比例するこ
とになる。
自分自身がプロファイルされていない親でも、子から伝播してくる時間を保有
することになる。しかしこれらのルーチンは、呼び出しグラフの中で (どこか
ら呼び出されたのでもなく) 勝手に起動するように見えるので、その時間はそ
れ以上どこへも伝播しない。同様に、シグナルをキャッチしたルーチンは、プ
ロファイルされていても勝手に起動するように見えてしまう (理由はもう少し
複雑だが)。シグナルをキャッチしたルーチンの子がプロファイルされていれ
ばその時間を正しく伝播させることができるが、親ルーチンがプロファイル
ルーチンの途中でシグナルがキャッチされた場合には全ての情報は失われる。
プロファイルされるプログラムは [1mexit[22m([1m2[22m) をコールして終了するか、 main
ルーチンからの return で終了しなければならない。さもないと終了時にプロ
ファイル情報が `gmon.out' ファイルにセーブされない。
January 29, 1993 GPROF(1)
- [Groff] Re: Bug#552201: groff-base: Japanese manpages are shown with too wide spaces, Colin Watson, 2010/12/04
- Re: [Groff] Re: Bug#552201: groff-base: Japanese manpages are shown with too wide spaces, Werner LEMBERG, 2010/12/06
- Re: [Groff] Re: Bug#552201: groff-base: Japanese manpages are shown with too wide spaces, Daiki Ueno, 2010/12/07
- Re: [Groff] Re: Bug#552201: groff-base: Japanese manpages are shown with too wide spaces, Werner LEMBERG, 2010/12/08
- Re: [Groff] Re: Bug#552201: groff-base: Japanese manpages are shown with too wide spaces, Werner LEMBERG, 2010/12/12
- Re: [Groff] Re: Bug#552201: groff-base: Japanese manpages are shown with too wide spaces, Daiki Ueno, 2010/12/12
- Re: [Groff] Re: Bug#552201: groff-base: Japanese manpages are shown with too wide spaces, Werner LEMBERG, 2010/12/13
- Re: [Groff] Re: Bug#552201: groff-base: Japanese manpages are shown with too wide spaces, Daiki Ueno, 2010/12/14
- Re: [Groff] Re: Bug#552201: groff-base: Japanese manpages are shown with too wide spaces,
Werner LEMBERG <=