From 7233ff9095194b38586ce438379f08691a0fecdd Mon Sep 17 00:00:00 2001 From: "Suren A. Chilingaryan" Date: Wed, 13 Jul 2005 16:49:47 +0000 Subject: Engine Plugins --- src/rccxml.c | 83 ++++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 53 insertions(+), 30 deletions(-) (limited to 'src/rccxml.c') diff --git a/src/rccxml.c b/src/rccxml.c index bbeff42..4ce1764 100644 --- a/src/rccxml.c +++ b/src/rccxml.c @@ -13,6 +13,7 @@ #include "internal.h" #include "rccconfig.h" +#include "plugin.h" #define MAX_HOME_CHARS 96 #define XPATH_LANGUAGE "//Language[@name]" @@ -27,7 +28,7 @@ static const char *rccXmlGetText(xmlNodePtr node) { if ((node)&&(node->children)&&(node->children->type == XML_TEXT_NODE)&&(node->children->content)) return node->children->content; } -int rccXmlInit() { +int rccXmlInit(int LoadConfiguration) { FILE *f; char config[MAX_HOME_CHARS + 32]; @@ -35,28 +36,32 @@ int rccXmlInit() { xmlXPathObjectPtr obj; xmlNodeSetPtr node_set; unsigned long i, nnodes; - xmlNodePtr cnode, pnode, node; + xmlNodePtr enode, cnode, pnode, node; xmlAttrPtr attr; - const char *lang, *fullname; - unsigned int pos, cpos; + const char *lang, *fullname, *engine_name; + unsigned int pos, lpos, epos, cpos; + + rcc_engine *engine; xmlInitParser(); xmlInitCharEncodingHandlers(); xmlKeepBlanksDefault(0); - if (strlen(rcc_home_dir)>MAX_HOME_CHARS) config[0] = 0; - else { - sprintf(config, "%s/.rcc/rcc.xml", rcc_home_dir); - f = fopen(config, "r"); - if (f) fclose(f); - else config[0] = 0; - } - if (!config[0]) { - strcpy(config, "/etc/rcc.xml"); - f = fopen(config, "r"); - if (f) fclose(f); - else config[0] = 0; - } + if (LoadConfiguration) { + if (strlen(rcc_home_dir)>MAX_HOME_CHARS) config[0] = 0; + else { + sprintf(config, "%s/.rcc/rcc.xml", rcc_home_dir); + f = fopen(config, "r"); + if (f) fclose(f); + else config[0] = 0; + } + if (!config[0]) { + strcpy(config, "/etc/rcc.xml"); + f = fopen(config, "r"); + if (f) fclose(f); + else config[0] = 0; + } + } else config[0] = 0; // Load Extra Languages @@ -73,8 +78,7 @@ int rccXmlInit() { node_set = obj->nodesetval; if (!node_set) goto clear; - for (pos = 0; rcc_default_languages[pos].sn; pos++); - if (pos == RCC_MAX_LANGUAGES) goto clear; + for (lpos = 0; rcc_default_languages[lpos].sn; lpos++); nnodes = node_set->nodeNr; for (i=0;ichildren;node;node=node->next) { + pos = rccDefaultGetLanguageByName(lang); + if (!pos) continue; + if (pos == (rcc_language_id)-1) pos = lpos; + else if (pos == RCC_MAX_LANGUAGES) continue; + + for (epos = 1, cpos = 1,node=pnode->children;node;node=node->next) { if (node->type != XML_ELEMENT_NODE) continue; if (!xmlStrcmp(node->name, "Charsets")) { - for (cpos = 0, cnode=node->children;cnode;cnode=cnode->next) { + for (cnode=node->children;cnode;cnode=cnode->next) { if (cnode->type != XML_ELEMENT_NODE) continue; if ((!xmlStrcmp(cnode->name, "Charset"))&&(rccXmlGetText(cnode))&&(cposname, "Engines")) { + for (enode=node->children;enode;enode=enode->next) { + if (enode->type != XML_ELEMENT_NODE) continue; + if ((!xmlStrcmp(enode->name, "Engine"))&&(rccXmlGetText(enode))&&(epos 1) { - rcc_default_languages[pos].sn = lang; - rcc_default_languages[pos].charsets[0] = "Default"; - rcc_default_languages[pos].charsets[cpos] = NULL; - rcc_default_languages[pos].engines[0] = &rcc_default_engine; - rcc_default_languages[pos].engines[1] = NULL; - - rcc_default_languages[++pos].sn = NULL; - if (pos == RCC_MAX_LANGUAGES) break; + rcc_default_languages[pos].sn = lang; + rcc_default_languages[pos].charsets[0] = rcc_default_charset; + if (cpos > 1) rcc_default_languages[pos].charsets[cpos] = NULL; + else { + rcc_default_languages[pos].charsets[1] = rcc_utf8_charset; + rcc_default_languages[pos].charsets[2] = NULL; } + rcc_default_languages[pos].engines[0] = &rcc_default_engine; + rcc_default_languages[pos].engines[epos] = NULL; + + if (pos == lpos) rcc_default_languages[++lpos].sn = NULL; } clear: -- cgit v1.2.3