diff options
Diffstat (limited to 'tools/localize/xmb.cpp')
-rw-r--r-- | tools/localize/xmb.cpp | 182 |
1 files changed, 0 insertions, 182 deletions
diff --git a/tools/localize/xmb.cpp b/tools/localize/xmb.cpp deleted file mode 100644 index d8f6ff0..0000000 --- a/tools/localize/xmb.cpp +++ /dev/null @@ -1,182 +0,0 @@ -#include "xmb.h" - -#include "file_utils.h" -#include "localize.h" -#include "ValuesFile.h" -#include "XMLHandler.h" -#include "XLIFFFile.h" - -#include <map> -#include <cstdio> - -using namespace std; - -const char *const NS_MAP[] = { - "xml", XMLNS_XMLNS, - NULL, NULL -}; - -set<string> g_tags; - -static string -strip_newlines(const string& str) -{ - string res; - const size_t N = str.length(); - for (size_t i=0; i<N; i++) { - char c = str[i]; - if (c != '\n' && c != '\r') { - res += c; - } else { - res += ' '; - } - } - return res; -} - -static int -rename_id_attribute(XMLNode* node) -{ - vector<XMLAttribute>& attrs = node->EditAttributes(); - const size_t I = attrs.size(); - for (size_t i=0; i<I; i++) { - XMLAttribute attr = attrs[i]; - if (attr.name == "id") { - attr.name = "name"; - attrs.erase(attrs.begin()+i); - attrs.push_back(attr); - return 0; - } - } - return 1; -} - -static int -convert_xliff_to_ph(XMLNode* node, int* phID) -{ - int err = 0; - if (node->Type() == XMLNode::ELEMENT) { - if (node->Namespace() == XLIFF_XMLNS) { - g_tags.insert(node->Name()); - node->SetName("", "ph"); - - err = rename_id_attribute(node); - if (err != 0) { - char name[30]; - (*phID)++; - sprintf(name, "id-%d", *phID); - node->EditAttributes().push_back(XMLAttribute("", "name", name)); - err = 0; - } - } - vector<XMLNode*>& children = node->EditChildren(); - const size_t I = children.size(); - for (size_t i=0; i<I; i++) { - err |= convert_xliff_to_ph(children[i], phID); - } - } - return err; -} - -XMLNode* -resource_to_xmb_msg(const StringResource& res) -{ - // the msg element - vector<XMLAttribute> attrs; - string name = res.pos.file; - name += ":"; - name += res.TypedID(); - attrs.push_back(XMLAttribute("", "name", name)); - attrs.push_back(XMLAttribute("", "desc", strip_newlines(res.comment))); - attrs.push_back(XMLAttribute(XMLNS_XMLNS, "space", "preserve")); - XMLNode* msg = XMLNode::NewElement(res.pos, "", "msg", attrs, XMLNode::EXACT); - - // the contents are in xliff/html, convert it to xliff - int err = 0; - XMLNode* value = res.value; - string tag = value->Name(); - int phID = 0; - for (vector<XMLNode*>::const_iterator it=value->Children().begin(); - it!=value->Children().end(); it++) { - err |= convert_html_to_xliff(*it, tag, msg, &phID); - } - - if (err != 0) { - return NULL; - } - - // and then convert that to xmb - for (vector<XMLNode*>::iterator it=msg->EditChildren().begin(); - it!=msg->EditChildren().end(); it++) { - err |= convert_xliff_to_ph(*it, &phID); - } - - if (err == 0) { - return msg; - } else { - return NULL; - } -} - -int -do_xlb_export(const string& outfile, const vector<string>& resFiles) -{ - int err = 0; - - size_t totalFileCount = resFiles.size(); - - Configuration english; - english.locale = "en_US"; - - set<StringResource> allResources; - - const size_t J = resFiles.size(); - for (size_t j=0; j<J; j++) { - string resFile = resFiles[j]; - - ValuesFile* valuesFile = get_local_values_file(resFile, english, CURRENT_VERSION, "", true); - if (valuesFile != NULL) { - set<StringResource> resources = valuesFile->GetStrings(); - allResources.insert(resources.begin(), resources.end()); - } else { - fprintf(stderr, "error reading file %s\n", resFile.c_str()); - } - - delete valuesFile; - } - - // Construct the XLB xml - vector<XMLAttribute> attrs; - attrs.push_back(XMLAttribute("", "locale", "en")); - XMLNode* localizationbundle = XMLNode::NewElement(GENERATED_POS, "", "localizationbundle", - attrs, XMLNode::PRETTY); - - for (set<StringResource>::iterator it=allResources.begin(); it!=allResources.end(); it++) { - XMLNode* msg = resource_to_xmb_msg(*it); - if (msg) { - localizationbundle->EditChildren().push_back(msg); - } else { - err = 1; - } - } - -#if 0 - for (set<string>::iterator it=g_tags.begin(); it!=g_tags.end(); it++) { - printf("tag: %s\n", it->c_str()); - } - printf("err=%d\n", err); -#endif - if (err == 0) { - FILE* f = fopen(outfile.c_str(), "wb"); - if (f == NULL) { - fprintf(stderr, "can't open outputfile: %s\n", outfile.c_str()); - return 1; - } - fprintf(f, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); - fprintf(f, "%s\n", localizationbundle->ToString(NS_MAP).c_str()); - fclose(f); - } - - return err; -} - |