abap34/almo

脚注の追加

Closed this issue · 6 comments

脚注の機能がないのであるとよさそう。

  1. 適当な構文で脚注の表示とidを振れるようにする (例: これは Aによる研究 [^a_research] により示された。)
  2. id に対応する脚注の文を書くと、末尾に生成される。例: [a_reserch]: example.com
  3. もとの文に連番が振られる。

構文は既存の仕様の調査が必要そう。

○○論文は 1 番で、☆☆本は 2 番。
みたいな対応をどこかで std::map とかで保存しないといけないと思うんですけど、どこでやるのが良いでしょうか?

パース途中で得られる全体に影響する情報は Reader クラスで管理しています。

almo/src/reader.hpp

Lines 52 to 68 in dd09f27

void set_meta_data(std::string key, std::string value){
// for required_pyodide (stop warning)
if (key == "required_pyodide" && value == "true"){
assert(meta_data.contains("required_pyodide"));
if (meta_data["required_pyodide"] == "false"){
meta_data[key] = value;
}
return ;
}
if (meta_data.contains(key)){
if (meta_data[key] == value) return ;
std::cerr << "Warning : key is duplicating. value is overwritten." << std::endl;
std::cerr << "duplicated key : " << key << std::endl;
std::cerr << "previous value : " << meta_data[key] << std::endl;
std::cerr << " new value : " << value << std::endl;
}
meta_data[key] = value;

たとえば、「実行可能なコードブロックがソースコード全体に一つでもあるか?」という情報も管理しているんですが、(これをすることで不要な場合読み込みをスキップして高速化できます)

ここ

read.set_meta_data("required_pyodide","true");

set_meta_data を使って追加しています。

一旦書き出しの処理は後で考えることにして、文法を定義 → パーサを書いて Reader に持たせる までやってみるといいかもしれません (作業移ってくれるのであれば assign します 👁️

わかりました
作業したいと思います。

assign しました!

"[^" + expr + "]:" + hoge という形に分解したいんですけど、それをどうやるかがわかっておりません

正規表現の使い方がわからない、という話ですか?