Generate XFA node classes

This CL adds concrete classes for each of the XFA Node types.

Change-Id: Ieac8e2fcd5d13c61daa27fc63e3d80abb7aa7a29
Reviewed-on: https://pdfium-review.googlesource.com/18271
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: dsinclair <dsinclair@chromium.org>
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,