このディレクトリの索引
# 左横書き文書を右縦書き文書に変換してください
#

左横書き文書を右縦書き文書に変換(_横書きの行ならび,_縦書きに置換された行ならび) :-
        行の最大長まで空白を付加した文字ならびのならびを作る(_横書きの行ならび,_文字ならびのならび),
        転置(_文字ならびのならび,_縦書き用に転置された文字ならびのならび),
        右書き用に反転して文字列に戻す(_縦書き用に転置された文字ならびのならび,_縦書きに置換された行ならび),!.

行の最大長まで空白を付加した文字ならびのならびを作る(_横書きの行ならび,_文字ならびのならび) :-
        行の最大長を得る(_行の最大長),
        findall(Chars_2,(
                    append(_,[_行|_],_横書きの行ならび),
                    atom_chars(_行,Chars_1),
                    空白を付加して文字数を揃える(_行の最大長,Chars_1,Chars_2)),
                _文字ならびのならび).

行の最大長を得る(_行の最大長) :-
        findmax(_長さ,(
                    append(_,[_行|_],_横書きの行ならび),
                    sub_atom(_行,0,_長さ,0,_行)),
                _行の最大長).

空白文字を付加して文字数を揃える(_文字の最大長,_文字ならび,_空白を付加された文字ならび) :-
        length(_空白を付加された文字ならび,_文字の最大長),
        append(_文字ならび,_付加するならび,_空白を付加された文字ならび),
        all(_付加するならび,' ').

右書き用に反転して文字列に戻す([],[]) :- !.
右書き用に反転して文字列に戻す([L1|R1],[S|R2]) :-
        reverse(L1,L2),
        atomic_list_concat(L2,S),
        右書き用に反転して文字列に戻す(R1,R2).