%PDF- %PDF-
Direktori : /www/varak.net/www.varak.net/texy/libs/ |
Current File : //www/varak.net/www.varak.net/texy/libs/DTD.php |
<?php /** * Texy! - web text markup-language * -------------------------------- * * Copyright (c) 2004, 2008 David Grudl (http://davidgrudl.com) * * This source file is subject to the GNU GPL license that is bundled * with this package in the file license.txt. * * For more information please see http://texy.info * * @copyright Copyright (c) 2004, 2008 David Grudl * @license GNU GENERAL PUBLIC LICENSE version 2 or 3 * @link http://texy.info * @package Texy * @version $Id: DTD.php 214 2008-07-17 03:50:08Z David Grudl $ */ /** @version $Revision: 214 $ $Date: 2008-07-17 05:50:08 +0200 (čt, 17 VII 2008) $ */ // @param $mode // @return $dtd $strict = $mode === Texy::HTML4_STRICT || $mode === Texy::XHTML1_STRICT; // attributes $coreattrs = array('id'=>1,'class'=>1,'style'=>1,'title'=>1,'xml:id'=>1); // extra: xml:id $i18n = array('lang'=>1,'dir'=>1,'xml:lang'=>1); // extra: xml:lang $attrs = $coreattrs + $i18n + array('onclick'=>1,'ondblclick'=>1,'onmousedown'=>1,'onmouseup'=>1, 'onmouseover'=>1, 'onmousemove'=>1,'onmouseout'=>1,'onkeypress'=>1,'onkeydown'=>1,'onkeyup'=>1); $cellalign = $attrs + array('align'=>1,'char'=>1,'charoff'=>1,'valign'=>1); // content elements // %block; $b = array('ins'=>1,'del'=>1,'p'=>1,'h1'=>1,'h2'=>1,'h3'=>1,'h4'=>1, 'h5'=>1,'h6'=>1,'ul'=>1,'ol'=>1,'dl'=>1,'pre'=>1,'div'=>1,'blockquote'=>1,'noscript'=>1, 'noframes'=>1,'form'=>1,'hr'=>1,'table'=>1,'address'=>1,'fieldset'=>1); if (!$strict) $b += array( 'dir'=>1,'menu'=>1,'center'=>1,'iframe'=>1,'isindex'=>1, // transitional 'marquee'=>1, // proprietary ); // %inline; $i = array('ins'=>1,'del'=>1,'tt'=>1,'i'=>1,'b'=>1,'big'=>1,'small'=>1,'em'=>1, 'strong'=>1,'dfn'=>1,'code'=>1,'samp'=>1,'kbd'=>1,'var'=>1,'cite'=>1,'abbr'=>1,'acronym'=>1, 'sub'=>1,'sup'=>1,'q'=>1,'span'=>1,'bdo'=>1,'a'=>1,'object'=>1,'img'=>1,'br'=>1,'script'=>1, 'map'=>1,'input'=>1,'select'=>1,'textarea'=>1,'label'=>1,'button'=>1,'%DATA'=>1); if (!$strict) $i += array( 'u'=>1,'s'=>1,'strike'=>1,'font'=>1,'applet'=>1,'basefont'=>1, // transitional 'embed'=>1,'wbr'=>1,'nobr'=>1,'canvas'=>1, // proprietary ); $bi = $b + $i; // build DTD $dtd = array( 'html' => array( $strict ? $i18n + array('xmlns'=>1) : $i18n + array('version'=>1,'xmlns'=>1), // extra: xmlns array('head'=>1,'body'=>1), ), 'head' => array( $i18n + array('profile'=>1), array('title'=>1,'script'=>1,'style'=>1,'base'=>1,'meta'=>1,'link'=>1,'object'=>1,'isindex'=>1), ), 'title' => array( array(), array('%DATA'=>1), ), 'body' => array( $attrs + array('onload'=>1,'onunload'=>1), $strict ? array('script'=>1) + $b : $bi, ), 'script' => array( array('charset'=>1,'type'=>1,'src'=>1,'defer'=>1,'event'=>1,'for'=>1), array('%DATA'=>1), ), 'style' => array( $i18n + array('type'=>1,'media'=>1,'title'=>1), array('%DATA'=>1), ), 'p' => array( $strict ? $attrs : $attrs + array('align'=>1), $i, ), 'h1' => array( $strict ? $attrs : $attrs + array('align'=>1), $i, ), 'h2' => array( $strict ? $attrs : $attrs + array('align'=>1), $i, ), 'h3' => array( $strict ? $attrs : $attrs + array('align'=>1), $i, ), 'h4' => array( $strict ? $attrs : $attrs + array('align'=>1), $i, ), 'h5' => array( $strict ? $attrs : $attrs + array('align'=>1), $i, ), 'h6' => array( $strict ? $attrs : $attrs + array('align'=>1), $i, ), 'ul' => array( $strict ? $attrs : $attrs + array('type'=>1,'compact'=>1), array('li'=>1), ), 'ol' => array( $strict ? $attrs : $attrs + array('type'=>1,'compact'=>1,'start'=>1), array('li'=>1), ), 'li' => array( $strict ? $attrs : $attrs + array('type'=>1,'value'=>1), $bi, ), 'dl' => array( $strict ? $attrs : $attrs + array('compact'=>1), array('dt'=>1,'dd'=>1), ), 'dt' => array( $attrs, $i, ), 'dd' => array( $attrs, $bi, ), 'pre' => array( $strict ? $attrs : $attrs + array('width'=>1), array_flip(array_diff(array_keys($i), array('img','object','applet','big','small','sub','sup','font','basefont'))), ), 'div' => array( $strict ? $attrs : $attrs + array('align'=>1), $bi, ), 'blockquote' => array( $attrs + array('cite'=>1), $strict ? array('script'=>1) + $b : $bi, ), 'noscript' => array( $attrs, $bi, ), 'form' => array( $attrs + array('action'=>1,'method'=>1,'enctype'=>1,'accept'=>1,'name'=>1,'onsubmit'=>1,'onreset'=>1,'accept-charset'=>1), $strict ? array('script'=>1) + $b : $bi, ), 'table' => array( $attrs + array('summary'=>1,'width'=>1,'border'=>1,'frame'=>1,'rules'=>1,'cellspacing'=>1,'cellpadding'=>1,'datapagesize'=>1), array('caption'=>1,'colgroup'=>1,'col'=>1,'thead'=>1,'tbody'=>1,'tfoot'=>1,'tr'=>1), ), 'caption' => array( $strict ? $attrs : $attrs + array('align'=>1), $i, ), 'colgroup' => array( $cellalign + array('span'=>1,'width'=>1), array('col'=>1), ), 'thead' => array( $cellalign, array('tr'=>1), ), 'tbody' => array( $cellalign, array('tr'=>1), ), 'tfoot' => array( $cellalign, array('tr'=>1), ), 'tr' => array( $strict ? $cellalign : $cellalign + array('bgcolor'=>1), array('td'=>1,'th'=>1), ), 'td' => array( $cellalign + array('abbr'=>1,'axis'=>1,'headers'=>1,'scope'=>1,'rowspan'=>1,'colspan'=>1), $bi, ), 'th' => array( $cellalign + array('abbr'=>1,'axis'=>1,'headers'=>1,'scope'=>1,'rowspan'=>1,'colspan'=>1), $bi, ), 'address' => array( $attrs, $strict ? $i : array('p'=>1) + $i, ), 'fieldset' => array( $attrs, array('legend'=>1) + $bi, ), 'legend' => array( $strict ? $attrs + array('accesskey'=>1) : $attrs + array('accesskey'=>1,'align'=>1), $i, ), 'tt' => array( $attrs, $i, ), 'i' => array( $attrs, $i, ), 'b' => array( $attrs, $i, ), 'big' => array( $attrs, $i, ), 'small' => array( $attrs, $i, ), 'em' => array( $attrs, $i, ), 'strong' => array( $attrs, $i, ), 'dfn' => array( $attrs, $i, ), 'code' => array( $attrs, $i, ), 'samp' => array( $attrs, $i, ), 'kbd' => array( $attrs, $i, ), 'var' => array( $attrs, $i, ), 'cite' => array( $attrs, $i, ), 'abbr' => array( $attrs, $i, ), 'acronym' => array( $attrs, $i, ), 'sub' => array( $attrs, $i, ), 'sup' => array( $attrs, $i, ), 'q' => array( $attrs + array('cite'=>1), $i, ), 'span' => array( $attrs, $i, ), 'bdo' => array( $coreattrs + array('lang'=>1,'dir'=>1), $i, ), 'a' => array( $attrs + array('charset'=>1,'type'=>1,'name'=>1,'href'=>1,'hreflang'=>1,'rel'=>1,'rev'=>1,'accesskey'=>1,'shape'=>1,'coords'=>1,'tabindex'=>1,'onfocus'=>1,'onblur'=>1), $i, ), 'object' => array( $attrs + array('declare'=>1,'classid'=>1,'codebase'=>1,'data'=>1,'type'=>1,'codetype'=>1,'archive'=>1,'standby'=>1,'height'=>1,'width'=>1,'usemap'=>1,'name'=>1,'tabindex'=>1), array('param'=>1) + $bi, ), 'map' => array( $attrs + array('name'=>1), array('area'=>1) + $b, ), 'select' => array( $attrs + array('name'=>1,'size'=>1,'multiple'=>1,'disabled'=>1,'tabindex'=>1,'onfocus'=>1,'onblur'=>1,'onchange'=>1), array('option'=>1,'optgroup'=>1), ), 'optgroup' => array( $attrs + array('disabled'=>1,'label'=>1), array('option'=>1), ), 'option' => array( $attrs + array('selected'=>1,'disabled'=>1,'label'=>1,'value'=>1), array('%DATA'=>1), ), 'textarea' => array( $attrs + array('name'=>1,'rows'=>1,'cols'=>1,'disabled'=>1,'readonly'=>1,'tabindex'=>1,'accesskey'=>1,'onfocus'=>1,'onblur'=>1,'onselect'=>1,'onchange'=>1), array('%DATA'=>1), ), 'label' => array( $attrs + array('for'=>1,'accesskey'=>1,'onfocus'=>1,'onblur'=>1), $i, // - label by TexyHtml::$prohibits ), 'button' => array( $attrs + array('name'=>1,'value'=>1,'type'=>1,'disabled'=>1,'tabindex'=>1,'accesskey'=>1,'onfocus'=>1,'onblur'=>1), $bi, // - a input select textarea label button form fieldset, by TexyHtml::$prohibits ), 'ins' => array( $attrs + array('cite'=>1,'datetime'=>1), 0, // special case ), 'del' => array( $attrs + array('cite'=>1,'datetime'=>1), 0, // special case ), // empty elements 'img' => array( $attrs + array('src'=>1,'alt'=>1,'longdesc'=>1,'name'=>1,'height'=>1,'width'=>1,'usemap'=>1,'ismap'=>1), FALSE, ), 'hr' => array( $strict ? $attrs : $attrs + array('align'=>1,'noshade'=>1,'size'=>1,'width'=>1), FALSE, ), 'br' => array( $strict ? $coreattrs : $coreattrs + array('clear'=>1), FALSE, ), 'input' => array( $attrs + array('type'=>1,'name'=>1,'value'=>1,'checked'=>1,'disabled'=>1,'readonly'=>1,'size'=>1,'maxlength'=>1,'src'=>1,'alt'=>1,'usemap'=>1,'ismap'=>1,'tabindex'=>1,'accesskey'=>1,'onfocus'=>1,'onblur'=>1,'onselect'=>1,'onchange'=>1,'accept'=>1), FALSE, ), 'meta' => array( $i18n + array('http-equiv'=>1,'name'=>1,'content'=>1,'scheme'=>1), FALSE, ), 'area' => array( $attrs + array('shape'=>1,'coords'=>1,'href'=>1,'nohref'=>1,'alt'=>1,'tabindex'=>1,'accesskey'=>1,'onfocus'=>1,'onblur'=>1), FALSE, ), 'base' => array( $strict ? array('href'=>1) : array('href'=>1,'target'=>1), FALSE, ), 'col' => array( $cellalign + array('span'=>1,'width'=>1), FALSE, ), 'link' => array( $attrs + array('charset'=>1,'href'=>1,'hreflang'=>1,'type'=>1,'rel'=>1,'rev'=>1,'media'=>1), FALSE, ), 'param' => array( array('id'=>1,'name'=>1,'value'=>1,'valuetype'=>1,'type'=>1), FALSE, ), // special "base content" '%BASE' => array( NULL, array('html'=>1,'head'=>1,'body'=>1,'script'=>1) + $bi, ), ); if ($strict) return $dtd; // LOOSE DTD $dtd += array( // transitional 'dir' => array( $attrs + array('compact'=>1), array('li'=>1), ), 'menu' => array( $attrs + array('compact'=>1), array('li'=>1), // it's inline-li, ignored ), 'center' => array( $attrs, $bi, ), 'iframe' => array( $coreattrs + array('longdesc'=>1,'name'=>1,'src'=>1,'frameborder'=>1,'marginwidth'=>1,'marginheight'=>1,'scrolling'=>1,'align'=>1,'height'=>1,'width'=>1), $bi, ), 'noframes' => array( $attrs, $bi, ), 'u' => array( $attrs, $i, ), 's' => array( $attrs, $i, ), 'strike' => array( $attrs, $i, ), 'font' => array( $coreattrs + $i18n + array('size'=>1,'color'=>1,'face'=>1), $i, ), 'applet' => array( $coreattrs + array('codebase'=>1,'archive'=>1,'code'=>1,'object'=>1,'alt'=>1,'name'=>1,'width'=>1,'height'=>1,'align'=>1,'hspace'=>1,'vspace'=>1), array('param'=>1) + $bi, ), 'basefont' => array( array('id'=>1,'size'=>1,'color'=>1,'face'=>1), FALSE, ), 'isindex' => array( $coreattrs + $i18n + array('prompt'=>1), FALSE, ), // proprietary 'marquee' => array( Texy::ALL, $bi, ), 'nobr' => array( array(), $i, ), 'canvas' => array( Texy::ALL, $i, ), 'embed' => array( Texy::ALL, FALSE, ), 'wbr' => array( array(), FALSE, ), ); // transitional modified $dtd['a'][0] += array('target'=>1); $dtd['area'][0] += array('target'=>1); $dtd['body'][0] += array('background'=>1,'bgcolor'=>1,'text'=>1,'link'=>1,'vlink'=>1,'alink'=>1); $dtd['form'][0] += array('target'=>1); $dtd['img'][0] += array('align'=>1,'border'=>1,'hspace'=>1,'vspace'=>1); $dtd['input'][0] += array('align'=>1); $dtd['link'][0] += array('target'=>1); $dtd['object'][0] += array('align'=>1,'border'=>1,'hspace'=>1,'vspace'=>1); $dtd['script'][0] += array('language'=>1); $dtd['table'][0] += array('align'=>1,'bgcolor'=>1); $dtd['td'][0] += array('nowrap'=>1,'bgcolor'=>1,'width'=>1,'height'=>1); $dtd['th'][0] += array('nowrap'=>1,'bgcolor'=>1,'width'=>1,'height'=>1); // missing: FRAMESET, FRAME, BGSOUND, XMP, ...