Skip to content

Commit

Permalink
refactor(api): APIのコードを移動
Browse files Browse the repository at this point in the history
  • Loading branch information
marihachi committed Apr 3, 2021
1 parent 72d85e7 commit 044acbf
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 57 deletions.
58 changes: 58 additions & 0 deletions src/api.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import peg from 'pegjs';
import { MfmNode, MfmPlainNode } from './node';
import { stringifyNode, stringifyTree } from './util';

const parser: peg.Parser = require('./parser');

export function parse(input: string): MfmNode[] {
const nodes = parser.parse(input, { startRule: 'fullParser' });
return nodes;
}

export function parsePlain(input: string): MfmPlainNode[] {
const nodes = parser.parse(input, { startRule: 'plainParser' });
return nodes;
}

export function toString(tree: MfmNode[]): string
export function toString(node: MfmNode): string
export function toString(node: MfmNode | MfmNode[]): string {
if (Array.isArray(node)) {
return stringifyTree(node);
}
else {
return stringifyNode(node);
}
}

export function inspect(tree: MfmNode[], action: (node: MfmNode) => void): void {
for (const node of tree) {
action(node);
if (node.children != null) {
inspect(node.children, action);
}
}
}

export function extract(nodes: MfmNode[], type: (MfmNode['type'] | MfmNode['type'][])): MfmNode[] {
function predicate(node: MfmNode, type: (MfmNode['type'] | MfmNode['type'][])): boolean {
if (Array.isArray(type)) {
return (type.some(i => i == node.type));
}
else {
return (type == node.type);
}
}

const dest = [] as MfmNode[];
for (const node of nodes) {
if (predicate(node, type)) {
dest.push(node);
}
if (node.children != null) {
dest.push(...extract(node.children, type));
}
}

return dest;
}
64 changes: 7 additions & 57 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -1,60 +1,10 @@
import peg from 'pegjs';
import { MfmNode, MfmPlainNode } from './node';
import { stringifyNode, stringifyTree } from './util';
const parser: peg.Parser = require('./parser');

export function parse(input: string): MfmNode[] {
const nodes = parser.parse(input, { startRule: 'fullParser' });
return nodes;
}

export function parsePlain(input: string): MfmPlainNode[] {
const nodes = parser.parse(input, { startRule: 'plainParser' });
return nodes;
}

export function toString(tree: MfmNode[]): string
export function toString(node: MfmNode): string
export function toString(node: MfmNode | MfmNode[]): string {
if (Array.isArray(node)) {
return stringifyTree(node);
}
else {
return stringifyNode(node);
}
}

export function inspect(tree: MfmNode[], action: (node: MfmNode) => void): void {
for (const node of tree) {
action(node);
if (node.children != null) {
inspect(node.children, action);
}
}
}

export function extract(nodes: MfmNode[], type: (MfmNode['type'] | MfmNode['type'][])): MfmNode[] {
function predicate(node: MfmNode, type: (MfmNode['type'] | MfmNode['type'][])): boolean {
if (Array.isArray(type)) {
return (type.some(i => i == node.type));
}
else {
return (type == node.type);
}
}

const dest = [] as MfmNode[];
for (const node of nodes) {
if (predicate(node, type)) {
dest.push(node);
}
if (node.children != null) {
dest.push(...extract(node.children, type));
}
}

return dest;
}
export {
parse,
parsePlain,
toString,
inspect,
extract
} from './api';

export { NodeType } from './node';

Expand Down

0 comments on commit 044acbf

Please sign in to comment.