Exemplo n.º 1
0
static void ctx_write_callback(gpointer data, gpointer user_data){
    PropertyContext *ctx=(PropertyContext *) data;
    SchemasFileData *sData=(SchemasFileData *) user_data;
    xml_tags_write(sData->outF,"schema",XML_TAG_TYPE_BEGIN_ONLY,NULL,NULL);
    gchar buf[STRING_BUFFER_SIZE_DEFAULT];
    g_snprintf(buf,STRING_BUFFER_SIZE_DEFAULT,"/schemas%s/%s",sData->schemasHome,ctx->spec->key);
    xml_tags_write(sData->outF,"key",XML_TAG_TYPE_SHORT,NULL,buf);
    xml_tags_write(sData->outF,"applyto",XML_TAG_TYPE_SHORT,NULL,buf+strlen("/schemas"));
    xml_tags_write(sData->outF,"owner",XML_TAG_TYPE_SHORT,NULL,sData->owner);
    switch(ctx->spec->valueType){
	case G_TYPE_BOOLEAN:
	    xml_tags_write(sData->outF,"type",XML_TAG_TYPE_SHORT,NULL,"bool");
	    break;
	case G_TYPE_INT:
	case G_TYPE_UINT:
	    xml_tags_write(sData->outF,"type",XML_TAG_TYPE_SHORT,NULL,"int");
	    break;
	case G_TYPE_STRING:
	    xml_tags_write(sData->outF,"type",XML_TAG_TYPE_SHORT,NULL,"string");
	    break;
	default:
	    break;
    }
    if (ctx->spec->defaultValue){
	xml_tags_write(sData->outF,"default",XML_TAG_TYPE_SHORT,NULL,ctx->spec->defaultValue);
    }
    gchar **localeArray=g_strsplit_set(sData->locales,":;",-1);
    int i;
    for(i=0;localeArray[i]!=NULL;i++){
	ctx_write_locale(ctx,sData,localeArray[i]);
    }
    setlocale(LC_ALL,NULL);
    xml_tags_write(sData->outF,"schema",XML_TAG_TYPE_END_ONLY,NULL,NULL);
}
gboolean ctx_write(PropertyContext * ctx, const gchar * schemasHome,
		   const gchar * owner, FILE * outF)

{
    if (ctx->spec->propertyFlags & MKDG_PROPERTY_FLAG_NO_BACKEND){
	return TRUE;
    }
    mkdg_xml_tags_write(outF, "schema", MKDG_XML_TAG_TYPE_BEGIN_ONLY, NULL,
			NULL);
    gchar buf[XML_BUFFER_SIZE];
    gchar *camalCasedKey=mkdg_str_dash_to_camel(ctx->spec->key);
    g_snprintf(buf, XML_BUFFER_SIZE, "/schemas%s",schemasHome);

    if (! STRING_IS_EMPTY(ctx->spec->subSection)) {
	g_strlcat(buf, "/", XML_BUFFER_SIZE);
	g_strlcat(buf, ctx->spec->subSection, XML_BUFFER_SIZE);
    } 
    g_strlcat(buf, "/", XML_BUFFER_SIZE);
    g_strlcat(buf, camalCasedKey, XML_BUFFER_SIZE);

    mkdg_xml_tags_write(outF, "key", MKDG_XML_TAG_TYPE_SHORT, NULL, buf);
    mkdg_xml_tags_write(outF, "applyto", MKDG_XML_TAG_TYPE_SHORT, NULL,
			buf + strlen("/schemas"));
    mkdg_xml_tags_write(outF, "owner", MKDG_XML_TAG_TYPE_SHORT, NULL,
			owner);
    switch (ctx->spec->valueType) {
    case G_TYPE_BOOLEAN:
	mkdg_xml_tags_write(outF, "type", MKDG_XML_TAG_TYPE_SHORT, NULL,
			    "bool");
	break;
    case G_TYPE_INT:
    case G_TYPE_UINT:
	mkdg_xml_tags_write(outF, "type", MKDG_XML_TAG_TYPE_SHORT, NULL,
			    "int");
	break;
    case G_TYPE_STRING:
	mkdg_xml_tags_write(outF, "type", MKDG_XML_TAG_TYPE_SHORT, NULL,
			    "string");
	break;
    default:
	break;
    }
    if (ctx->spec->defaultValue) {
	mkdg_xml_tags_write(outF, "default", MKDG_XML_TAG_TYPE_SHORT, NULL,
			    ctx->spec->defaultValue);
    }
    int i;
    for (i = 0; localeArray[i] != NULL; i++) {
	ctx_write_locale(ctx, outF, localeArray[i]);
    }

    setlocale(LC_ALL, NULL);
    mkdg_xml_tags_write(outF, "schema", MKDG_XML_TAG_TYPE_END_ONLY, NULL,
			NULL);
    return TRUE;
}