diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..0ec67590 --- /dev/null +++ b/.gitignore @@ -0,0 +1,43 @@ +.*.swp + +# generated files: + +src/categories.cpp + +# intermediate files: + +.deps/ +.libs/ +.dirstamp + +*.pyc +*.o +*.lo + +# build output: + +src/libucd.la + +# autotools output: + +INSTALL +NEWS +README +aclocal.m4 +autom4te.cache/ +config.guess +config.h.in +config.h +config.log +config.status +config.sub +configure +depcomp +install-sh +libtool +ltmain.sh +m4/ +missing +Makefile +Makefile.in +stamp-h1 diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 00000000..001f453d --- /dev/null +++ b/Makefile.am @@ -0,0 +1,71 @@ +AUTOMAKE_OPTIONS = subdir-objects + +localedir = $(datadir)/locale +xdgdatadir = @XDGDATADIR@ +mimedir = $(xdgdatadir)/mime +xmldir = $(mimedir)/packages + +AM_LDFLAGS = ${LTLIBINTL} +AM_CXXFLAGS = -Isrc/include -Isrc + +ACLOCAL_AMFLAGS = -I m4 + +bin_PROGRAMS = +lib_LTLIBRARIES = +man1_MANS = +pkgdata_DATA = + +noinst_bin_PROGRAMS = +noinst_LIBRARIES = + +noinst_bindir = + +EXTRA_DIST = config.rpath ChangeLog +CLEANFILES = +SUBDIRS = + +############################# libtool ######################################### + +EXTRA_DIST += config.guess config.sub ltmain.sh + +# Increment if the interface has changed and is not backward compatible +CURRENT=0 + +# Increment if source files have changed +# Reset to 0 if the interface has changed +REVISION=0 + +# Increment if the interface is backward compatible (superset) +# Reset to 0 if the interface is not backward compatible +AGE=0 + +LIBUCD_VERSION=$(CURRENT):$(REVISION):$(AGE) + +############################# ChangeLog ####################################### + +ChangeLog: + git log > ChangeLog + +dist-hook: ChangeLog + +.PHONY: ChangeLog + +EXTRA_DIST += ChangeLog + +############################# Unicode Character Database ###################### + +src/categories.cpp: tools/categories.py + tools/categories.py ${UCD_ROOTDIR} > $@ + +############################# libucd ########################################## + +libucd_includedir = $(includedir)/ucd +libucd_include_HEADERS = \ + src/include/ucd/ucd.h + +lib_LTLIBRARIES += src/libucd.la + +src_libucd_la_LDFLAGS = -version-info $(LIBUCD_VERSION) +src_libucd_la_CXXFLAGS = ${AM_CXXFLAGS} +src_libucd_la_SOURCES = \ + src/categories.cpp diff --git a/autogen.sh b/autogen.sh new file mode 100755 index 00000000..0674c8f7 --- /dev/null +++ b/autogen.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +mkdir -p m4 +ln -sf README.md README +ln -sf docs/ReleaseNotes.md NEWS + +aclocal -I m4 || exit 1 + +libtoolize || exit 1 +autoheader || exit 1 +automake --add-missing || exit 1 +autoconf || exit 1 diff --git a/configure.ac b/configure.ac new file mode 100644 index 00000000..68352eb9 --- /dev/null +++ b/configure.ac @@ -0,0 +1,38 @@ +AC_PREREQ([2.65]) +AC_INIT([Unicode Character Database Tools], [0.1], [https://github.com/rhdunn/ucd-tools/issues], [ucd-tools], [https://github.com/rhdunn/ucd-tools]) +AM_INIT_AUTOMAKE() + +m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES]) +AM_SILENT_RULES([yes]) + +AC_CONFIG_SRCDIR([src]) +AC_CONFIG_MACRO_DIR([m4]) +AC_CONFIG_HEADERS([config.h]) + +LT_INIT + +dnl ================================================================ +dnl Program checks. +dnl ================================================================ + +AC_PROG_CXX +AC_PROG_MAKE_SET +AC_PROG_LIBTOOL + +dnl ================================================================ +dnl Generate output. +dnl ================================================================ + +AC_CONFIG_FILES([Makefile]) +AC_OUTPUT + +AC_MSG_NOTICE([ + + Configuration for Unicode Character Data Tools complete. + + Source code location: ${srcdir} + XDG data location: ${XDGDATADIR} + + Compiler: ${CXX} + Compiler flags: ${CXXFLAGS} +]) diff --git a/src/include/ucd/ucd.h b/src/include/ucd/ucd.h new file mode 100644 index 00000000..93563287 --- /dev/null +++ b/src/include/ucd/ucd.h @@ -0,0 +1,100 @@ +/* Unicode Character Database API + * + * Copyright (C) 2012 Reece H. Dunn + * + * This file is part of ucd-tools. + * + * ucd-tools is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * ucd-tools is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with ucd-tools. If not, see . + */ + +#ifndef UNICODE_CHARACTER_DATA_H +#define UNICODE_CHARACTER_DATA_H + +#include + +/** @brief Unicode Character Database + */ +namespace ucd +{ + /** @brief Represents a Unicode codepoint. + */ + typedef uint32_t codepoint_t; + + /** @brief Unicode General Category Values + * @see http://www.unicode.org/reports/tr44/ + */ + enum category + { + // Other + + Cc, /**< @brief Control Character */ + Cf, /**< @brief Format Control Character */ + Cn, /**< @brief Unassigned */ + Co, /**< @brief Private Use */ + Cs, /**< @brief Surrogate Code Point */ + + // Letter + + Ll, /**< @brief Lower Case Letter */ + Lm, /**< @brief Letter Modifier */ + Lo, /**< @brief Other Letter */ + Lt, /**< @brief Title Case Letter */ + Lu, /**< @brief Upper Case Letter */ + + // Mark + + Mc, /**< @brief Spacing Mark */ + Me, /**< @brief Enclosing Mark */ + Mn, /**< @brief Non-Spacing Mark */ + + // Symbol + + Sc, /**< @brief Currency Symbol */ + Sk, /**< @brief Modifier Symbol */ + Sm, /**< @brief Math Symbol */ + So, /**< @brief Other Symbol */ + + // Number + + Nd, /**< @brief Decimal Digit */ + Nl, /**< @brief Letter-Like Number */ + No, /**< @brief Other Number */ + + // Punctuation + + Pc, /**< @brief Connector */ + Pd, /**< @brief Dash/Hyphen */ + Pe, /**< @brief Close Punctuation Mark */ + Pf, /**< @brief Final Quotation Mark */ + Pi, /**< @brief Initial Quotation Mark */ + Po, /**< @brief Other */ + Ps, /**< @brief Open PUnctuation Mark */ + + // Separator + + Zc, /**< @brief Whitespace character in the Cc category */ + Zl, /**< @brief Line Separator */ + Zp, /**< @brief Paragraph Separator */ + Zs, /**< @brief Space Separator */ + }; + + /** @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); +} + +#endif diff --git a/tools/categories.py b/tools/categories.py new file mode 100755 index 00000000..de1eac48 --- /dev/null +++ b/tools/categories.py @@ -0,0 +1,60 @@ +#!/usr/bin/python + +# Copyright (C) 2012 Reece H. Dunn +# +# This file is part of ucd-tools. +# +# ucd-tools is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# ucd-tools is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with ucd-tools. If not, see . + +import os +import sys +import ucd + +ucd_rootdir = sys.argv[1] +unicode_data = ucd.parse_ucd_data(ucd_rootdir, 'UnicodeData') + +if __name__ == '__main__': + sys.stdout.write("""/* Unicode General Categories + * + * Copyright (C) 2012 Reece H. Dunn + * + * This file is part of ucd-tools. + * + * ucd-tools is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * ucd-tools is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with ucd-tools. If not, see . + */ + +// NOTE: This file is automatically generated from the UnicodeData.txt file in +// the Unicode Character database by the ucd-tools/tools/categories.py script. + +#include "ucd/ucd.h" + +using namespace ucd; +""") + + sys.stdout.write('\n') + sys.stdout.write('ucd::category ucd::lookup_category(codepoint_t c)\n') + sys.stdout.write('{\n') + sys.stdout.write('\treturn Cn;\n') + sys.stdout.write('}\n')