source: default/v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/generator/EbnfGenerator.xtend @ 70

Last change on this file since 70 was 70, checked in by hkaulbersch, 11 years ago

Added a method to get the whole path of generated files.

File size: 4.7 KB
Line 
1/*
2 * generated by Xtext
3 */
4package de.ugoe.cs.swe.bnftools.generator
5
6import org.eclipse.emf.ecore.resource.Resource
7import org.eclipse.xtext.generator.IGenerator
8import org.eclipse.xtext.generator.IFileSystemAccess
9import de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf
10import de.ugoe.cs.swe.bnftools.ebnf.BnfEntry
11import de.ugoe.cs.swe.bnftools.ebnf.Rule
12import de.ugoe.cs.swe.bnftools.ebnf.DefinitionList
13import de.ugoe.cs.swe.bnftools.ebnf.SingleDefinition
14import de.ugoe.cs.swe.bnftools.ebnf.Term
15import de.ugoe.cs.swe.bnftools.ebnf.GroupedSequence
16import de.ugoe.cs.swe.bnftools.ebnf.Atom
17import de.ugoe.cs.swe.bnftools.ebnf.RepeatedSequence
18import de.ugoe.cs.swe.bnftools.ebnf.OptionalSequence
19import de.ugoe.cs.swe.bnftools.ebnf.RuleReference
20import de.ugoe.cs.swe.bnftools.ebnf.StringRule
21import java.io.File
22import org.eclipse.xtext.generator.IFileSystemAccessExtension2
23import org.eclipse.emf.common.util.URI;
24import org.eclipse.xtext.generator.IFileSystemAccessExtension
25import java.io.PrintWriter
26/**
27 * Generates code from your model files on save.
28 *
29 * see http://www.eclipse.org/Xtext/documentation.html#TutorialCodeGeneration
30 */
31class EbnfGenerator implements IGenerator {
32        //generation of the xsl-file
33        override void doGenerate(Resource resource, IFileSystemAccess fsa) {
34                var String workspacePath =WorkspaceResolver.getWorkspace();
35                for (e : resource.allContents.toIterable.filter(EtsiBnf)) {
36                        if (e.bnfEntry.size!=0) {
37                                 fsa.generateFile(e.name + ".fo", e.compile)
38                                 
39                                 //generate pdf
40                                 var uri = (fsa as IFileSystemAccessExtension2).getURI(e.name+".fo");
41                                 var String fullUri = workspacePath+uri.path.substring(10,uri.path.length);
42                                System.out.println(workspacePath+uri.path.substring(10,uri.path.length));
43                                var File file = new File(fullUri);
44                                System.out.println(file.exists);
45//                               System.out.println(uri.toString());
46                                 
47                                 
48//                               System.out.println(file.exists);
49                               
50//                               foToPdf.createPdfFromFo(file,aPath.substring(0,aPath.length-3));
51                        }
52                }
53        }
54
55        // compile the different entities of the Bnf-----------------------------------------------------------------------------
56        def compile(EtsiBnf bnf)
57        '''
58        <?xml version="1.0"?>
59        <!-- fop «bnf.name».xml -rtf «bnf.name».rtf -->
60        <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
61
62                <fo:layout-master-set>
63                        <fo:simple-page-master master-name="A4" page-width="210mm" page-height="297mm">
64                        <fo:region-body region-name="xsl-region-body"  margin="2cm"/>
65                </fo:simple-page-master>
66                </fo:layout-master-set>
67       
68                <fo:page-sequence  master-reference="A4">
69                        <fo:flow flow-name="xsl-region-body" font-family="verdana">
70                               
71                                <fo:block span="all"  text-align="center" text-indent="1em" font-family="Arial" font-size="20pt" font-weight="bold" background-color="#EEEEEE" line-height="20mm">«bnf.name»</fo:block>
72                                               
73                                «FOR bnfentry:bnf.bnfEntry»
74                                        «bnfentry.compile»
75                                «ENDFOR»
76                        </fo:flow>
77                </fo:page-sequence>
78        </fo:root>'''
79       
80        def compile(BnfEntry bnfEntry)'''
81                «IF bnfEntry.rule!= null»
82                                «bnfEntry.rule.compile»
83                «ENDIF»
84        '''
85       
86        def compile(Rule rule)'''<fo:block><fo:inline id="«rule.name»"  color="purple">«IF rule.rulenumber!=0»«rule.rulenumber».        «ENDIF»«rule.name»</fo:inline>  ::=     «rule.definitionList.compile»</fo:block>'''
87       
88        def compile(DefinitionList dList)'''«FOR sDef:dList.singleDefinition»«sDef.compile»«IF !sDef.equals(dList.singleDefinition.last)» | «ENDIF»«ENDFOR»'''
89       
90        def compile(SingleDefinition sDefinition)'''«FOR term:sDefinition.terms»«term.compile»«ENDFOR»'''
91       
92        def compile(Term term)'''«IF term.termAtom!=null»«term.termAtom.compile»«ENDIF»«IF term.termOptionalSequence!=null»«term.termOptionalSequence.compile»«ENDIF»«IF term.termRepeatedSequence!=null»«term.termRepeatedSequence.compile»«ENDIF»«IF term.termGroupedSequence!=null»«term.termGroupedSequence.compile»«ENDIF»'''
93       
94        def compile(GroupedSequence gSequ)'''«FOR d :gSequ.definitionList»«d.compile»«ENDFOR»'''
95
96        def compile(RepeatedSequence rSequ)'''{«FOR d:rSequ.definitions»«d.compile»«ENDFOR»}«IF rSequ.morethanonce»+«ENDIF»'''
97       
98        def compile(OptionalSequence oSequ)'''(«FOR d:oSequ.definitionList»«d.compile»«ENDFOR»)'''
99       
100        def compile(Atom atom)'''
101        «IF atom.atomRuleReference!= null»«atom.atomRuleReference.compile»«ENDIF»«IF atom.atomStringRule!= null»«atom.atomStringRule.compile»«ENDIF»'''
102       
103        def compile(RuleReference rRef)'''<fo:basic-link internal-destination="«rRef.ruleref.name»" text-decoration="underline" color="blue">«rRef.ruleref.name»</fo:basic-link>        '''
104       
105        def compile(StringRule sRule)'''«IF sRule.colon!=null»«sRule.colon»«ENDIF»«IF sRule.literal!=null»«sRule.literal»       «ENDIF»'''
106       
107       
108}
Note: See TracBrowser for help on using the repository browser.