1 /* 2 * Copyright (c) 2009-2010 Mozilla Foundation 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice shall be included in 12 * all copies or substantial portions of the Software. 13 * 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 * DEALINGS IN THE SOFTWARE. 21 */ 22 23 package nu.validator.htmlparser.impl; 24 25 import nu.validator.htmlparser.annotation.Auto; 26 27 28 public class StateSnapshot<T> implements TreeBuilderState<T> { 29 30 private final @Auto StackNode<T>[] stack; 31 32 private final @Auto StackNode<T>[] listOfActiveFormattingElements; 33 34 private final @Auto int[] templateModeStack; 35 36 private final T formPointer; 37 38 private final T headPointer; 39 40 private final int mode; 41 42 private final int originalMode; 43 44 private final boolean framesetOk; 45 46 private final boolean needToDropLF; 47 48 private final boolean quirks; 49 50 /** 51 * @param stack 52 * @param listOfActiveFormattingElements 53 * @param templateModeStack 54 * @param formPointer 55 * @param headPointer 56 * @param deepTreeSurrogateParent 57 * @param mode 58 * @param originalMode 59 * @param framesetOk 60 * @param needToDropLF 61 * @param quirks 62 */ StateSnapshot(StackNode<T>[] stack, StackNode<T>[] listOfActiveFormattingElements, int[] templateModeStack, T formPointer, T headPointer, int mode, int originalMode, boolean framesetOk, boolean needToDropLF, boolean quirks)63 StateSnapshot(StackNode<T>[] stack, 64 StackNode<T>[] listOfActiveFormattingElements, int[] templateModeStack, T formPointer, 65 T headPointer, int mode, int originalMode, 66 boolean framesetOk, boolean needToDropLF, boolean quirks) { 67 this.stack = stack; 68 this.listOfActiveFormattingElements = listOfActiveFormattingElements; 69 this.templateModeStack = templateModeStack; 70 this.formPointer = formPointer; 71 this.headPointer = headPointer; 72 this.mode = mode; 73 this.originalMode = originalMode; 74 this.framesetOk = framesetOk; 75 this.needToDropLF = needToDropLF; 76 this.quirks = quirks; 77 } 78 79 /** 80 * @see nu.validator.htmlparser.impl.TreeBuilderState#getStack() 81 */ 82 @Override getStack()83 public StackNode<T>[] getStack() { 84 return stack; 85 } 86 87 /** 88 * @see nu.validator.htmlparser.impl.TreeBuilderState#getTemplateModeStack() 89 */ 90 @Override getTemplateModeStack()91 public int[] getTemplateModeStack() { 92 return templateModeStack; 93 } 94 95 /** 96 * @see nu.validator.htmlparser.impl.TreeBuilderState#getListOfActiveFormattingElements() 97 */ 98 @Override getListOfActiveFormattingElements()99 public StackNode<T>[] getListOfActiveFormattingElements() { 100 return listOfActiveFormattingElements; 101 } 102 103 /** 104 * @see nu.validator.htmlparser.impl.TreeBuilderState#getFormPointer() 105 */ 106 @Override getFormPointer()107 public T getFormPointer() { 108 return formPointer; 109 } 110 111 /** 112 * Returns the headPointer. 113 * 114 * @return the headPointer 115 */ 116 @Override getHeadPointer()117 public T getHeadPointer() { 118 return headPointer; 119 } 120 121 /** 122 * Returns the mode. 123 * 124 * @return the mode 125 */ 126 @Override getMode()127 public int getMode() { 128 return mode; 129 } 130 131 /** 132 * Returns the originalMode. 133 * 134 * @return the originalMode 135 */ 136 @Override getOriginalMode()137 public int getOriginalMode() { 138 return originalMode; 139 } 140 141 /** 142 * Returns the framesetOk. 143 * 144 * @return the framesetOk 145 */ 146 @Override isFramesetOk()147 public boolean isFramesetOk() { 148 return framesetOk; 149 } 150 151 /** 152 * Returns the needToDropLF. 153 * 154 * @return the needToDropLF 155 */ 156 @Override isNeedToDropLF()157 public boolean isNeedToDropLF() { 158 return needToDropLF; 159 } 160 161 /** 162 * Returns the quirks. 163 * 164 * @return the quirks 165 */ 166 @Override isQuirks()167 public boolean isQuirks() { 168 return quirks; 169 } 170 171 /** 172 * @see nu.validator.htmlparser.impl.TreeBuilderState#getListOfActiveFormattingElementsLength() 173 */ 174 @Override getListOfActiveFormattingElementsLength()175 public int getListOfActiveFormattingElementsLength() { 176 return listOfActiveFormattingElements.length; 177 } 178 179 /** 180 * @see nu.validator.htmlparser.impl.TreeBuilderState#getStackLength() 181 */ 182 @Override getStackLength()183 public int getStackLength() { 184 return stack.length; 185 } 186 187 /** 188 * @see nu.validator.htmlparser.impl.TreeBuilderState#getTemplateModeStackLength() 189 */ 190 @Override getTemplateModeStackLength()191 public int getTemplateModeStackLength() { 192 return templateModeStack.length; 193 } 194 destructor()195 @SuppressWarnings("unused") private void destructor() { 196 for (int i = 0; i < stack.length; i++) { 197 stack[i].release(null); 198 } 199 for (int i = 0; i < listOfActiveFormattingElements.length; i++) { 200 if (listOfActiveFormattingElements[i] != null) { 201 listOfActiveFormattingElements[i].release(null); 202 } 203 } 204 } 205 } 206