int end = 0; if (str.startsWith("{{")) { end = str.indexOf("}}"); if (end == -1) throw new IllegalArgumentException("parse error"); tokens.add(new Token(str.substring(2, end), TokenType.WIKLET)); end += 2; } else if (str.startsWith("[[")) { end = str.indexOf("]]"); if (end == -1) throw new IllegalArgumentException("parse error"); tokens.add(new Token(str.substring(2, end), TokenType.WIKILINK)); end += 2; } else { int lastPos = str.length() - 1; while (end < lastPos) { if (str.charAt(end) == '{' && str.charAt(end+1) == '{' || str.charAt(end) == '[' && str.charAt(end+1) == '[') { break; } end++; } if (end == lastPos) end = str.length(); tokens.add(new Token(str.substring(0, end), TokenType.TEXT)); } if (end != -1 && end != str.length()) { Token.parse(str.substring(end), tokens); }
Token.parse(str, 0, tokens);
		public static void parse(String str, List<Token> tokens) throws IllegalArgumentException {			int end = 0;			if (str.startsWith("{{")) {				end = str.indexOf("}}");				if (end == -1)					throw new IllegalArgumentException("parse error");				tokens.add(new Token(str.substring(2, end), TokenType.WIKLET));				end += 2;			} else if (str.startsWith("[[")) {				end = str.indexOf("]]");				if (end == -1)					throw new IllegalArgumentException("parse error");				tokens.add(new Token(str.substring(2, end), TokenType.WIKILINK));				end += 2;			} else {				int lastPos = str.length() - 1;				while (end < lastPos) {					if (str.charAt(end) == '{' && str.charAt(end+1) == '{' ||						str.charAt(end) == '[' && str.charAt(end+1) == '[') {						break;					}					end++;				}				if (end == lastPos)					end = str.length();				tokens.add(new Token(str.substring(0, end), TokenType.TEXT));			}			if (end != -1 && end != str.length()) {				Token.parse(str.substring(end), tokens);			}		}