123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- <?php
- /* SVN FILE: $Id: HamlHelpers.php 92 2010-05-20 17:42:59Z chris.l.yates $ */
- /**
- * HamlHelpers class file.
- *
- * @author Chris Yates <chris.l.yates@gmail.com>
- * @copyright Copyright (c) 2010 PBM Web Development
- * @license http://phamlp.googlecode.com/files/license.txt
- * @package PHamlP
- * @subpackage Haml
- */
- /**
- * HamlHelpers class.
- * Contains methods to make it easier to do various tasks.
- *
- * The class can be extended to provide user defined helper methods. The
- * signature for user defined helper methods is ($block, $other, $arguments);
- * $block is the string generated by the Haml block being operated on.
- *
- * Tthe path to the extended class is provided to HamlParser in the config
- * array; class name == file name.
- *
- * HamlHelpers and any extended class are automatically included in the context
- * that a Haml template is parsed in, so all the methods are at your disposal
- * from within the template.
- *
- * @package PHamlP
- * @subpackage Haml
- */
- class HamlHelpers {
- const XMLNS = 'http://www.w3.org/1999/xhtml';
-
- /**
- * Returns the block with string appended.
- * @see succeed
- * @param string Haml block
- * @param string string to append
- * @return string the block with string appended.
- */
- public static function append($block, $string) {
- return $block.$string;
- }
-
- /**
- * Escapes HTML entities in text, but without escaping an ampersand that is
- * already part of an escaped entity.
- * @param string Haml block
- * @return string the block with HTML entities escaped.
- */
- public static function escape_once($block) {
- return htmlentities(html_entity_decode($block));
- }
-
- /**
- * Returns an array containing default assignments for the xmlns, lang, and
- * xml:lang attributes of the html element.
- * This helper method is for use in the html element only.
- *
- * Examples:<br/>
- * %html(html_attrs())<br/>
- * produces<br/>
- * <html lang="en-us" xml:lang="en-us" xmlns="http://www.w3.org/1999/xhtml">
- *
- * %html(html_attrs('en-gb'))<br/>
- * produces<br/>
- * <html lang="en-gb" xml:lang="en-gb" xmlns="http://www.w3.org/1999/xhtml">
- *
- * %html(html_attrs('en-gb', false))<br/>
- * produces<br/>
- * <html xml:lang="en-gb" xmlns="http://www.w3.org/1999/xhtml">
- *
- * Although handled in HamlParser, the notes below are here for completeness.<br/>
- * Other attributes are defined as normal. e.g.<br/>
- * %html(xmlns:me="http://www.example.com/me" html_attrs('en-gb', false))<br/>
- * produces<br/>
- * <html xml:lang="en-gb" xmlns="http://www.w3.org/1999/xhtml" xmlns:me="http://www.example.com/me">
- *
- * PHamlP also allows for the language to be defined using PHP code that can
- * be eval'd; the code must end with a semi-colon (;). e.g.<br/>
- * %html(html_attrs("FW::app()->language);", false))<br/>
- * produces (assuming FW::app()->language returns 'en-gb')<br/>
- * <html xml:lang="en-gb" xmlns="http://www.w3.org/1999/xhtml">
- *
- * @param string document language. Default = en-us
- * @param boolean whether the html element has the lang attribute. Default: true
- * Should be set false for XHTML 1.1 or greater documents
- * @return string the block with string appended.
- */
- public static function html_attrs($language = 'en-us', $lang = true) {
- return ($lang ?
- array('xmlns'=>self::XMLNS, 'xml:lang'=>$language, 'lang'=>$language) :
- array('xmlns'=>self::XMLNS, 'xml:lang'=>$language));
- }
-
- /**
- * Returns a copy of text with ampersands, angle brackets and quotes escaped
- * into HTML entities.
- * @param string Haml block
- * @return string the block with HTML entities escaped.
- */
- public static function html_escape($block) {
- return htmlspecialchars($block);
- }
-
- /**
- * Iterates an array and using the block to generate a <li> element for each
- * array element.
- * Examples:<br/>
- * = list_of(array('red', 'orange', ...., 'violet'), 'colour')<br/>
- * = colour<br/>
- * Produces:<br/>
- * <li>red</li><br/>
- * <li>orange</li><br/>
- * |<br/>
- * |<br/>
- * <li>violet></li><br/>
- *
- * = list_of(array('Fly Fishing' => 'JR Hartley', 'Lord of the Rings' => 'JRR Tolkien'), 'title', 'author')<br/>
- * %h3= title<br/>
- * %p= author<br/>
- * Produces:<br/>
- * <li><br/>
- * <h3>Fly Fishing</h3><br/>
- * <p>JR Hartley</p><br/>
- * </li><br/>
- * <li><br/>
- * <h3>Lord of the Rings</h3><br/>
- * <p>JRR Tolkien</p><br/>
- * </li><br/>
- *
- * @param string Haml block
- * @param array items
- * @param string string in block to replace with item key or item value
- * @param string string in block to replace with item value
- * @return string list items.
- */
- public static function list_of($block, $items, $key, $value = null) {
- $output = '';
- foreach ($items as $_key=>$_value) {
- $output .= '<li>' . strtr($block, (empty($value) ? array($key=>$_value) :
- array($key=>$_key, $value=>$_value))) . '</li>';
- } // foreach
- return $output;
- }
-
- /**
- * Alias for prepend.
- * @see prepend
- * @param string Haml block
- * @param string string to prepend
- * @return string the block with string prepended
- */
- public static function preceed($block, $string) {
- return self::prepend($block, $string);
- }
-
- /**
- * Returns the block with string prepended.
- * @param string Haml block
- * @param string string to prepend
- * @return string the block with string prepended
- */
- public static function prepend($block, $string) {
- return $string.$block;
- }
-
- /**
- * Converts newlines in the block to HTML entities.
- * @param string Haml block
- * @return string the block with newlines converted to HTML entities
- */
- public static function preserve($block) {
- return str_replace("\n", '
', $block);
- }
-
- /**
- * Alias for append.
- * @see append
- * @param string Haml block
- * @param string string to apppend
- * @return string the block with string apppended
- */
- public static function succeed($block, $string) {
- return self::append($block, $string);
- }
-
- /**
- * Surrounds a block of Haml code with strings.
- * If $back is not given it defaults to $front.
- * @param string Haml block
- * @param string string to prepend
- * @param string string to apppend
- * @return string the block surrounded by the strings
- */
- public static function surround($block, $front, $back=null) {
- return $front.$block.(is_null($back) ? $front : $back);
- }
- }
|