/*************************************************************************** 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 #include #include #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; }