kriss0r / php-haml
PHPHaml的分支,用于集成错误修复
This package is auto-updated.
Last update: 2024-09-22 20:33:05 UTC
README
这是PHPHaml项目的分支。我认为使用github跟踪补丁比仅仅通过电子邮件发送给上游更有效。
到目前为止,这里包含的补丁有
"魔法else" -- PHPHaml允许以下模板
- if(false) Hi - else Bye
然而,上游在"else"上崩溃,因为用于查找此情况的正则表达式与生成它的代码不匹配。
switch支持
- switch($error) - case 'captcha' invalid captcha code - case 'empty_name' Please enter your name - case 'empty_comment' Please enter your message - default unrecognisable error
然而,仍然不支持多个case语句
- case 0 - case 1
id名称中的短横线:修复了像
#abc-def
这样的id没有被识别为XHTML id的错误。数组作为哈希:允许将哈希传递给元素属性标签,如下所示
- $ary = array('name' => 'myname', 'href' => "#myname") %a{ $ary, :rel => 'link' }
行为与Ruby HAML不完全相同,因为元素本身指定的属性将全部放在末尾,但这是一个开始。
管道处理:Ruby HAML将此视为特殊情况
Some text | More text
如果管道是行首的第一个字符(不计缩进),则不算作换行。由于HTML设计师倾向于将管道字符用作分隔符,因此正确处理这种情况很重要。
逗号:Ruby HAML对属性元素的处理不多,这使得您可以执行以下操作
%a{ :href=>"a,b,c", :target => "_blank" }
PHPHaml必须在这里进行一些处理,以将
:href
转换为"href"
并将所有内容放入一个array()
中。为了做到这一点,它会在逗号处拆分,如果其中一个值包含逗号,这显然是问题。修复此问题的补丁依赖于HAML属性哈希语法与参数数组之间的相似性,并简单地运行一个正则表达式来将:symbol映射到"symbol"。然后我们不必在分割参数时使用逗号,PHP解析器会为我们做这件事。
这可能会让您感到惊讶,因为上面提到了“将数组作为属性哈希”的功能。但这是因为PHP的一个怪异之处——数组可以同时具有数字和非数字键,语法明确允许您混合它们,如下所示
$a = array('foo' => 'bar', 'baz');
($a['foo'] is 'bar', and $a[0] is 'baz'.) 使用此行为,我们仍然可以依赖数组字面量语法
%a{ :href=>$key, $arguments }
变为
<a <?php $this->writeAttributes(array('href'=>$key, $value)); ?>>
writeAttributes方法足够聪明,能够识别$value有一个整数键,因此递归地渲染它。
重入性:之前PHPHaml有一个巨大的静态$aVariables数组,它通过在任何HamlParser对象上调用assign()来修改。如果您有多个HamlParsers,想要递归渲染HAML等,这很糟糕。将其转换为对象本地变量相当简单。此外,我们发现将$context数组传递给render()很方便,该数组用于补充到$aVariables,以填充HAML代码的作用域。
类设计:PHPHaml上游有一个巨大的HamlParser类,其中包含所有HAML处理逻辑。实际上,您可以将这些至少分解成一小部分HamlLine类,它大致对应于解析树中的一个节点,具有一行HAML要编译和一些子节点,以及一个子类HamlParser并添加一些整个文件的代码。这更容易处理。
空白吞噬者。HAML定义了两个元素修饰符来吞噬空白:%foo>和%foo<。PHPHaml上游不支持这两者;我们只支持元素外的吞噬者(%foo>)
HTML样式属性
%input( type="text" onclick="this.value = 'cliked'; this.attributes.disabled = 'disabled';" value='Click me' )
静默haml注释 -#
-# I am comment And i am