tFe [ySF!,OahS97hHDbyL =kRUe|}UjS%UQ oWn mƬ7=7$}}wX` 4 8S3lL6sr-{EKGfi|F+^hMfmW~+>omKz@2lbB tVAvr S9?_M9kg -~vLsލ:9Rza`R'pTuϾ“_YdPYNZ]*oPʤqcḧ́!i6.mOWʋgl;fr ARpUCN *[)qGGeS}-#^֢=E Ly00f3/?7.1V\|Fe>-a-Ua#a8kFri"O4ԩǘ6TpSwQ )g|&x~ Qvdn2׼xǝ8#ٸtqsgb.} =( N8ީW # NW*"q.'IDU7.+$sr9k|dTt_^"?RI5OsܓDVX2;+iĠaKZb25NMު)/)2vz-ީ%ъpȌh\?4,| ʹPS<7"1[0EǝnQ\Azg2ʉ]όSXN9N˙$iAeZJs>#DF+ iK(ƵYԃ[$]:2K>-%S<<7OZƉqaE!r[obBu;L{ЍRp[xУQ|2‹ASPj.N@HYYC;$h:$.Tlr'G`7_j(E_h}b[.2\ Ͽ;BBRW ;kd8hwk lB;&F~(㫔į{(8pBd7Ww lri'[c(L>pb3?( wJ&sѫ 9PH #/bĝ <s9Ԇ a w~5uPdֵe3vgEn3=]ِ, G)M1f =Aahh$@naor2REn;"_T-Vw)[LvfVZV<yRI,bob1!r8{^,{×ZNyR-`ȃv Xz" /;GSl(woBo>e۪Әscg_+cE0C2 _gҬ/n'Xqn_d0ax: ETj.D<;s,|\<;:߽`Hjn!U""'< ;_R#;)KD5Q8Q((xM{9X~SwK3tGKH9Wwho4e%fcu祌_z#[.,FLloGuӕGRLV҃y^eaGvLH|VdvՔBѩgވMX+ΐNtX{D"s€/USY{#g*ldcDR*F=n|ϘVo^We8\ |ChobWm:EnpO6@}KA[mKO*;42zo"H^%&`(0ŶYqjC#h к9S}~Bh^M|\T_g5F8q@օU V= ^Km| Vy)<5.^ < iU)kTDž 2YəMC]9;C 25a1[ `M)xCRF~͙k.úkC#P5n`2)|ӣof]K2oRE n5R ;z tAMLU(lx2*2]sy֍:jXYG\k3F\YzH/PHŭ9ȍ/kd1 B$x%V =  `yر{aDߤ` Y%BzL1Тc8:%; j8VrRhtˑ tm;wчq V@}%~$jJ(mYvn4z[{e!,`34aB7aJcq%`׿Qls; lQpM$1jɣ7T¬v Wn mƬ7=-~#^[ CdaH5YXH\aDs (5,Sx~nq[g0C!7,j3>IEIIVqk 0"n:;P&;g?H:P뚠,^b~O8 huJ@r,`l+PxNXYQⶄ a׸Q])XFHlׯ9\KdKPz)xQ}y"bHyQͿcySp !tY6/uTLimy(1=Ut>]sf+^ZpVtU8&쫫)ۆyx9TBo^ܽ$ia4I}]'E hoQmފC@Oxc*УYYkants and not just children. Note that the XHTML * Modularization Abstract Modules are blithely unaware of such * distinctions. */ public $excludes = array(); /** * This tag is explicitly auto-closed by the following tags. * @type array */ public $autoclose = array(); /** * If a foreign element is found in this element, test if it is * allowed by this sub-element; if it is, instead of closing the * current element, place it inside this element. * @type string */ public $wrap; /** * Whether or not this is a formatting element affected by the * "Active Formatting Elements" algorithm. * @type bool */ public $formatting; /** * Low-level factory constructor for creating new standalone element defs */ public static function create($content_model, $content_model_type, $attr) { $def = new HTMLPurifier_ElementDef(); $def->content_model = $content_model; $def->content_model_type = $content_model_type; $def->attr = $attr; return $def; } /** * Merges the values of another element definition into this one. * Values from the new element def take precedence if a value is * not mergeable. * @param HTMLPurifier_ElementDef $def */ public function mergeIn($def) { // later keys takes precedence foreach ($def->attr as $k => $v) { if ($k === 0) { // merge in the includes // sorry, no way to override an include foreach ($v as $v2) { $this->attr[0][] = $v2; } continue; } if ($v === false) { if (isset($this->attr[$k])) { unset($this->attr[$k]); } continue; } $this->attr[$k] = $v; } $this->_mergeAssocArray($this->excludes, $def->excludes); $this->attr_transform_pre = array_merge($this->attr_transform_pre, $def->attr_transform_pre); $this->attr_transform_post = array_merge($this->attr_transform_post, $def->attr_transform_post); if (!empty($def->content_model)) { $this->content_model = str_replace("#SUPER", (string)$this->content_model, $def->content_model); $this->child = false; } if (!empty($def->content_model_type)) { $this->content_model_type = $def->content_model_type; $this->child = false; } if (!is_null($def->child)) { $this->child = $def->child; } if (!is_null($def->formatting)) { $this->formatting = $def->formatting; } if ($def->descendants_are_inline) { $this->descendants_are_inline = $def->descendants_are_inline; } } /** * Merges one array into another, removes values which equal false * @param $a1 Array by reference that is merged into * @param $a2 Array that merges into $a1 */ private function _mergeAssocArray(&$a1, $a2) { foreach ($a2 as $k => $v) { if ($v === false) { if (isset($a1[$k])) { unset($a1[$k]); } continue; } $a1[$k] = $v; } } } // vim: et sw=4 sts=4