UNPKG

@thi.ng/parse

Version:

Purely functional parser combinators & AST generation for generic inputs

26 lines (25 loc) 858 B
import { ALPHA_NUM } from "@thi.ng/strings/groups"; const anchor = (fn) => ({ reader, state }) => fn(reader.prev(state), state.done ? null : reader.read(state)); const inputStart = (ctx) => ctx.reader.prev(ctx.state) == null; const inputEnd = ({ reader, state }) => state.done || reader.read(state) === void 0; const lineStart = (ctx) => { const l = ctx.reader.prev(ctx.state); return l == null || l === "\n" || l === "\r"; }; const lineEnd = ({ reader, state }) => { let c; return state.done || (c = reader.read(state)) === "\n" || c === "\r"; }; const wordBoundaryP = (prev, next) => { return prev ? next ? ALPHA_NUM[prev] && !ALPHA_NUM[next] : ALPHA_NUM[prev] : next ? ALPHA_NUM[next] : false; }; const wordBoundary = anchor(wordBoundaryP); export { anchor, inputEnd, inputStart, lineEnd, lineStart, wordBoundary, wordBoundaryP };