41 KiB
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 theStyleExportTagMapchild.[No character style]:StyleUniqueId.- Object style
[None](42): among themAppliedNamedGrid,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,CaptionParagraphCountandHeaderColumnCellStyle. The four region cell styles (HeaderRegionCellStyleand 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.
Links
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,KeepFirstLinesandKeepLastLines) and 30 ofTextPreference. 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,PageBindingand the four bleed offsets ofDocumentPreference. The converter writes its own values for these and adds the observed values for the rest of the element.ViewPreferencegets theRulerOriginread from the INDD (preferences.md). AppliedGridObjectStyleofPageItemDefault, 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.