Behdad Esfahbod [Sat, 1 Dec 2018 18:12:21 +0000 (13:12 -0500)]
New approach to change BigEndian casts to be int-sized
Fixes spurious warnings like:
Fixes https://github.com/harfbuzz/harfbuzz/issues/1436
Behdad Esfahbod [Sat, 1 Dec 2018 18:03:52 +0000 (13:03 -0500)]
Change hb_assert_unsigned_t<> to hb_is_signed<>
Behdad Esfahbod [Sat, 1 Dec 2018 05:14:48 +0000 (00:14 -0500)]
Revert "Change BigEndian casts to be int-sized"
This reverts commit
eb5ddd32bf4e458ca0af8d5784f8fd46485ad225.
Broke tests, badly. To be investigated and reenabled.
Behdad Esfahbod [Sat, 1 Dec 2018 05:04:29 +0000 (00:04 -0500)]
Minor
Behdad Esfahbod [Sat, 1 Dec 2018 05:03:01 +0000 (00:03 -0500)]
Change BigEndian casts to be int-sized
Fixes spurious warnings like:
Fixes https://github.com/harfbuzz/harfbuzz/issues/1436
Behdad Esfahbod [Sat, 1 Dec 2018 04:38:24 +0000 (23:38 -0500)]
Fix more warning
Behdad Esfahbod [Sat, 1 Dec 2018 04:20:50 +0000 (23:20 -0500)]
Fix warning
Behdad Esfahbod [Sat, 1 Dec 2018 04:04:59 +0000 (23:04 -0500)]
[CFF] Change spaces to tabs
Behdad Esfahbod [Sat, 1 Dec 2018 03:54:57 +0000 (22:54 -0500)]
[CFF] Whitespace
Behdad Esfahbod [Sat, 1 Dec 2018 03:54:20 +0000 (22:54 -0500)]
Minor
Behdad Esfahbod [Sat, 1 Dec 2018 03:43:22 +0000 (22:43 -0500)]
Remove generated files that were accidentally added by CFF2 branch
Behdad Esfahbod [Sat, 1 Dec 2018 03:40:54 +0000 (22:40 -0500)]
Merge pull request #1113 from harfbuzz/cff-subset
CFF/CFF2 subsetter
Bruce Mitchener [Sat, 1 Dec 2018 03:22:49 +0000 (10:22 +0700)]
Use nullptr instead of 0/NULL. (#1435)
* Use nullptr instead of 0/NULL.
* Update test-name-table.cc
Michiharu Ariza [Sat, 1 Dec 2018 02:58:14 +0000 (18:58 -0800)]
undo 0u
Michiharu Ariza [Sat, 1 Dec 2018 02:47:34 +0000 (18:47 -0800)]
Merge branch 'master' into cff-subset
Behdad Esfahbod [Sat, 1 Dec 2018 02:36:35 +0000 (21:36 -0500)]
Merge pull request #1433 from harfbuzz/overload-overload
Fix ambiguous overload errors with old compilers
Behdad Esfahbod [Sat, 1 Dec 2018 01:45:40 +0000 (20:45 -0500)]
Revert ugly fixes
Now that we have
6daf45e0, revert cryptic hacks...
This reverts commit
abd81ed4f5cbc5a94171747909bc6b77551cb929.
This reverts commit
9c6921c08c905a0cf45ba0182134e6ff910fac51.
This reverts commit
d39760cabfe4007cefdfc45231e85e93fababac2.
This reverts commit
fedd8e6c176dea85194693399e50243eb1c117c4.
Fixes https://github.com/harfbuzz/harfbuzz/issues/1374
Behdad Esfahbod [Sat, 1 Dec 2018 00:57:12 +0000 (19:57 -0500)]
Make operator [] take signed int
The built-in operator takes signed int. So, match it, such that
the built-in is never a better or equally-good match to our operator.
Fixes "ambiguous overload" errors from gcc 4.2 and VS 2008.
See https://github.com/harfbuzz/harfbuzz/issues/1374
Michiharu Ariza [Sat, 1 Dec 2018 00:59:41 +0000 (16:59 -0800)]
redo fixes
Michiharu Ariza [Sat, 1 Dec 2018 00:50:46 +0000 (16:50 -0800)]
yet another
Michiharu Ariza [Sat, 1 Dec 2018 00:31:01 +0000 (16:31 -0800)]
some more
Michiharu Ariza [Sat, 1 Dec 2018 00:07:08 +0000 (16:07 -0800)]
fix another pesky gcc error
Michiharu Ariza [Fri, 30 Nov 2018 23:15:31 +0000 (15:15 -0800)]
silence picky gcc errors
Michiharu Ariza [Fri, 30 Nov 2018 23:00:52 +0000 (15:00 -0800)]
Merge branch 'master' into cff-subset
Behdad Esfahbod [Fri, 30 Nov 2018 21:50:30 +0000 (16:50 -0500)]
One more.........
I wonder if there's something better to do about these :(.
In file included from hb-ot-color.cc:31:
hb-ot-color-cpal-table.hh: In member function 'unsigned int OT::CPAL::get_size() const':
hb-ot-color-cpal-table.hh:118: error: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
Behdad Esfahbod [Fri, 30 Nov 2018 21:04:52 +0000 (16:04 -0500)]
One more....
hb-ot-vorg-table.hh:96: error: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
hb-vector.hh:87: note: candidate 1: const Type& hb_vector_t<Type, PreallocedCount>::operator[](unsigned int) const [with Type = OT::VertOriginMetric, unsigned int PreallocedCount = 8u]
hb-ot-vorg-table.hh:96: note: candidate 2: operator[](const T*, int) <built-in>
Behdad Esfahbod [Fri, 30 Nov 2018 20:55:30 +0000 (15:55 -0500)]
One more...
Sigh.
hb-ot-kern-table.hh: In member function 'int OT::KernSubTableFormat3<KernSubTableHeader>::get_kerning(hb_codepoint_t, hb_codepoint_t) const':
hb-ot-kern-table.hh:59: error: ambiguous overload for 'operator[]' in 'kernValue[kernIndex[i]]'
hb-ot-kern-table.hh:59: note: candidates are: operator[](T*, int) <built-in>
hb-dsalgs.hh:574: note: Type& hb_array_t<Type>::operator[](unsigned int) const [with Type = const OT::IntType<short int, 2u>]
Behdad Esfahbod [Fri, 30 Nov 2018 20:16:57 +0000 (15:16 -0500)]
More...
hb-ot-layout-gsubgpos.hh:1707: error: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
...
Behdad Esfahbod [Fri, 30 Nov 2018 17:52:21 +0000 (12:52 -0500)]
More weird fixes
In file included from hb-ot-name.cc:29:
hb-ot-name-table.hh: In member function 'unsigned int OT::name::get_size() const':
hb-ot-name-table.hh:157: error: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
hb-open-type.hh:354: note: candidate 1: const Type& OT::UnsizedArrayOf<Type>::operator[](unsigned int) const [with Type = OT::NameRecord]
hb-ot-name-table.hh:157: note: candidate 2: operator[](const T*, int) <built-in>
hb-ot-name-table.hh: In member function 'void OT::name::accelerator_t::init(hb_face_t*)':
hb-ot-name-table.hh:196: error: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
hb-dsalgs.hh:574: note: candidate 1: Type& hb_array_t<Type>::operator[](unsigned int) const [with Type = const OT::NameRecord]
hb-ot-name-table.hh:196: note: candidate 2: operator[](T*, int) <built-in>
hb-ot-name-table.hh:197: error: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
hb-dsalgs.hh:574: note: candidate 1: Type& hb_array_t<Type>::operator[](unsigned int) const [with Type = const OT::NameRecord]
hb-ot-name-table.hh:197: note: candidate 2: operator[](T*, int) <built-in>
hb-ot-name-table.hh:198: error: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
hb-dsalgs.hh:574: note: candidate 1: Type& hb_array_t<Type>::operator[](unsigned int) const [with Type = const OT::NameRecord]
hb-ot-name-table.hh:198: note: candidate 2: operator[](T*, int) <built-in>
make[4]: *** [libharfbuzz_la-hb-ot-name.lo] Error 1
make[3]: *** [all-recursive] Error 1
Behdad Esfahbod [Fri, 30 Nov 2018 16:53:30 +0000 (11:53 -0500)]
Behdad Esfahbod [Fri, 30 Nov 2018 16:51:26 +0000 (11:51 -0500)]
Umm. Cryptic, yes
In file included from hb-face.cc:35:
hb-ot-cmap-table.hh: In member function 'void OT::CmapSubtableFormat4::_compiles_assertion_on_line_388() const':
hb-ot-cmap-table.hh:388: error: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
hb-open-type.hh:354: note: candidate 1: const Type& OT::UnsizedArrayOf<Type>::operator[](unsigned int) const [with Type = OT::IntType<short unsigned int, 2u>]
hb-ot-cmap-table.hh:388: note: candidate 2: operator[](const T*, int) <built-in>
hb-ot-cmap-table.hh: In member function 'void OT::CmapSubtableFormat4::_instance_assertion_on_line_388() const':
hb-ot-cmap-table.hh:388: error: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
hb-open-type.hh:354: note: candidate 1: const Type& OT::UnsizedArrayOf<Type>::operator[](unsigned int) const [with Type = OT::IntType<short unsigned int, 2u>]
hb-ot-cmap-table.hh:388: note: candidate 2: operator[](const T*, int) <built-in>
hb-face.cc: In function 'hb_blob_t* _hb_face_builder_data_reference_blob(hb_face_builder_data_t*)':
hb-face.cc:650: error: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
hb-vector.hh:81: note: candidate 1: Type& hb_vector_t<Type, PreallocedCount>::operator[](unsigned int) [with Type = hb_face_builder_data_t::table_entry_t, unsigned int PreallocedCount = 32u]
hb-face.cc:650: note: candidate 2: operator[](T*, int) <built-in>
hb-face.cc:650: error: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
hb-vector.hh:81: note: candidate 1: Type& hb_vector_t<Type, PreallocedCount>::operator[](unsigned int) [with Type = hb_face_builder_data_t::table_entry_t, unsigned int PreallocedCount = 32u]
hb-face.cc:650: note: candidate 2: operator[](const T*, int) <built-in>
hb-face.cc:651: error: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
hb-vector.hh:81: note: candidate 1: Type& hb_vector_t<Type, PreallocedCount>::operator[](unsigned int) [with Type = hb_face_builder_data_t::table_entry_t, unsigned int PreallocedCount = 32u]
hb-face.cc:651: note: candidate 2: operator[](T*, int) <built-in>
hb-face.cc:651: error: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
hb-vector.hh:81: note: candidate 1: Type& hb_vector_t<Type, PreallocedCount>::operator[](unsigned int) [with Type = hb_face_builder_data_t::table_entry_t, unsigned int PreallocedCount = 32u]
hb-face.cc:651: note: candidate 2: operator[](const T*, int) <built-in>
Behdad Esfahbod [Fri, 30 Nov 2018 16:51:26 +0000 (11:51 -0500)]
Umm. Cryptic, yes
hb-face.cc:650: error: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
hb-vector.hh:81: note: candidate 1: Type& hb_vector_t<Type, PreallocedCount>::operator[](unsigned int) [with Type = hb_face_builder_data_t::table_entry_t, unsigned int PreallocedCount = 32u]
hb-face.cc:650: note: candidate 2: operator[](T*, int) <built-in>
Behdad Esfahbod [Fri, 30 Nov 2018 16:31:39 +0000 (11:31 -0500)]
Fix a few more sizeof(vector[0]) errors with weird compilers
Behdad Esfahbod [Fri, 30 Nov 2018 06:11:04 +0000 (01:11 -0500)]
Fix build for realz
Behdad Esfahbod [Fri, 30 Nov 2018 05:44:40 +0000 (00:44 -0500)]
Fix build
Behdad Esfahbod [Fri, 30 Nov 2018 05:38:08 +0000 (00:38 -0500)]
[post] Rename v2 to v2X
Behdad Esfahbod [Fri, 30 Nov 2018 05:32:12 +0000 (00:32 -0500)]
Move things
Behdad Esfahbod [Thu, 29 Nov 2018 21:29:30 +0000 (16:29 -0500)]
Fix build for realz
Behdad Esfahbod [Thu, 29 Nov 2018 21:03:15 +0000 (16:03 -0500)]
[uniscribe] Fix build
Ebrahim Byagowi [Thu, 29 Nov 2018 20:36:40 +0000 (00:06 +0330)]
[test][aat] Remove extra --shaper ot
As run-tests.py already adds it
Ebrahim Byagowi [Thu, 29 Nov 2018 20:27:50 +0000 (23:57 +0330)]
[ci] Re-enable llvm-gcc-4.2 bots (#1429)
Ebrahim Byagowi [Thu, 29 Nov 2018 20:17:20 +0000 (23:47 +0330)]
Limit __builtin_bswap16 to GCC >= 5 as it was implemented on 4.8
Behdad Esfahbod [Thu, 29 Nov 2018 20:07:44 +0000 (15:07 -0500)]
[coretext] Fix compile
Fingers crossed.
Behdad Esfahbod [Thu, 29 Nov 2018 20:04:34 +0000 (15:04 -0500)]
Convert "static const hb_tag_t" constants to enum
Behdad Esfahbod [Thu, 29 Nov 2018 20:01:10 +0000 (15:01 -0500)]
Convert misc "static const" constants to enum
Behdad Esfahbod [Thu, 29 Nov 2018 19:53:43 +0000 (14:53 -0500)]
Convert "static const bool" constants to anonymous enum
Behdad Esfahbod [Thu, 29 Nov 2018 19:34:44 +0000 (14:34 -0500)]
[vector] Make pointer cast explicit
Too bad this doesn't help MSVC 2008 build, as explicit operators are
C++11.
Behdad Esfahbod [Thu, 29 Nov 2018 19:28:44 +0000 (14:28 -0500)]
Hand-hold older compilers
Behdad Esfahbod [Thu, 29 Nov 2018 17:39:52 +0000 (12:39 -0500)]
[test/text-rendering-tests] Update from upstream
Behdad Esfahbod [Thu, 29 Nov 2018 17:32:47 +0000 (12:32 -0500)]
Make shaper's override_features() override user features as well
The override_features is used to override features that are normally
discretionary features, but in a specific shaper are for various
reasons desired to be bolted on or off, because they've been used
for inherent shaping. As such, it makes sense that they also
override user features. Ie. if user turned 'liga' on, we don't
want Khmer shaping to become broken... Or turn 'clig' off...
Fixes https://github.com/harfbuzz/harfbuzz/issues/1310
Behdad Esfahbod [Thu, 29 Nov 2018 17:30:14 +0000 (12:30 -0500)]
[khmer] Move 'clig' to overrides
Prerequisite for https://github.com/harfbuzz/harfbuzz/issues/1310
Behdad Esfahbod [Thu, 29 Nov 2018 17:18:14 +0000 (12:18 -0500)]
Fix "typename outside template" issues
Nothing an extra template class wouldn't fix...
Fixes https://github.com/harfbuzz/harfbuzz/issues/1419
Behdad Esfahbod [Thu, 29 Nov 2018 16:53:53 +0000 (11:53 -0500)]
2.2.0
Behdad Esfahbod [Thu, 29 Nov 2018 16:34:22 +0000 (11:34 -0500)]
[icu] Minor
Behdad Esfahbod [Thu, 29 Nov 2018 15:39:18 +0000 (10:39 -0500)]
Merge pull request #1418 from gvictor/replace_icu_deprecated
Replace @Deprecated ICU API - USCRIPT_CODE_LIMIT
Ebrahim Byagowi [Thu, 29 Nov 2018 08:06:05 +0000 (11:36 +0330)]
[test][aat.kern] More (#1427)
Michiharu Ariza [Thu, 29 Nov 2018 01:06:11 +0000 (17:06 -0800)]
workaround for issue #1417
Michiharu Ariza [Thu, 29 Nov 2018 00:27:45 +0000 (16:27 -0800)]
Merge branch 'master' into cff-subset
Behdad Esfahbod [Wed, 28 Nov 2018 22:21:57 +0000 (17:21 -0500)]
Merge pull request #1425 from mbutterick/patch-1
update simple shaping example (closes #298)
Matthew Butterick [Wed, 28 Nov 2018 21:46:12 +0000 (13:46 -0800)]
update simple shaping example (closes #298)
add call to `FT_Set_Char_Size`, otherwise default size remains at `0`, and glyph positions come back as `0` too
Ebrahim Byagowi [Wed, 28 Nov 2018 21:25:05 +0000 (00:55 +0330)]
[test][aat] Update expectency
It is not visually noticeable but apparently affected by kern format2 correct implementation.
I should've checked CoreText result which can't as CircleCI outage.
Ebrahim Byagowi [Wed, 28 Nov 2018 20:37:00 +0000 (00:07 +0330)]
[test] Add test for format2 kern (#1423)
Behdad Esfahbod [Wed, 28 Nov 2018 20:24:30 +0000 (15:24 -0500)]
[kerx] Fix Format2 index calc again
Behdad Esfahbod [Wed, 28 Nov 2018 20:08:01 +0000 (15:08 -0500)]
Merge remote-tracking branch 'fdo/master'
Behdad Esfahbod [Wed, 28 Nov 2018 20:06:01 +0000 (15:06 -0500)]
[kern] Fix kern table Format2 offsetToIndex
Fixes https://github.com/harfbuzz/harfbuzz/issues/1421
Behdad Esfahbod [Wed, 28 Nov 2018 19:51:56 +0000 (14:51 -0500)]
[kerx] Fix ClassTable implementation for 'kern' table Format 2
Behdad Esfahbod [Wed, 28 Nov 2018 19:46:26 +0000 (14:46 -0500)]
[aat] Towards adding two ClassTable's
Ebrahim Byagowi [Wed, 28 Nov 2018 16:58:42 +0000 (20:28 +0330)]
[test][aat] Add a test and make macOS runners faster (#1422)
Behdad Esfahbod [Tue, 27 Nov 2018 22:40:32 +0000 (17:40 -0500)]
Merge pull request #1398 from Adenilson/bigInt01
Optimize harfbuzz big integer conversions
Behdad Esfahbod [Tue, 27 Nov 2018 22:40:09 +0000 (17:40 -0500)]
Comment
Adenilson Cavalcanti [Tue, 20 Nov 2018 22:41:19 +0000 (14:41 -0800)]
Optimize harfbuzz big integer conversions
Profiling showed that type conversions were adding considerable cycles in time
spent doing text shaping.
The idea is to optimize it using native processor instructions to help Blink
layout performance.
Doing further investigation revelead that compilers may not use the
proper instruction on ARM 32bits builds (i.e. REV16).
One way to insure that the generated ASM was ideal for both gcc/clang
was using __builtin_bswap16.
Added bonus is that we no longer need to test for CPU architecture.
Victor Chang [Tue, 27 Nov 2018 11:34:56 +0000 (11:34 +0000)]
Replace @Deprecated ICU API - USCRIPT_CODE_LIMIT
Use of the deprecated API USCRIPT_CODE_LIMIT prevents harfbuzz
using the ICU4C as a shared library.
The API has been replaced by u_getIntPropertyMaxValue(UCHAR_SCRIPT)
Ebrahim Byagowi [Mon, 26 Nov 2018 15:28:39 +0000 (18:58 +0330)]
[ci] Add .codecov.yml
Similar to https://github.com/GoogleChrome/lighthouse/blob/master/.codecov.yml
No strong preference on commenting, feel free to enable it again
Ebrahim Byagowi [Mon, 26 Nov 2018 13:28:58 +0000 (16:58 +0330)]
[test][aat] Enable Tamil MN test (#1414)
Behdad Esfahbod [Sun, 25 Nov 2018 21:51:22 +0000 (16:51 -0500)]
[aat] Ignore GSUB table of Muthu Foundry if they have morx table
Fixes https://github.com/harfbuzz/harfbuzz/issues/1410
Behdad Esfahbod [Sun, 25 Nov 2018 21:38:36 +0000 (16:38 -0500)]
[GDEF] Move more code
Behdad Esfahbod [Sun, 25 Nov 2018 20:59:18 +0000 (15:59 -0500)]
[GDEF] Move code around
Behdad Esfahbod [Sun, 25 Nov 2018 20:51:01 +0000 (15:51 -0500)]
[GDEF] Minor
Ebrahim Byagowi [Sun, 25 Nov 2018 10:07:23 +0000 (13:37 +0330)]
[test][aat] fix 10.13.6 Helvetica expectation
Ebrahim Byagowi [Sun, 25 Nov 2018 09:20:30 +0000 (12:50 +0330)]
[aat] Add m grave test (#1412)
Ebrahim Byagowi [Sun, 25 Nov 2018 07:55:17 +0000 (11:25 +0330)]
[aat] Fix macos expectation
Behdad Esfahbod [Sun, 25 Nov 2018 06:14:40 +0000 (01:14 -0500)]
[aat.feat] Rework API and implementation
Fixes https://github.com/harfbuzz/harfbuzz/pull/1346
Behdad Esfahbod [Sat, 24 Nov 2018 17:08:36 +0000 (12:08 -0500)]
[aat.feat] Add _MAX_VALUE to enums
Behdad Esfahbod [Sat, 24 Nov 2018 16:02:04 +0000 (11:02 -0500)]
[aat.feat] Minor
Behdad Esfahbod [Sat, 24 Nov 2018 16:00:42 +0000 (11:00 -0500)]
[aat.feat] Whitespace
Behdad Esfahbod [Sat, 24 Nov 2018 15:54:40 +0000 (10:54 -0500)]
[aat.feat] Port to SortedUnsizedArrayOf.bsearch()
Behdad Esfahbod [Sat, 24 Nov 2018 15:46:56 +0000 (10:46 -0500)]
[AAT.feat] Use lsearch for looking up SettingName's
They are not sorted.
Behdad Esfahbod [Sat, 24 Nov 2018 15:30:35 +0000 (10:30 -0500)]
[aat] Fix include issues
Behdad Esfahbod [Fri, 23 Nov 2018 19:05:11 +0000 (14:05 -0500)]
[aat] Move contents of hb-aat.h to hb-aat-layout.h
Since it was pages and pages...
Behdad Esfahbod [Fri, 23 Nov 2018 17:23:35 +0000 (12:23 -0500)]
[aat.feat] Fix enum namespace
Behdad Esfahbod [Fri, 23 Nov 2018 17:21:02 +0000 (12:21 -0500)]
Minor
Behdad Esfahbod [Fri, 23 Nov 2018 16:57:42 +0000 (11:57 -0500)]
[aat] Rename feat API a bit more
Ebrahim Byagowi [Fri, 23 Nov 2018 08:35:06 +0000 (12:05 +0330)]
[feat] Rename API uses of setting to selector
Ebrahim Byagowi [Fri, 23 Nov 2018 08:14:53 +0000 (11:44 +0330)]
[feat] Apply renamings and add documentation
Ebrahim Byagowi [Sat, 17 Nov 2018 10:53:11 +0000 (14:23 +0330)]
[feat] Use bsearch
Ebrahim Byagowi [Sat, 17 Nov 2018 08:00:50 +0000 (11:30 +0330)]
[feat] Address Behdad comments
Ebrahim Byagowi [Fri, 16 Nov 2018 21:37:09 +0000 (01:07 +0330)]
[feat] Address @behdad comments
Ebrahim Byagowi [Thu, 8 Nov 2018 21:20:10 +0000 (00:50 +0330)]
[feat] Complete feature types list
Ebrahim Byagowi [Thu, 1 Nov 2018 18:54:42 +0000 (22:24 +0330)]
[feat] Add feature iteration API
Ebrahim Byagowi [Thu, 1 Nov 2018 18:08:54 +0000 (21:38 +0330)]
[feat] Turn AAT feature id into enum