I'm a software developer, Pythonista.
- pnovel
- This tool makes me write novels easily
- hutago
- Blog article's tags may be managed easily.
- mdtable2csv
- Convert Markdown Table to CSV with Std In/Out
- tech-memo
- My blog (wrtten in Japanese)
日本語小説用簡易マークアップ言語
Home Page: https://blog.515hikaru.net/entry/2020/05/18/005920
License: MIT License
I'm a software developer, Pythonista.
デモサイトを作って Netlify に公開する
echo "彼は「あ!」と言った。" | npx pnovel -s
彼は
「あ!」と言った。
期待は
彼は「あ!」と言った。
はてなマーク、ビックリマークのあとの全角空白。
例外処理用のトークンも必要
src/main.js
<- import parser と import evaleval.js
は パーサー関係なしに動作する(テストもできる)こんにちは お元気ですか僕は 元気です
みたいなのを
こんにちはお元気ですか僕は元気です
にしてしまいたい。
今は npm pack
の時点でビルドしてしまっているので、特定のバージョンを利用することが前提なパッケージになってしまっている。
ユーザーの実行環境でビルドするようにしたい
だいぶ時間が経ったので
例えば英数字の全角変換を強制してるけど、これをオプションでオフにできたりするとより柔軟なツールになる気がする。
テキストファイルとしては末尾に空白行がないと不正なのだけど、感覚としては動いてほしい。
どの行も改行で終わることが前提になっているパーサーになっているので、改行またはEOFが末尾にある行、というのを追加してもいいかもしれない。
まずはコマンドラインツールとして制作する(ブラウザ版も作れそうだけど後回し)
そのためにオプションパーサーを使いたい。
何かと便利なので
よく考えたら Ubuntu でしか動作確認をしていないのでよろしくない。
Windows を持ってないのでサポートは難しそうだけど、CIを回すくらいは最低しておきたい。
思いつき
$ cat tmp.pnovel
```
aaa
```
$ npx pnovel tmp.pnovel
npx: installed 91 in 4.439s
Expected [^\n"`"] but "\n" found.
コメントアウトをできるようにしよう。TODOとか書きたいし。
for testing github actions
I want to implement like below:
自作の簡易マークアップ言語からPixiv 小説用の簡易マークアップへの変換が目的なので、自作言語の仕様を策定する必要がある。
foo
bar # => foobar
foo
bar # => foo\nbar
[newpage]
トークン# foo
で章 ([chapter:foo]) に変換((悪:イービル))
-> [[rb:悪 > イービル]]
」
「
#53 とは違ってさすがにこれは直したい。
一旦全角への統一でいいのではないかだろうか(プログラマとしては変な気がするが)
echo "% " | npx pnovel -s
Expected [^\n] but "\n" found.
Dockerfile を使ってビルド、DockerHub で自動 publish
現在はブロックの中にコメントしかなくてもブロックとして改行してしまう。
全てのノードのタイプがコメントの場合は改行もさせないようにしたい
そもそも小説の作法としては!や?を複数重ねるのは正しくない、と認識した上で。
「あー!!!」
と書くと
「あー! ! !」
と変換してしまう。
さすがに60%は低いのでもう少しあげる。
main.ts のテストがほとんどない状態だが、テストがないのはオプション引数やファイルの処理なので、mockしてテストを書くのがいいのではないか。
https://www.npmjs.com/package/jest-mock-process
https://jestjs.io/docs/ja/manual-mocks
現在は Pixiv 小説のフォーマットに変換する機能しかないが、クロスポストを実現するために複数プラットフォームに対応したい。
exceptZenkakuSpaceToekn = char:[!!??] whitespaces blankline? "」" {
if (['!', '?'].includes(char)) {
char = String.fromCharCode(char.charCodeAt(0) + 0xFEE0);
}
return char + "」"
}
ここの定義が間違っている
char:[!!??] whitespaces blankline? "」" {
ではなく
char:[!!??] whitespaces blankline? whitespaces endToken {
でなくてはならない(と思う)。
-v
--version
でバージョン番号の表示-o
オプションで出力先を指定したい-s
, --stdin
で標準入力 (refs #27 )-d
でパース結果の JSON を表示この行、このトークンは一切の加工をしない、という指定ができるようにしたい。
% あああ
「あああ」
が
「あああ」
になる(スペースがあくべきでないのにあく)
#1 にのっとって意図通りになっているのかをテスト
範囲が広いのでテスト自動化のみをこの Issue のスコープとする
小説を書くことに焦点を当てているのでやっぱルビはサポートしたいね
echo "#" | npx pnovel -s
だんだん自分でも何ができるのかを把握しきれなくなってきたので、例をたくさん書いたドキュメントを作りたい
# こんに` `ちは % 全角スペースを間に
に対して
npx pnovel hoge.txt
[chapter:こんに, ,ちは]
やれるならやった方がいいよね
彼は
「あああ」
と言う
みたいな文章のとき、「と言う」は全角空白が先頭にいらないが、いまの pnovel だと先頭に入る。
微妙だけど、そのまま出力する機能とかを毎回使うのもだるいのでなんかマークを作れたらいいかもしれない
[newpage] を置換して全角にしてしまうので、半角のままにする。
タイトルとかキャプションとか、必要なら書けるようにしたい。
本文のレンダリングとは別にして、メタ情報として吐き出す?
follow up #50
空白(タブ、半角スペース、全角スペースなど)からなる行は blankline と同じ扱いにしたい
{import foo/bar.pnovel} みたいなの書くとそこにファイルの内容をパースして展開する、みたいな機能
循環importだけ起こさないように
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.