[PHPTAL] back to the dom parser idea

David Zülke dz at bitxtender.com
Sun Jan 27 20:34:21 CET 2008


Am 27.01.2008 um 19:25 schrieb Kornel Lesiński:

> On 11.01.2008, at 23:30, Rodrigo Moraes wrote:
>
>> Hello,
>> Today I finally created a demo of PHPTAL working with a PHP DOM
>> parser, and sent it to a temporary GoogleCode repository. Here's the
>> project:
>>
>> http://code.google.com/p/phptalwithdom/
> [...]
>>
>> that's it. let me know what do you think. :)
>
> I've created a new branch based on your code and added bunch of  
> bugfixes:
> https://svn.motion-twin.com/phptal/branches/withdom
>
> Unfortunately it still doesn't work quite right (see tests/run- 
> tests.php script).
>
> PHPTAL's code-generator expects elements and attributes to have  
> namespace prefixes, which were added as neccessary by the parser.  
> DOM of course doesn't do this, which causes a lot of bugs and  
> confusion. Handling of namespaces has to be fixed throughout the  
> code before real DOM can be supported.
>
> There are issues with DOM itself:
> - it doesn't report line numbers for elements, so error messages  
> (other than parse errors) can't include them. Not very user- 
> friendly :(

It does! Just need to disable libxml error reporting, so no warnings  
etc are generated, then pull the errors by hand. See http://trac.agavi.org/browser/tags/0.11.1RC1/src/config/AgaviXmlConfigParser.class.php#L105 
  for an example.

> - non-validating parser can't support named entities (like  ),  
> but users will expect them to work. Switching to validating parser  
> is not an option, because it will reject incomplete HTML fragments  
> and PHPTAL elements.

That is possible as well. Just need to tell DOM to resolve externals  
and validate against them (= doctype). I think we can expect people to  
write well-formed XML.

> - parser decodes numeric entities and represents them as literal  
> characters, possibly exposing encoding issues.

Eh? what do you mean. As long as the charset info is correct,  
everything is fine. IIRC libxml will even read a charset value from a  
meta tag in an XML document that it recognizes as XHTML.


On a different topic, I really think we should use this DOM parser  
approach as the foundation for a completely new PHPTAL. There are some  
things that I think would be worth changing, for instance we should  
mandate the use of braces in function calls. That not only allows  
passing of arguments properly, it also eliminates the need of runtime  
evaluation of the type of the given element (array index, object  
property, object method). Not sure why it is as it is right now, but  
the "original" TAL uses braces for method calls, too, IIRC.


David


More information about the PHPTAL mailing list