Documentation ¶
Index ¶
- Constants
- Variables
- func IsNodeIDPattern(str string) bool
- func NewNodeID() string
- func Walk(n *Node, walker Walker)
- type ListData
- type Node
- func (n *Node) AcceptLines() bool
- func (n *Node) AppendChild(child *Node)
- func (n *Node) AppendTokens(tokens []byte)
- func (n *Node) CanContain(nodeType NodeType) bool
- func (n *Node) ChildByType(childType NodeType) *Node
- func (n *Node) ChildrenByType(childType NodeType) (ret []*Node)
- func (n *Node) ClearIALAttrs()
- func (n *Node) ContainTextMarkTypes(types ...string) bool
- func (n *Node) Content() (ret string)
- func (n *Node) DocChild() (ret *Node)
- func (n *Node) EscapeMarkerContent() (ret string)
- func (n *Node) FirstDeepestChild() (ret *Node)
- func (n *Node) IALAttr(name string) string
- func (n *Node) InsertAfter(sibling *Node)
- func (n *Node) InsertBefore(sibling *Node)
- func (n *Node) IsBlock() bool
- func (n *Node) IsChildBlockOf(parent *Node, depth int) bool
- func (n *Node) IsContainerBlock() bool
- func (n *Node) IsEmptyBlockIAL() bool
- func (n *Node) IsMarker() bool
- func (n *Node) IsSameTextMarkType(node *Node) bool
- func (n *Node) IsTextMarkType(typ string) bool
- func (n *Node) LastDeepestChild() (ret *Node)
- func (n *Node) List() (ret []*Node)
- func (n *Node) Marker(entering bool) (ret string)
- func (n *Node) NextNodeText() string
- func (n *Node) ParentIs(nodeType NodeType, nodeTypes ...NodeType) bool
- func (n *Node) PrependChild(child *Node)
- func (n *Node) PrependTokens(tokens []byte)
- func (n *Node) PreviousNodeText() string
- func (n *Node) RemoveIALAttr(name string)
- func (n *Node) SetIALAttr(name, value string)
- func (n *Node) SortTextMarkDataTypes()
- func (n *Node) Stat() (runeCnt, wordCnt, linkCnt, imgCnt, refCnt int)
- func (n *Node) Text() (ret string)
- func (n *Node) TextLen() (ret int)
- func (n *Node) TokenLen() (ret int)
- func (n *Node) TokensStr() string
- func (n *Node) Unlink()
- type NodeType
- type WalkStatus
- type Walker
Constants ¶
const ( // WalkStop 意味着不需要继续遍历。 WalkStop = iota // WalkSkipChildren 意味着不要遍历子节点。 WalkSkipChildren // WalkContinue 意味着继续遍历。 WalkContinue )
Variables ¶
var Testing bool
Testing 标识是否为测试环境。
Functions ¶
func IsNodeIDPattern ¶
Types ¶
type ListData ¶
type ListData struct { Typ int `json:",omitempty"` // 0:无序列表,1:有序列表,3:任务列表 Tight bool `json:",omitempty"` // 是否是紧凑模式 BulletChar byte `json:",omitempty"` // 无序列表标识,* - 或者 + Start int `json:",omitempty"` // 有序列表起始序号 Delimiter byte `json:",omitempty"` // 有序列表分隔符,. 或者 ) Padding int `json:",omitempty"` // 列表内部缩进空格数(包含标识符长度,即规范中的 W+N) MarkerOffset int `json:",omitempty"` // 标识符(* - + 或者 1 2 3)相对缩进空格数 Checked bool `json:",omitempty"` // 任务列表项是否勾选 Marker []byte `json:",omitempty"` // 列表标识符 Num int `json:",omitempty"` // 有序列表项修正过的序号 }
ListData 用于记录列表或列表项节点的附加信息。
type Node ¶
type Node struct { ID string `json:",omitempty"` // 节点的唯一标识 Box string `json:"-"` // 容器 Path string `json:"-"` // 路径 Spec string `json:",omitempty"` // 规范版本号 Type NodeType `json:"-"` // 节点类型 Parent *Node `json:"-"` // 父节点 Previous *Node `json:"-"` // 前一个兄弟节点 Next *Node `json:"-"` // 后一个兄弟节点 FirstChild *Node `json:"-"` // 第一个子节点 LastChild *Node `json:"-"` // 最后一个子节点 Children []*Node `json:",omitempty"` // 所有子节点 Tokens []byte `json:"-"` // 词法分析结果 Tokens,语法分析阶段会继续操作这些 Tokens TypeStr string `json:"Type"` // 类型字符串 Data string `json:"Data,omitempty"` // Tokens 字符串 Close bool `json:"-"` // 标识是否关闭 LastLineBlank bool `json:"-"` // 标识最后一行是否是空行 LastLineChecked bool `json:"-"` // 标识最后一行是否检查过 CodeMarkerLen int `json:",omitempty"` // ` 个数,1 或 2 IsFencedCodeBlock bool `json:",omitempty"` CodeBlockFenceChar byte `json:",omitempty"` CodeBlockFenceLen int `json:",omitempty"` CodeBlockFenceOffset int `json:",omitempty"` CodeBlockOpenFence []byte `json:",omitempty"` CodeBlockInfo []byte `json:",omitempty"` CodeBlockCloseFence []byte `json:",omitempty"` HtmlBlockType int `json:",omitempty"` // 规范中定义的 HTML 块类型(1-7) ListData *ListData `json:",omitempty"` TaskListItemChecked bool `json:",omitempty"` // 是否勾选 TableAligns []int `json:",omitempty"` // 从左到右每个表格节点的对齐方式,0:默认对齐,1:左对齐,2:居中对齐,3:右对齐 TableCellAlign int `json:",omitempty"` // 表的单元格对齐方式 TableCellContentWidth int `json:",omitempty"` // 表的单元格内容宽度(字节数) TableCellContentMaxWidth int `json:",omitempty"` // 表的单元格内容最大宽度 LinkType int `json:",omitempty"` // 链接类型,0:内联链接 [foo](/bar),1:链接引用定义 [foo]: /bar,2:自动链接,3:链接引用 [foo] LinkRefLabel []byte `json:",omitempty"` // 链接引用 label,[label] 或者 [text][label] 形式,[label] 情况下 text 和 label 相同 HeadingLevel int `json:",omitempty"` // 1~6 HeadingSetext bool `json:",omitempty"` // 是否为 Setext HeadingNormalizedID string `json:",omitempty"` // 规范化后的 ID MathBlockDollarOffset int `json:",omitempty"` FootnotesRefLabel []byte `json:",omitempty"` // 脚注引用 label,[^label] FootnotesRefId string `json:",omitempty"` // 脚注 id FootnotesRefs []*Node `json:",omitempty"` // 脚注引用 HtmlEntityTokens []byte `json:",omitempty"` // 原始输入的实体 tokens,& KramdownIAL [][]string `json:"-"` // Kramdown 内联属性列表 Properties map[string]string `json:",omitempty"` // 属性 TextMarkType string `json:",omitempty"` // 文本标记类型 TextMarkAHref string `json:",omitempty"` // 文本标记超链接 data-href 属性 TextMarkATitle string `json:",omitempty"` // 文本标记超链接 data-title 属性 TextMarkInlineMathContent string `json:",omitempty"` // 文本标记内联数学公式内容 data-content 属性 TextMarkInlineMemoContent string `json:",omitempty"` // 文本标记内联备注内容 data-inline-memo-content 属性 TextMarkBlockRefID string `json:",omitempty"` // 文本标记块引用 ID data-id 属性 TextMarkBlockRefSubtype string `json:",omitempty"` // 文本标记块引用子类型(静态/动态锚文本) data-subtype 属性 TextMarkFileAnnotationRefID string `json:",omitempty"` // 文本标记文件注解引用 ID data-id 属性 TextMarkTextContent string `json:",omitempty"` // 文本标记文本内容 AttributeViewID string `json:",omitempty"` // 属性视图 data-av-id 属性 AttributeViewType string `json:",omitempty"` // 属性视图 data-av-type 属性 CustomBlockFenceOffset int `json:",omitempty"` // 自定义块标记符起始偏移量 CustomBlockInfo string `json:",omitempty"` // 自定义块信息 }
Node 描述了节点结构。
func (*Node) AcceptLines ¶
AcceptLines 判断是否节点是否可以接受更多的文本行。比如 HTML 块、代码块和段落是可以接受更多的文本行的。
func (*Node) CanContain ¶
CanContain 判断是否能够包含 NodeType 指定类型的节点。 比如列表节点(块级容器)只能包含列表项节点, 块引用节点(块级容器)可以包含任意节点;段落节点(叶子块节点)不能包含任何其他块级节点。
func (*Node) ChildByType ¶
ChildByType 在 n 的子节点中查找 childType 指定类型的第一个子节点。
func (*Node) ChildrenByType ¶
ChildrenByType 返回 n 下所有类型为 childType 的子节点。
func (*Node) ClearIALAttrs ¶
func (n *Node) ClearIALAttrs()
ClearIALAttrs 用于删除 name、alias、memo 和 bookmark 以及所有 custom- 前缀属性。
func (*Node) ContainTextMarkTypes ¶ added in v1.7.6
func (*Node) EscapeMarkerContent ¶ added in v1.7.6
EscapeMarkerContent 返回 n 及其所有内容子节点的文本值(其中的标记符会被转义),块级节点间通过换行符分隔。
func (*Node) FirstDeepestChild ¶
FirstDeepestChild 返回 n 的第一个最深的子节点。
func (*Node) IsChildBlockOf ¶
IsChildBlockOf 用于检查块级节点 n 的父节点是否是 parent 节点,depth 指定层级,0 为任意层级。 n 如果不是块级节点,则直接返回 false。
func (*Node) IsContainerBlock ¶
IsContainerBlock 判断 n 是否为容器块。
func (*Node) IsEmptyBlockIAL ¶ added in v1.7.5
func (*Node) IsSameTextMarkType ¶ added in v1.7.5
func (*Node) IsTextMarkType ¶ added in v1.7.5
func (*Node) LastDeepestChild ¶
LastDeepestChild 返回 n 的最后一个最深子节点。
func (*Node) NextNodeText ¶
func (*Node) PrependChild ¶
PrependChild 在 n 的子节点最前添加一个子节点。
func (*Node) PrependTokens ¶ added in v1.7.5
PrependTokens 添加 Tokens 到开头。
func (*Node) PreviousNodeText ¶
func (*Node) RemoveIALAttr ¶
func (*Node) SetIALAttr ¶
func (*Node) SortTextMarkDataTypes ¶ added in v1.7.5
func (n *Node) SortTextMarkDataTypes()
type NodeType ¶
type NodeType int
const ( NodeDocument NodeType = 0 // 根 NodeParagraph NodeType = 1 // 段落 NodeHeading NodeType = 2 // 标题 NodeHeadingC8hMarker NodeType = 3 // ATX 标题标记符 # NodeThematicBreak NodeType = 4 // 分隔线 NodeBlockquote NodeType = 5 // 块引用 NodeBlockquoteMarker NodeType = 6 // 块引用标记符 > NodeList NodeType = 7 // 列表 NodeListItem NodeType = 8 // 列表项 NodeHTMLBlock NodeType = 9 // HTML 块 NodeInlineHTML NodeType = 10 // 内联 HTML NodeCodeBlock NodeType = 11 // 代码块 NodeCodeBlockFenceOpenMarker NodeType = 12 // 开始围栏代码块标记符 “` NodeCodeBlockFenceCloseMarker NodeType = 13 // 结束围栏代码块标记符 “` NodeCodeBlockFenceInfoMarker NodeType = 14 // 围栏代码块信息标记符 info string NodeCodeBlockCode NodeType = 15 // 围栏代码块代码 NodeText NodeType = 16 // 文本 NodeEmphasis NodeType = 17 // 强调 NodeEmA6kOpenMarker NodeType = 18 // 开始强调标记符 * NodeEmA6kCloseMarker NodeType = 19 // 结束强调标记符 * NodeEmU8eOpenMarker NodeType = 20 // 开始强调标记符 _ NodeEmU8eCloseMarker NodeType = 21 // 结束强调标记符 _ NodeStrong NodeType = 22 // 加粗 NodeStrongA6kOpenMarker NodeType = 23 // 开始加粗标记符 ** NodeStrongA6kCloseMarker NodeType = 24 // 结束加粗标记符 ** NodeStrongU8eOpenMarker NodeType = 25 // 开始加粗标记符 __ NodeStrongU8eCloseMarker NodeType = 26 // 结束加粗标记符 __ NodeCodeSpan NodeType = 27 // 代码 NodeCodeSpanOpenMarker NodeType = 28 // 开始代码标记符 ` NodeCodeSpanContent NodeType = 29 // 代码内容 NodeCodeSpanCloseMarker NodeType = 30 // 结束代码标记符 ` NodeHardBreak NodeType = 31 // 硬换行 NodeSoftBreak NodeType = 32 // 软换行 NodeLink NodeType = 33 // 链接 NodeImage NodeType = 34 // 图片 NodeBang NodeType = 35 // ! NodeOpenBracket NodeType = 36 // [ NodeCloseBracket NodeType = 37 // ] NodeOpenParen NodeType = 38 // ( NodeCloseParen NodeType = 39 // ) NodeLinkText NodeType = 40 // 链接文本 NodeLinkDest NodeType = 41 // 链接地址 NodeLinkTitle NodeType = 42 // 链接标题 NodeLinkSpace NodeType = 43 // 链接地址和链接标题之间的空格 NodeHTMLEntity NodeType = 44 // HTML 实体 NodeLinkRefDefBlock NodeType = 45 // 链接引用定义块 NodeLinkRefDef NodeType = 46 // 链接引用定义 [label]: NodeLess NodeType = 47 // < NodeGreater NodeType = 48 // > NodeTaskListItemMarker NodeType = 100 // 任务列表项标记符 NodeStrikethrough NodeType = 101 // 删除线 NodeStrikethrough1OpenMarker NodeType = 102 // 开始删除线标记符 ~ NodeStrikethrough1CloseMarker NodeType = 103 // 结束删除线标记符 ~ NodeStrikethrough2OpenMarker NodeType = 104 // 开始删除线标记符 ~~ NodeStrikethrough2CloseMarker NodeType = 105 // 结束删除线标记符 ~~ NodeTable NodeType = 106 // 表 NodeTableHead NodeType = 107 // 表头 NodeTableRow NodeType = 108 // 表行 NodeTableCell NodeType = 109 // 表格 NodeEmoji NodeType = 200 // Emoji NodeEmojiUnicode NodeType = 201 // Emoji Unicode NodeEmojiImg NodeType = 202 // Emoji 图片 NodeEmojiAlias NodeType = 203 // Emoji ASCII NodeMathBlock NodeType = 300 // 数学公式块 NodeMathBlockOpenMarker NodeType = 301 // 开始数学公式块标记符 $$ NodeMathBlockContent NodeType = 302 // 数学公式块内容 NodeMathBlockCloseMarker NodeType = 303 // 结束数学公式块标记符 $$ NodeInlineMath NodeType = 304 // 内联数学公式 NodeInlineMathOpenMarker NodeType = 305 // 开始内联数学公式标记符 $ NodeInlineMathContent NodeType = 306 // 内联数学公式内容 NodeInlineMathCloseMarker NodeType = 307 // 结束内联数学公式标记符 $ NodeBackslash NodeType = 400 // 转义反斜杠标记符 \ NodeBackslashContent NodeType = 401 // 转义反斜杠后的内容 NodeVditorCaret NodeType = 405 // 插入符,某些情况下需要使用该节点进行插入符位置调整 NodeFootnotesDefBlock NodeType = 410 // 脚注定义块 NodeFootnotesDef NodeType = 411 // 脚注定义 [^label]: NodeFootnotesRef NodeType = 412 // 脚注引用 [^label] NodeToC NodeType = 415 // 目录 [toc] NodeHeadingID NodeType = 420 // 标题 ID # foo {id} NodeYamlFrontMatter NodeType = 425 // https://jekyllrb.com/docs/front-matter/ NodeYamlFrontMatterOpenMarker NodeType = 426 // 开始 YAML Front Matter 标记符 --- NodeYamlFrontMatterContent NodeType = 427 // YAML Front Matter 内容 NodeYamlFrontMatterCloseMarker NodeType = 428 // 结束 YAML Front Matter 标记符 --- NodeBlockRef NodeType = 430 // 内容块引用节点 NodeBlockRefID NodeType = 431 // 被引用的内容块(定义块)ID NodeBlockRefSpace NodeType = 432 // 被引用的内容块 ID 和内容块引用锚文本之间的空格 NodeBlockRefText NodeType = 433 // 内容块引用锚文本 NodeBlockRefDynamicText NodeType = 434 // 内容块引用动态锚文本 NodeMark NodeType = 450 // 标记 NodeMark1OpenMarker NodeType = 451 // 开始标记标记符 = NodeMark1CloseMarker NodeType = 452 // 结束标记标记符 = NodeMark2OpenMarker NodeType = 453 // 开始标记标记符 == NodeMark2CloseMarker NodeType = 454 // 结束标记标记符 == NodeKramdownBlockIAL NodeType = 455 // 块级内联属性列表 {: name="value"} NodeKramdownSpanIAL NodeType = 456 // 行级内联属性列表 *foo*{: name="value"}bar NodeTag NodeType = 460 // 标签 NodeTagOpenMarker NodeType = 461 // 开始标签标记符 # NodeTagCloseMarker NodeType = 462 // 结束标签标记符 # NodeBlockQueryEmbed NodeType = 465 // 内容块查询嵌入 NodeOpenBrace NodeType = 466 // { NodeCloseBrace NodeType = 467 // } NodeBlockQueryEmbedScript NodeType = 468 // 内容块查询嵌入脚本 NodeSuperBlock NodeType = 475 // 超级块节点 NodeSuperBlockOpenMarker NodeType = 476 // 开始超级块标记符 {{{ NodeSuperBlockLayoutMarker NodeType = 477 // 超级块布局 row/col NodeSuperBlockCloseMarker NodeType = 478 // 结束超级块标记符 }}} NodeSup NodeType = 485 // 上标 NodeSupOpenMarker NodeType = 486 // 开始上标标记符 ^ NodeSupCloseMarker NodeType = 487 // 结束上标标记符 ^ NodeSub NodeType = 490 // 下标 NodeSubOpenMarker NodeType = 491 // 开始下标标记符 ~ NodeSubCloseMarker NodeType = 492 // 结束下标标记符 ~ NodeGitConflict NodeType = 495 // Git 冲突标记 NodeGitConflictOpenMarker NodeType = 496 // 开始 Git 冲突标记标记符 <<<<<<< NodeGitConflictContent NodeType = 497 // Git 冲突标记内容 NodeGitConflictCloseMarker NodeType = 498 // 结束 Git 冲突标记标记符 >>>>>>> NodeIFrame NodeType = 500 // <iframe> 标签 NodeAudio NodeType = 505 // <audio> 标签 NodeVideo NodeType = 510 // <video> 标签 NodeKbd NodeType = 515 // 键盘 NodeKbdOpenMarker NodeType = 516 // 开始 kbd 标记符 <kbd> NodeKbdCloseMarker NodeType = 517 // 结束 kbd 标记符 </kbd> NodeUnderline NodeType = 520 // 下划线 NodeUnderlineOpenMarker NodeType = 521 // 开始下划线标记符 <u> NodeUnderlineCloseMarker NodeType = 522 // 结束下划线标记符 </u> NodeBr NodeType = 525 // <br> 换行 NodeTextMark NodeType = 530 // 文本标记,该节点因为不存在嵌套,所以不使用 Open/Close 标记符 NodeWidget NodeType = 535 // <iframe data-type="NodeWidget" data-subtype="widget"></iframe> NodeFileAnnotationRef NodeType = 540 // 文件注解引用节点 NodeFileAnnotationRefID NodeType = 541 // 被引用的文件注解 ID(file/annotation) NodeFileAnnotationRefSpace NodeType = 542 // 被引用的文件注解 ID 和文件注解引用锚文本之间的空格 NodeFileAnnotationRefText NodeType = 543 // 文件注解引用锚文本(不能为空,如果为空的话会自动使用 ID 渲染) NodeAttributeView NodeType = 550 // 属性视图 NodeCustomBlock NodeType = 560 // 自定义块 NodeTypeMaxVal NodeType = 1024 // 节点类型最大值 )
func Str2NodeType ¶
type Walker ¶
type Walker func(n *Node, entering bool) WalkStatus
Walker 函数定义了遍历节点 n 时需要执行的操作,进入节点设置 entering 为 true,离开节点设置为 false。 如果返回 WalkStop 或者 error 则结束遍历。