These modules can be named the same between the target and host
libraries, which simplifies references to them, particularly in
Soong.
To prevent accidentally loading the system copy of the library,
we still rename the installed name to be libicu*-host.so. But
modules do not need to know that in order to build against them.
Change-Id: Ic38499bb236ace75333a84f23798af023e14cf5f
am: 74b56175e5
* commit '74b56175e5d41c1c1dc992208842b5576973d452':
Do not break after Myanmar viramas
Change-Id: I13297120c3c3789c03b860c9e72b3a04922ab9fa
This is to work around a bug in ICU's line breaker, which thinks
there is a valid line break between a Myanmar kinzi and a consonant.
See http://bugs.icu-project.org/trac/ticket/12561 for the ICU bug.
Bug: 28964845
Change-Id: I076ac15077e5627cbccf6732900bcc60d8596dda
am: 77f4883
* commit '77f488345316fba46c271fc04bea470819ae1712':
Do not break before and after ZWJ.
Change-Id: Ic476d9048b44b84c69fd185b76108c961d8e8545
Minikin has a special font fallback for VS15/VS16, so
hasVariationSelector for emojis with VS15/VS16 should always return
true.
Bug: 27531970
Change-Id: Ieebd58f48b135b6ec50d999df68dcc09b1284606
There was the possibility of stale indents from previous invocations
persisting in the mLineWidths across multiple invocations. This patch
clears them.
Bug: 28090810
Change-Id: I3621dfbe983512046289373711709aeade52eab4
This CL fixes following test cases in minikin_tests
- FontFamilyTest.hasVariationSelectorTest
- HbFontCacheTest.getHbFontLockedTest
- HbFontCacheTest.purgeCacheTest
For the fix of FontFamilyTest.hasVariationSelectorTest, removing virtual
from GetUniqueId() in MinikinFont. After [1], MinikinFont's destructor
started calling purgeHbCache() which calls virtual method,
MinikinFont::GetUniqueId(). Fortunately, the SkTypeface::uniqueID()
returns just internal value, so we can store it at the construction time
and use it instead of calling SkTypeface::uniqueID() every time.
This patch also changes purgeHbFont to purgeHbFontLocked, as all uses of
it were already under global mutex. This change avoids deadlock on
explicit unref, as when invoked by a Java finalizer from the Java object
that holds a reference to the font.
Some of the tests needed to change to using the ref counting protocol
rather than explicitly destructing font objects, as well.
[1] 9afcc6e2bd4d89e4e1deb6e18c3c4daca4e114fd
Bug: 28105730
Bug: 28105688
Change-Id: Ie5983c4869147dacabdca81af1605066cd680b3f
am: 29abb82
* commit '29abb82198868908ece4600284fa8b7d3ed73f3b':
Update minikin/sample code to use new GetTable
Change-Id: I5fcae79c42322dcc0533dbd3eb1a51007e089170
We changed the signature of the MinikinFont::GetTable method. This
patch updates the sample code, and fixes the build.
Change-Id: I1977be868bf7636986fc802915f3dd54c418a73a
The hb_font_t object holds on to tables of font data, acquired through
the MinikinFont::GetTable interface, which is based on copying data
into caller-owned buffers. Now that we're caching lots of hb_font_t's,
the cost of these buffers is significant.
This patch moves to a different interface, inspired by HarfBuzz's
hb_reference_table API, where the font can provide a pointer to the
actual font data (which will often be mmap'ed, so it doesn't even
consume physical RAM).
Bug: 27860101
Change-Id: Id766ab16a8d342bf7322a90e076e801271d527d4
am: 9afcc6e
* commit '9afcc6e2bd4d89e4e1deb6e18c3c4daca4e114fd':
Purge hb font on Minikin font destruction
Change-Id: Idb2034353407e8b390cc07862803f846d5adea0c
This patch eagerly purges the corresponding hb_font_t object from
the HbFontCache when the underlying MinikinFont is destroyed. After
that, the key will no longer be accessed, so having the entry is
wastes memory.
Bug: 27251075
Bug: 27860101
Change-Id: I1b98016133fe3baf6525ac37d970a65ddccadb4f
am: f3afe92
* commit 'f3afe92def0fff022889fd036d68451223aac146':
Support multiple locales for font language settings.
Change-Id: Iad60bf1c01f309e70c3b1ad22e28b22afe44b33f
Some fonts support multiple scripts, for example, some fonts for
Korean supports not only "Kore" but also "Jamo".
To select fonts based on their multiple languages, this CL introduces
the following changes:
- Compares all languages of the font family and use the maximum score
for font selection.
- Even if each language of the font family doesn't support the requested
language, the font get score of 2 if the requested font is covered by
all of the languages of the font family. For example, the font for
"ko-Hang,ko-Hani" gets score of 2 for the requested language "ko-Kore".
Bug: 26687969
Change-Id: I7f13b51464c9b01982bb573251d77052b9ddbd70
am: 16ed4ef
* commit '16ed4ef07ed8fb2333447b48055633bf8d4f38e4':
Try putting combining marks in the same font run
Change-Id: I6f76b791acde2dc8209e8d33da02d148a9f790d8
Indic combining marks, when combined with a common character such as
a hyphen or a dotted circle, used to get rendered in a different font
due to the greedy algorithm used in determining runs, which resulted
in the base character and the combining mark getting rendered in
separate font runs, resulting in a dotted circle appearing in phrases
such as "100-ാം" (0031 0030 0030 002D 0D3E 0D02).
This change makes combining marks change the font run of the base
character if the base character is supported in the same font as the
combining mark, similar to the support for emoji modifiers and the
combining keycap.
Bug: 25036888
Bug: 24535344
Change-Id: I8e2798e8ecb8efaf723a0fd02c05c6fbdef8b365
Implement the change proposed in UTC document L2/16-043R
(http://www.unicode.org/L2/L2016/16043r-line-break-pr-po.txt) to make
sure we do not break between letters and currency symbols.
Bug: 24959657
Change-Id: Ia29d0e5625f84870bd910d0c6e19036d17206704
An emoji base with an emoji modifier renders as a single glyph and
thus should not be a line break. Current (Unicode 8) logic does
indicate a line break, so we override the results of the ICU line
break iterator. The code references a proposal to improve Unicode
behavior; when that is adopted and we upgrade ICU accordingly, the
special-case code should be deleted, but the tests can remain.
Bug: 27343378
Change-Id: I5de9c53e9a34c503816f9131e3d894e6f7a57d13
If skin tone is specified, the base emoji should be emoji style even
if it is text presentation default emoji.
This patch also removes wrong test case which expects default emoji
presentation but it is controlled by family order in /etc/fonts.xml
and there is no special logic for default presentation in minikin.
Thus the default presentation unit test should not be in minikin.
Bug: 27342346
Change-Id: I74a2b2feab4d559535049e368cfd833063cce81c
An emoji with a modifier should be treated as a single grapheme, i.e.
it should not be possible to place the cursor between the base and
modifier. This patch implements the proposed Rule GB9c from Mark
Davis's proposal entitled "Fixing breaking properties for emoji",
L2/16-011R3.
The patch also skips over variation sequences attached the to the
preceding character, for computing grapheme cluster boundaries.
Bug: 26829153
Change-Id: Iff5bc2bb8e5246223a017c7cf33acfbf63817f16
Due to the way emoji ZWJ sequences are defined, the ICU line breaking
algorithm determines that there are valid line breaks inside the
sequence. This patch suppresses these line breaks.
This is an adaptation of I225ebebc0f4186e4b8f48fee399c4a62b3f0218a
into the nyc-dev branch.
Bug: 25433289
Change-Id: I84b50b1e6ef13d436965eab389659d02a30d100f
With this CL, measureText is used for getRunAdvance,
getOffsetForAdvance and line breaking.
Bug: 24505153
Change-Id: Ib699f6b1391b46537736fc274cdb41686586b550
In cases when a word (as defined by the ICU break iterator) overlaps a
style boundary, the returned wordStart can be extend before the range
currently being measured for layout. When we try to hyphenate the
resulting substrings, we get a negative range, which crashes. This
patch disables hyphenation in this case.
Bug: 27237112
Change-Id: I76d04b39dd3b4d6d267aaaf4bebc9ab361891646