content: package com.alibaba.luaview.debugger.ui;
  
  import java.util.Vector;
  
  public class CharsToWords {
  
  	int index;
  
  	public Vector<Word> split(String s) {
  		Vector<Word> words = new Vector<Word>();
  		index = 0;
  		Word prev = null;
  		for (int i = 0; i < s.length(); i++) {
  			Word word = getOneWord(s, prev);
  			if (word != null) {
  				if (prev != null) {
  					word.prev = prev;
  					prev.next = word;
  				}
  				words.add(word);
  				prev = word;
  			} else {
  				break;
  			}
  		}
  		return words;
  	}
  
  	private char charAt(int index, String s) {
  		if (index < s.length()) {
  			return s.charAt(index);
  		}
  		return 0;
  	}
  
  	public Word getOneWord(String s, Word preWord) {
  		StringBuffer buffer = new StringBuffer();
  		for (; index < s.length();) {
  			char c = s.charAt(index);
  			// ".." 链接运算符
  			if (buffer.length() <= 0 && charAt(index, s) == '.' && charAt(index + 1, s) == '.') {
  				buffer.append("..");
  				index += 2;
  				break;
  			}
  			// 字符串
  			if (buffer.length() <= 0 && (c == '"' || c == '\'')) {
  				char c0 = c;
  				char preC = 0;
  				buffer.append(c);
  				index++;
  				for (; index < s.length();) {
  					c = s.charAt(index);
  					buffer.append(c);
  					index++;
  					if (preC != '\\' && c == c0) {
  						break;
  					}
  				}
  				break;
  			}
  			// 注释信息
  			if (buffer.length() <= 0 && charAt(index, s) == '-' && charAt(index + 1, s) == '-') {
  				for (; index < s.length();) {
  					c = s.charAt(index);
  					buffer.append(c);
  					index++;
  					if (c == '\n') {
  						break;
  					}
  				}
  				break;
  			}
  			// 数字
  			if (buffer.length() <= 0 && is09(c)) {
  				for (; index < s.length();) {
  					c = s.charAt(index);
  					if (is09(c) || isAF(c) || c == '.' || c == 'X' || c == 'x') {
  						buffer.append(c);
  						index++;
  					} else {
  						break;
  					}
  				}
  				break;
  			}
  			// 表达式
  			if (isAZ(c) || is09(c) || c == '_') {
  				buffer.append(c);
  				index++;
  			} else {
  				// 普通标点符号括号等.
  				if (buffer.length() <= 0) {
  					buffer.append(c);
  					index++;
  				}
  				break;
  			}
  		}
  		if (buffer.length() > 0) {
  			String w = buffer.toString();
  			return new Word(w, preWord);
  		}
  		return null;
  	}
  
  	public boolean is09(char c) {
  		if ('0' <= c && c <= '9') {
  			return true;
  		}
  		return false;
  	}
  
  	public static boolean isAF(char c) {
  		if ('A' <= c && c <= 'F') {
  			return true;
  		}
  		if ('a' <= c && c <= 'f') {
  			return true;
  		}
  		return false;
  	}
  
  	public static boolean wordStart(char c) {
  		if (isAZ(c)) {
  			return true;
  		}
  		if ('_' == c) {
  			return true;
  		}
  		return false;
  	}
  
  	public static boolean isAZ(char c) {
  		if ('A' <= c && c <= 'Z') {
  			return true;
  		}
  		if ('a' <= c && c <= 'z') {
  			return true;
  		}
  		return false;
  	}
  }
  