~ubuntu-branches/debian/squeeze/sword/squeeze

« back to all changes in this revision

Viewing changes to src/modules/filters/thmlvariants.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Jonathan Marsden, Jonathan Marsden, Dmitrijs Ledkovs, Closed Bugs
  • Date: 2009-05-30 11:55:55 UTC
  • mfrom: (1.3.1 upstream) (6.1.1 experimental)
  • Revision ID: james.westby@ubuntu.com-20090530115555-r427zsn3amivdpfu
Tags: 1.6.0+dfsg-1
[ Jonathan Marsden ]
* New upstream release. (Closes: #507960) (LP: #320558)
* debian/patches/02_libver.diff:
  - Bump SONAME to 8 -- SWORD 1.6 is not backward compatible with 1.5.11.
* debian/patches/series:
  - Remove 10_diatheke.diff -- included in upstream source.
* debian/patches/:
  - Remove several old unused .diff files.
  - Add 11_regex_only_when_needed.diff to conditionally include regex lib.
  - Add 12_fix_compiler_warnings.diff to remove all compiler warnings.
  - Add 13_fix_osis2mod_compression_default.diff from upstream svn.
  - Add 14_closing_section_not_chapter.diff from upstream svn.
* debian/libsword7.*: 
  - Rename to libsword8.*
  - Change libsword7 to libsword8 within files.
* debian/rules: 
  - SONAME bump to 8.
  - Set library version check to >= 1.6
* debian/control:
  - Change libsword7 to libsword8.
  - Add libsword7 to Conflicts.
  - Fix case of sword to SWORD in package descriptions.
  - Bump Standards-Version to 3.8.1 (no changes needed).
  - Fix section for libsword-dbg to avoid lintian warning.
* debian/rules:
  - Add DFSG get-orig-source target.
* debian/copyright:
  - Fix various mistakes in initial attempt to document copyrights.

[ Dmitrijs Ledkovs ]
* debian/rules: Added utils.mk to use missing-files target and call it on
  each build.
* debian/libsword-dev.install: Added libsword.la, previously missing.
* debian/libsword7.install: Added missing libicu translit files.
* debian/control:
  - Updated all uses of SWORD version to 1.6
  - Added libsword-dbg package
* debian/watch: Fixed a small mistake which was resulting in extra "."
  in final version name.
* debian/rules: simplified manpage processing.
* debian/libsword8.lintian-overrides: added override for module
  installation directory.
* debian/copyright: Updated with information about everyfile.
  Closes: #513448 LP: #322638
* debian/diatheke.examples: moved examples here from the diatheke.install
* debian/rules:
  - enabled shell script based testsuite
  - added commented out cppunit testsuite
* debian/patches/40_missing_includes.diff: 
  - added several missing stdio.h includes to prevent FTBFS of testsuite.

[ Closed Bugs ]
* FTBFS on intrepid (LP: #305172)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/******************************************************************************
 
2
 *
 
3
 * thmlvariants -       SWFilter descendant to hide or show textual variants
 
4
 *                      in a ThML module.
 
5
 *
 
6
 *
 
7
 * Copyright 2009 CrossWire Bible Society (http://www.crosswire.org)
 
8
 *      CrossWire Bible Society
 
9
 *      P. O. Box 2528
 
10
 *      Tempe, AZ  85280-2528
 
11
 *
 
12
 * This program is free software; you can redistribute it and/or modify it
 
13
 * under the terms of the GNU General Public License as published by the
 
14
 * Free Software Foundation version 2.
 
15
 *
 
16
 * This program is distributed in the hope that it will be useful, but
 
17
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 
18
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
19
 * General Public License for more details.
 
20
 *
 
21
 */
 
22
 
 
23
#include <stdlib.h>
 
24
#include <thmlvariants.h>
 
25
#include <utilstr.h>
 
26
 
 
27
SWORD_NAMESPACE_START
 
28
 
 
29
const char ThMLVariants::primary[] = "Primary Reading";
 
30
const char ThMLVariants::secondary[] = "Secondary Reading";
 
31
const char ThMLVariants::all[] = "All Readings";
 
32
 
 
33
const char ThMLVariants::optName[] = "Textual Variants";
 
34
const char ThMLVariants::optTip[] = "Switch between Textual Variants modes";
 
35
 
 
36
 
 
37
ThMLVariants::ThMLVariants() {
 
38
        option = false;
 
39
        options.push_back(primary);
 
40
        options.push_back(secondary);
 
41
        options.push_back(all);
 
42
}
 
43
 
 
44
 
 
45
ThMLVariants::~ThMLVariants() {
 
46
}
 
47
 
 
48
void ThMLVariants::setOptionValue(const char *ival)
 
49
{
 
50
        if (!stricmp(ival, primary)) option = 0;
 
51
        else if (!stricmp(ival, secondary)) option = 1;
 
52
        else option = 2;
 
53
}
 
54
 
 
55
const char *ThMLVariants::getOptionValue()
 
56
{
 
57
        if (option == 0) {
 
58
                return primary;
 
59
        }
 
60
        else if (option == 1) {
 
61
                return secondary;
 
62
        }
 
63
        else {
 
64
                return all;
 
65
        }
 
66
}
 
67
 
 
68
char ThMLVariants::processText(SWBuf &text, const SWKey *key, const SWModule *module)
 
69
{
 
70
        if ( option == 0 || option == 1) { //we want primary or variant only
 
71
                bool intoken = false;
 
72
                bool hide = false;
 
73
                bool invar = false;
 
74
                
 
75
                SWBuf token;
 
76
                SWBuf orig = text;
 
77
                const char *from = orig.c_str();
 
78
 
 
79
                //we use a fixed comparision string to make sure the loop is as fast as the original two blocks with almost the same code
 
80
                const char* variantCompareString = (option == 0) ? "div type=\"variant\" class=\"1\"" : "div type=\"variant\" class=\"2\"";
 
81
                
 
82
                for (text = ""; *from; from++) {
 
83
                        if (*from == '<') {
 
84
                                intoken = true;
 
85
                                token = "";
 
86
                                continue;
 
87
                        }
 
88
                        else if (*from == '>') {        // process tokens
 
89
                                intoken = false;
 
90
                                
 
91
                                if ( !strncmp(token.c_str(), variantCompareString, 28)) { //only one of the variants, length of the two strings is 28 in both cases 
 
92
                                        invar = true;
 
93
                                        hide = true;
 
94
                                        continue;
 
95
                                }
 
96
                                if (!strncmp(token.c_str(), "div type=\"variant\"", 18)) {
 
97
                                        invar = true;
 
98
                                        continue;
 
99
                                }
 
100
                                if (!strncmp(token.c_str(), "/div", 4)) {
 
101
                                        hide = false;
 
102
                                        if (invar) {
 
103
                                                invar = false;
 
104
                                                continue;
 
105
                                        }
 
106
                                }
 
107
                                if (!hide) {
 
108
                                        text += '<';
 
109
                                        text.append(token);
 
110
                                        text += '>';
 
111
                                }
 
112
 
 
113
                                continue;
 
114
                        }
 
115
                        if (intoken) {
 
116
                                token += *from;
 
117
                        }
 
118
                        else if (!hide) {
 
119
                                text += *from;
 
120
                        }
 
121
                }
 
122
 
 
123
        }
 
124
 
 
125
        return 0;
 
126
}
 
127
 
 
128
 
 
129
 
 
130
 
 
131
 
 
132
 
 
133
SWORD_NAMESPACE_END