| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2010 Google, Inc. All Rights Reserved. | 2 * Copyright (C) 2010 Google, Inc. All Rights Reserved. |
| 3 * Copyright (C) 2011, 2014 Apple Inc. All rights reserved. | 3 * Copyright (C) 2011, 2014 Apple Inc. All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 965 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 976 ASSERT(!m_tree.isEmpty()); | 976 ASSERT(!m_tree.isEmpty()); |
| 977 if (isParsingFragment() && m_tree.openElements()->hasOnlyOneElement()) | 977 if (isParsingFragment() && m_tree.openElements()->hasOnlyOneElement()) |
| 978 return m_fragmentContext.contextElementStackItem(); | 978 return m_fragmentContext.contextElementStackItem(); |
| 979 | 979 |
| 980 return m_tree.currentStackItem(); | 980 return m_tree.currentStackItem(); |
| 981 } | 981 } |
| 982 | 982 |
| 983 // http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html
#close-the-cell | 983 // http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html
#close-the-cell |
| 984 void HTMLTreeBuilder::closeTheCell() | 984 void HTMLTreeBuilder::closeTheCell() |
| 985 { | 985 { |
| 986 ASSERT(insertionMode() == InCellMode); | 986 ASSERT(getInsertionMode() == InCellMode); |
| 987 if (m_tree.openElements()->inTableScope(tdTag)) { | 987 if (m_tree.openElements()->inTableScope(tdTag)) { |
| 988 ASSERT(!m_tree.openElements()->inTableScope(thTag)); | 988 ASSERT(!m_tree.openElements()->inTableScope(thTag)); |
| 989 processFakeEndTag(tdTag); | 989 processFakeEndTag(tdTag); |
| 990 return; | 990 return; |
| 991 } | 991 } |
| 992 ASSERT(m_tree.openElements()->inTableScope(thTag)); | 992 ASSERT(m_tree.openElements()->inTableScope(thTag)); |
| 993 processFakeEndTag(thTag); | 993 processFakeEndTag(thTag); |
| 994 ASSERT(insertionMode() == InRowMode); | 994 ASSERT(getInsertionMode() == InRowMode); |
| 995 } | 995 } |
| 996 | 996 |
| 997 void HTMLTreeBuilder::processStartTagForInTable(AtomicHTMLToken* token) | 997 void HTMLTreeBuilder::processStartTagForInTable(AtomicHTMLToken* token) |
| 998 { | 998 { |
| 999 ASSERT(token->type() == HTMLToken::StartTag); | 999 ASSERT(token->type() == HTMLToken::StartTag); |
| 1000 if (token->name() == captionTag) { | 1000 if (token->name() == captionTag) { |
| 1001 m_tree.openElements()->popUntilTableScopeMarker(); | 1001 m_tree.openElements()->popUntilTableScopeMarker(); |
| 1002 m_tree.activeFormattingElements()->appendMarker(); | 1002 m_tree.activeFormattingElements()->appendMarker(); |
| 1003 m_tree.insertHTMLElement(token); | 1003 m_tree.insertHTMLElement(token); |
| 1004 setInsertionMode(InCaptionMode); | 1004 setInsertionMode(InCaptionMode); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1018 } | 1018 } |
| 1019 if (isTableBodyContextTag(token->name())) { | 1019 if (isTableBodyContextTag(token->name())) { |
| 1020 m_tree.openElements()->popUntilTableScopeMarker(); | 1020 m_tree.openElements()->popUntilTableScopeMarker(); |
| 1021 m_tree.insertHTMLElement(token); | 1021 m_tree.insertHTMLElement(token); |
| 1022 setInsertionMode(InTableBodyMode); | 1022 setInsertionMode(InTableBodyMode); |
| 1023 return; | 1023 return; |
| 1024 } | 1024 } |
| 1025 if (isTableCellContextTag(token->name()) | 1025 if (isTableCellContextTag(token->name()) |
| 1026 || token->name() == trTag) { | 1026 || token->name() == trTag) { |
| 1027 processFakeStartTag(tbodyTag); | 1027 processFakeStartTag(tbodyTag); |
| 1028 ASSERT(insertionMode() == InTableBodyMode); | 1028 ASSERT(getInsertionMode() == InTableBodyMode); |
| 1029 processStartTag(token); | 1029 processStartTag(token); |
| 1030 return; | 1030 return; |
| 1031 } | 1031 } |
| 1032 if (token->name() == tableTag) { | 1032 if (token->name() == tableTag) { |
| 1033 parseError(token); | 1033 parseError(token); |
| 1034 if (!processTableEndTagForInTable()) { | 1034 if (!processTableEndTagForInTable()) { |
| 1035 ASSERT(isParsingFragmentOrTemplateContents()); | 1035 ASSERT(isParsingFragmentOrTemplateContents()); |
| 1036 return; | 1036 return; |
| 1037 } | 1037 } |
| 1038 processStartTag(token); | 1038 processStartTag(token); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 1064 return; | 1064 return; |
| 1065 } | 1065 } |
| 1066 parseError(token); | 1066 parseError(token); |
| 1067 HTMLConstructionSite::RedirectToFosterParentGuard redirecter(m_tree); | 1067 HTMLConstructionSite::RedirectToFosterParentGuard redirecter(m_tree); |
| 1068 processStartTagForInBody(token); | 1068 processStartTagForInBody(token); |
| 1069 } | 1069 } |
| 1070 | 1070 |
| 1071 void HTMLTreeBuilder::processStartTag(AtomicHTMLToken* token) | 1071 void HTMLTreeBuilder::processStartTag(AtomicHTMLToken* token) |
| 1072 { | 1072 { |
| 1073 ASSERT(token->type() == HTMLToken::StartTag); | 1073 ASSERT(token->type() == HTMLToken::StartTag); |
| 1074 switch (insertionMode()) { | 1074 switch (getInsertionMode()) { |
| 1075 case InitialMode: | 1075 case InitialMode: |
| 1076 ASSERT(insertionMode() == InitialMode); | 1076 ASSERT(getInsertionMode() == InitialMode); |
| 1077 defaultForInitial(); | 1077 defaultForInitial(); |
| 1078 // Fall through. | 1078 // Fall through. |
| 1079 case BeforeHTMLMode: | 1079 case BeforeHTMLMode: |
| 1080 ASSERT(insertionMode() == BeforeHTMLMode); | 1080 ASSERT(getInsertionMode() == BeforeHTMLMode); |
| 1081 if (token->name() == htmlTag) { | 1081 if (token->name() == htmlTag) { |
| 1082 m_tree.insertHTMLHtmlStartTagBeforeHTML(token); | 1082 m_tree.insertHTMLHtmlStartTagBeforeHTML(token); |
| 1083 setInsertionMode(BeforeHeadMode); | 1083 setInsertionMode(BeforeHeadMode); |
| 1084 return; | 1084 return; |
| 1085 } | 1085 } |
| 1086 defaultForBeforeHTML(); | 1086 defaultForBeforeHTML(); |
| 1087 // Fall through. | 1087 // Fall through. |
| 1088 case BeforeHeadMode: | 1088 case BeforeHeadMode: |
| 1089 ASSERT(insertionMode() == BeforeHeadMode); | 1089 ASSERT(getInsertionMode() == BeforeHeadMode); |
| 1090 if (token->name() == htmlTag) { | 1090 if (token->name() == htmlTag) { |
| 1091 processHtmlStartTagForInBody(token); | 1091 processHtmlStartTagForInBody(token); |
| 1092 return; | 1092 return; |
| 1093 } | 1093 } |
| 1094 if (token->name() == headTag) { | 1094 if (token->name() == headTag) { |
| 1095 m_tree.insertHTMLHeadElement(token); | 1095 m_tree.insertHTMLHeadElement(token); |
| 1096 setInsertionMode(InHeadMode); | 1096 setInsertionMode(InHeadMode); |
| 1097 return; | 1097 return; |
| 1098 } | 1098 } |
| 1099 defaultForBeforeHead(); | 1099 defaultForBeforeHead(); |
| 1100 // Fall through. | 1100 // Fall through. |
| 1101 case InHeadMode: | 1101 case InHeadMode: |
| 1102 ASSERT(insertionMode() == InHeadMode); | 1102 ASSERT(getInsertionMode() == InHeadMode); |
| 1103 if (processStartTagForInHead(token)) | 1103 if (processStartTagForInHead(token)) |
| 1104 return; | 1104 return; |
| 1105 defaultForInHead(); | 1105 defaultForInHead(); |
| 1106 // Fall through. | 1106 // Fall through. |
| 1107 case AfterHeadMode: | 1107 case AfterHeadMode: |
| 1108 ASSERT(insertionMode() == AfterHeadMode); | 1108 ASSERT(getInsertionMode() == AfterHeadMode); |
| 1109 if (token->name() == htmlTag) { | 1109 if (token->name() == htmlTag) { |
| 1110 processHtmlStartTagForInBody(token); | 1110 processHtmlStartTagForInBody(token); |
| 1111 return; | 1111 return; |
| 1112 } | 1112 } |
| 1113 if (token->name() == bodyTag) { | 1113 if (token->name() == bodyTag) { |
| 1114 m_framesetOk = false; | 1114 m_framesetOk = false; |
| 1115 m_tree.insertHTMLBodyElement(token); | 1115 m_tree.insertHTMLBodyElement(token); |
| 1116 setInsertionMode(InBodyMode); | 1116 setInsertionMode(InBodyMode); |
| 1117 return; | 1117 return; |
| 1118 } | 1118 } |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1138 m_tree.openElements()->removeHTMLHeadElement(m_tree.head()); | 1138 m_tree.openElements()->removeHTMLHeadElement(m_tree.head()); |
| 1139 return; | 1139 return; |
| 1140 } | 1140 } |
| 1141 if (token->name() == headTag) { | 1141 if (token->name() == headTag) { |
| 1142 parseError(token); | 1142 parseError(token); |
| 1143 return; | 1143 return; |
| 1144 } | 1144 } |
| 1145 defaultForAfterHead(); | 1145 defaultForAfterHead(); |
| 1146 // Fall through | 1146 // Fall through |
| 1147 case InBodyMode: | 1147 case InBodyMode: |
| 1148 ASSERT(insertionMode() == InBodyMode); | 1148 ASSERT(getInsertionMode() == InBodyMode); |
| 1149 processStartTagForInBody(token); | 1149 processStartTagForInBody(token); |
| 1150 break; | 1150 break; |
| 1151 case InTableMode: | 1151 case InTableMode: |
| 1152 ASSERT(insertionMode() == InTableMode); | 1152 ASSERT(getInsertionMode() == InTableMode); |
| 1153 processStartTagForInTable(token); | 1153 processStartTagForInTable(token); |
| 1154 break; | 1154 break; |
| 1155 case InCaptionMode: | 1155 case InCaptionMode: |
| 1156 ASSERT(insertionMode() == InCaptionMode); | 1156 ASSERT(getInsertionMode() == InCaptionMode); |
| 1157 if (isCaptionColOrColgroupTag(token->name()) | 1157 if (isCaptionColOrColgroupTag(token->name()) |
| 1158 || isTableBodyContextTag(token->name()) | 1158 || isTableBodyContextTag(token->name()) |
| 1159 || isTableCellContextTag(token->name()) | 1159 || isTableCellContextTag(token->name()) |
| 1160 || token->name() == trTag) { | 1160 || token->name() == trTag) { |
| 1161 parseError(token); | 1161 parseError(token); |
| 1162 if (!processCaptionEndTagForInCaption()) { | 1162 if (!processCaptionEndTagForInCaption()) { |
| 1163 ASSERT(isParsingFragment()); | 1163 ASSERT(isParsingFragment()); |
| 1164 return; | 1164 return; |
| 1165 } | 1165 } |
| 1166 processStartTag(token); | 1166 processStartTag(token); |
| 1167 return; | 1167 return; |
| 1168 } | 1168 } |
| 1169 processStartTagForInBody(token); | 1169 processStartTagForInBody(token); |
| 1170 break; | 1170 break; |
| 1171 case InColumnGroupMode: | 1171 case InColumnGroupMode: |
| 1172 ASSERT(insertionMode() == InColumnGroupMode); | 1172 ASSERT(getInsertionMode() == InColumnGroupMode); |
| 1173 if (token->name() == htmlTag) { | 1173 if (token->name() == htmlTag) { |
| 1174 processHtmlStartTagForInBody(token); | 1174 processHtmlStartTagForInBody(token); |
| 1175 return; | 1175 return; |
| 1176 } | 1176 } |
| 1177 if (token->name() == colTag) { | 1177 if (token->name() == colTag) { |
| 1178 m_tree.insertSelfClosingHTMLElementDestroyingToken(token); | 1178 m_tree.insertSelfClosingHTMLElementDestroyingToken(token); |
| 1179 return; | 1179 return; |
| 1180 } | 1180 } |
| 1181 if (token->name() == templateTag) { | 1181 if (token->name() == templateTag) { |
| 1182 processTemplateStartTag(token); | 1182 processTemplateStartTag(token); |
| 1183 return; | 1183 return; |
| 1184 } | 1184 } |
| 1185 if (!processColgroupEndTagForInColumnGroup()) { | 1185 if (!processColgroupEndTagForInColumnGroup()) { |
| 1186 ASSERT(isParsingFragmentOrTemplateContents()); | 1186 ASSERT(isParsingFragmentOrTemplateContents()); |
| 1187 return; | 1187 return; |
| 1188 } | 1188 } |
| 1189 processStartTag(token); | 1189 processStartTag(token); |
| 1190 break; | 1190 break; |
| 1191 case InTableBodyMode: | 1191 case InTableBodyMode: |
| 1192 ASSERT(insertionMode() == InTableBodyMode); | 1192 ASSERT(getInsertionMode() == InTableBodyMode); |
| 1193 if (token->name() == trTag) { | 1193 if (token->name() == trTag) { |
| 1194 m_tree.openElements()->popUntilTableBodyScopeMarker(); // How is the
re ever anything to pop? | 1194 m_tree.openElements()->popUntilTableBodyScopeMarker(); // How is the
re ever anything to pop? |
| 1195 m_tree.insertHTMLElement(token); | 1195 m_tree.insertHTMLElement(token); |
| 1196 setInsertionMode(InRowMode); | 1196 setInsertionMode(InRowMode); |
| 1197 return; | 1197 return; |
| 1198 } | 1198 } |
| 1199 if (isTableCellContextTag(token->name())) { | 1199 if (isTableCellContextTag(token->name())) { |
| 1200 parseError(token); | 1200 parseError(token); |
| 1201 processFakeStartTag(trTag); | 1201 processFakeStartTag(trTag); |
| 1202 ASSERT(insertionMode() == InRowMode); | 1202 ASSERT(getInsertionMode() == InRowMode); |
| 1203 processStartTag(token); | 1203 processStartTag(token); |
| 1204 return; | 1204 return; |
| 1205 } | 1205 } |
| 1206 if (isCaptionColOrColgroupTag(token->name()) || isTableBodyContextTag(to
ken->name())) { | 1206 if (isCaptionColOrColgroupTag(token->name()) || isTableBodyContextTag(to
ken->name())) { |
| 1207 // FIXME: This is slow. | 1207 // FIXME: This is slow. |
| 1208 if (!m_tree.openElements()->inTableScope(tbodyTag) && !m_tree.openEl
ements()->inTableScope(theadTag) && !m_tree.openElements()->inTableScope(tfootTa
g)) { | 1208 if (!m_tree.openElements()->inTableScope(tbodyTag) && !m_tree.openEl
ements()->inTableScope(theadTag) && !m_tree.openElements()->inTableScope(tfootTa
g)) { |
| 1209 ASSERT(isParsingFragmentOrTemplateContents()); | 1209 ASSERT(isParsingFragmentOrTemplateContents()); |
| 1210 parseError(token); | 1210 parseError(token); |
| 1211 return; | 1211 return; |
| 1212 } | 1212 } |
| 1213 m_tree.openElements()->popUntilTableBodyScopeMarker(); | 1213 m_tree.openElements()->popUntilTableBodyScopeMarker(); |
| 1214 ASSERT(isTableBodyContextTag(m_tree.currentStackItem()->localName())
); | 1214 ASSERT(isTableBodyContextTag(m_tree.currentStackItem()->localName())
); |
| 1215 processFakeEndTag(m_tree.currentStackItem()->localName()); | 1215 processFakeEndTag(m_tree.currentStackItem()->localName()); |
| 1216 processStartTag(token); | 1216 processStartTag(token); |
| 1217 return; | 1217 return; |
| 1218 } | 1218 } |
| 1219 processStartTagForInTable(token); | 1219 processStartTagForInTable(token); |
| 1220 break; | 1220 break; |
| 1221 case InRowMode: | 1221 case InRowMode: |
| 1222 ASSERT(insertionMode() == InRowMode); | 1222 ASSERT(getInsertionMode() == InRowMode); |
| 1223 if (isTableCellContextTag(token->name())) { | 1223 if (isTableCellContextTag(token->name())) { |
| 1224 m_tree.openElements()->popUntilTableRowScopeMarker(); | 1224 m_tree.openElements()->popUntilTableRowScopeMarker(); |
| 1225 m_tree.insertHTMLElement(token); | 1225 m_tree.insertHTMLElement(token); |
| 1226 setInsertionMode(InCellMode); | 1226 setInsertionMode(InCellMode); |
| 1227 m_tree.activeFormattingElements()->appendMarker(); | 1227 m_tree.activeFormattingElements()->appendMarker(); |
| 1228 return; | 1228 return; |
| 1229 } | 1229 } |
| 1230 if (token->name() == trTag | 1230 if (token->name() == trTag |
| 1231 || isCaptionColOrColgroupTag(token->name()) | 1231 || isCaptionColOrColgroupTag(token->name()) |
| 1232 || isTableBodyContextTag(token->name())) { | 1232 || isTableBodyContextTag(token->name())) { |
| 1233 if (!processTrEndTagForInRow()) { | 1233 if (!processTrEndTagForInRow()) { |
| 1234 ASSERT(isParsingFragmentOrTemplateContents()); | 1234 ASSERT(isParsingFragmentOrTemplateContents()); |
| 1235 return; | 1235 return; |
| 1236 } | 1236 } |
| 1237 ASSERT(insertionMode() == InTableBodyMode); | 1237 ASSERT(getInsertionMode() == InTableBodyMode); |
| 1238 processStartTag(token); | 1238 processStartTag(token); |
| 1239 return; | 1239 return; |
| 1240 } | 1240 } |
| 1241 processStartTagForInTable(token); | 1241 processStartTagForInTable(token); |
| 1242 break; | 1242 break; |
| 1243 case InCellMode: | 1243 case InCellMode: |
| 1244 ASSERT(insertionMode() == InCellMode); | 1244 ASSERT(getInsertionMode() == InCellMode); |
| 1245 if (isCaptionColOrColgroupTag(token->name()) | 1245 if (isCaptionColOrColgroupTag(token->name()) |
| 1246 || isTableCellContextTag(token->name()) | 1246 || isTableCellContextTag(token->name()) |
| 1247 || token->name() == trTag | 1247 || token->name() == trTag |
| 1248 || isTableBodyContextTag(token->name())) { | 1248 || isTableBodyContextTag(token->name())) { |
| 1249 // FIXME: This could be more efficient. | 1249 // FIXME: This could be more efficient. |
| 1250 if (!m_tree.openElements()->inTableScope(tdTag) && !m_tree.openEleme
nts()->inTableScope(thTag)) { | 1250 if (!m_tree.openElements()->inTableScope(tdTag) && !m_tree.openEleme
nts()->inTableScope(thTag)) { |
| 1251 ASSERT(isParsingFragment()); | 1251 ASSERT(isParsingFragment()); |
| 1252 parseError(token); | 1252 parseError(token); |
| 1253 return; | 1253 return; |
| 1254 } | 1254 } |
| 1255 closeTheCell(); | 1255 closeTheCell(); |
| 1256 processStartTag(token); | 1256 processStartTag(token); |
| 1257 return; | 1257 return; |
| 1258 } | 1258 } |
| 1259 processStartTagForInBody(token); | 1259 processStartTagForInBody(token); |
| 1260 break; | 1260 break; |
| 1261 case AfterBodyMode: | 1261 case AfterBodyMode: |
| 1262 case AfterAfterBodyMode: | 1262 case AfterAfterBodyMode: |
| 1263 ASSERT(insertionMode() == AfterBodyMode || insertionMode() == AfterAfter
BodyMode); | 1263 ASSERT(getInsertionMode() == AfterBodyMode || getInsertionMode() == Afte
rAfterBodyMode); |
| 1264 if (token->name() == htmlTag) { | 1264 if (token->name() == htmlTag) { |
| 1265 processHtmlStartTagForInBody(token); | 1265 processHtmlStartTagForInBody(token); |
| 1266 return; | 1266 return; |
| 1267 } | 1267 } |
| 1268 setInsertionMode(InBodyMode); | 1268 setInsertionMode(InBodyMode); |
| 1269 processStartTag(token); | 1269 processStartTag(token); |
| 1270 break; | 1270 break; |
| 1271 case InHeadNoscriptMode: | 1271 case InHeadNoscriptMode: |
| 1272 ASSERT(insertionMode() == InHeadNoscriptMode); | 1272 ASSERT(getInsertionMode() == InHeadNoscriptMode); |
| 1273 if (token->name() == htmlTag) { | 1273 if (token->name() == htmlTag) { |
| 1274 processHtmlStartTagForInBody(token); | 1274 processHtmlStartTagForInBody(token); |
| 1275 return; | 1275 return; |
| 1276 } | 1276 } |
| 1277 if (token->name() == basefontTag | 1277 if (token->name() == basefontTag |
| 1278 || token->name() == bgsoundTag | 1278 || token->name() == bgsoundTag |
| 1279 || token->name() == linkTag | 1279 || token->name() == linkTag |
| 1280 || token->name() == metaTag | 1280 || token->name() == metaTag |
| 1281 || token->name() == noframesTag | 1281 || token->name() == noframesTag |
| 1282 || token->name() == styleTag) { | 1282 || token->name() == styleTag) { |
| 1283 bool didProcess = processStartTagForInHead(token); | 1283 bool didProcess = processStartTagForInHead(token); |
| 1284 ASSERT_UNUSED(didProcess, didProcess); | 1284 ASSERT_UNUSED(didProcess, didProcess); |
| 1285 return; | 1285 return; |
| 1286 } | 1286 } |
| 1287 if (token->name() == htmlTag || token->name() == noscriptTag) { | 1287 if (token->name() == htmlTag || token->name() == noscriptTag) { |
| 1288 parseError(token); | 1288 parseError(token); |
| 1289 return; | 1289 return; |
| 1290 } | 1290 } |
| 1291 defaultForInHeadNoscript(); | 1291 defaultForInHeadNoscript(); |
| 1292 processToken(token); | 1292 processToken(token); |
| 1293 break; | 1293 break; |
| 1294 case InFramesetMode: | 1294 case InFramesetMode: |
| 1295 ASSERT(insertionMode() == InFramesetMode); | 1295 ASSERT(getInsertionMode() == InFramesetMode); |
| 1296 if (token->name() == htmlTag) { | 1296 if (token->name() == htmlTag) { |
| 1297 processHtmlStartTagForInBody(token); | 1297 processHtmlStartTagForInBody(token); |
| 1298 return; | 1298 return; |
| 1299 } | 1299 } |
| 1300 if (token->name() == framesetTag) { | 1300 if (token->name() == framesetTag) { |
| 1301 m_tree.insertHTMLElement(token); | 1301 m_tree.insertHTMLElement(token); |
| 1302 return; | 1302 return; |
| 1303 } | 1303 } |
| 1304 if (token->name() == frameTag) { | 1304 if (token->name() == frameTag) { |
| 1305 m_tree.insertSelfClosingHTMLElementDestroyingToken(token); | 1305 m_tree.insertSelfClosingHTMLElementDestroyingToken(token); |
| 1306 return; | 1306 return; |
| 1307 } | 1307 } |
| 1308 if (token->name() == noframesTag) { | 1308 if (token->name() == noframesTag) { |
| 1309 processStartTagForInHead(token); | 1309 processStartTagForInHead(token); |
| 1310 return; | 1310 return; |
| 1311 } | 1311 } |
| 1312 if (token->name() == templateTag) { | 1312 if (token->name() == templateTag) { |
| 1313 processTemplateStartTag(token); | 1313 processTemplateStartTag(token); |
| 1314 return; | 1314 return; |
| 1315 } | 1315 } |
| 1316 parseError(token); | 1316 parseError(token); |
| 1317 break; | 1317 break; |
| 1318 case AfterFramesetMode: | 1318 case AfterFramesetMode: |
| 1319 case AfterAfterFramesetMode: | 1319 case AfterAfterFramesetMode: |
| 1320 ASSERT(insertionMode() == AfterFramesetMode || insertionMode() == AfterA
fterFramesetMode); | 1320 ASSERT(getInsertionMode() == AfterFramesetMode || getInsertionMode() ==
AfterAfterFramesetMode); |
| 1321 if (token->name() == htmlTag) { | 1321 if (token->name() == htmlTag) { |
| 1322 processHtmlStartTagForInBody(token); | 1322 processHtmlStartTagForInBody(token); |
| 1323 return; | 1323 return; |
| 1324 } | 1324 } |
| 1325 if (token->name() == noframesTag) { | 1325 if (token->name() == noframesTag) { |
| 1326 processStartTagForInHead(token); | 1326 processStartTagForInHead(token); |
| 1327 return; | 1327 return; |
| 1328 } | 1328 } |
| 1329 parseError(token); | 1329 parseError(token); |
| 1330 break; | 1330 break; |
| 1331 case InSelectInTableMode: | 1331 case InSelectInTableMode: |
| 1332 ASSERT(insertionMode() == InSelectInTableMode); | 1332 ASSERT(getInsertionMode() == InSelectInTableMode); |
| 1333 if (token->name() == captionTag | 1333 if (token->name() == captionTag |
| 1334 || token->name() == tableTag | 1334 || token->name() == tableTag |
| 1335 || isTableBodyContextTag(token->name()) | 1335 || isTableBodyContextTag(token->name()) |
| 1336 || token->name() == trTag | 1336 || token->name() == trTag |
| 1337 || isTableCellContextTag(token->name())) { | 1337 || isTableCellContextTag(token->name())) { |
| 1338 parseError(token); | 1338 parseError(token); |
| 1339 AtomicHTMLToken endSelect(HTMLToken::EndTag, selectTag.localName()); | 1339 AtomicHTMLToken endSelect(HTMLToken::EndTag, selectTag.localName()); |
| 1340 processEndTag(&endSelect); | 1340 processEndTag(&endSelect); |
| 1341 processStartTag(token); | 1341 processStartTag(token); |
| 1342 return; | 1342 return; |
| 1343 } | 1343 } |
| 1344 // Fall through | 1344 // Fall through |
| 1345 case InSelectMode: | 1345 case InSelectMode: |
| 1346 ASSERT(insertionMode() == InSelectMode || insertionMode() == InSelectInT
ableMode); | 1346 ASSERT(getInsertionMode() == InSelectMode || getInsertionMode() == InSel
ectInTableMode); |
| 1347 if (token->name() == htmlTag) { | 1347 if (token->name() == htmlTag) { |
| 1348 processHtmlStartTagForInBody(token); | 1348 processHtmlStartTagForInBody(token); |
| 1349 return; | 1349 return; |
| 1350 } | 1350 } |
| 1351 if (token->name() == optionTag) { | 1351 if (token->name() == optionTag) { |
| 1352 if (m_tree.currentStackItem()->hasTagName(optionTag)) { | 1352 if (m_tree.currentStackItem()->hasTagName(optionTag)) { |
| 1353 AtomicHTMLToken endOption(HTMLToken::EndTag, optionTag.localName
()); | 1353 AtomicHTMLToken endOption(HTMLToken::EndTag, optionTag.localName
()); |
| 1354 processEndTag(&endOption); | 1354 processEndTag(&endOption); |
| 1355 } | 1355 } |
| 1356 m_tree.insertHTMLElement(token); | 1356 m_tree.insertHTMLElement(token); |
| (...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1689 ASSERT(token->type() == HTMLToken::EndTag); | 1689 ASSERT(token->type() == HTMLToken::EndTag); |
| 1690 if (token->name() == trTag) { | 1690 if (token->name() == trTag) { |
| 1691 processTrEndTagForInRow(); | 1691 processTrEndTagForInRow(); |
| 1692 return; | 1692 return; |
| 1693 } | 1693 } |
| 1694 if (token->name() == tableTag) { | 1694 if (token->name() == tableTag) { |
| 1695 if (!processTrEndTagForInRow()) { | 1695 if (!processTrEndTagForInRow()) { |
| 1696 ASSERT(isParsingFragmentOrTemplateContents()); | 1696 ASSERT(isParsingFragmentOrTemplateContents()); |
| 1697 return; | 1697 return; |
| 1698 } | 1698 } |
| 1699 ASSERT(insertionMode() == InTableBodyMode); | 1699 ASSERT(getInsertionMode() == InTableBodyMode); |
| 1700 processEndTag(token); | 1700 processEndTag(token); |
| 1701 return; | 1701 return; |
| 1702 } | 1702 } |
| 1703 if (isTableBodyContextTag(token->name())) { | 1703 if (isTableBodyContextTag(token->name())) { |
| 1704 if (!m_tree.openElements()->inTableScope(token->name())) { | 1704 if (!m_tree.openElements()->inTableScope(token->name())) { |
| 1705 parseError(token); | 1705 parseError(token); |
| 1706 return; | 1706 return; |
| 1707 } | 1707 } |
| 1708 processFakeEndTag(trTag); | 1708 processFakeEndTag(trTag); |
| 1709 ASSERT(insertionMode() == InTableBodyMode); | 1709 ASSERT(getInsertionMode() == InTableBodyMode); |
| 1710 processEndTag(token); | 1710 processEndTag(token); |
| 1711 return; | 1711 return; |
| 1712 } | 1712 } |
| 1713 if (token->name() == bodyTag | 1713 if (token->name() == bodyTag |
| 1714 || isCaptionColOrColgroupTag(token->name()) | 1714 || isCaptionColOrColgroupTag(token->name()) |
| 1715 || token->name() == htmlTag | 1715 || token->name() == htmlTag |
| 1716 || isTableCellContextTag(token->name())) { | 1716 || isTableCellContextTag(token->name())) { |
| 1717 parseError(token); | 1717 parseError(token); |
| 1718 return; | 1718 return; |
| 1719 } | 1719 } |
| (...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1953 } | 1953 } |
| 1954 parseError(token); | 1954 parseError(token); |
| 1955 // Is this redirection necessary here? | 1955 // Is this redirection necessary here? |
| 1956 HTMLConstructionSite::RedirectToFosterParentGuard redirecter(m_tree); | 1956 HTMLConstructionSite::RedirectToFosterParentGuard redirecter(m_tree); |
| 1957 processEndTagForInBody(token); | 1957 processEndTagForInBody(token); |
| 1958 } | 1958 } |
| 1959 | 1959 |
| 1960 void HTMLTreeBuilder::processEndTag(AtomicHTMLToken* token) | 1960 void HTMLTreeBuilder::processEndTag(AtomicHTMLToken* token) |
| 1961 { | 1961 { |
| 1962 ASSERT(token->type() == HTMLToken::EndTag); | 1962 ASSERT(token->type() == HTMLToken::EndTag); |
| 1963 switch (insertionMode()) { | 1963 switch (getInsertionMode()) { |
| 1964 case InitialMode: | 1964 case InitialMode: |
| 1965 ASSERT(insertionMode() == InitialMode); | 1965 ASSERT(getInsertionMode() == InitialMode); |
| 1966 defaultForInitial(); | 1966 defaultForInitial(); |
| 1967 // Fall through. | 1967 // Fall through. |
| 1968 case BeforeHTMLMode: | 1968 case BeforeHTMLMode: |
| 1969 ASSERT(insertionMode() == BeforeHTMLMode); | 1969 ASSERT(getInsertionMode() == BeforeHTMLMode); |
| 1970 if (token->name() != headTag && token->name() != bodyTag && token->name(
) != htmlTag && token->name() != brTag) { | 1970 if (token->name() != headTag && token->name() != bodyTag && token->name(
) != htmlTag && token->name() != brTag) { |
| 1971 parseError(token); | 1971 parseError(token); |
| 1972 return; | 1972 return; |
| 1973 } | 1973 } |
| 1974 defaultForBeforeHTML(); | 1974 defaultForBeforeHTML(); |
| 1975 // Fall through. | 1975 // Fall through. |
| 1976 case BeforeHeadMode: | 1976 case BeforeHeadMode: |
| 1977 ASSERT(insertionMode() == BeforeHeadMode); | 1977 ASSERT(getInsertionMode() == BeforeHeadMode); |
| 1978 if (token->name() != headTag && token->name() != bodyTag && token->name(
) != htmlTag && token->name() != brTag) { | 1978 if (token->name() != headTag && token->name() != bodyTag && token->name(
) != htmlTag && token->name() != brTag) { |
| 1979 parseError(token); | 1979 parseError(token); |
| 1980 return; | 1980 return; |
| 1981 } | 1981 } |
| 1982 defaultForBeforeHead(); | 1982 defaultForBeforeHead(); |
| 1983 // Fall through. | 1983 // Fall through. |
| 1984 case InHeadMode: | 1984 case InHeadMode: |
| 1985 ASSERT(insertionMode() == InHeadMode); | 1985 ASSERT(getInsertionMode() == InHeadMode); |
| 1986 // FIXME: This case should be broken out into processEndTagForInHead, | 1986 // FIXME: This case should be broken out into processEndTagForInHead, |
| 1987 // because other end tag cases now refer to it ("process the token for u
sing the rules of the "in head" insertion mode"). | 1987 // because other end tag cases now refer to it ("process the token for u
sing the rules of the "in head" insertion mode"). |
| 1988 // but because the logic falls through to AfterHeadMode, that gets a lit
tle messy. | 1988 // but because the logic falls through to AfterHeadMode, that gets a lit
tle messy. |
| 1989 if (token->name() == templateTag) { | 1989 if (token->name() == templateTag) { |
| 1990 processTemplateEndTag(token); | 1990 processTemplateEndTag(token); |
| 1991 return; | 1991 return; |
| 1992 } | 1992 } |
| 1993 if (token->name() == headTag) { | 1993 if (token->name() == headTag) { |
| 1994 m_tree.openElements()->popHTMLHeadElement(); | 1994 m_tree.openElements()->popHTMLHeadElement(); |
| 1995 setInsertionMode(AfterHeadMode); | 1995 setInsertionMode(AfterHeadMode); |
| 1996 return; | 1996 return; |
| 1997 } | 1997 } |
| 1998 if (token->name() != bodyTag && token->name() != htmlTag && token->name(
) != brTag) { | 1998 if (token->name() != bodyTag && token->name() != htmlTag && token->name(
) != brTag) { |
| 1999 parseError(token); | 1999 parseError(token); |
| 2000 return; | 2000 return; |
| 2001 } | 2001 } |
| 2002 defaultForInHead(); | 2002 defaultForInHead(); |
| 2003 // Fall through. | 2003 // Fall through. |
| 2004 case AfterHeadMode: | 2004 case AfterHeadMode: |
| 2005 ASSERT(insertionMode() == AfterHeadMode); | 2005 ASSERT(getInsertionMode() == AfterHeadMode); |
| 2006 if (token->name() != bodyTag && token->name() != htmlTag && token->name(
) != brTag) { | 2006 if (token->name() != bodyTag && token->name() != htmlTag && token->name(
) != brTag) { |
| 2007 parseError(token); | 2007 parseError(token); |
| 2008 return; | 2008 return; |
| 2009 } | 2009 } |
| 2010 defaultForAfterHead(); | 2010 defaultForAfterHead(); |
| 2011 // Fall through | 2011 // Fall through |
| 2012 case InBodyMode: | 2012 case InBodyMode: |
| 2013 ASSERT(insertionMode() == InBodyMode); | 2013 ASSERT(getInsertionMode() == InBodyMode); |
| 2014 processEndTagForInBody(token); | 2014 processEndTagForInBody(token); |
| 2015 break; | 2015 break; |
| 2016 case InTableMode: | 2016 case InTableMode: |
| 2017 ASSERT(insertionMode() == InTableMode); | 2017 ASSERT(getInsertionMode() == InTableMode); |
| 2018 processEndTagForInTable(token); | 2018 processEndTagForInTable(token); |
| 2019 break; | 2019 break; |
| 2020 case InCaptionMode: | 2020 case InCaptionMode: |
| 2021 ASSERT(insertionMode() == InCaptionMode); | 2021 ASSERT(getInsertionMode() == InCaptionMode); |
| 2022 if (token->name() == captionTag) { | 2022 if (token->name() == captionTag) { |
| 2023 processCaptionEndTagForInCaption(); | 2023 processCaptionEndTagForInCaption(); |
| 2024 return; | 2024 return; |
| 2025 } | 2025 } |
| 2026 if (token->name() == tableTag) { | 2026 if (token->name() == tableTag) { |
| 2027 parseError(token); | 2027 parseError(token); |
| 2028 if (!processCaptionEndTagForInCaption()) { | 2028 if (!processCaptionEndTagForInCaption()) { |
| 2029 ASSERT(isParsingFragment()); | 2029 ASSERT(isParsingFragment()); |
| 2030 return; | 2030 return; |
| 2031 } | 2031 } |
| 2032 processEndTag(token); | 2032 processEndTag(token); |
| 2033 return; | 2033 return; |
| 2034 } | 2034 } |
| 2035 if (token->name() == bodyTag | 2035 if (token->name() == bodyTag |
| 2036 || token->name() == colTag | 2036 || token->name() == colTag |
| 2037 || token->name() == colgroupTag | 2037 || token->name() == colgroupTag |
| 2038 || token->name() == htmlTag | 2038 || token->name() == htmlTag |
| 2039 || isTableBodyContextTag(token->name()) | 2039 || isTableBodyContextTag(token->name()) |
| 2040 || isTableCellContextTag(token->name()) | 2040 || isTableCellContextTag(token->name()) |
| 2041 || token->name() == trTag) { | 2041 || token->name() == trTag) { |
| 2042 parseError(token); | 2042 parseError(token); |
| 2043 return; | 2043 return; |
| 2044 } | 2044 } |
| 2045 processEndTagForInBody(token); | 2045 processEndTagForInBody(token); |
| 2046 break; | 2046 break; |
| 2047 case InColumnGroupMode: | 2047 case InColumnGroupMode: |
| 2048 ASSERT(insertionMode() == InColumnGroupMode); | 2048 ASSERT(getInsertionMode() == InColumnGroupMode); |
| 2049 if (token->name() == colgroupTag) { | 2049 if (token->name() == colgroupTag) { |
| 2050 processColgroupEndTagForInColumnGroup(); | 2050 processColgroupEndTagForInColumnGroup(); |
| 2051 return; | 2051 return; |
| 2052 } | 2052 } |
| 2053 if (token->name() == colTag) { | 2053 if (token->name() == colTag) { |
| 2054 parseError(token); | 2054 parseError(token); |
| 2055 return; | 2055 return; |
| 2056 } | 2056 } |
| 2057 if (token->name() == templateTag) { | 2057 if (token->name() == templateTag) { |
| 2058 processTemplateEndTag(token); | 2058 processTemplateEndTag(token); |
| 2059 return; | 2059 return; |
| 2060 } | 2060 } |
| 2061 if (!processColgroupEndTagForInColumnGroup()) { | 2061 if (!processColgroupEndTagForInColumnGroup()) { |
| 2062 ASSERT(isParsingFragmentOrTemplateContents()); | 2062 ASSERT(isParsingFragmentOrTemplateContents()); |
| 2063 return; | 2063 return; |
| 2064 } | 2064 } |
| 2065 processEndTag(token); | 2065 processEndTag(token); |
| 2066 break; | 2066 break; |
| 2067 case InRowMode: | 2067 case InRowMode: |
| 2068 ASSERT(insertionMode() == InRowMode); | 2068 ASSERT(getInsertionMode() == InRowMode); |
| 2069 processEndTagForInRow(token); | 2069 processEndTagForInRow(token); |
| 2070 break; | 2070 break; |
| 2071 case InCellMode: | 2071 case InCellMode: |
| 2072 ASSERT(insertionMode() == InCellMode); | 2072 ASSERT(getInsertionMode() == InCellMode); |
| 2073 processEndTagForInCell(token); | 2073 processEndTagForInCell(token); |
| 2074 break; | 2074 break; |
| 2075 case InTableBodyMode: | 2075 case InTableBodyMode: |
| 2076 ASSERT(insertionMode() == InTableBodyMode); | 2076 ASSERT(getInsertionMode() == InTableBodyMode); |
| 2077 processEndTagForInTableBody(token); | 2077 processEndTagForInTableBody(token); |
| 2078 break; | 2078 break; |
| 2079 case AfterBodyMode: | 2079 case AfterBodyMode: |
| 2080 ASSERT(insertionMode() == AfterBodyMode); | 2080 ASSERT(getInsertionMode() == AfterBodyMode); |
| 2081 if (token->name() == htmlTag) { | 2081 if (token->name() == htmlTag) { |
| 2082 if (isParsingFragment()) { | 2082 if (isParsingFragment()) { |
| 2083 parseError(token); | 2083 parseError(token); |
| 2084 return; | 2084 return; |
| 2085 } | 2085 } |
| 2086 setInsertionMode(AfterAfterBodyMode); | 2086 setInsertionMode(AfterAfterBodyMode); |
| 2087 return; | 2087 return; |
| 2088 } | 2088 } |
| 2089 // Fall through. | 2089 // Fall through. |
| 2090 case AfterAfterBodyMode: | 2090 case AfterAfterBodyMode: |
| 2091 ASSERT(insertionMode() == AfterBodyMode || insertionMode() == AfterAfter
BodyMode); | 2091 ASSERT(getInsertionMode() == AfterBodyMode || getInsertionMode() == Afte
rAfterBodyMode); |
| 2092 parseError(token); | 2092 parseError(token); |
| 2093 setInsertionMode(InBodyMode); | 2093 setInsertionMode(InBodyMode); |
| 2094 processEndTag(token); | 2094 processEndTag(token); |
| 2095 break; | 2095 break; |
| 2096 case InHeadNoscriptMode: | 2096 case InHeadNoscriptMode: |
| 2097 ASSERT(insertionMode() == InHeadNoscriptMode); | 2097 ASSERT(getInsertionMode() == InHeadNoscriptMode); |
| 2098 if (token->name() == noscriptTag) { | 2098 if (token->name() == noscriptTag) { |
| 2099 ASSERT(m_tree.currentStackItem()->hasTagName(noscriptTag)); | 2099 ASSERT(m_tree.currentStackItem()->hasTagName(noscriptTag)); |
| 2100 m_tree.openElements()->pop(); | 2100 m_tree.openElements()->pop(); |
| 2101 ASSERT(m_tree.currentStackItem()->hasTagName(headTag)); | 2101 ASSERT(m_tree.currentStackItem()->hasTagName(headTag)); |
| 2102 setInsertionMode(InHeadMode); | 2102 setInsertionMode(InHeadMode); |
| 2103 return; | 2103 return; |
| 2104 } | 2104 } |
| 2105 if (token->name() != brTag) { | 2105 if (token->name() != brTag) { |
| 2106 parseError(token); | 2106 parseError(token); |
| 2107 return; | 2107 return; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 2122 // We must set the tokenizer's state to | 2122 // We must set the tokenizer's state to |
| 2123 // DataState explicitly if the tokenizer didn't have a chance to
. | 2123 // DataState explicitly if the tokenizer didn't have a chance to
. |
| 2124 m_parser->tokenizer()->setState(HTMLTokenizer::DataState); | 2124 m_parser->tokenizer()->setState(HTMLTokenizer::DataState); |
| 2125 } | 2125 } |
| 2126 return; | 2126 return; |
| 2127 } | 2127 } |
| 2128 m_tree.openElements()->pop(); | 2128 m_tree.openElements()->pop(); |
| 2129 setInsertionMode(m_originalInsertionMode); | 2129 setInsertionMode(m_originalInsertionMode); |
| 2130 break; | 2130 break; |
| 2131 case InFramesetMode: | 2131 case InFramesetMode: |
| 2132 ASSERT(insertionMode() == InFramesetMode); | 2132 ASSERT(getInsertionMode() == InFramesetMode); |
| 2133 if (token->name() == framesetTag) { | 2133 if (token->name() == framesetTag) { |
| 2134 bool ignoreFramesetForFragmentParsing = m_tree.currentIsRootNode(); | 2134 bool ignoreFramesetForFragmentParsing = m_tree.currentIsRootNode(); |
| 2135 ignoreFramesetForFragmentParsing = ignoreFramesetForFragmentParsing
|| m_tree.openElements()->hasTemplateInHTMLScope(); | 2135 ignoreFramesetForFragmentParsing = ignoreFramesetForFragmentParsing
|| m_tree.openElements()->hasTemplateInHTMLScope(); |
| 2136 if (ignoreFramesetForFragmentParsing) { | 2136 if (ignoreFramesetForFragmentParsing) { |
| 2137 ASSERT(isParsingFragmentOrTemplateContents()); | 2137 ASSERT(isParsingFragmentOrTemplateContents()); |
| 2138 parseError(token); | 2138 parseError(token); |
| 2139 return; | 2139 return; |
| 2140 } | 2140 } |
| 2141 m_tree.openElements()->pop(); | 2141 m_tree.openElements()->pop(); |
| 2142 if (!isParsingFragment() && !m_tree.currentStackItem()->hasTagName(f
ramesetTag)) | 2142 if (!isParsingFragment() && !m_tree.currentStackItem()->hasTagName(f
ramesetTag)) |
| 2143 setInsertionMode(AfterFramesetMode); | 2143 setInsertionMode(AfterFramesetMode); |
| 2144 return; | 2144 return; |
| 2145 } | 2145 } |
| 2146 if (token->name() == templateTag) { | 2146 if (token->name() == templateTag) { |
| 2147 processTemplateEndTag(token); | 2147 processTemplateEndTag(token); |
| 2148 return; | 2148 return; |
| 2149 } | 2149 } |
| 2150 break; | 2150 break; |
| 2151 case AfterFramesetMode: | 2151 case AfterFramesetMode: |
| 2152 ASSERT(insertionMode() == AfterFramesetMode); | 2152 ASSERT(getInsertionMode() == AfterFramesetMode); |
| 2153 if (token->name() == htmlTag) { | 2153 if (token->name() == htmlTag) { |
| 2154 setInsertionMode(AfterAfterFramesetMode); | 2154 setInsertionMode(AfterAfterFramesetMode); |
| 2155 return; | 2155 return; |
| 2156 } | 2156 } |
| 2157 // Fall through. | 2157 // Fall through. |
| 2158 case AfterAfterFramesetMode: | 2158 case AfterAfterFramesetMode: |
| 2159 ASSERT(insertionMode() == AfterFramesetMode || insertionMode() == AfterA
fterFramesetMode); | 2159 ASSERT(getInsertionMode() == AfterFramesetMode || getInsertionMode() ==
AfterAfterFramesetMode); |
| 2160 parseError(token); | 2160 parseError(token); |
| 2161 break; | 2161 break; |
| 2162 case InSelectInTableMode: | 2162 case InSelectInTableMode: |
| 2163 ASSERT(insertionMode() == InSelectInTableMode); | 2163 ASSERT(getInsertionMode() == InSelectInTableMode); |
| 2164 if (token->name() == captionTag | 2164 if (token->name() == captionTag |
| 2165 || token->name() == tableTag | 2165 || token->name() == tableTag |
| 2166 || isTableBodyContextTag(token->name()) | 2166 || isTableBodyContextTag(token->name()) |
| 2167 || token->name() == trTag | 2167 || token->name() == trTag |
| 2168 || isTableCellContextTag(token->name())) { | 2168 || isTableCellContextTag(token->name())) { |
| 2169 parseError(token); | 2169 parseError(token); |
| 2170 if (m_tree.openElements()->inTableScope(token->name())) { | 2170 if (m_tree.openElements()->inTableScope(token->name())) { |
| 2171 AtomicHTMLToken endSelect(HTMLToken::EndTag, selectTag.localName
()); | 2171 AtomicHTMLToken endSelect(HTMLToken::EndTag, selectTag.localName
()); |
| 2172 processEndTag(&endSelect); | 2172 processEndTag(&endSelect); |
| 2173 processEndTag(token); | 2173 processEndTag(token); |
| 2174 } | 2174 } |
| 2175 return; | 2175 return; |
| 2176 } | 2176 } |
| 2177 // Fall through. | 2177 // Fall through. |
| 2178 case InSelectMode: | 2178 case InSelectMode: |
| 2179 ASSERT(insertionMode() == InSelectMode || insertionMode() == InSelectInT
ableMode); | 2179 ASSERT(getInsertionMode() == InSelectMode || getInsertionMode() == InSel
ectInTableMode); |
| 2180 if (token->name() == optgroupTag) { | 2180 if (token->name() == optgroupTag) { |
| 2181 if (m_tree.currentStackItem()->hasTagName(optionTag) && m_tree.oneBe
lowTop() && m_tree.oneBelowTop()->hasTagName(optgroupTag)) | 2181 if (m_tree.currentStackItem()->hasTagName(optionTag) && m_tree.oneBe
lowTop() && m_tree.oneBelowTop()->hasTagName(optgroupTag)) |
| 2182 processFakeEndTag(optionTag); | 2182 processFakeEndTag(optionTag); |
| 2183 if (m_tree.currentStackItem()->hasTagName(optgroupTag)) { | 2183 if (m_tree.currentStackItem()->hasTagName(optgroupTag)) { |
| 2184 m_tree.openElements()->pop(); | 2184 m_tree.openElements()->pop(); |
| 2185 return; | 2185 return; |
| 2186 } | 2186 } |
| 2187 parseError(token); | 2187 parseError(token); |
| 2188 return; | 2188 return; |
| 2189 } | 2189 } |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2266 // </pre> | 2266 // </pre> |
| 2267 // | 2267 // |
| 2268 // without getting an extra newline at the start of their <pre> element. | 2268 // without getting an extra newline at the start of their <pre> element. |
| 2269 if (m_shouldSkipLeadingNewline) { | 2269 if (m_shouldSkipLeadingNewline) { |
| 2270 m_shouldSkipLeadingNewline = false; | 2270 m_shouldSkipLeadingNewline = false; |
| 2271 buffer.skipAtMostOneLeadingNewline(); | 2271 buffer.skipAtMostOneLeadingNewline(); |
| 2272 if (buffer.isEmpty()) | 2272 if (buffer.isEmpty()) |
| 2273 return; | 2273 return; |
| 2274 } | 2274 } |
| 2275 | 2275 |
| 2276 switch (insertionMode()) { | 2276 switch (getInsertionMode()) { |
| 2277 case InitialMode: { | 2277 case InitialMode: { |
| 2278 ASSERT(insertionMode() == InitialMode); | 2278 ASSERT(getInsertionMode() == InitialMode); |
| 2279 buffer.skipLeadingWhitespace(); | 2279 buffer.skipLeadingWhitespace(); |
| 2280 if (buffer.isEmpty()) | 2280 if (buffer.isEmpty()) |
| 2281 return; | 2281 return; |
| 2282 defaultForInitial(); | 2282 defaultForInitial(); |
| 2283 // Fall through. | 2283 // Fall through. |
| 2284 } | 2284 } |
| 2285 case BeforeHTMLMode: { | 2285 case BeforeHTMLMode: { |
| 2286 ASSERT(insertionMode() == BeforeHTMLMode); | 2286 ASSERT(getInsertionMode() == BeforeHTMLMode); |
| 2287 buffer.skipLeadingWhitespace(); | 2287 buffer.skipLeadingWhitespace(); |
| 2288 if (buffer.isEmpty()) | 2288 if (buffer.isEmpty()) |
| 2289 return; | 2289 return; |
| 2290 defaultForBeforeHTML(); | 2290 defaultForBeforeHTML(); |
| 2291 // Fall through. | 2291 // Fall through. |
| 2292 } | 2292 } |
| 2293 case BeforeHeadMode: { | 2293 case BeforeHeadMode: { |
| 2294 ASSERT(insertionMode() == BeforeHeadMode); | 2294 ASSERT(getInsertionMode() == BeforeHeadMode); |
| 2295 buffer.skipLeadingWhitespace(); | 2295 buffer.skipLeadingWhitespace(); |
| 2296 if (buffer.isEmpty()) | 2296 if (buffer.isEmpty()) |
| 2297 return; | 2297 return; |
| 2298 defaultForBeforeHead(); | 2298 defaultForBeforeHead(); |
| 2299 // Fall through. | 2299 // Fall through. |
| 2300 } | 2300 } |
| 2301 case InHeadMode: { | 2301 case InHeadMode: { |
| 2302 ASSERT(insertionMode() == InHeadMode); | 2302 ASSERT(getInsertionMode() == InHeadMode); |
| 2303 String leadingWhitespace = buffer.takeLeadingWhitespace(); | 2303 String leadingWhitespace = buffer.takeLeadingWhitespace(); |
| 2304 if (!leadingWhitespace.isEmpty()) | 2304 if (!leadingWhitespace.isEmpty()) |
| 2305 m_tree.insertTextNode(leadingWhitespace, AllWhitespace); | 2305 m_tree.insertTextNode(leadingWhitespace, AllWhitespace); |
| 2306 if (buffer.isEmpty()) | 2306 if (buffer.isEmpty()) |
| 2307 return; | 2307 return; |
| 2308 defaultForInHead(); | 2308 defaultForInHead(); |
| 2309 // Fall through. | 2309 // Fall through. |
| 2310 } | 2310 } |
| 2311 case AfterHeadMode: { | 2311 case AfterHeadMode: { |
| 2312 ASSERT(insertionMode() == AfterHeadMode); | 2312 ASSERT(getInsertionMode() == AfterHeadMode); |
| 2313 String leadingWhitespace = buffer.takeLeadingWhitespace(); | 2313 String leadingWhitespace = buffer.takeLeadingWhitespace(); |
| 2314 if (!leadingWhitespace.isEmpty()) | 2314 if (!leadingWhitespace.isEmpty()) |
| 2315 m_tree.insertTextNode(leadingWhitespace, AllWhitespace); | 2315 m_tree.insertTextNode(leadingWhitespace, AllWhitespace); |
| 2316 if (buffer.isEmpty()) | 2316 if (buffer.isEmpty()) |
| 2317 return; | 2317 return; |
| 2318 defaultForAfterHead(); | 2318 defaultForAfterHead(); |
| 2319 // Fall through. | 2319 // Fall through. |
| 2320 } | 2320 } |
| 2321 case InBodyMode: | 2321 case InBodyMode: |
| 2322 case InCaptionMode: | 2322 case InCaptionMode: |
| 2323 case TemplateContentsMode: | 2323 case TemplateContentsMode: |
| 2324 case InCellMode: { | 2324 case InCellMode: { |
| 2325 ASSERT(insertionMode() == InBodyMode || insertionMode() == InCaptionMode
|| insertionMode() == InCellMode || insertionMode() == TemplateContentsMode); | 2325 ASSERT(getInsertionMode() == InBodyMode || getInsertionMode() == InCapti
onMode || getInsertionMode() == InCellMode || getInsertionMode() == TemplateCont
entsMode); |
| 2326 processCharacterBufferForInBody(buffer); | 2326 processCharacterBufferForInBody(buffer); |
| 2327 break; | 2327 break; |
| 2328 } | 2328 } |
| 2329 case InTableMode: | 2329 case InTableMode: |
| 2330 case InTableBodyMode: | 2330 case InTableBodyMode: |
| 2331 case InRowMode: { | 2331 case InRowMode: { |
| 2332 ASSERT(insertionMode() == InTableMode || insertionMode() == InTableBodyM
ode || insertionMode() == InRowMode); | 2332 ASSERT(getInsertionMode() == InTableMode || getInsertionMode() == InTabl
eBodyMode || getInsertionMode() == InRowMode); |
| 2333 ASSERT(m_pendingTableCharacters.isEmpty()); | 2333 ASSERT(m_pendingTableCharacters.isEmpty()); |
| 2334 if (m_tree.currentStackItem()->isElementNode() | 2334 if (m_tree.currentStackItem()->isElementNode() |
| 2335 && (m_tree.currentStackItem()->hasTagName(tableTag) | 2335 && (m_tree.currentStackItem()->hasTagName(tableTag) |
| 2336 || m_tree.currentStackItem()->hasTagName(tbodyTag) | 2336 || m_tree.currentStackItem()->hasTagName(tbodyTag) |
| 2337 || m_tree.currentStackItem()->hasTagName(tfootTag) | 2337 || m_tree.currentStackItem()->hasTagName(tfootTag) |
| 2338 || m_tree.currentStackItem()->hasTagName(theadTag) | 2338 || m_tree.currentStackItem()->hasTagName(theadTag) |
| 2339 || m_tree.currentStackItem()->hasTagName(trTag))) { | 2339 || m_tree.currentStackItem()->hasTagName(trTag))) { |
| 2340 m_originalInsertionMode = m_insertionMode; | 2340 m_originalInsertionMode = m_insertionMode; |
| 2341 setInsertionMode(InTableTextMode); | 2341 setInsertionMode(InTableTextMode); |
| 2342 // Note that we fall through to the InTableTextMode case below. | 2342 // Note that we fall through to the InTableTextMode case below. |
| 2343 } else { | 2343 } else { |
| 2344 HTMLConstructionSite::RedirectToFosterParentGuard redirecter(m_tree)
; | 2344 HTMLConstructionSite::RedirectToFosterParentGuard redirecter(m_tree)
; |
| 2345 processCharacterBufferForInBody(buffer); | 2345 processCharacterBufferForInBody(buffer); |
| 2346 break; | 2346 break; |
| 2347 } | 2347 } |
| 2348 // Fall through. | 2348 // Fall through. |
| 2349 } | 2349 } |
| 2350 case InTableTextMode: { | 2350 case InTableTextMode: { |
| 2351 buffer.giveRemainingTo(m_pendingTableCharacters); | 2351 buffer.giveRemainingTo(m_pendingTableCharacters); |
| 2352 break; | 2352 break; |
| 2353 } | 2353 } |
| 2354 case InColumnGroupMode: { | 2354 case InColumnGroupMode: { |
| 2355 ASSERT(insertionMode() == InColumnGroupMode); | 2355 ASSERT(getInsertionMode() == InColumnGroupMode); |
| 2356 String leadingWhitespace = buffer.takeLeadingWhitespace(); | 2356 String leadingWhitespace = buffer.takeLeadingWhitespace(); |
| 2357 if (!leadingWhitespace.isEmpty()) | 2357 if (!leadingWhitespace.isEmpty()) |
| 2358 m_tree.insertTextNode(leadingWhitespace, AllWhitespace); | 2358 m_tree.insertTextNode(leadingWhitespace, AllWhitespace); |
| 2359 if (buffer.isEmpty()) | 2359 if (buffer.isEmpty()) |
| 2360 return; | 2360 return; |
| 2361 if (!processColgroupEndTagForInColumnGroup()) { | 2361 if (!processColgroupEndTagForInColumnGroup()) { |
| 2362 ASSERT(isParsingFragmentOrTemplateContents()); | 2362 ASSERT(isParsingFragmentOrTemplateContents()); |
| 2363 // The spec tells us to drop these characters on the floor. | 2363 // The spec tells us to drop these characters on the floor. |
| 2364 buffer.skipLeadingNonWhitespace(); | 2364 buffer.skipLeadingNonWhitespace(); |
| 2365 if (buffer.isEmpty()) | 2365 if (buffer.isEmpty()) |
| 2366 return; | 2366 return; |
| 2367 } | 2367 } |
| 2368 goto ReprocessBuffer; | 2368 goto ReprocessBuffer; |
| 2369 } | 2369 } |
| 2370 case AfterBodyMode: | 2370 case AfterBodyMode: |
| 2371 case AfterAfterBodyMode: { | 2371 case AfterAfterBodyMode: { |
| 2372 ASSERT(insertionMode() == AfterBodyMode || insertionMode() == AfterAfter
BodyMode); | 2372 ASSERT(getInsertionMode() == AfterBodyMode || getInsertionMode() == Afte
rAfterBodyMode); |
| 2373 // FIXME: parse error | 2373 // FIXME: parse error |
| 2374 setInsertionMode(InBodyMode); | 2374 setInsertionMode(InBodyMode); |
| 2375 goto ReprocessBuffer; | 2375 goto ReprocessBuffer; |
| 2376 } | 2376 } |
| 2377 case TextMode: { | 2377 case TextMode: { |
| 2378 ASSERT(insertionMode() == TextMode); | 2378 ASSERT(getInsertionMode() == TextMode); |
| 2379 m_tree.insertTextNode(buffer.takeRemaining()); | 2379 m_tree.insertTextNode(buffer.takeRemaining()); |
| 2380 break; | 2380 break; |
| 2381 } | 2381 } |
| 2382 case InHeadNoscriptMode: { | 2382 case InHeadNoscriptMode: { |
| 2383 ASSERT(insertionMode() == InHeadNoscriptMode); | 2383 ASSERT(getInsertionMode() == InHeadNoscriptMode); |
| 2384 String leadingWhitespace = buffer.takeLeadingWhitespace(); | 2384 String leadingWhitespace = buffer.takeLeadingWhitespace(); |
| 2385 if (!leadingWhitespace.isEmpty()) | 2385 if (!leadingWhitespace.isEmpty()) |
| 2386 m_tree.insertTextNode(leadingWhitespace, AllWhitespace); | 2386 m_tree.insertTextNode(leadingWhitespace, AllWhitespace); |
| 2387 if (buffer.isEmpty()) | 2387 if (buffer.isEmpty()) |
| 2388 return; | 2388 return; |
| 2389 defaultForInHeadNoscript(); | 2389 defaultForInHeadNoscript(); |
| 2390 goto ReprocessBuffer; | 2390 goto ReprocessBuffer; |
| 2391 } | 2391 } |
| 2392 case InFramesetMode: | 2392 case InFramesetMode: |
| 2393 case AfterFramesetMode: { | 2393 case AfterFramesetMode: { |
| 2394 ASSERT(insertionMode() == InFramesetMode || insertionMode() == AfterFram
esetMode || insertionMode() == AfterAfterFramesetMode); | 2394 ASSERT(getInsertionMode() == InFramesetMode || getInsertionMode() == Aft
erFramesetMode || getInsertionMode() == AfterAfterFramesetMode); |
| 2395 String leadingWhitespace = buffer.takeRemainingWhitespace(); | 2395 String leadingWhitespace = buffer.takeRemainingWhitespace(); |
| 2396 if (!leadingWhitespace.isEmpty()) | 2396 if (!leadingWhitespace.isEmpty()) |
| 2397 m_tree.insertTextNode(leadingWhitespace, AllWhitespace); | 2397 m_tree.insertTextNode(leadingWhitespace, AllWhitespace); |
| 2398 // FIXME: We should generate a parse error if we skipped over any | 2398 // FIXME: We should generate a parse error if we skipped over any |
| 2399 // non-whitespace characters. | 2399 // non-whitespace characters. |
| 2400 break; | 2400 break; |
| 2401 } | 2401 } |
| 2402 case InSelectInTableMode: | 2402 case InSelectInTableMode: |
| 2403 case InSelectMode: { | 2403 case InSelectMode: { |
| 2404 ASSERT(insertionMode() == InSelectMode || insertionMode() == InSelectInT
ableMode); | 2404 ASSERT(getInsertionMode() == InSelectMode || getInsertionMode() == InSel
ectInTableMode); |
| 2405 m_tree.insertTextNode(buffer.takeRemaining()); | 2405 m_tree.insertTextNode(buffer.takeRemaining()); |
| 2406 break; | 2406 break; |
| 2407 } | 2407 } |
| 2408 case AfterAfterFramesetMode: { | 2408 case AfterAfterFramesetMode: { |
| 2409 String leadingWhitespace = buffer.takeRemainingWhitespace(); | 2409 String leadingWhitespace = buffer.takeRemainingWhitespace(); |
| 2410 if (!leadingWhitespace.isEmpty()) { | 2410 if (!leadingWhitespace.isEmpty()) { |
| 2411 m_tree.reconstructTheActiveFormattingElements(); | 2411 m_tree.reconstructTheActiveFormattingElements(); |
| 2412 m_tree.insertTextNode(leadingWhitespace, AllWhitespace); | 2412 m_tree.insertTextNode(leadingWhitespace, AllWhitespace); |
| 2413 } | 2413 } |
| 2414 // FIXME: We should generate a parse error if we skipped over any | 2414 // FIXME: We should generate a parse error if we skipped over any |
| 2415 // non-whitespace characters. | 2415 // non-whitespace characters. |
| 2416 break; | 2416 break; |
| 2417 } | 2417 } |
| 2418 } | 2418 } |
| 2419 } | 2419 } |
| 2420 | 2420 |
| 2421 void HTMLTreeBuilder::processCharacterBufferForInBody(CharacterTokenBuffer& buff
er) | 2421 void HTMLTreeBuilder::processCharacterBufferForInBody(CharacterTokenBuffer& buff
er) |
| 2422 { | 2422 { |
| 2423 m_tree.reconstructTheActiveFormattingElements(); | 2423 m_tree.reconstructTheActiveFormattingElements(); |
| 2424 const String& characters = buffer.takeRemaining(); | 2424 const String& characters = buffer.takeRemaining(); |
| 2425 m_tree.insertTextNode(characters); | 2425 m_tree.insertTextNode(characters); |
| 2426 if (m_framesetOk && !isAllWhitespaceOrReplacementCharacters(characters)) | 2426 if (m_framesetOk && !isAllWhitespaceOrReplacementCharacters(characters)) |
| 2427 m_framesetOk = false; | 2427 m_framesetOk = false; |
| 2428 } | 2428 } |
| 2429 | 2429 |
| 2430 void HTMLTreeBuilder::processEndOfFile(AtomicHTMLToken* token) | 2430 void HTMLTreeBuilder::processEndOfFile(AtomicHTMLToken* token) |
| 2431 { | 2431 { |
| 2432 ASSERT(token->type() == HTMLToken::EndOfFile); | 2432 ASSERT(token->type() == HTMLToken::EndOfFile); |
| 2433 switch (insertionMode()) { | 2433 switch (getInsertionMode()) { |
| 2434 case InitialMode: | 2434 case InitialMode: |
| 2435 ASSERT(insertionMode() == InitialMode); | 2435 ASSERT(getInsertionMode() == InitialMode); |
| 2436 defaultForInitial(); | 2436 defaultForInitial(); |
| 2437 // Fall through. | 2437 // Fall through. |
| 2438 case BeforeHTMLMode: | 2438 case BeforeHTMLMode: |
| 2439 ASSERT(insertionMode() == BeforeHTMLMode); | 2439 ASSERT(getInsertionMode() == BeforeHTMLMode); |
| 2440 defaultForBeforeHTML(); | 2440 defaultForBeforeHTML(); |
| 2441 // Fall through. | 2441 // Fall through. |
| 2442 case BeforeHeadMode: | 2442 case BeforeHeadMode: |
| 2443 ASSERT(insertionMode() == BeforeHeadMode); | 2443 ASSERT(getInsertionMode() == BeforeHeadMode); |
| 2444 defaultForBeforeHead(); | 2444 defaultForBeforeHead(); |
| 2445 // Fall through. | 2445 // Fall through. |
| 2446 case InHeadMode: | 2446 case InHeadMode: |
| 2447 ASSERT(insertionMode() == InHeadMode); | 2447 ASSERT(getInsertionMode() == InHeadMode); |
| 2448 defaultForInHead(); | 2448 defaultForInHead(); |
| 2449 // Fall through. | 2449 // Fall through. |
| 2450 case AfterHeadMode: | 2450 case AfterHeadMode: |
| 2451 ASSERT(insertionMode() == AfterHeadMode); | 2451 ASSERT(getInsertionMode() == AfterHeadMode); |
| 2452 defaultForAfterHead(); | 2452 defaultForAfterHead(); |
| 2453 // Fall through | 2453 // Fall through |
| 2454 case InBodyMode: | 2454 case InBodyMode: |
| 2455 case InCellMode: | 2455 case InCellMode: |
| 2456 case InCaptionMode: | 2456 case InCaptionMode: |
| 2457 case InRowMode: | 2457 case InRowMode: |
| 2458 ASSERT(insertionMode() == InBodyMode || insertionMode() == InCellMode ||
insertionMode() == InCaptionMode || insertionMode() == InRowMode || insertionMo
de() == TemplateContentsMode); | 2458 ASSERT(getInsertionMode() == InBodyMode || getInsertionMode() == InCellM
ode || getInsertionMode() == InCaptionMode || getInsertionMode() == InRowMode ||
getInsertionMode() == TemplateContentsMode); |
| 2459 notImplemented(); // Emit parse error based on what elements are still o
pen. | 2459 notImplemented(); // Emit parse error based on what elements are still o
pen. |
| 2460 if (!m_templateInsertionModes.isEmpty() && processEndOfFileForInTemplate
Contents(token)) | 2460 if (!m_templateInsertionModes.isEmpty() && processEndOfFileForInTemplate
Contents(token)) |
| 2461 return; | 2461 return; |
| 2462 break; | 2462 break; |
| 2463 case AfterBodyMode: | 2463 case AfterBodyMode: |
| 2464 case AfterAfterBodyMode: | 2464 case AfterAfterBodyMode: |
| 2465 ASSERT(insertionMode() == AfterBodyMode || insertionMode() == AfterAfter
BodyMode); | 2465 ASSERT(getInsertionMode() == AfterBodyMode || getInsertionMode() == Afte
rAfterBodyMode); |
| 2466 break; | 2466 break; |
| 2467 case InHeadNoscriptMode: | 2467 case InHeadNoscriptMode: |
| 2468 ASSERT(insertionMode() == InHeadNoscriptMode); | 2468 ASSERT(getInsertionMode() == InHeadNoscriptMode); |
| 2469 defaultForInHeadNoscript(); | 2469 defaultForInHeadNoscript(); |
| 2470 processEndOfFile(token); | 2470 processEndOfFile(token); |
| 2471 return; | 2471 return; |
| 2472 case AfterFramesetMode: | 2472 case AfterFramesetMode: |
| 2473 case AfterAfterFramesetMode: | 2473 case AfterAfterFramesetMode: |
| 2474 ASSERT(insertionMode() == AfterFramesetMode || insertionMode() == AfterA
fterFramesetMode); | 2474 ASSERT(getInsertionMode() == AfterFramesetMode || getInsertionMode() ==
AfterAfterFramesetMode); |
| 2475 break; | 2475 break; |
| 2476 case InColumnGroupMode: | 2476 case InColumnGroupMode: |
| 2477 if (m_tree.currentIsRootNode()) { | 2477 if (m_tree.currentIsRootNode()) { |
| 2478 ASSERT(isParsingFragment()); | 2478 ASSERT(isParsingFragment()); |
| 2479 return; // FIXME: Should we break here instead of returning? | 2479 return; // FIXME: Should we break here instead of returning? |
| 2480 } | 2480 } |
| 2481 ASSERT(m_tree.currentNode()->hasTagName(colgroupTag) || isHTMLTemplateEl
ement(m_tree.currentNode())); | 2481 ASSERT(m_tree.currentNode()->hasTagName(colgroupTag) || isHTMLTemplateEl
ement(m_tree.currentNode())); |
| 2482 processColgroupEndTagForInColumnGroup(); | 2482 processColgroupEndTagForInColumnGroup(); |
| 2483 // Fall through | 2483 // Fall through |
| 2484 case InFramesetMode: | 2484 case InFramesetMode: |
| 2485 case InTableMode: | 2485 case InTableMode: |
| 2486 case InTableBodyMode: | 2486 case InTableBodyMode: |
| 2487 case InSelectInTableMode: | 2487 case InSelectInTableMode: |
| 2488 case InSelectMode: | 2488 case InSelectMode: |
| 2489 ASSERT(insertionMode() == InSelectMode || insertionMode() == InSelectInT
ableMode || insertionMode() == InTableMode || insertionMode() == InFramesetMode
|| insertionMode() == InTableBodyMode || insertionMode() == InColumnGroupMode); | 2489 ASSERT(getInsertionMode() == InSelectMode || getInsertionMode() == InSel
ectInTableMode || getInsertionMode() == InTableMode || getInsertionMode() == InF
ramesetMode || getInsertionMode() == InTableBodyMode || getInsertionMode() == In
ColumnGroupMode); |
| 2490 if (m_tree.currentNode() != m_tree.openElements()->rootNode()) | 2490 if (m_tree.currentNode() != m_tree.openElements()->rootNode()) |
| 2491 parseError(token); | 2491 parseError(token); |
| 2492 if (!m_templateInsertionModes.isEmpty() && processEndOfFileForInTemplate
Contents(token)) | 2492 if (!m_templateInsertionModes.isEmpty() && processEndOfFileForInTemplate
Contents(token)) |
| 2493 return; | 2493 return; |
| 2494 break; | 2494 break; |
| 2495 case InTableTextMode: | 2495 case InTableTextMode: |
| 2496 defaultForInTableText(); | 2496 defaultForInTableText(); |
| 2497 processEndOfFile(token); | 2497 processEndOfFile(token); |
| 2498 return; | 2498 return; |
| 2499 case TextMode: | 2499 case TextMode: |
| (...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2812 ASSERT(m_isAttached); | 2812 ASSERT(m_isAttached); |
| 2813 // Warning, this may detach the parser. Do not do anything else after this. | 2813 // Warning, this may detach the parser. Do not do anything else after this. |
| 2814 m_tree.finishedParsing(); | 2814 m_tree.finishedParsing(); |
| 2815 } | 2815 } |
| 2816 | 2816 |
| 2817 void HTMLTreeBuilder::parseError(AtomicHTMLToken*) | 2817 void HTMLTreeBuilder::parseError(AtomicHTMLToken*) |
| 2818 { | 2818 { |
| 2819 } | 2819 } |
| 2820 | 2820 |
| 2821 } // namespace blink | 2821 } // namespace blink |
| OLD | NEW |