~ubuntu-branches/debian/sid/xiphos/sid

« back to all changes in this revision

Viewing changes to src/main/export_passage.cc

  • Committer: Package Import Robot
  • Author(s): Dimitri John Ledkov
  • Date: 2014-07-12 17:08:46 UTC
  • mfrom: (1.3.3)
  • Revision ID: package-import@ubuntu.com-20140712170846-ja9jzhgt51d3fkrd
Tags: 3.2.2+dfsg1-1
* New upstream release.
* Bump standards version.
* Switch uscan to sf.net redirector.
* Unpack waf in get-orig-source target.
* Bump to debhelper 9.
* Add uuid-dev build-dep.

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
 * Xiphos Bible Study Tool
3
3
 * export_passage.cc -
4
4
 *
5
 
 * Copyright (C) 2008-2011 Xiphos Developer Team
 
5
 * Copyright (C) 2008-2014 Xiphos Developer Team
6
6
 *
7
7
 * This program is free software; you can redistribute it and/or modify
8
8
 * it under the terms of the GNU General Public License as published by
34
34
#include "main/export_passage.h"
35
35
#include "main/settings.h"
36
36
#include "main/sword.h"
 
37
#include "main/global_ops.hh"
37
38
 
38
 
#define HTML_START      "<html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\"><style type=\"text/css\"><!-- A { text-decoration:none } *[dir=rtl] { text-align: right; } --></style></head><body>"
 
39
#define HTML_START      "<html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\"><style type=\"text/css\"><!-- A { text-decoration:none } *[dir=rtl] { text-align: right; } .transChangeSupplied { font-style: italic; } --></style></head><body>"
39
40
 
40
41
enum {
41
42
        TARGET_HTML,
97
98
int main_get_current_verse (void)
98
99
{
99
100
        VerseKey key = settings.currentverse;
100
 
        return key.Verse();
 
101
        return key.getVerse();
101
102
}
102
103
 
103
104
/**
109
110
 * so that smart word processors such as OO.o will preserve markup; at this point,
110
111
 * the HTML is *not* preserving the font.
111
112
 **/
112
 
static void _copy_to_clipboard (char* text,int len)
 
113
static void _copy_to_clipboard (EXPORT_DATA data, char* text,int len)
113
114
{
114
115
        GtkClipboard *clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
115
116
 
121
122
                                     (GtkClipboardGetFunc)clipboardreq_get,
122
123
                                     NULL,
123
124
                                     NULL);
 
125
        if (data.bookheader)
 
126
                g_free(data.bookheader);
 
127
        if (data.chapterheader_book)
 
128
                g_free(data.chapterheader_book);
 
129
        if (data.chapterheader_chapter)
 
130
                g_free(data.chapterheader_chapter);
 
131
        if (data.versenumber)
 
132
                g_free(data.versenumber);
 
133
        if (data.verselayout_single_verse_ref_last)
 
134
                g_free(data.verselayout_single_verse_ref_last);
 
135
        if (data.verselayout_single_verse_ref_first)
 
136
                g_free(data.verselayout_single_verse_ref_first);
 
137
        if (data.verse_range_verse)
 
138
                g_free(data.verse_range_verse);
124
139
}
125
140
 
126
 
static void _save(char *filename, char* text,int len)
 
141
static void _save(EXPORT_DATA data, char* text,int len)
127
142
{
128
 
        GS_message(("%s",filename));
129
 
        g_file_set_contents(filename, text, len, NULL);
130
 
        if (filename)
131
 
                g_free(filename);
 
143
        GS_message(("%s",data.filename));
 
144
        g_file_set_contents(data.filename, text, len, NULL);
 
145
        if (data.filename)
 
146
                g_free(data.filename);
 
147
        if (data.bookheader)
 
148
                g_free(data.bookheader);
 
149
        if (data.chapterheader_book)
 
150
                g_free(data.chapterheader_book);
 
151
        if (data.chapterheader_chapter)
 
152
                g_free(data.chapterheader_chapter);
 
153
        if (data.versenumber)
 
154
                g_free(data.versenumber);
 
155
        if (data.verselayout_single_verse_ref_last)
 
156
                g_free(data.verselayout_single_verse_ref_last);
 
157
        if (data.verselayout_single_verse_ref_first)
 
158
                g_free(data.verselayout_single_verse_ref_first);
 
159
        if (data.verse_range_verse)
 
160
                g_free(data.verse_range_verse);
132
161
}
133
162
 
134
163
static void _export_book(EXPORT_DATA data, int type)
135
164
{
136
165
        GString *str = g_string_new(NULL);
 
166
        //gchar *buf;
137
167
        SWMgr *mgr = backend->get_mgr();
138
168
        SWModule *mod = mgr->Modules[settings.MainWindowModule];
139
169
        mod->setKey(settings.currentverse);
140
170
        VerseKey *key = (VerseKey *)(SWKey *)(*mod);
141
171
        int curChapter = 1;
142
 
        int curBook = key->Book();
 
172
        int curBook = key->getBook();
143
173
        int mychapter = 1;
144
174
        int myverse = 1;
145
 
        key->Chapter(1);
146
 
        key->Verse(1);
 
175
        
 
176
        key->setChapter(1);
 
177
        key->setVerse(1);
147
178
 
148
179
        if (type == HTML)
149
180
                g_string_append_printf(str,
150
 
                                       "%s<center>%s<br/>Chapter %d</center><br/>",
 
181
                                       data.bookheader,
151
182
                                       HTML_START,
152
 
                                       mod->Description(),
 
183
                                       (data.version ? mod->getDescription() : ""),
153
184
                                       1);
154
185
        else
155
 
                g_string_append_printf(str,"%s\n\nChapter %d\n\n",
156
 
                                       mod->Description(),
 
186
                g_string_append_printf(str,data.plain_bookheader,
 
187
                       mod->getDescription(),
157
188
                                       1);
158
 
 
159
 
        while (key->Book() == curBook && !mod->Error()) {
160
 
                if (key->Chapter() != curChapter) {
 
189
        //g_free(buf);
 
190
        while (key->getBook() == curBook && !mod->popError()) {
 
191
                if (key->getChapter() != curChapter) {
161
192
                        ++mychapter;
162
193
                        myverse = 1;
163
 
                        curChapter = key->Chapter();
 
194
                        curChapter = key->getChapter();
164
195
                        if (type == HTML)
165
 
                                g_string_append_printf(str,"<br/><center>Chapter %d</center><br/>", curChapter);
 
196
                                g_string_append_printf(str,data.chapterheader_book, curChapter);
166
197
                        else
167
 
                                g_string_append_printf(str,"\n\nChapter %d\n\n", curChapter);
 
198
                                g_string_append_printf(str,data.plain_chapterheader_book, curChapter);
168
199
                }
169
200
 
170
201
                if (data.verse_num)
171
202
                        g_string_append_printf(str,
172
203
                                               ((type == HTML)
173
 
                                                ? "&nbsp;&nbsp;[%d]"
174
 
                                                : "  [%d]"),
 
204
                                                ? data.versenumber
 
205
                                                : data.plain_versenumber),
175
206
                                               myverse);
176
207
 
177
208
                if (type == HTML)
178
209
                        g_string_append_printf(str, " %s%s",
179
 
                                               (char*)mod->RenderText(),
180
 
                                               (settings.versestyle ? "<br/>" : ""));
 
210
                                               mod->renderText().c_str(),
 
211
                                               (settings.versestyle ? "<br>" : ""));
181
212
                else
182
213
                        g_string_append_printf(str, " %s%s",
183
 
                                               (char*)mod->StripText(),
 
214
                                               (char*)mod->stripText(),
184
215
                                               (settings.versestyle ? "\n" : ""));
185
216
 
186
217
                ++myverse;
189
220
        if (type == HTML)
190
221
                g_string_append_printf(str,"%s","</body></html>");
191
222
        if (data.filename)
192
 
                _save(data.filename, str->str,str->len);
 
223
                _save(data, str->str,str->len);
193
224
        else
194
 
                _copy_to_clipboard (str->str, str->len);
 
225
                _copy_to_clipboard (data, str->str, str->len);
195
226
        g_string_free(str,TRUE);
196
227
}
197
228
 
203
234
        SWModule *mod = mgr->Modules[settings.MainWindowModule];
204
235
        mod->setKey(settings.currentverse);
205
236
        VerseKey *key = (VerseKey *)(SWKey *)(*mod);
206
 
        int curChapter = key->Chapter();
207
 
        int curBook = key->Book();
 
237
        int curChapter = key->getChapter();
 
238
        int curBook = key->getBook();
208
239
        int myverse = 1;
209
240
 
210
241
        book = backend->key_get_book(settings.currentverse);
211
242
        if (type == HTML)
212
243
                g_string_append_printf(str,
213
 
                                       "%s%s: %s Chapter %d<br/><br/>",
 
244
                                       data.chapterheader_chapter,
214
245
                                       HTML_START,
215
 
                                       mod->Description(),
 
246
                                       (data.version ? mod->getDescription() : ""),
216
247
                                       book,
217
 
                                       key->Chapter());
 
248
                                       key->getChapter());
218
249
        else
219
250
                g_string_append_printf(str,
220
 
                                       "%s: %s Chapter %d\n\n",
221
 
                                       mod->Description(),
 
251
                                       data.plain_chapterheader_chapter,
 
252
                                       mod->getDescription(),
222
253
                                       book,
223
 
                                       key->Chapter());
 
254
                                       key->getChapter());
224
255
 
225
 
        for (key->Verse(1);
226
 
             (key->Book() == curBook) &&
227
 
             (key->Chapter() == curChapter) &&
228
 
             !mod->Error();
 
256
        for (key->setVerse(1);
 
257
             (key->getBook() == curBook) && (key->getChapter() == curChapter) && !mod->popError();
229
258
             (*mod)++) {
230
259
 
231
260
                if (data.verse_num)
232
 
                        g_string_append_printf(str, " [%d]", myverse);
 
261
                        g_string_append_printf(str,
 
262
                                               ((type == HTML)
 
263
                                                ? data.versenumber
 
264
                                                : data.plain_versenumber), myverse);
233
265
 
234
266
                if (type == HTML)
235
267
                        g_string_append_printf(str," %s%s",
236
 
                                               (char*)mod->RenderText(),
237
 
                                               (settings.versestyle ? "<br/>" : ""));
 
268
                                               mod->renderText().c_str(),
 
269
                                               (settings.versestyle ? "<br>" : ""));
238
270
                else
239
271
                        g_string_append_printf(str," %s%s",
240
 
                                               (char*)mod->StripText(),
 
272
                                               (char*)mod->stripText(),
241
273
                                               (settings.versestyle ? "\n" : ""));
242
274
                ++myverse;
243
275
        }
244
276
        if (type == HTML)
245
277
                g_string_append_printf(str,"%s","</body></html>");
246
278
        if (data.filename)
247
 
                _save(data.filename, str->str,str->len);
 
279
                _save(data, str->str,str->len);
248
280
        else
249
 
                _copy_to_clipboard (str->str, str->len);
 
281
                _copy_to_clipboard (data, str->str, str->len);
250
282
        g_string_free(str,TRUE);
251
283
        if (book)
252
284
                g_free(book);
257
289
{
258
290
        GString *str = g_string_new(NULL);
259
291
        char* book;
 
292
        char *modstr = g_strdup_printf(" [%s]",settings.MainWindowModule);
260
293
        SWMgr *mgr = backend->get_mgr();
261
294
        SWModule *mod = mgr->Modules[settings.MainWindowModule];
262
295
        mod->setKey(settings.currentverse);
264
297
 
265
298
        book = backend->key_get_book(settings.currentverse);
266
299
        if (type == HTML)
267
 
                g_string_append_printf(str,
268
 
                                       "%s%s%s (%s %d:%d [%s])</body></html>",
269
 
                                       HTML_START,
270
 
                                       (char*)mod->RenderText(),
271
 
                                       (settings.versestyle ? "<br/>" : ""),
272
 
                                       book,
273
 
                                       key->Chapter(),
274
 
                                       key->Verse(),
275
 
                                       settings.MainWindowModule);
 
300
                if (data.reference_last) 
 
301
                        g_string_append_printf(str,
 
302
                                               data.verselayout_single_verse_ref_last,
 
303
                                               HTML_START,
 
304
                                               mod->renderText().c_str(),
 
305
                                               book,
 
306
                                               key->getChapter(),
 
307
                                               key->getVerse(),
 
308
                                               (data.version ? modstr : ""));
 
309
                else 
 
310
                        g_string_append_printf(str,
 
311
                                               data.verselayout_single_verse_ref_first,
 
312
                                               HTML_START,
 
313
                                               book,
 
314
                                               key->getChapter(),
 
315
                                               key->getVerse(),
 
316
                                               (data.version ? modstr : ""),
 
317
                                               mod->renderText().c_str());
276
318
        else
277
 
                g_string_append_printf(str,
278
 
                                       "%s%s (%s %d:%d [%s])",
279
 
                                       (char*)mod->StripText(),
280
 
                                       (settings.versestyle ? "\n" : ""),
281
 
                                       book,
282
 
                                       key->Chapter(),
283
 
                                       key->Verse(),
284
 
                                       settings.MainWindowModule);
 
319
                if (data.reference_last) 
 
320
                        g_string_append_printf(str,
 
321
                                               data.plain_verselayout_single_verse_ref_last,
 
322
                                               (char*)mod->stripText(),
 
323
                                               book,
 
324
                                               key->getChapter(),
 
325
                                               key->getVerse(),
 
326
                                               (data.version ? modstr : ""));
 
327
                else
 
328
                        g_string_append_printf(str,
 
329
                                               data.plain_verselayout_single_verse_ref_first,
 
330
                                               book,
 
331
                                               key->getChapter(),
 
332
                                               key->getVerse(),
 
333
                                               (data.version ? modstr : ""),
 
334
                                               (char*)mod->stripText());
 
335
                        
285
336
 
286
337
        if (data.filename)
287
 
                _save(data.filename, str->str,str->len);
 
338
                _save(data, str->str,str->len);
288
339
        else
289
 
                _copy_to_clipboard (str->str, str->len);
 
340
                _copy_to_clipboard (data, str->str, str->len);
290
341
 
291
342
        g_string_free(str,TRUE);
292
343
 
293
344
        if (book)
294
345
                g_free(book);
 
346
        if(modstr)
 
347
                g_free(modstr);
295
348
}
296
349
 
297
350
static void _export_verse_range (EXPORT_DATA data, int type)
302
355
        SWModule *mod = mgr->Modules[settings.MainWindowModule];
303
356
        mod->setKey(settings.currentverse);
304
357
        VerseKey *key = (VerseKey *)(SWKey *)(*mod);
305
 
        int curChapter = key->Chapter();
306
 
        int curBook = key->Book();
 
358
        int curChapter = key->getChapter();
 
359
        int curBook = key->getBook();
 
360
        char *modstr = g_strdup_printf(" [%s]",settings.MainWindowModule);
307
361
        //int myverse = 1;
308
362
 
309
363
        // special case: one verse range => single verse export.
317
371
        if (type == HTML)
318
372
                g_string_append_printf(str, "%s", HTML_START);
319
373
 
320
 
        for (key->Verse(data.start_verse);
321
 
             (key->Verse() <= data.end_verse) &&
322
 
             (key->Book() == curBook) &&
323
 
             (key->Chapter() == curChapter) &&
324
 
             !mod->Error();
 
374
        if (!data.reference_last)
 
375
                g_string_append_printf(str,
 
376
                                       ((type == HTML) 
 
377
                                        ? data.verse_range_ref_first 
 
378
                                        : data.plain_verse_range_ref_first),
 
379
                                       book,
 
380
                                       key->getChapter(),
 
381
                                       data.start_verse,
 
382
                                       data.end_verse,
 
383
                                       (data.version ? modstr : ""));
 
384
        
 
385
        for (key->setVerse(data.start_verse);
 
386
             (key->getVerse() <= data.end_verse) &&
 
387
             (key->getBook() == curBook) &&
 
388
             (key->getChapter() == curChapter) &&
 
389
             !mod->popError();
325
390
             (*mod)++) {
326
391
 
327
392
                if (data.verse_num)
328
 
                        g_string_append_printf(str, "[%d]", key->Verse());
 
393
                        g_string_append_printf(str, 
 
394
                                               ((type == HTML) 
 
395
                                                ? data.versenumber 
 
396
                                                : data.plain_versenumber), 
 
397
                                               key->getVerse());
329
398
 
330
399
                if (type == HTML)
331
 
                        g_string_append_printf(str," %s%s ",
332
 
                                               (char*)mod->RenderText(),
333
 
                                               (settings.versestyle ? "<br/>" : ""));
 
400
                        g_string_append_printf(str,data.verse_range_verse,
 
401
                                               mod->renderText().c_str(),
 
402
                                               (settings.versestyle ? "<br>" : " "));
334
403
                else
335
 
                        g_string_append_printf(str," %s%s ",
336
 
                                               (char*)mod->StripText(),
337
 
                                               (settings.versestyle ? "\n" : ""));
 
404
                        g_string_append_printf(str,data.verse_range_verse,
 
405
                                               (char*)mod->stripText(),
 
406
                                               (settings.versestyle ? "\n" : " "));
338
407
        }
 
408
        // back up one verse.
 
409
        // if we have dumped the last verse of a chapter, then we will have stepped
 
410
        // into next chapter in order to end loop above.  this reverts us correctly.
 
411
        (*mod)--;
339
412
 
340
 
        g_string_append_printf(str,
341
 
                               "%s(%s %d:%d-%d [%s])",
342
 
                               ((type == HTML) ? "<br/>" : "\n"),
343
 
                               book,
344
 
                               key->Chapter(),
345
 
                               data.start_verse,
346
 
                               data.end_verse,
347
 
                               settings.MainWindowModule);
 
413
        if (data.reference_last)
 
414
                g_string_append_printf(str,
 
415
                                       ((type == HTML) ? data.verse_range_ref_last 
 
416
                                        : data.plain_verse_range_ref_last),
 
417
                                       ((type == HTML) ? "<br>" : "\n"),
 
418
                                       book,
 
419
                                       key->getChapter(),
 
420
                                       data.start_verse,
 
421
                                       data.end_verse,
 
422
                                       (data.version ? modstr : ""));
348
423
 
349
424
        if (type == HTML)
350
 
                g_string_append_printf(str, "</body></html>");
 
425
                g_string_append_printf(str, "</body></html> ");
351
426
        if (data.filename)
352
 
                _save(data.filename, str->str, str->len);
 
427
                _save(data, str->str, str->len);
353
428
        else
354
 
                _copy_to_clipboard (str->str, str->len);
 
429
                _copy_to_clipboard (data, str->str, str->len);
355
430
        g_string_free(str,TRUE);
356
431
        if (book)
357
432
                g_free(book);
358
 
}
359
 
 
360
 
 
361
 
void main_export_html(EXPORT_DATA data)
362
 
{
363
 
        switch (data.passage_type) {
364
 
                case BOOK:
365
 
                        _export_book(data, HTML);
366
 
                        break;
367
 
                case CHAPTER:
368
 
                        _export_chapter(data, HTML);
369
 
                        break;
370
 
                case VERSE:
371
 
                        _export_verse(data, HTML);
372
 
                        break;
373
 
                case VERSE_RANGE:
374
 
                        _export_verse_range(data, HTML);
375
 
                        break;
376
 
        }
377
 
}
378
 
 
379
 
void main_export_plain(EXPORT_DATA data)
380
 
{
381
 
        switch (data.passage_type) {
382
 
                case BOOK:
383
 
                        _export_book(data, PLAIN);
384
 
                        break;
385
 
                case CHAPTER:
386
 
                        _export_chapter(data, PLAIN);
387
 
                        break;
388
 
                case VERSE:
389
 
                        _export_verse(data, PLAIN);
390
 
                        break;
391
 
                case VERSE_RANGE:
392
 
                        _export_verse_range(data, PLAIN);
 
433
        if(modstr)
 
434
                g_free(modstr);
 
435
}
 
436
 
 
437
 
 
438
void main_export_content(EXPORT_DATA data, gint format)
 
439
{
 
440
        int style = (format ? HTML : PLAIN);
 
441
 
 
442
        // no markers are left in exported text.
 
443
        _set_global_textual("Cross-references", "Off");
 
444
        _set_global_textual("Footnotes", "Off");
 
445
 
 
446
        switch (data.passage_type) {
 
447
                case BOOK:
 
448
                        _export_book(data, style);
 
449
                        break;
 
450
                case CHAPTER:
 
451
                        _export_chapter(data, style);
 
452
                        break;
 
453
                case VERSE:
 
454
                        _export_verse(data, style);
 
455
                        break;
 
456
                case VERSE_RANGE:
 
457
                        _export_verse_range(data, style);
393
458
                        break;
394
459
        }
395
460
}