/** * Copyright (c) Microsoft Corporation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ const maxColumns = 120; function normalizeLines(content) { const inLines = content.split('\n'); let inCodeBlock = false; const outLines = []; let outLineTokens = []; for (const line of inLines) { let singleLineExpression = line.startsWith('#'); let flushParagraph = !line.trim() || line.trim().startsWith('1.') || line.trim().startsWith('<') || line.trim().startsWith('>') || line.trim().startsWith('-') || line.trim().startsWith('[') || singleLineExpression; if (line.startsWith('```')) { inCodeBlock = !inCodeBlock; flushParagraph = true; } if (flushParagraph && outLineTokens.length) { outLines.push(outLineTokens.join(' ')); outLineTokens = []; } if (inCodeBlock || singleLineExpression) outLines.push(line); else if (line.trim()) outLineTokens.push(line); } if (outLineTokens.length) outLines.push(outLineTokens.join(' ')); return outLines; } function buildTree(lines) { const root = { ul: [] }; const stack = [root]; for (let i = 0; i < lines.length; ++i) { let line = lines[i]; if (line.startsWith('```')) { const node = { code: [] }; root.ul.push(node); line = lines[++i]; while (!line.startsWith('```')) { node.code.push(line); line = lines[++i]; } continue; } if (line.startsWith('