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;
}
Beispiel #2
0
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);
}
Beispiel #3
0
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);
}
Beispiel #4
0
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;
}