Mercurial Hosting > luan
comparison src/luan/modules/parsers/Html.java @ 1267:9fa8b8389578
add LuanTable.luan;
support metatable __gc();
add luan.sql;
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 12 Nov 2018 02:10:41 -0700 |
parents | 88b5b81cad4a |
children | 323743a7f317 |
comparison
equal
deleted
inserted
replaced
1266:05934fbf635a | 1267:9fa8b8389578 |
---|---|
2 | 2 |
3 import java.util.List; | 3 import java.util.List; |
4 import java.util.ArrayList; | 4 import java.util.ArrayList; |
5 import java.util.Set; | 5 import java.util.Set; |
6 import java.util.HashSet; | 6 import java.util.HashSet; |
7 import luan.LuanState; | |
7 import luan.LuanTable; | 8 import luan.LuanTable; |
8 import luan.lib.parser.Parser; | 9 import luan.lib.parser.Parser; |
9 import luan.lib.parser.ParseException; | 10 import luan.lib.parser.ParseException; |
10 | 11 |
11 | 12 |
12 public final class Html { | 13 public final class Html { |
13 | 14 |
14 public static LuanTable toList(String text,LuanTable containerTagsTbl) throws ParseException { | 15 public static LuanTable toList(LuanState luan,String text,LuanTable containerTagsTbl) |
15 return new Html(text,containerTagsTbl).parse(); | 16 throws ParseException |
16 } | 17 { |
17 | 18 return new Html(luan,text,containerTagsTbl).parse(); |
19 } | |
20 | |
21 private final LuanState luan; | |
18 private final Parser parser; | 22 private final Parser parser; |
19 private final Set<String> containerTags = new HashSet<String>(); | 23 private final Set<String> containerTags = new HashSet<String>(); |
20 | 24 |
21 private Html(String text,LuanTable containerTagsTbl) { | 25 private Html(LuanState luan,String text,LuanTable containerTagsTbl) { |
26 this.luan = luan; | |
22 this.parser = new Parser(text); | 27 this.parser = new Parser(text); |
23 for( Object v : containerTagsTbl.asList() ) { | 28 for( Object v : containerTagsTbl.asList() ) { |
24 containerTags.add((String)v); | 29 containerTags.add((String)v); |
25 } | 30 } |
26 } | 31 } |
54 sb.append( parser.currentChar() ); | 59 sb.append( parser.currentChar() ); |
55 parser.anyChar(); | 60 parser.anyChar(); |
56 } | 61 } |
57 if( sb.length() > 0 ) | 62 if( sb.length() > 0 ) |
58 list.add(sb.toString()); | 63 list.add(sb.toString()); |
59 return new LuanTable(list); | 64 return new LuanTable(luan,list); |
60 } | 65 } |
61 | 66 |
62 private LuanTable parseComment() { | 67 private LuanTable parseComment() { |
63 parser.begin(); | 68 parser.begin(); |
64 if( !parser.match("<!--") ) | 69 if( !parser.match("<!--") ) |
67 while( !parser.test("-->") ) { | 72 while( !parser.test("-->") ) { |
68 if( !parser.anyChar() ) | 73 if( !parser.anyChar() ) |
69 return parser.failure(null); | 74 return parser.failure(null); |
70 } | 75 } |
71 String text = parser.textFrom(start); | 76 String text = parser.textFrom(start); |
72 LuanTable tbl = new LuanTable(); | 77 LuanTable tbl = new LuanTable(luan); |
73 tbl.rawPut("type","comment"); | 78 tbl.rawPut("type","comment"); |
74 tbl.rawPut("text",text); | 79 tbl.rawPut("text",text); |
75 return parser.success(tbl); | 80 return parser.success(tbl); |
76 } | 81 } |
77 | 82 |
83 while( !parser.test("]]>") ) { | 88 while( !parser.test("]]>") ) { |
84 if( !parser.anyChar() ) | 89 if( !parser.anyChar() ) |
85 return parser.failure(null); | 90 return parser.failure(null); |
86 } | 91 } |
87 String text = parser.textFrom(start); | 92 String text = parser.textFrom(start); |
88 LuanTable tbl = new LuanTable(); | 93 LuanTable tbl = new LuanTable(luan); |
89 tbl.rawPut("type","cdata"); | 94 tbl.rawPut("type","cdata"); |
90 tbl.rawPut("text",text); | 95 tbl.rawPut("text",text); |
91 return parser.success(tbl); | 96 return parser.success(tbl); |
92 } | 97 } |
93 | 98 |
105 } | 110 } |
106 if( !parser.anyChar() ) | 111 if( !parser.anyChar() ) |
107 return parser.failure(null); | 112 return parser.failure(null); |
108 } | 113 } |
109 String text = parser.text.substring(start,end); | 114 String text = parser.text.substring(start,end); |
110 LuanTable tbl = new LuanTable(); | 115 LuanTable tbl = new LuanTable(luan); |
111 tbl.rawPut("type","container"); | 116 tbl.rawPut("type","container"); |
112 tbl.rawPut("tag",tag); | 117 tbl.rawPut("tag",tag); |
113 tbl.rawPut("text",text); | 118 tbl.rawPut("text",text); |
114 return parser.success(tbl); | 119 return parser.success(tbl); |
115 } | 120 } |
122 parser.match('/'); | 127 parser.match('/'); |
123 if( !matchNameChar() ) | 128 if( !matchNameChar() ) |
124 return parser.failure(null); | 129 return parser.failure(null); |
125 while( matchNameChar() ); | 130 while( matchNameChar() ); |
126 String name = parser.textFrom(start).toLowerCase(); | 131 String name = parser.textFrom(start).toLowerCase(); |
127 LuanTable attributes = new LuanTable(); | 132 LuanTable attributes = new LuanTable(luan); |
128 String attrName; | 133 String attrName; |
129 while( (attrName = parseAttrName()) != null ) { | 134 while( (attrName = parseAttrName()) != null ) { |
130 String attrValue = parseAttrValue(); | 135 String attrValue = parseAttrValue(); |
131 attributes.rawPut( attrName, attrValue!=null ? attrValue : true ); | 136 attributes.rawPut( attrName, attrValue!=null ? attrValue : true ); |
132 } | 137 } |
133 while( matchSpace() ); | 138 while( matchSpace() ); |
134 boolean isEmpty = parser.match('/'); | 139 boolean isEmpty = parser.match('/'); |
135 if( !parser.match('>') ) | 140 if( !parser.match('>') ) |
136 return parser.failure(null); | 141 return parser.failure(null); |
137 LuanTable tbl = new LuanTable(); | 142 LuanTable tbl = new LuanTable(luan); |
138 tbl.rawPut("type","tag"); | 143 tbl.rawPut("type","tag"); |
139 tbl.rawPut("name",name); | 144 tbl.rawPut("name",name); |
140 tbl.rawPut("attributes",attributes); | 145 tbl.rawPut("attributes",attributes); |
141 tbl.rawPut("is_empty",isEmpty); | 146 tbl.rawPut("is_empty",isEmpty); |
142 return parser.success(tbl); | 147 return parser.success(tbl); |