1 21 22 package org.armedbear.j; 23 24 public final class JavaSyntaxIterator extends DefaultSyntaxIterator 27 implements Constants 28 { 29 public JavaSyntaxIterator(Position pos) 30 { 31 super(pos); 32 } 33 34 public char[] hideSyntacticWhitespace(Line line) 37 { 38 if (line.flags() == STATE_COMMENT) 39 return hideSyntacticWhitespace(line.getText(), STATE_COMMENT); 40 if (line.flags() == STATE_QUOTE) 41 return hideSyntacticWhitespace(line.getText(), STATE_QUOTE); 42 return hideSyntacticWhitespace(line.getText(), STATE_NEUTRAL); 43 } 44 45 public char[] hideSyntacticWhitespace(String s) 46 { 47 return hideSyntacticWhitespace(s, STATE_NEUTRAL); 48 } 49 50 private char[] hideSyntacticWhitespace(String s, int initialState) 53 { 54 final char[] chars = s.toCharArray(); 55 final int length = chars.length; 56 if (length > 0 && chars[0] == '#') { 57 for (int i = length; i-- > 0;) 59 chars[i] = ' '; 60 return chars; 61 } 62 int state = initialState; 63 for (int i = 0; i < length; i++) { 64 char c = chars[i]; 65 if (c == '\\' && i < length-1) { 66 chars[i++] = ' '; 68 chars[i] = ' '; 69 continue; 70 } 71 if (state == STATE_QUOTE) { 72 chars[i] = 'X'; 73 if (c == '"') 74 state = STATE_NEUTRAL; 75 continue; 76 } 77 if (state == STATE_SINGLEQUOTE) { 78 chars[i] = ' '; 79 if (c == '\'') 80 state = STATE_NEUTRAL; 81 continue; 82 } 83 if (state == STATE_COMMENT) { 84 if (c == '*' && i < length-1 && chars[i+1] == '/') { 85 chars[i++] = ' '; 87 chars[i] = ' '; 88 state = STATE_NEUTRAL; 89 } else 90 chars[i] = ' '; 91 continue; 92 } 93 94 if (c == '"') { 96 chars[i] = ' '; 97 state = STATE_QUOTE; 98 continue; 99 } 100 if (c == '\'') { 101 chars[i] = ' '; 102 state = STATE_SINGLEQUOTE; 103 continue; 104 } 105 if (c == '/') { 106 if (i < length-1) { 107 if (chars[i+1] == '*') { 108 chars[i++] = ' '; 110 chars[i] = ' '; 111 state = STATE_COMMENT; 112 continue; 113 } 114 if (chars[i+1] == '/') { 115 for (int j = i; j < length; j++) 117 chars[j] = ' '; 118 return chars; 119 } 120 } 121 } 122 } 123 return chars; 124 } 125 } 126 | Popular Tags |