summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2010-09-27 16:00:46 +0800
committerPeng Wu <alexepico@gmail.com>2010-09-27 16:00:46 +0800
commite6233cbb2da9d2a766aa4f3a33bfa5ea214e4372 (patch)
tree9ef1ebec714beaa390e942e26f61965e872e2980
parent55d80b5ff7702b90fbe80ad1a65c2eb0797e1844 (diff)
downloadlibpinyin-e6233cbb2da9d2a766aa4f3a33bfa5ea214e4372.tar.gz
libpinyin-e6233cbb2da9d2a766aa4f3a33bfa5ea214e4372.tar.xz
libpinyin-e6233cbb2da9d2a766aa4f3a33bfa5ea214e4372.zip
design tag utility
-rw-r--r--utils/storage/Makefile.am6
-rw-r--r--utils/storage/tag_utility.cpp29
-rw-r--r--utils/storage/tag_utility.h20
3 files changed, 55 insertions, 0 deletions
diff --git a/utils/storage/Makefile.am b/utils/storage/Makefile.am
index e9e9ca9..821a43b 100644
--- a/utils/storage/Makefile.am
+++ b/utils/storage/Makefile.am
@@ -32,3 +32,9 @@ gen_binary_files_LDADD = ../../src/libpinyin.la @GLIB2_LDFLAGS@
export_interpolation_SOURCES = export_interpolation.cpp
export_interpolation_LDADD = ../../src/libpinyin.la @GLIB2_LDFLAGS@
+
+noinst_LTLIBRARIES = libtagutils.la
+
+libtagutils_la_LDFLAGS = -static
+
+libtagutils_la_SOURCES = tag_utility.cpp
diff --git a/utils/storage/tag_utility.cpp b/utils/storage/tag_utility.cpp
new file mode 100644
index 0000000..6d15452
--- /dev/null
+++ b/utils/storage/tag_utility.cpp
@@ -0,0 +1,29 @@
+#include <glib.h>
+#include "tag_utility.h"
+
+
+/* internal taglib structure */
+struct tag_entry{
+ int m_line_type;
+ const char * m_line_tag;
+ int m_num_of_values;
+ const char ** m_required_tags;
+ /* const char ** m_optional_tags; */
+ const char ** m_ignored_tags;
+
+public:
+ tag_entry(int line_type, const char * line_tag, int num_of_values,
+ const char * required_tags[], const char * ignored_tags[]){
+ m_line_type = line_type; m_line_tag = line_tag;
+ m_num_of_values = num_of_values;
+ m_required_tags = required_tags;
+ m_ignored_tags = ignored_tags;
+ }
+};
+
+void test(){
+ TAGLIB_BEGIN_ADD_TAG(1, "\\data", 0);
+ TAGLIB_REQUIRED_TAGS = {"model", NULL};
+ TAGLIB_IGNORED_TAGS = {"data", NULL};
+ TAGLIB_END_ADD_TAG;
+}
diff --git a/utils/storage/tag_utility.h b/utils/storage/tag_utility.h
index b852ad5..77c639b 100644
--- a/utils/storage/tag_utility.h
+++ b/utils/storage/tag_utility.h
@@ -51,4 +51,24 @@ bool taglib_pop_state();
bool taglib_fini();
+/* Useful macros to ease taglib_add_tag call,
+ * or else need to use C++0x-features.
+ */
+
+#define TAGLIB_BEGIN_ADD_TAG(line_type, line_tag, num_of_values) \
+ { \
+ const int line_type_saved = line_type; \
+ const char * line_tag_saved = line_tag; \
+ const int num_of_values_saved = num_of_values; \
+ ;
+
+#define TAGLIB_REQUIRED_TAGS const char * required_tags_saved[]
+/* #define TAGLIB_OPTIONAL_TAGS const char * optional_tags_saved */
+#define TAGLIB_IGNORED_TAGS const char * ignored_tags_saved[]
+
+#define TAGLIB_END_ADD_TAG \
+ taglib_add_tag(line_type_saved, line_tag_saved, num_of_values_saved, \
+ required_tags_saved, ignored_tags_saved); \
+ };
+
#endif