Skip to content

Commit

Permalink
Change how Hpricot objects are instantiated.
Browse files Browse the repository at this point in the history
  • Loading branch information
nrk committed Jul 17, 2010
1 parent 2ff28f9 commit caf6151
Showing 1 changed file with 12 additions and 16 deletions.
28 changes: 12 additions & 16 deletions src/HpricotScanner.cs
Expand Up @@ -1056,11 +1056,7 @@ public class HpricotScanner {
} }
} }


private T H_ELE<T>(ScannerState state, Object sym, Object tag, Object attr, Object ec, Int32 raw, Int32 rawlen) where T : IHpricotDataContainer, new() { private IHpricotDataContainer H_ELE(IHpricotDataContainer ele, ScannerState state, Object sym, Object tag, Object attr, Object ec, Int32 raw, Int32 rawlen) {
// TODO: way ugly, isn't it?

T ele = new T();

if (ele is Hpricot.Element) { if (ele is Hpricot.Element) {
ElementData he = ele.GetData<ElementData>(); ElementData he = ele.GetData<ElementData>();


Expand Down Expand Up @@ -1175,8 +1171,8 @@ public class HpricotScanner {
} }


if (sym_emptytag.Equals(sym) || sym_stag.Equals(sym)) { if (sym_emptytag.Equals(sym) || sym_stag.Equals(sym)) {
Hpricot.Element ele = H_ELE<Hpricot.Element>(state, sym, tag, attr, ec, raw, rawlen); var ele = H_ELE(new Hpricot.Element(), state, sym, tag, attr, ec, raw, rawlen);
ElementData he = ele.GetData<ElementData>(); var he = ele.GetData<ElementData>();
he.Name = tag.GetHashCode(); he.Name = tag.GetHashCode();


if (!state.Xml) { if (!state.Xml) {
Expand Down Expand Up @@ -1263,11 +1259,10 @@ public class HpricotScanner {
} }


if (match == null) { if (match == null) {
Hpricot.BogusETag ele = H_ELE<Hpricot.BogusETag>(state, sym, tag, attr, ec, raw, rawlen); rb_hpricot_add(state.Focus, H_ELE(new Hpricot.BogusETag(), state, sym, tag, attr, ec, raw, rawlen));
rb_hpricot_add(state.Focus, ele as IHpricotDataContainer);
} }
else { else {
Hpricot.ETag ele = H_ELE<Hpricot.ETag>(state, sym, tag, attr, ec, raw, rawlen); var ele = H_ELE(new Hpricot.ETag(), state, sym, tag, attr, ec, raw, rawlen);
Debug.Assert(match is IHpricotDataContainer, "match is not an instance of IHpricotDataContainer"); Debug.Assert(match is IHpricotDataContainer, "match is not an instance of IHpricotDataContainer");
ElementData he = (match as Hpricot.Element).GetData<ElementData>(); ElementData he = (match as Hpricot.Element).GetData<ElementData>();


Expand All @@ -1281,10 +1276,11 @@ public class HpricotScanner {


} }
else if (sym_cdata.Equals(sym)) { else if (sym_cdata.Equals(sym)) {
rb_hpricot_add(state.Focus, H_ELE<Hpricot.CData>(state, sym, tag, attr, ec, raw, rawlen));
rb_hpricot_add(state.Focus, H_ELE(new Hpricot.CData(), state, sym, tag, attr, ec, raw, rawlen));
} }
else if (sym_comment.Equals(sym)) { else if (sym_comment.Equals(sym)) {
rb_hpricot_add(state.Focus, H_ELE<Hpricot.Comment>(state, sym, tag, attr, ec, raw, rawlen)); rb_hpricot_add(state.Focus, H_ELE(new Hpricot.Comment(), state, sym, tag, attr, ec, raw, rawlen));
} }
else if (sym_doctype.Equals(sym)) { else if (sym_doctype.Equals(sym)) {
if (state.Strict) { if (state.Strict) {
Expand All @@ -1293,7 +1289,7 @@ public class HpricotScanner {
(attr as Hash).Add(SymbolTable.StringToId("system_id"), MutableString.CreateAscii("http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd")); (attr as Hash).Add(SymbolTable.StringToId("system_id"), MutableString.CreateAscii("http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"));
(attr as Hash).Add(SymbolTable.StringToId("public_id"), MutableString.CreateAscii("-//W3C//DTD XHTML 1.0 Strict//EN")); (attr as Hash).Add(SymbolTable.StringToId("public_id"), MutableString.CreateAscii("-//W3C//DTD XHTML 1.0 Strict//EN"));
} }
rb_hpricot_add(state.Focus, H_ELE<Hpricot.DocumentType>(state, sym, tag, attr, ec, raw, rawlen)); rb_hpricot_add(state.Focus, H_ELE(new Hpricot.DocumentType(), state, sym, tag, attr, ec, raw, rawlen));
} }
else if (sym_procins.Equals(sym)) { else if (sym_procins.Equals(sym)) {
Debug.Assert(tag is MutableString, "tag is not an instance of MutableString"); Debug.Assert(tag is MutableString, "tag is not an instance of MutableString");
Expand All @@ -1303,7 +1299,7 @@ public class HpricotScanner {


tag = match.GetGroupValue(1); tag = match.GetGroupValue(1);
attr = match.GetGroupValue(2); attr = match.GetGroupValue(2);
rb_hpricot_add(state.Focus, H_ELE<Hpricot.ProcedureInstruction>(state, sym, tag, attr, ec, raw, rawlen)); rb_hpricot_add(state.Focus, H_ELE(new Hpricot.ProcedureInstruction(), state, sym, tag, attr, ec, raw, rawlen));
} }
else if (sym_text.Equals(sym)) { else if (sym_text.Equals(sym)) {
// TODO: add raw_string as well? // TODO: add raw_string as well?
Expand All @@ -1316,11 +1312,11 @@ public class HpricotScanner {
(he.Tag as MutableString).Append(tag as MutableString); (he.Tag as MutableString).Append(tag as MutableString);
} }
else { else {
rb_hpricot_add(state.Focus, H_ELE<Hpricot.Text>(state, sym, tag, attr, ec, raw, rawlen)); rb_hpricot_add(state.Focus, H_ELE(new Hpricot.Text(), state, sym, tag, attr, ec, raw, rawlen));
} }
} }
else if (sym_xmldecl.Equals(sym)) { else if (sym_xmldecl.Equals(sym)) {
rb_hpricot_add(state.Focus, H_ELE<Hpricot.XmlDeclaration>(state, sym, tag, attr, ec, raw, rawlen)); rb_hpricot_add(state.Focus, H_ELE(new Hpricot.XmlDeclaration(), state, sym, tag, attr, ec, raw, rawlen));
} }
} }


Expand Down

0 comments on commit caf6151

Please sign in to comment.