Changeset 84 in default for v2/trunk/de.ugoe.cs.swe.bnftools.ebnf


Ignore:
Timestamp:
07/02/14 13:59:44 (10 years ago)
Author:
hkaulbersch
Message:

commit: generator improved

Location:
v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/generator
Files:
1 edited
1 moved

Legend:

Unmodified
Added
Removed
  • v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/generator/EbnfGenerator.xtend

    r82 r84  
    44package de.ugoe.cs.swe.bnftools.generator 
    55 
     6import de.ugoe.cs.swe.bnftools.ebnf.Atom 
     7import de.ugoe.cs.swe.bnftools.ebnf.BnfEntry 
     8import de.ugoe.cs.swe.bnftools.ebnf.DefinitionList 
     9import de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf 
     10import de.ugoe.cs.swe.bnftools.ebnf.GroupedSequence 
     11import de.ugoe.cs.swe.bnftools.ebnf.OptionalSequence 
     12import de.ugoe.cs.swe.bnftools.ebnf.RepeatedSequence 
     13import de.ugoe.cs.swe.bnftools.ebnf.Rule 
     14import de.ugoe.cs.swe.bnftools.ebnf.RuleReference 
     15import de.ugoe.cs.swe.bnftools.ebnf.SingleDefinition 
     16import de.ugoe.cs.swe.bnftools.ebnf.StringRule 
     17import de.ugoe.cs.swe.bnftools.ebnf.Term 
     18import java.io.File 
    619import org.eclipse.emf.ecore.resource.Resource 
     20import org.eclipse.xtext.generator.IFileSystemAccess 
     21import org.eclipse.xtext.generator.IFileSystemAccessExtension2 
    722import org.eclipse.xtext.generator.IGenerator 
    8 import org.eclipse.xtext.generator.IFileSystemAccess 
    9 import de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf 
    10 import de.ugoe.cs.swe.bnftools.ebnf.BnfEntry 
    11 import de.ugoe.cs.swe.bnftools.ebnf.Rule 
    12 import de.ugoe.cs.swe.bnftools.ebnf.DefinitionList 
    13 import de.ugoe.cs.swe.bnftools.ebnf.SingleDefinition 
    14 import de.ugoe.cs.swe.bnftools.ebnf.Term 
    15 import de.ugoe.cs.swe.bnftools.ebnf.GroupedSequence 
    16 import de.ugoe.cs.swe.bnftools.ebnf.Atom 
    17 import de.ugoe.cs.swe.bnftools.ebnf.RepeatedSequence 
    18 import de.ugoe.cs.swe.bnftools.ebnf.OptionalSequence 
    19 import de.ugoe.cs.swe.bnftools.ebnf.RuleReference 
    20 import de.ugoe.cs.swe.bnftools.ebnf.StringRule 
    21 import java.io.File 
    22 import org.eclipse.xtext.generator.IFileSystemAccessExtension2 
    23 import org.eclipse.emf.common.util.URI; 
    24 import org.eclipse.xtext.generator.IFileSystemAccessExtension 
    25 import java.io.PrintWriter 
    2623 
    2724/** 
     
    3229class EbnfGenerator implements IGenerator { 
    3330 
    34         //generation of the xsl-file 
    35         override void doGenerate(Resource resource, IFileSystemAccess fsa) { 
     31 
     32 def void doGenerate(Resource resource, IFileSystemAccess fsa,boolean mode) { 
    3633                var String workspacePath = WorkspaceResolver.getWorkspace(); 
    3734                for (e : resource.allContents.toIterable.filter(EtsiBnf)) { 
     
    4542 
    4643                                if (file.exists) { 
     44                                        //true -> pdf, false -> rtf 
    4745                                         
    48                                         foToPdf.createPdfFromFo(fullUri.substring(0, fullUri.length - 3)); 
     46                                        if(mode){ 
     47                                                FoToPdfOrRtf.createRtfFromFo(fullUri.substring(0, fullUri.length - 3)); 
     48                                        }else{ 
     49                                                FoToPdfOrRtf.createPdfFromFo(fullUri.substring(0, fullUri.length - 3)); 
     50                                        } 
     51                                         
     52//                                      fsa.deleteFile(e.name + ".fo"); 
     53                                } 
     54                        } 
     55                } 
     56        } 
     57         
     58        override void doGenerate(Resource resource, IFileSystemAccess fsa) { 
     59                var String workspacePath = WorkspaceResolver.getWorkspace(); 
     60                for (e : resource.allContents.toIterable.filter(EtsiBnf)) { 
     61                        if (e.bnfEntry.size != 0) { 
     62                                fsa.generateFile(e.name + ".fo", e.compile) 
     63                                System.out.println("fo generated"); 
     64                                //generate pdf 
     65                                var uri = (fsa as IFileSystemAccessExtension2).getURI(e.name + ".fo"); 
     66                                var String fullUri = workspacePath + uri.path.substring(10, uri.path.length); 
     67                                var File file = new File(fullUri); 
     68 
     69                                if (file.exists) { 
     70                                         
     71                                        FoToPdfOrRtf.createPdfFromFo(fullUri.substring(0, fullUri.length - 3)); 
    4972//                                      fsa.deleteFile(e.name + ".fo"); 
    5073                                } 
     
    84107        ''' 
    85108 
    86         def compile(Rule rule) '''<fo:block><fo:inline id="«rule.name»" color="purple">«IF rule.rulenumber != 0»«rule. 
     109        def compile(Rule rule) '''«System.out.println(rule.name)»<fo:block><fo:inline id="«rule.name»"  color="purple">«IF rule.rulenumber != 0»«rule. 
    87110                rulenumber».    «ENDIF»«rule.name»</fo:inline>  ::=     «rule.definitionList.compile»</fo:block>''' 
    88111 
    89         def compile(DefinitionList dList) '''«FOR sDef : dList.singleDefinition»«sDef.compile»«IF !sDef.equals( 
    90                 dList.singleDefinition.last)» | «ENDIF»«ENDFOR»''' 
     112        def compile(DefinitionList dList) '''«IF dList!= null»«FOR sDef : dList.singleDefinition»«sDef.compile»«IF !sDef.equals( 
     113                dList.singleDefinition.last)» | «ENDIF»«ENDFOR»«ENDIF»''' 
    91114 
    92115        def compile(SingleDefinition sDefinition) '''«FOR term : sDefinition.terms»«term.compile»«ENDFOR»''' 
     
    110133 
    111134        def compile(StringRule sRule) '''«IF sRule.colon != null»«sRule.colon»«ENDIF»«IF sRule.literal != null»«sRule. 
    112                 literal»        «ENDIF»''' 
     135                literal.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;")»  «ENDIF»''' 
    113136 
    114137} 
  • v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/generator/FoToPdfOrRtf.java

    r82 r84  
    2323 
    2424 
    25 public class foToPdf { 
     25public class FoToPdfOrRtf { 
    2626 
    2727 
     
    3333        } 
    3434         
    35         private static void createfoFromPdf(String foFileName, String pdfFileName)throws IOException, FOPException, 
     35        public static void createRtfFromFo(String fileName) throws IOException, FOPException, 
     36        TransformerException{ 
     37 
     38                createRtfFromFo(fileName,fileName); 
     39        } 
     40         
     41        private static void createRtfFromFo(String foFileName, String pdfFileName)throws IOException, FOPException, 
    3642        TransformerException{ 
    3743                File file = new File(foFileName+".fo"); 
     
    4551                        // Step 3: Construct fop with desired output format 
    4652                        Fop fop = fopFactory.newFop(MimeConstants.MIME_RTF, out); 
     53 
     54                        // Step 4: Setup JAXP using identity transformer 
     55                        TransformerFactory factory = TransformerFactory.newInstance(); 
     56                        Transformer transformer = factory.newTransformer(); 
     57 
     58                        // Step 5: Setup input and output for XSLT transformation 
     59                        Source src = new StreamSource(file); 
     60 
     61                        // Resulting SAX events (the generated FO) must be piped through to FOP          
     62                        Result res = new SAXResult(fop.getDefaultHandler()); 
     63 
     64                        // Step 6: Start XSLT transformation and FOP processing 
     65                        transformer.transform(src, res); 
     66                } finally { 
     67                        out.close(); 
     68                } 
     69        } 
     70         
     71         
     72        private static void createfoFromPdf(String foFileName, String pdfFileName)throws IOException, FOPException, 
     73        TransformerException{ 
     74                File file = new File(foFileName+".fo"); 
     75                // Step 1: Construct a FopFactory 
     76                FopFactory fopFactory = FopFactory.newInstance(); 
     77 
     78                // Step 2: Set up output stream. 
     79                OutputStream out = new BufferedOutputStream(new FileOutputStream(new File(pdfFileName+".pdf"))); 
     80 
     81                try { 
     82                        // Step 3: Construct fop with desired output format 
     83                        Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out); 
    4784 
    4885                        // Step 4: Setup JAXP using identity transformer 
Note: See TracChangeset for help on using the changeset viewer.