Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: third_party/WebKit/Source/core/html/parser/HTMLTreeBuilder.cpp

Issue 1740483004: Rename enums/functions that collide in chromium style in core/html/. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@get-names-5
Patch Set: get-names-6: . Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698