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 :pappukr4...@gmail.com <mailto:papp...@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@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/libreoffice
> 

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

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to