release: v0.1.4 — parser enhancement, new syntax, performance optimization

feat(parser): comprehensive Markdown parser enhancement
- Add nested list support (multi-level unordered/ordered, mixed nesting)
- Add Setext headings (=== / ---)
- Add indented code blocks (4-space indent)
- Add HTML comment passthrough (<!-- -->)
- Add entity reference protection (&amp; &#169;)
- Add ordered list start attribute
- Add link title single-quote support
- Add LaTeX math formulas ($inline$ / $$block$$)
- Add footnote support ([^1] ref + [^1]: definition)
- Add definition lists (term\n: definition)
- Extend emoji map from 85 to 150+ common emojis
- Fix backtick code block matching (CommonMark spec)
- Fix italic regex character truncation (lookbehind assertions)
- Fix superscript/subscript/strikethrough ambiguity
- Fix blockquote prefix handling (>text without space)
- Enhance safeUrl filtering (additional protocol checks)
- Enhance slugify (Unicode NFKC normalization)

perf(parser): single-pass inline scanning, render cache, pre-compiled regex
- Replace 14-step chained regex with unified single-pass scanInline()
- Add cachedRenderInline() with FIFO LRU eviction (300-entry cap)
- Pre-compile 15+ static regex constants for block boundary detection
- Skip redundant style='text-align:left' on default-aligned table cells

style(parser): add CSS for footnotes, definition lists, math formulas, sup/sub

test(parser): 44 new test cases covering all v0.1.4 syntax additions (469 total)

chore: bump version 0.1.3 → 0.1.4 across all source files, docs, site pages
This commit is contained in:
2026-07-24 09:35:51 +08:00
parent 2eb86d29b6
commit f8b9f4a761
19 changed files with 1128 additions and 198 deletions
+16 -8
View File
@@ -2,9 +2,9 @@
> 轻量、零依赖、精致美观的 Markdown Editor 库。单文件,开箱即用,中文优先。
[![npm version](https://img.shields.io/badge/version-0.1.3-blue.svg)](https://www.npmjs.com/package/@metona-team/metona-editor)
[![npm version](https://img.shields.io/badge/version-0.1.4-blue.svg)](https://www.npmjs.com/package/@metona-team/metona-editor)
[![license](https://img.shields.io/badge/license-MIT-green.svg)](./LICENSE)
[![tests](https://img.shields.io/badge/tests-425%20passed-brightgreen.svg)](./tests)
[![tests](https://img.shields.io/badge/tests-469%20passed-brightgreen.svg)](./tests)
[![coverage](https://img.shields.io/badge/coverage-97%25-brightgreen.svg)](./tests)
---
@@ -17,7 +17,7 @@
- **易维护** — 模块化源码,JSDoc 注释完整,TypeScript 类型声明,425 个单元测试覆盖
- **易使用** — 工厂函数 `create()` 一行接入,链式 API,中文优先文档与翻译
- **安全** — 内置 XSS 防护(`javascript:`/`vbscript:`/`file:` 协议过滤),HTML 转义,`safeUrl` 净化
- **内置解析器** — 自研 CommonMark 子集 + GFM 扩展(表格含列对齐、任务列表、emoji 短码、上下标),可整体替换
- **内置解析器** — 自研 CommonMark 子集 + GFM 扩展(表格含列对齐、任务列表、上下标、数学公式、脚注、嵌套列表、emoji 短码),可整体替换
- **三模式视图** — edit / split / preview 自由切换,分屏拖拽调整比例,滚动同步,模式切换保持滚动位置
- **主题系统** — light / dark / auto / warm 四套预设,CSS 变量定制,跟随系统主题,@media print 打印样式
- **国际化** — zh-CN / en-US 完整翻译,RTL 支持,`Intl` 数字/货币/日期格式化
@@ -680,6 +680,7 @@ MetonaEditor 内置自研轻量解析器,支持 CommonMark 子集 + GFM 扩展
| 语法 | 示例 | 输出 |
|------|------|------|
| 标题 | `# H1` `## H2` | `<h1>` ~ `<h6>` |
| Setext 标题 | `H1\n===` | `<h1>` / `<h2>` |
| 段落 | 纯文本 | `<p>` |
| 粗体 | `**bold**` `__bold__` | `<strong>` |
| 斜体 | `*italic*` `_italic_` | `<em>` |
@@ -689,16 +690,23 @@ MetonaEditor 内置自研轻量解析器,支持 CommonMark 子集 + GFM 扩展
| 下标 | `H~2~O` | `<sub>` |
| 行内代码 | `` `code` `` | `<code>` |
| 代码块 | ` ```lang ` | `<pre><code class="language-lang">` |
| 缩进代码块 | ` code` | `<pre><code>` |
| 引用 | `> quote` | `<blockquote>` |
| 无序列表 | `- item` / `* item` / `+ item` | `<ul><li>` |
| 有序列表 | `1. item` | `<ol><li>` |
| 嵌套列表 | `- p\n - sub` | 多级 `<ul>/<ol>` |
| 有序列表 | `1. item` / `3. start` | `<ol start="3">` |
| 任务列表 | `- [x] done` | `<li class="me-task-item">` |
| 水平线 | `---` `***` `___` | `<hr>` |
| 表格 | `\| a \| b \|` | `<table>`(含 `:---:` 列对齐) |
| 链接 | `[text](url)` | `<a>` |
| 定义列表 | `Term\n: def` | `<dl><dt><dd>` |
| 链接 | `[text](url 'title')` | `<a>` |
| 图片 | `![alt](url)` | `<img>` |
| 自动链接 | `<https://...>` | `<a>` |
| Emoji 短码 | `:smile:` `:rocket:` | 😊 🚀(80+ 常用) |
| 数学公式 | `$E=mc^2$` `$$\int$$` | `<span>/<div>` |
| 脚注 | `text[^1]` | `<sup>` + 底部定义 |
| Emoji 短码 | `:smile:` `:rainbow:` | 😊 🌈(150+ 常用) |
| HTML 注释 | `<!-- note -->` | 透传 |
| 实体引用保护 | `&amp;` `&#169;` | 不被二次转义 |
### XSS 防护
@@ -806,9 +814,9 @@ npm run test:coverage
| core.js | 99.5% | 96.6% | 98.2% |
| **总体** | **96.9%** | **80.3%** | **94.6%** |
测试文件位于 [tests/](./tests) 目录,共 **425 个测试用例**,覆盖:
测试文件位于 [tests/](./tests) 目录,共 **469 个测试用例**,覆盖:
- `parser.test.js` — Markdown 解析器全部语法(含新增上下标/高亮/emoji/表格对齐 + XSS 防护
- `parser.test.js` — Markdown 解析器全部语法(含 v0.1.4 新增:嵌套列表、Setext标题、缩进代码块、HTML注释、实体引用保护、链接单引号title、LaTeX数学公式、脚注、定义列表、反引号精确匹配、130+ 表情扩展 + XSS 防护
- `utils.test.js` — 工具函数(generateId / escapeHTML / debounce / throttle / deepMerge 等)
- `core.test.js` — MarkdownEditor 构造、内容 API、exec 命令(含自定义动作)、历史栈、模式、事件、插件、销毁、readOnly
- `plugins.test.js` — 预设插件(autoSave / exportTool / searchReplace / imagePaste+ PluginManager + pluginUtils