21
User Defined Characters Solution Proposals October 6, 2010 Jun Fujisawa [email protected]

User Defined Characters Solution Proposal

Embed Size (px)

DESCRIPTION

Presentation material for EPUB WG EGLS Taipei Meeting.

Citation preview

Page 1: User Defined Characters Solution Proposal

User Defined CharactersSolution Proposals

October 6, 2010

Jun [email protected]

Page 2: User Defined Characters Solution Proposal

EGLS Requirements EGLS_CG3 In-line Graphics

It should be possible for content providers to embed graphics in text with the intention that the graphics should be aligned, positioned, and sized well with the surrounding text even when the user or reading system selects any writing mode and any font

Rationale: People need something beyond characters or character variations commonly available in the present computing environment, which is typically based on Unicode or ISO/IEC 10646

EGLS_CG4 Font Embedding It should be possible for content providers to embed fonts

such as SVG Fonts and WOFF Fonts as part of EPUB documents

Rationale: Fonts for some characters or character variants might not be always available in any reading system

Page 3: User Defined Characters Solution Proposal

Solution for Font Embedding EGLS_CG4 Solution A

Use '@font-face' rule specified in CSS Fonts Level 3 to reference Web Fonts (WOFF Fonts, SVG Fonts, or OpenType) embedded within the same EPUB container file

EPUB 2.0 already supports the use of '@font-face' rule specified in CSS Level 2

Using WOFF Fonts is supported on most browsers and appropriate for general font embedding

Issues CSS Level 2 Revision 1 does not specify '@font-face' rule CSS Fonts Level 3 is currently in WD status and may not

become CR status in time for EPUB 3.0 WOFF File Format is currently in WD status and may not

become CR status in time for EPUB 3.0

Page 4: User Defined Characters Solution Proposal

Web Fonts Implementations WOFF Fonts are going to be supported everywhere

SVG Fonts are currently the only choice for iPhone and iPad

Web BrowserTrueTypeOpenType

EOT WOFF SVG

IE IE9 IE9

Safari WebKit Firefox Opera Chrome

Page 5: User Defined Characters Solution Proposal

Solution A for In-line Graphics EGLS_CG3 Solution A

Use HTML 'img' element to reference an SVG graphics file or SVG fragment in the same HTML file

This solution also satisfies EGLS_CG4 SVG is a vector graphic format and better than raster image

format like PNG in terms of scalability Using SVG graphics is supported on most browsers and

appropriate for describing small numbers of user defined characters or glyphs

CSS 2D Transforms can be used to rotate SVG graphics to better support mixed text layout

Issues It may be difficult to align SVG graphics with the baseline of

the surrounding text It may be difficult to change SVG graphics based on the font

family used for the surrounding text

Page 6: User Defined Characters Solution Proposal

SVG In-line Graphics SVG File Example

Use 'path' element todefine a character glyph

Use 'viewBox' attributeto use local coordinatesystem

The path describes aHiragana character " の "

HTML File Example Use 'img' element to

display SVG graphics Referencing an SVG file

from 'img' element isalready supported onmost browsers

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 1000"> <title>IPA Mincho</title> <path fill="black" d="M505 683 Q512 642 512 585 Q512 417 393 225 Q338 137 266 88 Q236 70 214 70 Q178 70 146 107 Q91 169 91 279 Q91 450 218 582 Q348 716 528 716 Q666 716 762 649 Q901 553 901 378 Q901 193 767 98 Q668 27 488 16 L482 41..../></svg>

<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Solution A</title> </head>

<body> <div style="font-size:100px;"> なにぬね <img src="IPAMincho.svg" width="100" height="100"> </div> </body></html>

Page 7: User Defined Characters Solution Proposal

Solution B for In-line Graphics EGLS_CG3 Solution B

Use SVG 'font' element to define graphics as SVG Fonts and put that definition directly into HTML 'head' element. In the same HTML file, we can just specify the 'font-family' for the SVG Font to display the corresponding graphics.

This solution also satisfies EGLS_CG4. SVG Fonts behave just like normal fonts, and the text can be

aligned, selected, and searched very easily.

Issues SVG Fonts may not be supported on some browsers (IE and

Firefox). SVG Fonts don't support hinting and may not be rendered in

highest quality on some display conditions. SVG 1.1 supports both vertical and horizontal layout for SVG

Fonts, but SVG Tiny 1.2 only supports horizontal layout.

Page 8: User Defined Characters Solution Proposal

SVG Fonts In-line Graphics HTML File Example

Use SVG 'glyph'element to definea character glyph

Use HTML 'span'element to specifythe font family nameof the SVG Font

The use of CSS'@font-face' rule isnot required

Any glyphs withoutcode points can bedefined

<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Solution B</title> <svg xmlns="http://www.w3.org/2000/svg" width="100" height="100"> <defs> <font horiz-origin-x="0" horiz-adv-x="1000" id="IPAMincho"> <font-face font-family="IPAMincho" units-per-em="1000" ascent="880" descent="120"/> <glyph unicode="の " glyph-name ="の " vert-origin-y="786" vert-adv-y="870" d="M505 683 Q512 642 512 585…"/> </font> </defs> </svg> </head>

<body> <div style="font-size:100px;">なにぬね <span style="font-family:IPAMincho;">の </span> </div> </body></html>

Page 9: User Defined Characters Solution Proposal

Rendering Quality SVG Fonts Example by John Daggett

people.mozilla.org/~jdaggett/tests/svgfonttest.html

Rendered by Safari on Mac OS X

Page 10: User Defined Characters Solution Proposal

Effect of Hinting Meiryo Fonts Example by John Daggett

Rendered by Firefox on Windows XP, Windows 7, and Mac OS X, respectively

Page 11: User Defined Characters Solution Proposal

Appendix

Page 12: User Defined Characters Solution Proposal

Web Fonts Overview Web Fonts Specification

Introduced in CSS Level 2www.w3.org/TR/2008/REC-CSS2-20080411

Enhanced in CSS Fonts Level 3www.w3.org/TR/2009/WD-css3-fonts-20090618

Major Features Supports downloadable fonts, local fonts, and system fonts Font properties ('font-family', 'font-weight', 'font-stretch',

'font-style', 'font-variant', 'font-size', 'font-size-adjust', 'font') Font reference rules (@font-face, 'src', 'unicode-range') Font matching algorithm

Page 13: User Defined Characters Solution Proposal

Web Fonts Examples Multi Weights Example

One rule for each weight Use 'local' to use local

fonts if available Use 'url' to reference

downloadable fonts

Composite Font Example One rule for each language

specific font subset file Use "-" to specify range Use "?" for any digit value Download smaller subset

file if the text contains onlyLatin characters

@font-face { font-family: Helvetica; src: local(Helvetica), url(fonts/Helvetica.ttf);}

@font-face { font-family: Helvetica; font-weight: bold; src: local("Helvetica Bold"), url(fonts/HelveticaBold.ttf);}

@font-face { font-family: DroidSans; src: url(DroidSansJp.woff); unicode-range: U+3000-9FFF, U+FF??;}

@font-face { font-family: DroidSans; src: url(DroidSans.woff); unicode-range: U+000-5FF, U+1E00-1FFF, U+2000-2300;}

Page 14: User Defined Characters Solution Proposal

New in CSS Fonts Level 3 Renewed Font Format List

"truetype", "truetype-aat" : TrueType Font (.ttf) "opentype": OpenType Font (.ttf, .otf) "embedded-opentype": Embedded OpenType Font (.eot) "woff": WOFF Font (.woff) "svg": SVG Font (.svg)

OpenType Features Support Kerning ('font-kerning') and ligatures ('font-variant-ligatures') Subscript and superscript ('character-transform') Alternates and swashes ('font-variant-alternates') Capitalization ('font-variant-caps') Numerical formatting ('font-variant-numeric')

Same-origin Restriction Cross-Origin Resource Sharing (CORS) should be supported as well

Page 15: User Defined Characters Solution Proposal

WOFF Font Format WOFF Font Specification

WOFF File Format 1.0www.w3.org/TR/2010/WD-WOFF-20100727

WOFF stands for Web Open Font Format

Progress WebFonts Working Group launched in March 2010 W3C Submission from Microsoft, Mozilla, and Opera in April Already implemented on Firefox 3.6, Google Chrome 5, and

IE9 Platform Preview 3

Major Features A GZIP compressed repackaging of TrueType/OpenType fonts Added XML based extended metadata block No DRM (WOFF fonts may not be reused as system fonts) Same-origin restriction as well as CORS is supported

Page 16: User Defined Characters Solution Proposal

Handling Variations East Asian Text

The editor's draft of CSS Fonts Level 3 introduced 'font-variant-east-asian' property

Supports OpenType Feature Tags (hojo-kanji, jis78, jis83, jis90, jis04, nlckanji, simplified, traditional, fwid, pwid)

OpenType UVS Subtable should be supported as well?

Example of Variations JIS78 Forms (jis78) ■ Traditional Forms (traditional)

Proportionally Spaced Variants (pwid)

Page 17: User Defined Characters Solution Proposal

SVG Fonts Overview SVG Fonts Specification

Introduced in SVG 1.0www.w3.org/TR/2001/REC-SVG-20010904

Reduced the features in SVG Tiny 1.2www.w3.org/TR/2008/REC-SVGTiny12-20081222

Mandatory feature in SVG 1.1/2.0 (required for ACID3)

Major Features Embedded within HTML/SVG documents or saved as a

separate SVG file (GZIP compressed .svgz file is supported) Define font with 'font' ('horiz-origin-x', 'horiz-adv-x') and 'font-

face' elements ('font-family', 'font-weight', etc.) Define each glyph with 'glyph' element ('unicode', 'glyph-

name', 'd', 'arabic-form', 'lang', 'horiz-adv-x') Hinted outline fonts is not supported

Page 18: User Defined Characters Solution Proposal

SVG Fonts Examples Inline Font Example

One 'glyph' for each glyph 'd' value contains path data

defining the glyph outline 'unicode' value can be a

character or string (to defineligatures, for example)

External Font Example Font definition can be moved

to local or downloadable files Use 'font-face-uri' to point

to external SVG Font files Need to directly reference

'font' element (by using afragment identifier)

<defs> <font horiz-adv-x="500"> <font-face font-family="Vera" units-per-em="1000"/> <glyph unicode="S" glyph-name="S" d="…"> <glyph unicode="V" glyph-name="V" d="…"> <glyph unicode="G" glyph-name="G" d="…"> <missing-glyph d="…"> </font></defs><text font-family="Vera" font-size="100">SVG</text>

<defs><font> <font-face font-family="Vera"> <font-face-src> <font-face-uri xlink:href="Vera.svg#f"/> </font-face-src> </font-face></font></defs><text font-family="Vera" font-size="100">SVG</text>

Page 19: User Defined Characters Solution Proposal

New in SVG Tiny 1.2 No Arbitrary SVG

Specify glyph outline only by using path data (with 'd' attribute)

'glyph' element in SVG 1.0/1.1 can contain arbitrary SVG graphic elements)

No Vertical Orientation Unsupported 'font' element attributes: 'horiz-origin-y',

'vert-origin-x', 'vert-origin-y', 'vert-adv-y' Unsupported 'font-face' element attributes: 'v-ideographic', 'v-

alphabetic', 'v-mathematical', 'v-hanging' Unsupported 'glyph' element attributes: 'orientation',

'vert-origin-x', 'vert-origin-y', 'vert-adv-y'

No External Font Descriptors 'definition-src' element is not supported in SVG Tiny 1.2 and

SVG 1.1 2nd Edition

Page 20: User Defined Characters Solution Proposal

Extending Existing Fonts Extended Font Example

Add @font-face rule foreach user defined character

Use 'unicode-range' tospecify the code point

Default 'unicode-range'value is U+0-10FFFF

Rules defined later takeprecedence

Referencing from HTML Just use the extended font Referencing user defined

characters is easy as log asthe code point is assigned

@font-face { font-family: Helvetica; src: local(Arial);}

@font-face { font-family: Helvetica; src: url(HelveticaEx01.svg#f); unicode-range: U+E758;}

@font-face { font-family: Helvetica; src: url(HelveticaEx02.svg#f); unicode-range: U+E759;}

body { font-family: Helvetica; }

<html> <body> <p>&#xE758;SVG&#xE759;</p> </body></html>

Page 21: User Defined Characters Solution Proposal

Glyphs without Code Points SVG Glyph Example

Use unique identifier instead of a character asthe value of 'unicode'

SVG user agent recognizesthe specific sequence ofcharacters and replace itwith user defied glyph

Referencing from HTML Use 'image' element to

display a glyph image You can directly embed

an SVG fragment into theHTML5 document

<defs> <font horiz-adv-x="500"> <font-face font-family="Vera" units-per-em="1000"/> <glyph unicode="&edanashi;" glyph-name="edanashi" d="…"> <missing-glyph d="…"> </font></defs><text font-family="Vera" font-size="100">&edanashi;</text>

body { font-family: Vera; }

<html> <body> <p>Edanashi in HTML: <img src="edanashi.svg#f/> </p> <svg> <text>Edanashi in SVG: &edanashi;</text> </svg> </body></html>