* Find the byte index of the next `[...]` or `[[...]]` table header * starting from `from`, or return content length when none.
(content: string, from: number)
| 138 | * starting from `from`, or return content length when none. |
| 139 | */ |
| 140 | function findNextTableHeader(content: string, from: number): number { |
| 141 | const state: TomlLexState = { multilineString: null, arrayDepth: 0, inlineTableDepth: 0 }; |
| 142 | let lineStart = from; |
| 143 | let isHeaderRemainder = true; |
| 144 | |
| 145 | while (lineStart < content.length) { |
| 146 | const newlineIdx = content.indexOf('\n', lineStart); |
| 147 | const lineEnd = newlineIdx === -1 ? content.length : newlineIdx; |
| 148 | const line = content.slice(lineStart, lineEnd); |
| 149 | |
| 150 | if ( |
| 151 | !isHeaderRemainder && |
| 152 | state.multilineString === null && |
| 153 | state.arrayDepth === 0 && |
| 154 | state.inlineTableDepth === 0 && |
| 155 | isTomlTableHeader(line) |
| 156 | ) { |
| 157 | return lineStart; |
| 158 | } |
| 159 | |
| 160 | scanTomlLine(line, state); |
| 161 | if (newlineIdx === -1) break; |
| 162 | lineStart = newlineIdx + 1; |
| 163 | isHeaderRemainder = false; |
| 164 | } |
| 165 | |
| 166 | return content.length; |
| 167 | } |
| 168 | |
| 169 | type MultilineStringDelimiter = '"""' | "'''"; |
| 170 |
no test coverage detected