XmlMarshalable * LibXml2Unmarshaller::unmarshalXmlNode(xmlNodePtr node) { string name(CCHARP node->name); string val(""); STRP ns("",""); for (xmlNodePtr child = node->children; child != NULL; child = child->next) { if (child->type == XML_TEXT_NODE) { val = CCHARP child->content; } } if (node->ns != NULL) { ns = STRP(CCHARP node->ns->prefix, CCHARP node->ns->href); } XmlMarshalable *ret = new BasicXmlMarshalable(name, val, ns); for (xmlNsPtr ns = node->nsDef; ns != NULL; ns = ns->next) { ret->addXmlNamespaceDefinition(STRP(CCHARP ns->prefix, CCHARP ns->href)); } for (xmlNodePtr child = node->children; child != NULL; child = child->next) { if (child->type == XML_ELEMENT_NODE) ret->addXmlChild(unmarshalXmlNode(child)); } for (xmlAttrPtr attr = node->properties; attr != NULL; attr = attr->next) { ret->addXmlAttribute(STRP(CCHARP attr->name, CCHARP attr->children->content)); } return ret; }
static uim_lisp intl_dgettext(uim_lisp domainname, uim_lisp msgid) { const char *translated; if (!STRP(domainname) || !STRP(msgid)) return uim_scm_f(); translated = dgettext(REFER_C_STR(domainname), REFER_C_STR(msgid)); return MAKE_STR(translated); }
static uim_lisp home_directory(uim_lisp user_) { int uid; char home[MAXPATHLEN]; if (INTP(user_)) { uid = C_INT(user_); } else if (STRP(user_)) { struct passwd *pw; pw = getpwnam(REFER_C_STR(user_)); if (!pw) return uim_scm_f(); uid = pw->pw_uid; endpwent(); } else { return uim_scm_f(); } if (!uim_get_home_directory(home, sizeof(home), uid)) { char *home_env = getenv("HOME"); if (home_env) return MAKE_STR(home_env); return uim_scm_f(); } return MAKE_STR(home); }
static uim_lisp intl_bind_textdomain_codeset(uim_lisp domainname, uim_lisp codeset) { const char *c_current_codeset, *c_codeset; uim_lisp current_codeset; if (!STRP(domainname) || !(STRP(codeset) || FALSEP(codeset))) return uim_scm_f(); c_codeset = (FALSEP(codeset)) ? NULL : REFER_C_STR(codeset); c_current_codeset = bind_textdomain_codeset(REFER_C_STR(domainname), c_codeset); if (c_current_codeset) { current_codeset = MAKE_STR(c_current_codeset); } else { current_codeset = uim_scm_f(); } return current_codeset; }