blob: 2134b57c26d48cbe833fcc3db0d41c48c91eb7d5 [file] [log] [blame]
swissChili923bd532021-12-08 22:48:58 -08001#pragma once
2
3#include <QString>
4#include <QList>
5
swissChili5d3e5562022-02-24 16:49:19 -08006#include <type_traits>
7
swissChili923bd532021-12-08 22:48:58 -08008#include "Token.h"
9#include "AstNode.h"
swissChili323883d2022-02-20 16:35:23 -080010#include "Parser.h"
swissChili923bd532021-12-08 22:48:58 -080011
12template <typename T>
13QString pprint(T val);
14
swissChilid845a142022-02-25 15:46:35 -080015QString pprint(QList<Token> val);
16QString pprint(QList<AstNode> val);
swissChili923bd532021-12-08 22:48:58 -080017
swissChilid845a142022-02-25 15:46:35 -080018template <typename T>
19QString pprintDense(QList<T> val)
swissChili5d3e5562022-02-24 16:49:19 -080020{
21 QString out;
22 int lastType = -1;
23
swissChili5d3e5562022-02-24 16:49:19 -080024 for (const T &v : val)
25 {
swissChilid845a142022-02-25 15:46:35 -080026 if ((lastType != v.type() || v.type() != T::SYM) && lastType != -1)
swissChili5d3e5562022-02-24 16:49:19 -080027 out += " ";
28
29 out += QString(v);
30 }
31
32 return out;
33}
34
swissChili923bd532021-12-08 22:48:58 -080035template <typename T>
36QString pprint(QList<T> val)
37{
38 QStringList out;
39
40 for (const T &v : val)
41 out.append(static_cast<QString>(v));
42
43 return out.join(" ");
44}
45
46template <typename T>
47QString pprint(T val)
48{
49 return static_cast<QString>(val);
50}
swissChili323883d2022-02-20 16:35:23 -080051
swissChiliece1ac82022-02-25 11:20:42 -080052class PPrint
53{
54public:
55 enum Style
56 {
57 ANSI,
58 HTML
59 };
60};
61
62QString pprint(ParseResult val, const Parser &parser, PPrint::Style style = PPrint::ANSI);
swissChili323883d2022-02-20 16:35:23 -080063
64void sout(QString string);
swissChili918557c2022-02-20 20:16:34 -080065void eout(QString string);