diff options
-rw-r--r-- | CMakeLists.txt | 1 | ||||
-rw-r--r-- | taxonomy.c | 36 | ||||
-rw-r--r-- | taxonomy.h | 39 |
3 files changed, 76 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 2f84ffe78..2424376d7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -287,6 +287,7 @@ set(SUBSURFACE_CORE_LIB_SRCS configuredivecomputer.cpp configuredivecomputerthreads.cpp divesitehelpers.cpp + taxonomy.c checkcloudconnection.cpp windowtitleupdate.cpp divelogexportlogic.cpp diff --git a/taxonomy.c b/taxonomy.c new file mode 100644 index 000000000..2c101962a --- /dev/null +++ b/taxonomy.c @@ -0,0 +1,36 @@ +#include "taxonomy.h" +#include "gettext.h" +#include <stdlib.h> + +char *taxonomy_category_names[NR_CATEGORIES] = { + QT_TRANSLATE_NOOP("getTextFromC", "None"), + QT_TRANSLATE_NOOP("getTextFromC", "Ocean"), + QT_TRANSLATE_NOOP("getTextFromC", "Country"), + QT_TRANSLATE_NOOP("getTextFromC", "State"), + QT_TRANSLATE_NOOP("getTextFromC", "County"), + QT_TRANSLATE_NOOP("getTextFromC", "City") +}; + +// these are the names for geoname.org +char *taxonomy_api_names[NR_CATEGORIES] = { + "none", + "name", + "countryName", + "adminName1", + "adminName2", + "toponymName" +}; + +struct taxonomy *alloc_taxonomy() +{ + return calloc(NR_CATEGORIES, sizeof(struct taxonomy)); +} + +void free_taxonomy(struct taxonomy *t) +{ + if (t) { + for (int i = 0; i < NR_CATEGORIES; i++) + free((void *)t[i].value); + free(t); + } +} diff --git a/taxonomy.h b/taxonomy.h new file mode 100644 index 000000000..fef6364e2 --- /dev/null +++ b/taxonomy.h @@ -0,0 +1,39 @@ +#ifndef TAXONOMY_H +#define TAXONOMY_H + +#ifdef __cplusplus +extern "C" { +#endif + +enum taxonomy_category { + NONE, + OCEAN, + COUNTRY, + ADMIN_L1, + ADMIN_L2, + LOCALNAME, + NR_CATEGORIES +}; + +extern char *taxonomy_category_names[NR_CATEGORIES]; +extern char *taxonomy_api_names[NR_CATEGORIES]; + +struct taxonomy { + int category; /* the category for this tag: ocean, country, admin_l1, admin_l2, localname, etc */ + const char *value; /* the value returned, parsed, or manually entered for that category */ + enum { GEOCODED, PARSED, MANUAL } origin; +}; + +/* the data block contains 3 taxonomy structures - unused ones have a tag value of NONE */ +struct taxonomy_data { + int nr; + struct taxonomy *category; +}; + +struct taxonomy *alloc_taxonomy(); +void free_taxonomy(struct taxonomy *t); + +#ifdef __cplusplus +} +#endif +#endif // TAXONOMY_H |