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

Last change on this file since 69 was 69, checked in by hkaulbersch, 10 years ago

added the functions to generate a .pdf from .fo.
Still Not accessible.

File size: 4.6 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;
24
25/**
26 * Generates code from your model files on save.
27 *
28 * see http://www.eclipse.org/Xtext/documentation.html#TutorialCodeGeneration
29 */
30class EbnfGenerator implements IGenerator {
31        //generation of the xsl-file
32        override void doGenerate(Resource resource, IFileSystemAccess fsa) {
33                for (e : resource.allContents.toIterable.filter(EtsiBnf)) {
34                        if (e.bnfEntry.size!=0) {
35                                 fsa.generateFile(e.name + ".fo", e.compile)
36                                 
37                                 //generate pdf
38//                               var uri = (fsa as IFileSystemAccessExtension2).getURI(e.name+".fo");
39//                               (fsa as IFileSystemAccessExtension2).
40//                             
41//                               System.out.println(uri.hasAbsolutePath());
42//                               System.out.println(uri.path.substring(0,uri.path.length-3));
43//                               System.out.println(uri.file);
44//                               System.out.println(uri.toString());
45//                               var File file = new File(uri.path).absoluteFile;
46//                               System.out.println(file.exists);
47//                               var String aPath = file.absolutePath;
48//                               
49//                               foToPdf.createPdfFromFo(file,aPath.substring(0,aPath.length-3));
50                        }
51                }
52        }
53
54        // compile the different entities of the Bnf-----------------------------------------------------------------------------
55        def compile(EtsiBnf bnf)
56        '''
57        <?xml version="1.0"?>
58        <!-- fop «bnf.name».xml -rtf «bnf.name».rtf -->
59        <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
60
61                <fo:layout-master-set>
62                        <fo:simple-page-master master-name="A4" page-width="210mm" page-height="297mm">
63                        <fo:region-body region-name="xsl-region-body"  margin="2cm"/>
64                </fo:simple-page-master>
65                </fo:layout-master-set>
66       
67                <fo:page-sequence  master-reference="A4">
68                        <fo:flow flow-name="xsl-region-body" font-family="verdana">
69                               
70                                <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>
71                                               
72                                «FOR bnfentry:bnf.bnfEntry»
73                                        «bnfentry.compile»
74                                «ENDFOR»
75                        </fo:flow>
76                </fo:page-sequence>
77        </fo:root>'''
78       
79        def compile(BnfEntry bnfEntry)'''
80                «IF bnfEntry.rule!= null»
81                                «bnfEntry.rule.compile»
82                «ENDIF»
83        '''
84       
85        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>'''
86       
87        def compile(DefinitionList dList)'''«FOR sDef:dList.singleDefinition»«sDef.compile»«IF !sDef.equals(dList.singleDefinition.last)» | «ENDIF»«ENDFOR»'''
88       
89        def compile(SingleDefinition sDefinition)'''«FOR term:sDefinition.terms»«term.compile»«ENDFOR»'''
90       
91        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»'''
92       
93        def compile(GroupedSequence gSequ)'''«FOR d :gSequ.definitionList»«d.compile»«ENDFOR»'''
94
95        def compile(RepeatedSequence rSequ)'''{«FOR d:rSequ.definitions»«d.compile»«ENDFOR»}«IF rSequ.morethanonce»+«ENDIF»'''
96       
97        def compile(OptionalSequence oSequ)'''(«FOR d:oSequ.definitionList»«d.compile»«ENDFOR»)'''
98       
99        def compile(Atom atom)'''
100        «IF atom.atomRuleReference!= null»«atom.atomRuleReference.compile»«ENDIF»«IF atom.atomStringRule!= null»«atom.atomStringRule.compile»«ENDIF»'''
101       
102        def compile(RuleReference rRef)'''<fo:basic-link internal-destination="«rRef.ruleref.name»" text-decoration="underline" color="blue">«rRef.ruleref.name»</fo:basic-link>        '''
103       
104        def compile(StringRule sRule)'''«IF sRule.colon!=null»«sRule.colon»«ENDIF»«IF sRule.literal!=null»«sRule.literal»       «ENDIF»'''
105       
106       
107}
Note: See TracBrowser for help on using the repository browser.