source: trunk/gsdl/src/recpt/formattools.h@ 13017

Last change on this file since 13017 was 12567, checked in by kjdon, 18 years ago

changed the special metadata formatting for Language and Date. Now these both output macros rather than a final result. Language codes get turned into _iso639:iso639xx_, dates (yyyy-?mm-?dd) get turned into _format:date_(yyyy,mm,dd). This is now controlled by a new option for metadata names [format:Date]. Without this, Dates and Languages get output as raw text. format must coma after cgiSafe and before parent/sibling/child. If its used with a different metadata name, eg [format:dc.Title] the output will be _format:dc.Title_(title value), and the user can define _dc.Title_ macro in format package to handle it.

  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 4.0 KB
Line 
1/**********************************************************************
2 *
3 * formattools.h --
4 * Copyright (C) 1999 The New Zealand Digital Library Project
5 *
6 * A component of the Greenstone digital library software
7 * from the New Zealand Digital Library Project at the
8 * University of Waikato, New Zealand.
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23 *
24 *********************************************************************/
25
26
27#ifndef FORMATTOOLS_H
28#define FORMATTOOLS_H
29
30#include "text_t.h"
31#include "comtypes.h"
32#include "recptproto.h"
33#include "display.h"
34
35enum command_t {comIf, comOr, comMeta, comText, comLink, comEndLink, comNum, comIcon,
36 comDoc, comHighlight, comEndHighlight, comRel, comHref, comSummary,
37 comTOC, comImage, comDocumentButtonDetach, comDocumentButtonHighlight,
38 comDocumentButtonExpandContents, comDocumentButtonExpandText, comOID, comRank, comCollection};
39
40enum mcommand_t {mNone=0, mCgiSafe=1, mParent=2, mSibling=4, mChild=8, mSpecial=16};
41
42enum pcommand_t {pNone, pImmediate, pTop, pAll};
43enum scommand_t {sNone, sAll, sNum};
44enum ccommand_t {cNone, cAll, cNum};
45enum dcommand_t {dMeta, dText};
46
47struct metadata_t {
48 void clear();
49 metadata_t () {clear();}
50
51 text_t metaname;
52 int metacommand; // used to hold flags from mcommand_t
53 struct {
54 pcommand_t parent;
55 scommand_t sibling;
56 ccommand_t child;
57 } mqualifier;
58
59 text_t parentoptions;
60 text_t siblingoptions;
61 text_t childoptions;
62};
63
64
65// The decision component of an {If}{decision,true-text,false-text}
66// formatstring. The decision can be based on metadata or on text;
67// normally that text would be a macro like _cgiargmode_. --gordon
68struct decision_t {
69 void clear();
70 decision_t () {clear();}
71
72 dcommand_t command;
73 metadata_t meta;
74 text_t text;
75};
76
77struct format_t {
78 void clear();
79 format_t () {clear();}
80
81 command_t command;
82 decision_t decision;
83 text_t text;
84 metadata_t meta;
85 format_t *nextptr;
86 format_t *ifptr;
87 format_t *elseptr;
88 format_t *orptr;
89};
90
91// the format structure used by this receptionist
92struct formatinfo_t {
93 void clear();
94 formatinfo_t () {clear();}
95
96 bool DocumentImages;
97 bool DocumentTitles;
98 text_t DocumentHeading;
99 bool DocumentContents;
100 bool DocumentArrowsBottom;
101 bool DocumentArrowsTop;
102 text_tarray DocumentButtons;
103 text_t DocumentText;
104 //-----------------
105 text_t RelatedDocuments;
106 //----------------
107 text_tmap formatstrings;
108 bool DocumentUseHTML;
109 bool AllowExtendedOptions;
110};
111
112bool is_table_content (const text_t &formatstring);
113bool is_table_content (const format_t *formatlistptr);
114
115bool get_formatstring (const text_t &key, const text_tmap &formatstringmap,
116 text_t &formatstring);
117bool get_formatstring (const text_t &key1, const text_t &key2,
118 const text_tmap &formatstringmap,
119 text_t &formatstring);
120
121text_t format_date (const text_t &date);
122
123text_t remove_namespace(const text_t &meta_name);
124
125text_t iso639 (const text_t &langcode);
126
127text_t get_href (const text_t &link);
128
129text_t get_related_docs(const text_t& collection, recptproto* collectproto,
130 ResultDocInfo_t &docinfo, ostream& logout);
131
132
133bool parse_formatstring (const text_t &formatstring, format_t *formatlistptr,
134 text_tset &metadata, bool &getParents);
135
136
137
138text_t get_formatted_string (const text_t& collection, recptproto* collectproto,
139 ResultDocInfo_t &docinfo, displayclass &disp,
140 format_t *formatlistptr, text_tmap &options,
141 ostream& logout);
142
143#endif
144
145
Note: See TracBrowser for help on using the repository browser.