securemark 0.259.2 → 0.260.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/design.md +14 -4
- package/dist/index.js +253 -207
- package/package.json +1 -1
- package/src/combinator/control/constraint/block.ts +2 -3
- package/src/combinator/control/constraint/contract.ts +5 -7
- package/src/combinator/control/constraint/line.ts +1 -2
- package/src/combinator/control/manipulation/convert.ts +1 -2
- package/src/combinator/control/manipulation/fence.ts +1 -2
- package/src/combinator/control/manipulation/match.ts +2 -3
- package/src/combinator/control/manipulation/scope.ts +3 -5
- package/src/combinator/control/manipulation/surround.ts +2 -2
- package/src/combinator/control/monad/bind.ts +2 -3
- package/src/combinator/data/parser/context.ts +20 -22
- package/src/combinator/data/parser/inits.ts +1 -2
- package/src/combinator/data/parser/sequence.ts +1 -2
- package/src/combinator/data/parser/some.ts +1 -2
- package/src/parser/api/parse.test.ts +19 -19
- package/src/parser/autolink.test.ts +6 -6
- package/src/parser/block/blockquote.test.ts +8 -8
- package/src/parser/block/blockquote.ts +3 -3
- package/src/parser/block/codeblock.test.ts +4 -4
- package/src/parser/block/dlist.test.ts +1 -1
- package/src/parser/block/dlist.ts +2 -2
- package/src/parser/block/extension/figure.test.ts +1 -1
- package/src/parser/block/extension/table.ts +3 -3
- package/src/parser/block/heading.test.ts +5 -5
- package/src/parser/block/ilist.ts +1 -1
- package/src/parser/block/olist.test.ts +1 -1
- package/src/parser/block/olist.ts +1 -1
- package/src/parser/block/paragraph.test.ts +14 -14
- package/src/parser/block/reply/cite.test.ts +11 -11
- package/src/parser/block/reply/cite.ts +1 -1
- package/src/parser/block/reply/quote.test.ts +3 -3
- package/src/parser/block/reply/quote.ts +1 -1
- package/src/parser/block/reply.test.ts +8 -8
- package/src/parser/block/sidefence.test.ts +6 -6
- package/src/parser/block/sidefence.ts +1 -1
- package/src/parser/block/table.ts +4 -4
- package/src/parser/block/ulist.test.ts +1 -1
- package/src/parser/block/ulist.ts +2 -2
- package/src/parser/block.ts +1 -1
- package/src/parser/context.ts +8 -7
- package/src/parser/inline/annotation.test.ts +3 -3
- package/src/parser/inline/autolink/account.test.ts +11 -11
- package/src/parser/inline/autolink/account.ts +4 -2
- package/src/parser/inline/autolink/anchor.test.ts +9 -9
- package/src/parser/inline/autolink/anchor.ts +14 -11
- package/src/parser/inline/autolink/channel.test.ts +3 -3
- package/src/parser/inline/autolink/hashnum.ts +4 -2
- package/src/parser/inline/autolink/hashtag.test.ts +20 -20
- package/src/parser/inline/autolink/hashtag.ts +4 -2
- package/src/parser/inline/autolink/url.test.ts +55 -55
- package/src/parser/inline/html.test.ts +0 -2
- package/src/parser/inline/html.ts +1 -1
- package/src/parser/inline/link.test.ts +110 -110
- package/src/parser/inline/link.ts +30 -28
- package/src/parser/inline/media.test.ts +1 -0
- package/src/parser/inline/media.ts +1 -1
- package/src/parser/inline/reference.test.ts +3 -3
- package/src/parser/inline/ruby.ts +1 -1
- package/src/parser/inline.test.ts +51 -51
- package/src/parser/source/escapable.ts +1 -1
- package/src/parser/source/str.ts +4 -4
- package/src/parser/source/text.ts +2 -3
- package/src/parser/source/unescapable.ts +1 -1
- package/src/renderer/render/media/pdf.ts +1 -0
- package/src/renderer/render/media/twitter.ts +7 -1
- package/src/util/info.ts +2 -4
package/CHANGELOG.md
CHANGED
package/design.md
CHANGED
|
@@ -265,7 +265,7 @@ HTMLEntity構文はエンティティ追加時の互換性確保のため不正
|
|
|
265
265
|
対象は必ず可視の文字または要素から始まる。
|
|
266
266
|
対象部分(角括弧)は常に指示部分(波または丸括弧)に先行する。
|
|
267
267
|
|
|
268
|
-
##
|
|
268
|
+
## 備考
|
|
269
269
|
|
|
270
270
|
### 実行速度
|
|
271
271
|
|
|
@@ -284,9 +284,9 @@ CodeMirrorが素では速いがVimModeでは数万文字程度でも耐え難く
|
|
|
284
284
|
|
|
285
285
|
### バックトラック
|
|
286
286
|
|
|
287
|
-
SecuremarkのAnnotation構文に典型的であるように文脈を変更する構文の中にその文脈に依存し変更される他の構文が存在する場合一般に文脈の相違から解析結果を再利用不能な(`αA'β | αAB`)バックトラックが生じる。文脈依存構文の解析中に文脈により解釈の異なる字句(`[a
|
|
288
|
-
CommonMarkはLink
|
|
289
|
-
|
|
287
|
+
SecuremarkのAnnotation構文に典型的であるように文脈を変更する構文の中にその文脈に依存し変更される他の構文が存在する場合一般に文脈の相違から解析結果を再利用不能な(`αA'β | αAB`)バックトラックが生じる。文脈依存構文の解析中に文脈により解釈の異なる字句(`[a((`)または現在の文脈を終了する字句(ただの括弧がスコープを作らない場合の`(([a))`)に遭遇したとき、現在の文脈での解析の継続を試行する解析方法はメモ化なしではバックトラックが再帰的に生じ線形時間で解析できず、現在の文脈での解析を中止し直前の文脈を継続または新たな文脈を開始する解析方法はバックトラックなしで線形時間で解析できる。
|
|
288
|
+
CommonMarkはLink構文から明らかなように後者の解析方法により再帰的バックトラックなし(Markdown(2n)+正規表現(1n)で最悪計算量3n程度)で解析できる言語であるが同時にこれは文脈依存構文の正当な入れ子表現を解析できず文脈依存構文の存在する数に応じて多項式的(おそらく$n^{2+c}$)に構文の壊れやすさの増す脆く拡張性の低い言語であることを意味する。この問題はおそらくメモ化により解決できるがCommonMarkは実行性能追及のためメモ化を廃止しているためメモ化により性能を低下させてまで解決するつもりはないと思われる(すなわちCommonMarkは機械を至上とし人間に制約を課す低水準の言語であり人間の需要を至上とするSecuremarkとは対極に位置する)。
|
|
289
|
+
従って現在の再帰的バックトラックなしで解析可能な文法に制約されるCommonMarkには文脈依存構文を入れ子表現の広範な制限ならびに構文の可読性および開始記号の信頼性の多項式的な低下と引き換えにしか追加できないという拡張性の欠陥が存在する。CommonMarkの仕様策定者が構文の拡張に(名称を維持するか否かにかかわらず)不自然なまでに消極的または進展がないのは正当な理由や怠慢からでなく文脈依存構文を追加するにつれて構文解析戦略の欠陥が明白になっていくためおよび現在の高い実行性能を低下させたくないためである。`~~a~~`のような文脈自由構文は容易に追加できるがこうしたマージンを失えばもはや後はない。CommonMarkは小さく単純であるがゆえに正しくいられる象牙の塔であり仕様策定者はこの正しさを失わず正しいままでいたいがために象牙の塔に引きこもり小さな完全性を固持し続けているのである(でなければ何年も隠さず速やかにこの拡張性の欠如を公表して助力を求めていなければならない)。
|
|
290
290
|
Securemarkは線形時間で解析不能な前者の解析方法をメモ化によりおおよそ4n以下の最悪計算量に改善しさらに解析時間と解析範囲の局限により一定時間内で解析不能な入力の影響を局限することでこれらの問題を解決している。この解析方法はほとんどの自然な入力に対して1nに近い時間で効率的に動作し、最悪計算量で低速に動作させる少数の機械的攻撃入力に対してもサーバーで多数のユーザーのリクエストに応じるには低速で脆弱性となる可能性があるがクライアントで単一のユーザーの操作に応じるには十分高速であるためクライアントで解析する限り解析の効率または速度が実用上問題となることはない。
|
|
291
291
|
|
|
292
292
|
### メモ化
|
|
@@ -308,6 +308,16 @@ Markdownのように自然言語と自身の文法を分離する汎用構造が
|
|
|
308
308
|
よってMarkdownの標準化は後方互換性確保が不可能であることから発展性がなくスナップショット以上の技術的意味を持たない。
|
|
309
309
|
MarkdownはGFMのように最初から高機能で完成度の高い拡張不要な独自実装のほうが標準としての互換性を確保でき、構文に曖昧さがない形式言語と異なりまず最小限の標準仕様を策定しのちに拡張していく通常の標準化方法が適さない特殊な言語である。
|
|
310
310
|
|
|
311
|
+
### CommonMarkの重大な問題点
|
|
312
|
+
|
|
313
|
+
- 文脈依存(かつ正規表現で解析できない)構文を追加できない(要解析戦略変更)
|
|
314
|
+
- 二重リンク(`[<a@b>]()`)を生成する
|
|
315
|
+
- 画像のaltがMarkdownとして解釈される
|
|
316
|
+
- タブまたは4スペース以上で字下げできない(要構文削除)
|
|
317
|
+
- 情報の再利用性が低い
|
|
318
|
+
- 引用に恒等性がない
|
|
319
|
+
- 改行に恒等性がない
|
|
320
|
+
|
|
311
321
|
### トランスクルージョン
|
|
312
322
|
|
|
313
323
|
分散的に管理される情報のトランスクルージョンは権利関係の不明瞭さおよびリンク先の消失によりリンク元の情報に欠損が生じるなどの脆さから壊れやすいウェブ上の情報を扱う方法として既存の方法より劣っておりWikipediaのように中央集権的管理を実施できる場合にのみ有用となる。
|