%\chapter{Customising the output of Mercurial}
\chapter{Mercurialの出力のカスタマイズ}
\label{chap:template}

%Mercurial provides a powerful mechanism to let you control how it
%displays information.  The mechanism is based on templates.  You can
%use templates to generate specific output for a single command, or to
%customise the entire appearance of the built-in web interface.

Mercurialには情報の表示をコントロールするための強力な機構がある．この機構
はテンプレートをベースとしている．テンプレートによってあるコマンドから特
別の出力を行ったり，内蔵のウェブインタフェースの見た目をカスタマイズする
ことができる．

%\section{Using precanned output styles}
\section{用意された出力スタイルの利用}
\label{sec:style}

%Packaged with Mercurial are some output styles that you can use
%immediately.  A style is simply a precanned template that someone
%wrote and installed somewhere that Mercurial can find.

すぐに使うことのできるいくつかのスタイルがMercurialに同梱されている．スタ
イルとは缶詰されたテンプレートであり， Mercurialのインストールされたどこ
かのマシンで誰かが書いてインストールしたものである．

%Before we take a look at Mercurial's bundled styles, let's review its
%normal output.

Mercurial同梱のスタイルを見る前に，通常の出力を見てみよう．

\interaction{template.simple.normal}

%This is somewhat informative, but it takes up a lot of space---five
%lines of output per changeset.  The \texttt{compact} style reduces
%this to three lines, presented in a sparse manner.

この出力には有益な情報が含まれているが，1つのチェンジセット毎に5行を使う
など，多くのスペースを費やす．\texttt{compact}スタイルは疎らな方法を使う
ことでこれを3行に減らす．

\interaction{template.simple.compact}

%The \texttt{changelog} style hints at the expressive power of
%Mercurial's templating engine.  This style attempts to follow the GNU
%Project's changelog guidelines\cite{web:changelog}.

\texttt{changelog}スタイルはMercurialのテンプレートエンジンの威力を知るい
い例である．このスタイルはGNUプロジェクトのchangelogガイドライン
\cite{web:changelog}に従おうとする．

\interaction{template.simple.changelog}

%You will not be shocked to learn that Mercurial's default output style
%is named \texttt{default}.

Mercurialのデフォルト出力スタイルが\texttt{default}と名付けられているの
は驚くに値しない．

%\subsection{Setting a default style}
\subsection{デフォルトスタイルの設定}

%You can modify the output style that Mercurial will use for every
%command by editing your \hgrc file, naming the style you would
%prefer to use.

Mercurialの全てのコマンドで用いられる出力スタイルは \hgrc ファイルを編集
することで設定でき，好きな名前を付けることができる．

\begin{codesample2}
  [ui]
  style = compact
\end{codesample2}

%If you write a style of your own, you can use it by either providing
%the path to your style file, or copying your style file into a
%location where Mercurial can find it (typically the \texttt{templates}
%subdirectory of your Mercurial install directory).

自分でスタイルを書いたときは，スタイルファイルのパスを追加したり，ファイ
ルをMercurialが発見できる場所(典型的には，Mercurialのインストールディレク
トリの\texttt{templates}サブディレクトリ)にコピーすることで利用可能にな
る．

%\section{Commands that support styles and templates}
\section{スタイルとテンプレートをサポートするコマンド}

%All of Mercurial's ``\texttt{log}-like'' commands let you use styles
%and templates: \hgcmd{incoming}, \hgcmd{log}, \hgcmd{outgoing}, and
%\hgcmd{tip}.

Mercurialの``\texttt{log}系''の全てのコマンド: \hgcmd{incoming},
\hgcmd{log}, \hgcmd{outgoing}, および\hgcmd{tip}はスタイルとテンプレート
を利用している．

%As I write this manual, these are so far the only commands that
%support styles and templates.  Since these are the most important
%commands that need customisable output, there has been little pressure
%from the Mercurial user community to add style and template support to
%other commands.

このマニュアルで書いているように，これまでのところ，これらのコマンドだけ
がスタイルとテンプレートをサポートしている．これらがカスタマイズ可能な出
力が必要な最も重要なコマンドであるため， Mercurialのユーザコミュニティか
ら他のコマンドにスタイルとテンプレートサポートを適用可能にせよというプレッ
シャーはほとんどない．

%\section{The basics of templating}
\section{テンプレートの基本}

%At its simplest, a Mercurial template is a piece of text.  Some of the
%text never changes, while other parts are \emph{expanded}, or replaced
%with new text, when necessary.

最も単純なMercurialテンプレートはテキストの断片である．テキストの一部は必
要に応じて\emph{展開}されたり新しいテキストに置換され，別の部分は不変で
ある．

%Before we continue, let's look again at a simple example of
%Mercurial's normal output.

さらに続ける前にMercurial標準出力の例をもう一度見てみよう．

\interaction{template.simple.normal}

%Now, let's run the same command, but using a template to change its
%output.

ここで同じコマンドを出力を変化させるためにテンプレートを使ってみよう．

\interaction{template.simple.simplest}

%The example above illustrates the simplest possible template; it's
%just a piece of static text, printed once for each changeset.  The
%\hgopt{log}{--template} option to the \hgcmd{log} command tells
%Mercurial to use the given text as the template when printing each
%changeset.

上の例は最も単純なテンプレートを示した; 静的なテキストだけからなり，各チェ
ンジセットについて一度だけ出力を行う．\hgcmd{log}コマンドに
\hgopt{log}{--template}オプションを使うとMercurialは各々のチェンジセット
を出力するときに，与えられたテキストをテンプレートとして用いる．

%Notice that the template string above ends with the text
%``\Verb+\n+''.  This is an \emph{escape sequence}, telling Mercurial
%to print a newline at the end of each template item.  If you omit this
%newline, Mercurial will run each piece of output together.  See
%section~\ref{sec:template:escape} for more details of escape sequences.

テンプレート文字列は``\Verb+\n+''で終ることに注意．これはMercurialにテン
プレートの各要素の末尾に改行を出力するよう指示する\emph{エスケープシーケ
ンス}である．この改行を省略するとMercurialは各要素を繋げて出力する．エス
ケープシーケンスのより詳細な説明については~\ref{sec:template:escape}節を
参照のこと．

%A template that prints a fixed string of text all the time isn't very
%useful; let's try something a bit more complex.

常に固定文字列を出力するテンプレートはあまり有用であるとは言えない．もう
少し込み入ったテンプレートを試そう．

\interaction{template.simple.simplesub}

%As you can see, the string ``\Verb+{desc}+'' in the template has been
%replaced in the output with the description of each changeset.  Every
%time Mercurial finds text enclosed in curly braces (``\texttt{\{}''
%and ``\texttt{\}}''), it will try to replace the braces and text with
%the expansion of whatever is inside.  To print a literal curly brace,
%you must escape it, as described in section~\ref{sec:template:escape}.

テンプレート内の``\Verb+{desc}+''という文字列は出力では，各々のチェンジセッ
トの説明に置換される．Mercurialは中括弧(``\texttt{\{}''と
``\texttt{\}}'')で囲まれたテキストを見つけると中括弧とテキストを内部のテ
キストを展開したものに置換しようと試みる．文字として中括弧を印字したい場
合は~\ref{sec:template:escape}節で示すようにエスケープする必要がある．

%\section{Common template keywords}
\section{テンプレートの共通キーワード}
\label{sec:template:keyword}

%You can start writing simple templates immediately using the keywords
%below.

単純なテンプレートは以下のようなキーワードを使って直ちに書くことができる．

\begin{itemize}
%\item[\tplkword{author}] String.  The unmodified author of the changeset.
\item[\tplkword{author}] 文字列．チェンジセットの著者．
%\item[\tplkword{branches}] String.  The name of the branch on which
%  the changeset was committed.  Will be empty if the branch name was
%  \texttt{default}.
\item[\tplkword{branches}] 文字列．チェンジセットがコミットされたブラン
			 チの名前．ブランチ名が\texttt{default}の場合は
			 空欄となる．
%\item[\tplkword{date}] Date information.  The date when the changeset
%  was committed.  This is \emph{not} human-readable; you must pass it
%  through a filter that will render it appropriately.  See
%  section~\ref{sec:template:filter} for more information on filters.
%  The date is expressed as a pair of numbers.  The first number is a
%  Unix UTC timestamp (seconds since January 1, 1970); the second is
%  the offset of the committer's timezone from UTC, in seconds.
\item[\tplkword{date}] 日時情報．チェンジセットがコミットされた日時．これ
			 は人間の可読な形式では\emph{ない}．必ず適切なフィ
			 ルタを呼び出して変換する必要がある．フィルタに関
			 するより詳細な説明は~\ref{sec:template:filter}
			 節を参照のこと．日時は2つの数字の組み合わせで表
			 される．最初の数字はUTCでのUnixタイムスタンプ
			 (1970年1月1日からの秒数)で，2番目の数字はコミッ
			 タのタイムゾーンのUTCからの時差を秒数で表したも
			 のである．
%\item[\tplkword{desc}] String.  The text of the changeset description.
\item[\tplkword{desc}] 文字列．チェンジセットの説明文．

%\item[\tplkword{files}] List of strings.  All files modified, added, or
%  removed by this changeset.
\item[\tplkword{files}] 文字列のリスト．このチェンジセットで変更，追加，
			 削除された全てのファイルの名前．

%\item[\tplkword{file\_adds}] List of strings.  Files added by this
%  changeset.
\item[\tplkword{file\_adds}] 文字列のリスト．このチェンジセットで追加さ
			 れたファイルの名前．

%\item[\tplkword{file\_dels}] List of strings.  Files removed by this
%  changeset.
\item[\tplkword{file\_dels}] 文字列のリスト．このチェンジセットで削除さ
			 れたファイルの名前．

%\item[\tplkword{node}] String.  The changeset identification hash, as a
%  40-character hexadecimal string.
\item[\tplkword{node}] 文字列．チェンジセットの識別ハッシュを40文字の16
			 進数で示したもの．

%\item[\tplkword{parents}] List of strings.  The parents of the
%  changeset.
\item[\tplkword{parents}] 文字列のリスト．チェンジセットの親．

%\item[\tplkword{rev}] Integer.  The repository-local changeset revision
%  number.
\item[\tplkword{rev}] 整数．リポジトリローカルのチェンジセットリビジョン
			 番号．

%\item[\tplkword{tags}] List of strings.  Any tags associated with the
%  changeset.
\item[\tplkword{tags}] 文字列のリスト．チェンジセットに関連づけられた任
			 意のタグ．
\end{itemize}

%A few simple experiments will show us what to expect when we use these
%keywords; you can see the results in
%figure~\ref{fig:template:keywords}.

いくつか試してみればこれらのキーワードにどのような効果があるのかを知るこ
とができる．結果を図~\ref{fig:template:keywords}に示す．

\begin{figure}
  \interaction{template.simple.keywords}
%  \caption{Template keywords in use}
  \caption{テンプレートキーワードの使用}
  \label{fig:template:keywords}
\end{figure}

%As we noted above, the date keyword does not produce human-readable
%output, so we must treat it specially.  This involves using a
%\emph{filter}, about which more in section~\ref{sec:template:filter}.

既に述べたように，dateキーワードは可読な出力を行わないため，特別な取り扱
いが必要である．その目的で\emph{filter}を使用するが，より詳細に
は~\ref{sec:template:filter}節で取り扱う．

\interaction{template.simple.datekeyword}

%\section{Escape sequences}
\section{エスケープシーケンス}
\label{sec:template:escape}

%Mercurial's templating engine recognises the most commonly used escape
%sequences in strings.  When it sees a backslash (``\Verb+\+'')
%character, it looks at the following character and substitutes the two
%characters with a single replacement, as described below.

Mercurialのテンプレートエンジンは文字列で最もよく使用されるエスケープシー
ケンスを認識する．エンジンはバックスラッシュ(``\Verb+\+'')を見つけると後
続の文字を含む2文字を以下のような1文字で置換する．

\begin{itemize}
%\item[\Verb+\textbackslash\textbackslash+] Backslash, ``\Verb+\+'',
%  ASCII~134.
%\item[\Verb+\textbackslash n+] Newline, ASCII~12.
%\item[\Verb+\textbackslash r+] Carriage return, ASCII~15.
%\item[\Verb+\textbackslash t+] Tab, ASCII~11.
%\item[\Verb+\textbackslash v+] Vertical tab, ASCII~13.
%\item[\Verb+\textbackslash \{+] Open curly brace, ``\Verb+{+'', ASCII~173.
%\item[\Verb+\textbackslash \}+] Close curly brace, ``\Verb+}+'', ASCII~175.
\item[\Verb+\textbackslash\textbackslash+] バックスラッシュ, ``\Verb+\+'',
  ASCII~134.
\item[\Verb+\textbackslash n+] 改行, ASCII~12.
\item[\Verb+\textbackslash r+] 復帰, ASCII~15.
\item[\Verb+\textbackslash t+] タブ, ASCII~11.
\item[\Verb+\textbackslash v+] 垂直タブ, ASCII~13.
\item[\Verb+\textbackslash \{+] 開き中括弧, ``\Verb+{+'', ASCII~173.
\item[\Verb+\textbackslash \}+] 閉じ中括弧, ``\Verb+}+'', ASCII~175.
\end{itemize}

%As indicated above, if you want the expansion of a template to contain
%a literal ``\Verb+\+'', ``\Verb+{+'', or ``\Verb+{+'' character, you
%must escape it.

上に示したように，テンプレートの展開の際に文字
``\Verb+\+'', ``\Verb+{+'', または``\Verb+{+''を入れたい場合はエスケープ
することが必要である．

%\section{Filtering keywords to change their results}
\section{結果を改変するフィルタキーワード}
\label{sec:template:filter}

%Some of the results of template expansion are not immediately easy to
%use.  Mercurial lets you specify an optional chain of \emph{filters}
%to modify the result of expanding a keyword.  You have already seen a
%common filter, \tplkwfilt{date}{isodate}, in action above, to make a
%date readable.

テンプレート展開の結果には，そのままでは利用しづらいものもある．
Mercurialが提供する\emph{filters}オプションを用いて，展開されたキーワード
を読みやすく加工することができる．日時を可読にするためによく用いられる
\tplkwfilt{date}{isodate}フィルタの動作例については既に見てきた．

%Below is a list of the most commonly used filters that Mercurial
%supports.  While some filters can be applied to any text, others can
%only be used in specific circumstances.  The name of each filter is
%followed first by an indication of where it can be used, then a
%description of its effect.

以下に示すのはMercurialがサポートするフィルタの中で最もよく使われるもので
ある．いくつかのフィルタは任意の文字列に対して適用可能な一方，他のものは
特定の状況においてのみ利用可能である．各々のフィルタの名前は，利用可能な
状況を示す表示で始まり，得られる効果の説明が続く．

\begin{itemize}
%\item[\tplfilter{addbreaks}] Any text. Add an XHTML ``\Verb+<br/>+''
%  tag before the end of every line except the last.  For example,
%  ``\Verb+foo\nbar+'' becomes ``\Verb+foo<br/>\nbar+''.

\item[\tplfilter{addbreaks}] 任意のテキスト．XHTMLタグ``\Verb+<br/>+''
を最終行以外の各行の末尾に追加する．例えば``\Verb+foo\nbar+''は
			     ``\Verb+foo<br/>\nbar+''となる．

%\item[\tplkwfilt{date}{age}] \tplkword{date} keyword.  Render the
%  age of the date, relative to the current time.  Yields a string like
%  ``\Verb+10 minutes+''.

\item[\tplkwfilt{date}{age}] \tplkword{date}キーワード．日時の経過時間を
			     現在を起点に整形する．結果は
			     ``\Verb+10 minutes+''のようになる

%\item[\tplfilter{basename}] Any text, but most useful for the
%  \tplkword{files} keyword and its relatives.  Treat the text as a
%  path, and return the basename. For example, ``\Verb+foo/bar/baz+''
%  becomes ``\Verb+baz+''.

\item[\tplfilter{basename}] 任意のテキストだが，\tplkword{files}キーワー
			     ドやその関連キーワードに対して最も有用であ
			     る．テキストをパスとして扱い，ベースネームを
			     返す．例えば``\Verb+foo/bar/baz+''は
			     ``\Verb+baz+''となる．

%\item[\tplkwfilt{date}{date}] \tplkword{date} keyword.  Render a date
%  in a similar format to the Unix \tplkword{date} command, but with
%  timezone included.  Yields a string like
%  ``\Verb+Mon Sep 04 15:13:13 2006 -0700+''.

\item[\tplkwfilt{date}{date}] \tplkword{date}キーワード．日時をUnixの
			     \tplkword{date}コマンドの出力にタイムゾーン
			     情報を追加した形式に整形する．結果は
			     ``\Verb+Mon Sep 04 15:13:13 2006 -0700+''の
			     ようになる．

%\item[\tplkwfilt{author}{domain}] Any text, but most useful for the
%  \tplkword{author} keyword.  Finds the first string that looks like
%  an email address, and extract just the domain component.  For
%  example, ``\Verb+Bryan O'Sullivan <bos@serpentine.com>+'' becomes
%  ``\Verb+serpentine.com+''.

\item[\tplkwfilt{author}{domain}] 任意のテキスト．\tplkword{author}キーワー
			     ドでの使用に最も有用．最初に現れるemailアド
			     レス形式の文字列を見つけ，ドメイン部分だけを
			     抜き出す．例えば
			     ``\Verb+Bryan O'Sullivan <bos@serpentine.com>+''
			     は``\Verb+serpentine.com+''となる．

%\item[\tplkwfilt{author}{email}] Any text, but most useful for the
%  \tplkword{author} keyword.  Extract the first string that looks like
%  an email address.  For example,
%  ``\Verb+Bryan O'Sullivan <bos@serpentine.com>+'' becomes
%  ``\Verb+bos@serpentine.com+''.

\item[\tplkwfilt{author}{email}] 任意のテキスト．\tplkword{author}キーワー
			     ドで最も有用．最初に現れるemailアドレス形式
			     の文字列を抜き出す．例えば
			     ``\Verb+Bryan O'Sullivan <bos@serpentine.com>+''
			     は``\Verb+bos@serpentine.com+''となる．

%\item[\tplfilter{escape}] Any text.  Replace the special XML/XHTML
%  characters ``\Verb+&+'', ``\Verb+<+'' and ``\Verb+>+'' with
%  XML entities.

\item[\tplfilter{escape}] 任意のテキスト．XML/XHTML文字
			     ``\Verb+&+'', ``\Verb+<+''および
			     ``\Verb+>+''をXMLエンティティで置換する．

%\item[\tplfilter{fill68}] Any text.  Wrap the text to fit in 68
%  columns.  This is useful before you pass text through the
%  \tplfilter{tabindent} filter, and still want it to fit in an
%  80-column fixed-font window.

\item[\tplfilter{fill68}] 任意のテキスト．テキストを68桁に収まるように整
			     形する．これは80桁に固定された端末での表示用
			     に\tplfilter{tabindent}フィルタを使う際に便
			     利である．

%\item[\tplfilter{fill76}] Any text.  Wrap the text to fit in 76
%  columns.

\item[\tplfilter{fill76}] 任意のテキスト．76桁に収まるように整形する．

%\item[\tplfilter{firstline}] Any text.  Yield the first line of text,
%  without any trailing newlines.

\item[\tplfilter{firstline}] 任意のテキスト最初の行だけを出力し，後続の
			     行は一切出力しない．

%\item[\tplkwfilt{date}{hgdate}] \tplkword{date} keyword.  Render the
%  date as a pair of readable numbers.  Yields a string like
%  ``\Verb+1157407993 25200+''.

\item[\tplkwfilt{date}{hgdate}] \tplkword{date}キーワード．日時を可読な
			     数字のペアに整形する．``\Verb+115740799325200+''のような文字列を出力する．

%\item[\tplkwfilt{date}{isodate}] \tplkword{date} keyword.  Render the
%  date as a text string in ISO~8601 format.  Yields a string like
%  ``\Verb+2006-09-04 15:13:13 -0700+''.

\item[\tplkwfilt{date}{isodate}] \tplkword{date}キーワード．日時を
			     ISO~8601フォーマットに整形する．出力は
			     ``\Verb+2006-09-04 15:13:13 -0700+''のように
			     なる．

%\item[\tplfilter{obfuscate}] Any text, but most useful for the
%  \tplkword{author} keyword.  Yield the input text rendered as a
%  sequence of XML entities.  This helps to defeat some particularly
%  stupid screen-scraping email harvesting spambots.

\item[\tplfilter{obfuscate}]任意のテキスト．\tplkword{author}キーワードと
			     併せて利用する場合最も有用．入力されたテキス
			     トをXMLエンティティのシーケンスとして出力す
			     る．これは画面をスクレイピングする間抜けなス
			     パムボットを避ける働きがある．

%\item[\tplkwfilt{author}{person}] Any text, but most useful for the
%  \tplkword{author} keyword.  Yield the text before an email address.
%  For example, ``\Verb+Bryan O'Sullivan <bos@serpentine.com>+''
%  becomes ``\Verb+Bryan O'Sullivan+''.

\item[\tplkwfilt{author}{person}] 任意のテキスト．\tplkword{author}キー
	     ワードと合わせて使う場合もっとも有用．emailアドレスの前のテ
	     キストを抽出する．例えば``\Verb+Bryan O'Sullivan <bos@serpentine.com>+''は``\Verb+Bryan O'Sullivan+''となる．

%\item[\tplkwfilt{date}{rfc822date}] \tplkword{date} keyword.  Render a
%  date using the same format used in email headers.  Yields a string
%  like ``\Verb+Mon, 04 Sep 2006 15:13:13 -0700+''.

\item[\tplkwfilt{date}{rfc822date}] \tplkword{date}キーワード．日時を
	     emailヘッダと同じ形式で整形する．``\Verb+Mon, 04 Sep 2006 15:13:13 -0700+''のような文字列を生成する．

%\item[\tplkwfilt{node}{short}] Changeset hash.  Yield the short form
%  of a changeset hash, i.e.~a 12-byte hexadecimal string.

\item[\tplkwfilt{node}{short}] チェンジセットハッシュ．短形式のチェンジ
	     セットハッシュ，すなわち12バイトの16進数文字列を生成する．

%\item[\tplkwfilt{date}{shortdate}] \tplkword{date} keyword.  Render
%  the year, month, and day of the date.  Yields a string like
%  ``\Verb+2006-09-04+''.

\item[\tplkwfilt{date}{shortdate}] \tplkword{date}キーワード．年月日を整
	     形する．``\Verb+2006-09-04+''のような文字列を生成する．

%\item[\tplfilter{strip}] Any text.  Strip all leading and trailing
%  whitespace from the string.

\item[\tplfilter{strip}] 任意のテキスト．文字列の前後の空白部分を除去す
	     る．

%\item[\tplfilter{tabindent}] Any text.  Yield the text, with every line
%  except the first starting with a tab character.

\item[\tplfilter{tabindent}] 任意のテキスト．タブ文字で始まらない行すべ
	     てを出力する．

%\item[\tplfilter{urlescape}] Any text.  Escape all characters that are
%  considered ``special'' by URL parsers.  For example, \Verb+foo bar+
%  becomes \Verb+foo%20bar+.

\item[\tplfilter{urlescape}] 任意のテキスト．URLパーサから見て``特別''な
	     文字のエスケープを行う．例えば \Verb+foo bar+ は
	     \Verb+foo\%20bar+ となる．

%\item[\tplkwfilt{author}{user}] Any text, but most useful for the
%  \tplkword{author} keyword.  Return the ``user'' portion of an email
%  address.  For example,
%  ``\Verb+Bryan O'Sullivan <bos@serpentine.com>+'' becomes
%  ``\Verb+bos+''.

\item[\tplkwfilt{author}{user}] 任意のテキスト．\tplkword{author}キーワー
	     ドと共に使った場合に最も有用．emailアドレスからユーザ名の部
	     分を抜き出す．例えば``\Verb+Bryan O'Sullivan <bos@serpentine.com>+''は``\Verb+bos+''となる．
\end{itemize}

\begin{figure}
  \interaction{template.simple.manyfilters}
%  \caption{Template filters in action}
  \caption{テンプレートフィルタの動作}
  \label{fig:template:filters}
\end{figure}

\begin{note}
%  If you try to apply a filter to a piece of data that it cannot
%  process, Mercurial will fail and print a Python exception.  For
%  example, trying to run the output of the \tplkword{desc} keyword
%  into the \tplkwfilt{date}{isodate} filter is not a good idea.
フィルタを適用不能なデータに対して使おうとするとMercurialはエラーを起こ
 し，Pythonからの例外を出力する．例えば\tplkword{desc}キーワードの出力に
 \tplkwfilt{date}{isodate}フィルタを適用するのはいい考えとは言えない．

\end{note}

%\subsection{Combining filters}
\subsection{組み合わせフィルタ}

%It is easy to combine filters to yield output in the form you would
%like.  The following chain of filters tidies up a description, then
%makes sure that it fits cleanly into 68 columns, then indents it by a
%further 8~characters (at least on Unix-like systems, where a tab is
%conventionally 8~characters wide).

複数のフィルタを組み合わせ，望みの出力を簡単に作ることができる．ここでは
例として，説明文を整理し，きれいに68桁に収まるように整形し，8文字のインデ
ントを行うフィルタチェーンを示す．（UNIXシステムの習慣では，タブ幅は8桁で
ある．）

\interaction{template.simple.combine}

%Note the use of ``\Verb+\t+'' (a tab character) in the template to
%force the first line to be indented; this is necessary since
%\tplkword{tabindent} indents all lines \emph{except} the first.

テンプレートで最初の行をインデントするためには``\Verb+\t+''（タブ文字）を
使う必要がある．なぜなら\tplkword{tabindent}は最初の行\emph{以外}のイン
デントを行うからである．

%Keep in mind that the order of filters in a chain is significant.  The
%first filter is applied to the result of the keyword; the second to
%the result of the first filter; and so on.  For example, using
%\Verb+fill68|tabindent+ gives very different results from
%\Verb+tabindent|fill68+.

フィルタを組み合わせる時フィルタの順序が重要であることを頭に置いておく必
要がある．最初のフィルタはキーワードの結果に対して適用され，2番目のフィル
タは最初のフィルタの結果に対して適用される．例を挙げる
と，\Verb+fill68|tabindent+ と \Verb+tabindent|fill68+ の結果は全く違う
ものである．

%\section{From templates to styles}
\section{テンプレートからスタイルへ}

%A command line template provides a quick and simple way to format some
%output.  Templates can become verbose, though, and it's useful to be
%able to give a template a name.  A style file is a template with a
%name, stored in a file.

コマンドラインテンプレートは出力をフォーマットするための素早く単純な方法
を提供する．テンプレートはメッセージを多く出力するようにもできるが，テン
プレートに名前を付けるのは有益である．スタイルファイルは，ファイルに保存
された名前を付けられたテンプレートである．

%More than that, using a style file unlocks the power of Mercurial's
%templating engine in ways that are not possible using the command line
%\hgopt{log}{--template} option.

さらに，スタイルファイルを使うことで，Mercurialのテンプレートエンジンのコ
マンドライン\hgopt{log}{--template}オプションからでは利用できない力を最大
限に引き出すことができる．

%\subsection{The simplest of style files}
\subsection{最も単純なスタイルファイル}

%Our simple style file contains just one line:

サンプルスタイルファイルはただの1行からなる:

\interaction{template.simple.rev}

%This tells Mercurial, ``if you're printing a changeset, use the text
%on the right as the template''.

これはMercurialに``チェンジセットを出力する時は右のテキストをテンプレート
として使え''という指示を与える．

%\subsection{Style file syntax}
\subsection{スタイルファイルの文法}

%The syntax rules for a style file are simple.

スタイルファイルの文法規則は単純である．

\begin{itemize}
%\item The file is processed one line at a time.
\item ファイルは一度に1行ずつ処理される

%\item Leading and trailing white space are ignored.
\item 前後の空白は無視される

%\item Empty lines are skipped.
\item 空行はスキップされる

%\item If a line starts with either of the characters ``\texttt{\#}'' or
%  ``\texttt{;}'', the entire line is treated as a comment, and skipped
%  as if empty.
\item 行が``\texttt{\#}''または``\texttt{;}''で始まる場合は，行全体がコ
      メントとして扱われ，空白と同様にスキップされる．

%\item A line starts with a keyword.  This must start with an
%  alphabetic character or underscore, and can subsequently contain any
%  alphanumeric character or underscore.  (In regexp notation, a
%  keyword must match \Verb+[A-Za-z_][A-Za-z0-9_]*+.)
\item 行はキーワードで始まる．必ずアルファベットかアンダースコアで始まる
      必要があり，後続の文字はアルファベット，数字，アンダースコアのいず
      れかであってよい．（正規表現では\Verb+[A-Za-z_][A-Za-z0-9_]*+とマッ
      チする）

%\item The next element must be an ``\texttt{=}'' character, which can
%  be preceded or followed by an arbitrary amount of white space.
\item 次の要素は文字``\texttt{=}''で，前後に空白が入っても良い．

%\item If the rest of the line starts and ends with matching quote
%  characters (either single or double quote), it is treated as a
%  template body.
\item 数の釣り合ったシングルクォートまたはダブルクォートで括られる部分が
      続く場合はこれがテンプレートボディとして扱われる．

%\item If the rest of the line \emph{does not} start with a quote
%  character, it is treated as the name of a file; the contents of this
%  file will be read and used as a template body.
\item 続く部分がクォート文字で始まらない場合はファイル名として扱われ，ファ
      イルの内容がテンプレートボディとして使われる．

\end{itemize}

%\section{Style files by example}
\section{スタイルファイルの例}

%To illustrate how to write a style file, we will construct a few by
%example.  Rather than provide a complete style file and walk through
%it, we'll mirror the usual process of developing a style file by
%starting with something very simple, and walking through a series of
%successively more complete examples.

スタイルファイルの書き方を説明するためにいくつかの例題を挙げてみる．完全
なスタイルファイルを用意してこれを説明するのではなく，とても単純な例から
始めて，だんだんと複雑な例に進むことでスタイルファイルの通常の開発プロセ
スを模倣してみる．

%\subsection{Identifying mistakes in style files}
\subsection{スタイルファイルでの誤りを特定する}

%If Mercurial encounters a problem in a style file you are working on,
%it prints a terse error message that, once you figure out what it
%means, is actually quite useful.

Mercurialがスタイルファイルで問題に直面すると，簡潔なエラーメッセージを表
示する．このメッセージはその意味するところが分かっていればとても有益であ
る．

\interaction{template.svnstyle.syntax.input}

%Notice that \filename{broken.style} attempts to define a
%\texttt{changeset} keyword, but forgets to give any content for it.
%When instructed to use this style file, Mercurial promptly complains.

\filename{broken.style}で\texttt{changeset}キーワードを定義しようとしてい
るが，定義の内容が全く与えられていない．このスタイルファイルを使おうとす
ると，Mercurialはすぐさまエラーを表示する．

\interaction{template.svnstyle.syntax.error}

%This error message looks intimidating, but it is not too hard to
%follow.

このエラーメッセージは恐ろしげだが，対応するのはさほど難しくない．

\begin{itemize}
%\item The first component is simply Mercurial's way of saying ``I am
%  giving up''.
 \item 最初の部分は``ギブアップ''のMercurial的な表現である．
  \begin{codesample4}
    \textbf{abort:} broken.style:1: parse error
  \end{codesample4}

%\item Next comes the name of the style file that contains the error.
\item 次にエラーのあるスタイルファイル名が表示される
  \begin{codesample4}
    abort: \textbf{broken.style}:1: parse error
  \end{codesample4}

%\item Following the file name is the line number where the error was
%  encountered.
 \item ファイル名の後にエラーの起きた行番号が続く．
  \begin{codesample4}
    abort: broken.style:\textbf{1}: parse error
  \end{codesample4}

%\item Finally, a description of what went wrong.
 \item 最後に問題点の説明が表示される
  \begin{codesample4}
    abort: broken.style:1: \textbf{parse error}
  \end{codesample4}
%  The description of the problem is not always clear (as in this
%  case), but even when it is cryptic, it is almost always trivial to
%  visually inspect the offending line in the style file and see what
%  is wrong.
問題の説明は常に明快であるとは限らない．（この例のように．）しかし謎めい
       ていたとしても，殆んどの場合，スタイルファイルの問題のある行を見
       ると，ごく些細な問題にすぎないものである．
\end{itemize}

%\subsection{Uniquely identifying a repository}
\subsection{リポジトリの特定}

%If you would like to be able to identify a Mercurial repository
%``fairly uniquely'' using a short string as an identifier, you can
%use the first revision in the repository.
%\interaction{template.svnstyle.id}

%This is not guaranteed to be unique, but it is nevertheless useful in
%many cases.

短い文字列を識別子に使ってMercurialリポジトリを特定したい場合は
リポジトリ内の最初のリビジョンを使うことができる．
\interaction{template.svnstyle.id}
これはユニークであることが保証されているわけではないが，多くの場合に有用
であることはいうまでもない．

\begin{itemize}
%\item It will not work in a completely empty repository, because such
%  a repository does not have a revision~zero.
 \item 完全に空のリポジトリではこの方法は使えない．空のリポジトリにはリ
       ビジョン~ゼロすら存在しないためである．

%\item Neither will it work in the (extremely rare) case where a
%  repository is a merge of two or more formerly independent
%  repositories, and you still have those repositories around.
 \item 独立した複数のリポジトリをマージしてリポジトリを作成し，これらの
       リポジトリが依然として存在するなどの（きわめて稀な）場合はこの方
       法は使えない．
\end{itemize}
%Here are some uses to which you could put this identifier:
この識別子の使用例を示す:
\begin{itemize}
%\item As a key into a table for a database that manages repositories
%  on a server.
 \item サーバ上でリポジトリを管理するデータベース用のテーブルへのキーとして．

%\item As half of a \{\emph{repository~ID}, \emph{revision~ID}\} tuple.
%  Save this information away when you run an automated build or other
%  activity, so that you can ``replay'' the build later if necessary.
 \item \{\emph{repository~ID}, \emph{revision~ID}\}タプルの半分として．自
動ビルドやその他の操作を行うときにこの情報をセーブしておき，後でビルドを
再現することが必要となったら``リプレイ''を行えるようにする．

\end{itemize}

%\subsection{Mimicking Subversion's output}
\subsection{Subversion出力の模倣}

%Let's try to emulate the default output format used by another
%revision control tool, Subversion.
%\interaction{template.svnstyle.short}

別のバージョン管理ツールであるSubversionの出力をエミュレートしてみよう．
\interaction{template.svnstyle.short}

%Since Subversion's output style is fairly simple, it is easy to
%copy-and-paste a hunk of its output into a file, and replace the text
%produced above by Subversion with the template values we'd like to see
%expanded.

Subversionの出力スタイルはかなり単純なので，出力からファイルへhunkをコピー
＆ペーストし，Subversionが生成したテキストをテンプレートによって置換する
のは簡単である．
\interaction{template.svnstyle.template}

%There are a few small ways in which this template deviates from the
%output produced by Subversion.

テンプレートによる出力がSubversionが生成する出力と異なる2, 3の例がある．

\begin{itemize}
%\item Subversion prints a ``readable'' date (the ``\texttt{Wed, 27 Sep
%    2006}'' in the example output above) in parentheses.  Mercurial's
%  templating engine does not provide a way to display a date in this
%  format without also printing the time and time zone.
 \item Subversionは中括弧で囲まれた``可読な''日時を出力する．（上の例では
       ``\texttt{Wed, 27 Sep 2006}''．） Mercurialのテンプレートエンジン
       はこのフォーマットで時刻とタイムゾーンを含まない形で日時を出力する
       ことができない．

%\item We emulate Subversion's printing of ``separator'' lines full of
%  ``\texttt{-}'' characters by ending the template with such a line.
%  We use the templating engine's \tplkword{header} keyword to print a
%  separator line as the first line of output (see below), thus
%  achieving similar output to Subversion.
 \item Subversionの``セパレータ''行の出力をテンプレートを行幅一杯の
       ``\texttt{-}''文字で終えることでエミュレートしている．テンプレート
       エンジンの\tplkword{header}キーワードを使ってセパレータ行を出力の
       最初の行として出力する．（下記を参照．）これによってSubversionと似
       通った出力を行っている．

%\item Subversion's output includes a count in the header of the number
%  of lines in the commit message.  We cannot replicate this in
%  Mercurial; the templating engine does not currently provide a filter
%  that counts the number of items it is passed.
 \item Subversionの出力はヘッダ内にコミットメッセージの行数のカウントを
       含んでいる．Mercurialではこれを再現することはできない．テンプレー
       トエンジンは現状では渡されたアイテムを数えるフィルタを作ることが
       できない．
\end{itemize}
%It took me no more than a minute or two of work to replace literal
%text from an example of Subversion's output with some keywords and
%filters to give the template above.  The style file simply refers to
%the template.

Subversionの出力を参考に，テキストを置換するキーワード，テンプレートの入っ
たフィルタを準備するのにはほんの１，２分しかかからなかった．スタイルファ
イルは単純にテンプレートを参照するのみである

\interaction{template.svnstyle.style}

%We could have included the text of the template file directly in the
%style file by enclosing it in quotes and replacing the newlines with
%``\texttt{\\n}'' sequences, but it would have made the style file too
%difficult to read.  Readability is a good guide when you're trying to
%decide whether some text belongs in a style file, or in a template
%file that the style file points to.  If the style file will look too
%big or cluttered if you insert a literal piece of text, drop it into a
%template instead.

テンプレートファイルのテキストをクォートで括り，改行を``\texttt{\\n}''で
エスケープすることでスタイルファイルに直接追加することも可能ではある．し
かしそうした場合，スタイルファイルがほとんど読めないほど複雑になってしま
うだろう．テキストをスタイルファイルに入れるか，スタイルファイルから呼ば
れるテンプレートファイルに入れるかは，可読性を考慮して決定すべきである．
もしテキストを追加したことでスタイルファイルが大きくなり過ぎたり，乱雑に
なったりした場合は，テンプレートへの移動を考慮するとよい．

%%% Local Variables:
%%% mode: yatex
%%% TeX-master: "00book"
%%% End:
