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);