blob: 0d56f256c0c40616bb71b1f581dfae8a0ff8f830 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011 Willink Transformations and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
*
* Contributors:
* E.D.Willink - initial API and implementation
*******************************************************************************/
grammar org.eclipse.ocl.xtext.markup.Markup hidden()
//generate markup "http://www.omg.org/ocl/markup/Markup"
import "http://www.eclipse.org/emf/2002/Ecore" as ecore
import "platform:/resource/org.eclipse.ocl.xtext.markup/model/Markup.ecore"
Markup:
elements+=MarkupElement*;
terminal fragment NUMBER: '0'..'9';
terminal fragment LETTER: 'a'..'z' | 'A'..'Z' | '_';
terminal fragment ESCAPED : '\\' ('b' | 't' | 'n' | 'f' | 'r' | '"' | "'" | '\\' | '<' | '>' | '[' | ']');
terminal fragment VERTICAL_WS : '\n' | '\r';
terminal fragment HORIZONTAL_WS : ' ' | '\t';
terminal INT: NUMBER+;
terminal STRING : '"' ( ESCAPED | !('\\' | '"') )* '"' ;
terminal ID: LETTER (LETTER | NUMBER)*;
terminal WORD: ( ESCAPED | !('\\' | '"' | '[' | ']' | ':' | '#' | ',' | HORIZONTAL_WS | VERTICAL_WS) )+;
terminal NL : (HORIZONTAL_WS* VERTICAL_WS)+;
terminal WS : HORIZONTAL_WS+;
terminal ANY_OTHER: .;
MarkupKeyword:
'b'
| 'e'
| 'bullet'
| 'figure'
| 'figureRef'
| 'footnote'
| 'heading'
| 'oclCode'
| 'oclEval'
| 'oclText'
;
MarkupElement:
FontElement
| NewLineElement
| BulletElement
| FigureElement
| FigureRefElement
| FootnoteElement
| HeadingElement
| NullElement
| OCLCodeElement
| OCLEvalElement
| OCLTextElement
| TextElement // Last to give everything else a try first
;
BulletElement:
{BulletElement} 'bullet' (':' level=INT)? '[' elements+=MarkupElement* ']'
;
FontElement:
font=('b'|'e') '[' elements+=MarkupElement* ']'
;
FigureElement:
'figure' ('#' def=ID)? '[' src=STRING (',' alt=STRING (',' requiredWidth=INT (',' requiredHeight=INT)?)?)? ']'
;
FigureRefElement:
'figureRef' '[' ref=[FigureElement|ID] ']'
;
FootnoteElement:
{FootnoteElement} 'footnote' '[' elements+=MarkupElement* ']'
;
HeadingElement:
{HeadingElement} 'heading' (':' level=INT)? '[' elements+=MarkupElement* ']'
;
NewLineElement:
text=NL
;
NullElement:
{NullElement} '[' elements+=MarkupElement* ']'
;
OCLCodeElement:
{OCLCodeElement} 'oclCode' '[' elements+=MarkupElement* ']'
;
OCLEvalElement:
{OCLEvalElement} 'oclEval' '[' elements+=MarkupElement* ']'
;
OCLTextElement:
{OCLTextElement} 'oclText' '[' elements+=MarkupElement* ']'
;
TextElement:
text+=(ID|WORD|INT|WS|':'|'#'|',')+ | text+=MarkupKeyword
;