Commit Graph

600 Commits

Author SHA1 Message Date
Seigo Nonaka
85f7917362 Returns hasVariationSelector true for VS15/VS16 am: 0f5d879
am: 074f0b8

* commit '074f0b8c8a39c17bb29a62c7b0a5f9df8e875818':
  Returns hasVariationSelector true for VS15/VS16

Change-Id: I14b0971a3ff50572e594a0814a26e10113fe7c1c
2016-04-15 15:38:18 +00:00
Seigo Nonaka
074f0b8c8a Returns hasVariationSelector true for VS15/VS16
am: 0f5d879

* commit '0f5d87990b2cc56994f1a3f1de3d0341213f62ce':
  Returns hasVariationSelector true for VS15/VS16

Change-Id: Iff3953948c8457e2a85e5859559411511a326f33
2016-04-15 15:31:59 +00:00
Seigo Nonaka
0f5d87990b Returns hasVariationSelector true for VS15/VS16
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
2016-04-15 12:45:04 +09:00
Raph Levien
235f6a5b5d Merge "Clear mLineWidths in LineBreaker::finish()" into nyc-dev am: 1aa246a
am: 709765f

* commit '709765f3be8dc0827b34eaf9a0487941ab9b7834':
  Clear mLineWidths in LineBreaker::finish()

Change-Id: I59606b706f78eda015da28f0ce6201b445086cbe
2016-04-13 16:25:06 +00:00
Raph Levien
709765f3be Merge "Clear mLineWidths in LineBreaker::finish()" into nyc-dev
am: 1aa246a

* commit '1aa246aa807cd20c6ebe469383ab83e51deb98e7':
  Clear mLineWidths in LineBreaker::finish()

Change-Id: I968a1584b9f2d2242725b8ab7047091ca9ecd6ee
2016-04-13 16:21:38 +00:00
Raph Levien
1aa246aa80 Merge "Clear mLineWidths in LineBreaker::finish()" into nyc-dev 2016-04-13 16:11:56 +00:00
Raph Levien
0ae37ab603 Clear mLineWidths in LineBreaker::finish()
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
2016-04-12 15:27:17 -07:00
Seigo Nonaka
3df3c553cc Fix minikin_unittests am: bb8b7fd
am: 575d11b

* commit '575d11bb36c65452a4896cd76d74217ca4b64a76':
  Fix minikin_unittests

Change-Id: Ibac5c54ae165d96811238a4e8d2e9612d1192eaf
2016-04-11 21:09:46 +00:00
Seigo Nonaka
575d11bb36 Fix minikin_unittests
am: bb8b7fd

* commit 'bb8b7fd32fd69c8b227996c782622f7941a944cb':
  Fix minikin_unittests

Change-Id: I865dd495ed60b0bbace0ba77b2071dac058887e9
2016-04-11 21:01:14 +00:00
Seigo Nonaka
bb8b7fd32f Fix minikin_unittests
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] 1ea4165cef

Bug: 28105730
Bug: 28105688
Change-Id: Ie5983c4869147dacabdca81af1605066cd680b3f
2016-04-11 13:33:35 -07:00
Raph Levien
f9d3ecf879 Update minikin/sample code to use new GetTable am: d2161cf
am: eb33e3a

* commit 'eb33e3a234d9e2314a0cb4d5a0c68bd4a4fe96dc':
  Update minikin/sample code to use new GetTable

Change-Id: Idd6063401cdb1399bac52c975a32a0a0b221652f
2016-04-08 18:10:08 +00:00
Raph Levien
eb33e3a234 Update minikin/sample code to use new GetTable
am: d2161cf

* commit 'd2161cf80f6f23bb977d92f79e49fba999846c79':
  Update minikin/sample code to use new GetTable

Change-Id: I5fcae79c42322dcc0533dbd3eb1a51007e089170
2016-04-08 17:55:14 +00:00
Raph Levien
d2161cf80f Update minikin/sample code to use new GetTable
We changed the signature of the MinikinFont::GetTable method. This
patch updates the sample code, and fixes the build.

Change-Id: I1977be868bf7636986fc802915f3dd54c418a73a
2016-04-08 10:28:47 -07:00
Raph Levien
0a6aee859f Avoid copying of font table data am: a8e8948
am: 85759c3

* commit '85759c393cdfec504c216b08297b40b4e098a95d':
  Avoid copying of font table data

Change-Id: Ie1e0be38e1875702414b7ca005c5837bd60b82d8
2016-04-08 16:57:34 +00:00
Raph Levien
85759c393c Avoid copying of font table data
am: a8e8948

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

Change-Id: Idc4074ebf93595fa0420986814462095730f00c2
2016-04-08 16:49:56 +00:00
Raph Levien
a8e8948bd7 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
c5735c469f Purge hb font on Minikin font destruction am: 1ea4165
am: 03f300c

* commit '03f300c8b2238f57d5f3f73d2ae961270d22a139':
  Purge hb font on Minikin font destruction

Change-Id: If40c31c90bf4f12fdd882be4f2c6f9b35ba2d09c
2016-04-07 22:42:46 +00:00
Raph Levien
03f300c8b2 Purge hb font on Minikin font destruction
am: 1ea4165

* commit '1ea4165cef7651770fe28a0eada3da593bb149ad':
  Purge hb font on Minikin font destruction

Change-Id: Idb2034353407e8b390cc07862803f846d5adea0c
2016-04-07 22:38:47 +00:00
Raph Levien
1ea4165cef 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
09cdf80e93 Support multiple locales for font language settings. am: dbcbe1f
am: 6b5aa77

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

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

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

Change-Id: Iad60bf1c01f309e70c3b1ad22e28b22afe44b33f
2016-04-05 06:42:58 +00:00
Seigo Nonaka
dbcbe1f426 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
27905d14d7 Try putting combining marks in the same font run am: c9c0359
am: d923389

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

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

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

Change-Id: I6f76b791acde2dc8209e8d33da02d148a9f790d8
2016-03-31 18:25:12 +00:00
Roozbeh Pournader
c9c0359b1d 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
67966c7192 Do not allow line breaks before currency symbols am: 0eaf80b
am: 7f8f696

* commit '7f8f696818a1e4dbf431b98e06dc04d563f39052':
  Do not allow line breaks before currency symbols
2016-03-17 19:29:04 +00:00
Roozbeh Pournader
7f8f696818 Do not allow line breaks before currency symbols
am: 0eaf80b

* commit '0eaf80b016b6780250227b8273692d2b8978816f':
  Do not allow line breaks before currency symbols
2016-03-17 18:16:22 +00:00
Roozbeh Pournader
0eaf80b016 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
551eb298af Suppress log span due to returning null for itemize result. am: 5ccdf654f5
am: 045e8676e8

* commit '045e8676e80084c5946cc4fbbcf4d20e3898e17a':
  Suppress log span due to returning null for itemize result.
2016-03-07 18:03:39 +00:00
Seigo Nonaka
045e8676e8 Suppress log span due to returning null for itemize result.
am: 5ccdf654f5

* commit '5ccdf654f5695be1b582a3bd89482bc6915cc22a':
  Suppress log span due to returning null for itemize result.
2016-03-07 18:01:37 +00:00
Seigo Nonaka
5ccdf654f5 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
3da8775569 Break regional indicators at even numbered code points. am: f4c679ca68
am: 10ca65d93a

* commit '10ca65d93a98066b99d9413e1b5f85958a83f89f':
  Break regional indicators at even numbered code points.
2016-03-03 13:12:45 +00:00
Seigo Nonaka
10ca65d93a Break regional indicators at even numbered code points.
am: f4c679ca68

* commit 'f4c679ca680ed79d2a9dee20d375c87f187149b6':
  Break regional indicators at even numbered code points.
2016-03-03 13:10:53 +00:00
Seigo Nonaka
f4c679ca68 Break regional indicators at even numbered code points.
Bug: 23288449
Change-Id: If1419ff9e44e8e640616979bae88311f414b42a1
2016-03-02 17:44:14 -08:00
Raph Levien
c9ebab25a0 Fix wrong conditions in isEmojiBase am: a58530bccc
am: 6e4fb94eb0

* commit '6e4fb94eb00faf3381e95428dc538d0ef37b5bc5':
  Fix wrong conditions in isEmojiBase
2016-02-27 16:00:02 +00:00
Raph Levien
6e4fb94eb0 Fix wrong conditions in isEmojiBase
am: a58530bccc

* commit 'a58530bccc426e86dd6ae3f6be6703599b7d52a4':
  Fix wrong conditions in isEmojiBase
2016-02-27 15:57:02 +00:00
Raph Levien
a58530bccc 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
40b492caa6 Suppress line breaks in emoji + modifier am: 7f9de429d4
am: 6a8eae727f

* commit '6a8eae727f13f503ad687b64b80da7f33948f266':
  Suppress line breaks in emoji + modifier
2016-02-26 20:19:37 +00:00
Raph Levien
6a8eae727f Suppress line breaks in emoji + modifier
am: 7f9de429d4

* commit '7f9de429d43556e288e512313421c2a54513c8c4':
  Suppress line breaks in emoji + modifier
2016-02-26 20:17:27 +00:00
Raph Levien
7f9de429d4 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
8d0705fc82 Use color font if skin tone is specified. am: b7d66e3db0
am: 442481c200

* commit '442481c2004b90f02f546007bb881796e9c6eb4f':
  Use color font if skin tone is specified.
2016-02-26 03:23:39 +00:00
Seigo Nonaka
442481c200 Use color font if skin tone is specified.
am: b7d66e3db0

* commit 'b7d66e3db0473ace4ddfd3b553c4e9796e49c410':
  Use color font if skin tone is specified.
2016-02-26 03:22:09 +00:00
Seigo Nonaka
b7d66e3db0 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
d96751967d Merge "Suppress grapheme cluster breaks in emoji with modifiers" into nyc-dev am: 336d826c44
am: bccbdfb377

* commit 'bccbdfb377a497c915f46067e4d898e423bf1797':
  Suppress grapheme cluster breaks in emoji with modifiers
2016-02-24 21:18:11 +00:00
Raph Levien
bccbdfb377 Merge "Suppress grapheme cluster breaks in emoji with modifiers" into nyc-dev
am: 336d826c44

* commit '336d826c44264bbca59a7ee52809a516534f9b7e':
  Suppress grapheme cluster breaks in emoji with modifiers
2016-02-24 21:07:45 +00:00
Raph Levien
336d826c44 Merge "Suppress grapheme cluster breaks in emoji with modifiers" into nyc-dev 2016-02-24 20:58:55 +00:00
Raph Levien
675933f271 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
01795cc7ef Merge "Support Hanb script." into nyc-dev am: 9b2942bfe6
am: a69b250e65

* commit 'a69b250e656ffe12b99228cdc1de2a60a04756ff':
  Support Hanb script.
2016-02-23 04:11:55 +00:00
Seigo Nonaka
a69b250e65 Merge "Support Hanb script." into nyc-dev
am: 9b2942bfe6

* commit '9b2942bfe6ed152b142163fa173831674ba17464':
  Support Hanb script.
2016-02-23 04:04:44 +00:00
Seigo Nonaka
9b2942bfe6 Merge "Support Hanb script." into nyc-dev 2016-02-23 03:57:58 +00:00