[HarfBuzz] harfbuzz: Branch 'master' - 6 commits
Behdad Esfahbod
behdad at kemper.freedesktop.org
Fri Dec 25 09:42:11 PST 2015
.ci/deploy-docs.sh | 25 +
.travis.yml | 3
docs/HarfBuzz.png |binary
docs/Makefile.am | 16 -
docs/harfbuzz-docs.xml | 54 +++-
docs/usermanual-buffers-language-script-and-direction.xml | 77 +++++
docs/usermanual-ch01.xml | 115 --------
docs/usermanual-ch02.xml | 183 --------------
docs/usermanual-ch03.xml | 77 -----
docs/usermanual-ch04.xml | 18 -
docs/usermanual-ch05.xml | 13
docs/usermanual-ch06.xml | 8
docs/usermanual-fonts-and-faces.xml | 18 +
docs/usermanual-glyph-information.xml | 8
docs/usermanual-hello-harfbuzz.xml | 183 ++++++++++++++
docs/usermanual-install-harfbuzz.xml | 70 +++++
docs/usermanual-opentype-features.xml | 13
docs/usermanual-what-is-harfbuzz.xml | 115 ++++++++
18 files changed, 564 insertions(+), 432 deletions(-)
New commits:
commit e5b90c08a4c1f475560209a5e47628f695606d89
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Fri Dec 25 18:41:41 2015 +0100
[travis] Remove secure var
I've set up a secure var for behdad/harfbuzz through Travis web interface, no need
to set the var here.
diff --git a/.ci/deploy-docs.sh b/.ci/deploy-docs.sh
index 8c60a22..bbd64df 100755
--- a/.ci/deploy-docs.sh
+++ b/.ci/deploy-docs.sh
@@ -1,6 +1,6 @@
set -o errexit -o nounset
-if [ "$TRAVIS_OS_NAME" == "linux" -a "$CC" == "gcc" -a "$TRAVIS_PULL_REQUEST" == "false" -a "$TRAVIS_BRANCH" == "master" ]
+if [ "$TRAVIS_OS_NAME" == "linux" -a "$CC" == "gcc" -a "$TRAVIS_SECURE_ENV_VARS" == "true" -a "$TRAVIS_PULL_REQUEST" == "false" -a "$TRAVIS_BRANCH" == "master" ]
then
DOCSDIR=build-docs
REVISION=$(git rev-parse --short HEAD)
diff --git a/.travis.yml b/.travis.yml
index 798f5ee..89f4012 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -13,7 +13,6 @@ env:
- CFLAGS="-Werror --coverage"
- CXXFLAGS="-Werror --coverage"
- LDFLAGS="--coverage"
- - secure: "EysLG1MB6WCvDVpls5jsJAYsXcbHTmSFYl11UlAQCNfU+MBv7qiuOR6im3tM4ISzt4TY+OQXxEktMFRT+8govLR4UWo8dwmZ4P/2GqMbsZNPVSLkbDEy6hVv7xe5X4mp+npHthY1Z1YOLKGAh/u1PymySZz6qAzsCZ6Fq/H5Ri8="
install:
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then pip install --user nose; fi
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then pip install --user cpp-coveralls; fi # for coveralls.io code coverage tracking
commit e75c1ffdf548185ce1f1df7937f0d028e5e40efe
Merge: 6173c2a d25317f
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Fri Dec 25 18:21:08 2015 +0100
Merge pull request #199 from behdad/travis-docs
Deploy docs to gh-pages branch from Travis builds
commit d25317f67f3c5c77f9059961935b0f35cbaa9ac4
Author: Khaled Hosny <khaledhosny at eglug.org>
Date: Wed Dec 23 01:29:48 2015 +0400
Move more docs from FreeDesktop page
diff --git a/docs/Makefile.am b/docs/Makefile.am
index 05a27db..5e6fd2b 100644
--- a/docs/Makefile.am
+++ b/docs/Makefile.am
@@ -75,6 +75,7 @@ content_files= \
usermanual-fonts-and-faces.xml \
usermanual-glyph-information.xml \
usermanual-hello-harfbuzz.xml \
+ usermanual-install-harfbuzz.xml \
usermanual-opentype-features.xml \
usermanual-what-is-harfbuzz.xml \
version.xml
diff --git a/docs/harfbuzz-docs.xml b/docs/harfbuzz-docs.xml
index 49252f7..7d2232f 100644
--- a/docs/harfbuzz-docs.xml
+++ b/docs/harfbuzz-docs.xml
@@ -7,11 +7,6 @@
<book id="index">
<bookinfo>
<title>HarfBuzz Manual</title>
- <releaseinfo>
- This document is for HarfBuzz &version;.
- <!--The latest version of this documentation can be found on-line at
- <ulink role="online-location" url="http://[SERVER]/libharfbuzz/index.html">http://[SERVER]/libharfbuzz/</ulink>.-->
- </releaseinfo>
<abstract>
<title>HarfBuzz</title>
<graphic fileref="HarfBuzz.png" format="PNG" align="center"/>
@@ -28,7 +23,7 @@
<ulink url="http://cgit.freedesktop.org/harfbuzz/">here</ulink>.
Also available on
<ulink url="https://github.com/behdad/harfbuzz">github</ulink>.
- See below for release tarballs.
+ See <xref linkend="download" endterm="download.title"/> for release tarballs.
</para>
<para>
The old HarfBuzz codebase, these days known as harfbuzz-old, was
@@ -46,6 +41,7 @@
<part>
<title>User's manual</title>
<xi:include href="usermanual-what-is-harfbuzz.xml"/>
+ <xi:include href="usermanual-install-harfbuzz.xml"/>
<xi:include href="usermanual-hello-harfbuzz.xml"/>
<xi:include href="usermanual-buffers-language-script-and-direction.xml"/>
<xi:include href="usermanual-fonts-and-faces.xml"/>
@@ -54,6 +50,13 @@
</part>
<part>
+ <partinfo>
+ <releaseinfo>
+ This document is for HarfBuzz &version;.
+ <!--The latest version of this documentation can be found on-line at
+ <ulink role="online-location" url="http://[SERVER]/libharfbuzz/index.html">http://[SERVER]/libharfbuzz/</ulink>.-->
+ </releaseinfo>
+ </partinfo>
<title>Reference manual</title>
<chapter>
<title>Harfbuzz API</title>
diff --git a/docs/usermanual-install-harfbuzz.xml b/docs/usermanual-install-harfbuzz.xml
new file mode 100644
index 0000000..be8ac8d
--- /dev/null
+++ b/docs/usermanual-install-harfbuzz.xml
@@ -0,0 +1,70 @@
+<chapter id="install-harfbuzz">
+ <title>Install Harfbuzz</title>
+ <section id="download">
+ <title id="download.title">Download</title>
+ <para>
+ For tarball releases of HarfBuzz, look
+ <ulink url="http://www.freedesktop.org/software/harfbuzz/release/">here</ulink>.
+ At the same place you will
+ also find Win32 binary bundles that include libharfbuzz DLL, hb-view.exe,
+ hb-shape.exe, and all dependencies.
+ </para>
+ <para>
+ The canonical source tree is available
+ <ulink url="http://cgit.freedesktop.org/harfbuzz/">here</ulink>.
+ Also available on <ulink url="https://github.com/behdad/harfbuzz">github</ulink>.
+ </para>
+ <para>
+ The API that comes with <filename class='headerfile'>hb.h</filename> will
+ not change incompatibly. Other, peripheral, headers are more likely to go
+ through minor modifications, but again, will do our best to never change
+ API in an incompatible way. We will never break the ABI.
+ </para>
+ <para>
+ If you are not sure whether Pango or HarfBuzz is right for you, read
+ <ulink url="http://mces.blogspot.in/2009/11/pango-vs-harfbuzz.html">this</ulink>.
+ </para>
+ </section>
+ <section id="building">
+ <title>Building</title>
+ <para>
+ On Linux, install the development packages for FreeType, Cairo, and GLib.
+ For example, on Ubuntu / Debian, you would do:
+ <programlisting>
+<command>sudo apt-get install</command> <package>gcc g++ libfreetype6-dev libglib2.0-dev libcairo2-dev</package>
+ </programlisting>
+ whereas on Fedora, RHEL, CentOS, and other Red Hat based systems you would do:
+ <programlisting>
+<command>sudo yum install</command> <package>gcc gcc-c++ freetype-devel glib2-devel cairo-devel</package>
+ </programlisting>
+ or using MacPorts:
+ <programlisting>
+<command>sudo port install</command> <package>freetype glib2 cairo</package>
+ </programlisting>
+ </para>
+ <para>
+ If you are using a tarball, you can now proceed to running
+ <command>configure</command> and <command>make</command> as with any
+ other standard package. That should leave you with a shared library in
+ <filename>src/</filename>, and a few utility programs including hb-view
+ and hb-shape under <filename>util/</filename>.
+ </para>
+ <para>
+ If you are bootstraping from git, you need a few more tools before you
+ can run <filename>autogen.sh</filename> for the first time. Namely,
+ pkg-config and <ulink url="http://www.complang.org/ragel/">ragel</ulink>.
+ Again, on Ubuntu / Debian:
+ <programlisting>
+<command>sudo apt-get install</command> <package>autoconf automake libtool pkg-config ragel gtk-doc-tools</package>
+ </programlisting>
+ and on Fedora, RHEL, CentOS:
+ <programlisting>
+<command>sudo yum install</command> <package>autoconf automake libtool pkgconfig ragel gtk-doc</package>
+ </programlisting>
+ or using MacPorts:
+ <programlisting>
+<command>sudo port install</command> <package>autoconf automake libtool pkgconfig ragel gtk-doc</package>
+ </programlisting>
+ </para>
+ </section>
+</chapter>
commit 493a92220844c8996be67c8a7a2c5447942fe2c1
Author: Khaled Hosny <khaledhosny at eglug.org>
Date: Wed Dec 23 00:33:41 2015 +0400
Rename user manual files
Use chapter ids instead of numbers, so that we can reorder them,
introduce new ones etc. without the numbers becoming out of date.
diff --git a/docs/Makefile.am b/docs/Makefile.am
index 64344b8..05a27db 100644
--- a/docs/Makefile.am
+++ b/docs/Makefile.am
@@ -71,12 +71,12 @@ HTML_IMAGES= \
# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
content_files= \
- usermanual-ch01.xml \
- usermanual-ch02.xml \
- usermanual-ch03.xml \
- usermanual-ch04.xml \
- usermanual-ch05.xml \
- usermanual-ch06.xml \
+ usermanual-buffers-language-script-and-direction.xml \
+ usermanual-fonts-and-faces.xml \
+ usermanual-glyph-information.xml \
+ usermanual-hello-harfbuzz.xml \
+ usermanual-opentype-features.xml \
+ usermanual-what-is-harfbuzz.xml \
version.xml
# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
diff --git a/docs/harfbuzz-docs.xml b/docs/harfbuzz-docs.xml
index a7efbf8..49252f7 100644
--- a/docs/harfbuzz-docs.xml
+++ b/docs/harfbuzz-docs.xml
@@ -45,12 +45,12 @@
<part>
<title>User's manual</title>
- <xi:include href="usermanual-ch01.xml"/>
- <xi:include href="usermanual-ch02.xml"/>
- <xi:include href="usermanual-ch03.xml"/>
- <xi:include href="usermanual-ch04.xml"/>
- <xi:include href="usermanual-ch05.xml"/>
- <xi:include href="usermanual-ch06.xml"/>
+ <xi:include href="usermanual-what-is-harfbuzz.xml"/>
+ <xi:include href="usermanual-hello-harfbuzz.xml"/>
+ <xi:include href="usermanual-buffers-language-script-and-direction.xml"/>
+ <xi:include href="usermanual-fonts-and-faces.xml"/>
+ <xi:include href="usermanual-opentype-features.xml"/>
+ <xi:include href="usermanual-glyph-information.xml"/>
</part>
<part>
diff --git a/docs/usermanual-buffers-language-script-and-direction.xml b/docs/usermanual-buffers-language-script-and-direction.xml
new file mode 100644
index 0000000..3a26c55
--- /dev/null
+++ b/docs/usermanual-buffers-language-script-and-direction.xml
@@ -0,0 +1,77 @@
+<chapter id="buffers-language-script-and-direction">
+ <title>Buffers, language, script and direction</title>
+ <para>
+ The input to Harfbuzz is a series of Unicode characters, stored in a
+ buffer. In this chapter, we'll look at how to set up a buffer with
+ the text that we want and then customize the properties of the
+ buffer.
+ </para>
+ <section id="creating-and-destroying-buffers">
+ <title>Creating and destroying buffers</title>
+ <para>
+ As we saw in our initial example, a buffer is created and
+ initialized with <literal>hb_buffer_create()</literal>. This
+ produces a new, empty buffer object, instantiated with some
+ default values and ready to accept your Unicode strings.
+ </para>
+ <para>
+ Harfbuzz manages the memory of objects that it creates (such as
+ buffers), so you don't have to. When you have finished working on
+ a buffer, you can call <literal>hb_buffer_destroy()</literal>:
+ </para>
+ <programlisting language="C">
+ hb_buffer_t *buffer = hb_buffer_create();
+ ...
+ hb_buffer_destroy(buffer);
+</programlisting>
+ <para>
+ This will destroy the object and free its associated memory -
+ unless some other part of the program holds a reference to this
+ buffer. If you acquire a Harfbuzz buffer from another subsystem
+ and want to ensure that it is not garbage collected by someone
+ else destroying it, you should increase its reference count:
+ </para>
+ <programlisting language="C">
+void somefunc(hb_buffer_t *buffer) {
+ buffer = hb_buffer_reference(buffer);
+ ...
+</programlisting>
+ <para>
+ And then decrease it once you're done with it:
+ </para>
+ <programlisting language="C">
+ hb_buffer_destroy(buffer);
+}
+</programlisting>
+ <para>
+ To throw away all the data in your buffer and start from scratch,
+ call <literal>hb_buffer_reset(buffer)</literal>. If you want to
+ throw away the string in the buffer but keep the options, you can
+ instead call <literal>hb_buffer_clear_contents(buffer)</literal>.
+ </para>
+ </section>
+ <section id="adding-text-to-the-buffer">
+ <title>Adding text to the buffer</title>
+ <para>
+ Now we have a brand new Harfbuzz buffer. Let's start filling it
+ with text! From Harfbuzz's perspective, a buffer is just a stream
+ of Unicode codepoints, but your input string is probably in one of
+ the standard Unicode character encodings (UTF-8, UTF-16, UTF-32)
+ </para>
+ </section>
+ <section id="setting-buffer-properties">
+ <title>Setting buffer properties</title>
+ <para>
+ </para>
+ </section>
+ <section id="what-about-the-other-scripts">
+ <title>What about the other scripts?</title>
+ <para>
+ </para>
+ </section>
+ <section id="customizing-unicode-functions">
+ <title>Customizing Unicode functions</title>
+ <para>
+ </para>
+ </section>
+</chapter>
\ No newline at end of file
diff --git a/docs/usermanual-ch01.xml b/docs/usermanual-ch01.xml
deleted file mode 100644
index 3574d75..0000000
--- a/docs/usermanual-ch01.xml
+++ /dev/null
@@ -1,115 +0,0 @@
-<chapter id="what-is-harfbuzz">
- <title>What is Harfbuzz?</title>
- <para>
- Harfbuzz is a <emphasis>text shaping engine</emphasis>. It solves
- the problem of selecting and positioning glyphs from a font given a
- Unicode string.
- </para>
- <section id="why-do-i-need-it">
- <title>Why do I need it?</title>
- <para>
- Text shaping is an integral part of preparing text for display. It
- is a fairly low level operation; Harfbuzz is used directly by
- graphic rendering libraries such as Pango, and the layout engines
- in Firefox, LibreOffice and Chromium. Unless you are
- <emphasis>writing</emphasis> one of these layout engines yourself,
- you will probably not need to use Harfbuzz - normally higher level
- libraries will turn text into glyphs for you.
- </para>
- <para>
- However, if you <emphasis>are</emphasis> writing a layout engine
- or graphics library yourself, you will need to perform text
- shaping, and this is where Harfbuzz can help you. Here are some
- reasons why you need it:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- OpenType fonts contain a set of glyphs, indexed by glyph ID.
- The glyph ID within the font does not necessarily relate to a
- Unicode codepoint. For instance, some fonts have the letter
- "a" as glyph ID 1. To pull the right glyph out of
- the font in order to display it, you need to consult a table
- within the font (the "cmap" table) which maps
- Unicode codepoints to glyph IDs. Text shaping turns codepoints
- into glyph IDs.
- </para>
- </listitem>
- <listitem>
- <para>
- Many OpenType fonts contain ligatures: combinations of
- characters which are rendered together. For instance, it's
- common for the <literal>fi</literal> combination to appear in
- print as the single ligature "fi". Whether you should
- render text as <literal>fi</literal> or "fi" does not
- depend on the input text, but on the capabilities of the font
- and the level of ligature application you wish to perform.
- Text shaping involves querying the font's ligature tables and
- determining what substitutions should be made.
- </para>
- </listitem>
- <listitem>
- <para>
- While ligatures like "fi" are typographic
- refinements, some languages <emphasis>require</emphasis> such
- substitutions to be made in order to display text correctly.
- In Tamil, when the letter "TTA" (ட) letter is
- followed by "U" (உ), the combination should appear
- as the single glyph "டு". The sequence of Unicode
- characters "டஉ" needs to be rendered as a single
- glyph from the font - text shaping chooses the correct glyph
- from the sequence of characters provided.
- </para>
- </listitem>
- <listitem>
- <para>
- Similarly, each Arabic character has four different variants:
- within a font, there will be glyphs for the initial, medial,
- final, and isolated forms of each letter. Unicode only encodes
- one codepoint per character, and so a Unicode string will not
- tell you which glyph to use. Text shaping chooses the correct
- form of the letter and returns the correct glyph from the font
- that you need to render.
- </para>
- </listitem>
- <listitem>
- <para>
- Other languages have marks and accents which need to be
- rendered in certain positions around a base character. For
- instance, the Moldovan language has the Cyrillic letter
- "zhe" (ж) with a breve accent, like so: ӂ. Some
- fonts will contain this character as an individual glyph,
- whereas other fonts will not contain a zhe-with-breve glyph
- but expect the rendering engine to form the character by
- overlaying the two glyphs ж and ˘. Where you should draw the
- combining breve depends on the height of the preceding glyph.
- Again, for Arabic, the correct positioning of vowel marks
- depends on the height of the character on which you are
- placing the mark. Text shaping tells you whether you have a
- precomposed glyph within your font or if you need to compose a
- glyph yourself out of combining marks, and if so, where to
- position those marks.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- If this is something that you need to do, then you need a text
- shaping engine: you could use Uniscribe if you are using Windows;
- you could use CoreText on OS X; or you could use Harfbuzz. In the
- rest of this manual, we are going to assume that you are the
- implementor of a text layout engine.
- </para>
- </section>
- <section id="why-is-it-called-harfbuzz">
- <title>Why is it called Harfbuzz?</title>
- <para>
- Harfbuzz began its life as text shaping code within the FreeType
- project, (and you will see references to the FreeType authors
- within the source code copyright declarations) but was then
- abstracted out to its own project. This project is maintained by
- Behdad Esfahbod, and named Harfbuzz. Originally, it was a shaping
- engine for OpenType fonts - "Harfbuzz" is the Persian
- for "open type".
- </para>
- </section>
-</chapter>
\ No newline at end of file
diff --git a/docs/usermanual-ch02.xml b/docs/usermanual-ch02.xml
deleted file mode 100644
index 34db017..0000000
--- a/docs/usermanual-ch02.xml
+++ /dev/null
@@ -1,183 +0,0 @@
-<chapter id="hello-harfbuzz">
- <title>Hello, Harfbuzz</title>
- <para>
- Here's the simplest Harfbuzz that can possibly work. We will improve
- it later.
- </para>
- <orderedlist numeration="arabic">
- <listitem>
- <para>
- Create a buffer and put your text in it.
- </para>
- </listitem>
- </orderedlist>
- <programlisting language="C">
- #include <hb.h>
- hb_buffer_t *buf;
- buf = hb_buffer_create();
- hb_buffer_add_utf8(buf, text, strlen(text), 0, strlen(text));
-</programlisting>
- <orderedlist numeration="arabic">
- <listitem override="2">
- <para>
- Guess the script, language and direction of the buffer.
- </para>
- </listitem>
- </orderedlist>
- <programlisting language="C">
- hb_buffer_guess_segment_properties(buf);
-</programlisting>
- <orderedlist numeration="arabic">
- <listitem override="3">
- <para>
- Create a face and a font, using FreeType for now.
- </para>
- </listitem>
- </orderedlist>
- <programlisting language="C">
- #include <hb-ft.h>
- FT_New_Face(ft_library, font_path, index, &face)
- hb_font_t *font = hb_ft_font_create(face);
-</programlisting>
- <orderedlist numeration="arabic">
- <listitem override="4">
- <para>
- Shape!
- </para>
- </listitem>
- </orderedlist>
- <programlisting>
- hb_shape(font, buf, NULL, 0);
-</programlisting>
- <orderedlist numeration="arabic">
- <listitem override="5">
- <para>
- Get the glyph and position information.
- </para>
- </listitem>
- </orderedlist>
- <programlisting language="C">
- hb_glyph_info_t *glyph_info = hb_buffer_get_glyph_infos(buf, &glyph_count);
- hb_glyph_position_t *glyph_pos = hb_buffer_get_glyph_positions(buf, &glyph_count);
-</programlisting>
- <orderedlist numeration="arabic">
- <listitem override="6">
- <para>
- Iterate over each glyph.
- </para>
- </listitem>
- </orderedlist>
- <programlisting language="C">
- for (i = 0; i < glyph_count; ++i) {
- glyphid = glyph_info[i].codepoint;
- x_offset = glyph_pos[i].x_offset / 64.0;
- y_offset = glyph_pos[i].y_offset / 64.0;
- x_advance = glyph_pos[i].x_advance / 64.0;
- y_advance = glyph_pos[i].y_advance / 64.0;
- draw_glyph(glyphid, cursor_x + x_offset, cursor_y + y_offset);
- cursor_x += x_advance;
- cursor_y += y_advance;
- }
-</programlisting>
- <orderedlist numeration="arabic">
- <listitem override="7">
- <para>
- Tidy up.
- </para>
- </listitem>
- </orderedlist>
- <programlisting language="C">
- hb_buffer_destroy(buf);
- hb_font_destroy(hb_ft_font);
-</programlisting>
- <section id="what-harfbuzz-doesnt-do">
- <title>What Harfbuzz doesn't do</title>
- <para>
- The code above will take a UTF8 string, shape it, and give you the
- information required to lay it out correctly on a single
- horizontal (or vertical) line using the font provided. That is the
- extent of Harfbuzz's responsibility.
- </para>
- <para>
- If you are implementing a text layout engine you may have other
- responsibilities, that Harfbuzz will not help you with:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- Harfbuzz won't help you with bidirectionality. If you want to
- lay out text with mixed Hebrew and English, you will need to
- ensure that the buffer provided to Harfbuzz has those
- characters in the correct layout order. This will be different
- from the logical order in which the Unicode text is stored. In
- other words, the user will hit the keys in the following
- sequence:
- </para>
- <programlisting>
-A B C [space] ג ב א [space] D E F
- </programlisting>
- <para>
- but will expect to see in the output:
- </para>
- <programlisting>
-ABC אבג DEF
- </programlisting>
- <para>
- This reordering is called <emphasis>bidi processing</emphasis>
- ("bidi" is short for bidirectional), and there's an
- algorithm as an annex to the Unicode Standard which tells you how
- to reorder a string from logical order into presentation order.
- Before sending your string to Harfbuzz, you may need to apply the
- bidi algorithm to it. Libraries such as ICU and fribidi can do
- this for you.
- </para>
- </listitem>
- <listitem>
- <para>
- Harfbuzz won't help you with text that contains different font
- properties. For instance, if you have the string "a
- <emphasis>huge</emphasis> breakfast", and you expect
- "huge" to be italic, you will need to send three
- strings to Harfbuzz: <literal>a</literal>, in your Roman font;
- <literal>huge</literal> using your italic font; and
- <literal>breakfast</literal> using your Roman font again.
- Similarly if you change font, font size, script, language or
- direction within your string, you will need to shape each run
- independently and then output them independently. Harfbuzz
- expects to shape a run of characters sharing the same
- properties.
- </para>
- </listitem>
- <listitem>
- <para>
- Harfbuzz won't help you with line breaking, hyphenation or
- justification. As mentioned above, it lays out the string
- along a <emphasis>single line</emphasis> of, notionally,
- infinite length. If you want to find out where the potential
- word, sentence and line break points are in your text, you
- could use the ICU library's break iterator functions.
- </para>
- <para>
- Harfbuzz can tell you how wide a shaped piece of text is, which is
- useful input to a justification algorithm, but it knows nothing
- about paragraphs, lines or line lengths. Nor will it adjust the
- space between words to fit them proportionally into a line. If you
- want to layout text in paragraphs, you will probably want to send
- each word of your text to Harfbuzz to determine its shaped width
- after glyph substitutions, then work out how many words will fit
- on a line, and then finally output each word of the line separated
- by a space of the correct size to fully justify the paragraph.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- As a layout engine implementor, Harfbuzz will help you with the
- interface between your text and your font, and that's something
- that you'll need - what you then do with the glyphs that your font
- returns is up to you. The example we saw above enough to get us
- started using Harfbuzz. Now we are going to use the remainder of
- Harfbuzz's API to refine that example and improve our text shaping
- capabilities.
- </para>
- </section>
-</chapter>
\ No newline at end of file
diff --git a/docs/usermanual-ch03.xml b/docs/usermanual-ch03.xml
deleted file mode 100644
index 3a26c55..0000000
--- a/docs/usermanual-ch03.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<chapter id="buffers-language-script-and-direction">
- <title>Buffers, language, script and direction</title>
- <para>
- The input to Harfbuzz is a series of Unicode characters, stored in a
- buffer. In this chapter, we'll look at how to set up a buffer with
- the text that we want and then customize the properties of the
- buffer.
- </para>
- <section id="creating-and-destroying-buffers">
- <title>Creating and destroying buffers</title>
- <para>
- As we saw in our initial example, a buffer is created and
- initialized with <literal>hb_buffer_create()</literal>. This
- produces a new, empty buffer object, instantiated with some
- default values and ready to accept your Unicode strings.
- </para>
- <para>
- Harfbuzz manages the memory of objects that it creates (such as
- buffers), so you don't have to. When you have finished working on
- a buffer, you can call <literal>hb_buffer_destroy()</literal>:
- </para>
- <programlisting language="C">
- hb_buffer_t *buffer = hb_buffer_create();
- ...
- hb_buffer_destroy(buffer);
-</programlisting>
- <para>
- This will destroy the object and free its associated memory -
- unless some other part of the program holds a reference to this
- buffer. If you acquire a Harfbuzz buffer from another subsystem
- and want to ensure that it is not garbage collected by someone
- else destroying it, you should increase its reference count:
- </para>
- <programlisting language="C">
-void somefunc(hb_buffer_t *buffer) {
- buffer = hb_buffer_reference(buffer);
- ...
-</programlisting>
- <para>
- And then decrease it once you're done with it:
- </para>
- <programlisting language="C">
- hb_buffer_destroy(buffer);
-}
-</programlisting>
- <para>
- To throw away all the data in your buffer and start from scratch,
- call <literal>hb_buffer_reset(buffer)</literal>. If you want to
- throw away the string in the buffer but keep the options, you can
- instead call <literal>hb_buffer_clear_contents(buffer)</literal>.
- </para>
- </section>
- <section id="adding-text-to-the-buffer">
- <title>Adding text to the buffer</title>
- <para>
- Now we have a brand new Harfbuzz buffer. Let's start filling it
- with text! From Harfbuzz's perspective, a buffer is just a stream
- of Unicode codepoints, but your input string is probably in one of
- the standard Unicode character encodings (UTF-8, UTF-16, UTF-32)
- </para>
- </section>
- <section id="setting-buffer-properties">
- <title>Setting buffer properties</title>
- <para>
- </para>
- </section>
- <section id="what-about-the-other-scripts">
- <title>What about the other scripts?</title>
- <para>
- </para>
- </section>
- <section id="customizing-unicode-functions">
- <title>Customizing Unicode functions</title>
- <para>
- </para>
- </section>
-</chapter>
\ No newline at end of file
diff --git a/docs/usermanual-ch04.xml b/docs/usermanual-ch04.xml
deleted file mode 100644
index 01fcdc9..0000000
--- a/docs/usermanual-ch04.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<chapter id="fonts-and-faces">
- <title>Fonts and faces</title>
- <section id="using-freetype">
- <title>Using FreeType</title>
- <para>
- </para>
- </section>
- <section id="using-harfbuzzs-native-opentype-implementation">
- <title>Using Harfbuzz's native OpenType implementation</title>
- <para>
- </para>
- </section>
- <section id="using-your-own-font-functions">
- <title>Using your own font functions</title>
- <para>
- </para>
- </section>
-</chapter>
\ No newline at end of file
diff --git a/docs/usermanual-ch05.xml b/docs/usermanual-ch05.xml
deleted file mode 100644
index 470bab8..0000000
--- a/docs/usermanual-ch05.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<chapter id="shaping-and-shape-plans">
- <title>Shaping and shape plans</title>
- <section id="opentype-features">
- <title>OpenType features</title>
- <para>
- </para>
- </section>
- <section id="plans-and-caching">
- <title>Plans and caching</title>
- <para>
- </para>
- </section>
-</chapter>
\ No newline at end of file
diff --git a/docs/usermanual-ch06.xml b/docs/usermanual-ch06.xml
deleted file mode 100644
index ca674c0..0000000
--- a/docs/usermanual-ch06.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<sect1 id="glyph-information">
- <title>Glyph information</title>
- <sect2 id="names-and-numbers">
- <title>Names and numbers</title>
- <para>
- </para>
- </sect2>
-</sect1>
\ No newline at end of file
diff --git a/docs/usermanual-fonts-and-faces.xml b/docs/usermanual-fonts-and-faces.xml
new file mode 100644
index 0000000..01fcdc9
--- /dev/null
+++ b/docs/usermanual-fonts-and-faces.xml
@@ -0,0 +1,18 @@
+<chapter id="fonts-and-faces">
+ <title>Fonts and faces</title>
+ <section id="using-freetype">
+ <title>Using FreeType</title>
+ <para>
+ </para>
+ </section>
+ <section id="using-harfbuzzs-native-opentype-implementation">
+ <title>Using Harfbuzz's native OpenType implementation</title>
+ <para>
+ </para>
+ </section>
+ <section id="using-your-own-font-functions">
+ <title>Using your own font functions</title>
+ <para>
+ </para>
+ </section>
+</chapter>
\ No newline at end of file
diff --git a/docs/usermanual-glyph-information.xml b/docs/usermanual-glyph-information.xml
new file mode 100644
index 0000000..ca674c0
--- /dev/null
+++ b/docs/usermanual-glyph-information.xml
@@ -0,0 +1,8 @@
+<sect1 id="glyph-information">
+ <title>Glyph information</title>
+ <sect2 id="names-and-numbers">
+ <title>Names and numbers</title>
+ <para>
+ </para>
+ </sect2>
+</sect1>
\ No newline at end of file
diff --git a/docs/usermanual-hello-harfbuzz.xml b/docs/usermanual-hello-harfbuzz.xml
new file mode 100644
index 0000000..34db017
--- /dev/null
+++ b/docs/usermanual-hello-harfbuzz.xml
@@ -0,0 +1,183 @@
+<chapter id="hello-harfbuzz">
+ <title>Hello, Harfbuzz</title>
+ <para>
+ Here's the simplest Harfbuzz that can possibly work. We will improve
+ it later.
+ </para>
+ <orderedlist numeration="arabic">
+ <listitem>
+ <para>
+ Create a buffer and put your text in it.
+ </para>
+ </listitem>
+ </orderedlist>
+ <programlisting language="C">
+ #include <hb.h>
+ hb_buffer_t *buf;
+ buf = hb_buffer_create();
+ hb_buffer_add_utf8(buf, text, strlen(text), 0, strlen(text));
+</programlisting>
+ <orderedlist numeration="arabic">
+ <listitem override="2">
+ <para>
+ Guess the script, language and direction of the buffer.
+ </para>
+ </listitem>
+ </orderedlist>
+ <programlisting language="C">
+ hb_buffer_guess_segment_properties(buf);
+</programlisting>
+ <orderedlist numeration="arabic">
+ <listitem override="3">
+ <para>
+ Create a face and a font, using FreeType for now.
+ </para>
+ </listitem>
+ </orderedlist>
+ <programlisting language="C">
+ #include <hb-ft.h>
+ FT_New_Face(ft_library, font_path, index, &face)
+ hb_font_t *font = hb_ft_font_create(face);
+</programlisting>
+ <orderedlist numeration="arabic">
+ <listitem override="4">
+ <para>
+ Shape!
+ </para>
+ </listitem>
+ </orderedlist>
+ <programlisting>
+ hb_shape(font, buf, NULL, 0);
+</programlisting>
+ <orderedlist numeration="arabic">
+ <listitem override="5">
+ <para>
+ Get the glyph and position information.
+ </para>
+ </listitem>
+ </orderedlist>
+ <programlisting language="C">
+ hb_glyph_info_t *glyph_info = hb_buffer_get_glyph_infos(buf, &glyph_count);
+ hb_glyph_position_t *glyph_pos = hb_buffer_get_glyph_positions(buf, &glyph_count);
+</programlisting>
+ <orderedlist numeration="arabic">
+ <listitem override="6">
+ <para>
+ Iterate over each glyph.
+ </para>
+ </listitem>
+ </orderedlist>
+ <programlisting language="C">
+ for (i = 0; i < glyph_count; ++i) {
+ glyphid = glyph_info[i].codepoint;
+ x_offset = glyph_pos[i].x_offset / 64.0;
+ y_offset = glyph_pos[i].y_offset / 64.0;
+ x_advance = glyph_pos[i].x_advance / 64.0;
+ y_advance = glyph_pos[i].y_advance / 64.0;
+ draw_glyph(glyphid, cursor_x + x_offset, cursor_y + y_offset);
+ cursor_x += x_advance;
+ cursor_y += y_advance;
+ }
+</programlisting>
+ <orderedlist numeration="arabic">
+ <listitem override="7">
+ <para>
+ Tidy up.
+ </para>
+ </listitem>
+ </orderedlist>
+ <programlisting language="C">
+ hb_buffer_destroy(buf);
+ hb_font_destroy(hb_ft_font);
+</programlisting>
+ <section id="what-harfbuzz-doesnt-do">
+ <title>What Harfbuzz doesn't do</title>
+ <para>
+ The code above will take a UTF8 string, shape it, and give you the
+ information required to lay it out correctly on a single
+ horizontal (or vertical) line using the font provided. That is the
+ extent of Harfbuzz's responsibility.
+ </para>
+ <para>
+ If you are implementing a text layout engine you may have other
+ responsibilities, that Harfbuzz will not help you with:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ Harfbuzz won't help you with bidirectionality. If you want to
+ lay out text with mixed Hebrew and English, you will need to
+ ensure that the buffer provided to Harfbuzz has those
+ characters in the correct layout order. This will be different
+ from the logical order in which the Unicode text is stored. In
+ other words, the user will hit the keys in the following
+ sequence:
+ </para>
+ <programlisting>
+A B C [space] ג ב א [space] D E F
+ </programlisting>
+ <para>
+ but will expect to see in the output:
+ </para>
+ <programlisting>
+ABC אבג DEF
+ </programlisting>
+ <para>
+ This reordering is called <emphasis>bidi processing</emphasis>
+ ("bidi" is short for bidirectional), and there's an
+ algorithm as an annex to the Unicode Standard which tells you how
+ to reorder a string from logical order into presentation order.
+ Before sending your string to Harfbuzz, you may need to apply the
+ bidi algorithm to it. Libraries such as ICU and fribidi can do
+ this for you.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Harfbuzz won't help you with text that contains different font
+ properties. For instance, if you have the string "a
+ <emphasis>huge</emphasis> breakfast", and you expect
+ "huge" to be italic, you will need to send three
+ strings to Harfbuzz: <literal>a</literal>, in your Roman font;
+ <literal>huge</literal> using your italic font; and
+ <literal>breakfast</literal> using your Roman font again.
+ Similarly if you change font, font size, script, language or
+ direction within your string, you will need to shape each run
+ independently and then output them independently. Harfbuzz
+ expects to shape a run of characters sharing the same
+ properties.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Harfbuzz won't help you with line breaking, hyphenation or
+ justification. As mentioned above, it lays out the string
+ along a <emphasis>single line</emphasis> of, notionally,
+ infinite length. If you want to find out where the potential
+ word, sentence and line break points are in your text, you
+ could use the ICU library's break iterator functions.
+ </para>
+ <para>
+ Harfbuzz can tell you how wide a shaped piece of text is, which is
+ useful input to a justification algorithm, but it knows nothing
+ about paragraphs, lines or line lengths. Nor will it adjust the
+ space between words to fit them proportionally into a line. If you
+ want to layout text in paragraphs, you will probably want to send
+ each word of your text to Harfbuzz to determine its shaped width
+ after glyph substitutions, then work out how many words will fit
+ on a line, and then finally output each word of the line separated
+ by a space of the correct size to fully justify the paragraph.
+ </para>
+ </listitem>
+ </itemizedlist>
+ <para>
+ As a layout engine implementor, Harfbuzz will help you with the
+ interface between your text and your font, and that's something
+ that you'll need - what you then do with the glyphs that your font
+ returns is up to you. The example we saw above enough to get us
+ started using Harfbuzz. Now we are going to use the remainder of
+ Harfbuzz's API to refine that example and improve our text shaping
+ capabilities.
+ </para>
+ </section>
+</chapter>
\ No newline at end of file
diff --git a/docs/usermanual-opentype-features.xml b/docs/usermanual-opentype-features.xml
new file mode 100644
index 0000000..470bab8
--- /dev/null
+++ b/docs/usermanual-opentype-features.xml
@@ -0,0 +1,13 @@
+<chapter id="shaping-and-shape-plans">
+ <title>Shaping and shape plans</title>
+ <section id="opentype-features">
+ <title>OpenType features</title>
+ <para>
+ </para>
+ </section>
+ <section id="plans-and-caching">
+ <title>Plans and caching</title>
+ <para>
+ </para>
+ </section>
+</chapter>
\ No newline at end of file
diff --git a/docs/usermanual-what-is-harfbuzz.xml b/docs/usermanual-what-is-harfbuzz.xml
new file mode 100644
index 0000000..3574d75
--- /dev/null
+++ b/docs/usermanual-what-is-harfbuzz.xml
@@ -0,0 +1,115 @@
+<chapter id="what-is-harfbuzz">
+ <title>What is Harfbuzz?</title>
+ <para>
+ Harfbuzz is a <emphasis>text shaping engine</emphasis>. It solves
+ the problem of selecting and positioning glyphs from a font given a
+ Unicode string.
+ </para>
+ <section id="why-do-i-need-it">
+ <title>Why do I need it?</title>
+ <para>
+ Text shaping is an integral part of preparing text for display. It
+ is a fairly low level operation; Harfbuzz is used directly by
+ graphic rendering libraries such as Pango, and the layout engines
+ in Firefox, LibreOffice and Chromium. Unless you are
+ <emphasis>writing</emphasis> one of these layout engines yourself,
+ you will probably not need to use Harfbuzz - normally higher level
+ libraries will turn text into glyphs for you.
+ </para>
+ <para>
+ However, if you <emphasis>are</emphasis> writing a layout engine
+ or graphics library yourself, you will need to perform text
+ shaping, and this is where Harfbuzz can help you. Here are some
+ reasons why you need it:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ OpenType fonts contain a set of glyphs, indexed by glyph ID.
+ The glyph ID within the font does not necessarily relate to a
+ Unicode codepoint. For instance, some fonts have the letter
+ "a" as glyph ID 1. To pull the right glyph out of
+ the font in order to display it, you need to consult a table
+ within the font (the "cmap" table) which maps
+ Unicode codepoints to glyph IDs. Text shaping turns codepoints
+ into glyph IDs.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Many OpenType fonts contain ligatures: combinations of
+ characters which are rendered together. For instance, it's
+ common for the <literal>fi</literal> combination to appear in
+ print as the single ligature "fi". Whether you should
+ render text as <literal>fi</literal> or "fi" does not
+ depend on the input text, but on the capabilities of the font
+ and the level of ligature application you wish to perform.
+ Text shaping involves querying the font's ligature tables and
+ determining what substitutions should be made.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ While ligatures like "fi" are typographic
+ refinements, some languages <emphasis>require</emphasis> such
+ substitutions to be made in order to display text correctly.
+ In Tamil, when the letter "TTA" (ட) letter is
+ followed by "U" (உ), the combination should appear
+ as the single glyph "டு". The sequence of Unicode
+ characters "டஉ" needs to be rendered as a single
+ glyph from the font - text shaping chooses the correct glyph
+ from the sequence of characters provided.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Similarly, each Arabic character has four different variants:
+ within a font, there will be glyphs for the initial, medial,
+ final, and isolated forms of each letter. Unicode only encodes
+ one codepoint per character, and so a Unicode string will not
+ tell you which glyph to use. Text shaping chooses the correct
+ form of the letter and returns the correct glyph from the font
+ that you need to render.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Other languages have marks and accents which need to be
+ rendered in certain positions around a base character. For
+ instance, the Moldovan language has the Cyrillic letter
+ "zhe" (ж) with a breve accent, like so: ӂ. Some
+ fonts will contain this character as an individual glyph,
+ whereas other fonts will not contain a zhe-with-breve glyph
+ but expect the rendering engine to form the character by
+ overlaying the two glyphs ж and ˘. Where you should draw the
+ combining breve depends on the height of the preceding glyph.
+ Again, for Arabic, the correct positioning of vowel marks
+ depends on the height of the character on which you are
+ placing the mark. Text shaping tells you whether you have a
+ precomposed glyph within your font or if you need to compose a
+ glyph yourself out of combining marks, and if so, where to
+ position those marks.
+ </para>
+ </listitem>
+ </itemizedlist>
+ <para>
+ If this is something that you need to do, then you need a text
+ shaping engine: you could use Uniscribe if you are using Windows;
+ you could use CoreText on OS X; or you could use Harfbuzz. In the
+ rest of this manual, we are going to assume that you are the
+ implementor of a text layout engine.
+ </para>
+ </section>
+ <section id="why-is-it-called-harfbuzz">
+ <title>Why is it called Harfbuzz?</title>
+ <para>
+ Harfbuzz began its life as text shaping code within the FreeType
+ project, (and you will see references to the FreeType authors
+ within the source code copyright declarations) but was then
+ abstracted out to its own project. This project is maintained by
+ Behdad Esfahbod, and named Harfbuzz. Originally, it was a shaping
+ engine for OpenType fonts - "Harfbuzz" is the Persian
+ for "open type".
+ </para>
+ </section>
+</chapter>
\ No newline at end of file
commit 4dc2265918089ee08c6d82eed0cfd41e02d7d231
Author: Khaled Hosny <khaledhosny at eglug.org>
Date: Wed Dec 23 00:26:20 2015 +0400
Intro from freedesktop.org/wiki/Software/HarfBuzz/
diff --git a/docs/HarfBuzz.png b/docs/HarfBuzz.png
new file mode 100644
index 0000000..d58d9fc
Binary files /dev/null and b/docs/HarfBuzz.png differ
diff --git a/docs/Makefile.am b/docs/Makefile.am
index f605f24..64344b8 100644
--- a/docs/Makefile.am
+++ b/docs/Makefile.am
@@ -65,7 +65,8 @@ EXTRA_HFILES=$(top_builddir)/src/hb-version.h
# Images to copy into HTML directory.
# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
-HTML_IMAGES=
+HTML_IMAGES= \
+ HarfBuzz.png
# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
diff --git a/docs/harfbuzz-docs.xml b/docs/harfbuzz-docs.xml
index 60ff8e2..a7efbf8 100644
--- a/docs/harfbuzz-docs.xml
+++ b/docs/harfbuzz-docs.xml
@@ -8,10 +8,39 @@
<bookinfo>
<title>HarfBuzz Manual</title>
<releaseinfo>
- for HarfBuzz &version;.
+ This document is for HarfBuzz &version;.
<!--The latest version of this documentation can be found on-line at
<ulink role="online-location" url="http://[SERVER]/libharfbuzz/index.html">http://[SERVER]/libharfbuzz/</ulink>.-->
</releaseinfo>
+ <abstract>
+ <title>HarfBuzz</title>
+ <graphic fileref="HarfBuzz.png" format="PNG" align="center"/>
+ <para>
+ HarfBuzz is an <ulink url="http://www.microsoft.com/typography/otspec/">OpenType</ulink>
+ text shaping engine.
+ </para>
+ <para>
+ The current HarfBuzz codebase, formerly known as harfbuzz-ng, is
+ versioned 1.x.x and is stable and under active maintenance. This is
+ what is used in latest versions of Firefox, GNOME, ChromeOS, Chrome,
+ LibreOffice, XeTeX, Android, and KDE, among other places. The canonical
+ source tree is available
+ <ulink url="http://cgit.freedesktop.org/harfbuzz/">here</ulink>.
+ Also available on
+ <ulink url="https://github.com/behdad/harfbuzz">github</ulink>.
+ See below for release tarballs.
+ </para>
+ <para>
+ The old HarfBuzz codebase, these days known as harfbuzz-old, was
+ derived from <ulink url="http://freetype.org/">FreeType</ulink>,
+ <ulink url="http://pango.org/">Pango</ulink>, and
+ <ulink url="http://qt-project.org/">Qt</ulink> and is available
+ <ulink url="http://cgit.freedesktop.org/harfbuzz.old/">here</ulink>.
+ It is not actively developed or maintained, and is extremely buggy. All
+ users are encouraged to switch over to the new HarfBuzz as soon as
+ possible. There are no release tarballs of old HarfBuzz whatsoever.
+ </para>
+ </abstract>
</bookinfo>
<part>
commit 22b07782ced6503a0bf33f2fe157b70540238f6d
Author: Khaled Hosny <khaledhosny at eglug.org>
Date: Mon Dec 14 23:33:51 2015 +0400
Deploy docs to gh-pages branch from Travis builds
Build docs in Travis and push them to the gh-pages branch, which makes
them available at http://behdad.github.io/harfbuzz/
diff --git a/.ci/deploy-docs.sh b/.ci/deploy-docs.sh
new file mode 100755
index 0000000..8c60a22
--- /dev/null
+++ b/.ci/deploy-docs.sh
@@ -0,0 +1,25 @@
+set -o errexit -o nounset
+
+if [ "$TRAVIS_OS_NAME" == "linux" -a "$CC" == "gcc" -a "$TRAVIS_PULL_REQUEST" == "false" -a "$TRAVIS_BRANCH" == "master" ]
+then
+ DOCSDIR=build-docs
+ REVISION=$(git rev-parse --short HEAD)
+
+ rm -rf $DOCSDIR || exit
+ mkdir $DOCSDIR
+ cd $DOCSDIR
+
+ cp ../docs/html/* .
+
+ git init
+ git config user.name "Travis CI"
+ git config user.email "travis at harfbuzz.org"
+ git remote add upstream "https://$GH_TOKEN@github.com/$TRAVIS_REPO_SLUG.git"
+ git fetch upstream
+ git reset upstream/gh-pages
+
+ touch .
+ git add -A .
+ git commit -m "Rebuild docs for $REVISION"
+ git push -q upstream HEAD:gh-pages
+fi
diff --git a/.travis.yml b/.travis.yml
index 817811c..798f5ee 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -13,6 +13,7 @@ env:
- CFLAGS="-Werror --coverage"
- CXXFLAGS="-Werror --coverage"
- LDFLAGS="--coverage"
+ - secure: "EysLG1MB6WCvDVpls5jsJAYsXcbHTmSFYl11UlAQCNfU+MBv7qiuOR6im3tM4ISzt4TY+OQXxEktMFRT+8govLR4UWo8dwmZ4P/2GqMbsZNPVSLkbDEy6hVv7xe5X4mp+npHthY1Z1YOLKGAh/u1PymySZz6qAzsCZ6Fq/H5Ri8="
install:
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then pip install --user nose; fi
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then pip install --user cpp-coveralls; fi # for coveralls.io code coverage tracking
@@ -23,11 +24,14 @@ install:
script:
- NOCONFIGURE=1 ./autogen.sh
- export CONFIGURE_OPTS="--with-freetype --with-glib --with-gobject --with-cairo --with-icu --with-graphite2"
+ - if [ "$TRAVIS_OS_NAME" == "linux" -a "$CC" == "gcc" ]; then export CONFIGURE_OPTS="$CONFIGURE_OPTS --enable-gtk-doc"; fi
- if [ "$TRAVIS_OS_NAME" == "osx" ]; then export CONFIGURE_OPTS="$CONFIGURE_OPTS --with-coretext"; fi
- ./configure $CONFIGURE_OPTS
- make
- make check
- if [ "$TRAVIS_OS_NAME" == "linux" -a "$CC" == "gcc" ]; then rm -f src/.libs/NONE.gcov; touch src/NONE; coveralls; fi
+after_success:
+ - bash .ci/deploy-docs.sh
notifications:
irc: "irc.freenode.org#harfbuzz"
email: harfbuzz at lists.freedesktop.org
More information about the HarfBuzz
mailing list