1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
/***************************************************************************
search_cmds.c - search related 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 "options.h"
#include "search.h"
/* -----------------------------------------
Seach related commands
------------------------------------------- */
/**
* xslDbgShellSearch:
* @styleCtxt: Is valid
* @style: Is valid
* @arg: The xpath query to use for searching dataBase and in UTF-8
*
* Displays the result of performing a query on the search dataBase
*
* Returns 1 if able to run query with @arg,
* 0 otherwise
*/
int
xslDbgShellSearch(xsltTransformContextPtr styleCtxt,
xsltStylesheetPtr style, xmlChar * arg)
{
int result = 0;
xmlChar buff[DEBUG_BUFFER_SIZE];
const xmlChar *sortOption = (xmlChar *) "-sort ";
int sortOptionLen = xmlStrLen(sortOption);
if (optionsGetStringOption(OPTIONS_DOCS_PATH) == NULL) {
xsldbgGenericErrorFunc(i18n("Error: No path to documentation; aborting searching.\n"));
#ifdef USE_DOCS_MACRO
xsldbgGenericErrorFunc(i18n("Error: Error in value of USE_DOCS_MACRO; look at Makefile.am.\n"));
#else
xsldbgGenericErrorFunc(i18n("Error: Required environment variable %1 not set to the directory of xsldbg documentation.\n").arg((const char*)XSLDBG_DOCS_DIR_VARIABLE));
#endif
return result; /* failed */
}
if (!styleCtxt || !style) {
xsldbgGenericErrorFunc(i18n("Error: Stylesheet not valid, files not loaded yet?\n"));
return result;
}
result = updateSearchData(styleCtxt, style, NULL, DEBUG_ANY_VAR);
trimString(arg);
if (xmlStrLen(arg) == 0) {
arg = (xmlChar *) "//search/*";
}
strncpy((char *) buff, (char *) arg, sortOptionLen);
if (xmlStrEqual(buff, sortOption)) {
/* yep do sorting as well */
if (snprintf
((char *) buff, DEBUG_BUFFER_SIZE,
"--param dosort 1 --param query \"%s\"",
&arg[sortOptionLen])) {
result = result && searchQuery(NULL, NULL, buff);
}
} else {
if (snprintf
((char *) buff, DEBUG_BUFFER_SIZE,
"--param dosort 0 --param query \"%s\"", arg)) {
result = result && searchQuery(NULL, NULL, buff);
}
}
return result;
}
|