open-agreements 0.7.3 → 0.7.5

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 (98) hide show
  1. package/README.md +96 -294
  2. package/dist/commands/list.js +1 -1
  3. package/dist/commands/list.js.map +1 -1
  4. package/dist/core/checklist/docx-import.d.ts.map +1 -1
  5. package/dist/core/metadata.d.ts +1 -0
  6. package/dist/core/metadata.d.ts.map +1 -1
  7. package/dist/core/metadata.js +1 -0
  8. package/dist/core/metadata.js.map +1 -1
  9. package/dist/core/recipe/patcher.js +0 -24
  10. package/dist/core/recipe/patcher.js.map +1 -1
  11. package/dist/core/recipe/verifier.js.map +1 -1
  12. package/dist/core/selector.js +0 -1
  13. package/dist/core/selector.js.map +1 -1
  14. package/dist/core/template-search.d.ts +36 -0
  15. package/dist/core/template-search.d.ts.map +1 -0
  16. package/dist/core/template-search.js +84 -0
  17. package/dist/core/template-search.js.map +1 -0
  18. package/gemini-extension.json +1 -1
  19. package/node_modules/@usejunior/docx-core/dist/.tsbuildinfo +1 -1
  20. package/node_modules/@usejunior/docx-core/dist/atomizer.d.ts.map +1 -1
  21. package/node_modules/@usejunior/docx-core/dist/atomizer.js +12 -4
  22. package/node_modules/@usejunior/docx-core/dist/atomizer.js.map +1 -1
  23. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/atomLcs.d.ts +0 -14
  24. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/atomLcs.d.ts.map +1 -1
  25. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/atomLcs.js +31 -2
  26. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/atomLcs.js.map +1 -1
  27. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/documentReconstructor.d.ts +11 -0
  28. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/documentReconstructor.d.ts.map +1 -1
  29. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/documentReconstructor.js +180 -6
  30. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/documentReconstructor.js.map +1 -1
  31. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/hierarchicalLcs.d.ts +14 -4
  32. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/hierarchicalLcs.d.ts.map +1 -1
  33. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/hierarchicalLcs.js +344 -60
  34. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/hierarchicalLcs.js.map +1 -1
  35. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/inPlaceModifier.d.ts +35 -1
  36. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/inPlaceModifier.d.ts.map +1 -1
  37. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/inPlaceModifier.js +186 -12
  38. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/inPlaceModifier.js.map +1 -1
  39. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/pipeline.d.ts.map +1 -1
  40. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/pipeline.js +31 -13
  41. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/pipeline.js.map +1 -1
  42. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/xmlToWmlElement.d.ts.map +1 -1
  43. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/xmlToWmlElement.js +3 -2
  44. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/xmlToWmlElement.js.map +1 -1
  45. package/node_modules/@usejunior/docx-core/dist/format-detection.d.ts.map +1 -1
  46. package/node_modules/@usejunior/docx-core/dist/format-detection.js +2 -1
  47. package/node_modules/@usejunior/docx-core/dist/format-detection.js.map +1 -1
  48. package/node_modules/@usejunior/docx-core/dist/move-detection.d.ts.map +1 -1
  49. package/node_modules/@usejunior/docx-core/dist/move-detection.js +3 -4
  50. package/node_modules/@usejunior/docx-core/dist/move-detection.js.map +1 -1
  51. package/node_modules/@usejunior/docx-core/dist/primitives/comments.d.ts +2 -2
  52. package/node_modules/@usejunior/docx-core/dist/primitives/comments.d.ts.map +1 -1
  53. package/node_modules/@usejunior/docx-core/dist/primitives/comments.js +7 -2
  54. package/node_modules/@usejunior/docx-core/dist/primitives/comments.js.map +1 -1
  55. package/node_modules/@usejunior/docx-core/dist/primitives/document.d.ts +2 -2
  56. package/node_modules/@usejunior/docx-core/dist/primitives/document.d.ts.map +1 -1
  57. package/node_modules/@usejunior/docx-core/dist/primitives/dom-helpers.d.ts +1 -5
  58. package/node_modules/@usejunior/docx-core/dist/primitives/dom-helpers.d.ts.map +1 -1
  59. package/node_modules/@usejunior/docx-core/dist/primitives/dom-helpers.js +12 -25
  60. package/node_modules/@usejunior/docx-core/dist/primitives/dom-helpers.js.map +1 -1
  61. package/node_modules/@usejunior/docx-core/dist/primitives/layout.d.ts.map +1 -1
  62. package/node_modules/@usejunior/docx-core/dist/primitives/layout.js +4 -6
  63. package/node_modules/@usejunior/docx-core/dist/primitives/layout.js.map +1 -1
  64. package/node_modules/@usejunior/docx-core/dist/primitives/xml.d.ts.map +1 -1
  65. package/node_modules/@usejunior/docx-core/dist/primitives/xml.js +2 -0
  66. package/node_modules/@usejunior/docx-core/dist/primitives/xml.js.map +1 -1
  67. package/node_modules/@usejunior/docx-core/package.json +3 -3
  68. package/node_modules/@xmldom/xmldom/CHANGELOG.md +939 -0
  69. package/node_modules/{@usejunior/docx-core/node_modules/@xmldom → @xmldom}/xmldom/SECURITY.md +8 -8
  70. package/node_modules/@xmldom/xmldom/index.d.ts +1664 -0
  71. package/node_modules/{@usejunior/docx-core/node_modules/@xmldom → @xmldom}/xmldom/lib/.eslintrc.yml +1 -0
  72. package/node_modules/@xmldom/xmldom/lib/conventions.js +429 -0
  73. package/node_modules/@xmldom/xmldom/lib/dom-parser.js +586 -0
  74. package/node_modules/@xmldom/xmldom/lib/dom.js +3192 -0
  75. package/node_modules/{@usejunior/docx-core/node_modules/@xmldom → @xmldom}/xmldom/lib/entities.js +14 -9
  76. package/node_modules/@xmldom/xmldom/lib/errors.js +202 -0
  77. package/node_modules/@xmldom/xmldom/lib/grammar.js +533 -0
  78. package/node_modules/@xmldom/xmldom/lib/index.js +41 -0
  79. package/node_modules/@xmldom/xmldom/lib/sax.js +929 -0
  80. package/node_modules/{@usejunior/docx-core/node_modules/@xmldom → @xmldom}/xmldom/package.json +24 -21
  81. package/node_modules/{@usejunior/docx-core/node_modules/@xmldom → @xmldom}/xmldom/readme.md +56 -48
  82. package/package.json +4 -4
  83. package/skills/cloud-service-agreement/SKILL.md +1 -1
  84. package/skills/cloud-service-agreement/template-filling-execution.md +92 -0
  85. package/skills/nda/SKILL.md +1 -1
  86. package/skills/nda/template-filling-execution.md +92 -0
  87. package/skills/open-agreements/SKILL.md +1 -1
  88. package/skills/open-agreements/template-filling-execution.md +92 -0
  89. package/skills/safe/SKILL.md +1 -1
  90. package/skills/safe/template-filling-execution.md +92 -0
  91. package/node_modules/@usejunior/docx-core/node_modules/@xmldom/xmldom/CHANGELOG.md +0 -468
  92. package/node_modules/@usejunior/docx-core/node_modules/@xmldom/xmldom/index.d.ts +0 -43
  93. package/node_modules/@usejunior/docx-core/node_modules/@xmldom/xmldom/lib/conventions.js +0 -203
  94. package/node_modules/@usejunior/docx-core/node_modules/@xmldom/xmldom/lib/dom-parser.js +0 -322
  95. package/node_modules/@usejunior/docx-core/node_modules/@xmldom/xmldom/lib/dom.js +0 -1879
  96. package/node_modules/@usejunior/docx-core/node_modules/@xmldom/xmldom/lib/index.js +0 -4
  97. package/node_modules/@usejunior/docx-core/node_modules/@xmldom/xmldom/lib/sax.js +0 -662
  98. /package/node_modules/{@usejunior/docx-core/node_modules/@xmldom → @xmldom}/xmldom/LICENSE +0 -0
@@ -1,4 +0,0 @@
1
- var dom = require('./dom')
2
- exports.DOMImplementation = dom.DOMImplementation
3
- exports.XMLSerializer = dom.XMLSerializer
4
- exports.DOMParser = require('./dom-parser').DOMParser
@@ -1,662 +0,0 @@
1
- var NAMESPACE = require("./conventions").NAMESPACE;
2
-
3
- //[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
4
- //[4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
5
- //[5] Name ::= NameStartChar (NameChar)*
6
- var nameStartChar = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]///\u10000-\uEFFFF
7
- var nameChar = new RegExp("[\\-\\.0-9"+nameStartChar.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]");
8
- var tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\:'+nameStartChar.source+nameChar.source+'*)?$');
9
- //var tagNamePattern = /^[a-zA-Z_][\w\-\.]*(?:\:[a-zA-Z_][\w\-\.]*)?$/
10
- //var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',')
11
-
12
- //S_TAG, S_ATTR, S_EQ, S_ATTR_NOQUOT_VALUE
13
- //S_ATTR_SPACE, S_ATTR_END, S_TAG_SPACE, S_TAG_CLOSE
14
- var S_TAG = 0;//tag name offerring
15
- var S_ATTR = 1;//attr name offerring
16
- var S_ATTR_SPACE=2;//attr name end and space offer
17
- var S_EQ = 3;//=space?
18
- var S_ATTR_NOQUOT_VALUE = 4;//attr value(no quot value only)
19
- var S_ATTR_END = 5;//attr value end and no space(quot end)
20
- var S_TAG_SPACE = 6;//(attr value end || tag end ) && (space offer)
21
- var S_TAG_CLOSE = 7;//closed el<el />
22
-
23
- /**
24
- * Creates an error that will not be caught by XMLReader aka the SAX parser.
25
- *
26
- * @param {string} message
27
- * @param {any?} locator Optional, can provide details about the location in the source
28
- * @constructor
29
- */
30
- function ParseError(message, locator) {
31
- this.message = message
32
- this.locator = locator
33
- if(Error.captureStackTrace) Error.captureStackTrace(this, ParseError);
34
- }
35
- ParseError.prototype = new Error();
36
- ParseError.prototype.name = ParseError.name
37
-
38
- function XMLReader(){
39
-
40
- }
41
-
42
- XMLReader.prototype = {
43
- parse:function(source,defaultNSMap,entityMap){
44
- var domBuilder = this.domBuilder;
45
- domBuilder.startDocument();
46
- _copy(defaultNSMap ,defaultNSMap = {})
47
- parse(source,defaultNSMap,entityMap,
48
- domBuilder,this.errorHandler);
49
- domBuilder.endDocument();
50
- }
51
- }
52
- function parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){
53
- function fixedFromCharCode(code) {
54
- // String.prototype.fromCharCode does not supports
55
- // > 2 bytes unicode chars directly
56
- if (code > 0xffff) {
57
- code -= 0x10000;
58
- var surrogate1 = 0xd800 + (code >> 10)
59
- , surrogate2 = 0xdc00 + (code & 0x3ff);
60
-
61
- return String.fromCharCode(surrogate1, surrogate2);
62
- } else {
63
- return String.fromCharCode(code);
64
- }
65
- }
66
- function entityReplacer(a){
67
- var k = a.slice(1,-1);
68
- if (Object.hasOwnProperty.call(entityMap, k)) {
69
- return entityMap[k];
70
- }else if(k.charAt(0) === '#'){
71
- return fixedFromCharCode(parseInt(k.substr(1).replace('x','0x')))
72
- }else{
73
- errorHandler.error('entity not found:'+a);
74
- return a;
75
- }
76
- }
77
- function appendText(end){//has some bugs
78
- if(end>start){
79
- var xt = source.substring(start,end).replace(/&#?\w+;/g,entityReplacer);
80
- locator&&position(start);
81
- domBuilder.characters(xt,0,end-start);
82
- start = end
83
- }
84
- }
85
- function position(p,m){
86
- while(p>=lineEnd && (m = linePattern.exec(source))){
87
- lineStart = m.index;
88
- lineEnd = lineStart + m[0].length;
89
- locator.lineNumber++;
90
- //console.log('line++:',locator,startPos,endPos)
91
- }
92
- locator.columnNumber = p-lineStart+1;
93
- }
94
- var lineStart = 0;
95
- var lineEnd = 0;
96
- var linePattern = /.*(?:\r\n?|\n)|.*$/g
97
- var locator = domBuilder.locator;
98
-
99
- var parseStack = [{currentNSMap:defaultNSMapCopy}]
100
- var closeMap = {};
101
- var start = 0;
102
- while(true){
103
- try{
104
- var tagStart = source.indexOf('<',start);
105
- if(tagStart<0){
106
- if(!source.substr(start).match(/^\s*$/)){
107
- var doc = domBuilder.doc;
108
- var text = doc.createTextNode(source.substr(start));
109
- doc.appendChild(text);
110
- domBuilder.currentElement = text;
111
- }
112
- return;
113
- }
114
- if(tagStart>start){
115
- appendText(tagStart);
116
- }
117
- switch(source.charAt(tagStart+1)){
118
- case '/':
119
- var end = source.indexOf('>',tagStart+3);
120
- var tagName = source.substring(tagStart + 2, end).replace(/[ \t\n\r]+$/g, '');
121
- var config = parseStack.pop();
122
- if(end<0){
123
-
124
- tagName = source.substring(tagStart+2).replace(/[\s<].*/,'');
125
- errorHandler.error("end tag name: "+tagName+' is not complete:'+config.tagName);
126
- end = tagStart+1+tagName.length;
127
- }else if(tagName.match(/\s</)){
128
- tagName = tagName.replace(/[\s<].*/,'');
129
- errorHandler.error("end tag name: "+tagName+' maybe not complete');
130
- end = tagStart+1+tagName.length;
131
- }
132
- var localNSMap = config.localNSMap;
133
- var endMatch = config.tagName == tagName;
134
- var endIgnoreCaseMach = endMatch || config.tagName&&config.tagName.toLowerCase() == tagName.toLowerCase()
135
- if(endIgnoreCaseMach){
136
- domBuilder.endElement(config.uri,config.localName,tagName);
137
- if(localNSMap){
138
- for (var prefix in localNSMap) {
139
- if (Object.prototype.hasOwnProperty.call(localNSMap, prefix)) {
140
- domBuilder.endPrefixMapping(prefix);
141
- }
142
- }
143
- }
144
- if(!endMatch){
145
- errorHandler.fatalError("end tag name: "+tagName+' is not match the current start tagName:'+config.tagName ); // No known test case
146
- }
147
- }else{
148
- parseStack.push(config)
149
- }
150
-
151
- end++;
152
- break;
153
- // end elment
154
- case '?':// <?...?>
155
- locator&&position(tagStart);
156
- end = parseInstruction(source,tagStart,domBuilder);
157
- break;
158
- case '!':// <!doctype,<![CDATA,<!--
159
- locator&&position(tagStart);
160
- end = parseDCC(source,tagStart,domBuilder,errorHandler);
161
- break;
162
- default:
163
- locator&&position(tagStart);
164
- var el = new ElementAttributes();
165
- var currentNSMap = parseStack[parseStack.length-1].currentNSMap;
166
- //elStartEnd
167
- var end = parseElementStartPart(source,tagStart,el,currentNSMap,entityReplacer,errorHandler);
168
- var len = el.length;
169
-
170
-
171
- if(!el.closed && fixSelfClosed(source,end,el.tagName,closeMap)){
172
- el.closed = true;
173
- if(!entityMap.nbsp){
174
- errorHandler.warning('unclosed xml attribute');
175
- }
176
- }
177
- if(locator && len){
178
- var locator2 = copyLocator(locator,{});
179
- //try{//attribute position fixed
180
- for(var i = 0;i<len;i++){
181
- var a = el[i];
182
- position(a.offset);
183
- a.locator = copyLocator(locator,{});
184
- }
185
- domBuilder.locator = locator2
186
- if(appendElement(el,domBuilder,currentNSMap)){
187
- parseStack.push(el)
188
- }
189
- domBuilder.locator = locator;
190
- }else{
191
- if(appendElement(el,domBuilder,currentNSMap)){
192
- parseStack.push(el)
193
- }
194
- }
195
-
196
- if (NAMESPACE.isHTML(el.uri) && !el.closed) {
197
- end = parseHtmlSpecialContent(source,end,el.tagName,entityReplacer,domBuilder)
198
- } else {
199
- end++;
200
- }
201
- }
202
- }catch(e){
203
- if (e instanceof ParseError) {
204
- throw e;
205
- }
206
- errorHandler.error('element parse error: '+e)
207
- end = -1;
208
- }
209
- if(end>start){
210
- start = end;
211
- }else{
212
- //TODO: 这里有可能sax回退,有位置错误风险
213
- appendText(Math.max(tagStart,start)+1);
214
- }
215
- }
216
- }
217
- function copyLocator(f,t){
218
- t.lineNumber = f.lineNumber;
219
- t.columnNumber = f.columnNumber;
220
- return t;
221
- }
222
-
223
- /**
224
- * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack);
225
- * @return end of the elementStartPart(end of elementEndPart for selfClosed el)
226
- */
227
- function parseElementStartPart(source,start,el,currentNSMap,entityReplacer,errorHandler){
228
-
229
- /**
230
- * @param {string} qname
231
- * @param {string} value
232
- * @param {number} startIndex
233
- */
234
- function addAttribute(qname, value, startIndex) {
235
- if (el.attributeNames.hasOwnProperty(qname)) {
236
- errorHandler.fatalError('Attribute ' + qname + ' redefined')
237
- }
238
- el.addValue(
239
- qname,
240
- // @see https://www.w3.org/TR/xml/#AVNormalize
241
- // since the xmldom sax parser does not "interpret" DTD the following is not implemented:
242
- // - recursive replacement of (DTD) entity references
243
- // - trimming and collapsing multiple spaces into a single one for attributes that are not of type CDATA
244
- value.replace(/[\t\n\r]/g, ' ').replace(/&#?\w+;/g, entityReplacer),
245
- startIndex
246
- )
247
- }
248
- var attrName;
249
- var value;
250
- var p = ++start;
251
- var s = S_TAG;//status
252
- while(true){
253
- var c = source.charAt(p);
254
- switch(c){
255
- case '=':
256
- if(s === S_ATTR){//attrName
257
- attrName = source.slice(start,p);
258
- s = S_EQ;
259
- }else if(s === S_ATTR_SPACE){
260
- s = S_EQ;
261
- }else{
262
- //fatalError: equal must after attrName or space after attrName
263
- throw new Error('attribute equal must after attrName'); // No known test case
264
- }
265
- break;
266
- case '\'':
267
- case '"':
268
- if(s === S_EQ || s === S_ATTR //|| s == S_ATTR_SPACE
269
- ){//equal
270
- if(s === S_ATTR){
271
- errorHandler.warning('attribute value must after "="')
272
- attrName = source.slice(start,p)
273
- }
274
- start = p+1;
275
- p = source.indexOf(c,start)
276
- if(p>0){
277
- value = source.slice(start, p);
278
- addAttribute(attrName, value, start-1);
279
- s = S_ATTR_END;
280
- }else{
281
- //fatalError: no end quot match
282
- throw new Error('attribute value no end \''+c+'\' match');
283
- }
284
- }else if(s == S_ATTR_NOQUOT_VALUE){
285
- value = source.slice(start, p);
286
- addAttribute(attrName, value, start);
287
- errorHandler.warning('attribute "'+attrName+'" missed start quot('+c+')!!');
288
- start = p+1;
289
- s = S_ATTR_END
290
- }else{
291
- //fatalError: no equal before
292
- throw new Error('attribute value must after "="'); // No known test case
293
- }
294
- break;
295
- case '/':
296
- switch(s){
297
- case S_TAG:
298
- el.setTagName(source.slice(start,p));
299
- case S_ATTR_END:
300
- case S_TAG_SPACE:
301
- case S_TAG_CLOSE:
302
- s =S_TAG_CLOSE;
303
- el.closed = true;
304
- case S_ATTR_NOQUOT_VALUE:
305
- case S_ATTR:
306
- break;
307
- case S_ATTR_SPACE:
308
- el.closed = true;
309
- break;
310
- //case S_EQ:
311
- default:
312
- throw new Error("attribute invalid close char('/')") // No known test case
313
- }
314
- break;
315
- case ''://end document
316
- errorHandler.error('unexpected end of input');
317
- if(s == S_TAG){
318
- el.setTagName(source.slice(start,p));
319
- }
320
- return p;
321
- case '>':
322
- switch(s){
323
- case S_TAG:
324
- el.setTagName(source.slice(start,p));
325
- case S_ATTR_END:
326
- case S_TAG_SPACE:
327
- case S_TAG_CLOSE:
328
- break;//normal
329
- case S_ATTR_NOQUOT_VALUE://Compatible state
330
- case S_ATTR:
331
- value = source.slice(start,p);
332
- if(value.slice(-1) === '/'){
333
- el.closed = true;
334
- value = value.slice(0,-1)
335
- }
336
- case S_ATTR_SPACE:
337
- if(s === S_ATTR_SPACE){
338
- value = attrName;
339
- }
340
- if(s == S_ATTR_NOQUOT_VALUE){
341
- errorHandler.warning('attribute "'+value+'" missed quot(")!');
342
- addAttribute(attrName, value, start)
343
- }else{
344
- if(!NAMESPACE.isHTML(currentNSMap['']) || !value.match(/^(?:disabled|checked|selected)$/i)){
345
- errorHandler.warning('attribute "'+value+'" missed value!! "'+value+'" instead!!')
346
- }
347
- addAttribute(value, value, start)
348
- }
349
- break;
350
- case S_EQ:
351
- throw new Error('attribute value missed!!');
352
- }
353
- // console.log(tagName,tagNamePattern,tagNamePattern.test(tagName))
354
- return p;
355
- /*xml space '\x20' | #x9 | #xD | #xA; */
356
- case '\u0080':
357
- c = ' ';
358
- default:
359
- if(c<= ' '){//space
360
- switch(s){
361
- case S_TAG:
362
- el.setTagName(source.slice(start,p));//tagName
363
- s = S_TAG_SPACE;
364
- break;
365
- case S_ATTR:
366
- attrName = source.slice(start,p)
367
- s = S_ATTR_SPACE;
368
- break;
369
- case S_ATTR_NOQUOT_VALUE:
370
- var value = source.slice(start, p);
371
- errorHandler.warning('attribute "'+value+'" missed quot(")!!');
372
- addAttribute(attrName, value, start)
373
- case S_ATTR_END:
374
- s = S_TAG_SPACE;
375
- break;
376
- //case S_TAG_SPACE:
377
- //case S_EQ:
378
- //case S_ATTR_SPACE:
379
- // void();break;
380
- //case S_TAG_CLOSE:
381
- //ignore warning
382
- }
383
- }else{//not space
384
- //S_TAG, S_ATTR, S_EQ, S_ATTR_NOQUOT_VALUE
385
- //S_ATTR_SPACE, S_ATTR_END, S_TAG_SPACE, S_TAG_CLOSE
386
- switch(s){
387
- //case S_TAG:void();break;
388
- //case S_ATTR:void();break;
389
- //case S_ATTR_NOQUOT_VALUE:void();break;
390
- case S_ATTR_SPACE:
391
- var tagName = el.tagName;
392
- if (!NAMESPACE.isHTML(currentNSMap['']) || !attrName.match(/^(?:disabled|checked|selected)$/i)) {
393
- errorHandler.warning('attribute "'+attrName+'" missed value!! "'+attrName+'" instead2!!')
394
- }
395
- addAttribute(attrName, attrName, start);
396
- start = p;
397
- s = S_ATTR;
398
- break;
399
- case S_ATTR_END:
400
- errorHandler.warning('attribute space is required"'+attrName+'"!!')
401
- case S_TAG_SPACE:
402
- s = S_ATTR;
403
- start = p;
404
- break;
405
- case S_EQ:
406
- s = S_ATTR_NOQUOT_VALUE;
407
- start = p;
408
- break;
409
- case S_TAG_CLOSE:
410
- throw new Error("elements closed character '/' and '>' must be connected to");
411
- }
412
- }
413
- }//end outer switch
414
- //console.log('p++',p)
415
- p++;
416
- }
417
- }
418
- /**
419
- * @return true if has new namespace define
420
- */
421
- function appendElement(el,domBuilder,currentNSMap){
422
- var tagName = el.tagName;
423
- var localNSMap = null;
424
- //var currentNSMap = parseStack[parseStack.length-1].currentNSMap;
425
- var i = el.length;
426
- while(i--){
427
- var a = el[i];
428
- var qName = a.qName;
429
- var value = a.value;
430
- var nsp = qName.indexOf(':');
431
- if(nsp>0){
432
- var prefix = a.prefix = qName.slice(0,nsp);
433
- var localName = qName.slice(nsp+1);
434
- var nsPrefix = prefix === 'xmlns' && localName
435
- }else{
436
- localName = qName;
437
- prefix = null
438
- nsPrefix = qName === 'xmlns' && ''
439
- }
440
- //can not set prefix,because prefix !== ''
441
- a.localName = localName ;
442
- //prefix == null for no ns prefix attribute
443
- if(nsPrefix !== false){//hack!!
444
- if(localNSMap == null){
445
- localNSMap = {}
446
- //console.log(currentNSMap,0)
447
- _copy(currentNSMap,currentNSMap={})
448
- //console.log(currentNSMap,1)
449
- }
450
- currentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;
451
- a.uri = NAMESPACE.XMLNS
452
- domBuilder.startPrefixMapping(nsPrefix, value)
453
- }
454
- }
455
- var i = el.length;
456
- while(i--){
457
- a = el[i];
458
- var prefix = a.prefix;
459
- if(prefix){//no prefix attribute has no namespace
460
- if(prefix === 'xml'){
461
- a.uri = NAMESPACE.XML;
462
- }if(prefix !== 'xmlns'){
463
- a.uri = currentNSMap[prefix || '']
464
-
465
- //{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)}
466
- }
467
- }
468
- }
469
- var nsp = tagName.indexOf(':');
470
- if(nsp>0){
471
- prefix = el.prefix = tagName.slice(0,nsp);
472
- localName = el.localName = tagName.slice(nsp+1);
473
- }else{
474
- prefix = null;//important!!
475
- localName = el.localName = tagName;
476
- }
477
- //no prefix element has default namespace
478
- var ns = el.uri = currentNSMap[prefix || ''];
479
- domBuilder.startElement(ns,localName,tagName,el);
480
- //endPrefixMapping and startPrefixMapping have not any help for dom builder
481
- //localNSMap = null
482
- if(el.closed){
483
- domBuilder.endElement(ns,localName,tagName);
484
- if(localNSMap){
485
- for (prefix in localNSMap) {
486
- if (Object.prototype.hasOwnProperty.call(localNSMap, prefix)) {
487
- domBuilder.endPrefixMapping(prefix);
488
- }
489
- }
490
- }
491
- }else{
492
- el.currentNSMap = currentNSMap;
493
- el.localNSMap = localNSMap;
494
- //parseStack.push(el);
495
- return true;
496
- }
497
- }
498
- function parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){
499
- if(/^(?:script|textarea)$/i.test(tagName)){
500
- var elEndStart = source.indexOf('</'+tagName+'>',elStartEnd);
501
- var text = source.substring(elStartEnd+1,elEndStart);
502
- if(/[&<]/.test(text)){
503
- if(/^script$/i.test(tagName)){
504
- //if(!/\]\]>/.test(text)){
505
- //lexHandler.startCDATA();
506
- domBuilder.characters(text,0,text.length);
507
- //lexHandler.endCDATA();
508
- return elEndStart;
509
- //}
510
- }//}else{//text area
511
- text = text.replace(/&#?\w+;/g,entityReplacer);
512
- domBuilder.characters(text,0,text.length);
513
- return elEndStart;
514
- //}
515
-
516
- }
517
- }
518
- return elStartEnd+1;
519
- }
520
- function fixSelfClosed(source,elStartEnd,tagName,closeMap){
521
- //if(tagName in closeMap){
522
- var pos = closeMap[tagName];
523
- if(pos == null){
524
- //console.log(tagName)
525
- pos = source.lastIndexOf('</'+tagName+'>')
526
- if(pos<elStartEnd){//忘记闭合
527
- pos = source.lastIndexOf('</'+tagName)
528
- }
529
- closeMap[tagName] =pos
530
- }
531
- return pos<elStartEnd;
532
- //}
533
- }
534
-
535
- function _copy (source, target) {
536
- for (var n in source) {
537
- if (Object.prototype.hasOwnProperty.call(source, n)) {
538
- target[n] = source[n];
539
- }
540
- }
541
- }
542
-
543
- function parseDCC(source,start,domBuilder,errorHandler){//sure start with '<!'
544
- var next= source.charAt(start+2)
545
- switch(next){
546
- case '-':
547
- if(source.charAt(start + 3) === '-'){
548
- var end = source.indexOf('-->',start+4);
549
- //append comment source.substring(4,end)//<!--
550
- if(end>start){
551
- domBuilder.comment(source,start+4,end-start-4);
552
- return end+3;
553
- }else{
554
- errorHandler.error("Unclosed comment");
555
- return -1;
556
- }
557
- }else{
558
- //error
559
- return -1;
560
- }
561
- default:
562
- if(source.substr(start+3,6) == 'CDATA['){
563
- var end = source.indexOf(']]>',start+9);
564
- domBuilder.startCDATA();
565
- domBuilder.characters(source,start+9,end-start-9);
566
- domBuilder.endCDATA()
567
- return end+3;
568
- }
569
- //<!DOCTYPE
570
- //startDTD(java.lang.String name, java.lang.String publicId, java.lang.String systemId)
571
- var matchs = split(source,start);
572
- var len = matchs.length;
573
- if(len>1 && /!doctype/i.test(matchs[0][0])){
574
- var name = matchs[1][0];
575
- var pubid = false;
576
- var sysid = false;
577
- if(len>3){
578
- if(/^public$/i.test(matchs[2][0])){
579
- pubid = matchs[3][0];
580
- sysid = len>4 && matchs[4][0];
581
- }else if(/^system$/i.test(matchs[2][0])){
582
- sysid = matchs[3][0];
583
- }
584
- }
585
- var lastMatch = matchs[len-1]
586
- domBuilder.startDTD(name, pubid, sysid);
587
- domBuilder.endDTD();
588
-
589
- return lastMatch.index+lastMatch[0].length
590
- }
591
- }
592
- return -1;
593
- }
594
-
595
-
596
-
597
- function parseInstruction(source,start,domBuilder){
598
- var end = source.indexOf('?>',start);
599
- if(end){
600
- var match = source.substring(start,end).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);
601
- if(match){
602
- var len = match[0].length;
603
- domBuilder.processingInstruction(match[1], match[2]) ;
604
- return end+2;
605
- }else{//error
606
- return -1;
607
- }
608
- }
609
- return -1;
610
- }
611
-
612
- function ElementAttributes(){
613
- this.attributeNames = {}
614
- }
615
- ElementAttributes.prototype = {
616
- setTagName:function(tagName){
617
- if(!tagNamePattern.test(tagName)){
618
- throw new Error('invalid tagName:'+tagName)
619
- }
620
- this.tagName = tagName
621
- },
622
- addValue:function(qName, value, offset) {
623
- if(!tagNamePattern.test(qName)){
624
- throw new Error('invalid attribute:'+qName)
625
- }
626
- this.attributeNames[qName] = this.length;
627
- this[this.length++] = {qName:qName,value:value,offset:offset}
628
- },
629
- length:0,
630
- getLocalName:function(i){return this[i].localName},
631
- getLocator:function(i){return this[i].locator},
632
- getQName:function(i){return this[i].qName},
633
- getURI:function(i){return this[i].uri},
634
- getValue:function(i){return this[i].value}
635
- // ,getIndex:function(uri, localName)){
636
- // if(localName){
637
- //
638
- // }else{
639
- // var qName = uri
640
- // }
641
- // },
642
- // getValue:function(){return this.getValue(this.getIndex.apply(this,arguments))},
643
- // getType:function(uri,localName){}
644
- // getType:function(i){},
645
- }
646
-
647
-
648
-
649
- function split(source,start){
650
- var match;
651
- var buf = [];
652
- var reg = /'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;
653
- reg.lastIndex = start;
654
- reg.exec(source);//skip <
655
- while(match = reg.exec(source)){
656
- buf.push(match);
657
- if(match[1])return buf;
658
- }
659
- }
660
-
661
- exports.XMLReader = XMLReader;
662
- exports.ParseError = ParseError;