Changeset 25 in default


Ignore:
Timestamp:
11/02/10 12:29:25 (14 years ago)
Author:
zeiss
Message:
 
File:
1 edited

Legend:

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

    r24 r25  
    3636        private StringBuffer buf; 
    3737        private FormatterConfig config; 
    38         private int bufferPosition = 0; 
     38        private int bufferPositionFormattedTextNoWhitespaces = 0; 
    3939        private int bufferPositionOriginalText = 0; 
    4040        private int allCommentsPosition = 0; 
     
    4646        private int bufferPositionFormattedText; 
    4747        private String formattedText; 
    48         private String bufNoWhitespaces; 
     48        private String formattedTextNoWhitespaces; 
    4949        private String originalTextNoWhitespaces; 
    5050         
     
    105105         
    106106        private void skipWhitespacesOriginalText() { 
    107                 while (isWhitespace(originalText.charAt(bufferPositionOriginalText))) { 
     107                while (bufferPositionOriginalText < originalText.length() && isWhitespace(originalText.charAt(bufferPositionOriginalText))) { 
    108108                        bufferPositionOriginalText++; 
    109109                } 
     
    111111 
    112112        private void skipWhitespacesFormattedText(StringBuffer result) { 
    113                 while (isWhitespace(formattedText.charAt(bufferPositionFormattedText))) { 
     113                while (bufferPositionFormattedText < formattedText.length() && isWhitespace(formattedText.charAt(bufferPositionFormattedText))) { 
    114114                        result.append(formattedText.substring(bufferPositionFormattedText, bufferPositionFormattedText+1)); 
    115115                        bufferPositionFormattedText++; 
     
    175175         
    176176        private void weaveComments() { 
    177                 bufferPosition = 0; 
     177//              if (true) { 
     178//                      StringBuffer result = new StringBuffer(); 
     179//                      result.append(buf.toString()); 
     180//                      buf = result; 
     181//                      return; 
     182//              } 
     183                 
    178184                bufferPositionOriginalText = 0; 
     185                bufferPositionFormattedTextNoWhitespaces = 0; 
    179186                bufferPositionFormattedText = 0; 
    180187                 
    181188                StringBuffer result = new StringBuffer(); 
    182                 bufNoWhitespaces = buf.toString().replaceAll("[ \t\n\r]", ""); 
     189                formattedTextNoWhitespaces = buf.toString().replaceAll("[ \t\n\r]", ""); 
    183190                formattedText = buf.toString(); 
    184191                 
    185                 while (bufferPosition < bufNoWhitespaces.length()) { 
     192                while (bufferPositionFormattedTextNoWhitespaces < formattedTextNoWhitespaces.length()) { 
    186193                        skipWhitespacesOriginalText(); 
    187194                        skipWhitespacesFormattedText(result); 
    188  
    189                         if (bufNoWhitespaces.charAt(bufferPosition) != originalText.charAt(bufferPositionOriginalText)) { 
    190                                 if (isCommentNext(originalText, bufferPositionOriginalText)) { 
     195                         
     196                        if (!(bufferPositionOriginalText < originalText.length())) 
     197                                break; 
     198                         
     199                        char formattedPositionNoWhitespaces = formattedTextNoWhitespaces.charAt(bufferPositionFormattedTextNoWhitespaces); 
     200                        char originalPosition = originalText.charAt(bufferPositionOriginalText); 
     201 
     202                        if (formattedPositionNoWhitespaces != originalPosition) { 
     203                                if (formattedPositionNoWhitespaces == ';') { // formatted text always outputs the optional semicolon, skip it if necessary 
     204                                        bufferPositionFormattedTextNoWhitespaces++; 
     205                                        bufferPositionFormattedText++; 
     206                                } else if (isCommentNext(originalText, bufferPositionOriginalText)) { 
    191207                                        LeafNode currentComment = allComments.get(allCommentsPosition);  
    192208                                        if (currentComment.getTotalOffset() == bufferPositionOriginalText) { 
     
    194210                                                        int newLinesCount = scanBackNewlinesCount(originalText, bufferPositionOriginalText-1); 
    195211                                                        if (newLinesCount > 0) { 
     212                                                                if (scanBackNewlinesCount(result.toString(), result.toString().length()-1) == 0) { 
     213                                                                        result.append("\n\n"); 
     214                                                                } 
     215                                                                 
    196216                                                                result.append(currentComment.getText()); 
    197217                                                                result.append("\n"); 
     
    216236                                                allCommentsPosition++; 
    217237                                        } 
     238                                } else { // disaster handling: return original unformatted text! 
     239                                        buf = new StringBuffer(); 
     240                                        buf.append(originalText); 
     241                                        return; 
    218242                                } 
    219243                        } else { 
    220244                                result.append(formattedText.substring(bufferPositionFormattedText, bufferPositionFormattedText+1)); 
    221  
    222245                                bufferPositionOriginalText++; 
    223246                                bufferPositionFormattedText++; 
    224                                 bufferPosition++; 
     247                                bufferPositionFormattedTextNoWhitespaces++; 
    225248                        } 
    226249                } 
Note: See TracChangeset for help on using the changeset viewer.