xref: /aosp_15_r20/frameworks/base/tools/aapt/IndentPrinter.h (revision d57664e9bc4670b3ecf6748a746a57c557b6bc9e)
1*d57664e9SAndroid Build Coastguard Worker #ifndef __INDENT_PRINTER_H
2*d57664e9SAndroid Build Coastguard Worker #define __INDENT_PRINTER_H
3*d57664e9SAndroid Build Coastguard Worker 
4*d57664e9SAndroid Build Coastguard Worker class IndentPrinter {
5*d57664e9SAndroid Build Coastguard Worker public:
6*d57664e9SAndroid Build Coastguard Worker     explicit IndentPrinter(FILE* stream, int indentSize=2)
mStream(stream)7*d57664e9SAndroid Build Coastguard Worker         : mStream(stream)
8*d57664e9SAndroid Build Coastguard Worker         , mIndentSize(indentSize)
9*d57664e9SAndroid Build Coastguard Worker         , mIndent(0)
10*d57664e9SAndroid Build Coastguard Worker         , mNeedsIndent(true) {
11*d57664e9SAndroid Build Coastguard Worker     }
12*d57664e9SAndroid Build Coastguard Worker 
13*d57664e9SAndroid Build Coastguard Worker     void indent(int amount = 1) {
14*d57664e9SAndroid Build Coastguard Worker         mIndent += amount;
15*d57664e9SAndroid Build Coastguard Worker         if (mIndent < 0) {
16*d57664e9SAndroid Build Coastguard Worker             mIndent = 0;
17*d57664e9SAndroid Build Coastguard Worker         }
18*d57664e9SAndroid Build Coastguard Worker     }
19*d57664e9SAndroid Build Coastguard Worker 
print(const char * fmt,...)20*d57664e9SAndroid Build Coastguard Worker     void print(const char* fmt, ...) {
21*d57664e9SAndroid Build Coastguard Worker         doIndent();
22*d57664e9SAndroid Build Coastguard Worker         va_list args;
23*d57664e9SAndroid Build Coastguard Worker         va_start(args, fmt);
24*d57664e9SAndroid Build Coastguard Worker         vfprintf(mStream, fmt, args);
25*d57664e9SAndroid Build Coastguard Worker         va_end(args);
26*d57664e9SAndroid Build Coastguard Worker     }
27*d57664e9SAndroid Build Coastguard Worker 
println(const char * fmt,...)28*d57664e9SAndroid Build Coastguard Worker     void println(const char* fmt, ...) {
29*d57664e9SAndroid Build Coastguard Worker         doIndent();
30*d57664e9SAndroid Build Coastguard Worker         va_list args;
31*d57664e9SAndroid Build Coastguard Worker         va_start(args, fmt);
32*d57664e9SAndroid Build Coastguard Worker         vfprintf(mStream, fmt, args);
33*d57664e9SAndroid Build Coastguard Worker         va_end(args);
34*d57664e9SAndroid Build Coastguard Worker         fputs("\n", mStream);
35*d57664e9SAndroid Build Coastguard Worker         mNeedsIndent = true;
36*d57664e9SAndroid Build Coastguard Worker     }
37*d57664e9SAndroid Build Coastguard Worker 
println()38*d57664e9SAndroid Build Coastguard Worker     void println() {
39*d57664e9SAndroid Build Coastguard Worker         doIndent();
40*d57664e9SAndroid Build Coastguard Worker         fputs("\n", mStream);
41*d57664e9SAndroid Build Coastguard Worker         mNeedsIndent = true;
42*d57664e9SAndroid Build Coastguard Worker     }
43*d57664e9SAndroid Build Coastguard Worker 
44*d57664e9SAndroid Build Coastguard Worker private:
doIndent()45*d57664e9SAndroid Build Coastguard Worker     void doIndent() {
46*d57664e9SAndroid Build Coastguard Worker         if (mNeedsIndent) {
47*d57664e9SAndroid Build Coastguard Worker             int numSpaces = mIndent * mIndentSize;
48*d57664e9SAndroid Build Coastguard Worker             while (numSpaces > 0) {
49*d57664e9SAndroid Build Coastguard Worker                 fputs(" ", mStream);
50*d57664e9SAndroid Build Coastguard Worker                 numSpaces--;
51*d57664e9SAndroid Build Coastguard Worker             }
52*d57664e9SAndroid Build Coastguard Worker             mNeedsIndent = false;
53*d57664e9SAndroid Build Coastguard Worker         }
54*d57664e9SAndroid Build Coastguard Worker     }
55*d57664e9SAndroid Build Coastguard Worker 
56*d57664e9SAndroid Build Coastguard Worker     FILE* mStream;
57*d57664e9SAndroid Build Coastguard Worker     const int mIndentSize;
58*d57664e9SAndroid Build Coastguard Worker     int mIndent;
59*d57664e9SAndroid Build Coastguard Worker     bool mNeedsIndent;
60*d57664e9SAndroid Build Coastguard Worker };
61*d57664e9SAndroid Build Coastguard Worker 
62*d57664e9SAndroid Build Coastguard Worker #endif // __INDENT_PRINTER_H
63*d57664e9SAndroid Build Coastguard Worker 
64