Package TWiki::Attrs
Class of attribute sets, designed for parsing and storing attribute values
from a TWiki tag e.g.
%TAG{"joe" fred="bad" joe="mad"}%
An attribute set is a hash containing an entry for each parameter. The
default parameter (unnamed quoted string) is named
_DEFAULT
in the hash.
Attributes declared later in the string will override those of the same
name defined earlier. The one exception to this is the _DEFAULT key, where
the
first instance is always taken.
As well as the default TWiki syntax (parameter values double-quoted)
this class also parses single-quoted values, unquoted spaceless
values, spaces around the =, and commas as well as spaces separating values.
The extended syntax has to be enabled by passing the
$friendly
parameter
to
new
.
-
$string
- String containing attribute specification
-
$friendly
- if true, the parse will be according to the extended syntax pioneered by the original Contrib::Attrs. Otherwise it will be strict as per traditional TWiki syntax.
Parse a standard attribute string containing name=value pairs and create a new
attributes object. The value may be a word or a quoted string. If there is an
error during parsing, the parse will complete but $attrs->{_ERROR} will be
set in the new object. $attrs->{_RAW} will always contain the full unprocessed
$string.
Extended syntax example:
my $attrs = new TWiki::Attrs('the="time \\"has come", "the walrus" said to=speak of=\'many \\'things\', 1);
In this example:
-
the
will be time "has come
-
__default__
will be the walrus
-
said
will be on
-
to
will be speak
-
of
will be many 'things
Only " and ' are escaped.
Traditional syntax is as old TWiki, except that the whole string is parsed
(the old parser would only recognise default values in position 1, nowhere
else)
Return false if attribute set is not empty.
-
$key
- Attribute to remove
Remove an attr value from the map, return old value. After a call to
remove
the attribute is no longer defined.
Generate a printed form for the map, using strict
attribute syntax, with only the single-quote extension
syntax observed (no {} brackets, though).