Files

41 KiB
Raw Permalink Blame History

Values written from IDML observation

Some values the converter writes do not come from the INDD file. They are values that every IDML exported by InDesign in the corpus has, on the root styles and in the preferences. They are facts about InDesign's IDML output, not about the INDD format, and the evidence is the corpus IDML files alone. Values that nearly every IDML has are listed under Defaults.

Why they are written: IDML consumers apply their own defaults to attributes that are missing. When those defaults differ from InDesign's, the layout differs. For example, a consumer that defaults to keeping all lines of a paragraph together breaks pages differently from a document whose root style says KeepAllLinesTogether="false".

Root style values

The root styles are [No paragraph style], [No character style], the object style [None], the cell style [None] and the table style [No table style]. Every corpus IDML has all five.

tools/root_values.py reads Resources/Styles.xml of every corpus IDML and collects each attribute of the root styles, each Properties child, and each attribute of their child elements (for example TextFramePreference in the object style). It keeps a value when:

  • every IDML from some DOM version on has it, with the same value, and
  • the converter does not read it from the INDD.

The kept values are in src/idml/root_values.xml, generated by that tool. The converter writes them on its root styles. A value the converter reads from the INDD takes precedence: for the paragraph and character root styles, attributes in the text attribute table (attributes.md) are left out of the file, and any attribute the INDD supplies is written from the INDD.

The file is generated from the reference IDML of every pair that tools/compare.py compares (a little-endian INDD whose IDML has the same major version, without the privately held samples): 1,587 pairs, 1,450 distinct IDML files, DOM 7 to 21. Values that first appear after DOM 7 are written only for documents of that InDesign version or later (MinimumVersion in the file).

Root style Values Same in Written for version
[No paragraph style] 1 1,450 of 1,450 files all
3 1,333 of 1,333 files with DOM 10 or later 10 and later
2 1,213 of 1,213 (DOM 11 or later) 11 and later
5 1,041 of 1,041 (DOM 13 or later) 13 and later
1 641 of 641 (DOM 15 or later) 15 and later
1 62 of 62 (DOM 21) 21
[No character style] 1 1,450 of 1,450 all
2 1,213 of 1,213 (DOM 11 or later) 11 and later
1 1,041 of 1,041 (DOM 13 or later) 13 and later
1 641 of 641 (DOM 15 or later) 15 and later
1 62 of 62 (DOM 21) 21
Object style [None] 63 1,450 of 1,450 all
9, 22, 1, 4, 7, 4, 4, 8 all files with DOM 8, 9, 10, 11, 12, 13, 14, 15 or later from that version
9 62 of 62 (DOM 21) 21
Cell style [None] 1 1,450 of 1,450 all
Table style [No table style] 89 1,450 of 1,450 all
6 1,211 of 1,211 (DOM 11 or later) 11 and later
4 255 of 255 (DOM 18 or later) 18 and later

Left out because they vary between files:

  • [No paragraph style] (19): HyphenQuality, StyleUniqueId, the origins and some corner radii of paragraph borders and shading, and the StyleExportTagMap child.
  • [No character style]: StyleUniqueId.
  • Object style [None] (42): among them AppliedNamedGrid, AppliedParagraphStyle, StrokeWeight, BaselineFrameGridColor, the corner radii, OpticalMarginSize, TextColumnGutter, FirstBaselineOffset, the overprint settings, the flexible layout paddings and gaps, and some export options.
  • [No table style] (19): the border, row and column stroke weights, SpaceBefore, SpaceAfter, the end stroke tints, the text insets, CaptionPosition, CaptionParagraphCount and HeaderColumnCellStyle. The four region cell styles (HeaderRegionCellStyle and the others, n) are on every table root style from DOM 18 only: 24 files of DOM 10 and 17 lack them.

The converter reads many of these from the INDD: the object style settings (objects.md, object style settings and named grids), the baseline frame grid colour (preferences.md), the attributes of the root table style (tables.md), the paragraph border and shading values (attributes.md), and the style unique IDs and export settings (objects.md, styles).

Two kinds of IDML files are not evidence for the root styles, and the pair rule leaves them out: an IDML (DOM 7) beside an INDD of version 17.2 that has no root styles at all, and a big-endian pair of version 11.2 whose table style lacks four region cell style values that every other file has.

Left out because the converter reads them from the INDD: 299 attributes of [No paragraph style], listed in attributes.md. Some of these are also the same in every IDML; the INDD value is written.

The object styles other than [None] and the preferences (below) are generated from the same pairs. Values that vary in any of them are left out, even where one document is the exception: the converter writes nothing for such a key unless it reads the value from the INDD.

The cell and table root styles are written as new elements in RootCellStyleGroup and RootTableStyleGroup.

Document attributes

AccurateLABSpots="false" is on the Document element of all 654 corpus pairs' IDML files. The converter writes it. The colour settings next to it are read from the INDD (preferences.md).

Name (the package's file name) is on the Document element from DOM 13 only: 321 of 321 trustworthy references from DOM 13, 0 of 168 before.

From DOM 20.0 every Document element has AppliedMathMLRgbColor="0 0 0" and TintValue="100", and a Properties child AppliedMathMLSwatch (type enumeration) Nothing, after Label; from DOM 20.4 also PreferMathMLInEpubExport="false" (all 99 and 72 distinct corpus IDML files of those versions; none before). The converter writes them by the DOM version it writes, which the per-major blocks cannot express for 20.4. AppliedMathMLFontSize is 10 in 96 of these files and 16 in 3 of DOM 20.2, with no field found; the converter writes 10 as a default (Defaults).

Default numbering list

The root paragraph style refers to NumberingList/$ID/[Default]. Every corpus IDML file has this element in designmap.xml, with the same attributes: Name="$ID/[Default]", ContinueNumbersAcrossStories="false" and ContinueNumbersAcrossDocuments="false". The converter reads the numbering lists from the INDD (objects.md, numbering lists) and writes them after idPkg:Styles, where the IDML schema puts them. It writes this default list with these values only for a file whose lists it cannot read.

Built-in stroke styles

All 240 corpus IDML files list the same 18 StrokeStyle elements in Resources/Graphic.xml, in the same order, each with only Self and Name (StrokeStyle/$ID/Solid, $ID/Solid, and so on). The converter writes the same list, so every StrokeType it writes refers to an element in the package.

Story values

tools/element_values.py collects the values of Story, XmlStory and their StoryPreference and InCopyExportOption children from the 1,495 corpus IDML files (element_values.xml); the converter writes them where the INDD gives no value:

Element Values kept Versions
Story TrackChanges="false" 7 on
Story, XmlStory UserText="true" where written 11 on; IDML has it from version 11.2 (none of the 3,184 stories of DOM 10.0 to 11.0, every story from 11.2), and the converter writes it from INDD version 11.2
InCopyExportOption of stories IncludeGraphicProxies="true", IncludeAllResources="false" 7 on

From DOM 21.5 every Story and XmlStory also has AiGeneratedStory="false", AiModelName="$ID/", AiDigitalSourceType="$ID/", AiFirstParty="false" and AiTextContent="$ID/", after Self: 62 of 62 stories and 4 of 4 XML stories in the 4 corpus IDML files of DOM 21.5. No story of an earlier DOM has them (694 stories and 58 XML stories of DOM 21.0 to 21.4, and none of the earlier files). The value file is keyed by major version, so the converter writes these values by the DOM version it writes (DOM version, below).

The other story values are read from the INDD: StoryTitle, StoryDirection and the optical margin from story chunks, with the value of every story without the chunk when it is absent, and for the optical margin size the value of the text size unit (objects.md, story settings); IsEndnoteStory from the story class (footnotes.md); AppliedTOCStyle from chunk 0x8C40.

StoryPreference FrameType and StoryOrientation are read from story chunk 0x2EE (objects.md, story settings).

Left out because it varies: Story AppliedNamedGrid (106 of 27,816 stories name a grid, all in DOM 12 files). Before the corpus had samples typeset in Japanese, every IDML had n.

Graphic settings without an INDD field

element_values.xml holds the ClippingPathSettings values of every Image, PDF and EPS element with ClippingType="None" in the 1,495 corpus IDML files: ClippingType="None", InvertPath="false", IncludeInsideEdges="false", RestrictToFrame="false" and AppliedPathName="$ID/" (and for PDF and EPS also the values the converter reads for images). tools/element_values.py collects only the elements with None (WRITTEN_FOR); the 12,280 such elements in the current corpus (8,993 images, 2,213 PDF, 1,074 EPS) have the values above. The converter writes every attribute of the element from chunk 0x2C1A and the rules in objects.md (clipping path settings), which give these values for clipping type 0, and does not use these rows. Every ImageIOPreference has AllowAutoEmbedding="true". The converter writes the values read from the INDD first (objects.md, clipping path settings).

Over the 5,131 graphics of the trustworthy pairs, every graphic has LocalDisplaySetting="Default"; every image (3,607) ImageRenderingIntent="UseColorSettings"; every PDF and EPS (1,339) GrayVectorPolicy="IgnoreAll"; every SVG (146) UseSVGAs="EmbedCode". From DOM 21 every image, PDF and SVG has FlexItemWidthMode="FlexFixed" and FlexItemHeightMode="FlexFixed" (81 of 81), and SVG graphics from 21.2 have IsMathMLObject="false" (4 of 4). The constant values of graphic layers are in objects.md (graphic layers). The converter writes all of these.

These Link values are the same in all 4,699 links of the trustworthy pairs, and the converter writes them on every link: AssetURL="$ID/", AssetID="$ID/", LinkClientID="257" (the u32 at offset 4 of chunk 0x8C9B is 0x101 in every link), LinkObjectModified="false", CanEmbed="true", CanUnembed="true", CanPackage="true", ImportPolicy="NoAutoImport" and ExportPolicy="NoAutoExport". LinkClassID is the class of the link object (35906 for graphic links, objects.md, placed graphics). RenditionData="Actual" is on every link from DOM 13 on (3,043 of 3,043) and on none before (1,656 of 1,656); the converter writes it from version 13.

Every Link of DOM 21.5 has AiGeneratedAsset="false", AiFullyGeneratedAsset="false" and AiC2paArchiveData="$ID/", after Self (12 of 12 links in 3 IDML files; the fourth file of DOM 21.5 has no link). Every Link of DOM 21.4 and 21.5 has SourceObjectName="" (75 of 75 links in 11 files); no link of DOM 21.0 to 21.3 has it (170 links), nor does any link of an earlier DOM. No value varies, so no INDD field is identified. The converter writes them by the DOM version it writes.

Anchored object settings of page items

Where IDML writes every anchored object setting of a page item (the ten attributes AnchoredPosition, SpineRelative, PinPosition, AnchorPoint, HorizontalAlignment, HorizontalReferencePoint, VerticalAlignment, VerticalReferencePoint, AnchorXoffset and AnchorYoffset; objects.md, anchored object settings), the element also has LockPosition="false" and AnchorSpaceAbove="0". This holds for every item type and DOM version: 1,158 of 1,158 such elements in the 1,456 distinct IDML files of the corpus pairs (918 text frames, 142 ovals, 41 graphic lines, 32 polygons, 25 rectangles; DOM 8 to 21.2). No element with fewer values has either attribute (633 of 633, including all 125 group and 10 text box elements). No DOM 7 item has a complete element; the preferences and object styles of DOM 7 have both attributes. The converter adds the two values wherever it writes all ten settings.

Object styles other than the root

tools/root_values.py also collects the object styles other than [None]: 4,961 styles in the 1,450 distinct IDML files, every file having at least one. A value is kept when every such style of every IDML from some DOM version on has it, with the same value, and at least 10 files show it. The kept values are in src/idml/object_style_values.xml. The converter writes them on every object style other than [None], and writes the values it reads from the INDD (objects.md, object style settings) in their place.

Values Same in Written for version
49 1,450 of 1,450 files all
2, 22, 1, 5, 5, 4, 6, 11 all files with DOM 8, 9, 10, 11, 12, 13, 14, 15 or later from that version
5, 3, 8 255, 158 and 94 files with DOM 18, 19, 20 or later from that version
41 62 of 62 files with DOM 21 21

Among them are the nine Enable… effect flags other than EnableTransparency in the four ObjectStyle…EffectsCategorySettings elements (all true), most of ObjectExportOption, TransformAttributeOption from DOM 13, and UseFlexibleColumnWidth="false" and TextColumnMaxWidth="0" of TextFramePreference from DOM 8.

Left out because they vary or are not in every style (73): the fill, stroke, line end, gap and corner values, the Enable… attributes, ApplyNextParagraphStyle, KeyboardShortcut, AnchoredObjectSetting PinPosition, AnchorPoint, VerticalAlignment, SpineRelative and HorizontalReferencePoint, the frame fitting values, the story frame type, orientation and direction, the text wrap mode, contour type and ApplyToMasterPageOnly, the column, inset, footnote, auto-sizing and column rule values of TextFramePreference, the baseline frame grid values before DOM 18 and EnableTransparency before DOM 20. Most of these vary in a few styles of a few documents. The converter reads many of them from the INDD.

TextFramePreference FootnotesEnableOverrides="false" is on every object style, [None] included, from InDesign 13.1: 1,392 of 1,392 styles of the trustworthy pairs before 2026-10, none before. The value file has it only from DOM 14, since it is generated per major version; the converter writes it when the header or the last session of the save history is 13.1 or later (objects.md, save history).

Inks

Every Ink element of the 1,495 corpus IDML files has InkType="Normal" and PrintInk="true" (element_values.xml); the converter writes them on every ink. ConvertToProcess is read from the INDD (objects.md, inks).

Values of other elements

tools/element_values.py collects the values of other elements the converter writes from every distinct IDML of the corpus (1,495 files exported by InDesign; IDML files that lack the product of InDesign's aid processing instruction were written by a script, so they are left out). A value is kept for a range of DOM versions when every element of that kind in every file of those versions has it with the same value, and it is left out entirely when some version shows two values or elements without it. The values may differ between versions; each range needs 10 files. The kept values are in src/idml/element_values.xml, in blocks with MinimumVersion and MaximumVersion. The converter writes them after the values it reads from the INDD and only where the element lacks the attribute.

Files per DOM version: 7: 11, 8: 92, 9: 15, 10: 123, 11: 70, 12: 112, 13: 329, 14: 81, 15: 87, 16: 42, 17: 266, 18: 100, 19: 71, 20: 33, 21: 63.

Page items

Element Elements Values kept
TextFrame 58,521 LocalDisplaySetting="Default", GradientStrokeAngle, GradientStrokeHiliteLength, GradientStrokeHiliteAngle (0) from DOM 7; FlexItemWidthMode and FlexItemHeightMode (FlexFixed) from 21
Rectangle 53,413 LocalDisplaySetting, StoryTitle="$ID/" from 7
Oval 10,851 LocalDisplaySetting, StoryTitle and the gradient highlights from 8
Polygon 134,377 LocalDisplaySetting, StoryTitle and the fill gradient highlights from 7
GraphicLine 19,100 LocalDisplaySetting, LockState="None" and the gradient highlights from 7
Group 15,857 LocalDisplaySetting and the gradient highlights from 7

Each kind also has FlexItemWidthMode and FlexItemHeightMode from DOM 21, and values that the converter reads from the INDD (objects.md, page item settings), which take precedence. Values such as Name, Visible, Locked, the gradient angles and the layout constraints are not kept: they differ in some elements, and those values come from the INDD.

Form fields

tools/element_values.py also collects the form field elements (objects.md, form fields). Only buttons and multi-state objects are in enough files (282 buttons in 43 files, 18 multi-state objects in 16):

Element Values kept Versions
Button VisibilityInPdf="VisibleInPdf", HiddenUntilTriggered="false" and the page item values below DOM 8 to 18 (42 files)
Button PrintableInPdf="true" DOM 10 to 18 (37 files)
Button AppliedObjectStyle="ObjectStyle/$ID/[None]" DOM 8 to 13 (40 files)
MultiStateObject InitiallyHidden="false" and page item values DOM 8 to 13 (16 files)

The page item values are those also kept for groups: the gradient angles and highlights, LocalDisplaySetting, the layout constraints and the change counts, which the converter writes from the INDD where it has them. Button PrintableInPdf is on 216 of 284 buttons: the later versions have too few files to keep it. Check boxes, radio buttons, text boxes, combo boxes and signature fields are in fewer than 10 files each, so no value of theirs is kept; their constant flags (ReadOnly, PrintableInPdf and others) are not written.

Spreads, pages and layers

Element Elements Values kept
Spread 11,914 PageTransitionDuration="Medium", ShowMasterItems="true", FlattenerOverride="Default" from DOM 7; SpreadHidden="false" from 19
FlattenerPreference of spreads 11,914 ClipComplexRegions, ConvertAllStrokesToOutlines, ConvertAllTextToOutlines (false) and RasterVectorBalance 50 from DOM 7
MasterSpread 2,461 OverriddenPageItemProps="" from DOM 7
Page 22,877 AppliedTrapPreset="TrapPreset/$ID/kDefaultTrapStyleName" from DOM 7; SnapshotBlendingMode="IgnoreLayoutSnapshots", OptionalPage="false" from 8
Layer 2,723 ShowGuides and Expendable (true) from DOM 7

Spread PageTransitionType and PageTransitionDirection are left out: spreads of 6 files have page transitions. Page GridStartingPoint is left out: 28 pages of DOM 18 files have another value than TopOutside.

Every spread has one FlattenerPreference, so the converter writes the element on every spread. For a spread without the flattener chunk (objects.md, flattener settings) it also writes LineArtAndTextResolution and GradientAndMeshResolution: 300 and 150, or 400 and 400 after a session of a Japanese or Chinese edition, by the language code of the save history (objects.md, flattener settings). The other attributes of these elements come from the INDD (objects.md).

Document settings in designmap.xml

These elements are children of Document without Self. The tool keeps an element when every IDML from some version on has it, with the values all of them have; the converter writes it in the order of the IDML files.

Element From DOM Values kept Left out (vary)
ConditionalTextPreference 7 both
EndnoteOption 13 9 EndnoteTitle, EndnoteSeparatorText, the marker and text styles, EndnoteMarkerPositioning
TextFrameFootnoteOptionsObject 12 all 4
LinkedStoryOption 8 all 4
LinkedPageItemOption 8 all 7
WatermarkPreference 7 11 the font family, style and colour
TaggedPDFPreference 8 (element only) StructureOrder
AdjustLayoutPreference 14 4 EnableAdjustLayout, EnableAutoAdjustMargins, AllowFontSizeAndLeadingAdjustment
HTMLFXLExportPreference 10.1 both
PublishExportPreference 11 7 ImageExportResolution, PublishPdf, CoverPage, PublishDescription, PublishFileName, PublishPageRange
Html5ExportPreference 21.1 both

HTMLFXLExportPreference (EpubPageRange="", EpubPageRangeFormat="ExportAllPages") is in every IDML from DOM 10.1 (all 1,556 distinct corpus files of DOM 10.1 and later) and in none of DOM 10.0 (10 files) or earlier. The converter writes it by the DOM version it writes (10.1 for files of version 10 last saved by 10.1 or later). Over the trustworthy pairs it reproduces the element in 1,139 of 1,139 documents.

Html5ExportPreference (TextExportFormat="HtmlTag", CopyFonts="false") is in every IDML from DOM 21.1, directly after PublishExportPreference: 59 of 59 distinct corpus files of DOM 21.1 to 21.5. No file of DOM 21.0 or earlier has it (1,397 files). The values never vary. The converter writes it by the DOM version it writes.

The values left out here are read from the INDD or follow the rules of preferences.md (adjust layout; EPUB, HTML and Publish Online export; values of the exporting edition). The converter writes TaggedPDFPreference from version 7.5, which the per-major blocks cannot express.

DOM version

Every package part has the DOMVersion of the application that exported the IDML. Several releases keep the DOM version of an earlier one. Over the 1,460 pairs of the corpus of 2026-10, by the version of the last session of the save history (objects.md, save history):

Last session DOMVersion
9.1, 9.2 9.0
11.1 11.0
14.3 14.0
16.3, 16.4 16.2
17.1 to 17.4 17.0
18.1 to 18.4 18.0
19.1, 19.2 19.0
20.1 20.0
20.5 20.4
every other version seen (7.0 to 21.5) its major and minor version

The converter writes this value, from the header's version where the save history has none or names another major version. It matches 1,164 of 1,251 trustworthy pairs (the header's major version with .0 matched 668). The others are files that a later release exported without saving them: 68 sessions of 10.1 whose IDML has 10.2, 16 of 13.0 with 13.1, and 3 more; their IDML product names that release. This is a rule of the exporting edition (preferences.md, values of the exporting edition).

The later release leaves no trace in the INDD. Over all 1,462 pairs, 67 of the 68 sessions of 10.1 and all 16 of 13.0 are on platform 3 (the second u16 of the save history record; objects.md, save history), and their IDML has the same xmpMM:InstanceID as the INDD. But platform 3 does not decide the version: of the 68 platform-3 sessions of 10.1 in these pairs, one has an IDML of 10.1 (product 10.1(70)), and 2 of the 18 platform-3 sessions of 13.0 have one of 13.0. For 13.0 the other fields of the record (the build, the two u16 not identified) are the same in both groups; for 10.1 the second u16 not identified is 2 in the one exception and 1 in the 67, a difference of one document. The converter writes the version of the last session.

Assignment (1,495 elements, one per file): UserName="$ID/", ExportOptions="AssignedSpreads", IncludeLinksWhenPackage="true", FilePath="$ID/" and FrameColor Nothing, from DOM 7.

Language quotes

A language object stores its quotes only in chunk 0x2D26, which 34 language objects of the corpus have (objects.md, languages); the converter writes those. For the others, for each language name the tool keeps SingleQuotes and DoubleQuotes when every IDML Language element with that name has the same value, in at least 3 files (a Keyed block of the values file): 64 languages.

The tool reads IDML only, so it counts the languages with chunk 0x2D26 too. Over the 3,139 IDML languages of the corpus pairs matched with an INDD language, only Romanian differs because of them: every Romanian language without the chunk has ‚’ and „” (21 of 21 files), and the one with the chunk ‘’ and »«. The converter writes these quotes for Romanian without the chunk. Three names differ without the chunk too, and are left out: Japanese ('' and "" in 162 files, ‘’ and “” in 2), Korean (457 and 7) and Hebrew (74 and 1, ‘’ and “”). No stored value tells the exceptions apart; they follow the dictionary preferences of the exporting computer.

These exceptions follow no stored value. The converter writes the common value, '' and "", for Japanese, Korean and Hebrew languages without the chunk as a default (Defaults).

Colours are keyed by Model: every spot colour has SpotInkAliasSpotColorReference="n" (5,182 of 5,182 in the 1,689 distinct corpus IDML files outside the privately held samples, DOM 8 to 21), and no process (46,211) or registration (1,685) colour has the attribute. No ink of the corpus has an alias. The converter writes it after ColorOverride on spot colours: 5,090 of 5,090 values of the trustworthy pairs.

Pasted smooth shades are keyed the same way by ContentsType: every ConstantShade (and every AxialShade) has ContentsVersion="0", SpotColorList="", ContentsEncoding="Ascii64Encoding", ColorEditable and ColorRemovable true, Visible="false" and SwatchCreatorID="7937"; constant shades also ContentsMatrix="1 0 0 1 0 0".

Paragraph and character styles

The styles other than the root styles (8,603 paragraph and 3,666 character styles in the IDML files):

Values kept Styles Versions
PreviewColor Nothing paragraph 7 on
EpubAriaRole="" paragraph and character 21 on
IncludeClass="true" character 13 on

Character styles' PreviewColor and ExtendedKeyboardShortcut are left out: a few styles have other values.

TOC styles (1,556 in the IDML files) all have RunIn="false" and IncludeHidden="false". SetStoryDirection varies and is read from the INDD (objects.md, table of contents styles).

SplitDocument, EmitCss and IncludeClass are read from the INDD (objects.md, styles, export settings), as are keyboard shortcuts.

Table and cell styles other than the root styles (1,587 and 138 in the IDML files) all have KeyboardShortcut="0 0" (cell styles from DOM 8, with 44 files) and ExtendedKeyboardShortcut="0 0 0" from DOM 15; the converter writes them. Imported and StyleUniqueId come from the INDD (objects.md, styles).

Sections

Every Section of DOM 8 (96 sections in the corpus IDML files) has Pagination="AutoPaginate" and PaginationMaster="n", after AlternateLayout; no section of another DOM version has them. The tool keeps them for DOM 8 (Values block of version 8 to 8), and the converter writes them there: 85 of 85 values each in the trustworthy pairs.

Swatches

Element Values kept
Tint ColorOverride="Normal", ColorEditable, ColorRemovable, Visible (true) and SwatchCreatorID="7937" from DOM 8 (270 tints in 142 files); ConvertToHsb="false" from 17
Gradient SwatchCreatorID="7937" (and the flags, which the converter reads) from DOM 7
Swatch (None) SwatchCreatorID="7937" from DOM 7

Colours have their creator and alternate colour in the INDD (objects.md, colours).

Trap presets

All 1,495 IDML files list the same two TrapPreset elements at the end of Resources/Styles.xml, with the same attributes: $ID/k[No Trap Preset] and $ID/kDefaultTrapStyleName, which every page applies. The converter writes the list (a List block of the values file). One DOM 12 file has a third preset, named by the user, after these two. Its INDD object is not decoded, so the tool leaves presets with such names out of the list.

Values written where the converter writes the attribute

Some attributes are only on some elements; IDML writes them where a frame's value differs from its object style, or from some version on. For these the tool keeps a value when every element that has the attribute has the same value (WhenWritten blocks). The converter writes them on every text frame of those versions:

TextFramePreference values Versions
VerticalThreshold="0" 7 on
UseFlexibleColumnWidth="false" 8 on
FootnotesEnableOverrides, FootnotesSpanAcrossColumns (false) 13 on
ColumnRuleOffset, ColumnRuleTopInset, ColumnRuleBottomInset (0), ColumnRuleInsetChainOverride="true", ColumnRuleStrokeTint="100", ColumnRuleStrokeType="StrokeStyle/$ID/Solid", ColumnRuleOverprintOverride="false" 15 on

The first version of the column rule and footnote values is also where the converter starts writing the column rule and footnote values it reads from the INDD (objects.md, text frame preferences).

Export options of page items

ObjectExportOption of page items has different attributes in different INDD versions, major and minor. Over the 92,409 page items of the trustworthy pairs there is no exception inside a version:

INDD version Attributes in addition to the common set
7 no ObjectExportOption
8.0–9.1 CustomImageConversion="false", CustomImageSizeOption="SizeRelativeToPageWidth"
9.2 also UseOriginalImage="false"
10.0 EpubType="$ID/", UseExistingImage="false", CustomHeightType="DefaultHeight", CustomHeight="$ID/", CustomWidthType="DefaultWidth", CustomWidth="$ID/", CustomImageConversion="false", UseOriginalImage="false"
10.1 on EpubType="$ID/", SizeType="DefaultSize", CustomSize="$ID/", PreserveAppearanceFromLayout="PreserveAppearanceDefault"
21.0 on also EpubAriaRole="$ID/"
21.1 on also EpubAriaLabel="$ID/", EpubAriaLabelSourceType="AutomaticARIALabel"
21.4 on also AIGeneratedAltText, AltTextGenerationError and AltTextCropSyncRect, read from chunks 0x1E260–0x1E262 (objects.md, generated alternative text; false, false and empty without them)

The common set, on every page item from version 8 on: the alternative text and tagging values (AltTextSourceType, ActualTextSourceType, CustomAltText, CustomActualText, ApplyTagType, read from chunk 0x1E206, objects.md), ImageConversionType="JPEG", ImageExportResolution="Ppi300", GIFOptionsPalette="AdaptivePalette", GIFOptionsInterlaced="true", JPEGOptionsQuality="High", JPEGOptionsFormat="BaselineEncoding", ImageAlignment="AlignLeft", ImageSpaceBefore="0", ImageSpaceAfter="0", UseImagePageBreak="false", ImagePageBreak="PageBreakBefore", CustomImageAlignment="false", SpaceUnit="CssPixel", CustomLayout="false", CustomLayoutType="AlignmentAndSpacing", and the Properties children AltMetadataProperty and ActualMetadataProperty (their values also from chunk 0x1E206). These are constant in all 93,701 elements except ImageAlignment (3 AlignCenter) and SizeType (3 RelativeToTextFlow), all in the same 3 items of one document; their INDD field is not identified.

Object styles, [None] included, have ObjectExportOption from version 9 on (all 1,882 styles of those versions), with the common set (all values constant) and the same version-dependent attributes, except that 21.4 on adds only AltTextCropSyncRect="".

The converter writes these values by the version of the INDD file. It leaves out CustomImageSizeOption: the IDML schema the output is checked against does not allow that value. The ObjectExportOption blocks of element_values.xml, root_values.xml and object_style_values.xml are not used, because those files are keyed by major version only.

Every InCopyExportOption of a rectangle, oval or polygon in the 1,495 corpus IDML files has IncludeGraphicProxies="true" and IncludeAllResources="false" (element_values.xml; ovals from DOM 8, as no DOM 7 file has one). The converter writes the element with these values on those items.

Column direction of pages

The ColumnDirection of pages is read from the INDD (objects.md, page settings), and that of MarginPreference and DocumentPreference too (preferences.md, margins and columns of new pages).

Font platform name

PlatformName is $ID/ in every Font element of the corpus IDML files except the fonts of missing-font records, where it is read from the record (fonts.md, missing fonts). The converter writes $ID/ on every other font.

Number format

IDML writes a number as the shortest decimal that reads back as the same 64-bit value. When two decimals of that length read back as the value, IDML takes the one nearest to the exact binary value, and of two equally near (the value lies exactly halfway, common for values that came from 32-bit floats) the one with the even last digit. For example the value 150.235992431640625 is written 150.23599243164062, not …063. Numbers below 1e-4 are written with an exponent of at least two digits (5.684341886080802e-14, 1.8897456811828306e-05); all others are written in plain notation.

Evidence: of the 1,090,937 distinct numeric texts in the attributes of the 654 reference IDMLs of the corpus before 2026-10, the rule gives the same text for all but 67, which are text values rather than numbers (DOMVersion="17.0", 2.000, 0.80). Rust's shortest form differs on 7,674 of them: ties written with the odd digit, and small numbers written without an exponent. The INDD values of GraphicBounds (chunk 0x1633), written this way, equal the IDML text in all 1,774 PDF, 407 EPS and 233 SVG graphics of the 803 pairs (compare.py compares Properties children as text). The converter writes every number this way.

Preferences

Resources/Preferences.xml of every corpus IDML has the same 41 top-level elements (TextDefault, TextPreference, TextFramePreference, PageItemDefault, StoryPreference, FootnoteOption, TransparencyDefaultContainerObject and others; the DOM 7 file lacks EPubFixedLayoutExportPreference). tools/root_values.py collects each attribute, Properties child and child element attribute of these elements with the same rule as for the root styles, and writes the kept values to src/idml/preference_values.xml. The converter writes those elements in the order the IDML files list them.

Values Same in Written for version
697 1,450 of 1,450 files all
73, 2, 14, 1, 1, 21, 4, 10 all files with DOM 8, 9, 10, 11, 12, 13, 14, 15 or later from that version
2 255 of 255 files with DOM 18 or later 18 and later
19 94 of 94 files with DOM 20 or later 20 and later

For example TextDefault keeps 140 of its 318 values, TransparencyDefaultContainerObject all 352 and TextFramePreference 29 of 34.

Left out:

  • 593 values that vary between files, for example the page size, margins and grid settings, 178 values of TextDefault (among them the font and point size, KeepFirstLines and KeepLastLines) and 30 of TextPreference. Most of these differ in one to five documents; the converter does not read them from the INDD yet.
  • The document setup the converter reads from the INDD (objects.md): PageHeight, PageWidth, FacingPages, Intent, PageBinding and the four bleed offsets of DocumentPreference. The converter writes its own values for these and adds the observed values for the rest of the element. ViewPreference gets the RulerOrigin read from the INDD (preferences.md).
  • AppliedGridObjectStyle of PageItemDefault, which names a style other than a root style that the package need not contain.
  • Values first seen in a later version that fewer than 10 files show.

tools/element_values.py also collects the preference elements from all 1,495 IDML files of the corpus (paths Preferences/<tag> in src/idml/element_values.xml), with its rule for other elements (per range of DOM versions, at least 10 files). The converter adds these values where preference_values.xml has none. They add, for example, the auto-sizing values of TextFramePreference for DOM 8 to 11 and the values of EPubExportPreference and HTMLExportPreference that all files from DOM 8 on have. PageItemDefault values that name an object style are written only when the package has that style.

Values kept despite unpaired files. XMLImportPreference AllowTransform="false", ImportCALSTables="true", ImportTextIntoTables="true", ImportToSelected="true", RemoveUnmatchedExisting="false", RepeatTextElements="true" and DictionaryPreference MergeUserDictionary="false" are the same in all 803 pairs of the corpus before 2026-10. Two IDML files of the 827 it had differ: one in the six XMLImportPreference values, one in MergeUserDictionary. Both were exported by an earlier version than their INDD was last saved with, so they are not pairs, and the INDD cannot show which field holds the value. The values are probably stored in the INDD; with no pair that varies, the field cannot be found. element_values.py keeps these values from the other files (LATER_INDD_EXCEPTIONS).

DOM 7. DOM 7 references have no EPubExportPreference and no HTMLExportPreference (7 of 7 trustworthy pairs before 2026-10; preference_values.xml lists their values from DOM 8). The converter leaves both out before DOM 8.

Some of these values are probably stored in the INDD and may differ in a document outside the corpus; none of them is read from the INDD yet. A sample typeset vertically shows this: two 2-byte fields of the preferences object (chunks 0xCD14 and 0xCD1C) are 1 there and 0 in all 250 distinct little-endian public files. The print PDF cannot show which preference each field holds, so they are not mapped.

Defaults

A default is a value the converter writes although no INDD field holds it and a few reference IDML files have another value. The converter writes it because it is the value of nearly every reference, and a missing attribute leaves a consumer to its own default, which can differ. Nothing stored tells the exceptions apart. Counts are over the 1,252 trustworthy pairs (docs/measurement.md), for the versions given.

Element Attribute Value DOM versions Trustworthy references with the value
PrintPreference TilingType Auto all 1,251 of 1,252 (1 AutoJustified)
TextPreference HighlightKeeps false all 1,248 of 1,252
TextPreference HighlightSubstitutedFonts true all 1,249 of 1,252
ViewPreference GuideSnaptoZone 4 all 1,247 of 1,252 (5 2)
ViewPreference ShowNotes true all 1,233 of 1,252
XMLExportPreference ViewAfterExport false all 1,251 of 1,252
DocumentPreference SpreadHiddenVisibility false 20.0 on 75 of 76
Document AppliedMathMLFontSize 10 20.0 on 75 of 76 (1 16, DOM 20.2)
Article ArticleExportStatus true all 31 of 31 articles in 13 pairs; no other value in 3,557 corpus IDML files
MatchParagraphStylePreference (running header) whose settings parse with c 0 or 1 DeleteEndPunctuation false all 1,288 of 1,288; no other value in 3,568 corpus IDML elements (text-variables.md, settings)
Language named Korean, Japanese or Hebrew, without chunk 0x2D26 SingleQuotes, DoubleQuotes '', "" all Korean 448 of 455, Japanese 128 of 130, Hebrew 65 of 66 languages

No reference before DOM 20.0 has SpreadHiddenVisibility or AppliedMathMLFontSize, and every one from 20.0 has both. For ArticleExportStatus no reference has another value, so a stored field cannot be told apart (objects.md, articles). The quotes of the three languages vary with the dictionary preferences of the exporting computer (language quotes, above).

Document UntitledDocumentCount is not written. Every DOM 12 reference has it (directly after StoryList, 1 in 68 of 72), and no other. No stored field follows it; it most likely depends on the session of the exporting InDesign. The published IDML schema does not allow it, so writing it would make the package fail validation.

Defaults of other elements are documented with their objects:

  • Movies and sounds: objects.md, movies and sounds, "Values without a stored field".
  • Button behaviours: objects.md, button behaviours, "Values with no stored field".
  • Timing lists, motion presets and animation settings: objects.md, values without a stored field.
  • Linked story options (three attributes, 30 of 30 stories), Word import options (8 items, 39 of 39 stories) and Excel import options (6 items, 9 of 9 stories): objects.md, story links and placed text. No reference has another value.