禁則処理メモ

禁則処理 - Wikipedia
平文テキストを表示(印刷)領域に流し込む過程で必要になる処理。流し込む場合、ある程度流し込むと改行をはさまなければならなくなるが、これをごく単純に何文字置きなどではさむと、表示する時にカッコ悪いことになる(こともある)。したがって、改行を入れるための特別なルールが必要となる。

行頭禁則
これに指定された文字は、行頭に来てはいけない。(=改行の次に来てはいけない)例:句読点
行末禁則
これに指定された文字は、行末に来てはいけない。(=改行の前に来てはいけない)例:カッコ類の左辺
分離禁則
これに指定された文字は、途中に改行をはさんではいけない。例:「…」、半角アルファベット

行頭・行末・分離などと言うと難解になるが、これを「改行を入れてもいいかどうか」で考えるとわかりやすくなる。

例文

小酒井不木 メデューサの首より。

 T医科大学の四年級の夏休みに、わたしは卒業試験のため友人の町田と二人で伊豆山のS旅館に出かけました。六月末のことで避暑客もまだそんなに沢山はいませんでしたから、勉強するには至極適当であったけれども、勉強とは名ばかりで、わたしたちは大いに遊んでしまいました。

下準備

まずは、文字単位で分割する。

 /T/医/科/大/学/の/四/年/級/の/夏/休/み/に/、/わ/た/し/は/卒/業/試/験/の/た/め/友/人/の/町/田/と/二/人/で/伊/豆/山/の/S/旅/館/に/出/か/け/ま/し/た/。/六/月/末/の/こ/と/で/避/暑/客/も/ま/だ/そ/ん/な/に/沢/山/は/い/ま/せ/ん/で/し/た/か/ら/、/勉/強/す/る/に/は/至/極/適/当/で/あ/っ/た/け/れ/ど/も/、/勉/強/と/は/名/ば/か/り/で/、/わ/た/し/た/ち/は/大/い/に/遊/ん/で/し/ま/い/ま/し/た/。

このそれぞれのスラッシュが、改行変換候補になり、改行になるかあるいは削除される。(大半は削除されるだろうが)

禁則処理

この状態に禁則処理を施してみる。
今回は句読点の行頭禁則のみ。行頭禁則文字があった場合、その直前に改行が来てはならないと言うルールが働くため、行頭禁則文字の直前の/は削除される。

 /T/医/科/大/学/の/四/年/級/の/夏/休/み/に、/わ/た/し/は/卒/業/試/験/の/た/め/友/人/の/町/田/と/二/人/で/伊/豆/山/の/S/旅/館/に/出/か/け/ま/し/た。/六/月/末/の/こ/と/で/避/暑/客/も/ま/だ/そ/ん/な/に/沢/山/は/い/ま/せ/ん/で/し/た/か/ら、/勉/強/す/る/に/は/至/極/適/当/で/あ/っ/た/け/れ/ど/も、/勉/強/と/は/名/ば/か/り/で、/わ/た/し/た/ち/は/大/い/に/遊/ん/で/し/ま/い/ま/し/た。

流し込み

禁則処理を施した文字配列の先頭から、順番に文字列を取得していき、その合計幅が表示領域の幅を超えない最大になるようにすると、一行が完成する。

その他の禁則処理

  1. 行末禁則文字は、その文字の直後の/が削除される。
  2. 分離禁則文字は、その文字の次の文字もまた分離禁則文字の時に限り、直後の/が削除される。

切り捨てた事柄

「ふくらませ」は考慮したが、「ぶら下がり」は合わないと考えて切り落とした。

実際のプログラミングへの適用

「配列」が使えれば簡単。