platform/upstream/libHarfBuzzSharp.git
6 years agoAdd option to buffer serialization to not output glyph advances
Behdad Esfahbod [Wed, 10 Jan 2018 01:20:14 +0000 (02:20 +0100)]
Add option to buffer serialization to not output glyph advances

When advances are not printed, glyph offsets reflect absolute glyph
positions.

New API:
HB_BUFFER_SERIALIZE_FLAG_NO_ADVANCES
hb-shape --no-advances

6 years ago[test] Add script for extracting tests from text-rendering-tests
Behdad Esfahbod [Wed, 10 Jan 2018 00:54:12 +0000 (01:54 +0100)]
[test] Add script for extracting tests from text-rendering-tests

Work in progress...

https://github.com/unicode-org/text-rendering-tests

6 years ago[test] Minor
Behdad Esfahbod [Wed, 10 Jan 2018 00:13:36 +0000 (01:13 +0100)]
[test] Minor

6 years ago[test] Simplify test runner
Behdad Esfahbod [Tue, 9 Jan 2018 22:15:54 +0000 (23:15 +0100)]
[test] Simplify test runner

Always pass hb-shape as first argument to run-tests.py.

Also require automake 1.13.

6 years ago[test] Minor
Behdad Esfahbod [Tue, 9 Jan 2018 22:11:00 +0000 (23:11 +0100)]
[test] Minor

6 years ago[test] Reorganize test suite
Behdad Esfahbod [Tue, 9 Jan 2018 20:58:57 +0000 (21:58 +0100)]
[test] Reorganize test suite

In anticipation of importing more test suites.

6 years ago[test] Remove unused hb-diff-ngrams
Behdad Esfahbod [Tue, 9 Jan 2018 20:35:21 +0000 (21:35 +0100)]
[test] Remove unused hb-diff-ngrams

6 years ago[test] Remove unused manifest stuff
Behdad Esfahbod [Tue, 9 Jan 2018 20:33:38 +0000 (21:33 +0100)]
[test] Remove unused manifest stuff

6 years ago[test] Move test files around
Behdad Esfahbod [Tue, 9 Jan 2018 17:23:19 +0000 (18:23 +0100)]
[test] Move test files around

6 years ago[aat/morx] Implement NoncontextualSubtables
Behdad Esfahbod [Tue, 9 Jan 2018 16:55:17 +0000 (17:55 +0100)]
[aat/morx] Implement NoncontextualSubtables

Also makes hb-ot-shape call morx for now instead of GSUB... Just for testing.

6 years agoMinor
Behdad Esfahbod [Tue, 9 Jan 2018 15:32:58 +0000 (16:32 +0100)]
Minor

6 years ago[aat] Implement Lookup table
Behdad Esfahbod [Tue, 9 Jan 2018 14:48:51 +0000 (15:48 +0100)]
[aat] Implement Lookup table

Untested, but compiles.

6 years agoMinor
Behdad Esfahbod [Tue, 9 Jan 2018 11:06:38 +0000 (12:06 +0100)]
Minor

6 years ago[aat] Update previous commits for rebase on master
Behdad Esfahbod [Mon, 8 Jan 2018 14:32:55 +0000 (14:32 +0000)]
[aat] Update previous commits for rebase on master

6 years ago[aat] Start implementing common table formats
Behdad Esfahbod [Thu, 17 Aug 2017 23:55:54 +0000 (16:55 -0700)]
[aat] Start implementing common table formats

6 years ago[aat] Start implementing Apple AAT morx table
Behdad Esfahbod [Tue, 15 Aug 2017 00:24:36 +0000 (17:24 -0700)]
[aat] Start implementing Apple AAT morx table

6 years ago[cmake] Add autotools like feature testing (#683)
Ebrahim Byagowi [Mon, 8 Jan 2018 22:09:42 +0000 (01:39 +0330)]
[cmake] Add autotools like feature testing (#683)

6 years ago[ft] Use FT_Done_MM_Var() if available
Behdad Esfahbod [Mon, 8 Jan 2018 10:07:46 +0000 (10:07 +0000)]
[ft] Use FT_Done_MM_Var() if available

6 years ago[khmer] Relax!
Behdad Esfahbod [Fri, 5 Jan 2018 18:09:29 +0000 (18:09 +0000)]
[khmer] Relax!

Apparently we don't use OT_A either.

6 years ago[khmer] Drop another joiner
Behdad Esfahbod [Fri, 5 Jan 2018 18:06:00 +0000 (18:06 +0000)]
[khmer] Drop another joiner

6 years ago[khmer] Shuffle
Behdad Esfahbod [Fri, 5 Jan 2018 18:04:56 +0000 (18:04 +0000)]
[khmer] Shuffle

6 years ago[khmer] Simplify grammar some more
Behdad Esfahbod [Fri, 5 Jan 2018 18:03:00 +0000 (18:03 +0000)]
[khmer] Simplify grammar some more

Numbers down (from 38):

KHMER: 299090 out of 299124 tests passed. 34 failed (0.0113665%)

6 years ago[khmer] Clean
Behdad Esfahbod [Fri, 5 Jan 2018 18:01:01 +0000 (18:01 +0000)]
[khmer] Clean

6 years ago[khmer] Limit number of joiners
Behdad Esfahbod [Fri, 5 Jan 2018 17:59:43 +0000 (17:59 +0000)]
[khmer] Limit number of joiners

6 years ago[khmer] Relax number of consonants / matras allowed
Behdad Esfahbod [Fri, 5 Jan 2018 17:57:39 +0000 (17:57 +0000)]
[khmer] Relax number of consonants / matras allowed

New numbers (down from 39):

KHMER: 299086 out of 299124 tests passed. 38 failed (0.0127038%)

6 years ago[khmer] Allow Independent Vowels where stacked consonants are allowed
Behdad Esfahbod [Fri, 5 Jan 2018 17:52:24 +0000 (17:52 +0000)]
[khmer] Allow Independent Vowels where stacked consonants are allowed

New numbers (down from 44):

KHMER: 299085 out of 299124 tests passed. 39 failed (0.0130381%)

6 years ago[khmer] Drop some more joiners
Behdad Esfahbod [Fri, 5 Jan 2018 17:47:35 +0000 (17:47 +0000)]
[khmer] Drop some more joiners

6 years ago[khmer] Drop some more
Behdad Esfahbod [Fri, 5 Jan 2018 17:46:49 +0000 (17:46 +0000)]
[khmer] Drop some more

6 years ago[khmer] Drop some more grammar
Behdad Esfahbod [Fri, 5 Jan 2018 17:45:48 +0000 (17:45 +0000)]
[khmer] Drop some more grammar

6 years ago[khmer] Drop some more from grammar
Behdad Esfahbod [Fri, 5 Jan 2018 17:44:18 +0000 (17:44 +0000)]
[khmer] Drop some more from grammar

6 years ago[khmer] Drop final_halant_group
Behdad Esfahbod [Fri, 5 Jan 2018 17:43:31 +0000 (17:43 +0000)]
[khmer] Drop final_halant_group

6 years agoMinor
Behdad Esfahbod [Fri, 5 Jan 2018 17:34:26 +0000 (17:34 +0000)]
Minor

6 years ago[indic] Remove unused OT_VD category
Behdad Esfahbod [Fri, 5 Jan 2018 17:27:48 +0000 (17:27 +0000)]
[indic] Remove unused OT_VD category

6 years ago[khmer] Shave off some more from the grammar
Behdad Esfahbod [Fri, 5 Jan 2018 17:21:55 +0000 (17:21 +0000)]
[khmer] Shave off some more from the grammar

6 years ago[khmer] Remove unused symbol clusters
Behdad Esfahbod [Fri, 5 Jan 2018 17:17:02 +0000 (17:17 +0000)]
[khmer] Remove unused symbol clusters

6 years agoMinor
Behdad Esfahbod [Fri, 5 Jan 2018 17:15:31 +0000 (17:15 +0000)]
Minor

6 years ago[khmer] Remove medials from grammar
Behdad Esfahbod [Fri, 5 Jan 2018 17:14:27 +0000 (17:14 +0000)]
[khmer] Remove medials from grammar

6 years ago[khmer] Better fix for dangling final Coeng
Behdad Esfahbod [Fri, 5 Jan 2018 17:06:29 +0000 (17:06 +0000)]
[khmer] Better fix for dangling final Coeng

This is how 1471cfee3bb2734dc44c58471362851ad27e8bd8 should have
been done.

6 years ago[khmer] Remove reph/repha support from grammar
Behdad Esfahbod [Fri, 5 Jan 2018 17:05:53 +0000 (17:05 +0000)]
[khmer] Remove reph/repha support from grammar

6 years ago[khmer] Remove forced_rakar from grammar
Behdad Esfahbod [Fri, 5 Jan 2018 17:01:37 +0000 (17:01 +0000)]
[khmer] Remove forced_rakar from grammar

Used by Sinhala only.

6 years ago[khmer] Allow a dangling final Coeng after matras
Behdad Esfahbod [Fri, 5 Jan 2018 16:34:20 +0000 (16:34 +0000)]
[khmer] Allow a dangling final Coeng after matras

Uniscribe seems to allow that.  New numbers:

KHMER: 299080 out of 299124 tests passed. 44 failed (0.0147096%)

6 years ago[khmer] Remove some more unused code
Behdad Esfahbod [Fri, 5 Jan 2018 16:28:00 +0000 (16:28 +0000)]
[khmer] Remove some more unused code

6 years ago[khmer] Remove features not used by Khmer
Behdad Esfahbod [Fri, 5 Jan 2018 16:13:09 +0000 (16:13 +0000)]
[khmer] Remove features not used by Khmer

6 years ago[khmer] Remove rphf feature
Behdad Esfahbod [Fri, 5 Jan 2018 16:08:44 +0000 (16:08 +0000)]
[khmer] Remove rphf feature

6 years ago[khmer] Remove non-Khmer matra positioning code
Behdad Esfahbod [Fri, 5 Jan 2018 16:06:53 +0000 (16:06 +0000)]
[khmer] Remove non-Khmer matra positioning code

6 years ago[khmer] Remove indic_config_t
Behdad Esfahbod [Fri, 5 Jan 2018 16:04:02 +0000 (16:04 +0000)]
[khmer] Remove indic_config_t

6 years ago[khmer] Remove indic_config->reph_mode
Behdad Esfahbod [Fri, 5 Jan 2018 16:02:27 +0000 (16:02 +0000)]
[khmer] Remove indic_config->reph_mode

6 years ago[khmer] Remove indic_config->reph_pos
Behdad Esfahbod [Fri, 5 Jan 2018 16:01:17 +0000 (16:01 +0000)]
[khmer] Remove indic_config->reph_pos

6 years ago[khmer] Remove indic_config->base_pos
Behdad Esfahbod [Fri, 5 Jan 2018 15:50:05 +0000 (15:50 +0000)]
[khmer] Remove indic_config->base_pos

6 years ago[khmer] Remove other scripts
Behdad Esfahbod [Fri, 5 Jan 2018 15:45:30 +0000 (15:45 +0000)]
[khmer] Remove other scripts

6 years ago[khmer] Remove indic_config->script
Behdad Esfahbod [Fri, 5 Jan 2018 15:43:48 +0000 (15:43 +0000)]
[khmer] Remove indic_config->script

6 years ago[khmer] Remove indic_config->virama
Behdad Esfahbod [Fri, 5 Jan 2018 15:43:11 +0000 (15:43 +0000)]
[khmer] Remove indic_config->virama

6 years ago[khmer] Remove indic_config->has_old_spec
Behdad Esfahbod [Fri, 5 Jan 2018 15:41:31 +0000 (15:41 +0000)]
[khmer] Remove indic_config->has_old_spec

6 years ago[khmer] Remove Halant from Khmer shaper
Behdad Esfahbod [Fri, 5 Jan 2018 15:36:53 +0000 (15:36 +0000)]
[khmer] Remove Halant from Khmer shaper

6 years ago[indic] Remove more Khmer-specific stuff from Indic shaper
Behdad Esfahbod [Fri, 5 Jan 2018 15:33:11 +0000 (15:33 +0000)]
[indic] Remove more Khmer-specific stuff from Indic shaper

No numbers changed.

6 years ago[indic] Remove main Khmer stuff
Behdad Esfahbod [Fri, 5 Jan 2018 15:08:28 +0000 (15:08 +0000)]
[indic] Remove main Khmer stuff

6 years ago[khmer] Split off Khmer shaper from Indic
Behdad Esfahbod [Fri, 5 Jan 2018 14:54:31 +0000 (14:54 +0000)]
[khmer] Split off Khmer shaper from Indic

Towards fixing https://github.com/harfbuzz/harfbuzz/issues/667
The Khmer spec is different enough from other Indic ones to require
its own grammar.

No change in functionality.  Test numbers are:

BENGALI: 353725 out of 354188 tests passed. 463 failed (0.130722%)
DEVANAGARI: 707307 out of 707394 tests passed. 87 failed (0.0122987%)
GUJARATI: 366355 out of 366457 tests passed. 102 failed (0.0278341%)
GURMUKHI: 60729 out of 60747 tests passed. 18 failed (0.0296311%)
KANNADA: 951300 out of 951913 tests passed. 613 failed (0.0643966%)
KHMER: 299071 out of 299124 tests passed. 53 failed (0.0177184%)
MALAYALAM: 1048136 out of 1048334 tests passed. 198 failed (0.0188871%)
ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%)
SINHALA: 271662 out of 271847 tests passed. 185 failed (0.068053%)
TAMIL: 1091754 out of 1091754 tests passed. 0 failed (0%)
TELUGU: 970555 out of 970573 tests passed. 18 failed (0.00185457%)

6 years ago[ot] Short-circuit base instance advance variation
Behdad Esfahbod [Fri, 5 Jan 2018 14:01:37 +0000 (14:01 +0000)]
[ot] Short-circuit base instance advance variation

6 years ago[ot] Fix VariationStore evaluation algorithm
Behdad Esfahbod [Fri, 5 Jan 2018 13:20:21 +0000 (13:20 +0000)]
[ot] Fix VariationStore evaluation algorithm

Ouch!  Missing coords should still be evaluated as coord=0, which
most of the time results in a factor of 0.  We were skipping these,
which was equivalent to a factor of 1.

Fixes https://github.com/harfbuzz/harfbuzz/issues/652

6 years agoMinor
Behdad Esfahbod [Fri, 5 Jan 2018 13:17:02 +0000 (13:17 +0000)]
Minor

6 years ago[ft] If there's no variations set, don't set them on hb-font
Behdad Esfahbod [Fri, 5 Jan 2018 13:06:25 +0000 (13:06 +0000)]
[ft] If there's no variations set, don't set them on hb-font

6 years agoAdd test font for previous commit
Behdad Esfahbod [Fri, 5 Jan 2018 12:55:39 +0000 (12:55 +0000)]
Add test font for previous commit

6 years agoMerge remote-tracking branch 'fdo/master'
Behdad Esfahbod [Fri, 5 Jan 2018 12:50:22 +0000 (12:50 +0000)]
Merge remote-tracking branch 'fdo/master'

6 years agoImprove CGJ skipping logic
Behdad Esfahbod [Fri, 5 Jan 2018 12:46:12 +0000 (12:46 +0000)]
Improve CGJ skipping logic

Previously we made CGJ unskippable.  Now, if CGJ did NOT prevent
any reordering, allow skipping over it.  To make this work we
had to make changes to the Arabic mark reordering algorithm
implementation to renumber moved MCM marks.  See comments.

Fixes https://github.com/harfbuzz/harfbuzz/issues/554

6 years agoImprove tests (#679)
Ebrahim Byagowi [Fri, 5 Jan 2018 09:12:20 +0000 (12:42 +0330)]
Improve tests (#679)

6 years agoMinor
Behdad Esfahbod [Thu, 4 Jan 2018 16:06:25 +0000 (16:06 +0000)]
Minor

6 years agoatomics: Favor compiler primitives over macOS APIs. (#676)
Bruce Mitchener [Thu, 4 Jan 2018 11:40:10 +0000 (18:40 +0700)]
atomics: Favor compiler primitives over macOS APIs. (#676)

In macOS 10.12, the `OSMemoryBarrier` and related APIs were deprecated
in favor of using `std::atomic`. On the way to supporting `std::atomic`,
we can favor using the "Intel primitives" which are also available on
macOS.

6 years ago[cmake] Colorize output when using cmake + ninja. (#674)
Bruce Mitchener [Thu, 4 Jan 2018 11:37:35 +0000 (18:37 +0700)]
[cmake] Colorize output when using cmake + ninja. (#674)

Due to how ninja runs clang and gcc, it doesn't colorize the output
like make does. This forces color output in this situation.

6 years ago[cmake] Run src/ tests (#675)
Ebrahim Byagowi [Thu, 4 Jan 2018 06:41:34 +0000 (10:11 +0330)]
[cmake] Run src/ tests (#675)

6 years ago[use] Simplify more
Behdad Esfahbod [Wed, 3 Jan 2018 14:27:34 +0000 (14:27 +0000)]
[use] Simplify more

6 years ago[use] Simplify
Behdad Esfahbod [Wed, 3 Jan 2018 14:24:44 +0000 (14:24 +0000)]
[use] Simplify

Fixes https://github.com/harfbuzz/harfbuzz/pull/661

6 years ago[use] Fix Brahmi Number Joiner 1107F
Behdad Esfahbod [Wed, 3 Jan 2018 14:22:07 +0000 (14:22 +0000)]
[use] Fix Brahmi Number Joiner 1107F

Fixes https://github.com/harfbuzz/harfbuzz/pull/660

6 years ago[util] Add TODO item
Behdad Esfahbod [Wed, 3 Jan 2018 12:46:29 +0000 (12:46 +0000)]
[util] Add TODO item

6 years agoFix make check issue on out-of-tree builds and test it (#672)
Ebrahim Byagowi [Tue, 2 Jan 2018 20:22:12 +0000 (23:52 +0330)]
Fix make check issue on out-of-tree builds and test it (#672)

6 years agoFix typos.
Bruce Mitchener [Tue, 2 Jan 2018 18:23:23 +0000 (01:23 +0700)]
Fix typos.

6 years agoImprove Markdown usage in BUILD.md.
Bruce Mitchener [Tue, 2 Jan 2018 17:15:18 +0000 (00:15 +0700)]
Improve Markdown usage in BUILD.md.

6 years agolink with CoreFoundation when using CoreText
Romain Ouabdelkader [Thu, 21 Dec 2017 13:39:34 +0000 (14:39 +0100)]
link with CoreFoundation when using CoreText

6 years ago[cmake] Run rest of the tests on Windows (#668)
Ebrahim Byagowi [Mon, 1 Jan 2018 07:47:51 +0000 (11:17 +0330)]
[cmake] Run rest of the tests on Windows (#668)

6 years ago[cmake] Run fuzzing and shaping tests (#666)
Ebrahim Byagowi [Fri, 29 Dec 2017 19:43:29 +0000 (23:13 +0330)]
[cmake] Run fuzzing and shaping tests (#666)

6 years ago[cmake] Use GNUInstallDirs values (#665)
Ebrahim Byagowi [Mon, 25 Dec 2017 18:31:28 +0000 (22:01 +0330)]
[cmake] Use GNUInstallDirs values (#665)

6 years agoAdd Coverity badge
Behdad Esfahbod [Sun, 24 Dec 2017 22:53:32 +0000 (17:53 -0500)]
Add Coverity badge

6 years ago[cmake] Enable cmake tests on distribution and test it (#664)
Ebrahim Byagowi [Sun, 24 Dec 2017 22:25:48 +0000 (01:55 +0330)]
[cmake] Enable cmake tests on distribution and test it (#664)

6 years agoForbid Batak killers after vowel signs
David Corbett [Wed, 22 Nov 2017 21:32:52 +0000 (16:32 -0500)]
Forbid Batak killers after vowel signs

6 years ago[ci] Add -Wno-attributes to djgpp, add alpine, format (#663)
Ebrahim Byagowi [Sun, 24 Dec 2017 22:02:46 +0000 (01:32 +0330)]
[ci] Add -Wno-attributes to djgpp, add alpine, format (#663)

6 years ago[use] Allow ZWJ before/after Halant
Behdad Esfahbod [Sun, 24 Dec 2017 21:05:07 +0000 (16:05 -0500)]
[use] Allow ZWJ before/after Halant

https://github.com/harfbuzz/harfbuzz/issues/542#issuecomment-353169729

6 years agoMinor
Behdad Esfahbod [Wed, 20 Dec 2017 18:19:33 +0000 (13:19 -0500)]
Minor

6 years ago[ci] Add a DOS/djgpp compiler (#659)
Ebrahim Byagowi [Thu, 21 Dec 2017 16:45:37 +0000 (20:15 +0330)]
[ci] Add a DOS/djgpp compiler (#659)

6 years ago1.7.4
Behdad Esfahbod [Wed, 20 Dec 2017 17:09:00 +0000 (12:09 -0500)]
1.7.4

6 years agoHarfBuzz 1.7.1 and later don't compile on AIX with xlC (#655)
Volker H. Simonis [Tue, 19 Dec 2017 10:33:25 +0000 (11:33 +0100)]
HarfBuzz 1.7.1 and later don't compile on AIX with xlC (#655)

6 years ago[set] Handle nil set in add_range() / add_sorted_array()
Behdad Esfahbod [Tue, 19 Dec 2017 19:48:26 +0000 (14:48 -0500)]
[set] Handle nil set in add_range() / add_sorted_array()

Fixes https://github.com/harfbuzz/harfbuzz/issues/657

6 years ago1.7.3
Behdad Esfahbod [Mon, 18 Dec 2017 14:18:51 +0000 (09:18 -0500)]
1.7.3

6 years ago[coretext] In hb_coretext_font_create() set ptem
Behdad Esfahbod [Sun, 17 Dec 2017 17:32:33 +0000 (12:32 -0500)]
[coretext] In hb_coretext_font_create() set ptem

Otherwise setting the CTFont was ineffective as it would have been
recreated anyway unless font size was set to 18 CSS points.

6 years ago[set] In add_sorted_array(), bail if data is not sorted
Behdad Esfahbod [Sat, 16 Dec 2017 16:49:39 +0000 (11:49 -0500)]
[set] In add_sorted_array(), bail if data is not sorted

6 years ago[collect_glyphs] Bail if input data looks like garbage
Behdad Esfahbod [Sat, 16 Dec 2017 16:11:18 +0000 (11:11 -0500)]
[collect_glyphs] Bail if input data looks like garbage

Specificaly, when a range or sorted array has unexpected order, we take that as
font data being garbage and bail out.  This fixes significant slowdown on a bad
version of Chandas font which has a 600KB GPOS with garbage inside.

Later on, I like to add a maximum-work counter for collect_glyphs to protect
against malicious fonts as well.

Fixes https://bugs.chromium.org/p/chromium/issues/detail?id=794896

6 years ago[set] Optimize add_array() / add_sorted_array()
Behdad Esfahbod [Sat, 16 Dec 2017 16:36:16 +0000 (11:36 -0500)]
[set] Optimize add_array() / add_sorted_array()

Does page lookup as needed.

6 years ago[collect_glyphs] handle ClassDef better
Behdad Esfahbod [Sat, 16 Dec 2017 16:07:37 +0000 (11:07 -0500)]
[collect_glyphs] handle ClassDef better

6 years ago[collect_glyphs] In PairPosFornat2 do not collect classDef1
Behdad Esfahbod [Sat, 16 Dec 2017 14:18:07 +0000 (06:18 -0800)]
[collect_glyphs] In PairPosFornat2 do not collect classDef1

The coverage already covered that.

6 years agoMore work towards improving collect_glyphs() against bad input
Behdad Esfahbod [Sat, 16 Dec 2017 14:12:06 +0000 (06:12 -0800)]
More work towards improving collect_glyphs() against bad input

The three "XXXXX"'s should be switched to false.  Doing that separately for ease
of bisecting...

6 years ago[set] Add add_sorted_array()
Behdad Esfahbod [Fri, 15 Dec 2017 03:33:55 +0000 (19:33 -0800)]
[set] Add add_sorted_array()

Not optimized to use sortedness yet.  Also start putting in place infra
to faster reject bad data.

A version of Chandas.ttf found on some Chrome bots has 660kb of GPOS,
mostly junk.  That is causing 48 million of set->add() calls in
collect_glyphs(), which is insane.

In the upcoming commits, I'll be speeding that up by optimizing
add_sorted_array(), while also reducing work by rejecting out-of-sort
arrays quickly and propagate the rejection.

Part of https://bugs.chromium.org/p/chromium/issues/detail?id=794896

6 years ago[set] Reduce number of preallocated pages from 8 to 1
Behdad Esfahbod [Fri, 15 Dec 2017 03:04:55 +0000 (19:04 -0800)]
[set] Reduce number of preallocated pages from 8 to 1

Now that pagesize is 8192, this feels better.