jaoafa / VCSpeaker.kt

🔊 Text channel, now with voice
https://jaoafa.github.io/VCSpeaker.kt/
Eclipse Public License 2.0
3 stars 1 forks source link

feat: ヘッダー行のみの場合、特殊読み上げを行う機能を追加 #182

Closed book000 closed 1 month ago

book000 commented 2 months ago
book000 commented 2 months ago

Markdownパーサー、Inlineの出力結果にフォーマット文字列を含むローデータを持ってないのか…?

yuuahp commented 2 months ago

要るの?

yuuahp commented 2 months ago

ヘッダーはともかくとして Inline は InlineEffect で全部対応してるはずだけど

book000 commented 2 months ago

この結果を良しとするか、かな〜

https://github.com/jaoafa/VCSpeaker.kt/blob/d9b4de6de71e5da21247e79abc6bb23a79b302cd/src/test/kotlin/processors/MarkdownHeadingProcessorTest.kt#L107

yuuahp commented 2 months ago

良しとするってどういうこと?

Bold が効いてるか確認したいならできるはずだけど...

book000 commented 2 months ago

MarkdownHeadingProcessorの処理だけでは、タイトルフォーマット # だけが削除されるはずで、**header** は残らないと妥当な形じゃ無いという判断もあるかな?と思った inlineの場合、text属性に ** などのフォーマット文字列が置換されているので、それがMarkdownパーサー処理後の結果には無いのかなと。

yuuahp commented 2 months ago

それなら Processor じゃなくて Markdown に Heading1, Heading2, Heading3 を追加するって形で実装した方がいいんじゃないかな

book000 commented 2 months ago

んー…?? それはtoReadableが置き換えてくれるようにして、MarkdownFormatProcessorに任せるという意味であってます? そうなら、今回 # の個数によって読み上げ速度を変えるから、それだけだと微妙なんじゃないかなあ…??

book000 commented 2 months ago

InlineEffectの中に、**bold** のようなフォーマット文字列を含んだ文と、bold のようなフォーマット文字列を削除した文の情報があるって話っぽいとDiscordの会話で解釈したので、ちょっと見直します

yuuahp commented 2 months ago

んー…?? それはtoReadableが置き換えてくれるようにして、MarkdownFormatProcessorに任せるという意味であってます? そうなら、今回 # の個数によって読み上げ速度を変えるから、それだけだと微妙なんじゃないかなあ…??

あってる。 前に Heading ってことしかわからなくて Heading1, 2, 3 が区別できないことが問題って言ってなかったっけ?

book000 commented 2 months ago

Heading文字列を置き換える責務をMarkdownFormatProcessorが持つか、MarkdownHeadingProcessorが持つか?という話な気がしますね

結果的に、Headingの個数がいくつか?は以下で無理くり判断しています https://github.com/jaoafa/VCSpeaker.kt/blob/d9b4de6de71e5da21247e79abc6bb23a79b302cd/src/main/kotlin/com/jaoafa/vcspeaker/tts/processors/MarkdownHeadingProcessor.kt#L22

とはいえ、Lines.ktとかでHeading置き換えすると一行Headingも置き換えられてしまうから微妙かなあ…とも。

yuuahp commented 1 month ago

とはいえ、Lines.ktとかでHeading置き換えすると一行Headingも置き換えられてしまうから微妙かなあ…とも。

これはどういう?

book000 commented 1 month ago

逆だ。

以下は、1行なので置き換えたうえでスピード変更してもよい

# hoge

以下は、1行ではないので置き換えずにスピード変更しない

# hoge
# fuga

Inlines.ktみたいに、toReadable的に読み上げ用正規表現置き換えを入れると上記の両方が置き換えられてしまうよね、という。

yuuahp commented 1 month ago

帰ってきた List の size が 1 でかつそれが Header1, 2, 3 であることを判定すればよくない?

book000 commented 1 month ago

ん~?わかるようなわからないような…、コード書いてほしいかも それらのロジックをMarkdown.ktに全部含ませてしまうのは責務が重くない?

yuuahp commented 1 month ago

えっと私が想像してるのは、LineEffect に Header1, Header2, Header3 を追加して、そのデータを MarkdownFormatProcessor で扱う感じ (Header によって読む速度を変えるとか) なんだけど

yuuahp commented 1 month ago

ちょっと今書くのは難しいから帰るまで待ってほしい

book000 commented 1 month ago

全然急ぎません。 読む速度を変えるのを Header1 みたいな形で分けてやるのはわかる。その時に、「ヘッダーのフォーマット文字 (#) を処理するのは Lines と MarkdownFormatProcessor どっちでやろうと考えてるんだろう?というのがきになってる

yuuahp commented 1 month ago

声を変えるのは Processor の役割のはずなのでそっちでやって、# の削除は Line の方でやる markdown/ は純粋に Markdown を処理するだけってイメージ

book000 commented 1 month ago

あーーそこの解釈ズレてるんだ…

Markdown.ktの責務は「Markdownをパースする」ことが責務だと思ってて(AST的な)、それの実際の置き換えは Processor 群の責務だと思ってる。

yuuahp commented 1 month ago

えずれてるの? スポイラー関連は確かに Markdown でやってるけど今回のに関しては合ってない?

book000 commented 1 month ago

# の削除は Line の方でやる

ここの解釈が合わない。無条件で全部のHeadingフォーマット文字列を置き換えるならともかく、一行の場合にのみ置き換えるというのはこのプロジェクトに限った話で、Markdownそのもののパースロジックではないから。 私は # の削除は一行のみの場合のみという VCSpeaker.kt 独自の仕様があるから、MarkdownFormatProcessorに実装するものという解釈だった

yuuahp commented 1 month ago

いや無条件で全部削除するつもりだった LineEffect の情報とも重複するし要らないかなと (Inline だと既にそうしてるし)

book000 commented 1 month ago

ん〜、なるほど。まあそれならそれでも良いかな…

だとすれば、このPRの内容そのままゆうあ氏に預けた方がいいですかね?これにプラスして改修入る感じですよね?

yuuahp commented 1 month ago

逆レビューをおねがいします 変更点は

book000 commented 1 month ago

ありがとう、とりあえず差分見た感じ流れそのものに異論なしです 正規表現だけちょっと引っかかったので指摘です