Commit Graph

7494 Commits

Author SHA1 Message Date
Behdad Esfahbod 78d35f0e78 Reduce captures of lambdas 2019-05-15 18:15:05 -07:00
Behdad Esfahbod 5266ca86b6 Fix tests
Oops.
2019-05-15 17:59:00 -07:00
Behdad Esfahbod 5da8a3a90d Remove variadic form of hb_min/hb_max
Unused, and why here and not in other functions...
2019-05-15 17:11:18 -07:00
Behdad Esfahbod e5cfe9d582 Add arithmetic operators 2019-05-15 16:59:36 -07:00
Behdad Esfahbod f7a458510d Add hb_bitwise_* ops 2019-05-15 16:53:12 -07:00
Behdad Esfahbod d822e0a16f [array] Adjust operator!=
See comments.
2019-05-15 16:30:08 -07:00
Behdad Esfahbod 203ea58bf6 More adjustment to OffsetTo<>::friend opeator+
Let's see if I break any bots.  But yeah, it wasn't accepting a
non-const pointer.  It just happens that we don't use that in the
code it seems.
2019-05-15 16:14:40 -07:00
Behdad Esfahbod ebf47a95f2 [iter] Simplify operator!= of iterator filters
Both to save ops, and also because lambdas don't implement operator!=,
so this was failing in range-based for loop if a lambda was passed to
hb_map() or hb_filter().  Just check end-condition assuming that we
are comparing to .end() or iterators that are otherwise derived from
current iterator.  Ie. don't compare things that are expected to be
in common.
2019-05-15 15:14:26 -07:00
Behdad Esfahbod d3e1d5044f Add all pair_t comparison operators 2019-05-15 14:34:36 -07:00
Behdad Esfahbod f244224dbb [iter] Use default operators instead of redefining empty ones 2019-05-15 14:34:36 -07:00
David Corbett 125c45ed36 Convert Consonant_Initial_Postfixed to CONS_MED 2019-05-15 14:34:25 -07:00
Ebrahim Byagowi e2767e438c
[ci][test] Ignore other gcov symbols also
To fix https://travis-ci.org/harfbuzz/harfbuzz/jobs/532693197
2019-05-15 13:14:09 +04:30
Behdad Esfahbod 763ea4224b Another try 2019-05-15 01:21:32 -07:00
Behdad Esfahbod e1b2edb04a Completely revert the thing back 2019-05-15 01:12:04 -07:00
Behdad Esfahbod c58eeb5fb3 Another try at fix
Fails locally.  Trying to understand.  Sigh
2019-05-15 01:10:31 -07:00
Behdad Esfahbod 004edf3bda Ugh. How was the Travis bot happy before, but isn't now?! :( 2019-05-15 01:02:50 -07:00
Behdad Esfahbod e01c7b1648 Move OffsetTo operator+ back out of class
Apparently there's different overload resolution rules that apply, at
least with some (older?) version of gcc.

hb-ot-name-table.hh: In member function ‘void OT::name::accelerator_t::init(hb_face_t*)’:
hb-ot-name-table.hh:244:62: error: ambiguous overload for ‘operator+’ (operand types are ‘hb_blob_ptr_t<OT::name>’ and ‘OT::NNOffsetTo<OT::UnsizedArrayOf<OT::IntType<unsigned char, 1u> > > {aka const OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<unsigned char, 1u> >, OT::IntType<short unsigned int, 2u>, false>}’)
       this->pool = (const char *) (const void *) (this->table+this->table->stringOffset);
                                                              ^
hb-ot-name-table.hh:244:62: note: candidates are:
hb-ot-name-table.hh:244:62: note: operator+(const C*, long int) <built-in>
hb-ot-name-table.hh:244:62: note: operator+(const char*, long int) <built-in>
2019-05-15 00:52:17 -07:00
Behdad Esfahbod b213042f87 Revert "Revert symmetric OffsetTo overloads"
This reverts commit 01912efb74.

Actually this didn't break things.  Fixing
2019-05-15 00:50:48 -07:00
Behdad Esfahbod 01912efb74 Revert symmetric OffsetTo overloads
Reverts 57f65ae935

Caused ambiguous-overload on some gcc...
2019-05-15 00:42:47 -07:00
Behdad Esfahbod d0df996cdc Use implicit lambda return type 2019-05-15 00:32:41 -07:00
Behdad Esfahbod 57f65ae935 Add symmetric friend operator+ for OffsetTo 2019-05-14 22:52:59 -07:00
Behdad Esfahbod 71208e5047 Move OffsetTo<> deref operators in-class as friends 2019-05-14 22:51:59 -07:00
Behdad Esfahbod e6d6f4b96d Whitespace 2019-05-14 22:46:31 -07:00
Behdad Esfahbod 889dc1eb06 [iter] Remove sort categorization
See comments.
2019-05-14 22:28:07 -07:00
Behdad Esfahbod b4eff38397 Start of gen-ucd.py, to replace UCDN 2019-05-14 14:44:27 -07:00
Qunxin Liu 02e5e5d939 [subset] retian nameids from STAT and fvar tables 2019-05-14 14:44:17 -07:00
Behdad Esfahbod ff7995200e Hopefully last warning fix 2019-05-14 07:44:03 -07:00
Ebrahim Byagowi 9e7c9c3adb
Fix -Wunused-function on HB_NO_SHAPE_AAT
We should add a bot for it
Part of #1652
2019-05-14 15:58:51 +04:30
Dominik Röttsches c73d7ba75d Fix building with HB_NO_SUBSET_LAYOUT
Fixes an unused function warning when building with HB_NO_SUBSET_LAYOUT
as part of the Chrome build.
2019-05-14 13:31:44 +03:00
Behdad Esfahbod f39934983f [ucdn] Fix Hangul composition
https://github.com/grigorig/ucdn/issues/23
2019-05-14 00:13:21 -07:00
Behdad Esfahbod b2ab15a78c Fix more warnings 2019-05-13 23:47:28 -07:00
Behdad Esfahbod 42ae468a8a [config] Add NDEBUG and HB_NDEBUG
Part of https://github.com/harfbuzz/harfbuzz/issues/1652
2019-05-13 23:43:45 -07:00
Behdad Esfahbod 0a01deb76f One more warning fix
No idea where these appear from...
2019-05-13 18:04:09 -07:00
Behdad Esfahbod f76e9f2ede [icu] Comment 2019-05-13 17:39:46 -07:00
Behdad Esfahbod 70fe9e7355 Fix moreeeeeeeeeee 2019-05-13 17:35:02 -07:00
Behdad Esfahbod 68e12e68f8 Fix more semi-colon issues 2019-05-13 17:28:59 -07:00
Behdad Esfahbod 4d3cf2adb6 [iter] Fix zip iterator sortedness classification logic 2019-05-13 17:25:07 -07:00
Behdad Esfahbod c572732f29 Fix more excess semi-colon errors 2019-05-13 15:41:09 -07:00
Behdad Esfahbod 513762849a [iter] Track strictly-sorted iterators
This make output of hb_enumerate() sorted regardless of input iterator.
2019-05-13 15:36:14 -07:00
Behdad Esfahbod 7e02063f32 [iter] Minor 2019-05-13 15:26:00 -07:00
Garret Rieger a5fb44a8cb [subset] Fix shadowed 'groups' param in cmap. 2019-05-13 15:04:35 -07:00
Behdad Esfahbod 73943bdf21 Adjust uniscribe_bug_compatible mode
More correct behavior.  We were commenting out some legit conditions
before.

Part of https://github.com/harfbuzz/harfbuzz/issues/1652
2019-05-13 14:48:31 -07:00
Behdad Esfahbod 809c587083 [config] Better compile away morx/kerx/trak
Part of https://github.com/harfbuzz/harfbuzz/issues/1652
2019-05-13 14:45:51 -07:00
Behdad Esfahbod b1d3e54bd3 [indic] Don't constrain how many C, M, ... occur
Fixes https://github.com/harfbuzz/harfbuzz/issues/1709

Part of https://github.com/harfbuzz/harfbuzz/issues/1652
2019-05-13 14:35:04 -07:00
Behdad Esfahbod a487fc3324 Another extra semi-colon 2019-05-13 14:16:33 -07:00
Behdad Esfahbod 8461ade783 Revert "[ragel] Regenerate ragel-generated files using ragel 7.0.0.11 May 2018"
This reverts commit 9b05db33b5.

Fixes https://github.com/harfbuzz/harfbuzz/issues/1708
2019-05-13 14:10:48 -07:00
Behdad Esfahbod 52c15b053a Revert "[ragel] Switch to -T1 output instead of -F1"
This reverts commit ae8719eb59.

Part of https://github.com/harfbuzz/harfbuzz/issues/1708
2019-05-13 14:10:28 -07:00
Behdad Esfahbod e98f0ddd63 Fix extra semi-colon 2019-05-13 13:53:06 -07:00
Behdad Esfahbod ae8719eb59 [ragel] Switch to -T1 output instead of -F1
Fedora upgraded to ragel 7, which is buggy if char is signed.
Switching to -G2 output fails with sign-compare error:

../../src/hb-buffer-deserialize-json.hh:107:12: error: comparison of integer expressions of different signedness: ‘unsigned int’ and ‘const char’ [-Werror=sign-compare]
    if ( 9u <= ( (*( p))) && ( (*( p))) <= 13u ) {
         ~~~^~~~~~~~~~~~~

Switching to -T1 for now.  It actually results in smaller code,
at the expense of some binary searching instead of flat tables.
In the not distant future, we might actually generate two different
outputs and choose between depending on size-optimize options.

Fixes https://github.com/harfbuzz/harfbuzz/issues/1708
2019-05-13 12:30:40 -07:00
Behdad Esfahbod df3f36f0bb Minor 2019-05-12 20:56:36 -07:00
Behdad Esfahbod ccc88e98f3 Fix MSVC build 2019-05-12 16:12:06 -07:00
Behdad Esfahbod f8f9cb93b7 [config] Define HB_NO_SUBSET_LAYOUT in HB_LEAN
Assumning subsetter would be used for printing-like uses in that case,
which don't need GSUB/GPOS.
2019-05-12 15:56:25 -07:00
Behdad Esfahbod a1394a28fc [config] Add HB_NO_UNISCRIBE_BUG_COMPATIBLE
Part of https://github.com/harfbuzz/harfbuzz/issues/1652
2019-05-12 15:47:46 -07:00
Behdad Esfahbod dba1ac1b0e [config] Disable buffer serialize routines in HB_TINY
Part of https://github.com/harfbuzz/harfbuzz/issues/1652
2019-05-12 15:33:49 -07:00
n8willis 3d9be2ad50
Merge pull request #1665 from n8willis/docs-gtkdoc-colormath
[Docs] Add gtk-doc comments for OT color and OT math
2019-05-12 20:03:29 +01:00
Behdad Esfahbod a20db496f0 Fix builds 2019-05-12 11:08:45 -07:00
Behdad Esfahbod 8694d60829 [config] Enable HB_NO_MT in HB_TINY
Now that user can override it if needed...

Part of https://github.com/harfbuzz/harfbuzz/issues/1652
2019-05-12 11:05:24 -07:00
Behdad Esfahbod 7f6fca4ef7 Force-disable CFF code under disabling conditions
Subsetter size goes down from 190kb to 119kb.  Main library about 7kb.

Part of https://github.com/harfbuzz/harfbuzz/issues/1652
2019-05-12 10:29:47 -07:00
Behdad Esfahbod 5249eee437 [config] Allow overriding chosen config 2019-05-11 16:12:23 -07:00
n8willis 1a850abd66
Merge branch 'master' into docs-gtkdoc-colormath 2019-05-11 20:16:57 +01:00
Nathan Willis 8a544171d1 Corrections to OT Color gtk-doc comments. 2019-05-11 20:11:49 +01:00
Nathan Willis 301f5091f6 Corrections to OT Math gtk-doc comments. 2019-05-11 20:11:36 +01:00
Behdad Esfahbod a6048e4cd0 Fix build 2019-05-11 12:11:22 -07:00
Behdad Esfahbod 32d3c06b61 Disable sbix if no-color or no-ot-font-bitmap
Part of https://github.com/harfbuzz/harfbuzz/issues/1652
2019-05-11 11:59:18 -07:00
Behdad Esfahbod 606841b070 [iter] Check for more before forwarding/rewinding past ends 2019-05-11 11:56:26 -07:00
David Corbett c1c122e7b3 [iter] Fix filter rewinding 2019-05-11 11:52:40 -07:00
David Corbett b854d4ff46 [array] Fix rewinding 2019-05-11 11:52:40 -07:00
n8willis 76e80c5ca5
Update src/hb-ot-color.cc
Co-Authored-By: Khaled Hosny <khaledhosny@eglug.org>
2019-05-11 19:51:24 +01:00
Behdad Esfahbod 79126df307 [iter] Add hb_map_sorted() and hb_map_retains_sorting() 2019-05-11 11:23:31 -07:00
n8willis bcd81932f0
Update src/hb-ot-math.cc
Co-Authored-By: Khaled Hosny <khaledhosny@eglug.org>
2019-05-11 14:10:32 +01:00
n8willis ddc6dd42f7
Update src/hb-ot-math.cc
Co-Authored-By: Khaled Hosny <khaledhosny@eglug.org>
2019-05-11 14:10:11 +01:00
n8willis 46e05ecca1
Update src/hb-ot-color.cc
Co-Authored-By: Khaled Hosny <khaledhosny@eglug.org>
2019-05-11 14:09:52 +01:00
n8willis 6d9870b479
Update src/hb-ot-color.cc
Co-Authored-By: Khaled Hosny <khaledhosny@eglug.org>
2019-05-11 14:09:26 +01:00
n8willis 12ea4a24c4
Update src/hb-ot-color.cc
Co-Authored-By: Khaled Hosny <khaledhosny@eglug.org>
2019-05-11 14:08:40 +01:00
n8willis 3535f2d31e
Update src/hb-ot-color.cc
Co-Authored-By: Khaled Hosny <khaledhosny@eglug.org>
2019-05-11 14:07:38 +01:00
n8willis 12d2c472fe
Update src/hb-ot-color.cc
Co-Authored-By: Khaled Hosny <khaledhosny@eglug.org>
2019-05-11 14:06:56 +01:00
Behdad Esfahbod 7f45ce42db [config] Rename 2019-05-11 01:28:31 -07:00
Behdad Esfahbod 0e78d4ddae [config] Add HB_NO_NAME
Part of https://github.com/harfbuzz/harfbuzz/issues/1652
2019-05-11 01:27:50 -07:00
Behdad Esfahbod 1fc0772117 [config] HB_NO_OT_NAME_LANGUAGE AAT 2019-05-11 01:24:23 -07:00
Behdad Esfahbod 4381bb2de7 [config] Comment 2019-05-11 01:14:04 -07:00
Behdad Esfahbod 9c921e6c32 [config] Enable HB_NO_NAME_TABLE_AAT
Part of https://github.com/harfbuzz/harfbuzz/issues/1652
2019-05-11 01:08:51 -07:00
Behdad Esfahbod 81b79dfc39 [config] Add HB_NO_COLOR to HB_LEAN
Part of https://github.com/harfbuzz/harfbuzz/issues/1652
2019-05-11 00:53:52 -07:00
Behdad Esfahbod b63a8e173c [config Add HB_NO_OT_SHAPE_COMPLEX_VOWEL_CONSTRAINTS to LEAN
Already I don't like the inflexibility of this approach :(.

Part of https://github.com/harfbuzz/harfbuzz/issues/1652
2019-05-11 00:47:20 -07:00
Behdad Esfahbod 42a2128477 [config] Disbale getenv() and atexit() if HB_LEAN
Part of https://github.com/harfbuzz/harfbuzz/issues/1652
2019-05-11 00:44:38 -07:00
Behdad Esfahbod fca2786041 [config] Make HB_DISABLE_DEPRECATED actually compile
Part of https://github.com/harfbuzz/harfbuzz/issues/1652
2019-05-11 00:37:01 -07:00
Behdad Esfahbod 5a48611ccd [config] Add HB_NO_OT_LAYOUT_UNUSED
Part of https://github.com/harfbuzz/harfbuzz/issues/1652
2019-05-11 00:19:03 -07:00
Behdad Esfahbod 771f1b21d1 [config] Adjust 2019-05-11 00:16:18 -07:00
Behdad Esfahbod 484f6e8215 [config] Add HB_LEAN
Part of https://github.com/harfbuzz/harfbuzz/issues/1652
2019-05-11 00:13:35 -07:00
Behdad Esfahbod 0bfd14c0ed [config] Fix tests 2019-05-11 00:06:57 -07:00
Behdad Esfahbod 784df8eba1 [config] Flesh out more
Part of https://github.com/harfbuzz/harfbuzz/issues/1652
2019-05-11 00:04:59 -07:00
Behdad Esfahbod 799c6a5081 [config] Add some 2019-05-10 23:56:40 -07:00
Behdad Esfahbod e6582de12f Add hb-config.hh 2019-05-10 23:53:38 -07:00
Behdad Esfahbod d43af339e7 [subset] More HB_NO_SUBSET_LAYOUT
Part of https://github.com/harfbuzz/harfbuzz/issues/1652
2019-05-10 23:46:22 -07:00
Behdad Esfahbod 31c591d69f [cff] Prune more code if HB_NO_OT_FONT_CFF
Part of https://github.com/harfbuzz/harfbuzz/issues/1652
2019-05-10 23:40:09 -07:00
Behdad Esfahbod 5ea8ad5c48 [subset] Add HB_NO_SUBSET_CFF
Doesn't fully prune all the relevant code.  To be fixed later.

Part of https://github.com/harfbuzz/harfbuzz/issues/1652
2019-05-10 23:36:42 -07:00
Behdad Esfahbod 2c93f0dee3 Add HB_NO_AAT
Part of https://github.com/harfbuzz/harfbuzz/issues/1652
2019-05-10 23:35:10 -07:00
Behdad Esfahbod 62dfe7aea2 [cff] Minor 2019-05-10 23:18:08 -07:00
Behdad Esfahbod 227d85e138 Minor 2019-05-10 23:16:14 -07:00
Behdad Esfahbod 9bfe22af61 [sanitize] Fix previous commit 2019-05-10 22:44:19 -07:00
Behdad Esfahbod 4dcf65328f [sanitize] Simplify 2019-05-10 22:23:24 -07:00
Behdad Esfahbod 23168c3981 [sanitize] Use hb_is_trivially_copyable() 2019-05-10 22:20:47 -07:00
Behdad Esfahbod 0ff7954f9f [meta] Add hb_is_trivial 2019-05-10 22:04:40 -07:00
Behdad Esfahbod 7162a97bca [meta] Add hb_is_trivially_copyable() 2019-05-10 22:03:03 -07:00
Behdad Esfahbod f2398f34c0 [meta] Add is_trivially_destructible 2019-05-10 21:59:57 -07:00
Behdad Esfahbod 72cb5b8e52 Remove accidentally included include 2019-05-10 21:50:15 -07:00
Behdad Esfahbod 086772e409 [meta] Add is_destructible 2019-05-10 21:49:25 -07:00
Behdad Esfahbod b14745278a [met]a Add is_constructible, ... 2019-05-10 21:42:59 -07:00
Behdad Esfahbod 19e08a1467 [iter] Adjust source_of/sink_of 2019-05-10 21:25:07 -07:00
Behdad Esfahbod c0485e32a3 Use hb_void_t<> the way it's supposed to be used 2019-05-10 21:03:14 -07:00
Behdad Esfahbod 40fb36a39d [meta] Minor 2019-05-10 21:01:19 -07:00
Behdad Esfahbod f9a96a0a97 [meta] More rewrites 2019-05-10 20:56:16 -07:00
Behdad Esfahbod 5252677e53 [meta] Rewrite hb_int_min/max 2019-05-10 20:49:52 -07:00
Behdad Esfahbod caa3f92e91 [meta] void_tt -> void_t 2019-05-10 20:44:22 -07:00
Behdad Esfahbod 7df3ecfb40 [meta] hb_void_t -> hb_empty_t 2019-05-10 20:43:26 -07:00
Behdad Esfahbod 149c3db8a2 [meta] Minor 2019-05-10 20:34:52 -07:00
Behdad Esfahbod 707ff5b59d Minor 2019-05-10 20:31:20 -07:00
Behdad Esfahbod ce300f4fb6 [meta] Rewrite is_signed, add is_unsigned 2019-05-10 20:26:29 -07:00
Behdad Esfahbod e939d88bd7 [meta] Rewrite is_integral / is_floating_point, add is_arithmetic 2019-05-10 20:20:51 -07:00
Behdad Esfahbod c3a456a26e [meta] Rewrite is_cr_convertible 2019-05-10 20:17:30 -07:00
Behdad Esfahbod b4ad6af9c4 [meta] Rewrite is_base_of 2019-05-10 20:15:03 -07:00
Behdad Esfahbod 5a171ed3a6 [null] Modernize template work 2019-05-10 20:11:29 -07:00
Behdad Esfahbod 61d150c916 [meta] Add integral_constant, true_t -> true_type, false_t -> false_type 2019-05-10 20:06:31 -07:00
Behdad Esfahbod 38e3a8bd53 [meta] bool_tt -> bool_constant 2019-05-10 20:03:14 -07:00
Behdad Esfahbod 3919ca41b5 [meta] Add is_floating_point 2019-05-10 19:56:36 -07:00
Behdad Esfahbod 25bb7e005d [meta] Add is_signed for floating point types 2019-05-10 19:52:36 -07:00
Behdad Esfahbod e0315b4aad [meta] is_integer -> is_integral 2019-05-10 19:48:02 -07:00
Behdad Esfahbod 9574de7a3e [meta] Add add_const, add_pointer, add_lvalue_reference, add_rvalue_reference 2019-05-10 19:29:32 -07:00
Behdad Esfahbod 2fb3a8327a [vector] Simplify arrayZ
Was turned into function when we had static ones and wanted to be
move-safe...  Not the case anymore.
2019-05-10 18:43:48 -07:00
Behdad Esfahbod 4d67743ffd [subset] Use more auto typing 2019-05-10 18:43:48 -07:00
Behdad Esfahbod a27a31b9ee Minor 2019-05-10 18:43:48 -07:00
Behdad Esfahbod 2ade008628 [serialize] More rewrite 2019-05-10 18:43:48 -07:00
Behdad Esfahbod 99ed6e29d8 [serialize] Fix a TODO 2019-05-10 18:43:48 -07:00
Behdad Esfahbod 25a5b287f2 Fix sanitize fail of extension sublookups
Fixes https://bugs.chromium.org/p/chromium/issues/detail?id=960331
2019-05-10 16:03:20 -07:00
Behdad Esfahbod 9c0c3589f3 Minor 2019-05-10 13:56:50 -07:00
Behdad Esfahbod 5d773ec600 Minor 2019-05-10 13:53:15 -07:00
Behdad Esfahbod ac737f8c9e Minor again 2019-05-10 13:51:12 -07:00
Behdad Esfahbod 5d4437fad0 Minor 2019-05-10 13:43:29 -07:00
Behdad Esfahbod cd9bc732a7 [gsubgpos] Minor 2019-05-10 13:17:41 -07:00
Behdad Esfahbod 1d870cce68 Fix bot
Any way to catch these?
2019-05-10 11:32:59 -07:00
Behdad Esfahbod 30e4ae6bd1 [meta] Add hb_is_base_of 2019-05-10 11:26:49 -07:00
Behdad Esfahbod 98974ac16f [iter] Adjust is_source_of / is_sink_of
There are two cases that we accept.  Encode both.
2019-05-10 11:26:49 -07:00
Behdad Esfahbod ed972d5d73 [iter] Rewrite test functions
Notably, add hb_is_source_of(,) and hb_is_sink_of(,) to replace most
uses of hb_is_iterator_of(,).
2019-05-09 16:58:28 -07:00
Behdad Esfahbod 42901d7af9 Minor 2019-05-09 16:22:08 -07:00
Behdad Esfahbod 322627ae1d Whitespace 2019-05-09 16:08:10 -07:00
Behdad Esfahbod 489f3c35bd Fix bot 2019-05-09 15:39:53 -07:00
Behdad Esfahbod 790315e0db [algs] Implement implicit casting between compatible pair types 2019-05-09 15:31:24 -07:00
Behdad Esfahbod 69d9114b53 [meta] Rewrite hb_is_cr_converitble 2019-05-09 15:24:25 -07:00
Behdad Esfahbod ceda1f03b7 Fix compile
NameRecord is not copy-constructible, so should be iterator of
const-reference.
2019-05-09 15:24:25 -07:00
Behdad Esfahbod 3686c3b65c Adjust is_cr_convertible
If To is const& then From doesn't need to be &.
2019-05-09 15:24:25 -07:00
Behdad Esfahbod 726002a6a6 [iter] Make hb_is_iterator_of() check is_convertible
Instead of is_cr_convertible.
2019-05-09 15:24:25 -07:00