annotate trunk/src/dil/doc/Macro.d @ 741:35184354a502

Added method textBody() to IdentValueParser. Applied some fixes.
author Aziz K?ksal <aziz.koeksal@gmail.com>
date Sat, 09 Feb 2008 16:18:53 +0100
parents 49fe21aa387c
children 7173ece1b696
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
718
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
1 /++
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
2 Author: Aziz Köksal
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
3 License: GPL3
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
4 +/
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
5 module dil.doc.Macro;
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
6
727
c204b6a9e0ef Added new module dil.doc.Parser.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 725
diff changeset
7 import dil.doc.Parser;
718
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
8 import dil.lexer.Funcs;
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
9 import dil.Unicode;
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
10 import common;
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
11
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
12 class Macro
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
13 {
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
14 string name; /// The name of the macro.
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
15 string text; /// Substitution text.
725
84291c0a9e13 Added member callLevel to class Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 724
diff changeset
16 uint callLevel; /// Recursive call level.
718
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
17 this (string name, string text)
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
18 {
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
19 this.name = name;
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
20 this.text = text;
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
21 }
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
22 }
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
23
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
24 class MacroTable
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
25 {
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
26 MacroTable parent;
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
27 Macro[string] table;
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
28
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
29 this(MacroTable parent = null)
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
30 {
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
31 this.parent = parent;
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
32 }
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
33
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
34 void insert(Macro macro_)
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
35 {
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
36 table[macro_.name] = macro_;
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
37 }
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
38
727
c204b6a9e0ef Added new module dil.doc.Parser.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 725
diff changeset
39 void insert(Macro[] macros)
c204b6a9e0ef Added new module dil.doc.Parser.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 725
diff changeset
40 {
c204b6a9e0ef Added new module dil.doc.Parser.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 725
diff changeset
41 foreach (macro_; macros)
c204b6a9e0ef Added new module dil.doc.Parser.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 725
diff changeset
42 insert(macro_);
c204b6a9e0ef Added new module dil.doc.Parser.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 725
diff changeset
43 }
c204b6a9e0ef Added new module dil.doc.Parser.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 725
diff changeset
44
737
f88b5285b86b Implemented DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 731
diff changeset
45 void insert(string name, string text)
f88b5285b86b Implemented DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 731
diff changeset
46 {
f88b5285b86b Implemented DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 731
diff changeset
47 insert(new Macro(name, text));
f88b5285b86b Implemented DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 731
diff changeset
48 }
f88b5285b86b Implemented DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 731
diff changeset
49
f88b5285b86b Implemented DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 731
diff changeset
50 void insert(string[] names, string[] texts)
f88b5285b86b Implemented DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 731
diff changeset
51 {
f88b5285b86b Implemented DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 731
diff changeset
52 assert(names.length == texts.length);
f88b5285b86b Implemented DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 731
diff changeset
53 foreach (i, name; names)
f88b5285b86b Implemented DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 731
diff changeset
54 insert(name, texts[i]);
f88b5285b86b Implemented DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 731
diff changeset
55 }
f88b5285b86b Implemented DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 731
diff changeset
56
718
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
57 Macro search(string name)
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
58 {
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
59 auto pmacro = name in table;
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
60 if (pmacro)
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
61 return *pmacro;
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
62 if (parent)
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
63 return parent.search(name);
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
64 return null;
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
65 }
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
66
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
67 bool isRoot()
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
68 { return parent is null; }
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
69 }
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
70
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
71 struct MacroParser
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
72 {
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
73 Macro[] parse(string text)
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
74 {
727
c204b6a9e0ef Added new module dil.doc.Parser.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 725
diff changeset
75 IdentValueParser parser;
c204b6a9e0ef Added new module dil.doc.Parser.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 725
diff changeset
76 auto idvalues = parser.parse(text);
c204b6a9e0ef Added new module dil.doc.Parser.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 725
diff changeset
77 auto macros = new Macro[idvalues.length];
c204b6a9e0ef Added new module dil.doc.Parser.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 725
diff changeset
78 foreach (i, idvalue; idvalues)
c204b6a9e0ef Added new module dil.doc.Parser.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 725
diff changeset
79 macros[i] = new Macro(idvalue.ident, idvalue.value);
718
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
80 return macros;
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
81 }
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
82 }
be887ada3e3e Added new module dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
83
739
49fe21aa387c Added sanitizeText() to dil.Converter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 737
diff changeset
84 /// Expands the macros from the table in text.
725
84291c0a9e13 Added member callLevel to class Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 724
diff changeset
85 char[] expandMacros(MacroTable table, char[] text, char[][] args = null)
722
ceaac6a24258 Added isUnicodeAlpha() for DDocParser and MacroParser.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 718
diff changeset
86 {
ceaac6a24258 Added isUnicodeAlpha() for DDocParser and MacroParser.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 718
diff changeset
87 char[] result;
ceaac6a24258 Added isUnicodeAlpha() for DDocParser and MacroParser.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 718
diff changeset
88 char* p = text.ptr;
ceaac6a24258 Added isUnicodeAlpha() for DDocParser and MacroParser.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 718
diff changeset
89 char* textEnd = p + text.length;
723
5dd17d4568ce Wrote code for expandMacros().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 722
diff changeset
90 char* macroEnd = p;
5dd17d4568ce Wrote code for expandMacros().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 722
diff changeset
91 while (p+3 < textEnd) // minimum 4 chars: $(x)
5dd17d4568ce Wrote code for expandMacros().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 722
diff changeset
92 {
5dd17d4568ce Wrote code for expandMacros().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 722
diff changeset
93 if (*p == '$' && p[1] == '(')
5dd17d4568ce Wrote code for expandMacros().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 722
diff changeset
94 {
5dd17d4568ce Wrote code for expandMacros().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 722
diff changeset
95 // Copy string between macros.
724
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
96 if (macroEnd !is p)
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
97 result ~= makeString(macroEnd, p);
723
5dd17d4568ce Wrote code for expandMacros().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 722
diff changeset
98 p += 2;
5dd17d4568ce Wrote code for expandMacros().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 722
diff changeset
99 auto idBegin = p;
5dd17d4568ce Wrote code for expandMacros().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 722
diff changeset
100 if (isidbeg(*p) || isUnicodeAlpha(p, textEnd)) // IdStart
5dd17d4568ce Wrote code for expandMacros().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 722
diff changeset
101 {
5dd17d4568ce Wrote code for expandMacros().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 722
diff changeset
102 do // IdChar*
5dd17d4568ce Wrote code for expandMacros().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 722
diff changeset
103 p++;
5dd17d4568ce Wrote code for expandMacros().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 722
diff changeset
104 while (p < textEnd && (isident(*p) || isUnicodeAlpha(p, textEnd)))
724
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
105 // Create macro name.
723
5dd17d4568ce Wrote code for expandMacros().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 722
diff changeset
106 auto macroName = makeString(idBegin, p);
724
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
107 // Get arguments.
725
84291c0a9e13 Added member callLevel to class Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 724
diff changeset
108 auto macroArgs = scanArguments(p, textEnd);
724
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
109 // TODO: still expand macro if no closing bracket was found?
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
110 if (p == textEnd)
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
111 break; // No closing bracket found.
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
112 assert(*p == ')');
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
113 p++;
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
114 macroEnd = p;
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
115
723
5dd17d4568ce Wrote code for expandMacros().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 722
diff changeset
116 auto macro_ = table.search(macroName);
5dd17d4568ce Wrote code for expandMacros().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 722
diff changeset
117 if (macro_)
725
84291c0a9e13 Added member callLevel to class Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 724
diff changeset
118 { // Ignore recursive macro if:
84291c0a9e13 Added member callLevel to class Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 724
diff changeset
119 if (macro_.callLevel != 0 &&
84291c0a9e13 Added member callLevel to class Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 724
diff changeset
120 (macroArgs.length == 0 || // Macro has no arguments.
84291c0a9e13 Added member callLevel to class Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 724
diff changeset
121 args.length && args[0] == macroArgs[0]) // arg0 == macroArg0.
84291c0a9e13 Added member callLevel to class Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 724
diff changeset
122 )
84291c0a9e13 Added member callLevel to class Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 724
diff changeset
123 continue;
84291c0a9e13 Added member callLevel to class Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 724
diff changeset
124 macro_.callLevel++;
84291c0a9e13 Added member callLevel to class Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 724
diff changeset
125 auto expandedText = expandArguments(macro_.text, macroArgs);
84291c0a9e13 Added member callLevel to class Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 724
diff changeset
126 result ~= expandMacros(table, expandedText, macroArgs);
84291c0a9e13 Added member callLevel to class Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 724
diff changeset
127 macro_.callLevel--;
84291c0a9e13 Added member callLevel to class Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 724
diff changeset
128 }
724
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
129 continue;
723
5dd17d4568ce Wrote code for expandMacros().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 722
diff changeset
130 }
5dd17d4568ce Wrote code for expandMacros().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 722
diff changeset
131 }
5dd17d4568ce Wrote code for expandMacros().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 722
diff changeset
132 p++;
5dd17d4568ce Wrote code for expandMacros().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 722
diff changeset
133 }
724
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
134 if (macroEnd < textEnd)
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
135 result ~= makeString(macroEnd, textEnd);
722
ceaac6a24258 Added isUnicodeAlpha() for DDocParser and MacroParser.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 718
diff changeset
136 return result;
ceaac6a24258 Added isUnicodeAlpha() for DDocParser and MacroParser.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 718
diff changeset
137 }
ceaac6a24258 Added isUnicodeAlpha() for DDocParser and MacroParser.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 718
diff changeset
138
724
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
139 /// Scans until the closing ')' is found.
741
35184354a502 Added method textBody() to IdentValueParser.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 739
diff changeset
140 /// Returns: [$0, $1, $2 ...].
724
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
141 char[][] scanArguments(ref char* p, char* textEnd)
725
84291c0a9e13 Added member callLevel to class Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 724
diff changeset
142 out(args) { assert(args.length != 1); }
84291c0a9e13 Added member callLevel to class Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 724
diff changeset
143 body
724
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
144 {
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
145 // D specs: "The argument text can contain nested parentheses,
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
146 // "" or '' strings, comments, or tags."
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
147 uint level = 1; // Nesting level of the parentheses.
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
148 char[][] args;
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
149
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
150 // Skip leading spaces.
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
151 while (p < textEnd && isspace(*p))
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
152 p++;
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
153
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
154 char* arg0Begin = p; // Whole argument list.
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
155 char* argBegin = p;
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
156 Loop:
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
157 while (p < textEnd)
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
158 {
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
159 switch (*p)
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
160 {
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
161 case ',':
731
ca7607226caa Added new module cmd.DDoc.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 727
diff changeset
162 if (level != 1) // Ignore comma if inside ().
ca7607226caa Added new module cmd.DDoc.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 727
diff changeset
163 break;
724
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
164 // Add a new argument.
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
165 args ~= makeString(argBegin, p);
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
166 while (++p < textEnd && isspace(*p))
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
167 {}
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
168 argBegin = p;
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
169 continue;
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
170 case '(':
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
171 level++;
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
172 break;
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
173 case ')':
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
174 if (--level == 0)
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
175 break Loop;
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
176 break;
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
177 case '"', '\'':
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
178 auto c = *p;
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
179 while (++p < textEnd && *p != c) // Scan to next " or '.
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
180 {}
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
181 assert(*p == c || p == textEnd);
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
182 if (p == textEnd)
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
183 break Loop;
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
184 break;
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
185 case '<':
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
186 if (p+3 < textEnd && p[1] == '!' && p[2] == '-' && p[3] == '-') // <!--
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
187 {
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
188 p += 3;
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
189 // Scan to closing "-->".
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
190 while (++p + 2 < textEnd)
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
191 if (*p == '-' && p[1] == '-' && p[2] == '>')
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
192 {
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
193 p += 3;
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
194 continue Loop;
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
195 }
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
196 p = textEnd; // p += 2;
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
197 } // <tag ...> or </tag>
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
198 else if (p+1 < textEnd && (isalpha(p[1]) || p[1] == '/'))
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
199 while (++p < textEnd && *p != '>') // Skip to closing '>'.
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
200 {}
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
201 if (p == textEnd)
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
202 break Loop;
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
203 break;
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
204 default:
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
205 }
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
206 p++;
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
207 }
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
208 assert(*p == ')' && level == 0 || p == textEnd);
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
209 if (arg0Begin is p)
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
210 return null;
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
211 // arg0 spans the whole argument list.
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
212 auto arg0 = makeString(arg0Begin, p);
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
213 // Add last argument.
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
214 args ~= makeString(argBegin, p);
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
215 return arg0 ~ args;
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
216 }
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
217
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
218 /// Expands "$+", "$0" - "$9" with args[n] in text.
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
219 /// Params:
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
220 /// text = the text to scan for argument placeholders.
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
221 /// args = the first element, args[0], is the whole argument string and
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
222 /// the following elements are slices into it.
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
223 /// The array is empty if there are no arguments.
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
224 char[] expandArguments(char[] text, char[][] args)
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
225 in { assert(args.length != 1, "zero or more than 1 args expected"); }
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
226 body
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
227 {
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
228 char[] result;
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
229 char* p = text.ptr;
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
230 char* textEnd = p + text.length;
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
231 char* placeholderEnd = p;
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
232
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
233 while (p+1 < textEnd)
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
234 {
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
235 if (*p == '$' && (p[1] == '+' || isdigit(p[1])))
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
236 {
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
237 // Copy string between argument placeholders.
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
238 if (placeholderEnd !is p)
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
239 result ~= makeString(placeholderEnd, p);
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
240 p++;
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
241 placeholderEnd = p + 1; // Set new argument end.
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
242
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
243 if (args.length == 0)
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
244 continue;
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
245
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
246 if (*p == '+')
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
247 { // $+ = $2 to $n
725
84291c0a9e13 Added member callLevel to class Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 724
diff changeset
248 if (args.length > 2)
724
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
249 result ~= makeString(args[2].ptr, args[0].ptr + args[0].length);
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
250 }
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
251 else
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
252 { // 0 - 9
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
253 uint nthArg = *p - '0';
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
254 if (nthArg < args.length)
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
255 result ~= args[nthArg];
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
256 }
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
257 }
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
258 p++;
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
259 }
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
260 if (placeholderEnd < textEnd)
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
261 result ~= makeString(placeholderEnd, textEnd);
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
262 return result;
0b8a6e876b6d Added scanArguments() and expandArguments() to dil.doc.Macro.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 723
diff changeset
263 }