From 44f24c66cf2b3b33c1809a47d0e31391895da238 Mon Sep 17 00:00:00 2001 From: progfay <19568747+progfay@users.noreply.github.com> Date: Sun, 23 Nov 2025 17:55:45 +0900 Subject: [PATCH 1/5] refactor type & logic --- src/block/CodeBlock.ts | 5 ++--- src/block/Table.ts | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/block/CodeBlock.ts b/src/block/CodeBlock.ts index a2ce39f1..df85dc28 100644 --- a/src/block/CodeBlock.ts +++ b/src/block/CodeBlock.ts @@ -2,7 +2,7 @@ import type { Row } from "./Row.ts"; export interface CodeBlockPack { type: "codeBlock"; - rows: Row[]; + rows: [Row, ...Row[]]; } /** @@ -17,9 +17,8 @@ export interface CodeBlock { export const convertToCodeBlock = (pack: CodeBlockPack): CodeBlock => { const { - rows: [head, ...body], + rows: [{ indent, text }, ...body], } = pack; - const { indent = 0, text = "" } = head ?? {}; const fileName: string = text.replace(/^\s*code:/, ""); return { diff --git a/src/block/Table.ts b/src/block/Table.ts index 0cb36e6b..4d877953 100644 --- a/src/block/Table.ts +++ b/src/block/Table.ts @@ -4,7 +4,7 @@ import type { Row } from "./Row.ts"; export interface TablePack { type: "table"; - rows: Row[]; + rows: [Row, ...Row[]]; } /** @@ -19,9 +19,8 @@ export interface Table { export const convertToTable = (pack: TablePack): Table => { const { - rows: [head, ...body], + rows: [{ indent, text }, ...body], } = pack; - const { indent = 0, text = "" } = head ?? {}; const fileName = text.replace(/^\s*table:/, ""); return { From 141bade43b62c86e15a0903dcb77466e376e2a68 Mon Sep 17 00:00:00 2001 From: progfay <19568747+progfay@users.noreply.github.com> Date: Sun, 23 Nov 2025 18:22:17 +0900 Subject: [PATCH 2/5] re-define `PlainNodeParser` as `TerminateNodeParser` --- src/block/Pack.ts | 7 +++++-- src/block/node/PlainNode.ts | 9 ++------- src/block/node/creator.ts | 6 +++--- src/block/node/index.ts | 12 +++++++----- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/block/Pack.ts b/src/block/Pack.ts index 552056f8..1e7d70b6 100644 --- a/src/block/Pack.ts +++ b/src/block/Pack.ts @@ -30,8 +30,11 @@ const packing = (packs: Pack[], row: Row): Pack[] => { return packs; }; -export const packRows = (rows: Row[], opts: ParserOption): Pack[] => { - if (opts.hasTitle ?? true) { +export const packRows = ( + rows: Row[], + { hasTitle = true }: ParserOption, +): Pack[] => { + if (hasTitle) { const [title, ...body] = rows; if (title === undefined) return []; return [ diff --git a/src/block/node/PlainNode.ts b/src/block/node/PlainNode.ts index 53f1d536..8a39c826 100644 --- a/src/block/node/PlainNode.ts +++ b/src/block/node/PlainNode.ts @@ -1,6 +1,5 @@ import type { NodeCreator } from "./creator.ts"; -import { createNodeParser } from "./creator.ts"; -import type { NodeParser } from "./index.ts"; +import type { TerminateNodeParser } from "./index.ts"; import type { PlainNode } from "./type.ts"; export const createPlainNode: NodeCreator = (raw) => [ @@ -11,8 +10,4 @@ export const createPlainNode: NodeCreator = (raw) => [ }, ]; -export const PlainNodeParser: NodeParser = createNodeParser(createPlainNode, { - parseOnNested: true, - parseOnQuoted: true, - patterns: [/^()(.*)()$/], -}); +export const PlainNodeParser: TerminateNodeParser = createPlainNode; diff --git a/src/block/node/creator.ts b/src/block/node/creator.ts index e18c5b4e..efd89067 100644 --- a/src/block/node/creator.ts +++ b/src/block/node/creator.ts @@ -17,8 +17,8 @@ export const createNodeParser: NodeParserCreator = ( { parseOnNested, parseOnQuoted, patterns }, ) => { return (text, opts, next) => { - if (!parseOnNested && opts.nested) return next?.() ?? []; - if (!parseOnQuoted && opts.quoted) return next?.() ?? []; + if (!parseOnNested && opts.nested) return next(); + if (!parseOnQuoted && opts.quoted) return next(); for (const pattern of patterns) { const match = pattern.exec(text); @@ -35,6 +35,6 @@ export const createNodeParser: NodeParserCreator = ( ]; } - return next?.() ?? []; + return next(); }; }; diff --git a/src/block/node/index.ts b/src/block/node/index.ts index bc4fe954..21e31db7 100644 --- a/src/block/node/index.ts +++ b/src/block/node/index.ts @@ -28,13 +28,15 @@ export type NextNodeParser = () => Node[]; export type NodeParser = ( text: string, opts: NodeParserOption, - next?: NextNodeParser, + next: NextNodeParser, +) => Node[]; +export type TerminateNodeParser = ( + text: string, + opts: NodeParserOption, ) => Node[]; -const FalsyEliminator: NodeParser = (text, _, next) => { - if (text === "") return []; - return next?.() ?? []; -}; +const FalsyEliminator: NodeParser = (text, _, next) => + text !== "" ? next() : []; const combineNodeParsers = (...parsers: NodeParser[]) => From 6eafc22c1611303ad7af1a66bebba33388fca835 Mon Sep 17 00:00:00 2001 From: progfay <19568747+progfay@users.noreply.github.com> Date: Sun, 23 Nov 2025 18:26:19 +0900 Subject: [PATCH 3/5] refactor type --- src/block/node/creator.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/block/node/creator.ts b/src/block/node/creator.ts index efd89067..ec16d9c1 100644 --- a/src/block/node/creator.ts +++ b/src/block/node/creator.ts @@ -7,9 +7,15 @@ export type NodeCreator = ( opts: NodeParserOption, ) => T[]; +type NodeParserCreatorOptions = { + parseOnNested: boolean; + parseOnQuoted: boolean; + patterns: RegExp[]; +}; + type NodeParserCreator = ( nodeCreator: NodeCreator, - opts: { parseOnNested: boolean; parseOnQuoted: boolean; patterns: RegExp[] }, + opts: NodeParserCreatorOptions, ) => NodeParser; export const createNodeParser: NodeParserCreator = ( From 90545e46076913eea95d3ae34f904d67cdb3b30f Mon Sep 17 00:00:00 2001 From: progfay <19568747+progfay@users.noreply.github.com> Date: Sun, 23 Nov 2025 18:29:53 +0900 Subject: [PATCH 4/5] fix logic --- src/block/node/creator.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/block/node/creator.ts b/src/block/node/creator.ts index ec16d9c1..35e26157 100644 --- a/src/block/node/creator.ts +++ b/src/block/node/creator.ts @@ -31,9 +31,9 @@ export const createNodeParser: NodeParserCreator = ( if (match === null) continue; const left = text.substring(0, match.index); - const right = text.substring(match.index + (match[0]?.length ?? 0)); + const right = text.substring(match.index + match[0].length); - const node = nodeCreator(match[0] ?? "", opts); + const node = nodeCreator(match[0], opts); return [ ...convertToNodes(left, opts), ...node, From 6e6f23c9021420d49699d60dc898c7dcd6c215e8 Mon Sep 17 00:00:00 2001 From: progfay <19568747+progfay@users.noreply.github.com> Date: Sun, 23 Nov 2025 18:51:39 +0900 Subject: [PATCH 5/5] refactor --- lcov.info | 1572 ++++++++++++++++++++++++++++ src/block/Pack.ts | 27 +- src/block/Row.ts | 2 +- src/block/node/ExternalLinkNode.ts | 2 +- src/parse.ts | 9 +- 5 files changed, 1594 insertions(+), 18 deletions(-) create mode 100644 lcov.info diff --git a/lcov.info b/lcov.info new file mode 100644 index 00000000..51b81501 --- /dev/null +++ b/lcov.info @@ -0,0 +1,1572 @@ +TN: +SF:src/block/CodeBlock.ts +FN:18,convertToCodeBlock +FN:29,anonymous_1 +FNDA:6,convertToCodeBlock +FNDA:30,anonymous_1 +FNF:2 +FNH:2 +BRDA:1,0,0,23 +BRDA:18,1,0,6 +BRDA:29,2,0,30 +BRF:3 +BRH:3 +DA:1,23 +DA:2,23 +DA:3,23 +DA:4,23 +DA:5,23 +DA:6,23 +DA:7,23 +DA:8,23 +DA:9,23 +DA:10,23 +DA:11,23 +DA:12,23 +DA:13,23 +DA:14,23 +DA:15,23 +DA:16,23 +DA:17,23 +DA:18,23 +DA:19,6 +DA:20,6 +DA:21,6 +DA:22,6 +DA:23,6 +DA:24,6 +DA:25,6 +DA:26,6 +DA:27,6 +DA:28,6 +DA:29,6 +DA:30,6 +DA:31,6 +DA:32,23 +LH:32 +LF:32 +end_of_record +SF:src/block/index.ts +FN:16,convertToBlock +FNDA:237,convertToBlock +FNF:1 +FNH:1 +BRDA:1,0,0,23 +BRDA:16,1,0,237 +BRDA:18,2,0,3 +BRDA:21,3,0,6 +BRDA:24,4,0,1 +BRDA:27,5,0,77 +BRF:6 +BRH:6 +DA:1,23 +DA:2,23 +DA:3,23 +DA:4,23 +DA:5,23 +DA:6,23 +DA:7,23 +DA:8,23 +DA:9,23 +DA:10,23 +DA:11,23 +DA:12,23 +DA:13,23 +DA:14,23 +DA:15,23 +DA:16,23 +DA:17,237 +DA:18,237 +DA:19,3 +DA:20,237 +DA:21,237 +DA:22,6 +DA:23,237 +DA:24,237 +DA:25,1 +DA:26,237 +DA:27,237 +DA:28,77 +DA:29,237 +DA:30,23 +LH:30 +LF:30 +end_of_record +SF:src/block/Line.ts +FN:19,convertToLine +FNDA:220,convertToLine +FNF:1 +FNH:1 +BRDA:1,0,0,23 +BRDA:19,1,0,220 +BRF:2 +BRH:2 +DA:1,23 +DA:2,23 +DA:3,23 +DA:4,23 +DA:5,23 +DA:6,23 +DA:7,23 +DA:8,23 +DA:9,23 +DA:10,23 +DA:11,23 +DA:12,23 +DA:13,23 +DA:14,23 +DA:15,23 +DA:16,23 +DA:17,23 +DA:18,23 +DA:19,23 +DA:20,220 +DA:21,220 +DA:22,220 +DA:23,220 +DA:24,220 +DA:25,220 +DA:26,220 +DA:27,220 +DA:28,220 +DA:29,220 +DA:30,23 +LH:30 +LF:30 +end_of_record +SF:src/block/node/BlankNode.ts +FN:9,createBlankNode +FNDA:7,createBlankNode +FNF:1 +FNH:1 +BRDA:1,0,0,23 +BRDA:9,1,0,7 +BRF:2 +BRH:2 +DA:1,23 +DA:2,23 +DA:3,23 +DA:4,23 +DA:5,23 +DA:6,23 +DA:7,23 +DA:8,23 +DA:9,23 +DA:10,7 +DA:11,7 +DA:12,7 +DA:13,7 +DA:14,7 +DA:15,7 +DA:16,7 +DA:17,7 +DA:18,23 +DA:19,23 +DA:20,23 +DA:21,23 +DA:22,23 +DA:23,23 +DA:24,23 +LH:24 +LF:24 +end_of_record +SF:src/block/node/CodeNode.ts +FN:9,createCodeNode +FNDA:27,createCodeNode +FNF:1 +FNH:1 +BRDA:1,0,0,23 +BRDA:9,1,0,27 +BRF:2 +BRH:2 +DA:1,23 +DA:2,23 +DA:3,23 +DA:4,23 +DA:5,23 +DA:6,23 +DA:7,23 +DA:8,23 +DA:9,23 +DA:10,27 +DA:11,27 +DA:12,27 +DA:13,27 +DA:14,27 +DA:15,27 +DA:16,27 +DA:17,27 +DA:18,23 +DA:19,23 +DA:20,23 +DA:21,23 +DA:22,23 +DA:23,23 +DA:24,23 +LH:24 +LF:24 +end_of_record +SF:src/block/node/CommandLineNode.ts +FN:9,createCommandLineNode +FNDA:3,createCommandLineNode +FNF:1 +FNH:1 +BRDA:1,0,0,23 +BRDA:9,1,0,3 +BRDA:17,2,0,0 +BRF:3 +BRH:2 +DA:1,23 +DA:2,23 +DA:3,23 +DA:4,23 +DA:5,23 +DA:6,23 +DA:7,23 +DA:8,23 +DA:9,23 +DA:10,3 +DA:11,3 +DA:12,3 +DA:13,3 +DA:14,3 +DA:15,3 +DA:16,3 +DA:17,3 +DA:18,3 +DA:19,3 +DA:20,3 +DA:21,3 +DA:22,3 +DA:23,3 +DA:24,3 +DA:25,3 +DA:26,3 +DA:27,3 +DA:28,23 +DA:29,23 +DA:30,23 +DA:31,23 +DA:32,23 +DA:33,23 +DA:34,23 +DA:35,23 +DA:36,23 +DA:37,23 +LH:37 +LF:37 +end_of_record +SF:src/block/node/creator.ts +FN:21,createNodeParser +FN:25,anonymous_1 +FNDA:391,createNodeParser +FNDA:7223,anonymous_1 +FNF:2 +FNH:2 +BRDA:1,0,0,23 +BRDA:21,1,0,391 +BRDA:25,2,0,5844 +BRDA:26,3,0,4447 +BRDA:27,4,0,1426 +BRDA:27,5,0,23 +BRDA:27,6,0,2481 +BRDA:29,7,0,7223 +BRDA:31,8,0,6805 +BRDA:31,9,0,229 +BRDA:42,10,0,4522 +BRDA:26,11,0,883 +BRDA:26,12,0,2448 +BRF:13 +BRH:13 +DA:1,23 +DA:2,23 +DA:3,23 +DA:4,23 +DA:5,23 +DA:6,23 +DA:7,23 +DA:8,23 +DA:9,23 +DA:10,23 +DA:11,23 +DA:12,23 +DA:13,23 +DA:14,23 +DA:15,23 +DA:16,23 +DA:17,23 +DA:18,23 +DA:19,23 +DA:20,23 +DA:21,23 +DA:22,391 +DA:23,391 +DA:24,391 +DA:25,391 +DA:26,5844 +DA:27,5844 +DA:28,2481 +DA:29,5844 +DA:30,7223 +DA:31,7223 +DA:32,229 +DA:33,229 +DA:34,229 +DA:35,229 +DA:36,229 +DA:37,229 +DA:38,229 +DA:39,229 +DA:40,229 +DA:41,229 +DA:42,229 +DA:43,4522 +DA:44,4522 +DA:45,391 +DA:46,23 +LH:46 +LF:46 +end_of_record +SF:src/block/node/DecorationNode.ts +FN:50,createDecorationNode +FNDA:52,createDecorationNode +FNF:1 +FNH:1 +BRDA:1,0,0,23 +BRDA:50,1,0,52 +BRDA:63,2,0,21 +BRF:3 +BRH:3 +DA:1,23 +DA:2,23 +DA:3,23 +DA:4,23 +DA:5,23 +DA:6,23 +DA:7,23 +DA:8,23 +DA:9,23 +DA:10,23 +DA:11,23 +DA:12,23 +DA:13,23 +DA:14,23 +DA:15,23 +DA:16,23 +DA:17,23 +DA:18,23 +DA:19,23 +DA:20,23 +DA:21,23 +DA:22,23 +DA:23,23 +DA:24,23 +DA:25,23 +DA:26,23 +DA:27,23 +DA:28,23 +DA:29,23 +DA:30,23 +DA:31,23 +DA:32,23 +DA:33,23 +DA:34,23 +DA:35,23 +DA:36,23 +DA:37,23 +DA:38,23 +DA:39,23 +DA:40,23 +DA:41,23 +DA:42,23 +DA:43,23 +DA:44,23 +DA:45,23 +DA:46,23 +DA:47,23 +DA:48,23 +DA:49,23 +DA:50,23 +DA:51,52 +DA:52,52 +DA:53,52 +DA:54,52 +DA:55,52 +DA:56,52 +DA:57,52 +DA:58,52 +DA:59,52 +DA:60,52 +DA:61,52 +DA:62,52 +DA:63,52 +DA:64,21 +DA:65,21 +DA:66,21 +DA:67,21 +DA:68,52 +DA:69,52 +DA:70,52 +DA:71,52 +DA:72,52 +DA:73,52 +DA:74,52 +DA:75,52 +DA:76,52 +DA:77,52 +DA:78,23 +DA:79,23 +DA:80,23 +DA:81,23 +DA:82,23 +DA:83,23 +DA:84,23 +DA:85,23 +DA:86,23 +DA:87,23 +LH:87 +LF:87 +end_of_record +SF:src/block/node/ExternalLinkNode.ts +FN:12,createExternalLinkNode +FNDA:18,createExternalLinkNode +FNF:1 +FNH:1 +BRDA:1,0,0,23 +BRDA:12,1,0,18 +BRDA:21,2,0,9 +BRDA:22,3,0,9 +BRDA:23,4,0,3 +BRDA:27,5,0,9 +BRDA:27,6,0,3 +BRDA:32,7,0,9 +BRDA:33,8,0,3 +BRDA:29,9,0,0 +BRF:10 +BRH:9 +DA:1,23 +DA:2,23 +DA:3,23 +DA:4,23 +DA:5,23 +DA:6,23 +DA:7,23 +DA:8,23 +DA:9,23 +DA:10,23 +DA:11,23 +DA:12,23 +DA:13,18 +DA:14,18 +DA:15,18 +DA:16,18 +DA:17,18 +DA:18,18 +DA:19,18 +DA:20,18 +DA:21,18 +DA:22,18 +DA:23,18 +DA:24,18 +DA:25,18 +DA:26,18 +DA:27,18 +DA:28,18 +DA:29,18 +DA:30,18 +DA:31,18 +DA:32,18 +DA:33,18 +DA:34,18 +DA:35,18 +DA:36,18 +DA:37,18 +DA:38,18 +DA:39,18 +DA:40,18 +DA:41,18 +DA:42,18 +DA:43,18 +DA:44,23 +DA:45,23 +DA:46,23 +DA:47,23 +DA:48,23 +DA:49,23 +DA:50,23 +DA:51,23 +DA:52,23 +DA:53,23 +DA:54,23 +DA:55,23 +DA:56,23 +DA:57,23 +DA:58,23 +LH:58 +LF:58 +end_of_record +SF:src/block/node/FormulaNode.ts +FN:10,createFormulaNode +FNDA:6,createFormulaNode +FNF:1 +FNH:1 +BRDA:1,0,0,23 +BRDA:10,1,0,6 +BRDA:17,2,0,1 +BRDA:17,3,0,3 +BRF:4 +BRH:4 +DA:1,23 +DA:2,23 +DA:3,23 +DA:4,23 +DA:5,23 +DA:6,23 +DA:7,23 +DA:8,23 +DA:9,23 +DA:10,23 +DA:11,6 +DA:12,6 +DA:13,6 +DA:14,6 +DA:15,6 +DA:16,6 +DA:17,6 +DA:18,6 +DA:19,23 +DA:20,23 +DA:21,23 +DA:22,23 +DA:23,23 +DA:24,23 +DA:25,23 +DA:26,23 +DA:27,23 +DA:28,23 +LH:28 +LF:28 +end_of_record +SF:src/block/node/GoogleMapNode.ts +FN:18,parseCoordinate +FN:26,createGoogleMapNode +FNDA:5,parseCoordinate +FNDA:6,createGoogleMapNode +FNF:2 +FNH:2 +BRDA:1,0,0,23 +BRDA:18,1,0,5 +BRDA:22,2,0,3 +BRDA:22,3,0,2 +BRDA:26,4,0,6 +BRDA:35,5,0,4 +BRDA:37,6,0,0 +BRDA:39,7,0,2 +BRDA:41,8,0,4 +BRDA:42,9,0,1 +BRDA:47,10,0,2 +BRDA:50,11,0,3 +BRF:12 +BRH:11 +DA:1,23 +DA:2,23 +DA:3,23 +DA:4,23 +DA:5,23 +DA:6,23 +DA:7,23 +DA:8,23 +DA:9,23 +DA:10,23 +DA:11,23 +DA:12,23 +DA:13,23 +DA:14,23 +DA:15,23 +DA:16,23 +DA:17,23 +DA:18,23 +DA:19,5 +DA:20,5 +DA:21,5 +DA:22,5 +DA:23,5 +DA:24,23 +DA:25,23 +DA:26,23 +DA:27,6 +DA:28,6 +DA:29,6 +DA:30,6 +DA:31,6 +DA:32,6 +DA:33,6 +DA:34,6 +DA:35,6 +DA:36,6 +DA:37,6 +DA:38,6 +DA:39,6 +DA:40,6 +DA:41,6 +DA:42,6 +DA:43,6 +DA:44,6 +DA:45,6 +DA:46,6 +DA:47,6 +DA:48,2 +DA:49,2 +DA:50,6 +DA:51,6 +DA:52,6 +DA:53,6 +DA:54,6 +DA:55,6 +DA:56,6 +DA:57,6 +DA:58,6 +DA:59,6 +DA:60,6 +DA:61,6 +DA:62,6 +DA:63,23 +DA:64,23 +DA:65,23 +DA:66,23 +DA:67,23 +DA:68,23 +DA:69,23 +DA:70,23 +DA:71,23 +DA:72,23 +LH:72 +LF:72 +end_of_record +SF:src/block/node/HashTagNode.ts +FN:9,createHashTagNode +FNDA:8,createHashTagNode +FNF:1 +FNH:1 +BRDA:1,0,0,23 +BRDA:9,1,0,8 +BRDA:14,2,0,3 +BRF:3 +BRH:3 +DA:1,23 +DA:2,23 +DA:3,23 +DA:4,23 +DA:5,23 +DA:6,23 +DA:7,23 +DA:8,23 +DA:9,23 +DA:10,8 +DA:11,8 +DA:12,8 +DA:13,8 +DA:14,8 +DA:15,3 +DA:16,3 +DA:17,3 +DA:18,3 +DA:19,3 +DA:20,3 +DA:21,3 +DA:22,3 +DA:23,3 +DA:24,3 +DA:25,3 +DA:26,3 +DA:27,3 +DA:28,3 +DA:29,3 +DA:30,3 +DA:31,3 +DA:32,3 +DA:33,3 +DA:34,3 +DA:35,23 +DA:36,23 +DA:37,23 +DA:38,23 +DA:39,23 +DA:40,23 +DA:41,23 +DA:42,23 +DA:43,23 +DA:44,23 +LH:44 +LF:44 +end_of_record +SF:src/block/node/HelpfeelNode.ts +FN:9,createHelpfeelNode +FNDA:2,createHelpfeelNode +FNF:1 +FNH:1 +BRDA:1,0,0,23 +BRDA:9,1,0,2 +BRF:2 +BRH:2 +DA:1,23 +DA:2,23 +DA:3,23 +DA:4,23 +DA:5,23 +DA:6,23 +DA:7,23 +DA:8,23 +DA:9,23 +DA:10,2 +DA:11,2 +DA:12,2 +DA:13,2 +DA:14,2 +DA:15,2 +DA:16,2 +DA:17,2 +DA:18,2 +DA:19,2 +DA:20,2 +DA:21,23 +DA:22,23 +DA:23,23 +DA:24,23 +DA:25,23 +DA:26,23 +DA:27,23 +DA:28,23 +DA:29,23 +DA:30,23 +LH:30 +LF:30 +end_of_record +SF:src/block/node/IconNode.ts +FN:8,createIconNode +FN:19,anonymous_1 +FNDA:10,createIconNode +FNDA:13,anonymous_1 +FNF:2 +FNH:2 +BRDA:1,0,0,23 +BRDA:8,1,0,10 +BRDA:12,2,0,2 +BRDA:12,3,0,5 +BRDA:15,4,0,2 +BRDA:16,5,0,3 +BRDA:19,6,0,13 +BRF:7 +BRH:7 +DA:1,23 +DA:2,23 +DA:3,23 +DA:4,23 +DA:5,23 +DA:6,23 +DA:7,23 +DA:8,23 +DA:9,10 +DA:10,10 +DA:11,10 +DA:12,10 +DA:13,10 +DA:14,10 +DA:15,10 +DA:16,10 +DA:17,10 +DA:18,10 +DA:19,10 +DA:20,23 +DA:21,23 +DA:22,23 +DA:23,23 +DA:24,23 +DA:25,23 +DA:26,23 +LH:26 +LF:26 +end_of_record +SF:src/block/node/ImageNode.ts +FN:16,isImageUrl +FN:20,isGyazoImageUrl +FN:23,createImageNode +FNDA:21,isImageUrl +FNDA:18,isGyazoImageUrl +FNDA:22,createImageNode +FNF:3 +FNH:3 +BRDA:1,0,0,23 +BRDA:16,1,0,21 +BRDA:17,2,0,17 +BRDA:20,3,0,18 +BRDA:23,4,0,22 +BRDA:30,5,0,8 +BRDA:30,6,0,12 +BRDA:33,7,0,8 +BRDA:34,8,0,12 +BRDA:35,9,0,5 +BRDA:35,10,0,15 +BRDA:42,11,0,8 +BRDA:43,12,0,12 +BRF:13 +BRH:13 +DA:1,23 +DA:2,23 +DA:3,23 +DA:4,23 +DA:5,23 +DA:6,23 +DA:7,23 +DA:8,23 +DA:9,23 +DA:10,23 +DA:11,23 +DA:12,23 +DA:13,23 +DA:14,23 +DA:15,23 +DA:16,23 +DA:17,21 +DA:18,23 +DA:19,23 +DA:20,23 +DA:21,23 +DA:22,23 +DA:23,23 +DA:24,22 +DA:25,22 +DA:26,22 +DA:27,22 +DA:28,22 +DA:29,22 +DA:30,22 +DA:31,22 +DA:32,22 +DA:33,22 +DA:34,22 +DA:35,22 +DA:36,22 +DA:37,22 +DA:38,22 +DA:39,22 +DA:40,22 +DA:41,22 +DA:42,22 +DA:43,22 +DA:44,22 +DA:45,22 +DA:46,22 +DA:47,23 +DA:48,23 +DA:49,23 +DA:50,23 +DA:51,23 +DA:52,23 +DA:53,23 +DA:54,23 +DA:55,23 +DA:56,23 +DA:57,23 +DA:58,23 +LH:58 +LF:58 +end_of_record +SF:src/block/node/index.ts +FN:38,FalsyEliminator +FN:42,combineNodeParsers +FN:43,anonymous_2 +FN:45,anonymous_3 +FN:46,anonymous_4 +FN:48,anonymous_5 +FNDA:853,FalsyEliminator +FNDA:23,combineNodeParsers +FNDA:853,anonymous_2 +FNDA:15354,anonymous_3 +FNDA:6697,anonymous_4 +FNDA:215,anonymous_5 +FNF:6 +FNH:6 +BRDA:1,0,0,23 +BRDA:38,1,0,853 +BRDA:39,2,0,435 +BRDA:39,3,0,409 +BRDA:42,4,0,23 +BRDA:43,5,0,853 +BRDA:45,6,0,15354 +BRDA:46,7,0,6697 +BRDA:48,8,0,215 +BRF:9 +BRH:9 +DA:1,23 +DA:2,23 +DA:3,23 +DA:4,23 +DA:5,23 +DA:6,23 +DA:7,23 +DA:8,23 +DA:9,23 +DA:10,23 +DA:11,23 +DA:12,23 +DA:13,23 +DA:14,23 +DA:15,23 +DA:16,23 +DA:17,23 +DA:18,23 +DA:19,23 +DA:20,23 +DA:21,23 +DA:22,23 +DA:23,23 +DA:24,23 +DA:25,23 +DA:26,23 +DA:27,23 +DA:28,23 +DA:29,23 +DA:30,23 +DA:31,23 +DA:32,23 +DA:33,23 +DA:34,23 +DA:35,23 +DA:36,23 +DA:37,23 +DA:38,23 +DA:39,23 +DA:40,23 +DA:41,23 +DA:42,23 +DA:43,23 +DA:44,853 +DA:45,853 +DA:46,15354 +DA:47,853 +DA:48,853 +DA:49,23 +DA:50,23 +DA:51,23 +DA:52,23 +DA:53,23 +DA:54,23 +DA:55,23 +DA:56,23 +DA:57,23 +DA:58,23 +DA:59,23 +DA:60,23 +DA:61,23 +DA:62,23 +DA:63,23 +DA:64,23 +DA:65,23 +DA:66,23 +DA:67,23 +DA:68,23 +DA:69,23 +DA:70,23 +DA:71,23 +LH:71 +LF:71 +end_of_record +SF:src/block/node/InternalLinkNode.ts +FN:8,createInternalLinkNode +FNDA:24,createInternalLinkNode +FNF:1 +FNH:1 +BRDA:1,0,0,23 +BRDA:8,1,0,24 +BRDA:14,2,0,4 +BRDA:14,3,0,10 +BRF:4 +BRH:4 +DA:1,23 +DA:2,23 +DA:3,23 +DA:4,23 +DA:5,23 +DA:6,23 +DA:7,23 +DA:8,23 +DA:9,24 +DA:10,24 +DA:11,24 +DA:12,24 +DA:13,24 +DA:14,24 +DA:15,24 +DA:16,24 +DA:17,24 +DA:18,24 +DA:19,23 +DA:20,23 +DA:21,23 +DA:22,23 +DA:23,23 +DA:24,23 +DA:25,23 +DA:26,23 +DA:27,23 +DA:28,23 +LH:28 +LF:28 +end_of_record +SF:src/block/node/NumberListNode.ts +FN:9,createNumberListNode +FNDA:5,createNumberListNode +FNF:1 +FNH:1 +BRDA:1,0,0,23 +BRDA:9,1,0,5 +BRF:2 +BRH:2 +DA:1,23 +DA:2,23 +DA:3,23 +DA:4,23 +DA:5,23 +DA:6,23 +DA:7,23 +DA:8,23 +DA:9,23 +DA:10,5 +DA:11,5 +DA:12,5 +DA:13,5 +DA:14,5 +DA:15,5 +DA:16,5 +DA:17,5 +DA:18,5 +DA:19,5 +DA:20,5 +DA:21,5 +DA:22,5 +DA:23,5 +DA:24,5 +DA:25,5 +DA:26,5 +DA:27,5 +DA:28,5 +DA:29,5 +DA:30,23 +DA:31,23 +DA:32,23 +DA:33,23 +DA:34,23 +DA:35,23 +DA:36,23 +DA:37,23 +DA:38,23 +DA:39,23 +LH:39 +LF:39 +end_of_record +SF:src/block/node/PlainNode.ts +FN:5,createPlainNode +FNDA:236,createPlainNode +FNF:1 +FNH:1 +BRDA:1,0,0,23 +BRDA:5,1,0,236 +BRF:2 +BRH:2 +DA:1,23 +DA:2,23 +DA:3,23 +DA:4,23 +DA:5,23 +DA:6,236 +DA:7,236 +DA:8,236 +DA:9,236 +DA:10,236 +DA:11,23 +DA:12,23 +DA:13,23 +LH:13 +LF:13 +end_of_record +SF:src/block/node/QuoteNode.ts +FN:9,createQuoteNode +FNDA:6,createQuoteNode +FNF:1 +FNH:1 +BRDA:1,0,0,23 +BRDA:9,1,0,6 +BRF:2 +BRH:2 +DA:1,23 +DA:2,23 +DA:3,23 +DA:4,23 +DA:5,23 +DA:6,23 +DA:7,23 +DA:8,23 +DA:9,23 +DA:10,6 +DA:11,6 +DA:12,6 +DA:13,6 +DA:14,6 +DA:15,6 +DA:16,6 +DA:17,6 +DA:18,23 +DA:19,23 +DA:20,23 +DA:21,23 +DA:22,23 +DA:23,23 +DA:24,23 +LH:24 +LF:24 +end_of_record +SF:src/block/node/StrongIconNode.ts +FN:8,createStrongIconNode +FN:24,anonymous_1 +FNDA:6,createStrongIconNode +FNDA:8,anonymous_1 +FNF:2 +FNH:2 +BRDA:1,0,0,23 +BRDA:8,1,0,6 +BRDA:17,2,0,1 +BRDA:17,3,0,4 +BRDA:20,4,0,2 +BRDA:21,5,0,3 +BRDA:24,6,0,8 +BRF:7 +BRH:7 +DA:1,23 +DA:2,23 +DA:3,23 +DA:4,23 +DA:5,23 +DA:6,23 +DA:7,23 +DA:8,23 +DA:9,6 +DA:10,6 +DA:11,6 +DA:12,6 +DA:13,6 +DA:14,6 +DA:15,6 +DA:16,6 +DA:17,6 +DA:18,6 +DA:19,6 +DA:20,6 +DA:21,6 +DA:22,6 +DA:23,6 +DA:24,6 +DA:25,23 +DA:26,23 +DA:27,23 +DA:28,23 +DA:29,23 +DA:30,23 +DA:31,23 +DA:32,23 +DA:33,23 +DA:34,23 +LH:34 +LF:34 +end_of_record +SF:src/block/node/StrongImageNode.ts +FN:12,createStrongImageNode +FNDA:9,createStrongImageNode +FNF:1 +FNH:1 +BRDA:1,0,0,23 +BRDA:12,1,0,9 +BRDA:27,2,0,1 +BRDA:27,3,0,7 +BRF:4 +BRH:4 +DA:1,23 +DA:2,23 +DA:3,23 +DA:4,23 +DA:5,23 +DA:6,23 +DA:7,23 +DA:8,23 +DA:9,23 +DA:10,23 +DA:11,23 +DA:12,23 +DA:13,9 +DA:14,9 +DA:15,9 +DA:16,9 +DA:17,9 +DA:18,9 +DA:19,9 +DA:20,9 +DA:21,9 +DA:22,9 +DA:23,9 +DA:24,9 +DA:25,9 +DA:26,9 +DA:27,9 +DA:28,9 +DA:29,9 +DA:30,23 +DA:31,23 +DA:32,23 +DA:33,23 +DA:34,23 +DA:35,23 +DA:36,23 +DA:37,23 +DA:38,23 +DA:39,23 +LH:39 +LF:39 +end_of_record +SF:src/block/node/StrongNode.ts +FN:10,createStrongNode +FNDA:18,createStrongNode +FNF:1 +FNH:1 +BRDA:1,0,0,23 +BRDA:10,1,0,18 +BRF:2 +BRH:2 +DA:1,23 +DA:2,23 +DA:3,23 +DA:4,23 +DA:5,23 +DA:6,23 +DA:7,23 +DA:8,23 +DA:9,23 +DA:10,23 +DA:11,18 +DA:12,18 +DA:13,18 +DA:14,18 +DA:15,18 +DA:16,18 +DA:17,18 +DA:18,18 +DA:19,18 +DA:20,18 +DA:21,18 +DA:22,23 +DA:23,23 +DA:24,23 +DA:25,23 +DA:26,23 +DA:27,23 +DA:28,23 +LH:28 +LF:28 +end_of_record +SF:src/block/Pack.ts +FN:10,isChildRowOfPack +FN:16,packing +FN:34,packRows +FNDA:204,isChildRowOfPack +FNDA:312,packing +FNDA:110,packRows +FNF:3 +FNH:3 +BRDA:1,0,0,23 +BRDA:10,1,0,204 +BRDA:14,2,0,80 +BRDA:14,3,0,38 +BRDA:16,4,0,312 +BRDA:18,5,0,204 +BRDA:18,6,0,78 +BRDA:20,7,0,91 +BRDA:23,8,0,6 +BRDA:24,9,0,78 +BRDA:25,10,0,1 +BRDA:26,11,0,75 +BRDA:34,12,0,110 +BRDA:40,13,0,0 +BRF:14 +BRH:13 +DA:1,23 +DA:2,23 +DA:3,23 +DA:4,23 +DA:5,23 +DA:6,23 +DA:7,23 +DA:8,23 +DA:9,23 +DA:10,23 +DA:11,204 +DA:12,204 +DA:13,204 +DA:14,23 +DA:15,23 +DA:16,23 +DA:17,312 +DA:18,312 +DA:19,78 +DA:20,312 +DA:21,91 +DA:22,91 +DA:23,91 +DA:24,91 +DA:25,78 +DA:26,91 +DA:27,91 +DA:28,91 +DA:29,91 +DA:30,312 +DA:31,312 +DA:32,23 +DA:33,23 +DA:34,23 +DA:35,110 +DA:36,110 +DA:37,110 +DA:38,110 +DA:39,110 +DA:40,110 +DA:41,110 +DA:42,110 +DA:43,110 +DA:44,110 +DA:45,110 +DA:46,110 +DA:47,110 +DA:48,110 +DA:49,110 +DA:50,110 +DA:51,23 +LH:51 +LF:51 +end_of_record +SF:src/block/Row.ts +FN:6,parseToRows +FN:7,anonymous_1 +FNDA:110,parseToRows +FNDA:315,anonymous_1 +FNF:2 +FNH:2 +BRDA:1,0,0,23 +BRDA:6,1,0,110 +BRDA:7,2,0,315 +BRDA:8,3,0,122 +BRDA:8,4,0,57 +BRF:5 +BRH:5 +DA:1,23 +DA:2,23 +DA:3,23 +DA:4,23 +DA:5,23 +DA:6,23 +DA:7,110 +DA:8,315 +DA:9,315 +DA:10,23 +LH:10 +LF:10 +end_of_record +SF:src/block/Table.ts +FN:20,convertToTable +FN:31,anonymous_1 +FN:32,anonymous_2 +FN:33,anonymous_3 +FNDA:8,convertToTable +FNDA:48,anonymous_1 +FNDA:48,anonymous_2 +FNDA:98,anonymous_3 +FNF:4 +FNH:4 +BRDA:1,0,0,23 +BRDA:20,1,0,8 +BRDA:31,2,0,48 +BRDA:32,3,0,48 +BRDA:33,4,0,98 +BRF:5 +BRH:5 +DA:1,23 +DA:2,23 +DA:3,23 +DA:4,23 +DA:5,23 +DA:6,23 +DA:7,23 +DA:8,23 +DA:9,23 +DA:10,23 +DA:11,23 +DA:12,23 +DA:13,23 +DA:14,23 +DA:15,23 +DA:16,23 +DA:17,23 +DA:18,23 +DA:19,23 +DA:20,23 +DA:21,8 +DA:22,8 +DA:23,8 +DA:24,8 +DA:25,8 +DA:26,8 +DA:27,8 +DA:28,8 +DA:29,8 +DA:30,8 +DA:31,8 +DA:32,8 +DA:33,48 +DA:34,98 +DA:35,98 +DA:36,98 +DA:37,98 +DA:38,48 +DA:39,8 +DA:40,8 +DA:41,8 +DA:42,23 +LH:42 +LF:42 +end_of_record +SF:src/block/Title.ts +FN:16,convertToTitle +FNDA:3,convertToTitle +FNF:1 +FNH:1 +BRDA:1,0,0,23 +BRDA:16,1,0,3 +BRF:2 +BRH:2 +DA:1,23 +DA:2,23 +DA:3,23 +DA:4,23 +DA:5,23 +DA:6,23 +DA:7,23 +DA:8,23 +DA:9,23 +DA:10,23 +DA:11,23 +DA:12,23 +DA:13,23 +DA:14,23 +DA:15,23 +DA:16,23 +DA:17,3 +DA:18,3 +DA:19,3 +DA:20,3 +DA:21,23 +LH:21 +LF:21 +end_of_record +SF:src/index.ts +FNF:0 +FNH:0 +BRDA:1,0,0,23 +BRF:1 +BRH:1 +DA:1,23 +DA:2,23 +DA:3,23 +DA:4,23 +DA:5,23 +DA:6,23 +DA:7,23 +DA:8,23 +DA:9,23 +DA:10,23 +DA:11,23 +DA:12,23 +DA:13,23 +DA:14,23 +DA:15,23 +DA:16,23 +DA:17,23 +DA:18,23 +DA:19,23 +DA:20,23 +DA:21,23 +DA:22,23 +DA:23,23 +DA:24,23 +DA:25,23 +DA:26,23 +DA:27,23 +LH:27 +LF:27 +end_of_record +SF:src/parse.ts +FN:27,parse +FN:38,getTitle +FNDA:110,parse +FNDA:7,getTitle +FNF:2 +FNH:2 +BRDA:1,0,0,23 +BRDA:27,1,0,110 +BRDA:29,2,0,2 +BRDA:29,3,0,1 +BRDA:38,4,0,7 +BRDA:40,5,0,3 +BRDA:40,6,0,4 +BRF:7 +BRH:7 +DA:1,23 +DA:2,23 +DA:3,23 +DA:4,23 +DA:5,23 +DA:6,23 +DA:7,23 +DA:8,23 +DA:9,23 +DA:10,23 +DA:11,23 +DA:12,23 +DA:13,23 +DA:14,23 +DA:15,23 +DA:16,23 +DA:17,23 +DA:18,23 +DA:19,23 +DA:20,23 +DA:21,23 +DA:22,23 +DA:23,23 +DA:24,23 +DA:25,23 +DA:26,23 +DA:27,23 +DA:28,110 +DA:29,110 +DA:30,110 +DA:31,23 +DA:32,23 +DA:33,23 +DA:34,23 +DA:35,23 +DA:36,23 +DA:37,23 +DA:38,23 +DA:39,7 +DA:40,7 +DA:41,23 +LH:41 +LF:41 +end_of_record diff --git a/src/block/Pack.ts b/src/block/Pack.ts index 1e7d70b6..12073b13 100644 --- a/src/block/Pack.ts +++ b/src/block/Pack.ts @@ -7,26 +7,27 @@ import type { TitlePack } from "./Title.ts"; export type Pack = TitlePack | CodeBlockPack | TablePack | LinePack; -const isChildRowOfPack = (pack: Pack, row: Row): boolean => - (pack.type === "codeBlock" || pack.type === "table") && - row.indent > (pack.rows[0]?.indent ?? 0); +const isChildRowOfPack = ( + { type, rows: [firstRow] }: Pack, + row: Row, +): boolean => + (type === "codeBlock" || type === "table") && row.indent > firstRow.indent; const packing = (packs: Pack[], row: Row): Pack[] => { const lastPack = packs[packs.length - 1]; if (lastPack !== undefined && isChildRowOfPack(lastPack, row)) { lastPack.rows.push(row); - return packs; + } else { + packs.push({ + type: /^\s*code:/.test(row.text) + ? "codeBlock" + : /^\s*table:/.test(row.text) + ? "table" + : "line", + rows: [row], + }); } - packs.push({ - type: /^\s*code:/.test(row.text) - ? "codeBlock" - : /^\s*table:/.test(row.text) - ? "table" - : "line", - rows: [row], - }); - return packs; }; diff --git a/src/block/Row.ts b/src/block/Row.ts index 2b501f89..97f67a31 100644 --- a/src/block/Row.ts +++ b/src/block/Row.ts @@ -5,6 +5,6 @@ export interface Row { export const parseToRows = (input: string): Row[] => input.split("\n").map((text) => ({ - indent: /^\s+/.exec(text)?.[0]?.length ?? 0, + indent: /^\s+/.exec(text)?.[0].length ?? 0, text, })); diff --git a/src/block/node/ExternalLinkNode.ts b/src/block/node/ExternalLinkNode.ts index 460edfac..bd674a9f 100644 --- a/src/block/node/ExternalLinkNode.ts +++ b/src/block/node/ExternalLinkNode.ts @@ -26,7 +26,7 @@ const createExternalLinkNode: NodeCreator = ( const match = ( isHrefFirst ? /^https?:\/\/[^\s\]]+/ : /https?:\/\/[^\s\]]+$/ ).exec(inner); - if (match?.[0] === undefined) return []; + if (match === null) return []; const content = isHrefFirst ? inner.substring(match[0].length) diff --git a/src/parse.ts b/src/parse.ts index f57c8f18..f122cd68 100644 --- a/src/parse.ts +++ b/src/parse.ts @@ -24,9 +24,12 @@ export type Page = Block[]; * @param opts parser options * @returns syntax tree of parsed input */ -export const parse = (input: string, opts?: ParserOption): Page => { +export const parse = ( + input: string, + { hasTitle = true }: ParserOption = {}, +): Page => { const rows = parseToRows(input); - const packs = packRows(rows, { hasTitle: opts?.hasTitle ?? true }); + const packs = packRows(rows, { hasTitle }); return packs.map(convertToBlock); }; @@ -37,5 +40,5 @@ export const parse = (input: string, opts?: ParserOption): Page => { */ export const getTitle = (input: string): string => { const match = /^\s*\S.*$/m.exec(input); - return match?.[0]?.trim() ?? "Untitled"; + return match?.[0].trim() ?? "Untitled"; };