+%<en>\item \textbf{JAchars} are classified in the order as follows:
+%<ja>\item (U+0080以降の)\textbf{JAchar}については,以下の順序に従って文字種を決める:
+\begin{enumerate}
+%<zh>\item ...
+%<en>\item Characters whose \Param{\hyperlink{fld:prebp}{prebreakpenalty}} is greater than or equal to 0 are Open.
+%<ja>\item \Param{\hyperlink{fld:prebp}{prebreakpenalty}}が0以上の文字はOpen扱いである.
+
+%<en>\item Characters whose \Param{\hyperlink{fld:postbp}{postbreakpenalty}} is greater than or equal to 0 are Close.
+%<ja>\item \Param{\hyperlink{fld:postbp}{postbreakpenalty}}が0以上の文字はClose扱いである.
+
+%<en>\item Characters that don't satisfy the above two conditions are Kanji.
+%<ja>\item 上の2条件のどちらにも当てはまらなかった文字は,Kanji扱いである.
+\end{enumerate}
+\end{itemize}
+
+%<*en>
+The width of halfwidth kana (U+FF61--U+FF9F) is same as the width of \textbf{ALchar};
+the width of the other \textbf{JAchars} is double the width of \textbf{ALchar}.
+%</en>
+%<*ja>
+なお,半角カナ(U+FF61--U+FF9F)以外の\textbf{JAchar}は欧文文字2文字分の幅をとるものとみなされる.
+半角カナは欧文文字1文字分の幅となる.
+%</ja>
+
+%<*en>
+The classification process is executed every time a character appears in
+listing environments.
+%</en>
+%<*ja>
+これらの文字種決定は,実際に \texttt{lstlisting} 環境などの内部で文字が出てくるたびに行われる.
+%</ja>
+
+%<*ja>
+\section{和文の行長補正方法}
+\label{sec-adjspec}
+\texttt{luatexja-adjust.sty} で提供される優先順位付きの行長調整の詳細を述
+べる.大まかに述べると,次のようになる.
+\begin{itemize}
+\item 通常の\TeX の行分割方法に従って,段落を行分割する.この段階では,行
+ 長に半端が出た場合,その半端分は\Param{\hyperlink{fld:xks}{xkanjiskip}},
+ \Param{\hyperlink{fld:kanjiskip}{kanjiskip}},JFMグルーの全てで(優先順位なく)負担される.
+\item その後,\texttt{post\_linebreak\_filter} callbackを使い,\textbf{段
+ 落中の各行ごとに},行末文字の位置を調整したり,優先度付きの行長調整
+ を実現するためにグルーの伸縮度を調整する.
+\texttt{luatexja-adjust.sty} の作用は,このcallbackを追加するだけであり,
+ この章の残りではcallbackでの処理について解説する.
+\end{itemize}
+
+\paragraph{準備:合計伸縮量の計算}
+グルーの伸縮度(\texttt{plus} や \texttt{minus} で指定されている値)には,
+有限値の他に,\texttt{fi},\texttt{fil},\texttt{fill},\texttt{filll}と
+いう4つの無限大レベル(後ろの方ほど大きい)があり,行の調整に
+\texttt{fi} などの\textbf{無限大レベルの伸縮度が用いられている場合は,そ
+の行に対しての処理を中止}する.
+
+よって,以降,問題にしている行の行長調整は伸縮度が有限長のグルーを用いて
+行われているとして良い.まず,段落中の行中のグルーを
+\begin{itemize}
+\item 下のどれにも該当しないグルー
+\item JFMグルー(優先度別にまとめられる)
+\item 和欧文間空白(\Param{\hyperlink{fld:xks}{xkanjiskip}})
+\item 和文間空白(\Param{\hyperlink{fld:kanjiskip}{kanjiskip}})
+\end{itemize}
+の$1+1+5+1=8$つに類別し,それぞれの種別ごとに許容されている伸縮度の合計を計算する.
+また,行長と自然長との差の絶対値を計算し,それを\textit{total}とおく.
+
+\subsection{行末文字の位置調整}
+まず,行末が文字クラス$n$の\textbf{Jachar}であった場合,
+それを動かすことによって,\textbf{JAglue} が負担する調整量を少なくしようとする.
+この行末文字の左右の移動可能量は,JFM中にある文字クラス$n$の定義の
+\texttt{end\_stretch},~\texttt{end\_shrink}フィールドに全角単位の値として記述されている.
+
+例えば,行末文字が句点「。」であり,そこで用いられているJFM中に
+\begin{verbatim}
+ [2] = {
+ chars = { '。', ... }, width = 0.5, ...,
+ end_stretch = 0.5, end_shrink = 0.5,
+ },
+\end{verbatim}
+という指定があった場合,この行末の句点は