You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdewebdev/kxsldbg/kxsldbgpart/libxsldbg/file_cmds.cpp

275 lines
8.3 KiB

/***************************************************************************
file_cmds.c - define file command related functions
-------------------
begin : Sat Jan 19 2002
copyright : (C) 2002 by Keith Isdale
email : k_isdale@tpg.com.au
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include <stdio.h>
#include <libxml/tree.h>
#include <libxml/catalog.h>
#include "xsldbg.h"
#include "debugXSL.h"
#include "files.h"
#include "options.h"
#include "utils.h"
#include "xsldbgthread.h"
static char buffer[500];
/**
* xslDbgEntities:
*
* Print list of entites found
*
* Returns 1 on sucess,
* 0 otherwise
*/
int
xslDbgEntities(void)
{
int result = 0;
if (filesEntityList()) {
int entityIndex;
entityInfoPtr entInfo;
if (getThreadStatus() == XSLDBG_MSG_THREAD_RUN) {
/* notify that we are starting new list of entity names */
notifyListStart(XSLDBG_MSG_ENTITIY_CHANGED);
for (entityIndex = 0;
entityIndex < arrayListCount(filesEntityList());
entityIndex++) {
entInfo = (entityInfoPtr) arrayListGet(filesEntityList(),
entityIndex);
if (entInfo)
notifyListQueue(entInfo);
}
notifyListSend();
result = 1;
} else {
for (entityIndex = 0;
entityIndex < arrayListCount(filesEntityList());
entityIndex++) {
entInfo = (entityInfoPtr) arrayListGet(filesEntityList(),
entityIndex);
if (entInfo) {
/* display identifier of an XML entity */
xsldbgGenericErrorFunc(i18n("Entity %1 ").arg(xsldbgText(entInfo->SystemID)));
if (entInfo->PublicID)
xsldbgGenericErrorFunc(xsldbgText(entInfo->PublicID));
xsldbgGenericErrorFunc("\n");
}
}
if (arrayListCount(filesEntityList()) == 0) {
xsldbgGenericErrorFunc(i18n("No external General Parsed entities present.\n"));
} else {
xsldbgGenericErrorFunc(i18n("\tTotal of %n entity found.", "\tTotal of %n entities found.", arrayListCount(filesEntityList())) + TQString("\n"));
}
result = 1;
}
}
return result;
}
/**
* xslDbgSystem:
* @arg : Is valid
*
* Print what a system file @arg maps to via the current xml catalog
*
* Returns 1 on sucess,
* 0 otherwise
*/
int
xslDbgSystem(const xmlChar * arg)
{
int result = 0;
xmlChar *name;
if (!arg || (xmlStrlen(arg) == 0)) {
#ifdef WITH_XSLDBG_DEBUG_PROCESS
xsltGenericError(xsltGenericErrorContext,
"Error: NULL argument provided\n");
#endif
return result;
}
name = xmlCatalogResolveSystem(arg);
if (getThreadStatus() == XSLDBG_MSG_THREAD_RUN) {
if (name) {
notifyXsldbgApp(XSLDBG_MSG_RESOLVE_CHANGE, name);
result = 1;
xmlFree(name);
} else {
notifyXsldbgApp(XSLDBG_MSG_RESOLVE_CHANGE, "");
xsldbgGenericErrorFunc(i18n("SystemID \"%1\" was not found in current catalog.\n").arg(xsldbgText(arg)));
}
} else {
if (name) {
xsldbgGenericErrorFunc(i18n("SystemID \"%1\" maps to: \"%2\"\n").arg(xsldbgText(arg)).arg(xsldbgText(name)));
xmlFree(name);
result = 1;
} else {
xsldbgGenericErrorFunc(i18n("SystemID \"%1\" was not found in current catalog.\n").arg(xsldbgText(arg)));
}
}
return result;
}
/**
* xslDbgPublic:
* @arg : Is valid
*
* Print what a public ID @arg maps to via the current xml catalog
*
* Returns 1 on sucess,
* 0 otherwise
*/
int
xslDbgPublic(const xmlChar * arg)
{
int result = 0;
xmlChar *name;
if (!arg || (xmlStrlen(arg) == 0)) {
#ifdef WITH_XSLDBG_DEBUG_PROCESS
xsltGenericError(xsltGenericErrorContext,
"Error: NULL argument provided\n");
#endif
return result;
}
name = xmlCatalogResolvePublic(arg);
if (getThreadStatus() == XSLDBG_MSG_THREAD_RUN) {
if (name) {
notifyXsldbgApp(XSLDBG_MSG_RESOLVE_CHANGE, name);
result = 1;
xmlFree(name);
} else {
notifyXsldbgApp(XSLDBG_MSG_RESOLVE_CHANGE, "");
xsldbgGenericErrorFunc(i18n("PublicID \"%1\" was not found in current catalog.\n").arg(xsldbgText(arg)));
}
} else {
if (name) {
xsldbgGenericErrorFunc(i18n("PublicID \"%1\" maps to: \"%2\"\n").arg(xsldbgText(arg)).arg(xsldbgText(name)));
xmlFree(name);
result = 1;
} else {
xsldbgGenericErrorFunc(i18n("PublicID \"%1\" was not found in current catalog.\n").arg(xsldbgText(arg)));
}
xsltGenericError(xsltGenericErrorContext, "%s", buffer);
}
return result;
}
/**
* xslDbgEncoding:
* @arg: Is valid encoding supported by libxml2
*
* Set current encoding to use for output to standard output
*
* Returns 1 on sucess,
* 0 otherwise
*/
int
xslDbgEncoding(xmlChar * arg)
{
int result = 0;
xmlChar *opts[2];
if (!arg) {
#ifdef WITH_XSLDBG_DEBUG_PROCESS
xsltGenericError(xsltGenericErrorContext,
"Error: NULL argument provided\n");
#endif
return result;
}
if (splitString(arg, 1, opts) == 1) {
if (filesSetEncoding((char *) opts[0])) {
optionsSetStringOption(OPTIONS_ENCODING, opts[0]);
result = 1;
}
} else
xsldbgGenericErrorFunc(i18n("Error: Missing arguments for the command %1.\n").arg("encoding"));
return result;
}
/**
* xslDbgShellOutput:
* @arg : Is valid, either a local file name which will be expanded
* if needed, or a "file://" protocol URI
*
* Set the output file name to use
*
* Returns 1 on success,
* 0 otherwise
*/
int xslDbgShellOutput(const xmlChar *arg)
{
int result = 0;
if (arg && (xmlStrLen(arg) > 0)){
if (!xmlStrnCmp(arg, "file:/", 6)){
/* convert URI to local file name */
xmlChar *outputFileName = filesURItoFileName(arg);
if (outputFileName){
optionsSetStringOption(OPTIONS_OUTPUT_FILE_NAME,
outputFileName);
notifyXsldbgApp(XSLDBG_MSG_FILE_CHANGED, 0L);
xmlFree(outputFileName);
result = 1;
}
} else if (xmlStrEqual(arg, (xmlChar*)"-")) {
optionsSetStringOption(OPTIONS_OUTPUT_FILE_NAME,
NULL);
notifyXsldbgApp(XSLDBG_MSG_FILE_CHANGED, 0L);
result = 1;
} else if (!xmlStrnCmp(arg, "ftp://", 6) || !xmlStrnCmp(arg, "http://", 7)){
xsldbgGenericErrorFunc(i18n("Error: Invalid arguments for the command %1.\n").arg("output"));
return 0;
} else {
/* assume that we were provided a local file name
* that may need expanding
*/
xmlChar *expandedName = filesExpandName(arg);
// The output file must not be the same as our SOURCE or DATA file
if (expandedName &&
(!xmlStrEqual(optionsGetStringOption(OPTIONS_SOURCE_FILE_NAME), expandedName)) &&
(!xmlStrEqual(optionsGetStringOption(OPTIONS_DATA_FILE_NAME), expandedName)) ){
optionsSetStringOption(OPTIONS_OUTPUT_FILE_NAME, expandedName);
notifyXsldbgApp(XSLDBG_MSG_FILE_CHANGED, 0L);
xmlFree(expandedName);
result = 1;
}else{
xsldbgGenericErrorFunc(i18n("Error: Invalid arguments for the command %1.\n").arg("output"));
}
}
} else {
xsldbgGenericErrorFunc(i18n("Error: Missing arguments for the command %1.\n").arg("output"));
}
return result;
}