Commit Graph

600 Commits

Author SHA1 Message Date
Raph Levien
baa6a9671a Merge "Suppress linebreaks in emoji ZWJ sequences" into nyc-dev am: e87aac42d0
am: aca6476db8

* commit 'aca6476db8007059cac8fec33e3b96c1a10818e8':
  Suppress linebreaks in emoji ZWJ sequences
2016-02-19 18:07:11 +00:00
Raph Levien
aca6476db8 Merge "Suppress linebreaks in emoji ZWJ sequences" into nyc-dev
am: e87aac42d0

* commit 'e87aac42d0f7c80a0836d4cde29ed36e4e848003':
  Suppress linebreaks in emoji ZWJ sequences
2016-02-19 18:02:35 +00:00
Raph Levien
e87aac42d0 Merge "Suppress linebreaks in emoji ZWJ sequences" into nyc-dev 2016-02-19 17:53:48 +00:00
Keisuke Kuroyanagi
c96923b780 Optimize: Use measureText instead of doLayout. am: 761218bce9
am: d43f5022d2

* commit 'd43f5022d263c6f0d70063094b9530bec2af8869':
  Optimize: Use measureText instead of doLayout.
2016-02-18 23:37:41 +00:00
Keisuke Kuroyanagi
d43f5022d2 Optimize: Use measureText instead of doLayout.
am: 761218bce9

* commit '761218bce9059c4c73e5089ce5924913cbd5fb6f':
  Optimize: Use measureText instead of doLayout.
2016-02-18 23:30:50 +00:00
Raph Levien
a14712eaf8 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
7753b1c525 Disable hyphenation when word overlaps style boundary am: 72ab39455f
am: b708833cf3

* commit 'b708833cf3562f7169a8ef6c22b4a194af5d1b07':
  Disable hyphenation when word overlaps style boundary
2016-02-18 19:51:41 +00:00
Keisuke Kuroyanagi
761218bce9 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
b708833cf3 Disable hyphenation when word overlaps style boundary
am: 72ab39455f

* commit '72ab39455f2fe587116066d5ec66d75cd89f0114':
  Disable hyphenation when word overlaps style boundary
2016-02-18 19:16:02 +00:00
Raph Levien
72ab39455f 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
77c3f8eb24 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
d5ff8ab1de Merge "Improve Paint.measureText and Paint.hasGlyph for variation sequences." into nyc-dev am: 082dc16139
am: 80904b8960

* commit '80904b896025f4ad1199c783abdd8e2af8120210':
  Improve Paint.measureText and Paint.hasGlyph for variation sequences.
2016-02-18 04:42:02 +00:00
Seigo Nonaka
80904b8960 Merge "Improve Paint.measureText and Paint.hasGlyph for variation sequences." into nyc-dev
am: 082dc16139

* commit '082dc16139a239d6df3c78b9ef5542e38d6405d0':
  Improve Paint.measureText and Paint.hasGlyph for variation sequences.
2016-02-18 04:38:00 +00:00
Seigo Nonaka
082dc16139 Merge "Improve Paint.measureText and Paint.hasGlyph for variation sequences." into nyc-dev 2016-02-18 04:33:36 +00:00
Raph Levien
6f19a92b30 Add error logging on invalid cmap - DO NOT MERGE am: ac3b9bc4ea am: 055b8c8cda -s ours am: c4ed0af154 am: 0eb5239cf5 -s ours am: 794c4d930b am: 7cfeeaeb0b am: fbf13599d9 -s ours am: 7a9fa36d3d
am: 5649913f3e  -s ours

* commit '5649913f3ef97e1295f95d075628173d76bc5e3f':
  Add error logging on invalid cmap - DO NOT MERGE
2016-02-18 00:35:28 +00:00
Raph Levien
5649913f3e Add error logging on invalid cmap - DO NOT MERGE am: ac3b9bc4ea am: 055b8c8cda -s ours am: c4ed0af154 am: 0eb5239cf5 -s ours am: 794c4d930b am: 7cfeeaeb0b am: fbf13599d9 -s ours
am: 7a9fa36d3d

* commit '7a9fa36d3d6fa1691d6436e8c9b9e234913f140f':
  Add error logging on invalid cmap - DO NOT MERGE
2016-02-18 00:30:43 +00:00
Raph Levien
7a9fa36d3d Add error logging on invalid cmap - DO NOT MERGE am: ac3b9bc4ea am: 055b8c8cda -s ours am: c4ed0af154 am: 0eb5239cf5 -s ours am: 794c4d930b am: 7cfeeaeb0b
am: fbf13599d9  -s ours

* commit 'fbf13599d9138547e1d56734c033d3637193a0bd':
  Add error logging on invalid cmap - DO NOT MERGE
2016-02-18 00:19:02 +00:00
Raph Levien
0f7db07b2d Add error logging on invalid cmap am: 9e8fd1dff7 am: 78bf54cc23 am: 83f28ad6b6
am: 960c6bd18b

* commit '960c6bd18b30accc4c18a468d42e31edcfde3da6':
  Add error logging on invalid cmap
2016-02-18 00:17:26 +00:00
Raph Levien
88645a5b0f Add penalty for breaks in URLs and email addresses
am: 76772e8ad4

* commit '76772e8ad4a88cbe87edc873dd66af7d0baf6a25':
  Add penalty for breaks in URLs and email addresses
2016-02-18 00:17:18 +00:00
Raph Levien
fbf13599d9 Add error logging on invalid cmap - DO NOT MERGE am: ac3b9bc4ea am: 055b8c8cda -s ours am: c4ed0af154 am: 0eb5239cf5 -s ours am: 794c4d930b
am: 7cfeeaeb0b

* commit '7cfeeaeb0bb7db7e86f5f7839031c580629f25ad':
  Add error logging on invalid cmap - DO NOT MERGE
2016-02-18 00:13:35 +00:00
Raph Levien
7cfeeaeb0b Add error logging on invalid cmap - DO NOT MERGE am: ac3b9bc4ea am: 055b8c8cda -s ours am: c4ed0af154 am: 0eb5239cf5 -s ours
am: 794c4d930b

* commit '794c4d930bb6a3a74734ab5f89897bb6eb92c117':
  Add error logging on invalid cmap - DO NOT MERGE
2016-02-18 00:04:40 +00:00
Raph Levien
794c4d930b Add error logging on invalid cmap - DO NOT MERGE am: ac3b9bc4ea am: 055b8c8cda -s ours am: c4ed0af154
am: 0eb5239cf5  -s ours

* commit '0eb5239cf5fdae1de84a93e0881add6cb4ead7f6':
  Add error logging on invalid cmap - DO NOT MERGE
2016-02-17 23:59:33 +00:00
Raph Levien
960c6bd18b Add error logging on invalid cmap am: 9e8fd1dff7 am: 78bf54cc23
am: 83f28ad6b6

* commit '83f28ad6b687d09fb14c5f76673376962cd563cd':
  Add error logging on invalid cmap
2016-02-17 23:55:18 +00:00
Raph Levien
0eb5239cf5 Add error logging on invalid cmap - DO NOT MERGE am: ac3b9bc4ea am: 055b8c8cda -s ours
am: c4ed0af154

* commit 'c4ed0af1541b7592f9b5b0a9f2c281f150db8c39':
  Add error logging on invalid cmap - DO NOT MERGE
2016-02-17 23:55:07 +00:00
Raph Levien
83f28ad6b6 Add error logging on invalid cmap am: 9e8fd1dff7
am: 78bf54cc23

* commit '78bf54cc23fd7752302e9e39cc6fbc7346f6f939':
  Add error logging on invalid cmap
2016-02-17 23:51:06 +00:00
Raph Levien
c4ed0af154 Add error logging on invalid cmap - DO NOT MERGE am: ac3b9bc4ea
am: 055b8c8cda  -s ours

* commit '055b8c8cda0b491f17cd597a96f651ff0c2cde49':
  Add error logging on invalid cmap - DO NOT MERGE
2016-02-17 23:47:10 +00:00
Raph Levien
78bf54cc23 Add error logging on invalid cmap
am: 9e8fd1dff7

* commit '9e8fd1dff74e2c696d3fd7a2873d982bcb0b06cd':
  Add error logging on invalid cmap
2016-02-17 23:43:34 +00:00
Raph Levien
055b8c8cda Add error logging on invalid cmap - DO NOT MERGE
am: ac3b9bc4ea

* commit 'ac3b9bc4ea57584b6b98307dc505567beaeedab1':
  Add error logging on invalid cmap - DO NOT MERGE
2016-02-17 23:43:26 +00:00
Raph Levien
90118a90f5 Add line breaks to email addresses and URLs
am: 5102c20dd5

* commit '5102c20dd50fde7ab9cdcdce173f53a6cacbd9e0':
  Add line breaks to email addresses and URLs
2016-02-17 23:42:21 +00:00
Raph Levien
084923f611 Special-case URLs and email addresses for line breaking
am: 76022a08e3

* commit '76022a08e3f01db804d97c10277ee2704ef68f45':
  Special-case URLs and email addresses for line breaking
2016-02-17 23:42:08 +00:00
Raph Levien
806dd8f792 Refine hyphenation around punctuation
am: c3b16d8894

* commit 'c3b16d88941b337c2b0b861daf610bf9ca80f908':
  Refine hyphenation around punctuation
2016-02-17 23:41:55 +00:00
Raph Levien
76772e8ad4 Add penalty for breaks in URLs and email addresses
Recent changes have added special cases for line breaks within URLs
and email addresses. Such breaks are undesirable when they can be
avoided, but at other times are needed to avoid huge gaps, or indeed
to make the line fit at all.

This patch assigns a penalty for such breaks, equal to the hyphenation
penalty. The mechanism is currently very simple, but would be easy to
fine-tune based on more detailed information about break quality.

Bug: 20126487
Bug: 20566159
Change-Id: I0d3323897737a2850f1e734fa17b96b065eabd9c
2016-02-17 23:13:44 +00:00
Raph Levien
5102c20dd5 Add line breaks to email addresses and URLs
This change adds accceptable line breaks according to sections 7.42
(Dividing URLs and e-mail addresses) and 14.12 (URLs or DOIs and line
breaks) of the Chicago Manual of Style (16th ed.). In general, these
place breaks before punctuation symbols, and suppresses them after
hyphens.

Bug: 20126487
Bug: 20566159
Change-Id: I2d07d516b920a506a2f718c38fb435c5eb1ee1f8
2016-02-17 23:12:48 +00:00
Raph Levien
76022a08e3 Special-case URLs and email addresses for line breaking
Detect URLs and email addresses, and suppress both line breaking and
hyphenation within them.

Bug: 20126487
Bug: 20566159

Change-Id: I43629347a063dcf579e355e5b678d7195f453ad9
2016-02-17 23:11:46 +00:00
Bill Yi
7e4f21a4e3 Merge commit \'408d44a0834d88a9ed4060dbeb8223fcd321f5d0\' into HEAD
am: d166b937e4

* commit 'd166b937e4aafc61e00a59101e38f628d19e1505':
2016-02-17 20:47:59 +00:00
Bill Yi
d166b937e4 Merge commit '408d44a0834d88a9ed4060dbeb8223fcd321f5d0' into HEAD 2016-02-17 09:50:45 -08:00
Seigo Nonaka
650392314e Improve Paint.measureText and Paint.hasGlyph for variation sequences.
Before this patch, the font fallback chain iterated all installed font
families if a variation selector was specified.

This CL narrows down the range of iteration.
To decide the font family for the variation sequence, we need to search
for both the variation sequence and its base code point.
The new range of the iteration is a union of them.

With this change, the running time of Paint.hasGlyph for the variation
sequence improves 50% and the running time of Paint.measureText for the
variation sequence improves 40% for the large text case on Nexus 6
userdebug.

Bug: 26784699
Bug: 11750374

Change-Id: Iced1349e3ca750821d8882c551551f65bb569794
2016-02-17 16:01:20 +09:00
Raph Levien
c3b16d8894 Refine hyphenation around punctuation
Implement a WordBreaker that defines our concept of valid word
boundaries, customizing the ICU behavior. Currently, we suppress line
breaks at soft hyphens (these are handled specially). Also, the
new WordBreaker class has methods that determine the start and end
of the word (punctuation stripped) for the purpose of hyphenation.

This patch, in its current form, doesn't handle email addresses and
URLs specially, but the WordBreaker class is the correct place to do
so. Also, special case handling of hyphens and dashes is still done
in LineBreaker, but all of that should be moved to WordBreaker.

Bug: 20126487
Bug: 20566159
Change-Id: I492cbad963f9b74a2915f010dad46bb91f97b2fe
2016-02-16 22:05:07 -08:00
Dan Albert
24e3abaf1e Fix warnings.
am: 09481597e4  -s ours

* commit '09481597e453ab3ce4fd4a1b4533ff2a2c5dd23a':
  Fix warnings.
2016-02-12 20:40:00 +00:00
Raph Levien
ac3b9bc4ea Add error logging on invalid cmap - DO NOT MERGE
This patch logs instances of fonts with invalid cmap tables.

Bug: 25645298
Bug: 26413177
Change-Id: I183985e9784a97a2b4307a22e036382b1fc90e5e
2016-02-12 17:09:01 +00:00
Raph Levien
9e8fd1dff7 Add error logging on invalid cmap
This patch logs instances of fonts with invalid cmap tables.

Bug: 25645298
Bug: 26413177
Change-Id: I183985e9784a97a2b4307a22e036382b1fc90e5e
2016-02-12 17:07:38 +00:00
Dan Albert
09481597e4 Fix warnings.
Bug: http://b/26936282
Change-Id: I91b3bc246a4a8c45bde223cfc25df18ae9af8c5b
2016-02-11 20:40:58 -08:00
Aurimas Liutikas
aa48a65766 Fix two "unused parameter" warnings in minikin sample.
Removing variables in main function of sample/example.cpp as
they are not used.

Bug: 26936282
Change-Id: I64ae0a455b413df333ddd4810a9e090d52322041
2016-02-12 00:40:29 +00:00
Keisuke Kuroyanagi
380658778e Optimize: Precompute the hash value for LayoutCacheKey.
Bug: 24505153
Change-Id: If61c063c175086dec88cda187eafd9ce923e4cb1
2016-02-08 06:56:56 +00:00
Seigo Nonaka
109b667554 Improve Paint.hasGlyph performance by caching hb_font_t
It turned out that hb_font_t creation is not a lightweight operation.
Especially, Paint.hasGlyph creates hb_font_t for all existing fonts
every time. To improve the performance, cache hb_font_t instead
of hb_face_t.

Note that to calculate horizontal advance, MinikinPaint needs to be
associated with hb_font_t by calling hb_font_set_funcs. With this patch,
hb_font_set_funcs may be called multiple times for the same hb_font_t
object. However this is not an issue since MinikinPaint is unique
during layout.

Bug: 26784699

Change-Id: I516498ae9f0127d700fc9829327e9789845a1416
2016-02-04 12:26:10 +09:00
Stephen Hines
e7f39cb730 Disable unsigned integer overflow sanitization until libc++ is fixed. am: 900a7c36fb
am: 711e2e5d39

* commit '711e2e5d39e4db68803407262b4af6ad3e104c9d':
  Disable unsigned integer overflow sanitization until libc++ is fixed.
2016-01-26 14:35:15 +00:00
Stephen Hines
711e2e5d39 Disable unsigned integer overflow sanitization until libc++ is fixed.
am: 900a7c36fb

* commit '900a7c36fb2953605bae61a70fb508d0f8fe515c':
  Disable unsigned integer overflow sanitization until libc++ is fixed.
2016-01-26 14:33:16 +00:00
Stephen Hines
900a7c36fb Disable unsigned integer overflow sanitization until libc++ is fixed.
Bug: http://b/26781196
Bug: http://b/25884483
Bug: http://b/26432628

Although this issue was first only manifesting on Fugu, it now affects
N9 and N6p as well. This change disables unsigned overflow sanitization
on all platforms. The real fix for libc++ (r257368) can't be committed
until we have updated Clang at least one more time.

Change-Id: I71e9c50d25ae4566d4c06f348183c4b22a4bb60a
2016-01-26 00:49:26 -08:00
Keisuke Kuroyanagi
84b080abc5 Add light weight methods for text measurement.
The intruduced method measureText can be used instead of
doLayout for text measurement purpose.

Bug: 24505153
Change-Id: Ic29bbb347daf18d1f6c13f86970dcdd11dd6a2bd
2016-01-21 18:23:25 +09:00
Raph Levien
d34c46ee7d Reject fonts with invalid ranges in cmap am: f5d2fa97bb am: 8d10d3a0f9 am: 97ef1a4890 am: 0d004fc9b6 am: 5936f34f86 am: f76c8acaf6 am: 95a63d665b -s ours
am: 408d44a083  -s ours

* commit '408d44a0834d88a9ed4060dbeb8223fcd321f5d0':
  Reject fonts with invalid ranges in cmap
2016-01-15 22:22:10 +00:00