156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson/* 256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * Copyright (C) 2010 Google Inc. 356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * 456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * Licensed under the Apache License, Version 2.0 (the "License"); 556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * you may not use this file except in compliance with the License. 656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * You may obtain a copy of the License at 756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * 856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * http://www.apache.org/licenses/LICENSE-2.0 956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * 1056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * Unless required by applicable law or agreed to in writing, software 1156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * distributed under the License is distributed on an "AS IS" BASIS, 1256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * See the License for the specific language governing permissions and 1456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * limitations under the License. 1556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson */ 1656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 1756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodsonpackage com.google.streamhtmlparser.impl; 1856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 1956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodsonimport com.google.common.base.Preconditions; 2056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 2156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson/** 2256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * Holds one state transition as derived from a Python configuration 2356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * file. A state transition is a triplet as follows: 2456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * <ul> 2556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * <li>An expression which consists of one or more characters and/or 2656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * one or more range of characters. 2756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * <li> A source state. 2856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * <li> A destination state. 2956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * </ul> 3056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * 3156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * <p>For example, the triplet ("a-z123", A, B) will cause the 3256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * state to go from A to B for any character that is either 1,2,3 or in 3356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * the range a-z inclusive. 3456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson */ 3556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodsonclass StateTableTransition { 3656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 3756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson private final String expression; 3856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson private final InternalState from; 3956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson private final InternalState to; 4056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 4156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson /** 4256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * Returns the full state of the {@code StateTableTransition} in a 4356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * human readable form. The format of the returned {@code String} is not 4456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * specified and is subject to change. 4556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * 4656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * @return full state of the {@code StateTableTransition} 4756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson */ 4856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson @Override 4956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson public String toString() { 5056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson return String.format("Expression: %s; From: %s; To: %s", 5156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson expression, from, to); 5256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 5356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 5456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson StateTableTransition(String expression, InternalState from, 5556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson InternalState to) { 5656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson // Developer error if any triggers. 5756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson Preconditions.checkNotNull(expression); 5856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson Preconditions.checkNotNull(from); 5956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson Preconditions.checkNotNull(to); 6056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson this.expression = expression; 6156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson this.from = from; 6256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson this.to = to; 6356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 6456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 6556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson String getExpression() { 6656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson return expression; 6756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 6856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 6956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson InternalState getFrom() { 7056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson return from; 7156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 7256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 7356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson InternalState getTo() { 7456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson return to; 7556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 7656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson} 77