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
signature.asc
Description: OpenPGP digital signature
_______________________________________________ LibreOffice mailing list LibreOffice@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice