grammar-composer 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/LICENSE.md +7 -0
  2. package/README.md +387 -0
  3. package/dist/Exports.d.ts +1 -0
  4. package/dist/Exports.js +2 -0
  5. package/dist/Exports.js.map +1 -0
  6. package/dist/Grammar.d.ts +62 -0
  7. package/dist/Grammar.js +376 -0
  8. package/dist/Grammar.js.map +1 -0
  9. package/dist/GrammarComposer.d.ts +61 -0
  10. package/dist/GrammarComposer.js +383 -0
  11. package/dist/GrammarComposer.js.map +1 -0
  12. package/dist/Grammars/JsonGrammar.d.ts +16 -0
  13. package/dist/Grammars/JsonGrammar.js +74 -0
  14. package/dist/Grammars/JsonGrammar.js.map +1 -0
  15. package/dist/Grammars/XmlGrammar.d.ts +13 -0
  16. package/dist/Grammars/XmlGrammar.js +74 -0
  17. package/dist/Grammars/XmlGrammar.js.map +1 -0
  18. package/dist/ParserTest.d.ts +1 -0
  19. package/dist/ParserTest.js +37 -0
  20. package/dist/ParserTest.js.map +1 -0
  21. package/dist/Test.d.ts +1 -0
  22. package/dist/Test.js +74 -0
  23. package/dist/Test.js.map +1 -0
  24. package/dist/TestData.d.ts +5 -0
  25. package/dist/TestData.js +466 -0
  26. package/dist/TestData.js.map +1 -0
  27. package/dist/TopDownParser.d.ts +13 -0
  28. package/dist/TopDownParser.js +229 -0
  29. package/dist/TopDownParser.js.map +1 -0
  30. package/dist/data/TestData.d.ts +5 -0
  31. package/dist/data/TestData.js +466 -0
  32. package/dist/data/TestData.js.map +1 -0
  33. package/dist/test-data/TestData.d.ts +5 -0
  34. package/dist/test-data/TestData.js +466 -0
  35. package/dist/test-data/TestData.js.map +1 -0
  36. package/dist/test-grammars/JsonGrammar.d.ts +17 -0
  37. package/dist/test-grammars/JsonGrammar.js +74 -0
  38. package/dist/test-grammars/JsonGrammar.js.map +1 -0
  39. package/dist/test-grammars/XmlGrammar.d.ts +14 -0
  40. package/dist/test-grammars/XmlGrammar.js +74 -0
  41. package/dist/test-grammars/XmlGrammar.js.map +1 -0
  42. package/dist/utilities/Timer.d.ts +13 -0
  43. package/dist/utilities/Timer.js +70 -0
  44. package/dist/utilities/Timer.js.map +1 -0
  45. package/dist/utilities/utilities.d.ts +8 -0
  46. package/dist/utilities/utilities.js +26 -0
  47. package/dist/utilities/utilities.js.map +1 -0
  48. package/package.json +40 -0
  49. package/src/GrammarComposer.ts +541 -0
  50. package/src/Test.ts +101 -0
  51. package/src/TopDownParser.ts +304 -0
  52. package/src/test-data/TestData.ts +470 -0
  53. package/src/test-grammars/JsonGrammar.ts +118 -0
  54. package/src/test-grammars/XmlGrammar.ts +141 -0
  55. package/src/utilities/Timer.ts +95 -0
  56. package/src/utilities/Utilities.ts +33 -0
  57. package/tsconfig.json +105 -0
@@ -0,0 +1,229 @@
1
+ export function parse(inputString, grammar) {
2
+ const inputLength = inputString.length;
3
+ const maxElementId = grammar.maxElementId;
4
+ let bestFailedMatches = [];
5
+ let bestFailedMatchesOffset = -1;
6
+ function updateBestFailedMatchesIfNeeded(terminal, startOffset) {
7
+ if (startOffset >= bestFailedMatchesOffset) {
8
+ if (startOffset > bestFailedMatchesOffset) {
9
+ bestFailedMatchesOffset = startOffset;
10
+ bestFailedMatches = [terminal];
11
+ }
12
+ else {
13
+ bestFailedMatches.push(terminal);
14
+ }
15
+ }
16
+ }
17
+ function tryParse(grammarElement, startOffset) {
18
+ if (grammarElement.cached === true) {
19
+ return tryParseCached(grammarElement, startOffset);
20
+ }
21
+ else {
22
+ return tryParseUncached(grammarElement, startOffset);
23
+ }
24
+ }
25
+ const cachedParseResults = new Array(inputLength);
26
+ function tryParseCached(grammarElement, startOffset) {
27
+ let slot = cachedParseResults[startOffset];
28
+ if (slot === undefined) {
29
+ slot = new Map();
30
+ cachedParseResults[startOffset] = slot;
31
+ }
32
+ else {
33
+ const cachedResult = slot.get(grammarElement);
34
+ if (cachedResult !== undefined) {
35
+ return cachedResult;
36
+ }
37
+ }
38
+ const parseResult = tryParseUncached(grammarElement, startOffset);
39
+ slot.set(grammarElement, parseResult);
40
+ return parseResult;
41
+ }
42
+ function tryParseUncached(grammarElement, startOffset) {
43
+ switch (grammarElement.type) {
44
+ case 'StringTerminal': {
45
+ const target = grammarElement.content;
46
+ const endOffset = startOffset + target.length;
47
+ if (endOffset > inputLength) {
48
+ updateBestFailedMatchesIfNeeded(grammarElement, startOffset);
49
+ return null;
50
+ }
51
+ const substringToMatch = inputString.substring(startOffset, endOffset);
52
+ if (substringToMatch === target) {
53
+ return {
54
+ endOffset,
55
+ nodes: undefined
56
+ };
57
+ }
58
+ else {
59
+ updateBestFailedMatchesIfNeeded(grammarElement, startOffset);
60
+ return null;
61
+ }
62
+ }
63
+ case 'PatternTerminal': {
64
+ if (startOffset >= inputLength) {
65
+ updateBestFailedMatchesIfNeeded(grammarElement, startOffset);
66
+ return null;
67
+ }
68
+ const substringToMatch = inputString.substring(startOffset);
69
+ const matchResults = grammarElement.regExp.exec(substringToMatch);
70
+ if (matchResults === null) {
71
+ updateBestFailedMatchesIfNeeded(grammarElement, startOffset);
72
+ return null;
73
+ }
74
+ const matchStartOffset = startOffset + matchResults.index;
75
+ const matchEndOffset = matchStartOffset + matchResults[0].length;
76
+ let nodes = undefined;
77
+ const groupsIndices = matchResults.indices;
78
+ if (groupsIndices !== undefined) {
79
+ let namedGroupIndicesIdentifiers = undefined;
80
+ if (groupsIndices.groups) {
81
+ namedGroupIndicesIdentifiers = Object.keys(groupsIndices.groups);
82
+ if (namedGroupIndicesIdentifiers.length !== groupsIndices.length - 1) {
83
+ throw new Error(`The regular expression /${grammarElement.regExp.source}/ contains a combination of named and unnamed groups. Due to limitations of the JavaScript RegExp engine, it is impossible to reliably identify the ordering of this combination, please use either all unnamed or named groups, but not both.`);
84
+ }
85
+ }
86
+ const children = [];
87
+ for (let i = 1; i < groupsIndices.length; i++) {
88
+ const groupIndices = groupsIndices[i];
89
+ if (groupIndices === undefined) {
90
+ continue;
91
+ }
92
+ const groupStartOffset = startOffset + groupIndices[0];
93
+ const groupEndOffset = startOffset + groupIndices[1];
94
+ children.push({
95
+ name: namedGroupIndicesIdentifiers ? namedGroupIndicesIdentifiers[i - 1] : i.toString(),
96
+ startOffset: groupStartOffset,
97
+ endOffset: groupEndOffset,
98
+ sourceText: inputString.substring(groupStartOffset, groupEndOffset),
99
+ children: undefined
100
+ });
101
+ }
102
+ nodes = [{
103
+ name: grammarElement.name,
104
+ startOffset: matchStartOffset,
105
+ endOffset: matchEndOffset,
106
+ sourceText: inputString.substring(matchStartOffset, matchEndOffset),
107
+ children
108
+ }];
109
+ }
110
+ const parseResult = {
111
+ endOffset: matchEndOffset,
112
+ nodes
113
+ };
114
+ return parseResult;
115
+ }
116
+ case 'Nonterminal': {
117
+ const result = tryParse(grammarElement.content, startOffset);
118
+ if (result === null) {
119
+ return null;
120
+ }
121
+ let newNode = {
122
+ name: grammarElement.name,
123
+ startOffset,
124
+ endOffset: result.endOffset,
125
+ sourceText: inputString.substring(startOffset, result.endOffset),
126
+ children: result.nodes,
127
+ };
128
+ const newResult = {
129
+ endOffset: result.endOffset,
130
+ nodes: [newNode]
131
+ };
132
+ return newResult;
133
+ }
134
+ case 'Sequence': {
135
+ let successfulResults = [];
136
+ let readOffset = startOffset;
137
+ for (const element of grammarElement.members) {
138
+ const elementResult = tryParse(element, readOffset);
139
+ if (elementResult !== null) {
140
+ successfulResults.push(elementResult);
141
+ readOffset = elementResult.endOffset;
142
+ }
143
+ else if (element.optional === false) {
144
+ return null;
145
+ }
146
+ }
147
+ let nodes = [];
148
+ for (const result of successfulResults) {
149
+ if (result.nodes !== undefined) {
150
+ nodes.push(...result.nodes);
151
+ }
152
+ }
153
+ return {
154
+ endOffset: readOffset,
155
+ nodes: nodes.length > 0 ? nodes : undefined
156
+ };
157
+ }
158
+ case 'Repetition': {
159
+ let readOffset = startOffset;
160
+ const nodes = [];
161
+ while (true) {
162
+ const result = tryParse(grammarElement.content, readOffset);
163
+ if (result === null) {
164
+ break;
165
+ }
166
+ if (result.nodes !== undefined) {
167
+ nodes.push(...result.nodes);
168
+ }
169
+ readOffset = result.endOffset;
170
+ }
171
+ if (readOffset > startOffset) {
172
+ return {
173
+ endOffset: readOffset,
174
+ nodes: nodes.length > 0 ? nodes : undefined
175
+ };
176
+ }
177
+ else {
178
+ return null;
179
+ }
180
+ }
181
+ case 'Choice': {
182
+ let bestResult = null;
183
+ for (const member of grammarElement.members) {
184
+ const result = tryParse(member, startOffset);
185
+ if (result !== null && (bestResult === null || result.endOffset > bestResult.endOffset)) {
186
+ bestResult = result;
187
+ if (grammarElement.exhaustive === false) {
188
+ break;
189
+ }
190
+ }
191
+ }
192
+ return bestResult;
193
+ }
194
+ default: {
195
+ throw new Error(`Unsupported grammar element type '${grammarElement.type}'.`);
196
+ }
197
+ }
198
+ }
199
+ const result = tryParse(grammar.rootElement, 0);
200
+ const lastNode = result?.nodes?.[result.nodes.length - 1];
201
+ if (lastNode && lastNode.endOffset >= inputLength) {
202
+ return result.nodes;
203
+ }
204
+ else {
205
+ if (bestFailedMatches.length > 0) {
206
+ const possibleMatches = bestFailedMatches.map(match => {
207
+ if (match.type === 'StringTerminal') {
208
+ return `'${match.content}'`;
209
+ }
210
+ else {
211
+ return match.name;
212
+ }
213
+ });
214
+ const possibleMatchesWithoutDuplicates = [...(new Set(possibleMatches))];
215
+ let possibleMatchesString;
216
+ if (possibleMatchesWithoutDuplicates.length > 1) {
217
+ possibleMatchesString = `any of ${possibleMatchesWithoutDuplicates.join(', ')}`;
218
+ }
219
+ else {
220
+ possibleMatchesString = possibleMatchesWithoutDuplicates[0];
221
+ }
222
+ throw new Error(`Failed parsing the input text. Expected ${possibleMatchesString} at position ${bestFailedMatchesOffset}.`);
223
+ }
224
+ else {
225
+ throw new Error(`Failed parsing the input text. Parsed length was ${lastNode?.endOffset ?? 0}. Input length was ${inputLength}.`);
226
+ }
227
+ }
228
+ }
229
+ //# sourceMappingURL=TopDownParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TopDownParser.js","sourceRoot":"","sources":["../src/TopDownParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare const jsonSample1: string;
2
+ export declare const jsonSample2: string;
3
+ export declare const xmlSample1 = "\n\n<menu>\n <popup>\n \t<test value='New'>\n <!--<menuitem value=\"New\" onclick=\"CreateNewDoc()\" />-->\n <menuitem value=\"Open\" onclick=\"OpenDoc()\" />\n <menuitem value=\"Close\" onclick=\"CloseDoc()\" />\n </popup>\n</menu>";
4
+ export declare const xmlSample2 = "\n<!DOCTYPE web-app\n PUBLIC \"-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN\"\n \"http://java.sun.com/j2ee/dtds/web-app_2.2.dtd\">\n\n<menu>\n <header>Adobe SVG Viewer</header>\n <item action=\"Open\" id=\"Open\">Open</item>\n <item action=\"OpenNew\" id=\"OpenNew\">Open New</item>\n <separator/>\n <item action=\"ZoomIn\" id=\"ZoomIn\">Zoom In</item>\n <item action=\"ZoomOut\" id=\"ZoomOut\">Zoom Out</item>\n <item action=\"OriginalView\" id=\"OriginalView\">Original View</item>\n <separator/>\n <item action=\"Quality\" id=\"Quality\">Quality</item>\n <item action=\"Pause\" id=\"Pause\">Pause</item>\n <item action=\"Mute\" id=\"Mute\">Mute</item>\n <separator/>\n <item action=\"Find\" id=\"Find\">Find...</item>\n <item action=\"FindAgain\" id=\"FindAgain\">Find Again</item>\n <item action=\"Copy\" id=\"Copy\">Copy</item>\n <item action=\"CopyAgain\" id=\"CopyAgain\">Copy Again</item>\n <item action=\"CopySVG\" id=\"CopySVG\">Copy SVG</item>\n <item action=\"ViewSVG\" id=\"ViewSVG\">View SVG</item>\n <item action=\"ViewSource\" id=\"ViewSource\">View Source</item>\n <item action=\"SaveAs\" id=\"SaveAs\">Save As</item>\n <separator/>\n <item action=\"Help\" id=\"Help\">Help</item>\n <item action=\"About\" id=\"About\">About Adobe CVG Viewer...</item>\n</menu>";
5
+ export declare const xmlSample3 = "\n<!DOCTYPE web-app\n PUBLIC \"-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN\"\n \"http://java.sun.com/j2ee/dtds/web-app_2.2.dtd\">\n<web-app>\n\t<servlet>\n\t\t<servlet-name>\n cofaxCDS\n </servlet-name>\n\t\t<servlet-class>\n org.cofax.cds.CDSServlet\n </servlet-class>\n\t\t<init-param>\n\t\t\t<param-name>configGlossary:installationAt</param-name>\n\t\t\t<param-value>Philadelphia, PA</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>configGlossary:adminEmail</param-name>\n\t\t\t<param-value>ksm@pobox.com</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>configGlossary:poweredBy</param-name>\n\t\t\t<param-value>Cofax</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>configGlossary:poweredByIcon</param-name>\n\t\t\t<param-value>/images/cofax.gif</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>configGlossary:staticPath</param-name>\n\t\t\t<param-value>/content/static</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>templateProcessorClass</param-name>\n\t\t\t<param-value>org.cofax.WysiwygTemplate</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>templateLoaderClass</param-name>\n\t\t\t<param-value>org.cofax.FilesTemplateLoader</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>templatePath</param-name>\n\t\t\t<param-value>templates</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>templateOverridePath</param-name>\n\t\t\t<param-value></param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>defaultListTemplate</param-name>\n\t\t\t<param-value>listTemplate.htm</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>defaultFileTemplate</param-name>\n\t\t\t<param-value>articleTemplate.htm</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>useJSP</param-name>\n\t\t\t<param-value>false</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>jspListTemplate</param-name>\n\t\t\t<param-value>listTemplate.jsp</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>jspFileTemplate</param-name>\n\t\t\t<param-value>articleTemplate.jsp</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>cachePackageTagsTrack</param-name>\n\t\t\t<param-value>200</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>cachePackageTagsStore</param-name>\n\t\t\t<param-value>200</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>cachePackageTagsRefresh</param-name>\n\t\t\t<param-value>60</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>cacheTemplatesTrack</param-name>\n\t\t\t<param-value>100</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>cacheTemplatesStore</param-name>\n\t\t\t<param-value>50</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>cacheTemplatesRefresh</param-name>\n\t\t\t<param-value>15</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>cachePagesTrack</param-name>\n\t\t\t<param-value>200</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>cachePagesStore</param-name>\n\t\t\t<param-value>100</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>cachePagesRefresh</param-name>\n\t\t\t<param-value>10</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>cachePagesDirtyRead</param-name>\n\t\t\t<param-value>10</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>searchEngineListTemplate</param-name>\n\t\t\t<param-value>forSearchEnginesList.htm</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>searchEngineFileTemplate</param-name>\n\t\t\t<param-value>forSearchEngines.htm</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>searchEngineRobotsDb</param-name>\n\t\t\t<param-value>WEB-INF/robots.db</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>useDataStore</param-name>\n\t\t\t<param-value>true</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>dataStoreClass</param-name>\n\t\t\t<param-value>org.cofax.SqlDataStore</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>redirectionClass</param-name>\n\t\t\t<param-value>org.cofax.SqlRedirection</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>dataStoreName</param-name>\n\t\t\t<param-value>cofax</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>dataStoreDriver</param-name>\n\t\t\t<param-value>com.microsoft.jdbc.sqlserver.SQLServerDriver</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>dataStoreUrl</param-name>\n\t\t\t<param-value>jdbc:microsoft:sqlserver://LOCALHOST:1433;DatabaseName=goon</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>dataStoreUser</param-name>\n\t\t\t<param-value>sa</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>dataStorePassword</param-name>\n\t\t\t<param-value></param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>dataStoreTestQuery</param-name>\n\t\t\t<param-value>SET NOCOUNT ON;select test='test';</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>dataStoreLogFile</param-name>\n\t\t\t<param-value>/usr/local/tomcat/logs/datastore.log</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>dataStoreInitConns</param-name>\n\t\t\t<param-value>10</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>dataStoreMaxConns</param-name>\n\t\t\t<param-value>100</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>dataStoreConnUsageLimit</param-name>\n\t\t\t<param-value>100</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>dataStoreLogLevel</param-name>\n\t\t\t<param-value>debug</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>maxUrlLength</param-name>\n\t\t\t<param-value>500</param-value>\n\t\t</init-param>\n\t</servlet>\n\t<servlet>\n\t\t<servlet-name>\n cofaxEmail\n </servlet-name>\n\t\t<servlet-class>\n org.cofax.cds.EmailServlet\n </servlet-class>\n\t\t<init-param>\n\t\t\t<param-name>mailHost</param-name>\n\t\t\t<param-value>mail1</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>mailHostOverride</param-name>\n\t\t\t<param-value>mail2</param-value>\n\t\t</init-param>\n\t</servlet>\n\t<servlet>\n\t\t<servlet-name>\n cofaxAdmin\n </servlet-name>\n\t\t<servlet-class>\n org.cofax.cds.AdminServlet\n </servlet-class>\n\t</servlet>\n\t<servlet>\n\t\t<servlet-name>\n fileServlet\n </servlet-name>\n\t\t<servlet-class>\n org.cofax.cds.FileServlet\n </servlet-class>\n\t</servlet>\n\t<servlet>\n\t\t<servlet-name>\n cofaxTools\n </servlet-name>\n\t\t<servlet-class>\n org.cofax.cms.CofaxToolsServlet\n </servlet-class>\n\t\t<init-param>\n\t\t\t<param-name>templatePath</param-name>\n\t\t\t<param-value>toolstemplates/</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>log</param-name>\n\t\t\t<param-value>1</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>logLocation</param-name>\n\t\t\t<param-value>/usr/local/tomcat/logs/CofaxTools.log</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>logMaxSize</param-name>\n\t\t\t<param-value></param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>dataLog</param-name>\n\t\t\t<param-value>1</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>dataLogLocation</param-name>\n\t\t\t<param-value>/usr/local/tomcat/logs/dataLog.log</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>dataLogMaxSize</param-name>\n\t\t\t<param-value></param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>removePageCache</param-name>\n\t\t\t<param-value>/content/admin/remove?cache=pages&id=</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>removeTemplateCache</param-name>\n\t\t\t<param-value>/content/admin/remove?cache=templates&id=</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>fileTransferFolder</param-name>\n\t\t\t<param-value>/usr/local/tomcat/webapps/content/fileTransferFolder</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>lookInContext</param-name>\n\t\t\t<param-value>1</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>adminGroupID</param-name>\n\t\t\t<param-value>4</param-value>\n\t\t</init-param>\n\t\t<init-param>\n\t\t\t<param-name>betaServer</param-name>\n\t\t\t<param-value>true</param-value>\n\t\t</init-param>\n\t</servlet>\n\t<servlet-mapping>\n\t\t<servlet-name>\n cofaxCDS\n </servlet-name>\n\t\t<url-pattern>\n /\n </url-pattern>\n\t</servlet-mapping>\n\t<servlet-mapping>\n\t\t<servlet-name>\n cofaxEmail\n </servlet-name>\n\t\t<url-pattern>\n /cofaxutil/aemail/*\n </url-pattern>\n\t</servlet-mapping>\n\t<servlet-mapping>\n\t\t<servlet-name>\n cofaxAdmin\n </servlet-name>\n\t\t<url-pattern>\n /admin/*\n </url-pattern>\n\t</servlet-mapping>\n\t<servlet-mapping>\n\t\t<servlet-name>\n fileServlet\n </servlet-name>\n\t\t<url-pattern>\n /static/*\n </url-pattern>\n\t</servlet-mapping>\n\t<servlet-mapping>\n\t\t<servlet-name>\n cofaxTools\n </servlet-name>\n\t\t<url-pattern>\n /tools/*\n </url-pattern>\n\t</servlet-mapping>\n\t<taglib>\n\t\t<taglib-uri>cofax.tld</taglib-uri>\n\t\t<taglib-location>/WEB-INF/tlds/cofax.tld</taglib-location>\n\t</taglib>\n</web-app>\n";