private Token readSpecial() throws Exception { String ret = null; try { ret = m_CurrChar.getString(); read(); while (isSpecialEndToken() == false) { ret += m_CurrChar.getString(); read(); } read(); if (m_SpecialEndToken.length() == 2) read(); ret += m_SpecialEndToken; Token token = new Token(ret); token.setImmutable(); return token; } catch (Exception ex) { Token token = new Token(ret); token.setImmutable(); return token; } }
private Token eatLine() throws Exception { m_Ret = new StringBuilder(); m_Ret.append(m_CurrChar.getString()); List<Token> all_ret = new ArrayList<Token>(); boolean is_immutable = false; if (isSingeLineComment()) is_immutable = true; while (true) { read(); if (isSpecialStartToken()) { Token curr = new Token(m_Ret.toString()); if (is_immutable) curr.setImmutable(); all_ret.add(curr); all_ret.add(readSpecial()); is_immutable = false; m_Ret = new StringBuilder(); } else if (m_InComment == false && isSingeLineComment()) { Token curr = new Token(m_Ret.toString()); is_immutable = true; all_ret.add(curr); m_Ret = new StringBuilder(); } else if (isNewLine(m_CurrChar.getString())) { Token curr = new Token(m_Ret.toString()); if (is_immutable) curr.setImmutable(); all_ret.add(curr); Token newline = new Token("\n"); newline.setNewLine(); all_ret.add(newline); Token ret = all_ret.get(0); all_ret.remove(0); m_NextNext.addAll(all_ret); is_immutable = false; // ignore # lines like they are comments // ret.setComment(); return ret; } m_Ret.append(m_CurrChar.getString()); } }
private Token doNext() throws Exception { if (isSingleLineToken()) { Token token = eatLine(); m_InComment = false; token.setImmutable(); return token; } if (isSpecialStartToken()) { return readSpecial(); } else { m_Ret = new StringBuilder(); while (isSpecialStartToken() == false && isSingleLineToken() == false) { m_Ret.append(m_CurrChar.getString()); read(); } Token ret = new Token(m_Ret.toString()); return ret; } }