1. Introduction to rules-ng-ng text format This-specification defines a text format that can be converted to and from rules-ng-ng XML. It is intended to allow to create rules-ng-ng files with much less typing and with a more readable text. xml2text can convert rules-ng-ng XML to this text format text2xml can convert this text format to rules-ng-ng XML This specification is an addendum to the rules-ng-ng specification and assumes familiarity with it. 2. Format 2.1. Line format The initial indentation of a line is divided by 8 and the result determines the position in the document structure (similar to the Python language). A "//" anywhere in the line causes the rest to be converted to an XML comment (like C++) A line starting with ":" creates a tag with the rest of the line (excluding anything starting with //). The content of multiple lines starting with ":" is merged in a single tag. 2.2. Tokenization The line is then tokenized. Token are generally continuous strings on non-whitespace characters, with some exceptions Some characters (such as ":", "=" and "-") form a single-character token. Text within double quotes generates a tag. Any token formatted as ATTR(VALUE) generates an ATTR="VALUE" attribute. No whitespace allowed between ATTR and the '(' character. Any token formatted as (VALUE) generates a variants="VALUE" attribute. Any token formatted as (VARSET=VALUE) generates a varset="VARSET" variants="VALUE" attribute. 2.3. Special token sequences These sequences are recognized and extracted before matching the line format: : NUM set REGLIKE to regNUM you must specify a type if the reg is anonymous the : is recognized only if it is the third or successive token (and not the last) to avoid ambiguity with bitfields and generic tags { STRIDE } stride="STRIDE" attribute [ LENGTH ] length="LENGTH" attribute !FLAGS access="FLAGS" no whitespace allowed after '!' := at the end of the line set REGLIKE to "stripe" = at the end of the line set REGLIKE to "array" inline at the beginning of the line inline="yes" attribute 2.4. Line patterns The following line patterns are understood. Only word tokens are used to match lines. All tokens with special meaning are treated separately as described above. [FOO] means that FOO is optional #import "FILE" #pragma regNUM REGLIKE is now set by default to regNUM instead of reg32 @TAG [NAME] use this if there are no children TAG [NAME] : use this if there are children TOKEN if inside a reg or enum and TOKEN starts with a digit if inside a reg or enum and TOKEN does not start with a digit otherwise POS NAME if inside a reg or bitset otherwise LOW - HIGH NAME [TYPE] VALUE = NAME use WHAT NAME OFFSET NAME [TYPE]