Date: prev next · Thread: first prev next last
2018 Archives by date, by thread · List index


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@gmail.com <mailto:Pappukr@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


Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.