repository ::= #ignore(C++) #continue [theme | working]* #empty; theme ::= #readIdentifier:"theme" #continue #readCString:sName => insert this.theme[sName] = sName; => localref theTheme = this.theme[sName]; '{' [description:theTheme.description]? [subject(theTheme)]* '}'; working ::= #readIdentifier:"working" #continue #readCString:sName => insert this.working[sName] = sName; => localref theWorking = this.working[sName]; '{' [description:theWorking.description]? [state:theWorking.state]? '}'; description : value ::= #readIdentifier:"description" #continue '{' #!ignore description1:description '}'; description1 ::= ['\\' #readChar | '{' description1 #continue '}' | ~'}']*; subject(theTheme : node) ::= #readIdentifier:"subject" #continue #readCString:sName => insert theTheme.subject[sName] = sName; => localref theSubject = theTheme.subject[sName]; '{' [description:theSubject.description]? [state:theSubject.state]? [#insert(theSubject.script) script(theSubject.script)]? [#insert(theSubject.file) file(theSubject.file)]? [#insert(theSubject.example) example(theSubject.example)]? '}'; state : value ::= #readIdentifier:"state" [':']? #continue #readIdentifier:{"pending", "progress", "complete"}:state ';'; script(theScript : node) ::= #readIdentifier:"script" #continue => pushItem theScript; ["link":theScript#back.link]? #readCString:theScript#back [ ',' #continue => pushItem theScript; ["link":theScript#back.link]? #readCString:theScript#back ]* ';'; file(theFile : node) ::= #readIdentifier:"file" #continue => pushItem theFile; ["link":theFile#back.link]? #readCString:theFile#back [ ',' #continue => pushItem theFile; ["link":theFile#back.link]? #readCString:theFile#back ]* ';'; example(theExample : node) ::= #readIdentifier:"example" #continue => pushItem theExample; ["link":theExample#back.link]? #readCString:theExample#back [ ',' #continue => pushItem theExample; ["link":theExample#back.link]? #readCString:theExample#back ]* ';';