diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | e9ae80694875f869892f13f4fcaf1170a00dea41 (patch) | |
tree | aa2f8d8a217e2d376224c8d46b7397b68d35de2d /kxsldbg/kxsldbgpart/libxsldbg/template_cmds.cpp | |
download | tdewebdev-e9ae80694875f869892f13f4fcaf1170a00dea41.tar.gz tdewebdev-e9ae80694875f869892f13f4fcaf1170a00dea41.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdewebdev@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kxsldbg/kxsldbgpart/libxsldbg/template_cmds.cpp')
-rw-r--r-- | kxsldbg/kxsldbgpart/libxsldbg/template_cmds.cpp | 331 |
1 files changed, 331 insertions, 0 deletions
diff --git a/kxsldbg/kxsldbgpart/libxsldbg/template_cmds.cpp b/kxsldbg/kxsldbgpart/libxsldbg/template_cmds.cpp new file mode 100644 index 00000000..10deb686 --- /dev/null +++ b/kxsldbg/kxsldbgpart/libxsldbg/template_cmds.cpp @@ -0,0 +1,331 @@ + +/*************************************************************************** + template_cmds.c - template commands for xsldbg + ------------------- + begin : Wed Nov 21 2001 + copyright : (C) 2001 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 "xsldbg.h" +#include "debugXSL.h" +#include "files.h" +#include "utils.h" +#include "xsldbgmsg.h" +#include "xsldbgthread.h" /* for getThreadStatus */ + +static int printCounter; /* Dangerous name think of a better one */ + +/* ----------------------------------------- + Private function declarations for files.c + -------------------------------------------*/ + +/** + * xslDbgShellPrintStylesheetsHelper: + * @payload :valid xxsltStylesheetPtr + * @data : not used + * name : not used + * + * Print out the stylesheet name from the stylesheet given to + * us via walkStylesheets + */ +void + xslDbgShellPrintStylesheetsHelper(void *payload, + void *data, + xmlChar * name); + + +/** + * xslDbgShellPrintStylesheetsHelper2: + * @payload :valid xmlNodePtr of included stylesheet + * @data : not used + * name : not used + * + * Print out the stylesheet name from the stylesheet given to + * us via walkIncludes + */ +void + xslDbgShellPrintStylesheetsHelper2(void *payload, + void *data, + xmlChar * name); + + +/** + * printTemplateHelper: + * @templ: Is valid + * @verbose: Either 1 or 0 + * @templateCount: Is valid + * @count: Is valid + * @templateName: template name to print and in UTF-8, may be NULL + * + * This display the templates in the same order as they are in the + * stylesheet. If verbose is 1 then print more information + * For each template found @templateCount is increased + * For each printed template @printCount is increased + */ +void printTemplateHelper(xsltTemplatePtr templ, int verbose, + int *templateCount, int *count, + xmlChar * templateName); + +/* ------------------------------------- + End private functions +---------------------------------------*/ + + + +/** + * printTemplateHelper: + * @templ: Is valid + * @verbose: Either 1 or 0 + * @templateCount: Is valid + * @count: Is valid + * @templateName: template name to print, may be NULL + * + * This display the templates in the same order as they are in the + * stylesheet. If verbose is 1 then print more information + * For each template found @templateCount is increased + * For each printed template @printCount is increased + */ +void +printTemplateHelper(xsltTemplatePtr templ, int verbose, + int *templateCount, int *count, xmlChar * templateName) +{ + xmlChar *name, *defaultUrl = (xmlChar *) "<n/a>"; + const xmlChar *url; + + if (!templ) + return; + + *templateCount = *templateCount + 1; + printTemplateHelper(templ->next, verbose, + templateCount, count, templateName); + if (templ->elem && templ->elem->doc && templ->elem->doc->URL) { + url = templ->elem->doc->URL; + } else { + url = defaultUrl; + } + + if (templ->match) + name = xmlStrdup(templ->match); + else + name = fullQName(templ->nameURI, templ->name); + + if (name) { + if (templateName && + (xmlStrcmp(templateName, name) != 0)) { + /* search for template name supplied failed */ + /* empty */ + } else { + xmlChar *modeTemp = NULL; + *count = *count + 1; + if (getThreadStatus() == XSLDBG_MSG_THREAD_RUN) { + notifyListQueue(templ); + } else { + modeTemp = fullQName(templ->modeURI, templ->mode); + if (verbose) + xsldbgGenericErrorFunc(i18n(" template: \"%1\" mode: \"%2\" in file \"%3\" at line %4\n").arg(xsldbgText(name)).arg(xsldbgText(modeTemp)).arg(xsldbgUrl(url)).arg(xmlGetLineNo(templ->elem))); + else + xsldbgGenericErrorFunc(QString("\"%s\" ").arg(xsldbgText(name))); + if (modeTemp) + xmlFree(modeTemp); + } + } + + xmlFree(name); + + } +} + + +/** + * xslDbgShellPrintTemplateNames: + * @styleCtxt: Is valid + * @ctxt: Not used + * @arg: Not used + * @verbose: If 1 then print extra messages about templates found, + * otherwise print normal messages only + * @allFiles: If 1 then look for all templates in stylsheets found in + * @styleCtxt + * otherwise look in the stylesheet found by + * debugXSLBreak function + * + * Print out the list of template names found that match critieria + * + * Returns 1 on success, + * 0 otherwise + */ +int +xslDbgShellPrintTemplateNames(xsltTransformContextPtr styleCtxt, + xmlShellCtxtPtr ctxt, + xmlChar * arg, int verbose, int allFiles) +{ + Q_UNUSED(ctxt); + int templateCount = 0, printedTemplateCount = 0; + int result = 0; + xsltStylesheetPtr curStyle; + xsltTemplatePtr templ; + + if (xmlStrLen(arg) == 0) { + arg = NULL; + } else { + allFiles = 1; /* make sure we find it if we can */ + } + + if (!styleCtxt) { + xsldbgGenericErrorFunc(i18n("Error: Stylesheet is not valid.\n")); + return result; + } + + if (allFiles) + curStyle = styleCtxt->style; + else { + /* try to find files in the current stylesheet */ + /* root copy is set to the stylesheet found by debugXSLBreak */ + if (debugXSLGetTemplate()) + curStyle = debugXSLGetTemplate()->style; + else + curStyle = NULL; + } + + if (getThreadStatus() == XSLDBG_MSG_THREAD_RUN) { + notifyListStart(XSLDBG_MSG_TEMPLATE_CHANGED); + while (curStyle) { + templ = curStyle->templates; + /* print them out in the order their in the file */ + printTemplateHelper(templ, verbose, &templateCount, + &printedTemplateCount, arg); + if (curStyle->next) + curStyle = curStyle->next; + else + curStyle = curStyle->imports; + } + notifyListSend(); + } else { + xsltGenericError(xsltGenericErrorContext, "\n"); + while (curStyle) { + templ = curStyle->templates; + /* print them out in the order their in the file */ + printTemplateHelper(templ, verbose, &templateCount, + &printedTemplateCount, arg); + xsltGenericError(xsltGenericErrorContext, "\n"); + if (curStyle->next) + curStyle = curStyle->next; + else + curStyle = curStyle->imports; + } + if (templateCount == 0) { + xsldbgGenericErrorFunc(i18n("\tNo XSLT templates found.\n")); + } else { + xsldbgGenericErrorFunc(i18n("\tTotal of %n XSLT template found", "\tTotal of %n XSLT templates found", templateCount) + QString("\n")); + xsldbgGenericErrorFunc(i18n("\tTotal of %n XSLT template printed", "\tTotal of %n XSLT templates printed", printedTemplateCount) + QString("\n")); + } + } + + result = 1; + return result; +} + + +/** + * xslDbgShellPrintStylesheetsHelper: + * @payload :valid xsltStylesheetPtr + * @data : not used + * name : not used + * + * Print out the stylesheet name from the stylesheet given to + * us via walkStylesheets + */ +void +xslDbgShellPrintStylesheetsHelper(void *payload, + void *data, + xmlChar * name) +{ + Q_UNUSED(data); + Q_UNUSED(name); + xsltStylesheetPtr style = (xsltStylesheetPtr) payload; + + if (style && style->doc && style->doc->URL) { + if (getThreadStatus() == XSLDBG_MSG_THREAD_RUN) + notifyListQueue(payload); + else + /* display the URL of stylesheet */ + xsldbgGenericErrorFunc(i18n(" Stylesheet %1\n").arg(xsldbgUrl(style->doc->URL))); + printCounter++; + } +} + + +/** + * xslDbgShellPrintStylesheetsHelper2: + * @payload :valid xmlNodePtr of included stylesheet + * @data : not used + * name : not used + * + * Print out the stylesheet name from the stylesheet given to + * us via walkIncludes + */ +void +xslDbgShellPrintStylesheetsHelper2(void *payload, + void *data, + xmlChar * name) +{ + Q_UNUSED(data); + Q_UNUSED(name); + xmlNodePtr node = (xmlNodePtr) payload; + + if (node && node->doc && node->doc->URL) { + if (getThreadStatus() == XSLDBG_MSG_THREAD_RUN) + notifyListQueue(payload); + else + /* display the URL of stylesheet */ + xsldbgGenericErrorFunc(i18n(" Stylesheet %1\n").arg(xsldbgUrl(node->doc->URL))); + printCounter++; + } +} + + +/** + * xslDbgShellPrintStyleSheets: + * @arg: The stylesheets of interests and in UTF-8, is NULL for all stylsheets + * + * Print stylesheets that can be found in loaded stylsheet + * + * Returns 1 on success, + * 0 otherwise + */ +int +xslDbgShellPrintStyleSheets(xmlChar * arg) +{ + Q_UNUSED(arg); + printCounter = 0; + if (getThreadStatus() == XSLDBG_MSG_THREAD_RUN) { + notifyListStart(XSLDBG_MSG_SOURCE_CHANGED); + walkStylesheets((xmlHashScanner) xslDbgShellPrintStylesheetsHelper, + NULL, filesGetStylesheet()); + notifyListSend(); + notifyListStart(XSLDBG_MSG_INCLUDED_SOURCE_CHANGED); + walkIncludes((xmlHashScanner) xslDbgShellPrintStylesheetsHelper2, + NULL, filesGetStylesheet()); + notifyListSend(); + } else { + walkStylesheets((xmlHashScanner) xslDbgShellPrintStylesheetsHelper, + NULL, filesGetStylesheet()); + walkIncludes((xmlHashScanner) xslDbgShellPrintStylesheetsHelper2, + NULL, filesGetStylesheet()); + if (printCounter != 0) + xsldbgGenericErrorFunc(i18n("\tTotal of %n XSLT stylesheet found.", "\tTotal of %n XSLT stylesheets found.", printCounter) + QString("\n")); + else + /* strange but possible */ + xsldbgGenericErrorFunc(i18n("\tNo XSLT stylesheets found.\n")); + } + return 1; /* always succeed */ +} |