saba1024のブログ

どうでも良い思いついた事とかプログラミング関係のメモとか書いていきます。

Apache Groovyで文章を縦書にする

String str = "Groovyを使い、textを縦書に変換するコマンドを書いたので、今後活用したい。と思う次第であります。"
Integer maxCharacters = 8
List<String> eachLines = str.toList().collate(maxCharacters)
eachLines.eachWithIndex {List<String> line, Integer i ->
    if (line.head() in ["。", "、"]) {
        eachLines[i-1] << line.head()
        (i ..< eachLines.size()).each {
            eachLines[it] = eachLines[it].tail() + eachLines[it+1]?.head()
        }
    }
}

(0..<eachLines.collect{it.size()}.max()).each {def line ->
    println eachLines.collect {
        " ${it[line]?: ' '}"
    }.reverse().join("")
}

実行結果は、

 ま と 今 ン 書 い G
 す 思 後 ド に 、 r
 。 う 活 を 変 t o
   次 用 書 換 e o
   第 し い す x v
   で た た る t y
   あ い の コ を を
   り 。 で マ 縦 使

テストもないし副作用バリバリのコードだけど気にしない!
もし行の先頭に句読点(。か、)が来た場合にはちゃんと前の行の末尾に加えるようにはしています。