/[MITgcm]/mitgcm.org/devel/buildweb/pkg/swish-e/src/result_output.c
ViewVC logotype

Annotation of /mitgcm.org/devel/buildweb/pkg/swish-e/src/result_output.c

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.1.1.1 - (hide annotations) (download) (vendor branch)
Fri Sep 20 19:47:29 2002 UTC (22 years, 10 months ago) by adcroft
Branch: Import, MAIN
CVS Tags: baseline, HEAD
Changes since 1.1: +0 -0 lines
File MIME type: text/plain
Importing web-site building process.

1 adcroft 1.1 /*
2     $Id: result_output.c,v 1.60 2002/08/20 22:24:09 whmoseley Exp $
3     **
4     ** This program and library is free software; you can redistribute it and/or
5     ** modify it under the terms of the GNU (Library) General Public License
6     ** as published by the Free Software Foundation; either version 2
7     ** of the License, or any later version.
8     **
9     ** This program is distributed in the hope that it will be useful,
10     ** but WITHOUT ANY WARRANTY; without even the implied warranty of
11     ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12     ** GNU (Library) General Public License for more details.
13     **
14     ** You should have received a copy of the GNU (Library) General Public License
15     ** along with this program; if not, write to the Free Software
16     ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17    
18     -- This module does result output for swish-e
19     -- This module implements some methods about the
20     -- "-x fmt" cmd option.
21     -- basically: handle output fmts like: -x "%c|<swishtitle fmt=/%20s/>\n"
22     --
23     -- License: see swish licence file
24    
25     -- 2001-01 R. Scherg (rasc) initial coding
26    
27     -- 2001-02-09 rasc make propertynames always lowercase! (may change)
28     this is get same handling as metanames...
29     -- 2001-02-28 rasc -b and counter corrected...
30     -- 2001-03-13 rasc result header output routine -H <n>
31     -- 2001-04-12 rasc Module init rewritten
32    
33     */
34    
35    
36     //** should really "compile" the -x format string for each index, which means
37     // basically looking up the properties only once for each index.
38    
39    
40     /* Prints the final results of a search.
41     2001-01-01 rasc Standard is swish 1.x default output
42    
43     if option extended format string is set, an alternate
44     userdefined result output is possible (format like strftime or printf)
45     in this case -d (delimiter is obsolete)
46     e.g. : -x "result: COUNT:%c \t URL:%u\n"
47     */
48    
49    
50     /* $$$ Remark / ToDO:
51     -- The code is a prototype and needs optimizing:
52     -- format control string is parsed on each result entry. (very bad!)
53     -- ToDO: build an "action array" from an initial parsing of fmt
54     -- ctrl string.
55     -- on each entry step thru this action output list
56     -- seems to be simple, but has to be done.
57     -- but for now: get this stuff running on the easy way.
58     -- (rasc 2000-12)
59     $$$
60     */
61    
62    
63    
64    
65    
66     #include <ctype.h>
67     #include <string.h>
68     #include <time.h>
69     #include <stdio.h>
70     #include <stdarg.h>
71    
72     #include "swish.h"
73     #include "mem.h"
74     #include "string.h"
75     #include "merge.h"
76     #include "docprop.h"
77     #include "error.h"
78     #include "search.h"
79     #include "result_output.h"
80     #include "no_better_place_module.h"
81     #include "parse_conffile.h" // for the fuzzy to string function
82    
83    
84     /* private module prototypes */
85    
86     static void printExtResultEntry(SWISH * sw, FILE * f, char *fmt, RESULT * r);
87     static char *printResultControlChar(FILE * f, char *s);
88     static char *printTagAbbrevControl(SWISH * sw, FILE * f, char *s, RESULT * r);
89     static char *parsePropertyResultControl(char *s, char **propertyname, char **subfmt);
90     static void printPropertyResultControl(SWISH * sw, FILE * f, char *propname, char *subfmt, RESULT * r);
91    
92     static struct ResultExtFmtStrList *addResultExtFormatStr(struct ResultExtFmtStrList *rp, char *name, char *fmtstr);
93    
94    
95     /*
96     ** ----------------------------------------------
97     **
98     ** Module management code starts here
99     **
100     ** ----------------------------------------------
101     */
102    
103    
104    
105     /*
106     -- init structures for this module
107     */
108    
109     void initModule_ResultOutput(SWISH * sw)
110     {
111     struct MOD_ResultOutput *md;
112    
113     md = (struct MOD_ResultOutput *) emalloc(sizeof(struct MOD_ResultOutput));
114    
115     sw->ResultOutput = md;
116    
117     md->resultextfmtlist = NULL;
118    
119     /* cmd options */
120     md->extendedformat = NULL; /* -x :cmd param */
121     md->headerOutVerbose = 1; /* default = standard header */
122     md->stdResultFieldDelimiter = NULL; /* -d :old 1.x result output delimiter */
123    
124     return;
125     }
126    
127    
128     /*
129     -- release all wired memory for this module
130     -- 2001-04-11 rasc
131     */
132    
133     void freeModule_ResultOutput(SWISH * sw)
134     {
135     struct MOD_ResultOutput *md = sw->ResultOutput;
136     struct ResultExtFmtStrList *l,
137     *ln;
138    
139    
140     if (md->stdResultFieldDelimiter)
141     efree(md->stdResultFieldDelimiter); /* -d :free swish 1.x delimiter */
142     /* was not emalloc!# efree (md->extendedformat); -x stuff */
143    
144    
145     l = md->resultextfmtlist; /* free ResultExtFormatName */
146     while (l)
147     {
148     efree(l->name);
149     efree(l->fmtstr);
150     ln = l->next;
151     efree(l);
152     l = ln;
153     }
154     md->resultextfmtlist = NULL;
155    
156     /* free module data */
157     efree(sw->ResultOutput);
158     sw->ResultOutput = NULL;
159    
160     return;
161     }
162    
163    
164    
165     /*
166     ** ----------------------------------------------
167     **
168     ** Module config code starts here
169     **
170     ** ----------------------------------------------
171     */
172    
173    
174     /*
175     -- Config Directives
176     -- Configuration directives for this Module
177     -- return: 0/1 = none/config applied
178     */
179    
180     int configModule_ResultOutput(SWISH * sw, StringList * sl)
181     {
182     struct MOD_ResultOutput *md = sw->ResultOutput;
183     char *w0 = sl->word[0];
184     int retval = 1;
185    
186    
187    
188     /* $$$ this will not work unless swish is reading the config file also for search ... */
189    
190     if (strcasecmp(w0, "ResultExtFormatName") == 0)
191     { /* 2001-02-15 rasc */
192     /* ResultExt... name fmtstring */
193     if (sl->n == 3)
194     {
195     md->resultextfmtlist = (struct ResultExtFmtStrList *) addResultExtFormatStr(md->resultextfmtlist, sl->word[1], sl->word[2]);
196     }
197     else
198     progerr("%s: requires \"name\" \"fmtstr\"", w0);
199     }
200     else
201     {
202     retval = 0; /* not a module directive */
203     }
204    
205     return retval;
206     }
207    
208    
209    
210     /*
211     -- cmdline settings
212     -- return: # of args read
213     */
214    
215     int cmdlineModule_ResultOutput(SWISH * sw, char opt, char **args)
216     {
217    
218     //$$$ still to do...
219     //$$$ move code from swish.c
220     return 0; /* quiet a warning */
221    
222    
223     }
224    
225    
226    
227    
228     /*
229     ** ----------------------------------------------
230     **
231     ** Module code starts here
232     **
233     ** ----------------------------------------------
234     */
235    
236    
237    
238     /*
239     -- Init the print of result entry in extented output format.
240     -- The parsed propertynames will be stored for result handling
241     -- Only user properties will be stored.
242     -- Routine has to be executed prior to search/result storing...
243     -- (This behavior is for historic reasons and may change)
244     -- ($$ this routine may build the print action list in the future...)
245     2001-02-07 rasc
246     */
247    
248     void initPrintExtResult(SWISH * sw, char *fmt)
249     {
250     FILE *f;
251     char *propname;
252     char *subfmt;
253    
254     f = (FILE *) NULL; /* no output, just parsing!!! */
255    
256    
257     while (*fmt)
258     { /* loop fmt string */
259    
260     switch (*fmt)
261     {
262    
263     case '%': /* swish abbrevation controls */
264     /* ignore (dummy param), because autoprop */
265     fmt = printTagAbbrevControl(sw, f, fmt, NULL);
266     break;
267    
268     case '<':
269     /* -- Property - Control: read Property Tag <name> */
270     /* -- Save User PropertyNames for result handling */
271     // Oct 16, 2001 - moseley: Seem like this should lookup the property
272     // and error if not found, plus, it should cache the propID to avoid lookups
273     // when returning results. Would parse the -x format for each index.
274     fmt = parsePropertyResultControl(fmt, &propname, &subfmt);
275    
276     efree(subfmt);
277     efree(propname);
278     break;
279    
280     case '\\': /* format controls */
281     fmt = printResultControlChar(f, fmt);
282     break;
283    
284    
285     default: /* a output character in fmt string */
286     fmt++;
287     break;
288     }
289    
290     }
291    
292     }
293    
294    
295    
296    
297    
298     /* ------------------------------------------------------------ */
299    
300    
301    
302    
303     /*
304     -- Output the resuult entries in the given order
305     -- outputformat depends on some cmd opt settings
306     This frees memory as it goes along, so this can't be called from the library.
307     */
308    
309     void printSortedResults(SWISH * sw)
310     {
311     struct MOD_ResultOutput *md = sw->ResultOutput;
312     RESULT *r = NULL;
313     FileRec *fi;
314     int resultmaxhits;
315     int resultbeginhits;
316     int counter;
317     char *delimiter;
318     FILE *f_out;
319    
320    
321     f_out = stdout;
322     resultmaxhits = sw->Search->maxhits;
323     resultbeginhits = (sw->Search->beginhits > 0) ? sw->Search->beginhits - 1 : 0;
324     delimiter = (md->stdResultFieldDelimiter) ? md->stdResultFieldDelimiter : " ";
325     counter = resultbeginhits;
326    
327    
328     /* jmruiz 02/2001 SwishSeek is faster because it does not read the
329     ** unused data */
330     SwishSeek(sw, resultbeginhits);
331    
332    
333     /* -- resultmaxhits: >0 or -1 (all hits) */
334     while ((r = SwishNext(sw)) && (resultmaxhits != 0))
335     {
336     fi = &r->fi; /* get address of FileRec to store properties and pointers */
337    
338     r->count = ++counter; /* set rec. counter for output */
339    
340    
341     /* This may or may not be an optimization */
342     // not really any more -- used to be able to read all the props, now this just reads them using ReadSingle...
343     // ReadAllDocPropertiesFromDisk( sw, r->indexf, r->filenum);
344    
345    
346     if (md->extendedformat)
347     printExtResultEntry(sw, f_out, md->extendedformat, r);
348    
349     else
350     {
351     char *format;
352    
353     if ((delimiter = (md->stdResultFieldDelimiter)) )
354     {
355     format = emalloc( (3* strlen( delimiter )) + 100 );
356     sprintf( format, "%%r%s%%p%s%%t%s%%l", delimiter, delimiter, delimiter );
357     }
358     else
359     format = estrdup( "%r %p \"%t\" %l" );
360    
361     printExtResultEntry(sw, f_out, format, r);
362     printStandardResultProperties(sw, f_out, r);
363    
364     fprintf(f_out, "\n");
365     efree( format );
366     }
367    
368    
369     /* might as well free the memory as we go */
370     freefileinfo( fi );
371    
372     if (resultmaxhits > 0)
373     resultmaxhits--;
374     }
375    
376     }
377    
378    
379    
380    
381    
382     /*
383     -- print a result entry in extented output format
384     -- Format characters: see switch cases...
385     -- f_out == NULL, use STDOUT
386     -- fmt = output format
387     -- count = current result record counter
388     2001-01-01 rasc
389     */
390    
391     static void printExtResultEntry(SWISH * sw, FILE * f_out, char *fmt, RESULT * r)
392     {
393     FILE *f;
394     char *propname;
395     char *subfmt;
396    
397    
398     f = (f_out) ? f_out : stdout;
399    
400     while (*fmt)
401     { /* loop fmt string */
402    
403     switch (*fmt)
404     {
405    
406     case '%': /* swish abbrevation controls */
407     fmt = printTagAbbrevControl(sw, f, fmt, r);
408     break;
409    
410     case '<':
411     /* Property - Control: read and print Property Tag <name> */
412     fmt = parsePropertyResultControl(fmt, &propname, &subfmt);
413     printPropertyResultControl(sw, f, propname, subfmt, r);
414     efree(subfmt);
415     efree(propname);
416     break;
417    
418     case '\\': /* print format controls */
419     fmt = printResultControlChar(f, fmt);
420     break;
421    
422    
423     default: /* just output the character in fmt string */
424     if (f)
425     fputc(*fmt, f);
426     fmt++;
427     break;
428     }
429    
430     }
431    
432    
433     }
434    
435    
436    
437    
438    
439    
440    
441     /* -- parse print control and print it
442     -- output on file <f>
443     -- *s = "\....."
444     -- return: string ptr to char after control sequence.
445     */
446    
447     static char *printResultControlChar(FILE * f, char *s)
448     {
449     char c,
450     *se;
451    
452     if (*s != '\\')
453     return s;
454    
455     c = charDecode_C_Escape(s, &se);
456     if (f)
457     fputc(c, f);
458     return se;
459     }
460    
461    
462    
463    
464    
465     /* -- parse % control and print it
466     -- in fact expand shortcut to fullnamed autoproperty tag
467     -- output on file <f>, NULL = parse only mode
468     -- *s = "%.....
469     -- return: string ptr to char after control sequence.
470     */
471    
472     static char *printTagAbbrevControl(SWISH * sw, FILE * f, char *s, RESULT * r)
473     {
474     char *t;
475     char buf[MAXWORDLEN];
476    
477     if (*s != '%')
478     return s;
479     t = NULL;
480    
481     switch (*(++s))
482     {
483     case 'c':
484     t = AUTOPROPERTY_REC_COUNT;
485     break;
486     case 'd':
487     t = AUTOPROPERTY_SUMMARY;
488     break;
489     case 'D':
490     t = AUTOPROPERTY_LASTMODIFIED;
491     break;
492     case 'I':
493     t = AUTOPROPERTY_INDEXFILE;
494     break;
495     case 'p':
496     t = AUTOPROPERTY_DOCPATH;
497     break;
498     case 'r':
499     t = AUTOPROPERTY_RESULT_RANK;
500     break;
501     case 'l':
502     t = AUTOPROPERTY_DOCSIZE;
503     break;
504     case 'S':
505     t = AUTOPROPERTY_STARTPOS;
506     break;
507     case 't':
508     t = AUTOPROPERTY_TITLE;
509     break;
510    
511     case '%':
512     if (f)
513     fputc('%', f);
514     break;
515     default:
516     progerr("Formatstring: unknown abbrev '%%%c'", *s);
517     break;
518    
519     }
520    
521     if (t)
522     {
523     sprintf(buf, "<%s>", t); /* create <...> tag */
524     if (f)
525     printExtResultEntry(sw, f, buf, r);
526     else
527     initPrintExtResult(sw, buf); /* parse only ! */
528     }
529     return ++s;
530     }
531    
532    
533    
534    
535     /* -- parse <tag fmt="..."> control
536     -- *s = "<....." format control string
537     -- possible subformat: fmt="...", fmt=/..../, etc.
538     -- return: string ptr to char after control sequence.
539     -- **propertyname = Tagname (or NULL)
540     -- **subfmt = NULL or subformat
541     */
542    
543     static char *parsePropertyResultControl(char *s, char **propertyname, char **subfmt)
544     {
545     char *s1;
546     char c;
547     int len;
548    
549    
550     *propertyname = NULL;
551     *subfmt = NULL;
552    
553     s = str_skip_ws(s);
554     if (*s != '<')
555     return s;
556     s = str_skip_ws(++s);
557    
558    
559     /* parse propertyname */
560    
561     s1 = s;
562     while (*s)
563     { /* read to end of propertyname */
564     if ((*s == '>') || isspace((unsigned char) *s))
565     { /* delim > or whitespace ? */
566     break; /* break on delim */
567     }
568     s++;
569     }
570     len = s - s1;
571     *propertyname = (char *) emalloc(len + 1);
572     strncpy(*propertyname, s1, len);
573     *(*propertyname + len) = '\0';
574    
575    
576     if (*s == '>')
577     return ++s; /* no fmt, return */
578     s = str_skip_ws(s);
579    
580    
581     /* parse optional fmt=<c>...<c> e.g. fmt="..." */
582    
583     if (!strncmp(s, "fmt=", 4))
584     {
585     s += 4; /* skip "fmt=" */
586     c = *(s++); /* string delimiter */
587     s1 = s;
588     while (*s)
589     { /* read to end of delim. char */
590     if (*s == c)
591     { /* c or \c */
592     if (*(s - 1) != '\\')
593     break; /* break on delim c */
594     }
595     s++;
596     }
597    
598     len = s - s1;
599     *subfmt = (char *) emalloc(len + 1);
600     strncpy(*subfmt, s1, len);
601     *(*subfmt + len) = '\0';
602     }
603    
604    
605     /* stupid "find end of tag" */
606    
607     while (*s && *s != '>')
608     s++;
609     if (*s == '>')
610     s++;
611    
612     return s;
613     }
614    
615    
616    
617    
618     /*
619     -- Print the result value of propertytag <name> on file <f>
620     -- if a format is given use it (data type dependend)
621     -- string and numeric types are using printfcontrols formatstrings
622     -- date formats are using strftime fromat strings.
623     */
624    
625    
626     static void printPropertyResultControl(SWISH * sw, FILE * f, char *propname, char *subfmt, RESULT * r)
627     {
628     char *fmt;
629     PropValue *pv;
630     char *s;
631     int n;
632    
633    
634     pv = getResultPropValue(sw, r, propname, 0);
635    
636     if (!pv)
637     {
638     if (f)
639     fprintf(f, "(NULL)"); /* Null value, no propname */
640     return;
641     }
642    
643     #ifdef USE_DOCPATH_AS_TITLE
644     if ( strcmp( AUTOPROPERTY_TITLE, propname ) == 0 && strcmp( "", pv->value.v_str ) == 0 )
645     {
646     char *c;
647     efree( pv );
648     pv = getResultPropValue(sw, r, AUTOPROPERTY_DOCPATH, 0);
649    
650     /* Just display the base name */
651     if ( pv )
652     {
653     c = estrdup( str_basename( pv->value.v_str ) );
654     efree( pv->value.v_str );
655     pv->value.v_str = c;
656     }
657     }
658     #endif
659    
660    
661    
662    
663     switch (pv->datatype)
664     {
665     /* use passed or default fmt */
666    
667     case PROP_INTEGER:
668     fmt = (subfmt) ? subfmt : "%d";
669     if (f)
670     fprintf(f, fmt, pv->value.v_int);
671     break;
672    
673     case PROP_ULONG:
674     fmt = (subfmt) ? subfmt : "%lu";
675     if (f)
676     fprintf(f, fmt, pv->value.v_ulong);
677     break;
678    
679    
680    
681     case PROP_STRING:
682     fmt = (subfmt) ? subfmt : "%s";
683    
684     /* -- get rid of \n\r in string! */ // there shouldn't be any in the first place, I believe
685     for (s = pv->value.v_str; *s; s++)
686     {
687     if (isspace((unsigned char) *s))
688     *s = ' ';
689     }
690    
691     /* $$$ ToDo: escaping of delimiter characters $$$ */
692     /* $$$ Also ToDo, escapeHTML entities (need config directive) */
693    
694     if (f)
695     fprintf(f, fmt, (char *) pv->value.v_str);
696    
697     break;
698    
699    
700     case PROP_DATE:
701     fmt = (subfmt) ? subfmt : "%Y-%m-%d %H:%M:%S %Z";
702     if (!strcmp(fmt, "%ld"))
703     {
704     /* special: Print date as serial int (for Bill) */
705     if (f)
706     fprintf(f, fmt, (long) pv->value.v_date);
707     }
708     else
709     {
710     /* fmt is strftime format control! */
711     s = (char *) emalloc(MAXWORDLEN + 1);
712     n = strftime(s, (size_t) MAXWORDLEN, fmt, localtime(&(pv->value.v_date)));
713     if (n && f)
714     fprintf(f, s);
715     efree(s);
716     }
717     break;
718    
719     case PROP_FLOAT:
720     fmt = (subfmt) ? subfmt : "%f";
721     if (f)
722     fprintf(f, fmt, (double) pv->value.v_float);
723     break;
724    
725     default:
726     fprintf(stdout, "err:(unknown datatype <%s>)\n", propname);
727     break;
728    
729    
730     }
731     freeResultPropValue(pv);
732     }
733    
734    
735    
736     /*
737     -------------------------------------------
738     Result config stuff
739     -------------------------------------------
740     */
741    
742    
743     /*
744     -- some code for -x fmtByName:
745     -- e.g. ResultExtendedFormat myformat "<swishtitle>|....\n"
746     -- ResultExtendedFormat yourformat "%c|%t|%p|<author fmt=/%20s/>\n"
747     --
748     -- swish -w ... -x myformat ...
749     --
750     -- 2001-02-15 rasc
751     */
752    
753    
754     /*
755     -- add name and string to list
756     */
757    
758     static struct ResultExtFmtStrList *addResultExtFormatStr(struct ResultExtFmtStrList *rp, char *name, char *fmtstr)
759     {
760     struct ResultExtFmtStrList *newnode;
761    
762    
763     newnode = (struct ResultExtFmtStrList *) emalloc(sizeof(struct ResultExtFmtStrList));
764    
765     newnode->name = (char *) estrdup(name);
766     newnode->fmtstr = (char *) estrdup(fmtstr);
767    
768     newnode->next = NULL;
769    
770     if (rp == NULL)
771     rp = newnode;
772     else
773     rp->nodep->next = newnode;
774    
775     rp->nodep = newnode;
776     return rp;
777     }
778    
779    
780    
781     /*
782     -- check if name is a predefined format
783     -- case sensitive
784     -- return fmtstring for formatname or NULL
785     */
786    
787    
788     char *hasResultExtFmtStr(SWISH * sw, char *name)
789     {
790     struct ResultExtFmtStrList *rfl;
791    
792     rfl = sw->ResultOutput->resultextfmtlist;
793     if (!rfl)
794     return (char *) NULL;
795    
796     while (rfl)
797     {
798     if (!strcmp(name, rfl->name))
799     return rfl->fmtstr;
800     rfl = rfl->next;
801     }
802    
803     return (char *) NULL;
804     }
805    
806    
807    
808    
809    
810     /*
811     -------------------------------------------
812     result header stuff
813     -------------------------------------------
814     */
815    
816    
817    
818    
819     /*
820     -- print a line for the result output header
821     -- the verbose level is checked for output
822     -- <min_verbose> has to be >= sw->...headerOutVerbose
823     -- outherwise nothing is outputted
824     -- return: 0/1 (not printed/printed)
825     -- 2001-03-13 rasc
826     */
827    
828     int resultHeaderOut(SWISH * sw, int min_verbose, char *printfmt, ...)
829     {
830     va_list args;
831    
832     /* min_verbose to low, no output */
833     if (min_verbose > sw->ResultOutput->headerOutVerbose)
834     return 0;
835    
836     /* print header info... */
837     va_start(args, printfmt);
838     vfprintf(stdout, printfmt, args);
839     va_end(args);
840     return 1;
841     }
842    
843    
844    
845    
846     /*
847     -- print a standard result header (according to -H <n>)
848     -- for the header of an index file
849     */
850    
851     void resultPrintHeader(SWISH * sw, int min_verbose, INDEXDATAHEADER * h, char *pathname, int merged)
852     {
853     char *fname;
854     int v;
855    
856     v = min_verbose;
857     fname = str_basename(pathname);
858    
859     resultHeaderOut(sw, v, "%s\n", INDEXVERSION);
860     /* why the blank merge header? */
861     resultHeaderOut(sw, v, "# %s\n", (merged) ? "MERGED INDEX" : "");
862     resultHeaderOut(sw, v, "%s %s\n", NAMEHEADER, (h->indexn[0] == '\0') ? "(no name)" : h->indexn);
863     resultHeaderOut(sw, v, "%s %s\n", SAVEDASHEADER, fname);
864     resultHeaderOut(sw, v, "%s %d words, %d files\n", COUNTSHEADER, h->totalwords, h->totalfiles);
865     resultHeaderOut(sw, v, "%s %s\n", INDEXEDONHEADER, h->indexedon);
866     resultHeaderOut(sw, v, "%s %s\n", DESCRIPTIONHEADER, (h->indexd[0] == '\0') ? "(no description)" : h->indexd);
867     resultHeaderOut(sw, v, "%s %s\n", POINTERHEADER, (h->indexp[0] == '\0') ? "(no pointer)" : h->indexp);
868     resultHeaderOut(sw, v, "%s %s\n", MAINTAINEDBYHEADER, (h->indexa[0] == '\0') ? "(no maintainer)" : h->indexa);
869     resultHeaderOut(sw, v, "%s %s\n", DOCPROPENHEADER, "Enabled");
870    
871    
872     resultHeaderOut(sw, v, "%s %d\n", STEMMINGHEADER, h->fuzzy_mode == FUZZY_STEMMING ? 1 : 0 );
873     resultHeaderOut(sw, v, "%s %d\n", SOUNDEXHEADER, h->fuzzy_mode == FUZZY_SOUNDEX ? 1 : 0 );
874     resultHeaderOut(sw, v, "%s %s\n", FUZZYMODE_HEADER, fuzzy_mode_to_string( h->fuzzy_mode ) );
875    
876    
877     resultHeaderOut(sw, v, "%s %d\n", IGNORETOTALWORDCOUNTWHENRANKING, h->ignoreTotalWordCountWhenRanking);
878     resultHeaderOut(sw, v, "%s %s\n", WORDCHARSHEADER, h->wordchars);
879     resultHeaderOut(sw, v, "%s %d\n", MINWORDLIMHEADER, h->minwordlimit);
880     resultHeaderOut(sw, v, "%s %d\n", MAXWORDLIMHEADER, h->maxwordlimit);
881     resultHeaderOut(sw, v, "%s %s\n", BEGINCHARSHEADER, h->beginchars);
882     resultHeaderOut(sw, v, "%s %s\n", ENDCHARSHEADER, h->endchars);
883     resultHeaderOut(sw, v, "%s %s\n", IGNOREFIRSTCHARHEADER, h->ignorefirstchar);
884     resultHeaderOut(sw, v, "%s %s\n", IGNORELASTCHARHEADER, h->ignorelastchar);
885     /*
886     resultHeaderOut (sw,v, "%s %d\n", FILEINFOCOMPRESSION, h->applyFileInfoCompression);
887     */
888     translatecharHeaderOut(sw, v, h);
889    
890    
891     return;
892     }

  ViewVC Help
Powered by ViewVC 1.1.22