course-renderer
Version:
Manages CA School Courses file system storage and HTML conversion
50 lines (35 loc) • 1.39 kB
text/typescript
import Token from '../Token'
import Reader from '../reader'
import * as rules from '../rules'
import { series, question, repl, text, HandlerOptionInterface } from '../handlers'
const SECTION_MARKER = 0x2B /* + */
export function section(reader: Reader, tokens: Token[], silent: boolean = false, options: HandlerOptionInterface): boolean {
let pos = reader.getCurrentLineStartPos()
if (reader.getCharCode(pos++) !== SECTION_MARKER
|| reader.getCharCode(pos++) !== SECTION_MARKER
|| reader.getCharCode(pos++) !== SECTION_MARKER ) {
return false
}
if (silent) return true
if (options.sectionMode) {
options.sectionMode = false
reader.nextNonEmptyLines()
return true
} else {
reader.nextNonEmptyLines()
options.sectionMode = true
const start = reader.currentLine
while(!reader.isEnd()) {
if (question(reader, tokens, true, options) || series(reader, tokens, true, options)) break
reader.nextLine()
}
reader.currentLine--
const label = reader.getLines(start, reader.currentLine)
const token = new Token('SECTION')
token.setContent(label)
token.setChapter(options.chapter)
tokens.push(token)
reader.nextNonEmptyLines()
return true
}
}