23 const string Markdown::createGUIXML(
const string& pathName,
const string& fileName, vector<TOCEntry>& toc) {
24 vector<string> markdownLines;
25 FileSystem::getInstance()->getContentAsStringArray(pathName, fileName, markdownLines);
27 xml+=
"<screen id='markdown' min-width='1024' min-height='768' max-width='3200' max-height='1800'>\n";
28 xml+=
"\t<scrollarea width='100%' height='100%'>\n";
29 xml+=
"\t\t<layout alignment='vertical' width='100%' height='auto'>\n";
39 for (
auto markdownLine: markdownLines) {
40 markdownLine = StringTools::replace(markdownLine,
" ",
" ");
42 markdownLine = StringTools::replace(markdownLine,
"\\<",
"<");
43 markdownLine = StringTools::replace(markdownLine,
"\\>",
">");
45 markdownLine = StringTools::replace(markdownLine,
"<sub>",
"");
46 markdownLine = StringTools::replace(markdownLine,
"</sub>",
"");
48 markdownLine = StringTools::replace(markdownLine,
"<i>",
"");
49 markdownLine = StringTools::replace(markdownLine,
"</i>",
"");
51 auto markdownLineTrimmed = StringTools::trim(markdownLine);
53 if (inTable ==
true && StringTools::startsWith(markdownLine,
"|") ==
false) {
58 if (StringTools::startsWith(markdownLine,
"```") ==
true) {
59 if (inCode ==
false) {
62 xml+=
"<space height='10'/>\n";
63 xml+=
"<styled-text font='{$font.default}' size='{$fontsize.default}' color='{$color.font_normal}' background-color='{$color.element_midground}' border-color='{$color.element_frame}' border='1' padding='5' width='*' height='auto' preformatted='true'>\n";
65 xml+= StringTools::replace(StringTools::replace(inCodeString,
"[",
"\\["),
"]",
"\\]");
67 xml+=
"</styled-text>\n";
68 xml+=
"<space height='10'/>\n";
74 inCodeString+= markdownLine +
"\n";
76 if (inTable ==
false && markdownLineTrimmed.empty() ==
true) {
77 xml+=
"<space height='20'/>\n";
79 if (inTable ==
false && StringTools::startsWith(markdownLineTrimmed,
"-") ==
true) {
80 string textSize =
"{$fontsize.default}";
81 auto bulletPointIdx = StringTools::firstIndexOf(markdownLine,
'-');
82 auto bulletPoint = StringTools::trim(StringTools::substring(markdownLine, bulletPointIdx + 1));
83 auto indent = bulletPointIdx / 2;
84 xml+=
"<layout alignment='horizontal' width='100%' height='auto'>\n";
85 xml+=
"\t<space width='" + to_string((bulletPointIdx + 1) * 10) +
"'/>\n";
86 xml+=
"\t<styled-text font='{$font.default}' size='" + textSize +
"' color='{$color.font_normal}' width='*' height='auto'>• " + GUIParser::escape(bulletPoint) +
"</styled-text>\n";
90 if (StringTools::startsWith(markdownLine,
"!") ==
true) {
93 auto tooltipStartPosition = StringTools::indexOf(markdownLine,
'[');
94 auto tooltipEndPosition = StringTools::indexOf(markdownLine,
']');
95 if (tooltipStartPosition != string::npos &&
96 tooltipEndPosition != string::npos &&
97 tooltipEndPosition > tooltipStartPosition) {
98 tooltip = StringTools::substring(markdownLine, tooltipStartPosition + 1, tooltipEndPosition);
104 auto urlStartPosition = StringTools::indexOf(markdownLine,
'(');
105 auto urlEndPosition = StringTools::indexOf(markdownLine,
')');
106 if (urlStartPosition != string::npos &&
107 urlEndPosition != string::npos &&
108 urlEndPosition > urlStartPosition) {
109 url = StringTools::substring(markdownLine, urlStartPosition + 1, urlEndPosition);
111 if (StringTools::startsWith(url,
"https://raw.githubusercontent.com/andreasdr/tdme2/master/") ==
true) {
112 source = StringTools::substring(url,
string(
"https://raw.githubusercontent.com/andreasdr/tdme2/master/").size());
116 if (source.empty() ==
false) {
117 xml+=
"<image src='" + GUIParser::escape(FileSystem::getInstance()->getCurrentWorkingPathName() +
"/" + source) +
"' tooltip='" + GUIParser::escape(tooltip) +
"' />\n";
120 if (StringTools::startsWith(markdownLine,
"|") ==
true) {
121 if (inTable ==
false) {
123 xml+=
"<table width='auto' height='auto'>\n";
125 markdownLine = StringTools::trim(markdownLine);
126 vector<string> tableColumnStrings = {
"" };
127 auto separator =
true;
128 for (
auto i = 1; i < markdownLine.size(); i++) {
129 if (markdownLine[i - 1] !=
'\\' && markdownLine[i] ==
'|') {
130 if (i != markdownLine.size() - 1) tableColumnStrings.push_back(
string());
133 tableColumnStrings[tableColumnStrings.size() - 1]+= markdownLine[i];
134 if (markdownLine[i] !=
'-' && markdownLine[i] !=
' ' && markdownLine[i] !=
'\t' && markdownLine[i] !=
'|') separator =
false;
136 if (separator ==
false) {
137 xml+=
"<table-row>\n";
138 for (
auto tableColumnString: tableColumnStrings) {
139 tableColumnString = StringTools::replace(tableColumnString,
"\\<",
"<");
140 tableColumnString = StringTools::replace(tableColumnString,
"\\>",
">");
141 tableColumnString = StringTools::replace(tableColumnString,
"\\|",
"|");
142 string textSize =
"{$fontsize.default}";
143 string backgroundColor = (inTableIdx % 2) == 0?
"{$color.element_midground}":
"{$color.element_background}";
144 xml+=
"<table-cell padding='5' background-color='" + backgroundColor +
"' border='1' border-color='{$color.element_frame}'>\n";
145 xml+=
"\t<text font='{$font.default}' size='" + textSize +
"' text='" + GUIParser::escape(StringTools::trim(tableColumnString)) +
"' color='{$color.font_normal}' width='auto' height='auto' />\n";
146 xml+=
"</table-cell>\n";
148 xml+=
"</table-row>\n";
154 string textSize =
"{$fontsize.default}";
155 if (StringTools::startsWith(markdownLine,
"####") ==
true) {
156 markdownLine = StringTools::trim(StringTools::substring(markdownLine, 4));
157 textSize =
"{$fontsize.h4}";
158 tocId = to_string(tocIdx++);
161 tocLevel+= StringTools::padLeft(to_string(tocLevel1),
"0", 3) +
".";
162 tocLevel+= StringTools::padLeft(to_string(tocLevel2),
"0", 3) +
".";
163 tocLevel+= StringTools::padLeft(to_string(tocLevel3),
"0", 3) +
".";
164 tocLevel+= StringTools::padLeft(to_string(tocLevel4),
"0", 3) +
".";
169 .title = markdownLine
173 if (StringTools::startsWith(markdownLine,
"###") ==
true) {
174 markdownLine = StringTools::trim(StringTools::substring(markdownLine, 3));
175 textSize =
"{$fontsize.h3}";
176 tocId = to_string(tocIdx++);
180 tocLevel+= StringTools::padLeft(to_string(tocLevel1),
"0", 3) +
".";
181 tocLevel+= StringTools::padLeft(to_string(tocLevel2),
"0", 3) +
".";
182 tocLevel+= StringTools::padLeft(to_string(tocLevel3),
"0", 3) +
".";
187 .title = markdownLine
191 if (StringTools::startsWith(markdownLine,
"##") ==
true) {
192 markdownLine = StringTools::trim(StringTools::substring(markdownLine, 2));
193 textSize =
"{$fontsize.h2}";
194 tocId = to_string(tocIdx++);
199 tocLevel+= StringTools::padLeft(to_string(tocLevel1),
"0", 3) +
".";
200 tocLevel+= StringTools::padLeft(to_string(tocLevel2),
"0", 3) +
".";
205 .title = markdownLine
209 if (StringTools::startsWith(markdownLine,
"#") ==
true) {
210 markdownLine = StringTools::trim(StringTools::substring(markdownLine, 1));
211 textSize =
"{$fontsize.h1}";
212 tocId = to_string(tocIdx++);
218 tocLevel+= StringTools::padLeft(to_string(tocLevel1),
"0", 3) +
".";
223 .title = markdownLine
227 xml+=
"<styled-text " + (tocId.empty() ==
false?
"id = '" + tocId +
"' ":
"") +
"font='{$font.default}' size='" + textSize +
"' color='{$color.font_normal}' width='*' height='auto'>" + GUIParser::escape(markdownLine) +
"</styled-text>\n";
230 if (inCode ==
true) {
231 xml+=
"<space height='10'/>\n";
232 xml+=
"<styled-text font='{$font.default}' size='{$fontsize.default}' color='{$color.font_normal}' background-color='{$color.element_midground}' border-color='{$color.element_frame}' border='1' padding='5' width='*' height='auto' preformatted='true'>\n";
233 xml+=
" <![CDATA[\n";
234 xml+= StringTools::replace(StringTools::replace(inCodeString,
"[",
"\\["),
"]",
"\\]");
236 xml+=
"</styled-text>\n";
237 xml+=
"<space height='10'/>\n";
239 if (inTable ==
true) xml+=
"</table>\n";
241 xml+=
"\t\t</layout>\n";
242 xml+=
"\t</scrollarea>\n";
File system singleton class.