165
# Some factoring here, for the two kinds of content.
external ::= '(' (extins DATA:data |
extdel |
usrop external* |
att_contents)
')';
# end_op not needed for external changes
extins ::= EXTINS STRING:id
(ext_change_att:att '=' STRING:value)* ')';
extdel ::= EXTDEL STRING:id
(ext_change_att:att '=' STRING:value)* ')';
usrop ::= USROP STRING:id
(usrop_att:att '=' STRING:value )* ')';
att_contents ::= ATTLISTSTRING:id
(any_att:att '=' STRING:value)* ')';
doc_att:att %{ att = null; %}
::= BASE | tracking_att:attr;
tracking_att:att %{ att = null; %}
::= (OWNER
| TIMESTAMP
| COMMENT
| USER_KEYWORD:attr %{ att = attr; %});
change_att:att %{ att = null; %}
::= ATT
| tracking_att:attr %{ att = attr; %}
# We allow external change attributes, so we can internalize changes
# without removing their original attributes. These attributes should
# not be used on changes that were not originally external...
| POS
| BASE
| LEN
ext_change_att:att ::= change_att:attr ;
usrop_att:att ::= change_att:attr
| ITEMS
| INCLUDES
# Some factoring here, for the two kinds of content.
external ::= '(' (extins DATA:data |
extdel |
usrop external* |
att_contents)
')';
# end_op not needed for external changes
extins ::= EXTINS STRING:id
(ext_change_att:att '=' STRING:value)* ')';
extdel ::= EXTDEL STRING:id
(ext_change_att:att '=' STRING:value)* ')';
usrop ::= USROP STRING:id
(usrop_att:att '=' STRING:value )* ')';
att_contents ::= ATTLISTSTRING:id
(any_att:att '=' STRING:value)* ')';
doc_att:att %{ att = null; %}
::= BASE | tracking_att:attr;
tracking_att:att %{ att = null; %}
::= (OWNER
| TIMESTAMP
| COMMENT
| USER_KEYWORD:attr %{ att = attr; %});
change_att:att %{ att = null; %}
::= ATT
| tracking_att:attr %{ att = attr; %}
# We allow external change attributes, so we can internalize changes
# without removing their original attributes. These attributes should
# not be used on changes that were not originally external...
| POS
| BASE
| LEN
ext_change_att:att ::= change_att:attr ;
usrop_att:att ::= change_att:attr
| ITEMS
| INCLUDES