From be39aab80d999c1ae6b5c9aaa825321212153803 Mon Sep 17 00:00:00 2001 From: marihachi Date: Sat, 17 Apr 2021 11:34:32 +0900 Subject: [PATCH] inspect API accept a single node. --- src/api.ts | 18 +++++++++++------- src/util.ts | 9 +++++++++ test/api.ts | 11 +++++++++++ 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/api.ts b/src/api.ts index 891988d..f3cb6cd 100644 --- a/src/api.ts +++ b/src/api.ts @@ -1,6 +1,6 @@ import peg from 'pegjs'; -import { MfmNode, MfmPlainNode } from './node'; -import { stringifyNode, stringifyTree } from './util'; +import { MfmNode, MfmPlainNode, TEXT } from './node'; +import { stringifyNode, stringifyTree, inspectOne } from './util'; const parser: peg.Parser = require('./parser'); @@ -37,13 +37,17 @@ export function toString(node: MfmNode | MfmNode[]): string { /** * Inspects the MfmNode tree. */ -export function inspect(nodes: MfmNode[], action: (node: MfmNode) => void): void { - for (const node of nodes) { - action(node); - if (node.children != null) { - inspect(node.children, action); +export function inspect(node: MfmNode, action: (node: MfmNode) => void): void +export function inspect(nodes: MfmNode[], action: (node: MfmNode) => void): void +export function inspect(node: (MfmNode | MfmNode[]), action: (node: MfmNode) => void): void { + if (Array.isArray(node)) { + for (const n of node) { + inspectOne(n, action); } } + else { + inspectOne(node, action); + } } /** diff --git a/src/util.ts b/src/util.ts index 70b56d4..9ab35e2 100644 --- a/src/util.ts +++ b/src/util.ts @@ -147,6 +147,15 @@ export function stringifyTree(nodes: MfmNode[]): string { return dest.map(n => stringifyNode(n)).join(''); } +export function inspectOne(node: MfmNode, action: (node: MfmNode) => void) { + action(node); + if (node.children != null) { + for (const child of node.children) { + inspectOne(child, action); + } + } +} + // // dynamic consuming // diff --git a/test/api.ts b/test/api.ts index b56dec5..4ee7f48 100644 --- a/test/api.ts +++ b/test/api.ts @@ -32,6 +32,17 @@ after`; }); assert.strictEqual(mfm.toString(result), 'hello [tada everynyan!]'); }); + + it('replace text (one item)', () => { + const input = 'good morning [tada everyone!]'; + const result = mfm.parse(input); + mfm.inspect(result[1], node => { + if (node.type == 'text') { + node.props.text = node.props.text.replace(/one/g, 'nyan'); + } + }); + assert.strictEqual(mfm.toString(result), 'good morning [tada everynyan!]'); + }); }); describe('extract', () => {