idlize

Форк
0
/
IndentedPrinter.ts 
81 строка · 1.9 Кб
1
import { indentedBy, stringOrNone } from "./util"
2

3
/*
4
* Copyright (c) 2024 Huawei Device Co., Ltd.
5
* Licensed under the Apache License, Version 2.0 (the "License");
6
* you may not use this file except in compliance with the License.
7
* You may obtain a copy of the License at
8
*
9
* http://www.apache.org/licenses/LICENSE-2.0
10
*
11
* Unless required by applicable law or agreed to in writing, software
12
* distributed under the License is distributed on an "AS IS" BASIS,
13
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
* See the License for the specific language governing permissions and
15
* limitations under the License.
16
*/
17
export class IndentedPrinter {
18
    constructor (private output: string[] = []) {}
19
    private indent = 0
20

21
    print(value: stringOrNone): void {
22
        if (value != undefined) this.output.push(this.indented(value))
23
    }
24

25
    pushIndent(): void {
26
        this.indent++
27
    }
28
    popIndent(): void {
29
        this.indent--
30
    }
31
    indentDepth(): number {
32
        return this.indent
33
    }
34

35
    append(printer: IndentedPrinter): void {
36
        this.output = [...this.output, ...printer.output]
37
    }
38

39
    private indented(input: string): string {
40
        return indentedBy(input, this.indent)
41
    }
42

43
    getOutput(): string[] {
44
        return this.output
45
    }
46
}
47

48
export class IndentedPrinterWithHeader extends IndentedPrinter {
49
    header = new IndentedPrinter()
50
    body = new IndentedPrinter()
51

52
    constructor() {
53
        super()
54
    }
55

56
    print(value: stringOrNone) {
57
        this.body.print(value)
58
    }
59

60
    printHeader(value: stringOrNone) {
61
        this.header.print(value)
62
    }
63

64
    pushIndent() {
65
        this.body.pushIndent()
66
    }
67
    popIndent() {
68
        this.body.popIndent()
69
    }
70

71
    pushIndentHeader() {
72
        this.header.pushIndent()
73
    }
74
    popIndentHeader() {
75
        this.header.popIndent()
76
    }
77

78
    getOutput(): string[] {
79
        return this.header.getOutput().concat(this.body.getOutput())
80
    }
81
}

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.