Tokyo Institute of Technology, Department of Computer Science, B3
- Interests
- Machine Learning
- Compiler
- Mathematical optimization
- Statistics
[⚠️ WIP] ALMOは拡張Markdownパーサ・静的サイトジェネレータです。ALMOは、WebAssemblyを使ってブラウザ上で完結する実行環境を提供し、サーバ無しでのサンプルコードの実行やジャッジシステムの構築を可能にします。
Home Page: https://www.abap34.com/almo.html
License: MIT License
nbconvert のようなことが出来るようになるイメージ。グラフが多い記事が書きやすくなるし、Pythonが実行できるのとも相性がいいはず。
ref: #65 (comment)
#include <stdio.h>
のようなプログラムを与えると、
<pre><code class="language-c">
#include <stdio.h>
</code></pre>
のように出力され、<std.io.h>
がタグとして認識されてしまって表示されない。
入力のコードを HTMLに変換するときにエスケープすればよさそう。
&
→ &
"
→ "
'
→ '
<
→ <
>
→ >
https://github.com/abap34/ALMO-CLI をこっちに統合する。
pybind11 とかを使ってパースする C++の関数を呼び出せるようにして、インターフェースは Pythonで整える。
今は実行を中断する手段がない。
ドキュメントでよく説明されているなら、sharedArrayBuffer
を使った実装を標準にして中断機能をつけたほうがいい気がする。
例えば PyOdide が必要か調べるために ExecutableCodeBlock
が存在するか調べる、脚注として生成すべき数を調べるなどのためにノードの検索機能が必要.
についてまず考える
ドキュメントや example などを、このレポジトリで GitHub Actions を使い管理・更新するようにする。
requires
の記述が不十分cxx_std
は 20としてよいいま、コンパイル時に文字列定数を埋め込むために R("...")
をファイルに埋め込んでセットアップしてからビルドするようなスクリプトが作られている。
Lines 1 to 24 in 8b4da2a
ビルドのプロセスがかなり複雑化してきていているので、より汎用性の高い実装にしたい。
たとえば Python で書き直すとかも選択肢の一つ
脚注を末尾に生成するために付け替え機能が欲しい。
related to #129
https://pypi.org/project/almo/#files を解凍すると src/ 以下が一階層ぶんしか配布されていない。
MANIFET.in の書き方に問題がありそう?
Line 1 in dd09f27
以下の機能は ALMO-CLI (https://github.com/abap34/almo-cli) に移行して、ALMO 本体では Markdown のパースのみに集中したい。
(将来的には md_to_html
, md_to_json
, md_to_dot
あたりのみを提供したい)
1.
という入力を与えると、
"ir": {
"class": "Block",
"uuid": "",
"childs": [
{
"class": "NewLine",
"uuid": "1"
},
{
"class": "NewLine",
"uuid": "2"
},
{
"class": "EnumerateBlock",
"uuid": "3",
"childs":
] // ここが invalid
},
{
"class": "NewLine",
"uuid": "4"
},
{
"class": "NewLine",
"uuid": "5"
},
{
"class": "NewLine",
"uuid": "6"
}
]
}
のような 中間表現が出力される。
不完全な DivBlock
:::
...
をパースすると SIGSEGV が投げられてしまう。
これだと try
で包んでもプロセスが kill されてしまうので、(エラーにするとしても) 実行時例外になってほしい。
長い講義資料的なものを作ることを想定して、複数ファイルからチャプター付きのページを出力する機能がほしい。
今、 C++23 の機能のうち g++ ではサポートされていて clang ではサポートされていないもの (例: join_with
) が含まれているので、clang でコンパイルすることができない。
そこで join_wih
の使用を一旦やめて、clang でもコンパイルできるようにする。
6d2da62
で C++23 を使うようになったのでコンパイルに失敗するようになった。 (デフォルトの gccのバージョンが 11.4.0)
g++のバージョンをアップする必要がある。
今、入力の引数はかさむ一方なのでコンフィグをまとめて書いたファイルを引数に渡すことで簡単に指定できるようにしたい
今のパーサはかなり力任せで作られたままなので、(可能な限り) ちゃんと文法を定義してちゃんとした実装に治したい。
v0.7.0 では ASTのノード LeafNode
か NonLeafNode
のいずれかで表現して、プロパティをそのまま吐き出して json を作ってる。
ただ、例えば吐かれた ir から何かしらの処理をしたいとき (例: ブログでプレビューを作るために レンダリングされてない RawText だけ取り出したい) みたいな場合、統一的な keyになってないと辛い。
なので、jsonに吐くときにプロパティをそのまま吐くんじゃなくてもう少し手を入れる(例えば NonLeafNode
なら content
を必ず key
にいれるとか、ノードのプロパティ自体に制約をかけるとか(これは少し行儀が悪そう)、元のASTで value を保持するのは全て RawText
にするように設計を変更したい。
dot 言語や jsonの出力に使うために以下のようなエスケープを行ってくれる関数を使っている。
Lines 179 to 192 in a512df9
しかし、{
, }
, |
, >
, <
がエスケープ対象から漏れているため、dot言語の出力が崩れる場合がある。修正が必要
- aaa
a
のような入力を与えると配列外参照でエラーになる
tap-repository (https://github.com/abap34/homebrew-almo) を自動で更新するようにしたい.
脚注の機能がないのであるとよさそう。
これは Aによる研究 [^a_research] により示された。
)[a_reserch]: example.com
構文は既存の仕様の調査が必要そう。
いまの実装では almo.cpp の main
でコマンドライン引数のパースや置換などがまとめて行われていて、
#97 などを考えると外から呼び出しやすいようにこの辺りを分離して実装し直したい。
気軽に試せるようにオンラインのデモを作りたい。
emscripten で ALMO自体を wasm にコンパイルして動かすのが良さそう。
テンプレートをデフォルトでいくつか用意して提供する
あるいは、スタイルと合わせてこれを新たにひとつのテーマにしてもいいかも.
エラーやwarningの行を出したい(例: n行目の記法が不正です) けど、前処理(メタデータの削除, コメントの削除) によって元のマークダウンファイルと、パーサが受け取るマークダウンの各行が一致しなくなる。ので、マークダウンのファイルを読んだときに、行数の情報も保存しておいてエラー出せるようにしたい。
パースする前の処理を色々できるようにしたい。
$$ <- ここに空白
が数式ブロックの開始・終了とみなされずユーザが混乱するので修正したい。
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.