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