OpenHarmony三方组件:commonmark

Handpc
发布于 2023-3-16 18:57
浏览
0收藏

简介

Markdown是一种纯文本格式,用于编写结构化文档。CommonMark三方库用于将Markdown格式转换为Html或者xml,以便在网页中显示。本库是​​CommonMark​​在OpenHarmony中的使用示例。

下载安装

npm install --save commonmark
npm install --save @types/commonmark

使用方法说明

var reader = new commonmark.Parser();
var writer = new commonmark.HtmlRenderer();
var parsed = reader.parse("Hello *world*"); // parsed is a 'Node' tree
// transform parsed if you like...
var result = writer.render(parsed); // result is a String

接口说明

var reader = new commonmark.Parser({smart: true});
var writer = new commonmark.HtmlRenderer({sourcepos: true});

​Parser​​​目前支持以下功能: ​​smart​​:如果为true,直引号将被卷起来,--将更改为破折号,---将更改为强破折号,和...将更改为椭圆。

​HtmlRenderer​​​和​​XmlRenderer​​(见下文)都支持以下选项:

sourcepos:如果为true,则块级元素的源位置信息将在data-sourcepos属性(HTML)或sourcepos属性(XML)中呈现。 safe:如果为true,则原始HTML将不会传递到HTML输出(将被注释取代),以及链接和图像中潜在不安全的URL(那些以javascript:、vbscript:、文件:开头的URL,除少数例外数据:)将被替换为空字符串。 softbreak:指定用于softbreak的原始字符串。 esc:指定用于转义字符串的函数。它的参数是字符串。

例如,要使软中断在HTML中呈现为硬中断,请执行以下操作: ​​var writer = new commonmark.HtmlRenderer({softbreak: "<br />"});​

要使它们呈现为空白,请执行以下操作: ​​var writer = new commonmark.HtmlRenderer({softbreak: " "});​

XmlRenderer作为HtmlRenderer的替代方案,并将生成AST的XML表示: ​​var writer = new commonmark.XmlRenderer({sourcepos: true});​

解析器返回一个Node。定义了以下公共属性(那些标记为“只读”的属性只有getter,而不是setter):

  • type (read-only): a String, one of text, softbreak, linebreak, emph, strong, html_inline, link, image, code, document, paragraph, block_quote, item, list, heading, code_block, html_block, thematic_break.
  • firstChild (read-only): a Node or null.
  • lastChild (read-only): a Node or null.
  • next (read-only): a Node or null.
  • prev (read-only): a Node or null.
  • parent (read-only): a Node or null.
  • sourcepos (read-only): an Array with the following form: [[startline, startcolumn], [endline, endcolumn]].
  • isContainer (read-only): true if the Node can contain other Nodes as children.
  • literal: the literal String content of the node or null.
  • destination: link or image destination (String) or null.
  • title: link or image title (String) or null.
  • info: fenced code block info string (String) or null.
  • level: heading level (Number).
  • listType: a String, either bullet or ordered.
  • listTight: true if list is tight.
  • listStart: a Number, the starting number of an ordered list.
  • listDelimiter: a String, either ) or . for an ordered list.
  • onEnter, onExit: Strings, used only for custom_block or custom_inline.

Node有以下公共方法:

  • appendChild(child):将节点子级附加到节点子级的末尾。
  • prependChild(child):将节点子项放在节点子项的开头。
  • unlink():从树中删除节点,切断其与同级和父级的链接,并根据需要关闭间隙。
  • insertAfter(sibling):在节点之后插入节点同级。
  • insertBefore(sibling):在节点之前插入节点同级。
  • walker():返回一个NodeWalker,该NodeWalker可用于迭代根植于节点的节点树。

walker()返回的NodeWalker有两种方法:

next():返回属性输入的对象(布尔值,当我们从父级或同级输入节点时,该值为true,当我们从子级重新输入节点时,该值为false)。当我们完成遍历树时,返回null。 resumeAt(node, entering):重置迭代器以在指定的节点恢复,并设置进入。(通常,除非对节点树进行破坏性更新,否则不需要此操作。)

这里是一个使用NodeWalker迭代树的示例,进行转换。此简单示例将所有文本节点的内容转换为所有大写字母:

var walker = parsed.walker();
var event, node;

while ((event = walker.next())) {
  node = event.node;
  if (event.entering && node.type === 'text') {
    node.literal = node.literal.toUpperCase();
  }
}

这个更复杂的示例将重点转换为所有大写字母:

var walker = parsed.walker();
var event, node;
var inEmph = false;

while ((event = walker.next())) {
  node = event.node;
  if (node.type === 'emph') {
    if (event.entering) {
      inEmph = true;
    } else {
      inEmph = false;
      // add Emph node's children as siblings
      while (node.firstChild) {
        node.insertBefore(node.firstChild);
      }
      // remove the empty Emph node
      node.unlink()
    }
  } else if (inEmph && node.type === 'text') {
      node.literal = node.literal.toUpperCase();
  }
}

兼容性

支持 OpenHarmony API version 8 及以上版本。

目录结构

|---- CommonMarkOHOS  
|     |---- entry  # 示例代码文件夹
|     |---- README.md  # 安装使用方法

贡献代码

使用过程中发现任何问题都可以提 ​​Issue​​​ 给我们,当然,我们也非常欢迎你给我们发 ​​PR​​ 。

开源协议

本项目基于 ​​Apache License 2.0​​ ,请自由地享受和参与开源。


文章转载自:​​https://gitee.com/openharmony-tpc/commonmark​

分类
commonmark-master.zip 67.95K 0次下载
已于2023-3-16 18:57:33修改
收藏
回复
举报
回复
    相关推荐