Use symbols to represent parents in script hierarchy
These are still very fragile to insertions/deletions, but take a
step in the right direction.
- Add some names for missing enums.
- Convert int16_t to enum in a few places.
- Tidy one loop.
Change-Id: I5a7b502c4fda8166c210f2a90321f3c6fdb8dbf0
Reviewed-on: https://pdfium-review.googlesource.com/c/46672
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/xfa/fxfa/fxfa_basic.h b/xfa/fxfa/fxfa_basic.h
index 345fdff..1312318 100644
--- a/xfa/fxfa/fxfa_basic.h
+++ b/xfa/fxfa/fxfa_basic.h
@@ -135,7 +135,7 @@
struct XFA_SCRIPTHIERARCHY {
uint16_t wAttributeStart;
uint16_t wAttributeCount;
- int16_t wParentIndex;
+ XFA_Element wParentIndex;
};
#define XFA_PROPERTYFLAG_OneOf 0x01
diff --git a/xfa/fxfa/parser/elements.inc b/xfa/fxfa/parser/elements.inc
index e2ad579..094aebe 100644
--- a/xfa/fxfa/parser/elements.inc
+++ b/xfa/fxfa/parser/elements.inc
@@ -316,3 +316,12 @@
ELEM____(0xfc78159fu, "numberSymbol", NumberSymbol)
ELEM____(0xfcbd606cu, "tagged", Tagged)
ELEM____(0xff063802u, "items", Items)
+ELEM_HIDDEN____(Object)
+ELEM_HIDDEN____(ListDuplicate)
+ELEM_HIDDEN____(Placeholder1)
+ELEM_HIDDEN____(Tree)
+ELEM_HIDDEN____(Node)
+ELEM_HIDDEN____(Placeholder2)
+ELEM_HIDDEN____(Placeholder3)
+ELEM_HIDDEN____(Model)
+ELEM_HIDDEN____(Placeholder4)
diff --git a/xfa/fxfa/parser/xfa_basic_data_element_script.cpp b/xfa/fxfa/parser/xfa_basic_data_element_script.cpp
index add5b1b..8e425d5 100644
--- a/xfa/fxfa/parser/xfa_basic_data_element_script.cpp
+++ b/xfa/fxfa/parser/xfa_basic_data_element_script.cpp
@@ -150,329 +150,339 @@
#include "xfa/fxfa/fxfa_basic.h"
const XFA_SCRIPTHIERARCHY g_XFAScriptIndex[] = {
- {/* ps */ 0, 2, 316},
- {/* to */ 2, 2, 316},
- {/* ui */ 4, 2, 316},
- {/* recordSet */ 6, 8, 316},
- {/* subsetBelow */ 14, 4, 316},
- {/* subformSet */ 18, 5, 317},
- {/* adobeExtensionLevel */ 23, 2, 316},
- {/* typeface */ 25, 1, 316},
- {/* break */ 26, 12, 316},
- {/* fontInfo */ 38, 2, 316},
- {/* numberPattern */ 40, 1, 316},
- {/* dynamicRender */ 41, 3, 316},
- {/* printScaling */ 44, 2, 316},
- {/* checkButton */ 46, 6, 316},
- {/* datePatterns */ 52, 0, 316},
- {/* sourceSet */ 52, 2, 319},
- {/* amd */ 54, 2, 316},
- {/* arc */ 56, 6, 316},
- {/* day */ 62, 0, 316},
- {/* era */ 62, 0, 316},
- {/* jog */ 62, 2, 316},
- {/* log */ 64, 2, 316},
- {/* map */ 66, 6, 316},
- {/* mdp */ 72, 4, 316},
- {/* breakBefore */ 76, 7, 316},
- {/* oid */ 83, 2, 320},
- {/* pcl */ 85, 3, 316},
- {/* pdf */ 88, 3, 316},
- {/* ref */ 91, 2, 320},
- {/* uri */ 93, 6, 320},
- {/* xdc */ 99, 4, 316},
- {/* xdp */ 103, 2, 316},
- {/* xfa */ 105, 3, 319},
- {/* xsl */ 108, 4, 316},
- {/* zpl */ 112, 3, 316},
- {/* cache */ 115, 2, 316},
- {/* margin */ 117, 6, 316},
- {/* keyUsage */ 123, 12, 316},
- {/* exclude */ 135, 2, 316},
- {/* choiceList */ 137, 5, 316},
- {/* level */ 142, 2, 316},
- {/* labelPrinter */ 144, 3, 316},
- {/* calendarSymbols */ 147, 1, 316},
- {/* para */ 148, 14, 316},
- {/* part */ 162, 2, 316},
- {/* pdfa */ 164, 2, 316},
- {/* filter */ 166, 3, 316},
- {/* present */ 169, 2, 316},
- {/* pagination */ 171, 2, 316},
- {/* encoding */ 173, 2, 316},
- {/* event */ 175, 4, 316},
- {/* whitespace */ 179, 2, 316},
- {/* defaultUi */ 181, 2, 316},
- {/* dataModel */ 183, 0, 319},
- {/* barcode */ 183, 20, 316},
- {/* timePattern */ 203, 1, 316},
- {/* batchOutput */ 204, 3, 316},
- {/* enforce */ 207, 2, 316},
- {/* currencySymbols */ 209, 0, 316},
- {/* addSilentPrint */ 209, 2, 316},
- {/* rename */ 211, 2, 316},
- {/* operation */ 213, 4, 320},
- {/* typefaces */ 217, 0, 316},
- {/* subjectDNs */ 217, 1, 316},
- {/* issuers */ 218, 3, 316},
- {/* signaturePseudoModel */ 221, 0, 312},
- {/* wsdlConnection */ 221, 1, 316},
- {/* debug */ 222, 2, 316},
- {/* delta */ 224, 3, -1},
- {/* eraNames */ 227, 0, 316},
- {/* modifyAnnots */ 227, 2, 316},
- {/* startNode */ 229, 2, 316},
- {/* button */ 231, 3, 316},
- {/* format */ 234, 2, 316},
- {/* border */ 236, 6, 316},
- {/* area */ 242, 10, 317},
- {/* hyphenation */ 252, 9, 316},
- {/* text */ 261, 5, 318},
- {/* time */ 266, 4, 318},
- {/* type */ 270, 2, 316},
- {/* overprint */ 272, 2, 316},
- {/* certificates */ 274, 5, 316},
- {/* encryptionMethods */ 279, 3, 316},
- {/* setProperty */ 282, 2, 316},
- {/* printerName */ 284, 2, 316},
- {/* startPage */ 286, 2, 316},
- {/* pageOffset */ 288, 2, 316},
- {/* dateTime */ 290, 4, 316},
- {/* comb */ 294, 3, 316},
- {/* pattern */ 297, 3, 316},
- {/* ifEmpty */ 300, 2, 316},
- {/* suppressBanner */ 302, 2, 316},
- {/* outputBin */ 304, 2, 316},
- {/* field */ 306, 36, 317},
- {/* agent */ 342, 3, 316},
- {/* outputXSL */ 345, 2, 316},
- {/* adjustData */ 347, 2, 316},
- {/* autoSave */ 349, 2, 316},
- {/* contentArea */ 351, 7, 317},
- {/* eventPseudoModel */ 358, 17, 312},
- {/* wsdlAddress */ 375, 2, 320},
- {/* solid */ 377, 2, 316},
- {/* dateTimeSymbols */ 379, 0, 316},
- {/* encryptionLevel */ 379, 2, 316},
- {/* edge */ 381, 6, 316},
- {/* stipple */ 387, 3, 316},
- {/* attributes */ 390, 2, 316},
- {/* versionControl */ 392, 4, 316},
- {/* meridiem */ 396, 0, 316},
- {/* exclGroup */ 396, 30, 316},
- {/* toolTip */ 426, 2, 320},
- {/* compress */ 428, 3, 316},
- {/* reason */ 431, 2, 320},
- {/* execute */ 433, 5, 316},
- {/* contentCopy */ 438, 2, 316},
- {/* dateTimeEdit */ 440, 3, 316},
- {/* config */ 443, 2, 316},
- {/* image */ 445, 8, 316},
- {/* #xHTML */ 453, 1, 316},
- {/* numberOfCopies */ 454, 2, 316},
- {/* behaviorOverride */ 456, 2, 316},
- {/* timeStamp */ 458, 4, 316},
- {/* month */ 462, 0, 316},
- {/* viewerPreferences */ 462, 2, 316},
- {/* scriptModel */ 464, 2, 316},
- {/* decimal */ 466, 6, 318},
- {/* subform */ 472, 31, 317},
- {/* select */ 503, 2, 320},
- {/* window */ 505, 2, 316},
- {/* localeSet */ 507, 2, 316},
- {/* handler */ 509, 4, 320},
- {/* hostPseudoModel */ 513, 11, 312},
- {/* presence */ 524, 2, 316},
- {/* record */ 526, 2, 316},
- {/* embed */ 528, 2, 316},
- {/* version */ 530, 2, 316},
- {/* command */ 532, 3, 316},
- {/* copies */ 535, 2, 316},
- {/* staple */ 537, 3, 316},
- {/* submitFormat */ 540, 3, 316},
- {/* boolean */ 543, 4, 318},
- {/* message */ 547, 4, 316},
- {/* output */ 551, 2, 316},
- {/* psMap */ 553, 0, 316},
- {/* excludeNS */ 553, 2, 316},
- {/* assist */ 555, 3, 316},
- {/* picture */ 558, 6, 316},
- {/* traversal */ 564, 2, 316},
- {/* silentPrint */ 566, 2, 316},
- {/* webClient */ 568, 3, 316},
- {/* layoutPseudoModel */ 571, 1, 312},
- {/* producer */ 572, 2, 316},
- {/* corner */ 574, 8, 316},
- {/* msgId */ 582, 2, 316},
- {/* color */ 584, 4, 316},
- {/* keep */ 588, 5, 316},
- {/* query */ 593, 3, 316},
- {/* insert */ 596, 2, 320},
- {/* imageEdit */ 598, 3, 316},
- {/* validate */ 601, 7, 316},
- {/* digestMethods */ 608, 3, 316},
- {/* numberPatterns */ 611, 0, 316},
- {/* pageSet */ 611, 4, 317},
- {/* integer */ 615, 4, 318},
- {/* soapAddress */ 619, 2, 320},
- {/* equate */ 621, 5, 316},
- {/* formFieldFilling */ 626, 2, 316},
- {/* pageRange */ 628, 2, 316},
- {/* update */ 630, 2, 320},
- {/* connectString */ 632, 2, 320},
- {/* mode */ 634, 4, 316},
- {/* layout */ 638, 2, 316},
- {/* #xml */ 640, 1, 316},
- {/* xsdConnection */ 641, 1, 316},
- {/* traverse */ 642, 4, 316},
- {/* encodings */ 646, 3, 316},
- {/* template */ 649, 2, 319},
- {/* acrobat */ 651, 2, 316},
- {/* validationMessaging */ 653, 2, 316},
- {/* signing */ 655, 3, 316},
- {/* dataWindow */ 658, 4, 312},
- {/* script */ 662, 10, 316},
- {/* addViewerPreferences */ 672, 2, 316},
- {/* alwaysEmbed */ 674, 4, 316},
- {/* passwordEdit */ 678, 4, 316},
- {/* numericEdit */ 682, 3, 316},
- {/* encryptionMethod */ 685, 2, 316},
- {/* change */ 687, 2, 316},
- {/* pageArea */ 689, 8, 317},
- {/* submitUrl */ 697, 3, 316},
- {/* oids */ 700, 3, 316},
- {/* signature */ 703, 2, 316},
- {/* ADBE_JSConsole */ 705, 2, 316},
- {/* caption */ 707, 5, 316},
- {/* relevant */ 712, 4, 316},
- {/* flipLabel */ 716, 2, 316},
- {/* exData */ 718, 8, 318},
- {/* dayNames */ 726, 1, 316},
- {/* soapAction */ 727, 2, 320},
- {/* defaultTypeface */ 729, 3, 316},
- {/* manifest */ 732, 4, 316},
- {/* overflow */ 736, 5, 316},
- {/* linear */ 741, 3, 316},
- {/* currencySymbol */ 744, 1, 316},
- {/* delete */ 745, 2, 320},
- {/* deltas */ 747, 0, 313},
- {/* digestMethod */ 747, 2, 316},
- {/* instanceManager */ 749, 3, 316},
- {/* equateRange */ 752, 5, 316},
- {/* medium */ 757, 7, 316},
- {/* textEdit */ 764, 6, 316},
- {/* templateCache */ 770, 3, 316},
- {/* compressObjectStream */ 773, 2, 316},
- {/* dataValue */ 775, 5, 316},
- {/* accessibleContent */ 780, 2, 316},
- {/* nodeList */ 782, 0, 314},
- {/* includeXDPContent */ 782, 2, 316},
- {/* xmlConnection */ 784, 1, 316},
- {/* validateApprovalSignatures */ 785, 2, 316},
- {/* signData */ 787, 5, 316},
- {/* packets */ 792, 2, 316},
- {/* datePattern */ 794, 1, 316},
- {/* duplexOption */ 795, 2, 316},
- {/* base */ 797, 2, 316},
- {/* bind */ 799, 6, 316},
- {/* compression */ 805, 2, 316},
- {/* user */ 807, 2, 320},
- {/* rectangle */ 809, 3, 316},
- {/* effectiveOutputPolicy */ 812, 4, 316},
- {/* ADBE_JSDebugger */ 816, 2, 316},
- {/* acrobat7 */ 818, 2, 316},
- {/* interactive */ 820, 2, 316},
- {/* locale */ 822, 2, 316},
- {/* currentPage */ 824, 2, 316},
- {/* data */ 826, 2, 316},
- {/* date */ 828, 4, 318},
- {/* desc */ 832, 2, 316},
- {/* encrypt */ 834, 5, 316},
- {/* draw */ 839, 20, 317},
- {/* encryption */ 859, 2, 316},
- {/* meridiemNames */ 861, 0, 316},
- {/* messaging */ 861, 2, 316},
- {/* speak */ 863, 4, 320},
- {/* dataGroup */ 867, 0, 316},
- {/* common */ 867, 2, 316},
- {/* #text */ 869, 1, 316},
- {/* paginationOverride */ 870, 2, 316},
- {/* reasons */ 872, 3, 316},
- {/* signatureProperties */ 875, 2, 316},
- {/* threshold */ 877, 2, 316},
- {/* appearanceFilter */ 879, 4, 316},
- {/* fill */ 883, 3, 316},
- {/* font */ 886, 17, 316},
- {/* form */ 903, 1, 319},
- {/* mediumInfo */ 904, 2, 316},
- {/* certificate */ 906, 2, 320},
- {/* password */ 908, 2, 320},
- {/* runScripts */ 910, 2, 316},
- {/* trace */ 912, 2, 316},
- {/* float */ 914, 4, 318},
- {/* renderPolicy */ 918, 2, 316},
- {/* logPseudoModel */ 920, 0, 312},
- {/* destination */ 920, 2, 316},
- {/* value */ 922, 4, 316},
- {/* bookend */ 926, 4, 316},
- {/* exObject */ 930, 6, 316},
- {/* openAction */ 936, 2, 316},
- {/* neverEmbed */ 938, 4, 316},
- {/* bindItems */ 942, 3, 316},
- {/* calculate */ 945, 3, 316},
- {/* print */ 948, 2, 316},
- {/* extras */ 950, 3, 316},
- {/* proto */ 953, 0, 316},
- {/* dSigData */ 953, 0, 316},
- {/* creator */ 953, 2, 316},
- {/* connect */ 955, 7, 316},
- {/* permissions */ 962, 2, 316},
- {/* connectionSet */ 964, 0, 319},
- {/* submit */ 964, 7, 316},
- {/* range */ 971, 2, 316},
- {/* linearized */ 973, 2, 316},
- {/* packet */ 975, 1, 316},
- {/* rootElement */ 976, 2, 320},
- {/* plaintextMetadata */ 978, 4, 316},
- {/* numberSymbols */ 982, 0, 316},
- {/* printHighQuality */ 982, 2, 316},
- {/* driver */ 984, 2, 316},
- {/* incrementalLoad */ 986, 4, 316},
- {/* subjectDN */ 990, 1, 316},
- {/* compressLogicalStructure */ 991, 2, 316},
- {/* incrementalMerge */ 993, 2, 316},
- {/* radial */ 995, 3, 316},
- {/* variables */ 998, 2, 317},
- {/* timePatterns */ 1000, 0, 316},
- {/* effectiveInputPolicy */ 1000, 4, 316},
- {/* nameAttr */ 1004, 4, 316},
- {/* conformance */ 1008, 2, 316},
- {/* transform */ 1010, 3, 316},
- {/* lockDocument */ 1013, 4, 316},
- {/* breakAfter */ 1017, 7, 316},
- {/* line */ 1024, 4, 316},
- {/* list */ 1028, 1, 313},
- {/* source */ 1029, 3, 316},
- {/* occur */ 1032, 5, 316},
- {/* pickTrayByPDFSize */ 1037, 2, 316},
- {/* monthNames */ 1039, 1, 316},
- {/* severity */ 1040, 4, 316},
- {/* groupParent */ 1044, 2, 316},
- {/* documentAssembly */ 1046, 2, 316},
- {/* numberSymbol */ 1048, 1, 316},
- {/* tagged */ 1049, 2, 316},
- {/* */ 1051, 5, 316},
- {/* */ 1056, 1, -1},
- {/* */ 1057, 1, 312},
- {/* */ 1058, 0, 313},
- {/* */ 1058, 8, 312},
- {/* */ 1066, 6, 315},
- {/* */ 1072, 0, 316},
- {/* */ 1072, 0, 316},
- {/* */ 1072, 2, 316},
- {/* */ 1074, 2, 316}};
+ {/* ps */ 0, 2, XFA_Element::Node},
+ {/* to */ 2, 2, XFA_Element::Node},
+ {/* ui */ 4, 2, XFA_Element::Node},
+ {/* recordSet */ 6, 8, XFA_Element::Node},
+ {/* subsetBelow */ 14, 4, XFA_Element::Node},
+ {/* subformSet */ 18, 5, XFA_Element::Placeholder2},
+ {/* adobeExtensionLevel */ 23, 2, XFA_Element::Node},
+ {/* typeface */ 25, 1, XFA_Element::Node},
+ {/* break */ 26, 12, XFA_Element::Node},
+ {/* fontInfo */ 38, 2, XFA_Element::Node},
+ {/* numberPattern */ 40, 1, XFA_Element::Node},
+ {/* dynamicRender */ 41, 3, XFA_Element::Node},
+ {/* printScaling */ 44, 2, XFA_Element::Node},
+ {/* checkButton */ 46, 6, XFA_Element::Node},
+ {/* datePatterns */ 52, 0, XFA_Element::Node},
+ {/* sourceSet */ 52, 2, XFA_Element::Model},
+ {/* amd */ 54, 2, XFA_Element::Node},
+ {/* arc */ 56, 6, XFA_Element::Node},
+ {/* day */ 62, 0, XFA_Element::Node},
+ {/* era */ 62, 0, XFA_Element::Node},
+ {/* jog */ 62, 2, XFA_Element::Node},
+ {/* log */ 64, 2, XFA_Element::Node},
+ {/* map */ 66, 6, XFA_Element::Node},
+ {/* mdp */ 72, 4, XFA_Element::Node},
+ {/* breakBefore */ 76, 7, XFA_Element::Node},
+ {/* oid */ 83, 2, XFA_Element::Placeholder4},
+ {/* pcl */ 85, 3, XFA_Element::Node},
+ {/* pdf */ 88, 3, XFA_Element::Node},
+ {/* ref */ 91, 2, XFA_Element::Placeholder4},
+ {/* uri */ 93, 6, XFA_Element::Placeholder4},
+ {/* xdc */ 99, 4, XFA_Element::Node},
+ {/* xdp */ 103, 2, XFA_Element::Node},
+ {/* xfa */ 105, 3, XFA_Element::Model},
+ {/* xsl */ 108, 4, XFA_Element::Node},
+ {/* zpl */ 112, 3, XFA_Element::Node},
+ {/* cache */ 115, 2, XFA_Element::Node},
+ {/* margin */ 117, 6, XFA_Element::Node},
+ {/* keyUsage */ 123, 12, XFA_Element::Node},
+ {/* exclude */ 135, 2, XFA_Element::Node},
+ {/* choiceList */ 137, 5, XFA_Element::Node},
+ {/* level */ 142, 2, XFA_Element::Node},
+ {/* labelPrinter */ 144, 3, XFA_Element::Node},
+ {/* calendarSymbols */ 147, 1, XFA_Element::Node},
+ {/* para */ 148, 14, XFA_Element::Node},
+ {/* part */ 162, 2, XFA_Element::Node},
+ {/* pdfa */ 164, 2, XFA_Element::Node},
+ {/* filter */ 166, 3, XFA_Element::Node},
+ {/* present */ 169, 2, XFA_Element::Node},
+ {/* pagination */ 171, 2, XFA_Element::Node},
+ {/* encoding */ 173, 2, XFA_Element::Node},
+ {/* event */ 175, 4, XFA_Element::Node},
+ {/* whitespace */ 179, 2, XFA_Element::Node},
+ {/* defaultUi */ 181, 2, XFA_Element::Node},
+ {/* dataModel */ 183, 0, XFA_Element::Model},
+ {/* barcode */ 183, 20, XFA_Element::Node},
+ {/* timePattern */ 203, 1, XFA_Element::Node},
+ {/* batchOutput */ 204, 3, XFA_Element::Node},
+ {/* enforce */ 207, 2, XFA_Element::Node},
+ {/* currencySymbols */ 209, 0, XFA_Element::Node},
+ {/* addSilentPrint */ 209, 2, XFA_Element::Node},
+ {/* rename */ 211, 2, XFA_Element::Node},
+ {/* operation */ 213, 4, XFA_Element::Placeholder4},
+ {/* typefaces */ 217, 0, XFA_Element::Node},
+ {/* subjectDNs */ 217, 1, XFA_Element::Node},
+ {/* issuers */ 218, 3, XFA_Element::Node},
+ {/* signaturePseudoModel */ 221, 0, XFA_Element::Object},
+ {/* wsdlConnection */ 221, 1, XFA_Element::Node},
+ {/* debug */ 222, 2, XFA_Element::Node},
+ {/* delta */ 224, 3, XFA_Element::Unknown},
+ {/* eraNames */ 227, 0, XFA_Element::Node},
+ {/* modifyAnnots */ 227, 2, XFA_Element::Node},
+ {/* startNode */ 229, 2, XFA_Element::Node},
+ {/* button */ 231, 3, XFA_Element::Node},
+ {/* format */ 234, 2, XFA_Element::Node},
+ {/* border */ 236, 6, XFA_Element::Node},
+ {/* area */ 242, 10, XFA_Element::Placeholder2},
+ {/* hyphenation */ 252, 9, XFA_Element::Node},
+ {/* text */ 261, 5, XFA_Element::Placeholder3},
+ {/* time */ 266, 4, XFA_Element::Placeholder3},
+ {/* type */ 270, 2, XFA_Element::Node},
+ {/* overprint */ 272, 2, XFA_Element::Node},
+ {/* certificates */ 274, 5, XFA_Element::Node},
+ {/* encryptionMethods */ 279, 3, XFA_Element::Node},
+ {/* setProperty */ 282, 2, XFA_Element::Node},
+ {/* printerName */ 284, 2, XFA_Element::Node},
+ {/* startPage */ 286, 2, XFA_Element::Node},
+ {/* pageOffset */ 288, 2, XFA_Element::Node},
+ {/* dateTime */ 290, 4, XFA_Element::Node},
+ {/* comb */ 294, 3, XFA_Element::Node},
+ {/* pattern */ 297, 3, XFA_Element::Node},
+ {/* ifEmpty */ 300, 2, XFA_Element::Node},
+ {/* suppressBanner */ 302, 2, XFA_Element::Node},
+ {/* outputBin */ 304, 2, XFA_Element::Node},
+ {/* field */ 306, 36, XFA_Element::Placeholder2},
+ {/* agent */ 342, 3, XFA_Element::Node},
+ {/* outputXSL */ 345, 2, XFA_Element::Node},
+ {/* adjustData */ 347, 2, XFA_Element::Node},
+ {/* autoSave */ 349, 2, XFA_Element::Node},
+ {/* contentArea */ 351, 7, XFA_Element::Placeholder2},
+ {/* eventPseudoModel */ 358, 17, XFA_Element::Object},
+ {/* wsdlAddress */ 375, 2, XFA_Element::Placeholder4},
+ {/* solid */ 377, 2, XFA_Element::Node},
+ {/* dateTimeSymbols */ 379, 0, XFA_Element::Node},
+ {/* encryptionLevel */ 379, 2, XFA_Element::Node},
+ {/* edge */ 381, 6, XFA_Element::Node},
+ {/* stipple */ 387, 3, XFA_Element::Node},
+ {/* attributes */ 390, 2, XFA_Element::Node},
+ {/* versionControl */ 392, 4, XFA_Element::Node},
+ {/* meridiem */ 396, 0, XFA_Element::Node},
+ {/* exclGroup */ 396, 30, XFA_Element::Node},
+ {/* toolTip */ 426, 2, XFA_Element::Placeholder4},
+ {/* compress */ 428, 3, XFA_Element::Node},
+ {/* reason */ 431, 2, XFA_Element::Placeholder4},
+ {/* execute */ 433, 5, XFA_Element::Node},
+ {/* contentCopy */ 438, 2, XFA_Element::Node},
+ {/* dateTimeEdit */ 440, 3, XFA_Element::Node},
+ {/* config */ 443, 2, XFA_Element::Node},
+ {/* image */ 445, 8, XFA_Element::Node},
+ {/* #xHTML */ 453, 1, XFA_Element::Node},
+ {/* numberOfCopies */ 454, 2, XFA_Element::Node},
+ {/* behaviorOverride */ 456, 2, XFA_Element::Node},
+ {/* timeStamp */ 458, 4, XFA_Element::Node},
+ {/* month */ 462, 0, XFA_Element::Node},
+ {/* viewerPreferences */ 462, 2, XFA_Element::Node},
+ {/* scriptModel */ 464, 2, XFA_Element::Node},
+ {/* decimal */ 466, 6, XFA_Element::Placeholder3},
+ {/* subform */ 472, 31, XFA_Element::Placeholder2},
+ {/* select */ 503, 2, XFA_Element::Placeholder4},
+ {/* window */ 505, 2, XFA_Element::Node},
+ {/* localeSet */ 507, 2, XFA_Element::Node},
+ {/* handler */ 509, 4, XFA_Element::Placeholder4},
+ {/* hostPseudoModel */ 513, 11, XFA_Element::Object},
+ {/* presence */ 524, 2, XFA_Element::Node},
+ {/* record */ 526, 2, XFA_Element::Node},
+ {/* embed */ 528, 2, XFA_Element::Node},
+ {/* version */ 530, 2, XFA_Element::Node},
+ {/* command */ 532, 3, XFA_Element::Node},
+ {/* copies */ 535, 2, XFA_Element::Node},
+ {/* staple */ 537, 3, XFA_Element::Node},
+ {/* submitFormat */ 540, 3, XFA_Element::Node},
+ {/* boolean */ 543, 4, XFA_Element::Placeholder3},
+ {/* message */ 547, 4, XFA_Element::Node},
+ {/* output */ 551, 2, XFA_Element::Node},
+ {/* psMap */ 553, 0, XFA_Element::Node},
+ {/* excludeNS */ 553, 2, XFA_Element::Node},
+ {/* assist */ 555, 3, XFA_Element::Node},
+ {/* picture */ 558, 6, XFA_Element::Node},
+ {/* traversal */ 564, 2, XFA_Element::Node},
+ {/* silentPrint */ 566, 2, XFA_Element::Node},
+ {/* webClient */ 568, 3, XFA_Element::Node},
+ {/* layoutPseudoModel */ 571, 1, XFA_Element::Object},
+ {/* producer */ 572, 2, XFA_Element::Node},
+ {/* corner */ 574, 8, XFA_Element::Node},
+ {/* msgId */ 582, 2, XFA_Element::Node},
+ {/* color */ 584, 4, XFA_Element::Node},
+ {/* keep */ 588, 5, XFA_Element::Node},
+ {/* query */ 593, 3, XFA_Element::Node},
+ {/* insert */ 596, 2, XFA_Element::Placeholder4},
+ {/* imageEdit */ 598, 3, XFA_Element::Node},
+ {/* validate */ 601, 7, XFA_Element::Node},
+ {/* digestMethods */ 608, 3, XFA_Element::Node},
+ {/* numberPatterns */ 611, 0, XFA_Element::Node},
+ {/* pageSet */ 611, 4, XFA_Element::Placeholder2},
+ {/* integer */ 615, 4, XFA_Element::Placeholder3},
+ {/* soapAddress */ 619, 2, XFA_Element::Placeholder4},
+ {/* equate */ 621, 5, XFA_Element::Node},
+ {/* formFieldFilling */ 626, 2, XFA_Element::Node},
+ {/* pageRange */ 628, 2, XFA_Element::Node},
+ {/* update */ 630, 2, XFA_Element::Placeholder4},
+ {/* connectString */ 632, 2, XFA_Element::Placeholder4},
+ {/* mode */ 634, 4, XFA_Element::Node},
+ {/* layout */ 638, 2, XFA_Element::Node},
+ {/* #xml */ 640, 1, XFA_Element::Node},
+ {/* xsdConnection */ 641, 1, XFA_Element::Node},
+ {/* traverse */ 642, 4, XFA_Element::Node},
+ {/* encodings */ 646, 3, XFA_Element::Node},
+ {/* template */ 649, 2, XFA_Element::Model},
+ {/* acrobat */ 651, 2, XFA_Element::Node},
+ {/* validationMessaging */ 653, 2, XFA_Element::Node},
+ {/* signing */ 655, 3, XFA_Element::Node},
+ {/* dataWindow */ 658, 4, XFA_Element::Object},
+ {/* script */ 662, 10, XFA_Element::Node},
+ {/* addViewerPreferences */ 672, 2, XFA_Element::Node},
+ {/* alwaysEmbed */ 674, 4, XFA_Element::Node},
+ {/* passwordEdit */ 678, 4, XFA_Element::Node},
+ {/* numericEdit */ 682, 3, XFA_Element::Node},
+ {/* encryptionMethod */ 685, 2, XFA_Element::Node},
+ {/* change */ 687, 2, XFA_Element::Node},
+ {/* pageArea */ 689, 8, XFA_Element::Placeholder2},
+ {/* submitUrl */ 697, 3, XFA_Element::Node},
+ {/* oids */ 700, 3, XFA_Element::Node},
+ {/* signature */ 703, 2, XFA_Element::Node},
+ {/* ADBE_JSConsole */ 705, 2, XFA_Element::Node},
+ {/* caption */ 707, 5, XFA_Element::Node},
+ {/* relevant */ 712, 4, XFA_Element::Node},
+ {/* flipLabel */ 716, 2, XFA_Element::Node},
+ {/* exData */ 718, 8, XFA_Element::Placeholder3},
+ {/* dayNames */ 726, 1, XFA_Element::Node},
+ {/* soapAction */ 727, 2, XFA_Element::Placeholder4},
+ {/* defaultTypeface */ 729, 3, XFA_Element::Node},
+ {/* manifest */ 732, 4, XFA_Element::Node},
+ {/* overflow */ 736, 5, XFA_Element::Node},
+ {/* linear */ 741, 3, XFA_Element::Node},
+ {/* currencySymbol */ 744, 1, XFA_Element::Node},
+ {/* delete */ 745, 2, XFA_Element::Placeholder4},
+ {/* deltas */ 747, 0, XFA_Element::ListDuplicate},
+ {/* digestMethod */ 747, 2, XFA_Element::Node},
+ {/* instanceManager */ 749, 3, XFA_Element::Node},
+ {/* equateRange */ 752, 5, XFA_Element::Node},
+ {/* medium */ 757, 7, XFA_Element::Node},
+ {/* textEdit */ 764, 6, XFA_Element::Node},
+ {/* templateCache */ 770, 3, XFA_Element::Node},
+ {/* compressObjectStream */ 773, 2, XFA_Element::Node},
+ {/* dataValue */ 775, 5, XFA_Element::Node},
+ {/* accessibleContent */ 780, 2, XFA_Element::Node},
+ {/* nodeList */ 782, 0, XFA_Element::Placeholder1},
+ {/* includeXDPContent */ 782, 2, XFA_Element::Node},
+ {/* xmlConnection */ 784, 1, XFA_Element::Node},
+ {/* validateApprovalSignatures */ 785, 2, XFA_Element::Node},
+ {/* signData */ 787, 5, XFA_Element::Node},
+ {/* packets */ 792, 2, XFA_Element::Node},
+ {/* datePattern */ 794, 1, XFA_Element::Node},
+ {/* duplexOption */ 795, 2, XFA_Element::Node},
+ {/* base */ 797, 2, XFA_Element::Node},
+ {/* bind */ 799, 6, XFA_Element::Node},
+ {/* compression */ 805, 2, XFA_Element::Node},
+ {/* user */ 807, 2, XFA_Element::Placeholder4},
+ {/* rectangle */ 809, 3, XFA_Element::Node},
+ {/* effectiveOutputPolicy */ 812, 4, XFA_Element::Node},
+ {/* ADBE_JSDebugger */ 816, 2, XFA_Element::Node},
+ {/* acrobat7 */ 818, 2, XFA_Element::Node},
+ {/* interactive */ 820, 2, XFA_Element::Node},
+ {/* locale */ 822, 2, XFA_Element::Node},
+ {/* currentPage */ 824, 2, XFA_Element::Node},
+ {/* data */ 826, 2, XFA_Element::Node},
+ {/* date */ 828, 4, XFA_Element::Placeholder3},
+ {/* desc */ 832, 2, XFA_Element::Node},
+ {/* encrypt */ 834, 5, XFA_Element::Node},
+ {/* draw */ 839, 20, XFA_Element::Placeholder2},
+ {/* encryption */ 859, 2, XFA_Element::Node},
+ {/* meridiemNames */ 861, 0, XFA_Element::Node},
+ {/* messaging */ 861, 2, XFA_Element::Node},
+ {/* speak */ 863, 4, XFA_Element::Placeholder4},
+ {/* dataGroup */ 867, 0, XFA_Element::Node},
+ {/* common */ 867, 2, XFA_Element::Node},
+ {/* #text */ 869, 1, XFA_Element::Node},
+ {/* paginationOverride */ 870, 2, XFA_Element::Node},
+ {/* reasons */ 872, 3, XFA_Element::Node},
+ {/* signatureProperties */ 875, 2, XFA_Element::Node},
+ {/* threshold */ 877, 2, XFA_Element::Node},
+ {/* appearanceFilter */ 879, 4, XFA_Element::Node},
+ {/* fill */ 883, 3, XFA_Element::Node},
+ {/* font */ 886, 17, XFA_Element::Node},
+ {/* form */ 903, 1, XFA_Element::Model},
+ {/* mediumInfo */ 904, 2, XFA_Element::Node},
+ {/* certificate */ 906, 2, XFA_Element::Placeholder4},
+ {/* password */ 908, 2, XFA_Element::Placeholder4},
+ {/* runScripts */ 910, 2, XFA_Element::Node},
+ {/* trace */ 912, 2, XFA_Element::Node},
+ {/* float */ 914, 4, XFA_Element::Placeholder3},
+ {/* renderPolicy */ 918, 2, XFA_Element::Node},
+ {/* logPseudoModel */ 920, 0, XFA_Element::Object},
+ {/* destination */ 920, 2, XFA_Element::Node},
+ {/* value */ 922, 4, XFA_Element::Node},
+ {/* bookend */ 926, 4, XFA_Element::Node},
+ {/* exObject */ 930, 6, XFA_Element::Node},
+ {/* openAction */ 936, 2, XFA_Element::Node},
+ {/* neverEmbed */ 938, 4, XFA_Element::Node},
+ {/* bindItems */ 942, 3, XFA_Element::Node},
+ {/* calculate */ 945, 3, XFA_Element::Node},
+ {/* print */ 948, 2, XFA_Element::Node},
+ {/* extras */ 950, 3, XFA_Element::Node},
+ {/* proto */ 953, 0, XFA_Element::Node},
+ {/* dSigData */ 953, 0, XFA_Element::Node},
+ {/* creator */ 953, 2, XFA_Element::Node},
+ {/* connect */ 955, 7, XFA_Element::Node},
+ {/* permissions */ 962, 2, XFA_Element::Node},
+ {/* connectionSet */ 964, 0, XFA_Element::Model},
+ {/* submit */ 964, 7, XFA_Element::Node},
+ {/* range */ 971, 2, XFA_Element::Node},
+ {/* linearized */ 973, 2, XFA_Element::Node},
+ {/* packet */ 975, 1, XFA_Element::Node},
+ {/* rootElement */ 976, 2, XFA_Element::Placeholder4},
+ {/* plaintextMetadata */ 978, 4, XFA_Element::Node},
+ {/* numberSymbols */ 982, 0, XFA_Element::Node},
+ {/* printHighQuality */ 982, 2, XFA_Element::Node},
+ {/* driver */ 984, 2, XFA_Element::Node},
+ {/* incrementalLoad */ 986, 4, XFA_Element::Node},
+ {/* subjectDN */ 990, 1, XFA_Element::Node},
+ {/* compressLogicalStructure */ 991, 2, XFA_Element::Node},
+ {/* incrementalMerge */ 993, 2, XFA_Element::Node},
+ {/* radial */ 995, 3, XFA_Element::Node},
+ {/* variables */ 998, 2, XFA_Element::Placeholder2},
+ {/* timePatterns */ 1000, 0, XFA_Element::Node},
+ {/* effectiveInputPolicy */ 1000, 4, XFA_Element::Node},
+ {/* nameAttr */ 1004, 4, XFA_Element::Node},
+ {/* conformance */ 1008, 2, XFA_Element::Node},
+ {/* transform */ 1010, 3, XFA_Element::Node},
+ {/* lockDocument */ 1013, 4, XFA_Element::Node},
+ {/* breakAfter */ 1017, 7, XFA_Element::Node},
+ {/* line */ 1024, 4, XFA_Element::Node},
+ {/* list */ 1028, 1, XFA_Element::ListDuplicate},
+ {/* source */ 1029, 3, XFA_Element::Node},
+ {/* occur */ 1032, 5, XFA_Element::Node},
+ {/* pickTrayByPDFSize */ 1037, 2, XFA_Element::Node},
+ {/* monthNames */ 1039, 1, XFA_Element::Node},
+ {/* severity */ 1040, 4, XFA_Element::Node},
+ {/* groupParent */ 1044, 2, XFA_Element::Node},
+ {/* documentAssembly */ 1046, 2, XFA_Element::Node},
+ {/* numberSymbol */ 1048, 1, XFA_Element::Node},
+ {/* tagged */ 1049, 2, XFA_Element::Node},
+ {/* items */ 1051, 5, XFA_Element::Node},
+ {/* 312=Object */ 1056, 1, XFA_Element::Unknown},
+ {/* 313=ListDuplicate */ 1057, 1, XFA_Element::Object},
+ {/* 314=Placeholder1 */ 1058, 0, XFA_Element::ListDuplicate},
+ {/* 315=Tree */ 1058, 8, XFA_Element::Object},
+ {/* 316=Node */ 1066, 6, XFA_Element::Tree},
+ {/* 317=Placeholder2 */ 1072, 0, XFA_Element::Node},
+ {/* 318=Placeholder3 */ 1072, 0, XFA_Element::Node},
+ {/* 319=Model */ 1072, 2, XFA_Element::Node},
+ {/* 320=Placeholder4 */ 1074, 2, XFA_Element::Node}};
const size_t g_szScriptIndexCount = FX_ArraySize(g_XFAScriptIndex);
+static_assert(static_cast<int>(XFA_Element::Object) == 312, "312");
+static_assert(static_cast<int>(XFA_Element::ListDuplicate) == 313, "313");
+static_assert(static_cast<int>(XFA_Element::Placeholder1) == 314, "314");
+static_assert(static_cast<int>(XFA_Element::Tree) == 315, "315");
+static_assert(static_cast<int>(XFA_Element::Node) == 316, "316");
+static_assert(static_cast<int>(XFA_Element::Placeholder2) == 317, "317");
+static_assert(static_cast<int>(XFA_Element::Placeholder3) == 318, "318");
+static_assert(static_cast<int>(XFA_Element::Model) == 319, "319");
+static_assert(static_cast<int>(XFA_Element::Placeholder4) == 320, "320");
+
#undef ATTR
#define ATTR(a, b, c, d, e) a, d, e, reinterpret_cast<XFA_ATTRIBUTE_CALLBACK>(c)
diff --git a/xfa/fxfa/parser/xfa_utils.cpp b/xfa/fxfa/parser/xfa_utils.cpp
index ffc5fba..eb830bf 100644
--- a/xfa/fxfa/parser/xfa_utils.cpp
+++ b/xfa/fxfa/parser/xfa_utils.cpp
@@ -539,24 +539,17 @@
return nullptr;
uint32_t uHash = FX_HashCode_GetW(wsAttributeName, false);
- int32_t iElementIndex = static_cast<int32_t>(eElement);
- while (iElementIndex != -1) {
- const XFA_SCRIPTHIERARCHY* scriptIndex = g_XFAScriptIndex + iElementIndex;
- size_t iCount = scriptIndex->wAttributeCount;
- if (iCount == 0) {
- iElementIndex = scriptIndex->wParentIndex;
- continue;
- }
-
+ while (eElement != XFA_Element::Unknown) {
+ const XFA_SCRIPTHIERARCHY* scriptIndex =
+ &g_XFAScriptIndex[static_cast<size_t>(eElement)];
size_t iStart = scriptIndex->wAttributeStart;
- size_t iEnd = iStart + iCount;
+ size_t iEnd = iStart + scriptIndex->wAttributeCount;
for (size_t iter = iStart; iter < iEnd; ++iter) {
- const XFA_SCRIPTATTRIBUTEINFO* pInfo = g_SomAttributeData + iter;
+ const XFA_SCRIPTATTRIBUTEINFO* pInfo = &g_SomAttributeData[iter];
if (uHash == pInfo->uHash)
return pInfo;
}
-
- iElementIndex = scriptIndex->wParentIndex;
+ eElement = scriptIndex->wParentIndex;
}
return nullptr;
}