]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/lib/markdown.qh
Properly support team field on trigger_multiple
[xonotic/xonotic-data.pk3dir.git] / qcsrc / lib / markdown.qh
1 #include "test.qh"
2
3 /**
4  * handle string spacing as markdown:
5  *   - two spaces escape a linebreak (otherwise text wraps)
6  *   - two linebreaks become a paragraph (remain unchanged)
7  */
8 ERASEABLE
9 string markdown(string s)
10 {
11         string buf = "";
12         int lines = 0;
13         int spaces = 0;
14         FOREACH_CHAR(s, true, {
15                 switch (it) {
16                         default:
17                                 for (; spaces > 0; --spaces) {
18                                         buf = strcat(buf, " ");
19                                 }
20                                 buf = strcat(buf, chr2str(it));
21                                 break;
22                         case ' ':
23                                 spaces += 1;
24                                 break;
25                         case '\n':
26                                 lines += 1;
27                                 if (lines > 1) {
28                                         lines = 0;
29                                         spaces = 0;
30                                         buf = strcat(buf, "\n\n");
31                                         break;
32                                 }
33                                 if (spaces < 2) {
34                                         spaces = 1;
35                                 } else {
36                                         spaces = 0;
37                                         buf = strcat(buf, "\n");
38                                 }
39                                 break;
40                 }
41         });
42         return buf;
43 }
44
45 TEST(Markdown, LineWrap)
46 {
47         #define X(expect, in) MACRO_BEGIN \
48                 string out = markdown(in); \
49                 EXPECT_TRUE(expect == out); \
50                 LOG_INFO(expect); \
51                 LOG_INFO(out); \
52         MACRO_END
53
54         // identity
55         X("lorem ipsum", "lorem ipsum");
56         // trim trailing space
57         X("lorem ipsum", "lorem ipsum ");
58         // allow manual input wrapping
59         X("lorem ipsum", "lorem\nipsum");
60         // line break
61         X("lorem\nipsum", "lorem  \nipsum");
62         // paragraph
63         X("lorem\n\nipsum", "lorem\n\nipsum");
64         SUCCEED();
65         #undef X
66 }