~lucidiot's wiki

Microsoft Works Word Processor Format Gallery

Under the Format menu of Works Word Processor, the Format Gallery dialog box allows formatting a selection or the entire document using a font set and a color set. They both have a single word as a name, so the combination creates a two-word style, for example Hefty Spice or Casual Ocean. Different styles are being used depending on the template, but for any non-built-in template or for blank documents, a “general” style file will be used. Up to 64 custom styles can also be saved, and those will ignore the selected font and color sets.

The Format Gallery was introduced in Works 6.0, in 2001. I have for now tested this with Works 7.0 on Windows 98SE, 8.0 on Windows 2000, and 9.0 on Windows XP.

The default styles are loaded from text files, and custom styles are managed in the Registry. Both share the same options, so I will describe the two storage methods first, then describe all the available options.

Format files

The default styles for templates and for blank documents are Windows-1252 text files with a .fmt extension, found at %Program Files%\Microsoft Works\<LCID>\WkThm*.fmt. The default style for blank documents (“general”) is called WkThmGen.fmt. Removing all the other .fmt files does not seem to have any effect, even when using the various built-in templates offered in the Task Launcher, so I am not sure what they really are for.

Format files define one or more style sets, followed by one or more color sets.

Statements

Format files are parsed as a series of tokens separated by one or more whitespace characters. All whitespace characters appear to be supported. Tokens are at most 63 characters long.

Statements are made of one token specifying the instruction, and one or more tokens specifying the arguments. Most statements require only one token.

Style sets

Style sets are a list of one or more styles. They have a name, which is a single token, and a zero-based numeric index, which is incremented with each new style set.

Duplicate names are allowed. Duplicate or non-sequential indices are not permitted.

The StyleSet statement exits the context of any previous style set and style, and creates a new one:

StyleSet  0 Simple

Styles

Styles are a list of zero or more style options. They have a zero-based numeric index, which is incremented with each new style within a style set. Duplicate or non-sequential indices are not permitted.

The Style statement exits the context of any previous style, and creates a new style within the same style set:

Style 4

Styles that define zero style options will not cause any error, but they will not be displayed in the Format Gallery.

Style options

A style option defines some attribute on a style, like the font name, size, color, text alignment, etc.

They refer to each of those attributes by using integer IDs. It is normally expected that one ID will be set only once in a style, but repeated definitions are allowed.

When the same attribute is defined multiple times in the same style:

  • The first statement is displayed in the style’s tooltip in the Format Gallery, and actually set when clicking the style.
  • The last statement is used to build the style’s preview in the Format Gallery, as well as detecting whether the style is currently applied to the selected text.
  • Any intermediate statements are ignored.

For most attributes, just one token will be allowed and used as the value. For attributes related to font names, every token will be consumed until a line break. This allows using font names with spaces, like Century Gothic. Font names are limited to 63 characters, as if they were a single token.

Attributes have different data types, and the exact kinds of tokens allowed depend on those types. See the Data types section.

Here is an example with three options:

1 1 4 Century Gothic
5 64

1 1 makes the text bold, 4 Century Gothic sets the font name and requires a line break to end, and 5 64 sets the font size to 64 points.

Color references

Within a style, the ColorIndex statement makes a reference to a color by its index within any color set.

Which color set is being referenced is unknown, as this is a choice left to the user. This implies that all color sets should have an equal amount of colors, and that each color index should have some semantic meaning, such as “primary color”, “accent color”, etc.

The BackgroundColorIndex statement is also allowed, and follows the same rules. It however is not displayed in the Format Gallery’s preview, or applied.

ColorIndex 9
BackgroundColorIndex 17

Color sets

Color sets are a list of one or more colors. They have a name, which is a single token, and a zero-based numeric index, which is incremented with each new color set.

Duplicate names are allowed. Duplicate or non-sequential indices are not permitted.

The ColorSet statement exits the context of any previous color set, and creates a new one:

ColorSet 7 Citrus

Colors

Color statements define an RGB color within a color set. They have a zero-based numeric index, which is incremented with each new color within a color set. Duplicate or non-sequential indices are not permitted.

Each of the three red, green and blue components must always be specified. They accept numbers between 0 and 256.

The value 256 is only allowed when all three components are equal to 256; if only one or two or them is set to 256, an error occurs and the Format Gallery is disabled. Having all three components set to 256 sets the color to Automatic.

Color 2 Red 0 Green 255 Blue 128
Color 3 Red 256 Green 256 Blue 256

Comments

A single token starting with a # character may be skipped, but only in the following cases:

  • Immediately before a StyleSet statement;
  • Immediately before a Style statement, for any style other than the first style of a style set (Style 0);
  • Immediately before a ColorSet statement.

EBNF grammar

char = ? any Windows-1252 non-whitespace printable character ? ;
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
space = ? any Windows-1252 whitespace character ? ;
spaces = space, { space } ;
line break = ? ASCII characters 10 (line feed) or 13 (carriage return) ? ;

token = char, 62 * [ char ] ;
integer = ( "-" | "+" | digit ), 62 * [ digit ] ;
float = ( [ integer ], [ ".", { digit } ], [ ( "e" | "E" ), [ integer ] ] ) - "" ;

comment = "#", 62 * [ char ];

style declaration = ( comment, spaces ), "Style", spaces, integer ;

numeric style option = integer, spaces, token ;
color option = ( "Background" ), "ColorIndex", spaces, integer ;
font option = integer, spaces, char, 62 * { char | space }, line break ;

style option = color option | numeric style option ;
style = style declaration, { spaces, style option } ;

style set declaration = ( comment, spaces ), "StyleSet", spaces, integer, spaces, token ;
style set = style set declaration, spaces, { style, spaces }, style ;

red = "Red", spaces, integer ;
green = "Green", spaces, integer ;
blue = "Blue", spaces, integer ;
color = "Color", spaces, integer, spaces, red, spaces, green, spaces, blue ;

color set declaration = ( comment, spaces ), "ColorSet", spaces, integer, spaces, token ;
color set = color set declaration, spaces, { color, spaces }, color ;

format file = style set, { spaces, style set }, spaces, color set, { spaces, color set } ;

Failure modes

As it was never expected for anyone other that Microsoft to edit those files, the parser lacks many defenses against invalid syntax. This leads to various possible errors, and I am documenting here the ones I have met.

Buffer overrun

The Visual C++ runtime library shows an error dialog reporting a buffer overrun in the following cases:

  • Any single token exceeds 63 characters.
  • A font name exceeds 63 characters.

Unknown software exception

Windows reports that Word Processor has failed with an unhandled unknown software exception in the following cases:

  • Referencing a non-existent color with ColorIndex or BackgroundColorIndex;
  • Referencing a color with ColorIndex or BackgroundColorIndex whose index is duplicated in the currently selected color set;
  • Referencing a color with ColorIndex or BackgroundColorIndex whose definition in the currently selected color set is preceded by unexpected statements.

Memory access violation

In some extreme cases, it is possible to get Word Processor to try to access memory at addresses that do not exist:

  • Defining a style option for the IDs 48, 61 or 62 with very large integers;
  • Defining a style option for the IDs 12804 and above with any value.

Missing files error

In the cases where parsing errors are properly handled, the Format Gallery may show an error dialog box:

Works cannot find the files necessary to start the Works Format Gallery. The files may have been moved or deleted. To restore the files, reinstall Works, and then try starting the Format Gallery again.

Clicking OK causes the Format Gallery button in the toolbar and under the Format menu to be disabled, but the rest of the software works as expected.

I have hit this error in the following cases:

  • Deleting the WkThmGen.fmt file;
  • Using unknown statements;
  • Using statements that are unexpected in the current context, for example defining a Color inside a style set;
  • Having zero style sets defined in the file;
  • Having zero color sets defined in the file;
  • Defining a style set after a color set;
  • Defining a style or color set with a duplicate or non-sequential index;
  • Using an invalid type for a style option.

Custom styles

Custom styles are stored as registry keys, with a lot more detail than for Spreadsheet or Database. Here is the default style in a blank document, stored as a custom style in the registry, under HKEY_CURRENT_USER\Software\Microsoft\Works\<Version>\Themes\CustomStyles.

Each key is named after a base 10 index, padded with zeroes to 8 characters. You can create keys with different names, and they will be correctly parsed. Adding or deleting a style will rename those unexpected names, ordering the keys alphabetically.

Here is an example of the registry key created when saving the default style of a blank document as a custom style:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Works\9.0\Themes\CustomStyles\00000000]
"pidBold"=dword:00000000
"pidItalic"=dword:00000000
"pidForeColor"=dword:ff676983
"pidTextForeColor"=dword:ff676983
"pidFontName"="Times New Roman"
"pidFontSize"=dword:41200000
"pidEASpacing"=dword:00000000
"pidStrikeThrough"=dword:00000000
"pidUnderline"=dword:00000000
"pidCaps"=dword:00000000
"pidEmboss"=dword:00000000
"pidEngrave"=dword:00000000
"pidShadow"=dword:00000000
"pidOutline"=dword:00000000
"pidSuperSub"=dword:00000000
"pidAlign"=dword:00000000
"pidLeftIndent"=dword:00000000
"pidRightIndent"=dword:00000000
"pidFirstLineIndent"=dword:00000000
"pidSpaceBefore"=dword:00000000
"pidSpaceAfter"=dword:00000000
"pidLineSpacingRule"=dword:00000000
"pidEnglishWordwrap"=dword:00000001

Data types

The various available style options have different data types, which are serialized differently in the format files and the Registry.

Integer

All integers are signed and use 32 bits, meaning that they allow values between -2147483648 and 2147483647.

In format files, they are a series of digits without spaces, optionally preceded by either a plus or a minus sign.

It is also possible to use the plus or minus sign alone. +0, -0, 0, +, -, +000 will all mean zero.

In the Registry, they are represented as a DWORD, as it is 32 bits in size.

Boolean

Booleans do not really exist. They are stored like integers, and allow the same values as integers, but the only truly significant information is whether they are zero or anything else. Zero means false, anything else means true.

Float

Decimal values are represented using IEEE 754 single-precision floating point numbers, known as float in most languages (not double). They are 32 bits in size.

In format files, they can also be represented in scientific notation. All of the following values are valid floating point numbers:

0
3.14159265390
+4
+4.2
0.
.0
.
+
-
-0000.
-.
1e4
21.22E85
+0e000000000
22e+4
+.E-

In the Registry, they are represented as a DWORD, as it is 32 bits in size.

String

Strings are only used to define font names.

In format files, they obey the special parsing rule where all tokens will be parsed until the next line break, to allow for spaces to be used. They cannot exceed 63 characters in total.

In the Registry, they are stored as a REG_SZ value. If they exceed 63 characters, they are truncated without causing any error.

Color

Some style options, such as border colors, do not reference the colors defined in a format file’s color set at all. Those custom colors are stored as 32-bit integers, and follow the same serialization rules as discussed for integers.

The color integers are interpreted as 0x00BBGGRR, where B, G and R are the blue, green and red components respectively.

The code 0xff676983, or 2204723199 in decimal (little-endian), means that the color is set to Automatic instead of being a regular RGB color.

Style options

Bold

Format file ID
1
Registry value
pidBold
Data type
Boolean
Default value
0

Defines whether or not the text is bold.

Italic

Format file ID
2
Registry value
pidItalic
Data type
Boolean
Default value
0

Defines whether or not the text is italic.

Underline

Format file ID
3
Registry value
pidUnderline
Data type
Integer
Default value
0

Defines the style of underline to be applied on the text:

0
No underline.
1
Regular underline.
2
Only words, not whitespace, are underlined.
3
Double underline.
4
Dotted underline.
6
Thick underline.
7
Dashed underline.
9
Dot-dashed underline.
10
Dot-dot-dashed underline.
11
Wavy underline.
16
Thick wavy underline.
17
Thick dotted underline.
18
Thick dashed underline.
19
Thick dot-dashed underline.
20
Thick dot-dot-dashed underline.
21
Dashed underline, with long dashes.
22
Thick dashed underline, with long dashes.
23
Double wavy underline.

When invalid values are used, applying the style will leave the current setting unmodified.

Strikethrough

Format file ID
7
Registry value
pidStrikeThrough
Data type
Boolean
Default value
0

Defines whether the text is stricken through.

Font name

Format file ID
4
Registry value
pidFontName
Data type
String
Default value
Arial in the Format Gallery’s preview. The font does not change when applying the style.

Defines the name of the font to apply. When this is not set, or when the font does not exist, the Format Gallery’s preview default to displaying Arial instead, and applying the style leaves the current font unchanged.

Font size

Format file ID
5
Registry value
pidFontSize
Data type
Float
Default value
Current font size

Defines the font size, in points:

  • Decimal values between 1 and 10000 points will be correctly applied.
  • Negative values, zero, or values greater than 10000 points will cause the font size to be left unchanged when the style is applied.
  • Values greater than 1638 points and less than 10000 points will cause the font size input to be empty in the toolbar when the style is applied.
  • Values greater than 2 billion points or less than -2 billion points will be displayed incorrectly in the Format Gallery’s tooltip.
  • Obnoxiously large values written in the scientific notation will cause Word Processor to freeze on startup with 100% CPU usage on one core. The larger the value, the longer the freeze.
  • Overwhelmingly large values, in my tests in excess of 107×1028, will cause Word Processor to just ignore the exponent part of the scientific notation entirely, and thus start normally.

Foreground color

Format file ID
ColorIndex
Registry value
pidForeColor
Data type
Color
Default value
Automatic

Defines the color to apply to the text. In format files, this should refer to a color in a color set.

Text foreground color

Format file ID
Registry value
pidTextForeColor
Data type
Color
Default value
Automatic

This registry value gets created automatically when saving a custom style. Changing it in the Registry will affect the color shown in the Format Gallery’s preview, but the regular pidForeColor will still be the color used when applying the style.

Subscript and superscript

Format file ID
8
Registry value
pidSuperSub
Data type
Integer
Default value
0

Defines whether the text is a subscript or superscript:

0
Normal script.
1
Superscript.
2
Subscript.

When invalid values are used, applying the style will leave the current setting unmodified.

Capitalization

Format file ID
9
Registry value
pidCaps
Data type
Integer
Default value
0

Defines which capitalization mode to apply:

0
No automatic capitalization.
1
Small capitals.
2
All capitals.

When invalid values are used, applying the style will leave the current setting unmodified.

Embossing effect

Format file ID
18
Registry value
pidEmboss
Data type
Boolean
Default value
0

Defines whether an embossing effect is applied to the text, making it appear as if it was protruding out of the page. This cannot normally be set simultaneously with the engraving, shadow or outline effects.

Engraving effect

Format file ID
19
Registry value
pidEngrave
Data type
Boolean
Default value
0

Defines whether an engraving effect is applied to the text, the opposite of embossing. This cannot normally be set simultaneously with the embossing, shadow or outline effects.

Shadow effect

Format file ID
20
Registry value
pidShadow
Data type
Boolean
Default value
0

Defines whether a shadow is projected to the bottom-right of the text. Embossing applies an equivalent of a very thin shadow, but this actual shadow gets larger with larger font sizes. This cannot normally be set simultaneously with the embossing, engraving or outline effects.

Outline effect

Format file ID
21
Registry value
pidOutline
Data type
Boolean
Default value
0

Defines whether only the outline of each letter is drawn in the text color, with the inner parts remaining transparent. This cannot normally be set simultaneously with the embossing, engraving or shadow effects.

Alignment

Format file ID
10
Registry value
pidAlign
Data type
Integer
Default value
0

Defines the text alignment of the paragraph:

0
Text aligned to the left.
1
Text aligned to the right.
2
Centered text.
3
Justified text.
4
Justified text, but instead of only adjusting the width of whitespace to evenly distribute the words across the line, the spacing between all characters is adjusted. This value cannot be set directly in Works, but is displayed correctly within the Format Gallery and called Distributed Letter Aligned.
5
Justified text, but when a line only contains fullwidth characters from East Asian languages, the space between those characters is also adjusted, not only the width of whitespace. This results in better text justification when the text includes those characters. This value cannot be set directly in Works, at least not in a Western edition, but is displayed within the UI as the regular justified alignment (value 3). The Format Gallery displays it as East Asian Justified Aligned in the style’s tooltip.
6
Justified text, but when a line includes only one word, the spacing between the word’s characters is adjusted so the word spreads out through the whole line, as in Distributed Letter Aligned. This results in better text justification with a large font size or narrow paragraph width. This value cannot be set directly in Works and is rather poorly handled in the UI, but the Format Gallery displays Newspaper Aligned in the style’s tooltip.
7
The combination of the behaviors of values 5 and 6, displayed in the Format Gallery as East Asian Newspaper Aligned. When a line only contains fullwidth characters from East Asian languages, or a single word in other alphabets, then the space between all characters is adjusted, not just the width of whitespace. This is poorly handled in the UI, as if no alignment at all was selected.

When invalid values are used, applying the style will leave the current setting unmodified.

Left indentation

Format file ID
22
Registry value
pidLeftIndent
Data type
Float
Default value
0

Defines the indentation of a paragraph from the left side, in points.

Right indentation

Format file ID
23
Registry value
pidRightIndent
Data type
Float
Default value
0

Defines the indentation of a paragraph from the right side, in points.

First line left indentation

Format file ID
24
Registry value
pidFirstLineIndent
Data type
Float
Default value
0

Defines the indentation of the first line of each paragraph from the left side, in points. This overrides the normal left indentation, instead of combining both.

Paragraph top margin

Format file ID
33
Registry value
pidSpaceBefore
Data type
Float
Default value
0

Defines a vertical space to add before each paragraph, in points.

Paragraph bottom margin

Format file ID
34
Registry value
pidSpaceAfter
Data type
Float
Default value
0

Defines a vertical space to add after each paragraph, in points.

Line spacing

Format file ID
36
Registry value
pidLineSpacingRule
Data type
Integer
Default value
0

Configures the spacing of each line of a paragraph:

0
Single
1
1.5 lines
2
Double
5
Custom value

Other values will fall back to 0.

Custom line spacing

Format file ID
35
Registry value
pidLineSpacing
Data type
Float
Default value
0

Defines a custom line spacing, in points. This is ignored when the line spacing rule is not set to 5.

List bullet character

Format file ID
11
Registry value
pidBulletString
Data type
Integer
Default value
159

Code point of one character used as the bullet for bulleted lists. When using a numbered list, this is set to 0x02a0974c, but any other value is also ignored.

When this is set without configuring a list style, this can cause strange display issues where applying the style no longer marks it as being applied.

When this is left unset while the list type is set for a bulleted list:

  • The style preview will no longer display the text as being in a bulleted list.
  • The style’s tooltip still includes Bulleted List.
  • Applying the style still enables a bulleted list.

List indentation

Format file ID
12
Registry value
pidListTab
Data type
Float
Default value
18

Defines the indentation added to the text after the bullet or number, in points. Negative values will be reset to zero.

List alignment

Format file ID
13
Registry value
pidListAlign
Data type
Integer
Default value
0

Defines the text alignment of the bullets, using the same values as for regular text alignment. This is useful for numbered lists using Roman numerals or having many items, where some bullets will have a different amount of characters. This cannot be configured within Works, but is supported.

List level

Format file ID
14
Registry value
pidListLevel
Data type
Integer
Default value
0

This is defined in some DLLs but does not seem to have any effect anymore.

List starting number

Format file ID
15
Registry value
pidListStart
Data type
Integer
Default value
1

Integer. Starting number, for numbered lists. Negative values are unsupported and will default to 1.

When the value 0 is set, which is possible through the Bullets and Numbering dialog box, only some numbered lists will work correctly:

  • Arabic numerals will work correctly: `0) 1) 2)`.
  • Alphabetic numbering will result in a duplicate: `A) A) B)`.
  • Roman numerals will have an empty bullet: ) I) II).
  • Chinese numerals will work correctly: 零) 一) 二).

When a list is long enough in a document that the number 2147483647 is reached, any subsequent items in the list will have no number attached: 2147483646) 2147483647) ) ) ) )

List type

Format file ID
16
Registry value
pidListType
Data type
Integer
Default value
0

Defines which type of bulleted or numbered list is being applied:

0
No list style.
2
Numbered list, in the form %d) where %d is the current number: 1), 2), 3)
3
Numbered list, in the form %d) where %d is the current lowercase letter: a) b) c). This is not available in the Bullets and Numbering dialog box, but is supported.
4
Numbered list, in the form %d) where %d is the current letter: A) B) C)
5
Numbered list, in the form %d) where %d is the current number, in lowercase Roman numerals: i) ii) iii). This is not available in the Bullets and Numbering dialog box, but is supported.
6
Numbered list, in the form %d) where %d is the current number, in uppercase Roman numerals: I) II) III)
8
Numbered list, in the form %d) where %d is the current number, in Chinese numerals: 一) 二) 三).
9
Numbered list, in the form %d) where %d is the current number, in Traditional Chinese financial numerals: 壹) 貳) 參)
10
Numbered list, in the form %d) where %d is the current number, in Chinese numerals: 一) 二) 三).

Adding 0x20000 to the above values will cause the numbered list to use a dot . instead of a closing parenthesis ) to separate the number and the text.

Invalid values will cause Works to detect a numbered list and display it in the toolbars and the style preview, but the list will be rendered in the document as a bulleted list with the default dot bullet.

When the value is below 0x10000 and the bullet string is set to the numbered list mode (0x02a0974c), the Format Gallery displays L as the bullet character in its preview. When it is greater than or equal to 0x10000, it displays 1..

List bullet character font name

Format file ID
17
Registry value
pidListFont
Data type
String
Default value
Value of pidFontName

Defines the font where the bullet symbol is taken from. When this is empty, the text’s current font (pidFontName) is used. This is ignored for numbered lists.

Borders

Format file ID
25
Registry value
pidBorder
Data type
Integer
Default value
0

Defines on which sides of the paragraph the borders are applied. Only the last four bits of the integer are used:

Bit 0
Enable the top border.
Bit 1
Enable the bottom border.
Bit 2
Enable the left border.
Bit 3
Enable the right border.

Border color

Format file ID
26
Registry value
pidBorderColor
Data type
Color
Default value
Automatic

Defines the color of the paragraph border.

Border style

Format file ID
27
Registry value
pidBorderLineStyle
Data type
Integer
Default value
0

Defines the style of border to be applied on the paragraph. Only the following values are recognized:

0
No border.
1
Solid line.
2
Dotted line.
3
Dashed line.
7
Double line.
12
Solid line on the outside, solid line twice thinner on the inside.
13
Solid line on the outside, solid line twice thiccer on the inside.
14
Two solid lines around one twice thiccer solid line.
18
Diagonal stripes, from top-left to bottom-right, like on barricade tape.
On my installed versions of Works (9.7.613.0 in French on Windows XP, and 8.4.623.0 in English (U.S.) on Windows 2000), applying this style from the Format Gallery applies style 19 instead. I can set this style fine using the Borders and Shading format menu, and saving the style will result in the correct value.
19
Diagonal stripes, from top-right to bottom-left, like on barricade tape.
21
Dithered line; a checkerboard is drawn using the border color, depending on how much you zoom in on the page.

Other values will cause no border style to be applied.

Border width

Format file ID
28
Registry value
pidBorderLineWidth
Data type
Float
Default value
1

Defines the width of the border, in points. On border styles that include multiple lines of different widths, this determines the width of the thiccest lines. This cannot be configured directly in Works, other than by selecting a border style (which changes both the style, width and spacing). You can set this to values that are unachievable with the UI, and Works will accept them.

Border spacing

Format file ID
29
Registry value
pidBorderSpacing
Data type
Float
Default value
1

Defines the spacing between the multiple lines that compose a border. If the border style only includes one line, this has no effect. This cannot be configured directly in Works, other than by selecting a border style (which changes the style, width and spacing). You can set this to values that are unachievable with the UI, and Works will accept them.

Shading style

Format file ID
30
Registry value
pidShadingStyle
Data type
Integer
Default value
0

Defines the style of shading to be applied on the paragraph. Only the following values are recognized:

0
The paragraph has no background.
1
Solid fill, 100% foreground color.
3
Solid fill, 10% foreground color, 90% background color.
4
Solid fill, 90% foreground color, 10% background color.
6
Solid fill, 80% foreground color, 20% background color.
7
Solid fill, 70% foreground color, 30% background color.
8
Solid fill, 60% foreground color, 40% background color.
9
Solid fill, 50% of each color.
10
Solid fill, 40% foreground color, 60% background color.
12
Solid fill, 30% foreground color, 70% background color.
13
Solid fill, 20% foreground color, 80% background color.
14
Horizontal lines, alternating between both colors.
15
Vertical lines, alternating between both colors.
16
Diagonal lines from top-left to bottom-right, alternating between both colors.
17
Diagonal lines from top-right to bottom-left, alternating between both colors.
18
Lines in both diagonals of the foreground color above the background color.
19
Dashes of the background color visible over the foreground color.
20
Thin horizontal lines in the foreground color spaced far apart, above the background color.
21
Thin vertical lines in the foreground color spaced far apart, above the background color.
22
Thin diagonal lines from top-right to bottom-left, in the foreground color, spaced far apart above the background color.
23
Thin diagonal lines from top-left to bottom-right, in the foreground color, spaced far apart above the background color.
24
Grid of thin horizontal and vertical lines in the foreground color, spaced far apart above the background color.
25
Thin diagonal lines in both directions, in the foreground color, spaced far apart above the background color.

Other values will cause no shading to be applied.

Shading color 1

Format file ID
31
Registry value
pidShadingForeColor
Data type
Color
Default value
Automatic

Defines the foreground color for the paragraph shading, also known as Color 1.

Shading color 2

Format file ID
32
Registry value
pidShadingBackColor
Data type
Color
Default value
Automatic

Defines the background color for the paragraph shading, also known as Color 2.

English word wrapping

Format file ID
Registry value
pidEnglishWordwrap
Data type
Boolean
Default value
1

This does not seem to have any effect. Defining two styles that have the same properties except for this one makes Works think the styles are duplicates.

Hanging punctuation

Format file ID
Registry value
pidHangingPunctuation
Data type
Boolean
Default value
0

A key that I found in some DLLs that likely allows enabling hanging punctuation, a neat typesetting trick. Enabling this does not however seem to have any effect.

East Asian line breaking

Format file ID
Registry value
pidEALineBreaking
Data type
Boolean
Default value
0

A key that I found in some DLLs that likely allows enabling line-breaking rules specific to East Asian languages, but I have not been able to make it have any effect in Works.

East Asian spacing

Format file ID
41
Registry value
pidEASpacing
Data type
Float
Default value
0

Extra space, in points, added between each character.

This does not seem to be configurable directly within Works 8 or 9, but any value is accepted, even negative ones. This might be related to support for East Asian languages, hence the EA.

In the Format Gallery, hovering over a style with a non-zero spacing will show a tooltip that includes Expanded X pt or Collapsed X pt, depending on whether the value is positive or negative. The value will be displayed as a floating-point number, optionally with scientific notation if the value is weird enough.

East Asian font name

Format file ID
38
Registry value
pidFontNameEA
Data type
String
Default value
Value of pidFontName

Likely defines the name of a font with East Asian support, aka using UCS-2 or UTF-16, to use when a font that does not support those characters is set. I have not seen it have any concrete effect within Works.

Cyrillic font name

Format file ID
39
Registry value
pidFontNameCyr
Data type
String
Default value
Value of pidFontName

Likely defines the name of a font with Cyrillic character support to use when a font that does not support those is set. I have not seen it have any concrete effect within Works.

Other font name

Format file ID
40
Registry value
pidFontNameOther
Data type
String
Default value
Value of pidFontName

Likely defines the name of a fallback font to use when some characters are not supported by the main text font. I have not seen it have any concrete effect within Works.