Ignore:
Timestamp:
11/04/10 17:43:06 (14 years ago)
Author:
zeiss
Message:
 
Location:
trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/formatter
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/formatter/EbnfHtmlFormatterVisitor.java

    r38 r39  
    44import java.util.Iterator; 
    55 
     6import org.apache.commons.lang.StringEscapeUtils; 
     7import org.apache.commons.lang.StringUtils; 
    68import org.eclipse.emf.ecore.EObject; 
    79import org.eclipse.xtext.parsetree.LeafNode; 
     
    1113import de.ugoe.cs.swe.bnftools.ebnf.RuleReference; 
    1214import de.ugoe.cs.swe.bnftools.ebnf.SectionHeading; 
     15import de.ugoe.cs.swe.bnftools.ebnf.StringRule; 
    1316 
    1417public class EbnfHtmlFormatterVisitor extends EbnfFormatterVisitor { 
    1518 
    1619        private ArrayList<MetaTextEntry> metaTexts = new ArrayList<MetaTextEntry>(); 
     20        private ArrayList<MetaTextEntry> transformedTexts = new ArrayList<MetaTextEntry>(); 
    1721         
    1822        public EbnfHtmlFormatterVisitor(EObject rootNode, FormatterConfig config) { 
     
    3539                        currentMetaText = metaTexts.iterator().next(); 
    3640 
     41                MetaTextEntry currentTransformedText = null; 
     42                if (transformedTexts.iterator().hasNext()) 
     43                        currentTransformedText = transformedTexts.iterator().next(); 
     44                 
    3745                while (bufferPositionFormattedTextNoWhitespaces <= formattedTextNoWhitespaces.length()) { 
    3846                        skipWhitespacesOriginalText(); 
     
    5159                         
    5260                        if (formattedPositionNoWhitespaces != originalPosition) { 
     61//                              if ((currentMetaText != null) && (bufferPositionFormattedTextNoWhitespaces == currentMetaText.getOffset())) { 
     62//                                      result.append(currentMetaText.getText()); 
     63//                                      metaTexts.remove(currentMetaText); 
     64//                                      if (metaTexts.iterator().hasNext()) 
     65//                                              currentMetaText = metaTexts.iterator().next(); 
     66//                                      else 
     67//                                              currentMetaText = null; 
     68//                              } 
     69 
    5370                                if (formattedPositionNoWhitespaces == ';') { // formatted text always outputs the optional semicolon, skip it if necessary 
    5471                                        bufferPositionFormattedTextNoWhitespaces++; 
     
    93110                                } 
    94111                        } else { 
    95                                 if ((currentMetaText != null) && (bufferPositionFormattedText >= currentMetaText.getOffset())) { 
     112                                if ((currentMetaText != null) && (bufferPositionFormattedTextNoWhitespaces == currentMetaText.getOffset())) { 
    96113                                        result.append(currentMetaText.getText()); 
    97114                                        metaTexts.remove(currentMetaText); 
     
    101118                                                currentMetaText = null; 
    102119                                } 
    103                                  
    104                                 result.append(formattedText.substring(bufferPositionFormattedText, bufferPositionFormattedText+1)); 
    105                                 bufferPositionOriginalText++; 
    106                                 bufferPositionFormattedText++; 
    107                                 bufferPositionFormattedTextNoWhitespaces++; 
    108                                  
    109                                 if ((currentMetaText != null) && (bufferPositionFormattedText >= currentMetaText.getOffset())) { 
    110                                         result.append(currentMetaText.getText()); 
    111                                         metaTexts.remove(currentMetaText); 
    112                                         if (metaTexts.iterator().hasNext()) 
    113                                                 currentMetaText = metaTexts.iterator().next(); 
    114                                         else 
    115                                                 currentMetaText = null; 
     120 
     121                                if (currentTransformedText != null && currentTransformedText.getOffset() == bufferPositionFormattedTextNoWhitespaces) { 
     122                                        result.append(currentTransformedText.getTransformedText()); 
     123                                        bufferPositionOriginalText += currentTransformedText.getText().length(); 
     124                                        bufferPositionFormattedText += currentTransformedText.getText().length(); 
     125                                        bufferPositionFormattedTextNoWhitespaces += currentTransformedText.getText().replaceAll("[ \t\r\n]", "").length(); 
     126                                        transformedTexts.remove(currentTransformedText); 
     127                                        currentTransformedText = null; 
     128                                         
     129                                        if (transformedTexts.iterator().hasNext()) 
     130                                                currentTransformedText = transformedTexts.iterator().next(); 
     131                                } else { 
     132                                        String text = formattedText.substring(bufferPositionFormattedText, bufferPositionFormattedText+1); 
     133                                        result.append(text); 
     134                                        bufferPositionOriginalText++; 
     135                                        bufferPositionFormattedText++; 
     136                                        bufferPositionFormattedTextNoWhitespaces++; 
    116137                                } 
     138 
     139//                              if ((currentMetaText != null) && (bufferPositionFormattedTextNoWhitespaces == currentMetaText.getOffset())) { 
     140//                                      result.append(currentMetaText.getText()); 
     141//                                      metaTexts.remove(currentMetaText); 
     142//                                      if (metaTexts.iterator().hasNext()) 
     143//                                              currentMetaText = metaTexts.iterator().next(); 
     144//                                      else 
     145//                                              currentMetaText = null; 
     146//                              } 
     147 
     148//                              } 
    117149                        } 
    118150                } 
     
    121153         
    122154        protected void metaText(String str) { 
    123                 MetaTextEntry metaTextEntry = new MetaTextEntry(str, buf.length()); 
     155                MetaTextEntry metaTextEntry = new MetaTextEntry(str, buf.toString().replaceAll("[ \t\n\r]", "").length()); 
    124156                metaTexts.add(metaTextEntry); 
     157        } 
     158 
     159        protected void textTransformed(String original, String transformed) { 
     160                MetaTextEntry metaText = new MetaTextEntry(original, transformed, buf.toString().replaceAll("[ \t\n\r]", "").length()); 
     161                transformedTexts.add(metaText); 
     162                buf.append(original); 
     163                newLineOffsetCounter += original.length(); 
    125164        } 
    126165 
     
    182221                ruleSpacingStack.pop(); 
    183222        } 
     223         
     224        protected void visitBefore(StringRule node) { 
     225                wrap(); 
     226                if (node.getLiteral() != null) { 
     227//                      text("\"" + node.getLiteral() + "\""); 
     228                        textTransformed("\"" + node.getLiteral() + "\"", StringEscapeUtils.escapeHtml("\"" + node.getLiteral() + "\"")); 
     229//                      textTransformed("\"" + node.getLiteral() + "\"", "gnabar"); 
     230                } else if (node.getColon() != null) { 
     231//                      text("\"\"\""); 
     232                        textTransformed("\"\"\"", StringEscapeUtils.escapeHtml("\"\"\"")); 
     233//                      textTransformed("\"\"\"", "gnabar"); 
     234                } 
     235        } 
     236 
     237        protected void visitAfter(StringRule node) { 
     238        } 
    184239} 
  • trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/formatter/MetaTextEntry.java

    r37 r39  
    33public class MetaTextEntry { 
    44        private String text; 
     5        private String transformedText = null; 
    56        private int offset; 
    67 
    78        public MetaTextEntry(String text, int offset) { 
    89                this.text = text; 
     10                this.offset = offset; 
     11        } 
     12 
     13        public MetaTextEntry(String text, String transformedText, int offset) { 
     14                this.text = text; 
     15                this.transformedText = transformedText; 
    916                this.offset = offset; 
    1017        } 
     
    3138        } 
    3239 
     40        public String getTransformedText() { 
     41                return transformedText; 
     42        } 
     43 
     44        public void setTransformedText(String transformedText) { 
     45                this.transformedText = transformedText; 
     46        } 
     47 
    3348} 
Note: See TracChangeset for help on using the changeset viewer.