337 Commits

Author SHA1 Message Date
Raph Levien
46899c5c85 Avoid copying of font table data am: aaa4e34
am: 0b5d3b2

* commit '0b5d3b2bea4bcb59a5d20f54cb4f81e0aa46ebce':
  Avoid copying of font table data

Change-Id: Ie1e0be38e1875702414b7ca005c5837bd60b82d8
2016-04-08 16:57:34 +00:00
Raph Levien
0b5d3b2bea Avoid copying of font table data
am: aaa4e34

* commit 'aaa4e3470270496e6eb80704eadecb2cb7c56bf0':
  Avoid copying of font table data

Change-Id: Idc4074ebf93595fa0420986814462095730f00c2
2016-04-08 16:49:56 +00:00
Raph Levien
aaa4e34702 Avoid copying of font table data
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
2016-04-08 08:26:38 -07:00
Raph Levien
ff5e822a7b Purge hb font on Minikin font destruction am: 9afcc6e
am: aa49542

* commit 'aa49542698ca22f2e70418a33d4829ab93e433f2':
  Purge hb font on Minikin font destruction

Change-Id: If40c31c90bf4f12fdd882be4f2c6f9b35ba2d09c
2016-04-07 22:42:46 +00:00
Raph Levien
aa49542698 Purge hb font on Minikin font destruction
am: 9afcc6e

* commit '9afcc6e2bd4d89e4e1deb6e18c3c4daca4e114fd':
  Purge hb font on Minikin font destruction

Change-Id: Idb2034353407e8b390cc07862803f846d5adea0c
2016-04-07 22:38:47 +00:00
Raph Levien
9afcc6e2bd Purge hb font on Minikin font destruction
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
2016-04-07 13:43:15 -07:00
Seigo Nonaka
27f3bc0b52 Support multiple locales for font language settings. am: f3afe92
am: 5f7df3e

* commit '5f7df3eca54701632ee28733ab2412351e5cddd7':
  Support multiple locales for font language settings.

Change-Id: I27df2a2d6de262599931a16a9a65030149ee8991
2016-04-05 06:45:33 +00:00
Seigo Nonaka
5f7df3eca5 Support multiple locales for font language settings.
am: f3afe92

* commit 'f3afe92def0fff022889fd036d68451223aac146':
  Support multiple locales for font language settings.

Change-Id: Iad60bf1c01f309e70c3b1ad22e28b22afe44b33f
2016-04-05 06:42:58 +00:00
Seigo Nonaka
f3afe92def Support multiple locales for font language settings.
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
2016-04-04 22:31:16 +09:00
Roozbeh Pournader
78768409da Try putting combining marks in the same font run am: 16ed4ef
am: 8559354

* commit '85593542c42d86874e0f21685acb9f77389cd79b':
  Try putting combining marks in the same font run

Change-Id: If298c6d45b48928c7a93ac4866272f78b2f0aedd
2016-03-31 18:28:11 +00:00
Roozbeh Pournader
85593542c4 Try putting combining marks in the same font run
am: 16ed4ef

* commit '16ed4ef07ed8fb2333447b48055633bf8d4f38e4':
  Try putting combining marks in the same font run

Change-Id: I6f76b791acde2dc8209e8d33da02d148a9f790d8
2016-03-31 18:25:12 +00:00
Roozbeh Pournader
16ed4ef07e Try putting combining marks in the same font run
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
2016-03-30 17:48:34 -07:00
Roozbeh Pournader
1d1e62851a Do not allow line breaks before currency symbols am: d8917c6
am: 4293c2a

* commit '4293c2a94ea73f585fd6d3389837167044a1e630':
  Do not allow line breaks before currency symbols
2016-03-17 19:29:04 +00:00
Roozbeh Pournader
4293c2a94e Do not allow line breaks before currency symbols
am: d8917c6

* commit 'd8917c69a9f7b7ca52f7ac850922dab4322113f5':
  Do not allow line breaks before currency symbols
2016-03-17 18:16:22 +00:00
Roozbeh Pournader
d8917c69a9 Do not allow line breaks before currency symbols
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
2016-03-16 16:21:09 -07:00
Seigo Nonaka
bd41391215 Suppress log span due to returning null for itemize result. am: cee83d4032
am: dac051349c

* commit 'dac051349cb6410e0020b440581923e4520a1838':
  Suppress log span due to returning null for itemize result.
2016-03-07 18:03:39 +00:00
Seigo Nonaka
dac051349c Suppress log span due to returning null for itemize result.
am: cee83d4032

* commit 'cee83d40324b1f3b8e113eb8c9eda8e12ef36923':
  Suppress log span due to returning null for itemize result.
2016-03-07 18:01:37 +00:00
Seigo Nonaka
cee83d4032 Suppress log span due to returning null for itemize result.
Bug: 26808815
Change-Id: I2a5a52f2c441d27c7ef270342b4ef93c3de9e56e
2016-03-03 15:51:55 -08:00
Seigo Nonaka
193ac1b95f Break regional indicators at even numbered code points. am: 450e96c817
am: 28de1b3fce

* commit '28de1b3fce69a755525fe7a7b2843788f0460e20':
  Break regional indicators at even numbered code points.
2016-03-03 13:12:45 +00:00
Seigo Nonaka
28de1b3fce Break regional indicators at even numbered code points.
am: 450e96c817

* commit '450e96c8170c3d59a5896e734c90d3f9def505f8':
  Break regional indicators at even numbered code points.
2016-03-03 13:10:53 +00:00
Seigo Nonaka
450e96c817 Break regional indicators at even numbered code points.
Bug: 23288449
Change-Id: If1419ff9e44e8e640616979bae88311f414b42a1
2016-03-02 17:44:14 -08:00
Raph Levien
ed7f1410cb Fix wrong conditions in isEmojiBase am: 1934c2c3cb
am: b74e157b5b

* commit 'b74e157b5bb5785c07de62636e4f85668846d19a':
  Fix wrong conditions in isEmojiBase
2016-02-27 16:00:02 +00:00
Raph Levien
b74e157b5b Fix wrong conditions in isEmojiBase
am: 1934c2c3cb

* commit '1934c2c3cb2c93aa12f852f95915190f8ac81fac':
  Fix wrong conditions in isEmojiBase
2016-02-27 15:57:02 +00:00
Raph Levien
1934c2c3cb Fix wrong conditions in isEmojiBase
I computed ranges using low <= c || c <= high, should be &&.

Bug: 26829153
Change-Id: Ic1002d90b6a408a0b415f2d117d0e57adcbc2fa9
2016-02-27 07:43:56 -08:00
Raph Levien
739a085150 Suppress line breaks in emoji + modifier am: 56840e8006
am: c9c4606a9d

* commit 'c9c4606a9dbb6104de3c92a52de46286e4e739a6':
  Suppress line breaks in emoji + modifier
2016-02-26 20:19:37 +00:00
Raph Levien
c9c4606a9d Suppress line breaks in emoji + modifier
am: 56840e8006

* commit '56840e8006ca2b822adb401fc8a65f3c075cde10':
  Suppress line breaks in emoji + modifier
2016-02-26 20:17:27 +00:00
Raph Levien
56840e8006 Suppress line breaks in emoji + modifier
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
2016-02-26 19:05:34 +00:00
Seigo Nonaka
ff75f198a3 Use color font if skin tone is specified. am: 0036da164e
am: 77270a5074

* commit '77270a5074698777e820306ebfb6a3469f3ac952':
  Use color font if skin tone is specified.
2016-02-26 03:23:39 +00:00
Seigo Nonaka
77270a5074 Use color font if skin tone is specified.
am: 0036da164e

* commit '0036da164e3b25f1ac29c840c1fe15b03dc6677f':
  Use color font if skin tone is specified.
2016-02-26 03:22:09 +00:00
Seigo Nonaka
0036da164e Use color font if skin tone is specified.
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
2016-02-26 11:26:30 +09:00
Raph Levien
b8d836a98c Merge "Suppress grapheme cluster breaks in emoji with modifiers" into nyc-dev am: 94d5525508
am: ac0ec3f827

* commit 'ac0ec3f827a8f74e235cbedf0c0d32f091397e20':
  Suppress grapheme cluster breaks in emoji with modifiers
2016-02-24 21:18:11 +00:00
Raph Levien
ac0ec3f827 Merge "Suppress grapheme cluster breaks in emoji with modifiers" into nyc-dev
am: 94d5525508

* commit '94d5525508b60407c9224fbd279a9f6932d5fb6c':
  Suppress grapheme cluster breaks in emoji with modifiers
2016-02-24 21:07:45 +00:00
Raph Levien
94d5525508 Merge "Suppress grapheme cluster breaks in emoji with modifiers" into nyc-dev 2016-02-24 20:58:55 +00:00
Raph Levien
adfa580f1f Suppress grapheme cluster breaks in emoji with modifiers
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
2016-02-24 12:43:36 -08:00
Seigo Nonaka
bf5e419199 Merge "Support Hanb script." into nyc-dev am: dbf5c2776b
am: c5bbe9d287

* commit 'c5bbe9d287a4fdec8ab09f8abda806d101996df2':
  Support Hanb script.
2016-02-23 04:11:55 +00:00
Seigo Nonaka
c5bbe9d287 Merge "Support Hanb script." into nyc-dev
am: dbf5c2776b

* commit 'dbf5c2776bb2de1baf1cd5e53ce21f5bd3226052':
  Support Hanb script.
2016-02-23 04:04:44 +00:00
Seigo Nonaka
dbf5c2776b Merge "Support Hanb script." into nyc-dev 2016-02-23 03:57:58 +00:00
Raph Levien
bb56d47522 Merge "Suppress linebreaks in emoji ZWJ sequences" into nyc-dev am: 30bf8a7c05
am: 288ec0cb85

* commit '288ec0cb852358d0a656093f67d083d02468ef43':
  Suppress linebreaks in emoji ZWJ sequences
2016-02-19 18:07:11 +00:00
Raph Levien
288ec0cb85 Merge "Suppress linebreaks in emoji ZWJ sequences" into nyc-dev
am: 30bf8a7c05

* commit '30bf8a7c05925a970f1cab87c38bec8dd97fa82e':
  Suppress linebreaks in emoji ZWJ sequences
2016-02-19 18:02:35 +00:00
Raph Levien
30bf8a7c05 Merge "Suppress linebreaks in emoji ZWJ sequences" into nyc-dev 2016-02-19 17:53:48 +00:00
Keisuke Kuroyanagi
675fdc3180 Optimize: Use measureText instead of doLayout. am: ea408fc18e
am: 731b7d0185

* commit '731b7d0185881018f4ca5b52adbcf682b409bca8':
  Optimize: Use measureText instead of doLayout.
2016-02-18 23:37:41 +00:00
Keisuke Kuroyanagi
731b7d0185 Optimize: Use measureText instead of doLayout.
am: ea408fc18e

* commit 'ea408fc18e8e78d984ebdf63703da668a15720de':
  Optimize: Use measureText instead of doLayout.
2016-02-18 23:30:50 +00:00
Raph Levien
d3f45892c7 Suppress linebreaks in emoji ZWJ sequences
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
2016-02-18 15:00:24 -08:00
Raph Levien
c6716b918e Disable hyphenation when word overlaps style boundary am: aa736d0054
am: 50978fe68d

* commit '50978fe68d82497b5f8edc4704899cf60df683cd':
  Disable hyphenation when word overlaps style boundary
2016-02-18 19:51:41 +00:00
Keisuke Kuroyanagi
ea408fc18e Optimize: Use measureText instead of doLayout.
With this CL, measureText is used for getRunAdvance,
getOffsetForAdvance and line breaking.

Bug: 24505153
Change-Id: Ib699f6b1391b46537736fc274cdb41686586b550
2016-02-18 11:46:48 -08:00
Raph Levien
50978fe68d Disable hyphenation when word overlaps style boundary
am: aa736d0054

* commit 'aa736d00548da691e75a09a70deb886e1f68b060':
  Disable hyphenation when word overlaps style boundary
2016-02-18 19:16:02 +00:00
Raph Levien
aa736d0054 Disable hyphenation when word overlaps style boundary
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
2016-02-18 10:33:14 -08:00
Seigo Nonaka
533a01ea84 Support Hanb script.
Hanb is a union of Han and Bopomofo.

Bug: 26687969
Change-Id: Ic696bcbbc9607f3842fd0115668b8e7bd917e62b
2016-02-18 18:28:52 +09:00
Seigo Nonaka
9f60e70bac Merge "Improve Paint.measureText and Paint.hasGlyph for variation sequences." into nyc-dev am: bcb024df56
am: 4f335f927c

* commit '4f335f927ccec0c03dfe9af624918fcd86ff757d':
  Improve Paint.measureText and Paint.hasGlyph for variation sequences.
2016-02-18 04:42:02 +00:00
Seigo Nonaka
4f335f927c Merge "Improve Paint.measureText and Paint.hasGlyph for variation sequences." into nyc-dev
am: bcb024df56

* commit 'bcb024df56c8ae7a5914d6f060ac99a2b5d118d9':
  Improve Paint.measureText and Paint.hasGlyph for variation sequences.
2016-02-18 04:38:00 +00:00