@textlint/text-to-ast
Advanced tools
Comparing version
@@ -6,2 +6,13 @@ # Change Log | ||
## [3.3.5](https://github.com/textlint/textlint/compare/@textlint/text-to-ast@3.3.4...@textlint/text-to-ast@3.3.5) (2021-05-08) | ||
### Bug Fixes | ||
* **text-to-ast:** correct to parse CRLF empty line ([#763](https://github.com/textlint/textlint/issues/763)) ([a3288e0](https://github.com/textlint/textlint/commit/a3288e0c49bd122ff97e159d3d82bd5a4012f5ea)) | ||
## [3.3.4](https://github.com/textlint/textlint/compare/@textlint/text-to-ast@3.3.3...@textlint/text-to-ast@3.3.4) (2021-03-21) | ||
@@ -8,0 +19,0 @@ |
@@ -29,8 +29,9 @@ // LICENSE : MIT | ||
* @param {TxtNode} prevNode previous node from BreakNode | ||
* @param lineBreakText | ||
*/ | ||
function createEndedBRNode(prevNode, lineBreakText) { | ||
function createEndedBRNode(_a) { | ||
var prevNode = _a.prevNode, lineBreakText = _a.lineBreakText; | ||
return { | ||
type: plaintext_syntax_1.Syntax.Break, | ||
raw: lineBreakText, | ||
value: lineBreakText, | ||
range: [prevNode.range[1], prevNode.range[1] + lineBreakText.length], | ||
@@ -52,7 +53,8 @@ loc: { | ||
*/ | ||
function createBRNode(lineNumber, startIndex) { | ||
function createBRNode(_a) { | ||
var lineBreak = _a.lineBreak, lineNumber = _a.lineNumber, startIndex = _a.startIndex; | ||
return { | ||
type: plaintext_syntax_1.Syntax.Break, | ||
raw: "\n", | ||
range: [startIndex, startIndex + 1], | ||
raw: lineBreak, | ||
range: [startIndex, startIndex + lineBreak.length], | ||
loc: { | ||
@@ -65,3 +67,3 @@ start: { | ||
line: lineNumber, | ||
column: 1 | ||
column: lineBreak.length | ||
} | ||
@@ -101,7 +103,7 @@ } | ||
function splitTextByLine(text) { | ||
var LINEBREAKE_MARK_PATTERN = /\r?\n/g; | ||
var LINEBREAK_MARK_PATTERN = /\r?\n/g; | ||
var results = []; | ||
var match = null; | ||
var prevMatchIndex = 0; | ||
while ((match = LINEBREAKE_MARK_PATTERN.exec(text)) !== null) { | ||
while ((match = LINEBREAK_MARK_PATTERN.exec(text)) !== null) { | ||
var slicedText = text.slice(prevMatchIndex, match.index); | ||
@@ -145,3 +147,7 @@ results.push({ | ||
if (isEmptyLine(currentLine, index)) { | ||
var emptyBreakNode = createBRNode(lineNumber, startIndex); | ||
var emptyBreakNode = createBRNode({ | ||
lineBreak: currentLine.lineBreak, | ||
lineNumber: lineNumber, | ||
startIndex: startIndex | ||
}); | ||
startIndex += emptyBreakNode.raw.length; | ||
@@ -160,3 +166,3 @@ result.push(emptyBreakNode); | ||
if (currentLine.lineBreak !== null) { | ||
var breakNode = createEndedBRNode(paragraph, currentLine.lineBreak); | ||
var breakNode = createEndedBRNode({ prevNode: paragraph, lineBreakText: currentLine.lineBreak }); | ||
startIndex += breakNode.raw.length; | ||
@@ -163,0 +169,0 @@ result.push(breakNode); |
@@ -27,8 +27,9 @@ // LICENSE : MIT | ||
* @param {TxtNode} prevNode previous node from BreakNode | ||
* @param lineBreakText | ||
*/ | ||
function createEndedBRNode(prevNode, lineBreakText) { | ||
function createEndedBRNode(_a) { | ||
var prevNode = _a.prevNode, lineBreakText = _a.lineBreakText; | ||
return { | ||
type: Syntax.Break, | ||
raw: lineBreakText, | ||
value: lineBreakText, | ||
range: [prevNode.range[1], prevNode.range[1] + lineBreakText.length], | ||
@@ -50,7 +51,8 @@ loc: { | ||
*/ | ||
function createBRNode(lineNumber, startIndex) { | ||
function createBRNode(_a) { | ||
var lineBreak = _a.lineBreak, lineNumber = _a.lineNumber, startIndex = _a.startIndex; | ||
return { | ||
type: Syntax.Break, | ||
raw: "\n", | ||
range: [startIndex, startIndex + 1], | ||
raw: lineBreak, | ||
range: [startIndex, startIndex + lineBreak.length], | ||
loc: { | ||
@@ -63,3 +65,3 @@ start: { | ||
line: lineNumber, | ||
column: 1 | ||
column: lineBreak.length | ||
} | ||
@@ -99,7 +101,7 @@ } | ||
function splitTextByLine(text) { | ||
var LINEBREAKE_MARK_PATTERN = /\r?\n/g; | ||
var LINEBREAK_MARK_PATTERN = /\r?\n/g; | ||
var results = []; | ||
var match = null; | ||
var prevMatchIndex = 0; | ||
while ((match = LINEBREAKE_MARK_PATTERN.exec(text)) !== null) { | ||
while ((match = LINEBREAK_MARK_PATTERN.exec(text)) !== null) { | ||
var slicedText = text.slice(prevMatchIndex, match.index); | ||
@@ -143,3 +145,7 @@ results.push({ | ||
if (isEmptyLine(currentLine, index)) { | ||
var emptyBreakNode = createBRNode(lineNumber, startIndex); | ||
var emptyBreakNode = createBRNode({ | ||
lineBreak: currentLine.lineBreak, | ||
lineNumber: lineNumber, | ||
startIndex: startIndex | ||
}); | ||
startIndex += emptyBreakNode.raw.length; | ||
@@ -158,3 +164,3 @@ result.push(emptyBreakNode); | ||
if (currentLine.lineBreak !== null) { | ||
var breakNode = createEndedBRNode(paragraph, currentLine.lineBreak); | ||
var breakNode = createEndedBRNode({ prevNode: paragraph, lineBreakText: currentLine.lineBreak }); | ||
startIndex += breakNode.raw.length; | ||
@@ -161,0 +167,0 @@ result.push(breakNode); |
{ | ||
"name": "@textlint/text-to-ast", | ||
"version": "3.3.4", | ||
"version": "3.3.5", | ||
"description": "Parse plain text to AST with location info.", | ||
@@ -36,16 +36,17 @@ "keywords": [ | ||
"clean": "rimraf lib/ module/ tsconfig.tsbuildinfo tsconfig.module.tsbuildinfo", | ||
"crlf": "eolConverter crlf test/snapshots/crlf/input.txt", | ||
"crlf": "eolConverter crlf test/snapshots/crlf/input.txt && eolConverter crlf test/snapshots/crlf-empty-line/input.txt", | ||
"prepublish": "npm run --if-present build", | ||
"pretest": "npm run crlf", | ||
"test": "mocha \"test/**/*.{js,ts}\"", | ||
"updateSnapshot": "cross-env UPDATE_SNAPSHOT=1 npm test", | ||
"watch": "tsc -b --watch" | ||
}, | ||
"dependencies": { | ||
"@textlint/ast-node-types": "^4.4.2" | ||
"@textlint/ast-node-types": "^4.4.3" | ||
}, | ||
"devDependencies": { | ||
"@textlint/ast-tester": "^2.3.4", | ||
"@textlint/ast-tester": "^2.3.5", | ||
"cross-env": "^7.0.3", | ||
"eol-converter-cli": "^1.0.8", | ||
"mocha": "^8.3.2", | ||
"mocha": "^8.4.0", | ||
"power-assert": "^1.6.1", | ||
@@ -59,3 +60,3 @@ "rimraf": "^3.0.2", | ||
}, | ||
"gitHead": "07c0497b387f09e41088b7f113555aa5e5451add" | ||
"gitHead": "4cb1e78aa38cd0e942c61f352ffb29bb36f80a7b" | ||
} |
@@ -30,8 +30,8 @@ // LICENSE : MIT | ||
* @param {TxtNode} prevNode previous node from BreakNode | ||
* @param lineBreakText | ||
*/ | ||
function createEndedBRNode(prevNode: TxtNode, lineBreakText: string) { | ||
function createEndedBRNode({ prevNode, lineBreakText }: { prevNode: TxtNode; lineBreakText: string }): TxtNode { | ||
return { | ||
type: Syntax.Break, | ||
raw: lineBreakText, | ||
value: lineBreakText, | ||
range: [prevNode.range[1], prevNode.range[1] + lineBreakText.length], | ||
@@ -54,7 +54,15 @@ loc: { | ||
*/ | ||
function createBRNode(lineNumber: number, startIndex: number) { | ||
function createBRNode({ | ||
lineBreak, | ||
lineNumber, | ||
startIndex | ||
}: { | ||
lineBreak: string; | ||
lineNumber: number; | ||
startIndex: number; | ||
}): TxtNode { | ||
return { | ||
type: Syntax.Break, | ||
raw: "\n", | ||
range: [startIndex, startIndex + 1], | ||
raw: lineBreak, | ||
range: [startIndex, startIndex + lineBreak.length], | ||
loc: { | ||
@@ -67,3 +75,3 @@ start: { | ||
line: lineNumber, | ||
column: 1 | ||
column: lineBreak.length | ||
} | ||
@@ -105,7 +113,7 @@ } | ||
function splitTextByLine(text: string) { | ||
const LINEBREAKE_MARK_PATTERN = /\r?\n/g; | ||
const LINEBREAK_MARK_PATTERN = /\r?\n/g; | ||
const results = []; | ||
let match = null; | ||
let prevMatchIndex = 0; | ||
while ((match = LINEBREAKE_MARK_PATTERN.exec(text)) !== null) { | ||
while ((match = LINEBREAK_MARK_PATTERN.exec(text)) !== null) { | ||
const slicedText = text.slice(prevMatchIndex, match.index); | ||
@@ -127,2 +135,6 @@ results.push({ | ||
type EmptyLine = { text: ""; lineBreak: string }; | ||
type LastLine = { text: string; lineBreak: null }; | ||
type LineWithBreak = { text: string; lineBreak: string }; | ||
/** | ||
@@ -138,15 +150,9 @@ * parse text and return ast mapped location info. | ||
const lastLineIndex = textLineByLine.length - 1; | ||
const isLastEmptyLine = ( | ||
line: { text: string; lineBreak: string } | { text: string; lineBreak: null }, | ||
index: number | ||
) => { | ||
const isLastEmptyLine = (line: LineWithBreak | LastLine | EmptyLine, index: number): line is EmptyLine => { | ||
return index === lastLineIndex && line.text === ""; | ||
}; | ||
const isEmptyLine = ( | ||
line: { text: string; lineBreak: string } | { text: string; lineBreak: null }, | ||
index: number | ||
) => { | ||
const isEmptyLine = (line: LineWithBreak | LastLine | EmptyLine, index: number): line is EmptyLine => { | ||
return index !== lastLineIndex && line.text === ""; | ||
}; | ||
const children = textLineByLine.reduce<any[]>(function (result, currentLine, index) { | ||
const children = textLineByLine.reduce(function (result, currentLine, index) { | ||
const lineNumber = index + 1; | ||
@@ -158,3 +164,7 @@ if (isLastEmptyLine(currentLine, index)) { | ||
if (isEmptyLine(currentLine, index)) { | ||
const emptyBreakNode = createBRNode(lineNumber, startIndex); | ||
const emptyBreakNode = createBRNode({ | ||
lineBreak: currentLine.lineBreak, | ||
lineNumber, | ||
startIndex | ||
}); | ||
startIndex += emptyBreakNode.raw.length; | ||
@@ -174,3 +184,3 @@ result.push(emptyBreakNode); | ||
if (currentLine.lineBreak !== null) { | ||
const breakNode = createEndedBRNode(paragraph, currentLine.lineBreak); | ||
const breakNode = createEndedBRNode({ prevNode: paragraph, lineBreakText: currentLine.lineBreak }); | ||
startIndex += breakNode.raw.length; | ||
@@ -180,3 +190,3 @@ result.push(breakNode); | ||
return result; | ||
}, []); | ||
}, [] as TxtNode[]); | ||
const lastLine = textLineByLine[textLineByLine.length - 1]; | ||
@@ -183,0 +193,0 @@ if (lastLine === undefined) { |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
52499
3.41%718
3.01%