-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhtml2.json.handler.js
More file actions
74 lines (66 loc) · 2.14 KB
/
Copy pathhtml2.json.handler.js
File metadata and controls
74 lines (66 loc) · 2.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
goog.provide( 'htmlparser.example.handler.html2json' );
goog.requireType( 'htmlparser.typedef.Handler' );
var rootNode, currentNode, stack, xmlDeclaration;
/**
* @extends {htmlparser.typedef.Handler}
* @const
*/
htmlparser.example.handler.html2json = {
_init : function(){
rootNode = currentNode = [];
stack = [];
xmlDeclaration = '';
},
_getResult : function(){
if( typeof rootNode[ 0 ] !== 'number' ){
rootNode.unshift( 11 );
};
return rootNode;
},
onParseError : function( msg ){
throw msg;
},
onParseDocType : function( doctype ){
rootNode[ 0 ] = 9;
rootNode[ 1 ] = xmlDeclaration + doctype;
xmlDeclaration = '';
},
onParseStartTag : function( tag, attrs, empty, myIndex ){
var element = [ tag ];
if( attrs ){
element[ 1 ] = attrs;
};
currentNode.push( element );
if( !empty ){
stack.push( currentNode );
currentNode = element;
};
},
onParseEndTag : function( tag, isInvalidEndTagOmission, isMissingStartTag ){
if( isMissingStartTag ){
currentNode.push( '</' + tag + '>' );
} else if( !isInvalidEndTagOmission ){
if( tag === currentNode[ 0 ] ){
currentNode = stack.pop();
} else {
// error
};
};
},
onParseText : function( text ){
currentNode.push( text );
},
onParseComment : function( comment ){
currentNode.push( [ 8, comment ] );
},
onParseCDATASection : function( data ){
currentNode.push( [ 4, data ] );
},
onParseProcessingInstruction : function( data ){
if( rootNode.length === 0 && data.indexOf( 'xml ' ) === 0 ){
xmlDeclaration = '<?' + data + '?>';
} else {
currentNode.push( [ 7, data ] );
};
}
};