diff --git a/BUILD.gn b/BUILD.gn
index 3b7cabb..167872a 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -1785,50 +1785,344 @@
       "xfa/fxfa/parser/cscript_logpseudomodel.h",
       "xfa/fxfa/parser/cscript_signaturepseudomodel.cpp",
       "xfa/fxfa/parser/cscript_signaturepseudomodel.h",
+      "xfa/fxfa/parser/cxfa_accessiblecontent.cpp",
+      "xfa/fxfa/parser/cxfa_accessiblecontent.h",
+      "xfa/fxfa/parser/cxfa_acrobat.cpp",
+      "xfa/fxfa/parser/cxfa_acrobat.h",
+      "xfa/fxfa/parser/cxfa_acrobat7.cpp",
+      "xfa/fxfa/parser/cxfa_acrobat7.h",
+      "xfa/fxfa/parser/cxfa_adbe_jsconsole.cpp",
+      "xfa/fxfa/parser/cxfa_adbe_jsconsole.h",
+      "xfa/fxfa/parser/cxfa_adbe_jsdebugger.cpp",
+      "xfa/fxfa/parser/cxfa_adbe_jsdebugger.h",
+      "xfa/fxfa/parser/cxfa_addsilentprint.cpp",
+      "xfa/fxfa/parser/cxfa_addsilentprint.h",
+      "xfa/fxfa/parser/cxfa_addviewerpreferences.cpp",
+      "xfa/fxfa/parser/cxfa_addviewerpreferences.h",
+      "xfa/fxfa/parser/cxfa_adjustdata.cpp",
+      "xfa/fxfa/parser/cxfa_adjustdata.h",
+      "xfa/fxfa/parser/cxfa_adobeextensionlevel.cpp",
+      "xfa/fxfa/parser/cxfa_adobeextensionlevel.h",
+      "xfa/fxfa/parser/cxfa_agent.cpp",
+      "xfa/fxfa/parser/cxfa_agent.h",
+      "xfa/fxfa/parser/cxfa_alwaysembed.cpp",
+      "xfa/fxfa/parser/cxfa_alwaysembed.h",
+      "xfa/fxfa/parser/cxfa_amd.cpp",
+      "xfa/fxfa/parser/cxfa_amd.h",
+      "xfa/fxfa/parser/cxfa_appearancefilter.cpp",
+      "xfa/fxfa/parser/cxfa_appearancefilter.h",
+      "xfa/fxfa/parser/cxfa_arc.cpp",
+      "xfa/fxfa/parser/cxfa_arc.h",
       "xfa/fxfa/parser/cxfa_arcdata.h",
+      "xfa/fxfa/parser/cxfa_area.cpp",
+      "xfa/fxfa/parser/cxfa_area.h",
       "xfa/fxfa/parser/cxfa_arraynodelist.cpp",
       "xfa/fxfa/parser/cxfa_arraynodelist.h",
+      "xfa/fxfa/parser/cxfa_assist.cpp",
+      "xfa/fxfa/parser/cxfa_assist.h",
       "xfa/fxfa/parser/cxfa_attachnodelist.cpp",
       "xfa/fxfa/parser/cxfa_attachnodelist.h",
+      "xfa/fxfa/parser/cxfa_attributes.cpp",
+      "xfa/fxfa/parser/cxfa_attributes.h",
+      "xfa/fxfa/parser/cxfa_autosave.cpp",
+      "xfa/fxfa/parser/cxfa_autosave.h",
+      "xfa/fxfa/parser/cxfa_barcode.cpp",
+      "xfa/fxfa/parser/cxfa_barcode.h",
+      "xfa/fxfa/parser/cxfa_base.cpp",
+      "xfa/fxfa/parser/cxfa_base.h",
+      "xfa/fxfa/parser/cxfa_batchoutput.cpp",
+      "xfa/fxfa/parser/cxfa_batchoutput.h",
+      "xfa/fxfa/parser/cxfa_behavioroverride.cpp",
+      "xfa/fxfa/parser/cxfa_behavioroverride.h",
+      "xfa/fxfa/parser/cxfa_bind.cpp",
+      "xfa/fxfa/parser/cxfa_bind.h",
       "xfa/fxfa/parser/cxfa_binddata.cpp",
       "xfa/fxfa/parser/cxfa_binddata.h",
+      "xfa/fxfa/parser/cxfa_binditems.cpp",
+      "xfa/fxfa/parser/cxfa_binditems.h",
       "xfa/fxfa/parser/cxfa_binditemsdata.cpp",
       "xfa/fxfa/parser/cxfa_binditemsdata.h",
+      "xfa/fxfa/parser/cxfa_bookend.cpp",
+      "xfa/fxfa/parser/cxfa_bookend.h",
+      "xfa/fxfa/parser/cxfa_boolean.cpp",
+      "xfa/fxfa/parser/cxfa_boolean.h",
+      "xfa/fxfa/parser/cxfa_border.cpp",
+      "xfa/fxfa/parser/cxfa_border.h",
       "xfa/fxfa/parser/cxfa_borderdata.h",
       "xfa/fxfa/parser/cxfa_boxdata.cpp",
       "xfa/fxfa/parser/cxfa_boxdata.h",
+      "xfa/fxfa/parser/cxfa_break.cpp",
+      "xfa/fxfa/parser/cxfa_break.h",
+      "xfa/fxfa/parser/cxfa_breakafter.cpp",
+      "xfa/fxfa/parser/cxfa_breakafter.h",
+      "xfa/fxfa/parser/cxfa_breakbefore.cpp",
+      "xfa/fxfa/parser/cxfa_breakbefore.h",
+      "xfa/fxfa/parser/cxfa_button.cpp",
+      "xfa/fxfa/parser/cxfa_button.h",
+      "xfa/fxfa/parser/cxfa_cache.cpp",
+      "xfa/fxfa/parser/cxfa_cache.h",
+      "xfa/fxfa/parser/cxfa_calculate.cpp",
+      "xfa/fxfa/parser/cxfa_calculate.h",
       "xfa/fxfa/parser/cxfa_calculatedata.cpp",
       "xfa/fxfa/parser/cxfa_calculatedata.h",
+      "xfa/fxfa/parser/cxfa_calendarsymbols.cpp",
+      "xfa/fxfa/parser/cxfa_calendarsymbols.h",
+      "xfa/fxfa/parser/cxfa_caption.cpp",
+      "xfa/fxfa/parser/cxfa_caption.h",
       "xfa/fxfa/parser/cxfa_captiondata.cpp",
       "xfa/fxfa/parser/cxfa_captiondata.h",
+      "xfa/fxfa/parser/cxfa_certificate.cpp",
+      "xfa/fxfa/parser/cxfa_certificate.h",
+      "xfa/fxfa/parser/cxfa_certificates.cpp",
+      "xfa/fxfa/parser/cxfa_certificates.h",
+      "xfa/fxfa/parser/cxfa_change.cpp",
+      "xfa/fxfa/parser/cxfa_change.h",
+      "xfa/fxfa/parser/cxfa_checkbutton.cpp",
+      "xfa/fxfa/parser/cxfa_checkbutton.h",
+      "xfa/fxfa/parser/cxfa_choicelist.cpp",
+      "xfa/fxfa/parser/cxfa_choicelist.h",
+      "xfa/fxfa/parser/cxfa_color.cpp",
+      "xfa/fxfa/parser/cxfa_color.h",
+      "xfa/fxfa/parser/cxfa_comb.cpp",
+      "xfa/fxfa/parser/cxfa_comb.h",
+      "xfa/fxfa/parser/cxfa_command.cpp",
+      "xfa/fxfa/parser/cxfa_command.h",
+      "xfa/fxfa/parser/cxfa_common.cpp",
+      "xfa/fxfa/parser/cxfa_common.h",
+      "xfa/fxfa/parser/cxfa_compress.cpp",
+      "xfa/fxfa/parser/cxfa_compress.h",
+      "xfa/fxfa/parser/cxfa_compression.cpp",
+      "xfa/fxfa/parser/cxfa_compression.h",
+      "xfa/fxfa/parser/cxfa_compresslogicalstructure.cpp",
+      "xfa/fxfa/parser/cxfa_compresslogicalstructure.h",
+      "xfa/fxfa/parser/cxfa_compressobjectstream.cpp",
+      "xfa/fxfa/parser/cxfa_compressobjectstream.h",
+      "xfa/fxfa/parser/cxfa_config.cpp",
+      "xfa/fxfa/parser/cxfa_config.h",
+      "xfa/fxfa/parser/cxfa_conformance.cpp",
+      "xfa/fxfa/parser/cxfa_conformance.h",
+      "xfa/fxfa/parser/cxfa_connect.cpp",
+      "xfa/fxfa/parser/cxfa_connect.h",
+      "xfa/fxfa/parser/cxfa_connectionset.cpp",
+      "xfa/fxfa/parser/cxfa_connectionset.h",
+      "xfa/fxfa/parser/cxfa_connectstring.cpp",
+      "xfa/fxfa/parser/cxfa_connectstring.h",
       "xfa/fxfa/parser/cxfa_containerlayoutitem.cpp",
       "xfa/fxfa/parser/cxfa_containerlayoutitem.h",
+      "xfa/fxfa/parser/cxfa_contentarea.cpp",
+      "xfa/fxfa/parser/cxfa_contentarea.h",
+      "xfa/fxfa/parser/cxfa_contentcopy.cpp",
+      "xfa/fxfa/parser/cxfa_contentcopy.h",
       "xfa/fxfa/parser/cxfa_contentlayoutitem.cpp",
       "xfa/fxfa/parser/cxfa_contentlayoutitem.h",
+      "xfa/fxfa/parser/cxfa_copies.cpp",
+      "xfa/fxfa/parser/cxfa_copies.h",
+      "xfa/fxfa/parser/cxfa_corner.cpp",
+      "xfa/fxfa/parser/cxfa_corner.h",
       "xfa/fxfa/parser/cxfa_cornerdata.h",
+      "xfa/fxfa/parser/cxfa_creator.cpp",
+      "xfa/fxfa/parser/cxfa_creator.h",
+      "xfa/fxfa/parser/cxfa_currencysymbol.cpp",
+      "xfa/fxfa/parser/cxfa_currencysymbol.h",
+      "xfa/fxfa/parser/cxfa_currencysymbols.cpp",
+      "xfa/fxfa/parser/cxfa_currencysymbols.h",
+      "xfa/fxfa/parser/cxfa_currentpage.cpp",
+      "xfa/fxfa/parser/cxfa_currentpage.h",
+      "xfa/fxfa/parser/cxfa_data.cpp",
+      "xfa/fxfa/parser/cxfa_data.h",
       "xfa/fxfa/parser/cxfa_datadata.cpp",
       "xfa/fxfa/parser/cxfa_datadata.h",
       "xfa/fxfa/parser/cxfa_dataexporter.cpp",
       "xfa/fxfa/parser/cxfa_dataexporter.h",
+      "xfa/fxfa/parser/cxfa_datagroup.cpp",
+      "xfa/fxfa/parser/cxfa_datagroup.h",
       "xfa/fxfa/parser/cxfa_dataimporter.cpp",
       "xfa/fxfa/parser/cxfa_dataimporter.h",
+      "xfa/fxfa/parser/cxfa_datamodel.cpp",
+      "xfa/fxfa/parser/cxfa_datamodel.h",
+      "xfa/fxfa/parser/cxfa_datavalue.cpp",
+      "xfa/fxfa/parser/cxfa_datavalue.h",
+      "xfa/fxfa/parser/cxfa_datawindow.cpp",
+      "xfa/fxfa/parser/cxfa_datawindow.h",
+      "xfa/fxfa/parser/cxfa_date.cpp",
+      "xfa/fxfa/parser/cxfa_date.h",
+      "xfa/fxfa/parser/cxfa_datepattern.cpp",
+      "xfa/fxfa/parser/cxfa_datepattern.h",
+      "xfa/fxfa/parser/cxfa_datepatterns.cpp",
+      "xfa/fxfa/parser/cxfa_datepatterns.h",
+      "xfa/fxfa/parser/cxfa_datetime.cpp",
+      "xfa/fxfa/parser/cxfa_datetime.h",
+      "xfa/fxfa/parser/cxfa_datetimeedit.cpp",
+      "xfa/fxfa/parser/cxfa_datetimeedit.h",
+      "xfa/fxfa/parser/cxfa_datetimesymbols.cpp",
+      "xfa/fxfa/parser/cxfa_datetimesymbols.h",
+      "xfa/fxfa/parser/cxfa_day.cpp",
+      "xfa/fxfa/parser/cxfa_day.h",
+      "xfa/fxfa/parser/cxfa_daynames.cpp",
+      "xfa/fxfa/parser/cxfa_daynames.h",
+      "xfa/fxfa/parser/cxfa_debug.cpp",
+      "xfa/fxfa/parser/cxfa_debug.h",
+      "xfa/fxfa/parser/cxfa_decimal.cpp",
+      "xfa/fxfa/parser/cxfa_decimal.h",
+      "xfa/fxfa/parser/cxfa_defaulttypeface.cpp",
+      "xfa/fxfa/parser/cxfa_defaulttypeface.h",
+      "xfa/fxfa/parser/cxfa_defaultui.cpp",
+      "xfa/fxfa/parser/cxfa_defaultui.h",
+      "xfa/fxfa/parser/cxfa_delete.cpp",
+      "xfa/fxfa/parser/cxfa_delete.h",
+      "xfa/fxfa/parser/cxfa_delta.cpp",
+      "xfa/fxfa/parser/cxfa_delta.h",
+      "xfa/fxfa/parser/cxfa_deltas.cpp",
+      "xfa/fxfa/parser/cxfa_deltas.h",
+      "xfa/fxfa/parser/cxfa_desc.cpp",
+      "xfa/fxfa/parser/cxfa_desc.h",
+      "xfa/fxfa/parser/cxfa_destination.cpp",
+      "xfa/fxfa/parser/cxfa_destination.h",
+      "xfa/fxfa/parser/cxfa_digestmethod.cpp",
+      "xfa/fxfa/parser/cxfa_digestmethod.h",
+      "xfa/fxfa/parser/cxfa_digestmethods.cpp",
+      "xfa/fxfa/parser/cxfa_digestmethods.h",
       "xfa/fxfa/parser/cxfa_document.cpp",
       "xfa/fxfa/parser/cxfa_document.h",
       "xfa/fxfa/parser/cxfa_document_parser.cpp",
       "xfa/fxfa/parser/cxfa_document_parser.h",
+      "xfa/fxfa/parser/cxfa_documentassembly.cpp",
+      "xfa/fxfa/parser/cxfa_documentassembly.h",
+      "xfa/fxfa/parser/cxfa_draw.cpp",
+      "xfa/fxfa/parser/cxfa_draw.h",
+      "xfa/fxfa/parser/cxfa_driver.cpp",
+      "xfa/fxfa/parser/cxfa_driver.h",
+      "xfa/fxfa/parser/cxfa_dsigdata.cpp",
+      "xfa/fxfa/parser/cxfa_dsigdata.h",
+      "xfa/fxfa/parser/cxfa_duplexoption.cpp",
+      "xfa/fxfa/parser/cxfa_duplexoption.h",
+      "xfa/fxfa/parser/cxfa_dynamicrender.cpp",
+      "xfa/fxfa/parser/cxfa_dynamicrender.h",
+      "xfa/fxfa/parser/cxfa_edge.cpp",
+      "xfa/fxfa/parser/cxfa_edge.h",
       "xfa/fxfa/parser/cxfa_edgedata.h",
+      "xfa/fxfa/parser/cxfa_effectiveinputpolicy.cpp",
+      "xfa/fxfa/parser/cxfa_effectiveinputpolicy.h",
+      "xfa/fxfa/parser/cxfa_effectiveoutputpolicy.cpp",
+      "xfa/fxfa/parser/cxfa_effectiveoutputpolicy.h",
+      "xfa/fxfa/parser/cxfa_embed.cpp",
+      "xfa/fxfa/parser/cxfa_embed.h",
+      "xfa/fxfa/parser/cxfa_encoding.cpp",
+      "xfa/fxfa/parser/cxfa_encoding.h",
+      "xfa/fxfa/parser/cxfa_encodings.cpp",
+      "xfa/fxfa/parser/cxfa_encodings.h",
+      "xfa/fxfa/parser/cxfa_encrypt.cpp",
+      "xfa/fxfa/parser/cxfa_encrypt.h",
+      "xfa/fxfa/parser/cxfa_encryption.cpp",
+      "xfa/fxfa/parser/cxfa_encryption.h",
+      "xfa/fxfa/parser/cxfa_encryptionlevel.cpp",
+      "xfa/fxfa/parser/cxfa_encryptionlevel.h",
+      "xfa/fxfa/parser/cxfa_encryptionmethod.cpp",
+      "xfa/fxfa/parser/cxfa_encryptionmethod.h",
+      "xfa/fxfa/parser/cxfa_encryptionmethods.cpp",
+      "xfa/fxfa/parser/cxfa_encryptionmethods.h",
+      "xfa/fxfa/parser/cxfa_enforce.cpp",
+      "xfa/fxfa/parser/cxfa_enforce.h",
+      "xfa/fxfa/parser/cxfa_equate.cpp",
+      "xfa/fxfa/parser/cxfa_equate.h",
+      "xfa/fxfa/parser/cxfa_equaterange.cpp",
+      "xfa/fxfa/parser/cxfa_equaterange.h",
+      "xfa/fxfa/parser/cxfa_era.cpp",
+      "xfa/fxfa/parser/cxfa_era.h",
+      "xfa/fxfa/parser/cxfa_eranames.cpp",
+      "xfa/fxfa/parser/cxfa_eranames.h",
+      "xfa/fxfa/parser/cxfa_event.cpp",
+      "xfa/fxfa/parser/cxfa_event.h",
       "xfa/fxfa/parser/cxfa_eventdata.cpp",
       "xfa/fxfa/parser/cxfa_eventdata.h",
+      "xfa/fxfa/parser/cxfa_eventpseudomodel.cpp",
+      "xfa/fxfa/parser/cxfa_eventpseudomodel.h",
+      "xfa/fxfa/parser/cxfa_exclgroup.cpp",
+      "xfa/fxfa/parser/cxfa_exclgroup.h",
+      "xfa/fxfa/parser/cxfa_exclude.cpp",
+      "xfa/fxfa/parser/cxfa_exclude.h",
+      "xfa/fxfa/parser/cxfa_excludens.cpp",
+      "xfa/fxfa/parser/cxfa_excludens.h",
+      "xfa/fxfa/parser/cxfa_exdata.cpp",
+      "xfa/fxfa/parser/cxfa_exdata.h",
       "xfa/fxfa/parser/cxfa_exdatadata.cpp",
       "xfa/fxfa/parser/cxfa_exdatadata.h",
+      "xfa/fxfa/parser/cxfa_execute.cpp",
+      "xfa/fxfa/parser/cxfa_execute.h",
+      "xfa/fxfa/parser/cxfa_exobject.cpp",
+      "xfa/fxfa/parser/cxfa_exobject.h",
+      "xfa/fxfa/parser/cxfa_extras.cpp",
+      "xfa/fxfa/parser/cxfa_extras.h",
+      "xfa/fxfa/parser/cxfa_field.cpp",
+      "xfa/fxfa/parser/cxfa_field.h",
+      "xfa/fxfa/parser/cxfa_fill.cpp",
+      "xfa/fxfa/parser/cxfa_fill.h",
       "xfa/fxfa/parser/cxfa_filldata.cpp",
       "xfa/fxfa/parser/cxfa_filldata.h",
+      "xfa/fxfa/parser/cxfa_filter.cpp",
+      "xfa/fxfa/parser/cxfa_filter.h",
+      "xfa/fxfa/parser/cxfa_fliplabel.cpp",
+      "xfa/fxfa/parser/cxfa_fliplabel.h",
+      "xfa/fxfa/parser/cxfa_float.cpp",
+      "xfa/fxfa/parser/cxfa_float.h",
+      "xfa/fxfa/parser/cxfa_font.cpp",
+      "xfa/fxfa/parser/cxfa_font.h",
       "xfa/fxfa/parser/cxfa_fontdata.cpp",
       "xfa/fxfa/parser/cxfa_fontdata.h",
+      "xfa/fxfa/parser/cxfa_fontinfo.cpp",
+      "xfa/fxfa/parser/cxfa_fontinfo.h",
+      "xfa/fxfa/parser/cxfa_form.cpp",
+      "xfa/fxfa/parser/cxfa_form.h",
+      "xfa/fxfa/parser/cxfa_format.cpp",
+      "xfa/fxfa/parser/cxfa_format.h",
+      "xfa/fxfa/parser/cxfa_formfieldfilling.cpp",
+      "xfa/fxfa/parser/cxfa_formfieldfilling.h",
+      "xfa/fxfa/parser/cxfa_groupparent.cpp",
+      "xfa/fxfa/parser/cxfa_groupparent.h",
+      "xfa/fxfa/parser/cxfa_handler.cpp",
+      "xfa/fxfa/parser/cxfa_handler.h",
+      "xfa/fxfa/parser/cxfa_hostpseudomodel.cpp",
+      "xfa/fxfa/parser/cxfa_hostpseudomodel.h",
+      "xfa/fxfa/parser/cxfa_hyphenation.cpp",
+      "xfa/fxfa/parser/cxfa_hyphenation.h",
+      "xfa/fxfa/parser/cxfa_ifempty.cpp",
+      "xfa/fxfa/parser/cxfa_ifempty.h",
+      "xfa/fxfa/parser/cxfa_image.cpp",
+      "xfa/fxfa/parser/cxfa_image.h",
       "xfa/fxfa/parser/cxfa_imagedata.cpp",
       "xfa/fxfa/parser/cxfa_imagedata.h",
+      "xfa/fxfa/parser/cxfa_imageedit.cpp",
+      "xfa/fxfa/parser/cxfa_imageedit.h",
+      "xfa/fxfa/parser/cxfa_includexdpcontent.cpp",
+      "xfa/fxfa/parser/cxfa_includexdpcontent.h",
+      "xfa/fxfa/parser/cxfa_incrementalload.cpp",
+      "xfa/fxfa/parser/cxfa_incrementalload.h",
+      "xfa/fxfa/parser/cxfa_incrementalmerge.cpp",
+      "xfa/fxfa/parser/cxfa_incrementalmerge.h",
+      "xfa/fxfa/parser/cxfa_insert.cpp",
+      "xfa/fxfa/parser/cxfa_insert.h",
+      "xfa/fxfa/parser/cxfa_instancemanager.cpp",
+      "xfa/fxfa/parser/cxfa_instancemanager.h",
+      "xfa/fxfa/parser/cxfa_integer.cpp",
+      "xfa/fxfa/parser/cxfa_integer.h",
+      "xfa/fxfa/parser/cxfa_interactive.cpp",
+      "xfa/fxfa/parser/cxfa_interactive.h",
+      "xfa/fxfa/parser/cxfa_issuers.cpp",
+      "xfa/fxfa/parser/cxfa_issuers.h",
       "xfa/fxfa/parser/cxfa_itemlayoutprocessor.cpp",
       "xfa/fxfa/parser/cxfa_itemlayoutprocessor.h",
+      "xfa/fxfa/parser/cxfa_items.cpp",
+      "xfa/fxfa/parser/cxfa_items.h",
+      "xfa/fxfa/parser/cxfa_jog.cpp",
+      "xfa/fxfa/parser/cxfa_jog.h",
+      "xfa/fxfa/parser/cxfa_keep.cpp",
+      "xfa/fxfa/parser/cxfa_keep.h",
+      "xfa/fxfa/parser/cxfa_keyusage.cpp",
+      "xfa/fxfa/parser/cxfa_keyusage.h",
+      "xfa/fxfa/parser/cxfa_labelprinter.cpp",
+      "xfa/fxfa/parser/cxfa_labelprinter.h",
+      "xfa/fxfa/parser/cxfa_layout.cpp",
+      "xfa/fxfa/parser/cxfa_layout.h",
       "xfa/fxfa/parser/cxfa_layoutcontext.h",
       "xfa/fxfa/parser/cxfa_layoutitem.cpp",
       "xfa/fxfa/parser/cxfa_layoutitem.h",
@@ -1836,18 +2130,75 @@
       "xfa/fxfa/parser/cxfa_layoutpagemgr.h",
       "xfa/fxfa/parser/cxfa_layoutprocessor.cpp",
       "xfa/fxfa/parser/cxfa_layoutprocessor.h",
+      "xfa/fxfa/parser/cxfa_layoutpseudomodel.cpp",
+      "xfa/fxfa/parser/cxfa_layoutpseudomodel.h",
+      "xfa/fxfa/parser/cxfa_level.cpp",
+      "xfa/fxfa/parser/cxfa_level.h",
+      "xfa/fxfa/parser/cxfa_line.cpp",
+      "xfa/fxfa/parser/cxfa_line.h",
+      "xfa/fxfa/parser/cxfa_linear.cpp",
+      "xfa/fxfa/parser/cxfa_linear.h",
+      "xfa/fxfa/parser/cxfa_linearized.cpp",
+      "xfa/fxfa/parser/cxfa_linearized.h",
       "xfa/fxfa/parser/cxfa_linedata.cpp",
       "xfa/fxfa/parser/cxfa_linedata.h",
+      "xfa/fxfa/parser/cxfa_list.cpp",
+      "xfa/fxfa/parser/cxfa_list.h",
+      "xfa/fxfa/parser/cxfa_locale.cpp",
+      "xfa/fxfa/parser/cxfa_locale.h",
       "xfa/fxfa/parser/cxfa_localemgr.cpp",
       "xfa/fxfa/parser/cxfa_localemgr.h",
+      "xfa/fxfa/parser/cxfa_localeset.cpp",
+      "xfa/fxfa/parser/cxfa_localeset.h",
       "xfa/fxfa/parser/cxfa_localevalue.cpp",
       "xfa/fxfa/parser/cxfa_localevalue.h",
+      "xfa/fxfa/parser/cxfa_lockdocument.cpp",
+      "xfa/fxfa/parser/cxfa_lockdocument.h",
+      "xfa/fxfa/parser/cxfa_log.cpp",
+      "xfa/fxfa/parser/cxfa_log.h",
+      "xfa/fxfa/parser/cxfa_logpseudomodel.cpp",
+      "xfa/fxfa/parser/cxfa_logpseudomodel.h",
+      "xfa/fxfa/parser/cxfa_manifest.cpp",
+      "xfa/fxfa/parser/cxfa_manifest.h",
+      "xfa/fxfa/parser/cxfa_map.cpp",
+      "xfa/fxfa/parser/cxfa_map.h",
+      "xfa/fxfa/parser/cxfa_margin.cpp",
+      "xfa/fxfa/parser/cxfa_margin.h",
       "xfa/fxfa/parser/cxfa_margindata.cpp",
       "xfa/fxfa/parser/cxfa_margindata.h",
+      "xfa/fxfa/parser/cxfa_mdp.cpp",
+      "xfa/fxfa/parser/cxfa_mdp.h",
       "xfa/fxfa/parser/cxfa_measurement.cpp",
       "xfa/fxfa/parser/cxfa_measurement.h",
+      "xfa/fxfa/parser/cxfa_medium.cpp",
+      "xfa/fxfa/parser/cxfa_medium.h",
+      "xfa/fxfa/parser/cxfa_mediuminfo.cpp",
+      "xfa/fxfa/parser/cxfa_mediuminfo.h",
+      "xfa/fxfa/parser/cxfa_meridiem.cpp",
+      "xfa/fxfa/parser/cxfa_meridiem.h",
+      "xfa/fxfa/parser/cxfa_meridiemnames.cpp",
+      "xfa/fxfa/parser/cxfa_meridiemnames.h",
+      "xfa/fxfa/parser/cxfa_message.cpp",
+      "xfa/fxfa/parser/cxfa_message.h",
+      "xfa/fxfa/parser/cxfa_messaging.cpp",
+      "xfa/fxfa/parser/cxfa_messaging.h",
+      "xfa/fxfa/parser/cxfa_mode.cpp",
+      "xfa/fxfa/parser/cxfa_mode.h",
+      "xfa/fxfa/parser/cxfa_modifyannots.cpp",
+      "xfa/fxfa/parser/cxfa_modifyannots.h",
+      "xfa/fxfa/parser/cxfa_month.cpp",
+      "xfa/fxfa/parser/cxfa_month.h",
+      "xfa/fxfa/parser/cxfa_monthnames.cpp",
+      "xfa/fxfa/parser/cxfa_monthnames.h",
+      "xfa/fxfa/parser/cxfa_msgid.cpp",
+      "xfa/fxfa/parser/cxfa_msgid.h",
+      "xfa/fxfa/parser/cxfa_nameattr.cpp",
+      "xfa/fxfa/parser/cxfa_nameattr.h",
+      "xfa/fxfa/parser/cxfa_neverembed.cpp",
+      "xfa/fxfa/parser/cxfa_neverembed.h",
       "xfa/fxfa/parser/cxfa_node.cpp",
       "xfa/fxfa/parser/cxfa_node.h",
+      "xfa/fxfa/parser/cxfa_node_statics.cpp",
       "xfa/fxfa/parser/cxfa_nodehelper.cpp",
       "xfa/fxfa/parser/cxfa_nodehelper.h",
       "xfa/fxfa/parser/cxfa_nodeiteratortemplate.h",
@@ -1855,47 +2206,316 @@
       "xfa/fxfa/parser/cxfa_nodelist.h",
       "xfa/fxfa/parser/cxfa_nodelocale.cpp",
       "xfa/fxfa/parser/cxfa_nodelocale.h",
+      "xfa/fxfa/parser/cxfa_numberofcopies.cpp",
+      "xfa/fxfa/parser/cxfa_numberofcopies.h",
+      "xfa/fxfa/parser/cxfa_numberpattern.cpp",
+      "xfa/fxfa/parser/cxfa_numberpattern.h",
+      "xfa/fxfa/parser/cxfa_numberpatterns.cpp",
+      "xfa/fxfa/parser/cxfa_numberpatterns.h",
+      "xfa/fxfa/parser/cxfa_numbersymbol.cpp",
+      "xfa/fxfa/parser/cxfa_numbersymbol.h",
+      "xfa/fxfa/parser/cxfa_numbersymbols.cpp",
+      "xfa/fxfa/parser/cxfa_numbersymbols.h",
+      "xfa/fxfa/parser/cxfa_numericedit.cpp",
+      "xfa/fxfa/parser/cxfa_numericedit.h",
       "xfa/fxfa/parser/cxfa_object.cpp",
       "xfa/fxfa/parser/cxfa_object.h",
+      "xfa/fxfa/parser/cxfa_occur.cpp",
+      "xfa/fxfa/parser/cxfa_occur.h",
       "xfa/fxfa/parser/cxfa_occurdata.cpp",
       "xfa/fxfa/parser/cxfa_occurdata.h",
+      "xfa/fxfa/parser/cxfa_oid.cpp",
+      "xfa/fxfa/parser/cxfa_oid.h",
+      "xfa/fxfa/parser/cxfa_oids.cpp",
+      "xfa/fxfa/parser/cxfa_oids.h",
+      "xfa/fxfa/parser/cxfa_openaction.cpp",
+      "xfa/fxfa/parser/cxfa_openaction.h",
+      "xfa/fxfa/parser/cxfa_operation.cpp",
+      "xfa/fxfa/parser/cxfa_operation.h",
+      "xfa/fxfa/parser/cxfa_output.cpp",
+      "xfa/fxfa/parser/cxfa_output.h",
+      "xfa/fxfa/parser/cxfa_outputbin.cpp",
+      "xfa/fxfa/parser/cxfa_outputbin.h",
+      "xfa/fxfa/parser/cxfa_outputxsl.cpp",
+      "xfa/fxfa/parser/cxfa_outputxsl.h",
+      "xfa/fxfa/parser/cxfa_overflow.cpp",
+      "xfa/fxfa/parser/cxfa_overflow.h",
+      "xfa/fxfa/parser/cxfa_overprint.cpp",
+      "xfa/fxfa/parser/cxfa_overprint.h",
+      "xfa/fxfa/parser/cxfa_packet.cpp",
+      "xfa/fxfa/parser/cxfa_packet.h",
+      "xfa/fxfa/parser/cxfa_packets.cpp",
+      "xfa/fxfa/parser/cxfa_packets.h",
+      "xfa/fxfa/parser/cxfa_pagearea.cpp",
+      "xfa/fxfa/parser/cxfa_pagearea.h",
+      "xfa/fxfa/parser/cxfa_pageoffset.cpp",
+      "xfa/fxfa/parser/cxfa_pageoffset.h",
+      "xfa/fxfa/parser/cxfa_pagerange.cpp",
+      "xfa/fxfa/parser/cxfa_pagerange.h",
+      "xfa/fxfa/parser/cxfa_pageset.cpp",
+      "xfa/fxfa/parser/cxfa_pageset.h",
+      "xfa/fxfa/parser/cxfa_pagination.cpp",
+      "xfa/fxfa/parser/cxfa_pagination.h",
+      "xfa/fxfa/parser/cxfa_paginationoverride.cpp",
+      "xfa/fxfa/parser/cxfa_paginationoverride.h",
+      "xfa/fxfa/parser/cxfa_para.cpp",
+      "xfa/fxfa/parser/cxfa_para.h",
       "xfa/fxfa/parser/cxfa_paradata.cpp",
       "xfa/fxfa/parser/cxfa_paradata.h",
+      "xfa/fxfa/parser/cxfa_part.cpp",
+      "xfa/fxfa/parser/cxfa_part.h",
+      "xfa/fxfa/parser/cxfa_password.cpp",
+      "xfa/fxfa/parser/cxfa_password.h",
+      "xfa/fxfa/parser/cxfa_passwordedit.cpp",
+      "xfa/fxfa/parser/cxfa_passwordedit.h",
+      "xfa/fxfa/parser/cxfa_pattern.cpp",
+      "xfa/fxfa/parser/cxfa_pattern.h",
+      "xfa/fxfa/parser/cxfa_pcl.cpp",
+      "xfa/fxfa/parser/cxfa_pcl.h",
+      "xfa/fxfa/parser/cxfa_pdf.cpp",
+      "xfa/fxfa/parser/cxfa_pdf.h",
+      "xfa/fxfa/parser/cxfa_pdfa.cpp",
+      "xfa/fxfa/parser/cxfa_pdfa.h",
+      "xfa/fxfa/parser/cxfa_permissions.cpp",
+      "xfa/fxfa/parser/cxfa_permissions.h",
+      "xfa/fxfa/parser/cxfa_picktraybypdfsize.cpp",
+      "xfa/fxfa/parser/cxfa_picktraybypdfsize.h",
+      "xfa/fxfa/parser/cxfa_picture.cpp",
+      "xfa/fxfa/parser/cxfa_picture.h",
+      "xfa/fxfa/parser/cxfa_plaintextmetadata.cpp",
+      "xfa/fxfa/parser/cxfa_plaintextmetadata.h",
+      "xfa/fxfa/parser/cxfa_presence.cpp",
+      "xfa/fxfa/parser/cxfa_presence.h",
+      "xfa/fxfa/parser/cxfa_present.cpp",
+      "xfa/fxfa/parser/cxfa_present.h",
+      "xfa/fxfa/parser/cxfa_print.cpp",
+      "xfa/fxfa/parser/cxfa_print.h",
+      "xfa/fxfa/parser/cxfa_printername.cpp",
+      "xfa/fxfa/parser/cxfa_printername.h",
+      "xfa/fxfa/parser/cxfa_printhighquality.cpp",
+      "xfa/fxfa/parser/cxfa_printhighquality.h",
+      "xfa/fxfa/parser/cxfa_printscaling.cpp",
+      "xfa/fxfa/parser/cxfa_printscaling.h",
+      "xfa/fxfa/parser/cxfa_producer.cpp",
+      "xfa/fxfa/parser/cxfa_producer.h",
+      "xfa/fxfa/parser/cxfa_proto.cpp",
+      "xfa/fxfa/parser/cxfa_proto.h",
+      "xfa/fxfa/parser/cxfa_ps.cpp",
+      "xfa/fxfa/parser/cxfa_ps.h",
+      "xfa/fxfa/parser/cxfa_psmap.cpp",
+      "xfa/fxfa/parser/cxfa_psmap.h",
+      "xfa/fxfa/parser/cxfa_query.cpp",
+      "xfa/fxfa/parser/cxfa_query.h",
+      "xfa/fxfa/parser/cxfa_radial.cpp",
+      "xfa/fxfa/parser/cxfa_radial.h",
+      "xfa/fxfa/parser/cxfa_range.cpp",
+      "xfa/fxfa/parser/cxfa_range.h",
+      "xfa/fxfa/parser/cxfa_reason.cpp",
+      "xfa/fxfa/parser/cxfa_reason.h",
+      "xfa/fxfa/parser/cxfa_reasons.cpp",
+      "xfa/fxfa/parser/cxfa_reasons.h",
+      "xfa/fxfa/parser/cxfa_record.cpp",
+      "xfa/fxfa/parser/cxfa_record.h",
+      "xfa/fxfa/parser/cxfa_recordset.cpp",
+      "xfa/fxfa/parser/cxfa_recordset.h",
+      "xfa/fxfa/parser/cxfa_rectangle.cpp",
+      "xfa/fxfa/parser/cxfa_rectangle.h",
       "xfa/fxfa/parser/cxfa_rectangledata.h",
+      "xfa/fxfa/parser/cxfa_ref.cpp",
+      "xfa/fxfa/parser/cxfa_ref.h",
+      "xfa/fxfa/parser/cxfa_relevant.cpp",
+      "xfa/fxfa/parser/cxfa_relevant.h",
+      "xfa/fxfa/parser/cxfa_rename.cpp",
+      "xfa/fxfa/parser/cxfa_rename.h",
+      "xfa/fxfa/parser/cxfa_renderpolicy.cpp",
+      "xfa/fxfa/parser/cxfa_renderpolicy.h",
+      "xfa/fxfa/parser/cxfa_rootelement.cpp",
+      "xfa/fxfa/parser/cxfa_rootelement.h",
+      "xfa/fxfa/parser/cxfa_runscripts.cpp",
+      "xfa/fxfa/parser/cxfa_runscripts.h",
+      "xfa/fxfa/parser/cxfa_script.cpp",
+      "xfa/fxfa/parser/cxfa_script.h",
       "xfa/fxfa/parser/cxfa_scriptdata.cpp",
       "xfa/fxfa/parser/cxfa_scriptdata.h",
+      "xfa/fxfa/parser/cxfa_scriptmodel.cpp",
+      "xfa/fxfa/parser/cxfa_scriptmodel.h",
+      "xfa/fxfa/parser/cxfa_select.cpp",
+      "xfa/fxfa/parser/cxfa_select.h",
+      "xfa/fxfa/parser/cxfa_setproperty.cpp",
+      "xfa/fxfa/parser/cxfa_setproperty.h",
+      "xfa/fxfa/parser/cxfa_severity.cpp",
+      "xfa/fxfa/parser/cxfa_severity.h",
+      "xfa/fxfa/parser/cxfa_sharptext.cpp",
+      "xfa/fxfa/parser/cxfa_sharptext.h",
+      "xfa/fxfa/parser/cxfa_sharpxhtml.cpp",
+      "xfa/fxfa/parser/cxfa_sharpxhtml.h",
+      "xfa/fxfa/parser/cxfa_sharpxml.cpp",
+      "xfa/fxfa/parser/cxfa_sharpxml.h",
+      "xfa/fxfa/parser/cxfa_signature.cpp",
+      "xfa/fxfa/parser/cxfa_signature.h",
+      "xfa/fxfa/parser/cxfa_signatureproperties.cpp",
+      "xfa/fxfa/parser/cxfa_signatureproperties.h",
+      "xfa/fxfa/parser/cxfa_signaturepseudomodel.cpp",
+      "xfa/fxfa/parser/cxfa_signaturepseudomodel.h",
+      "xfa/fxfa/parser/cxfa_signdata.cpp",
+      "xfa/fxfa/parser/cxfa_signdata.h",
+      "xfa/fxfa/parser/cxfa_signing.cpp",
+      "xfa/fxfa/parser/cxfa_signing.h",
+      "xfa/fxfa/parser/cxfa_silentprint.cpp",
+      "xfa/fxfa/parser/cxfa_silentprint.h",
       "xfa/fxfa/parser/cxfa_simple_parser.cpp",
       "xfa/fxfa/parser/cxfa_simple_parser.h",
+      "xfa/fxfa/parser/cxfa_soapaction.cpp",
+      "xfa/fxfa/parser/cxfa_soapaction.h",
+      "xfa/fxfa/parser/cxfa_soapaddress.cpp",
+      "xfa/fxfa/parser/cxfa_soapaddress.h",
+      "xfa/fxfa/parser/cxfa_solid.cpp",
+      "xfa/fxfa/parser/cxfa_solid.h",
+      "xfa/fxfa/parser/cxfa_source.cpp",
+      "xfa/fxfa/parser/cxfa_source.h",
+      "xfa/fxfa/parser/cxfa_sourceset.cpp",
+      "xfa/fxfa/parser/cxfa_sourceset.h",
+      "xfa/fxfa/parser/cxfa_speak.cpp",
+      "xfa/fxfa/parser/cxfa_speak.h",
+      "xfa/fxfa/parser/cxfa_staple.cpp",
+      "xfa/fxfa/parser/cxfa_staple.h",
+      "xfa/fxfa/parser/cxfa_startnode.cpp",
+      "xfa/fxfa/parser/cxfa_startnode.h",
+      "xfa/fxfa/parser/cxfa_startpage.cpp",
+      "xfa/fxfa/parser/cxfa_startpage.h",
+      "xfa/fxfa/parser/cxfa_stipple.cpp",
+      "xfa/fxfa/parser/cxfa_stipple.h",
       "xfa/fxfa/parser/cxfa_strokedata.cpp",
       "xfa/fxfa/parser/cxfa_strokedata.h",
+      "xfa/fxfa/parser/cxfa_subform.cpp",
+      "xfa/fxfa/parser/cxfa_subform.h",
+      "xfa/fxfa/parser/cxfa_subformset.cpp",
+      "xfa/fxfa/parser/cxfa_subformset.h",
+      "xfa/fxfa/parser/cxfa_subjectdn.cpp",
+      "xfa/fxfa/parser/cxfa_subjectdn.h",
+      "xfa/fxfa/parser/cxfa_subjectdns.cpp",
+      "xfa/fxfa/parser/cxfa_subjectdns.h",
+      "xfa/fxfa/parser/cxfa_submit.cpp",
+      "xfa/fxfa/parser/cxfa_submit.h",
       "xfa/fxfa/parser/cxfa_submitdata.cpp",
       "xfa/fxfa/parser/cxfa_submitdata.h",
+      "xfa/fxfa/parser/cxfa_submitformat.cpp",
+      "xfa/fxfa/parser/cxfa_submitformat.h",
+      "xfa/fxfa/parser/cxfa_submiturl.cpp",
+      "xfa/fxfa/parser/cxfa_submiturl.h",
+      "xfa/fxfa/parser/cxfa_subsetbelow.cpp",
+      "xfa/fxfa/parser/cxfa_subsetbelow.h",
+      "xfa/fxfa/parser/cxfa_suppressbanner.cpp",
+      "xfa/fxfa/parser/cxfa_suppressbanner.h",
+      "xfa/fxfa/parser/cxfa_tagged.cpp",
+      "xfa/fxfa/parser/cxfa_tagged.h",
+      "xfa/fxfa/parser/cxfa_template.cpp",
+      "xfa/fxfa/parser/cxfa_template.h",
+      "xfa/fxfa/parser/cxfa_templatecache.cpp",
+      "xfa/fxfa/parser/cxfa_templatecache.h",
+      "xfa/fxfa/parser/cxfa_text.cpp",
+      "xfa/fxfa/parser/cxfa_text.h",
       "xfa/fxfa/parser/cxfa_textdata.cpp",
       "xfa/fxfa/parser/cxfa_textdata.h",
+      "xfa/fxfa/parser/cxfa_textedit.cpp",
+      "xfa/fxfa/parser/cxfa_textedit.h",
       "xfa/fxfa/parser/cxfa_thisproxy.cpp",
       "xfa/fxfa/parser/cxfa_thisproxy.h",
+      "xfa/fxfa/parser/cxfa_threshold.cpp",
+      "xfa/fxfa/parser/cxfa_threshold.h",
+      "xfa/fxfa/parser/cxfa_time.cpp",
+      "xfa/fxfa/parser/cxfa_time.h",
+      "xfa/fxfa/parser/cxfa_timepattern.cpp",
+      "xfa/fxfa/parser/cxfa_timepattern.h",
+      "xfa/fxfa/parser/cxfa_timepatterns.cpp",
+      "xfa/fxfa/parser/cxfa_timepatterns.h",
+      "xfa/fxfa/parser/cxfa_timestamp.cpp",
+      "xfa/fxfa/parser/cxfa_timestamp.h",
       "xfa/fxfa/parser/cxfa_timezoneprovider.cpp",
       "xfa/fxfa/parser/cxfa_timezoneprovider.h",
+      "xfa/fxfa/parser/cxfa_to.cpp",
+      "xfa/fxfa/parser/cxfa_to.h",
+      "xfa/fxfa/parser/cxfa_tooltip.cpp",
+      "xfa/fxfa/parser/cxfa_tooltip.h",
+      "xfa/fxfa/parser/cxfa_trace.cpp",
+      "xfa/fxfa/parser/cxfa_trace.h",
+      "xfa/fxfa/parser/cxfa_transform.cpp",
+      "xfa/fxfa/parser/cxfa_transform.h",
+      "xfa/fxfa/parser/cxfa_traversal.cpp",
+      "xfa/fxfa/parser/cxfa_traversal.h",
+      "xfa/fxfa/parser/cxfa_traverse.cpp",
+      "xfa/fxfa/parser/cxfa_traverse.h",
       "xfa/fxfa/parser/cxfa_traversestrategy_contentareacontainerlayoutitem.h",
       "xfa/fxfa/parser/cxfa_traversestrategy_contentlayoutitem.h",
       "xfa/fxfa/parser/cxfa_traversestrategy_layoutitem.h",
       "xfa/fxfa/parser/cxfa_traversestrategy_xfacontainernode.h",
       "xfa/fxfa/parser/cxfa_traversestrategy_xfanode.h",
+      "xfa/fxfa/parser/cxfa_type.cpp",
+      "xfa/fxfa/parser/cxfa_type.h",
+      "xfa/fxfa/parser/cxfa_typeface.cpp",
+      "xfa/fxfa/parser/cxfa_typeface.h",
+      "xfa/fxfa/parser/cxfa_typefaces.cpp",
+      "xfa/fxfa/parser/cxfa_typefaces.h",
+      "xfa/fxfa/parser/cxfa_ui.cpp",
+      "xfa/fxfa/parser/cxfa_ui.h",
+      "xfa/fxfa/parser/cxfa_update.cpp",
+      "xfa/fxfa/parser/cxfa_update.h",
+      "xfa/fxfa/parser/cxfa_uri.cpp",
+      "xfa/fxfa/parser/cxfa_uri.h",
+      "xfa/fxfa/parser/cxfa_user.cpp",
+      "xfa/fxfa/parser/cxfa_user.h",
+      "xfa/fxfa/parser/cxfa_validate.cpp",
+      "xfa/fxfa/parser/cxfa_validate.h",
+      "xfa/fxfa/parser/cxfa_validateapprovalsignatures.cpp",
+      "xfa/fxfa/parser/cxfa_validateapprovalsignatures.h",
       "xfa/fxfa/parser/cxfa_validatedata.cpp",
       "xfa/fxfa/parser/cxfa_validatedata.h",
+      "xfa/fxfa/parser/cxfa_validationmessaging.cpp",
+      "xfa/fxfa/parser/cxfa_validationmessaging.h",
+      "xfa/fxfa/parser/cxfa_value.cpp",
+      "xfa/fxfa/parser/cxfa_value.h",
       "xfa/fxfa/parser/cxfa_valuearray.cpp",
       "xfa/fxfa/parser/cxfa_valuearray.h",
       "xfa/fxfa/parser/cxfa_valuedata.cpp",
       "xfa/fxfa/parser/cxfa_valuedata.h",
+      "xfa/fxfa/parser/cxfa_variables.cpp",
+      "xfa/fxfa/parser/cxfa_variables.h",
+      "xfa/fxfa/parser/cxfa_version.cpp",
+      "xfa/fxfa/parser/cxfa_version.h",
+      "xfa/fxfa/parser/cxfa_versioncontrol.cpp",
+      "xfa/fxfa/parser/cxfa_versioncontrol.h",
+      "xfa/fxfa/parser/cxfa_viewerpreferences.cpp",
+      "xfa/fxfa/parser/cxfa_viewerpreferences.h",
+      "xfa/fxfa/parser/cxfa_webclient.cpp",
+      "xfa/fxfa/parser/cxfa_webclient.h",
+      "xfa/fxfa/parser/cxfa_whitespace.cpp",
+      "xfa/fxfa/parser/cxfa_whitespace.h",
       "xfa/fxfa/parser/cxfa_widgetdata.cpp",
       "xfa/fxfa/parser/cxfa_widgetdata.h",
+      "xfa/fxfa/parser/cxfa_window.cpp",
+      "xfa/fxfa/parser/cxfa_window.h",
+      "xfa/fxfa/parser/cxfa_wsdladdress.cpp",
+      "xfa/fxfa/parser/cxfa_wsdladdress.h",
+      "xfa/fxfa/parser/cxfa_wsdlconnection.cpp",
+      "xfa/fxfa/parser/cxfa_wsdlconnection.h",
+      "xfa/fxfa/parser/cxfa_xdc.cpp",
+      "xfa/fxfa/parser/cxfa_xdc.h",
+      "xfa/fxfa/parser/cxfa_xdp.cpp",
+      "xfa/fxfa/parser/cxfa_xdp.h",
+      "xfa/fxfa/parser/cxfa_xfa.cpp",
+      "xfa/fxfa/parser/cxfa_xfa.h",
+      "xfa/fxfa/parser/cxfa_xmlconnection.cpp",
+      "xfa/fxfa/parser/cxfa_xmlconnection.h",
       "xfa/fxfa/parser/cxfa_xmllocale.cpp",
       "xfa/fxfa/parser/cxfa_xmllocale.h",
-      "xfa/fxfa/parser/xfa_basic_data.cpp",
+      "xfa/fxfa/parser/cxfa_xsdconnection.cpp",
+      "xfa/fxfa/parser/cxfa_xsdconnection.h",
+      "xfa/fxfa/parser/cxfa_xsl.cpp",
+      "xfa/fxfa/parser/cxfa_xsl.h",
+      "xfa/fxfa/parser/cxfa_zpl.cpp",
+      "xfa/fxfa/parser/cxfa_zpl.h",
       "xfa/fxfa/parser/xfa_basic_data.h",
       "xfa/fxfa/parser/xfa_basic_data_attributes.cpp",
-      "xfa/fxfa/parser/xfa_basic_data_element_attributes.cpp",
-      "xfa/fxfa/parser/xfa_basic_data_element_properties.cpp",
       "xfa/fxfa/parser/xfa_basic_data_element_script.cpp",
       "xfa/fxfa/parser/xfa_basic_data_enum.cpp",
       "xfa/fxfa/parser/xfa_basic_data_packets.cpp",
diff --git a/fxjs/cfxjse_engine.cpp b/fxjs/cfxjse_engine.cpp
index c2dba2f..9eeb9bd 100644
--- a/fxjs/cfxjse_engine.cpp
+++ b/fxjs/cfxjse_engine.cpp
@@ -365,7 +365,7 @@
 
     CXFA_Node* pNode = ToNode(pObject);
     CXFA_Node* pPropOrChild = nullptr;
-    XFA_Element eType = XFA_GetElementTypeForName(wsPropName.AsStringView());
+    XFA_Element eType = CXFA_Node::NameToElement(wsPropName);
     if (eType != XFA_Element::Unknown)
       pPropOrChild = pNode->JSNode()->GetProperty(0, eType, true);
     else
diff --git a/fxjs/cfxjse_resolveprocessor.cpp b/fxjs/cfxjse_resolveprocessor.cpp
index 3a6bc91..ef0fcbf 100644
--- a/fxjs/cfxjse_resolveprocessor.cpp
+++ b/fxjs/cfxjse_resolveprocessor.cpp
@@ -242,10 +242,7 @@
       pPageSetNode = pChild;
       continue;
     }
-    const XFA_PROPERTY* pProperty = XFA_GetPropertyOfElement(
-        curNode->GetElementType(), pChild->GetElementType(),
-        XFA_XDPPACKET_UNKNOWN);
-    if (pProperty)
+    if (curNode->HasProperty(pChild->GetElementType()))
       properties.push_back(pChild);
     else
       children.push_back(pChild);
@@ -348,7 +345,7 @@
                                                         true);
       }
     } else {
-      XFA_Element eType = XFA_GetElementTypeForName(wsName.AsStringView());
+      XFA_Element eType = CXFA_Node::NameToElement(wsName);
       if (eType != XFA_Element::Unknown) {
         pProp = curNode->AsNode()->JSNode()->GetProperty(
             0, eType, eType != XFA_Element::PageSet);
@@ -405,11 +402,9 @@
       } else if (child->GetNameHash() == uNameHash) {
         rnd.m_Objects.push_back(child);
       }
-      const XFA_PROPERTY* pPropert = XFA_GetPropertyOfElement(
-          parentNode->GetElementType(), child->GetElementType(),
-          XFA_XDPPACKET_UNKNOWN);
+
       bool bInnerSearch = false;
-      if (pPropert) {
+      if (parentNode->HasProperty(child->GetElementType())) {
         if ((child->GetElementType() == XFA_Element::Variables ||
              child->GetElementType() == XFA_Element::PageSet)) {
           bInnerSearch = true;
diff --git a/fxjs/cjx_node.cpp b/fxjs/cjx_node.cpp
index 2d96cbb..5e00d52 100644
--- a/fxjs/cjx_node.cpp
+++ b/fxjs/cjx_node.cpp
@@ -92,24 +92,6 @@
                             XFA_KEYTYPE_Element);
 }
 
-const XFA_ATTRIBUTEINFO* GetAttributeOfElement(XFA_Element eElement,
-                                               XFA_Attribute eAttribute,
-                                               uint32_t dwPacket) {
-  int32_t iCount = 0;
-  const XFA_Attribute* pAttr = XFA_GetElementAttributes(eElement, iCount);
-  if (!pAttr || iCount < 1)
-    return nullptr;
-
-  if (!std::binary_search(pAttr, pAttr + iCount, eAttribute))
-    return nullptr;
-
-  const XFA_ATTRIBUTEINFO* pInfo = XFA_GetAttributeByID(eAttribute);
-  ASSERT(pInfo);
-  if (dwPacket == XFA_XDPPACKET_UNKNOWN)
-    return pInfo;
-  return (dwPacket & pInfo->dwPackets) ? pInfo : nullptr;
-}
-
 struct XFA_ExecEventParaInfo {
  public:
   uint32_t m_uHash;
@@ -685,8 +667,8 @@
       WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringView());
   int32_t iValue = iLength >= 2 ? pArguments->GetInt32(1) : 0;
 
-  CXFA_Node* pNode = GetProperty(
-      iValue, XFA_GetElementTypeForName(wsExpression.AsStringView()), true);
+  CXFA_Node* pNode =
+      GetProperty(iValue, CXFA_Node::NameToElement(wsExpression), true);
   pArguments->GetReturnValue()->Assign(
       GetDocument()->GetScriptContext()->GetJSValueFromMap(pNode));
 }
@@ -714,7 +696,7 @@
 
   bool bParent = iLength < 2 || pArguments->GetInt32(1);
   int32_t iIndex = iLength == 3 ? pArguments->GetInt32(2) : 0;
-  XFA_Element eType = XFA_GetElementTypeForName(wsExpression.AsStringView());
+  XFA_Element eType = CXFA_Node::NameToElement(wsExpression);
   bool bHas = !!GetProperty(iIndex, eType, true);
   if (!bHas && bParent && GetXFANode()->GetParent()) {
     // Also check on the parent.
@@ -2382,7 +2364,7 @@
 
   ByteString bsTagName = pArguments->GetUTF8String(0);
   WideString strTagName = WideString::FromUTF8(bsTagName.AsStringView());
-  XFA_Element eType = XFA_GetElementTypeForName(strTagName.AsStringView());
+  XFA_Element eType = CXFA_Node::NameToElement(strTagName);
   CXFA_Node* pNewNode = GetXFANode()->CreateSamePacketNode(eType);
   if (!pNewNode) {
     pArguments->GetReturnValue()->SetNull();
@@ -2395,8 +2377,7 @@
     return;
   }
 
-  if (!GetAttributeOfElement(eType, XFA_Attribute::Name,
-                             XFA_XDPPACKET_UNKNOWN)) {
+  if (!pNewNode->HasAttribute(XFA_Attribute::Name)) {
     ThrowMissingPropertyException(strTagName, L"name");
     return;
   }
@@ -3580,11 +3561,8 @@
 CXFA_Node* CJX_Node::GetProperty(int32_t index,
                                  XFA_Element eProperty,
                                  bool bCreateProperty) {
-  XFA_Element eType = GetXFANode()->GetElementType();
   uint32_t dwPacket = GetXFANode()->GetPacketID();
-  const XFA_PROPERTY* pProperty =
-      XFA_GetPropertyOfElement(eType, eProperty, dwPacket);
-  if (!pProperty || index >= pProperty->uOccur)
+  if (index < 0 || index >= GetXFANode()->PropertyOccuranceCount(eProperty))
     return nullptr;
 
   CXFA_Node* pNode = GetXFANode()->GetChildNode();
@@ -3599,13 +3577,13 @@
   if (!bCreateProperty)
     return nullptr;
 
-  if (pProperty->uFlags & XFA_PROPERTYFLAG_OneOf) {
+  if (GetXFANode()->HasPropertyFlags(eProperty, XFA_PROPERTYFLAG_OneOf)) {
     pNode = GetXFANode()->GetChildNode();
     for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) {
-      const XFA_PROPERTY* pExistProperty =
-          XFA_GetPropertyOfElement(eType, pNode->GetElementType(), dwPacket);
-      if (pExistProperty && (pExistProperty->uFlags & XFA_PROPERTYFLAG_OneOf))
+      if (GetXFANode()->HasPropertyFlags(pNode->GetElementType(),
+                                         XFA_PROPERTYFLAG_OneOf)) {
         return nullptr;
+      }
     }
   }
 
diff --git a/xfa/fxfa/fxfa_basic.h b/xfa/fxfa/fxfa_basic.h
index 5f13699..e2d4056 100644
--- a/xfa/fxfa/fxfa_basic.h
+++ b/xfa/fxfa/fxfa_basic.h
@@ -939,14 +939,6 @@
   Items
 };
 
-struct XFA_ELEMENTINFO {
-  uint32_t uHash;
-  const wchar_t* pName;
-  XFA_Element eName;
-  uint32_t dwPackets;
-  XFA_ObjectType eObjectType;
-};
-
 enum class XFA_AttributeType : uint8_t {
   NotSure,
   Enum,
@@ -965,11 +957,6 @@
   void* pDefValue;
 };
 
-struct XFA_ELEMENTHIERARCHY {
-  uint16_t wStart;
-  uint16_t wCount;
-};
-
 struct XFA_SCRIPTHIERARCHY {
   uint16_t wMethodStart;
   uint16_t wMethodCount;
@@ -980,11 +967,6 @@
 
 #define XFA_PROPERTYFLAG_OneOf 0x01
 #define XFA_PROPERTYFLAG_DefaultOneOf 0x02
-struct XFA_PROPERTY {
-  XFA_Element eName;
-  uint8_t uOccur;
-  uint8_t uFlags;
-};
 
 struct XFA_ATTRIBUTEENUMINFO {
   uint32_t uHash;
diff --git a/xfa/fxfa/parser/cxfa_accessiblecontent.cpp b/xfa/fxfa/parser/cxfa_accessiblecontent.cpp
new file mode 100644
index 0000000..8f8ca30
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_accessiblecontent.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_accessiblecontent.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"accessibleContent";
+
+}  // namespace
+
+CXFA_AccessibleContent::CXFA_AccessibleContent(CXFA_Document* doc,
+                                               XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::AccessibleContent,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_AccessibleContent::~CXFA_AccessibleContent() {}
diff --git a/xfa/fxfa/parser/cxfa_accessiblecontent.h b/xfa/fxfa/parser/cxfa_accessiblecontent.h
new file mode 100644
index 0000000..75e7f38
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_accessiblecontent.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_ACCESSIBLECONTENT_H_
+#define XFA_FXFA_PARSER_CXFA_ACCESSIBLECONTENT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_AccessibleContent : public CXFA_Node {
+ public:
+  CXFA_AccessibleContent(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_AccessibleContent() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_ACCESSIBLECONTENT_H_
diff --git a/xfa/fxfa/parser/cxfa_acrobat.cpp b/xfa/fxfa/parser/cxfa_acrobat.cpp
new file mode 100644
index 0000000..8a0fcf4
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_acrobat.cpp
@@ -0,0 +1,35 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_acrobat.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::AutoSave, 1, 0},
+    {XFA_Element::Validate, 1, 0},
+    {XFA_Element::ValidateApprovalSignatures, 1, 0},
+    {XFA_Element::Acrobat7, 1, 0},
+    {XFA_Element::Common, 1, 0},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"acrobat";
+
+}  // namespace
+
+CXFA_Acrobat::CXFA_Acrobat(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::Acrobat,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Acrobat::~CXFA_Acrobat() {}
diff --git a/xfa/fxfa/parser/cxfa_acrobat.h b/xfa/fxfa/parser/cxfa_acrobat.h
new file mode 100644
index 0000000..a7f85eb
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_acrobat.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_ACROBAT_H_
+#define XFA_FXFA_PARSER_CXFA_ACROBAT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Acrobat : public CXFA_Node {
+ public:
+  CXFA_Acrobat(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Acrobat() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_ACROBAT_H_
diff --git a/xfa/fxfa/parser/cxfa_acrobat7.cpp b/xfa/fxfa/parser/cxfa_acrobat7.cpp
new file mode 100644
index 0000000..6fa7a8b
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_acrobat7.cpp
@@ -0,0 +1,31 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_acrobat7.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::DynamicRender, 1, 0},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"acrobat7";
+
+}  // namespace
+
+CXFA_Acrobat7::CXFA_Acrobat7(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::Acrobat7,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Acrobat7::~CXFA_Acrobat7() {}
diff --git a/xfa/fxfa/parser/cxfa_acrobat7.h b/xfa/fxfa/parser/cxfa_acrobat7.h
new file mode 100644
index 0000000..e9ef61b
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_acrobat7.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_ACROBAT7_H_
+#define XFA_FXFA_PARSER_CXFA_ACROBAT7_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Acrobat7 : public CXFA_Node {
+ public:
+  CXFA_Acrobat7(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Acrobat7() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_ACROBAT7_H_
diff --git a/xfa/fxfa/parser/cxfa_adbe_jsconsole.cpp b/xfa/fxfa/parser/cxfa_adbe_jsconsole.cpp
new file mode 100644
index 0000000..797076a
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_adbe_jsconsole.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_adbe_jsconsole.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"ADBE_JSConsole";
+
+}  // namespace
+
+CXFA_aDBE_JSConsole::CXFA_aDBE_JSConsole(CXFA_Document* doc,
+                                         XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::ADBE_JSConsole,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_aDBE_JSConsole::~CXFA_aDBE_JSConsole() {}
diff --git a/xfa/fxfa/parser/cxfa_adbe_jsconsole.h b/xfa/fxfa/parser/cxfa_adbe_jsconsole.h
new file mode 100644
index 0000000..40369f4
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_adbe_jsconsole.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_ADBE_JSCONSOLE_H_
+#define XFA_FXFA_PARSER_CXFA_ADBE_JSCONSOLE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_aDBE_JSConsole : public CXFA_Node {
+ public:
+  CXFA_aDBE_JSConsole(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_aDBE_JSConsole() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_ADBE_JSCONSOLE_H_
diff --git a/xfa/fxfa/parser/cxfa_adbe_jsdebugger.cpp b/xfa/fxfa/parser/cxfa_adbe_jsdebugger.cpp
new file mode 100644
index 0000000..bbd0123
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_adbe_jsdebugger.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_adbe_jsdebugger.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"ADBE_JSDebugger";
+
+}  // namespace
+
+CXFA_aDBE_JSDebugger::CXFA_aDBE_JSDebugger(CXFA_Document* doc,
+                                           XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::ADBE_JSDebugger,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_aDBE_JSDebugger::~CXFA_aDBE_JSDebugger() {}
diff --git a/xfa/fxfa/parser/cxfa_adbe_jsdebugger.h b/xfa/fxfa/parser/cxfa_adbe_jsdebugger.h
new file mode 100644
index 0000000..0c2f122
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_adbe_jsdebugger.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_ADBE_JSDEBUGGER_H_
+#define XFA_FXFA_PARSER_CXFA_ADBE_JSDEBUGGER_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_aDBE_JSDebugger : public CXFA_Node {
+ public:
+  CXFA_aDBE_JSDebugger(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_aDBE_JSDebugger() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_ADBE_JSDEBUGGER_H_
diff --git a/xfa/fxfa/parser/cxfa_addsilentprint.cpp b/xfa/fxfa/parser/cxfa_addsilentprint.cpp
new file mode 100644
index 0000000..da9e47a
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_addsilentprint.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_addsilentprint.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"addSilentPrint";
+
+}  // namespace
+
+CXFA_AddSilentPrint::CXFA_AddSilentPrint(CXFA_Document* doc,
+                                         XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::AddSilentPrint,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_AddSilentPrint::~CXFA_AddSilentPrint() {}
diff --git a/xfa/fxfa/parser/cxfa_addsilentprint.h b/xfa/fxfa/parser/cxfa_addsilentprint.h
new file mode 100644
index 0000000..844a0c1
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_addsilentprint.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_ADDSILENTPRINT_H_
+#define XFA_FXFA_PARSER_CXFA_ADDSILENTPRINT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_AddSilentPrint : public CXFA_Node {
+ public:
+  CXFA_AddSilentPrint(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_AddSilentPrint() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_ADDSILENTPRINT_H_
diff --git a/xfa/fxfa/parser/cxfa_addviewerpreferences.cpp b/xfa/fxfa/parser/cxfa_addviewerpreferences.cpp
new file mode 100644
index 0000000..2311dc9
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_addviewerpreferences.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_addviewerpreferences.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"addViewerPreferences";
+
+}  // namespace
+
+CXFA_AddViewerPreferences::CXFA_AddViewerPreferences(CXFA_Document* doc,
+                                                     XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::AddViewerPreferences,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_AddViewerPreferences::~CXFA_AddViewerPreferences() {}
diff --git a/xfa/fxfa/parser/cxfa_addviewerpreferences.h b/xfa/fxfa/parser/cxfa_addviewerpreferences.h
new file mode 100644
index 0000000..92d3f81
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_addviewerpreferences.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_ADDVIEWERPREFERENCES_H_
+#define XFA_FXFA_PARSER_CXFA_ADDVIEWERPREFERENCES_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_AddViewerPreferences : public CXFA_Node {
+ public:
+  CXFA_AddViewerPreferences(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_AddViewerPreferences() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_ADDVIEWERPREFERENCES_H_
diff --git a/xfa/fxfa/parser/cxfa_adjustdata.cpp b/xfa/fxfa/parser/cxfa_adjustdata.cpp
new file mode 100644
index 0000000..cbfb8f3
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_adjustdata.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_adjustdata.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"adjustData";
+
+}  // namespace
+
+CXFA_AdjustData::CXFA_AdjustData(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::NodeV,
+                XFA_Element::AdjustData,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_AdjustData::~CXFA_AdjustData() {}
diff --git a/xfa/fxfa/parser/cxfa_adjustdata.h b/xfa/fxfa/parser/cxfa_adjustdata.h
new file mode 100644
index 0000000..59aced8
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_adjustdata.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_ADJUSTDATA_H_
+#define XFA_FXFA_PARSER_CXFA_ADJUSTDATA_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_AdjustData : public CXFA_Node {
+ public:
+  CXFA_AdjustData(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_AdjustData() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_ADJUSTDATA_H_
diff --git a/xfa/fxfa/parser/cxfa_adobeextensionlevel.cpp b/xfa/fxfa/parser/cxfa_adobeextensionlevel.cpp
new file mode 100644
index 0000000..781f588
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_adobeextensionlevel.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_adobeextensionlevel.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"adobeExtensionLevel";
+
+}  // namespace
+
+CXFA_AdobeExtensionLevel::CXFA_AdobeExtensionLevel(CXFA_Document* doc,
+                                                   XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::AdobeExtensionLevel,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_AdobeExtensionLevel::~CXFA_AdobeExtensionLevel() {}
diff --git a/xfa/fxfa/parser/cxfa_adobeextensionlevel.h b/xfa/fxfa/parser/cxfa_adobeextensionlevel.h
new file mode 100644
index 0000000..0fe4184
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_adobeextensionlevel.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_ADOBEEXTENSIONLEVEL_H_
+#define XFA_FXFA_PARSER_CXFA_ADOBEEXTENSIONLEVEL_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_AdobeExtensionLevel : public CXFA_Node {
+ public:
+  CXFA_AdobeExtensionLevel(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_AdobeExtensionLevel() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_ADOBEEXTENSIONLEVEL_H_
diff --git a/xfa/fxfa/parser/cxfa_agent.cpp b/xfa/fxfa/parser/cxfa_agent.cpp
new file mode 100644
index 0000000..2794bae
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_agent.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_agent.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Name, XFA_Attribute::Desc, XFA_Attribute::Lock,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"agent";
+
+}  // namespace
+
+CXFA_Agent::CXFA_Agent(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::Agent,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Agent::~CXFA_Agent() {}
diff --git a/xfa/fxfa/parser/cxfa_agent.h b/xfa/fxfa/parser/cxfa_agent.h
new file mode 100644
index 0000000..a7b244b
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_agent.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_AGENT_H_
+#define XFA_FXFA_PARSER_CXFA_AGENT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Agent : public CXFA_Node {
+ public:
+  CXFA_Agent(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Agent() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_AGENT_H_
diff --git a/xfa/fxfa/parser/cxfa_alwaysembed.cpp b/xfa/fxfa/parser/cxfa_alwaysembed.cpp
new file mode 100644
index 0000000..098a491
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_alwaysembed.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_alwaysembed.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"alwaysEmbed";
+
+}  // namespace
+
+CXFA_AlwaysEmbed::CXFA_AlwaysEmbed(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::NodeV,
+                XFA_Element::AlwaysEmbed,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_AlwaysEmbed::~CXFA_AlwaysEmbed() {}
diff --git a/xfa/fxfa/parser/cxfa_alwaysembed.h b/xfa/fxfa/parser/cxfa_alwaysembed.h
new file mode 100644
index 0000000..865f2a0
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_alwaysembed.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_ALWAYSEMBED_H_
+#define XFA_FXFA_PARSER_CXFA_ALWAYSEMBED_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_AlwaysEmbed : public CXFA_Node {
+ public:
+  CXFA_AlwaysEmbed(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_AlwaysEmbed() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_ALWAYSEMBED_H_
diff --git a/xfa/fxfa/parser/cxfa_amd.cpp b/xfa/fxfa/parser/cxfa_amd.cpp
new file mode 100644
index 0000000..c92dd39
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_amd.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_amd.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"amd";
+
+}  // namespace
+
+CXFA_Amd::CXFA_Amd(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Amd,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Amd::~CXFA_Amd() {}
diff --git a/xfa/fxfa/parser/cxfa_amd.h b/xfa/fxfa/parser/cxfa_amd.h
new file mode 100644
index 0000000..bf5ece8
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_amd.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_AMD_H_
+#define XFA_FXFA_PARSER_CXFA_AMD_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Amd : public CXFA_Node {
+ public:
+  CXFA_Amd(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Amd() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_AMD_H_
diff --git a/xfa/fxfa/parser/cxfa_appearancefilter.cpp b/xfa/fxfa/parser/cxfa_appearancefilter.cpp
new file mode 100644
index 0000000..ef2c414
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_appearancefilter.cpp
@@ -0,0 +1,30 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_appearancefilter.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Use, XFA_Attribute::Type,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"appearanceFilter";
+
+}  // namespace
+
+CXFA_AppearanceFilter::CXFA_AppearanceFilter(CXFA_Document* doc,
+                                             XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::NodeC,
+                XFA_Element::AppearanceFilter,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_AppearanceFilter::~CXFA_AppearanceFilter() {}
diff --git a/xfa/fxfa/parser/cxfa_appearancefilter.h b/xfa/fxfa/parser/cxfa_appearancefilter.h
new file mode 100644
index 0000000..e495809
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_appearancefilter.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_APPEARANCEFILTER_H_
+#define XFA_FXFA_PARSER_CXFA_APPEARANCEFILTER_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_AppearanceFilter : public CXFA_Node {
+ public:
+  CXFA_AppearanceFilter(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_AppearanceFilter() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_APPEARANCEFILTER_H_
diff --git a/xfa/fxfa/parser/cxfa_arc.cpp b/xfa/fxfa/parser/cxfa_arc.cpp
new file mode 100644
index 0000000..fbcc088
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_arc.cpp
@@ -0,0 +1,34 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_arc.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Edge, 1, 0},
+                                                 {XFA_Element::Fill, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,         XFA_Attribute::Use,
+    XFA_Attribute::StartAngle, XFA_Attribute::SweepAngle,
+    XFA_Attribute::Circular,   XFA_Attribute::Usehref,
+    XFA_Attribute::Hand,       XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"arc";
+
+}  // namespace
+
+CXFA_Arc::CXFA_Arc(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Arc,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Arc::~CXFA_Arc() {}
diff --git a/xfa/fxfa/parser/cxfa_arc.h b/xfa/fxfa/parser/cxfa_arc.h
new file mode 100644
index 0000000..6127784
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_arc.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_ARC_H_
+#define XFA_FXFA_PARSER_CXFA_ARC_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Arc : public CXFA_Node {
+ public:
+  CXFA_Arc(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Arc() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_ARC_H_
diff --git a/xfa/fxfa/parser/cxfa_area.cpp b/xfa/fxfa/parser/cxfa_area.cpp
new file mode 100644
index 0000000..23a0bbe
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_area.cpp
@@ -0,0 +1,35 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_area.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Desc, 1, 0},
+                                                 {XFA_Element::Extras, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::X,        XFA_Attribute::Y,       XFA_Attribute::Id,
+    XFA_Attribute::Name,     XFA_Attribute::Use,     XFA_Attribute::Level,
+    XFA_Attribute::Relevant, XFA_Attribute::ColSpan, XFA_Attribute::Usehref,
+    XFA_Attribute::Lock,     XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"area";
+
+}  // namespace
+
+CXFA_Area::CXFA_Area(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(
+          doc,
+          packet,
+          (XFA_XDPPACKET_Config | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+          XFA_ObjectType::ContainerNode,
+          XFA_Element::Area,
+          kPropertyData,
+          kAttributeData,
+          kName) {}
+
+CXFA_Area::~CXFA_Area() {}
diff --git a/xfa/fxfa/parser/cxfa_area.h b/xfa/fxfa/parser/cxfa_area.h
new file mode 100644
index 0000000..c187580
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_area.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_AREA_H_
+#define XFA_FXFA_PARSER_CXFA_AREA_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Area : public CXFA_Node {
+ public:
+  CXFA_Area(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Area() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_AREA_H_
diff --git a/xfa/fxfa/parser/cxfa_assist.cpp b/xfa/fxfa/parser/cxfa_assist.cpp
new file mode 100644
index 0000000..2780e7a
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_assist.cpp
@@ -0,0 +1,32 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_assist.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::ToolTip, 1, 0},
+                                                 {XFA_Element::Speak, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Use, XFA_Attribute::Role,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"assist";
+
+}  // namespace
+
+CXFA_Assist::CXFA_Assist(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Assist,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Assist::~CXFA_Assist() {}
diff --git a/xfa/fxfa/parser/cxfa_assist.h b/xfa/fxfa/parser/cxfa_assist.h
new file mode 100644
index 0000000..642a501
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_assist.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_ASSIST_H_
+#define XFA_FXFA_PARSER_CXFA_ASSIST_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Assist : public CXFA_Node {
+ public:
+  CXFA_Assist(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Assist() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_ASSIST_H_
diff --git a/xfa/fxfa/parser/cxfa_attributes.cpp b/xfa/fxfa/parser/cxfa_attributes.cpp
new file mode 100644
index 0000000..d0bbfa6
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_attributes.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_attributes.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"attributes";
+
+}  // namespace
+
+CXFA_Attributes::CXFA_Attributes(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::NodeV,
+                XFA_Element::Attributes,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Attributes::~CXFA_Attributes() {}
diff --git a/xfa/fxfa/parser/cxfa_attributes.h b/xfa/fxfa/parser/cxfa_attributes.h
new file mode 100644
index 0000000..8441d75
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_attributes.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_ATTRIBUTES_H_
+#define XFA_FXFA_PARSER_CXFA_ATTRIBUTES_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Attributes : public CXFA_Node {
+ public:
+  CXFA_Attributes(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Attributes() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_ATTRIBUTES_H_
diff --git a/xfa/fxfa/parser/cxfa_autosave.cpp b/xfa/fxfa/parser/cxfa_autosave.cpp
new file mode 100644
index 0000000..5719b1d
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_autosave.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_autosave.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"autoSave";
+
+}  // namespace
+
+CXFA_AutoSave::CXFA_AutoSave(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::NodeV,
+                XFA_Element::AutoSave,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_AutoSave::~CXFA_AutoSave() {}
diff --git a/xfa/fxfa/parser/cxfa_autosave.h b/xfa/fxfa/parser/cxfa_autosave.h
new file mode 100644
index 0000000..208917f
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_autosave.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_AUTOSAVE_H_
+#define XFA_FXFA_PARSER_CXFA_AUTOSAVE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_AutoSave : public CXFA_Node {
+ public:
+  CXFA_AutoSave(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_AutoSave() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_AUTOSAVE_H_
diff --git a/xfa/fxfa/parser/cxfa_barcode.cpp b/xfa/fxfa/parser/cxfa_barcode.cpp
new file mode 100644
index 0000000..1abbbe4
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_barcode.cpp
@@ -0,0 +1,48 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_barcode.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Id,
+                                        XFA_Attribute::DataRowCount,
+                                        XFA_Attribute::Use,
+                                        XFA_Attribute::DataPrep,
+                                        XFA_Attribute::Type,
+                                        XFA_Attribute::TextLocation,
+                                        XFA_Attribute::ModuleWidth,
+                                        XFA_Attribute::PrintCheckDigit,
+                                        XFA_Attribute::ModuleHeight,
+                                        XFA_Attribute::StartChar,
+                                        XFA_Attribute::Truncate,
+                                        XFA_Attribute::WideNarrowRatio,
+                                        XFA_Attribute::ErrorCorrectionLevel,
+                                        XFA_Attribute::UpsMode,
+                                        XFA_Attribute::Checksum,
+                                        XFA_Attribute::CharEncoding,
+                                        XFA_Attribute::Usehref,
+                                        XFA_Attribute::DataColumnCount,
+                                        XFA_Attribute::RowColumnRatio,
+                                        XFA_Attribute::DataLength,
+                                        XFA_Attribute::EndChar,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"barcode";
+
+}  // namespace
+
+CXFA_Barcode::CXFA_Barcode(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Barcode,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Barcode::~CXFA_Barcode() {}
diff --git a/xfa/fxfa/parser/cxfa_barcode.h b/xfa/fxfa/parser/cxfa_barcode.h
new file mode 100644
index 0000000..78a27f3
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_barcode.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_BARCODE_H_
+#define XFA_FXFA_PARSER_CXFA_BARCODE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Barcode : public CXFA_Node {
+ public:
+  CXFA_Barcode(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Barcode() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_BARCODE_H_
diff --git a/xfa/fxfa/parser/cxfa_base.cpp b/xfa/fxfa/parser/cxfa_base.cpp
new file mode 100644
index 0000000..c59b63b
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_base.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_base.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"base";
+
+}  // namespace
+
+CXFA_Base::CXFA_Base(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Base,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Base::~CXFA_Base() {}
diff --git a/xfa/fxfa/parser/cxfa_base.h b/xfa/fxfa/parser/cxfa_base.h
new file mode 100644
index 0000000..e92bd79
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_base.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_BASE_H_
+#define XFA_FXFA_PARSER_CXFA_BASE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Base : public CXFA_Node {
+ public:
+  CXFA_Base(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Base() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_BASE_H_
diff --git a/xfa/fxfa/parser/cxfa_batchoutput.cpp b/xfa/fxfa/parser/cxfa_batchoutput.cpp
new file mode 100644
index 0000000..ee399ea
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_batchoutput.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_batchoutput.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Format, XFA_Attribute::Desc, XFA_Attribute::Lock,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"batchOutput";
+
+}  // namespace
+
+CXFA_BatchOutput::CXFA_BatchOutput(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::BatchOutput,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_BatchOutput::~CXFA_BatchOutput() {}
diff --git a/xfa/fxfa/parser/cxfa_batchoutput.h b/xfa/fxfa/parser/cxfa_batchoutput.h
new file mode 100644
index 0000000..f06332a
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_batchoutput.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_BATCHOUTPUT_H_
+#define XFA_FXFA_PARSER_CXFA_BATCHOUTPUT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_BatchOutput : public CXFA_Node {
+ public:
+  CXFA_BatchOutput(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_BatchOutput() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_BATCHOUTPUT_H_
diff --git a/xfa/fxfa/parser/cxfa_behavioroverride.cpp b/xfa/fxfa/parser/cxfa_behavioroverride.cpp
new file mode 100644
index 0000000..8a74a8a
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_behavioroverride.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_behavioroverride.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"behaviorOverride";
+
+}  // namespace
+
+CXFA_BehaviorOverride::CXFA_BehaviorOverride(CXFA_Document* doc,
+                                             XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::BehaviorOverride,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_BehaviorOverride::~CXFA_BehaviorOverride() {}
diff --git a/xfa/fxfa/parser/cxfa_behavioroverride.h b/xfa/fxfa/parser/cxfa_behavioroverride.h
new file mode 100644
index 0000000..fa9f54a
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_behavioroverride.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_BEHAVIOROVERRIDE_H_
+#define XFA_FXFA_PARSER_CXFA_BEHAVIOROVERRIDE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_BehaviorOverride : public CXFA_Node {
+ public:
+  CXFA_BehaviorOverride(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_BehaviorOverride() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_BEHAVIOROVERRIDE_H_
diff --git a/xfa/fxfa/parser/cxfa_bind.cpp b/xfa/fxfa/parser/cxfa_bind.cpp
new file mode 100644
index 0000000..dde162f
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_bind.cpp
@@ -0,0 +1,35 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_bind.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Picture, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,          XFA_Attribute::Name,
+    XFA_Attribute::Ref,         XFA_Attribute::Use,
+    XFA_Attribute::ContentType, XFA_Attribute::TransferEncoding,
+    XFA_Attribute::Usehref,     XFA_Attribute::Match,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"bind";
+
+}  // namespace
+
+CXFA_Bind::CXFA_Bind(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_SourceSet | XFA_XDPPACKET_Template |
+                 XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Bind,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Bind::~CXFA_Bind() {}
diff --git a/xfa/fxfa/parser/cxfa_bind.h b/xfa/fxfa/parser/cxfa_bind.h
new file mode 100644
index 0000000..961adc7
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_bind.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_BIND_H_
+#define XFA_FXFA_PARSER_CXFA_BIND_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Bind : public CXFA_Node {
+ public:
+  CXFA_Bind(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Bind() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_BIND_H_
diff --git a/xfa/fxfa/parser/cxfa_binditems.cpp b/xfa/fxfa/parser/cxfa_binditems.cpp
new file mode 100644
index 0000000..fd01203
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_binditems.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_binditems.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Ref, XFA_Attribute::Connection, XFA_Attribute::LabelRef,
+    XFA_Attribute::ValueRef, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"bindItems";
+
+}  // namespace
+
+CXFA_BindItems::CXFA_BindItems(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::BindItems,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_BindItems::~CXFA_BindItems() {}
diff --git a/xfa/fxfa/parser/cxfa_binditems.h b/xfa/fxfa/parser/cxfa_binditems.h
new file mode 100644
index 0000000..4c31be1
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_binditems.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_BINDITEMS_H_
+#define XFA_FXFA_PARSER_CXFA_BINDITEMS_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_BindItems : public CXFA_Node {
+ public:
+  CXFA_BindItems(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_BindItems() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_BINDITEMS_H_
diff --git a/xfa/fxfa/parser/cxfa_bookend.cpp b/xfa/fxfa/parser/cxfa_bookend.cpp
new file mode 100644
index 0000000..6c8f6b5
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_bookend.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_bookend.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,      XFA_Attribute::Use,    XFA_Attribute::Trailer,
+    XFA_Attribute::Usehref, XFA_Attribute::Leader, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"bookend";
+
+}  // namespace
+
+CXFA_Bookend::CXFA_Bookend(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Bookend,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Bookend::~CXFA_Bookend() {}
diff --git a/xfa/fxfa/parser/cxfa_bookend.h b/xfa/fxfa/parser/cxfa_bookend.h
new file mode 100644
index 0000000..51308e0
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_bookend.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_BOOKEND_H_
+#define XFA_FXFA_PARSER_CXFA_BOOKEND_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Bookend : public CXFA_Node {
+ public:
+  CXFA_Bookend(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Bookend() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_BOOKEND_H_
diff --git a/xfa/fxfa/parser/cxfa_boolean.cpp b/xfa/fxfa/parser/cxfa_boolean.cpp
new file mode 100644
index 0000000..22ac121
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_boolean.cpp
@@ -0,0 +1,30 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_boolean.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Name, XFA_Attribute::Use,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"boolean";
+
+}  // namespace
+
+CXFA_Boolean::CXFA_Boolean(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_SourceSet | XFA_XDPPACKET_Template |
+                 XFA_XDPPACKET_Form),
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Boolean,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Boolean::~CXFA_Boolean() {}
diff --git a/xfa/fxfa/parser/cxfa_boolean.h b/xfa/fxfa/parser/cxfa_boolean.h
new file mode 100644
index 0000000..a43d870
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_boolean.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_BOOLEAN_H_
+#define XFA_FXFA_PARSER_CXFA_BOOLEAN_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Boolean : public CXFA_Node {
+ public:
+  CXFA_Boolean(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Boolean() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_BOOLEAN_H_
diff --git a/xfa/fxfa/parser/cxfa_border.cpp b/xfa/fxfa/parser/cxfa_border.cpp
new file mode 100644
index 0000000..be206b7
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_border.cpp
@@ -0,0 +1,34 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_border.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::Margin, 1, 0}, {XFA_Element::Edge, 4, 0},
+    {XFA_Element::Corner, 4, 0}, {XFA_Element::Fill, 1, 0},
+    {XFA_Element::Extras, 1, 0}, {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,       XFA_Attribute::Break,    XFA_Attribute::Use,
+    XFA_Attribute::Presence, XFA_Attribute::Relevant, XFA_Attribute::Usehref,
+    XFA_Attribute::Hand,     XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"border";
+
+}  // namespace
+
+CXFA_Border::CXFA_Border(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Border,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Border::~CXFA_Border() {}
diff --git a/xfa/fxfa/parser/cxfa_border.h b/xfa/fxfa/parser/cxfa_border.h
new file mode 100644
index 0000000..050dd16
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_border.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_BORDER_H_
+#define XFA_FXFA_PARSER_CXFA_BORDER_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Border : public CXFA_Node {
+ public:
+  CXFA_Border(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Border() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_BORDER_H_
diff --git a/xfa/fxfa/parser/cxfa_break.cpp b/xfa/fxfa/parser/cxfa_break.cpp
new file mode 100644
index 0000000..f8c7ce0
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_break.cpp
@@ -0,0 +1,42 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_break.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Extras, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Id,
+                                        XFA_Attribute::BeforeTarget,
+                                        XFA_Attribute::Use,
+                                        XFA_Attribute::OverflowTarget,
+                                        XFA_Attribute::OverflowLeader,
+                                        XFA_Attribute::OverflowTrailer,
+                                        XFA_Attribute::StartNew,
+                                        XFA_Attribute::BookendTrailer,
+                                        XFA_Attribute::After,
+                                        XFA_Attribute::Usehref,
+                                        XFA_Attribute::BookendLeader,
+                                        XFA_Attribute::AfterTarget,
+                                        XFA_Attribute::Before,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"break";
+
+}  // namespace
+
+CXFA_Break::CXFA_Break(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Break,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Break::~CXFA_Break() {}
diff --git a/xfa/fxfa/parser/cxfa_break.h b/xfa/fxfa/parser/cxfa_break.h
new file mode 100644
index 0000000..25aa8c1
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_break.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_BREAK_H_
+#define XFA_FXFA_PARSER_CXFA_BREAK_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Break : public CXFA_Node {
+ public:
+  CXFA_Break(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Break() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_BREAK_H_
diff --git a/xfa/fxfa/parser/cxfa_breakafter.cpp b/xfa/fxfa/parser/cxfa_breakafter.cpp
new file mode 100644
index 0000000..711391e
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_breakafter.cpp
@@ -0,0 +1,32 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_breakafter.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Script, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,      XFA_Attribute::Use,        XFA_Attribute::StartNew,
+    XFA_Attribute::Trailer, XFA_Attribute::TargetType, XFA_Attribute::Usehref,
+    XFA_Attribute::Target,  XFA_Attribute::Leader,     XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"breakAfter";
+
+}  // namespace
+
+CXFA_BreakAfter::CXFA_BreakAfter(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::BreakAfter,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_BreakAfter::~CXFA_BreakAfter() {}
diff --git a/xfa/fxfa/parser/cxfa_breakafter.h b/xfa/fxfa/parser/cxfa_breakafter.h
new file mode 100644
index 0000000..242bf9f
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_breakafter.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_BREAKAFTER_H_
+#define XFA_FXFA_PARSER_CXFA_BREAKAFTER_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_BreakAfter : public CXFA_Node {
+ public:
+  CXFA_BreakAfter(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_BreakAfter() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_BREAKAFTER_H_
diff --git a/xfa/fxfa/parser/cxfa_breakbefore.cpp b/xfa/fxfa/parser/cxfa_breakbefore.cpp
new file mode 100644
index 0000000..fbc10c7
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_breakbefore.cpp
@@ -0,0 +1,32 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_breakbefore.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Script, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,      XFA_Attribute::Use,        XFA_Attribute::StartNew,
+    XFA_Attribute::Trailer, XFA_Attribute::TargetType, XFA_Attribute::Usehref,
+    XFA_Attribute::Target,  XFA_Attribute::Leader,     XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"breakBefore";
+
+}  // namespace
+
+CXFA_BreakBefore::CXFA_BreakBefore(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::BreakBefore,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_BreakBefore::~CXFA_BreakBefore() {}
diff --git a/xfa/fxfa/parser/cxfa_breakbefore.h b/xfa/fxfa/parser/cxfa_breakbefore.h
new file mode 100644
index 0000000..76078f0
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_breakbefore.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_BREAKBEFORE_H_
+#define XFA_FXFA_PARSER_CXFA_BREAKBEFORE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_BreakBefore : public CXFA_Node {
+ public:
+  CXFA_BreakBefore(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_BreakBefore() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_BREAKBEFORE_H_
diff --git a/xfa/fxfa/parser/cxfa_button.cpp b/xfa/fxfa/parser/cxfa_button.cpp
new file mode 100644
index 0000000..59b1eb5
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_button.cpp
@@ -0,0 +1,31 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_button.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Extras, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Use, XFA_Attribute::Usehref,
+    XFA_Attribute::Highlight, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"button";
+
+}  // namespace
+
+CXFA_Button::CXFA_Button(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Button,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Button::~CXFA_Button() {}
diff --git a/xfa/fxfa/parser/cxfa_button.h b/xfa/fxfa/parser/cxfa_button.h
new file mode 100644
index 0000000..dbf9102
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_button.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_BUTTON_H_
+#define XFA_FXFA_PARSER_CXFA_BUTTON_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Button : public CXFA_Node {
+ public:
+  CXFA_Button(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Button() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_BUTTON_H_
diff --git a/xfa/fxfa/parser/cxfa_cache.cpp b/xfa/fxfa/parser/cxfa_cache.cpp
new file mode 100644
index 0000000..4d278d3
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_cache.cpp
@@ -0,0 +1,31 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_cache.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::TemplateCache, 1, 0},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"cache";
+
+}  // namespace
+
+CXFA_Cache::CXFA_Cache(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::Cache,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Cache::~CXFA_Cache() {}
diff --git a/xfa/fxfa/parser/cxfa_cache.h b/xfa/fxfa/parser/cxfa_cache.h
new file mode 100644
index 0000000..2e4ca12
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_cache.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_CACHE_H_
+#define XFA_FXFA_PARSER_CXFA_CACHE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Cache : public CXFA_Node {
+ public:
+  CXFA_Cache(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Cache() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_CACHE_H_
diff --git a/xfa/fxfa/parser/cxfa_calculate.cpp b/xfa/fxfa/parser/cxfa_calculate.cpp
new file mode 100644
index 0000000..641fa2b
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_calculate.cpp
@@ -0,0 +1,33 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_calculate.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Message, 1, 0},
+                                                 {XFA_Element::Script, 1, 0},
+                                                 {XFA_Element::Extras, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Use, XFA_Attribute::Usehref,
+    XFA_Attribute::Override, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"calculate";
+
+}  // namespace
+
+CXFA_Calculate::CXFA_Calculate(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Calculate,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Calculate::~CXFA_Calculate() {}
diff --git a/xfa/fxfa/parser/cxfa_calculate.h b/xfa/fxfa/parser/cxfa_calculate.h
new file mode 100644
index 0000000..9853c23
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_calculate.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_CALCULATE_H_
+#define XFA_FXFA_PARSER_CXFA_CALCULATE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Calculate : public CXFA_Node {
+ public:
+  CXFA_Calculate(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Calculate() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_CALCULATE_H_
diff --git a/xfa/fxfa/parser/cxfa_calendarsymbols.cpp b/xfa/fxfa/parser/cxfa_calendarsymbols.cpp
new file mode 100644
index 0000000..6730636
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_calendarsymbols.cpp
@@ -0,0 +1,35 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_calendarsymbols.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::EraNames, 1, 0},
+    {XFA_Element::DayNames, 2, 0},
+    {XFA_Element::MeridiemNames, 1, 0},
+    {XFA_Element::MonthNames, 2, 0},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Name,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"calendarSymbols";
+
+}  // namespace
+
+CXFA_CalendarSymbols::CXFA_CalendarSymbols(CXFA_Document* doc,
+                                           XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_LocaleSet,
+                XFA_ObjectType::Node,
+                XFA_Element::CalendarSymbols,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_CalendarSymbols::~CXFA_CalendarSymbols() {}
diff --git a/xfa/fxfa/parser/cxfa_calendarsymbols.h b/xfa/fxfa/parser/cxfa_calendarsymbols.h
new file mode 100644
index 0000000..c12bdb0
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_calendarsymbols.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_CALENDARSYMBOLS_H_
+#define XFA_FXFA_PARSER_CXFA_CALENDARSYMBOLS_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_CalendarSymbols : public CXFA_Node {
+ public:
+  CXFA_CalendarSymbols(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_CalendarSymbols() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_CALENDARSYMBOLS_H_
diff --git a/xfa/fxfa/parser/cxfa_caption.cpp b/xfa/fxfa/parser/cxfa_caption.cpp
new file mode 100644
index 0000000..195b7aa
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_caption.cpp
@@ -0,0 +1,34 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_caption.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::Margin, 1, 0}, {XFA_Element::Para, 1, 0},
+    {XFA_Element::Font, 1, 0},   {XFA_Element::Value, 1, 0},
+    {XFA_Element::Extras, 1, 0}, {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,       XFA_Attribute::Use,     XFA_Attribute::Reserve,
+    XFA_Attribute::Presence, XFA_Attribute::Usehref, XFA_Attribute::Placement,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"caption";
+
+}  // namespace
+
+CXFA_Caption::CXFA_Caption(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Caption,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Caption::~CXFA_Caption() {}
diff --git a/xfa/fxfa/parser/cxfa_caption.h b/xfa/fxfa/parser/cxfa_caption.h
new file mode 100644
index 0000000..3b3b8b5
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_caption.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_CAPTION_H_
+#define XFA_FXFA_PARSER_CXFA_CAPTION_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Caption : public CXFA_Node {
+ public:
+  CXFA_Caption(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Caption() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_CAPTION_H_
diff --git a/xfa/fxfa/parser/cxfa_certificate.cpp b/xfa/fxfa/parser/cxfa_certificate.cpp
new file mode 100644
index 0000000..4983b08
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_certificate.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_certificate.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Name, XFA_Attribute::Use,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"certificate";
+
+}  // namespace
+
+CXFA_Certificate::CXFA_Certificate(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::TextNode,
+                XFA_Element::Certificate,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Certificate::~CXFA_Certificate() {}
diff --git a/xfa/fxfa/parser/cxfa_certificate.h b/xfa/fxfa/parser/cxfa_certificate.h
new file mode 100644
index 0000000..7e0ffbe
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_certificate.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_CERTIFICATE_H_
+#define XFA_FXFA_PARSER_CXFA_CERTIFICATE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Certificate : public CXFA_Node {
+ public:
+  CXFA_Certificate(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Certificate() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_CERTIFICATE_H_
diff --git a/xfa/fxfa/parser/cxfa_certificates.cpp b/xfa/fxfa/parser/cxfa_certificates.cpp
new file mode 100644
index 0000000..d1465b4
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_certificates.cpp
@@ -0,0 +1,35 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_certificates.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::KeyUsage, 1, 0}, {XFA_Element::SubjectDNs, 1, 0},
+    {XFA_Element::Issuers, 1, 0},  {XFA_Element::Signing, 1, 0},
+    {XFA_Element::Oids, 1, 0},     {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,      XFA_Attribute::Url,
+    XFA_Attribute::Use,     XFA_Attribute::CredentialServerPolicy,
+    XFA_Attribute::Usehref, XFA_Attribute::UrlPolicy,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"certificates";
+
+}  // namespace
+
+CXFA_Certificates::CXFA_Certificates(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Certificates,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Certificates::~CXFA_Certificates() {}
diff --git a/xfa/fxfa/parser/cxfa_certificates.h b/xfa/fxfa/parser/cxfa_certificates.h
new file mode 100644
index 0000000..dc26239
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_certificates.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_CERTIFICATES_H_
+#define XFA_FXFA_PARSER_CXFA_CERTIFICATES_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Certificates : public CXFA_Node {
+ public:
+  CXFA_Certificates(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Certificates() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_CERTIFICATES_H_
diff --git a/xfa/fxfa/parser/cxfa_change.cpp b/xfa/fxfa/parser/cxfa_change.cpp
new file mode 100644
index 0000000..491edde
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_change.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_change.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"change";
+
+}  // namespace
+
+CXFA_Change::CXFA_Change(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Change,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Change::~CXFA_Change() {}
diff --git a/xfa/fxfa/parser/cxfa_change.h b/xfa/fxfa/parser/cxfa_change.h
new file mode 100644
index 0000000..a332e85
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_change.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_CHANGE_H_
+#define XFA_FXFA_PARSER_CXFA_CHANGE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Change : public CXFA_Node {
+ public:
+  CXFA_Change(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Change() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_CHANGE_H_
diff --git a/xfa/fxfa/parser/cxfa_checkbutton.cpp b/xfa/fxfa/parser/cxfa_checkbutton.cpp
new file mode 100644
index 0000000..3684c85
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_checkbutton.cpp
@@ -0,0 +1,34 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_checkbutton.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Margin, 1, 0},
+                                                 {XFA_Element::Border, 1, 0},
+                                                 {XFA_Element::Extras, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,      XFA_Attribute::Use,    XFA_Attribute::AllowNeutral,
+    XFA_Attribute::Mark,    XFA_Attribute::Shape,  XFA_Attribute::Size,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"checkButton";
+
+}  // namespace
+
+CXFA_CheckButton::CXFA_CheckButton(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::CheckButton,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_CheckButton::~CXFA_CheckButton() {}
diff --git a/xfa/fxfa/parser/cxfa_checkbutton.h b/xfa/fxfa/parser/cxfa_checkbutton.h
new file mode 100644
index 0000000..d81de78
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_checkbutton.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_CHECKBUTTON_H_
+#define XFA_FXFA_PARSER_CXFA_CHECKBUTTON_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_CheckButton : public CXFA_Node {
+ public:
+  CXFA_CheckButton(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_CheckButton() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_CHECKBUTTON_H_
diff --git a/xfa/fxfa/parser/cxfa_choicelist.cpp b/xfa/fxfa/parser/cxfa_choicelist.cpp
new file mode 100644
index 0000000..a9097a1
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_choicelist.cpp
@@ -0,0 +1,34 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_choicelist.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Margin, 1, 0},
+                                                 {XFA_Element::Border, 1, 0},
+                                                 {XFA_Element::Extras, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,       XFA_Attribute::Use,       XFA_Attribute::Open,
+    XFA_Attribute::CommitOn, XFA_Attribute::TextEntry, XFA_Attribute::Usehref,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"choiceList";
+
+}  // namespace
+
+CXFA_ChoiceList::CXFA_ChoiceList(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::ChoiceList,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_ChoiceList::~CXFA_ChoiceList() {}
diff --git a/xfa/fxfa/parser/cxfa_choicelist.h b/xfa/fxfa/parser/cxfa_choicelist.h
new file mode 100644
index 0000000..8d96070
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_choicelist.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_CHOICELIST_H_
+#define XFA_FXFA_PARSER_CXFA_CHOICELIST_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_ChoiceList : public CXFA_Node {
+ public:
+  CXFA_ChoiceList(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_ChoiceList() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_CHOICELIST_H_
diff --git a/xfa/fxfa/parser/cxfa_color.cpp b/xfa/fxfa/parser/cxfa_color.cpp
new file mode 100644
index 0000000..f943318
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_color.cpp
@@ -0,0 +1,31 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_color.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Extras, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,      XFA_Attribute::Use,   XFA_Attribute::CSpace,
+    XFA_Attribute::Usehref, XFA_Attribute::Value, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"color";
+
+}  // namespace
+
+CXFA_Color::CXFA_Color(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Color,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Color::~CXFA_Color() {}
diff --git a/xfa/fxfa/parser/cxfa_color.h b/xfa/fxfa/parser/cxfa_color.h
new file mode 100644
index 0000000..88b2e3b
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_color.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_COLOR_H_
+#define XFA_FXFA_PARSER_CXFA_COLOR_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Color : public CXFA_Node {
+ public:
+  CXFA_Color(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Color() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_COLOR_H_
diff --git a/xfa/fxfa/parser/cxfa_comb.cpp b/xfa/fxfa/parser/cxfa_comb.cpp
new file mode 100644
index 0000000..6566301
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_comb.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_comb.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Use, XFA_Attribute::NumberOfCells,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"comb";
+
+}  // namespace
+
+CXFA_Comb::CXFA_Comb(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Comb,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Comb::~CXFA_Comb() {}
diff --git a/xfa/fxfa/parser/cxfa_comb.h b/xfa/fxfa/parser/cxfa_comb.h
new file mode 100644
index 0000000..f08bbdd0
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_comb.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_COMB_H_
+#define XFA_FXFA_PARSER_CXFA_COMB_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Comb : public CXFA_Node {
+ public:
+  CXFA_Comb(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Comb() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_COMB_H_
diff --git a/xfa/fxfa/parser/cxfa_command.cpp b/xfa/fxfa/parser/cxfa_command.cpp
new file mode 100644
index 0000000..56ffabc
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_command.cpp
@@ -0,0 +1,34 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_command.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Query, 1, 0},
+                                                 {XFA_Element::Insert, 1, 0},
+                                                 {XFA_Element::Update, 1, 0},
+                                                 {XFA_Element::Delete, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,      XFA_Attribute::Name,    XFA_Attribute::Use,
+    XFA_Attribute::Timeout, XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"command";
+
+}  // namespace
+
+CXFA_Command::CXFA_Command(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_SourceSet,
+                XFA_ObjectType::Node,
+                XFA_Element::Command,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Command::~CXFA_Command() {}
diff --git a/xfa/fxfa/parser/cxfa_command.h b/xfa/fxfa/parser/cxfa_command.h
new file mode 100644
index 0000000..a594267
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_command.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_COMMAND_H_
+#define XFA_FXFA_PARSER_CXFA_COMMAND_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Command : public CXFA_Node {
+ public:
+  CXFA_Command(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Command() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_COMMAND_H_
diff --git a/xfa/fxfa/parser/cxfa_common.cpp b/xfa/fxfa/parser/cxfa_common.cpp
new file mode 100644
index 0000000..829c00c
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_common.cpp
@@ -0,0 +1,38 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_common.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::SuppressBanner, 1, 0},
+    {XFA_Element::VersionControl, 1, 0},
+    {XFA_Element::LocaleSet, 1, 0},
+    {XFA_Element::Template, 1, 0},
+    {XFA_Element::ValidationMessaging, 1, 0},
+    {XFA_Element::Locale, 1, 0},
+    {XFA_Element::Data, 1, 0},
+    {XFA_Element::Messaging, 1, 0},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"common";
+
+}  // namespace
+
+CXFA_Common::CXFA_Common(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::Common,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Common::~CXFA_Common() {}
diff --git a/xfa/fxfa/parser/cxfa_common.h b/xfa/fxfa/parser/cxfa_common.h
new file mode 100644
index 0000000..51c3398
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_common.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_COMMON_H_
+#define XFA_FXFA_PARSER_CXFA_COMMON_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Common : public CXFA_Node {
+ public:
+  CXFA_Common(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Common() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_COMMON_H_
diff --git a/xfa/fxfa/parser/cxfa_compress.cpp b/xfa/fxfa/parser/cxfa_compress.cpp
new file mode 100644
index 0000000..31a15df
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_compress.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_compress.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Scope, XFA_Attribute::Lock,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"compress";
+
+}  // namespace
+
+CXFA_Compress::CXFA_Compress(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::Compress,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Compress::~CXFA_Compress() {}
diff --git a/xfa/fxfa/parser/cxfa_compress.h b/xfa/fxfa/parser/cxfa_compress.h
new file mode 100644
index 0000000..6a0243f
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_compress.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_COMPRESS_H_
+#define XFA_FXFA_PARSER_CXFA_COMPRESS_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Compress : public CXFA_Node {
+ public:
+  CXFA_Compress(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Compress() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_COMPRESS_H_
diff --git a/xfa/fxfa/parser/cxfa_compression.cpp b/xfa/fxfa/parser/cxfa_compression.cpp
new file mode 100644
index 0000000..305670b
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_compression.cpp
@@ -0,0 +1,34 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_compression.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::Level, 1, 0},
+    {XFA_Element::Type, 1, 0},
+    {XFA_Element::CompressObjectStream, 1, 0},
+    {XFA_Element::CompressLogicalStructure, 1, 0},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"compression";
+
+}  // namespace
+
+CXFA_Compression::CXFA_Compression(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::Compression,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Compression::~CXFA_Compression() {}
diff --git a/xfa/fxfa/parser/cxfa_compression.h b/xfa/fxfa/parser/cxfa_compression.h
new file mode 100644
index 0000000..03b6f07
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_compression.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_COMPRESSION_H_
+#define XFA_FXFA_PARSER_CXFA_COMPRESSION_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Compression : public CXFA_Node {
+ public:
+  CXFA_Compression(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Compression() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_COMPRESSION_H_
diff --git a/xfa/fxfa/parser/cxfa_compresslogicalstructure.cpp b/xfa/fxfa/parser/cxfa_compresslogicalstructure.cpp
new file mode 100644
index 0000000..92e9e4f
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_compresslogicalstructure.cpp
@@ -0,0 +1,30 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_compresslogicalstructure.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"compressLogicalStructure";
+
+}  // namespace
+
+CXFA_CompressLogicalStructure::CXFA_CompressLogicalStructure(
+    CXFA_Document* doc,
+    XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::CompressLogicalStructure,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_CompressLogicalStructure::~CXFA_CompressLogicalStructure() {}
diff --git a/xfa/fxfa/parser/cxfa_compresslogicalstructure.h b/xfa/fxfa/parser/cxfa_compresslogicalstructure.h
new file mode 100644
index 0000000..01f9df7
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_compresslogicalstructure.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_COMPRESSLOGICALSTRUCTURE_H_
+#define XFA_FXFA_PARSER_CXFA_COMPRESSLOGICALSTRUCTURE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_CompressLogicalStructure : public CXFA_Node {
+ public:
+  CXFA_CompressLogicalStructure(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_CompressLogicalStructure() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_COMPRESSLOGICALSTRUCTURE_H_
diff --git a/xfa/fxfa/parser/cxfa_compressobjectstream.cpp b/xfa/fxfa/parser/cxfa_compressobjectstream.cpp
new file mode 100644
index 0000000..7e51772
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_compressobjectstream.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_compressobjectstream.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"compressObjectStream";
+
+}  // namespace
+
+CXFA_CompressObjectStream::CXFA_CompressObjectStream(CXFA_Document* doc,
+                                                     XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::CompressObjectStream,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_CompressObjectStream::~CXFA_CompressObjectStream() {}
diff --git a/xfa/fxfa/parser/cxfa_compressobjectstream.h b/xfa/fxfa/parser/cxfa_compressobjectstream.h
new file mode 100644
index 0000000..2a72521
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_compressobjectstream.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_COMPRESSOBJECTSTREAM_H_
+#define XFA_FXFA_PARSER_CXFA_COMPRESSOBJECTSTREAM_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_CompressObjectStream : public CXFA_Node {
+ public:
+  CXFA_CompressObjectStream(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_CompressObjectStream() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_COMPRESSOBJECTSTREAM_H_
diff --git a/xfa/fxfa/parser/cxfa_config.cpp b/xfa/fxfa/parser/cxfa_config.cpp
new file mode 100644
index 0000000..5e02534
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_config.cpp
@@ -0,0 +1,32 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_config.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Present, 1, 0},
+                                                 {XFA_Element::Acrobat, 1, 0},
+                                                 {XFA_Element::Trace, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"config";
+
+}  // namespace
+
+CXFA_Config::CXFA_Config(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ModelNode,
+                XFA_Element::Config,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Config::~CXFA_Config() {}
diff --git a/xfa/fxfa/parser/cxfa_config.h b/xfa/fxfa/parser/cxfa_config.h
new file mode 100644
index 0000000..e995380
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_config.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_CONFIG_H_
+#define XFA_FXFA_PARSER_CXFA_CONFIG_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Config : public CXFA_Node {
+ public:
+  CXFA_Config(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Config() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_CONFIG_H_
diff --git a/xfa/fxfa/parser/cxfa_conformance.cpp b/xfa/fxfa/parser/cxfa_conformance.cpp
new file mode 100644
index 0000000..6777473
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_conformance.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_conformance.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"conformance";
+
+}  // namespace
+
+CXFA_Conformance::CXFA_Conformance(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Conformance,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Conformance::~CXFA_Conformance() {}
diff --git a/xfa/fxfa/parser/cxfa_conformance.h b/xfa/fxfa/parser/cxfa_conformance.h
new file mode 100644
index 0000000..bb0b765
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_conformance.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_CONFORMANCE_H_
+#define XFA_FXFA_PARSER_CXFA_CONFORMANCE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Conformance : public CXFA_Node {
+ public:
+  CXFA_Conformance(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Conformance() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_CONFORMANCE_H_
diff --git a/xfa/fxfa/parser/cxfa_connect.cpp b/xfa/fxfa/parser/cxfa_connect.cpp
new file mode 100644
index 0000000..145eff6
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_connect.cpp
@@ -0,0 +1,38 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_connect.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::Picture, 1, 0},
+    {XFA_Element::ConnectString, 1, 0},
+    {XFA_Element::User, 1, 0},
+    {XFA_Element::Password, 1, 0},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,     XFA_Attribute::Name,    XFA_Attribute::Ref,
+    XFA_Attribute::Use,    XFA_Attribute::Timeout, XFA_Attribute::Connection,
+    XFA_Attribute::Usage,  XFA_Attribute::Usehref, XFA_Attribute::DelayedOpen,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"connect";
+
+}  // namespace
+
+CXFA_Connect::CXFA_Connect(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_SourceSet | XFA_XDPPACKET_Template |
+                 XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Connect,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Connect::~CXFA_Connect() {}
diff --git a/xfa/fxfa/parser/cxfa_connect.h b/xfa/fxfa/parser/cxfa_connect.h
new file mode 100644
index 0000000..a052c9c
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_connect.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_CONNECT_H_
+#define XFA_FXFA_PARSER_CXFA_CONNECT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Connect : public CXFA_Node {
+ public:
+  CXFA_Connect(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Connect() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_CONNECT_H_
diff --git a/xfa/fxfa/parser/cxfa_connectionset.cpp b/xfa/fxfa/parser/cxfa_connectionset.cpp
new file mode 100644
index 0000000..9f0d1a4
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_connectionset.cpp
@@ -0,0 +1,25 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_connectionset.h"
+
+namespace {
+
+constexpr wchar_t kName[] = L"connectionSet";
+
+}  // namespace
+
+CXFA_ConnectionSet::CXFA_ConnectionSet(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_ConnectionSet,
+                XFA_ObjectType::ModelNode,
+                XFA_Element::ConnectionSet,
+                nullptr,
+                nullptr,
+                kName) {}
+
+CXFA_ConnectionSet::~CXFA_ConnectionSet() {}
diff --git a/xfa/fxfa/parser/cxfa_connectionset.h b/xfa/fxfa/parser/cxfa_connectionset.h
new file mode 100644
index 0000000..cf36cda
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_connectionset.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_CONNECTIONSET_H_
+#define XFA_FXFA_PARSER_CXFA_CONNECTIONSET_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_ConnectionSet : public CXFA_Node {
+ public:
+  CXFA_ConnectionSet(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_ConnectionSet() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_CONNECTIONSET_H_
diff --git a/xfa/fxfa/parser/cxfa_connectstring.cpp b/xfa/fxfa/parser/cxfa_connectstring.cpp
new file mode 100644
index 0000000..047f459
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_connectstring.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_connectstring.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Name, XFA_Attribute::Use,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"connectString";
+
+}  // namespace
+
+CXFA_ConnectString::CXFA_ConnectString(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_SourceSet,
+                XFA_ObjectType::TextNode,
+                XFA_Element::ConnectString,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_ConnectString::~CXFA_ConnectString() {}
diff --git a/xfa/fxfa/parser/cxfa_connectstring.h b/xfa/fxfa/parser/cxfa_connectstring.h
new file mode 100644
index 0000000..f60d937
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_connectstring.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_CONNECTSTRING_H_
+#define XFA_FXFA_PARSER_CXFA_CONNECTSTRING_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_ConnectString : public CXFA_Node {
+ public:
+  CXFA_ConnectString(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_ConnectString() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_CONNECTSTRING_H_
diff --git a/xfa/fxfa/parser/cxfa_contentarea.cpp b/xfa/fxfa/parser/cxfa_contentarea.cpp
new file mode 100644
index 0000000..e153752
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_contentarea.cpp
@@ -0,0 +1,34 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_contentarea.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Desc, 1, 0},
+                                                 {XFA_Element::Extras, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::H,      XFA_Attribute::W,        XFA_Attribute::X,
+    XFA_Attribute::Y,      XFA_Attribute::Id,       XFA_Attribute::Name,
+    XFA_Attribute::Use,    XFA_Attribute::Relevant, XFA_Attribute::Usehref,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"contentArea";
+
+}  // namespace
+
+CXFA_ContentArea::CXFA_ContentArea(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::ContainerNode,
+                XFA_Element::ContentArea,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_ContentArea::~CXFA_ContentArea() {}
diff --git a/xfa/fxfa/parser/cxfa_contentarea.h b/xfa/fxfa/parser/cxfa_contentarea.h
new file mode 100644
index 0000000..4977681
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_contentarea.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_CONTENTAREA_H_
+#define XFA_FXFA_PARSER_CXFA_CONTENTAREA_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_ContentArea : public CXFA_Node {
+ public:
+  CXFA_ContentArea(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_ContentArea() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_CONTENTAREA_H_
diff --git a/xfa/fxfa/parser/cxfa_contentcopy.cpp b/xfa/fxfa/parser/cxfa_contentcopy.cpp
new file mode 100644
index 0000000..7a3b797
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_contentcopy.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_contentcopy.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"contentCopy";
+
+}  // namespace
+
+CXFA_ContentCopy::CXFA_ContentCopy(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::ContentCopy,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_ContentCopy::~CXFA_ContentCopy() {}
diff --git a/xfa/fxfa/parser/cxfa_contentcopy.h b/xfa/fxfa/parser/cxfa_contentcopy.h
new file mode 100644
index 0000000..d7a3e15
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_contentcopy.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_CONTENTCOPY_H_
+#define XFA_FXFA_PARSER_CXFA_CONTENTCOPY_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_ContentCopy : public CXFA_Node {
+ public:
+  CXFA_ContentCopy(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_ContentCopy() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_CONTENTCOPY_H_
diff --git a/xfa/fxfa/parser/cxfa_copies.cpp b/xfa/fxfa/parser/cxfa_copies.cpp
new file mode 100644
index 0000000..2ca087e
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_copies.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_copies.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"copies";
+
+}  // namespace
+
+CXFA_Copies::CXFA_Copies(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Copies,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Copies::~CXFA_Copies() {}
diff --git a/xfa/fxfa/parser/cxfa_copies.h b/xfa/fxfa/parser/cxfa_copies.h
new file mode 100644
index 0000000..00128e3
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_copies.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_COPIES_H_
+#define XFA_FXFA_PARSER_CXFA_COPIES_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Copies : public CXFA_Node {
+ public:
+  CXFA_Copies(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Copies() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_COPIES_H_
diff --git a/xfa/fxfa/parser/cxfa_corner.cpp b/xfa/fxfa/parser/cxfa_corner.cpp
new file mode 100644
index 0000000..be1751b
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_corner.cpp
@@ -0,0 +1,34 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_corner.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Color, 1, 0},
+                                                 {XFA_Element::Extras, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,       XFA_Attribute::Use,      XFA_Attribute::Stroke,
+    XFA_Attribute::Presence, XFA_Attribute::Inverted, XFA_Attribute::Thickness,
+    XFA_Attribute::Usehref,  XFA_Attribute::Join,     XFA_Attribute::Radius,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"corner";
+
+}  // namespace
+
+CXFA_Corner::CXFA_Corner(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Corner,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Corner::~CXFA_Corner() {}
diff --git a/xfa/fxfa/parser/cxfa_corner.h b/xfa/fxfa/parser/cxfa_corner.h
new file mode 100644
index 0000000..44b40a0
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_corner.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_CORNER_H_
+#define XFA_FXFA_PARSER_CXFA_CORNER_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Corner : public CXFA_Node {
+ public:
+  CXFA_Corner(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Corner() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_CORNER_H_
diff --git a/xfa/fxfa/parser/cxfa_creator.cpp b/xfa/fxfa/parser/cxfa_creator.cpp
new file mode 100644
index 0000000..4913a86
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_creator.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_creator.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"creator";
+
+}  // namespace
+
+CXFA_Creator::CXFA_Creator(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Creator,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Creator::~CXFA_Creator() {}
diff --git a/xfa/fxfa/parser/cxfa_creator.h b/xfa/fxfa/parser/cxfa_creator.h
new file mode 100644
index 0000000..d9c9238
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_creator.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_CREATOR_H_
+#define XFA_FXFA_PARSER_CXFA_CREATOR_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Creator : public CXFA_Node {
+ public:
+  CXFA_Creator(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Creator() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_CREATOR_H_
diff --git a/xfa/fxfa/parser/cxfa_currencysymbol.cpp b/xfa/fxfa/parser/cxfa_currencysymbol.cpp
new file mode 100644
index 0000000..170aa80b
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_currencysymbol.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_currencysymbol.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Name,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"currencySymbol";
+
+}  // namespace
+
+CXFA_CurrencySymbol::CXFA_CurrencySymbol(CXFA_Document* doc,
+                                         XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_LocaleSet,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::CurrencySymbol,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_CurrencySymbol::~CXFA_CurrencySymbol() {}
diff --git a/xfa/fxfa/parser/cxfa_currencysymbol.h b/xfa/fxfa/parser/cxfa_currencysymbol.h
new file mode 100644
index 0000000..6cdb024
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_currencysymbol.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_CURRENCYSYMBOL_H_
+#define XFA_FXFA_PARSER_CXFA_CURRENCYSYMBOL_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_CurrencySymbol : public CXFA_Node {
+ public:
+  CXFA_CurrencySymbol(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_CurrencySymbol() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_CURRENCYSYMBOL_H_
diff --git a/xfa/fxfa/parser/cxfa_currencysymbols.cpp b/xfa/fxfa/parser/cxfa_currencysymbols.cpp
new file mode 100644
index 0000000..24d8196
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_currencysymbols.cpp
@@ -0,0 +1,30 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_currencysymbols.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::CurrencySymbol, 3, 0},
+    {XFA_Element::Unknown, 0, 0}};
+
+constexpr wchar_t kName[] = L"currencySymbols";
+
+}  // namespace
+
+CXFA_CurrencySymbols::CXFA_CurrencySymbols(CXFA_Document* doc,
+                                           XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_LocaleSet,
+                XFA_ObjectType::Node,
+                XFA_Element::CurrencySymbols,
+                kPropertyData,
+                nullptr,
+                kName) {}
+
+CXFA_CurrencySymbols::~CXFA_CurrencySymbols() {}
diff --git a/xfa/fxfa/parser/cxfa_currencysymbols.h b/xfa/fxfa/parser/cxfa_currencysymbols.h
new file mode 100644
index 0000000..764f877
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_currencysymbols.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_CURRENCYSYMBOLS_H_
+#define XFA_FXFA_PARSER_CXFA_CURRENCYSYMBOLS_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_CurrencySymbols : public CXFA_Node {
+ public:
+  CXFA_CurrencySymbols(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_CurrencySymbols() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_CURRENCYSYMBOLS_H_
diff --git a/xfa/fxfa/parser/cxfa_currentpage.cpp b/xfa/fxfa/parser/cxfa_currentpage.cpp
new file mode 100644
index 0000000..0ad8861
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_currentpage.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_currentpage.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"currentPage";
+
+}  // namespace
+
+CXFA_CurrentPage::CXFA_CurrentPage(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::CurrentPage,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_CurrentPage::~CXFA_CurrentPage() {}
diff --git a/xfa/fxfa/parser/cxfa_currentpage.h b/xfa/fxfa/parser/cxfa_currentpage.h
new file mode 100644
index 0000000..55e4b54
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_currentpage.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_CURRENTPAGE_H_
+#define XFA_FXFA_PARSER_CXFA_CURRENTPAGE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_CurrentPage : public CXFA_Node {
+ public:
+  CXFA_CurrentPage(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_CurrentPage() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_CURRENTPAGE_H_
diff --git a/xfa/fxfa/parser/cxfa_data.cpp b/xfa/fxfa/parser/cxfa_data.cpp
new file mode 100644
index 0000000..2e7d4c7
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_data.cpp
@@ -0,0 +1,35 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_data.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::Uri, 1, 0},        {XFA_Element::Xsl, 1, 0},
+    {XFA_Element::StartNode, 1, 0},  {XFA_Element::OutputXSL, 1, 0},
+    {XFA_Element::AdjustData, 1, 0}, {XFA_Element::Attributes, 1, 0},
+    {XFA_Element::Window, 1, 0},     {XFA_Element::Record, 1, 0},
+    {XFA_Element::Range, 1, 0},      {XFA_Element::IncrementalLoad, 1, 0},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"data";
+
+}  // namespace
+
+CXFA_Data::CXFA_Data(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::Data,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Data::~CXFA_Data() {}
diff --git a/xfa/fxfa/parser/cxfa_data.h b/xfa/fxfa/parser/cxfa_data.h
new file mode 100644
index 0000000..a294ac6
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_data.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_DATA_H_
+#define XFA_FXFA_PARSER_CXFA_DATA_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Data : public CXFA_Node {
+ public:
+  CXFA_Data(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Data() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_DATA_H_
diff --git a/xfa/fxfa/parser/cxfa_dataexporter.cpp b/xfa/fxfa/parser/cxfa_dataexporter.cpp
index e8a3771..f28649f 100644
--- a/xfa/fxfa/parser/cxfa_dataexporter.cpp
+++ b/xfa/fxfa/parser/cxfa_dataexporter.cpp
@@ -170,11 +170,12 @@
                                 CFX_WideTextBuf& buf,
                                 bool bSaveXML) {
   WideString wsAttrs;
-  int32_t iAttrs = 0;
-  const XFA_Attribute* pAttrs =
-      XFA_GetElementAttributes(pNode->GetElementType(), iAttrs);
-  while (iAttrs--) {
-    const XFA_ATTRIBUTEINFO* pAttr = XFA_GetAttributeByID(pAttrs[iAttrs]);
+  for (size_t i = 0;; ++i) {
+    XFA_Attribute attr = pNode->GetAttribute(i);
+    if (attr == XFA_Attribute::Unknown)
+      break;
+
+    const XFA_ATTRIBUTEINFO* pAttr = XFA_GetAttributeByID(attr);
     if (pAttr->eName == XFA_Attribute::Name ||
         (AttributeSaveInDataModel(pNode, pAttr->eName) && !bSaveXML)) {
       continue;
@@ -355,11 +356,12 @@
   SaveAttribute(pNode, XFA_Attribute::Name, L"name", true, wsOutput);
 
   WideString wsAttrs;
-  int32_t iAttrs = 0;
-  const XFA_Attribute* pAttrs =
-      XFA_GetElementAttributes(pNode->GetElementType(), iAttrs);
-  while (iAttrs--) {
-    const XFA_ATTRIBUTEINFO* pAttr = XFA_GetAttributeByID(pAttrs[iAttrs]);
+  for (size_t i = 0;; ++i) {
+    XFA_Attribute attr = pNode->GetAttribute(i);
+    if (attr == XFA_Attribute::Unknown)
+      break;
+
+    const XFA_ATTRIBUTEINFO* pAttr = XFA_GetAttributeByID(attr);
     if (pAttr->eName == XFA_Attribute::Name)
       continue;
 
diff --git a/xfa/fxfa/parser/cxfa_datagroup.cpp b/xfa/fxfa/parser/cxfa_datagroup.cpp
new file mode 100644
index 0000000..3a6431c
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_datagroup.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_datagroup.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Name,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"dataGroup";
+
+}  // namespace
+
+CXFA_DataGroup::CXFA_DataGroup(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Datasets,
+                XFA_ObjectType::Node,
+                XFA_Element::DataGroup,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_DataGroup::~CXFA_DataGroup() {}
diff --git a/xfa/fxfa/parser/cxfa_datagroup.h b/xfa/fxfa/parser/cxfa_datagroup.h
new file mode 100644
index 0000000..6bc432d
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_datagroup.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_DATAGROUP_H_
+#define XFA_FXFA_PARSER_CXFA_DATAGROUP_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_DataGroup : public CXFA_Node {
+ public:
+  CXFA_DataGroup(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_DataGroup() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_DATAGROUP_H_
diff --git a/xfa/fxfa/parser/cxfa_datamodel.cpp b/xfa/fxfa/parser/cxfa_datamodel.cpp
new file mode 100644
index 0000000..c100115
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_datamodel.cpp
@@ -0,0 +1,25 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_datamodel.h"
+
+namespace {
+
+constexpr wchar_t kName[] = L"dataModel";
+
+}  // namespace
+
+CXFA_DataModel::CXFA_DataModel(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Datasets,
+                XFA_ObjectType::ModelNode,
+                XFA_Element::DataModel,
+                nullptr,
+                nullptr,
+                kName) {}
+
+CXFA_DataModel::~CXFA_DataModel() {}
diff --git a/xfa/fxfa/parser/cxfa_datamodel.h b/xfa/fxfa/parser/cxfa_datamodel.h
new file mode 100644
index 0000000..6769d72
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_datamodel.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_DATAMODEL_H_
+#define XFA_FXFA_PARSER_CXFA_DATAMODEL_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_DataModel : public CXFA_Node {
+ public:
+  CXFA_DataModel(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_DataModel() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_DATAMODEL_H_
diff --git a/xfa/fxfa/parser/cxfa_datavalue.cpp b/xfa/fxfa/parser/cxfa_datavalue.cpp
new file mode 100644
index 0000000..542c629
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_datavalue.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_datavalue.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Name,  XFA_Attribute::ContentType, XFA_Attribute::Contains,
+    XFA_Attribute::Value, XFA_Attribute::IsNull,      XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"dataValue";
+
+}  // namespace
+
+CXFA_DataValue::CXFA_DataValue(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Datasets,
+                XFA_ObjectType::Node,
+                XFA_Element::DataValue,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_DataValue::~CXFA_DataValue() {}
diff --git a/xfa/fxfa/parser/cxfa_datavalue.h b/xfa/fxfa/parser/cxfa_datavalue.h
new file mode 100644
index 0000000..7d11f85
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_datavalue.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_DATAVALUE_H_
+#define XFA_FXFA_PARSER_CXFA_DATAVALUE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_DataValue : public CXFA_Node {
+ public:
+  CXFA_DataValue(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_DataValue() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_DATAVALUE_H_
diff --git a/xfa/fxfa/parser/cxfa_datawindow.cpp b/xfa/fxfa/parser/cxfa_datawindow.cpp
new file mode 100644
index 0000000..556bab4
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_datawindow.cpp
@@ -0,0 +1,25 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_datawindow.h"
+
+namespace {
+
+constexpr wchar_t kName[] = L"dataWindow";
+
+}  // namespace
+
+CXFA_DataWindow::CXFA_DataWindow(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Datasets,
+                XFA_ObjectType::Object,
+                XFA_Element::DataWindow,
+                nullptr,
+                nullptr,
+                kName) {}
+
+CXFA_DataWindow::~CXFA_DataWindow() {}
diff --git a/xfa/fxfa/parser/cxfa_datawindow.h b/xfa/fxfa/parser/cxfa_datawindow.h
new file mode 100644
index 0000000..3cafa94
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_datawindow.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_DATAWINDOW_H_
+#define XFA_FXFA_PARSER_CXFA_DATAWINDOW_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_DataWindow : public CXFA_Node {
+ public:
+  CXFA_DataWindow(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_DataWindow() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_DATAWINDOW_H_
diff --git a/xfa/fxfa/parser/cxfa_date.cpp b/xfa/fxfa/parser/cxfa_date.cpp
new file mode 100644
index 0000000..8ee447f
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_date.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_date.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Name, XFA_Attribute::Use,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"date";
+
+}  // namespace
+
+CXFA_Date::CXFA_Date(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Date,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Date::~CXFA_Date() {}
diff --git a/xfa/fxfa/parser/cxfa_date.h b/xfa/fxfa/parser/cxfa_date.h
new file mode 100644
index 0000000..abe47db
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_date.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_DATE_H_
+#define XFA_FXFA_PARSER_CXFA_DATE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Date : public CXFA_Node {
+ public:
+  CXFA_Date(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Date() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_DATE_H_
diff --git a/xfa/fxfa/parser/cxfa_datepattern.cpp b/xfa/fxfa/parser/cxfa_datepattern.cpp
new file mode 100644
index 0000000..17ad9fe
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_datepattern.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_datepattern.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Name,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"datePattern";
+
+}  // namespace
+
+CXFA_DatePattern::CXFA_DatePattern(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_LocaleSet,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::DatePattern,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_DatePattern::~CXFA_DatePattern() {}
diff --git a/xfa/fxfa/parser/cxfa_datepattern.h b/xfa/fxfa/parser/cxfa_datepattern.h
new file mode 100644
index 0000000..b54a78f
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_datepattern.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_DATEPATTERN_H_
+#define XFA_FXFA_PARSER_CXFA_DATEPATTERN_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_DatePattern : public CXFA_Node {
+ public:
+  CXFA_DatePattern(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_DatePattern() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_DATEPATTERN_H_
diff --git a/xfa/fxfa/parser/cxfa_datepatterns.cpp b/xfa/fxfa/parser/cxfa_datepatterns.cpp
new file mode 100644
index 0000000..bf9ce61
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_datepatterns.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_datepatterns.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::DatePattern, 4, 0},
+    {XFA_Element::Unknown, 0, 0}};
+
+constexpr wchar_t kName[] = L"datePatterns";
+
+}  // namespace
+
+CXFA_DatePatterns::CXFA_DatePatterns(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_LocaleSet,
+                XFA_ObjectType::Node,
+                XFA_Element::DatePatterns,
+                kPropertyData,
+                nullptr,
+                kName) {}
+
+CXFA_DatePatterns::~CXFA_DatePatterns() {}
diff --git a/xfa/fxfa/parser/cxfa_datepatterns.h b/xfa/fxfa/parser/cxfa_datepatterns.h
new file mode 100644
index 0000000..a6ca493
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_datepatterns.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_DATEPATTERNS_H_
+#define XFA_FXFA_PARSER_CXFA_DATEPATTERNS_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_DatePatterns : public CXFA_Node {
+ public:
+  CXFA_DatePatterns(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_DatePatterns() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_DATEPATTERNS_H_
diff --git a/xfa/fxfa/parser/cxfa_datetime.cpp b/xfa/fxfa/parser/cxfa_datetime.cpp
new file mode 100644
index 0000000..41d9bb0
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_datetime.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_datetime.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Name, XFA_Attribute::Use,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"dateTime";
+
+}  // namespace
+
+CXFA_DateTime::CXFA_DateTime(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::ContentNode,
+                XFA_Element::DateTime,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_DateTime::~CXFA_DateTime() {}
diff --git a/xfa/fxfa/parser/cxfa_datetime.h b/xfa/fxfa/parser/cxfa_datetime.h
new file mode 100644
index 0000000..6033ee3
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_datetime.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_DATETIME_H_
+#define XFA_FXFA_PARSER_CXFA_DATETIME_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_DateTime : public CXFA_Node {
+ public:
+  CXFA_DateTime(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_DateTime() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_DATETIME_H_
diff --git a/xfa/fxfa/parser/cxfa_datetimeedit.cpp b/xfa/fxfa/parser/cxfa_datetimeedit.cpp
new file mode 100644
index 0000000..55fe0f6
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_datetimeedit.cpp
@@ -0,0 +1,37 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_datetimeedit.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Margin, 1, 0},
+                                                 {XFA_Element::Border, 1, 0},
+                                                 {XFA_Element::Comb, 1, 0},
+                                                 {XFA_Element::Extras, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Id,
+                                        XFA_Attribute::Use,
+                                        XFA_Attribute::Usehref,
+                                        XFA_Attribute::Picker,
+                                        XFA_Attribute::HScrollPolicy,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"dateTimeEdit";
+
+}  // namespace
+
+CXFA_DateTimeEdit::CXFA_DateTimeEdit(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::DateTimeEdit,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_DateTimeEdit::~CXFA_DateTimeEdit() {}
diff --git a/xfa/fxfa/parser/cxfa_datetimeedit.h b/xfa/fxfa/parser/cxfa_datetimeedit.h
new file mode 100644
index 0000000..19463af
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_datetimeedit.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_DATETIMEEDIT_H_
+#define XFA_FXFA_PARSER_CXFA_DATETIMEEDIT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_DateTimeEdit : public CXFA_Node {
+ public:
+  CXFA_DateTimeEdit(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_DateTimeEdit() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_DATETIMEEDIT_H_
diff --git a/xfa/fxfa/parser/cxfa_datetimesymbols.cpp b/xfa/fxfa/parser/cxfa_datetimesymbols.cpp
new file mode 100644
index 0000000..981b13e
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_datetimesymbols.cpp
@@ -0,0 +1,26 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_datetimesymbols.h"
+
+namespace {
+
+constexpr wchar_t kName[] = L"dateTimeSymbols";
+
+}  // namespace
+
+CXFA_DateTimeSymbols::CXFA_DateTimeSymbols(CXFA_Document* doc,
+                                           XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_LocaleSet,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::DateTimeSymbols,
+                nullptr,
+                nullptr,
+                kName) {}
+
+CXFA_DateTimeSymbols::~CXFA_DateTimeSymbols() {}
diff --git a/xfa/fxfa/parser/cxfa_datetimesymbols.h b/xfa/fxfa/parser/cxfa_datetimesymbols.h
new file mode 100644
index 0000000..b837123
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_datetimesymbols.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_DATETIMESYMBOLS_H_
+#define XFA_FXFA_PARSER_CXFA_DATETIMESYMBOLS_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_DateTimeSymbols : public CXFA_Node {
+ public:
+  CXFA_DateTimeSymbols(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_DateTimeSymbols() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_DATETIMESYMBOLS_H_
diff --git a/xfa/fxfa/parser/cxfa_day.cpp b/xfa/fxfa/parser/cxfa_day.cpp
new file mode 100644
index 0000000..0d36dbb
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_day.cpp
@@ -0,0 +1,25 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_day.h"
+
+namespace {
+
+constexpr wchar_t kName[] = L"day";
+
+}  // namespace
+
+CXFA_Day::CXFA_Day(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_LocaleSet,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Day,
+                nullptr,
+                nullptr,
+                kName) {}
+
+CXFA_Day::~CXFA_Day() {}
diff --git a/xfa/fxfa/parser/cxfa_day.h b/xfa/fxfa/parser/cxfa_day.h
new file mode 100644
index 0000000..5cf30ea
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_day.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_DAY_H_
+#define XFA_FXFA_PARSER_CXFA_DAY_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Day : public CXFA_Node {
+ public:
+  CXFA_Day(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Day() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_DAY_H_
diff --git a/xfa/fxfa/parser/cxfa_daynames.cpp b/xfa/fxfa/parser/cxfa_daynames.cpp
new file mode 100644
index 0000000..6099189
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_daynames.cpp
@@ -0,0 +1,30 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_daynames.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Day, 7, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Abbr,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"dayNames";
+
+}  // namespace
+
+CXFA_DayNames::CXFA_DayNames(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_LocaleSet,
+                XFA_ObjectType::Node,
+                XFA_Element::DayNames,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_DayNames::~CXFA_DayNames() {}
diff --git a/xfa/fxfa/parser/cxfa_daynames.h b/xfa/fxfa/parser/cxfa_daynames.h
new file mode 100644
index 0000000..8765908
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_daynames.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_DAYNAMES_H_
+#define XFA_FXFA_PARSER_CXFA_DAYNAMES_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_DayNames : public CXFA_Node {
+ public:
+  CXFA_DayNames(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_DayNames() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_DAYNAMES_H_
diff --git a/xfa/fxfa/parser/cxfa_debug.cpp b/xfa/fxfa/parser/cxfa_debug.cpp
new file mode 100644
index 0000000..3b68742
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_debug.cpp
@@ -0,0 +1,30 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_debug.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Uri, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"debug";
+
+}  // namespace
+
+CXFA_Debug::CXFA_Debug(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::Debug,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Debug::~CXFA_Debug() {}
diff --git a/xfa/fxfa/parser/cxfa_debug.h b/xfa/fxfa/parser/cxfa_debug.h
new file mode 100644
index 0000000..e42ab9f
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_debug.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_DEBUG_H_
+#define XFA_FXFA_PARSER_CXFA_DEBUG_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Debug : public CXFA_Node {
+ public:
+  CXFA_Debug(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Debug() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_DEBUG_H_
diff --git a/xfa/fxfa/parser/cxfa_decimal.cpp b/xfa/fxfa/parser/cxfa_decimal.cpp
new file mode 100644
index 0000000..e9e63fa
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_decimal.cpp
@@ -0,0 +1,31 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_decimal.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,      XFA_Attribute::Name,
+    XFA_Attribute::Use,     XFA_Attribute::FracDigits,
+    XFA_Attribute::Usehref, XFA_Attribute::LeadDigits,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"decimal";
+
+}  // namespace
+
+CXFA_Decimal::CXFA_Decimal(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Decimal,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Decimal::~CXFA_Decimal() {}
diff --git a/xfa/fxfa/parser/cxfa_decimal.h b/xfa/fxfa/parser/cxfa_decimal.h
new file mode 100644
index 0000000..bb19933
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_decimal.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_DECIMAL_H_
+#define XFA_FXFA_PARSER_CXFA_DECIMAL_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Decimal : public CXFA_Node {
+ public:
+  CXFA_Decimal(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Decimal() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_DECIMAL_H_
diff --git a/xfa/fxfa/parser/cxfa_defaulttypeface.cpp b/xfa/fxfa/parser/cxfa_defaulttypeface.cpp
new file mode 100644
index 0000000..6ec981d
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_defaulttypeface.cpp
@@ -0,0 +1,30 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_defaulttypeface.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::WritingScript, XFA_Attribute::Lock,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"defaultTypeface";
+
+}  // namespace
+
+CXFA_DefaultTypeface::CXFA_DefaultTypeface(CXFA_Document* doc,
+                                           XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::NodeV,
+                XFA_Element::DefaultTypeface,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_DefaultTypeface::~CXFA_DefaultTypeface() {}
diff --git a/xfa/fxfa/parser/cxfa_defaulttypeface.h b/xfa/fxfa/parser/cxfa_defaulttypeface.h
new file mode 100644
index 0000000..31ea0d4
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_defaulttypeface.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_DEFAULTTYPEFACE_H_
+#define XFA_FXFA_PARSER_CXFA_DEFAULTTYPEFACE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_DefaultTypeface : public CXFA_Node {
+ public:
+  CXFA_DefaultTypeface(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_DefaultTypeface() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_DEFAULTTYPEFACE_H_
diff --git a/xfa/fxfa/parser/cxfa_defaultui.cpp b/xfa/fxfa/parser/cxfa_defaultui.cpp
new file mode 100644
index 0000000..56c1d76
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_defaultui.cpp
@@ -0,0 +1,31 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_defaultui.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Extras, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Id, XFA_Attribute::Use,
+                                        XFA_Attribute::Usehref,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"defaultUi";
+
+}  // namespace
+
+CXFA_DefaultUi::CXFA_DefaultUi(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::DefaultUi,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_DefaultUi::~CXFA_DefaultUi() {}
diff --git a/xfa/fxfa/parser/cxfa_defaultui.h b/xfa/fxfa/parser/cxfa_defaultui.h
new file mode 100644
index 0000000..27dc961
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_defaultui.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_DEFAULTUI_H_
+#define XFA_FXFA_PARSER_CXFA_DEFAULTUI_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_DefaultUi : public CXFA_Node {
+ public:
+  CXFA_DefaultUi(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_DefaultUi() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_DEFAULTUI_H_
diff --git a/xfa/fxfa/parser/cxfa_delete.cpp b/xfa/fxfa/parser/cxfa_delete.cpp
new file mode 100644
index 0000000..d0f412e
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_delete.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_delete.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Name, XFA_Attribute::Use,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"delete";
+
+}  // namespace
+
+CXFA_Delete::CXFA_Delete(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_SourceSet,
+                XFA_ObjectType::TextNode,
+                XFA_Element::Delete,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Delete::~CXFA_Delete() {}
diff --git a/xfa/fxfa/parser/cxfa_delete.h b/xfa/fxfa/parser/cxfa_delete.h
new file mode 100644
index 0000000..f39d2e6
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_delete.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_DELETE_H_
+#define XFA_FXFA_PARSER_CXFA_DELETE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Delete : public CXFA_Node {
+ public:
+  CXFA_Delete(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Delete() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_DELETE_H_
diff --git a/xfa/fxfa/parser/cxfa_delta.cpp b/xfa/fxfa/parser/cxfa_delta.cpp
new file mode 100644
index 0000000..c5da9c3
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_delta.cpp
@@ -0,0 +1,25 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_delta.h"
+
+namespace {
+
+constexpr wchar_t kName[] = L"delta";
+
+}  // namespace
+
+CXFA_Delta::CXFA_Delta(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Form,
+                XFA_ObjectType::Object,
+                XFA_Element::Delta,
+                nullptr,
+                nullptr,
+                kName) {}
+
+CXFA_Delta::~CXFA_Delta() {}
diff --git a/xfa/fxfa/parser/cxfa_delta.h b/xfa/fxfa/parser/cxfa_delta.h
new file mode 100644
index 0000000..249ffb9
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_delta.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_DELTA_H_
+#define XFA_FXFA_PARSER_CXFA_DELTA_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Delta : public CXFA_Node {
+ public:
+  CXFA_Delta(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Delta() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_DELTA_H_
diff --git a/xfa/fxfa/parser/cxfa_deltas.cpp b/xfa/fxfa/parser/cxfa_deltas.cpp
new file mode 100644
index 0000000..89ef3a5
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_deltas.cpp
@@ -0,0 +1,25 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_deltas.h"
+
+namespace {
+
+constexpr wchar_t kName[] = L"deltas";
+
+}  // namespace
+
+CXFA_Deltas::CXFA_Deltas(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Form,
+                XFA_ObjectType::Object,
+                XFA_Element::Deltas,
+                nullptr,
+                nullptr,
+                kName) {}
+
+CXFA_Deltas::~CXFA_Deltas() {}
diff --git a/xfa/fxfa/parser/cxfa_deltas.h b/xfa/fxfa/parser/cxfa_deltas.h
new file mode 100644
index 0000000..a996cd5
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_deltas.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_DELTAS_H_
+#define XFA_FXFA_PARSER_CXFA_DELTAS_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Deltas : public CXFA_Node {
+ public:
+  CXFA_Deltas(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Deltas() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_DELTAS_H_
diff --git a/xfa/fxfa/parser/cxfa_desc.cpp b/xfa/fxfa/parser/cxfa_desc.cpp
new file mode 100644
index 0000000..7f2bea6
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_desc.cpp
@@ -0,0 +1,36 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_desc.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::Text, 1, 0},     {XFA_Element::Time, 1, 0},
+    {XFA_Element::DateTime, 1, 0}, {XFA_Element::Image, 1, 0},
+    {XFA_Element::Decimal, 1, 0},  {XFA_Element::Boolean, 1, 0},
+    {XFA_Element::Integer, 1, 0},  {XFA_Element::ExData, 1, 0},
+    {XFA_Element::Date, 1, 0},     {XFA_Element::Float, 1, 0},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Id, XFA_Attribute::Use,
+                                        XFA_Attribute::Usehref,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"desc";
+
+}  // namespace
+
+CXFA_Desc::CXFA_Desc(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Desc,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Desc::~CXFA_Desc() {}
diff --git a/xfa/fxfa/parser/cxfa_desc.h b/xfa/fxfa/parser/cxfa_desc.h
new file mode 100644
index 0000000..0ccd3b4
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_desc.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_DESC_H_
+#define XFA_FXFA_PARSER_CXFA_DESC_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Desc : public CXFA_Node {
+ public:
+  CXFA_Desc(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Desc() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_DESC_H_
diff --git a/xfa/fxfa/parser/cxfa_destination.cpp b/xfa/fxfa/parser/cxfa_destination.cpp
new file mode 100644
index 0000000..5787b6b
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_destination.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_destination.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"destination";
+
+}  // namespace
+
+CXFA_Destination::CXFA_Destination(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Destination,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Destination::~CXFA_Destination() {}
diff --git a/xfa/fxfa/parser/cxfa_destination.h b/xfa/fxfa/parser/cxfa_destination.h
new file mode 100644
index 0000000..80513c0
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_destination.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_DESTINATION_H_
+#define XFA_FXFA_PARSER_CXFA_DESTINATION_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Destination : public CXFA_Node {
+ public:
+  CXFA_Destination(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Destination() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_DESTINATION_H_
diff --git a/xfa/fxfa/parser/cxfa_digestmethod.cpp b/xfa/fxfa/parser/cxfa_digestmethod.cpp
new file mode 100644
index 0000000..a651ffa
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_digestmethod.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_digestmethod.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Id, XFA_Attribute::Use,
+                                        XFA_Attribute::Usehref,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"digestMethod";
+
+}  // namespace
+
+CXFA_DigestMethod::CXFA_DigestMethod(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::NodeC,
+                XFA_Element::DigestMethod,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_DigestMethod::~CXFA_DigestMethod() {}
diff --git a/xfa/fxfa/parser/cxfa_digestmethod.h b/xfa/fxfa/parser/cxfa_digestmethod.h
new file mode 100644
index 0000000..c0d15ed
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_digestmethod.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_DIGESTMETHOD_H_
+#define XFA_FXFA_PARSER_CXFA_DIGESTMETHOD_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_DigestMethod : public CXFA_Node {
+ public:
+  CXFA_DigestMethod(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_DigestMethod() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_DIGESTMETHOD_H_
diff --git a/xfa/fxfa/parser/cxfa_digestmethods.cpp b/xfa/fxfa/parser/cxfa_digestmethods.cpp
new file mode 100644
index 0000000..3832462
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_digestmethods.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_digestmethods.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Use, XFA_Attribute::Type,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"digestMethods";
+
+}  // namespace
+
+CXFA_DigestMethods::CXFA_DigestMethods(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::DigestMethods,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_DigestMethods::~CXFA_DigestMethods() {}
diff --git a/xfa/fxfa/parser/cxfa_digestmethods.h b/xfa/fxfa/parser/cxfa_digestmethods.h
new file mode 100644
index 0000000..7978007
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_digestmethods.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_DIGESTMETHODS_H_
+#define XFA_FXFA_PARSER_CXFA_DIGESTMETHODS_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_DigestMethods : public CXFA_Node {
+ public:
+  CXFA_DigestMethods(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_DigestMethods() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_DIGESTMETHODS_H_
diff --git a/xfa/fxfa/parser/cxfa_document.cpp b/xfa/fxfa/parser/cxfa_document.cpp
index bdb8d9a..3fc5c39 100644
--- a/xfa/fxfa/parser/cxfa_document.cpp
+++ b/xfa/fxfa/parser/cxfa_document.cpp
@@ -219,15 +219,14 @@
 
 CXFA_Node* CXFA_Document::CreateNode(const XFA_PACKETINFO* pPacket,
                                      XFA_Element eElement) {
-  if (!pPacket)
-    return nullptr;
-
-  const XFA_ELEMENTINFO* pElement = XFA_GetElementByID(eElement);
-  if (!pElement || !(pElement->dwPackets & pPacket->eName))
+  if (!pPacket || eElement == XFA_Element::Unknown)
     return nullptr;
 
   std::unique_ptr<CXFA_Node> pNode =
-      CXFA_Node::Create(this, pPacket->eName, pElement);
+      CXFA_Node::Create(this, eElement, pPacket->eName);
+  if (!pNode)
+    return nullptr;
+
   // TODO(dsinclair): AddPrugeNode should take ownership of the pointer.
   AddPurgeNode(pNode.get());
   return pNode.release();
diff --git a/xfa/fxfa/parser/cxfa_documentassembly.cpp b/xfa/fxfa/parser/cxfa_documentassembly.cpp
new file mode 100644
index 0000000..c8b5763
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_documentassembly.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_documentassembly.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"documentAssembly";
+
+}  // namespace
+
+CXFA_DocumentAssembly::CXFA_DocumentAssembly(CXFA_Document* doc,
+                                             XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::DocumentAssembly,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_DocumentAssembly::~CXFA_DocumentAssembly() {}
diff --git a/xfa/fxfa/parser/cxfa_documentassembly.h b/xfa/fxfa/parser/cxfa_documentassembly.h
new file mode 100644
index 0000000..b7b82e8
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_documentassembly.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_DOCUMENTASSEMBLY_H_
+#define XFA_FXFA_PARSER_CXFA_DOCUMENTASSEMBLY_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_DocumentAssembly : public CXFA_Node {
+ public:
+  CXFA_DocumentAssembly(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_DocumentAssembly() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_DOCUMENTASSEMBLY_H_
diff --git a/xfa/fxfa/parser/cxfa_draw.cpp b/xfa/fxfa/parser/cxfa_draw.cpp
new file mode 100644
index 0000000..f8c88e9
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_draw.cpp
@@ -0,0 +1,42 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_draw.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::Ui, 1, 0},     {XFA_Element::Margin, 1, 0},
+    {XFA_Element::Para, 1, 0},   {XFA_Element::Border, 1, 0},
+    {XFA_Element::Assist, 1, 0}, {XFA_Element::Traversal, 1, 0},
+    {XFA_Element::Keep, 1, 0},   {XFA_Element::Caption, 1, 0},
+    {XFA_Element::Desc, 1, 0},   {XFA_Element::Font, 1, 0},
+    {XFA_Element::Value, 1, 0},  {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::H,        XFA_Attribute::W,          XFA_Attribute::X,
+    XFA_Attribute::Y,        XFA_Attribute::Id,         XFA_Attribute::HAlign,
+    XFA_Attribute::Name,     XFA_Attribute::Use,        XFA_Attribute::Rotate,
+    XFA_Attribute::Presence, XFA_Attribute::VAlign,     XFA_Attribute::MaxH,
+    XFA_Attribute::MaxW,     XFA_Attribute::MinH,       XFA_Attribute::MinW,
+    XFA_Attribute::Relevant, XFA_Attribute::ColSpan,    XFA_Attribute::Usehref,
+    XFA_Attribute::Locale,   XFA_Attribute::AnchorType, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"draw";
+
+}  // namespace
+
+CXFA_Draw::CXFA_Draw(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::ContainerNode,
+                XFA_Element::Draw,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Draw::~CXFA_Draw() {}
diff --git a/xfa/fxfa/parser/cxfa_draw.h b/xfa/fxfa/parser/cxfa_draw.h
new file mode 100644
index 0000000..9ca22b6
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_draw.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_DRAW_H_
+#define XFA_FXFA_PARSER_CXFA_DRAW_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Draw : public CXFA_Node {
+ public:
+  CXFA_Draw(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Draw() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_DRAW_H_
diff --git a/xfa/fxfa/parser/cxfa_driver.cpp b/xfa/fxfa/parser/cxfa_driver.cpp
new file mode 100644
index 0000000..f6689ef
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_driver.cpp
@@ -0,0 +1,32 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_driver.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::FontInfo, 1, 0},
+                                                 {XFA_Element::Xdc, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Name, XFA_Attribute::Desc, XFA_Attribute::Lock,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"driver";
+
+}  // namespace
+
+CXFA_Driver::CXFA_Driver(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::Driver,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Driver::~CXFA_Driver() {}
diff --git a/xfa/fxfa/parser/cxfa_driver.h b/xfa/fxfa/parser/cxfa_driver.h
new file mode 100644
index 0000000..781a69b
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_driver.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_DRIVER_H_
+#define XFA_FXFA_PARSER_CXFA_DRIVER_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Driver : public CXFA_Node {
+ public:
+  CXFA_Driver(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Driver() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_DRIVER_H_
diff --git a/xfa/fxfa/parser/cxfa_dsigdata.cpp b/xfa/fxfa/parser/cxfa_dsigdata.cpp
new file mode 100644
index 0000000..0dd8841
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_dsigdata.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_dsigdata.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Value,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"dSigData";
+
+}  // namespace
+
+CXFA_DSigData::CXFA_DSigData(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::DSigData,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_DSigData::~CXFA_DSigData() {}
diff --git a/xfa/fxfa/parser/cxfa_dsigdata.h b/xfa/fxfa/parser/cxfa_dsigdata.h
new file mode 100644
index 0000000..00b61e3
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_dsigdata.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_DSIGDATA_H_
+#define XFA_FXFA_PARSER_CXFA_DSIGDATA_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_DSigData : public CXFA_Node {
+ public:
+  CXFA_DSigData(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_DSigData() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_DSIGDATA_H_
diff --git a/xfa/fxfa/parser/cxfa_duplexoption.cpp b/xfa/fxfa/parser/cxfa_duplexoption.cpp
new file mode 100644
index 0000000..67d898e
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_duplexoption.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_duplexoption.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"duplexOption";
+
+}  // namespace
+
+CXFA_DuplexOption::CXFA_DuplexOption(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::DuplexOption,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_DuplexOption::~CXFA_DuplexOption() {}
diff --git a/xfa/fxfa/parser/cxfa_duplexoption.h b/xfa/fxfa/parser/cxfa_duplexoption.h
new file mode 100644
index 0000000..a9f8f17
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_duplexoption.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_DUPLEXOPTION_H_
+#define XFA_FXFA_PARSER_CXFA_DUPLEXOPTION_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_DuplexOption : public CXFA_Node {
+ public:
+  CXFA_DuplexOption(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_DuplexOption() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_DUPLEXOPTION_H_
diff --git a/xfa/fxfa/parser/cxfa_dynamicrender.cpp b/xfa/fxfa/parser/cxfa_dynamicrender.cpp
new file mode 100644
index 0000000..d2e04f8
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_dynamicrender.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_dynamicrender.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"dynamicRender";
+
+}  // namespace
+
+CXFA_DynamicRender::CXFA_DynamicRender(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::DynamicRender,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_DynamicRender::~CXFA_DynamicRender() {}
diff --git a/xfa/fxfa/parser/cxfa_dynamicrender.h b/xfa/fxfa/parser/cxfa_dynamicrender.h
new file mode 100644
index 0000000..1856957
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_dynamicrender.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_DYNAMICRENDER_H_
+#define XFA_FXFA_PARSER_CXFA_DYNAMICRENDER_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_DynamicRender : public CXFA_Node {
+ public:
+  CXFA_DynamicRender(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_DynamicRender() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_DYNAMICRENDER_H_
diff --git a/xfa/fxfa/parser/cxfa_edge.cpp b/xfa/fxfa/parser/cxfa_edge.cpp
new file mode 100644
index 0000000..7bfd581
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_edge.cpp
@@ -0,0 +1,33 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_edge.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Color, 1, 0},
+                                                 {XFA_Element::Extras, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,      XFA_Attribute::Cap,      XFA_Attribute::Use,
+    XFA_Attribute::Stroke,  XFA_Attribute::Presence, XFA_Attribute::Thickness,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"edge";
+
+}  // namespace
+
+CXFA_Edge::CXFA_Edge(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Edge,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Edge::~CXFA_Edge() {}
diff --git a/xfa/fxfa/parser/cxfa_edge.h b/xfa/fxfa/parser/cxfa_edge.h
new file mode 100644
index 0000000..fa02e06
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_edge.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_EDGE_H_
+#define XFA_FXFA_PARSER_CXFA_EDGE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Edge : public CXFA_Node {
+ public:
+  CXFA_Edge(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Edge() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_EDGE_H_
diff --git a/xfa/fxfa/parser/cxfa_effectiveinputpolicy.cpp b/xfa/fxfa/parser/cxfa_effectiveinputpolicy.cpp
new file mode 100644
index 0000000..457d831
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_effectiveinputpolicy.cpp
@@ -0,0 +1,30 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_effectiveinputpolicy.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Name, XFA_Attribute::Use,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"effectiveInputPolicy";
+
+}  // namespace
+
+CXFA_EffectiveInputPolicy::CXFA_EffectiveInputPolicy(CXFA_Document* doc,
+                                                     XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_ConnectionSet,
+                XFA_ObjectType::Node,
+                XFA_Element::EffectiveInputPolicy,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_EffectiveInputPolicy::~CXFA_EffectiveInputPolicy() {}
diff --git a/xfa/fxfa/parser/cxfa_effectiveinputpolicy.h b/xfa/fxfa/parser/cxfa_effectiveinputpolicy.h
new file mode 100644
index 0000000..a88ae98
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_effectiveinputpolicy.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_EFFECTIVEINPUTPOLICY_H_
+#define XFA_FXFA_PARSER_CXFA_EFFECTIVEINPUTPOLICY_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_EffectiveInputPolicy : public CXFA_Node {
+ public:
+  CXFA_EffectiveInputPolicy(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_EffectiveInputPolicy() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_EFFECTIVEINPUTPOLICY_H_
diff --git a/xfa/fxfa/parser/cxfa_effectiveoutputpolicy.cpp b/xfa/fxfa/parser/cxfa_effectiveoutputpolicy.cpp
new file mode 100644
index 0000000..8c2c474
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_effectiveoutputpolicy.cpp
@@ -0,0 +1,30 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_effectiveoutputpolicy.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Name, XFA_Attribute::Use,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"effectiveOutputPolicy";
+
+}  // namespace
+
+CXFA_EffectiveOutputPolicy::CXFA_EffectiveOutputPolicy(CXFA_Document* doc,
+                                                       XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_ConnectionSet,
+                XFA_ObjectType::Node,
+                XFA_Element::EffectiveOutputPolicy,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_EffectiveOutputPolicy::~CXFA_EffectiveOutputPolicy() {}
diff --git a/xfa/fxfa/parser/cxfa_effectiveoutputpolicy.h b/xfa/fxfa/parser/cxfa_effectiveoutputpolicy.h
new file mode 100644
index 0000000..10c8527
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_effectiveoutputpolicy.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_EFFECTIVEOUTPUTPOLICY_H_
+#define XFA_FXFA_PARSER_CXFA_EFFECTIVEOUTPUTPOLICY_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_EffectiveOutputPolicy : public CXFA_Node {
+ public:
+  CXFA_EffectiveOutputPolicy(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_EffectiveOutputPolicy() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_EFFECTIVEOUTPUTPOLICY_H_
diff --git a/xfa/fxfa/parser/cxfa_embed.cpp b/xfa/fxfa/parser/cxfa_embed.cpp
new file mode 100644
index 0000000..4f550c6
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_embed.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_embed.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"embed";
+
+}  // namespace
+
+CXFA_Embed::CXFA_Embed(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Embed,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Embed::~CXFA_Embed() {}
diff --git a/xfa/fxfa/parser/cxfa_embed.h b/xfa/fxfa/parser/cxfa_embed.h
new file mode 100644
index 0000000..4aa746b
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_embed.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_EMBED_H_
+#define XFA_FXFA_PARSER_CXFA_EMBED_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Embed : public CXFA_Node {
+ public:
+  CXFA_Embed(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Embed() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_EMBED_H_
diff --git a/xfa/fxfa/parser/cxfa_encoding.cpp b/xfa/fxfa/parser/cxfa_encoding.cpp
new file mode 100644
index 0000000..4bde179
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_encoding.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_encoding.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Id, XFA_Attribute::Use,
+                                        XFA_Attribute::Usehref,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"encoding";
+
+}  // namespace
+
+CXFA_Encoding::CXFA_Encoding(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::NodeC,
+                XFA_Element::Encoding,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Encoding::~CXFA_Encoding() {}
diff --git a/xfa/fxfa/parser/cxfa_encoding.h b/xfa/fxfa/parser/cxfa_encoding.h
new file mode 100644
index 0000000..4e520e5
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_encoding.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_ENCODING_H_
+#define XFA_FXFA_PARSER_CXFA_ENCODING_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Encoding : public CXFA_Node {
+ public:
+  CXFA_Encoding(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Encoding() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_ENCODING_H_
diff --git a/xfa/fxfa/parser/cxfa_encodings.cpp b/xfa/fxfa/parser/cxfa_encodings.cpp
new file mode 100644
index 0000000..cc4ef04
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_encodings.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_encodings.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Use, XFA_Attribute::Type,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"encodings";
+
+}  // namespace
+
+CXFA_Encodings::CXFA_Encodings(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Encodings,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Encodings::~CXFA_Encodings() {}
diff --git a/xfa/fxfa/parser/cxfa_encodings.h b/xfa/fxfa/parser/cxfa_encodings.h
new file mode 100644
index 0000000..19d51d2
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_encodings.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_ENCODINGS_H_
+#define XFA_FXFA_PARSER_CXFA_ENCODINGS_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Encodings : public CXFA_Node {
+ public:
+  CXFA_Encodings(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Encodings() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_ENCODINGS_H_
diff --git a/xfa/fxfa/parser/cxfa_encrypt.cpp b/xfa/fxfa/parser/cxfa_encrypt.cpp
new file mode 100644
index 0000000..afcf8c9
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_encrypt.cpp
@@ -0,0 +1,33 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_encrypt.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::Certificate, 1, 0},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,   XFA_Attribute::Use,  XFA_Attribute::Usehref,
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"encrypt";
+
+}  // namespace
+
+CXFA_Encrypt::CXFA_Encrypt(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(
+          doc,
+          packet,
+          (XFA_XDPPACKET_Template | XFA_XDPPACKET_Config | XFA_XDPPACKET_Form),
+          XFA_ObjectType::ContentNode,
+          XFA_Element::Encrypt,
+          kPropertyData,
+          kAttributeData,
+          kName) {}
+
+CXFA_Encrypt::~CXFA_Encrypt() {}
diff --git a/xfa/fxfa/parser/cxfa_encrypt.h b/xfa/fxfa/parser/cxfa_encrypt.h
new file mode 100644
index 0000000..13d4e57
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_encrypt.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_ENCRYPT_H_
+#define XFA_FXFA_PARSER_CXFA_ENCRYPT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Encrypt : public CXFA_Node {
+ public:
+  CXFA_Encrypt(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Encrypt() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_ENCRYPT_H_
diff --git a/xfa/fxfa/parser/cxfa_encryption.cpp b/xfa/fxfa/parser/cxfa_encryption.cpp
new file mode 100644
index 0000000..18bdea6
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_encryption.cpp
@@ -0,0 +1,33 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_encryption.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::EncryptionLevel, 1, 0},
+    {XFA_Element::Encrypt, 1, 0},
+    {XFA_Element::Permissions, 1, 0},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"encryption";
+
+}  // namespace
+
+CXFA_Encryption::CXFA_Encryption(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::Encryption,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Encryption::~CXFA_Encryption() {}
diff --git a/xfa/fxfa/parser/cxfa_encryption.h b/xfa/fxfa/parser/cxfa_encryption.h
new file mode 100644
index 0000000..32c96d7
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_encryption.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_ENCRYPTION_H_
+#define XFA_FXFA_PARSER_CXFA_ENCRYPTION_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Encryption : public CXFA_Node {
+ public:
+  CXFA_Encryption(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Encryption() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_ENCRYPTION_H_
diff --git a/xfa/fxfa/parser/cxfa_encryptionlevel.cpp b/xfa/fxfa/parser/cxfa_encryptionlevel.cpp
new file mode 100644
index 0000000..10242cb
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_encryptionlevel.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_encryptionlevel.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"encryptionLevel";
+
+}  // namespace
+
+CXFA_EncryptionLevel::CXFA_EncryptionLevel(CXFA_Document* doc,
+                                           XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::EncryptionLevel,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_EncryptionLevel::~CXFA_EncryptionLevel() {}
diff --git a/xfa/fxfa/parser/cxfa_encryptionlevel.h b/xfa/fxfa/parser/cxfa_encryptionlevel.h
new file mode 100644
index 0000000..872bd3f
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_encryptionlevel.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_ENCRYPTIONLEVEL_H_
+#define XFA_FXFA_PARSER_CXFA_ENCRYPTIONLEVEL_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_EncryptionLevel : public CXFA_Node {
+ public:
+  CXFA_EncryptionLevel(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_EncryptionLevel() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_ENCRYPTIONLEVEL_H_
diff --git a/xfa/fxfa/parser/cxfa_encryptionmethod.cpp b/xfa/fxfa/parser/cxfa_encryptionmethod.cpp
new file mode 100644
index 0000000..209184c
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_encryptionmethod.cpp
@@ -0,0 +1,30 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_encryptionmethod.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Id, XFA_Attribute::Use,
+                                        XFA_Attribute::Usehref,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"encryptionMethod";
+
+}  // namespace
+
+CXFA_EncryptionMethod::CXFA_EncryptionMethod(CXFA_Document* doc,
+                                             XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::NodeC,
+                XFA_Element::EncryptionMethod,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_EncryptionMethod::~CXFA_EncryptionMethod() {}
diff --git a/xfa/fxfa/parser/cxfa_encryptionmethod.h b/xfa/fxfa/parser/cxfa_encryptionmethod.h
new file mode 100644
index 0000000..99e2933
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_encryptionmethod.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_ENCRYPTIONMETHOD_H_
+#define XFA_FXFA_PARSER_CXFA_ENCRYPTIONMETHOD_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_EncryptionMethod : public CXFA_Node {
+ public:
+  CXFA_EncryptionMethod(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_EncryptionMethod() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_ENCRYPTIONMETHOD_H_
diff --git a/xfa/fxfa/parser/cxfa_encryptionmethods.cpp b/xfa/fxfa/parser/cxfa_encryptionmethods.cpp
new file mode 100644
index 0000000..7c97b56
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_encryptionmethods.cpp
@@ -0,0 +1,30 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_encryptionmethods.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Use, XFA_Attribute::Type,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"encryptionMethods";
+
+}  // namespace
+
+CXFA_EncryptionMethods::CXFA_EncryptionMethods(CXFA_Document* doc,
+                                               XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::EncryptionMethods,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_EncryptionMethods::~CXFA_EncryptionMethods() {}
diff --git a/xfa/fxfa/parser/cxfa_encryptionmethods.h b/xfa/fxfa/parser/cxfa_encryptionmethods.h
new file mode 100644
index 0000000..e09c845
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_encryptionmethods.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_ENCRYPTIONMETHODS_H_
+#define XFA_FXFA_PARSER_CXFA_ENCRYPTIONMETHODS_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_EncryptionMethods : public CXFA_Node {
+ public:
+  CXFA_EncryptionMethods(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_EncryptionMethods() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_ENCRYPTIONMETHODS_H_
diff --git a/xfa/fxfa/parser/cxfa_enforce.cpp b/xfa/fxfa/parser/cxfa_enforce.cpp
new file mode 100644
index 0000000..4eb0d7b
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_enforce.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_enforce.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"enforce";
+
+}  // namespace
+
+CXFA_Enforce::CXFA_Enforce(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Enforce,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Enforce::~CXFA_Enforce() {}
diff --git a/xfa/fxfa/parser/cxfa_enforce.h b/xfa/fxfa/parser/cxfa_enforce.h
new file mode 100644
index 0000000..8c863ba
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_enforce.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_ENFORCE_H_
+#define XFA_FXFA_PARSER_CXFA_ENFORCE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Enforce : public CXFA_Node {
+ public:
+  CXFA_Enforce(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Enforce() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_ENFORCE_H_
diff --git a/xfa/fxfa/parser/cxfa_equate.cpp b/xfa/fxfa/parser/cxfa_equate.cpp
new file mode 100644
index 0000000..a1b4aa9
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_equate.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_equate.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::To,   XFA_Attribute::Force, XFA_Attribute::Desc,
+    XFA_Attribute::From, XFA_Attribute::Lock,  XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"equate";
+
+}  // namespace
+
+CXFA_Equate::CXFA_Equate(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::NodeV,
+                XFA_Element::Equate,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Equate::~CXFA_Equate() {}
diff --git a/xfa/fxfa/parser/cxfa_equate.h b/xfa/fxfa/parser/cxfa_equate.h
new file mode 100644
index 0000000..4939ead
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_equate.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_EQUATE_H_
+#define XFA_FXFA_PARSER_CXFA_EQUATE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Equate : public CXFA_Node {
+ public:
+  CXFA_Equate(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Equate() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_EQUATE_H_
diff --git a/xfa/fxfa/parser/cxfa_equaterange.cpp b/xfa/fxfa/parser/cxfa_equaterange.cpp
new file mode 100644
index 0000000..1b34586
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_equaterange.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_equaterange.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::To,   XFA_Attribute::UnicodeRange, XFA_Attribute::Desc,
+    XFA_Attribute::From, XFA_Attribute::Lock,         XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"equateRange";
+
+}  // namespace
+
+CXFA_EquateRange::CXFA_EquateRange(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::NodeV,
+                XFA_Element::EquateRange,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_EquateRange::~CXFA_EquateRange() {}
diff --git a/xfa/fxfa/parser/cxfa_equaterange.h b/xfa/fxfa/parser/cxfa_equaterange.h
new file mode 100644
index 0000000..9ff047a
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_equaterange.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_EQUATERANGE_H_
+#define XFA_FXFA_PARSER_CXFA_EQUATERANGE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_EquateRange : public CXFA_Node {
+ public:
+  CXFA_EquateRange(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_EquateRange() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_EQUATERANGE_H_
diff --git a/xfa/fxfa/parser/cxfa_era.cpp b/xfa/fxfa/parser/cxfa_era.cpp
new file mode 100644
index 0000000..6ddc1da
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_era.cpp
@@ -0,0 +1,25 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_era.h"
+
+namespace {
+
+constexpr wchar_t kName[] = L"era";
+
+}  // namespace
+
+CXFA_Era::CXFA_Era(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_LocaleSet,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Era,
+                nullptr,
+                nullptr,
+                kName) {}
+
+CXFA_Era::~CXFA_Era() {}
diff --git a/xfa/fxfa/parser/cxfa_era.h b/xfa/fxfa/parser/cxfa_era.h
new file mode 100644
index 0000000..ece3b2c
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_era.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_ERA_H_
+#define XFA_FXFA_PARSER_CXFA_ERA_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Era : public CXFA_Node {
+ public:
+  CXFA_Era(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Era() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_ERA_H_
diff --git a/xfa/fxfa/parser/cxfa_eranames.cpp b/xfa/fxfa/parser/cxfa_eranames.cpp
new file mode 100644
index 0000000..358b7b0
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_eranames.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_eranames.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Era, 2, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+
+constexpr wchar_t kName[] = L"eraNames";
+
+}  // namespace
+
+CXFA_EraNames::CXFA_EraNames(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_LocaleSet,
+                XFA_ObjectType::Node,
+                XFA_Element::EraNames,
+                kPropertyData,
+                nullptr,
+                kName) {}
+
+CXFA_EraNames::~CXFA_EraNames() {}
diff --git a/xfa/fxfa/parser/cxfa_eranames.h b/xfa/fxfa/parser/cxfa_eranames.h
new file mode 100644
index 0000000..128e68d
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_eranames.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_ERANAMES_H_
+#define XFA_FXFA_PARSER_CXFA_ERANAMES_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_EraNames : public CXFA_Node {
+ public:
+  CXFA_EraNames(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_EraNames() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_ERANAMES_H_
diff --git a/xfa/fxfa/parser/cxfa_event.cpp b/xfa/fxfa/parser/cxfa_event.cpp
new file mode 100644
index 0000000..f810da7
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_event.cpp
@@ -0,0 +1,37 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_event.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::Execute, 1, XFA_PROPERTYFLAG_OneOf},
+    {XFA_Element::Script, 1, XFA_PROPERTYFLAG_OneOf},
+    {XFA_Element::SignData, 1, XFA_PROPERTYFLAG_OneOf},
+    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Submit, 1, XFA_PROPERTYFLAG_OneOf},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,       XFA_Attribute::Name,   XFA_Attribute::Ref,
+    XFA_Attribute::Use,      XFA_Attribute::Listen, XFA_Attribute::Usehref,
+    XFA_Attribute::Activity, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"event";
+
+}  // namespace
+
+CXFA_Event::CXFA_Event(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Event,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Event::~CXFA_Event() {}
diff --git a/xfa/fxfa/parser/cxfa_event.h b/xfa/fxfa/parser/cxfa_event.h
new file mode 100644
index 0000000..5ff362d
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_event.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_EVENT_H_
+#define XFA_FXFA_PARSER_CXFA_EVENT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Event : public CXFA_Node {
+ public:
+  CXFA_Event(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Event() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_EVENT_H_
diff --git a/xfa/fxfa/parser/cxfa_eventpseudomodel.cpp b/xfa/fxfa/parser/cxfa_eventpseudomodel.cpp
new file mode 100644
index 0000000..75128f6
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_eventpseudomodel.cpp
@@ -0,0 +1,26 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_eventpseudomodel.h"
+
+namespace {
+
+constexpr wchar_t kName[] = L"eventPseudoModel";
+
+}  // namespace
+
+CXFA_EventPseudoModel::CXFA_EventPseudoModel(CXFA_Document* doc,
+                                             XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_XDP,
+                XFA_ObjectType::Object,
+                XFA_Element::EventPseudoModel,
+                nullptr,
+                nullptr,
+                kName) {}
+
+CXFA_EventPseudoModel::~CXFA_EventPseudoModel() {}
diff --git a/xfa/fxfa/parser/cxfa_eventpseudomodel.h b/xfa/fxfa/parser/cxfa_eventpseudomodel.h
new file mode 100644
index 0000000..3546e6d
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_eventpseudomodel.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_EVENTPSEUDOMODEL_H_
+#define XFA_FXFA_PARSER_CXFA_EVENTPSEUDOMODEL_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_EventPseudoModel : public CXFA_Node {
+ public:
+  CXFA_EventPseudoModel(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_EventPseudoModel() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_EVENTPSEUDOMODEL_H_
diff --git a/xfa/fxfa/parser/cxfa_exclgroup.cpp b/xfa/fxfa/parser/cxfa_exclgroup.cpp
new file mode 100644
index 0000000..c3276df
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_exclgroup.cpp
@@ -0,0 +1,45 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_exclgroup.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::Margin, 1, 0},    {XFA_Element::Para, 1, 0},
+    {XFA_Element::Border, 1, 0},    {XFA_Element::Assist, 1, 0},
+    {XFA_Element::Traversal, 1, 0}, {XFA_Element::Validate, 1, 0},
+    {XFA_Element::Caption, 1, 0},   {XFA_Element::Bind, 1, 0},
+    {XFA_Element::Desc, 1, 0},      {XFA_Element::Calculate, 1, 0},
+    {XFA_Element::Extras, 1, 0},    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::H,         XFA_Attribute::W,
+    XFA_Attribute::X,         XFA_Attribute::Y,
+    XFA_Attribute::Id,        XFA_Attribute::HAlign,
+    XFA_Attribute::Name,      XFA_Attribute::Use,
+    XFA_Attribute::Access,    XFA_Attribute::Presence,
+    XFA_Attribute::VAlign,    XFA_Attribute::MaxH,
+    XFA_Attribute::MaxW,      XFA_Attribute::MinH,
+    XFA_Attribute::MinW,      XFA_Attribute::Layout,
+    XFA_Attribute::Relevant,  XFA_Attribute::ColSpan,
+    XFA_Attribute::Usehref,   XFA_Attribute::AnchorType,
+    XFA_Attribute::AccessKey, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"exclGroup";
+
+}  // namespace
+
+CXFA_ExclGroup::CXFA_ExclGroup(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::ContainerNode,
+                XFA_Element::ExclGroup,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_ExclGroup::~CXFA_ExclGroup() {}
diff --git a/xfa/fxfa/parser/cxfa_exclgroup.h b/xfa/fxfa/parser/cxfa_exclgroup.h
new file mode 100644
index 0000000..62aeb84
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_exclgroup.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_EXCLGROUP_H_
+#define XFA_FXFA_PARSER_CXFA_EXCLGROUP_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_ExclGroup : public CXFA_Node {
+ public:
+  CXFA_ExclGroup(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_ExclGroup() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_EXCLGROUP_H_
diff --git a/xfa/fxfa/parser/cxfa_exclude.cpp b/xfa/fxfa/parser/cxfa_exclude.cpp
new file mode 100644
index 0000000..b6b0dcb
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_exclude.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_exclude.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"exclude";
+
+}  // namespace
+
+CXFA_Exclude::CXFA_Exclude(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Exclude,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Exclude::~CXFA_Exclude() {}
diff --git a/xfa/fxfa/parser/cxfa_exclude.h b/xfa/fxfa/parser/cxfa_exclude.h
new file mode 100644
index 0000000..fc8eada
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_exclude.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_EXCLUDE_H_
+#define XFA_FXFA_PARSER_CXFA_EXCLUDE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Exclude : public CXFA_Node {
+ public:
+  CXFA_Exclude(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Exclude() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_EXCLUDE_H_
diff --git a/xfa/fxfa/parser/cxfa_excludens.cpp b/xfa/fxfa/parser/cxfa_excludens.cpp
new file mode 100644
index 0000000..d81d9ea
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_excludens.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_excludens.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"excludeNS";
+
+}  // namespace
+
+CXFA_ExcludeNS::CXFA_ExcludeNS(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::NodeV,
+                XFA_Element::ExcludeNS,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_ExcludeNS::~CXFA_ExcludeNS() {}
diff --git a/xfa/fxfa/parser/cxfa_excludens.h b/xfa/fxfa/parser/cxfa_excludens.h
new file mode 100644
index 0000000..b70654e
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_excludens.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_EXCLUDENS_H_
+#define XFA_FXFA_PARSER_CXFA_EXCLUDENS_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_ExcludeNS : public CXFA_Node {
+ public:
+  CXFA_ExcludeNS(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_ExcludeNS() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_EXCLUDENS_H_
diff --git a/xfa/fxfa/parser/cxfa_exdata.cpp b/xfa/fxfa/parser/cxfa_exdata.cpp
new file mode 100644
index 0000000..2792c30
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_exdata.cpp
@@ -0,0 +1,32 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_exdata.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,          XFA_Attribute::Name,
+    XFA_Attribute::Rid,         XFA_Attribute::Use,
+    XFA_Attribute::ContentType, XFA_Attribute::TransferEncoding,
+    XFA_Attribute::Usehref,     XFA_Attribute::MaxLength,
+    XFA_Attribute::Href,        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"exData";
+
+}  // namespace
+
+CXFA_ExData::CXFA_ExData(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::ContentNode,
+                XFA_Element::ExData,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_ExData::~CXFA_ExData() {}
diff --git a/xfa/fxfa/parser/cxfa_exdata.h b/xfa/fxfa/parser/cxfa_exdata.h
new file mode 100644
index 0000000..264c31b
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_exdata.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_EXDATA_H_
+#define XFA_FXFA_PARSER_CXFA_EXDATA_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_ExData : public CXFA_Node {
+ public:
+  CXFA_ExData(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_ExData() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_EXDATA_H_
diff --git a/xfa/fxfa/parser/cxfa_execute.cpp b/xfa/fxfa/parser/cxfa_execute.cpp
new file mode 100644
index 0000000..824fcf7
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_execute.cpp
@@ -0,0 +1,31 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_execute.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,          XFA_Attribute::Use,
+    XFA_Attribute::Connection,  XFA_Attribute::RunAt,
+    XFA_Attribute::ExecuteType, XFA_Attribute::Usehref,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"execute";
+
+}  // namespace
+
+CXFA_Execute::CXFA_Execute(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Execute,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Execute::~CXFA_Execute() {}
diff --git a/xfa/fxfa/parser/cxfa_execute.h b/xfa/fxfa/parser/cxfa_execute.h
new file mode 100644
index 0000000..aa7daf4
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_execute.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_EXECUTE_H_
+#define XFA_FXFA_PARSER_CXFA_EXECUTE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Execute : public CXFA_Node {
+ public:
+  CXFA_Execute(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Execute() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_EXECUTE_H_
diff --git a/xfa/fxfa/parser/cxfa_exobject.cpp b/xfa/fxfa/parser/cxfa_exobject.cpp
new file mode 100644
index 0000000..faa7688
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_exobject.cpp
@@ -0,0 +1,32 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_exobject.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Extras, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,       XFA_Attribute::Name,    XFA_Attribute::Use,
+    XFA_Attribute::CodeType, XFA_Attribute::Archive, XFA_Attribute::Usehref,
+    XFA_Attribute::CodeBase, XFA_Attribute::ClassId, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"exObject";
+
+}  // namespace
+
+CXFA_ExObject::CXFA_ExObject(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::ExObject,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_ExObject::~CXFA_ExObject() {}
diff --git a/xfa/fxfa/parser/cxfa_exobject.h b/xfa/fxfa/parser/cxfa_exobject.h
new file mode 100644
index 0000000..8424553
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_exobject.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_EXOBJECT_H_
+#define XFA_FXFA_PARSER_CXFA_EXOBJECT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_ExObject : public CXFA_Node {
+ public:
+  CXFA_ExObject(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_ExObject() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_EXOBJECT_H_
diff --git a/xfa/fxfa/parser/cxfa_extras.cpp b/xfa/fxfa/parser/cxfa_extras.cpp
new file mode 100644
index 0000000..5ef6fc3
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_extras.cpp
@@ -0,0 +1,30 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_extras.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Name, XFA_Attribute::Use,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"extras";
+
+}  // namespace
+
+CXFA_Extras::CXFA_Extras(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_SourceSet | XFA_XDPPACKET_Template |
+                 XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Extras,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Extras::~CXFA_Extras() {}
diff --git a/xfa/fxfa/parser/cxfa_extras.h b/xfa/fxfa/parser/cxfa_extras.h
new file mode 100644
index 0000000..8be1239
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_extras.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_EXTRAS_H_
+#define XFA_FXFA_PARSER_CXFA_EXTRAS_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Extras : public CXFA_Node {
+ public:
+  CXFA_Extras(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Extras() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_EXTRAS_H_
diff --git a/xfa/fxfa/parser/cxfa_field.cpp b/xfa/fxfa/parser/cxfa_field.cpp
new file mode 100644
index 0000000..ec4e429
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_field.cpp
@@ -0,0 +1,49 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_field.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::Ui, 1, 0},        {XFA_Element::Margin, 1, 0},
+    {XFA_Element::Para, 1, 0},      {XFA_Element::Format, 1, 0},
+    {XFA_Element::Border, 1, 0},    {XFA_Element::Assist, 1, 0},
+    {XFA_Element::Traversal, 1, 0}, {XFA_Element::Keep, 1, 0},
+    {XFA_Element::Validate, 1, 0},  {XFA_Element::Caption, 1, 0},
+    {XFA_Element::Bind, 1, 0},      {XFA_Element::Desc, 1, 0},
+    {XFA_Element::Font, 1, 0},      {XFA_Element::Value, 1, 0},
+    {XFA_Element::Calculate, 1, 0}, {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Items, 2, 0},     {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::H,          XFA_Attribute::W,
+    XFA_Attribute::X,          XFA_Attribute::Y,
+    XFA_Attribute::Id,         XFA_Attribute::HAlign,
+    XFA_Attribute::Name,       XFA_Attribute::Use,
+    XFA_Attribute::Access,     XFA_Attribute::Rotate,
+    XFA_Attribute::Presence,   XFA_Attribute::VAlign,
+    XFA_Attribute::MaxH,       XFA_Attribute::MaxW,
+    XFA_Attribute::MinH,       XFA_Attribute::MinW,
+    XFA_Attribute::Relevant,   XFA_Attribute::ColSpan,
+    XFA_Attribute::Usehref,    XFA_Attribute::Locale,
+    XFA_Attribute::AnchorType, XFA_Attribute::AccessKey,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"field";
+
+}  // namespace
+
+CXFA_Field::CXFA_Field(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::ContainerNode,
+                XFA_Element::Field,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Field::~CXFA_Field() {}
diff --git a/xfa/fxfa/parser/cxfa_field.h b/xfa/fxfa/parser/cxfa_field.h
new file mode 100644
index 0000000..d662a4c
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_field.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_FIELD_H_
+#define XFA_FXFA_PARSER_CXFA_FIELD_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Field : public CXFA_Node {
+ public:
+  CXFA_Field(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Field() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_FIELD_H_
diff --git a/xfa/fxfa/parser/cxfa_fill.cpp b/xfa/fxfa/parser/cxfa_fill.cpp
new file mode 100644
index 0000000..6ea5c7e
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_fill.cpp
@@ -0,0 +1,39 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_fill.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::Pattern, 1, XFA_PROPERTYFLAG_OneOf},
+    {XFA_Element::Solid, 1,
+     XFA_PROPERTYFLAG_OneOf | XFA_PROPERTYFLAG_DefaultOneOf},
+    {XFA_Element::Stipple, 1, XFA_PROPERTYFLAG_OneOf},
+    {XFA_Element::Color, 1, 0},
+    {XFA_Element::Linear, 1, XFA_PROPERTYFLAG_OneOf},
+    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Radial, 1, XFA_PROPERTYFLAG_OneOf},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Use, XFA_Attribute::Presence,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"fill";
+
+}  // namespace
+
+CXFA_Fill::CXFA_Fill(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Fill,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Fill::~CXFA_Fill() {}
diff --git a/xfa/fxfa/parser/cxfa_fill.h b/xfa/fxfa/parser/cxfa_fill.h
new file mode 100644
index 0000000..681b44d
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_fill.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_FILL_H_
+#define XFA_FXFA_PARSER_CXFA_FILL_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Fill : public CXFA_Node {
+ public:
+  CXFA_Fill(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Fill() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_FILL_H_
diff --git a/xfa/fxfa/parser/cxfa_filter.cpp b/xfa/fxfa/parser/cxfa_filter.cpp
new file mode 100644
index 0000000..09c604d
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_filter.cpp
@@ -0,0 +1,37 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_filter.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::Mdp, 1, 0},           {XFA_Element::Certificates, 1, 0},
+    {XFA_Element::TimeStamp, 1, 0},     {XFA_Element::Handler, 1, 0},
+    {XFA_Element::DigestMethods, 1, 0}, {XFA_Element::Encodings, 1, 0},
+    {XFA_Element::Reasons, 1, 0},       {XFA_Element::AppearanceFilter, 1, 0},
+    {XFA_Element::LockDocument, 1, 0},  {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,      XFA_Attribute::Name,
+    XFA_Attribute::Use,     XFA_Attribute::Version,
+    XFA_Attribute::Usehref, XFA_Attribute::AddRevocationInfo,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"filter";
+
+}  // namespace
+
+CXFA_Filter::CXFA_Filter(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Filter,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Filter::~CXFA_Filter() {}
diff --git a/xfa/fxfa/parser/cxfa_filter.h b/xfa/fxfa/parser/cxfa_filter.h
new file mode 100644
index 0000000..4b636f8
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_filter.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_FILTER_H_
+#define XFA_FXFA_PARSER_CXFA_FILTER_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Filter : public CXFA_Node {
+ public:
+  CXFA_Filter(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Filter() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_FILTER_H_
diff --git a/xfa/fxfa/parser/cxfa_fliplabel.cpp b/xfa/fxfa/parser/cxfa_fliplabel.cpp
new file mode 100644
index 0000000..a959db2
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_fliplabel.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_fliplabel.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"flipLabel";
+
+}  // namespace
+
+CXFA_FlipLabel::CXFA_FlipLabel(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::NodeV,
+                XFA_Element::FlipLabel,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_FlipLabel::~CXFA_FlipLabel() {}
diff --git a/xfa/fxfa/parser/cxfa_fliplabel.h b/xfa/fxfa/parser/cxfa_fliplabel.h
new file mode 100644
index 0000000..4965769
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_fliplabel.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_FLIPLABEL_H_
+#define XFA_FXFA_PARSER_CXFA_FLIPLABEL_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_FlipLabel : public CXFA_Node {
+ public:
+  CXFA_FlipLabel(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_FlipLabel() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_FLIPLABEL_H_
diff --git a/xfa/fxfa/parser/cxfa_float.cpp b/xfa/fxfa/parser/cxfa_float.cpp
new file mode 100644
index 0000000..9736ada
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_float.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_float.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Name, XFA_Attribute::Use,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"float";
+
+}  // namespace
+
+CXFA_Float::CXFA_Float(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Float,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Float::~CXFA_Float() {}
diff --git a/xfa/fxfa/parser/cxfa_float.h b/xfa/fxfa/parser/cxfa_float.h
new file mode 100644
index 0000000..02f3f79
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_float.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_FLOAT_H_
+#define XFA_FXFA_PARSER_CXFA_FLOAT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Float : public CXFA_Node {
+ public:
+  CXFA_Float(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Float() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_FLOAT_H_
diff --git a/xfa/fxfa/parser/cxfa_font.cpp b/xfa/fxfa/parser/cxfa_font.cpp
new file mode 100644
index 0000000..aeeabe6
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_font.cpp
@@ -0,0 +1,51 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_font.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Fill, 1, 0},
+                                                 {XFA_Element::Extras, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Id,
+                                        XFA_Attribute::LineThrough,
+                                        XFA_Attribute::Typeface,
+                                        XFA_Attribute::FontHorizontalScale,
+                                        XFA_Attribute::Use,
+                                        XFA_Attribute::KerningMode,
+                                        XFA_Attribute::Underline,
+                                        XFA_Attribute::BaselineShift,
+                                        XFA_Attribute::OverlinePeriod,
+                                        XFA_Attribute::LetterSpacing,
+                                        XFA_Attribute::LineThroughPeriod,
+                                        XFA_Attribute::FontVerticalScale,
+                                        XFA_Attribute::PsName,
+                                        XFA_Attribute::Size,
+                                        XFA_Attribute::Posture,
+                                        XFA_Attribute::Usehref,
+                                        XFA_Attribute::Weight,
+                                        XFA_Attribute::UnderlinePeriod,
+                                        XFA_Attribute::Overline,
+                                        XFA_Attribute::GenericFamily,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"font";
+
+}  // namespace
+
+CXFA_Font::CXFA_Font(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(
+          doc,
+          packet,
+          (XFA_XDPPACKET_Template | XFA_XDPPACKET_Config | XFA_XDPPACKET_Form),
+          XFA_ObjectType::Node,
+          XFA_Element::Font,
+          kPropertyData,
+          kAttributeData,
+          kName) {}
+
+CXFA_Font::~CXFA_Font() {}
diff --git a/xfa/fxfa/parser/cxfa_font.h b/xfa/fxfa/parser/cxfa_font.h
new file mode 100644
index 0000000..f43610f
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_font.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_FONT_H_
+#define XFA_FXFA_PARSER_CXFA_FONT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Font : public CXFA_Node {
+ public:
+  CXFA_Font(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Font() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_FONT_H_
diff --git a/xfa/fxfa/parser/cxfa_fontinfo.cpp b/xfa/fxfa/parser/cxfa_fontinfo.cpp
new file mode 100644
index 0000000..508f09a
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_fontinfo.cpp
@@ -0,0 +1,33 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_fontinfo.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::SubsetBelow, 1, 0},
+    {XFA_Element::Map, 1, 0},
+    {XFA_Element::Embed, 1, 0},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"fontInfo";
+
+}  // namespace
+
+CXFA_FontInfo::CXFA_FontInfo(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::FontInfo,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_FontInfo::~CXFA_FontInfo() {}
diff --git a/xfa/fxfa/parser/cxfa_fontinfo.h b/xfa/fxfa/parser/cxfa_fontinfo.h
new file mode 100644
index 0000000..7e84c07
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_fontinfo.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_FONTINFO_H_
+#define XFA_FXFA_PARSER_CXFA_FONTINFO_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_FontInfo : public CXFA_Node {
+ public:
+  CXFA_FontInfo(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_FontInfo() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_FONTINFO_H_
diff --git a/xfa/fxfa/parser/cxfa_form.cpp b/xfa/fxfa/parser/cxfa_form.cpp
new file mode 100644
index 0000000..a42291f
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_form.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_form.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Checksum,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"form";
+
+}  // namespace
+
+CXFA_Form::CXFA_Form(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Form,
+                XFA_ObjectType::ModelNode,
+                XFA_Element::Form,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Form::~CXFA_Form() {}
diff --git a/xfa/fxfa/parser/cxfa_form.h b/xfa/fxfa/parser/cxfa_form.h
new file mode 100644
index 0000000..e0600a1
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_form.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_FORM_H_
+#define XFA_FXFA_PARSER_CXFA_FORM_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Form : public CXFA_Node {
+ public:
+  CXFA_Form(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Form() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_FORM_H_
diff --git a/xfa/fxfa/parser/cxfa_format.cpp b/xfa/fxfa/parser/cxfa_format.cpp
new file mode 100644
index 0000000..2810826
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_format.cpp
@@ -0,0 +1,32 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_format.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Picture, 1, 0},
+                                                 {XFA_Element::Extras, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Id, XFA_Attribute::Use,
+                                        XFA_Attribute::Usehref,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"format";
+
+}  // namespace
+
+CXFA_Format::CXFA_Format(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Format,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Format::~CXFA_Format() {}
diff --git a/xfa/fxfa/parser/cxfa_format.h b/xfa/fxfa/parser/cxfa_format.h
new file mode 100644
index 0000000..2de5ab3
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_format.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_FORMAT_H_
+#define XFA_FXFA_PARSER_CXFA_FORMAT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Format : public CXFA_Node {
+ public:
+  CXFA_Format(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Format() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_FORMAT_H_
diff --git a/xfa/fxfa/parser/cxfa_formfieldfilling.cpp b/xfa/fxfa/parser/cxfa_formfieldfilling.cpp
new file mode 100644
index 0000000..bb76fcd
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_formfieldfilling.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_formfieldfilling.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"formFieldFilling";
+
+}  // namespace
+
+CXFA_FormFieldFilling::CXFA_FormFieldFilling(CXFA_Document* doc,
+                                             XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::FormFieldFilling,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_FormFieldFilling::~CXFA_FormFieldFilling() {}
diff --git a/xfa/fxfa/parser/cxfa_formfieldfilling.h b/xfa/fxfa/parser/cxfa_formfieldfilling.h
new file mode 100644
index 0000000..65d4301
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_formfieldfilling.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_FORMFIELDFILLING_H_
+#define XFA_FXFA_PARSER_CXFA_FORMFIELDFILLING_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_FormFieldFilling : public CXFA_Node {
+ public:
+  CXFA_FormFieldFilling(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_FormFieldFilling() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_FORMFIELDFILLING_H_
diff --git a/xfa/fxfa/parser/cxfa_groupparent.cpp b/xfa/fxfa/parser/cxfa_groupparent.cpp
new file mode 100644
index 0000000..2987a37
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_groupparent.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_groupparent.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"groupParent";
+
+}  // namespace
+
+CXFA_GroupParent::CXFA_GroupParent(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::NodeV,
+                XFA_Element::GroupParent,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_GroupParent::~CXFA_GroupParent() {}
diff --git a/xfa/fxfa/parser/cxfa_groupparent.h b/xfa/fxfa/parser/cxfa_groupparent.h
new file mode 100644
index 0000000..b56b78b
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_groupparent.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_GROUPPARENT_H_
+#define XFA_FXFA_PARSER_CXFA_GROUPPARENT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_GroupParent : public CXFA_Node {
+ public:
+  CXFA_GroupParent(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_GroupParent() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_GROUPPARENT_H_
diff --git a/xfa/fxfa/parser/cxfa_handler.cpp b/xfa/fxfa/parser/cxfa_handler.cpp
new file mode 100644
index 0000000..183915a
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_handler.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_handler.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Use, XFA_Attribute::Type,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"handler";
+
+}  // namespace
+
+CXFA_Handler::CXFA_Handler(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::TextNode,
+                XFA_Element::Handler,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Handler::~CXFA_Handler() {}
diff --git a/xfa/fxfa/parser/cxfa_handler.h b/xfa/fxfa/parser/cxfa_handler.h
new file mode 100644
index 0000000..6f18daf
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_handler.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_HANDLER_H_
+#define XFA_FXFA_PARSER_CXFA_HANDLER_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Handler : public CXFA_Node {
+ public:
+  CXFA_Handler(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Handler() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_HANDLER_H_
diff --git a/xfa/fxfa/parser/cxfa_hostpseudomodel.cpp b/xfa/fxfa/parser/cxfa_hostpseudomodel.cpp
new file mode 100644
index 0000000..6276bb9
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_hostpseudomodel.cpp
@@ -0,0 +1,26 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_hostpseudomodel.h"
+
+namespace {
+
+constexpr wchar_t kName[] = L"hostPseudoModel";
+
+}  // namespace
+
+CXFA_HostPseudoModel::CXFA_HostPseudoModel(CXFA_Document* doc,
+                                           XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_XDP,
+                XFA_ObjectType::Object,
+                XFA_Element::HostPseudoModel,
+                nullptr,
+                nullptr,
+                kName) {}
+
+CXFA_HostPseudoModel::~CXFA_HostPseudoModel() {}
diff --git a/xfa/fxfa/parser/cxfa_hostpseudomodel.h b/xfa/fxfa/parser/cxfa_hostpseudomodel.h
new file mode 100644
index 0000000..ba7b227
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_hostpseudomodel.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_HOSTPSEUDOMODEL_H_
+#define XFA_FXFA_PARSER_CXFA_HOSTPSEUDOMODEL_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_HostPseudoModel : public CXFA_Node {
+ public:
+  CXFA_HostPseudoModel(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_HostPseudoModel() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_HOSTPSEUDOMODEL_H_
diff --git a/xfa/fxfa/parser/cxfa_hyphenation.cpp b/xfa/fxfa/parser/cxfa_hyphenation.cpp
new file mode 100644
index 0000000..0a3300c
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_hyphenation.cpp
@@ -0,0 +1,36 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_hyphenation.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Id,
+                                        XFA_Attribute::Use,
+                                        XFA_Attribute::WordCharacterCount,
+                                        XFA_Attribute::Hyphenate,
+                                        XFA_Attribute::ExcludeInitialCap,
+                                        XFA_Attribute::PushCharacterCount,
+                                        XFA_Attribute::RemainCharacterCount,
+                                        XFA_Attribute::Usehref,
+                                        XFA_Attribute::ExcludeAllCaps,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"hyphenation";
+
+}  // namespace
+
+CXFA_Hyphenation::CXFA_Hyphenation(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Hyphenation,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Hyphenation::~CXFA_Hyphenation() {}
diff --git a/xfa/fxfa/parser/cxfa_hyphenation.h b/xfa/fxfa/parser/cxfa_hyphenation.h
new file mode 100644
index 0000000..f364c12
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_hyphenation.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_HYPHENATION_H_
+#define XFA_FXFA_PARSER_CXFA_HYPHENATION_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Hyphenation : public CXFA_Node {
+ public:
+  CXFA_Hyphenation(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Hyphenation() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_HYPHENATION_H_
diff --git a/xfa/fxfa/parser/cxfa_ifempty.cpp b/xfa/fxfa/parser/cxfa_ifempty.cpp
new file mode 100644
index 0000000..7fdbd84
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_ifempty.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_ifempty.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"ifEmpty";
+
+}  // namespace
+
+CXFA_IfEmpty::CXFA_IfEmpty(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::NodeV,
+                XFA_Element::IfEmpty,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_IfEmpty::~CXFA_IfEmpty() {}
diff --git a/xfa/fxfa/parser/cxfa_ifempty.h b/xfa/fxfa/parser/cxfa_ifempty.h
new file mode 100644
index 0000000..ed9860c
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_ifempty.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_IFEMPTY_H_
+#define XFA_FXFA_PARSER_CXFA_IFEMPTY_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_IfEmpty : public CXFA_Node {
+ public:
+  CXFA_IfEmpty(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_IfEmpty() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_IFEMPTY_H_
diff --git a/xfa/fxfa/parser/cxfa_image.cpp b/xfa/fxfa/parser/cxfa_image.cpp
new file mode 100644
index 0000000..9c2be0a
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_image.cpp
@@ -0,0 +1,35 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_image.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Id,
+                                        XFA_Attribute::Name,
+                                        XFA_Attribute::Use,
+                                        XFA_Attribute::ContentType,
+                                        XFA_Attribute::TransferEncoding,
+                                        XFA_Attribute::Usehref,
+                                        XFA_Attribute::Aspect,
+                                        XFA_Attribute::Href,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"image";
+
+}  // namespace
+
+CXFA_Image::CXFA_Image(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Image,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Image::~CXFA_Image() {}
diff --git a/xfa/fxfa/parser/cxfa_image.h b/xfa/fxfa/parser/cxfa_image.h
new file mode 100644
index 0000000..41d4b67
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_image.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_IMAGE_H_
+#define XFA_FXFA_PARSER_CXFA_IMAGE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Image : public CXFA_Node {
+ public:
+  CXFA_Image(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Image() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_IMAGE_H_
diff --git a/xfa/fxfa/parser/cxfa_imageedit.cpp b/xfa/fxfa/parser/cxfa_imageedit.cpp
new file mode 100644
index 0000000..f12afa2
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_imageedit.cpp
@@ -0,0 +1,33 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_imageedit.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Margin, 1, 0},
+                                                 {XFA_Element::Border, 1, 0},
+                                                 {XFA_Element::Extras, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Use, XFA_Attribute::Usehref,
+    XFA_Attribute::Data, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"imageEdit";
+
+}  // namespace
+
+CXFA_ImageEdit::CXFA_ImageEdit(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::ImageEdit,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_ImageEdit::~CXFA_ImageEdit() {}
diff --git a/xfa/fxfa/parser/cxfa_imageedit.h b/xfa/fxfa/parser/cxfa_imageedit.h
new file mode 100644
index 0000000..616efe7
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_imageedit.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_IMAGEEDIT_H_
+#define XFA_FXFA_PARSER_CXFA_IMAGEEDIT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_ImageEdit : public CXFA_Node {
+ public:
+  CXFA_ImageEdit(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_ImageEdit() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_IMAGEEDIT_H_
diff --git a/xfa/fxfa/parser/cxfa_includexdpcontent.cpp b/xfa/fxfa/parser/cxfa_includexdpcontent.cpp
new file mode 100644
index 0000000..d76dd43
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_includexdpcontent.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_includexdpcontent.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"includeXDPContent";
+
+}  // namespace
+
+CXFA_IncludeXDPContent::CXFA_IncludeXDPContent(CXFA_Document* doc,
+                                               XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::IncludeXDPContent,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_IncludeXDPContent::~CXFA_IncludeXDPContent() {}
diff --git a/xfa/fxfa/parser/cxfa_includexdpcontent.h b/xfa/fxfa/parser/cxfa_includexdpcontent.h
new file mode 100644
index 0000000..564dbba
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_includexdpcontent.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_INCLUDEXDPCONTENT_H_
+#define XFA_FXFA_PARSER_CXFA_INCLUDEXDPCONTENT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_IncludeXDPContent : public CXFA_Node {
+ public:
+  CXFA_IncludeXDPContent(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_IncludeXDPContent() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_INCLUDEXDPCONTENT_H_
diff --git a/xfa/fxfa/parser/cxfa_incrementalload.cpp b/xfa/fxfa/parser/cxfa_incrementalload.cpp
new file mode 100644
index 0000000..3c05a8c
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_incrementalload.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_incrementalload.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"incrementalLoad";
+
+}  // namespace
+
+CXFA_IncrementalLoad::CXFA_IncrementalLoad(CXFA_Document* doc,
+                                           XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::NodeV,
+                XFA_Element::IncrementalLoad,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_IncrementalLoad::~CXFA_IncrementalLoad() {}
diff --git a/xfa/fxfa/parser/cxfa_incrementalload.h b/xfa/fxfa/parser/cxfa_incrementalload.h
new file mode 100644
index 0000000..d048849
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_incrementalload.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_INCREMENTALLOAD_H_
+#define XFA_FXFA_PARSER_CXFA_INCREMENTALLOAD_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_IncrementalLoad : public CXFA_Node {
+ public:
+  CXFA_IncrementalLoad(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_IncrementalLoad() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_INCREMENTALLOAD_H_
diff --git a/xfa/fxfa/parser/cxfa_incrementalmerge.cpp b/xfa/fxfa/parser/cxfa_incrementalmerge.cpp
new file mode 100644
index 0000000..1edc82a
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_incrementalmerge.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_incrementalmerge.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"incrementalMerge";
+
+}  // namespace
+
+CXFA_IncrementalMerge::CXFA_IncrementalMerge(CXFA_Document* doc,
+                                             XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::IncrementalMerge,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_IncrementalMerge::~CXFA_IncrementalMerge() {}
diff --git a/xfa/fxfa/parser/cxfa_incrementalmerge.h b/xfa/fxfa/parser/cxfa_incrementalmerge.h
new file mode 100644
index 0000000..ae1bab1
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_incrementalmerge.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_INCREMENTALMERGE_H_
+#define XFA_FXFA_PARSER_CXFA_INCREMENTALMERGE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_IncrementalMerge : public CXFA_Node {
+ public:
+  CXFA_IncrementalMerge(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_IncrementalMerge() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_INCREMENTALMERGE_H_
diff --git a/xfa/fxfa/parser/cxfa_insert.cpp b/xfa/fxfa/parser/cxfa_insert.cpp
new file mode 100644
index 0000000..ee76a11
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_insert.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_insert.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Name, XFA_Attribute::Use,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"insert";
+
+}  // namespace
+
+CXFA_Insert::CXFA_Insert(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_SourceSet,
+                XFA_ObjectType::TextNode,
+                XFA_Element::Insert,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Insert::~CXFA_Insert() {}
diff --git a/xfa/fxfa/parser/cxfa_insert.h b/xfa/fxfa/parser/cxfa_insert.h
new file mode 100644
index 0000000..b3d807f
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_insert.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_INSERT_H_
+#define XFA_FXFA_PARSER_CXFA_INSERT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Insert : public CXFA_Node {
+ public:
+  CXFA_Insert(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Insert() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_INSERT_H_
diff --git a/xfa/fxfa/parser/cxfa_instancemanager.cpp b/xfa/fxfa/parser/cxfa_instancemanager.cpp
new file mode 100644
index 0000000..ed97068
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_instancemanager.cpp
@@ -0,0 +1,31 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_instancemanager.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Occur, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Name,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"instanceManager";
+
+}  // namespace
+
+CXFA_InstanceManager::CXFA_InstanceManager(CXFA_Document* doc,
+                                           XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Form,
+                XFA_ObjectType::Node,
+                XFA_Element::InstanceManager,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_InstanceManager::~CXFA_InstanceManager() {}
diff --git a/xfa/fxfa/parser/cxfa_instancemanager.h b/xfa/fxfa/parser/cxfa_instancemanager.h
new file mode 100644
index 0000000..1fbe0a8
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_instancemanager.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_INSTANCEMANAGER_H_
+#define XFA_FXFA_PARSER_CXFA_INSTANCEMANAGER_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_InstanceManager : public CXFA_Node {
+ public:
+  CXFA_InstanceManager(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_InstanceManager() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_INSTANCEMANAGER_H_
diff --git a/xfa/fxfa/parser/cxfa_integer.cpp b/xfa/fxfa/parser/cxfa_integer.cpp
new file mode 100644
index 0000000..0878a33
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_integer.cpp
@@ -0,0 +1,30 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_integer.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Name, XFA_Attribute::Use,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"integer";
+
+}  // namespace
+
+CXFA_Integer::CXFA_Integer(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_SourceSet | XFA_XDPPACKET_Template |
+                 XFA_XDPPACKET_Form),
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Integer,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Integer::~CXFA_Integer() {}
diff --git a/xfa/fxfa/parser/cxfa_integer.h b/xfa/fxfa/parser/cxfa_integer.h
new file mode 100644
index 0000000..2f412b8
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_integer.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_INTEGER_H_
+#define XFA_FXFA_PARSER_CXFA_INTEGER_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Integer : public CXFA_Node {
+ public:
+  CXFA_Integer(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Integer() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_INTEGER_H_
diff --git a/xfa/fxfa/parser/cxfa_interactive.cpp b/xfa/fxfa/parser/cxfa_interactive.cpp
new file mode 100644
index 0000000..bb1e3a2
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_interactive.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_interactive.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"interactive";
+
+}  // namespace
+
+CXFA_Interactive::CXFA_Interactive(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Interactive,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Interactive::~CXFA_Interactive() {}
diff --git a/xfa/fxfa/parser/cxfa_interactive.h b/xfa/fxfa/parser/cxfa_interactive.h
new file mode 100644
index 0000000..64f9d31
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_interactive.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_INTERACTIVE_H_
+#define XFA_FXFA_PARSER_CXFA_INTERACTIVE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Interactive : public CXFA_Node {
+ public:
+  CXFA_Interactive(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Interactive() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_INTERACTIVE_H_
diff --git a/xfa/fxfa/parser/cxfa_issuers.cpp b/xfa/fxfa/parser/cxfa_issuers.cpp
new file mode 100644
index 0000000..c9f960c
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_issuers.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_issuers.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Use, XFA_Attribute::Type,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"issuers";
+
+}  // namespace
+
+CXFA_Issuers::CXFA_Issuers(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Issuers,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Issuers::~CXFA_Issuers() {}
diff --git a/xfa/fxfa/parser/cxfa_issuers.h b/xfa/fxfa/parser/cxfa_issuers.h
new file mode 100644
index 0000000..d131bbb
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_issuers.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_ISSUERS_H_
+#define XFA_FXFA_PARSER_CXFA_ISSUERS_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Issuers : public CXFA_Node {
+ public:
+  CXFA_Issuers(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Issuers() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_ISSUERS_H_
diff --git a/xfa/fxfa/parser/cxfa_items.cpp b/xfa/fxfa/parser/cxfa_items.cpp
new file mode 100644
index 0000000..847a143
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_items.cpp
@@ -0,0 +1,30 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_items.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,      XFA_Attribute::Name,     XFA_Attribute::Ref,
+    XFA_Attribute::Use,     XFA_Attribute::Presence, XFA_Attribute::Save,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"items";
+
+}  // namespace
+
+CXFA_Items::CXFA_Items(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Items,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Items::~CXFA_Items() {}
diff --git a/xfa/fxfa/parser/cxfa_items.h b/xfa/fxfa/parser/cxfa_items.h
new file mode 100644
index 0000000..e480167
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_items.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_ITEMS_H_
+#define XFA_FXFA_PARSER_CXFA_ITEMS_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Items : public CXFA_Node {
+ public:
+  CXFA_Items(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Items() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_ITEMS_H_
diff --git a/xfa/fxfa/parser/cxfa_jog.cpp b/xfa/fxfa/parser/cxfa_jog.cpp
new file mode 100644
index 0000000..95dafa0
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_jog.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_jog.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"jog";
+
+}  // namespace
+
+CXFA_Jog::CXFA_Jog(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Jog,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Jog::~CXFA_Jog() {}
diff --git a/xfa/fxfa/parser/cxfa_jog.h b/xfa/fxfa/parser/cxfa_jog.h
new file mode 100644
index 0000000..d7b2d71
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_jog.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_JOG_H_
+#define XFA_FXFA_PARSER_CXFA_JOG_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Jog : public CXFA_Node {
+ public:
+  CXFA_Jog(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Jog() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_JOG_H_
diff --git a/xfa/fxfa/parser/cxfa_keep.cpp b/xfa/fxfa/parser/cxfa_keep.cpp
new file mode 100644
index 0000000..3139130
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_keep.cpp
@@ -0,0 +1,32 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_keep.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Extras, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,       XFA_Attribute::Next,    XFA_Attribute::Use,
+    XFA_Attribute::Previous, XFA_Attribute::Usehref, XFA_Attribute::Intact,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"keep";
+
+}  // namespace
+
+CXFA_Keep::CXFA_Keep(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Keep,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Keep::~CXFA_Keep() {}
diff --git a/xfa/fxfa/parser/cxfa_keep.h b/xfa/fxfa/parser/cxfa_keep.h
new file mode 100644
index 0000000..9e63398
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_keep.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_KEEP_H_
+#define XFA_FXFA_PARSER_CXFA_KEEP_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Keep : public CXFA_Node {
+ public:
+  CXFA_Keep(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Keep() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_KEEP_H_
diff --git a/xfa/fxfa/parser/cxfa_keyusage.cpp b/xfa/fxfa/parser/cxfa_keyusage.cpp
new file mode 100644
index 0000000..757dc9c
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_keyusage.cpp
@@ -0,0 +1,40 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_keyusage.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Id,
+                                        XFA_Attribute::Use,
+                                        XFA_Attribute::NonRepudiation,
+                                        XFA_Attribute::EncipherOnly,
+                                        XFA_Attribute::Type,
+                                        XFA_Attribute::DigitalSignature,
+                                        XFA_Attribute::CrlSign,
+                                        XFA_Attribute::KeyAgreement,
+                                        XFA_Attribute::KeyEncipherment,
+                                        XFA_Attribute::Usehref,
+                                        XFA_Attribute::DataEncipherment,
+                                        XFA_Attribute::KeyCertSign,
+                                        XFA_Attribute::DecipherOnly,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"keyUsage";
+
+}  // namespace
+
+CXFA_KeyUsage::CXFA_KeyUsage(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::KeyUsage,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_KeyUsage::~CXFA_KeyUsage() {}
diff --git a/xfa/fxfa/parser/cxfa_keyusage.h b/xfa/fxfa/parser/cxfa_keyusage.h
new file mode 100644
index 0000000..e12de37
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_keyusage.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_KEYUSAGE_H_
+#define XFA_FXFA_PARSER_CXFA_KEYUSAGE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_KeyUsage : public CXFA_Node {
+ public:
+  CXFA_KeyUsage(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_KeyUsage() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_KEYUSAGE_H_
diff --git a/xfa/fxfa/parser/cxfa_labelprinter.cpp b/xfa/fxfa/parser/cxfa_labelprinter.cpp
new file mode 100644
index 0000000..24ab3fc
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_labelprinter.cpp
@@ -0,0 +1,35 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_labelprinter.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::FontInfo, 1, 0},
+    {XFA_Element::Xdc, 1, 0},
+    {XFA_Element::BatchOutput, 1, 0},
+    {XFA_Element::FlipLabel, 1, 0},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Name, XFA_Attribute::Desc, XFA_Attribute::Lock,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"labelPrinter";
+
+}  // namespace
+
+CXFA_LabelPrinter::CXFA_LabelPrinter(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::LabelPrinter,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_LabelPrinter::~CXFA_LabelPrinter() {}
diff --git a/xfa/fxfa/parser/cxfa_labelprinter.h b/xfa/fxfa/parser/cxfa_labelprinter.h
new file mode 100644
index 0000000..7528311
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_labelprinter.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_LABELPRINTER_H_
+#define XFA_FXFA_PARSER_CXFA_LABELPRINTER_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_LabelPrinter : public CXFA_Node {
+ public:
+  CXFA_LabelPrinter(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_LabelPrinter() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_LABELPRINTER_H_
diff --git a/xfa/fxfa/parser/cxfa_layout.cpp b/xfa/fxfa/parser/cxfa_layout.cpp
new file mode 100644
index 0000000..b11f1cf
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_layout.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_layout.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"layout";
+
+}  // namespace
+
+CXFA_Layout::CXFA_Layout(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Layout,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Layout::~CXFA_Layout() {}
diff --git a/xfa/fxfa/parser/cxfa_layout.h b/xfa/fxfa/parser/cxfa_layout.h
new file mode 100644
index 0000000..64ba8de
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_layout.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_LAYOUT_H_
+#define XFA_FXFA_PARSER_CXFA_LAYOUT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Layout : public CXFA_Node {
+ public:
+  CXFA_Layout(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Layout() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_LAYOUT_H_
diff --git a/xfa/fxfa/parser/cxfa_layoutpseudomodel.cpp b/xfa/fxfa/parser/cxfa_layoutpseudomodel.cpp
new file mode 100644
index 0000000..df95831
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_layoutpseudomodel.cpp
@@ -0,0 +1,26 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_layoutpseudomodel.h"
+
+namespace {
+
+constexpr wchar_t kName[] = L"layoutPseudoModel";
+
+}  // namespace
+
+CXFA_LayoutPseudoModel::CXFA_LayoutPseudoModel(CXFA_Document* doc,
+                                               XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_XDP,
+                XFA_ObjectType::Object,
+                XFA_Element::LayoutPseudoModel,
+                nullptr,
+                nullptr,
+                kName) {}
+
+CXFA_LayoutPseudoModel::~CXFA_LayoutPseudoModel() {}
diff --git a/xfa/fxfa/parser/cxfa_layoutpseudomodel.h b/xfa/fxfa/parser/cxfa_layoutpseudomodel.h
new file mode 100644
index 0000000..8bd46ec
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_layoutpseudomodel.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_LAYOUTPSEUDOMODEL_H_
+#define XFA_FXFA_PARSER_CXFA_LAYOUTPSEUDOMODEL_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_LayoutPseudoModel : public CXFA_Node {
+ public:
+  CXFA_LayoutPseudoModel(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_LayoutPseudoModel() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_LAYOUTPSEUDOMODEL_H_
diff --git a/xfa/fxfa/parser/cxfa_level.cpp b/xfa/fxfa/parser/cxfa_level.cpp
new file mode 100644
index 0000000..d91414c
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_level.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_level.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"level";
+
+}  // namespace
+
+CXFA_Level::CXFA_Level(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Level,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Level::~CXFA_Level() {}
diff --git a/xfa/fxfa/parser/cxfa_level.h b/xfa/fxfa/parser/cxfa_level.h
new file mode 100644
index 0000000..512b1b9
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_level.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_LEVEL_H_
+#define XFA_FXFA_PARSER_CXFA_LEVEL_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Level : public CXFA_Node {
+ public:
+  CXFA_Level(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Level() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_LEVEL_H_
diff --git a/xfa/fxfa/parser/cxfa_line.cpp b/xfa/fxfa/parser/cxfa_line.cpp
new file mode 100644
index 0000000..2594f6e
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_line.cpp
@@ -0,0 +1,31 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_line.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Edge, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,      XFA_Attribute::Use,  XFA_Attribute::Slope,
+    XFA_Attribute::Usehref, XFA_Attribute::Hand, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"line";
+
+}  // namespace
+
+CXFA_Line::CXFA_Line(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Line,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Line::~CXFA_Line() {}
diff --git a/xfa/fxfa/parser/cxfa_line.h b/xfa/fxfa/parser/cxfa_line.h
new file mode 100644
index 0000000..c575c5e
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_line.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_LINE_H_
+#define XFA_FXFA_PARSER_CXFA_LINE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Line : public CXFA_Node {
+ public:
+  CXFA_Line(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Line() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_LINE_H_
diff --git a/xfa/fxfa/parser/cxfa_linear.cpp b/xfa/fxfa/parser/cxfa_linear.cpp
new file mode 100644
index 0000000..67dac94
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_linear.cpp
@@ -0,0 +1,32 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_linear.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Color, 1, 0},
+                                                 {XFA_Element::Extras, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Use, XFA_Attribute::Type,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"linear";
+
+}  // namespace
+
+CXFA_Linear::CXFA_Linear(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Linear,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Linear::~CXFA_Linear() {}
diff --git a/xfa/fxfa/parser/cxfa_linear.h b/xfa/fxfa/parser/cxfa_linear.h
new file mode 100644
index 0000000..e3572b0
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_linear.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_LINEAR_H_
+#define XFA_FXFA_PARSER_CXFA_LINEAR_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Linear : public CXFA_Node {
+ public:
+  CXFA_Linear(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Linear() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_LINEAR_H_
diff --git a/xfa/fxfa/parser/cxfa_linearized.cpp b/xfa/fxfa/parser/cxfa_linearized.cpp
new file mode 100644
index 0000000..4fa0a51
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_linearized.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_linearized.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"linearized";
+
+}  // namespace
+
+CXFA_Linearized::CXFA_Linearized(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Linearized,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Linearized::~CXFA_Linearized() {}
diff --git a/xfa/fxfa/parser/cxfa_linearized.h b/xfa/fxfa/parser/cxfa_linearized.h
new file mode 100644
index 0000000..59f41fe
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_linearized.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_LINEARIZED_H_
+#define XFA_FXFA_PARSER_CXFA_LINEARIZED_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Linearized : public CXFA_Node {
+ public:
+  CXFA_Linearized(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Linearized() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_LINEARIZED_H_
diff --git a/xfa/fxfa/parser/cxfa_list.cpp b/xfa/fxfa/parser/cxfa_list.cpp
new file mode 100644
index 0000000..9c15b57
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_list.cpp
@@ -0,0 +1,25 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_list.h"
+
+namespace {
+
+constexpr wchar_t kName[] = L"list";
+
+}  // namespace
+
+CXFA_List::CXFA_List(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_XDP,
+                XFA_ObjectType::List,
+                XFA_Element::List,
+                nullptr,
+                nullptr,
+                kName) {}
+
+CXFA_List::~CXFA_List() {}
diff --git a/xfa/fxfa/parser/cxfa_list.h b/xfa/fxfa/parser/cxfa_list.h
new file mode 100644
index 0000000..8c54a98
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_list.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_LIST_H_
+#define XFA_FXFA_PARSER_CXFA_LIST_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_List : public CXFA_Node {
+ public:
+  CXFA_List(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_List() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_LIST_H_
diff --git a/xfa/fxfa/parser/cxfa_locale.cpp b/xfa/fxfa/parser/cxfa_locale.cpp
new file mode 100644
index 0000000..3ace9f5
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_locale.cpp
@@ -0,0 +1,35 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_locale.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::DatePatterns, 1, 0},    {XFA_Element::CalendarSymbols, 1, 0},
+    {XFA_Element::CurrencySymbols, 1, 0}, {XFA_Element::Typefaces, 1, 0},
+    {XFA_Element::DateTimeSymbols, 1, 0}, {XFA_Element::NumberPatterns, 1, 0},
+    {XFA_Element::NumberSymbols, 1, 0},   {XFA_Element::TimePatterns, 1, 0},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Name, XFA_Attribute::Desc, XFA_Attribute::Lock,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"locale";
+
+}  // namespace
+
+CXFA_Locale::CXFA_Locale(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Config | XFA_XDPPACKET_LocaleSet),
+                XFA_ObjectType::Node,
+                XFA_Element::Locale,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Locale::~CXFA_Locale() {}
diff --git a/xfa/fxfa/parser/cxfa_locale.h b/xfa/fxfa/parser/cxfa_locale.h
new file mode 100644
index 0000000..4071d33
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_locale.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_LOCALE_H_
+#define XFA_FXFA_PARSER_CXFA_LOCALE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Locale : public CXFA_Node {
+ public:
+  CXFA_Locale(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Locale() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_LOCALE_H_
diff --git a/xfa/fxfa/parser/cxfa_localeset.cpp b/xfa/fxfa/parser/cxfa_localeset.cpp
new file mode 100644
index 0000000..050c283
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_localeset.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_localeset.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"localeSet";
+
+}  // namespace
+
+CXFA_LocaleSet::CXFA_LocaleSet(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Config | XFA_XDPPACKET_LocaleSet),
+                XFA_ObjectType::ModelNode,
+                XFA_Element::LocaleSet,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_LocaleSet::~CXFA_LocaleSet() {}
diff --git a/xfa/fxfa/parser/cxfa_localeset.h b/xfa/fxfa/parser/cxfa_localeset.h
new file mode 100644
index 0000000..3a392cd
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_localeset.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_LOCALESET_H_
+#define XFA_FXFA_PARSER_CXFA_LOCALESET_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_LocaleSet : public CXFA_Node {
+ public:
+  CXFA_LocaleSet(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_LocaleSet() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_LOCALESET_H_
diff --git a/xfa/fxfa/parser/cxfa_lockdocument.cpp b/xfa/fxfa/parser/cxfa_lockdocument.cpp
new file mode 100644
index 0000000..82ee110
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_lockdocument.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_lockdocument.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Use, XFA_Attribute::Type,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"lockDocument";
+
+}  // namespace
+
+CXFA_LockDocument::CXFA_LockDocument(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::ContentNode,
+                XFA_Element::LockDocument,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_LockDocument::~CXFA_LockDocument() {}
diff --git a/xfa/fxfa/parser/cxfa_lockdocument.h b/xfa/fxfa/parser/cxfa_lockdocument.h
new file mode 100644
index 0000000..c5321c8
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_lockdocument.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_LOCKDOCUMENT_H_
+#define XFA_FXFA_PARSER_CXFA_LOCKDOCUMENT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_LockDocument : public CXFA_Node {
+ public:
+  CXFA_LockDocument(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_LockDocument() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_LOCKDOCUMENT_H_
diff --git a/xfa/fxfa/parser/cxfa_log.cpp b/xfa/fxfa/parser/cxfa_log.cpp
new file mode 100644
index 0000000..b369a9a
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_log.cpp
@@ -0,0 +1,33 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_log.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::To, 1, 0},
+                                                 {XFA_Element::Uri, 1, 0},
+                                                 {XFA_Element::Mode, 1, 0},
+                                                 {XFA_Element::Threshold, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"log";
+
+}  // namespace
+
+CXFA_Log::CXFA_Log(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::Log,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Log::~CXFA_Log() {}
diff --git a/xfa/fxfa/parser/cxfa_log.h b/xfa/fxfa/parser/cxfa_log.h
new file mode 100644
index 0000000..2add392
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_log.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_LOG_H_
+#define XFA_FXFA_PARSER_CXFA_LOG_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Log : public CXFA_Node {
+ public:
+  CXFA_Log(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Log() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_LOG_H_
diff --git a/xfa/fxfa/parser/cxfa_logpseudomodel.cpp b/xfa/fxfa/parser/cxfa_logpseudomodel.cpp
new file mode 100644
index 0000000..ed88376
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_logpseudomodel.cpp
@@ -0,0 +1,26 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_logpseudomodel.h"
+
+namespace {
+
+constexpr wchar_t kName[] = L"logPseudoModel";
+
+}  // namespace
+
+CXFA_LogPseudoModel::CXFA_LogPseudoModel(CXFA_Document* doc,
+                                         XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_XDP,
+                XFA_ObjectType::Object,
+                XFA_Element::LogPseudoModel,
+                nullptr,
+                nullptr,
+                kName) {}
+
+CXFA_LogPseudoModel::~CXFA_LogPseudoModel() {}
diff --git a/xfa/fxfa/parser/cxfa_logpseudomodel.h b/xfa/fxfa/parser/cxfa_logpseudomodel.h
new file mode 100644
index 0000000..3b1b0e1
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_logpseudomodel.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_LOGPSEUDOMODEL_H_
+#define XFA_FXFA_PARSER_CXFA_LOGPSEUDOMODEL_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_LogPseudoModel : public CXFA_Node {
+ public:
+  CXFA_LogPseudoModel(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_LogPseudoModel() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_LOGPSEUDOMODEL_H_
diff --git a/xfa/fxfa/parser/cxfa_manifest.cpp b/xfa/fxfa/parser/cxfa_manifest.cpp
new file mode 100644
index 0000000..f038118
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_manifest.cpp
@@ -0,0 +1,31 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_manifest.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Extras, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,     XFA_Attribute::Name,    XFA_Attribute::Use,
+    XFA_Attribute::Action, XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"manifest";
+
+}  // namespace
+
+CXFA_Manifest::CXFA_Manifest(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Manifest,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Manifest::~CXFA_Manifest() {}
diff --git a/xfa/fxfa/parser/cxfa_manifest.h b/xfa/fxfa/parser/cxfa_manifest.h
new file mode 100644
index 0000000..603df54
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_manifest.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_MANIFEST_H_
+#define XFA_FXFA_PARSER_CXFA_MANIFEST_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Manifest : public CXFA_Node {
+ public:
+  CXFA_Manifest(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Manifest() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_MANIFEST_H_
diff --git a/xfa/fxfa/parser/cxfa_map.cpp b/xfa/fxfa/parser/cxfa_map.cpp
new file mode 100644
index 0000000..b06a5de
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_map.cpp
@@ -0,0 +1,30 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_map.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,   XFA_Attribute::Name,    XFA_Attribute::Use,
+    XFA_Attribute::Bind, XFA_Attribute::Usehref, XFA_Attribute::Desc,
+    XFA_Attribute::From, XFA_Attribute::Lock,    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"map";
+
+}  // namespace
+
+CXFA_Map::CXFA_Map(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Config | XFA_XDPPACKET_SourceSet),
+                XFA_ObjectType::Node,
+                XFA_Element::Map,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Map::~CXFA_Map() {}
diff --git a/xfa/fxfa/parser/cxfa_map.h b/xfa/fxfa/parser/cxfa_map.h
new file mode 100644
index 0000000..b4535c2
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_map.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_MAP_H_
+#define XFA_FXFA_PARSER_CXFA_MAP_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Map : public CXFA_Node {
+ public:
+  CXFA_Map(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Map() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_MAP_H_
diff --git a/xfa/fxfa/parser/cxfa_margin.cpp b/xfa/fxfa/parser/cxfa_margin.cpp
new file mode 100644
index 0000000..5269299
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_margin.cpp
@@ -0,0 +1,33 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_margin.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Extras, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,        XFA_Attribute::Use,
+    XFA_Attribute::LeftInset, XFA_Attribute::BottomInset,
+    XFA_Attribute::TopInset,  XFA_Attribute::RightInset,
+    XFA_Attribute::Usehref,   XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"margin";
+
+}  // namespace
+
+CXFA_Margin::CXFA_Margin(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Margin,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Margin::~CXFA_Margin() {}
diff --git a/xfa/fxfa/parser/cxfa_margin.h b/xfa/fxfa/parser/cxfa_margin.h
new file mode 100644
index 0000000..9883e67
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_margin.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_MARGIN_H_
+#define XFA_FXFA_PARSER_CXFA_MARGIN_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Margin : public CXFA_Node {
+ public:
+  CXFA_Margin(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Margin() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_MARGIN_H_
diff --git a/xfa/fxfa/parser/cxfa_mdp.cpp b/xfa/fxfa/parser/cxfa_mdp.cpp
new file mode 100644
index 0000000..fa41793
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_mdp.cpp
@@ -0,0 +1,32 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_mdp.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Id,
+                                        XFA_Attribute::Use,
+                                        XFA_Attribute::SignatureType,
+                                        XFA_Attribute::Usehref,
+                                        XFA_Attribute::Permissions,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"mdp";
+
+}  // namespace
+
+CXFA_Mdp::CXFA_Mdp(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Mdp,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Mdp::~CXFA_Mdp() {}
diff --git a/xfa/fxfa/parser/cxfa_mdp.h b/xfa/fxfa/parser/cxfa_mdp.h
new file mode 100644
index 0000000..a802b16
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_mdp.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_MDP_H_
+#define XFA_FXFA_PARSER_CXFA_MDP_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Mdp : public CXFA_Node {
+ public:
+  CXFA_Mdp(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Mdp() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_MDP_H_
diff --git a/xfa/fxfa/parser/cxfa_medium.cpp b/xfa/fxfa/parser/cxfa_medium.cpp
new file mode 100644
index 0000000..00c8682
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_medium.cpp
@@ -0,0 +1,33 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_medium.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,          XFA_Attribute::TrayOut,
+    XFA_Attribute::Use,         XFA_Attribute::Orientation,
+    XFA_Attribute::ImagingBBox, XFA_Attribute::Short,
+    XFA_Attribute::TrayIn,      XFA_Attribute::Usehref,
+    XFA_Attribute::Stock,       XFA_Attribute::Long,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"medium";
+
+}  // namespace
+
+CXFA_Medium::CXFA_Medium(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Medium,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Medium::~CXFA_Medium() {}
diff --git a/xfa/fxfa/parser/cxfa_medium.h b/xfa/fxfa/parser/cxfa_medium.h
new file mode 100644
index 0000000..4b5b540
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_medium.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_MEDIUM_H_
+#define XFA_FXFA_PARSER_CXFA_MEDIUM_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Medium : public CXFA_Node {
+ public:
+  CXFA_Medium(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Medium() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_MEDIUM_H_
diff --git a/xfa/fxfa/parser/cxfa_mediuminfo.cpp b/xfa/fxfa/parser/cxfa_mediuminfo.cpp
new file mode 100644
index 0000000..69e6dd0
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_mediuminfo.cpp
@@ -0,0 +1,30 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_mediuminfo.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Map, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"mediumInfo";
+
+}  // namespace
+
+CXFA_MediumInfo::CXFA_MediumInfo(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::MediumInfo,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_MediumInfo::~CXFA_MediumInfo() {}
diff --git a/xfa/fxfa/parser/cxfa_mediuminfo.h b/xfa/fxfa/parser/cxfa_mediuminfo.h
new file mode 100644
index 0000000..11d72b3
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_mediuminfo.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_MEDIUMINFO_H_
+#define XFA_FXFA_PARSER_CXFA_MEDIUMINFO_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_MediumInfo : public CXFA_Node {
+ public:
+  CXFA_MediumInfo(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_MediumInfo() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_MEDIUMINFO_H_
diff --git a/xfa/fxfa/parser/cxfa_meridiem.cpp b/xfa/fxfa/parser/cxfa_meridiem.cpp
new file mode 100644
index 0000000..89227f6
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_meridiem.cpp
@@ -0,0 +1,25 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_meridiem.h"
+
+namespace {
+
+constexpr wchar_t kName[] = L"meridiem";
+
+}  // namespace
+
+CXFA_Meridiem::CXFA_Meridiem(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_LocaleSet,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Meridiem,
+                nullptr,
+                nullptr,
+                kName) {}
+
+CXFA_Meridiem::~CXFA_Meridiem() {}
diff --git a/xfa/fxfa/parser/cxfa_meridiem.h b/xfa/fxfa/parser/cxfa_meridiem.h
new file mode 100644
index 0000000..0c3935c
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_meridiem.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_MERIDIEM_H_
+#define XFA_FXFA_PARSER_CXFA_MERIDIEM_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Meridiem : public CXFA_Node {
+ public:
+  CXFA_Meridiem(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Meridiem() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_MERIDIEM_H_
diff --git a/xfa/fxfa/parser/cxfa_meridiemnames.cpp b/xfa/fxfa/parser/cxfa_meridiemnames.cpp
new file mode 100644
index 0000000..aad222a
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_meridiemnames.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_meridiemnames.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Meridiem, 2, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+
+constexpr wchar_t kName[] = L"meridiemNames";
+
+}  // namespace
+
+CXFA_MeridiemNames::CXFA_MeridiemNames(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_LocaleSet,
+                XFA_ObjectType::Node,
+                XFA_Element::MeridiemNames,
+                kPropertyData,
+                nullptr,
+                kName) {}
+
+CXFA_MeridiemNames::~CXFA_MeridiemNames() {}
diff --git a/xfa/fxfa/parser/cxfa_meridiemnames.h b/xfa/fxfa/parser/cxfa_meridiemnames.h
new file mode 100644
index 0000000..d98761f
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_meridiemnames.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_MERIDIEMNAMES_H_
+#define XFA_FXFA_PARSER_CXFA_MERIDIEMNAMES_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_MeridiemNames : public CXFA_Node {
+ public:
+  CXFA_MeridiemNames(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_MeridiemNames() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_MERIDIEMNAMES_H_
diff --git a/xfa/fxfa/parser/cxfa_message.cpp b/xfa/fxfa/parser/cxfa_message.cpp
new file mode 100644
index 0000000..35e8235
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_message.cpp
@@ -0,0 +1,33 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_message.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::MsgId, 1, 0},
+                                                 {XFA_Element::Severity, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,   XFA_Attribute::Use,  XFA_Attribute::Usehref,
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"message";
+
+}  // namespace
+
+CXFA_Message::CXFA_Message(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(
+          doc,
+          packet,
+          (XFA_XDPPACKET_Config | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+          XFA_ObjectType::Node,
+          XFA_Element::Message,
+          kPropertyData,
+          kAttributeData,
+          kName) {}
+
+CXFA_Message::~CXFA_Message() {}
diff --git a/xfa/fxfa/parser/cxfa_message.h b/xfa/fxfa/parser/cxfa_message.h
new file mode 100644
index 0000000..00ab899
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_message.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_MESSAGE_H_
+#define XFA_FXFA_PARSER_CXFA_MESSAGE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Message : public CXFA_Node {
+ public:
+  CXFA_Message(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Message() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_MESSAGE_H_
diff --git a/xfa/fxfa/parser/cxfa_messaging.cpp b/xfa/fxfa/parser/cxfa_messaging.cpp
new file mode 100644
index 0000000..c37ec66
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_messaging.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_messaging.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"messaging";
+
+}  // namespace
+
+CXFA_Messaging::CXFA_Messaging(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::Messaging,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Messaging::~CXFA_Messaging() {}
diff --git a/xfa/fxfa/parser/cxfa_messaging.h b/xfa/fxfa/parser/cxfa_messaging.h
new file mode 100644
index 0000000..266c345
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_messaging.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_MESSAGING_H_
+#define XFA_FXFA_PARSER_CXFA_MESSAGING_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Messaging : public CXFA_Node {
+ public:
+  CXFA_Messaging(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Messaging() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_MESSAGING_H_
diff --git a/xfa/fxfa/parser/cxfa_mode.cpp b/xfa/fxfa/parser/cxfa_mode.cpp
new file mode 100644
index 0000000..9019957
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_mode.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_mode.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"mode";
+
+}  // namespace
+
+CXFA_Mode::CXFA_Mode(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Mode,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Mode::~CXFA_Mode() {}
diff --git a/xfa/fxfa/parser/cxfa_mode.h b/xfa/fxfa/parser/cxfa_mode.h
new file mode 100644
index 0000000..3385061
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_mode.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_MODE_H_
+#define XFA_FXFA_PARSER_CXFA_MODE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Mode : public CXFA_Node {
+ public:
+  CXFA_Mode(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Mode() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_MODE_H_
diff --git a/xfa/fxfa/parser/cxfa_modifyannots.cpp b/xfa/fxfa/parser/cxfa_modifyannots.cpp
new file mode 100644
index 0000000..baaf574
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_modifyannots.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_modifyannots.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"modifyAnnots";
+
+}  // namespace
+
+CXFA_ModifyAnnots::CXFA_ModifyAnnots(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::ModifyAnnots,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_ModifyAnnots::~CXFA_ModifyAnnots() {}
diff --git a/xfa/fxfa/parser/cxfa_modifyannots.h b/xfa/fxfa/parser/cxfa_modifyannots.h
new file mode 100644
index 0000000..601a7a3
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_modifyannots.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_MODIFYANNOTS_H_
+#define XFA_FXFA_PARSER_CXFA_MODIFYANNOTS_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_ModifyAnnots : public CXFA_Node {
+ public:
+  CXFA_ModifyAnnots(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_ModifyAnnots() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_MODIFYANNOTS_H_
diff --git a/xfa/fxfa/parser/cxfa_month.cpp b/xfa/fxfa/parser/cxfa_month.cpp
new file mode 100644
index 0000000..94b9dc0
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_month.cpp
@@ -0,0 +1,25 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_month.h"
+
+namespace {
+
+constexpr wchar_t kName[] = L"month";
+
+}  // namespace
+
+CXFA_Month::CXFA_Month(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_LocaleSet,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Month,
+                nullptr,
+                nullptr,
+                kName) {}
+
+CXFA_Month::~CXFA_Month() {}
diff --git a/xfa/fxfa/parser/cxfa_month.h b/xfa/fxfa/parser/cxfa_month.h
new file mode 100644
index 0000000..1936612
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_month.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_MONTH_H_
+#define XFA_FXFA_PARSER_CXFA_MONTH_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Month : public CXFA_Node {
+ public:
+  CXFA_Month(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Month() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_MONTH_H_
diff --git a/xfa/fxfa/parser/cxfa_monthnames.cpp b/xfa/fxfa/parser/cxfa_monthnames.cpp
new file mode 100644
index 0000000..abd301d
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_monthnames.cpp
@@ -0,0 +1,30 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_monthnames.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Month, 12, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Abbr,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"monthNames";
+
+}  // namespace
+
+CXFA_MonthNames::CXFA_MonthNames(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_LocaleSet,
+                XFA_ObjectType::Node,
+                XFA_Element::MonthNames,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_MonthNames::~CXFA_MonthNames() {}
diff --git a/xfa/fxfa/parser/cxfa_monthnames.h b/xfa/fxfa/parser/cxfa_monthnames.h
new file mode 100644
index 0000000..9b221d6
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_monthnames.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_MONTHNAMES_H_
+#define XFA_FXFA_PARSER_CXFA_MONTHNAMES_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_MonthNames : public CXFA_Node {
+ public:
+  CXFA_MonthNames(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_MonthNames() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_MONTHNAMES_H_
diff --git a/xfa/fxfa/parser/cxfa_msgid.cpp b/xfa/fxfa/parser/cxfa_msgid.cpp
new file mode 100644
index 0000000..642abb9
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_msgid.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_msgid.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"msgId";
+
+}  // namespace
+
+CXFA_MsgId::CXFA_MsgId(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::NodeV,
+                XFA_Element::MsgId,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_MsgId::~CXFA_MsgId() {}
diff --git a/xfa/fxfa/parser/cxfa_msgid.h b/xfa/fxfa/parser/cxfa_msgid.h
new file mode 100644
index 0000000..c8d30d6
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_msgid.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_MSGID_H_
+#define XFA_FXFA_PARSER_CXFA_MSGID_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_MsgId : public CXFA_Node {
+ public:
+  CXFA_MsgId(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_MsgId() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_MSGID_H_
diff --git a/xfa/fxfa/parser/cxfa_nameattr.cpp b/xfa/fxfa/parser/cxfa_nameattr.cpp
new file mode 100644
index 0000000..4f9e832
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_nameattr.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_nameattr.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"nameAttr";
+
+}  // namespace
+
+CXFA_NameAttr::CXFA_NameAttr(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::NodeV,
+                XFA_Element::NameAttr,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_NameAttr::~CXFA_NameAttr() {}
diff --git a/xfa/fxfa/parser/cxfa_nameattr.h b/xfa/fxfa/parser/cxfa_nameattr.h
new file mode 100644
index 0000000..bcd0232
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_nameattr.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_NAMEATTR_H_
+#define XFA_FXFA_PARSER_CXFA_NAMEATTR_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_NameAttr : public CXFA_Node {
+ public:
+  CXFA_NameAttr(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_NameAttr() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_NAMEATTR_H_
diff --git a/xfa/fxfa/parser/cxfa_neverembed.cpp b/xfa/fxfa/parser/cxfa_neverembed.cpp
new file mode 100644
index 0000000..32f6b13
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_neverembed.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_neverembed.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"neverEmbed";
+
+}  // namespace
+
+CXFA_NeverEmbed::CXFA_NeverEmbed(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::NodeV,
+                XFA_Element::NeverEmbed,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_NeverEmbed::~CXFA_NeverEmbed() {}
diff --git a/xfa/fxfa/parser/cxfa_neverembed.h b/xfa/fxfa/parser/cxfa_neverembed.h
new file mode 100644
index 0000000..8be160f
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_neverembed.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_NEVEREMBED_H_
+#define XFA_FXFA_PARSER_CXFA_NEVEREMBED_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_NeverEmbed : public CXFA_Node {
+ public:
+  CXFA_NeverEmbed(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_NeverEmbed() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_NEVEREMBED_H_
diff --git a/xfa/fxfa/parser/cxfa_node.cpp b/xfa/fxfa/parser/cxfa_node.cpp
index a947374..ccbf310 100644
--- a/xfa/fxfa/parser/cxfa_node.cpp
+++ b/xfa/fxfa/parser/cxfa_node.cpp
@@ -138,24 +138,22 @@
   return g_XFAEnumData + eName;
 }
 
-// static
-std::unique_ptr<CXFA_Node> CXFA_Node::Create(CXFA_Document* doc,
-                                             XFA_XDPPACKET packet,
-                                             const XFA_ELEMENTINFO* pElement) {
-  return std::unique_ptr<CXFA_Node>(new CXFA_Node(
-      doc, packet, pElement->eObjectType, pElement->eName, pElement->pName));
-}
-
 CXFA_Node::CXFA_Node(CXFA_Document* pDoc,
                      uint16_t ePacket,
+                     uint32_t validPackets,
                      XFA_ObjectType oType,
                      XFA_Element eType,
+                     const PropertyData* properties,
+                     const XFA_Attribute* attributes,
                      const WideStringView& elementName)
     : CXFA_Object(pDoc,
                   oType,
                   eType,
                   elementName,
                   pdfium::MakeUnique<CJX_Node>(this)),
+      m_Properties(properties),
+      m_Attributes(attributes),
+      m_ValidPackets(validPackets),
       m_pNext(nullptr),
       m_pChild(nullptr),
       m_pLastChild(nullptr),
@@ -245,6 +243,75 @@
   return nullptr;
 }
 
+bool CXFA_Node::IsValidInPacket(XFA_XDPPACKET packet) const {
+  return !!(m_ValidPackets & packet);
+}
+
+const CXFA_Node::PropertyData* CXFA_Node::GetPropertyData(
+    XFA_Element property) const {
+  if (m_Properties == nullptr)
+    return nullptr;
+
+  for (size_t i = 0;; ++i) {
+    const PropertyData* data = m_Properties + i;
+    if (data->property == XFA_Element::Unknown)
+      break;
+    if (data->property == property)
+      return data;
+  }
+  return nullptr;
+}
+
+bool CXFA_Node::HasProperty(XFA_Element property) const {
+  return !!GetPropertyData(property);
+}
+
+bool CXFA_Node::HasPropertyFlags(XFA_Element property, uint8_t flags) const {
+  const PropertyData* data = GetPropertyData(property);
+  return data && !!(data->flags & flags);
+}
+
+uint8_t CXFA_Node::PropertyOccuranceCount(XFA_Element property) const {
+  const PropertyData* data = GetPropertyData(property);
+  return data ? data->occurance_count : 0;
+}
+
+pdfium::Optional<XFA_Element> CXFA_Node::GetFirstPropertyWithFlag(
+    uint8_t flag) {
+  if (m_Properties == nullptr)
+    return {};
+
+  for (size_t i = 0;; ++i) {
+    const PropertyData* data = m_Properties + i;
+    if (data->property == XFA_Element::Unknown)
+      break;
+    if (data->flags & flag)
+      return {data->property};
+  }
+  return {};
+}
+
+bool CXFA_Node::HasAttribute(XFA_Attribute attr) const {
+  if (m_Attributes == nullptr)
+    return false;
+
+  for (size_t i = 0;; ++i) {
+    XFA_Attribute cur_attr = *(m_Attributes + i);
+    if (cur_attr == XFA_Attribute::Unknown)
+      break;
+    if (cur_attr == attr)
+      return true;
+  }
+  return false;
+}
+
+// Note: This Method assumes that i is a valid index ....
+XFA_Attribute CXFA_Node::GetAttribute(size_t i) const {
+  if (m_Attributes == nullptr)
+    return XFA_Attribute::Unknown;
+  return *(m_Attributes + i);
+}
+
 CXFA_Node* CXFA_Node::GetNodeItem(XFA_NODEITEM eItem,
                                   XFA_ObjectType eType) const {
   CXFA_Node* pNode = nullptr;
@@ -283,61 +350,63 @@
 
 std::vector<CXFA_Node*> CXFA_Node::GetNodeList(uint32_t dwTypeFilter,
                                                XFA_Element eTypeFilter) {
-  std::vector<CXFA_Node*> nodes;
   if (eTypeFilter != XFA_Element::Unknown) {
+    std::vector<CXFA_Node*> nodes;
     for (CXFA_Node* pChild = m_pChild; pChild; pChild = pChild->m_pNext) {
       if (pChild->GetElementType() == eTypeFilter)
         nodes.push_back(pChild);
     }
-  } else if (dwTypeFilter ==
-             (XFA_NODEFILTER_Children | XFA_NODEFILTER_Properties)) {
+    return nodes;
+  }
+
+  if (dwTypeFilter == (XFA_NODEFILTER_Children | XFA_NODEFILTER_Properties)) {
+    std::vector<CXFA_Node*> nodes;
     for (CXFA_Node* pChild = m_pChild; pChild; pChild = pChild->m_pNext)
       nodes.push_back(pChild);
-  } else if (dwTypeFilter != 0) {
-    bool bFilterChildren = !!(dwTypeFilter & XFA_NODEFILTER_Children);
-    bool bFilterProperties = !!(dwTypeFilter & XFA_NODEFILTER_Properties);
-    bool bFilterOneOfProperties =
-        !!(dwTypeFilter & XFA_NODEFILTER_OneOfProperty);
-    CXFA_Node* pChild = m_pChild;
-    while (pChild) {
-      const XFA_PROPERTY* pProperty = XFA_GetPropertyOfElement(
-          GetElementType(), pChild->GetElementType(), XFA_XDPPACKET_UNKNOWN);
-      if (pProperty) {
-        if (bFilterProperties) {
-          nodes.push_back(pChild);
-        } else if (bFilterOneOfProperties &&
-                   (pProperty->uFlags & XFA_PROPERTYFLAG_OneOf)) {
-          nodes.push_back(pChild);
-        } else if (bFilterChildren &&
-                   (pChild->GetElementType() == XFA_Element::Variables ||
-                    pChild->GetElementType() == XFA_Element::PageSet)) {
-          nodes.push_back(pChild);
-        }
-      } else if (bFilterChildren) {
+    return nodes;
+  }
+
+  if (dwTypeFilter == 0)
+    return std::vector<CXFA_Node*>();
+
+  bool bFilterChildren = !!(dwTypeFilter & XFA_NODEFILTER_Children);
+  bool bFilterProperties = !!(dwTypeFilter & XFA_NODEFILTER_Properties);
+  bool bFilterOneOfProperties = !!(dwTypeFilter & XFA_NODEFILTER_OneOfProperty);
+  std::vector<CXFA_Node*> nodes;
+  for (CXFA_Node* pChild = m_pChild; pChild; pChild = pChild->m_pNext) {
+    if (!HasProperty(pChild->GetElementType())) {
+      if (bFilterProperties) {
+        nodes.push_back(pChild);
+      } else if (bFilterOneOfProperties &&
+                 HasPropertyFlags(pChild->GetElementType(),
+                                  XFA_PROPERTYFLAG_OneOf)) {
+        nodes.push_back(pChild);
+      } else if (bFilterChildren &&
+                 (pChild->GetElementType() == XFA_Element::Variables ||
+                  pChild->GetElementType() == XFA_Element::PageSet)) {
         nodes.push_back(pChild);
       }
-      pChild = pChild->m_pNext;
+    } else if (bFilterChildren) {
+      nodes.push_back(pChild);
     }
-    if (bFilterOneOfProperties && nodes.empty()) {
-      int32_t iProperties = 0;
-      const XFA_PROPERTY* pProperty =
-          XFA_GetElementProperties(GetElementType(), iProperties);
-      if (!pProperty || iProperties < 1)
-        return nodes;
-      for (int32_t i = 0; i < iProperties; i++) {
-        if (pProperty[i].uFlags & XFA_PROPERTYFLAG_DefaultOneOf) {
-          const XFA_PACKETINFO* pPacket = XFA_GetPacketByID(GetPacketID());
-          CXFA_Node* pNewNode =
-              m_pDocument->CreateNode(pPacket, pProperty[i].eName);
-          if (!pNewNode)
-            break;
-          InsertChild(pNewNode, nullptr);
-          pNewNode->SetFlag(XFA_NodeFlag_Initialized, true);
-          nodes.push_back(pNewNode);
-          break;
-        }
-      }
-    }
+  }
+
+  if (!bFilterOneOfProperties || !nodes.empty())
+    return nodes;
+  if (m_Properties == nullptr)
+    return nodes;
+
+  pdfium::Optional<XFA_Element> property =
+      GetFirstPropertyWithFlag(XFA_PROPERTYFLAG_DefaultOneOf);
+  if (!property)
+    return nodes;
+
+  const XFA_PACKETINFO* pPacket = XFA_GetPacketByID(GetPacketID());
+  CXFA_Node* pNewNode = m_pDocument->CreateNode(pPacket, *property);
+  if (pNewNode) {
+    InsertChild(pNewNode, nullptr);
+    pNewNode->SetFlag(XFA_NodeFlag_Initialized, true);
+    nodes.push_back(pNewNode);
   }
   return nodes;
 }
@@ -671,19 +740,14 @@
 }
 
 int32_t CXFA_Node::CountChildren(XFA_Element eType, bool bOnlyChild) {
-  CXFA_Node* pNode = m_pChild;
   int32_t iCount = 0;
-  for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) {
-    if (pNode->GetElementType() == eType || eType == XFA_Element::Unknown) {
-      if (bOnlyChild) {
-        const XFA_PROPERTY* pProperty = XFA_GetPropertyOfElement(
-            GetElementType(), pNode->GetElementType(), XFA_XDPPACKET_UNKNOWN);
-        if (pProperty) {
-          continue;
-        }
-      }
-      iCount++;
-    }
+  for (CXFA_Node* pNode = m_pChild; pNode;
+       pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) {
+    if (pNode->GetElementType() != eType && eType != XFA_Element::Unknown)
+      continue;
+    if (bOnlyChild && HasProperty(pNode->GetElementType()))
+      continue;
+    ++iCount;
   }
   return iCount;
 }
@@ -692,22 +756,18 @@
                                XFA_Element eType,
                                bool bOnlyChild) {
   ASSERT(index > -1);
-  CXFA_Node* pNode = m_pChild;
+
   int32_t iCount = 0;
-  for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) {
-    if (pNode->GetElementType() == eType || eType == XFA_Element::Unknown) {
-      if (bOnlyChild) {
-        const XFA_PROPERTY* pProperty = XFA_GetPropertyOfElement(
-            GetElementType(), pNode->GetElementType(), XFA_XDPPACKET_UNKNOWN);
-        if (pProperty) {
-          continue;
-        }
-      }
-      iCount++;
-      if (iCount > index) {
-        return pNode;
-      }
-    }
+  for (CXFA_Node* pNode = m_pChild; pNode;
+       pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) {
+    if (pNode->GetElementType() != eType && eType != XFA_Element::Unknown)
+      continue;
+    if (bOnlyChild && HasProperty(pNode->GetElementType()))
+      continue;
+    if (iCount == index)
+      return pNode;
+
+    ++iCount;
   }
   return nullptr;
 }
diff --git a/xfa/fxfa/parser/cxfa_node.h b/xfa/fxfa/parser/cxfa_node.h
index dc4710a..7b7086e 100644
--- a/xfa/fxfa/parser/cxfa_node.h
+++ b/xfa/fxfa/parser/cxfa_node.h
@@ -9,6 +9,7 @@
 
 #include <map>
 #include <memory>
+#include <utility>
 #include <vector>
 
 #include "core/fxcrt/fx_string.h"
@@ -46,12 +47,28 @@
 
 class CXFA_Node : public CXFA_Object {
  public:
+  struct PropertyData {
+    XFA_Element property;
+    uint8_t occurance_count;
+    uint8_t flags;
+  };
+
+  static XFA_Element NameToElement(const WideString& name);
   static std::unique_ptr<CXFA_Node> Create(CXFA_Document* doc,
-                                           XFA_XDPPACKET packet,
-                                           const XFA_ELEMENTINFO* pElement);
+                                           XFA_Element element,
+                                           XFA_XDPPACKET packet);
 
   ~CXFA_Node() override;
 
+  bool IsValidInPacket(XFA_XDPPACKET packet) const;
+
+  bool HasProperty(XFA_Element property) const;
+  bool HasPropertyFlags(XFA_Element property, uint8_t flags) const;
+  uint8_t PropertyOccuranceCount(XFA_Element property) const;
+
+  bool HasAttribute(XFA_Attribute attr) const;
+  XFA_Attribute GetAttribute(size_t i) const;
+
   uint32_t GetPacketID() const { return m_ePacket; }
 
   void SetFlag(uint32_t dwFlag, bool bNotify);
@@ -148,18 +165,26 @@
   pdfium::Optional<WideString> GetDefaultCData(XFA_Attribute attr) const;
   pdfium::Optional<XFA_ATTRIBUTEENUM> GetDefaultEnum(XFA_Attribute attr) const;
 
- private:
+ protected:
   CXFA_Node(CXFA_Document* pDoc,
             uint16_t ePacket,
+            uint32_t validPackets,
             XFA_ObjectType oType,
             XFA_Element eType,
+            const PropertyData* properties,
+            const XFA_Attribute* attributes,
             const WideStringView& elementName);
 
+ private:
   bool HasFlag(XFA_NodeFlag dwFlag) const;
   CXFA_Node* Deprecated_GetPrevSibling();
-
+  const PropertyData* GetPropertyData(XFA_Element property) const;
+  pdfium::Optional<XFA_Element> GetFirstPropertyWithFlag(uint8_t flag);
   void OnRemoved(bool bNotify);
 
+  const PropertyData* m_Properties;
+  const XFA_Attribute* m_Attributes;
+  uint32_t m_ValidPackets;
   CXFA_Node* m_pNext;
   CXFA_Node* m_pChild;
   CXFA_Node* m_pLastChild;
diff --git a/xfa/fxfa/parser/cxfa_node_statics.cpp b/xfa/fxfa/parser/cxfa_node_statics.cpp
new file mode 100644
index 0000000..d0e65c8
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_node_statics.cpp
@@ -0,0 +1,1606 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include <memory>
+
+#include "third_party/base/ptr_util.h"
+#include "xfa/fxfa/parser/cxfa_accessiblecontent.h"
+#include "xfa/fxfa/parser/cxfa_acrobat.h"
+#include "xfa/fxfa/parser/cxfa_acrobat7.h"
+#include "xfa/fxfa/parser/cxfa_adbe_jsconsole.h"
+#include "xfa/fxfa/parser/cxfa_adbe_jsdebugger.h"
+#include "xfa/fxfa/parser/cxfa_addsilentprint.h"
+#include "xfa/fxfa/parser/cxfa_addviewerpreferences.h"
+#include "xfa/fxfa/parser/cxfa_adjustdata.h"
+#include "xfa/fxfa/parser/cxfa_adobeextensionlevel.h"
+#include "xfa/fxfa/parser/cxfa_agent.h"
+#include "xfa/fxfa/parser/cxfa_alwaysembed.h"
+#include "xfa/fxfa/parser/cxfa_amd.h"
+#include "xfa/fxfa/parser/cxfa_appearancefilter.h"
+#include "xfa/fxfa/parser/cxfa_arc.h"
+#include "xfa/fxfa/parser/cxfa_area.h"
+#include "xfa/fxfa/parser/cxfa_assist.h"
+#include "xfa/fxfa/parser/cxfa_attributes.h"
+#include "xfa/fxfa/parser/cxfa_autosave.h"
+#include "xfa/fxfa/parser/cxfa_barcode.h"
+#include "xfa/fxfa/parser/cxfa_base.h"
+#include "xfa/fxfa/parser/cxfa_batchoutput.h"
+#include "xfa/fxfa/parser/cxfa_behavioroverride.h"
+#include "xfa/fxfa/parser/cxfa_bind.h"
+#include "xfa/fxfa/parser/cxfa_binditems.h"
+#include "xfa/fxfa/parser/cxfa_bookend.h"
+#include "xfa/fxfa/parser/cxfa_boolean.h"
+#include "xfa/fxfa/parser/cxfa_border.h"
+#include "xfa/fxfa/parser/cxfa_break.h"
+#include "xfa/fxfa/parser/cxfa_breakafter.h"
+#include "xfa/fxfa/parser/cxfa_breakbefore.h"
+#include "xfa/fxfa/parser/cxfa_button.h"
+#include "xfa/fxfa/parser/cxfa_cache.h"
+#include "xfa/fxfa/parser/cxfa_calculate.h"
+#include "xfa/fxfa/parser/cxfa_calendarsymbols.h"
+#include "xfa/fxfa/parser/cxfa_caption.h"
+#include "xfa/fxfa/parser/cxfa_certificate.h"
+#include "xfa/fxfa/parser/cxfa_certificates.h"
+#include "xfa/fxfa/parser/cxfa_change.h"
+#include "xfa/fxfa/parser/cxfa_checkbutton.h"
+#include "xfa/fxfa/parser/cxfa_choicelist.h"
+#include "xfa/fxfa/parser/cxfa_color.h"
+#include "xfa/fxfa/parser/cxfa_comb.h"
+#include "xfa/fxfa/parser/cxfa_command.h"
+#include "xfa/fxfa/parser/cxfa_common.h"
+#include "xfa/fxfa/parser/cxfa_compress.h"
+#include "xfa/fxfa/parser/cxfa_compression.h"
+#include "xfa/fxfa/parser/cxfa_compresslogicalstructure.h"
+#include "xfa/fxfa/parser/cxfa_compressobjectstream.h"
+#include "xfa/fxfa/parser/cxfa_config.h"
+#include "xfa/fxfa/parser/cxfa_conformance.h"
+#include "xfa/fxfa/parser/cxfa_connect.h"
+#include "xfa/fxfa/parser/cxfa_connectionset.h"
+#include "xfa/fxfa/parser/cxfa_connectstring.h"
+#include "xfa/fxfa/parser/cxfa_contentarea.h"
+#include "xfa/fxfa/parser/cxfa_contentcopy.h"
+#include "xfa/fxfa/parser/cxfa_copies.h"
+#include "xfa/fxfa/parser/cxfa_corner.h"
+#include "xfa/fxfa/parser/cxfa_creator.h"
+#include "xfa/fxfa/parser/cxfa_currencysymbol.h"
+#include "xfa/fxfa/parser/cxfa_currencysymbols.h"
+#include "xfa/fxfa/parser/cxfa_currentpage.h"
+#include "xfa/fxfa/parser/cxfa_data.h"
+#include "xfa/fxfa/parser/cxfa_datagroup.h"
+#include "xfa/fxfa/parser/cxfa_datamodel.h"
+#include "xfa/fxfa/parser/cxfa_datavalue.h"
+#include "xfa/fxfa/parser/cxfa_datawindow.h"
+#include "xfa/fxfa/parser/cxfa_date.h"
+#include "xfa/fxfa/parser/cxfa_datepattern.h"
+#include "xfa/fxfa/parser/cxfa_datepatterns.h"
+#include "xfa/fxfa/parser/cxfa_datetime.h"
+#include "xfa/fxfa/parser/cxfa_datetimeedit.h"
+#include "xfa/fxfa/parser/cxfa_datetimesymbols.h"
+#include "xfa/fxfa/parser/cxfa_day.h"
+#include "xfa/fxfa/parser/cxfa_daynames.h"
+#include "xfa/fxfa/parser/cxfa_debug.h"
+#include "xfa/fxfa/parser/cxfa_decimal.h"
+#include "xfa/fxfa/parser/cxfa_defaulttypeface.h"
+#include "xfa/fxfa/parser/cxfa_defaultui.h"
+#include "xfa/fxfa/parser/cxfa_delete.h"
+#include "xfa/fxfa/parser/cxfa_delta.h"
+#include "xfa/fxfa/parser/cxfa_deltas.h"
+#include "xfa/fxfa/parser/cxfa_desc.h"
+#include "xfa/fxfa/parser/cxfa_destination.h"
+#include "xfa/fxfa/parser/cxfa_digestmethod.h"
+#include "xfa/fxfa/parser/cxfa_digestmethods.h"
+#include "xfa/fxfa/parser/cxfa_documentassembly.h"
+#include "xfa/fxfa/parser/cxfa_draw.h"
+#include "xfa/fxfa/parser/cxfa_driver.h"
+#include "xfa/fxfa/parser/cxfa_dsigdata.h"
+#include "xfa/fxfa/parser/cxfa_duplexoption.h"
+#include "xfa/fxfa/parser/cxfa_dynamicrender.h"
+#include "xfa/fxfa/parser/cxfa_edge.h"
+#include "xfa/fxfa/parser/cxfa_effectiveinputpolicy.h"
+#include "xfa/fxfa/parser/cxfa_effectiveoutputpolicy.h"
+#include "xfa/fxfa/parser/cxfa_embed.h"
+#include "xfa/fxfa/parser/cxfa_encoding.h"
+#include "xfa/fxfa/parser/cxfa_encodings.h"
+#include "xfa/fxfa/parser/cxfa_encrypt.h"
+#include "xfa/fxfa/parser/cxfa_encryption.h"
+#include "xfa/fxfa/parser/cxfa_encryptionlevel.h"
+#include "xfa/fxfa/parser/cxfa_encryptionmethod.h"
+#include "xfa/fxfa/parser/cxfa_encryptionmethods.h"
+#include "xfa/fxfa/parser/cxfa_enforce.h"
+#include "xfa/fxfa/parser/cxfa_equate.h"
+#include "xfa/fxfa/parser/cxfa_equaterange.h"
+#include "xfa/fxfa/parser/cxfa_era.h"
+#include "xfa/fxfa/parser/cxfa_eranames.h"
+#include "xfa/fxfa/parser/cxfa_event.h"
+#include "xfa/fxfa/parser/cxfa_eventpseudomodel.h"
+#include "xfa/fxfa/parser/cxfa_exclgroup.h"
+#include "xfa/fxfa/parser/cxfa_exclude.h"
+#include "xfa/fxfa/parser/cxfa_excludens.h"
+#include "xfa/fxfa/parser/cxfa_exdata.h"
+#include "xfa/fxfa/parser/cxfa_execute.h"
+#include "xfa/fxfa/parser/cxfa_exobject.h"
+#include "xfa/fxfa/parser/cxfa_extras.h"
+#include "xfa/fxfa/parser/cxfa_field.h"
+#include "xfa/fxfa/parser/cxfa_fill.h"
+#include "xfa/fxfa/parser/cxfa_filter.h"
+#include "xfa/fxfa/parser/cxfa_fliplabel.h"
+#include "xfa/fxfa/parser/cxfa_float.h"
+#include "xfa/fxfa/parser/cxfa_font.h"
+#include "xfa/fxfa/parser/cxfa_fontinfo.h"
+#include "xfa/fxfa/parser/cxfa_form.h"
+#include "xfa/fxfa/parser/cxfa_format.h"
+#include "xfa/fxfa/parser/cxfa_formfieldfilling.h"
+#include "xfa/fxfa/parser/cxfa_groupparent.h"
+#include "xfa/fxfa/parser/cxfa_handler.h"
+#include "xfa/fxfa/parser/cxfa_hostpseudomodel.h"
+#include "xfa/fxfa/parser/cxfa_hyphenation.h"
+#include "xfa/fxfa/parser/cxfa_ifempty.h"
+#include "xfa/fxfa/parser/cxfa_image.h"
+#include "xfa/fxfa/parser/cxfa_imageedit.h"
+#include "xfa/fxfa/parser/cxfa_includexdpcontent.h"
+#include "xfa/fxfa/parser/cxfa_incrementalload.h"
+#include "xfa/fxfa/parser/cxfa_incrementalmerge.h"
+#include "xfa/fxfa/parser/cxfa_insert.h"
+#include "xfa/fxfa/parser/cxfa_instancemanager.h"
+#include "xfa/fxfa/parser/cxfa_integer.h"
+#include "xfa/fxfa/parser/cxfa_interactive.h"
+#include "xfa/fxfa/parser/cxfa_issuers.h"
+#include "xfa/fxfa/parser/cxfa_items.h"
+#include "xfa/fxfa/parser/cxfa_jog.h"
+#include "xfa/fxfa/parser/cxfa_keep.h"
+#include "xfa/fxfa/parser/cxfa_keyusage.h"
+#include "xfa/fxfa/parser/cxfa_labelprinter.h"
+#include "xfa/fxfa/parser/cxfa_layout.h"
+#include "xfa/fxfa/parser/cxfa_layoutpseudomodel.h"
+#include "xfa/fxfa/parser/cxfa_level.h"
+#include "xfa/fxfa/parser/cxfa_line.h"
+#include "xfa/fxfa/parser/cxfa_linear.h"
+#include "xfa/fxfa/parser/cxfa_linearized.h"
+#include "xfa/fxfa/parser/cxfa_list.h"
+#include "xfa/fxfa/parser/cxfa_locale.h"
+#include "xfa/fxfa/parser/cxfa_localeset.h"
+#include "xfa/fxfa/parser/cxfa_lockdocument.h"
+#include "xfa/fxfa/parser/cxfa_log.h"
+#include "xfa/fxfa/parser/cxfa_logpseudomodel.h"
+#include "xfa/fxfa/parser/cxfa_manifest.h"
+#include "xfa/fxfa/parser/cxfa_map.h"
+#include "xfa/fxfa/parser/cxfa_margin.h"
+#include "xfa/fxfa/parser/cxfa_mdp.h"
+#include "xfa/fxfa/parser/cxfa_medium.h"
+#include "xfa/fxfa/parser/cxfa_mediuminfo.h"
+#include "xfa/fxfa/parser/cxfa_meridiem.h"
+#include "xfa/fxfa/parser/cxfa_meridiemnames.h"
+#include "xfa/fxfa/parser/cxfa_message.h"
+#include "xfa/fxfa/parser/cxfa_messaging.h"
+#include "xfa/fxfa/parser/cxfa_mode.h"
+#include "xfa/fxfa/parser/cxfa_modifyannots.h"
+#include "xfa/fxfa/parser/cxfa_month.h"
+#include "xfa/fxfa/parser/cxfa_monthnames.h"
+#include "xfa/fxfa/parser/cxfa_msgid.h"
+#include "xfa/fxfa/parser/cxfa_nameattr.h"
+#include "xfa/fxfa/parser/cxfa_neverembed.h"
+#include "xfa/fxfa/parser/cxfa_node.h"
+#include "xfa/fxfa/parser/cxfa_numberofcopies.h"
+#include "xfa/fxfa/parser/cxfa_numberpattern.h"
+#include "xfa/fxfa/parser/cxfa_numberpatterns.h"
+#include "xfa/fxfa/parser/cxfa_numbersymbol.h"
+#include "xfa/fxfa/parser/cxfa_numbersymbols.h"
+#include "xfa/fxfa/parser/cxfa_numericedit.h"
+#include "xfa/fxfa/parser/cxfa_occur.h"
+#include "xfa/fxfa/parser/cxfa_oid.h"
+#include "xfa/fxfa/parser/cxfa_oids.h"
+#include "xfa/fxfa/parser/cxfa_openaction.h"
+#include "xfa/fxfa/parser/cxfa_operation.h"
+#include "xfa/fxfa/parser/cxfa_output.h"
+#include "xfa/fxfa/parser/cxfa_outputbin.h"
+#include "xfa/fxfa/parser/cxfa_outputxsl.h"
+#include "xfa/fxfa/parser/cxfa_overflow.h"
+#include "xfa/fxfa/parser/cxfa_overprint.h"
+#include "xfa/fxfa/parser/cxfa_packet.h"
+#include "xfa/fxfa/parser/cxfa_packets.h"
+#include "xfa/fxfa/parser/cxfa_pagearea.h"
+#include "xfa/fxfa/parser/cxfa_pageoffset.h"
+#include "xfa/fxfa/parser/cxfa_pagerange.h"
+#include "xfa/fxfa/parser/cxfa_pageset.h"
+#include "xfa/fxfa/parser/cxfa_pagination.h"
+#include "xfa/fxfa/parser/cxfa_paginationoverride.h"
+#include "xfa/fxfa/parser/cxfa_para.h"
+#include "xfa/fxfa/parser/cxfa_part.h"
+#include "xfa/fxfa/parser/cxfa_password.h"
+#include "xfa/fxfa/parser/cxfa_passwordedit.h"
+#include "xfa/fxfa/parser/cxfa_pattern.h"
+#include "xfa/fxfa/parser/cxfa_pcl.h"
+#include "xfa/fxfa/parser/cxfa_pdf.h"
+#include "xfa/fxfa/parser/cxfa_pdfa.h"
+#include "xfa/fxfa/parser/cxfa_permissions.h"
+#include "xfa/fxfa/parser/cxfa_picktraybypdfsize.h"
+#include "xfa/fxfa/parser/cxfa_picture.h"
+#include "xfa/fxfa/parser/cxfa_plaintextmetadata.h"
+#include "xfa/fxfa/parser/cxfa_presence.h"
+#include "xfa/fxfa/parser/cxfa_present.h"
+#include "xfa/fxfa/parser/cxfa_print.h"
+#include "xfa/fxfa/parser/cxfa_printername.h"
+#include "xfa/fxfa/parser/cxfa_printhighquality.h"
+#include "xfa/fxfa/parser/cxfa_printscaling.h"
+#include "xfa/fxfa/parser/cxfa_producer.h"
+#include "xfa/fxfa/parser/cxfa_proto.h"
+#include "xfa/fxfa/parser/cxfa_ps.h"
+#include "xfa/fxfa/parser/cxfa_psmap.h"
+#include "xfa/fxfa/parser/cxfa_query.h"
+#include "xfa/fxfa/parser/cxfa_radial.h"
+#include "xfa/fxfa/parser/cxfa_range.h"
+#include "xfa/fxfa/parser/cxfa_reason.h"
+#include "xfa/fxfa/parser/cxfa_reasons.h"
+#include "xfa/fxfa/parser/cxfa_record.h"
+#include "xfa/fxfa/parser/cxfa_recordset.h"
+#include "xfa/fxfa/parser/cxfa_rectangle.h"
+#include "xfa/fxfa/parser/cxfa_ref.h"
+#include "xfa/fxfa/parser/cxfa_relevant.h"
+#include "xfa/fxfa/parser/cxfa_rename.h"
+#include "xfa/fxfa/parser/cxfa_renderpolicy.h"
+#include "xfa/fxfa/parser/cxfa_rootelement.h"
+#include "xfa/fxfa/parser/cxfa_runscripts.h"
+#include "xfa/fxfa/parser/cxfa_script.h"
+#include "xfa/fxfa/parser/cxfa_scriptmodel.h"
+#include "xfa/fxfa/parser/cxfa_select.h"
+#include "xfa/fxfa/parser/cxfa_setproperty.h"
+#include "xfa/fxfa/parser/cxfa_severity.h"
+#include "xfa/fxfa/parser/cxfa_sharptext.h"
+#include "xfa/fxfa/parser/cxfa_sharpxhtml.h"
+#include "xfa/fxfa/parser/cxfa_sharpxml.h"
+#include "xfa/fxfa/parser/cxfa_signature.h"
+#include "xfa/fxfa/parser/cxfa_signatureproperties.h"
+#include "xfa/fxfa/parser/cxfa_signaturepseudomodel.h"
+#include "xfa/fxfa/parser/cxfa_signdata.h"
+#include "xfa/fxfa/parser/cxfa_signing.h"
+#include "xfa/fxfa/parser/cxfa_silentprint.h"
+#include "xfa/fxfa/parser/cxfa_soapaction.h"
+#include "xfa/fxfa/parser/cxfa_soapaddress.h"
+#include "xfa/fxfa/parser/cxfa_solid.h"
+#include "xfa/fxfa/parser/cxfa_source.h"
+#include "xfa/fxfa/parser/cxfa_sourceset.h"
+#include "xfa/fxfa/parser/cxfa_speak.h"
+#include "xfa/fxfa/parser/cxfa_staple.h"
+#include "xfa/fxfa/parser/cxfa_startnode.h"
+#include "xfa/fxfa/parser/cxfa_startpage.h"
+#include "xfa/fxfa/parser/cxfa_stipple.h"
+#include "xfa/fxfa/parser/cxfa_subform.h"
+#include "xfa/fxfa/parser/cxfa_subformset.h"
+#include "xfa/fxfa/parser/cxfa_subjectdn.h"
+#include "xfa/fxfa/parser/cxfa_subjectdns.h"
+#include "xfa/fxfa/parser/cxfa_submit.h"
+#include "xfa/fxfa/parser/cxfa_submitformat.h"
+#include "xfa/fxfa/parser/cxfa_submiturl.h"
+#include "xfa/fxfa/parser/cxfa_subsetbelow.h"
+#include "xfa/fxfa/parser/cxfa_suppressbanner.h"
+#include "xfa/fxfa/parser/cxfa_tagged.h"
+#include "xfa/fxfa/parser/cxfa_template.h"
+#include "xfa/fxfa/parser/cxfa_templatecache.h"
+#include "xfa/fxfa/parser/cxfa_text.h"
+#include "xfa/fxfa/parser/cxfa_textedit.h"
+#include "xfa/fxfa/parser/cxfa_threshold.h"
+#include "xfa/fxfa/parser/cxfa_time.h"
+#include "xfa/fxfa/parser/cxfa_timepattern.h"
+#include "xfa/fxfa/parser/cxfa_timepatterns.h"
+#include "xfa/fxfa/parser/cxfa_timestamp.h"
+#include "xfa/fxfa/parser/cxfa_to.h"
+#include "xfa/fxfa/parser/cxfa_tooltip.h"
+#include "xfa/fxfa/parser/cxfa_trace.h"
+#include "xfa/fxfa/parser/cxfa_transform.h"
+#include "xfa/fxfa/parser/cxfa_traversal.h"
+#include "xfa/fxfa/parser/cxfa_traverse.h"
+#include "xfa/fxfa/parser/cxfa_type.h"
+#include "xfa/fxfa/parser/cxfa_typeface.h"
+#include "xfa/fxfa/parser/cxfa_typefaces.h"
+#include "xfa/fxfa/parser/cxfa_ui.h"
+#include "xfa/fxfa/parser/cxfa_update.h"
+#include "xfa/fxfa/parser/cxfa_uri.h"
+#include "xfa/fxfa/parser/cxfa_user.h"
+#include "xfa/fxfa/parser/cxfa_validate.h"
+#include "xfa/fxfa/parser/cxfa_validateapprovalsignatures.h"
+#include "xfa/fxfa/parser/cxfa_validationmessaging.h"
+#include "xfa/fxfa/parser/cxfa_value.h"
+#include "xfa/fxfa/parser/cxfa_variables.h"
+#include "xfa/fxfa/parser/cxfa_version.h"
+#include "xfa/fxfa/parser/cxfa_versioncontrol.h"
+#include "xfa/fxfa/parser/cxfa_viewerpreferences.h"
+#include "xfa/fxfa/parser/cxfa_webclient.h"
+#include "xfa/fxfa/parser/cxfa_whitespace.h"
+#include "xfa/fxfa/parser/cxfa_window.h"
+#include "xfa/fxfa/parser/cxfa_wsdladdress.h"
+#include "xfa/fxfa/parser/cxfa_wsdlconnection.h"
+#include "xfa/fxfa/parser/cxfa_xdc.h"
+#include "xfa/fxfa/parser/cxfa_xdp.h"
+#include "xfa/fxfa/parser/cxfa_xfa.h"
+#include "xfa/fxfa/parser/cxfa_xmlconnection.h"
+#include "xfa/fxfa/parser/cxfa_xsdconnection.h"
+#include "xfa/fxfa/parser/cxfa_xsl.h"
+#include "xfa/fxfa/parser/cxfa_zpl.h"
+
+namespace {
+
+struct ElementNameInfo {
+  uint32_t hash;
+  XFA_Element element;
+} ElementNameToEnum[] = {
+    {0x23ee3 /* ps */, XFA_Element::Ps},
+    {0x25363 /* to */, XFA_Element::To},
+    {0x2587e /* ui */, XFA_Element::Ui},
+    {0x1c648b /* recordSet */, XFA_Element::RecordSet},
+    {0x171428f /* subsetBelow */, XFA_Element::SubsetBelow},
+    {0x1a0776a /* subformSet */, XFA_Element::SubformSet},
+    {0x2340d70 /* adobeExtensionLevel */, XFA_Element::AdobeExtensionLevel},
+    {0x2c1c7f1 /* typeface */, XFA_Element::Typeface},
+    {0x5518c25 /* break */, XFA_Element::Break},
+    {0x5fff523 /* fontInfo */, XFA_Element::FontInfo},
+    {0x653a227 /* numberPattern */, XFA_Element::NumberPattern},
+    {0x65b4a05 /* dynamicRender */, XFA_Element::DynamicRender},
+    {0x7e4362e /* printScaling */, XFA_Element::PrintScaling},
+    {0x7fe6d3a /* checkButton */, XFA_Element::CheckButton},
+    {0x80cf58f /* datePatterns */, XFA_Element::DatePatterns},
+    {0x811929d /* sourceSet */, XFA_Element::SourceSet},
+    {0x9f9d612 /* amd */, XFA_Element::Amd},
+    {0x9f9efb6 /* arc */, XFA_Element::Arc},
+    {0xa48835e /* day */, XFA_Element::Day},
+    {0xa6328b8 /* era */, XFA_Element::Era},
+    {0xae6a0a0 /* jog */, XFA_Element::Jog},
+    {0xb1b3d22 /* log */, XFA_Element::Log},
+    {0xb35439e /* map */, XFA_Element::Map},
+    {0xb355301 /* mdp */, XFA_Element::Mdp},
+    {0xb420438 /* breakBefore */, XFA_Element::BreakBefore},
+    {0xb6a091c /* oid */, XFA_Element::Oid},
+    {0xb84389f /* pcl */, XFA_Element::Pcl},
+    {0xb843dba /* pdf */, XFA_Element::Pdf},
+    {0xbb8df5d /* ref */, XFA_Element::Ref},
+    {0xc080cd0 /* uri */, XFA_Element::Uri},
+    {0xc56afbf /* xdc */, XFA_Element::Xdc},
+    {0xc56afcc /* xdp */, XFA_Element::Xdp},
+    {0xc56b9ff /* xfa */, XFA_Element::Xfa},
+    {0xc56fcb7 /* xsl */, XFA_Element::Xsl},
+    {0xc8b89d6 /* zpl */, XFA_Element::Zpl},
+    {0xc9bae94 /* cache */, XFA_Element::Cache},
+    {0xcb016be /* margin */, XFA_Element::Margin},
+    {0xe1378fe /* keyUsage */, XFA_Element::KeyUsage},
+    {0xfe3596a /* exclude */, XFA_Element::Exclude},
+    {0x10395ac7 /* choiceList */, XFA_Element::ChoiceList},
+    {0x1059ec18 /* level */, XFA_Element::Level},
+    {0x10874804 /* labelPrinter */, XFA_Element::LabelPrinter},
+    {0x10c40e03 /* calendarSymbols */, XFA_Element::CalendarSymbols},
+    {0x10f1ea24 /* para */, XFA_Element::Para},
+    {0x10f1ea37 /* part */, XFA_Element::Part},
+    {0x1140975b /* pdfa */, XFA_Element::Pdfa},
+    {0x1154efe6 /* filter */, XFA_Element::Filter},
+    {0x13f41de1 /* present */, XFA_Element::Present},
+    {0x1827e6ea /* pagination */, XFA_Element::Pagination},
+    {0x18463707 /* encoding */, XFA_Element::Encoding},
+    {0x185e41e2 /* event */, XFA_Element::Event},
+    {0x1adb142d /* whitespace */, XFA_Element::Whitespace},
+    {0x1f3f64c3 /* defaultUi */, XFA_Element::DefaultUi},
+    {0x204e87cb /* dataModel */, XFA_Element::DataModel},
+    {0x2057b350 /* barcode */, XFA_Element::Barcode},
+    {0x20596bad /* timePattern */, XFA_Element::TimePattern},
+    {0x210b74d3 /* batchOutput */, XFA_Element::BatchOutput},
+    {0x212ff0e2 /* enforce */, XFA_Element::Enforce},
+    {0x21d351b4 /* currencySymbols */, XFA_Element::CurrencySymbols},
+    {0x21db83c5 /* addSilentPrint */, XFA_Element::AddSilentPrint},
+    {0x22266258 /* rename */, XFA_Element::Rename},
+    {0x226ca8f1 /* operation */, XFA_Element::Operation},
+    {0x23e27b84 /* typefaces */, XFA_Element::Typefaces},
+    {0x23f4aa75 /* subjectDNs */, XFA_Element::SubjectDNs},
+    {0x240d5e8e /* issuers */, XFA_Element::Issuers},
+    {0x2457a033 /* signaturePseudoModel */, XFA_Element::SignaturePseudoModel},
+    {0x24a52f8a /* wsdlConnection */, XFA_Element::WsdlConnection},
+    {0x254ebd07 /* debug */, XFA_Element::Debug},
+    {0x2655c66a /* delta */, XFA_Element::Delta},
+    {0x26c0daec /* eraNames */, XFA_Element::EraNames},
+    {0x273ab03b /* modifyAnnots */, XFA_Element::ModifyAnnots},
+    {0x27875bb4 /* startNode */, XFA_Element::StartNode},
+    {0x285d0dbc /* button */, XFA_Element::Button},
+    {0x28dee6e9 /* format */, XFA_Element::Format},
+    {0x2a23349e /* border */, XFA_Element::Border},
+    {0x2ae67f19 /* area */, XFA_Element::Area},
+    {0x2c3c4c67 /* hyphenation */, XFA_Element::Hyphenation},
+    {0x2d08af85 /* text */, XFA_Element::Text},
+    {0x2d71b00f /* time */, XFA_Element::Time},
+    {0x2f16a382 /* type */, XFA_Element::Type},
+    {0x2fe057e9 /* overprint */, XFA_Element::Overprint},
+    {0x302aee16 /* certificates */, XFA_Element::Certificates},
+    {0x30b227df /* encryptionMethods */, XFA_Element::EncryptionMethods},
+    {0x32b900d1 /* setProperty */, XFA_Element::SetProperty},
+    {0x337d9e45 /* printerName */, XFA_Element::PrinterName},
+    {0x33edda4b /* startPage */, XFA_Element::StartPage},
+    {0x381943e4 /* pageOffset */, XFA_Element::PageOffset},
+    {0x382106cd /* dateTime */, XFA_Element::DateTime},
+    {0x386e7421 /* comb */, XFA_Element::Comb},
+    {0x390acd9e /* pattern */, XFA_Element::Pattern},
+    {0x3942163e /* ifEmpty */, XFA_Element::IfEmpty},
+    {0x39944a7b /* suppressBanner */, XFA_Element::SuppressBanner},
+    {0x3b3c3dca /* outputBin */, XFA_Element::OutputBin},
+    {0x3b8a4024 /* field */, XFA_Element::Field},
+    {0x3c15352f /* agent */, XFA_Element::Agent},
+    {0x3d7e8668 /* outputXSL */, XFA_Element::OutputXSL},
+    {0x3e1c91c5 /* adjustData */, XFA_Element::AdjustData},
+    {0x3e7a9408 /* autoSave */, XFA_Element::AutoSave},
+    {0x3ecead94 /* contentArea */, XFA_Element::ContentArea},
+    {0x3ef334e3 /* eventPseudoModel */, XFA_Element::EventPseudoModel},
+    {0x3fadaec0 /* wsdlAddress */, XFA_Element::WsdlAddress},
+    {0x40623b5b /* solid */, XFA_Element::Solid},
+    {0x41f0bd76 /* dateTimeSymbols */, XFA_Element::DateTimeSymbols},
+    {0x444e7523 /* encryptionLevel */, XFA_Element::EncryptionLevel},
+    {0x4523af55 /* edge */, XFA_Element::Edge},
+    {0x45d5e3c1 /* stipple */, XFA_Element::Stipple},
+    {0x475e4e87 /* attributes */, XFA_Element::Attributes},
+    {0x487a8c87 /* versionControl */, XFA_Element::VersionControl},
+    {0x48e5248c /* meridiem */, XFA_Element::Meridiem},
+    {0x48f36719 /* exclGroup */, XFA_Element::ExclGroup},
+    {0x4977356b /* toolTip */, XFA_Element::ToolTip},
+    {0x499afecc /* compress */, XFA_Element::Compress},
+    {0x4a0c4948 /* reason */, XFA_Element::Reason},
+    {0x4bdcce13 /* execute */, XFA_Element::Execute},
+    {0x4c56b216 /* contentCopy */, XFA_Element::ContentCopy},
+    {0x4cc176d3 /* dateTimeEdit */, XFA_Element::DateTimeEdit},
+    {0x4e1e39b6 /* config */, XFA_Element::Config},
+    {0x4e2d6083 /* image */, XFA_Element::Image},
+    {0x4e814150 /* #xHTML */, XFA_Element::SharpxHTML},
+    {0x4f2388c1 /* numberOfCopies */, XFA_Element::NumberOfCopies},
+    {0x4f512e30 /* behaviorOverride */, XFA_Element::BehaviorOverride},
+    {0x4fdc3454 /* timeStamp */, XFA_Element::TimeStamp},
+    {0x51d90546 /* month */, XFA_Element::Month},
+    {0x523437e4 /* viewerPreferences */, XFA_Element::ViewerPreferences},
+    {0x53abc1c6 /* scriptModel */, XFA_Element::ScriptModel},
+    {0x54034c2f /* decimal */, XFA_Element::Decimal},
+    {0x54202c9e /* subform */, XFA_Element::Subform},
+    {0x542c7300 /* select */, XFA_Element::Select},
+    {0x5436d198 /* window */, XFA_Element::Window},
+    {0x5473b6dc /* localeSet */, XFA_Element::LocaleSet},
+    {0x56ae179e /* handler */, XFA_Element::Handler},
+    {0x5700bd5f /* hostPseudoModel */, XFA_Element::HostPseudoModel},
+    {0x570ce835 /* presence */, XFA_Element::Presence},
+    {0x5779d65f /* record */, XFA_Element::Record},
+    {0x59c8f27d /* embed */, XFA_Element::Embed},
+    {0x5a50e9e6 /* version */, XFA_Element::Version},
+    {0x5b8383df /* command */, XFA_Element::Command},
+    {0x5c43c6c3 /* copies */, XFA_Element::Copies},
+    {0x5e0c2c49 /* staple */, XFA_Element::Staple},
+    {0x5e5083dd /* submitFormat */, XFA_Element::SubmitFormat},
+    {0x5e8c5d20 /* boolean */, XFA_Element::Boolean},
+    {0x60490a85 /* message */, XFA_Element::Message},
+    {0x60d4c8b1 /* output */, XFA_Element::Output},
+    {0x61810081 /* psMap */, XFA_Element::PsMap},
+    {0x62bd904b /* excludeNS */, XFA_Element::ExcludeNS},
+    {0x669d4f77 /* assist */, XFA_Element::Assist},
+    {0x67334a1c /* picture */, XFA_Element::Picture},
+    {0x67fe7334 /* traversal */, XFA_Element::Traversal},
+    {0x6894589c /* silentPrint */, XFA_Element::SilentPrint},
+    {0x68a16bbd /* webClient */, XFA_Element::WebClient},
+    {0x69f115df /* layoutPseudoModel */, XFA_Element::LayoutPseudoModel},
+    {0x6a4bc084 /* producer */, XFA_Element::Producer},
+    {0x6a9e04c9 /* corner */, XFA_Element::Corner},
+    {0x6ccd7274 /* msgId */, XFA_Element::MsgId},
+    {0x6e67921f /* color */, XFA_Element::Color},
+    {0x6ec217a5 /* keep */, XFA_Element::Keep},
+    {0x6eef1116 /* query */, XFA_Element::Query},
+    {0x7033bfd5 /* insert */, XFA_Element::Insert},
+    {0x704af389 /* imageEdit */, XFA_Element::ImageEdit},
+    {0x7233018a /* validate */, XFA_Element::Validate},
+    {0x72ba47b4 /* digestMethods */, XFA_Element::DigestMethods},
+    {0x72f2aa7a /* numberPatterns */, XFA_Element::NumberPatterns},
+    {0x74caed29 /* pageSet */, XFA_Element::PageSet},
+    {0x7568e6ae /* integer */, XFA_Element::Integer},
+    {0x76182db9 /* soapAddress */, XFA_Element::SoapAddress},
+    {0x773146c5 /* equate */, XFA_Element::Equate},
+    {0x77d449dd /* formFieldFilling */, XFA_Element::FormFieldFilling},
+    {0x7889d68a /* pageRange */, XFA_Element::PageRange},
+    {0x7baca2e3 /* update */, XFA_Element::Update},
+    {0x7ce89001 /* connectString */, XFA_Element::ConnectString},
+    {0x7d9fd7c5 /* mode */, XFA_Element::Mode},
+    {0x7e7e845e /* layout */, XFA_Element::Layout},
+    {0x7e845c34 /* #xml */, XFA_Element::Sharpxml},
+    {0x7fb341df /* xsdConnection */, XFA_Element::XsdConnection},
+    {0x7ffb51cc /* traverse */, XFA_Element::Traverse},
+    {0x80203b5a /* encodings */, XFA_Element::Encodings},
+    {0x803550fc /* template */, XFA_Element::Template},
+    {0x803d5bbc /* acrobat */, XFA_Element::Acrobat},
+    {0x821d6569 /* validationMessaging */, XFA_Element::ValidationMessaging},
+    {0x830e688f /* signing */, XFA_Element::Signing},
+    {0x83a550d2 /* dataWindow */, XFA_Element::DataWindow},
+    {0x83dab9f5 /* script */, XFA_Element::Script},
+    {0x8411ebcd /* addViewerPreferences */, XFA_Element::AddViewerPreferences},
+    {0x8777642e /* alwaysEmbed */, XFA_Element::AlwaysEmbed},
+    {0x877a6b39 /* passwordEdit */, XFA_Element::PasswordEdit},
+    {0x87e84c99 /* numericEdit */, XFA_Element::NumericEdit},
+    {0x8852cdec /* encryptionMethod */, XFA_Element::EncryptionMethod},
+    {0x891f4606 /* change */, XFA_Element::Change},
+    {0x89939f36 /* pageArea */, XFA_Element::PageArea},
+    {0x8a9d6247 /* submitUrl */, XFA_Element::SubmitUrl},
+    {0x8ad8b90f /* oids */, XFA_Element::Oids},
+    {0x8b036f32 /* signature */, XFA_Element::Signature},
+    {0x8b128efb /* ADBE_JSConsole */, XFA_Element::ADBE_JSConsole},
+    {0x8bcfe96e /* caption */, XFA_Element::Caption},
+    {0x8e1c2921 /* relevant */, XFA_Element::Relevant},
+    {0x8e3f0a4b /* flipLabel */, XFA_Element::FlipLabel},
+    {0x900280b7 /* exData */, XFA_Element::ExData},
+    {0x91e80352 /* dayNames */, XFA_Element::DayNames},
+    {0x93113b11 /* soapAction */, XFA_Element::SoapAction},
+    {0x938b09f6 /* defaultTypeface */, XFA_Element::DefaultTypeface},
+    {0x95b37897 /* manifest */, XFA_Element::Manifest},
+    {0x97b76b54 /* overflow */, XFA_Element::Overflow},
+    {0x9a57861b /* linear */, XFA_Element::Linear},
+    {0x9ad5a821 /* currencySymbol */, XFA_Element::CurrencySymbol},
+    {0x9c6471b3 /* delete */, XFA_Element::Delete},
+    {0x9deea61d /* deltas */, XFA_Element::Deltas},
+    {0x9e67de21 /* digestMethod */, XFA_Element::DigestMethod},
+    {0x9f3e9510 /* instanceManager */, XFA_Element::InstanceManager},
+    {0xa0799892 /* equateRange */, XFA_Element::EquateRange},
+    {0xa084a381 /* medium */, XFA_Element::Medium},
+    {0xa1211b8b /* textEdit */, XFA_Element::TextEdit},
+    {0xa17008f0 /* templateCache */, XFA_Element::TemplateCache},
+    {0xa4f7b88f /* compressObjectStream */, XFA_Element::CompressObjectStream},
+    {0xa65f5d17 /* dataValue */, XFA_Element::DataValue},
+    {0xa6caaa89 /* accessibleContent */, XFA_Element::AccessibleContent},
+    {0xa94cc00b /* includeXDPContent */, XFA_Element::IncludeXDPContent},
+    {0xa9b081a1 /* xmlConnection */, XFA_Element::XmlConnection},
+    {0xab2a3b74 /* validateApprovalSignatures */,
+     XFA_Element::ValidateApprovalSignatures},
+    {0xab8c5a2b /* signData */, XFA_Element::SignData},
+    {0xabaa2ceb /* packets */, XFA_Element::Packets},
+    {0xadba359c /* datePattern */, XFA_Element::DatePattern},
+    {0xae222b2b /* duplexOption */, XFA_Element::DuplexOption},
+    {0xb012effb /* base */, XFA_Element::Base},
+    {0xb0e5485d /* bind */, XFA_Element::Bind},
+    {0xb45d61b2 /* compression */, XFA_Element::Compression},
+    {0xb563f0ff /* user */, XFA_Element::User},
+    {0xb5848ad5 /* rectangle */, XFA_Element::Rectangle},
+    {0xb6dacb72 /* effectiveOutputPolicy */,
+     XFA_Element::EffectiveOutputPolicy},
+    {0xb7d7654d /* ADBE_JSDebugger */, XFA_Element::ADBE_JSDebugger},
+    {0xbab37f73 /* acrobat7 */, XFA_Element::Acrobat7},
+    {0xbc70081e /* interactive */, XFA_Element::Interactive},
+    {0xbc8fa350 /* locale */, XFA_Element::Locale},
+    {0xbcd44940 /* currentPage */, XFA_Element::CurrentPage},
+    {0xbde9abda /* data */, XFA_Element::Data},
+    {0xbde9abde /* date */, XFA_Element::Date},
+    {0xbe52dfbf /* desc */, XFA_Element::Desc},
+    {0xbf4b6405 /* encrypt */, XFA_Element::Encrypt},
+    {0xbfa87cce /* draw */, XFA_Element::Draw},
+    {0xc181ff4b /* encryption */, XFA_Element::Encryption},
+    {0xc1970f40 /* meridiemNames */, XFA_Element::MeridiemNames},
+    {0xc5ad9f5e /* messaging */, XFA_Element::Messaging},
+    {0xc69549f4 /* speak */, XFA_Element::Speak},
+    {0xc7743dc7 /* dataGroup */, XFA_Element::DataGroup},
+    {0xc7eb20e9 /* common */, XFA_Element::Common},
+    {0xc85d4528 /* #text */, XFA_Element::Sharptext},
+    {0xc861556a /* paginationOverride */, XFA_Element::PaginationOverride},
+    {0xc903dabb /* reasons */, XFA_Element::Reasons},
+    {0xc9a8127f /* signatureProperties */, XFA_Element::SignatureProperties},
+    {0xca010c2d /* threshold */, XFA_Element::Threshold},
+    {0xcb4c5e96 /* appearanceFilter */, XFA_Element::AppearanceFilter},
+    {0xcc92aba7 /* fill */, XFA_Element::Fill},
+    {0xcd308b77 /* font */, XFA_Element::Font},
+    {0xcd309ff4 /* form */, XFA_Element::Form},
+    {0xcebcca2d /* mediumInfo */, XFA_Element::MediumInfo},
+    {0xcfe0d643 /* certificate */, XFA_Element::Certificate},
+    {0xd012c033 /* password */, XFA_Element::Password},
+    {0xd01604bd /* runScripts */, XFA_Element::RunScripts},
+    {0xd1227e6f /* trace */, XFA_Element::Trace},
+    {0xd1532876 /* float */, XFA_Element::Float},
+    {0xd17a6c30 /* renderPolicy */, XFA_Element::RenderPolicy},
+    {0xd4bf6823 /* logPseudoModel */, XFA_Element::LogPseudoModel},
+    {0xd58aa962 /* destination */, XFA_Element::Destination},
+    {0xd6e27f1d /* value */, XFA_Element::Value},
+    {0xd7a14462 /* bookend */, XFA_Element::Bookend},
+    {0xd8c31254 /* exObject */, XFA_Element::ExObject},
+    {0xda6a8590 /* openAction */, XFA_Element::OpenAction},
+    {0xdab4fb7d /* neverEmbed */, XFA_Element::NeverEmbed},
+    {0xdb98475f /* bindItems */, XFA_Element::BindItems},
+    {0xdbfbe02e /* calculate */, XFA_Element::Calculate},
+    {0xdd7676ed /* print */, XFA_Element::Print},
+    {0xdde273d7 /* extras */, XFA_Element::Extras},
+    {0xde146b34 /* proto */, XFA_Element::Proto},
+    {0xdf059321 /* dSigData */, XFA_Element::DSigData},
+    {0xdfccf030 /* creator */, XFA_Element::Creator},
+    {0xdff78c6a /* connect */, XFA_Element::Connect},
+    {0xe11a2cbc /* permissions */, XFA_Element::Permissions},
+    {0xe14c801c /* connectionSet */, XFA_Element::ConnectionSet},
+    {0xe1c83a14 /* submit */, XFA_Element::Submit},
+    {0xe29821cd /* range */, XFA_Element::Range},
+    {0xe38d83c7 /* linearized */, XFA_Element::Linearized},
+    {0xe3aa2578 /* packet */, XFA_Element::Packet},
+    {0xe3aa860e /* rootElement */, XFA_Element::RootElement},
+    {0xe3e553fa /* plaintextMetadata */, XFA_Element::PlaintextMetadata},
+    {0xe3e6e4f2 /* numberSymbols */, XFA_Element::NumberSymbols},
+    {0xe3f067f6 /* printHighQuality */, XFA_Element::PrintHighQuality},
+    {0xe3fd078c /* driver */, XFA_Element::Driver},
+    {0xe48b34f2 /* incrementalLoad */, XFA_Element::IncrementalLoad},
+    {0xe550e7c2 /* subjectDN */, XFA_Element::SubjectDN},
+    {0xe6669a78 /* compressLogicalStructure */,
+     XFA_Element::CompressLogicalStructure},
+    {0xe7a7ea02 /* incrementalMerge */, XFA_Element::IncrementalMerge},
+    {0xe948530d /* radial */, XFA_Element::Radial},
+    {0xea8d6999 /* variables */, XFA_Element::Variables},
+    {0xeaa142c0 /* timePatterns */, XFA_Element::TimePatterns},
+    {0xeb943a71 /* effectiveInputPolicy */, XFA_Element::EffectiveInputPolicy},
+    {0xef04a2bc /* nameAttr */, XFA_Element::NameAttr},
+    {0xf07222ab /* conformance */, XFA_Element::Conformance},
+    {0xf0aaaadc /* transform */, XFA_Element::Transform},
+    {0xf1433e88 /* lockDocument */, XFA_Element::LockDocument},
+    {0xf54eb997 /* breakAfter */, XFA_Element::BreakAfter},
+    {0xf616da28 /* line */, XFA_Element::Line},
+    {0xf616f3dc /* list */, XFA_Element::List},
+    {0xf7055fb1 /* source */, XFA_Element::Source},
+    {0xf7eebe1c /* occur */, XFA_Element::Occur},
+    {0xf8d10d97 /* pickTrayByPDFSize */, XFA_Element::PickTrayByPDFSize},
+    {0xf8f19e3a /* monthNames */, XFA_Element::MonthNames},
+    {0xf984149b /* severity */, XFA_Element::Severity},
+    {0xf9bcb037 /* groupParent */, XFA_Element::GroupParent},
+    {0xfbc42fff /* documentAssembly */, XFA_Element::DocumentAssembly},
+    {0xfc78159f /* numberSymbol */, XFA_Element::NumberSymbol},
+    {0xfcbd606c /* tagged */, XFA_Element::Tagged},
+    {0xff063802 /* items */, XFA_Element::Items},
+};
+
+}  // namespace
+
+// static
+XFA_Element CXFA_Node::NameToElement(const WideString& name) {
+  uint32_t hash = FX_HashCode_GetW(name.AsStringView(), false);
+  auto* elem = std::lower_bound(
+      std::begin(ElementNameToEnum), std::end(ElementNameToEnum), hash,
+      [](const ElementNameInfo& a, uint32_t hash) { return a.hash < hash; });
+  if (elem && elem->hash == hash)
+    return elem->element;
+  return XFA_Element::Unknown;
+}
+
+// static
+std::unique_ptr<CXFA_Node> CXFA_Node::Create(CXFA_Document* doc,
+                                             XFA_Element element,
+                                             XFA_XDPPACKET packet) {
+  ASSERT(element != XFA_Element::NodeList);
+  std::unique_ptr<CXFA_Node> node;
+  switch (element) {
+    case XFA_Element::Ps:
+      node = pdfium::MakeUnique<CXFA_Ps>(doc, packet);
+      break;
+    case XFA_Element::To:
+      node = pdfium::MakeUnique<CXFA_To>(doc, packet);
+      break;
+    case XFA_Element::Ui:
+      node = pdfium::MakeUnique<CXFA_Ui>(doc, packet);
+      break;
+    case XFA_Element::RecordSet:
+      node = pdfium::MakeUnique<CXFA_RecordSet>(doc, packet);
+      break;
+    case XFA_Element::SubsetBelow:
+      node = pdfium::MakeUnique<CXFA_SubsetBelow>(doc, packet);
+      break;
+    case XFA_Element::SubformSet:
+      node = pdfium::MakeUnique<CXFA_SubformSet>(doc, packet);
+      break;
+    case XFA_Element::AdobeExtensionLevel:
+      node = pdfium::MakeUnique<CXFA_AdobeExtensionLevel>(doc, packet);
+      break;
+    case XFA_Element::Typeface:
+      node = pdfium::MakeUnique<CXFA_Typeface>(doc, packet);
+      break;
+    case XFA_Element::Break:
+      node = pdfium::MakeUnique<CXFA_Break>(doc, packet);
+      break;
+    case XFA_Element::FontInfo:
+      node = pdfium::MakeUnique<CXFA_FontInfo>(doc, packet);
+      break;
+    case XFA_Element::NumberPattern:
+      node = pdfium::MakeUnique<CXFA_NumberPattern>(doc, packet);
+      break;
+    case XFA_Element::DynamicRender:
+      node = pdfium::MakeUnique<CXFA_DynamicRender>(doc, packet);
+      break;
+    case XFA_Element::PrintScaling:
+      node = pdfium::MakeUnique<CXFA_PrintScaling>(doc, packet);
+      break;
+    case XFA_Element::CheckButton:
+      node = pdfium::MakeUnique<CXFA_CheckButton>(doc, packet);
+      break;
+    case XFA_Element::DatePatterns:
+      node = pdfium::MakeUnique<CXFA_DatePatterns>(doc, packet);
+      break;
+    case XFA_Element::SourceSet:
+      node = pdfium::MakeUnique<CXFA_SourceSet>(doc, packet);
+      break;
+    case XFA_Element::Amd:
+      node = pdfium::MakeUnique<CXFA_Amd>(doc, packet);
+      break;
+    case XFA_Element::Arc:
+      node = pdfium::MakeUnique<CXFA_Arc>(doc, packet);
+      break;
+    case XFA_Element::Day:
+      node = pdfium::MakeUnique<CXFA_Day>(doc, packet);
+      break;
+    case XFA_Element::Era:
+      node = pdfium::MakeUnique<CXFA_Era>(doc, packet);
+      break;
+    case XFA_Element::Jog:
+      node = pdfium::MakeUnique<CXFA_Jog>(doc, packet);
+      break;
+    case XFA_Element::Log:
+      node = pdfium::MakeUnique<CXFA_Log>(doc, packet);
+      break;
+    case XFA_Element::Map:
+      node = pdfium::MakeUnique<CXFA_Map>(doc, packet);
+      break;
+    case XFA_Element::Mdp:
+      node = pdfium::MakeUnique<CXFA_Mdp>(doc, packet);
+      break;
+    case XFA_Element::BreakBefore:
+      node = pdfium::MakeUnique<CXFA_BreakBefore>(doc, packet);
+      break;
+    case XFA_Element::Oid:
+      node = pdfium::MakeUnique<CXFA_Oid>(doc, packet);
+      break;
+    case XFA_Element::Pcl:
+      node = pdfium::MakeUnique<CXFA_Pcl>(doc, packet);
+      break;
+    case XFA_Element::Pdf:
+      node = pdfium::MakeUnique<CXFA_Pdf>(doc, packet);
+      break;
+    case XFA_Element::Ref:
+      node = pdfium::MakeUnique<CXFA_Ref>(doc, packet);
+      break;
+    case XFA_Element::Uri:
+      node = pdfium::MakeUnique<CXFA_Uri>(doc, packet);
+      break;
+    case XFA_Element::Xdc:
+      node = pdfium::MakeUnique<CXFA_Xdc>(doc, packet);
+      break;
+    case XFA_Element::Xdp:
+      node = pdfium::MakeUnique<CXFA_Xdp>(doc, packet);
+      break;
+    case XFA_Element::Xfa:
+      node = pdfium::MakeUnique<CXFA_Xfa>(doc, packet);
+      break;
+    case XFA_Element::Xsl:
+      node = pdfium::MakeUnique<CXFA_Xsl>(doc, packet);
+      break;
+    case XFA_Element::Zpl:
+      node = pdfium::MakeUnique<CXFA_Zpl>(doc, packet);
+      break;
+    case XFA_Element::Cache:
+      node = pdfium::MakeUnique<CXFA_Cache>(doc, packet);
+      break;
+    case XFA_Element::Margin:
+      node = pdfium::MakeUnique<CXFA_Margin>(doc, packet);
+      break;
+    case XFA_Element::KeyUsage:
+      node = pdfium::MakeUnique<CXFA_KeyUsage>(doc, packet);
+      break;
+    case XFA_Element::Exclude:
+      node = pdfium::MakeUnique<CXFA_Exclude>(doc, packet);
+      break;
+    case XFA_Element::ChoiceList:
+      node = pdfium::MakeUnique<CXFA_ChoiceList>(doc, packet);
+      break;
+    case XFA_Element::Level:
+      node = pdfium::MakeUnique<CXFA_Level>(doc, packet);
+      break;
+    case XFA_Element::LabelPrinter:
+      node = pdfium::MakeUnique<CXFA_LabelPrinter>(doc, packet);
+      break;
+    case XFA_Element::CalendarSymbols:
+      node = pdfium::MakeUnique<CXFA_CalendarSymbols>(doc, packet);
+      break;
+    case XFA_Element::Para:
+      node = pdfium::MakeUnique<CXFA_Para>(doc, packet);
+      break;
+    case XFA_Element::Part:
+      node = pdfium::MakeUnique<CXFA_Part>(doc, packet);
+      break;
+    case XFA_Element::Pdfa:
+      node = pdfium::MakeUnique<CXFA_Pdfa>(doc, packet);
+      break;
+    case XFA_Element::Filter:
+      node = pdfium::MakeUnique<CXFA_Filter>(doc, packet);
+      break;
+    case XFA_Element::Present:
+      node = pdfium::MakeUnique<CXFA_Present>(doc, packet);
+      break;
+    case XFA_Element::Pagination:
+      node = pdfium::MakeUnique<CXFA_Pagination>(doc, packet);
+      break;
+    case XFA_Element::Encoding:
+      node = pdfium::MakeUnique<CXFA_Encoding>(doc, packet);
+      break;
+    case XFA_Element::Event:
+      node = pdfium::MakeUnique<CXFA_Event>(doc, packet);
+      break;
+    case XFA_Element::Whitespace:
+      node = pdfium::MakeUnique<CXFA_Whitespace>(doc, packet);
+      break;
+    case XFA_Element::DefaultUi:
+      node = pdfium::MakeUnique<CXFA_DefaultUi>(doc, packet);
+      break;
+    case XFA_Element::DataModel:
+      node = pdfium::MakeUnique<CXFA_DataModel>(doc, packet);
+      break;
+    case XFA_Element::Barcode:
+      node = pdfium::MakeUnique<CXFA_Barcode>(doc, packet);
+      break;
+    case XFA_Element::TimePattern:
+      node = pdfium::MakeUnique<CXFA_TimePattern>(doc, packet);
+      break;
+    case XFA_Element::BatchOutput:
+      node = pdfium::MakeUnique<CXFA_BatchOutput>(doc, packet);
+      break;
+    case XFA_Element::Enforce:
+      node = pdfium::MakeUnique<CXFA_Enforce>(doc, packet);
+      break;
+    case XFA_Element::CurrencySymbols:
+      node = pdfium::MakeUnique<CXFA_CurrencySymbols>(doc, packet);
+      break;
+    case XFA_Element::AddSilentPrint:
+      node = pdfium::MakeUnique<CXFA_AddSilentPrint>(doc, packet);
+      break;
+    case XFA_Element::Rename:
+      node = pdfium::MakeUnique<CXFA_Rename>(doc, packet);
+      break;
+    case XFA_Element::Operation:
+      node = pdfium::MakeUnique<CXFA_Operation>(doc, packet);
+      break;
+    case XFA_Element::Typefaces:
+      node = pdfium::MakeUnique<CXFA_Typefaces>(doc, packet);
+      break;
+    case XFA_Element::SubjectDNs:
+      node = pdfium::MakeUnique<CXFA_SubjectDNs>(doc, packet);
+      break;
+    case XFA_Element::Issuers:
+      node = pdfium::MakeUnique<CXFA_Issuers>(doc, packet);
+      break;
+    case XFA_Element::SignaturePseudoModel:
+      node = pdfium::MakeUnique<CXFA_SignaturePseudoModel>(doc, packet);
+      break;
+    case XFA_Element::WsdlConnection:
+      node = pdfium::MakeUnique<CXFA_WsdlConnection>(doc, packet);
+      break;
+    case XFA_Element::Debug:
+      node = pdfium::MakeUnique<CXFA_Debug>(doc, packet);
+      break;
+    case XFA_Element::Delta:
+      node = pdfium::MakeUnique<CXFA_Delta>(doc, packet);
+      break;
+    case XFA_Element::EraNames:
+      node = pdfium::MakeUnique<CXFA_EraNames>(doc, packet);
+      break;
+    case XFA_Element::ModifyAnnots:
+      node = pdfium::MakeUnique<CXFA_ModifyAnnots>(doc, packet);
+      break;
+    case XFA_Element::StartNode:
+      node = pdfium::MakeUnique<CXFA_StartNode>(doc, packet);
+      break;
+    case XFA_Element::Button:
+      node = pdfium::MakeUnique<CXFA_Button>(doc, packet);
+      break;
+    case XFA_Element::Format:
+      node = pdfium::MakeUnique<CXFA_Format>(doc, packet);
+      break;
+    case XFA_Element::Border:
+      node = pdfium::MakeUnique<CXFA_Border>(doc, packet);
+      break;
+    case XFA_Element::Area:
+      node = pdfium::MakeUnique<CXFA_Area>(doc, packet);
+      break;
+    case XFA_Element::Hyphenation:
+      node = pdfium::MakeUnique<CXFA_Hyphenation>(doc, packet);
+      break;
+    case XFA_Element::Text:
+      node = pdfium::MakeUnique<CXFA_Text>(doc, packet);
+      break;
+    case XFA_Element::Time:
+      node = pdfium::MakeUnique<CXFA_Time>(doc, packet);
+      break;
+    case XFA_Element::Type:
+      node = pdfium::MakeUnique<CXFA_Type>(doc, packet);
+      break;
+    case XFA_Element::Overprint:
+      node = pdfium::MakeUnique<CXFA_Overprint>(doc, packet);
+      break;
+    case XFA_Element::Certificates:
+      node = pdfium::MakeUnique<CXFA_Certificates>(doc, packet);
+      break;
+    case XFA_Element::EncryptionMethods:
+      node = pdfium::MakeUnique<CXFA_EncryptionMethods>(doc, packet);
+      break;
+    case XFA_Element::SetProperty:
+      node = pdfium::MakeUnique<CXFA_SetProperty>(doc, packet);
+      break;
+    case XFA_Element::PrinterName:
+      node = pdfium::MakeUnique<CXFA_PrinterName>(doc, packet);
+      break;
+    case XFA_Element::StartPage:
+      node = pdfium::MakeUnique<CXFA_StartPage>(doc, packet);
+      break;
+    case XFA_Element::PageOffset:
+      node = pdfium::MakeUnique<CXFA_PageOffset>(doc, packet);
+      break;
+    case XFA_Element::DateTime:
+      node = pdfium::MakeUnique<CXFA_DateTime>(doc, packet);
+      break;
+    case XFA_Element::Comb:
+      node = pdfium::MakeUnique<CXFA_Comb>(doc, packet);
+      break;
+    case XFA_Element::Pattern:
+      node = pdfium::MakeUnique<CXFA_Pattern>(doc, packet);
+      break;
+    case XFA_Element::IfEmpty:
+      node = pdfium::MakeUnique<CXFA_IfEmpty>(doc, packet);
+      break;
+    case XFA_Element::SuppressBanner:
+      node = pdfium::MakeUnique<CXFA_SuppressBanner>(doc, packet);
+      break;
+    case XFA_Element::OutputBin:
+      node = pdfium::MakeUnique<CXFA_OutputBin>(doc, packet);
+      break;
+    case XFA_Element::Field:
+      node = pdfium::MakeUnique<CXFA_Field>(doc, packet);
+      break;
+    case XFA_Element::Agent:
+      node = pdfium::MakeUnique<CXFA_Agent>(doc, packet);
+      break;
+    case XFA_Element::OutputXSL:
+      node = pdfium::MakeUnique<CXFA_OutputXSL>(doc, packet);
+      break;
+    case XFA_Element::AdjustData:
+      node = pdfium::MakeUnique<CXFA_AdjustData>(doc, packet);
+      break;
+    case XFA_Element::AutoSave:
+      node = pdfium::MakeUnique<CXFA_AutoSave>(doc, packet);
+      break;
+    case XFA_Element::ContentArea:
+      node = pdfium::MakeUnique<CXFA_ContentArea>(doc, packet);
+      break;
+    case XFA_Element::EventPseudoModel:
+      node = pdfium::MakeUnique<CXFA_EventPseudoModel>(doc, packet);
+      break;
+    case XFA_Element::WsdlAddress:
+      node = pdfium::MakeUnique<CXFA_WsdlAddress>(doc, packet);
+      break;
+    case XFA_Element::Solid:
+      node = pdfium::MakeUnique<CXFA_Solid>(doc, packet);
+      break;
+    case XFA_Element::DateTimeSymbols:
+      node = pdfium::MakeUnique<CXFA_DateTimeSymbols>(doc, packet);
+      break;
+    case XFA_Element::EncryptionLevel:
+      node = pdfium::MakeUnique<CXFA_EncryptionLevel>(doc, packet);
+      break;
+    case XFA_Element::Edge:
+      node = pdfium::MakeUnique<CXFA_Edge>(doc, packet);
+      break;
+    case XFA_Element::Stipple:
+      node = pdfium::MakeUnique<CXFA_Stipple>(doc, packet);
+      break;
+    case XFA_Element::Attributes:
+      node = pdfium::MakeUnique<CXFA_Attributes>(doc, packet);
+      break;
+    case XFA_Element::VersionControl:
+      node = pdfium::MakeUnique<CXFA_VersionControl>(doc, packet);
+      break;
+    case XFA_Element::Meridiem:
+      node = pdfium::MakeUnique<CXFA_Meridiem>(doc, packet);
+      break;
+    case XFA_Element::ExclGroup:
+      node = pdfium::MakeUnique<CXFA_ExclGroup>(doc, packet);
+      break;
+    case XFA_Element::ToolTip:
+      node = pdfium::MakeUnique<CXFA_ToolTip>(doc, packet);
+      break;
+    case XFA_Element::Compress:
+      node = pdfium::MakeUnique<CXFA_Compress>(doc, packet);
+      break;
+    case XFA_Element::Reason:
+      node = pdfium::MakeUnique<CXFA_Reason>(doc, packet);
+      break;
+    case XFA_Element::Execute:
+      node = pdfium::MakeUnique<CXFA_Execute>(doc, packet);
+      break;
+    case XFA_Element::ContentCopy:
+      node = pdfium::MakeUnique<CXFA_ContentCopy>(doc, packet);
+      break;
+    case XFA_Element::DateTimeEdit:
+      node = pdfium::MakeUnique<CXFA_DateTimeEdit>(doc, packet);
+      break;
+    case XFA_Element::Config:
+      node = pdfium::MakeUnique<CXFA_Config>(doc, packet);
+      break;
+    case XFA_Element::Image:
+      node = pdfium::MakeUnique<CXFA_Image>(doc, packet);
+      break;
+    case XFA_Element::SharpxHTML:
+      node = pdfium::MakeUnique<CXFA_SharpxHTML>(doc, packet);
+      break;
+    case XFA_Element::NumberOfCopies:
+      node = pdfium::MakeUnique<CXFA_NumberOfCopies>(doc, packet);
+      break;
+    case XFA_Element::BehaviorOverride:
+      node = pdfium::MakeUnique<CXFA_BehaviorOverride>(doc, packet);
+      break;
+    case XFA_Element::TimeStamp:
+      node = pdfium::MakeUnique<CXFA_TimeStamp>(doc, packet);
+      break;
+    case XFA_Element::Month:
+      node = pdfium::MakeUnique<CXFA_Month>(doc, packet);
+      break;
+    case XFA_Element::ViewerPreferences:
+      node = pdfium::MakeUnique<CXFA_ViewerPreferences>(doc, packet);
+      break;
+    case XFA_Element::ScriptModel:
+      node = pdfium::MakeUnique<CXFA_ScriptModel>(doc, packet);
+      break;
+    case XFA_Element::Decimal:
+      node = pdfium::MakeUnique<CXFA_Decimal>(doc, packet);
+      break;
+    case XFA_Element::Subform:
+      node = pdfium::MakeUnique<CXFA_Subform>(doc, packet);
+      break;
+    case XFA_Element::Select:
+      node = pdfium::MakeUnique<CXFA_Select>(doc, packet);
+      break;
+    case XFA_Element::Window:
+      node = pdfium::MakeUnique<CXFA_Window>(doc, packet);
+      break;
+    case XFA_Element::LocaleSet:
+      node = pdfium::MakeUnique<CXFA_LocaleSet>(doc, packet);
+      break;
+    case XFA_Element::Handler:
+      node = pdfium::MakeUnique<CXFA_Handler>(doc, packet);
+      break;
+    case XFA_Element::HostPseudoModel:
+      node = pdfium::MakeUnique<CXFA_HostPseudoModel>(doc, packet);
+      break;
+    case XFA_Element::Presence:
+      node = pdfium::MakeUnique<CXFA_Presence>(doc, packet);
+      break;
+    case XFA_Element::Record:
+      node = pdfium::MakeUnique<CXFA_Record>(doc, packet);
+      break;
+    case XFA_Element::Embed:
+      node = pdfium::MakeUnique<CXFA_Embed>(doc, packet);
+      break;
+    case XFA_Element::Version:
+      node = pdfium::MakeUnique<CXFA_Version>(doc, packet);
+      break;
+    case XFA_Element::Command:
+      node = pdfium::MakeUnique<CXFA_Command>(doc, packet);
+      break;
+    case XFA_Element::Copies:
+      node = pdfium::MakeUnique<CXFA_Copies>(doc, packet);
+      break;
+    case XFA_Element::Staple:
+      node = pdfium::MakeUnique<CXFA_Staple>(doc, packet);
+      break;
+    case XFA_Element::SubmitFormat:
+      node = pdfium::MakeUnique<CXFA_SubmitFormat>(doc, packet);
+      break;
+    case XFA_Element::Boolean:
+      node = pdfium::MakeUnique<CXFA_Boolean>(doc, packet);
+      break;
+    case XFA_Element::Message:
+      node = pdfium::MakeUnique<CXFA_Message>(doc, packet);
+      break;
+    case XFA_Element::Output:
+      node = pdfium::MakeUnique<CXFA_Output>(doc, packet);
+      break;
+    case XFA_Element::PsMap:
+      node = pdfium::MakeUnique<CXFA_PsMap>(doc, packet);
+      break;
+    case XFA_Element::ExcludeNS:
+      node = pdfium::MakeUnique<CXFA_ExcludeNS>(doc, packet);
+      break;
+    case XFA_Element::Assist:
+      node = pdfium::MakeUnique<CXFA_Assist>(doc, packet);
+      break;
+    case XFA_Element::Picture:
+      node = pdfium::MakeUnique<CXFA_Picture>(doc, packet);
+      break;
+    case XFA_Element::Traversal:
+      node = pdfium::MakeUnique<CXFA_Traversal>(doc, packet);
+      break;
+    case XFA_Element::SilentPrint:
+      node = pdfium::MakeUnique<CXFA_SilentPrint>(doc, packet);
+      break;
+    case XFA_Element::WebClient:
+      node = pdfium::MakeUnique<CXFA_WebClient>(doc, packet);
+      break;
+    case XFA_Element::LayoutPseudoModel:
+      node = pdfium::MakeUnique<CXFA_LayoutPseudoModel>(doc, packet);
+      break;
+    case XFA_Element::Producer:
+      node = pdfium::MakeUnique<CXFA_Producer>(doc, packet);
+      break;
+    case XFA_Element::Corner:
+      node = pdfium::MakeUnique<CXFA_Corner>(doc, packet);
+      break;
+    case XFA_Element::MsgId:
+      node = pdfium::MakeUnique<CXFA_MsgId>(doc, packet);
+      break;
+    case XFA_Element::Color:
+      node = pdfium::MakeUnique<CXFA_Color>(doc, packet);
+      break;
+    case XFA_Element::Keep:
+      node = pdfium::MakeUnique<CXFA_Keep>(doc, packet);
+      break;
+    case XFA_Element::Query:
+      node = pdfium::MakeUnique<CXFA_Query>(doc, packet);
+      break;
+    case XFA_Element::Insert:
+      node = pdfium::MakeUnique<CXFA_Insert>(doc, packet);
+      break;
+    case XFA_Element::ImageEdit:
+      node = pdfium::MakeUnique<CXFA_ImageEdit>(doc, packet);
+      break;
+    case XFA_Element::Validate:
+      node = pdfium::MakeUnique<CXFA_Validate>(doc, packet);
+      break;
+    case XFA_Element::DigestMethods:
+      node = pdfium::MakeUnique<CXFA_DigestMethods>(doc, packet);
+      break;
+    case XFA_Element::NumberPatterns:
+      node = pdfium::MakeUnique<CXFA_NumberPatterns>(doc, packet);
+      break;
+    case XFA_Element::PageSet:
+      node = pdfium::MakeUnique<CXFA_PageSet>(doc, packet);
+      break;
+    case XFA_Element::Integer:
+      node = pdfium::MakeUnique<CXFA_Integer>(doc, packet);
+      break;
+    case XFA_Element::SoapAddress:
+      node = pdfium::MakeUnique<CXFA_SoapAddress>(doc, packet);
+      break;
+    case XFA_Element::Equate:
+      node = pdfium::MakeUnique<CXFA_Equate>(doc, packet);
+      break;
+    case XFA_Element::FormFieldFilling:
+      node = pdfium::MakeUnique<CXFA_FormFieldFilling>(doc, packet);
+      break;
+    case XFA_Element::PageRange:
+      node = pdfium::MakeUnique<CXFA_PageRange>(doc, packet);
+      break;
+    case XFA_Element::Update:
+      node = pdfium::MakeUnique<CXFA_Update>(doc, packet);
+      break;
+    case XFA_Element::ConnectString:
+      node = pdfium::MakeUnique<CXFA_ConnectString>(doc, packet);
+      break;
+    case XFA_Element::Mode:
+      node = pdfium::MakeUnique<CXFA_Mode>(doc, packet);
+      break;
+    case XFA_Element::Layout:
+      node = pdfium::MakeUnique<CXFA_Layout>(doc, packet);
+      break;
+    case XFA_Element::Sharpxml:
+      node = pdfium::MakeUnique<CXFA_Sharpxml>(doc, packet);
+      break;
+    case XFA_Element::XsdConnection:
+      node = pdfium::MakeUnique<CXFA_XsdConnection>(doc, packet);
+      break;
+    case XFA_Element::Traverse:
+      node = pdfium::MakeUnique<CXFA_Traverse>(doc, packet);
+      break;
+    case XFA_Element::Encodings:
+      node = pdfium::MakeUnique<CXFA_Encodings>(doc, packet);
+      break;
+    case XFA_Element::Template:
+      node = pdfium::MakeUnique<CXFA_Template>(doc, packet);
+      break;
+    case XFA_Element::Acrobat:
+      node = pdfium::MakeUnique<CXFA_Acrobat>(doc, packet);
+      break;
+    case XFA_Element::ValidationMessaging:
+      node = pdfium::MakeUnique<CXFA_ValidationMessaging>(doc, packet);
+      break;
+    case XFA_Element::Signing:
+      node = pdfium::MakeUnique<CXFA_Signing>(doc, packet);
+      break;
+    case XFA_Element::DataWindow:
+      node = pdfium::MakeUnique<CXFA_DataWindow>(doc, packet);
+      break;
+    case XFA_Element::Script:
+      node = pdfium::MakeUnique<CXFA_Script>(doc, packet);
+      break;
+    case XFA_Element::AddViewerPreferences:
+      node = pdfium::MakeUnique<CXFA_AddViewerPreferences>(doc, packet);
+      break;
+    case XFA_Element::AlwaysEmbed:
+      node = pdfium::MakeUnique<CXFA_AlwaysEmbed>(doc, packet);
+      break;
+    case XFA_Element::PasswordEdit:
+      node = pdfium::MakeUnique<CXFA_PasswordEdit>(doc, packet);
+      break;
+    case XFA_Element::NumericEdit:
+      node = pdfium::MakeUnique<CXFA_NumericEdit>(doc, packet);
+      break;
+    case XFA_Element::EncryptionMethod:
+      node = pdfium::MakeUnique<CXFA_EncryptionMethod>(doc, packet);
+      break;
+    case XFA_Element::Change:
+      node = pdfium::MakeUnique<CXFA_Change>(doc, packet);
+      break;
+    case XFA_Element::PageArea:
+      node = pdfium::MakeUnique<CXFA_PageArea>(doc, packet);
+      break;
+    case XFA_Element::SubmitUrl:
+      node = pdfium::MakeUnique<CXFA_SubmitUrl>(doc, packet);
+      break;
+    case XFA_Element::Oids:
+      node = pdfium::MakeUnique<CXFA_Oids>(doc, packet);
+      break;
+    case XFA_Element::Signature:
+      node = pdfium::MakeUnique<CXFA_Signature>(doc, packet);
+      break;
+    case XFA_Element::ADBE_JSConsole:
+      node = pdfium::MakeUnique<CXFA_aDBE_JSConsole>(doc, packet);
+      break;
+    case XFA_Element::Caption:
+      node = pdfium::MakeUnique<CXFA_Caption>(doc, packet);
+      break;
+    case XFA_Element::Relevant:
+      node = pdfium::MakeUnique<CXFA_Relevant>(doc, packet);
+      break;
+    case XFA_Element::FlipLabel:
+      node = pdfium::MakeUnique<CXFA_FlipLabel>(doc, packet);
+      break;
+    case XFA_Element::ExData:
+      node = pdfium::MakeUnique<CXFA_ExData>(doc, packet);
+      break;
+    case XFA_Element::DayNames:
+      node = pdfium::MakeUnique<CXFA_DayNames>(doc, packet);
+      break;
+    case XFA_Element::SoapAction:
+      node = pdfium::MakeUnique<CXFA_SoapAction>(doc, packet);
+      break;
+    case XFA_Element::DefaultTypeface:
+      node = pdfium::MakeUnique<CXFA_DefaultTypeface>(doc, packet);
+      break;
+    case XFA_Element::Manifest:
+      node = pdfium::MakeUnique<CXFA_Manifest>(doc, packet);
+      break;
+    case XFA_Element::Overflow:
+      node = pdfium::MakeUnique<CXFA_Overflow>(doc, packet);
+      break;
+    case XFA_Element::Linear:
+      node = pdfium::MakeUnique<CXFA_Linear>(doc, packet);
+      break;
+    case XFA_Element::CurrencySymbol:
+      node = pdfium::MakeUnique<CXFA_CurrencySymbol>(doc, packet);
+      break;
+    case XFA_Element::Delete:
+      node = pdfium::MakeUnique<CXFA_Delete>(doc, packet);
+      break;
+    case XFA_Element::Deltas:
+      node = pdfium::MakeUnique<CXFA_Deltas>(doc, packet);
+      break;
+    case XFA_Element::DigestMethod:
+      node = pdfium::MakeUnique<CXFA_DigestMethod>(doc, packet);
+      break;
+    case XFA_Element::InstanceManager:
+      node = pdfium::MakeUnique<CXFA_InstanceManager>(doc, packet);
+      break;
+    case XFA_Element::EquateRange:
+      node = pdfium::MakeUnique<CXFA_EquateRange>(doc, packet);
+      break;
+    case XFA_Element::Medium:
+      node = pdfium::MakeUnique<CXFA_Medium>(doc, packet);
+      break;
+    case XFA_Element::TextEdit:
+      node = pdfium::MakeUnique<CXFA_TextEdit>(doc, packet);
+      break;
+    case XFA_Element::TemplateCache:
+      node = pdfium::MakeUnique<CXFA_TemplateCache>(doc, packet);
+      break;
+    case XFA_Element::CompressObjectStream:
+      node = pdfium::MakeUnique<CXFA_CompressObjectStream>(doc, packet);
+      break;
+    case XFA_Element::DataValue:
+      node = pdfium::MakeUnique<CXFA_DataValue>(doc, packet);
+      break;
+    case XFA_Element::AccessibleContent:
+      node = pdfium::MakeUnique<CXFA_AccessibleContent>(doc, packet);
+      break;
+    case XFA_Element::IncludeXDPContent:
+      node = pdfium::MakeUnique<CXFA_IncludeXDPContent>(doc, packet);
+      break;
+    case XFA_Element::XmlConnection:
+      node = pdfium::MakeUnique<CXFA_XmlConnection>(doc, packet);
+      break;
+    case XFA_Element::ValidateApprovalSignatures:
+      node = pdfium::MakeUnique<CXFA_ValidateApprovalSignatures>(doc, packet);
+      break;
+    case XFA_Element::SignData:
+      node = pdfium::MakeUnique<CXFA_SignData>(doc, packet);
+      break;
+    case XFA_Element::Packets:
+      node = pdfium::MakeUnique<CXFA_Packets>(doc, packet);
+      break;
+    case XFA_Element::DatePattern:
+      node = pdfium::MakeUnique<CXFA_DatePattern>(doc, packet);
+      break;
+    case XFA_Element::DuplexOption:
+      node = pdfium::MakeUnique<CXFA_DuplexOption>(doc, packet);
+      break;
+    case XFA_Element::Base:
+      node = pdfium::MakeUnique<CXFA_Base>(doc, packet);
+      break;
+    case XFA_Element::Bind:
+      node = pdfium::MakeUnique<CXFA_Bind>(doc, packet);
+      break;
+    case XFA_Element::Compression:
+      node = pdfium::MakeUnique<CXFA_Compression>(doc, packet);
+      break;
+    case XFA_Element::User:
+      node = pdfium::MakeUnique<CXFA_User>(doc, packet);
+      break;
+    case XFA_Element::Rectangle:
+      node = pdfium::MakeUnique<CXFA_Rectangle>(doc, packet);
+      break;
+    case XFA_Element::EffectiveOutputPolicy:
+      node = pdfium::MakeUnique<CXFA_EffectiveOutputPolicy>(doc, packet);
+      break;
+    case XFA_Element::ADBE_JSDebugger:
+      node = pdfium::MakeUnique<CXFA_aDBE_JSDebugger>(doc, packet);
+      break;
+    case XFA_Element::Acrobat7:
+      node = pdfium::MakeUnique<CXFA_Acrobat7>(doc, packet);
+      break;
+    case XFA_Element::Interactive:
+      node = pdfium::MakeUnique<CXFA_Interactive>(doc, packet);
+      break;
+    case XFA_Element::Locale:
+      node = pdfium::MakeUnique<CXFA_Locale>(doc, packet);
+      break;
+    case XFA_Element::CurrentPage:
+      node = pdfium::MakeUnique<CXFA_CurrentPage>(doc, packet);
+      break;
+    case XFA_Element::Data:
+      node = pdfium::MakeUnique<CXFA_Data>(doc, packet);
+      break;
+    case XFA_Element::Date:
+      node = pdfium::MakeUnique<CXFA_Date>(doc, packet);
+      break;
+    case XFA_Element::Desc:
+      node = pdfium::MakeUnique<CXFA_Desc>(doc, packet);
+      break;
+    case XFA_Element::Encrypt:
+      node = pdfium::MakeUnique<CXFA_Encrypt>(doc, packet);
+      break;
+    case XFA_Element::Draw:
+      node = pdfium::MakeUnique<CXFA_Draw>(doc, packet);
+      break;
+    case XFA_Element::Encryption:
+      node = pdfium::MakeUnique<CXFA_Encryption>(doc, packet);
+      break;
+    case XFA_Element::MeridiemNames:
+      node = pdfium::MakeUnique<CXFA_MeridiemNames>(doc, packet);
+      break;
+    case XFA_Element::Messaging:
+      node = pdfium::MakeUnique<CXFA_Messaging>(doc, packet);
+      break;
+    case XFA_Element::Speak:
+      node = pdfium::MakeUnique<CXFA_Speak>(doc, packet);
+      break;
+    case XFA_Element::DataGroup:
+      node = pdfium::MakeUnique<CXFA_DataGroup>(doc, packet);
+      break;
+    case XFA_Element::Common:
+      node = pdfium::MakeUnique<CXFA_Common>(doc, packet);
+      break;
+    case XFA_Element::Sharptext:
+      node = pdfium::MakeUnique<CXFA_Sharptext>(doc, packet);
+      break;
+    case XFA_Element::PaginationOverride:
+      node = pdfium::MakeUnique<CXFA_PaginationOverride>(doc, packet);
+      break;
+    case XFA_Element::Reasons:
+      node = pdfium::MakeUnique<CXFA_Reasons>(doc, packet);
+      break;
+    case XFA_Element::SignatureProperties:
+      node = pdfium::MakeUnique<CXFA_SignatureProperties>(doc, packet);
+      break;
+    case XFA_Element::Threshold:
+      node = pdfium::MakeUnique<CXFA_Threshold>(doc, packet);
+      break;
+    case XFA_Element::AppearanceFilter:
+      node = pdfium::MakeUnique<CXFA_AppearanceFilter>(doc, packet);
+      break;
+    case XFA_Element::Fill:
+      node = pdfium::MakeUnique<CXFA_Fill>(doc, packet);
+      break;
+    case XFA_Element::Font:
+      node = pdfium::MakeUnique<CXFA_Font>(doc, packet);
+      break;
+    case XFA_Element::Form:
+      node = pdfium::MakeUnique<CXFA_Form>(doc, packet);
+      break;
+    case XFA_Element::MediumInfo:
+      node = pdfium::MakeUnique<CXFA_MediumInfo>(doc, packet);
+      break;
+    case XFA_Element::Certificate:
+      node = pdfium::MakeUnique<CXFA_Certificate>(doc, packet);
+      break;
+    case XFA_Element::Password:
+      node = pdfium::MakeUnique<CXFA_Password>(doc, packet);
+      break;
+    case XFA_Element::RunScripts:
+      node = pdfium::MakeUnique<CXFA_RunScripts>(doc, packet);
+      break;
+    case XFA_Element::Trace:
+      node = pdfium::MakeUnique<CXFA_Trace>(doc, packet);
+      break;
+    case XFA_Element::Float:
+      node = pdfium::MakeUnique<CXFA_Float>(doc, packet);
+      break;
+    case XFA_Element::RenderPolicy:
+      node = pdfium::MakeUnique<CXFA_RenderPolicy>(doc, packet);
+      break;
+    case XFA_Element::LogPseudoModel:
+      node = pdfium::MakeUnique<CXFA_LogPseudoModel>(doc, packet);
+      break;
+    case XFA_Element::Destination:
+      node = pdfium::MakeUnique<CXFA_Destination>(doc, packet);
+      break;
+    case XFA_Element::Value:
+      node = pdfium::MakeUnique<CXFA_Value>(doc, packet);
+      break;
+    case XFA_Element::Bookend:
+      node = pdfium::MakeUnique<CXFA_Bookend>(doc, packet);
+      break;
+    case XFA_Element::ExObject:
+      node = pdfium::MakeUnique<CXFA_ExObject>(doc, packet);
+      break;
+    case XFA_Element::OpenAction:
+      node = pdfium::MakeUnique<CXFA_OpenAction>(doc, packet);
+      break;
+    case XFA_Element::NeverEmbed:
+      node = pdfium::MakeUnique<CXFA_NeverEmbed>(doc, packet);
+      break;
+    case XFA_Element::BindItems:
+      node = pdfium::MakeUnique<CXFA_BindItems>(doc, packet);
+      break;
+    case XFA_Element::Calculate:
+      node = pdfium::MakeUnique<CXFA_Calculate>(doc, packet);
+      break;
+    case XFA_Element::Print:
+      node = pdfium::MakeUnique<CXFA_Print>(doc, packet);
+      break;
+    case XFA_Element::Extras:
+      node = pdfium::MakeUnique<CXFA_Extras>(doc, packet);
+      break;
+    case XFA_Element::Proto:
+      node = pdfium::MakeUnique<CXFA_Proto>(doc, packet);
+      break;
+    case XFA_Element::DSigData:
+      node = pdfium::MakeUnique<CXFA_DSigData>(doc, packet);
+      break;
+    case XFA_Element::Creator:
+      node = pdfium::MakeUnique<CXFA_Creator>(doc, packet);
+      break;
+    case XFA_Element::Connect:
+      node = pdfium::MakeUnique<CXFA_Connect>(doc, packet);
+      break;
+    case XFA_Element::Permissions:
+      node = pdfium::MakeUnique<CXFA_Permissions>(doc, packet);
+      break;
+    case XFA_Element::ConnectionSet:
+      node = pdfium::MakeUnique<CXFA_ConnectionSet>(doc, packet);
+      break;
+    case XFA_Element::Submit:
+      node = pdfium::MakeUnique<CXFA_Submit>(doc, packet);
+      break;
+    case XFA_Element::Range:
+      node = pdfium::MakeUnique<CXFA_Range>(doc, packet);
+      break;
+    case XFA_Element::Linearized:
+      node = pdfium::MakeUnique<CXFA_Linearized>(doc, packet);
+      break;
+    case XFA_Element::Packet:
+      node = pdfium::MakeUnique<CXFA_Packet>(doc, packet);
+      break;
+    case XFA_Element::RootElement:
+      node = pdfium::MakeUnique<CXFA_RootElement>(doc, packet);
+      break;
+    case XFA_Element::PlaintextMetadata:
+      node = pdfium::MakeUnique<CXFA_PlaintextMetadata>(doc, packet);
+      break;
+    case XFA_Element::NumberSymbols:
+      node = pdfium::MakeUnique<CXFA_NumberSymbols>(doc, packet);
+      break;
+    case XFA_Element::PrintHighQuality:
+      node = pdfium::MakeUnique<CXFA_PrintHighQuality>(doc, packet);
+      break;
+    case XFA_Element::Driver:
+      node = pdfium::MakeUnique<CXFA_Driver>(doc, packet);
+      break;
+    case XFA_Element::IncrementalLoad:
+      node = pdfium::MakeUnique<CXFA_IncrementalLoad>(doc, packet);
+      break;
+    case XFA_Element::SubjectDN:
+      node = pdfium::MakeUnique<CXFA_SubjectDN>(doc, packet);
+      break;
+    case XFA_Element::CompressLogicalStructure:
+      node = pdfium::MakeUnique<CXFA_CompressLogicalStructure>(doc, packet);
+      break;
+    case XFA_Element::IncrementalMerge:
+      node = pdfium::MakeUnique<CXFA_IncrementalMerge>(doc, packet);
+      break;
+    case XFA_Element::Radial:
+      node = pdfium::MakeUnique<CXFA_Radial>(doc, packet);
+      break;
+    case XFA_Element::Variables:
+      node = pdfium::MakeUnique<CXFA_Variables>(doc, packet);
+      break;
+    case XFA_Element::TimePatterns:
+      node = pdfium::MakeUnique<CXFA_TimePatterns>(doc, packet);
+      break;
+    case XFA_Element::EffectiveInputPolicy:
+      node = pdfium::MakeUnique<CXFA_EffectiveInputPolicy>(doc, packet);
+      break;
+    case XFA_Element::NameAttr:
+      node = pdfium::MakeUnique<CXFA_NameAttr>(doc, packet);
+      break;
+    case XFA_Element::Conformance:
+      node = pdfium::MakeUnique<CXFA_Conformance>(doc, packet);
+      break;
+    case XFA_Element::Transform:
+      node = pdfium::MakeUnique<CXFA_Transform>(doc, packet);
+      break;
+    case XFA_Element::LockDocument:
+      node = pdfium::MakeUnique<CXFA_LockDocument>(doc, packet);
+      break;
+    case XFA_Element::BreakAfter:
+      node = pdfium::MakeUnique<CXFA_BreakAfter>(doc, packet);
+      break;
+    case XFA_Element::Line:
+      node = pdfium::MakeUnique<CXFA_Line>(doc, packet);
+      break;
+    case XFA_Element::List:
+      node = pdfium::MakeUnique<CXFA_List>(doc, packet);
+      break;
+    case XFA_Element::Source:
+      node = pdfium::MakeUnique<CXFA_Source>(doc, packet);
+      break;
+    case XFA_Element::Occur:
+      node = pdfium::MakeUnique<CXFA_Occur>(doc, packet);
+      break;
+    case XFA_Element::PickTrayByPDFSize:
+      node = pdfium::MakeUnique<CXFA_PickTrayByPDFSize>(doc, packet);
+      break;
+    case XFA_Element::MonthNames:
+      node = pdfium::MakeUnique<CXFA_MonthNames>(doc, packet);
+      break;
+    case XFA_Element::Severity:
+      node = pdfium::MakeUnique<CXFA_Severity>(doc, packet);
+      break;
+    case XFA_Element::GroupParent:
+      node = pdfium::MakeUnique<CXFA_GroupParent>(doc, packet);
+      break;
+    case XFA_Element::DocumentAssembly:
+      node = pdfium::MakeUnique<CXFA_DocumentAssembly>(doc, packet);
+      break;
+    case XFA_Element::NumberSymbol:
+      node = pdfium::MakeUnique<CXFA_NumberSymbol>(doc, packet);
+      break;
+    case XFA_Element::Tagged:
+      node = pdfium::MakeUnique<CXFA_Tagged>(doc, packet);
+      break;
+    case XFA_Element::Items:
+      node = pdfium::MakeUnique<CXFA_Items>(doc, packet);
+      break;
+    case XFA_Element::Unknown:
+    case XFA_Element::NodeList:
+      NOTREACHED();
+      return nullptr;
+  }
+  if (!node || !node->IsValidInPacket(packet))
+    return nullptr;
+  return node;
+}
diff --git a/xfa/fxfa/parser/cxfa_nodehelper.cpp b/xfa/fxfa/parser/cxfa_nodehelper.cpp
index e8e88d2..6428a3c 100644
--- a/xfa/fxfa/parser/cxfa_nodehelper.cpp
+++ b/xfa/fxfa/parser/cxfa_nodehelper.cpp
@@ -45,9 +45,8 @@
   CXFA_Node* parent = ResolveNodes_GetParent(pNode, XFA_LOGIC_NoTransparent);
   if (!parent)
     return 0;
-  const XFA_PROPERTY* pProperty = XFA_GetPropertyOfElement(
-      parent->GetElementType(), pNode->GetElementType(), XFA_XDPPACKET_UNKNOWN);
-  if (!pProperty && eLogicType == XFA_LOGIC_Transparent) {
+  if (!parent->HasProperty(pNode->GetElementType()) &&
+      eLogicType == XFA_LOGIC_Transparent) {
     parent = ResolveNodes_GetParent(pNode, XFA_LOGIC_Transparent);
     if (!parent)
       return 0;
@@ -340,7 +339,7 @@
     CreateNode_ForCondition(wsCondition);
   }
   if (bIsClassName) {
-    XFA_Element eType = XFA_GetElementTypeForName(wsName.AsStringView());
+    XFA_Element eType = CXFA_Node::NameToElement(wsName);
     if (eType == XFA_Element::Unknown)
       return false;
 
@@ -396,8 +395,5 @@
 
 bool CXFA_NodeHelper::NodeIsProperty(CXFA_Node* refNode) {
   CXFA_Node* parent = ResolveNodes_GetParent(refNode, XFA_LOGIC_NoTransparent);
-  return parent && refNode &&
-         XFA_GetPropertyOfElement(parent->GetElementType(),
-                                  refNode->GetElementType(),
-                                  XFA_XDPPACKET_UNKNOWN);
+  return parent && refNode && parent->HasProperty(refNode->GetElementType());
 }
diff --git a/xfa/fxfa/parser/cxfa_numberofcopies.cpp b/xfa/fxfa/parser/cxfa_numberofcopies.cpp
new file mode 100644
index 0000000..6970fcc
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_numberofcopies.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_numberofcopies.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"numberOfCopies";
+
+}  // namespace
+
+CXFA_NumberOfCopies::CXFA_NumberOfCopies(CXFA_Document* doc,
+                                         XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::NumberOfCopies,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_NumberOfCopies::~CXFA_NumberOfCopies() {}
diff --git a/xfa/fxfa/parser/cxfa_numberofcopies.h b/xfa/fxfa/parser/cxfa_numberofcopies.h
new file mode 100644
index 0000000..32b3fce
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_numberofcopies.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_NUMBEROFCOPIES_H_
+#define XFA_FXFA_PARSER_CXFA_NUMBEROFCOPIES_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_NumberOfCopies : public CXFA_Node {
+ public:
+  CXFA_NumberOfCopies(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_NumberOfCopies() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_NUMBEROFCOPIES_H_
diff --git a/xfa/fxfa/parser/cxfa_numberpattern.cpp b/xfa/fxfa/parser/cxfa_numberpattern.cpp
new file mode 100644
index 0000000..7109740
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_numberpattern.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_numberpattern.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Name,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"numberPattern";
+
+}  // namespace
+
+CXFA_NumberPattern::CXFA_NumberPattern(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_LocaleSet,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::NumberPattern,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_NumberPattern::~CXFA_NumberPattern() {}
diff --git a/xfa/fxfa/parser/cxfa_numberpattern.h b/xfa/fxfa/parser/cxfa_numberpattern.h
new file mode 100644
index 0000000..84be0c2
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_numberpattern.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_NUMBERPATTERN_H_
+#define XFA_FXFA_PARSER_CXFA_NUMBERPATTERN_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_NumberPattern : public CXFA_Node {
+ public:
+  CXFA_NumberPattern(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_NumberPattern() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_NUMBERPATTERN_H_
diff --git a/xfa/fxfa/parser/cxfa_numberpatterns.cpp b/xfa/fxfa/parser/cxfa_numberpatterns.cpp
new file mode 100644
index 0000000..bcd97cc
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_numberpatterns.cpp
@@ -0,0 +1,30 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_numberpatterns.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::NumberPattern, 4, 0},
+    {XFA_Element::Unknown, 0, 0}};
+
+constexpr wchar_t kName[] = L"numberPatterns";
+
+}  // namespace
+
+CXFA_NumberPatterns::CXFA_NumberPatterns(CXFA_Document* doc,
+                                         XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_LocaleSet,
+                XFA_ObjectType::Node,
+                XFA_Element::NumberPatterns,
+                kPropertyData,
+                nullptr,
+                kName) {}
+
+CXFA_NumberPatterns::~CXFA_NumberPatterns() {}
diff --git a/xfa/fxfa/parser/cxfa_numberpatterns.h b/xfa/fxfa/parser/cxfa_numberpatterns.h
new file mode 100644
index 0000000..724070f
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_numberpatterns.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_NUMBERPATTERNS_H_
+#define XFA_FXFA_PARSER_CXFA_NUMBERPATTERNS_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_NumberPatterns : public CXFA_Node {
+ public:
+  CXFA_NumberPatterns(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_NumberPatterns() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_NUMBERPATTERNS_H_
diff --git a/xfa/fxfa/parser/cxfa_numbersymbol.cpp b/xfa/fxfa/parser/cxfa_numbersymbol.cpp
new file mode 100644
index 0000000..064206c
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_numbersymbol.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_numbersymbol.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Name,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"numberSymbol";
+
+}  // namespace
+
+CXFA_NumberSymbol::CXFA_NumberSymbol(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_LocaleSet,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::NumberSymbol,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_NumberSymbol::~CXFA_NumberSymbol() {}
diff --git a/xfa/fxfa/parser/cxfa_numbersymbol.h b/xfa/fxfa/parser/cxfa_numbersymbol.h
new file mode 100644
index 0000000..a63cf3a
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_numbersymbol.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_NUMBERSYMBOL_H_
+#define XFA_FXFA_PARSER_CXFA_NUMBERSYMBOL_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_NumberSymbol : public CXFA_Node {
+ public:
+  CXFA_NumberSymbol(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_NumberSymbol() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_NUMBERSYMBOL_H_
diff --git a/xfa/fxfa/parser/cxfa_numbersymbols.cpp b/xfa/fxfa/parser/cxfa_numbersymbols.cpp
new file mode 100644
index 0000000..62a94aa
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_numbersymbols.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_numbersymbols.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::NumberSymbol, 5, 0},
+    {XFA_Element::Unknown, 0, 0}};
+
+constexpr wchar_t kName[] = L"numberSymbols";
+
+}  // namespace
+
+CXFA_NumberSymbols::CXFA_NumberSymbols(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_LocaleSet,
+                XFA_ObjectType::Node,
+                XFA_Element::NumberSymbols,
+                kPropertyData,
+                nullptr,
+                kName) {}
+
+CXFA_NumberSymbols::~CXFA_NumberSymbols() {}
diff --git a/xfa/fxfa/parser/cxfa_numbersymbols.h b/xfa/fxfa/parser/cxfa_numbersymbols.h
new file mode 100644
index 0000000..af668d0
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_numbersymbols.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_NUMBERSYMBOLS_H_
+#define XFA_FXFA_PARSER_CXFA_NUMBERSYMBOLS_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_NumberSymbols : public CXFA_Node {
+ public:
+  CXFA_NumberSymbols(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_NumberSymbols() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_NUMBERSYMBOLS_H_
diff --git a/xfa/fxfa/parser/cxfa_numericedit.cpp b/xfa/fxfa/parser/cxfa_numericedit.cpp
new file mode 100644
index 0000000..4f605f3
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_numericedit.cpp
@@ -0,0 +1,34 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_numericedit.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Margin, 1, 0},
+                                                 {XFA_Element::Border, 1, 0},
+                                                 {XFA_Element::Comb, 1, 0},
+                                                 {XFA_Element::Extras, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Use, XFA_Attribute::Usehref,
+    XFA_Attribute::HScrollPolicy, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"numericEdit";
+
+}  // namespace
+
+CXFA_NumericEdit::CXFA_NumericEdit(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::NumericEdit,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_NumericEdit::~CXFA_NumericEdit() {}
diff --git a/xfa/fxfa/parser/cxfa_numericedit.h b/xfa/fxfa/parser/cxfa_numericedit.h
new file mode 100644
index 0000000..ad2523c
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_numericedit.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_NUMERICEDIT_H_
+#define XFA_FXFA_PARSER_CXFA_NUMERICEDIT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_NumericEdit : public CXFA_Node {
+ public:
+  CXFA_NumericEdit(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_NumericEdit() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_NUMERICEDIT_H_
diff --git a/xfa/fxfa/parser/cxfa_occur.cpp b/xfa/fxfa/parser/cxfa_occur.cpp
new file mode 100644
index 0000000..3f06756
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_occur.cpp
@@ -0,0 +1,32 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_occur.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Extras, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,     XFA_Attribute::Max,     XFA_Attribute::Min,
+    XFA_Attribute::Use,    XFA_Attribute::Initial, XFA_Attribute::Usehref,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"occur";
+
+}  // namespace
+
+CXFA_Occur::CXFA_Occur(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Occur,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Occur::~CXFA_Occur() {}
diff --git a/xfa/fxfa/parser/cxfa_occur.h b/xfa/fxfa/parser/cxfa_occur.h
new file mode 100644
index 0000000..9a39d98
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_occur.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_OCCUR_H_
+#define XFA_FXFA_PARSER_CXFA_OCCUR_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Occur : public CXFA_Node {
+ public:
+  CXFA_Occur(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Occur() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_OCCUR_H_
diff --git a/xfa/fxfa/parser/cxfa_oid.cpp b/xfa/fxfa/parser/cxfa_oid.cpp
new file mode 100644
index 0000000..e46f701
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_oid.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_oid.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Name, XFA_Attribute::Use,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"oid";
+
+}  // namespace
+
+CXFA_Oid::CXFA_Oid(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::TextNode,
+                XFA_Element::Oid,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Oid::~CXFA_Oid() {}
diff --git a/xfa/fxfa/parser/cxfa_oid.h b/xfa/fxfa/parser/cxfa_oid.h
new file mode 100644
index 0000000..b76fbd0
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_oid.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_OID_H_
+#define XFA_FXFA_PARSER_CXFA_OID_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Oid : public CXFA_Node {
+ public:
+  CXFA_Oid(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Oid() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_OID_H_
diff --git a/xfa/fxfa/parser/cxfa_oids.cpp b/xfa/fxfa/parser/cxfa_oids.cpp
new file mode 100644
index 0000000..842171b
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_oids.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_oids.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Use, XFA_Attribute::Type,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"oids";
+
+}  // namespace
+
+CXFA_Oids::CXFA_Oids(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Oids,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Oids::~CXFA_Oids() {}
diff --git a/xfa/fxfa/parser/cxfa_oids.h b/xfa/fxfa/parser/cxfa_oids.h
new file mode 100644
index 0000000..85d8e26
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_oids.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_OIDS_H_
+#define XFA_FXFA_PARSER_CXFA_OIDS_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Oids : public CXFA_Node {
+ public:
+  CXFA_Oids(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Oids() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_OIDS_H_
diff --git a/xfa/fxfa/parser/cxfa_openaction.cpp b/xfa/fxfa/parser/cxfa_openaction.cpp
new file mode 100644
index 0000000..b2db509
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_openaction.cpp
@@ -0,0 +1,31 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_openaction.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::Destination, 1, 0},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"openAction";
+
+}  // namespace
+
+CXFA_OpenAction::CXFA_OpenAction(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::OpenAction,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_OpenAction::~CXFA_OpenAction() {}
diff --git a/xfa/fxfa/parser/cxfa_openaction.h b/xfa/fxfa/parser/cxfa_openaction.h
new file mode 100644
index 0000000..ce59fbd
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_openaction.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_OPENACTION_H_
+#define XFA_FXFA_PARSER_CXFA_OPENACTION_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_OpenAction : public CXFA_Node {
+ public:
+  CXFA_OpenAction(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_OpenAction() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_OPENACTION_H_
diff --git a/xfa/fxfa/parser/cxfa_operation.cpp b/xfa/fxfa/parser/cxfa_operation.cpp
new file mode 100644
index 0000000..f58d2ce
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_operation.cpp
@@ -0,0 +1,30 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_operation.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,     XFA_Attribute::Name,    XFA_Attribute::Use,
+    XFA_Attribute::Output, XFA_Attribute::Usehref, XFA_Attribute::Input,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"operation";
+
+}  // namespace
+
+CXFA_Operation::CXFA_Operation(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_ConnectionSet,
+                XFA_ObjectType::TextNode,
+                XFA_Element::Operation,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Operation::~CXFA_Operation() {}
diff --git a/xfa/fxfa/parser/cxfa_operation.h b/xfa/fxfa/parser/cxfa_operation.h
new file mode 100644
index 0000000..e65c936
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_operation.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_OPERATION_H_
+#define XFA_FXFA_PARSER_CXFA_OPERATION_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Operation : public CXFA_Node {
+ public:
+  CXFA_Operation(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Operation() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_OPERATION_H_
diff --git a/xfa/fxfa/parser/cxfa_output.cpp b/xfa/fxfa/parser/cxfa_output.cpp
new file mode 100644
index 0000000..13173ea
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_output.cpp
@@ -0,0 +1,32 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_output.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::To, 1, 0},
+                                                 {XFA_Element::Uri, 1, 0},
+                                                 {XFA_Element::Type, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"output";
+
+}  // namespace
+
+CXFA_Output::CXFA_Output(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::Output,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Output::~CXFA_Output() {}
diff --git a/xfa/fxfa/parser/cxfa_output.h b/xfa/fxfa/parser/cxfa_output.h
new file mode 100644
index 0000000..34d3d33
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_output.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_OUTPUT_H_
+#define XFA_FXFA_PARSER_CXFA_OUTPUT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Output : public CXFA_Node {
+ public:
+  CXFA_Output(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Output() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_OUTPUT_H_
diff --git a/xfa/fxfa/parser/cxfa_outputbin.cpp b/xfa/fxfa/parser/cxfa_outputbin.cpp
new file mode 100644
index 0000000..61cb1a7
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_outputbin.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_outputbin.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"outputBin";
+
+}  // namespace
+
+CXFA_OutputBin::CXFA_OutputBin(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::OutputBin,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_OutputBin::~CXFA_OutputBin() {}
diff --git a/xfa/fxfa/parser/cxfa_outputbin.h b/xfa/fxfa/parser/cxfa_outputbin.h
new file mode 100644
index 0000000..2c29c63
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_outputbin.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_OUTPUTBIN_H_
+#define XFA_FXFA_PARSER_CXFA_OUTPUTBIN_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_OutputBin : public CXFA_Node {
+ public:
+  CXFA_OutputBin(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_OutputBin() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_OUTPUTBIN_H_
diff --git a/xfa/fxfa/parser/cxfa_outputxsl.cpp b/xfa/fxfa/parser/cxfa_outputxsl.cpp
new file mode 100644
index 0000000..598c931
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_outputxsl.cpp
@@ -0,0 +1,30 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_outputxsl.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Uri, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"outputXSL";
+
+}  // namespace
+
+CXFA_OutputXSL::CXFA_OutputXSL(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::OutputXSL,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_OutputXSL::~CXFA_OutputXSL() {}
diff --git a/xfa/fxfa/parser/cxfa_outputxsl.h b/xfa/fxfa/parser/cxfa_outputxsl.h
new file mode 100644
index 0000000..3be7c49
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_outputxsl.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_OUTPUTXSL_H_
+#define XFA_FXFA_PARSER_CXFA_OUTPUTXSL_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_OutputXSL : public CXFA_Node {
+ public:
+  CXFA_OutputXSL(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_OutputXSL() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_OUTPUTXSL_H_
diff --git a/xfa/fxfa/parser/cxfa_overflow.cpp b/xfa/fxfa/parser/cxfa_overflow.cpp
new file mode 100644
index 0000000..86912fa
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_overflow.cpp
@@ -0,0 +1,30 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_overflow.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,      XFA_Attribute::Use,    XFA_Attribute::Trailer,
+    XFA_Attribute::Usehref, XFA_Attribute::Target, XFA_Attribute::Leader,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"overflow";
+
+}  // namespace
+
+CXFA_Overflow::CXFA_Overflow(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Overflow,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Overflow::~CXFA_Overflow() {}
diff --git a/xfa/fxfa/parser/cxfa_overflow.h b/xfa/fxfa/parser/cxfa_overflow.h
new file mode 100644
index 0000000..a5283e0
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_overflow.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_OVERFLOW_H_
+#define XFA_FXFA_PARSER_CXFA_OVERFLOW_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Overflow : public CXFA_Node {
+ public:
+  CXFA_Overflow(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Overflow() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_OVERFLOW_H_
diff --git a/xfa/fxfa/parser/cxfa_overprint.cpp b/xfa/fxfa/parser/cxfa_overprint.cpp
new file mode 100644
index 0000000..cfcba66
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_overprint.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_overprint.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"overprint";
+
+}  // namespace
+
+CXFA_Overprint::CXFA_Overprint(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Overprint,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Overprint::~CXFA_Overprint() {}
diff --git a/xfa/fxfa/parser/cxfa_overprint.h b/xfa/fxfa/parser/cxfa_overprint.h
new file mode 100644
index 0000000..451dab1
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_overprint.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_OVERPRINT_H_
+#define XFA_FXFA_PARSER_CXFA_OVERPRINT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Overprint : public CXFA_Node {
+ public:
+  CXFA_Overprint(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Overprint() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_OVERPRINT_H_
diff --git a/xfa/fxfa/parser/cxfa_packet.cpp b/xfa/fxfa/parser/cxfa_packet.cpp
new file mode 100644
index 0000000..dc584180
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_packet.cpp
@@ -0,0 +1,25 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_packet.h"
+
+namespace {
+
+constexpr wchar_t kName[] = L"packet";
+
+}  // namespace
+
+CXFA_Packet::CXFA_Packet(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_XDP,
+                XFA_ObjectType::NodeC,
+                XFA_Element::Packet,
+                nullptr,
+                nullptr,
+                kName) {}
+
+CXFA_Packet::~CXFA_Packet() {}
diff --git a/xfa/fxfa/parser/cxfa_packet.h b/xfa/fxfa/parser/cxfa_packet.h
new file mode 100644
index 0000000..66ea715
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_packet.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_PACKET_H_
+#define XFA_FXFA_PARSER_CXFA_PACKET_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Packet : public CXFA_Node {
+ public:
+  CXFA_Packet(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Packet() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_PACKET_H_
diff --git a/xfa/fxfa/parser/cxfa_packets.cpp b/xfa/fxfa/parser/cxfa_packets.cpp
new file mode 100644
index 0000000..313e2a3
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_packets.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_packets.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"packets";
+
+}  // namespace
+
+CXFA_Packets::CXFA_Packets(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Packets,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Packets::~CXFA_Packets() {}
diff --git a/xfa/fxfa/parser/cxfa_packets.h b/xfa/fxfa/parser/cxfa_packets.h
new file mode 100644
index 0000000..8a7fde5
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_packets.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_PACKETS_H_
+#define XFA_FXFA_PARSER_CXFA_PACKETS_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Packets : public CXFA_Node {
+ public:
+  CXFA_Packets(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Packets() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_PACKETS_H_
diff --git a/xfa/fxfa/parser/cxfa_pagearea.cpp b/xfa/fxfa/parser/cxfa_pagearea.cpp
new file mode 100644
index 0000000..17489f6
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_pagearea.cpp
@@ -0,0 +1,42 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_pagearea.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Medium, 1, 0},
+                                                 {XFA_Element::Desc, 1, 0},
+                                                 {XFA_Element::Extras, 1, 0},
+                                                 {XFA_Element::Occur, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Id,
+                                        XFA_Attribute::Name,
+                                        XFA_Attribute::Use,
+                                        XFA_Attribute::PagePosition,
+                                        XFA_Attribute::OddOrEven,
+                                        XFA_Attribute::Relevant,
+                                        XFA_Attribute::InitialNumber,
+                                        XFA_Attribute::Usehref,
+                                        XFA_Attribute::Numbered,
+                                        XFA_Attribute::BlankOrNotBlank,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"pageArea";
+
+}  // namespace
+
+CXFA_PageArea::CXFA_PageArea(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::ContainerNode,
+                XFA_Element::PageArea,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_PageArea::~CXFA_PageArea() {}
diff --git a/xfa/fxfa/parser/cxfa_pagearea.h b/xfa/fxfa/parser/cxfa_pagearea.h
new file mode 100644
index 0000000..d71fc59
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_pagearea.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_PAGEAREA_H_
+#define XFA_FXFA_PARSER_CXFA_PAGEAREA_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_PageArea : public CXFA_Node {
+ public:
+  CXFA_PageArea(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_PageArea() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_PAGEAREA_H_
diff --git a/xfa/fxfa/parser/cxfa_pageoffset.cpp b/xfa/fxfa/parser/cxfa_pageoffset.cpp
new file mode 100644
index 0000000..0d24458
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_pageoffset.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_pageoffset.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::X, XFA_Attribute::Y, XFA_Attribute::Desc,
+    XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"pageOffset";
+
+}  // namespace
+
+CXFA_PageOffset::CXFA_PageOffset(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::PageOffset,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_PageOffset::~CXFA_PageOffset() {}
diff --git a/xfa/fxfa/parser/cxfa_pageoffset.h b/xfa/fxfa/parser/cxfa_pageoffset.h
new file mode 100644
index 0000000..1c8d243
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_pageoffset.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_PAGEOFFSET_H_
+#define XFA_FXFA_PARSER_CXFA_PAGEOFFSET_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_PageOffset : public CXFA_Node {
+ public:
+  CXFA_PageOffset(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_PageOffset() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_PAGEOFFSET_H_
diff --git a/xfa/fxfa/parser/cxfa_pagerange.cpp b/xfa/fxfa/parser/cxfa_pagerange.cpp
new file mode 100644
index 0000000..10004eb
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_pagerange.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_pagerange.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"pageRange";
+
+}  // namespace
+
+CXFA_PageRange::CXFA_PageRange(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::PageRange,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_PageRange::~CXFA_PageRange() {}
diff --git a/xfa/fxfa/parser/cxfa_pagerange.h b/xfa/fxfa/parser/cxfa_pagerange.h
new file mode 100644
index 0000000..6766227
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_pagerange.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_PAGERANGE_H_
+#define XFA_FXFA_PARSER_CXFA_PAGERANGE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_PageRange : public CXFA_Node {
+ public:
+  CXFA_PageRange(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_PageRange() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_PAGERANGE_H_
diff --git a/xfa/fxfa/parser/cxfa_pageset.cpp b/xfa/fxfa/parser/cxfa_pageset.cpp
new file mode 100644
index 0000000..914060d
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_pageset.cpp
@@ -0,0 +1,34 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_pageset.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Extras, 1, 0},
+                                                 {XFA_Element::Occur, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,       XFA_Attribute::Name,
+    XFA_Attribute::Use,      XFA_Attribute::Relation,
+    XFA_Attribute::Relevant, XFA_Attribute::DuplexImposition,
+    XFA_Attribute::Usehref,  XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"pageSet";
+
+}  // namespace
+
+CXFA_PageSet::CXFA_PageSet(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::ContainerNode,
+                XFA_Element::PageSet,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_PageSet::~CXFA_PageSet() {}
diff --git a/xfa/fxfa/parser/cxfa_pageset.h b/xfa/fxfa/parser/cxfa_pageset.h
new file mode 100644
index 0000000..487d358
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_pageset.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_PAGESET_H_
+#define XFA_FXFA_PARSER_CXFA_PAGESET_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_PageSet : public CXFA_Node {
+ public:
+  CXFA_PageSet(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_PageSet() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_PAGESET_H_
diff --git a/xfa/fxfa/parser/cxfa_pagination.cpp b/xfa/fxfa/parser/cxfa_pagination.cpp
new file mode 100644
index 0000000..0290479
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_pagination.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_pagination.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"pagination";
+
+}  // namespace
+
+CXFA_Pagination::CXFA_Pagination(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Pagination,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Pagination::~CXFA_Pagination() {}
diff --git a/xfa/fxfa/parser/cxfa_pagination.h b/xfa/fxfa/parser/cxfa_pagination.h
new file mode 100644
index 0000000..fba8386
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_pagination.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_PAGINATION_H_
+#define XFA_FXFA_PARSER_CXFA_PAGINATION_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Pagination : public CXFA_Node {
+ public:
+  CXFA_Pagination(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Pagination() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_PAGINATION_H_
diff --git a/xfa/fxfa/parser/cxfa_paginationoverride.cpp b/xfa/fxfa/parser/cxfa_paginationoverride.cpp
new file mode 100644
index 0000000..69fb357
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_paginationoverride.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_paginationoverride.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"paginationOverride";
+
+}  // namespace
+
+CXFA_PaginationOverride::CXFA_PaginationOverride(CXFA_Document* doc,
+                                                 XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::PaginationOverride,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_PaginationOverride::~CXFA_PaginationOverride() {}
diff --git a/xfa/fxfa/parser/cxfa_paginationoverride.h b/xfa/fxfa/parser/cxfa_paginationoverride.h
new file mode 100644
index 0000000..156e7d6
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_paginationoverride.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_PAGINATIONOVERRIDE_H_
+#define XFA_FXFA_PARSER_CXFA_PAGINATIONOVERRIDE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_PaginationOverride : public CXFA_Node {
+ public:
+  CXFA_PaginationOverride(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_PaginationOverride() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_PAGINATIONOVERRIDE_H_
diff --git a/xfa/fxfa/parser/cxfa_para.cpp b/xfa/fxfa/parser/cxfa_para.cpp
new file mode 100644
index 0000000..43d63b6
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_para.cpp
@@ -0,0 +1,39 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_para.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::Hyphenation, 1, 0},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,         XFA_Attribute::HAlign,
+    XFA_Attribute::TextIndent, XFA_Attribute::Use,
+    XFA_Attribute::Widows,     XFA_Attribute::MarginRight,
+    XFA_Attribute::MarginLeft, XFA_Attribute::RadixOffset,
+    XFA_Attribute::Preserve,   XFA_Attribute::SpaceBelow,
+    XFA_Attribute::VAlign,     XFA_Attribute::TabDefault,
+    XFA_Attribute::TabStops,   XFA_Attribute::Orphans,
+    XFA_Attribute::Usehref,    XFA_Attribute::LineHeight,
+    XFA_Attribute::SpaceAbove, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"para";
+
+}  // namespace
+
+CXFA_Para::CXFA_Para(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Para,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Para::~CXFA_Para() {}
diff --git a/xfa/fxfa/parser/cxfa_para.h b/xfa/fxfa/parser/cxfa_para.h
new file mode 100644
index 0000000..00ac970
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_para.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_PARA_H_
+#define XFA_FXFA_PARSER_CXFA_PARA_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Para : public CXFA_Node {
+ public:
+  CXFA_Para(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Para() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_PARA_H_
diff --git a/xfa/fxfa/parser/cxfa_part.cpp b/xfa/fxfa/parser/cxfa_part.cpp
new file mode 100644
index 0000000..917b468
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_part.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_part.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"part";
+
+}  // namespace
+
+CXFA_Part::CXFA_Part(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Part,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Part::~CXFA_Part() {}
diff --git a/xfa/fxfa/parser/cxfa_part.h b/xfa/fxfa/parser/cxfa_part.h
new file mode 100644
index 0000000..f4114d0
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_part.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_PART_H_
+#define XFA_FXFA_PARSER_CXFA_PART_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Part : public CXFA_Node {
+ public:
+  CXFA_Part(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Part() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_PART_H_
diff --git a/xfa/fxfa/parser/cxfa_password.cpp b/xfa/fxfa/parser/cxfa_password.cpp
new file mode 100644
index 0000000..2f4573b
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_password.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_password.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Name, XFA_Attribute::Use,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"password";
+
+}  // namespace
+
+CXFA_Password::CXFA_Password(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_SourceSet,
+                XFA_ObjectType::TextNode,
+                XFA_Element::Password,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Password::~CXFA_Password() {}
diff --git a/xfa/fxfa/parser/cxfa_password.h b/xfa/fxfa/parser/cxfa_password.h
new file mode 100644
index 0000000..feffdb5
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_password.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_PASSWORD_H_
+#define XFA_FXFA_PARSER_CXFA_PASSWORD_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Password : public CXFA_Node {
+ public:
+  CXFA_Password(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Password() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_PASSWORD_H_
diff --git a/xfa/fxfa/parser/cxfa_passwordedit.cpp b/xfa/fxfa/parser/cxfa_passwordedit.cpp
new file mode 100644
index 0000000..96b040c
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_passwordedit.cpp
@@ -0,0 +1,36 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_passwordedit.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Margin, 1, 0},
+                                                 {XFA_Element::Border, 1, 0},
+                                                 {XFA_Element::Extras, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Id,
+                                        XFA_Attribute::Use,
+                                        XFA_Attribute::PasswordChar,
+                                        XFA_Attribute::Usehref,
+                                        XFA_Attribute::HScrollPolicy,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"passwordEdit";
+
+}  // namespace
+
+CXFA_PasswordEdit::CXFA_PasswordEdit(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::PasswordEdit,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_PasswordEdit::~CXFA_PasswordEdit() {}
diff --git a/xfa/fxfa/parser/cxfa_passwordedit.h b/xfa/fxfa/parser/cxfa_passwordedit.h
new file mode 100644
index 0000000..1c408cb
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_passwordedit.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_PASSWORDEDIT_H_
+#define XFA_FXFA_PARSER_CXFA_PASSWORDEDIT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_PasswordEdit : public CXFA_Node {
+ public:
+  CXFA_PasswordEdit(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_PasswordEdit() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_PASSWORDEDIT_H_
diff --git a/xfa/fxfa/parser/cxfa_pattern.cpp b/xfa/fxfa/parser/cxfa_pattern.cpp
new file mode 100644
index 0000000..b9740d1
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_pattern.cpp
@@ -0,0 +1,32 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_pattern.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Color, 1, 0},
+                                                 {XFA_Element::Extras, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Use, XFA_Attribute::Type,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"pattern";
+
+}  // namespace
+
+CXFA_Pattern::CXFA_Pattern(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Pattern,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Pattern::~CXFA_Pattern() {}
diff --git a/xfa/fxfa/parser/cxfa_pattern.h b/xfa/fxfa/parser/cxfa_pattern.h
new file mode 100644
index 0000000..066e92f
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_pattern.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_PATTERN_H_
+#define XFA_FXFA_PARSER_CXFA_PATTERN_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Pattern : public CXFA_Node {
+ public:
+  CXFA_Pattern(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Pattern() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_PATTERN_H_
diff --git a/xfa/fxfa/parser/cxfa_pcl.cpp b/xfa/fxfa/parser/cxfa_pcl.cpp
new file mode 100644
index 0000000..13ca508
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_pcl.cpp
@@ -0,0 +1,35 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_pcl.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::FontInfo, 1, 0},   {XFA_Element::Jog, 1, 0},
+    {XFA_Element::Xdc, 1, 0},        {XFA_Element::BatchOutput, 1, 0},
+    {XFA_Element::PageOffset, 1, 0}, {XFA_Element::OutputBin, 1, 0},
+    {XFA_Element::Staple, 1, 0},     {XFA_Element::MediumInfo, 1, 0},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Name, XFA_Attribute::Desc, XFA_Attribute::Lock,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"pcl";
+
+}  // namespace
+
+CXFA_Pcl::CXFA_Pcl(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::Pcl,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Pcl::~CXFA_Pcl() {}
diff --git a/xfa/fxfa/parser/cxfa_pcl.h b/xfa/fxfa/parser/cxfa_pcl.h
new file mode 100644
index 0000000..eb1a08f
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_pcl.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_PCL_H_
+#define XFA_FXFA_PARSER_CXFA_PCL_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Pcl : public CXFA_Node {
+ public:
+  CXFA_Pcl(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Pcl() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_PCL_H_
diff --git a/xfa/fxfa/parser/cxfa_pdf.cpp b/xfa/fxfa/parser/cxfa_pdf.cpp
new file mode 100644
index 0000000..957867e
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_pdf.cpp
@@ -0,0 +1,50 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_pdf.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::AdobeExtensionLevel, 1, 0},
+    {XFA_Element::FontInfo, 1, 0},
+    {XFA_Element::Xdc, 1, 0},
+    {XFA_Element::Pdfa, 1, 0},
+    {XFA_Element::BatchOutput, 1, 0},
+    {XFA_Element::ViewerPreferences, 1, 0},
+    {XFA_Element::ScriptModel, 1, 0},
+    {XFA_Element::Version, 1, 0},
+    {XFA_Element::SubmitFormat, 1, 0},
+    {XFA_Element::SilentPrint, 1, 0},
+    {XFA_Element::Producer, 1, 0},
+    {XFA_Element::Compression, 1, 0},
+    {XFA_Element::Interactive, 1, 0},
+    {XFA_Element::Encryption, 1, 0},
+    {XFA_Element::RenderPolicy, 1, 0},
+    {XFA_Element::OpenAction, 1, 0},
+    {XFA_Element::Creator, 1, 0},
+    {XFA_Element::Linearized, 1, 0},
+    {XFA_Element::Tagged, 1, 0},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Name, XFA_Attribute::Desc, XFA_Attribute::Lock,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"pdf";
+
+}  // namespace
+
+CXFA_Pdf::CXFA_Pdf(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::Pdf,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Pdf::~CXFA_Pdf() {}
diff --git a/xfa/fxfa/parser/cxfa_pdf.h b/xfa/fxfa/parser/cxfa_pdf.h
new file mode 100644
index 0000000..dcf39ba
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_pdf.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_PDF_H_
+#define XFA_FXFA_PARSER_CXFA_PDF_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Pdf : public CXFA_Node {
+ public:
+  CXFA_Pdf(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Pdf() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_PDF_H_
diff --git a/xfa/fxfa/parser/cxfa_pdfa.cpp b/xfa/fxfa/parser/cxfa_pdfa.cpp
new file mode 100644
index 0000000..76b6249
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_pdfa.cpp
@@ -0,0 +1,34 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_pdfa.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::Amd, 1, 0},
+    {XFA_Element::Part, 1, 0},
+    {XFA_Element::IncludeXDPContent, 1, 0},
+    {XFA_Element::Conformance, 1, 0},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"pdfa";
+
+}  // namespace
+
+CXFA_Pdfa::CXFA_Pdfa(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::Pdfa,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Pdfa::~CXFA_Pdfa() {}
diff --git a/xfa/fxfa/parser/cxfa_pdfa.h b/xfa/fxfa/parser/cxfa_pdfa.h
new file mode 100644
index 0000000..c0549ab
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_pdfa.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_PDFA_H_
+#define XFA_FXFA_PARSER_CXFA_PDFA_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Pdfa : public CXFA_Node {
+ public:
+  CXFA_Pdfa(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Pdfa() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_PDFA_H_
diff --git a/xfa/fxfa/parser/cxfa_permissions.cpp b/xfa/fxfa/parser/cxfa_permissions.cpp
new file mode 100644
index 0000000..2962012
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_permissions.cpp
@@ -0,0 +1,39 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_permissions.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::ModifyAnnots, 1, 0},
+    {XFA_Element::ContentCopy, 1, 0},
+    {XFA_Element::FormFieldFilling, 1, 0},
+    {XFA_Element::Change, 1, 0},
+    {XFA_Element::AccessibleContent, 1, 0},
+    {XFA_Element::Print, 1, 0},
+    {XFA_Element::PlaintextMetadata, 1, 0},
+    {XFA_Element::PrintHighQuality, 1, 0},
+    {XFA_Element::DocumentAssembly, 1, 0},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"permissions";
+
+}  // namespace
+
+CXFA_Permissions::CXFA_Permissions(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::Permissions,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Permissions::~CXFA_Permissions() {}
diff --git a/xfa/fxfa/parser/cxfa_permissions.h b/xfa/fxfa/parser/cxfa_permissions.h
new file mode 100644
index 0000000..b0b639b
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_permissions.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_PERMISSIONS_H_
+#define XFA_FXFA_PARSER_CXFA_PERMISSIONS_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Permissions : public CXFA_Node {
+ public:
+  CXFA_Permissions(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Permissions() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_PERMISSIONS_H_
diff --git a/xfa/fxfa/parser/cxfa_picktraybypdfsize.cpp b/xfa/fxfa/parser/cxfa_picktraybypdfsize.cpp
new file mode 100644
index 0000000..3a82e10
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_picktraybypdfsize.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_picktraybypdfsize.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"pickTrayByPDFSize";
+
+}  // namespace
+
+CXFA_PickTrayByPDFSize::CXFA_PickTrayByPDFSize(CXFA_Document* doc,
+                                               XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::PickTrayByPDFSize,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_PickTrayByPDFSize::~CXFA_PickTrayByPDFSize() {}
diff --git a/xfa/fxfa/parser/cxfa_picktraybypdfsize.h b/xfa/fxfa/parser/cxfa_picktraybypdfsize.h
new file mode 100644
index 0000000..1257523
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_picktraybypdfsize.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_PICKTRAYBYPDFSIZE_H_
+#define XFA_FXFA_PARSER_CXFA_PICKTRAYBYPDFSIZE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_PickTrayByPDFSize : public CXFA_Node {
+ public:
+  CXFA_PickTrayByPDFSize(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_PickTrayByPDFSize() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_PICKTRAYBYPDFSIZE_H_
diff --git a/xfa/fxfa/parser/cxfa_picture.cpp b/xfa/fxfa/parser/cxfa_picture.cpp
new file mode 100644
index 0000000..2f5def6
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_picture.cpp
@@ -0,0 +1,30 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_picture.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,   XFA_Attribute::Use,  XFA_Attribute::Usehref,
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"picture";
+
+}  // namespace
+
+CXFA_Picture::CXFA_Picture(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(
+          doc,
+          packet,
+          (XFA_XDPPACKET_Config | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+          XFA_ObjectType::ContentNode,
+          XFA_Element::Picture,
+          nullptr,
+          kAttributeData,
+          kName) {}
+
+CXFA_Picture::~CXFA_Picture() {}
diff --git a/xfa/fxfa/parser/cxfa_picture.h b/xfa/fxfa/parser/cxfa_picture.h
new file mode 100644
index 0000000..4e2f95e
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_picture.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_PICTURE_H_
+#define XFA_FXFA_PARSER_CXFA_PICTURE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Picture : public CXFA_Node {
+ public:
+  CXFA_Picture(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Picture() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_PICTURE_H_
diff --git a/xfa/fxfa/parser/cxfa_plaintextmetadata.cpp b/xfa/fxfa/parser/cxfa_plaintextmetadata.cpp
new file mode 100644
index 0000000..52a038e
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_plaintextmetadata.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_plaintextmetadata.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"plaintextMetadata";
+
+}  // namespace
+
+CXFA_PlaintextMetadata::CXFA_PlaintextMetadata(CXFA_Document* doc,
+                                               XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::PlaintextMetadata,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_PlaintextMetadata::~CXFA_PlaintextMetadata() {}
diff --git a/xfa/fxfa/parser/cxfa_plaintextmetadata.h b/xfa/fxfa/parser/cxfa_plaintextmetadata.h
new file mode 100644
index 0000000..dc940c2
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_plaintextmetadata.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_PLAINTEXTMETADATA_H_
+#define XFA_FXFA_PARSER_CXFA_PLAINTEXTMETADATA_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_PlaintextMetadata : public CXFA_Node {
+ public:
+  CXFA_PlaintextMetadata(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_PlaintextMetadata() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_PLAINTEXTMETADATA_H_
diff --git a/xfa/fxfa/parser/cxfa_presence.cpp b/xfa/fxfa/parser/cxfa_presence.cpp
new file mode 100644
index 0000000..352c8f0
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_presence.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_presence.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"presence";
+
+}  // namespace
+
+CXFA_Presence::CXFA_Presence(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::NodeV,
+                XFA_Element::Presence,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Presence::~CXFA_Presence() {}
diff --git a/xfa/fxfa/parser/cxfa_presence.h b/xfa/fxfa/parser/cxfa_presence.h
new file mode 100644
index 0000000..bf13d1a
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_presence.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_PRESENCE_H_
+#define XFA_FXFA_PARSER_CXFA_PRESENCE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Presence : public CXFA_Node {
+ public:
+  CXFA_Presence(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Presence() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_PRESENCE_H_
diff --git a/xfa/fxfa/parser/cxfa_present.cpp b/xfa/fxfa/parser/cxfa_present.cpp
new file mode 100644
index 0000000..939789a
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_present.cpp
@@ -0,0 +1,44 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_present.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::Xdp, 1, 0},
+    {XFA_Element::Cache, 1, 0},
+    {XFA_Element::Pagination, 1, 0},
+    {XFA_Element::Overprint, 1, 0},
+    {XFA_Element::BehaviorOverride, 1, 0},
+    {XFA_Element::Copies, 1, 0},
+    {XFA_Element::Output, 1, 0},
+    {XFA_Element::Validate, 1, 0},
+    {XFA_Element::Layout, 1, 0},
+    {XFA_Element::Script, 1, 0},
+    {XFA_Element::Common, 1, 0},
+    {XFA_Element::PaginationOverride, 1, 0},
+    {XFA_Element::Destination, 1, 0},
+    {XFA_Element::IncrementalMerge, 1, 0},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"present";
+
+}  // namespace
+
+CXFA_Present::CXFA_Present(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::Present,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Present::~CXFA_Present() {}
diff --git a/xfa/fxfa/parser/cxfa_present.h b/xfa/fxfa/parser/cxfa_present.h
new file mode 100644
index 0000000..83cfaf9
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_present.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_PRESENT_H_
+#define XFA_FXFA_PARSER_CXFA_PRESENT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Present : public CXFA_Node {
+ public:
+  CXFA_Present(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Present() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_PRESENT_H_
diff --git a/xfa/fxfa/parser/cxfa_print.cpp b/xfa/fxfa/parser/cxfa_print.cpp
new file mode 100644
index 0000000..42dcb2f
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_print.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_print.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"print";
+
+}  // namespace
+
+CXFA_Print::CXFA_Print(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Print,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Print::~CXFA_Print() {}
diff --git a/xfa/fxfa/parser/cxfa_print.h b/xfa/fxfa/parser/cxfa_print.h
new file mode 100644
index 0000000..048c3c3
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_print.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_PRINT_H_
+#define XFA_FXFA_PARSER_CXFA_PRINT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Print : public CXFA_Node {
+ public:
+  CXFA_Print(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Print() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_PRINT_H_
diff --git a/xfa/fxfa/parser/cxfa_printername.cpp b/xfa/fxfa/parser/cxfa_printername.cpp
new file mode 100644
index 0000000..711591c
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_printername.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_printername.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"printerName";
+
+}  // namespace
+
+CXFA_PrinterName::CXFA_PrinterName(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::PrinterName,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_PrinterName::~CXFA_PrinterName() {}
diff --git a/xfa/fxfa/parser/cxfa_printername.h b/xfa/fxfa/parser/cxfa_printername.h
new file mode 100644
index 0000000..c79fd63
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_printername.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_PRINTERNAME_H_
+#define XFA_FXFA_PARSER_CXFA_PRINTERNAME_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_PrinterName : public CXFA_Node {
+ public:
+  CXFA_PrinterName(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_PrinterName() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_PRINTERNAME_H_
diff --git a/xfa/fxfa/parser/cxfa_printhighquality.cpp b/xfa/fxfa/parser/cxfa_printhighquality.cpp
new file mode 100644
index 0000000..6a443a9
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_printhighquality.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_printhighquality.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"printHighQuality";
+
+}  // namespace
+
+CXFA_PrintHighQuality::CXFA_PrintHighQuality(CXFA_Document* doc,
+                                             XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::PrintHighQuality,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_PrintHighQuality::~CXFA_PrintHighQuality() {}
diff --git a/xfa/fxfa/parser/cxfa_printhighquality.h b/xfa/fxfa/parser/cxfa_printhighquality.h
new file mode 100644
index 0000000..4752bc6
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_printhighquality.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_PRINTHIGHQUALITY_H_
+#define XFA_FXFA_PARSER_CXFA_PRINTHIGHQUALITY_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_PrintHighQuality : public CXFA_Node {
+ public:
+  CXFA_PrintHighQuality(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_PrintHighQuality() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_PRINTHIGHQUALITY_H_
diff --git a/xfa/fxfa/parser/cxfa_printscaling.cpp b/xfa/fxfa/parser/cxfa_printscaling.cpp
new file mode 100644
index 0000000..c73a40a
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_printscaling.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_printscaling.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"printScaling";
+
+}  // namespace
+
+CXFA_PrintScaling::CXFA_PrintScaling(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::PrintScaling,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_PrintScaling::~CXFA_PrintScaling() {}
diff --git a/xfa/fxfa/parser/cxfa_printscaling.h b/xfa/fxfa/parser/cxfa_printscaling.h
new file mode 100644
index 0000000..bfe69eb
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_printscaling.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_PRINTSCALING_H_
+#define XFA_FXFA_PARSER_CXFA_PRINTSCALING_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_PrintScaling : public CXFA_Node {
+ public:
+  CXFA_PrintScaling(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_PrintScaling() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_PRINTSCALING_H_
diff --git a/xfa/fxfa/parser/cxfa_producer.cpp b/xfa/fxfa/parser/cxfa_producer.cpp
new file mode 100644
index 0000000..b1829bd
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_producer.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_producer.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"producer";
+
+}  // namespace
+
+CXFA_Producer::CXFA_Producer(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Producer,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Producer::~CXFA_Producer() {}
diff --git a/xfa/fxfa/parser/cxfa_producer.h b/xfa/fxfa/parser/cxfa_producer.h
new file mode 100644
index 0000000..1065031
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_producer.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_PRODUCER_H_
+#define XFA_FXFA_PARSER_CXFA_PRODUCER_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Producer : public CXFA_Node {
+ public:
+  CXFA_Producer(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Producer() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_PRODUCER_H_
diff --git a/xfa/fxfa/parser/cxfa_proto.cpp b/xfa/fxfa/parser/cxfa_proto.cpp
new file mode 100644
index 0000000..6d846c7
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_proto.cpp
@@ -0,0 +1,25 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_proto.h"
+
+namespace {
+
+constexpr wchar_t kName[] = L"proto";
+
+}  // namespace
+
+CXFA_Proto::CXFA_Proto(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Proto,
+                nullptr,
+                nullptr,
+                kName) {}
+
+CXFA_Proto::~CXFA_Proto() {}
diff --git a/xfa/fxfa/parser/cxfa_proto.h b/xfa/fxfa/parser/cxfa_proto.h
new file mode 100644
index 0000000..52509e4
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_proto.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_PROTO_H_
+#define XFA_FXFA_PARSER_CXFA_PROTO_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Proto : public CXFA_Node {
+ public:
+  CXFA_Proto(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Proto() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_PROTO_H_
diff --git a/xfa/fxfa/parser/cxfa_ps.cpp b/xfa/fxfa/parser/cxfa_ps.cpp
new file mode 100644
index 0000000..36bc377
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_ps.cpp
@@ -0,0 +1,35 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_ps.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::FontInfo, 1, 0},  {XFA_Element::Jog, 1, 0},
+    {XFA_Element::Xdc, 1, 0},       {XFA_Element::BatchOutput, 1, 0},
+    {XFA_Element::OutputBin, 1, 0}, {XFA_Element::Compress, 1, 0},
+    {XFA_Element::Staple, 1, 0},    {XFA_Element::MediumInfo, 1, 0},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Name, XFA_Attribute::Desc, XFA_Attribute::Lock,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"ps";
+
+}  // namespace
+
+CXFA_Ps::CXFA_Ps(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::Ps,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Ps::~CXFA_Ps() {}
diff --git a/xfa/fxfa/parser/cxfa_ps.h b/xfa/fxfa/parser/cxfa_ps.h
new file mode 100644
index 0000000..460ad41
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_ps.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_PS_H_
+#define XFA_FXFA_PARSER_CXFA_PS_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Ps : public CXFA_Node {
+ public:
+  CXFA_Ps(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Ps() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_PS_H_
diff --git a/xfa/fxfa/parser/cxfa_psmap.cpp b/xfa/fxfa/parser/cxfa_psmap.cpp
new file mode 100644
index 0000000..52ed45e
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_psmap.cpp
@@ -0,0 +1,25 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_psmap.h"
+
+namespace {
+
+constexpr wchar_t kName[] = L"psMap";
+
+}  // namespace
+
+CXFA_PsMap::CXFA_PsMap(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::PsMap,
+                nullptr,
+                nullptr,
+                kName) {}
+
+CXFA_PsMap::~CXFA_PsMap() {}
diff --git a/xfa/fxfa/parser/cxfa_psmap.h b/xfa/fxfa/parser/cxfa_psmap.h
new file mode 100644
index 0000000..5129a72
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_psmap.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_PSMAP_H_
+#define XFA_FXFA_PARSER_CXFA_PSMAP_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_PsMap : public CXFA_Node {
+ public:
+  CXFA_PsMap(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_PsMap() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_PSMAP_H_
diff --git a/xfa/fxfa/parser/cxfa_query.cpp b/xfa/fxfa/parser/cxfa_query.cpp
new file mode 100644
index 0000000..34d2c0a
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_query.cpp
@@ -0,0 +1,32 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_query.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::RecordSet, 1, 0},
+                                                 {XFA_Element::Select, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,          XFA_Attribute::Name,    XFA_Attribute::Use,
+    XFA_Attribute::CommandType, XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"query";
+
+}  // namespace
+
+CXFA_Query::CXFA_Query(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_SourceSet,
+                XFA_ObjectType::Node,
+                XFA_Element::Query,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Query::~CXFA_Query() {}
diff --git a/xfa/fxfa/parser/cxfa_query.h b/xfa/fxfa/parser/cxfa_query.h
new file mode 100644
index 0000000..a4fe3d9
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_query.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_QUERY_H_
+#define XFA_FXFA_PARSER_CXFA_QUERY_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Query : public CXFA_Node {
+ public:
+  CXFA_Query(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Query() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_QUERY_H_
diff --git a/xfa/fxfa/parser/cxfa_radial.cpp b/xfa/fxfa/parser/cxfa_radial.cpp
new file mode 100644
index 0000000..d080c35
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_radial.cpp
@@ -0,0 +1,32 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_radial.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Color, 1, 0},
+                                                 {XFA_Element::Extras, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Use, XFA_Attribute::Type,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"radial";
+
+}  // namespace
+
+CXFA_Radial::CXFA_Radial(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Radial,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Radial::~CXFA_Radial() {}
diff --git a/xfa/fxfa/parser/cxfa_radial.h b/xfa/fxfa/parser/cxfa_radial.h
new file mode 100644
index 0000000..00a4459
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_radial.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_RADIAL_H_
+#define XFA_FXFA_PARSER_CXFA_RADIAL_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Radial : public CXFA_Node {
+ public:
+  CXFA_Radial(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Radial() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_RADIAL_H_
diff --git a/xfa/fxfa/parser/cxfa_range.cpp b/xfa/fxfa/parser/cxfa_range.cpp
new file mode 100644
index 0000000..ec32693
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_range.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_range.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"range";
+
+}  // namespace
+
+CXFA_Range::CXFA_Range(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::NodeV,
+                XFA_Element::Range,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Range::~CXFA_Range() {}
diff --git a/xfa/fxfa/parser/cxfa_range.h b/xfa/fxfa/parser/cxfa_range.h
new file mode 100644
index 0000000..6b923ea
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_range.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_RANGE_H_
+#define XFA_FXFA_PARSER_CXFA_RANGE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Range : public CXFA_Node {
+ public:
+  CXFA_Range(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Range() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_RANGE_H_
diff --git a/xfa/fxfa/parser/cxfa_reason.cpp b/xfa/fxfa/parser/cxfa_reason.cpp
new file mode 100644
index 0000000..a7b4b52
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_reason.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_reason.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Name, XFA_Attribute::Use,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"reason";
+
+}  // namespace
+
+CXFA_Reason::CXFA_Reason(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::TextNode,
+                XFA_Element::Reason,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Reason::~CXFA_Reason() {}
diff --git a/xfa/fxfa/parser/cxfa_reason.h b/xfa/fxfa/parser/cxfa_reason.h
new file mode 100644
index 0000000..a78aebb
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_reason.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_REASON_H_
+#define XFA_FXFA_PARSER_CXFA_REASON_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Reason : public CXFA_Node {
+ public:
+  CXFA_Reason(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Reason() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_REASON_H_
diff --git a/xfa/fxfa/parser/cxfa_reasons.cpp b/xfa/fxfa/parser/cxfa_reasons.cpp
new file mode 100644
index 0000000..df964d4
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_reasons.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_reasons.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Use, XFA_Attribute::Type,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"reasons";
+
+}  // namespace
+
+CXFA_Reasons::CXFA_Reasons(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Reasons,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Reasons::~CXFA_Reasons() {}
diff --git a/xfa/fxfa/parser/cxfa_reasons.h b/xfa/fxfa/parser/cxfa_reasons.h
new file mode 100644
index 0000000..a193825
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_reasons.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_REASONS_H_
+#define XFA_FXFA_PARSER_CXFA_REASONS_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Reasons : public CXFA_Node {
+ public:
+  CXFA_Reasons(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Reasons() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_REASONS_H_
diff --git a/xfa/fxfa/parser/cxfa_record.cpp b/xfa/fxfa/parser/cxfa_record.cpp
new file mode 100644
index 0000000..90877e8
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_record.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_record.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"record";
+
+}  // namespace
+
+CXFA_Record::CXFA_Record(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::NodeV,
+                XFA_Element::Record,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Record::~CXFA_Record() {}
diff --git a/xfa/fxfa/parser/cxfa_record.h b/xfa/fxfa/parser/cxfa_record.h
new file mode 100644
index 0000000..68a38c3
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_record.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_RECORD_H_
+#define XFA_FXFA_PARSER_CXFA_RECORD_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Record : public CXFA_Node {
+ public:
+  CXFA_Record(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Record() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_RECORD_H_
diff --git a/xfa/fxfa/parser/cxfa_recordset.cpp b/xfa/fxfa/parser/cxfa_recordset.cpp
new file mode 100644
index 0000000..e7ae766
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_recordset.cpp
@@ -0,0 +1,33 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_recordset.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,        XFA_Attribute::Name,
+    XFA_Attribute::Max,       XFA_Attribute::Use,
+    XFA_Attribute::EofAction, XFA_Attribute::CursorType,
+    XFA_Attribute::LockType,  XFA_Attribute::BofAction,
+    XFA_Attribute::Usehref,   XFA_Attribute::CursorLocation,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"recordSet";
+
+}  // namespace
+
+CXFA_RecordSet::CXFA_RecordSet(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_SourceSet,
+                XFA_ObjectType::Node,
+                XFA_Element::RecordSet,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_RecordSet::~CXFA_RecordSet() {}
diff --git a/xfa/fxfa/parser/cxfa_recordset.h b/xfa/fxfa/parser/cxfa_recordset.h
new file mode 100644
index 0000000..df08c6f
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_recordset.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_RECORDSET_H_
+#define XFA_FXFA_PARSER_CXFA_RECORDSET_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_RecordSet : public CXFA_Node {
+ public:
+  CXFA_RecordSet(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_RecordSet() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_RECORDSET_H_
diff --git a/xfa/fxfa/parser/cxfa_rectangle.cpp b/xfa/fxfa/parser/cxfa_rectangle.cpp
new file mode 100644
index 0000000..cd3b584
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_rectangle.cpp
@@ -0,0 +1,33 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_rectangle.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Edge, 4, 0},
+                                                 {XFA_Element::Corner, 4, 0},
+                                                 {XFA_Element::Fill, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Use, XFA_Attribute::Usehref,
+    XFA_Attribute::Hand, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"rectangle";
+
+}  // namespace
+
+CXFA_Rectangle::CXFA_Rectangle(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Rectangle,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Rectangle::~CXFA_Rectangle() {}
diff --git a/xfa/fxfa/parser/cxfa_rectangle.h b/xfa/fxfa/parser/cxfa_rectangle.h
new file mode 100644
index 0000000..af46554
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_rectangle.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_RECTANGLE_H_
+#define XFA_FXFA_PARSER_CXFA_RECTANGLE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Rectangle : public CXFA_Node {
+ public:
+  CXFA_Rectangle(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Rectangle() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_RECTANGLE_H_
diff --git a/xfa/fxfa/parser/cxfa_ref.cpp b/xfa/fxfa/parser/cxfa_ref.cpp
new file mode 100644
index 0000000..cbc3ff9
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_ref.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_ref.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Id, XFA_Attribute::Use,
+                                        XFA_Attribute::Usehref,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"ref";
+
+}  // namespace
+
+CXFA_Ref::CXFA_Ref(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::TextNode,
+                XFA_Element::Ref,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Ref::~CXFA_Ref() {}
diff --git a/xfa/fxfa/parser/cxfa_ref.h b/xfa/fxfa/parser/cxfa_ref.h
new file mode 100644
index 0000000..f99c960
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_ref.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_REF_H_
+#define XFA_FXFA_PARSER_CXFA_REF_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Ref : public CXFA_Node {
+ public:
+  CXFA_Ref(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Ref() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_REF_H_
diff --git a/xfa/fxfa/parser/cxfa_relevant.cpp b/xfa/fxfa/parser/cxfa_relevant.cpp
new file mode 100644
index 0000000..a4209bc
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_relevant.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_relevant.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"relevant";
+
+}  // namespace
+
+CXFA_Relevant::CXFA_Relevant(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::NodeV,
+                XFA_Element::Relevant,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Relevant::~CXFA_Relevant() {}
diff --git a/xfa/fxfa/parser/cxfa_relevant.h b/xfa/fxfa/parser/cxfa_relevant.h
new file mode 100644
index 0000000..90fbddf
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_relevant.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_RELEVANT_H_
+#define XFA_FXFA_PARSER_CXFA_RELEVANT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Relevant : public CXFA_Node {
+ public:
+  CXFA_Relevant(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Relevant() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_RELEVANT_H_
diff --git a/xfa/fxfa/parser/cxfa_rename.cpp b/xfa/fxfa/parser/cxfa_rename.cpp
new file mode 100644
index 0000000..406315e
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_rename.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_rename.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"rename";
+
+}  // namespace
+
+CXFA_Rename::CXFA_Rename(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::NodeV,
+                XFA_Element::Rename,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Rename::~CXFA_Rename() {}
diff --git a/xfa/fxfa/parser/cxfa_rename.h b/xfa/fxfa/parser/cxfa_rename.h
new file mode 100644
index 0000000..901125a
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_rename.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_RENAME_H_
+#define XFA_FXFA_PARSER_CXFA_RENAME_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Rename : public CXFA_Node {
+ public:
+  CXFA_Rename(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Rename() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_RENAME_H_
diff --git a/xfa/fxfa/parser/cxfa_renderpolicy.cpp b/xfa/fxfa/parser/cxfa_renderpolicy.cpp
new file mode 100644
index 0000000..85eb4b1
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_renderpolicy.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_renderpolicy.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"renderPolicy";
+
+}  // namespace
+
+CXFA_RenderPolicy::CXFA_RenderPolicy(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::RenderPolicy,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_RenderPolicy::~CXFA_RenderPolicy() {}
diff --git a/xfa/fxfa/parser/cxfa_renderpolicy.h b/xfa/fxfa/parser/cxfa_renderpolicy.h
new file mode 100644
index 0000000..7322014
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_renderpolicy.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_RENDERPOLICY_H_
+#define XFA_FXFA_PARSER_CXFA_RENDERPOLICY_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_RenderPolicy : public CXFA_Node {
+ public:
+  CXFA_RenderPolicy(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_RenderPolicy() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_RENDERPOLICY_H_
diff --git a/xfa/fxfa/parser/cxfa_rootelement.cpp b/xfa/fxfa/parser/cxfa_rootelement.cpp
new file mode 100644
index 0000000..3cd5614
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_rootelement.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_rootelement.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Name, XFA_Attribute::Use,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"rootElement";
+
+}  // namespace
+
+CXFA_RootElement::CXFA_RootElement(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_ConnectionSet,
+                XFA_ObjectType::TextNode,
+                XFA_Element::RootElement,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_RootElement::~CXFA_RootElement() {}
diff --git a/xfa/fxfa/parser/cxfa_rootelement.h b/xfa/fxfa/parser/cxfa_rootelement.h
new file mode 100644
index 0000000..be55fc1
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_rootelement.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_ROOTELEMENT_H_
+#define XFA_FXFA_PARSER_CXFA_ROOTELEMENT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_RootElement : public CXFA_Node {
+ public:
+  CXFA_RootElement(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_RootElement() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_ROOTELEMENT_H_
diff --git a/xfa/fxfa/parser/cxfa_runscripts.cpp b/xfa/fxfa/parser/cxfa_runscripts.cpp
new file mode 100644
index 0000000..120dbc8
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_runscripts.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_runscripts.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"runScripts";
+
+}  // namespace
+
+CXFA_RunScripts::CXFA_RunScripts(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::RunScripts,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_RunScripts::~CXFA_RunScripts() {}
diff --git a/xfa/fxfa/parser/cxfa_runscripts.h b/xfa/fxfa/parser/cxfa_runscripts.h
new file mode 100644
index 0000000..0dc6e7d
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_runscripts.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_RUNSCRIPTS_H_
+#define XFA_FXFA_PARSER_CXFA_RUNSCRIPTS_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_RunScripts : public CXFA_Node {
+ public:
+  CXFA_RunScripts(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_RunScripts() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_RUNSCRIPTS_H_
diff --git a/xfa/fxfa/parser/cxfa_script.cpp b/xfa/fxfa/parser/cxfa_script.cpp
new file mode 100644
index 0000000..c34e094
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_script.cpp
@@ -0,0 +1,37 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_script.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::Exclude, 1, 0},
+    {XFA_Element::CurrentPage, 1, 0},
+    {XFA_Element::RunScripts, 1, 0},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,          XFA_Attribute::Name,  XFA_Attribute::Use,
+    XFA_Attribute::ContentType, XFA_Attribute::RunAt, XFA_Attribute::Binding,
+    XFA_Attribute::Usehref,     XFA_Attribute::Desc,  XFA_Attribute::Lock,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"script";
+
+}  // namespace
+
+CXFA_Script::CXFA_Script(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(
+          doc,
+          packet,
+          (XFA_XDPPACKET_Config | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+          XFA_ObjectType::ContentNode,
+          XFA_Element::Script,
+          kPropertyData,
+          kAttributeData,
+          kName) {}
+
+CXFA_Script::~CXFA_Script() {}
diff --git a/xfa/fxfa/parser/cxfa_script.h b/xfa/fxfa/parser/cxfa_script.h
new file mode 100644
index 0000000..f88b8b5
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_script.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_SCRIPT_H_
+#define XFA_FXFA_PARSER_CXFA_SCRIPT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Script : public CXFA_Node {
+ public:
+  CXFA_Script(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Script() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_SCRIPT_H_
diff --git a/xfa/fxfa/parser/cxfa_scriptmodel.cpp b/xfa/fxfa/parser/cxfa_scriptmodel.cpp
new file mode 100644
index 0000000..bed2e1d
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_scriptmodel.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_scriptmodel.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"scriptModel";
+
+}  // namespace
+
+CXFA_ScriptModel::CXFA_ScriptModel(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::ScriptModel,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_ScriptModel::~CXFA_ScriptModel() {}
diff --git a/xfa/fxfa/parser/cxfa_scriptmodel.h b/xfa/fxfa/parser/cxfa_scriptmodel.h
new file mode 100644
index 0000000..bb6cfd3
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_scriptmodel.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_SCRIPTMODEL_H_
+#define XFA_FXFA_PARSER_CXFA_SCRIPTMODEL_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_ScriptModel : public CXFA_Node {
+ public:
+  CXFA_ScriptModel(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_ScriptModel() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_SCRIPTMODEL_H_
diff --git a/xfa/fxfa/parser/cxfa_select.cpp b/xfa/fxfa/parser/cxfa_select.cpp
new file mode 100644
index 0000000..52835ef
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_select.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_select.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Name, XFA_Attribute::Use,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"select";
+
+}  // namespace
+
+CXFA_Select::CXFA_Select(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_SourceSet,
+                XFA_ObjectType::TextNode,
+                XFA_Element::Select,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Select::~CXFA_Select() {}
diff --git a/xfa/fxfa/parser/cxfa_select.h b/xfa/fxfa/parser/cxfa_select.h
new file mode 100644
index 0000000..99b99af
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_select.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_SELECT_H_
+#define XFA_FXFA_PARSER_CXFA_SELECT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Select : public CXFA_Node {
+ public:
+  CXFA_Select(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Select() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_SELECT_H_
diff --git a/xfa/fxfa/parser/cxfa_setproperty.cpp b/xfa/fxfa/parser/cxfa_setproperty.cpp
new file mode 100644
index 0000000..4826ae4
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_setproperty.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_setproperty.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Ref, XFA_Attribute::Connection, XFA_Attribute::Target,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"setProperty";
+
+}  // namespace
+
+CXFA_SetProperty::CXFA_SetProperty(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::SetProperty,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_SetProperty::~CXFA_SetProperty() {}
diff --git a/xfa/fxfa/parser/cxfa_setproperty.h b/xfa/fxfa/parser/cxfa_setproperty.h
new file mode 100644
index 0000000..4add12e
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_setproperty.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_SETPROPERTY_H_
+#define XFA_FXFA_PARSER_CXFA_SETPROPERTY_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_SetProperty : public CXFA_Node {
+ public:
+  CXFA_SetProperty(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_SetProperty() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_SETPROPERTY_H_
diff --git a/xfa/fxfa/parser/cxfa_severity.cpp b/xfa/fxfa/parser/cxfa_severity.cpp
new file mode 100644
index 0000000..0b7d365
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_severity.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_severity.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"severity";
+
+}  // namespace
+
+CXFA_Severity::CXFA_Severity(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::NodeV,
+                XFA_Element::Severity,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Severity::~CXFA_Severity() {}
diff --git a/xfa/fxfa/parser/cxfa_severity.h b/xfa/fxfa/parser/cxfa_severity.h
new file mode 100644
index 0000000..9f9693e
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_severity.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_SEVERITY_H_
+#define XFA_FXFA_PARSER_CXFA_SEVERITY_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Severity : public CXFA_Node {
+ public:
+  CXFA_Severity(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Severity() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_SEVERITY_H_
diff --git a/xfa/fxfa/parser/cxfa_sharptext.cpp b/xfa/fxfa/parser/cxfa_sharptext.cpp
new file mode 100644
index 0000000..52128a5
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_sharptext.cpp
@@ -0,0 +1,30 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_sharptext.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Value,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"#text";
+
+}  // namespace
+
+CXFA_Sharptext::CXFA_Sharptext(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Config |
+                 XFA_XDPPACKET_LocaleSet | XFA_XDPPACKET_ConnectionSet |
+                 XFA_XDPPACKET_SourceSet | XFA_XDPPACKET_Form),
+                XFA_ObjectType::NodeV,
+                XFA_Element::Sharptext,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Sharptext::~CXFA_Sharptext() {}
diff --git a/xfa/fxfa/parser/cxfa_sharptext.h b/xfa/fxfa/parser/cxfa_sharptext.h
new file mode 100644
index 0000000..3767289
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_sharptext.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_SHARPTEXT_H_
+#define XFA_FXFA_PARSER_CXFA_SHARPTEXT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Sharptext : public CXFA_Node {
+ public:
+  CXFA_Sharptext(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Sharptext() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_SHARPTEXT_H_
diff --git a/xfa/fxfa/parser/cxfa_sharpxhtml.cpp b/xfa/fxfa/parser/cxfa_sharpxhtml.cpp
new file mode 100644
index 0000000..e3f514e
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_sharpxhtml.cpp
@@ -0,0 +1,30 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_sharpxhtml.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Value,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"#xHTML";
+
+}  // namespace
+
+CXFA_SharpxHTML::CXFA_SharpxHTML(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Config |
+                 XFA_XDPPACKET_LocaleSet | XFA_XDPPACKET_ConnectionSet |
+                 XFA_XDPPACKET_SourceSet | XFA_XDPPACKET_Form),
+                XFA_ObjectType::NodeV,
+                XFA_Element::SharpxHTML,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_SharpxHTML::~CXFA_SharpxHTML() {}
diff --git a/xfa/fxfa/parser/cxfa_sharpxhtml.h b/xfa/fxfa/parser/cxfa_sharpxhtml.h
new file mode 100644
index 0000000..048014e
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_sharpxhtml.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_SHARPXHTML_H_
+#define XFA_FXFA_PARSER_CXFA_SHARPXHTML_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_SharpxHTML : public CXFA_Node {
+ public:
+  CXFA_SharpxHTML(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_SharpxHTML() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_SHARPXHTML_H_
diff --git a/xfa/fxfa/parser/cxfa_sharpxml.cpp b/xfa/fxfa/parser/cxfa_sharpxml.cpp
new file mode 100644
index 0000000..dbda7cb
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_sharpxml.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_sharpxml.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Value,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"#xml";
+
+}  // namespace
+
+CXFA_Sharpxml::CXFA_Sharpxml(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::NodeV,
+                XFA_Element::Sharpxml,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Sharpxml::~CXFA_Sharpxml() {}
diff --git a/xfa/fxfa/parser/cxfa_sharpxml.h b/xfa/fxfa/parser/cxfa_sharpxml.h
new file mode 100644
index 0000000..f4e55cd
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_sharpxml.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_SHARPXML_H_
+#define XFA_FXFA_PARSER_CXFA_SHARPXML_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Sharpxml : public CXFA_Node {
+ public:
+  CXFA_Sharpxml(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Sharpxml() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_SHARPXML_H_
diff --git a/xfa/fxfa/parser/cxfa_signature.cpp b/xfa/fxfa/parser/cxfa_signature.cpp
new file mode 100644
index 0000000..0dca3bc
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_signature.cpp
@@ -0,0 +1,33 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_signature.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::Margin, 1, 0}, {XFA_Element::Filter, 1, 0},
+    {XFA_Element::Border, 1, 0}, {XFA_Element::Manifest, 1, 0},
+    {XFA_Element::Extras, 1, 0}, {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Use, XFA_Attribute::Type,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"signature";
+
+}  // namespace
+
+CXFA_Signature::CXFA_Signature(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Signature,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Signature::~CXFA_Signature() {}
diff --git a/xfa/fxfa/parser/cxfa_signature.h b/xfa/fxfa/parser/cxfa_signature.h
new file mode 100644
index 0000000..b70e298
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_signature.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_SIGNATURE_H_
+#define XFA_FXFA_PARSER_CXFA_SIGNATURE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Signature : public CXFA_Node {
+ public:
+  CXFA_Signature(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Signature() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_SIGNATURE_H_
diff --git a/xfa/fxfa/parser/cxfa_signatureproperties.cpp b/xfa/fxfa/parser/cxfa_signatureproperties.cpp
new file mode 100644
index 0000000..2f9623b
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_signatureproperties.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_signatureproperties.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Use, XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"signatureProperties";
+
+}  // namespace
+
+CXFA_SignatureProperties::CXFA_SignatureProperties(CXFA_Document* doc,
+                                                   XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::SignatureProperties,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_SignatureProperties::~CXFA_SignatureProperties() {}
diff --git a/xfa/fxfa/parser/cxfa_signatureproperties.h b/xfa/fxfa/parser/cxfa_signatureproperties.h
new file mode 100644
index 0000000..3fce949
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_signatureproperties.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_SIGNATUREPROPERTIES_H_
+#define XFA_FXFA_PARSER_CXFA_SIGNATUREPROPERTIES_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_SignatureProperties : public CXFA_Node {
+ public:
+  CXFA_SignatureProperties(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_SignatureProperties() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_SIGNATUREPROPERTIES_H_
diff --git a/xfa/fxfa/parser/cxfa_signaturepseudomodel.cpp b/xfa/fxfa/parser/cxfa_signaturepseudomodel.cpp
new file mode 100644
index 0000000..c65cc36
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_signaturepseudomodel.cpp
@@ -0,0 +1,26 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_signaturepseudomodel.h"
+
+namespace {
+
+constexpr wchar_t kName[] = L"signaturePseudoModel";
+
+}  // namespace
+
+CXFA_SignaturePseudoModel::CXFA_SignaturePseudoModel(CXFA_Document* doc,
+                                                     XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_XDP,
+                XFA_ObjectType::Object,
+                XFA_Element::SignaturePseudoModel,
+                nullptr,
+                nullptr,
+                kName) {}
+
+CXFA_SignaturePseudoModel::~CXFA_SignaturePseudoModel() {}
diff --git a/xfa/fxfa/parser/cxfa_signaturepseudomodel.h b/xfa/fxfa/parser/cxfa_signaturepseudomodel.h
new file mode 100644
index 0000000..53273b1
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_signaturepseudomodel.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_SIGNATUREPSEUDOMODEL_H_
+#define XFA_FXFA_PARSER_CXFA_SIGNATUREPSEUDOMODEL_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_SignaturePseudoModel : public CXFA_Node {
+ public:
+  CXFA_SignaturePseudoModel(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_SignaturePseudoModel() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_SIGNATUREPSEUDOMODEL_H_
diff --git a/xfa/fxfa/parser/cxfa_signdata.cpp b/xfa/fxfa/parser/cxfa_signdata.cpp
new file mode 100644
index 0000000..a9cb38d
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_signdata.cpp
@@ -0,0 +1,33 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_signdata.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Filter, 1, 0},
+                                                 {XFA_Element::Manifest, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,        XFA_Attribute::Ref,     XFA_Attribute::Use,
+    XFA_Attribute::Operation, XFA_Attribute::Usehref, XFA_Attribute::Target,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"signData";
+
+}  // namespace
+
+CXFA_SignData::CXFA_SignData(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::SignData,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_SignData::~CXFA_SignData() {}
diff --git a/xfa/fxfa/parser/cxfa_signdata.h b/xfa/fxfa/parser/cxfa_signdata.h
new file mode 100644
index 0000000..234ddeb
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_signdata.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_SIGNDATA_H_
+#define XFA_FXFA_PARSER_CXFA_SIGNDATA_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_SignData : public CXFA_Node {
+ public:
+  CXFA_SignData(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_SignData() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_SIGNDATA_H_
diff --git a/xfa/fxfa/parser/cxfa_signing.cpp b/xfa/fxfa/parser/cxfa_signing.cpp
new file mode 100644
index 0000000..a1ec88b
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_signing.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_signing.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Use, XFA_Attribute::Type,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"signing";
+
+}  // namespace
+
+CXFA_Signing::CXFA_Signing(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Signing,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Signing::~CXFA_Signing() {}
diff --git a/xfa/fxfa/parser/cxfa_signing.h b/xfa/fxfa/parser/cxfa_signing.h
new file mode 100644
index 0000000..0fe83cf
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_signing.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_SIGNING_H_
+#define XFA_FXFA_PARSER_CXFA_SIGNING_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Signing : public CXFA_Node {
+ public:
+  CXFA_Signing(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Signing() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_SIGNING_H_
diff --git a/xfa/fxfa/parser/cxfa_silentprint.cpp b/xfa/fxfa/parser/cxfa_silentprint.cpp
new file mode 100644
index 0000000..5e48a94
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_silentprint.cpp
@@ -0,0 +1,32 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_silentprint.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::AddSilentPrint, 1, 0},
+    {XFA_Element::PrinterName, 1, 0},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"silentPrint";
+
+}  // namespace
+
+CXFA_SilentPrint::CXFA_SilentPrint(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::SilentPrint,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_SilentPrint::~CXFA_SilentPrint() {}
diff --git a/xfa/fxfa/parser/cxfa_silentprint.h b/xfa/fxfa/parser/cxfa_silentprint.h
new file mode 100644
index 0000000..7b1adc1
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_silentprint.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_SILENTPRINT_H_
+#define XFA_FXFA_PARSER_CXFA_SILENTPRINT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_SilentPrint : public CXFA_Node {
+ public:
+  CXFA_SilentPrint(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_SilentPrint() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_SILENTPRINT_H_
diff --git a/xfa/fxfa/parser/cxfa_simple_parser.cpp b/xfa/fxfa/parser/cxfa_simple_parser.cpp
index 579ca9e..4ee9ca7 100644
--- a/xfa/fxfa/parser/cxfa_simple_parser.cpp
+++ b/xfa/fxfa/parser/cxfa_simple_parser.cpp
@@ -871,20 +871,18 @@
       case FX_XMLNODE_Element: {
         CFX_XMLElement* pXMLElement = static_cast<CFX_XMLElement*>(pXMLChild);
         WideString wsTagName = pXMLElement->GetLocalTagName();
-        XFA_Element eType = XFA_GetElementTypeForName(wsTagName.AsStringView());
+        XFA_Element eType = CXFA_Node::NameToElement(wsTagName);
         if (eType == XFA_Element::Unknown)
           continue;
 
-        const XFA_PROPERTY* pPropertyInfo = XFA_GetPropertyOfElement(
-            pXFANode->GetElementType(), eType, ePacketID);
-        if (pPropertyInfo &&
-            ((pPropertyInfo->uFlags &
-              (XFA_PROPERTYFLAG_OneOf | XFA_PROPERTYFLAG_DefaultOneOf)) != 0)) {
+        if (pXFANode->HasPropertyFlags(
+                eType,
+                XFA_PROPERTYFLAG_OneOf | XFA_PROPERTYFLAG_DefaultOneOf)) {
           if (bOneOfPropertyFound)
             break;
-
           bOneOfPropertyFound = true;
         }
+
         CXFA_Node* pXFAChild = m_pFactory->CreateNode(ePacketID, eType);
         if (!pXFAChild)
           return nullptr;
diff --git a/xfa/fxfa/parser/cxfa_soapaction.cpp b/xfa/fxfa/parser/cxfa_soapaction.cpp
new file mode 100644
index 0000000..c5716de
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_soapaction.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_soapaction.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Name, XFA_Attribute::Use,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"soapAction";
+
+}  // namespace
+
+CXFA_SoapAction::CXFA_SoapAction(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_ConnectionSet,
+                XFA_ObjectType::TextNode,
+                XFA_Element::SoapAction,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_SoapAction::~CXFA_SoapAction() {}
diff --git a/xfa/fxfa/parser/cxfa_soapaction.h b/xfa/fxfa/parser/cxfa_soapaction.h
new file mode 100644
index 0000000..9d24e6e
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_soapaction.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_SOAPACTION_H_
+#define XFA_FXFA_PARSER_CXFA_SOAPACTION_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_SoapAction : public CXFA_Node {
+ public:
+  CXFA_SoapAction(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_SoapAction() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_SOAPACTION_H_
diff --git a/xfa/fxfa/parser/cxfa_soapaddress.cpp b/xfa/fxfa/parser/cxfa_soapaddress.cpp
new file mode 100644
index 0000000..2e4750f
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_soapaddress.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_soapaddress.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Name, XFA_Attribute::Use,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"soapAddress";
+
+}  // namespace
+
+CXFA_SoapAddress::CXFA_SoapAddress(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_ConnectionSet,
+                XFA_ObjectType::TextNode,
+                XFA_Element::SoapAddress,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_SoapAddress::~CXFA_SoapAddress() {}
diff --git a/xfa/fxfa/parser/cxfa_soapaddress.h b/xfa/fxfa/parser/cxfa_soapaddress.h
new file mode 100644
index 0000000..17ab11f
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_soapaddress.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_SOAPADDRESS_H_
+#define XFA_FXFA_PARSER_CXFA_SOAPADDRESS_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_SoapAddress : public CXFA_Node {
+ public:
+  CXFA_SoapAddress(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_SoapAddress() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_SOAPADDRESS_H_
diff --git a/xfa/fxfa/parser/cxfa_solid.cpp b/xfa/fxfa/parser/cxfa_solid.cpp
new file mode 100644
index 0000000..8c5c051
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_solid.cpp
@@ -0,0 +1,31 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_solid.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Extras, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Id, XFA_Attribute::Use,
+                                        XFA_Attribute::Usehref,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"solid";
+
+}  // namespace
+
+CXFA_Solid::CXFA_Solid(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Solid,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Solid::~CXFA_Solid() {}
diff --git a/xfa/fxfa/parser/cxfa_solid.h b/xfa/fxfa/parser/cxfa_solid.h
new file mode 100644
index 0000000..75936cd
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_solid.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_SOLID_H_
+#define XFA_FXFA_PARSER_CXFA_SOLID_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Solid : public CXFA_Node {
+ public:
+  CXFA_Solid(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Solid() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_SOLID_H_
diff --git a/xfa/fxfa/parser/cxfa_source.cpp b/xfa/fxfa/parser/cxfa_source.cpp
new file mode 100644
index 0000000..994213c
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_source.cpp
@@ -0,0 +1,31 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_source.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Connect, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Name, XFA_Attribute::Use,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"source";
+
+}  // namespace
+
+CXFA_Source::CXFA_Source(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_SourceSet,
+                XFA_ObjectType::Node,
+                XFA_Element::Source,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Source::~CXFA_Source() {}
diff --git a/xfa/fxfa/parser/cxfa_source.h b/xfa/fxfa/parser/cxfa_source.h
new file mode 100644
index 0000000..9c249cd
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_source.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_SOURCE_H_
+#define XFA_FXFA_PARSER_CXFA_SOURCE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Source : public CXFA_Node {
+ public:
+  CXFA_Source(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Source() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_SOURCE_H_
diff --git a/xfa/fxfa/parser/cxfa_sourceset.cpp b/xfa/fxfa/parser/cxfa_sourceset.cpp
new file mode 100644
index 0000000..6757aaa
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_sourceset.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_sourceset.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Name, XFA_Attribute::Use,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"sourceSet";
+
+}  // namespace
+
+CXFA_SourceSet::CXFA_SourceSet(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_SourceSet,
+                XFA_ObjectType::ModelNode,
+                XFA_Element::SourceSet,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_SourceSet::~CXFA_SourceSet() {}
diff --git a/xfa/fxfa/parser/cxfa_sourceset.h b/xfa/fxfa/parser/cxfa_sourceset.h
new file mode 100644
index 0000000..47f45ad
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_sourceset.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_SOURCESET_H_
+#define XFA_FXFA_PARSER_CXFA_SOURCESET_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_SourceSet : public CXFA_Node {
+ public:
+  CXFA_SourceSet(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_SourceSet() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_SOURCESET_H_
diff --git a/xfa/fxfa/parser/cxfa_speak.cpp b/xfa/fxfa/parser/cxfa_speak.cpp
new file mode 100644
index 0000000..789a9fd
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_speak.cpp
@@ -0,0 +1,30 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_speak.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,       XFA_Attribute::Rid,     XFA_Attribute::Use,
+    XFA_Attribute::Priority, XFA_Attribute::Usehref, XFA_Attribute::Disable,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"speak";
+
+}  // namespace
+
+CXFA_Speak::CXFA_Speak(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::TextNode,
+                XFA_Element::Speak,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Speak::~CXFA_Speak() {}
diff --git a/xfa/fxfa/parser/cxfa_speak.h b/xfa/fxfa/parser/cxfa_speak.h
new file mode 100644
index 0000000..e45bf50
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_speak.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_SPEAK_H_
+#define XFA_FXFA_PARSER_CXFA_SPEAK_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Speak : public CXFA_Node {
+ public:
+  CXFA_Speak(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Speak() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_SPEAK_H_
diff --git a/xfa/fxfa/parser/cxfa_staple.cpp b/xfa/fxfa/parser/cxfa_staple.cpp
new file mode 100644
index 0000000..86e1ce3
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_staple.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_staple.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Mode, XFA_Attribute::Desc, XFA_Attribute::Lock,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"staple";
+
+}  // namespace
+
+CXFA_Staple::CXFA_Staple(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::Staple,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Staple::~CXFA_Staple() {}
diff --git a/xfa/fxfa/parser/cxfa_staple.h b/xfa/fxfa/parser/cxfa_staple.h
new file mode 100644
index 0000000..b843019
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_staple.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_STAPLE_H_
+#define XFA_FXFA_PARSER_CXFA_STAPLE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Staple : public CXFA_Node {
+ public:
+  CXFA_Staple(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Staple() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_STAPLE_H_
diff --git a/xfa/fxfa/parser/cxfa_startnode.cpp b/xfa/fxfa/parser/cxfa_startnode.cpp
new file mode 100644
index 0000000..7364560
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_startnode.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_startnode.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"startNode";
+
+}  // namespace
+
+CXFA_StartNode::CXFA_StartNode(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::NodeV,
+                XFA_Element::StartNode,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_StartNode::~CXFA_StartNode() {}
diff --git a/xfa/fxfa/parser/cxfa_startnode.h b/xfa/fxfa/parser/cxfa_startnode.h
new file mode 100644
index 0000000..048564d
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_startnode.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_STARTNODE_H_
+#define XFA_FXFA_PARSER_CXFA_STARTNODE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_StartNode : public CXFA_Node {
+ public:
+  CXFA_StartNode(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_StartNode() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_STARTNODE_H_
diff --git a/xfa/fxfa/parser/cxfa_startpage.cpp b/xfa/fxfa/parser/cxfa_startpage.cpp
new file mode 100644
index 0000000..48d5deb
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_startpage.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_startpage.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"startPage";
+
+}  // namespace
+
+CXFA_StartPage::CXFA_StartPage(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::NodeV,
+                XFA_Element::StartPage,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_StartPage::~CXFA_StartPage() {}
diff --git a/xfa/fxfa/parser/cxfa_startpage.h b/xfa/fxfa/parser/cxfa_startpage.h
new file mode 100644
index 0000000..0eceb87
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_startpage.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_STARTPAGE_H_
+#define XFA_FXFA_PARSER_CXFA_STARTPAGE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_StartPage : public CXFA_Node {
+ public:
+  CXFA_StartPage(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_StartPage() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_STARTPAGE_H_
diff --git a/xfa/fxfa/parser/cxfa_stipple.cpp b/xfa/fxfa/parser/cxfa_stipple.cpp
new file mode 100644
index 0000000..0567f5a1
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_stipple.cpp
@@ -0,0 +1,32 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_stipple.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Color, 1, 0},
+                                                 {XFA_Element::Extras, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Use, XFA_Attribute::Rate,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"stipple";
+
+}  // namespace
+
+CXFA_Stipple::CXFA_Stipple(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Stipple,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Stipple::~CXFA_Stipple() {}
diff --git a/xfa/fxfa/parser/cxfa_stipple.h b/xfa/fxfa/parser/cxfa_stipple.h
new file mode 100644
index 0000000..a662e48
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_stipple.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_STIPPLE_H_
+#define XFA_FXFA_PARSER_CXFA_STIPPLE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Stipple : public CXFA_Node {
+ public:
+  CXFA_Stipple(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Stipple() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_STIPPLE_H_
diff --git a/xfa/fxfa/parser/cxfa_subform.cpp b/xfa/fxfa/parser/cxfa_subform.cpp
new file mode 100644
index 0000000..e297437
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_subform.cpp
@@ -0,0 +1,63 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_subform.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::Break, 1, 0},   {XFA_Element::Margin, 1, 0},
+    {XFA_Element::Para, 1, 0},    {XFA_Element::Border, 1, 0},
+    {XFA_Element::Assist, 1, 0},  {XFA_Element::Traversal, 1, 0},
+    {XFA_Element::Keep, 1, 0},    {XFA_Element::Validate, 1, 0},
+    {XFA_Element::PageSet, 1, 0}, {XFA_Element::Overflow, 1, 0},
+    {XFA_Element::Bind, 1, 0},    {XFA_Element::Desc, 1, 0},
+    {XFA_Element::Bookend, 1, 0}, {XFA_Element::Calculate, 1, 0},
+    {XFA_Element::Extras, 1, 0},  {XFA_Element::Variables, 1, 0},
+    {XFA_Element::Occur, 1, 0},   {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::H,
+                                        XFA_Attribute::W,
+                                        XFA_Attribute::X,
+                                        XFA_Attribute::Y,
+                                        XFA_Attribute::Id,
+                                        XFA_Attribute::HAlign,
+                                        XFA_Attribute::Name,
+                                        XFA_Attribute::Use,
+                                        XFA_Attribute::AllowMacro,
+                                        XFA_Attribute::ColumnWidths,
+                                        XFA_Attribute::Access,
+                                        XFA_Attribute::Presence,
+                                        XFA_Attribute::VAlign,
+                                        XFA_Attribute::MaxH,
+                                        XFA_Attribute::MaxW,
+                                        XFA_Attribute::MinH,
+                                        XFA_Attribute::MinW,
+                                        XFA_Attribute::Layout,
+                                        XFA_Attribute::Relevant,
+                                        XFA_Attribute::MergeMode,
+                                        XFA_Attribute::ColSpan,
+                                        XFA_Attribute::Usehref,
+                                        XFA_Attribute::Locale,
+                                        XFA_Attribute::AnchorType,
+                                        XFA_Attribute::RestoreState,
+                                        XFA_Attribute::Scope,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"subform";
+
+}  // namespace
+
+CXFA_Subform::CXFA_Subform(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::ContainerNode,
+                XFA_Element::Subform,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Subform::~CXFA_Subform() {}
diff --git a/xfa/fxfa/parser/cxfa_subform.h b/xfa/fxfa/parser/cxfa_subform.h
new file mode 100644
index 0000000..1c2f2af
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_subform.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_SUBFORM_H_
+#define XFA_FXFA_PARSER_CXFA_SUBFORM_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Subform : public CXFA_Node {
+ public:
+  CXFA_Subform(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Subform() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_SUBFORM_H_
diff --git a/xfa/fxfa/parser/cxfa_subformset.cpp b/xfa/fxfa/parser/cxfa_subformset.cpp
new file mode 100644
index 0000000..a72549f
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_subformset.cpp
@@ -0,0 +1,35 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_subformset.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::Break, 1, 0},  {XFA_Element::Overflow, 1, 0},
+    {XFA_Element::Desc, 1, 0},   {XFA_Element::Bookend, 1, 0},
+    {XFA_Element::Extras, 1, 0}, {XFA_Element::Occur, 1, 0},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,       XFA_Attribute::Name,     XFA_Attribute::Use,
+    XFA_Attribute::Relation, XFA_Attribute::Relevant, XFA_Attribute::Usehref,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"subformSet";
+
+}  // namespace
+
+CXFA_SubformSet::CXFA_SubformSet(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::ContainerNode,
+                XFA_Element::SubformSet,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_SubformSet::~CXFA_SubformSet() {}
diff --git a/xfa/fxfa/parser/cxfa_subformset.h b/xfa/fxfa/parser/cxfa_subformset.h
new file mode 100644
index 0000000..4f7f7dc
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_subformset.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_SUBFORMSET_H_
+#define XFA_FXFA_PARSER_CXFA_SUBFORMSET_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_SubformSet : public CXFA_Node {
+ public:
+  CXFA_SubformSet(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_SubformSet() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_SUBFORMSET_H_
diff --git a/xfa/fxfa/parser/cxfa_subjectdn.cpp b/xfa/fxfa/parser/cxfa_subjectdn.cpp
new file mode 100644
index 0000000..3541c7b
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_subjectdn.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_subjectdn.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,        XFA_Attribute::Name,    XFA_Attribute::Use,
+    XFA_Attribute::Delimiter, XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"subjectDN";
+
+}  // namespace
+
+CXFA_SubjectDN::CXFA_SubjectDN(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::NodeC,
+                XFA_Element::SubjectDN,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_SubjectDN::~CXFA_SubjectDN() {}
diff --git a/xfa/fxfa/parser/cxfa_subjectdn.h b/xfa/fxfa/parser/cxfa_subjectdn.h
new file mode 100644
index 0000000..e778252
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_subjectdn.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_SUBJECTDN_H_
+#define XFA_FXFA_PARSER_CXFA_SUBJECTDN_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_SubjectDN : public CXFA_Node {
+ public:
+  CXFA_SubjectDN(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_SubjectDN() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_SUBJECTDN_H_
diff --git a/xfa/fxfa/parser/cxfa_subjectdns.cpp b/xfa/fxfa/parser/cxfa_subjectdns.cpp
new file mode 100644
index 0000000..fd551d3
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_subjectdns.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_subjectdns.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Use, XFA_Attribute::Type,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"subjectDNs";
+
+}  // namespace
+
+CXFA_SubjectDNs::CXFA_SubjectDNs(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::SubjectDNs,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_SubjectDNs::~CXFA_SubjectDNs() {}
diff --git a/xfa/fxfa/parser/cxfa_subjectdns.h b/xfa/fxfa/parser/cxfa_subjectdns.h
new file mode 100644
index 0000000..ba8cf07
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_subjectdns.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_SUBJECTDNS_H_
+#define XFA_FXFA_PARSER_CXFA_SUBJECTDNS_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_SubjectDNs : public CXFA_Node {
+ public:
+  CXFA_SubjectDNs(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_SubjectDNs() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_SUBJECTDNS_H_
diff --git a/xfa/fxfa/parser/cxfa_submit.cpp b/xfa/fxfa/parser/cxfa_submit.cpp
new file mode 100644
index 0000000..7d3dbe9
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_submit.cpp
@@ -0,0 +1,34 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_submit.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Encrypt, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,           XFA_Attribute::Use,
+    XFA_Attribute::Format,       XFA_Attribute::EmbedPDF,
+    XFA_Attribute::Usehref,      XFA_Attribute::Target,
+    XFA_Attribute::TextEncoding, XFA_Attribute::XdpContent,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"submit";
+
+}  // namespace
+
+CXFA_Submit::CXFA_Submit(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Submit,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Submit::~CXFA_Submit() {}
diff --git a/xfa/fxfa/parser/cxfa_submit.h b/xfa/fxfa/parser/cxfa_submit.h
new file mode 100644
index 0000000..863d210
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_submit.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_SUBMIT_H_
+#define XFA_FXFA_PARSER_CXFA_SUBMIT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Submit : public CXFA_Node {
+ public:
+  CXFA_Submit(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Submit() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_SUBMIT_H_
diff --git a/xfa/fxfa/parser/cxfa_submitformat.cpp b/xfa/fxfa/parser/cxfa_submitformat.cpp
new file mode 100644
index 0000000..1d2962f
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_submitformat.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_submitformat.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"submitFormat";
+
+}  // namespace
+
+CXFA_SubmitFormat::CXFA_SubmitFormat(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::SubmitFormat,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_SubmitFormat::~CXFA_SubmitFormat() {}
diff --git a/xfa/fxfa/parser/cxfa_submitformat.h b/xfa/fxfa/parser/cxfa_submitformat.h
new file mode 100644
index 0000000..72febdf
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_submitformat.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_SUBMITFORMAT_H_
+#define XFA_FXFA_PARSER_CXFA_SUBMITFORMAT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_SubmitFormat : public CXFA_Node {
+ public:
+  CXFA_SubmitFormat(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_SubmitFormat() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_SUBMITFORMAT_H_
diff --git a/xfa/fxfa/parser/cxfa_submiturl.cpp b/xfa/fxfa/parser/cxfa_submiturl.cpp
new file mode 100644
index 0000000..6ee7009
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_submiturl.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_submiturl.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"submitUrl";
+
+}  // namespace
+
+CXFA_SubmitUrl::CXFA_SubmitUrl(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::SubmitUrl,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_SubmitUrl::~CXFA_SubmitUrl() {}
diff --git a/xfa/fxfa/parser/cxfa_submiturl.h b/xfa/fxfa/parser/cxfa_submiturl.h
new file mode 100644
index 0000000..6d1b25f
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_submiturl.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_SUBMITURL_H_
+#define XFA_FXFA_PARSER_CXFA_SUBMITURL_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_SubmitUrl : public CXFA_Node {
+ public:
+  CXFA_SubmitUrl(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_SubmitUrl() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_SUBMITURL_H_
diff --git a/xfa/fxfa/parser/cxfa_subsetbelow.cpp b/xfa/fxfa/parser/cxfa_subsetbelow.cpp
new file mode 100644
index 0000000..5116cae
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_subsetbelow.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_subsetbelow.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"subsetBelow";
+
+}  // namespace
+
+CXFA_SubsetBelow::CXFA_SubsetBelow(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::SubsetBelow,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_SubsetBelow::~CXFA_SubsetBelow() {}
diff --git a/xfa/fxfa/parser/cxfa_subsetbelow.h b/xfa/fxfa/parser/cxfa_subsetbelow.h
new file mode 100644
index 0000000..e3ff516
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_subsetbelow.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_SUBSETBELOW_H_
+#define XFA_FXFA_PARSER_CXFA_SUBSETBELOW_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_SubsetBelow : public CXFA_Node {
+ public:
+  CXFA_SubsetBelow(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_SubsetBelow() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_SUBSETBELOW_H_
diff --git a/xfa/fxfa/parser/cxfa_suppressbanner.cpp b/xfa/fxfa/parser/cxfa_suppressbanner.cpp
new file mode 100644
index 0000000..5d42895
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_suppressbanner.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_suppressbanner.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"suppressBanner";
+
+}  // namespace
+
+CXFA_SuppressBanner::CXFA_SuppressBanner(CXFA_Document* doc,
+                                         XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::SuppressBanner,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_SuppressBanner::~CXFA_SuppressBanner() {}
diff --git a/xfa/fxfa/parser/cxfa_suppressbanner.h b/xfa/fxfa/parser/cxfa_suppressbanner.h
new file mode 100644
index 0000000..ef3406b
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_suppressbanner.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_SUPPRESSBANNER_H_
+#define XFA_FXFA_PARSER_CXFA_SUPPRESSBANNER_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_SuppressBanner : public CXFA_Node {
+ public:
+  CXFA_SuppressBanner(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_SuppressBanner() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_SUPPRESSBANNER_H_
diff --git a/xfa/fxfa/parser/cxfa_tagged.cpp b/xfa/fxfa/parser/cxfa_tagged.cpp
new file mode 100644
index 0000000..180f1a7
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_tagged.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_tagged.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"tagged";
+
+}  // namespace
+
+CXFA_Tagged::CXFA_Tagged(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Tagged,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Tagged::~CXFA_Tagged() {}
diff --git a/xfa/fxfa/parser/cxfa_tagged.h b/xfa/fxfa/parser/cxfa_tagged.h
new file mode 100644
index 0000000..14c55c2
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_tagged.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_TAGGED_H_
+#define XFA_FXFA_PARSER_CXFA_TAGGED_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Tagged : public CXFA_Node {
+ public:
+  CXFA_Tagged(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Tagged() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_TAGGED_H_
diff --git a/xfa/fxfa/parser/cxfa_template.cpp b/xfa/fxfa/parser/cxfa_template.cpp
new file mode 100644
index 0000000..286ecce
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_template.cpp
@@ -0,0 +1,35 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_template.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::Uri, 1, 0},       {XFA_Element::Xsl, 1, 0},
+    {XFA_Element::StartPage, 1, 0}, {XFA_Element::Relevant, 1, 0},
+    {XFA_Element::Base, 1, 0},      {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::BaseProfile, XFA_Attribute::Lock,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"template";
+
+}  // namespace
+
+CXFA_Template::CXFA_Template(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(
+          doc,
+          packet,
+          (XFA_XDPPACKET_Config | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+          XFA_ObjectType::ModelNode,
+          XFA_Element::Template,
+          kPropertyData,
+          kAttributeData,
+          kName) {}
+
+CXFA_Template::~CXFA_Template() {}
diff --git a/xfa/fxfa/parser/cxfa_template.h b/xfa/fxfa/parser/cxfa_template.h
new file mode 100644
index 0000000..4d41209
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_template.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_TEMPLATE_H_
+#define XFA_FXFA_PARSER_CXFA_TEMPLATE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Template : public CXFA_Node {
+ public:
+  CXFA_Template(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Template() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_TEMPLATE_H_
diff --git a/xfa/fxfa/parser/cxfa_templatecache.cpp b/xfa/fxfa/parser/cxfa_templatecache.cpp
new file mode 100644
index 0000000..f07f486
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_templatecache.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_templatecache.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::MaxEntries, XFA_Attribute::Lock,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"templateCache";
+
+}  // namespace
+
+CXFA_TemplateCache::CXFA_TemplateCache(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::TemplateCache,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_TemplateCache::~CXFA_TemplateCache() {}
diff --git a/xfa/fxfa/parser/cxfa_templatecache.h b/xfa/fxfa/parser/cxfa_templatecache.h
new file mode 100644
index 0000000..3477f2e
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_templatecache.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_TEMPLATECACHE_H_
+#define XFA_FXFA_PARSER_CXFA_TEMPLATECACHE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_TemplateCache : public CXFA_Node {
+ public:
+  CXFA_TemplateCache(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_TemplateCache() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_TEMPLATECACHE_H_
diff --git a/xfa/fxfa/parser/cxfa_text.cpp b/xfa/fxfa/parser/cxfa_text.cpp
new file mode 100644
index 0000000..be0d95b
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_text.cpp
@@ -0,0 +1,31 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_text.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,     XFA_Attribute::Name,     XFA_Attribute::Rid,
+    XFA_Attribute::Use,    XFA_Attribute::MaxChars, XFA_Attribute::Usehref,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"text";
+
+}  // namespace
+
+CXFA_Text::CXFA_Text(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_SourceSet | XFA_XDPPACKET_Template |
+                 XFA_XDPPACKET_Form),
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Text,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Text::~CXFA_Text() {}
diff --git a/xfa/fxfa/parser/cxfa_text.h b/xfa/fxfa/parser/cxfa_text.h
new file mode 100644
index 0000000..2bb5ef8
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_text.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_TEXT_H_
+#define XFA_FXFA_PARSER_CXFA_TEXT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Text : public CXFA_Node {
+ public:
+  CXFA_Text(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Text() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_TEXT_H_
diff --git a/xfa/fxfa/parser/cxfa_textedit.cpp b/xfa/fxfa/parser/cxfa_textedit.cpp
new file mode 100644
index 0000000..7dd7468
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_textedit.cpp
@@ -0,0 +1,39 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_textedit.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Margin, 1, 0},
+                                                 {XFA_Element::Border, 1, 0},
+                                                 {XFA_Element::Comb, 1, 0},
+                                                 {XFA_Element::Extras, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Id,
+                                        XFA_Attribute::VScrollPolicy,
+                                        XFA_Attribute::Use,
+                                        XFA_Attribute::AllowRichText,
+                                        XFA_Attribute::MultiLine,
+                                        XFA_Attribute::Usehref,
+                                        XFA_Attribute::HScrollPolicy,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"textEdit";
+
+}  // namespace
+
+CXFA_TextEdit::CXFA_TextEdit(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::TextEdit,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_TextEdit::~CXFA_TextEdit() {}
diff --git a/xfa/fxfa/parser/cxfa_textedit.h b/xfa/fxfa/parser/cxfa_textedit.h
new file mode 100644
index 0000000..6fbae5d
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_textedit.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_TEXTEDIT_H_
+#define XFA_FXFA_PARSER_CXFA_TEXTEDIT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_TextEdit : public CXFA_Node {
+ public:
+  CXFA_TextEdit(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_TextEdit() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_TEXTEDIT_H_
diff --git a/xfa/fxfa/parser/cxfa_threshold.cpp b/xfa/fxfa/parser/cxfa_threshold.cpp
new file mode 100644
index 0000000..fabebe5
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_threshold.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_threshold.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"threshold";
+
+}  // namespace
+
+CXFA_Threshold::CXFA_Threshold(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::NodeV,
+                XFA_Element::Threshold,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Threshold::~CXFA_Threshold() {}
diff --git a/xfa/fxfa/parser/cxfa_threshold.h b/xfa/fxfa/parser/cxfa_threshold.h
new file mode 100644
index 0000000..6625b22
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_threshold.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_THRESHOLD_H_
+#define XFA_FXFA_PARSER_CXFA_THRESHOLD_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Threshold : public CXFA_Node {
+ public:
+  CXFA_Threshold(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Threshold() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_THRESHOLD_H_
diff --git a/xfa/fxfa/parser/cxfa_time.cpp b/xfa/fxfa/parser/cxfa_time.cpp
new file mode 100644
index 0000000..0917e22
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_time.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_time.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Name, XFA_Attribute::Use,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"time";
+
+}  // namespace
+
+CXFA_Time::CXFA_Time(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Time,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Time::~CXFA_Time() {}
diff --git a/xfa/fxfa/parser/cxfa_time.h b/xfa/fxfa/parser/cxfa_time.h
new file mode 100644
index 0000000..fe6f662
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_time.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_TIME_H_
+#define XFA_FXFA_PARSER_CXFA_TIME_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Time : public CXFA_Node {
+ public:
+  CXFA_Time(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Time() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_TIME_H_
diff --git a/xfa/fxfa/parser/cxfa_timepattern.cpp b/xfa/fxfa/parser/cxfa_timepattern.cpp
new file mode 100644
index 0000000..7eb5ac5
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_timepattern.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_timepattern.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Name,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"timePattern";
+
+}  // namespace
+
+CXFA_TimePattern::CXFA_TimePattern(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_LocaleSet,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::TimePattern,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_TimePattern::~CXFA_TimePattern() {}
diff --git a/xfa/fxfa/parser/cxfa_timepattern.h b/xfa/fxfa/parser/cxfa_timepattern.h
new file mode 100644
index 0000000..7bddbd2
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_timepattern.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_TIMEPATTERN_H_
+#define XFA_FXFA_PARSER_CXFA_TIMEPATTERN_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_TimePattern : public CXFA_Node {
+ public:
+  CXFA_TimePattern(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_TimePattern() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_TIMEPATTERN_H_
diff --git a/xfa/fxfa/parser/cxfa_timepatterns.cpp b/xfa/fxfa/parser/cxfa_timepatterns.cpp
new file mode 100644
index 0000000..7739e00
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_timepatterns.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_timepatterns.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::TimePattern, 4, 0},
+    {XFA_Element::Unknown, 0, 0}};
+
+constexpr wchar_t kName[] = L"timePatterns";
+
+}  // namespace
+
+CXFA_TimePatterns::CXFA_TimePatterns(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_LocaleSet,
+                XFA_ObjectType::Node,
+                XFA_Element::TimePatterns,
+                kPropertyData,
+                nullptr,
+                kName) {}
+
+CXFA_TimePatterns::~CXFA_TimePatterns() {}
diff --git a/xfa/fxfa/parser/cxfa_timepatterns.h b/xfa/fxfa/parser/cxfa_timepatterns.h
new file mode 100644
index 0000000..827d241
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_timepatterns.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_TIMEPATTERNS_H_
+#define XFA_FXFA_PARSER_CXFA_TIMEPATTERNS_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_TimePatterns : public CXFA_Node {
+ public:
+  CXFA_TimePatterns(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_TimePatterns() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_TIMEPATTERNS_H_
diff --git a/xfa/fxfa/parser/cxfa_timestamp.cpp b/xfa/fxfa/parser/cxfa_timestamp.cpp
new file mode 100644
index 0000000..52a9fa4
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_timestamp.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_timestamp.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,     XFA_Attribute::Use,     XFA_Attribute::Type,
+    XFA_Attribute::Server, XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"timeStamp";
+
+}  // namespace
+
+CXFA_TimeStamp::CXFA_TimeStamp(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::TimeStamp,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_TimeStamp::~CXFA_TimeStamp() {}
diff --git a/xfa/fxfa/parser/cxfa_timestamp.h b/xfa/fxfa/parser/cxfa_timestamp.h
new file mode 100644
index 0000000..b35ed05
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_timestamp.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_TIMESTAMP_H_
+#define XFA_FXFA_PARSER_CXFA_TIMESTAMP_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_TimeStamp : public CXFA_Node {
+ public:
+  CXFA_TimeStamp(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_TimeStamp() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_TIMESTAMP_H_
diff --git a/xfa/fxfa/parser/cxfa_to.cpp b/xfa/fxfa/parser/cxfa_to.cpp
new file mode 100644
index 0000000..f6a0b7e
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_to.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_to.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"to";
+
+}  // namespace
+
+CXFA_To::CXFA_To(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::To,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_To::~CXFA_To() {}
diff --git a/xfa/fxfa/parser/cxfa_to.h b/xfa/fxfa/parser/cxfa_to.h
new file mode 100644
index 0000000..d7ea7d1
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_to.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_TO_H_
+#define XFA_FXFA_PARSER_CXFA_TO_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_To : public CXFA_Node {
+ public:
+  CXFA_To(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_To() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_TO_H_
diff --git a/xfa/fxfa/parser/cxfa_tooltip.cpp b/xfa/fxfa/parser/cxfa_tooltip.cpp
new file mode 100644
index 0000000..ee58344
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_tooltip.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_tooltip.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Rid, XFA_Attribute::Use,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"toolTip";
+
+}  // namespace
+
+CXFA_ToolTip::CXFA_ToolTip(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::TextNode,
+                XFA_Element::ToolTip,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_ToolTip::~CXFA_ToolTip() {}
diff --git a/xfa/fxfa/parser/cxfa_tooltip.h b/xfa/fxfa/parser/cxfa_tooltip.h
new file mode 100644
index 0000000..a487a88
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_tooltip.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_TOOLTIP_H_
+#define XFA_FXFA_PARSER_CXFA_TOOLTIP_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_ToolTip : public CXFA_Node {
+ public:
+  CXFA_ToolTip(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_ToolTip() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_TOOLTIP_H_
diff --git a/xfa/fxfa/parser/cxfa_trace.cpp b/xfa/fxfa/parser/cxfa_trace.cpp
new file mode 100644
index 0000000..8342dc6
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_trace.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_trace.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"trace";
+
+}  // namespace
+
+CXFA_Trace::CXFA_Trace(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::Trace,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Trace::~CXFA_Trace() {}
diff --git a/xfa/fxfa/parser/cxfa_trace.h b/xfa/fxfa/parser/cxfa_trace.h
new file mode 100644
index 0000000..113b739
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_trace.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_TRACE_H_
+#define XFA_FXFA_PARSER_CXFA_TRACE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Trace : public CXFA_Node {
+ public:
+  CXFA_Trace(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Trace() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_TRACE_H_
diff --git a/xfa/fxfa/parser/cxfa_transform.cpp b/xfa/fxfa/parser/cxfa_transform.cpp
new file mode 100644
index 0000000..34bcf01
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_transform.cpp
@@ -0,0 +1,34 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_transform.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::Whitespace, 1, 0},  {XFA_Element::Rename, 1, 0},
+    {XFA_Element::IfEmpty, 1, 0},     {XFA_Element::Presence, 1, 0},
+    {XFA_Element::Picture, 1, 0},     {XFA_Element::NameAttr, 1, 0},
+    {XFA_Element::GroupParent, 1, 0}, {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Ref, XFA_Attribute::Desc,
+                                        XFA_Attribute::Lock,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"transform";
+
+}  // namespace
+
+CXFA_Transform::CXFA_Transform(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::Transform,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Transform::~CXFA_Transform() {}
diff --git a/xfa/fxfa/parser/cxfa_transform.h b/xfa/fxfa/parser/cxfa_transform.h
new file mode 100644
index 0000000..410cbd3
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_transform.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_TRANSFORM_H_
+#define XFA_FXFA_PARSER_CXFA_TRANSFORM_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Transform : public CXFA_Node {
+ public:
+  CXFA_Transform(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Transform() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_TRANSFORM_H_
diff --git a/xfa/fxfa/parser/cxfa_traversal.cpp b/xfa/fxfa/parser/cxfa_traversal.cpp
new file mode 100644
index 0000000..4dcedff
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_traversal.cpp
@@ -0,0 +1,31 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_traversal.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Extras, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Id, XFA_Attribute::Use,
+                                        XFA_Attribute::Usehref,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"traversal";
+
+}  // namespace
+
+CXFA_Traversal::CXFA_Traversal(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Traversal,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Traversal::~CXFA_Traversal() {}
diff --git a/xfa/fxfa/parser/cxfa_traversal.h b/xfa/fxfa/parser/cxfa_traversal.h
new file mode 100644
index 0000000..15df49d
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_traversal.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_TRAVERSAL_H_
+#define XFA_FXFA_PARSER_CXFA_TRAVERSAL_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Traversal : public CXFA_Node {
+ public:
+  CXFA_Traversal(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Traversal() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_TRAVERSAL_H_
diff --git a/xfa/fxfa/parser/cxfa_traverse.cpp b/xfa/fxfa/parser/cxfa_traverse.cpp
new file mode 100644
index 0000000..96b6b5c
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_traverse.cpp
@@ -0,0 +1,32 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_traverse.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Script, 1, 0},
+                                                 {XFA_Element::Extras, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,        XFA_Attribute::Ref,     XFA_Attribute::Use,
+    XFA_Attribute::Operation, XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"traverse";
+
+}  // namespace
+
+CXFA_Traverse::CXFA_Traverse(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Traverse,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Traverse::~CXFA_Traverse() {}
diff --git a/xfa/fxfa/parser/cxfa_traverse.h b/xfa/fxfa/parser/cxfa_traverse.h
new file mode 100644
index 0000000..09ca4dc
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_traverse.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_TRAVERSE_H_
+#define XFA_FXFA_PARSER_CXFA_TRAVERSE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Traverse : public CXFA_Node {
+ public:
+  CXFA_Traverse(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Traverse() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_TRAVERSE_H_
diff --git a/xfa/fxfa/parser/cxfa_type.cpp b/xfa/fxfa/parser/cxfa_type.cpp
new file mode 100644
index 0000000..6258882
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_type.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_type.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"type";
+
+}  // namespace
+
+CXFA_Type::CXFA_Type(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Type,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Type::~CXFA_Type() {}
diff --git a/xfa/fxfa/parser/cxfa_type.h b/xfa/fxfa/parser/cxfa_type.h
new file mode 100644
index 0000000..b9dfacd
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_type.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_TYPE_H_
+#define XFA_FXFA_PARSER_CXFA_TYPE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Type : public CXFA_Node {
+ public:
+  CXFA_Type(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Type() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_TYPE_H_
diff --git a/xfa/fxfa/parser/cxfa_typeface.cpp b/xfa/fxfa/parser/cxfa_typeface.cpp
new file mode 100644
index 0000000..b4e002b
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_typeface.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_typeface.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Name,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"typeface";
+
+}  // namespace
+
+CXFA_Typeface::CXFA_Typeface(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_LocaleSet,
+                XFA_ObjectType::Node,
+                XFA_Element::Typeface,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Typeface::~CXFA_Typeface() {}
diff --git a/xfa/fxfa/parser/cxfa_typeface.h b/xfa/fxfa/parser/cxfa_typeface.h
new file mode 100644
index 0000000..235abe4
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_typeface.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_TYPEFACE_H_
+#define XFA_FXFA_PARSER_CXFA_TYPEFACE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Typeface : public CXFA_Node {
+ public:
+  CXFA_Typeface(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Typeface() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_TYPEFACE_H_
diff --git a/xfa/fxfa/parser/cxfa_typefaces.cpp b/xfa/fxfa/parser/cxfa_typefaces.cpp
new file mode 100644
index 0000000..6cd89f4
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_typefaces.cpp
@@ -0,0 +1,25 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_typefaces.h"
+
+namespace {
+
+constexpr wchar_t kName[] = L"typefaces";
+
+}  // namespace
+
+CXFA_Typefaces::CXFA_Typefaces(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_LocaleSet,
+                XFA_ObjectType::Node,
+                XFA_Element::Typefaces,
+                nullptr,
+                nullptr,
+                kName) {}
+
+CXFA_Typefaces::~CXFA_Typefaces() {}
diff --git a/xfa/fxfa/parser/cxfa_typefaces.h b/xfa/fxfa/parser/cxfa_typefaces.h
new file mode 100644
index 0000000..8f55049
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_typefaces.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_TYPEFACES_H_
+#define XFA_FXFA_PARSER_CXFA_TYPEFACES_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Typefaces : public CXFA_Node {
+ public:
+  CXFA_Typefaces(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Typefaces() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_TYPEFACES_H_
diff --git a/xfa/fxfa/parser/cxfa_ui.cpp b/xfa/fxfa/parser/cxfa_ui.cpp
new file mode 100644
index 0000000..275d7ed
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_ui.cpp
@@ -0,0 +1,45 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_ui.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::CheckButton, 1, XFA_PROPERTYFLAG_OneOf},
+    {XFA_Element::ChoiceList, 1, XFA_PROPERTYFLAG_OneOf},
+    {XFA_Element::DefaultUi, 1, XFA_PROPERTYFLAG_OneOf},
+    {XFA_Element::Barcode, 1, XFA_PROPERTYFLAG_OneOf},
+    {XFA_Element::Button, 1, XFA_PROPERTYFLAG_OneOf},
+    {XFA_Element::DateTimeEdit, 1, XFA_PROPERTYFLAG_OneOf},
+    {XFA_Element::Picture, 1, 0},
+    {XFA_Element::ImageEdit, 1, XFA_PROPERTYFLAG_OneOf},
+    {XFA_Element::PasswordEdit, 1, XFA_PROPERTYFLAG_OneOf},
+    {XFA_Element::NumericEdit, 1, XFA_PROPERTYFLAG_OneOf},
+    {XFA_Element::Signature, 1, XFA_PROPERTYFLAG_OneOf},
+    {XFA_Element::TextEdit, 1, XFA_PROPERTYFLAG_OneOf},
+    {XFA_Element::ExObject, 1, XFA_PROPERTYFLAG_OneOf},
+    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Id, XFA_Attribute::Use,
+                                        XFA_Attribute::Usehref,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"ui";
+
+}  // namespace
+
+CXFA_Ui::CXFA_Ui(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Ui,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Ui::~CXFA_Ui() {}
diff --git a/xfa/fxfa/parser/cxfa_ui.h b/xfa/fxfa/parser/cxfa_ui.h
new file mode 100644
index 0000000..cb43c7a
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_ui.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_UI_H_
+#define XFA_FXFA_PARSER_CXFA_UI_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Ui : public CXFA_Node {
+ public:
+  CXFA_Ui(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Ui() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_UI_H_
diff --git a/xfa/fxfa/parser/cxfa_update.cpp b/xfa/fxfa/parser/cxfa_update.cpp
new file mode 100644
index 0000000..d668809
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_update.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_update.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Name, XFA_Attribute::Use,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"update";
+
+}  // namespace
+
+CXFA_Update::CXFA_Update(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_SourceSet,
+                XFA_ObjectType::TextNode,
+                XFA_Element::Update,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Update::~CXFA_Update() {}
diff --git a/xfa/fxfa/parser/cxfa_update.h b/xfa/fxfa/parser/cxfa_update.h
new file mode 100644
index 0000000..a79626e
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_update.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_UPDATE_H_
+#define XFA_FXFA_PARSER_CXFA_UPDATE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Update : public CXFA_Node {
+ public:
+  CXFA_Update(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Update() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_UPDATE_H_
diff --git a/xfa/fxfa/parser/cxfa_uri.cpp b/xfa/fxfa/parser/cxfa_uri.cpp
new file mode 100644
index 0000000..9d825ea
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_uri.cpp
@@ -0,0 +1,30 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_uri.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,      XFA_Attribute::Name, XFA_Attribute::Use,
+    XFA_Attribute::Usehref, XFA_Attribute::Desc, XFA_Attribute::Lock,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"uri";
+
+}  // namespace
+
+CXFA_Uri::CXFA_Uri(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Config | XFA_XDPPACKET_ConnectionSet),
+                XFA_ObjectType::TextNode,
+                XFA_Element::Uri,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Uri::~CXFA_Uri() {}
diff --git a/xfa/fxfa/parser/cxfa_uri.h b/xfa/fxfa/parser/cxfa_uri.h
new file mode 100644
index 0000000..e82f824
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_uri.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_URI_H_
+#define XFA_FXFA_PARSER_CXFA_URI_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Uri : public CXFA_Node {
+ public:
+  CXFA_Uri(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Uri() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_URI_H_
diff --git a/xfa/fxfa/parser/cxfa_user.cpp b/xfa/fxfa/parser/cxfa_user.cpp
new file mode 100644
index 0000000..6954bec
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_user.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_user.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Name, XFA_Attribute::Use,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"user";
+
+}  // namespace
+
+CXFA_User::CXFA_User(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_SourceSet,
+                XFA_ObjectType::TextNode,
+                XFA_Element::User,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_User::~CXFA_User() {}
diff --git a/xfa/fxfa/parser/cxfa_user.h b/xfa/fxfa/parser/cxfa_user.h
new file mode 100644
index 0000000..a2a0364
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_user.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_USER_H_
+#define XFA_FXFA_PARSER_CXFA_USER_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_User : public CXFA_Node {
+ public:
+  CXFA_User(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_User() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_USER_H_
diff --git a/xfa/fxfa/parser/cxfa_validate.cpp b/xfa/fxfa/parser/cxfa_validate.cpp
new file mode 100644
index 0000000..aaee8f1
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_validate.cpp
@@ -0,0 +1,38 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_validate.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Message, 1, 0},
+                                                 {XFA_Element::Picture, 1, 0},
+                                                 {XFA_Element::Script, 1, 0},
+                                                 {XFA_Element::Extras, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,         XFA_Attribute::Use,
+    XFA_Attribute::ScriptTest, XFA_Attribute::NullTest,
+    XFA_Attribute::Usehref,    XFA_Attribute::Desc,
+    XFA_Attribute::FormatTest, XFA_Attribute::Lock,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"validate";
+
+}  // namespace
+
+CXFA_Validate::CXFA_Validate(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(
+          doc,
+          packet,
+          (XFA_XDPPACKET_Config | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+          XFA_ObjectType::ContentNode,
+          XFA_Element::Validate,
+          kPropertyData,
+          kAttributeData,
+          kName) {}
+
+CXFA_Validate::~CXFA_Validate() {}
diff --git a/xfa/fxfa/parser/cxfa_validate.h b/xfa/fxfa/parser/cxfa_validate.h
new file mode 100644
index 0000000..c21ed41
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_validate.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_VALIDATE_H_
+#define XFA_FXFA_PARSER_CXFA_VALIDATE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Validate : public CXFA_Node {
+ public:
+  CXFA_Validate(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Validate() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_VALIDATE_H_
diff --git a/xfa/fxfa/parser/cxfa_validateapprovalsignatures.cpp b/xfa/fxfa/parser/cxfa_validateapprovalsignatures.cpp
new file mode 100644
index 0000000..9bf9fdd
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_validateapprovalsignatures.cpp
@@ -0,0 +1,30 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_validateapprovalsignatures.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"validateApprovalSignatures";
+
+}  // namespace
+
+CXFA_ValidateApprovalSignatures::CXFA_ValidateApprovalSignatures(
+    CXFA_Document* doc,
+    XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::NodeV,
+                XFA_Element::ValidateApprovalSignatures,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_ValidateApprovalSignatures::~CXFA_ValidateApprovalSignatures() {}
diff --git a/xfa/fxfa/parser/cxfa_validateapprovalsignatures.h b/xfa/fxfa/parser/cxfa_validateapprovalsignatures.h
new file mode 100644
index 0000000..2922cb5
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_validateapprovalsignatures.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_VALIDATEAPPROVALSIGNATURES_H_
+#define XFA_FXFA_PARSER_CXFA_VALIDATEAPPROVALSIGNATURES_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_ValidateApprovalSignatures : public CXFA_Node {
+ public:
+  CXFA_ValidateApprovalSignatures(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_ValidateApprovalSignatures() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_VALIDATEAPPROVALSIGNATURES_H_
diff --git a/xfa/fxfa/parser/cxfa_validationmessaging.cpp b/xfa/fxfa/parser/cxfa_validationmessaging.cpp
new file mode 100644
index 0000000..85371e2
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_validationmessaging.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_validationmessaging.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"validationMessaging";
+
+}  // namespace
+
+CXFA_ValidationMessaging::CXFA_ValidationMessaging(CXFA_Document* doc,
+                                                   XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::NodeV,
+                XFA_Element::ValidationMessaging,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_ValidationMessaging::~CXFA_ValidationMessaging() {}
diff --git a/xfa/fxfa/parser/cxfa_validationmessaging.h b/xfa/fxfa/parser/cxfa_validationmessaging.h
new file mode 100644
index 0000000..3a493b4
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_validationmessaging.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_VALIDATIONMESSAGING_H_
+#define XFA_FXFA_PARSER_CXFA_VALIDATIONMESSAGING_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_ValidationMessaging : public CXFA_Node {
+ public:
+  CXFA_ValidationMessaging(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_ValidationMessaging() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_VALIDATIONMESSAGING_H_
diff --git a/xfa/fxfa/parser/cxfa_value.cpp b/xfa/fxfa/parser/cxfa_value.cpp
new file mode 100644
index 0000000..020507f
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_value.cpp
@@ -0,0 +1,44 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_value.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::Arc, 1, XFA_PROPERTYFLAG_OneOf},
+    {XFA_Element::Text, 1, XFA_PROPERTYFLAG_OneOf},
+    {XFA_Element::Time, 1, XFA_PROPERTYFLAG_OneOf},
+    {XFA_Element::DateTime, 1, XFA_PROPERTYFLAG_OneOf},
+    {XFA_Element::Image, 1, XFA_PROPERTYFLAG_OneOf},
+    {XFA_Element::Decimal, 1, XFA_PROPERTYFLAG_OneOf},
+    {XFA_Element::Boolean, 1, XFA_PROPERTYFLAG_OneOf},
+    {XFA_Element::Integer, 1, XFA_PROPERTYFLAG_OneOf},
+    {XFA_Element::ExData, 1, XFA_PROPERTYFLAG_OneOf},
+    {XFA_Element::Rectangle, 1, XFA_PROPERTYFLAG_OneOf},
+    {XFA_Element::Date, 1, XFA_PROPERTYFLAG_OneOf},
+    {XFA_Element::Float, 1, XFA_PROPERTYFLAG_OneOf},
+    {XFA_Element::Line, 1, XFA_PROPERTYFLAG_OneOf},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id,      XFA_Attribute::Use,      XFA_Attribute::Relevant,
+    XFA_Attribute::Usehref, XFA_Attribute::Override, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"value";
+
+}  // namespace
+
+CXFA_Value::CXFA_Value(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::Node,
+                XFA_Element::Value,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Value::~CXFA_Value() {}
diff --git a/xfa/fxfa/parser/cxfa_value.h b/xfa/fxfa/parser/cxfa_value.h
new file mode 100644
index 0000000..b73d50d
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_value.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_VALUE_H_
+#define XFA_FXFA_PARSER_CXFA_VALUE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Value : public CXFA_Node {
+ public:
+  CXFA_Value(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Value() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_VALUE_H_
diff --git a/xfa/fxfa/parser/cxfa_variables.cpp b/xfa/fxfa/parser/cxfa_variables.cpp
new file mode 100644
index 0000000..d52b517
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_variables.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_variables.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Id, XFA_Attribute::Use,
+                                        XFA_Attribute::Usehref,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"variables";
+
+}  // namespace
+
+CXFA_Variables::CXFA_Variables(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form),
+                XFA_ObjectType::ContainerNode,
+                XFA_Element::Variables,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Variables::~CXFA_Variables() {}
diff --git a/xfa/fxfa/parser/cxfa_variables.h b/xfa/fxfa/parser/cxfa_variables.h
new file mode 100644
index 0000000..1f7b6fc
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_variables.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_VARIABLES_H_
+#define XFA_FXFA_PARSER_CXFA_VARIABLES_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Variables : public CXFA_Node {
+ public:
+  CXFA_Variables(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Variables() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_VARIABLES_H_
diff --git a/xfa/fxfa/parser/cxfa_version.cpp b/xfa/fxfa/parser/cxfa_version.cpp
new file mode 100644
index 0000000..dc3b820
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_version.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_version.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"version";
+
+}  // namespace
+
+CXFA_Version::CXFA_Version(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::ContentNode,
+                XFA_Element::Version,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Version::~CXFA_Version() {}
diff --git a/xfa/fxfa/parser/cxfa_version.h b/xfa/fxfa/parser/cxfa_version.h
new file mode 100644
index 0000000..ad50610
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_version.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_VERSION_H_
+#define XFA_FXFA_PARSER_CXFA_VERSION_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Version : public CXFA_Node {
+ public:
+  CXFA_Version(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Version() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_VERSION_H_
diff --git a/xfa/fxfa/parser/cxfa_versioncontrol.cpp b/xfa/fxfa/parser/cxfa_versioncontrol.cpp
new file mode 100644
index 0000000..b14eb3c
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_versioncontrol.cpp
@@ -0,0 +1,30 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_versioncontrol.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::SourceBelow, XFA_Attribute::OutputBelow,
+    XFA_Attribute::SourceAbove, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"versionControl";
+
+}  // namespace
+
+CXFA_VersionControl::CXFA_VersionControl(CXFA_Document* doc,
+                                         XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::VersionControl,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_VersionControl::~CXFA_VersionControl() {}
diff --git a/xfa/fxfa/parser/cxfa_versioncontrol.h b/xfa/fxfa/parser/cxfa_versioncontrol.h
new file mode 100644
index 0000000..46c1418
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_versioncontrol.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_VERSIONCONTROL_H_
+#define XFA_FXFA_PARSER_CXFA_VERSIONCONTROL_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_VersionControl : public CXFA_Node {
+ public:
+  CXFA_VersionControl(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_VersionControl() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_VERSIONCONTROL_H_
diff --git a/xfa/fxfa/parser/cxfa_viewerpreferences.cpp b/xfa/fxfa/parser/cxfa_viewerpreferences.cpp
new file mode 100644
index 0000000..afee927
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_viewerpreferences.cpp
@@ -0,0 +1,40 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_viewerpreferences.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::PrintScaling, 1, 0},
+    {XFA_Element::Enforce, 1, 0},
+    {XFA_Element::NumberOfCopies, 1, 0},
+    {XFA_Element::PageRange, 1, 0},
+    {XFA_Element::AddViewerPreferences, 1, 0},
+    {XFA_Element::ADBE_JSConsole, 1, 0},
+    {XFA_Element::DuplexOption, 1, 0},
+    {XFA_Element::ADBE_JSDebugger, 1, 0},
+    {XFA_Element::PickTrayByPDFSize, 1, 0},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"viewerPreferences";
+
+}  // namespace
+
+CXFA_ViewerPreferences::CXFA_ViewerPreferences(CXFA_Document* doc,
+                                               XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::ViewerPreferences,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_ViewerPreferences::~CXFA_ViewerPreferences() {}
diff --git a/xfa/fxfa/parser/cxfa_viewerpreferences.h b/xfa/fxfa/parser/cxfa_viewerpreferences.h
new file mode 100644
index 0000000..009ee03
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_viewerpreferences.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_VIEWERPREFERENCES_H_
+#define XFA_FXFA_PARSER_CXFA_VIEWERPREFERENCES_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_ViewerPreferences : public CXFA_Node {
+ public:
+  CXFA_ViewerPreferences(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_ViewerPreferences() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_VIEWERPREFERENCES_H_
diff --git a/xfa/fxfa/parser/cxfa_webclient.cpp b/xfa/fxfa/parser/cxfa_webclient.cpp
new file mode 100644
index 0000000..319d143
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_webclient.cpp
@@ -0,0 +1,32 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_webclient.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::FontInfo, 1, 0},
+                                                 {XFA_Element::Xdc, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Name, XFA_Attribute::Desc, XFA_Attribute::Lock,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"webClient";
+
+}  // namespace
+
+CXFA_WebClient::CXFA_WebClient(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::WebClient,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_WebClient::~CXFA_WebClient() {}
diff --git a/xfa/fxfa/parser/cxfa_webclient.h b/xfa/fxfa/parser/cxfa_webclient.h
new file mode 100644
index 0000000..b902461
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_webclient.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_WEBCLIENT_H_
+#define XFA_FXFA_PARSER_CXFA_WEBCLIENT_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_WebClient : public CXFA_Node {
+ public:
+  CXFA_WebClient(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_WebClient() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_WEBCLIENT_H_
diff --git a/xfa/fxfa/parser/cxfa_whitespace.cpp b/xfa/fxfa/parser/cxfa_whitespace.cpp
new file mode 100644
index 0000000..de4e25b
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_whitespace.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_whitespace.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"whitespace";
+
+}  // namespace
+
+CXFA_Whitespace::CXFA_Whitespace(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::NodeV,
+                XFA_Element::Whitespace,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Whitespace::~CXFA_Whitespace() {}
diff --git a/xfa/fxfa/parser/cxfa_whitespace.h b/xfa/fxfa/parser/cxfa_whitespace.h
new file mode 100644
index 0000000..7ed50fe
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_whitespace.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_WHITESPACE_H_
+#define XFA_FXFA_PARSER_CXFA_WHITESPACE_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Whitespace : public CXFA_Node {
+ public:
+  CXFA_Whitespace(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Whitespace() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_WHITESPACE_H_
diff --git a/xfa/fxfa/parser/cxfa_widgetdata.cpp b/xfa/fxfa/parser/cxfa_widgetdata.cpp
index 19a8254..4544e2e 100644
--- a/xfa/fxfa/parser/cxfa_widgetdata.cpp
+++ b/xfa/fxfa/parser/cxfa_widgetdata.cpp
@@ -113,9 +113,10 @@
         eChildType == XFA_Element::Picture) {
       continue;
     }
-    const XFA_PROPERTY* pProperty = XFA_GetPropertyOfElement(
-        XFA_Element::Ui, eChildType, XFA_XDPPACKET_Form);
-    if (pProperty && (pProperty->uFlags & XFA_PROPERTYFLAG_OneOf)) {
+
+    auto node = CXFA_Node::Create(pChild->GetDocument(), XFA_Element::Ui,
+                                  XFA_XDPPACKET_Form);
+    if (node && node->HasPropertyFlags(eChildType, XFA_PROPERTYFLAG_OneOf)) {
       pUIChild = pChild;
       break;
     }
diff --git a/xfa/fxfa/parser/cxfa_window.cpp b/xfa/fxfa/parser/cxfa_window.cpp
new file mode 100644
index 0000000..1461210
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_window.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_window.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"window";
+
+}  // namespace
+
+CXFA_Window::CXFA_Window(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::NodeV,
+                XFA_Element::Window,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Window::~CXFA_Window() {}
diff --git a/xfa/fxfa/parser/cxfa_window.h b/xfa/fxfa/parser/cxfa_window.h
new file mode 100644
index 0000000..b0bb1c6
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_window.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_WINDOW_H_
+#define XFA_FXFA_PARSER_CXFA_WINDOW_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Window : public CXFA_Node {
+ public:
+  CXFA_Window(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Window() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_WINDOW_H_
diff --git a/xfa/fxfa/parser/cxfa_wsdladdress.cpp b/xfa/fxfa/parser/cxfa_wsdladdress.cpp
new file mode 100644
index 0000000..6e5a55e
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_wsdladdress.cpp
@@ -0,0 +1,29 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_wsdladdress.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Id, XFA_Attribute::Name, XFA_Attribute::Use,
+    XFA_Attribute::Usehref, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"wsdlAddress";
+
+}  // namespace
+
+CXFA_WsdlAddress::CXFA_WsdlAddress(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_ConnectionSet,
+                XFA_ObjectType::TextNode,
+                XFA_Element::WsdlAddress,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_WsdlAddress::~CXFA_WsdlAddress() {}
diff --git a/xfa/fxfa/parser/cxfa_wsdladdress.h b/xfa/fxfa/parser/cxfa_wsdladdress.h
new file mode 100644
index 0000000..ec99ae0
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_wsdladdress.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_WSDLADDRESS_H_
+#define XFA_FXFA_PARSER_CXFA_WSDLADDRESS_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_WsdlAddress : public CXFA_Node {
+ public:
+  CXFA_WsdlAddress(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_WsdlAddress() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_WSDLADDRESS_H_
diff --git a/xfa/fxfa/parser/cxfa_wsdlconnection.cpp b/xfa/fxfa/parser/cxfa_wsdlconnection.cpp
new file mode 100644
index 0000000..a828f60
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_wsdlconnection.cpp
@@ -0,0 +1,38 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_wsdlconnection.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::Operation, 1, 0},
+    {XFA_Element::WsdlAddress, 1, 0},
+    {XFA_Element::SoapAddress, 1, 0},
+    {XFA_Element::SoapAction, 1, 0},
+    {XFA_Element::EffectiveOutputPolicy, 1, 0},
+    {XFA_Element::EffectiveInputPolicy, 1, 0},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Name,
+                                        XFA_Attribute::DataDescription,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"wsdlConnection";
+
+}  // namespace
+
+CXFA_WsdlConnection::CXFA_WsdlConnection(CXFA_Document* doc,
+                                         XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_ConnectionSet,
+                XFA_ObjectType::Node,
+                XFA_Element::WsdlConnection,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_WsdlConnection::~CXFA_WsdlConnection() {}
diff --git a/xfa/fxfa/parser/cxfa_wsdlconnection.h b/xfa/fxfa/parser/cxfa_wsdlconnection.h
new file mode 100644
index 0000000..70ebd87
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_wsdlconnection.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_WSDLCONNECTION_H_
+#define XFA_FXFA_PARSER_CXFA_WSDLCONNECTION_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_WsdlConnection : public CXFA_Node {
+ public:
+  CXFA_WsdlConnection(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_WsdlConnection() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_WSDLCONNECTION_H_
diff --git a/xfa/fxfa/parser/cxfa_xdc.cpp b/xfa/fxfa/parser/cxfa_xdc.cpp
new file mode 100644
index 0000000..cd1a31d
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_xdc.cpp
@@ -0,0 +1,31 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_xdc.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Uri, 1, 0},
+                                                 {XFA_Element::Xsl, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"xdc";
+
+}  // namespace
+
+CXFA_Xdc::CXFA_Xdc(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                (XFA_XDPPACKET_Config | XFA_XDPPACKET_Xdc),
+                XFA_ObjectType::ModelNode,
+                XFA_Element::Xdc,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Xdc::~CXFA_Xdc() {}
diff --git a/xfa/fxfa/parser/cxfa_xdc.h b/xfa/fxfa/parser/cxfa_xdc.h
new file mode 100644
index 0000000..e64c91c
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_xdc.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_XDC_H_
+#define XFA_FXFA_PARSER_CXFA_XDC_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Xdc : public CXFA_Node {
+ public:
+  CXFA_Xdc(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Xdc() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_XDC_H_
diff --git a/xfa/fxfa/parser/cxfa_xdp.cpp b/xfa/fxfa/parser/cxfa_xdp.cpp
new file mode 100644
index 0000000..4e06c1c
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_xdp.cpp
@@ -0,0 +1,30 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_xdp.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Packets, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"xdp";
+
+}  // namespace
+
+CXFA_Xdp::CXFA_Xdp(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::Xdp,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Xdp::~CXFA_Xdp() {}
diff --git a/xfa/fxfa/parser/cxfa_xdp.h b/xfa/fxfa/parser/cxfa_xdp.h
new file mode 100644
index 0000000..dbd1ef3
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_xdp.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_XDP_H_
+#define XFA_FXFA_PARSER_CXFA_XDP_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Xdp : public CXFA_Node {
+ public:
+  CXFA_Xdp(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Xdp() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_XDP_H_
diff --git a/xfa/fxfa/parser/cxfa_xfa.cpp b/xfa/fxfa/parser/cxfa_xfa.cpp
new file mode 100644
index 0000000..2e125de
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_xfa.cpp
@@ -0,0 +1,28 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_xfa.h"
+
+namespace {
+
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::TimeStamp, XFA_Attribute::Uuid, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"xfa";
+
+}  // namespace
+
+CXFA_Xfa::CXFA_Xfa(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_XDP,
+                XFA_ObjectType::ModelNode,
+                XFA_Element::Xfa,
+                nullptr,
+                kAttributeData,
+                kName) {}
+
+CXFA_Xfa::~CXFA_Xfa() {}
diff --git a/xfa/fxfa/parser/cxfa_xfa.h b/xfa/fxfa/parser/cxfa_xfa.h
new file mode 100644
index 0000000..f821cbb
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_xfa.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_XFA_H_
+#define XFA_FXFA_PARSER_CXFA_XFA_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Xfa : public CXFA_Node {
+ public:
+  CXFA_Xfa(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Xfa() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_XFA_H_
diff --git a/xfa/fxfa/parser/cxfa_xmlconnection.cpp b/xfa/fxfa/parser/cxfa_xmlconnection.cpp
new file mode 100644
index 0000000..e41f837
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_xmlconnection.cpp
@@ -0,0 +1,31 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_xmlconnection.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Uri, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Name,
+                                        XFA_Attribute::DataDescription,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"xmlConnection";
+
+}  // namespace
+
+CXFA_XmlConnection::CXFA_XmlConnection(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_ConnectionSet,
+                XFA_ObjectType::Node,
+                XFA_Element::XmlConnection,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_XmlConnection::~CXFA_XmlConnection() {}
diff --git a/xfa/fxfa/parser/cxfa_xmlconnection.h b/xfa/fxfa/parser/cxfa_xmlconnection.h
new file mode 100644
index 0000000..d2ce3eb
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_xmlconnection.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_XMLCONNECTION_H_
+#define XFA_FXFA_PARSER_CXFA_XMLCONNECTION_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_XmlConnection : public CXFA_Node {
+ public:
+  CXFA_XmlConnection(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_XmlConnection() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_XMLCONNECTION_H_
diff --git a/xfa/fxfa/parser/cxfa_xsdconnection.cpp b/xfa/fxfa/parser/cxfa_xsdconnection.cpp
new file mode 100644
index 0000000..30c1e11
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_xsdconnection.cpp
@@ -0,0 +1,33 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_xsdconnection.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::Uri, 1, 0},
+    {XFA_Element::RootElement, 1, 0},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {XFA_Attribute::Name,
+                                        XFA_Attribute::DataDescription,
+                                        XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"xsdConnection";
+
+}  // namespace
+
+CXFA_XsdConnection::CXFA_XsdConnection(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_ConnectionSet,
+                XFA_ObjectType::Node,
+                XFA_Element::XsdConnection,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_XsdConnection::~CXFA_XsdConnection() {}
diff --git a/xfa/fxfa/parser/cxfa_xsdconnection.h b/xfa/fxfa/parser/cxfa_xsdconnection.h
new file mode 100644
index 0000000..2d0af3f
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_xsdconnection.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_XSDCONNECTION_H_
+#define XFA_FXFA_PARSER_CXFA_XSDCONNECTION_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_XsdConnection : public CXFA_Node {
+ public:
+  CXFA_XsdConnection(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_XsdConnection() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_XSDCONNECTION_H_
diff --git a/xfa/fxfa/parser/cxfa_xsl.cpp b/xfa/fxfa/parser/cxfa_xsl.cpp
new file mode 100644
index 0000000..b12b71a
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_xsl.cpp
@@ -0,0 +1,31 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_xsl.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Uri, 1, 0},
+                                                 {XFA_Element::Debug, 1, 0},
+                                                 {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Desc, XFA_Attribute::Lock, XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"xsl";
+
+}  // namespace
+
+CXFA_Xsl::CXFA_Xsl(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::Xsl,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Xsl::~CXFA_Xsl() {}
diff --git a/xfa/fxfa/parser/cxfa_xsl.h b/xfa/fxfa/parser/cxfa_xsl.h
new file mode 100644
index 0000000..9ad29bf
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_xsl.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_XSL_H_
+#define XFA_FXFA_PARSER_CXFA_XSL_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Xsl : public CXFA_Node {
+ public:
+  CXFA_Xsl(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Xsl() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_XSL_H_
diff --git a/xfa/fxfa/parser/cxfa_zpl.cpp b/xfa/fxfa/parser/cxfa_zpl.cpp
new file mode 100644
index 0000000..df6ffef
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_zpl.cpp
@@ -0,0 +1,35 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fxfa/parser/cxfa_zpl.h"
+
+namespace {
+
+const CXFA_Node::PropertyData kPropertyData[] = {
+    {XFA_Element::FontInfo, 1, 0},
+    {XFA_Element::Xdc, 1, 0},
+    {XFA_Element::BatchOutput, 1, 0},
+    {XFA_Element::FlipLabel, 1, 0},
+    {XFA_Element::Unknown, 0, 0}};
+const XFA_Attribute kAttributeData[] = {
+    XFA_Attribute::Name, XFA_Attribute::Desc, XFA_Attribute::Lock,
+    XFA_Attribute::Unknown};
+
+constexpr wchar_t kName[] = L"zpl";
+
+}  // namespace
+
+CXFA_Zpl::CXFA_Zpl(CXFA_Document* doc, XFA_XDPPACKET packet)
+    : CXFA_Node(doc,
+                packet,
+                XFA_XDPPACKET_Config,
+                XFA_ObjectType::Node,
+                XFA_Element::Zpl,
+                kPropertyData,
+                kAttributeData,
+                kName) {}
+
+CXFA_Zpl::~CXFA_Zpl() {}
diff --git a/xfa/fxfa/parser/cxfa_zpl.h b/xfa/fxfa/parser/cxfa_zpl.h
new file mode 100644
index 0000000..e987a7f
--- /dev/null
+++ b/xfa/fxfa/parser/cxfa_zpl.h
@@ -0,0 +1,18 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_PARSER_CXFA_ZPL_H_
+#define XFA_FXFA_PARSER_CXFA_ZPL_H_
+
+#include "xfa/fxfa/parser/cxfa_node.h"
+
+class CXFA_Zpl : public CXFA_Node {
+ public:
+  CXFA_Zpl(CXFA_Document* doc, XFA_XDPPACKET packet);
+  ~CXFA_Zpl() override;
+};
+
+#endif  // XFA_FXFA_PARSER_CXFA_ZPL_H_
diff --git a/xfa/fxfa/parser/xfa_basic_data.cpp b/xfa/fxfa/parser/xfa_basic_data.cpp
deleted file mode 100644
index 8e2986f..0000000
--- a/xfa/fxfa/parser/xfa_basic_data.cpp
+++ /dev/null
@@ -1,674 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "xfa/fxfa/parser/xfa_basic_data.h"
-
-#include "xfa/fxfa/fxfa_basic.h"
-#include "xfa/fxfa/parser/cxfa_object.h"
-
-const XFA_ELEMENTINFO g_XFAElementData[] = {
-    {0x23ee3, L"ps", XFA_Element::Ps, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0x25363, L"to", XFA_Element::To, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0x2587e, L"ui", XFA_Element::Ui,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x1c648b, L"recordSet", XFA_Element::RecordSet, XFA_XDPPACKET_SourceSet,
-     XFA_ObjectType::Node},
-    {0x171428f, L"subsetBelow", XFA_Element::SubsetBelow, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0x1a0776a, L"subformSet", XFA_Element::SubformSet,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form,
-     XFA_ObjectType::ContainerNode},
-    {0x2340d70, L"adobeExtensionLevel", XFA_Element::AdobeExtensionLevel,
-     XFA_XDPPACKET_Config, XFA_ObjectType::ContentNode},
-    {0x2c1c7f1, L"typeface", XFA_Element::Typeface, XFA_XDPPACKET_LocaleSet,
-     XFA_ObjectType::Node},
-    {0x5518c25, L"break", XFA_Element::Break,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x5fff523, L"fontInfo", XFA_Element::FontInfo, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0x653a227, L"numberPattern", XFA_Element::NumberPattern,
-     XFA_XDPPACKET_LocaleSet, XFA_ObjectType::ContentNode},
-    {0x65b4a05, L"dynamicRender", XFA_Element::DynamicRender,
-     XFA_XDPPACKET_Config, XFA_ObjectType::ContentNode},
-    {0x7e4362e, L"printScaling", XFA_Element::PrintScaling,
-     XFA_XDPPACKET_Config, XFA_ObjectType::ContentNode},
-    {0x7fe6d3a, L"checkButton", XFA_Element::CheckButton,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x80cf58f, L"datePatterns", XFA_Element::DatePatterns,
-     XFA_XDPPACKET_LocaleSet, XFA_ObjectType::Node},
-    {0x811929d, L"sourceSet", XFA_Element::SourceSet, XFA_XDPPACKET_SourceSet,
-     XFA_ObjectType::ModelNode},
-    {0x9f9d612, L"amd", XFA_Element::Amd, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0x9f9efb6, L"arc", XFA_Element::Arc,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0xa48835e, L"day", XFA_Element::Day, XFA_XDPPACKET_LocaleSet,
-     XFA_ObjectType::ContentNode},
-    {0xa6328b8, L"era", XFA_Element::Era, XFA_XDPPACKET_LocaleSet,
-     XFA_ObjectType::ContentNode},
-    {0xae6a0a0, L"jog", XFA_Element::Jog, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0xb1b3d22, L"log", XFA_Element::Log, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0xb35439e, L"map", XFA_Element::Map,
-     XFA_XDPPACKET_Config | XFA_XDPPACKET_SourceSet, XFA_ObjectType::Node},
-    {0xb355301, L"mdp", XFA_Element::Mdp,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0xb420438, L"breakBefore", XFA_Element::BreakBefore,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0xb6a091c, L"oid", XFA_Element::Oid,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::TextNode},
-    {0xb84389f, L"pcl", XFA_Element::Pcl, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0xb843dba, L"pdf", XFA_Element::Pdf, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0xbb8df5d, L"ref", XFA_Element::Ref,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::TextNode},
-    {0xc080cd0, L"uri", XFA_Element::Uri,
-     XFA_XDPPACKET_Config | XFA_XDPPACKET_ConnectionSet,
-     XFA_ObjectType::TextNode},
-    {0xc56afbf, L"xdc", XFA_Element::Xdc,
-     XFA_XDPPACKET_Config | XFA_XDPPACKET_Xdc, XFA_ObjectType::ModelNode},
-    {0xc56afcc, L"xdp", XFA_Element::Xdp, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0xc56b9ff, L"xfa", XFA_Element::Xfa, XFA_XDPPACKET_XDP,
-     XFA_ObjectType::ModelNode},
-    {0xc56fcb7, L"xsl", XFA_Element::Xsl, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0xc8b89d6, L"zpl", XFA_Element::Zpl, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0xc9bae94, L"cache", XFA_Element::Cache, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0xcb016be, L"margin", XFA_Element::Margin,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0xe1378fe, L"keyUsage", XFA_Element::KeyUsage,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0xfe3596a, L"exclude", XFA_Element::Exclude, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0x10395ac7, L"choiceList", XFA_Element::ChoiceList,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x1059ec18, L"level", XFA_Element::Level, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0x10874804, L"labelPrinter", XFA_Element::LabelPrinter,
-     XFA_XDPPACKET_Config, XFA_ObjectType::Node},
-    {0x10c40e03, L"calendarSymbols", XFA_Element::CalendarSymbols,
-     XFA_XDPPACKET_LocaleSet, XFA_ObjectType::Node},
-    {0x10f1ea24, L"para", XFA_Element::Para,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x10f1ea37, L"part", XFA_Element::Part, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0x1140975b, L"pdfa", XFA_Element::Pdfa, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0x1154efe6, L"filter", XFA_Element::Filter,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x13f41de1, L"present", XFA_Element::Present, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0x1827e6ea, L"pagination", XFA_Element::Pagination, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0x18463707, L"encoding", XFA_Element::Encoding,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::NodeC},
-    {0x185e41e2, L"event", XFA_Element::Event,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x1adb142d, L"whitespace", XFA_Element::Whitespace, XFA_XDPPACKET_Config,
-     XFA_ObjectType::NodeV},
-    {0x1f3f64c3, L"defaultUi", XFA_Element::DefaultUi,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x204e87cb, L"dataModel", XFA_Element::DataModel, XFA_XDPPACKET_Datasets,
-     XFA_ObjectType::ModelNode},
-    {0x2057b350, L"barcode", XFA_Element::Barcode,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x20596bad, L"timePattern", XFA_Element::TimePattern,
-     XFA_XDPPACKET_LocaleSet, XFA_ObjectType::ContentNode},
-    {0x210b74d3, L"batchOutput", XFA_Element::BatchOutput, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0x212ff0e2, L"enforce", XFA_Element::Enforce, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0x21d351b4, L"currencySymbols", XFA_Element::CurrencySymbols,
-     XFA_XDPPACKET_LocaleSet, XFA_ObjectType::Node},
-    {0x21db83c5, L"addSilentPrint", XFA_Element::AddSilentPrint,
-     XFA_XDPPACKET_Config, XFA_ObjectType::ContentNode},
-    {0x22266258, L"rename", XFA_Element::Rename, XFA_XDPPACKET_Config,
-     XFA_ObjectType::NodeV},
-    {0x226ca8f1, L"operation", XFA_Element::Operation,
-     XFA_XDPPACKET_ConnectionSet, XFA_ObjectType::TextNode},
-    {0x23e27b84, L"typefaces", XFA_Element::Typefaces, XFA_XDPPACKET_LocaleSet,
-     XFA_ObjectType::Node},
-    {0x23f4aa75, L"subjectDNs", XFA_Element::SubjectDNs,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x240d5e8e, L"issuers", XFA_Element::Issuers,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x2457a033, L"signaturePseudoModel", XFA_Element::SignaturePseudoModel,
-     XFA_XDPPACKET_XDP, XFA_ObjectType::Object},
-    {0x24a52f8a, L"wsdlConnection", XFA_Element::WsdlConnection,
-     XFA_XDPPACKET_ConnectionSet, XFA_ObjectType::Node},
-    {0x254ebd07, L"debug", XFA_Element::Debug, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0x2655c66a, L"delta", XFA_Element::Delta, XFA_XDPPACKET_Form,
-     XFA_ObjectType::Object},
-    {0x26c0daec, L"eraNames", XFA_Element::EraNames, XFA_XDPPACKET_LocaleSet,
-     XFA_ObjectType::Node},
-    {0x273ab03b, L"modifyAnnots", XFA_Element::ModifyAnnots,
-     XFA_XDPPACKET_Config, XFA_ObjectType::ContentNode},
-    {0x27875bb4, L"startNode", XFA_Element::StartNode, XFA_XDPPACKET_Config,
-     XFA_ObjectType::NodeV},
-    {0x285d0dbc, L"button", XFA_Element::Button,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x28dee6e9, L"format", XFA_Element::Format,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x2a23349e, L"border", XFA_Element::Border,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x2ae67f19, L"area", XFA_Element::Area,
-     XFA_XDPPACKET_Config | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form,
-     XFA_ObjectType::ContainerNode},
-    {0x2c3c4c67, L"hyphenation", XFA_Element::Hyphenation,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x2d08af85, L"text", XFA_Element::Text,
-     XFA_XDPPACKET_SourceSet | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form,
-     XFA_ObjectType::ContentNode},
-    {0x2d71b00f, L"time", XFA_Element::Time,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::ContentNode},
-    {0x2f16a382, L"type", XFA_Element::Type, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0x2fe057e9, L"overprint", XFA_Element::Overprint, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0x302aee16, L"certificates", XFA_Element::Certificates,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x30b227df, L"encryptionMethods", XFA_Element::EncryptionMethods,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x32b900d1, L"setProperty", XFA_Element::SetProperty,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x337d9e45, L"printerName", XFA_Element::PrinterName, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0x33edda4b, L"startPage", XFA_Element::StartPage, XFA_XDPPACKET_Config,
-     XFA_ObjectType::NodeV},
-    {0x381943e4, L"pageOffset", XFA_Element::PageOffset, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0x382106cd, L"dateTime", XFA_Element::DateTime,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::ContentNode},
-    {0x386e7421, L"comb", XFA_Element::Comb,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x390acd9e, L"pattern", XFA_Element::Pattern,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x3942163e, L"ifEmpty", XFA_Element::IfEmpty, XFA_XDPPACKET_Config,
-     XFA_ObjectType::NodeV},
-    {0x39944a7b, L"suppressBanner", XFA_Element::SuppressBanner,
-     XFA_XDPPACKET_Config, XFA_ObjectType::ContentNode},
-    {0x3b3c3dca, L"outputBin", XFA_Element::OutputBin, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0x3b8a4024, L"field", XFA_Element::Field,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form,
-     XFA_ObjectType::ContainerNode},
-    {0x3c15352f, L"agent", XFA_Element::Agent, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0x3d7e8668, L"outputXSL", XFA_Element::OutputXSL, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0x3e1c91c5, L"adjustData", XFA_Element::AdjustData, XFA_XDPPACKET_Config,
-     XFA_ObjectType::NodeV},
-    {0x3e7a9408, L"autoSave", XFA_Element::AutoSave, XFA_XDPPACKET_Config,
-     XFA_ObjectType::NodeV},
-    {0x3ecead94, L"contentArea", XFA_Element::ContentArea,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form,
-     XFA_ObjectType::ContainerNode},
-    {0x3ef334e3, L"eventPseudoModel", XFA_Element::EventPseudoModel,
-     XFA_XDPPACKET_XDP, XFA_ObjectType::Object},
-    {0x3fadaec0, L"wsdlAddress", XFA_Element::WsdlAddress,
-     XFA_XDPPACKET_ConnectionSet, XFA_ObjectType::TextNode},
-    {0x40623b5b, L"solid", XFA_Element::Solid,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x41f0bd76, L"dateTimeSymbols", XFA_Element::DateTimeSymbols,
-     XFA_XDPPACKET_LocaleSet, XFA_ObjectType::ContentNode},
-    {0x444e7523, L"encryptionLevel", XFA_Element::EncryptionLevel,
-     XFA_XDPPACKET_Config, XFA_ObjectType::ContentNode},
-    {0x4523af55, L"edge", XFA_Element::Edge,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x45d5e3c1, L"stipple", XFA_Element::Stipple,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x475e4e87, L"attributes", XFA_Element::Attributes, XFA_XDPPACKET_Config,
-     XFA_ObjectType::NodeV},
-    {0x487a8c87, L"versionControl", XFA_Element::VersionControl,
-     XFA_XDPPACKET_Config, XFA_ObjectType::Node},
-    {0x48e5248c, L"meridiem", XFA_Element::Meridiem, XFA_XDPPACKET_LocaleSet,
-     XFA_ObjectType::ContentNode},
-    {0x48f36719, L"exclGroup", XFA_Element::ExclGroup,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form,
-     XFA_ObjectType::ContainerNode},
-    {0x4977356b, L"toolTip", XFA_Element::ToolTip,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::TextNode},
-    {0x499afecc, L"compress", XFA_Element::Compress, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0x4a0c4948, L"reason", XFA_Element::Reason,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::TextNode},
-    {0x4bdcce13, L"execute", XFA_Element::Execute,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x4c56b216, L"contentCopy", XFA_Element::ContentCopy, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0x4cc176d3, L"dateTimeEdit", XFA_Element::DateTimeEdit,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x4e1e39b6, L"config", XFA_Element::Config, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ModelNode},
-    {0x4e2d6083, L"image", XFA_Element::Image,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::ContentNode},
-    {0x4e814150, L"#xHTML", XFA_Element::SharpxHTML,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Config | XFA_XDPPACKET_LocaleSet |
-         XFA_XDPPACKET_ConnectionSet | XFA_XDPPACKET_SourceSet |
-         XFA_XDPPACKET_Form,
-     XFA_ObjectType::NodeV},
-    {0x4f2388c1, L"numberOfCopies", XFA_Element::NumberOfCopies,
-     XFA_XDPPACKET_Config, XFA_ObjectType::ContentNode},
-    {0x4f512e30, L"behaviorOverride", XFA_Element::BehaviorOverride,
-     XFA_XDPPACKET_Config, XFA_ObjectType::ContentNode},
-    {0x4fdc3454, L"timeStamp", XFA_Element::TimeStamp,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x51d90546, L"month", XFA_Element::Month, XFA_XDPPACKET_LocaleSet,
-     XFA_ObjectType::ContentNode},
-    {0x523437e4, L"viewerPreferences", XFA_Element::ViewerPreferences,
-     XFA_XDPPACKET_Config, XFA_ObjectType::Node},
-    {0x53abc1c6, L"scriptModel", XFA_Element::ScriptModel, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0x54034c2f, L"decimal", XFA_Element::Decimal,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::ContentNode},
-    {0x54202c9e, L"subform", XFA_Element::Subform,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form,
-     XFA_ObjectType::ContainerNode},
-    {0x542c7300, L"select", XFA_Element::Select, XFA_XDPPACKET_SourceSet,
-     XFA_ObjectType::TextNode},
-    {0x5436d198, L"window", XFA_Element::Window, XFA_XDPPACKET_Config,
-     XFA_ObjectType::NodeV},
-    {0x5473b6dc, L"localeSet", XFA_Element::LocaleSet,
-     XFA_XDPPACKET_Config | XFA_XDPPACKET_LocaleSet, XFA_ObjectType::ModelNode},
-    {0x56ae179e, L"handler", XFA_Element::Handler,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::TextNode},
-    {0x5700bd5f, L"hostPseudoModel", XFA_Element::HostPseudoModel,
-     XFA_XDPPACKET_XDP, XFA_ObjectType::Object},
-    {0x570ce835, L"presence", XFA_Element::Presence, XFA_XDPPACKET_Config,
-     XFA_ObjectType::NodeV},
-    {0x5779d65f, L"record", XFA_Element::Record, XFA_XDPPACKET_Config,
-     XFA_ObjectType::NodeV},
-    {0x59c8f27d, L"embed", XFA_Element::Embed, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0x5a50e9e6, L"version", XFA_Element::Version, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0x5b8383df, L"command", XFA_Element::Command, XFA_XDPPACKET_SourceSet,
-     XFA_ObjectType::Node},
-    {0x5c43c6c3, L"copies", XFA_Element::Copies, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0x5e0c2c49, L"staple", XFA_Element::Staple, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0x5e5083dd, L"submitFormat", XFA_Element::SubmitFormat,
-     XFA_XDPPACKET_Config, XFA_ObjectType::ContentNode},
-    {0x5e8c5d20, L"boolean", XFA_Element::Boolean,
-     XFA_XDPPACKET_SourceSet | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form,
-     XFA_ObjectType::ContentNode},
-    {0x60490a85, L"message", XFA_Element::Message,
-     XFA_XDPPACKET_Config | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form,
-     XFA_ObjectType::Node},
-    {0x60d4c8b1, L"output", XFA_Element::Output, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0x61810081, L"psMap", XFA_Element::PsMap, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0x62bd904b, L"excludeNS", XFA_Element::ExcludeNS, XFA_XDPPACKET_Config,
-     XFA_ObjectType::NodeV},
-    {0x669d4f77, L"assist", XFA_Element::Assist,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x67334a1c, L"picture", XFA_Element::Picture,
-     XFA_XDPPACKET_Config | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form,
-     XFA_ObjectType::ContentNode},
-    {0x67fe7334, L"traversal", XFA_Element::Traversal,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x6894589c, L"silentPrint", XFA_Element::SilentPrint, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0x68a16bbd, L"webClient", XFA_Element::WebClient, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0x69f115df, L"layoutPseudoModel", XFA_Element::LayoutPseudoModel,
-     XFA_XDPPACKET_XDP, XFA_ObjectType::Object},
-    {0x6a4bc084, L"producer", XFA_Element::Producer, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0x6a9e04c9, L"corner", XFA_Element::Corner,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x6ccd7274, L"msgId", XFA_Element::MsgId, XFA_XDPPACKET_Config,
-     XFA_ObjectType::NodeV},
-    {0x6e67921f, L"color", XFA_Element::Color,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x6ec217a5, L"keep", XFA_Element::Keep,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x6eef1116, L"query", XFA_Element::Query, XFA_XDPPACKET_SourceSet,
-     XFA_ObjectType::Node},
-    {0x7033bfd5, L"insert", XFA_Element::Insert, XFA_XDPPACKET_SourceSet,
-     XFA_ObjectType::TextNode},
-    {0x704af389, L"imageEdit", XFA_Element::ImageEdit,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x7233018a, L"validate", XFA_Element::Validate,
-     XFA_XDPPACKET_Config | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form,
-     XFA_ObjectType::ContentNode},
-    {0x72ba47b4, L"digestMethods", XFA_Element::DigestMethods,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x72f2aa7a, L"numberPatterns", XFA_Element::NumberPatterns,
-     XFA_XDPPACKET_LocaleSet, XFA_ObjectType::Node},
-    {0x74caed29, L"pageSet", XFA_Element::PageSet,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form,
-     XFA_ObjectType::ContainerNode},
-    {0x7568e6ae, L"integer", XFA_Element::Integer,
-     XFA_XDPPACKET_SourceSet | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form,
-     XFA_ObjectType::ContentNode},
-    {0x76182db9, L"soapAddress", XFA_Element::SoapAddress,
-     XFA_XDPPACKET_ConnectionSet, XFA_ObjectType::TextNode},
-    {0x773146c5, L"equate", XFA_Element::Equate, XFA_XDPPACKET_Config,
-     XFA_ObjectType::NodeV},
-    {0x77d449dd, L"formFieldFilling", XFA_Element::FormFieldFilling,
-     XFA_XDPPACKET_Config, XFA_ObjectType::ContentNode},
-    {0x7889d68a, L"pageRange", XFA_Element::PageRange, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0x7baca2e3, L"update", XFA_Element::Update, XFA_XDPPACKET_SourceSet,
-     XFA_ObjectType::TextNode},
-    {0x7ce89001, L"connectString", XFA_Element::ConnectString,
-     XFA_XDPPACKET_SourceSet, XFA_ObjectType::TextNode},
-    {0x7d9fd7c5, L"mode", XFA_Element::Mode, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0x7e7e845e, L"layout", XFA_Element::Layout, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0x7e845c34, L"#xml", XFA_Element::Sharpxml,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::NodeV},
-    {0x7fb341df, L"xsdConnection", XFA_Element::XsdConnection,
-     XFA_XDPPACKET_ConnectionSet, XFA_ObjectType::Node},
-    {0x7ffb51cc, L"traverse", XFA_Element::Traverse,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x80203b5a, L"encodings", XFA_Element::Encodings,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x803550fc, L"template", XFA_Element::Template,
-     XFA_XDPPACKET_Config | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form,
-     XFA_ObjectType::ModelNode},
-    {0x803d5bbc, L"acrobat", XFA_Element::Acrobat, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0x821d6569, L"validationMessaging", XFA_Element::ValidationMessaging,
-     XFA_XDPPACKET_Config, XFA_ObjectType::NodeV},
-    {0x830e688f, L"signing", XFA_Element::Signing,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x83a550d2, L"dataWindow", XFA_Element::DataWindow, XFA_XDPPACKET_Datasets,
-     XFA_ObjectType::Object},
-    {0x83dab9f5, L"script", XFA_Element::Script,
-     XFA_XDPPACKET_Config | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form,
-     XFA_ObjectType::ContentNode},
-    {0x8411ebcd, L"addViewerPreferences", XFA_Element::AddViewerPreferences,
-     XFA_XDPPACKET_Config, XFA_ObjectType::ContentNode},
-    {0x8777642e, L"alwaysEmbed", XFA_Element::AlwaysEmbed, XFA_XDPPACKET_Config,
-     XFA_ObjectType::NodeV},
-    {0x877a6b39, L"passwordEdit", XFA_Element::PasswordEdit,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x87e84c99, L"numericEdit", XFA_Element::NumericEdit,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x8852cdec, L"encryptionMethod", XFA_Element::EncryptionMethod,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::NodeC},
-    {0x891f4606, L"change", XFA_Element::Change, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0x89939f36, L"pageArea", XFA_Element::PageArea,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form,
-     XFA_ObjectType::ContainerNode},
-    {0x8a9d6247, L"submitUrl", XFA_Element::SubmitUrl, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0x8ad8b90f, L"oids", XFA_Element::Oids,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x8b036f32, L"signature", XFA_Element::Signature,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x8b128efb, L"ADBE_JSConsole", XFA_Element::ADBE_JSConsole,
-     XFA_XDPPACKET_Config, XFA_ObjectType::ContentNode},
-    {0x8bcfe96e, L"caption", XFA_Element::Caption,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x8e1c2921, L"relevant", XFA_Element::Relevant, XFA_XDPPACKET_Config,
-     XFA_ObjectType::NodeV},
-    {0x8e3f0a4b, L"flipLabel", XFA_Element::FlipLabel, XFA_XDPPACKET_Config,
-     XFA_ObjectType::NodeV},
-    {0x900280b7, L"exData", XFA_Element::ExData,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::ContentNode},
-    {0x91e80352, L"dayNames", XFA_Element::DayNames, XFA_XDPPACKET_LocaleSet,
-     XFA_ObjectType::Node},
-    {0x93113b11, L"soapAction", XFA_Element::SoapAction,
-     XFA_XDPPACKET_ConnectionSet, XFA_ObjectType::TextNode},
-    {0x938b09f6, L"defaultTypeface", XFA_Element::DefaultTypeface,
-     XFA_XDPPACKET_Config, XFA_ObjectType::NodeV},
-    {0x95b37897, L"manifest", XFA_Element::Manifest,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x97b76b54, L"overflow", XFA_Element::Overflow,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x9a57861b, L"linear", XFA_Element::Linear,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0x9ad5a821, L"currencySymbol", XFA_Element::CurrencySymbol,
-     XFA_XDPPACKET_LocaleSet, XFA_ObjectType::ContentNode},
-    {0x9c6471b3, L"delete", XFA_Element::Delete, XFA_XDPPACKET_SourceSet,
-     XFA_ObjectType::TextNode},
-    {0x9deea61d, L"deltas", XFA_Element::Deltas, XFA_XDPPACKET_Form,
-     XFA_ObjectType::Object},
-    {0x9e67de21, L"digestMethod", XFA_Element::DigestMethod,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::NodeC},
-    {0x9f3e9510, L"instanceManager", XFA_Element::InstanceManager,
-     XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0xa0799892, L"equateRange", XFA_Element::EquateRange, XFA_XDPPACKET_Config,
-     XFA_ObjectType::NodeV},
-    {0xa084a381, L"medium", XFA_Element::Medium,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0xa1211b8b, L"textEdit", XFA_Element::TextEdit,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0xa17008f0, L"templateCache", XFA_Element::TemplateCache,
-     XFA_XDPPACKET_Config, XFA_ObjectType::Node},
-    {0xa4f7b88f, L"compressObjectStream", XFA_Element::CompressObjectStream,
-     XFA_XDPPACKET_Config, XFA_ObjectType::ContentNode},
-    {0xa65f5d17, L"dataValue", XFA_Element::DataValue, XFA_XDPPACKET_Datasets,
-     XFA_ObjectType::Node},
-    {0xa6caaa89, L"accessibleContent", XFA_Element::AccessibleContent,
-     XFA_XDPPACKET_Config, XFA_ObjectType::ContentNode},
-    {0xa8c7d5e2, L"nodeList", XFA_Element::NodeList, XFA_XDPPACKET_XDP,
-     XFA_ObjectType::NodeList},
-    {0xa94cc00b, L"includeXDPContent", XFA_Element::IncludeXDPContent,
-     XFA_XDPPACKET_Config, XFA_ObjectType::ContentNode},
-    {0xa9b081a1, L"xmlConnection", XFA_Element::XmlConnection,
-     XFA_XDPPACKET_ConnectionSet, XFA_ObjectType::Node},
-    {0xab2a3b74, L"validateApprovalSignatures",
-     XFA_Element::ValidateApprovalSignatures, XFA_XDPPACKET_Config,
-     XFA_ObjectType::NodeV},
-    {0xab8c5a2b, L"signData", XFA_Element::SignData,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0xabaa2ceb, L"packets", XFA_Element::Packets, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0xadba359c, L"datePattern", XFA_Element::DatePattern,
-     XFA_XDPPACKET_LocaleSet, XFA_ObjectType::ContentNode},
-    {0xae222b2b, L"duplexOption", XFA_Element::DuplexOption,
-     XFA_XDPPACKET_Config, XFA_ObjectType::ContentNode},
-    {0xb012effb, L"base", XFA_Element::Base, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0xb0e5485d, L"bind", XFA_Element::Bind,
-     XFA_XDPPACKET_SourceSet | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form,
-     XFA_ObjectType::Node},
-    {0xb45d61b2, L"compression", XFA_Element::Compression, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0xb563f0ff, L"user", XFA_Element::User, XFA_XDPPACKET_SourceSet,
-     XFA_ObjectType::TextNode},
-    {0xb5848ad5, L"rectangle", XFA_Element::Rectangle,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0xb6dacb72, L"effectiveOutputPolicy", XFA_Element::EffectiveOutputPolicy,
-     XFA_XDPPACKET_ConnectionSet, XFA_ObjectType::Node},
-    {0xb7d7654d, L"ADBE_JSDebugger", XFA_Element::ADBE_JSDebugger,
-     XFA_XDPPACKET_Config, XFA_ObjectType::ContentNode},
-    {0xbab37f73, L"acrobat7", XFA_Element::Acrobat7, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0xbc70081e, L"interactive", XFA_Element::Interactive, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0xbc8fa350, L"locale", XFA_Element::Locale,
-     XFA_XDPPACKET_Config | XFA_XDPPACKET_LocaleSet, XFA_ObjectType::Node},
-    {0xbcd44940, L"currentPage", XFA_Element::CurrentPage, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0xbde9abda, L"data", XFA_Element::Data, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0xbde9abde, L"date", XFA_Element::Date,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::ContentNode},
-    {0xbe52dfbf, L"desc", XFA_Element::Desc,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0xbf4b6405, L"encrypt", XFA_Element::Encrypt,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Config | XFA_XDPPACKET_Form,
-     XFA_ObjectType::ContentNode},
-    {0xbfa87cce, L"draw", XFA_Element::Draw,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form,
-     XFA_ObjectType::ContainerNode},
-    {0xc181ff4b, L"encryption", XFA_Element::Encryption, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0xc1970f40, L"meridiemNames", XFA_Element::MeridiemNames,
-     XFA_XDPPACKET_LocaleSet, XFA_ObjectType::Node},
-    {0xc5ad9f5e, L"messaging", XFA_Element::Messaging, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0xc69549f4, L"speak", XFA_Element::Speak,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::TextNode},
-    {0xc7743dc7, L"dataGroup", XFA_Element::DataGroup, XFA_XDPPACKET_Datasets,
-     XFA_ObjectType::Node},
-    {0xc7eb20e9, L"common", XFA_Element::Common, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0xc85d4528, L"#text", XFA_Element::Sharptext,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Config | XFA_XDPPACKET_LocaleSet |
-         XFA_XDPPACKET_ConnectionSet | XFA_XDPPACKET_SourceSet |
-         XFA_XDPPACKET_Form,
-     XFA_ObjectType::NodeV},
-    {0xc861556a, L"paginationOverride", XFA_Element::PaginationOverride,
-     XFA_XDPPACKET_Config, XFA_ObjectType::ContentNode},
-    {0xc903dabb, L"reasons", XFA_Element::Reasons,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0xc9a8127f, L"signatureProperties", XFA_Element::SignatureProperties,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0xca010c2d, L"threshold", XFA_Element::Threshold, XFA_XDPPACKET_Config,
-     XFA_ObjectType::NodeV},
-    {0xcb4c5e96, L"appearanceFilter", XFA_Element::AppearanceFilter,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::NodeC},
-    {0xcc92aba7, L"fill", XFA_Element::Fill,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0xcd308b77, L"font", XFA_Element::Font,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Config | XFA_XDPPACKET_Form,
-     XFA_ObjectType::Node},
-    {0xcd309ff4, L"form", XFA_Element::Form, XFA_XDPPACKET_Form,
-     XFA_ObjectType::ModelNode},
-    {0xcebcca2d, L"mediumInfo", XFA_Element::MediumInfo, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0xcfe0d643, L"certificate", XFA_Element::Certificate,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::TextNode},
-    {0xd012c033, L"password", XFA_Element::Password, XFA_XDPPACKET_SourceSet,
-     XFA_ObjectType::TextNode},
-    {0xd01604bd, L"runScripts", XFA_Element::RunScripts, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0xd1227e6f, L"trace", XFA_Element::Trace, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0xd1532876, L"float", XFA_Element::Float,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::ContentNode},
-    {0xd17a6c30, L"renderPolicy", XFA_Element::RenderPolicy,
-     XFA_XDPPACKET_Config, XFA_ObjectType::ContentNode},
-    {0xd4bf6823, L"logPseudoModel", XFA_Element::LogPseudoModel,
-     XFA_XDPPACKET_XDP, XFA_ObjectType::Object},
-    {0xd58aa962, L"destination", XFA_Element::Destination, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0xd6e27f1d, L"value", XFA_Element::Value,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0xd7a14462, L"bookend", XFA_Element::Bookend,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0xd8c31254, L"exObject", XFA_Element::ExObject,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0xda6a8590, L"openAction", XFA_Element::OpenAction, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0xdab4fb7d, L"neverEmbed", XFA_Element::NeverEmbed, XFA_XDPPACKET_Config,
-     XFA_ObjectType::NodeV},
-    {0xdb98475f, L"bindItems", XFA_Element::BindItems,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0xdbfbe02e, L"calculate", XFA_Element::Calculate,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0xdd7676ed, L"print", XFA_Element::Print, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0xdde273d7, L"extras", XFA_Element::Extras,
-     XFA_XDPPACKET_SourceSet | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form,
-     XFA_ObjectType::Node},
-    {0xde146b34, L"proto", XFA_Element::Proto,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0xdf059321, L"dSigData", XFA_Element::DSigData,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0xdfccf030, L"creator", XFA_Element::Creator, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0xdff78c6a, L"connect", XFA_Element::Connect,
-     XFA_XDPPACKET_SourceSet | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form,
-     XFA_ObjectType::Node},
-    {0xe11a2cbc, L"permissions", XFA_Element::Permissions, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0xe14c801c, L"connectionSet", XFA_Element::ConnectionSet,
-     XFA_XDPPACKET_ConnectionSet, XFA_ObjectType::ModelNode},
-    {0xe1c83a14, L"submit", XFA_Element::Submit,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0xe29821cd, L"range", XFA_Element::Range, XFA_XDPPACKET_Config,
-     XFA_ObjectType::NodeV},
-    {0xe38d83c7, L"linearized", XFA_Element::Linearized, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0xe3aa2578, L"packet", XFA_Element::Packet, XFA_XDPPACKET_XDP,
-     XFA_ObjectType::NodeC},
-    {0xe3aa860e, L"rootElement", XFA_Element::RootElement,
-     XFA_XDPPACKET_ConnectionSet, XFA_ObjectType::TextNode},
-    {0xe3e553fa, L"plaintextMetadata", XFA_Element::PlaintextMetadata,
-     XFA_XDPPACKET_Config, XFA_ObjectType::ContentNode},
-    {0xe3e6e4f2, L"numberSymbols", XFA_Element::NumberSymbols,
-     XFA_XDPPACKET_LocaleSet, XFA_ObjectType::Node},
-    {0xe3f067f6, L"printHighQuality", XFA_Element::PrintHighQuality,
-     XFA_XDPPACKET_Config, XFA_ObjectType::ContentNode},
-    {0xe3fd078c, L"driver", XFA_Element::Driver, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0xe48b34f2, L"incrementalLoad", XFA_Element::IncrementalLoad,
-     XFA_XDPPACKET_Config, XFA_ObjectType::NodeV},
-    {0xe550e7c2, L"subjectDN", XFA_Element::SubjectDN,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::NodeC},
-    {0xe6669a78, L"compressLogicalStructure",
-     XFA_Element::CompressLogicalStructure, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0xe7a7ea02, L"incrementalMerge", XFA_Element::IncrementalMerge,
-     XFA_XDPPACKET_Config, XFA_ObjectType::ContentNode},
-    {0xe948530d, L"radial", XFA_Element::Radial,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0xea8d6999, L"variables", XFA_Element::Variables,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form,
-     XFA_ObjectType::ContainerNode},
-    {0xeaa142c0, L"timePatterns", XFA_Element::TimePatterns,
-     XFA_XDPPACKET_LocaleSet, XFA_ObjectType::Node},
-    {0xeb943a71, L"effectiveInputPolicy", XFA_Element::EffectiveInputPolicy,
-     XFA_XDPPACKET_ConnectionSet, XFA_ObjectType::Node},
-    {0xef04a2bc, L"nameAttr", XFA_Element::NameAttr, XFA_XDPPACKET_Config,
-     XFA_ObjectType::NodeV},
-    {0xf07222ab, L"conformance", XFA_Element::Conformance, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0xf0aaaadc, L"transform", XFA_Element::Transform, XFA_XDPPACKET_Config,
-     XFA_ObjectType::Node},
-    {0xf1433e88, L"lockDocument", XFA_Element::LockDocument,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::ContentNode},
-    {0xf54eb997, L"breakAfter", XFA_Element::BreakAfter,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0xf616da28, L"line", XFA_Element::Line,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0xf616f3dc, L"list", XFA_Element::List, XFA_XDPPACKET_XDP,
-     XFA_ObjectType::List},
-    {0xf7055fb1, L"source", XFA_Element::Source, XFA_XDPPACKET_SourceSet,
-     XFA_ObjectType::Node},
-    {0xf7eebe1c, L"occur", XFA_Element::Occur,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-    {0xf8d10d97, L"pickTrayByPDFSize", XFA_Element::PickTrayByPDFSize,
-     XFA_XDPPACKET_Config, XFA_ObjectType::ContentNode},
-    {0xf8f19e3a, L"monthNames", XFA_Element::MonthNames,
-     XFA_XDPPACKET_LocaleSet, XFA_ObjectType::Node},
-    {0xf984149b, L"severity", XFA_Element::Severity, XFA_XDPPACKET_Config,
-     XFA_ObjectType::NodeV},
-    {0xf9bcb037, L"groupParent", XFA_Element::GroupParent, XFA_XDPPACKET_Config,
-     XFA_ObjectType::NodeV},
-    {0xfbc42fff, L"documentAssembly", XFA_Element::DocumentAssembly,
-     XFA_XDPPACKET_Config, XFA_ObjectType::ContentNode},
-    {0xfc78159f, L"numberSymbol", XFA_Element::NumberSymbol,
-     XFA_XDPPACKET_LocaleSet, XFA_ObjectType::ContentNode},
-    {0xfcbd606c, L"tagged", XFA_Element::Tagged, XFA_XDPPACKET_Config,
-     XFA_ObjectType::ContentNode},
-    {0xff063802, L"items", XFA_Element::Items,
-     XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_ObjectType::Node},
-};
-const int32_t g_iXFAElementCount = FX_ArraySize(g_XFAElementData);
-static_assert(g_iXFAElementCount ==
-                  (static_cast<int32_t>(XFA_Element::Items) + 1),
-              "g_XFAElementData size does not match XFA_Elements");
-
diff --git a/xfa/fxfa/parser/xfa_basic_data.h b/xfa/fxfa/parser/xfa_basic_data.h
index 4de1569..3c8b710 100644
--- a/xfa/fxfa/parser/xfa_basic_data.h
+++ b/xfa/fxfa/parser/xfa_basic_data.h
@@ -7,6 +7,8 @@
 #ifndef XFA_FXFA_PARSER_XFA_BASIC_DATA_H_
 #define XFA_FXFA_PARSER_XFA_BASIC_DATA_H_
 
+#include <map>
+
 #include "xfa/fxfa/fxfa_basic.h"
 
 extern const XFA_PACKETINFO g_XFAPacketData[];
@@ -21,15 +23,6 @@
 extern const XFA_NOTSUREATTRIBUTE g_XFANotsureAttributes[];
 extern const int32_t g_iXFANotsureCount;
 
-extern const XFA_ELEMENTINFO g_XFAElementData[];
-extern const int32_t g_iXFAElementCount;
-
-extern const XFA_ELEMENTHIERARCHY g_XFAElementAttributeIndex[];
-extern const XFA_Attribute g_XFAElementAttributeData[];
-
-extern const XFA_ELEMENTHIERARCHY g_XFAElementPropertyIndex[];
-extern const XFA_PROPERTY g_XFAElementPropertyData[];
-
 extern const XFA_SCRIPTHIERARCHY g_XFAScriptIndex[];
 extern const int32_t g_iScriptIndexCount;
 
diff --git a/xfa/fxfa/parser/xfa_basic_data_element_attributes.cpp b/xfa/fxfa/parser/xfa_basic_data_element_attributes.cpp
deleted file mode 100644
index e560dd0..0000000
--- a/xfa/fxfa/parser/xfa_basic_data_element_attributes.cpp
+++ /dev/null
@@ -1,1188 +0,0 @@
-// Copyright 2016 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "xfa/fxfa/parser/xfa_basic_data.h"
-
-#include "xfa/fxfa/fxfa_basic.h"
-
-const XFA_ELEMENTHIERARCHY g_XFAElementAttributeIndex[] = {
-    {0, 3},    {3, 2},    {5, 3},    {8, 10},   {18, 2},   {20, 6},   {26, 2},
-    {28, 1},   {29, 13},  {42, 2},   {44, 1},   {45, 2},   {47, 2},   {49, 7},
-    {56, 0},   {56, 4},   {60, 2},   {62, 7},   {69, 0},   {69, 0},   {69, 2},
-    {71, 2},   {73, 8},   {81, 5},   {86, 8},   {94, 4},   {98, 3},   {101, 3},
-    {104, 3},  {107, 6},  {113, 2},  {115, 2},  {117, 2},  {119, 2},  {121, 3},
-    {124, 2},  {126, 7},  {133, 13}, {146, 2},  {148, 6},  {154, 2},  {156, 3},
-    {159, 1},  {160, 17}, {177, 2},  {179, 2},  {181, 6},  {187, 2},  {189, 2},
-    {191, 3},  {194, 7},  {201, 2},  {203, 3},  {206, 0},  {206, 21}, {227, 1},
-    {228, 3},  {231, 2},  {233, 0},  {233, 2},  {235, 2},  {237, 6},  {243, 0},
-    {243, 4},  {247, 4},  {251, 0},  {251, 2},  {253, 2},  {255, 0},  {255, 0},
-    {255, 2},  {257, 2},  {259, 4},  {263, 3},  {266, 7},  {273, 10}, {283, 9},
-    {292, 6},  {298, 4},  {302, 2},  {304, 2},  {306, 6},  {312, 4},  {316, 3},
-    {319, 2},  {321, 2},  {323, 4},  {327, 4},  {331, 4},  {335, 4},  {339, 2},
-    {341, 2},  {343, 2},  {345, 22}, {367, 3},  {370, 2},  {372, 2},  {374, 2},
-    {376, 9},  {385, 0},  {385, 4},  {389, 3},  {392, 0},  {392, 2},  {394, 7},
-    {401, 4},  {405, 2},  {407, 4},  {411, 0},  {411, 21}, {432, 4},  {436, 3},
-    {439, 4},  {443, 6},  {449, 2},  {451, 5},  {456, 2},  {458, 8},  {466, 1},
-    {467, 2},  {469, 2},  {471, 5},  {476, 0},  {476, 2},  {478, 2},  {480, 6},
-    {486, 26}, {512, 4},  {516, 2},  {518, 2},  {520, 4},  {524, 0},  {524, 2},
-    {526, 2},  {528, 2},  {530, 2},  {532, 5},  {537, 2},  {539, 3},  {542, 2},
-    {544, 4},  {548, 5},  {553, 2},  {555, 0},  {555, 2},  {557, 4},  {561, 5},
-    {566, 3},  {569, 2},  {571, 3},  {574, 0},  {574, 2},  {576, 9},  {585, 2},
-    {587, 5},  {592, 6},  {598, 5},  {603, 4},  {607, 4},  {611, 8},  {619, 4},
-    {623, 0},  {623, 7},  {630, 4},  {634, 4},  {638, 5},  {643, 2},  {645, 2},
-    {647, 4},  {651, 4},  {655, 2},  {657, 2},  {659, 1},  {660, 2},  {662, 5},
-    {667, 4},  {671, 3},  {674, 2},  {676, 2},  {678, 4},  {682, 0},  {682, 9},
-    {691, 2},  {693, 2},  {695, 5},  {700, 4},  {704, 3},  {707, 2},  {709, 10},
-    {719, 2},  {721, 4},  {725, 4},  {729, 2},  {731, 6},  {737, 2},  {739, 2},
-    {741, 9},  {750, 1},  {751, 4},  {755, 3},  {758, 5},  {763, 6},  {769, 4},
-    {773, 1},  {774, 4},  {778, 0},  {778, 3},  {781, 1},  {782, 5},  {787, 10},
-    {797, 7},  {804, 3},  {807, 2},  {809, 5},  {814, 2},  {816, 0},  {816, 2},
-    {818, 2},  {820, 2},  {822, 6},  {828, 2},  {830, 1},  {831, 2},  {833, 2},
-    {835, 8},  {843, 2},  {845, 4},  {849, 4},  {853, 4},  {857, 2},  {859, 2},
-    {861, 2},  {863, 3},  {866, 2},  {868, 2},  {870, 4},  {874, 3},  {877, 5},
-    {882, 20}, {902, 2},  {904, 0},  {904, 2},  {906, 6},  {912, 1},  {913, 2},
-    {915, 1},  {916, 2},  {918, 4},  {922, 2},  {924, 2},  {926, 4},  {930, 4},
-    {934, 20}, {954, 1},  {955, 2},  {957, 4},  {961, 4},  {965, 2},  {967, 2},
-    {969, 4},  {973, 2},  {975, 0},  {975, 2},  {977, 5},  {982, 5},  {987, 8},
-    {995, 2},  {997, 2},  {999, 4},  {1003, 4}, {1007, 2}, {1009, 4}, {1013, 0},
-    {1013, 1}, {1014, 2}, {1016, 9}, {1025, 2}, {1027, 0}, {1027, 8}, {1035, 2},
-    {1037, 2}, {1039, 0}, {1039, 4}, {1043, 2}, {1045, 0}, {1045, 2}, {1047, 3},
-    {1050, 2}, {1052, 5}, {1057, 2}, {1059, 2}, {1061, 4}, {1065, 3}, {1068, 0},
-    {1068, 4}, {1072, 2}, {1074, 2}, {1076, 3}, {1079, 4}, {1083, 8}, {1091, 5},
-    {1096, 0}, {1096, 4}, {1100, 6}, {1106, 2}, {1108, 1}, {1109, 2}, {1111, 2},
-    {1113, 2}, {1115, 1}, {1116, 2}, {1118, 7},
-};
-static_assert(FX_ArraySize(g_XFAElementAttributeIndex) ==
-                  (static_cast<int32_t>(XFA_Element::Items) + 1),
-              "gXFAElementAttributeIndex size does not match XFA_Element");
-
-const XFA_Attribute g_XFAElementAttributeData[] = {
-    XFA_Attribute::Name,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Max,
-    XFA_Attribute::Use,
-    XFA_Attribute::EofAction,
-    XFA_Attribute::CursorType,
-    XFA_Attribute::LockType,
-    XFA_Attribute::BofAction,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::CursorLocation,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Relation,
-    XFA_Attribute::Relevant,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Name,
-    XFA_Attribute::Id,
-    XFA_Attribute::BeforeTarget,
-    XFA_Attribute::Use,
-    XFA_Attribute::OverflowTarget,
-    XFA_Attribute::OverflowLeader,
-    XFA_Attribute::OverflowTrailer,
-    XFA_Attribute::StartNew,
-    XFA_Attribute::BookendTrailer,
-    XFA_Attribute::After,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::BookendLeader,
-    XFA_Attribute::AfterTarget,
-    XFA_Attribute::Before,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Name,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::AllowNeutral,
-    XFA_Attribute::Mark,
-    XFA_Attribute::Shape,
-    XFA_Attribute::Size,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::StartAngle,
-    XFA_Attribute::SweepAngle,
-    XFA_Attribute::Circular,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Hand,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Bind,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::From,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::SignatureType,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Permissions,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::StartNew,
-    XFA_Attribute::Trailer,
-    XFA_Attribute::TargetType,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Target,
-    XFA_Attribute::Leader,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Name,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Name,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::TimeStamp,
-    XFA_Attribute::Uuid,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Name,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::LeftInset,
-    XFA_Attribute::BottomInset,
-    XFA_Attribute::TopInset,
-    XFA_Attribute::RightInset,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::NonRepudiation,
-    XFA_Attribute::EncipherOnly,
-    XFA_Attribute::Type,
-    XFA_Attribute::DigitalSignature,
-    XFA_Attribute::CrlSign,
-    XFA_Attribute::KeyAgreement,
-    XFA_Attribute::KeyEncipherment,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::DataEncipherment,
-    XFA_Attribute::KeyCertSign,
-    XFA_Attribute::DecipherOnly,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Open,
-    XFA_Attribute::CommitOn,
-    XFA_Attribute::TextEntry,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Name,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Name,
-    XFA_Attribute::Id,
-    XFA_Attribute::HAlign,
-    XFA_Attribute::TextIndent,
-    XFA_Attribute::Use,
-    XFA_Attribute::Widows,
-    XFA_Attribute::MarginRight,
-    XFA_Attribute::MarginLeft,
-    XFA_Attribute::RadixOffset,
-    XFA_Attribute::Preserve,
-    XFA_Attribute::SpaceBelow,
-    XFA_Attribute::VAlign,
-    XFA_Attribute::TabDefault,
-    XFA_Attribute::TabStops,
-    XFA_Attribute::Orphans,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::LineHeight,
-    XFA_Attribute::SpaceAbove,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Version,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::AddRevocationInfo,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Ref,
-    XFA_Attribute::Use,
-    XFA_Attribute::Listen,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Activity,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::DataRowCount,
-    XFA_Attribute::Use,
-    XFA_Attribute::DataPrep,
-    XFA_Attribute::Type,
-    XFA_Attribute::TextLocation,
-    XFA_Attribute::ModuleWidth,
-    XFA_Attribute::PrintCheckDigit,
-    XFA_Attribute::ModuleHeight,
-    XFA_Attribute::StartChar,
-    XFA_Attribute::Truncate,
-    XFA_Attribute::WideNarrowRatio,
-    XFA_Attribute::ErrorCorrectionLevel,
-    XFA_Attribute::UpsMode,
-    XFA_Attribute::Checksum,
-    XFA_Attribute::CharEncoding,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::DataColumnCount,
-    XFA_Attribute::RowColumnRatio,
-    XFA_Attribute::DataLength,
-    XFA_Attribute::EndChar,
-    XFA_Attribute::Name,
-    XFA_Attribute::Format,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Output,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Input,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Type,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Type,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Name,
-    XFA_Attribute::DataDescription,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Highlight,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Break,
-    XFA_Attribute::Use,
-    XFA_Attribute::Presence,
-    XFA_Attribute::Relevant,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Hand,
-    XFA_Attribute::X,
-    XFA_Attribute::Y,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Level,
-    XFA_Attribute::Relevant,
-    XFA_Attribute::ColSpan,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::WordCharacterCount,
-    XFA_Attribute::Hyphenate,
-    XFA_Attribute::ExcludeInitialCap,
-    XFA_Attribute::PushCharacterCount,
-    XFA_Attribute::RemainCharacterCount,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::ExcludeAllCaps,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Rid,
-    XFA_Attribute::Use,
-    XFA_Attribute::MaxChars,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Url,
-    XFA_Attribute::Use,
-    XFA_Attribute::CredentialServerPolicy,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::UrlPolicy,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Type,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Ref,
-    XFA_Attribute::Connection,
-    XFA_Attribute::Target,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::X,
-    XFA_Attribute::Y,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::NumberOfCells,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Type,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::H,
-    XFA_Attribute::W,
-    XFA_Attribute::X,
-    XFA_Attribute::Y,
-    XFA_Attribute::Id,
-    XFA_Attribute::HAlign,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Access,
-    XFA_Attribute::Rotate,
-    XFA_Attribute::Presence,
-    XFA_Attribute::VAlign,
-    XFA_Attribute::MaxH,
-    XFA_Attribute::MaxW,
-    XFA_Attribute::MinH,
-    XFA_Attribute::MinW,
-    XFA_Attribute::Relevant,
-    XFA_Attribute::ColSpan,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Locale,
-    XFA_Attribute::AnchorType,
-    XFA_Attribute::AccessKey,
-    XFA_Attribute::Name,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::H,
-    XFA_Attribute::W,
-    XFA_Attribute::X,
-    XFA_Attribute::Y,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Relevant,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Cap,
-    XFA_Attribute::Use,
-    XFA_Attribute::Stroke,
-    XFA_Attribute::Presence,
-    XFA_Attribute::Thickness,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Rate,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::SourceBelow,
-    XFA_Attribute::OutputBelow,
-    XFA_Attribute::SourceAbove,
-    XFA_Attribute::Lock,
-    XFA_Attribute::H,
-    XFA_Attribute::W,
-    XFA_Attribute::X,
-    XFA_Attribute::Y,
-    XFA_Attribute::Id,
-    XFA_Attribute::HAlign,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Access,
-    XFA_Attribute::Presence,
-    XFA_Attribute::VAlign,
-    XFA_Attribute::MaxH,
-    XFA_Attribute::MaxW,
-    XFA_Attribute::MinH,
-    XFA_Attribute::MinW,
-    XFA_Attribute::Layout,
-    XFA_Attribute::Relevant,
-    XFA_Attribute::ColSpan,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::AnchorType,
-    XFA_Attribute::AccessKey,
-    XFA_Attribute::Id,
-    XFA_Attribute::Rid,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Scope,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Connection,
-    XFA_Attribute::RunAt,
-    XFA_Attribute::ExecuteType,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Picker,
-    XFA_Attribute::HScrollPolicy,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::ContentType,
-    XFA_Attribute::TransferEncoding,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Aspect,
-    XFA_Attribute::Href,
-    XFA_Attribute::Value,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Type,
-    XFA_Attribute::Server,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::FracDigits,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::LeadDigits,
-    XFA_Attribute::H,
-    XFA_Attribute::W,
-    XFA_Attribute::X,
-    XFA_Attribute::Y,
-    XFA_Attribute::Id,
-    XFA_Attribute::HAlign,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::AllowMacro,
-    XFA_Attribute::ColumnWidths,
-    XFA_Attribute::Access,
-    XFA_Attribute::Presence,
-    XFA_Attribute::VAlign,
-    XFA_Attribute::MaxH,
-    XFA_Attribute::MaxW,
-    XFA_Attribute::MinH,
-    XFA_Attribute::MinW,
-    XFA_Attribute::Layout,
-    XFA_Attribute::Relevant,
-    XFA_Attribute::MergeMode,
-    XFA_Attribute::ColSpan,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Locale,
-    XFA_Attribute::AnchorType,
-    XFA_Attribute::RestoreState,
-    XFA_Attribute::Scope,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Type,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Timeout,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Mode,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Role,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Name,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Stroke,
-    XFA_Attribute::Presence,
-    XFA_Attribute::Inverted,
-    XFA_Attribute::Thickness,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Join,
-    XFA_Attribute::Radius,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::CSpace,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Value,
-    XFA_Attribute::Id,
-    XFA_Attribute::Next,
-    XFA_Attribute::Use,
-    XFA_Attribute::Previous,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Intact,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::CommandType,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Data,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::ScriptTest,
-    XFA_Attribute::NullTest,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::FormatTest,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Type,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Relation,
-    XFA_Attribute::Relevant,
-    XFA_Attribute::DuplexImposition,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::To,
-    XFA_Attribute::Force,
-    XFA_Attribute::Desc,
-    XFA_Attribute::From,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Value,
-    XFA_Attribute::Name,
-    XFA_Attribute::DataDescription,
-    XFA_Attribute::Id,
-    XFA_Attribute::Ref,
-    XFA_Attribute::Use,
-    XFA_Attribute::Operation,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Type,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::BaseProfile,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Type,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::ContentType,
-    XFA_Attribute::RunAt,
-    XFA_Attribute::Binding,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::PasswordChar,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::HScrollPolicy,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::HScrollPolicy,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::PagePosition,
-    XFA_Attribute::OddOrEven,
-    XFA_Attribute::Relevant,
-    XFA_Attribute::InitialNumber,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Numbered,
-    XFA_Attribute::BlankOrNotBlank,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Type,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Type,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Reserve,
-    XFA_Attribute::Presence,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Placement,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Rid,
-    XFA_Attribute::Use,
-    XFA_Attribute::ContentType,
-    XFA_Attribute::TransferEncoding,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::MaxLength,
-    XFA_Attribute::Href,
-    XFA_Attribute::Abbr,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::WritingScript,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Action,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Trailer,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Target,
-    XFA_Attribute::Leader,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Type,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Name,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Name,
-    XFA_Attribute::To,
-    XFA_Attribute::UnicodeRange,
-    XFA_Attribute::Desc,
-    XFA_Attribute::From,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::TrayOut,
-    XFA_Attribute::Use,
-    XFA_Attribute::Orientation,
-    XFA_Attribute::ImagingBBox,
-    XFA_Attribute::Short,
-    XFA_Attribute::TrayIn,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Stock,
-    XFA_Attribute::Long,
-    XFA_Attribute::Id,
-    XFA_Attribute::VScrollPolicy,
-    XFA_Attribute::Use,
-    XFA_Attribute::AllowRichText,
-    XFA_Attribute::MultiLine,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::HScrollPolicy,
-    XFA_Attribute::Desc,
-    XFA_Attribute::MaxEntries,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Name,
-    XFA_Attribute::ContentType,
-    XFA_Attribute::Contains,
-    XFA_Attribute::Value,
-    XFA_Attribute::IsNull,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Name,
-    XFA_Attribute::DataDescription,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Ref,
-    XFA_Attribute::Use,
-    XFA_Attribute::Operation,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Target,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Name,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Ref,
-    XFA_Attribute::Use,
-    XFA_Attribute::ContentType,
-    XFA_Attribute::TransferEncoding,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Match,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Hand,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Name,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::H,
-    XFA_Attribute::W,
-    XFA_Attribute::X,
-    XFA_Attribute::Y,
-    XFA_Attribute::Id,
-    XFA_Attribute::HAlign,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Rotate,
-    XFA_Attribute::Presence,
-    XFA_Attribute::VAlign,
-    XFA_Attribute::MaxH,
-    XFA_Attribute::MaxW,
-    XFA_Attribute::MinH,
-    XFA_Attribute::MinW,
-    XFA_Attribute::Relevant,
-    XFA_Attribute::ColSpan,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Locale,
-    XFA_Attribute::AnchorType,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Rid,
-    XFA_Attribute::Use,
-    XFA_Attribute::Priority,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Disable,
-    XFA_Attribute::Name,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Value,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Type,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Type,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Presence,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::LineThrough,
-    XFA_Attribute::Typeface,
-    XFA_Attribute::FontHorizontalScale,
-    XFA_Attribute::Use,
-    XFA_Attribute::KerningMode,
-    XFA_Attribute::Underline,
-    XFA_Attribute::BaselineShift,
-    XFA_Attribute::OverlinePeriod,
-    XFA_Attribute::LetterSpacing,
-    XFA_Attribute::LineThroughPeriod,
-    XFA_Attribute::FontVerticalScale,
-    XFA_Attribute::PsName,
-    XFA_Attribute::Size,
-    XFA_Attribute::Posture,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Weight,
-    XFA_Attribute::UnderlinePeriod,
-    XFA_Attribute::Overline,
-    XFA_Attribute::GenericFamily,
-    XFA_Attribute::Checksum,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Relevant,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Override,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Trailer,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Leader,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::CodeType,
-    XFA_Attribute::Archive,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::CodeBase,
-    XFA_Attribute::ClassId,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Ref,
-    XFA_Attribute::Connection,
-    XFA_Attribute::LabelRef,
-    XFA_Attribute::ValueRef,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Override,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Value,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Ref,
-    XFA_Attribute::Use,
-    XFA_Attribute::Timeout,
-    XFA_Attribute::Connection,
-    XFA_Attribute::Usage,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::DelayedOpen,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Format,
-    XFA_Attribute::EmbedPDF,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Target,
-    XFA_Attribute::TextEncoding,
-    XFA_Attribute::XdpContent,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Name,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Delimiter,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Type,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Ref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Type,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::StartNew,
-    XFA_Attribute::Trailer,
-    XFA_Attribute::TargetType,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Target,
-    XFA_Attribute::Leader,
-    XFA_Attribute::Id,
-    XFA_Attribute::Use,
-    XFA_Attribute::Slope,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Hand,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Use,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Id,
-    XFA_Attribute::Max,
-    XFA_Attribute::Min,
-    XFA_Attribute::Use,
-    XFA_Attribute::Initial,
-    XFA_Attribute::Usehref,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Abbr,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Name,
-    XFA_Attribute::Desc,
-    XFA_Attribute::Lock,
-    XFA_Attribute::Id,
-    XFA_Attribute::Name,
-    XFA_Attribute::Ref,
-    XFA_Attribute::Use,
-    XFA_Attribute::Presence,
-    XFA_Attribute::Save,
-    XFA_Attribute::Usehref,
-};
diff --git a/xfa/fxfa/parser/xfa_basic_data_element_properties.cpp b/xfa/fxfa/parser/xfa_basic_data_element_properties.cpp
deleted file mode 100644
index 1b47b03..0000000
--- a/xfa/fxfa/parser/xfa_basic_data_element_properties.cpp
+++ /dev/null
@@ -1,487 +0,0 @@
-// Copyright 2016 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "xfa/fxfa/parser/xfa_basic_data.h"
-
-#include "xfa/fxfa/fxfa_basic.h"
-
-const XFA_ELEMENTHIERARCHY g_XFAElementPropertyIndex[] = {
-    {0, 8},    {8, 0},   {8, 14},   {22, 0},   {22, 0},   {22, 6},   {28, 0},
-    {28, 0},   {28, 1},  {29, 3},   {32, 0},   {32, 0},   {32, 0},   {32, 3},
-    {35, 1},   {36, 0},  {36, 0},   {36, 2},   {38, 0},   {38, 0},   {38, 0},
-    {38, 4},   {42, 0},  {42, 0},   {42, 1},   {43, 0},   {43, 8},   {51, 19},
-    {70, 0},   {70, 0},  {70, 2},   {72, 1},   {73, 0},   {73, 2},   {75, 4},
-    {79, 1},   {80, 1},  {81, 0},   {81, 0},   {81, 3},   {84, 0},   {84, 4},
-    {88, 4},   {92, 1},  {93, 0},   {93, 4},   {97, 9},   {106, 14}, {120, 0},
-    {120, 0},  {120, 5}, {125, 0},  {125, 1},  {126, 0},  {126, 0},  {126, 0},
-    {126, 0},  {126, 0}, {126, 1},  {127, 0},  {127, 0},  {127, 0},  {127, 0},
-    {127, 0},  {127, 0}, {127, 0},  {127, 6},  {133, 1},  {134, 0},  {134, 1},
-    {135, 0},  {135, 0}, {135, 1},  {136, 2},  {138, 5},  {143, 2},  {145, 0},
-    {145, 0},  {145, 0}, {145, 0},  {145, 0},  {145, 5},  {150, 0},  {150, 0},
-    {150, 0},  {150, 0}, {150, 0},  {150, 0},  {150, 0},  {150, 2},  {152, 0},
-    {152, 0},  {152, 0}, {152, 17}, {169, 0},  {169, 1},  {170, 0},  {170, 0},
-    {170, 2},  {172, 0}, {172, 0},  {172, 1},  {173, 0},  {173, 0},  {173, 2},
-    {175, 2},  {177, 0}, {177, 0},  {177, 0},  {177, 11}, {188, 0},  {188, 0},
-    {188, 0},  {188, 0}, {188, 0},  {188, 4},  {192, 3},  {195, 0},  {195, 0},
-    {195, 0},  {195, 0}, {195, 0},  {195, 0},  {195, 9},  {204, 0},  {204, 0},
-    {204, 17}, {221, 0}, {221, 0},  {221, 0},  {221, 0},  {221, 0},  {221, 0},
-    {221, 0},  {221, 0}, {221, 0},  {221, 4},  {225, 0},  {225, 0},  {225, 0},
-    {225, 0},  {225, 2}, {227, 3},  {230, 0},  {230, 0},  {230, 2},  {232, 0},
-    {232, 1},  {233, 2}, {235, 2},  {237, 0},  {237, 0},  {237, 2},  {239, 0},
-    {239, 1},  {240, 1}, {241, 2},  {243, 0},  {243, 3},  {246, 4},  {250, 0},
-    {250, 1},  {251, 2}, {253, 0},  {253, 0},  {253, 0},  {253, 0},  {253, 0},
-    {253, 0},  {253, 0}, {253, 0},  {253, 0},  {253, 0},  {253, 2},  {255, 2},
-    {257, 0},  {257, 6}, {263, 5},  {268, 0},  {268, 0},  {268, 0},  {268, 3},
-    {271, 0},  {271, 0}, {271, 3},  {274, 4},  {278, 0},  {278, 0},  {278, 4},
-    {282, 0},  {282, 0}, {282, 5},  {287, 0},  {287, 5},  {292, 0},  {292, 0},
-    {292, 0},  {292, 1}, {293, 0},  {293, 0},  {293, 1},  {294, 0},  {294, 2},
-    {296, 0},  {296, 0}, {296, 0},  {296, 0},  {296, 1},  {297, 0},  {297, 0},
-    {297, 4},  {301, 0}, {301, 0},  {301, 0},  {301, 0},  {301, 0},  {301, 0},
-    {301, 1},  {302, 0}, {302, 2},  {304, 0},  {304, 0},  {304, 0},  {304, 0},
-    {304, 1},  {305, 4}, {309, 0},  {309, 3},  {312, 0},  {312, 0},  {312, 1},
-    {313, 0},  {313, 8}, {321, 0},  {321, 10}, {331, 0},  {331, 10}, {341, 1},
-    {342, 12}, {354, 3}, {357, 1},  {358, 0},  {358, 0},  {358, 0},  {358, 8},
-    {366, 0},  {366, 0}, {366, 0},  {366, 0},  {366, 0},  {366, 0},  {366, 7},
-    {373, 2},  {375, 0}, {375, 1},  {376, 0},  {376, 0},  {376, 0},  {376, 0},
-    {376, 0},  {376, 0}, {376, 0},  {376, 0},  {376, 13}, {389, 0},  {389, 1},
-    {390, 1},  {391, 0}, {391, 0},  {391, 3},  {394, 0},  {394, 0},  {394, 0},
-    {394, 0},  {394, 0}, {394, 4},  {398, 9},  {407, 0},  {407, 1},  {408, 0},
-    {408, 0},  {408, 0}, {408, 0},  {408, 0},  {408, 1},  {409, 0},  {409, 2},
-    {411, 0},  {411, 0}, {411, 0},  {411, 0},  {411, 2},  {413, 0},  {413, 1},
-    {414, 0},  {414, 0}, {414, 0},  {414, 7},  {421, 0},  {421, 1},  {422, 1},
-    {423, 0},  {423, 1}, {424, 1},  {425, 0},  {425, 1},  {426, 0},  {426, 0},
-    {426, 0},  {426, 0}, {426, 0},  {426, 0},
-};
-
-const XFA_PROPERTY g_XFAElementPropertyData[] = {
-    {XFA_Element::FontInfo, 1, 0},
-    {XFA_Element::Jog, 1, 0},
-    {XFA_Element::Xdc, 1, 0},
-    {XFA_Element::BatchOutput, 1, 0},
-    {XFA_Element::OutputBin, 1, 0},
-    {XFA_Element::Compress, 1, 0},
-    {XFA_Element::Staple, 1, 0},
-    {XFA_Element::MediumInfo, 1, 0},
-    {XFA_Element::CheckButton, 1, XFA_PROPERTYFLAG_OneOf},
-    {XFA_Element::ChoiceList, 1, XFA_PROPERTYFLAG_OneOf},
-    {XFA_Element::DefaultUi, 1, XFA_PROPERTYFLAG_OneOf},
-    {XFA_Element::Barcode, 1, XFA_PROPERTYFLAG_OneOf},
-    {XFA_Element::Button, 1, XFA_PROPERTYFLAG_OneOf},
-    {XFA_Element::DateTimeEdit, 1, XFA_PROPERTYFLAG_OneOf},
-    {XFA_Element::Picture, 1, 0},
-    {XFA_Element::ImageEdit, 1, XFA_PROPERTYFLAG_OneOf},
-    {XFA_Element::PasswordEdit, 1, XFA_PROPERTYFLAG_OneOf},
-    {XFA_Element::NumericEdit, 1, XFA_PROPERTYFLAG_OneOf},
-    {XFA_Element::Signature, 1, XFA_PROPERTYFLAG_OneOf},
-    {XFA_Element::TextEdit, 1, XFA_PROPERTYFLAG_OneOf},
-    {XFA_Element::ExObject, 1, XFA_PROPERTYFLAG_OneOf},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Break, 1, 0},
-    {XFA_Element::Overflow, 1, 0},
-    {XFA_Element::Desc, 1, 0},
-    {XFA_Element::Bookend, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Occur, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::SubsetBelow, 1, 0},
-    {XFA_Element::Map, 1, 0},
-    {XFA_Element::Embed, 1, 0},
-    {XFA_Element::Margin, 1, 0},
-    {XFA_Element::Border, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::DatePattern, 4, 0},
-    {XFA_Element::Edge, 1, 0},
-    {XFA_Element::Fill, 1, 0},
-    {XFA_Element::To, 1, 0},
-    {XFA_Element::Uri, 1, 0},
-    {XFA_Element::Mode, 1, 0},
-    {XFA_Element::Threshold, 1, 0},
-    {XFA_Element::Script, 1, 0},
-    {XFA_Element::FontInfo, 1, 0},
-    {XFA_Element::Jog, 1, 0},
-    {XFA_Element::Xdc, 1, 0},
-    {XFA_Element::BatchOutput, 1, 0},
-    {XFA_Element::PageOffset, 1, 0},
-    {XFA_Element::OutputBin, 1, 0},
-    {XFA_Element::Staple, 1, 0},
-    {XFA_Element::MediumInfo, 1, 0},
-    {XFA_Element::AdobeExtensionLevel, 1, 0},
-    {XFA_Element::FontInfo, 1, 0},
-    {XFA_Element::Xdc, 1, 0},
-    {XFA_Element::Pdfa, 1, 0},
-    {XFA_Element::BatchOutput, 1, 0},
-    {XFA_Element::ViewerPreferences, 1, 0},
-    {XFA_Element::ScriptModel, 1, 0},
-    {XFA_Element::Version, 1, 0},
-    {XFA_Element::SubmitFormat, 1, 0},
-    {XFA_Element::SilentPrint, 1, 0},
-    {XFA_Element::Producer, 1, 0},
-    {XFA_Element::Compression, 1, 0},
-    {XFA_Element::Interactive, 1, 0},
-    {XFA_Element::Encryption, 1, 0},
-    {XFA_Element::RenderPolicy, 1, 0},
-    {XFA_Element::OpenAction, 1, 0},
-    {XFA_Element::Creator, 1, 0},
-    {XFA_Element::Linearized, 1, 0},
-    {XFA_Element::Tagged, 1, 0},
-    {XFA_Element::Uri, 1, 0},
-    {XFA_Element::Xsl, 1, 0},
-    {XFA_Element::Packets, 1, 0},
-    {XFA_Element::Uri, 1, 0},
-    {XFA_Element::Debug, 1, 0},
-    {XFA_Element::FontInfo, 1, 0},
-    {XFA_Element::Xdc, 1, 0},
-    {XFA_Element::BatchOutput, 1, 0},
-    {XFA_Element::FlipLabel, 1, 0},
-    {XFA_Element::TemplateCache, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Margin, 1, 0},
-    {XFA_Element::Border, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::FontInfo, 1, 0},
-    {XFA_Element::Xdc, 1, 0},
-    {XFA_Element::BatchOutput, 1, 0},
-    {XFA_Element::FlipLabel, 1, 0},
-    {XFA_Element::EraNames, 1, 0},
-    {XFA_Element::DayNames, 2, 0},
-    {XFA_Element::MeridiemNames, 1, 0},
-    {XFA_Element::MonthNames, 2, 0},
-    {XFA_Element::Hyphenation, 1, 0},
-    {XFA_Element::Amd, 1, 0},
-    {XFA_Element::Part, 1, 0},
-    {XFA_Element::IncludeXDPContent, 1, 0},
-    {XFA_Element::Conformance, 1, 0},
-    {XFA_Element::Mdp, 1, 0},
-    {XFA_Element::Certificates, 1, 0},
-    {XFA_Element::TimeStamp, 1, 0},
-    {XFA_Element::Handler, 1, 0},
-    {XFA_Element::DigestMethods, 1, 0},
-    {XFA_Element::Encodings, 1, 0},
-    {XFA_Element::Reasons, 1, 0},
-    {XFA_Element::AppearanceFilter, 1, 0},
-    {XFA_Element::LockDocument, 1, 0},
-    {XFA_Element::Xdp, 1, 0},
-    {XFA_Element::Cache, 1, 0},
-    {XFA_Element::Pagination, 1, 0},
-    {XFA_Element::Overprint, 1, 0},
-    {XFA_Element::BehaviorOverride, 1, 0},
-    {XFA_Element::Copies, 1, 0},
-    {XFA_Element::Output, 1, 0},
-    {XFA_Element::Validate, 1, 0},
-    {XFA_Element::Layout, 1, 0},
-    {XFA_Element::Script, 1, 0},
-    {XFA_Element::Common, 1, 0},
-    {XFA_Element::PaginationOverride, 1, 0},
-    {XFA_Element::Destination, 1, 0},
-    {XFA_Element::IncrementalMerge, 1, 0},
-    {XFA_Element::Execute, 1, XFA_PROPERTYFLAG_OneOf},
-    {XFA_Element::Script, 1, XFA_PROPERTYFLAG_OneOf},
-    {XFA_Element::SignData, 1, XFA_PROPERTYFLAG_OneOf},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Submit, 1, XFA_PROPERTYFLAG_OneOf},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::CurrencySymbol, 3, 0},
-    {XFA_Element::Operation, 1, 0},
-    {XFA_Element::WsdlAddress, 1, 0},
-    {XFA_Element::SoapAddress, 1, 0},
-    {XFA_Element::SoapAction, 1, 0},
-    {XFA_Element::EffectiveOutputPolicy, 1, 0},
-    {XFA_Element::EffectiveInputPolicy, 1, 0},
-    {XFA_Element::Uri, 1, 0},
-    {XFA_Element::Era, 2, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Picture, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Margin, 1, 0},
-    {XFA_Element::Edge, 4, 0},
-    {XFA_Element::Corner, 4, 0},
-    {XFA_Element::Fill, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Desc, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::KeyUsage, 1, 0},
-    {XFA_Element::SubjectDNs, 1, 0},
-    {XFA_Element::Issuers, 1, 0},
-    {XFA_Element::Signing, 1, 0},
-    {XFA_Element::Oids, 1, 0},
-    {XFA_Element::Color, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Ui, 1, 0},
-    {XFA_Element::Margin, 1, 0},
-    {XFA_Element::Para, 1, 0},
-    {XFA_Element::Format, 1, 0},
-    {XFA_Element::Border, 1, 0},
-    {XFA_Element::Assist, 1, 0},
-    {XFA_Element::Traversal, 1, 0},
-    {XFA_Element::Keep, 1, 0},
-    {XFA_Element::Validate, 1, 0},
-    {XFA_Element::Caption, 1, 0},
-    {XFA_Element::Bind, 1, 0},
-    {XFA_Element::Desc, 1, 0},
-    {XFA_Element::Font, 1, 0},
-    {XFA_Element::Value, 1, 0},
-    {XFA_Element::Calculate, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Items, 2, 0},
-    {XFA_Element::Uri, 1, 0},
-    {XFA_Element::Desc, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Color, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Color, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Margin, 1, 0},
-    {XFA_Element::Para, 1, 0},
-    {XFA_Element::Border, 1, 0},
-    {XFA_Element::Assist, 1, 0},
-    {XFA_Element::Traversal, 1, 0},
-    {XFA_Element::Validate, 1, 0},
-    {XFA_Element::Caption, 1, 0},
-    {XFA_Element::Bind, 1, 0},
-    {XFA_Element::Desc, 1, 0},
-    {XFA_Element::Calculate, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Margin, 1, 0},
-    {XFA_Element::Border, 1, 0},
-    {XFA_Element::Comb, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Present, 1, 0},
-    {XFA_Element::Acrobat, 1, 0},
-    {XFA_Element::Trace, 1, 0},
-    {XFA_Element::PrintScaling, 1, 0},
-    {XFA_Element::Enforce, 1, 0},
-    {XFA_Element::NumberOfCopies, 1, 0},
-    {XFA_Element::PageRange, 1, 0},
-    {XFA_Element::AddViewerPreferences, 1, 0},
-    {XFA_Element::ADBE_JSConsole, 1, 0},
-    {XFA_Element::DuplexOption, 1, 0},
-    {XFA_Element::ADBE_JSDebugger, 1, 0},
-    {XFA_Element::PickTrayByPDFSize, 1, 0},
-    {XFA_Element::Break, 1, 0},
-    {XFA_Element::Margin, 1, 0},
-    {XFA_Element::Para, 1, 0},
-    {XFA_Element::Border, 1, 0},
-    {XFA_Element::Assist, 1, 0},
-    {XFA_Element::Traversal, 1, 0},
-    {XFA_Element::Keep, 1, 0},
-    {XFA_Element::Validate, 1, 0},
-    {XFA_Element::PageSet, 1, 0},
-    {XFA_Element::Overflow, 1, 0},
-    {XFA_Element::Bind, 1, 0},
-    {XFA_Element::Desc, 1, 0},
-    {XFA_Element::Bookend, 1, 0},
-    {XFA_Element::Calculate, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Variables, 1, 0},
-    {XFA_Element::Occur, 1, 0},
-    {XFA_Element::Query, 1, 0},
-    {XFA_Element::Insert, 1, 0},
-    {XFA_Element::Update, 1, 0},
-    {XFA_Element::Delete, 1, 0},
-    {XFA_Element::MsgId, 1, 0},
-    {XFA_Element::Severity, 1, 0},
-    {XFA_Element::To, 1, 0},
-    {XFA_Element::Uri, 1, 0},
-    {XFA_Element::Type, 1, 0},
-    {XFA_Element::ToolTip, 1, 0},
-    {XFA_Element::Speak, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::AddSilentPrint, 1, 0},
-    {XFA_Element::PrinterName, 1, 0},
-    {XFA_Element::FontInfo, 1, 0},
-    {XFA_Element::Xdc, 1, 0},
-    {XFA_Element::Color, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::RecordSet, 1, 0},
-    {XFA_Element::Select, 1, 0},
-    {XFA_Element::Margin, 1, 0},
-    {XFA_Element::Border, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Message, 1, 0},
-    {XFA_Element::Picture, 1, 0},
-    {XFA_Element::Script, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::NumberPattern, 4, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Occur, 1, 0},
-    {XFA_Element::Uri, 1, 0},
-    {XFA_Element::RootElement, 1, 0},
-    {XFA_Element::Script, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Uri, 1, 0},
-    {XFA_Element::Xsl, 1, 0},
-    {XFA_Element::StartPage, 1, 0},
-    {XFA_Element::Relevant, 1, 0},
-    {XFA_Element::Base, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::AutoSave, 1, 0},
-    {XFA_Element::Validate, 1, 0},
-    {XFA_Element::ValidateApprovalSignatures, 1, 0},
-    {XFA_Element::Acrobat7, 1, 0},
-    {XFA_Element::Common, 1, 0},
-    {XFA_Element::Exclude, 1, 0},
-    {XFA_Element::CurrentPage, 1, 0},
-    {XFA_Element::RunScripts, 1, 0},
-    {XFA_Element::Margin, 1, 0},
-    {XFA_Element::Border, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Margin, 1, 0},
-    {XFA_Element::Border, 1, 0},
-    {XFA_Element::Comb, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Medium, 1, 0},
-    {XFA_Element::Desc, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Occur, 1, 0},
-    {XFA_Element::Margin, 1, 0},
-    {XFA_Element::Filter, 1, 0},
-    {XFA_Element::Border, 1, 0},
-    {XFA_Element::Manifest, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Margin, 1, 0},
-    {XFA_Element::Para, 1, 0},
-    {XFA_Element::Font, 1, 0},
-    {XFA_Element::Value, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Day, 7, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Color, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Occur, 1, 0},
-    {XFA_Element::Margin, 1, 0},
-    {XFA_Element::Border, 1, 0},
-    {XFA_Element::Comb, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Uri, 1, 0},
-    {XFA_Element::Filter, 1, 0},
-    {XFA_Element::Manifest, 1, 0},
-    {XFA_Element::Picture, 1, 0},
-    {XFA_Element::Level, 1, 0},
-    {XFA_Element::Type, 1, 0},
-    {XFA_Element::CompressObjectStream, 1, 0},
-    {XFA_Element::CompressLogicalStructure, 1, 0},
-    {XFA_Element::Edge, 4, 0},
-    {XFA_Element::Corner, 4, 0},
-    {XFA_Element::Fill, 1, 0},
-    {XFA_Element::DynamicRender, 1, 0},
-    {XFA_Element::DatePatterns, 1, 0},
-    {XFA_Element::CalendarSymbols, 1, 0},
-    {XFA_Element::CurrencySymbols, 1, 0},
-    {XFA_Element::Typefaces, 1, 0},
-    {XFA_Element::DateTimeSymbols, 1, 0},
-    {XFA_Element::NumberPatterns, 1, 0},
-    {XFA_Element::NumberSymbols, 1, 0},
-    {XFA_Element::TimePatterns, 1, 0},
-    {XFA_Element::Uri, 1, 0},
-    {XFA_Element::Xsl, 1, 0},
-    {XFA_Element::StartNode, 1, 0},
-    {XFA_Element::OutputXSL, 1, 0},
-    {XFA_Element::AdjustData, 1, 0},
-    {XFA_Element::Attributes, 1, 0},
-    {XFA_Element::Window, 1, 0},
-    {XFA_Element::Record, 1, 0},
-    {XFA_Element::Range, 1, 0},
-    {XFA_Element::IncrementalLoad, 1, 0},
-    {XFA_Element::Text, 1, 0},
-    {XFA_Element::Time, 1, 0},
-    {XFA_Element::DateTime, 1, 0},
-    {XFA_Element::Image, 1, 0},
-    {XFA_Element::Decimal, 1, 0},
-    {XFA_Element::Boolean, 1, 0},
-    {XFA_Element::Integer, 1, 0},
-    {XFA_Element::ExData, 1, 0},
-    {XFA_Element::Date, 1, 0},
-    {XFA_Element::Float, 1, 0},
-    {XFA_Element::Certificate, 1, 0},
-    {XFA_Element::Ui, 1, 0},
-    {XFA_Element::Margin, 1, 0},
-    {XFA_Element::Para, 1, 0},
-    {XFA_Element::Border, 1, 0},
-    {XFA_Element::Assist, 1, 0},
-    {XFA_Element::Traversal, 1, 0},
-    {XFA_Element::Keep, 1, 0},
-    {XFA_Element::Caption, 1, 0},
-    {XFA_Element::Desc, 1, 0},
-    {XFA_Element::Font, 1, 0},
-    {XFA_Element::Value, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::EncryptionLevel, 1, 0},
-    {XFA_Element::Encrypt, 1, 0},
-    {XFA_Element::Permissions, 1, 0},
-    {XFA_Element::Meridiem, 2, 0},
-    {XFA_Element::SuppressBanner, 1, 0},
-    {XFA_Element::VersionControl, 1, 0},
-    {XFA_Element::LocaleSet, 1, 0},
-    {XFA_Element::Template, 1, 0},
-    {XFA_Element::ValidationMessaging, 1, 0},
-    {XFA_Element::Locale, 1, 0},
-    {XFA_Element::Data, 1, 0},
-    {XFA_Element::Messaging, 1, 0},
-    {XFA_Element::Pattern, 1, XFA_PROPERTYFLAG_OneOf},
-    {XFA_Element::Solid, 1,
-     XFA_PROPERTYFLAG_OneOf | XFA_PROPERTYFLAG_DefaultOneOf},
-    {XFA_Element::Stipple, 1, XFA_PROPERTYFLAG_OneOf},
-    {XFA_Element::Color, 1, 0},
-    {XFA_Element::Linear, 1, XFA_PROPERTYFLAG_OneOf},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Radial, 1, XFA_PROPERTYFLAG_OneOf},
-    {XFA_Element::Fill, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Map, 1, 0},
-    {XFA_Element::Arc, 1, XFA_PROPERTYFLAG_OneOf},
-    {XFA_Element::Text, 1, XFA_PROPERTYFLAG_OneOf},
-    {XFA_Element::Time, 1, XFA_PROPERTYFLAG_OneOf},
-    {XFA_Element::DateTime, 1, XFA_PROPERTYFLAG_OneOf},
-    {XFA_Element::Image, 1, XFA_PROPERTYFLAG_OneOf},
-    {XFA_Element::Decimal, 1, XFA_PROPERTYFLAG_OneOf},
-    {XFA_Element::Boolean, 1, XFA_PROPERTYFLAG_OneOf},
-    {XFA_Element::Integer, 1, XFA_PROPERTYFLAG_OneOf},
-    {XFA_Element::ExData, 1, XFA_PROPERTYFLAG_OneOf},
-    {XFA_Element::Rectangle, 1, XFA_PROPERTYFLAG_OneOf},
-    {XFA_Element::Date, 1, XFA_PROPERTYFLAG_OneOf},
-    {XFA_Element::Float, 1, XFA_PROPERTYFLAG_OneOf},
-    {XFA_Element::Line, 1, XFA_PROPERTYFLAG_OneOf},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Destination, 1, 0},
-    {XFA_Element::Message, 1, 0},
-    {XFA_Element::Script, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Picture, 1, 0},
-    {XFA_Element::ConnectString, 1, 0},
-    {XFA_Element::User, 1, 0},
-    {XFA_Element::Password, 1, 0},
-    {XFA_Element::ModifyAnnots, 1, 0},
-    {XFA_Element::ContentCopy, 1, 0},
-    {XFA_Element::FormFieldFilling, 1, 0},
-    {XFA_Element::Change, 1, 0},
-    {XFA_Element::AccessibleContent, 1, 0},
-    {XFA_Element::Print, 1, 0},
-    {XFA_Element::PlaintextMetadata, 1, 0},
-    {XFA_Element::PrintHighQuality, 1, 0},
-    {XFA_Element::DocumentAssembly, 1, 0},
-    {XFA_Element::Encrypt, 1, 0},
-    {XFA_Element::NumberSymbol, 5, 0},
-    {XFA_Element::FontInfo, 1, 0},
-    {XFA_Element::Xdc, 1, 0},
-    {XFA_Element::Color, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::TimePattern, 4, 0},
-    {XFA_Element::Whitespace, 1, 0},
-    {XFA_Element::Rename, 1, 0},
-    {XFA_Element::IfEmpty, 1, 0},
-    {XFA_Element::Presence, 1, 0},
-    {XFA_Element::Picture, 1, 0},
-    {XFA_Element::NameAttr, 1, 0},
-    {XFA_Element::GroupParent, 1, 0},
-    {XFA_Element::Script, 1, 0},
-    {XFA_Element::Edge, 1, 0},
-    {XFA_Element::Connect, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Month, 12, 0},
-};
diff --git a/xfa/fxfa/parser/xfa_utils.cpp b/xfa/fxfa/parser/xfa_utils.cpp
index 588246f..b17a753 100644
--- a/xfa/fxfa/parser/xfa_utils.cpp
+++ b/xfa/fxfa/parser/xfa_utils.cpp
@@ -243,72 +243,6 @@
   return nullptr;
 }
 
-const XFA_PROPERTY* XFA_GetPropertyOfElement(XFA_Element eElement,
-                                             XFA_Element eProperty,
-                                             uint32_t dwPacket) {
-  int32_t iCount = 0;
-  const XFA_PROPERTY* pProperties = XFA_GetElementProperties(eElement, iCount);
-  if (!pProperties || iCount < 1)
-    return nullptr;
-
-  auto* it = std::find_if(pProperties, pProperties + iCount,
-                          [eProperty](const XFA_PROPERTY& prop) {
-                            return prop.eName == eProperty;
-                          });
-  if (it == pProperties + iCount)
-    return nullptr;
-
-  const XFA_ELEMENTINFO* pInfo = XFA_GetElementByID(eProperty);
-  ASSERT(pInfo);
-  if (dwPacket != XFA_XDPPACKET_UNKNOWN && !(dwPacket & pInfo->dwPackets))
-    return nullptr;
-  return it;
-}
-
-const XFA_PROPERTY* XFA_GetElementProperties(XFA_Element eElement,
-                                             int32_t& iCount) {
-  if (eElement == XFA_Element::Unknown)
-    return nullptr;
-
-  const XFA_ELEMENTHIERARCHY* pElement =
-      g_XFAElementPropertyIndex + static_cast<int32_t>(eElement);
-  iCount = pElement->wCount;
-  return g_XFAElementPropertyData + pElement->wStart;
-}
-
-const XFA_Attribute* XFA_GetElementAttributes(XFA_Element eElement,
-                                              int32_t& iCount) {
-  if (eElement == XFA_Element::Unknown)
-    return nullptr;
-
-  const XFA_ELEMENTHIERARCHY* pElement =
-      g_XFAElementAttributeIndex + static_cast<int32_t>(eElement);
-  iCount = pElement->wCount;
-  return g_XFAElementAttributeData + pElement->wStart;
-}
-
-const XFA_ELEMENTINFO* XFA_GetElementByID(XFA_Element eName) {
-  return eName != XFA_Element::Unknown
-             ? g_XFAElementData + static_cast<int32_t>(eName)
-             : nullptr;
-}
-
-XFA_Element XFA_GetElementTypeForName(const WideStringView& wsName) {
-  if (wsName.IsEmpty())
-    return XFA_Element::Unknown;
-
-  uint32_t uHash = FX_HashCode_GetW(wsName, false);
-  const XFA_ELEMENTINFO* pEnd = g_XFAElementData + g_iXFAElementCount;
-  auto* pInfo =
-      std::lower_bound(g_XFAElementData, pEnd, uHash,
-                       [](const XFA_ELEMENTINFO& info, uint32_t hash) {
-                         return info.uHash < hash;
-                       });
-  if (pInfo < pEnd && pInfo->uHash == uHash)
-    return pInfo->eName;
-  return XFA_Element::Unknown;
-}
-
 bool XFA_GetAttributeDefaultValue(void*& pValue,
                                   XFA_Element eElement,
                                   XFA_Attribute eAttribute,
diff --git a/xfa/fxfa/parser/xfa_utils.h b/xfa/fxfa/parser/xfa_utils.h
index b00f7aa..0809256 100644
--- a/xfa/fxfa/parser/xfa_utils.h
+++ b/xfa/fxfa/parser/xfa_utils.h
@@ -47,15 +47,8 @@
     XFA_Element eElement,
     const WideStringView& wsAttributeName);
 
-const XFA_PROPERTY* XFA_GetPropertyOfElement(XFA_Element eElement,
-                                             XFA_Element eProperty,
-                                             uint32_t dwPacket);
-const XFA_PROPERTY* XFA_GetElementProperties(XFA_Element eElement,
-                                             int32_t& iCount);
 const XFA_Attribute* XFA_GetElementAttributes(XFA_Element eElement,
                                               int32_t& iCount);
-const XFA_ELEMENTINFO* XFA_GetElementByID(XFA_Element eName);
-XFA_Element XFA_GetElementTypeForName(const WideStringView& wsName);
 bool XFA_GetAttributeDefaultValue(void*& pValue,
                                   XFA_Element eElement,
                                   XFA_Attribute eAttribute,
