Ignore:
Timestamp:
11/02/10 17:25:47 (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/EbnfFormatterVisitor.java

    r29 r30  
    88import org.eclipse.xtext.parsetree.CompositeNode; 
    99import org.eclipse.xtext.parsetree.LeafNode; 
     10import org.eclipse.xtext.parsetree.NodeAdapter; 
    1011import org.eclipse.xtext.parsetree.NodeUtil; 
    1112 
     
    5253        private int rightHandSideRuleOffset = 0; 
    5354        private Stack<Integer> ruleSpacingStack = new Stack<Integer>(); 
     55        private Double averageSingleDefinitionLength; 
    5456         
    5557        public EbnfFormatterVisitor(EObject rootNode, FormatterConfig config) { 
     
    258260                } 
    259261                buf = result; 
    260                  
    261262        } 
    262263 
     
    294295                originalTextNoWhitespaces = originalText.replaceAll("[ \t\n\r]", ""); 
    295296                 
    296                 //System.out.println(allComments.toString()); 
    297297                text("grammar " + node.getName()); 
    298298                if (node.getType() != null) 
     
    348348 
    349349        protected void visitBefore(DefinitionList node) { 
     350                averageSingleDefinitionLength = null; 
     351                int totalLength = 0; 
     352                for (int i=0; i < node.eContents().size(); i++) { 
     353                        CompositeNode parseNode = NodeUtil.getNodeAdapter(node.eContents().get(i)).getParserNode(); 
     354                        totalLength += parseNode.serialize().trim().length(); 
     355                } 
     356                averageSingleDefinitionLength = (double) totalLength / (double) node.eContents().size(); 
    350357        } 
    351358 
     
    458465                 
    459466                lastWasSectionHeading=true; 
    460 //              if (!lastWasSectionHeading || !buf.substring(buf.length()-2).equals("\n\n")) 
    461 //              if (!buf.substring(buf.length()-2).equals("\n\n")) 
    462 //                      buf.append("\n"); 
    463467                 
    464468                text(node.getSectionHeader()); 
     
    472476 
    473477        protected void visitAfter(SingleDefinition node) { 
     478                boolean preventAlternativeBreakShortAlternatives = config.isPreventNewLineAfterAlternativeOnShortAlternatives() && (averageSingleDefinitionLength <= config.getShortAlternativeThreshold()); 
    474479                if (!isLastElement()) { 
    475480                        text(" | "); 
     
    477482                                if (config.isPreventNewLineAfterAlternativeOnLessThanThreeElements()) { 
    478483                                        DefinitionList definitionList = (DefinitionList) node.eContainer(); 
    479                                         if (definitionList.eContents().size() > 2) { 
     484                                         
     485                                        if ((definitionList.eContents().size() > 2) && (!preventAlternativeBreakShortAlternatives)) { 
    480486                                                newLine(); 
    481487                                                spaces(ruleSpacingStack.peek()); 
    482488                                        } 
    483489                                } else { 
    484                                         newLine(); 
    485                                         spaces(ruleSpacingStack.peek()); 
     490                                        if (!preventAlternativeBreakShortAlternatives) { 
     491                                                newLine(); 
     492                                                spaces(ruleSpacingStack.peek()); 
     493                                        } 
    486494                                } 
    487495                        } 
  • trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/formatter/FormatterConfig.java

    r29 r30  
    55        private boolean preventNewLineAfterAlternativeOnLessThanThreeElements = true; 
    66        private boolean preventNewLineAfterAlternativeOnShortAlternatives = true; 
     7        private double shortAlternativeThreshold = 3.0; 
    78 
    89        public boolean isNewLineAfterAlternative() { 
     
    3233        } 
    3334 
     35        public double getShortAlternativeThreshold() { 
     36                return shortAlternativeThreshold; 
     37        } 
     38 
     39        public void setShortAlternativeThreshold(double shortAlternativeThreshold) { 
     40                this.shortAlternativeThreshold = shortAlternativeThreshold; 
     41        } 
     42 
    3443} 
Note: See TracChangeset for help on using the changeset viewer.