Quiq
view release on metacpan or search on metacpan
lib/Quiq/Html/Tag.pm view on Meta::CPAN
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
summary => 'm', # Kurzbeschreibung zu Details (<details>)
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
download => 'filename', # a
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/Quiq/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 => 'c'|'e'|'E'|'m'|'M'|'p'|'P'|'v'|'i' (Default: gemäà $elem)
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.602 second using v1.01-cache-2.11-cpan-d06a3f9ecfd )