For more information concerning Tomcat Native, see the Tomcat Native site. Source (please choose the correct format for your platform) Native 1.2.25 Source Release tar.gz (e.g. Os x 10 8 5 to el capitan. Unix, Linux, Mac OS).
Native GTK+ for Mac OS X in the Works Submitted by carbon-12 2005-10-07 GTK+ 59 Comments. Imendio announced that it has been working on a port of native Gtk+ for Mac OS X. About The Author Eugenia Loli. Ex-programmer, ex-editor in chief at OSNews.com, now a visual artist/filmmaker. Download Apple Mac OS X Mavericks for Mac to oS X Mavericks is the latest release of the world's most advanced desktop operating system. Never incorporated this into the native OS sooner.
- 4Work in progress
- 5interesting functions in Carbon/ATSUI API
- 9URL's & important LINKS
Public Documentation License Notice
The contents of this Documentation are subject to the Public Documentation License Version 1.0 (the 'License'); you may only use this Documentation if you comply with the terms of this License. A copy of the License is available at http://www.openoffice.org/licenses/PDL.html.The Original Documentation is 'Fonts starting point and documentation'. The Initial Writer of the Original Documentation is (JCA) Eric Bachard (C) 2006. All Rights Reserved. (Initial Writer contact(s): ericb@openoffice.org.)
Native fonts implementation
Introduction
Currently, OpenOffice.org on Mac OS X does not use directly Apple system fonts, but extracts .ttf part ot (most of) them, and uses X11 rendering to display them properly.
The pro to use X11 rendering is it is faster than use Apple font server, but the drawback is all featured improvement are not accessible, in particular kerning and hinting.
First contact with Herbert Duerr (hdu), about fonts :
Choosen answers to start :
'..I already started an ATSUI port long ago. See issue 23283 for details (http://www.openoffice.org/issues/show_bug.cgi?id=23283). This patch is very old and worked for some simple situations..'
'.Everything is in VCL, especially the vcl/inc/sallayout.hxx header file is important. vcl/*/gdi/ subdirectories might be interesting too.
The SalLayout base class is the core of all VCL-text. It corresponds to an ATSUTextLayout object on ATSUI. All text display, measurements, text breaking, glyph fallback etc. are done via SalLayout objects.'
'.I think the best way is to deeply understand a SalLayout object is to get to know the very old VCL OutputDevice text related methods, and especially what the pDXArray parameter in them means. Then learn ATSUI, Uniscribe, ICU's layout engine and Java's TextLayout really well. A SalLayout is just the abstracted combination of all these layout engines. A SalLayout object has the 'old pDXArray flavour' to keep the changes required by the rest of OOo minimal.'
'.Well, changing anything in the VCL text core is very hard, because it impacts basically everything text related in OOo. Since a simple change there can easily break some use cases, several scripts, platforms and may have a bad performance impact, I'd rather not change anything in the core..
Native Oxidation
'..If it is possible to isolate it to just the file salatslayout.cxx provided in issue 23283 then I'm all for it.'
Fixme : documentation starting point : Google chrome online.
interesting documents about design of fonts implementations in OpenOffice.org :
[FIXME]Verify if not obsolete Font management concept :http://gsl.openoffice.org/files/documents/16/1603/vcl_new_fontmanagement.pdf
window class hierarchy :
Little glossary
Impl prefix means Implementation detail, and such variable, functions ..etc will only be visible locally
ATS : Apple Type Services. This server works if an only if a CFRunLoop( ) is running, and launched in main thread.
ATSUI : Apple Type Services for Unicode Imagery
Sal : System Abstraction Layer
Layout (for text layout) : Text Layout contains one ore more paragraphs of text together with style attributes that may apply to character,
lines or even the entire layout. The text layout contains informations about lines and layout attributes, including justification, rotation, etc
CarretPosition: Caret is the name for the symbol ^
Point: [FIXME]
Glyph: A Glyph represents the shape of a symbol. E.g. the glyph for the character 'capital latin letter O' typically looks like a hollow ellipse.
Style: One of the three traditional design features of a typeface along with size and weight - styles are either regular, italic or condensed
Offset: in our context, a number indicating the distance (displacement) from the start of a data structure object and up to a given element
Boundary: A border that encloses a space or area
GIA: Glyph Information Array
Character style information: is contained in a style object associated ( not contained by ! ) a text layout object.
You can complete with the excellent glossary Herbert Duerr provided : http://gsl.openoffice.org/files/documents/16/1890/OOo_Glossary_Of_Font_Terms.htm
Work in progress
salatslayout.cxx License origin is justified here : http://qa.openoffice.org/issues/show_bug.cgi?id=23283]
Unicode
What is important ? Reading http://fr.wikipedia.org/wiki/UTF-8 , it was not easy to understand how was working UTF-8.
A character whose code point is below U+0080 is encoded with a single byte that contains its code point: these correspond exactly to the 128 characters of 7-bitASCII. In other cases, up to four bytes are required. The most significant bit of these bytes is 1, to prevent confusion with 7-bit ASCII characters and therefore keep standard byte-oriented string processing safe.
Code range hexadecimal | Scalar value binary | UTF-8 binary | Notes |
---|---|---|---|
000000–00007F 128 codes | 0zzzzzzz | 0zzzzzzz | ASCII equivalence range; byte begins with zero |
seven z | seven z | ||
000080–0007FF 1920 codes | 00000yyy yyzzzzzz | 110yyyyy 10zzzzzz | first byte begins with 110, the following byte begins with 10. |
three y; two y, six z | five y; six z | ||
000800–00FFFF 63488 codes | xxxxyyyy yyzzzzzz | 1110xxxx 10yyyyyy 10zzzzzz | first byte begins with 1110, the following bytes begin with 10. |
four x,four y; two y,six z | four x; six y; six z | ||
010000–10FFFF 1048576 codes | 000wwwxx xxxxyyyy yyzzzzzz | 11110www 10xxxxxx 10yyyyyy 10zzzzzz | First byte begins with 11110, the following bytes begin with 10 |
three w, two x; four x, four y; two y, six z | three w; six x; six y; six z |
For example, the character aleph (א), which is Unicode U+05D0, is encoded into UTF-8 in this way:
- It falls into the range of U+0080 to U+07FF. The table shows it will be encoded using two bytes, 110yyyyy 10zzzzzz.
- Hexadecimal 0x05D0 is equivalent to binary 101-1101-0000.
- The eleven bits are put in their order into the positions marked by 'y'-s and 'z'-s: 11010111 10010000.
- The final result is the two bytes, more conveniently expressed as the two hexadecimal bytes 0xD7 0x90. That is the letter aleph (א) in UTF-8.
Native Oxide Etch
OpenOffice.org side :
Mac OS X API side:
Carbon API implementation (binding) is made in salatslayout.cxx
ATS and ATSUI starting point : http://developer.apple.com/documentation/Carbon/Conceptual/ATS_Concepts/atsfonts_intro/chapter_1_section_1.html
Apple's starting page leading to deeper docs: http://developer.apple.com/documentation/TextFonts/Typography-date.html
Todo-list for native font implementation :
Estimation of code remaining to write ~40 %
Done ( mainly Stephan Schaefer, with initial salatslayout.cxx file written by Herbert Duerr)
0.4
0.3
Resources : use sample code to test/initialize ATS server ( using e.g. ATSUIDirectAccessDemo )
SalLayout base class description
[FIXME]
salatslayout.cxx description
interesting functions in Carbon/ATSUI API
ATSCreateFontQueryRunLoopSource
ATSCreateFontQueryRunLoopSource : Sets up your application to handle font queries
ATSUCaret
ATSUCaret
Contains the coordinates needed to draw a caret.
MultiSalLayout implementation
Original code is in vcl/source/gdi/sallayout.cxx
deprecated functions in Carbon API
Content description : salatslayout.cxx
URL's & important LINKS
sallayout.hxx description
Google chrome standalone. See : http://wiki.services.openoffice.org/wiki/Sallayout.hxx
Unicode references in Wikipedia
English reference : http://en.wikipedia.org/wiki/Unicode
French reference : http://fr.wikipedia.org/wiki/Unicode
Note: prefer english reference, more complete
Unicode references
Bidirectionnal Algorithms : http://www.unicode.org/reports/tr9/
UTF-8 and Unicode FAQ http://www.cl.cam.ac.uk/~mgk25/unicode.html
ICU references in Wikipedia
English reference : http://en.wikipedia.org/wiki/International_Components_for_Unicode
French reference : http://fr.wikipedia.org/wiki/International_Components_for_Unicode
Apple documentation
Native Oxidation
'..If it is possible to isolate it to just the file salatslayout.cxx provided in issue 23283 then I'm all for it.'
Fixme : documentation starting point : Google chrome online.
interesting documents about design of fonts implementations in OpenOffice.org :
[FIXME]Verify if not obsolete Font management concept :http://gsl.openoffice.org/files/documents/16/1603/vcl_new_fontmanagement.pdf
window class hierarchy :
Little glossary
Impl prefix means Implementation detail, and such variable, functions ..etc will only be visible locally
ATS : Apple Type Services. This server works if an only if a CFRunLoop( ) is running, and launched in main thread.
ATSUI : Apple Type Services for Unicode Imagery
Sal : System Abstraction Layer
Layout (for text layout) : Text Layout contains one ore more paragraphs of text together with style attributes that may apply to character,
lines or even the entire layout. The text layout contains informations about lines and layout attributes, including justification, rotation, etc
CarretPosition: Caret is the name for the symbol ^
Point: [FIXME]
Glyph: A Glyph represents the shape of a symbol. E.g. the glyph for the character 'capital latin letter O' typically looks like a hollow ellipse.
Style: One of the three traditional design features of a typeface along with size and weight - styles are either regular, italic or condensed
Offset: in our context, a number indicating the distance (displacement) from the start of a data structure object and up to a given element
Boundary: A border that encloses a space or area
GIA: Glyph Information Array
Character style information: is contained in a style object associated ( not contained by ! ) a text layout object.
You can complete with the excellent glossary Herbert Duerr provided : http://gsl.openoffice.org/files/documents/16/1890/OOo_Glossary_Of_Font_Terms.htm
Work in progress
salatslayout.cxx License origin is justified here : http://qa.openoffice.org/issues/show_bug.cgi?id=23283]
Unicode
What is important ? Reading http://fr.wikipedia.org/wiki/UTF-8 , it was not easy to understand how was working UTF-8.
A character whose code point is below U+0080 is encoded with a single byte that contains its code point: these correspond exactly to the 128 characters of 7-bitASCII. In other cases, up to four bytes are required. The most significant bit of these bytes is 1, to prevent confusion with 7-bit ASCII characters and therefore keep standard byte-oriented string processing safe.
Code range hexadecimal | Scalar value binary | UTF-8 binary | Notes |
---|---|---|---|
000000–00007F 128 codes | 0zzzzzzz | 0zzzzzzz | ASCII equivalence range; byte begins with zero |
seven z | seven z | ||
000080–0007FF 1920 codes | 00000yyy yyzzzzzz | 110yyyyy 10zzzzzz | first byte begins with 110, the following byte begins with 10. |
three y; two y, six z | five y; six z | ||
000800–00FFFF 63488 codes | xxxxyyyy yyzzzzzz | 1110xxxx 10yyyyyy 10zzzzzz | first byte begins with 1110, the following bytes begin with 10. |
four x,four y; two y,six z | four x; six y; six z | ||
010000–10FFFF 1048576 codes | 000wwwxx xxxxyyyy yyzzzzzz | 11110www 10xxxxxx 10yyyyyy 10zzzzzz | First byte begins with 11110, the following bytes begin with 10 |
three w, two x; four x, four y; two y, six z | three w; six x; six y; six z |
For example, the character aleph (א), which is Unicode U+05D0, is encoded into UTF-8 in this way:
- It falls into the range of U+0080 to U+07FF. The table shows it will be encoded using two bytes, 110yyyyy 10zzzzzz.
- Hexadecimal 0x05D0 is equivalent to binary 101-1101-0000.
- The eleven bits are put in their order into the positions marked by 'y'-s and 'z'-s: 11010111 10010000.
- The final result is the two bytes, more conveniently expressed as the two hexadecimal bytes 0xD7 0x90. That is the letter aleph (א) in UTF-8.
Native Oxide Etch
OpenOffice.org side :
Mac OS X API side:
Carbon API implementation (binding) is made in salatslayout.cxx
ATS and ATSUI starting point : http://developer.apple.com/documentation/Carbon/Conceptual/ATS_Concepts/atsfonts_intro/chapter_1_section_1.html
Apple's starting page leading to deeper docs: http://developer.apple.com/documentation/TextFonts/Typography-date.html
Todo-list for native font implementation :
Estimation of code remaining to write ~40 %
Done ( mainly Stephan Schaefer, with initial salatslayout.cxx file written by Herbert Duerr)
0.4
0.3
Resources : use sample code to test/initialize ATS server ( using e.g. ATSUIDirectAccessDemo )
SalLayout base class description
[FIXME]
salatslayout.cxx description
interesting functions in Carbon/ATSUI API
ATSCreateFontQueryRunLoopSource
ATSCreateFontQueryRunLoopSource : Sets up your application to handle font queries
ATSUCaret
ATSUCaret
Contains the coordinates needed to draw a caret.
MultiSalLayout implementation
Original code is in vcl/source/gdi/sallayout.cxx
deprecated functions in Carbon API
Content description : salatslayout.cxx
URL's & important LINKS
sallayout.hxx description
Google chrome standalone. See : http://wiki.services.openoffice.org/wiki/Sallayout.hxx
Unicode references in Wikipedia
English reference : http://en.wikipedia.org/wiki/Unicode
French reference : http://fr.wikipedia.org/wiki/Unicode
Note: prefer english reference, more complete
Unicode references
Bidirectionnal Algorithms : http://www.unicode.org/reports/tr9/
UTF-8 and Unicode FAQ http://www.cl.cam.ac.uk/~mgk25/unicode.html
ICU references in Wikipedia
English reference : http://en.wikipedia.org/wiki/International_Components_for_Unicode
French reference : http://fr.wikipedia.org/wiki/International_Components_for_Unicode
Apple documentation
ATS and ATSUI starting point : http://developer.apple.com/documentation/Carbon/Conceptual/ATS_Concepts/atsfonts_intro/chapter_1_section_1.htmlApple's starting page leading to deeper docs: http://developer.apple.com/documentation/TextFonts/Typography-date.html
Native Oxide Density
New Font Management
[FIXME]
See Herbert's Duerr document : http://www.openoffice.org/files/documents/16/1603/vcl_new_fontmanagement.pdf
Other ATSUI implementations
The Cairo library has an implementation of ATSUI font rendering, it can be studied for OpenOffice.org, because it is licensed with LGPL. See the code here:http://gitweb.freedesktop.org/?p=cairo.git;a=blob;hb=HEAD;f=src/cairo-atsui-font.c
Mac OS X port on the wiki
- Build Aqua version of OpenOffice.org http://wiki.services.openoffice.org/wiki/AquaBuild
- Pierre de Filippis Wiki http://wiki.services.openoffice.org/wiki/Pdefilippis:_Project_Page
- Christian Lippka wiki : http://wiki.services.openoffice.org/wiki/User:CL
- Mac OS X port Meetings : http://wiki.services.openoffice.org/wiki/MacOSXPortMeetings
This work is part of http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Work_Areas/Todo%27s
Ericb 10:36, 3 September 2006 (CEST)