blob: 122f2178e691562ff72faeed7fb42552edc82eb9 [file] [log] [blame]
grammar org.eclipse.fx.ide.css.Definition with org.eclipse.xtext.xbase.Xbase // hidden(WS, SL_COMMENT)
generate definition "http://www.bestsolution.at/efxclipse/tooling/css/Definition"
CSSDefs:
imports+=Import*
packageDef=PackageDeclaration
;
Import:
'import' importedNamespace=QualifiedNameWithWildcard;
PackageDeclaration:
'package' name=QualifiedName '{'
typDefs+=TypeDef? (',' typDefs+=TypeDef)*
elementDefs+=ElementDef? (',' elementDefs+=ElementDef)*
subpackages+=PackageDeclaration*
'}';
enum PrimTypes:
STRING | INT | DOUBLE | BOOL
;
TypeDef:
GenericTypeDef | EnumTypeDef
;
GenericTypeDef:
doc=DOCU?
'type' name=ValidID '{'
typeDef=TypeValue
'}'
;
EnumTypeDef:
doc=DOCU?
'enumtype' name=ValidID '{'
values+=EnumValue (',' values+=EnumValue)+
'}'
;
TypeValue:
TypeDefValue | PrimValue
;
TypeDefValue:
typeRule=TypeRule
;
PrimValue:
v=PrimTypes
;
ElementDef:
doc=DOCU?
name=ValidID ('extends' superElements+=[ElementDef|QualifiedName] (',' superElements+=[ElementDef|QualifiedName])*)? '{'
properties+=Property? (',' properties+=Property)*
pseudoClasses+=PseudoClass? (',' pseudoClasses+=PseudoClass)*
subelements+=SubElement? (',' subelements+=SubElement)*
'}'
;
SubElement:
doc=DOCU?
'substructure' type=[ElementDef|QualifiedName] name=STRING ('{'
subelements+=SubElement? (',' subelements+=SubElement)*
'}')?
;
Property:
GenericProperty | EnumProperty | NumberProperty | BooleanProperty | StringProperty | IntegerProperty
;
PseudoClass:
doc=DOCU?
'pseudoclass' name=STRING
;
GenericProperty:
doc=DOCU?
name=STRING 'default' defaultValue=STRING '{'
typeRule=TypeRule
'}'
;
TypeRule:
segment=Segment typeSegment+=SubRule*
;
SubRule:
TypeRuleSegment | TypeGroupSegment | TypeKeySegment
;
TypeRuleSegment:
op=('||'|'|') segment=Segment
;
Segment:
TypeSegment | TypeFunctionSegment | TypeGroupSegment
;
TypeSegment:
('<' type+=[TypeDef|ValidID]'>')+
;
TypeKeySegment:
keyword=STRING ('?')?
;
TypeFunctionSegment:
function=ValidID '(' type=[TypeDef|ValidID] ')'
;
TypeGroupSegment:
'[' sep=STRING? rule=TypeRule ']' ('*'|'+'|'?'|('{' min=INT (','max=INT)?'}'))?
;
EnumProperty:
doc=DOCU?
'enum' name=STRING 'default' defaultValue=STRING '{'
values+=EnumValue (',' values+=EnumValue)+
'}'
;
EnumValue:
doc=DOCU?
value=STRING
;
NumberProperty:
doc=DOCU?
unsigned?='unsigned'? 'number' name=STRING 'default' defaultValue=DECIMAL ('range' min=DECIMAL 'to' max=DECIMAL)?
;
IntegerProperty:
doc=DOCU?
unsigned?='unsigned'? 'integer' name=STRING 'default' defaultValue=INT ('range' min=INT 'to' max=INT)?
;
BooleanProperty:
doc=DOCU?
'boolean' name=STRING 'default' defaultValue=('true'|'false')
;
StringProperty:
doc=DOCU?
'string' name=STRING 'default' defaultValue=STRING
;
terminal DOCU: '/#' -> '#/';
/*Operation:
'op' name=ValidID '(' (params+=FullJvmFormalParameter (',' params+=FullJvmFormalParameter)*)? ')' ':' type=JvmTypeReference
body=XBlockExpression;*/
terminal ID:
'^'? ('a'..'z'|'A'..'Z'|'$'|'_') ('a'..'z'|'A'..'Z'|'$'|'_'|'0'..'9')*;