idlize

Форк
0
/
IndentedPrinter.ts 
74 строки · 1.7 Кб
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) {
22
        if (value) this.output.push(this.indented(value))
23
    }
24

25
    pushIndent() {
26
        this.indent++
27
    }
28
    popIndent() {
29
        this.indent--
30
    }
31

32
    private indented(input: string): string {
33
        return indentedBy(input, this.indent)
34
    }
35

36
    getOutput(): string[] {
37
        return this.output
38
    }
39
}
40

41
export class IndentedPrinterWithHeader extends IndentedPrinter {
42
    header = new IndentedPrinter()
43
    body = new IndentedPrinter()
44

45
    constructor() {
46
        super()
47
    }
48

49
    print(value: stringOrNone) {
50
        this.body.print(value)
51
    }
52

53
    printHeader(value: stringOrNone) {
54
        this.header.print(value)
55
    }
56

57
    pushIndent() {
58
        this.body.pushIndent()
59
    }
60
    popIndent() {
61
        this.body.popIndent()
62
    }
63

64
    pushIndentHeader() {
65
        this.header.pushIndent()
66
    }
67
    popIndentHeader() {
68
        this.header.popIndent()
69
    }
70

71
    getOutput(): string[] {
72
        return this.header.getOutput().concat(this.body.getOutput())
73
    }
74
}

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

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

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

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