1*650b9f74SAndroid Build Coastguard Worker /* 2*650b9f74SAndroid Build Coastguard Worker * Copyright (C) 2010 Google Inc. 3*650b9f74SAndroid Build Coastguard Worker * 4*650b9f74SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*650b9f74SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*650b9f74SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*650b9f74SAndroid Build Coastguard Worker * 8*650b9f74SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*650b9f74SAndroid Build Coastguard Worker * 10*650b9f74SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*650b9f74SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*650b9f74SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*650b9f74SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*650b9f74SAndroid Build Coastguard Worker * limitations under the License. 15*650b9f74SAndroid Build Coastguard Worker */ 16*650b9f74SAndroid Build Coastguard Worker 17*650b9f74SAndroid Build Coastguard Worker package com.google.streamhtmlparser; 18*650b9f74SAndroid Build Coastguard Worker 19*650b9f74SAndroid Build Coastguard Worker /** 20*650b9f74SAndroid Build Coastguard Worker * Defines essential functionality that every parser we implement 21*650b9f74SAndroid Build Coastguard Worker * will support. This is then extended for HTML and Javascript parsing. 22*650b9f74SAndroid Build Coastguard Worker * 23*650b9f74SAndroid Build Coastguard Worker * <p>The typical caller is a Template System and will usually ask 24*650b9f74SAndroid Build Coastguard Worker * us to parse either a character at a time or a fragment of a template 25*650b9f74SAndroid Build Coastguard Worker * at a time, stopping only when it needs to determine the state of the 26*650b9f74SAndroid Build Coastguard Worker * parser for escaping purposes. 27*650b9f74SAndroid Build Coastguard Worker * 28*650b9f74SAndroid Build Coastguard Worker * <p>We will later add methods to save and restore the full state 29*650b9f74SAndroid Build Coastguard Worker * of the parser to better support conditional processing. 30*650b9f74SAndroid Build Coastguard Worker */ 31*650b9f74SAndroid Build Coastguard Worker public interface Parser { 32*650b9f74SAndroid Build Coastguard Worker 33*650b9f74SAndroid Build Coastguard Worker // Consider using a Constants class instead 34*650b9f74SAndroid Build Coastguard Worker public final static ExternalState STATE_ERROR = 35*650b9f74SAndroid Build Coastguard Worker new ExternalState("STATE_ERROR"); 36*650b9f74SAndroid Build Coastguard Worker 37*650b9f74SAndroid Build Coastguard Worker /** 38*650b9f74SAndroid Build Coastguard Worker * Tell the parser to process the provided {@code char}. Throws exception 39*650b9f74SAndroid Build Coastguard Worker * on an unrecoverable parsing error. 40*650b9f74SAndroid Build Coastguard Worker * 41*650b9f74SAndroid Build Coastguard Worker * @param input the character read 42*650b9f74SAndroid Build Coastguard Worker * @throws ParseException if an unrecoverable error occurred during parsing 43*650b9f74SAndroid Build Coastguard Worker */ parse(char input)44*650b9f74SAndroid Build Coastguard Worker void parse(char input) throws ParseException; 45*650b9f74SAndroid Build Coastguard Worker 46*650b9f74SAndroid Build Coastguard Worker /** 47*650b9f74SAndroid Build Coastguard Worker * Tell the parser to process the provided {@code String}. Throws exception 48*650b9f74SAndroid Build Coastguard Worker * on an unrecoverable parsing error. 49*650b9f74SAndroid Build Coastguard Worker * 50*650b9f74SAndroid Build Coastguard Worker * @param input the {@code String} to parse 51*650b9f74SAndroid Build Coastguard Worker * @throws ParseException if an unrecoverable error occurred during parsing 52*650b9f74SAndroid Build Coastguard Worker */ parse(String input)53*650b9f74SAndroid Build Coastguard Worker void parse(String input) throws ParseException; 54*650b9f74SAndroid Build Coastguard Worker 55*650b9f74SAndroid Build Coastguard Worker /** 56*650b9f74SAndroid Build Coastguard Worker * Reset the parser back to its initial default state. 57*650b9f74SAndroid Build Coastguard Worker */ reset()58*650b9f74SAndroid Build Coastguard Worker void reset(); 59*650b9f74SAndroid Build Coastguard Worker 60*650b9f74SAndroid Build Coastguard Worker /** 61*650b9f74SAndroid Build Coastguard Worker * Returns the current state of the parser. May be {@link #STATE_ERROR} 62*650b9f74SAndroid Build Coastguard Worker * if the parser encountered an error. Such an error may be recoverable 63*650b9f74SAndroid Build Coastguard Worker * and the caller may want to continue parsing until {@link #parse(String)} 64*650b9f74SAndroid Build Coastguard Worker * returns {@code false}. 65*650b9f74SAndroid Build Coastguard Worker * 66*650b9f74SAndroid Build Coastguard Worker * @return current state of the parser 67*650b9f74SAndroid Build Coastguard Worker */ getState()68*650b9f74SAndroid Build Coastguard Worker ExternalState getState(); 69*650b9f74SAndroid Build Coastguard Worker 70*650b9f74SAndroid Build Coastguard Worker /** 71*650b9f74SAndroid Build Coastguard Worker * Sets the current line number which is returned during error messages. 72*650b9f74SAndroid Build Coastguard Worker * @param lineNumber the line number to set in the parser 73*650b9f74SAndroid Build Coastguard Worker */ setLineNumber(int lineNumber)74*650b9f74SAndroid Build Coastguard Worker void setLineNumber(int lineNumber); 75*650b9f74SAndroid Build Coastguard Worker 76*650b9f74SAndroid Build Coastguard Worker /** 77*650b9f74SAndroid Build Coastguard Worker * Returns the current line number. 78*650b9f74SAndroid Build Coastguard Worker */ getLineNumber()79*650b9f74SAndroid Build Coastguard Worker int getLineNumber(); 80*650b9f74SAndroid Build Coastguard Worker 81*650b9f74SAndroid Build Coastguard Worker /** 82*650b9f74SAndroid Build Coastguard Worker * Sets the current column number which is returned during error messages. 83*650b9f74SAndroid Build Coastguard Worker * @param columnNumber the column number to set in the parser 84*650b9f74SAndroid Build Coastguard Worker */ setColumnNumber(int columnNumber)85*650b9f74SAndroid Build Coastguard Worker void setColumnNumber(int columnNumber); 86*650b9f74SAndroid Build Coastguard Worker 87*650b9f74SAndroid Build Coastguard Worker /** 88*650b9f74SAndroid Build Coastguard Worker * Returns the current column number. 89*650b9f74SAndroid Build Coastguard Worker */ getColumnNumber()90*650b9f74SAndroid Build Coastguard Worker int getColumnNumber(); 91*650b9f74SAndroid Build Coastguard Worker } 92