Ignore:
Timestamp:
11/02/10 18:29:57 (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

    r30 r31  
    88import org.eclipse.xtext.parsetree.CompositeNode; 
    99import org.eclipse.xtext.parsetree.LeafNode; 
    10 import org.eclipse.xtext.parsetree.NodeAdapter; 
    1110import org.eclipse.xtext.parsetree.NodeUtil; 
    1211 
     
    181180         
    182181        private void weaveComments() { 
    183 //              if (true) { 
    184 //                      StringBuffer result = new StringBuffer(); 
    185 //                      result.append(buf.toString()); 
    186 //                      buf = result; 
    187 //                      return; 
    188 //              } 
    189                  
    190182                bufferPositionOriginalText = 0; 
    191183                bufferPositionFormattedTextNoWhitespaces = 0; 
     
    248240                                        } 
    249241                                } else { // disaster handling: return original unformatted text! 
     242                                        System.err.println("Disaster Recovery: returning original text!!"); 
    250243                                        buf = new StringBuffer(); 
    251244                                        buf.append(originalText); 
     
    287280        } 
    288281 
     282        private boolean lastIsClosingParentheses() { 
     283                char ch = buf.toString().charAt(buf.toString().length()-1); 
     284                if ((ch == ')') || (ch == ']') || (ch == '}')) 
     285                        return true; 
     286                return false; 
     287        } 
     288 
     289        private void wrap() { 
     290                if ((config.isWrapAfterThreshold()) && (newLineOffsetCounter > config.getWrapThreshold())) { 
     291                        newLine(); 
     292                        if (ruleSpacingStack.size() > 1) 
     293                                spaces(ruleSpacingStack.peek() + 1); 
     294                        else 
     295                                spaces(ruleSpacingStack.peek()); 
     296                } 
     297        } 
     298 
    289299        // ----------------------------------------------------------------------------- 
    290300 
     
    372382        } 
    373383 
    374         protected void visitBefore(GroupedSequence node) { 
    375                 text("("); 
    376                 ruleSpacingStack.push(newLineOffsetCounter); 
    377         } 
    378  
    379         protected void visitAfter(GroupedSequence node) { 
    380                 text(")"); 
    381                 ruleSpacingStack.pop(); 
    382         } 
    383  
    384384        protected void visitBefore(HookCombinator node) { 
    385385        } 
     
    402402        } 
    403403 
     404        protected void visitBefore(GroupedSequence node) { 
     405                wrap(); 
     406                text("("); 
     407                ruleSpacingStack.push(newLineOffsetCounter-1); 
     408        } 
     409 
     410        protected void visitAfter(GroupedSequence node) { 
     411//              if ((config.isAlignParentheses() && (node.eContents().get(0).eContents().size() >= config.getAlignParenthesesElementCountThreshold())) || (lastIsClosingParentheses())) { 
     412                if (config.isAlignParentheses() && (node.eContents().get(0).eContents().size() >= config.getAlignParenthesesElementCountThreshold())) { 
     413                        newLine(); 
     414                        spaces(ruleSpacingStack.peek()); 
     415                } 
     416                 
     417                text(")"); 
     418                ruleSpacingStack.pop(); 
     419        } 
     420 
    404421        protected void visitBefore(OptionalSequence node) { 
     422                wrap(); 
    405423                text("["); 
    406                 ruleSpacingStack.push(newLineOffsetCounter); 
     424                ruleSpacingStack.push(newLineOffsetCounter-1); 
    407425        } 
    408426 
    409427        protected void visitAfter(OptionalSequence node) { 
     428//              if ((config.isAlignParentheses() && (node.eContents().get(0).eContents().size() >= config.getAlignParenthesesElementCountThreshold())) || (lastIsClosingParentheses())) { 
     429                if (config.isAlignParentheses() && (node.eContents().get(0).eContents().size() >= config.getAlignParenthesesElementCountThreshold())) { 
     430                        newLine(); 
     431                        spaces(ruleSpacingStack.peek()); 
     432                } 
     433 
    410434                text("]"); 
    411435                ruleSpacingStack.pop(); 
     
    413437 
    414438        protected void visitBefore(RepeatedSequence node) { 
     439                wrap(); 
    415440                text("{"); 
    416                 ruleSpacingStack.push(newLineOffsetCounter); 
     441                ruleSpacingStack.push(newLineOffsetCounter-1); 
    417442        } 
    418443 
    419444        protected void visitAfter(RepeatedSequence node) { 
     445//              if ((config.isAlignParentheses() && (node.eContents().get(0).eContents().size() >= config.getAlignParenthesesElementCountThreshold())) || (lastIsClosingParentheses())) { 
     446                if (config.isAlignParentheses() && (node.eContents().get(0).eContents().size() >= config.getAlignParenthesesElementCountThreshold())) { 
     447                        newLine(); 
     448                        spaces(ruleSpacingStack.peek()); 
     449                } 
     450 
    420451                text("}"); 
    421452                if (node.isMorethanonce()) 
     
    454485 
    455486        protected void visitBefore(RuleReference node) { 
     487                wrap(); 
    456488                text(node.getRuleref().getName()); 
    457489        } 
     
    482514                                if (config.isPreventNewLineAfterAlternativeOnLessThanThreeElements()) { 
    483515                                        DefinitionList definitionList = (DefinitionList) node.eContainer(); 
    484                                          
    485516                                        if ((definitionList.eContents().size() > 2) && (!preventAlternativeBreakShortAlternatives)) { 
    486517                                                newLine(); 
    487                                                 spaces(ruleSpacingStack.peek()); 
     518                                                if (ruleSpacingStack.size() > 1) 
     519                                                        spaces(ruleSpacingStack.peek() + 1); 
     520                                                else 
     521                                                        spaces(ruleSpacingStack.peek()); 
    488522                                        } 
    489523                                } else { 
    490524                                        if (!preventAlternativeBreakShortAlternatives) { 
    491525                                                newLine(); 
    492                                                 spaces(ruleSpacingStack.peek()); 
     526                                                if (ruleSpacingStack.size() > 1) 
     527                                                        spaces(ruleSpacingStack.peek() + 1); 
     528                                                else 
     529                                                        spaces(ruleSpacingStack.peek()); 
    493530                                        } 
    494531                                } 
     
    498535 
    499536        protected void visitBefore(StringRule node) { 
     537                wrap(); 
    500538                if (node.getLiteral() != null) 
    501539                        text("\"" + node.getLiteral() + "\""); 
  • trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/formatter/FormatterConfig.java

    r30 r31  
    66        private boolean preventNewLineAfterAlternativeOnShortAlternatives = true; 
    77        private double shortAlternativeThreshold = 3.0; 
     8        private boolean alignParentheses = true; 
     9        private int alignParenthesesElementCountThreshold = 3; 
     10        private boolean wrapAfterThreshold = true; 
     11        private int wrapThreshold = 80; 
    812 
    913        public boolean isNewLineAfterAlternative() { 
     
    4145        } 
    4246 
     47        public boolean isAlignParentheses() { 
     48                return alignParentheses; 
     49        } 
     50 
     51        public void setAlignParentheses(boolean alignParentheses) { 
     52                this.alignParentheses = alignParentheses; 
     53        } 
     54 
     55        public int getAlignParenthesesElementCountThreshold() { 
     56                return alignParenthesesElementCountThreshold; 
     57        } 
     58 
     59        public void setAlignParenthesesElementCountThreshold( 
     60                        int alignParenthesesElementCountThreshold) { 
     61                this.alignParenthesesElementCountThreshold = alignParenthesesElementCountThreshold; 
     62        } 
     63 
     64        public boolean isWrapAfterThreshold() { 
     65                return wrapAfterThreshold; 
     66        } 
     67 
     68        public void setWrapAfterThreshold(boolean wrapAfterThreshold) { 
     69                this.wrapAfterThreshold = wrapAfterThreshold; 
     70        } 
     71 
     72        public int getWrapThreshold() { 
     73                return wrapThreshold; 
     74        } 
     75 
     76        public void setWrapThreshold(int wrapThreshold) { 
     77                this.wrapThreshold = wrapThreshold; 
     78        } 
     79 
    4380} 
Note: See TracChangeset for help on using the changeset viewer.