35
36
xmlXPathObjectPtr obj;
36
37
xmlNodeSetPtr node_set;
37
38
unsigned long i, nnodes;
38
xmlNodePtr cnode, pnode, node;
39
xmlNodePtr enode, cnode, pnode, node;
40
const char *lang, *fullname;
41
unsigned int pos, cpos;
41
const char *lang, *fullname, *engine_name;
42
unsigned int pos, lpos, epos, cpos;
44
47
xmlInitCharEncodingHandlers();
45
48
xmlKeepBlanksDefault(0);
47
if (strlen(rcc_home_dir)>MAX_HOME_CHARS) config[0] = 0;
49
sprintf(config, "%s/.rcc/rcc.xml", rcc_home_dir);
50
f = fopen(config, "r");
55
strcpy(config, "/etc/rcc.xml");
56
f = fopen(config, "r");
50
if (LoadConfiguration) {
51
if (strlen(rcc_home_dir)>MAX_HOME_CHARS) config[0] = 0;
53
sprintf(config, "%s/.rcc/rcc.xml", rcc_home_dir);
54
f = fopen(config, "r");
59
strcpy(config, "/etc/rcc.xml");
60
f = fopen(config, "r");
62
67
// Load Extra Languages
73
78
node_set = obj->nodesetval;
74
79
if (!node_set) goto clear;
76
for (pos = 0; rcc_default_languages[pos].sn; pos++);
77
if (pos == RCC_MAX_LANGUAGES) goto clear;
81
for (lpos = 0; rcc_default_languages[lpos].sn; lpos++);
79
83
nnodes = node_set->nodeNr;
80
84
for (i=0;i<nnodes;i++) {
85
89
if ((!lang)||(!lang[0])) continue;
87
for (cpos=1,node=pnode->children;node;node=node->next) {
91
pos = rccDefaultGetLanguageByName(lang);
93
if (pos == (rcc_language_id)-1) pos = lpos;
94
else if (pos == RCC_MAX_LANGUAGES) continue;
96
for (epos = 1, cpos = 1,node=pnode->children;node;node=node->next) {
88
97
if (node->type != XML_ELEMENT_NODE) continue;
89
98
if (!xmlStrcmp(node->name, "Charsets")) {
90
for (cpos = 0, cnode=node->children;cnode;cnode=cnode->next) {
99
for (cnode=node->children;cnode;cnode=cnode->next) {
91
100
if (cnode->type != XML_ELEMENT_NODE) continue;
92
101
if ((!xmlStrcmp(cnode->name, "Charset"))&&(rccXmlGetText(cnode))&&(cpos<RCC_MAX_CHARSETS)) {
93
102
rcc_default_languages[pos].charsets[cpos++] = rccXmlGetText(cnode);
100
rcc_default_languages[pos].sn = lang;
101
rcc_default_languages[pos].charsets[0] = "Default";
102
rcc_default_languages[pos].charsets[cpos] = NULL;
103
rcc_default_languages[pos].engines[0] = &rcc_default_engine;
104
rcc_default_languages[pos].engines[1] = NULL;
106
rcc_default_languages[++pos].sn = NULL;
107
if (pos == RCC_MAX_LANGUAGES) break;
106
if (!xmlStrcmp(node->name, "Engines")) {
107
for (enode=node->children;enode;enode=enode->next) {
108
if (enode->type != XML_ELEMENT_NODE) continue;
109
if ((!xmlStrcmp(enode->name, "Engine"))&&(rccXmlGetText(enode))&&(epos<RCC_MAX_ENGINES)) {
110
engine_name = rccXmlGetText(enode);
111
if (!engine_name) continue;
112
engine = rccPluginEngineGetInfo(engine_name, lang);
113
if (!engine) continue;
115
rcc_default_languages[pos].engines[epos++] = engine;
121
rcc_default_languages[pos].sn = lang;
122
rcc_default_languages[pos].charsets[0] = rcc_default_charset;
123
if (cpos > 1) rcc_default_languages[pos].charsets[cpos] = NULL;
125
rcc_default_languages[pos].charsets[1] = rcc_utf8_charset;
126
rcc_default_languages[pos].charsets[2] = NULL;
128
rcc_default_languages[pos].engines[0] = &rcc_default_engine;
129
rcc_default_languages[pos].engines[epos] = NULL;
131
if (pos == lpos) rcc_default_languages[++lpos].sn = NULL;