このエントリーは 改善版2024)kotlin でパーサーコンビネータを実装する 【後編】Bold パーサーを追加してみる の続きです。
後編では Hello, **World**! Hello, *Again*! というイタリックとボールドマークアップが混在した文字列をパースしました。 このとき、パーサーはイタリックやボールドの開始・終了に相当するマークアップ文字列を見つけてそれを <i> や </i> とか <b> や </b> に変換するという 発想で実装していました。
別の考え方として、イタリックのマークアップで囲まれた部分がイタリック属性を持つ文字列(ここでは Again がイタリック属性を持つ文字列)、 ボールドとしてマークアップされた部分がボールド属性を持つ文字列(ここでは World )という発想もあり得ます。 直接HTMLへ変換するのではなく、いったんASTに変換したいなどといったケースでは、このような発想でパーサーを書いた方がよいでしょう。
今回は前回のコードを修正して、 この 別の考え方 で実装してみます。
» Read Moreこのエントリーは 改善版2024)kotlin でパーサーコンビネータを実装する【前編】 からの続きです。
前編で Hello, *World*! Hello, *Again*! という文字列を自前で実装したパーサーコンビネーターを使ってHTMLに変換しました。 後編ではボールド用マークアップが混ざっていてもうまくパースできるのか調べます。
» Read More以前に改善版) kotlin でパーサーコンビネータを実装する を 書いたのですが、 その後さらに改良した。
ここでは Hello, *World*! という文字列を自前で実装したパーサーコンビネーターを使ってHTMLに変換することを考えます。
» Read More本当は https://github.com/gomarkdown/mdtohtmlを使えばよいだけの話なのだが、 go をインストールしていないマシンで JavaVM はインストール済みだったので、 https://github.com/JetBrains/markdown と Spring Boot をつかって mdtohtml と(だいたい)同じように機能するコマンドラインツールをつくった。その備忘録です。
» Read More以前に Kotlin で Maybe その2 普通に Optional を使う というエントリーを書いたのだが、その後、kotlin で Generics を使った Maybe を使うと より自然に違和感なく 値があったりなかったりする値 を扱う状態をコードで表現できることがわかったので、それを書き残しておく。
なお、もっと以前に Kotlin Sealed クラスを使った Maybe の実装というエントリーでも Generics な Maybe を書いていたのだが、そこから多少改良した。
» Read MoreKotlin Multiplatform 2.0.0 Kotlin/JS, webpack で sayHello するライブラリをつくるところまで の続きです。
この sayHello ライブラリのテストを書きたいのだが、書き方がわからなかったので、調べました。 結論としては、このKotlin オフィシャルページの説明の通りです。 ここではテストに Firefox を使うので、 実行するOSに Firefox がインストールされている必要があります。
» Read Moreちょっと前に Kotlin Multiplatform 1.9.22 Kotlin/JS Hello, World! を書いたのですが、2.0.0 が出たのでやりなおしです。
このあたりの https://kotlinlang.org/docs/js-project-setup.html 話です。
» Read Moreリストの各要素に対してマップするというのは簡単。 これと同じことを 木構造 に対して行うにはどうすればいいのか?
» Read More前回(マークアップテキストのパース、ブロッククオート領域をハンドルする) のエントリーで BlockQuote 領域が入れ子(ネスト)になっていても再帰処理すれば対処できるだろう、などと書いていたので、 それを試した。
» Read Moreマークダウン書式でいえば行頭を "> " からはじめた行は BlockQuote として扱われる。 このような領域を含んだテキストをパースして(たとえば)HTMLに変換したい場合どうすればいいか、ということを考えた。
このようなテキストをパースする場合、一度で変換をすませようとすると難しい。 また、BlockQuote 領域の中にさらに BlockQuote 領域が存在するような場合もありえる。 そのようなことまで想定すれば、一度のパースで変換を完了させるという発想は筋が悪いだろう。
» Read Moreそれを回避するにはCSVファイルの先頭に BOM をつけるだけです。
解決方法はこれ: https://stackoverflow.com/questions/60873673/how-to-add-a-utf-8-bom-in-kotlin
» Read More