3rKK3WJU"0ni?{=KӪ_=\N]R݊M:ڣI/|Z#K?iXυOHOtѱ<ǰq[,%9"R{2˗JIR)()$n^rj[r|FCL)DmI>"v33.m?j9o1X DJzzpR0v~UN\5(}k|Z`FpK$jٜT"/TٓKf)G28 *wFQE  a(:+Ș`N+M۾6ƪRYj3 _z5daL%d2UnFՄVԊ>1H[Z,x̘-p(!Ve|4<)iR۟y!s'8=EpxΡ**r W y@}5!‚Aǀ 0_OUyS̏mäs~*Ќa3&j8VrRhtˑx?(z.8C0:Wax-|m`v<"m|upAG!5dyB !*V,@@cŸT#3Rfx!pb =CYӜ;O Fz_?K 3 NF]34H3a{-hJ^"A-Kt"UrYQV,t

*RfaC3ɱxNلԄ8>[x/)* жB&pk _UNȥo'Őppu08fZ6q_|$c}0 ',7\^冖B"0#ʔmEp({ƧҴz1@)ɐFLt`E刴 %PpIi)r$S]s<#r 쮝*Wᥝ=jc)26Oo if(tj)DΐJ;俜HF e+- Lc{Ab#B~h_j]рPQIG{gV񏌟eFPfyCzޟI^m0O)#@ܹ_buZ?::.UZ2 w- zlaչ YuM YYsc­s ]V-t@rͶ6 oU:'YhPa),ք㜿chgt Eޅ?epl&dgqYe-:}6IJr9F[ϊ ٭ 7^q?3R0Pܨ_CFuzQ ֑Q ɿXL(xͱ!r&bKL"'טI[ `gA LkpGFkN*ݴG ͯ$R6Qq3('_6Yyu}__a\<fzS*Dn_ޅ~'Z*tfkK,N[ф(ߜIsS׳G^Ofڡr)AXS “]:0Le a< w',, 2XCrḂ) ؜FsL=塈΃idI5 Ƶ϶u`jôh&)۞/ƥ<`k쯎 Fͱ@b|o{&hC=S誉s/WNjP"D_0뻄R}/g=ۮc^oy5͝D8W Mg Ƶ϶u`jø\] ڞu _g}B|3jJ(mYvn4zbS?;x(<?>1kxШHb8@ׁBjr3hn+.@ һMyaIj[2'6=4R.R!KuGyK 6i'~X/^y*9,䥰Z(M=-r:<%)>j 5٭IA LkpGFj"_,y:99UC&-b߶p&Q;'8V fixes as $name => $fix) { // determine what the fix is for list($type, $params) = $this->getFixType($name); switch ($type) { case 'attr_transform_pre': case 'attr_transform_post': $attr = $params['attr']; if (isset($params['element'])) { $element = $params['element']; if (empty($this->info[$element])) { $e = $this->addBlankElement($element); } else { $e = $this->info[$element]; } } else { $type = "info_$type"; $e = $this; } $e->{$type}[$attr] = $fix; break; case 'tag_transform': $this->info_tag_transform[$params['element']] = $fix; break; case 'child': case 'content_model_type': $element = $params['element']; if (empty($this->info[$element])) { $e = $this->addBlankElement($element); } else { $e = $this->info[$element]; } $e->$type = $fix; break; default: trigger_error("Fix type $type not supported", E_USER_ERROR); break; } } } /** * Parses a fix name and determines what kind of fix it is, as well * as other information defined by the fix * @param $name String name of fix * @return array(string $fix_type, array $fix_parameters) * @note $fix_parameters is type dependant, see populate() for usage * of these parameters */ public function getFixType($name) { // parse it $property = $attr = null; if (strpos($name, '#') !== false) { list($name, $property) = explode('#', $name); } if (strpos($name, '@') !== false) { list($name, $attr) = explode('@', $name); } // figure out the parameters $params = array(); if ($name !== '') { $params['element'] = $name; } if (!is_null($attr)) { $params['attr'] = $attr; } // special case: attribute transform if (!is_null($attr)) { if (is_null($property)) { $property = 'pre'; } $type = 'attr_transform_' . $property; return array($type, $params); } // special case: tag transform if (is_null($property)) { return array('tag_transform', $params); } return array($property, $params); } /** * Defines all fixes the module will perform in a compact * associative array of fix name to fix implementation. * @return array */ public function makeFixes() { } } // vim: et sw=4 sts=4