[CSS3 Text Layout] working draft

I am not sure what the status of the Text Layout module is so I decided 
to post this here.  This is my suggestion for the basis of a working 
draft of CSS Text Layout Level 3.  It is derived from Elika Eternad's 
Robust Vertical Text Layout paper for Unicode[1].

CSS Text Layout Level 3

Three properties and two classes of scripts describe the layout of text 
by this model.  The natural layout for each script determines its 
default property values and classes.

Properties:
Block progression direction specifies the direction in which successive 
lines of text are stacked.
Examples:
Latin, Arabic - down
Mongolian - right
Chinese, Japanese, Korean - left

Inline progression direction specifies the direction in which successive 
glyphs are placed within a line of text.
Examples:
Latin - right
Arabic - left
Mongolian, Chinese, Japanese, Korean - down

Text orientation specifies the direction which the glyphs' "up" points 
towards.
Examples:
Latin, Arabic, Mongolian, Chinese, Japanese, Korean - up.

Classes:
Relative scripts are scripts for which there exists an invertible 
transformation between the inline progression direction and text 
orientation.  This transformation defines the natural relation between 
the two properties among all possible values.
Examples of transformations from text orientation to inline progression 
direction:
Latin - 90 degrees clockwise rotation
Arabic - 90 degrees counterclockwise rotation
Mongolian - reflection across the line of text

Independent scripts are scripts for which the inline progression 
direction and text orientation are independent of each other.
Examples:
Chinese, Japanese, Korean are independent scripts.

The CSS properties for Text Layout Level 3:
Name: block-progression
Value: up | down | left | right | natural
Initial: natural
This property describes the block progression direction.
    up      - block progression direction is up.
    down    - block progression direction is down.
    left    - block progression direction is left.
    right   - block progression direction is right.
    natural - block progression direction is the script's default.

Name: inline-direction-horizontal
Value: left | right | natural
Initial: natural
This property describes the inline direction for horizontal lines of 
text.  It applies only when the block progression direction is up or down.
    left    - inline progression direction is left.
    right   - inline progression direction is right.
    natural - inline progression direction is given by the 
transformation of text-orientation-vertical if it exists and is 
horizontal.  If not then the inline progression direction is given by 
the script's default if it is horizontal, otherwise it is right.

Name: inline-direction-vertical
Value: down | up | natural
Initial: natural
This property describes the inline direction for vertical lines of 
text.  It applies only when the block progression direction is left or 
right.
    down    - inline progression direction is down.
    up      - inline progression direction is up.
    natural - inline progression direction is given by the 
transformation of text-orientation-vertical if it exists and is 
vertical.  If not then the inline progression direction is given by the 
script's default if it is vertical, otherwise it is down.

Name: text-orientation-vertical
Value: up | down | left | right | natural
Initial: natural
This property describes the text orientation.
    up      - text orientation is up.
    down    - text orientation is down.
    left    - text orientation is left.
    right   - text orientation is right.
    natural - when block-progression is up or down, if 
inline-direction-horizontal is not natural and the script is relative 
the text orientation is given by the inverse transformation of 
inline-direction-horizontal otherwise it is the script's default.  When 
block-progression is left or right, if inline-direction-vertical is not 
natural and the script is relative the text orientation is given by the 
inverse transformation of inline-direction-vertical otherwise it is the 
script's default.

[1] http://www.unicode.org/notes/tn22/

Note: the choice of right as the last case for natural 
inline-direction-horizontal is fairly arbitrary, if possible something 
like inheriting the direction of the surrounding text might be more useful.
Does anyone have a suggestion for turning this into an actual working draft?

Received on Wednesday, 3 January 2007 12:54:58 UTC