blob: 4020752baab6f9f75c90ce85e105359b8d2f440c [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
24 qInfo() << "pprint specialized";
25
26 for (const T &v : val)
27 {
swissChilid845a142022-02-25 15:46:35 -080028 if ((lastType != v.type() || v.type() != T::SYM) && lastType != -1)
swissChili5d3e5562022-02-24 16:49:19 -080029 out += " ";
30
31 out += QString(v);
32 }
33
34 return out;
35}
36
swissChili923bd532021-12-08 22:48:58 -080037template <typename T>
38QString pprint(QList<T> val)
39{
40 QStringList out;
41
42 for (const T &v : val)
43 out.append(static_cast<QString>(v));
44
45 return out.join(" ");
46}
47
48template <typename T>
49QString pprint(T val)
50{
51 return static_cast<QString>(val);
52}
swissChili323883d2022-02-20 16:35:23 -080053
swissChiliece1ac82022-02-25 11:20:42 -080054class PPrint
55{
56public:
57 enum Style
58 {
59 ANSI,
60 HTML
61 };
62};
63
64QString pprint(ParseResult val, const Parser &parser, PPrint::Style style = PPrint::ANSI);
swissChili323883d2022-02-20 16:35:23 -080065
66void sout(QString string);
swissChili918557c2022-02-20 20:16:34 -080067void eout(QString string);