Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | 64x 62x 32x 30x 2x 2x 88x 3x 6x 6x 85x 27x 58x 32x 32x 4x 28x 2x 26x | //e.g.,
// {
// Text: [
// 'This is a test',
// { Text: [Array] },
// { Text: [Array] },
// { Text: [Array] }
// ]
// }
export type Text = string | { Text: string[] } | Array<string | { Text: string[] }>
export interface DocumentConstructor {
Text?: Array<string | { Text: string[] }> | string | { Text: string[] }
}
// documents contain text and templates
// ignore templates
// just select the text for rendering
export default class Document {
public Text?: Array<string | { Text: string[] }> | string
constructor(opts: DocumentConstructor) {
if (opts.Text) {
this.Text = this.parseTextTag(opts.Text)
}
}
public toString(): string {
if (typeof this.Text === 'string') {
return this.Text
I} else if (this.Text) {
return this.Text.join('').replace(/^[ \t]+/gm, '')
} else {
return ''
}
}
private parseTextTag(text: Text): string {
// if text is an array
if (Array.isArray(text)) {
return text.map((t) => {
if (typeof t === 'string') {
return t.replace(/^[ \t]+/gm, '').concat('\n')
E} else if (Array.isArray(t.Text)) {
return t.Text.join('').replace(/^[ \t]+/gm, '')
} else {
return ''
}
}).join('')
}
// if text is a string
if (typeof text === 'string') {
return text
}
// if text is an object
if (typeof text === 'object') {
const inner = text.Text as string|string[]|Text
if (Array.isArray(inner)) {
return inner.join('').replace(/^[ \t]+/gm, '')
} else if (typeof inner === 'string') {
return inner
} else {
return this.parseTextTag(inner)
}
}
}
}
|