GSoc Project Proposal

Heiko Tietze tietze.heiko at gmail.com
Sat Mar 17 10:49:10 UTC 2018


Some random thoughts:
* tdf#104403 c8: not yet implemented in harfbuzz (and I dont know what exactly you mean with "There is no any public library so we can make an API that can use this open source project.")
* CPAL talks about palette index, which might be a problem (e.g. tdf#115291)
* CPAL/COLR looks like a proprietary MS implementation to me
* SVG gradients are not fully supported yet (would be another GSoC project), neither animation I guess
* I wonder what happens when font color is changed from automatic to red, for instance. Could be a) resulting in one color, or b) inverted (red -> turquoise), or c) added (RGB + R). Alternatively, font color could be ignored.

On 15.03.2018 07:40, pappu kumar wrote:
> 
>   Pappu Kumar's Student Application for Multicolor Font in LibreOffice
> 
> 
>       1. Contact Information
> 
> • Email address :Pappukr4444 at gmail.com <mailto:Pappukr at gmail.com>
> 
> • GitHub username : Pappukr4444 <https://github.com/pappukr4444>
> 
> • LinkedIn username : Pappu Kumar <https://www.linkedin.com/in/pappu-kumar-586a56a5/>
> 
> • Physical location :
> 
> Cluster innovation Centre,
> 
> University of Delhi
> 
> Delhi- 110007
> 
> India
> 
> 
>         2. Why do you like C++, and why do you want to work on LibreOffice?
> 
> 
>         C++ is a general-purpose programming language It has imperative, object-oriented and generic programming features, while also providing facilities for low-level memory manipulation. C++ is the first language in which i write the hello world program.I am using the C++ from first year of my graduation it is so simple and object oriented that why i like this.
> 
> 
>         I am using the libreoffice for general college purpose work since 2014. I found it is as good as paid ms Office and it is open source. The we decide to work with the libre office team and help them to improve the libreoffice software.
> 
> 
>         3. What do you like about science and why? What area do you like best?
> 
> 
>         My favourite area is Computer Science and Mathematics, as Mathematics can single-handedly explain many of the theoretical aspects of research fields that have a Computer Science background. This is based on the first-hand experience that I've had with fields such as Software Development, Machine Learning, Web Development.
> 
> 
>         4. Describe your experience with the following:  C, C++,Java, Android other languages.
> 
> 
> • C / C++ : I've worked with both these languages for the last 5 years. I still use them, as low-level languages. I have already done some college project in C++ like Attendance management system, File system, Socket programming, MySQL Compiler.
> 
> 
> • Python : I usually try to use Python for machine learning projects because of there many great libraries that make python very handy for machine learning.
> 
> 
> • HTML/ CSS/ Javascript: Almost all of the Javascript exposure that I have, is with Web Development. I developed many websites both dynamic and static. I develop the website using the HTML, CSS, bootstrap and javascript.
> 
> 
> • Android/ Java:- Generally I use java for android development. I have already developed some android app for my college project. The project are the Chatting App, On This day App,and A payroll Softwarefor Zds pvt. Ltd.
> 
> 
>         5. Describe your educational background (school, degree plan, major, past degrees, research area, publications, etc.).
> 
> 
> • Majors : 4-year Dual-degree BTech in Information Technology & mathematical Innovation.
> 
> • Minors : Mathematics & Management
> 
> 
> I have experience in both Web Development as well as Computer Science research areas. I'd like to continue with Web Development for any innovative idea(s), in my future.
> 
> 
>         6. Please propose a project you would like to work on. Successful proposals will require advanced planning, communication with the project administrators and mentors.
> 
> 
>       Support multi coloured font formatstdf#104403 <https://bugs.documentfoundation.org/show_bug.cgi?id=104403>tdf#105488 <https://bugs.documentfoundation.org/show_bug.cgi?id=105488>
> 
> The latest version of the OpenType specification introduced few tables that allow for having multi-colored glyphs, which have many uses the most common is color Emoji.
> 
> The simplest of them isCOLR <https://www.microsoft.com/typography/otspec/colr.htm>/CPAL <https://www.microsoft.com/typography/otspec/cpal.htm>, which use layers of normal glyphs and color palettes to assign colors to each.
> 
> Another alternative isSVG <https://www.microsoft.com/typography/otspec/svg.htm>table which embeds full SVG graphic for each glyph. This one might be a trickier as instead of rendering layered glyphs with different colors we will need to render SVG graphics. We already have decent SVG support, but I’m not sure how usable is it from a low level as text rendering in VCL.
> 
> 
> 
> 1) Introduction:-
> 
> “Support multi coloured font formats”. First of all I want to define the Multicolored font and some basic terminology that used in the Typography.
> 
> 
> Multicolor Font :- The font in which all character has more the one color.
> 
> 
> For understanding this project you should have some basic knowledge about the typography and
> 
>   *
> 
>     The understanding of the SFNT structure of OpenType fonts, the different tables and their work in typography.
> 
>   *
> 
>     The basic understanding of How font are stored in the font file and how the computer understands the font and how the text is rendered on the computer.
> 
> 
> Now I want to introduce some basic terminology that is used in the typography.
> 
> 
> An OpenType font file contains data, in table format, that comprises either a TrueType or a Compact Font Format (CFF) outline font.The database, with its various tables, is stored in a file using a format called SFNT, which stands for “spline font” or “scalable font”.OpenType, TrueType, PostScript and a few other font types all use the SFNT representation to lay out their tables into a binary file. But because the SFNT representation is binary - that is to say, not human readable.
> 
> 
> Font - A typical font contains a few letters; it probably also contains some numbers, and a bunch of symbols, and maybe some other stuff too.
> 
> 
> Glyphs - a glyph is a specific design. My glyph for the letter “a” will be different to your glyph for the letter “a”. “A” and a and a and a are all different glyphs, but the same character.
> 
> 
> Horizontal height - each glyph is how wide it is - not just the black part of the glyph, but also including the space around it. You will often hear this referred to as the advance width, or the horizontal advance.
> 
> 
> Note:- that the horizontal advance is normally wider than the extremes of the outlines of the glyph itself:
> 
> 
> Kerns - However, to avoid spacing inconsistencies between differing glyph shapes (particularly between a straightedge and a round) and to make the type fit more comfortably, the designer of a digital font can specify that the layout of particular pairs of glyphs should be adjusted.
> 
> 
> Baseline - We have mentioned this already, as the imaginary line on which the glyphs are assembled. In a sense, it’s not really a height - in terms of a coordinate grid, this is the origin; the y coordinate is zero. This doesn’t necessarily mean that the “black part” of the glyph starts at the baseline. Some glyphs, such as this plus sign, have the black parts floating above the baseline:
> 
> 
> OpenType fonts may have the extension .OTF or .TTF, depending on the kind of outlines in the font and the creators desire for compatibility on systems without native OpenType support.
> 
> In all cases, fonts with only CFF data (no TrueType outlines) always have an .OTF extension.
> 
> Fonts containing TrueType outlines may have either .OTF or .TTF, depending on the desire for backward compatibility on older systems or with previous versions of the font.
> 
> A font is a database. It’s a related collection of tables and information. I want to give the name of some table, tag name of that table and and why to used or what information are present inside that table.
> 
> 
> Whether TrueType or CFF outlines are used in an OpenType font, the following tables are required for the font to function correctly:
> 
> Cmap - Character to glyph mapping
> 
> Head - Font header
> 
> Hhea -Horizontal header
> 
> Hmtx -Horizontal metrics
> 
> Maxp -Maximum profile
> 
> Name -Naming table
> 
> OS/2 OS/2 -and Windows specific metrics
> 
> Post -PostScript information
> 
> 
> Tables related to TrueType outlines
> 
> For OpenType fonts based on TrueType outlines, the following tables are used:
> 
> Cvt -Control Value Table (optional table)
> 
> Fpgm -Font program (optional table)
> 
> Glyf -Glyph data
> 
> Loca -Index to location
> 
> Prep -CVT Program (optional table)
> 
> Gasp -Grid-fitting/Scan-conversion (optional table)
> 
> 
> 
> Table related to SVG outlines
> 
> SVG -The SVG (Scalable Vector Graphics) table
> 
> 
> 
> Advanced typographic tables
> 
> Several optional tables support advanced typographic functions:
> 
> BASE -Baseline data
> 
> GDEF -Glyph definition data
> 
> GPOS -Glyph positioning data
> 
> GSUB -Glyph substitution data
> 
> JSTF -Justification data
> 
> MATH - Math layout data
> 
> For information on common table formats, please see OpenType Layout Common Table Formats .
> 
> 
> 
> Tables related to color fonts
> 
> COLRColor table
> 
> CPALColor palette table
> 
> CBDTColor bitmap data
> 
> CBLCColor bitmap location data
> 
> sbixStandard bitmap graphics
> 
> SVGThe SVG (Scalable Vector Graphics) table note that several of these tables were also listed in other sections for tables related to SVG outlines, and for tables related to bitmap glyphs.
> 
> 
> Both CBDT+CBLC and sbix use colored bitmaps (PNGs). FreeType (used in Android, macOS and iOS) supports CBDT/CBLC and sbix since version 2.5 and 2.5.1. DirectWrite (used in Windows) supports all four above.
> 
> 
> In this project, the table that mainly used is the table related to the colour font.
> 
> 
> 
> II) PROJECT GOALS
> 
> 
> During this GSoC season I would deliver:
> 
>   *
> 
>     The multicoloured font support using the COLR and CPAL table.
> 
>   *
> 
>     The multicoloured font support using the SVG table.
> 
>   *
> 
>     Making the public API for the COLR and CPAL table so that we can use the COLR and CPAL table in the LibreOffice.
> 
>   *
> 
>     There are many open source project that working on the COLR and CPAL which use layers of normal glyphs and colour palettes to assign colours to each like (https://github.com/harfbuzz/harfbuzz).
> 
>   *
> 
>     There is no any public library so we can make an API that can use this open source project.
> 
>   *
> 
>     we can use this public API for the multi-coloured text in the LibreOffice.
> 
> 
> 
> 
> III) IMPLEMENTATION
> 
> 
> There are two approaches to make LibreOffice support the multicoloured font.
> 
> 
> 1) Using the COLR and CPAL table:-
> 
> The COLR and CPAL are the tables that designed and developed by the Microsoft. COLR defines one or more accompanying colour glyphs (in vector format) for each glyph. CPAL defines several colour themes (dark-on-white, white-on-dark, ...).The main aim of this table is to make the Opentype supportthe multi-coloured glyphs.Till now there are only a few open type font the have the colr and CPAL table in the font file. So The strategy will be to detect the font that has COLR/CPAL tables and if so, we read them and render them in the LibreOffice.
> 
> 
> For the reading the table data from the font file and rendering them in LibreOffice. there some open source library available that we can use in LibreOffice.
> 
> 
> 1). The First library that we can use is FreeType
> 
> 
> https://www.freetype.org/developer.html
> 
> FreeType is a freely available software library to render fonts. It is written in C, designed to be small, efficient, highly customizable, and portable while capable of producing high-quality output (glyph images) of most vector and bitmap font formats.
> 
> 
> Some products that use FreeType for rendering fonts on screen or on paper, either exclusively or partially:
> 
> GNU/Linux and other free Unix operating system derivatives like FreeBSD or NetBSD;
> 
> iOS, Apple's mobile operating system for iPhones and iPads;
> 
> Android, Google's operating system for smartphones and tablet computers;
> 
> Chrome OS, Google's operating system for laptop computers;
> 
> ReactOS, a free open source operating system based on the best design principles found in the Windows NT architecture;
> 
> Ghostscript, a PostScript interpreter used in many printers.
> 
> Counting the above products only, you get more than a billion devices that contain FreeType.
> 
> 
> 2) The Second Library that we can use is HarfBuzz
> 
> 
> https://github.com/harfbuzz/harfbuzz
> 
> HarfBuzz is a text shaping engine. It solves the problem of selecting and positioning glyphs from a font given a Unicode string. but there is no public API for harfbuzz yet, so one option is to help to add public API to HarfBuzz and use it in the LibreOffice.
> 
> 
> 
> 2) Using the SVG table
> 
> 
> The OpenType-SVG font format was initially designed by Mozilla & Adobe and became an industry standard in early 2016 when other big players including Microsoft & Google agreed on a single format to support colour fonts.
> 
> 
> Today, there are four major colour font formats that fit into regular font files: SBIX, COLR, CBDT and SVG, each having its own specificities.
> 
> 
> The strategy will be to detect the font that has SVG tables and if so, we read them and render them in the LibreOffice.
> 
> 
> For the reading the SVG table data from the font file and rendering them in LibreOffice. If needed, we can use some open source library.
> 
> 
> 1). The first library that we can use is SVGPath2Text <https://github.com/vennekamp/SVGPath2Text>
> 
> If a font file has the SVG table then we simply read the data and the SVG path of different font and we can render them using the SvgPath2Text open source library.<https://github.com/vennekamp/SVGPath2Text>
> 
> SVGPath2Text <https://github.com/vennekamp/SVGPath2Text>A brute force tool to convert SVG Outlines (aka SVG Path; SVG Glyphs) back to the text. Helpful if you need smaller file sizes.
> 
> https://github.com/vennekamp/SVGPath2Text
> 
> 
> A brute force tool to convert SVG Outlines (aka SVG Path; SVG Glyphs) back to the text. Helpful if you need smaller file sizes.
> 
> A Demo-SVG-File is included. This Tool maps the Glyphs (i.e. SVG Paths) from a template to the elements found in an SVG File.
> 
> This is just a dirty hack ;-) It currently only works for the font "Comic Sans MS" in file size 7px; Most of the letters in the demo file are found correctly, but placement still needs improvement. To alter this work you need to change the "template letters" to your font and font size.
> 
> 
> 2) The Second Library that we can use for SVG Rendering is SVG Renderer
> 
>   *
> 
>     SVG Renderer library in C++
> 
>   *
> 
>     full gradient support
> 
>   *
> 
>     group opacity
> 
>   *
> 
>     all shapes support
> 
>   *
> 
>     all path elements support
> 
>   *
> 
>     render to memory
> 
>   *
> 
>     gaussian blur effect support
> 
> 
> svgren usessvgdom <https://github.com/igagis/svgdom>to read the SVG file andcairo <http://cairographics.org/>to render graphics.
> 
> 
> 
> The below code give an overview of how we can we the SVGREN for the svg rendering.
> 
> 
> 
> 
> Please note, that svgren uses C++'11 features, like autoetc.
> 
> 
> First of all we need to include the svgren header file
> 
> #include<svgren/render.hpp>
> 
> #include<papki/FSFile.hpp>//we will need this to load the SVG file
> 
> 
> Then we need to load the SVG file and create the document object model (DOM), let's load the file called camera.svg
> 
> autodom = svgdom::load(papki::FSFile("camera.svg"));
> 
> 
> Then we just render the SVG into a memory buffer
> 
> unsignedwidth = 0; //0 means use width from SVG document
> 
> unsignedheight = 0; //0 means use height from SVG document
> 
> autoimg = svgren::render(*dom, width, height); //uses 96 dpi by default
> 
> //At this point the 'width' and 'height' variables were filled with
> 
> //the actual width and height of the rendered image.
> 
> //Returned 'img' is a std::vector<std::uint32_t> holding array of RGBA values.
> 
> 
> If SVG document specifies any coordinates or lengths in physical units, like millimeters or centimeters or inches, we have to supply the dots per inch (DPI) value of our physical display to the svgren::render() function
> 
> unsignedwidth = 0; //0 means use width from SVG document
> 
> unsignedheight = 0; //0 means use height from SVG document
> 
> autoimg = svgren::render(*dom, width, height, 240); //240 dpi
> 
> After that one can use the rendered image data to display it on any physical display or whatever.
> 
> 
> 
> 
> 
> 
> 
> 
> 
>         7. Please provide a specific timeline for your project.
> 
> Phase I - April 23rd to May 14th (Community Bonding Period)
> 
> 
> This will be the phase where I get to know more about fellow student developers and mentors. This period will involve more discussions regarding the following -
> 
> 
>   *
> 
>     The architecture of the overall project.
> 
>   *
> 
>     what is the workflow?
> 
>   *
> 
>     Getting more about the fellow student developers and mentors.
> 
>   *
> 
>     More discussion about the library and frameworks that we are going to use for our project.
> 
> 
> It shouldn't take such a long span of 20 days for a consensus to be reached. However, I've provided a buffer - just in case it takes time for a consensus to be reached. In case a common consensus is achieved before May 10th, I'll start coding for the next phase.
> 
> 
> Phase II - May 14th to June 15th (Support COLR/CPAL Multicolored font)
> 
> 
> This is the phase where the support of COLR/CPAL Multicolored Font has been done.
> 
> 
> During this phase, I intend to complete the code for support of COLR/CPAL Multicolored font, along with this testing and documentation also be done.
> 
> 
> The first step towards this is to read the binary font file and find out whether COLR/CPAL table is present or not. If present then read the font file and render them into the LibreOffice.
> 
> 
> The period of June 10th - June 15th will also provide some time to have any pending discussions regarding exporters / view-helpers.
> 
> 
>   *
> 
>     *Deliverables ofPhase II -*
> 
>  1.
> 
>     Support Multi Colored font with COLR and CPAL Table.
> 
>  2.
> 
>     Making some public API for using some library in LibreOffice, if needed.
> 
> 
> 
> Phase III - June 16th to July 13th (Support SVG Multicolored font)
> 
> 
> This is the phase where I work for the support of SVG Multicolored Font has been done.
> 
> 
> During this phase, I intend to complete the code for support of SVG Multicolored font, along with this testing and documentation also be done.
> 
> 
> The first step towards this is to read the binary font file and find out whether SVG table is present or not. If present then read the font file and render them into the LibreOffice.
> 
> 
> The period of 4-5 days will also provide some time to have any pending discussions regarding Support of the SVG Multi Colored font in the LibreOffice.
> 
> 
>   *
> 
>     Deliverables of Phase III -
> 
>  1.
> 
>     Support Multi Colored font with COLR and CPAL Table.
> 
>  2.
> 
>     Making some public API for using some library in LibreOffice, if needed.
> 
> Phase IV - July 14th to August 6th (Presentation)
> 
> 
> Finally, a sample Multicolored fontsupport showcasing the usage of the robust deliverables of Multicolored font support with LibreOffice will be required to help the users with getting started quickly. This should be done by last August (including a day of buffer), without documentation of the LibreOffice.
> 
> 
> As of the final phase of submissions that are from August 21st - August 29th, Multicolored Font Support should be deliverable, with a sample Example (with/without documentation) showcasing the use of the Multicolored font in the LibreOffice.
> 
> 
>   *
> 
>     Deliverables of Phase IV -
> 
>  1.
> 
>     Integration of the Multicolored support in the LibreOffice.
> 
>  2.
> 
>     Final Documentation.
> 
>  3.
> 
>     Multicoloured Font Support showcasing.
> 
> 
> 
> 
> 
> 
> -- 
> Thanks and Regards,
> -- 
> /Pappu Kumar/
> /B.Tech (IT & Mathematical innovations)
> /
> /Cluster Innovation Centre/
> /University of Delhi/
> /Mob no.-7533093834, 9971083757/
> 
> 
> 
>> <https://mailtrack.io/> Sent with Mailtrack <https://mailtrack.io?utm_source=gmail&utm_medium=signature&utm_campaign=signaturevirality&>
> 
> 
> _______________________________________________
> LibreOffice mailing list
> LibreOffice at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/libreoffice
> 

-- 
Dr. Heiko Tietze
UX designer
Tel. +49 (0)179/1268509

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/libreoffice/attachments/20180317/41e2a002/attachment.sig>


More information about the LibreOffice mailing list