FrozenIce Web

Web layout engine and web browser in Python

  • (5 Pages)
  • +
  • 1
  • 2
  • 3
  • 4
  • 5

71 Replies - 3374 Views - Last Post: 22 October 2009 - 06:16 PM

#31 programble  Icon User is offline

  • (cons :dic :head)

Reputation: 49
  • View blog
  • Posts: 1,315
  • Joined: 21-February 09

Re: FrozenIce Web

Posted 11 October 2009 - 02:09 PM

w00t! First real successful test! I got it to parse a small "Under Construction" page I have:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Blackbox</title>
    <style type="text/css">
    html {
    font: normal 80.5%/1 Tahoma,sans-serif;
    background: #000000;
    color: #EEEEEE;
    }
    a {
    color: #999999;
    }
    </style>
</head>
<body>
    <h1>This server is closed down for construction!</h1>
    <p>Please try again later.</p>
</body>
</html>



This was the output from the parser (Including debugging output, the real result is at the end)
[parser.py /0036:	   __init__] Initialized htmlDomParser
[parser.py /0102:	handle_decl] Handling SGML declaration
[parser.py /0040:handle_starttag] Handling starttag <html> with 1 attributes
[parser.py /0048:handle_starttag] Node set as root_node
[parser.py /0057:handle_starttag] current_node=[dom.nodes.htmlTagNode] html : None (None)
[parser.py /0040:handle_starttag] Handling starttag <head> with 0 attributes
[parser.py /0056:handle_starttag] Node added as child of current_node
[parser.py /0057:handle_starttag] current_node=[dom.nodes.htmlTagNode] head : None (None)
[parser.py /0040:handle_starttag] Handling starttag <title> with 0 attributes
[parser.py /0056:handle_starttag] Node added as child of current_node
[parser.py /0057:handle_starttag] current_node=[dom.nodes.htmlTagNode] title : None (None)
[parser.py /0090:	handle_data] Handling data
[parser.py /0092:	handle_data] current_node=[dom.nodes.htmlTagNode] title : None (None)
[parser.py /0069:  handle_endtag] Handling endtag </title>
[parser.py /0074:  handle_endtag] current_node matches endtag
[parser.py /0084:  handle_endtag] current_node=[dom.nodes.htmlTagNode] head : None (None)
[parser.py /0040:handle_starttag] Handling starttag <style> with 1 attributes
[parser.py /0056:handle_starttag] Node added as child of current_node
[parser.py /0057:handle_starttag] current_node=[dom.nodes.htmlTagNode] style : None (None)
[parser.py /0090:	handle_data] Handling data
[parser.py /0092:	handle_data] current_node=[dom.nodes.htmlTagNode] style : None (None)
[parser.py /0069:  handle_endtag] Handling endtag </style>
[parser.py /0074:  handle_endtag] current_node matches endtag
[parser.py /0084:  handle_endtag] current_node=[dom.nodes.htmlTagNode] head : None (None)
[parser.py /0069:  handle_endtag] Handling endtag </head>
[parser.py /0074:  handle_endtag] current_node matches endtag
[parser.py /0084:  handle_endtag] current_node=[dom.nodes.htmlTagNode] html : None (None)
[parser.py /0040:handle_starttag] Handling starttag <body> with 0 attributes
[parser.py /0056:handle_starttag] Node added as child of current_node
[parser.py /0057:handle_starttag] current_node=[dom.nodes.htmlTagNode] body : None (None)
[parser.py /0040:handle_starttag] Handling starttag <h1> with 0 attributes
[parser.py /0056:handle_starttag] Node added as child of current_node
[parser.py /0057:handle_starttag] current_node=[dom.nodes.htmlTagNode] h1 : None (None)
[parser.py /0090:	handle_data] Handling data
[parser.py /0092:	handle_data] current_node=[dom.nodes.htmlTagNode] h1 : None (None)
[parser.py /0069:  handle_endtag] Handling endtag </h1>
[parser.py /0074:  handle_endtag] current_node matches endtag
[parser.py /0084:  handle_endtag] current_node=[dom.nodes.htmlTagNode] body : None (None)
[parser.py /0040:handle_starttag] Handling starttag <p> with 0 attributes
[parser.py /0056:handle_starttag] Node added as child of current_node
[parser.py /0057:handle_starttag] current_node=[dom.nodes.htmlTagNode] p : None (None)
[parser.py /0090:	handle_data] Handling data
[parser.py /0092:	handle_data] current_node=[dom.nodes.htmlTagNode] p : None (None)
[parser.py /0069:  handle_endtag] Handling endtag </p>
[parser.py /0074:  handle_endtag] current_node matches endtag
[parser.py /0084:  handle_endtag] current_node=[dom.nodes.htmlTagNode] body : None (None)
[parser.py /0069:  handle_endtag] Handling endtag </body>
[parser.py /0074:  handle_endtag] current_node matches endtag
[parser.py /0084:  handle_endtag] current_node=[dom.nodes.htmlTagNode] html : None (None)
[parser.py /0069:  handle_endtag] Handling endtag </html>
[parser.py /0072:  handle_endtag] current_node.parent matches endtag
[parser.py /0084:  handle_endtag] current_node=[dom.nodes.htmlTagNode] html : None (None)
 [dom.nodes.htmlTagNode] html : None (None)
- [dom.nodes.htmlAttributeNode] xmlns : http://www.w3.org/1999/xhtml (None)
- [dom.nodes.htmlTagNode] head : None (None)
-- [dom.nodes.htmlTagNode] title : None (None)
--- [dom.nodes.htmlTextNode] None : Blackbox (None)
-- [dom.nodes.htmlTagNode] style : None (None)
--- [dom.nodes.htmlAttributeNode] type : text/css (None)
--- [dom.nodes.htmlTextNode] None : 
	html {
	font: normal 80.5%/1 Tahoma,sans-serif;
	background: #000000;
	color: #EEEEEE;
	}
	a {
	color: #999999;
	}
	 (None)
- [dom.nodes.htmlTagNode] body : None (None)
-- [dom.nodes.htmlTagNode] h1 : None (None)
--- [dom.nodes.htmlTextNode] None : This server is closed down for construction! (None)
-- [dom.nodes.htmlTagNode] p : None (None)
--- [dom.nodes.htmlTextNode] None : Please try again later. (None)


Was This Post Helpful? 0
  • +
  • -

#32 Raynes  Icon User is offline

  • D.I.C Lover
  • member icon

Reputation: 611
  • View blog
  • Posts: 2,815
  • Joined: 05-January 09

Re: FrozenIce Web

Posted 11 October 2009 - 03:19 PM

This looks awesome. If this was written in Ruby, I'd be all over it. :)

Good luck.
Was This Post Helpful? 0
  • +
  • -

#33 programble  Icon User is offline

  • (cons :dic :head)

Reputation: 49
  • View blog
  • Posts: 1,315
  • Joined: 21-February 09

Re: FrozenIce Web

Posted 11 October 2009 - 03:28 PM

View PostRaynes, on 11 Oct, 2009 - 04:19 PM, said:

This looks awesome. If this was written in Ruby, I'd be all over it. :)

Good luck.

What about if it was written in Clojure? lol
No philosophical extremely long post this time, eh?

Anyway, thanks for the luck.
Was This Post Helpful? 0
  • +
  • -

#34 Raynes  Icon User is offline

  • D.I.C Lover
  • member icon

Reputation: 611
  • View blog
  • Posts: 2,815
  • Joined: 05-January 09

Re: FrozenIce Web

Posted 11 October 2009 - 03:34 PM

View Postprogramble, on 11 Oct, 2009 - 02:28 PM, said:

View PostRaynes, on 11 Oct, 2009 - 04:19 PM, said:

This looks awesome. If this was written in Ruby, I'd be all over it. :)

Good luck.

What about if it was written in Clojure? lol
No philosophical extremely long post this time, eh?

Anyway, thanks for the luck.


I'd be all over it if it was written in Clojure just the same. I really like Clojure, but I'm not obsessed with it.

I'm not sure what you mean by the long post part. Unless you're talking about the posts in Open Studio, and those were just me trying to save Amrykid from the humiliation that would obviously occur we're he to drop the project for idiotic reasons.
Was This Post Helpful? 0
  • +
  • -

#35 Amrykid  Icon User is offline

  • 4+1=Moo
  • member icon

Reputation: 148
  • View blog
  • Posts: 1,589
  • Joined: 16-December 08

Re: FrozenIce Web

Posted 11 October 2009 - 03:43 PM

View PostRaynes, on 11 Oct, 2009 - 03:34 PM, said:

View Postprogramble, on 11 Oct, 2009 - 02:28 PM, said:

View PostRaynes, on 11 Oct, 2009 - 04:19 PM, said:

This looks awesome. If this was written in Ruby, I'd be all over it. :)

Good luck.

What about if it was written in Clojure? lol
No philosophical extremely long post this time, eh?

Anyway, thanks for the luck.


I'd be all over it if it was written in Clojure just the same. I really like Clojure, but I'm not obsessed with it.

I'm not sure what you mean by the long post part. Unless you're talking about the posts in Open Studio, and those were just me trying to save Amrykid from the humiliation that would obviously occur we're he to drop the project for idiotic reasons.

I'm standing right here!
Was This Post Helpful? 0
  • +
  • -

#36 programble  Icon User is offline

  • (cons :dic :head)

Reputation: 49
  • View blog
  • Posts: 1,315
  • Joined: 21-February 09

Re: FrozenIce Web

Posted 11 October 2009 - 03:44 PM

Ok, I will count on you to talk me out of giving up if ever I consider it. :D

Update:
Just added my testing scripts to the repo, should make it easier for the testers. Also, the parser parsed a few more files correctly.
Was This Post Helpful? 0
  • +
  • -

#37 s3thst4  Icon User is offline

  • a * a = (b * b) + (c * c) - 2(b)(c)cos(A)
  • member icon

Reputation: 10
  • View blog
  • Posts: 587
  • Joined: 20-November 08

Re: FrozenIce Web

Posted 11 October 2009 - 03:54 PM

View PostAmrykid, on 11 Oct, 2009 - 02:43 PM, said:

View PostRaynes, on 11 Oct, 2009 - 03:34 PM, said:

View Postprogramble, on 11 Oct, 2009 - 02:28 PM, said:

View PostRaynes, on 11 Oct, 2009 - 04:19 PM, said:

This looks awesome. If this was written in Ruby, I'd be all over it. :)

Good luck.

What about if it was written in Clojure? lol
No philosophical extremely long post this time, eh?

Anyway, thanks for the luck.


I'd be all over it if it was written in Clojure just the same. I really like Clojure, but I'm not obsessed with it.

I'm not sure what you mean by the long post part. Unless you're talking about the posts in Open Studio, and those were just me trying to save Amrykid from the humiliation that would obviously occur we're he to drop the project for idiotic reasons.

I'm standing right here!

Um, I don't think you can be standing on a webpage.
Was This Post Helpful? 0
  • +
  • -

#38 Raynes  Icon User is offline

  • D.I.C Lover
  • member icon

Reputation: 611
  • View blog
  • Posts: 2,815
  • Joined: 05-January 09

Re: FrozenIce Web

Posted 11 October 2009 - 03:54 PM

View PostAmrykid, on 11 Oct, 2009 - 02:43 PM, said:

View PostRaynes, on 11 Oct, 2009 - 03:34 PM, said:

View Postprogramble, on 11 Oct, 2009 - 02:28 PM, said:

View PostRaynes, on 11 Oct, 2009 - 04:19 PM, said:

This looks awesome. If this was written in Ruby, I'd be all over it. :)

Good luck.

What about if it was written in Clojure? lol
No philosophical extremely long post this time, eh?

Anyway, thanks for the luck.


I'd be all over it if it was written in Clojure just the same. I really like Clojure, but I'm not obsessed with it.

I'm not sure what you mean by the long post part. Unless you're talking about the posts in Open Studio, and those were just me trying to save Amrykid from the humiliation that would obviously occur we're he to drop the project for idiotic reasons.

I'm standing right here!


I'm not hiding that from you. I believe that developers losing interest in your project is an idiotic reason to put an end to the project, and I am trying to save you from humiliation.

And most certainly! I could have talked Hitler out of suicide, given the chance.
Was This Post Helpful? 0
  • +
  • -

#39 programble  Icon User is offline

  • (cons :dic :head)

Reputation: 49
  • View blog
  • Posts: 1,315
  • Joined: 21-February 09

Re: FrozenIce Web

Posted 11 October 2009 - 03:58 PM

View Posts3thst4, on 11 Oct, 2009 - 04:54 PM, said:

View PostAmrykid, on 11 Oct, 2009 - 02:43 PM, said:

View PostRaynes, on 11 Oct, 2009 - 03:34 PM, said:

View Postprogramble, on 11 Oct, 2009 - 02:28 PM, said:

View PostRaynes, on 11 Oct, 2009 - 04:19 PM, said:

This looks awesome. If this was written in Ruby, I'd be all over it. :)

Good luck.

What about if it was written in Clojure? lol
No philosophical extremely long post this time, eh?

Anyway, thanks for the luck.


I'd be all over it if it was written in Clojure just the same. I really like Clojure, but I'm not obsessed with it.

I'm not sure what you mean by the long post part. Unless you're talking about the posts in Open Studio, and those were just me trying to save Amrykid from the humiliation that would obviously occur we're he to drop the project for idiotic reasons.

I'm standing right here!

Um, I don't think you can be standing on a webpage.


Unless... He put his monitor on the floor, then stood on it. That would break it though, so I hope he has a spare.

Ontopic:
test.py accepts input, and feeds it to the parser
test_file.py feeds the contents of the file passed to it to the parser
Was This Post Helpful? 0
  • +
  • -

#40 s3thst4  Icon User is offline

  • a * a = (b * b) + (c * c) - 2(b)(c)cos(A)
  • member icon

Reputation: 10
  • View blog
  • Posts: 587
  • Joined: 20-November 08

Re: FrozenIce Web

Posted 11 October 2009 - 04:04 PM

@programble
No, he'd being standing on the monitor, not the webpage.
Was This Post Helpful? 0
  • +
  • -

#41 Amrykid  Icon User is offline

  • 4+1=Moo
  • member icon

Reputation: 148
  • View blog
  • Posts: 1,589
  • Joined: 16-December 08

Re: FrozenIce Web

Posted 11 October 2009 - 04:18 PM

View Posts3thst4, on 11 Oct, 2009 - 04:04 PM, said:

@programble
No, he'd being standing on the monitor, not the webpage.

you guys take things to far....
Was This Post Helpful? 0
  • +
  • -

#42 programble  Icon User is offline

  • (cons :dic :head)

Reputation: 49
  • View blog
  • Posts: 1,315
  • Joined: 21-February 09

Re: FrozenIce Web

Posted 11 October 2009 - 04:20 PM

Good point. Please stay on topic.
On topic:

I just fixed the bug! :D
It now handles un-closed tags quite well. Even sticks a little comment on them saying that it automatically closed them. :D
Was This Post Helpful? 0
  • +
  • -

#43 programble  Icon User is offline

  • (cons :dic :head)

Reputation: 49
  • View blog
  • Posts: 1,315
  • Joined: 21-February 09

Re: FrozenIce Web

Posted 11 October 2009 - 05:11 PM

This latest test demonstrates very well how FrozenIce handles mal-formed HTML:
<html><p>Paragraph<br><b>Bold<i>and italic</p><p>Another paragraph</p></html>

This HTML has a <br> tag that should be <br />, and 2 other tags that are not closed.
[parser.py /0036:	   __init__] Initialized htmlDomParser
[parser.py /0040:handle_starttag] Handling starttag <html> with 0 attributes
[parser.py /0048:handle_starttag] Node set as root_node
[parser.py /0057:handle_starttag] current_node=[dom.nodes.htmlTagNode] html : None (None)
[parser.py /0040:handle_starttag] Handling starttag <p> with 0 attributes
[parser.py /0056:handle_starttag] Node added as child of current_node
[parser.py /0057:handle_starttag] current_node=[dom.nodes.htmlTagNode] p : None (None)
[parser.py /0092:	handle_data] Handling data
[parser.py /0094:	handle_data] current_node=[dom.nodes.htmlTagNode] p : None (None)
[parser.py /0040:handle_starttag] Handling starttag <br> with 0 attributes
[parser.py /0052:handle_starttag] Node auto-closed
[parser.py /0057:handle_starttag] current_node=[dom.nodes.htmlTagNode] p : None (None)
[parser.py /0040:handle_starttag] Handling starttag <b> with 0 attributes
[parser.py /0056:handle_starttag] Node added as child of current_node
[parser.py /0057:handle_starttag] current_node=[dom.nodes.htmlTagNode] b : None (None)
[parser.py /0092:	handle_data] Handling data
[parser.py /0094:	handle_data] current_node=[dom.nodes.htmlTagNode] b : None (None)
[parser.py /0040:handle_starttag] Handling starttag <i> with 0 attributes
[parser.py /0056:handle_starttag] Node added as child of current_node
[parser.py /0057:handle_starttag] current_node=[dom.nodes.htmlTagNode] i : None (None)
[parser.py /0092:	handle_data] Handling data
[parser.py /0094:	handle_data] current_node=[dom.nodes.htmlTagNode] i : None (None)
[parser.py /0069:  handle_endtag] Handling endtag </p>
[parser.py /0077:  handle_endtag] current_node.parent does not match endtag (b)
[parser.py /0079:  handle_endtag] Closing tag <i>
[parser.py /0083:  handle_endtag] Closing tag <b>
[parser.py /0086:  handle_endtag] current_node=[dom.nodes.htmlTagNode] html : None (None)
[parser.py /0040:handle_starttag] Handling starttag <p> with 0 attributes
[parser.py /0056:handle_starttag] Node added as child of current_node
[parser.py /0057:handle_starttag] current_node=[dom.nodes.htmlTagNode] p : None (None)
[parser.py /0092:	handle_data] Handling data
[parser.py /0094:	handle_data] current_node=[dom.nodes.htmlTagNode] p : None (None)
[parser.py /0069:  handle_endtag] Handling endtag </p>
[parser.py /0074:  handle_endtag] current_node matches endtag
[parser.py /0086:  handle_endtag] current_node=[dom.nodes.htmlTagNode] html : None (None)
[parser.py /0069:  handle_endtag] Handling endtag </html>
[parser.py /0072:  handle_endtag] current_node.parent matches endtag
[parser.py /0086:  handle_endtag] current_node=[dom.nodes.htmlTagNode] html : None (None)
 [dom.nodes.htmlTagNode] html : None (None)
- [dom.nodes.htmlTagNode] p : None (None)
-- [dom.nodes.htmlTextNode] None : Paragraph (None)
-- [dom.nodes.htmlTagNode] br : None (Tag auto-closed)
-- [dom.nodes.htmlTagNode] b : None (Tag not closed)
--- [dom.nodes.htmlTextNode] None : Bold (None)
--- [dom.nodes.htmlTagNode] i : None (Tag not closed)
---- [dom.nodes.htmlTextNode] None : and italic (None)
- [dom.nodes.htmlTagNode] p : None (None)
-- [dom.nodes.htmlTextNode] None : Another paragraph (None)


As you can see, the <br> tag is automatically closed by the parser, and the still open child tags of the first <p> are also closed when </p> is.
Was This Post Helpful? 0
  • +
  • -

#44 JavaNerd  Icon User is offline

  • D.I.C Head

Reputation: 1
  • View blog
  • Posts: 103
  • Joined: 22-December 08

Re: FrozenIce Web

Posted 11 October 2009 - 05:50 PM

Good work! :^:
Was This Post Helpful? 0
  • +
  • -

#45 programble  Icon User is offline

  • (cons :dic :head)

Reputation: 49
  • View blog
  • Posts: 1,315
  • Joined: 21-February 09

Re: FrozenIce Web

Posted 12 October 2009 - 12:54 PM

I added TIME functions to the debugger along with DEBUG verbosity levels. The previous example now outputs:
[parser.py /0037:	   __init__] Initialized htmlDomParser
[parser.py /0042:handle_starttag] Handling starttag <html> with 0 attributes
[parser.py /0050:handle_starttag] Node set as root_node
[parser.py /0059:handle_starttag] current_node=[dom.nodes.htmlTagNode] html : None (None)
[parser.py /0042:handle_starttag] Handling starttag <p> with 0 attributes
[parser.py /0058:handle_starttag] Node added as child of current_node
[parser.py /0059:handle_starttag] current_node=[dom.nodes.htmlTagNode] p : None (None)
[parser.py /0094:	handle_data] Handling data
[parser.py /0096:	handle_data] current_node=[dom.nodes.htmlTagNode] p : None (None)
[parser.py /0042:handle_starttag] Handling starttag <br> with 0 attributes
[parser.py /0054:handle_starttag] Node auto-closed
[parser.py /0059:handle_starttag] current_node=[dom.nodes.htmlTagNode] p : None (None)
[parser.py /0042:handle_starttag] Handling starttag <b> with 0 attributes
[parser.py /0058:handle_starttag] Node added as child of current_node
[parser.py /0059:handle_starttag] current_node=[dom.nodes.htmlTagNode] b : None (None)
[parser.py /0094:	handle_data] Handling data
[parser.py /0096:	handle_data] current_node=[dom.nodes.htmlTagNode] b : None (None)
[parser.py /0042:handle_starttag] Handling starttag <i> with 0 attributes
[parser.py /0058:handle_starttag] Node added as child of current_node
[parser.py /0059:handle_starttag] current_node=[dom.nodes.htmlTagNode] i : None (None)
[parser.py /0094:	handle_data] Handling data
[parser.py /0096:	handle_data] current_node=[dom.nodes.htmlTagNode] i : None (None)
[parser.py /0071:  handle_endtag] Handling endtag </p>
[parser.py /0079:  handle_endtag] current_node.parent does not match endtag (b)
[parser.py /0081:  handle_endtag] Closing node <i>
[parser.py /0085:  handle_endtag] Closing node <b>
[parser.py /0088:  handle_endtag] current_node=[dom.nodes.htmlTagNode] html : None (None)
[parser.py /0042:handle_starttag] Handling starttag <p> with 0 attributes
[parser.py /0058:handle_starttag] Node added as child of current_node
[parser.py /0059:handle_starttag] current_node=[dom.nodes.htmlTagNode] p : None (None)
[parser.py /0094:	handle_data] Handling data
[parser.py /0096:	handle_data] current_node=[dom.nodes.htmlTagNode] p : None (None)
[parser.py /0071:  handle_endtag] Handling endtag </p>
[parser.py /0076:  handle_endtag] current_node matches endtag
[parser.py /0088:  handle_endtag] current_node=[dom.nodes.htmlTagNode] html : None (None)
[parser.py /0071:  handle_endtag] Handling endtag </html>
[parser.py /0074:  handle_endtag] current_node.parent matches endtag
[parser.py /0088:  handle_endtag] current_node=[dom.nodes.htmlTagNode] html : None (None)
[parser.py /0111:		  close] Parsed in 0.035424 seconds
 [dom.nodes.htmlTagNode] html : None (None)
- [dom.nodes.htmlTagNode] p : None (None)
-- [dom.nodes.htmlTextNode] None : Paragraph (None)
-- [dom.nodes.htmlTagNode] br : None (Tag auto-closed)
-- [dom.nodes.htmlTagNode] b : None (Tag not closed)
--- [dom.nodes.htmlTextNode] None : Bold (None)
--- [dom.nodes.htmlTagNode] i : None (Tag not closed)
---- [dom.nodes.htmlTextNode] None : and italic (None)
- [dom.nodes.htmlTagNode] p : None (None)
-- [dom.nodes.htmlTextNode] None : Another paragraph (None)


But in a less verbose mode:
[parser.py /0037:	   __init__] Initialized htmlDomParser
[parser.py /0054:handle_starttag] Node auto-closed
[parser.py /0079:  handle_endtag] current_node.parent does not match endtag (b)
[parser.py /0111:		  close] Parsed in 0.002376 seconds
 [dom.nodes.htmlTagNode] html : None (None)
- [dom.nodes.htmlTagNode] p : None (None)
-- [dom.nodes.htmlTextNode] None : Paragraph (None)
-- [dom.nodes.htmlTagNode] br : None (Tag auto-closed)
-- [dom.nodes.htmlTagNode] b : None (Tag not closed)
--- [dom.nodes.htmlTextNode] None : Bold (None)
--- [dom.nodes.htmlTagNode] i : None (Tag not closed)
---- [dom.nodes.htmlTextNode] None : and italic (None)
- [dom.nodes.htmlTagNode] p : None (None)
-- [dom.nodes.htmlTextNode] None : Another paragraph (None)


From these examples, it is obvious that the verbosity level affects the parse time. I may add a 5th level of DEBUG statements specifically for TIME measurements, so that they are the only output, and the other DEBUG outputs would not affect parse time.
Was This Post Helpful? 0
  • +
  • -

  • (5 Pages)
  • +
  • 1
  • 2
  • 3
  • 4
  • 5