From 707998940d380131aa9a502eb127e1a3944bf86b Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Tue, 31 May 2016 00:00:04 +0100 Subject: [PATCH] Convert categories.cpp from C++ to C. --- Makefile.am | 4 +- src/{categories.cpp => categories.c} | 71 +++++++++++++++++----------- src/include/ucd/ucd.h | 15 ++++-- tools/categories.py | 70 ++++++++++++++++----------- 4 files changed, 99 insertions(+), 61 deletions(-) rename src/{categories.cpp => categories.c} (99%) diff --git a/Makefile.am b/Makefile.am index b2a6e976..22222d5c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -94,7 +94,7 @@ tools/scripts.py: tools/ucd.py \ ucd-update: tools/case.py tools/categories.py tools/scripts.py tools/case.py ${UCD_ROOTDIR} ${UCD_VERSION} ${UCD_FLAGS} > src/case.c - tools/categories.py ${UCD_ROOTDIR} ${UCD_VERSION} ${UCD_FLAGS} > src/categories.cpp + tools/categories.py ${UCD_ROOTDIR} ${UCD_VERSION} ${UCD_FLAGS} > src/categories.c tools/scripts.py ${UCD_ROOTDIR} ${UCD_VERSION} ${UCD_FLAGS} > src/scripts.cpp libucd_includedir = $(includedir)/ucd @@ -105,7 +105,7 @@ lib_LTLIBRARIES += src/libucd.la src_libucd_la_LDFLAGS = -version-info $(LIBUCD_VERSION) src_libucd_la_SOURCES = \ src/case.c \ - src/categories.cpp \ + src/categories.c \ src/ctype.c \ src/scripts.cpp \ src/tostring.c diff --git a/src/categories.cpp b/src/categories.c similarity index 99% rename from src/categories.cpp rename to src/categories.c index f89646a2..0ed6581b 100644 --- a/src/categories.cpp +++ b/src/categories.c @@ -25,7 +25,37 @@ #include -using namespace ucd; +#define Cc UCD_CATEGORY_Cc +#define Cf UCD_CATEGORY_Cf +#define Cn UCD_CATEGORY_Cn +#define Co UCD_CATEGORY_Co +#define Cs UCD_CATEGORY_Cs +#define Ll UCD_CATEGORY_Ll +#define Lm UCD_CATEGORY_Lm +#define Lo UCD_CATEGORY_Lo +#define Lt UCD_CATEGORY_Lt +#define Lu UCD_CATEGORY_Lu +#define Mc UCD_CATEGORY_Mc +#define Me UCD_CATEGORY_Me +#define Mn UCD_CATEGORY_Mn +#define Nd UCD_CATEGORY_Nd +#define Nl UCD_CATEGORY_Nl +#define No UCD_CATEGORY_No +#define Pc UCD_CATEGORY_Pc +#define Pd UCD_CATEGORY_Pd +#define Pe UCD_CATEGORY_Pe +#define Pf UCD_CATEGORY_Pf +#define Pi UCD_CATEGORY_Pi +#define Po UCD_CATEGORY_Po +#define Ps UCD_CATEGORY_Ps +#define Sc UCD_CATEGORY_Sc +#define Sk UCD_CATEGORY_Sk +#define Sm UCD_CATEGORY_Sm +#define So UCD_CATEGORY_So +#define Zl UCD_CATEGORY_Zl +#define Zp UCD_CATEGORY_Zp +#define Zs UCD_CATEGORY_Zs +#define Ii UCD_CATEGORY_Ii // Unicode Character Data 8.0.0 @@ -3315,29 +3345,24 @@ static const uint8_t *categories_0E0000_0E01FF[] = }; ucd_category ucd_lookup_category(codepoint_t c) -{ - return (ucd_category)ucd::lookup_category((ucd::category)c); -} - -ucd::category ucd::lookup_category(codepoint_t c) { if (c <= 0x00D7FF) // 000000..00D7FF { const uint8_t *table = categories_000000_00D7FF[(c - 0x000000) / 256]; - return (ucd::category)table[c % 256]; + return (ucd_category)table[c % 256]; } if (c <= 0x00DFFF) return Cs; // 00D800..00DFFF : Surrogates if (c <= 0x00F7FF) return Co; // 00E000..00F7FF : Private Use Area if (c <= 0x02FAFF) // 00F800..02FAFF { const uint8_t *table = categories_00F800_02FAFF[(c - 0x00F800) / 256]; - return (ucd::category)table[c % 256]; + return (ucd_category)table[c % 256]; } if (c <= 0x0DFFFF) return Cn; // 02FB00..0DFFFF : Unassigned if (c <= 0x0E01FF) // 0E0000..0E01FF { const uint8_t *table = categories_0E0000_0E01FF[(c - 0x0E0000) / 256]; - return (ucd::category)table[c % 256]; + return (ucd_category)table[c % 256]; } if (c <= 0x0EFFFF) return Cn; // 0E0200..0EFFFF : Unassigned if (c <= 0x0FFFFD) return Co; // 0F0000..0FFFFD : Plane 15 Private Use @@ -3348,39 +3373,29 @@ ucd::category ucd::lookup_category(codepoint_t c) } ucd_category_group ucd_get_category_group_for_category(ucd_category c) -{ - return (ucd_category_group)ucd::lookup_category_group((ucd::category)c); -} - -ucd::category_group ucd::lookup_category_group(category c) { switch (c) { case Cc: case Cf: case Cn: case Co: case Cs: - return C; + return UCD_CATEGORY_GROUP_C; case Ll: case Lm: case Lo: case Lt: case Lu: - return L; + return UCD_CATEGORY_GROUP_L; case Mc: case Me: case Mn: - return M; + return UCD_CATEGORY_GROUP_M; case Nd: case Nl: case No: - return N; + return UCD_CATEGORY_GROUP_N; case Pc: case Pd: case Pe: case Pf: case Pi: case Po: case Ps: - return P; + return UCD_CATEGORY_GROUP_P; case Sc: case Sk: case Sm: case So: - return S; + return UCD_CATEGORY_GROUP_S; case Zl: case Zp: case Zs: - return Z; + return UCD_CATEGORY_GROUP_Z; case Ii: - return I; + return UCD_CATEGORY_GROUP_I; } } ucd_category_group ucd_lookup_category_group(codepoint_t c) { - return (ucd_category_group)ucd::lookup_category_group(ucd::lookup_category(c)); -} - -ucd::category_group ucd::lookup_category_group(codepoint_t c) -{ - return lookup_category_group(lookup_category(c)); + return (ucd_category_group)ucd_get_category_group_for_category(ucd_lookup_category(c)); } diff --git a/src/include/ucd/ucd.h b/src/include/ucd/ucd.h index 61b38ce0..72f380d9 100644 --- a/src/include/ucd/ucd.h +++ b/src/include/ucd/ucd.h @@ -524,21 +524,30 @@ namespace ucd * @param c The General Category to lookup. * @return The General Category Group of the General Category. */ - category_group lookup_category_group(category c); + inline category_group lookup_category_group(category c) + { + return (category_group)ucd_get_category_group_for_category((ucd_category)c); + } /** @brief Lookup the General Category Group for a Unicode codepoint. * * @param c The Unicode codepoint to lookup. * @return The General Category Group of the Unicode codepoint. */ - category_group lookup_category_group(codepoint_t c); + inline category_group lookup_category_group(codepoint_t c) + { + return (category_group)ucd_lookup_category_group(c); + } /** @brief Lookup the General Category for a Unicode codepoint. * * @param c The Unicode codepoint to lookup. * @return The General Category of the Unicode codepoint. */ - category lookup_category(codepoint_t c); + inline category lookup_category(codepoint_t c) + { + return (category)ucd_lookup_category(c); + } /** @brief Unicode Script * @see http://www.iana.org/assignments/language-subtag-registry diff --git a/tools/categories.py b/tools/categories.py index 0f605d3a..35dca2bf 100755 --- a/tools/categories.py +++ b/tools/categories.py @@ -117,7 +117,37 @@ if __name__ == '__main__': #include -using namespace ucd; +#define Cc UCD_CATEGORY_Cc +#define Cf UCD_CATEGORY_Cf +#define Cn UCD_CATEGORY_Cn +#define Co UCD_CATEGORY_Co +#define Cs UCD_CATEGORY_Cs +#define Ll UCD_CATEGORY_Ll +#define Lm UCD_CATEGORY_Lm +#define Lo UCD_CATEGORY_Lo +#define Lt UCD_CATEGORY_Lt +#define Lu UCD_CATEGORY_Lu +#define Mc UCD_CATEGORY_Mc +#define Me UCD_CATEGORY_Me +#define Mn UCD_CATEGORY_Mn +#define Nd UCD_CATEGORY_Nd +#define Nl UCD_CATEGORY_Nl +#define No UCD_CATEGORY_No +#define Pc UCD_CATEGORY_Pc +#define Pd UCD_CATEGORY_Pd +#define Pe UCD_CATEGORY_Pe +#define Pf UCD_CATEGORY_Pf +#define Pi UCD_CATEGORY_Pi +#define Po UCD_CATEGORY_Po +#define Ps UCD_CATEGORY_Ps +#define Sc UCD_CATEGORY_Sc +#define Sk UCD_CATEGORY_Sk +#define Sm UCD_CATEGORY_Sm +#define So UCD_CATEGORY_So +#define Zl UCD_CATEGORY_Zl +#define Zp UCD_CATEGORY_Zp +#define Zs UCD_CATEGORY_Zs +#define Ii UCD_CATEGORY_Ii // Unicode Character Data %s """ % ucd_version) @@ -162,14 +192,8 @@ using namespace ucd; sys.stdout.write('\tcategories_%s,\n' % codepoint) sys.stdout.write('};\n') - sys.stdout.write(""" -ucd_category ucd_lookup_category(codepoint_t c) -{ - return (ucd_category)ucd::lookup_category((ucd::category)c); -} -""") sys.stdout.write('\n') - sys.stdout.write('ucd::category ucd::lookup_category(codepoint_t c)\n') + sys.stdout.write('ucd_category ucd_lookup_category(codepoint_t c)\n') sys.stdout.write('{\n') for codepoints, category, comment in category_sets: if category: @@ -178,47 +202,37 @@ ucd_category ucd_lookup_category(codepoint_t c) sys.stdout.write('\tif (c <= 0x%s) // %s\n' % (codepoints.last, codepoints)) sys.stdout.write('\t{\n') sys.stdout.write('\t\tconst uint8_t *table = categories_%s_%s[(c - 0x%s) / 256];\n' % (codepoints.first, codepoints.last, codepoints.first)) - sys.stdout.write('\t\treturn (ucd::category)table[c % 256];\n') + sys.stdout.write('\t\treturn (ucd_category)table[c % 256];\n') sys.stdout.write('\t}\n') sys.stdout.write('\treturn Ii; // Invalid Unicode Codepoint\n') sys.stdout.write('}\n') sys.stdout.write(""" ucd_category_group ucd_get_category_group_for_category(ucd_category c) -{ - return (ucd_category_group)ucd::lookup_category_group((ucd::category)c); -} - -ucd::category_group ucd::lookup_category_group(category c) { switch (c) { case Cc: case Cf: case Cn: case Co: case Cs: - return C; + return UCD_CATEGORY_GROUP_C; case Ll: case Lm: case Lo: case Lt: case Lu: - return L; + return UCD_CATEGORY_GROUP_L; case Mc: case Me: case Mn: - return M; + return UCD_CATEGORY_GROUP_M; case Nd: case Nl: case No: - return N; + return UCD_CATEGORY_GROUP_N; case Pc: case Pd: case Pe: case Pf: case Pi: case Po: case Ps: - return P; + return UCD_CATEGORY_GROUP_P; case Sc: case Sk: case Sm: case So: - return S; + return UCD_CATEGORY_GROUP_S; case Zl: case Zp: case Zs: - return Z; + return UCD_CATEGORY_GROUP_Z; case Ii: - return I; + return UCD_CATEGORY_GROUP_I; } } ucd_category_group ucd_lookup_category_group(codepoint_t c) { - return (ucd_category_group)ucd::lookup_category_group(ucd::lookup_category(c)); -} - -ucd::category_group ucd::lookup_category_group(codepoint_t c) -{ - return lookup_category_group(lookup_category(c)); + return (ucd_category_group)ucd_get_category_group_for_category(ucd_lookup_category(c)); } """)