1*61046927SAndroid Build Coastguard Worker1. Introduction to rules-ng-ng text format 2*61046927SAndroid Build Coastguard Worker 3*61046927SAndroid Build Coastguard WorkerThis-specification defines a text format that can be converted to and from rules-ng-ng XML. 4*61046927SAndroid Build Coastguard WorkerIt is intended to allow to create rules-ng-ng files with much less typing and with a more readable text. 5*61046927SAndroid Build Coastguard Workerxml2text can convert rules-ng-ng XML to this text format 6*61046927SAndroid Build Coastguard Workertext2xml can convert this text format to rules-ng-ng XML 7*61046927SAndroid Build Coastguard Worker 8*61046927SAndroid Build Coastguard WorkerThis specification is an addendum to the rules-ng-ng specification and assumes familiarity with it. 9*61046927SAndroid Build Coastguard Worker 10*61046927SAndroid Build Coastguard Worker2. Format 11*61046927SAndroid Build Coastguard Worker 12*61046927SAndroid Build Coastguard Worker2.1. Line format 13*61046927SAndroid Build Coastguard Worker 14*61046927SAndroid Build Coastguard WorkerThe initial indentation of a line is divided by 8 and the result determines the position in the document structure (similar to the Python language). 15*61046927SAndroid Build Coastguard WorkerA "//" anywhere in the line causes the rest to be converted to an XML comment (like C++) 16*61046927SAndroid Build Coastguard WorkerA line starting with ":" creates a <doc> tag with the rest of the line (excluding anything starting with //). 17*61046927SAndroid Build Coastguard WorkerThe content of multiple lines starting with ":" is merged in a single <doc> tag. 18*61046927SAndroid Build Coastguard Worker 19*61046927SAndroid Build Coastguard Worker2.2. Tokenization 20*61046927SAndroid Build Coastguard Worker 21*61046927SAndroid Build Coastguard WorkerThe line is then tokenized. 22*61046927SAndroid Build Coastguard WorkerToken are generally continuous strings on non-whitespace characters, with some exceptions 23*61046927SAndroid Build Coastguard WorkerSome characters (such as ":", "=" and "-") form a single-character token. 24*61046927SAndroid Build Coastguard WorkerText within double quotes generates a <brief> tag. 25*61046927SAndroid Build Coastguard WorkerAny token formatted as ATTR(VALUE) generates an ATTR="VALUE" attribute. No whitespace allowed between ATTR and the '(' character. 26*61046927SAndroid Build Coastguard WorkerAny token formatted as (VALUE) generates a variants="VALUE" attribute. 27*61046927SAndroid Build Coastguard WorkerAny token formatted as (VARSET=VALUE) generates a varset="VARSET" variants="VALUE" attribute. 28*61046927SAndroid Build Coastguard Worker 29*61046927SAndroid Build Coastguard Worker2.3. Special token sequences 30*61046927SAndroid Build Coastguard Worker 31*61046927SAndroid Build Coastguard WorkerThese sequences are recognized and extracted before matching the line format: 32*61046927SAndroid Build Coastguard Worker 33*61046927SAndroid Build Coastguard Worker: NUM 34*61046927SAndroid Build Coastguard Worker set REGLIKE to regNUM 35*61046927SAndroid Build Coastguard Worker you must specify a type if the reg is anonymous 36*61046927SAndroid Build Coastguard Worker the : is recognized only if it is the third or successive token (and not the last) to avoid ambiguity with bitfields and generic tags 37*61046927SAndroid Build Coastguard Worker 38*61046927SAndroid Build Coastguard Worker{ STRIDE } 39*61046927SAndroid Build Coastguard Worker stride="STRIDE" attribute 40*61046927SAndroid Build Coastguard Worker 41*61046927SAndroid Build Coastguard Worker[ LENGTH ] 42*61046927SAndroid Build Coastguard Worker length="LENGTH" attribute 43*61046927SAndroid Build Coastguard Worker 44*61046927SAndroid Build Coastguard Worker!FLAGS 45*61046927SAndroid Build Coastguard Worker access="FLAGS" 46*61046927SAndroid Build Coastguard Worker no whitespace allowed after '!' 47*61046927SAndroid Build Coastguard Worker 48*61046927SAndroid Build Coastguard Worker:= 49*61046927SAndroid Build Coastguard Worker at the end of the line 50*61046927SAndroid Build Coastguard Worker set REGLIKE to "stripe" 51*61046927SAndroid Build Coastguard Worker 52*61046927SAndroid Build Coastguard Worker= 53*61046927SAndroid Build Coastguard Worker at the end of the line 54*61046927SAndroid Build Coastguard Worker set REGLIKE to "array" 55*61046927SAndroid Build Coastguard Worker 56*61046927SAndroid Build Coastguard Workerinline 57*61046927SAndroid Build Coastguard Worker at the beginning of the line 58*61046927SAndroid Build Coastguard Worker inline="yes" attribute 59*61046927SAndroid Build Coastguard Worker 60*61046927SAndroid Build Coastguard Worker2.4. Line patterns 61*61046927SAndroid Build Coastguard Worker 62*61046927SAndroid Build Coastguard WorkerThe following line patterns are understood. 63*61046927SAndroid Build Coastguard WorkerOnly word tokens are used to match lines. 64*61046927SAndroid Build Coastguard WorkerAll tokens with special meaning are treated separately as described above. 65*61046927SAndroid Build Coastguard Worker[FOO] means that FOO is optional 66*61046927SAndroid Build Coastguard Worker 67*61046927SAndroid Build Coastguard Worker#import "FILE" 68*61046927SAndroid Build Coastguard Worker <import file="FILE"/> 69*61046927SAndroid Build Coastguard Worker 70*61046927SAndroid Build Coastguard Worker#pragma regNUM 71*61046927SAndroid Build Coastguard Worker REGLIKE is now set by default to regNUM instead of reg32 72*61046927SAndroid Build Coastguard Worker 73*61046927SAndroid Build Coastguard Worker@TAG [NAME] 74*61046927SAndroid Build Coastguard Worker <TAG name="NAME"/> 75*61046927SAndroid Build Coastguard Worker use this if there are no children 76*61046927SAndroid Build Coastguard Worker 77*61046927SAndroid Build Coastguard WorkerTAG [NAME] : 78*61046927SAndroid Build Coastguard Worker <TAG name="NAME"> 79*61046927SAndroid Build Coastguard Worker use this if there are children 80*61046927SAndroid Build Coastguard Worker 81*61046927SAndroid Build Coastguard WorkerTOKEN 82*61046927SAndroid Build Coastguard Worker <value value="TOKEN" /> if inside a reg or enum and TOKEN starts with a digit 83*61046927SAndroid Build Coastguard Worker <value name="TOKEN" /> if inside a reg or enum and TOKEN does not start with a digit 84*61046927SAndroid Build Coastguard Worker <REGLIKE offset="TOKEN" /> otherwise 85*61046927SAndroid Build Coastguard Worker 86*61046927SAndroid Build Coastguard WorkerPOS NAME 87*61046927SAndroid Build Coastguard Worker <bitfield low="POS" high="POS" name="NAME"/> if inside a reg or bitset 88*61046927SAndroid Build Coastguard Worker <REGLIKE offset="POS" name="NAME"> otherwise 89*61046927SAndroid Build Coastguard Worker 90*61046927SAndroid Build Coastguard WorkerLOW - HIGH NAME [TYPE] 91*61046927SAndroid Build Coastguard Worker <bitfield low="LOW" high="HIGH" name="NAME" type="TYPE"/> 92*61046927SAndroid Build Coastguard Worker 93*61046927SAndroid Build Coastguard WorkerVALUE = NAME 94*61046927SAndroid Build Coastguard Worker <value value="VALUE" name="NAME"/> 95*61046927SAndroid Build Coastguard Worker 96*61046927SAndroid Build Coastguard Workeruse WHAT NAME 97*61046927SAndroid Build Coastguard Worker <use-WHAT name="NAME" /> 98*61046927SAndroid Build Coastguard Worker 99*61046927SAndroid Build Coastguard WorkerOFFSET NAME [TYPE] 100*61046927SAndroid Build Coastguard Worker <REGLIKE offset="OFFSET" name="NAME" type="TYPE"> 101*61046927SAndroid Build Coastguard Worker 102