Remove 'nest-whitespace-under-previous-line' logic and move it out to the same level, simplifying parser logic. Users of this lib can implement such behavior if they'd like.

This commit is contained in:
Joshua Bemenderfer
2023-02-04 10:01:17 -05:00
parent f54e29acbf
commit 94767772b4
8 changed files with 61 additions and 82 deletions

View File

@@ -1 +1 @@
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const i=require("./parser.cjs");function f(r,c=" "){const e=i.createLineData("",c);let t=!1;async function o(n=-1){if(t)t=!1;else{const a=await r.next();if(a===null)return!1;e.line=a,i.parseLine(e)}return l()<=n?(t=!0,!1):!0}const l=()=>e.level,u=()=>e.line.slice(e.offsetHead),s=()=>e.line.slice(e.offsetHead,e.offsetTail);return{next:o,level:l,line:u,head:s,tail:()=>e.line.slice(e.offsetTail),match:n=>n===s()}}exports.useDocument=f;
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const i=require("./parser.cjs");function f(r,c=" "){const e=i.createLineData("",c);let n=!1;async function o(t=-1){if(n)n=!1;else{const a=await r.next();if(a===null)return!1;e.line=a,i.parseLine(e)}return l()<=t?(n=!0,!1):!0}const l=()=>e.level,u=(t=e.offsetHead)=>e.line.slice(t),s=()=>e.line.slice(e.offsetHead,e.offsetTail);return{next:o,level:l,line:u,head:s,tail:()=>e.line.slice(e.offsetTail),match:t=>t===s()}}exports.useDocument=f;

View File

@@ -1,26 +1,26 @@
import { parseLine as r, createLineData as u } from "./parser.js";
function h(s, f = " ") {
const e = u("", f);
let t = !1;
async function c(n = -1) {
if (t)
t = !1;
let n = !1;
async function c(t = -1) {
if (n)
n = !1;
else {
const i = await s.next();
if (i === null)
return !1;
e.line = i, r(e);
}
return l() <= n ? (t = !0, !1) : !0;
return l() <= t ? (n = !0, !1) : !0;
}
const l = () => e.level, o = () => e.line.slice(e.offsetHead), a = () => e.line.slice(e.offsetHead, e.offsetTail);
const l = () => e.level, o = (t = e.offsetHead) => e.line.slice(t), a = () => e.line.slice(e.offsetHead, e.offsetTail);
return {
next: c,
level: l,
line: o,
head: a,
tail: () => e.line.slice(e.offsetTail),
match: (n) => n === a()
match: (t) => t === a()
};
}
export {

View File

@@ -1 +1 @@
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});function f(e="",r=" "){return{line:e,indent:r,type:0,level:0,offsetHead:0,offsetTail:0}}function o(e){if(typeof e!="object"||!e||typeof e.type!="number"||typeof e.level!="number")throw new Error("'lineData' must be an object with 'line' string, and 'type' and 'level' integer properties");if(typeof e.indent!="string"||e.indent.length===0||e.indent.length>1)throw new Error("'lineData.indent' must be a single-character string");if(typeof e.line!="string")throw new Error("'lineData.line' must be a string");let r=0,t=0;if(!e.line.length)e.type===1&&(t=e.level+1),e.type===0&&(t=e.level),e.type=r,e.level=t,e.offsetHead=0,e.offsetTail=0;else{for(r=1;e.line[t]===e.indent&&t<=e.level+1;)++t;for(e.type=r,e.level=t,e.offsetHead=t,e.offsetTail=t;e.line[e.offsetTail]&&e.line[e.offsetTail]!==" ";)++e.offsetTail}return e}exports.createLineData=f;exports.parseLine=o;
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});function t(e="",r=" "){return{line:e,indent:r,level:0,offsetHead:0,offsetTail:0}}function f(e){if(typeof e!="object"||!e||typeof e.level!="number")throw new Error("'lineData' must be an object with 'line' string, and 'type' and 'level' integer properties");if(typeof e.indent!="string"||e.indent.length===0||e.indent.length>1)throw new Error("'lineData.indent' must be a single-character string");if(typeof e.line!="string")throw new Error("'lineData.line' must be a string");let r=0;if(!e.line.length)e.level=e.level,e.offsetHead=0,e.offsetTail=0;else{for(;e.line[r]===e.indent&&r<=e.level+1;)++r;for(e.level=r,e.offsetHead=r,e.offsetTail=r;e.line[e.offsetTail]&&e.line[e.offsetTail]!==" ";)++e.offsetTail}return e}exports.createLineData=t;exports.parseLine=f;

View File

@@ -1,25 +1,25 @@
function t(e = "", r = " ") {
return { line: e, indent: r, type: 0, level: 0, offsetHead: 0, offsetTail: 0 };
function f(e = "", r = " ") {
return { line: e, indent: r, level: 0, offsetHead: 0, offsetTail: 0 };
}
function o(e) {
if (typeof e != "object" || !e || typeof e.type != "number" || typeof e.level != "number")
function t(e) {
if (typeof e != "object" || !e || typeof e.level != "number")
throw new Error("'lineData' must be an object with 'line' string, and 'type' and 'level' integer properties");
if (typeof e.indent != "string" || e.indent.length === 0 || e.indent.length > 1)
throw new Error("'lineData.indent' must be a single-character string");
if (typeof e.line != "string")
throw new Error("'lineData.line' must be a string");
let r = 0, f = 0;
let r = 0;
if (!e.line.length)
e.type === 1 && (f = e.level + 1), e.type === 0 && (f = e.level), e.type = r, e.level = f, e.offsetHead = 0, e.offsetTail = 0;
e.level = e.level, e.offsetHead = 0, e.offsetTail = 0;
else {
for (r = 1; e.line[f] === e.indent && f <= e.level + 1; )
++f;
for (e.type = r, e.level = f, e.offsetHead = f, e.offsetTail = f; e.line[e.offsetTail] && e.line[e.offsetTail] !== " "; )
for (; e.line[r] === e.indent && r <= e.level + 1; )
++r;
for (e.level = r, e.offsetHead = r, e.offsetTail = r; e.line[e.offsetTail] && e.line[e.offsetTail] !== " "; )
++e.offsetTail;
}
return e;
}
export {
t as createLineData,
o as parseLine
f as createLineData,
t as parseLine
};