@thi.ng/parse
Version:
Purely functional parser combinators & AST generation for generic inputs
26 lines (25 loc) • 858 B
JavaScript
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
};