Prty
view release on metacpan or search on metacpan
lib/Prty/Html/Tag.pm view on Meta::CPAN
noframes=>'m', # (Frameset-DTD) Inhalt für nicht-framefähige Browser
noscript=>'m', # Inhalt für nicht-skriptfähige Browser
object=>'m', # einbettetes Objekt
ol=>'m', # nummerierte Liste
optgroup=>'m', # Gruppe von Optionen einer Selectliste
option=>'v', # Option einer Selectliste
p=>'m', # Absatz
param=>'e', # Parameter eines Object
pre=>'p', # Leerraum und Zeilenumbrüche erhalten
q=>'i', # Kurzzitat
samp=>'i', # Text stellt Ausgabe eines Programms dar
script=>'c', # Code, der vom Browser ausgeführt wird
select=>'v', # Auswahlmenü
small=>'i', # Kleinschrift
span=>'i', # allgemeines Inline-Element
strong=>'i', # stark hervorgehobener Text
style=>'v', # Stylesheet-Regeln
sub=>'i', # tiefgestellter Text
sup=>'i', # hochgestellter Text
table=>'M', # Tabelle
tbody=>'m', # Rumpf Tabelle
td=>'v', # Tabellenzelle
textarea=>'p', # Text-Eingabefeld
tfoot=>'m', # Fuà Tabelle (identisch zu tbody)
th=>'v', # Tabellenkopfzelle (identisch zu td)
thead=>'m', # Kopf Tabelle (identisch zu tbody)
title=>'v', # Titel HTML-Dokument
tr=>'m', # Tabellenzeile
tt=>'i', # Schreibmaschinenschrift
ul=>'m', # Ungeordnete Liste
var=>'i', # Text ist Variablenname
);
# Default-Optionen
my %DefaultOptions = (
p => [-ignoreIfNull=>1],
span => [-ignoreIfNull=>1],
);
# Default-Attribute von Elementen allgemein
my %DefaultAttributes = (
# form=>[method=>'post',enctype=>'multipart/form-data'],
img=>[alt=>''],
script=>[type=>'text/javascript'],
style=>[type=>'text/css'],
);
# Default-Attribute, nur XHTML
my %DefaultAttributesXhtml = (
html=>[xmlns=>'http://www.w3.org/1999/xhtml'],
);
# Liste aller Attribute und ihrer Domänen.
# FIXME: anhand DTD überprüfen
my %Attribute = (
'accept-charset'=>'charsets', # form
'http-equiv'=>'cdata', # meta
'xml:lang'=>'languageCode', # I18N (XHTML)
'xml:space'=>'space', # ENUM pre,script,style(XHTML)
abbr=>'text', # Cell
accept=>'contentTypes', # form,input
accesskey=>'character', # Focus,legend
action=>'uri', # form
align=>'cellAlign', # ENUM CellAlign
alt=>'cdata', # input(cdata);area,img(text)
archive=>'uriList', # object
axis=>'cdata', # Cell
border=>'pixels', # table
cellpadding=>'length', # table
cellspacing=>'length', # table
char=>'character', # CellAlign
charoff=>'length', # CellAlign
charset=>'charset', # a,link,script
checked=>'bool', # input
cite=>'uri', # blockquote,del,ins,q
class=>'class', # Core
classid=>'uri', # object
codebase=>'uri', # object
codetype=>'contentType', # object
cols=>'multiLengths', # frameset(multiLengths),textarea(number)
colspan=>'number', # Cell
content=>'cdata', # meta
coords=>'coords', # a, area
data=>'uri', # object
datetime=>'datetime', # del, ins
declare=>'bool', # object
defer=>'bool', # script
dir=>'dir', # ENUM I18N
disabled=>'bool', # button,input,optgroup,option,select,
# textarea
enctype=>'contentType', # form
frame=>'tframe', # ENUM table
frameborder=>'frameBorder', # ENUM frame, iframe
headers=>'idrefs', # Cell
height=>'length', # iframe,img,object
href=>'uri', # a,area,base,link
hreflang=>'languageCode', # a,link
id=>'id', # Core
ismap=>'bool', # img,input
label=>'text', # optgroup,option
lang=>'languageCode', # I18N
longdesc=>'uri', # frame,iframe,img
marginheight=>'pixels', # frame,iframe
marginwidth=>'pixels', # frame,iframe
maxlength=>'number', # input
media=>'mediaDesc', # ENUM link,style
method=>'method', # ENUM form
multiple=>'bool', # select
name=>'nmtoken', # button,input,meta,param,select,textarea,
# object;form,frame,map(HTML)
nohref=>'bool', # area
noresize=>'bool', # frame
onblur=>'script', # Focus,select
onchange=>'script', # input,select,textarea
onclick=>'script', # Event
ondblclick=>'script', # Event
onfocus=>'script', # Focus,select
onkeydown=>'script', # Event
onkeypress=>'script', # Event
onkeyup=>'script', # Event
onload=>'script', # body,frameset
onmousedown=>'script', # Event
onmousemove=>'script', # Event
onmouseout=>'script', # Event
onmouseover=>'script', # Event
onmouseup=>'script', # Event
onreset=>'script', # form
onselect=>'script', # input,textarea
onsubmit=>'script', # form
onunload=>'script', # body,frameset
profile=>'uri', # head
readonly=>'bool', # input,textarea
rel=>'linkTypes', # ENUM a,link
rev=>'linkTypes', # ENUM a,link
rows=>'multiLengths', # frameset(multiLengths);textarea(number)
rowspan=>'number', # Cell
rules=>'trules', # ENUM table
scheme=>'cdata', # meta
scope=>'scope', # ENUM Cell
scoped=>'bool', # style
scrolling=>'scrolling', # ENUM frame,iframe
selected=>'bool', # option
shape=>'shape', # ENUM a,area
size=>'number', # input,select
span=>'number', # col,colgroup
src=>'uri', # frame,iframe,img,input,script
standby=>'text', # object
style=>'styleSheet', # Core
summary=>'text', # table
tabindex=>'number', # Focus,object,select
target=>'frameTarget', # a,area,base,form,link
title=>'text', # Core,style
type=>'ContentType', # button(ENUM);a,link,object,param,script,
# style;input(ENUM)
usemap=>'uri', # img,input,object
valign=>'cellValign', # ENUM CellAlign
value=>'cdata', # button,input,option,param
valuetype=>'valueType', # ENUM param
width=>'length', # iframe,img,object,table(length);
# col,colgroup(multiLength)
xmlns=>'uri', # html (XHTML)
);
# Attribut-Domänen (werden aktuell nicht geprüft)
my %Domain = (
bool=>1,
buttonType=>[qw/button reset submit/],
cdata=>1,
cellAlign=>[qw/center char justify left right/],
cellValign=>[qw/baseline bottom middle top/],
character=>1,
charset=>1,
charsets=>1,
class=>1,
contentType=>1,
contentTypes=>1,
coords=>1,
datetime=>1,
dir=>[qw/ltr rtl/],
frameBorder=>[0,1],
frameTarget=>1,
id=>1,
idrefs=>1,
inputType=>[qw/checkbox file hidden password radio reset submit text/],
languageCode=>1,
length=>1,
linkTypes=>[qw/stylesheet next prev copyright index glossary/], # unv.
mediaDesc=>[qw/all aural braille handheld print projection screen tty tv/],
method=>[qw/get post/],
multiLength=>1,
multiLengths=>1,
nmtoken=>1,
number=>1,
pixels=>1,
scope=>[qw/col colgroup row rowgroup/],
script=>1,
scrolling=>[qw/no yes auto/],
shape=>[qw/circle default poly rect/],
space=>['preserve'],
styleSheet=>1,
text=>1,
tframe=>[qw/above below border box hsides lhs rhs void vsides/],
trules=>[qw/all cols groups none rows/],
uri=>1,
uriList=>1,
valueType=>[qw/data object ref/],
);
# # den Platzbdearf der Hashes ausgeben
#
# use Devel::Size;
# my @arr = (
# Default=>\%Default,
# Element=>\%Element,
# Attribute=>\%Attribute,
# DefaultAttributes=>\%DefaultAttributes,
# DefaultAttributesXhtml=>\%DefaultAttributesXhtml,
# );
# my $bytes = 0;
# my $str = '';
# while (@arr) {
# my $name = shift @arr;
# my $ref = shift @arr;
# my $n = Devel::Size::total_size($ref);
# $bytes += $n;
# $str .= ', ' if $str;
# $str .= "%$name: $n";
# }
lib/Prty/Html/Tag.pm view on Meta::CPAN
Bette im Falle eines <img>-Tag das Bild in den HTML-Code ein.
=item -endTagOnly => $bool (Default: 0)
Erzeuge nur den Content und den End-Tag. Diese Option ist nützlich,
wenn der HTML-Code inkrementell geschrieben wird und z.B. im Fehlerfall
nur der Rest mit schlieÃenden Tags generiert werden soll.
my $html = $h->tag('html',
-endTagOnly=>1,
$h->tag('body',
-endTagOnly=>1,
'-',
$h->tag('h1','Fatal Error'),
$h->tag('pre',$msg),
)
);
$http->append($html);
=item -fmt => 'e'|'m'|'p'|'v'|'i' (Default: richtet sich nach $tag)
Art der Content-Formatierung.
=over 4
=item 'e' (empty)
Element hat keinen Content (br, hr, ...)
<TAG ... />\n
=item 'E' (empty, kein NEWLINE)
Wie 'e', nur ohne NEWLINE am Ende (img, input, ...)
<TAG ... />
=item 'm' (multiline)
Content wird auf eigene Zeile(n) zwischen Begin- und End-Tag
gesetzt und um -ind=>$n Leerzeichen eingerückt. Ist der Content
leer, wird der End-Tag direkt hinter den Begin-Tag gesetzt.
(html, head, body, form, p, div, script, style, ...)
<TAG ...>
CONTENT
</TAG>\n
Ist der Content leer:
<TAG ...></TAG>
=item 'M' (multiline, ohne Einrückung)
Wie 'm', nur ohne Einrückung (html, ...)
<TAG ...>
CONTENT
</TAG>\n
=item 'c' (cdata)
Wie 'm', nur dass der Content in CDATA eingefasst wird:
<TAG ...>
// <![CDATA[
CONTENT
// ]]>
</TAG>
Der W3 HTML Validator bemängelt die Zeichen & und > dann nicht
im Content. (script)
=item 'p' (protect)
Der Content wird geschützt, indem dieser einzeilig gemacht
(LF und CR werden durch und ersetzt) und unmittelbar
zwischen Begin- und End-Tag gesetzt wird (pre, textarea, ...).
<TAG ...>CONTENT</TAG>\n
=item 'P' (protect, Einrückung entfernen)
Wie 'p', nur dass die Einrückung des Content entfernt wird.
=item 'v' (variable)
Ist der Content einzeilig, wird er unmittelbar zwischen Begin-
und End-Tag gesetzt:
<TAG ...>CONTENT</TAG>\n
Ist der Content mehrzeilig, wird er eingerückt:
<TAG ...>
CONTENT
</TAG>\n
(title, h1-h6, ...)
=item 'i' (inline)
Der Content wird belassen wie er ist. Dies ist der Default für Tags,
die in FlieÃtext eingesetzt werden. Ein NEWLINE wird nicht angehängt.
Text Text <TAG ...>Text Text
Text</TAG> Text Text
(a, b, span, ...)
=back
Bei Wert 0 generiere keinen End-Tag bei leerem Content, sondern
<TAG .../>
=item -ignoreIf => $bool (Default: 0)
Liefere Leerstring, wenn Bedingung $bool erfüllt ist.
=item -ignoreIfNull => $bool (Default: 0)
( run in 1.115 second using v1.01-cache-2.11-cpan-aadc1410aed )