~ubuntu-branches/ubuntu/precise/cuneiform/precise

« back to all changes in this revision

Viewing changes to cuneiform_src/Kern/rout/src/text.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Jakub Wilk, c-assert.diff, slovenian-slv.diff
  • Date: 2011-01-26 21:53:07 UTC
  • mfrom: (5.1.1 experimental)
  • Revision ID: james.westby@ubuntu.com-20110126215307-62x61mcesr607qb7
Tags: 1.0.0+dfsg-2
* Upload to unstable.
* Explicitly build-depend on pkg-config. Thanks to Stefano Rivera for the
  bug report.
* Add Vcs-* fields.
* Use the standard C assert() macro, rather than custom Cuneiform one.
  [c-assert.diff]
* Pass CFLAGS, CXXFLAGS and LDFLAGS (get from dpkg-buildflags) to cmake
  (closes: #608345). Thanks to Sami Liedes for the bug report.
  + Build depend on dpkg-dev (>= 1.15.7).
* Pass --parallel to dh.
  + Bump debhelper minimum version to 7.4.10.
* Update debian/copyright to the latest DEP-5 version.
* Bump year in debian/copyright.
* Explicitly link to GraphicsMagick (rather than via the ImageMagick
  compatibility layer).
* Don't ship /usr/lib/cuneiform/*.so symlinks. These libraries are
  considered private, at least until #598616 is fixed.
* Rename some private variables in debian/rules to make them lowercase.
* Update patch headers.
* Provide proper ‘build-arch’ and ‘build-indep’ targets in debian/rules.
* Document input format in the manual page (closes: #572061). Thanks to
  Janusz S. Bień for the bug report.
* Use ‘slv’ (rather than ‘slo’) as language code for Slovenian.
  [slovenian-slv.diff]
* Fix package description: Slovenian is supported, Slovak is not.
* Improve documentation of the language (-l) option (closes: #602512).
  Thanks to Jari Aalto for the bug report.
* Install reasons file for vrms.

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
Copyright (c) 1993-2008, Cognitive Technologies
3
3
All rights reserved.
4
4
 
5
 
����������� ��������� ��������������� � ������������� ��� � ���� ��������� ����,
6
 
��� � � �������� �����, � ����������� ��� ���, ��� ���������� ��������� �������:
7
 
 
8
 
      * ��� ��������� ��������������� ��������� ���� ������ ���������� ���������
9
 
        ���� ����������� �� ��������� �����, ���� ������ ������� � �����������
10
 
        ����� �� ��������.
11
 
      * ��� ��������� ��������������� ��������� ���� � ������������ �/��� �
12
 
        ������ ����������, ������������ ��� ���������������, ������ �����������
13
 
        ��������� ���� ���������� �� ��������� �����, ���� ������ ������� �
14
 
        ����������� ����� �� ��������.
15
 
      * �� �������� Cognitive Technologies, �� ����� �� ����������� �� �����
16
 
        ���� ������������ � �������� �������� ��������� �/��� �����������
17
 
        ���������, ���������� �� ���� ��, ��� ���������������� �����������
18
 
        ����������.
19
 
 
20
 
��� ��������� ������������� ����������� ��������� ���� �/��� ������� ������ "���
21
 
��� ����" ��� ������-���� ���� ��������, ���������� ���� ��� ���������������,
22
 
������� �������� ������������ �������� � ����������� ��� ���������� ����, �� ��
23
 
������������� ���. �� �������� ��������� ���� � �� ���� ������ ����, �������
24
 
����� �������� �/��� �������� �������������� ���������, �� � ���� ������ ��
25
 
��Ѩ� ���������������, ������� ����� �����, ���������, ����������� ���
26
 
������������� ������, ��������� � �������������� ��� ���������� ����������
27
 
������������� ������������� ��������� (������� ������ ������, ��� ������,
28
 
������� ���������, ��� ������ �/��� ������ �������, ���������� ��-�� ��������
29
 
������� ��� �/��� ������ ��������� �������� ��������� � ������� �����������,
30
 
�� �� ������������� ����� ��������), �� �� ������������� ���, ���� ���� �����
31
 
�������� ��� ������ ���� ���� �������� � ����������� ����� ������� � ������.
 
5
Разрешается повторное распространение и использование как в виде исходного кода,
 
6
так и в двоичной форме, с изменениями или без, при соблюдении следующих условий:
 
7
 
 
8
      * При повторном распространении исходного кода должны оставаться указанное
 
9
        выше уведомление об авторском праве, этот список условий и последующий
 
10
        отказ от гарантий.
 
11
      * При повторном распространении двоичного кода в документации и/или в
 
12
        других материалах, поставляемых при распространении, должны сохраняться
 
13
        указанная выше информация об авторском праве, этот список условий и
 
14
        последующий отказ от гарантий.
 
15
      * Ни название Cognitive Technologies, ни имена ее сотрудников не могут
 
16
        быть использованы в качестве средства поддержки и/или продвижения
 
17
        продуктов, основанных на этом ПО, без предварительного письменного
 
18
        разрешения.
 
19
 
 
20
ЭТА ПРОГРАММА ПРЕДОСТАВЛЕНА ВЛАДЕЛЬЦАМИ АВТОРСКИХ ПРАВ И/ИЛИ ДРУГИМИ ЛИЦАМИ "КАК
 
21
ОНА ЕСТЬ" БЕЗ КАКОГО-ЛИБО ВИДА ГАРАНТИЙ, ВЫРАЖЕННЫХ ЯВНО ИЛИ ПОДРАЗУМЕВАЕМЫХ,
 
22
ВКЛЮЧАЯ ГАРАНТИИ КОММЕРЧЕСКОЙ ЦЕННОСТИ И ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ, НО НЕ
 
23
ОГРАНИЧИВАЯСЬ ИМИ. НИ ВЛАДЕЛЕЦ АВТОРСКИХ ПРАВ И НИ ОДНО ДРУГОЕ ЛИЦО, КОТОРОЕ
 
24
МОЖЕТ ИЗМЕНЯТЬ И/ИЛИ ПОВТОРНО РАСПРОСТРАНЯТЬ ПРОГРАММУ, НИ В КОЕМ СЛУЧАЕ НЕ
 
25
НЕСЁТ ОТВЕТСТВЕННОСТИ, ВКЛЮЧАЯ ЛЮБЫЕ ОБЩИЕ, СЛУЧАЙНЫЕ, СПЕЦИАЛЬНЫЕ ИЛИ
 
26
ПОСЛЕДОВАВШИЕ УБЫТКИ, СВЯЗАННЫЕ С ИСПОЛЬЗОВАНИЕМ ИЛИ ПОНЕСЕННЫЕ ВСЛЕДСТВИЕ
 
27
НЕВОЗМОЖНОСТИ ИСПОЛЬЗОВАНИЯ ПРОГРАММЫ (ВКЛЮЧАЯ ПОТЕРИ ДАННЫХ, ИЛИ ДАННЫЕ,
 
28
СТАВШИЕ НЕГОДНЫМИ, ИЛИ УБЫТКИ И/ИЛИ ПОТЕРИ ДОХОДОВ, ПОНЕСЕННЫЕ ИЗ-ЗА ДЕЙСТВИЙ
 
29
ТРЕТЬИХ ЛИЦ И/ИЛИ ОТКАЗА ПРОГРАММЫ РАБОТАТЬ СОВМЕСТНО С ДРУГИМИ ПРОГРАММАМИ,
 
30
НО НЕ ОГРАНИЧИВАЯСЬ ЭТИМИ СЛУЧАЯМИ), НО НЕ ОГРАНИЧИВАЯСЬ ИМИ, ДАЖЕ ЕСЛИ ТАКОЙ
 
31
ВЛАДЕЛЕЦ ИЛИ ДРУГОЕ ЛИЦО БЫЛИ ИЗВЕЩЕНЫ О ВОЗМОЖНОСТИ ТАКИХ УБЫТКОВ И ПОТЕРЬ.
32
32
 
33
33
Redistribution and use in source and binary forms, with or without modification,
34
34
are permitted provided that the following conditions are met:
63
63
#include <string.h>
64
64
#include "stdafx.h"
65
65
#include "rout_own.h"
66
 
#include "ligas.h"      // ������ � HHH 01.09.2000 E.P.
 
66
#include "ligas.h"      // Теперь в HHH 01.09.2000 E.P.
67
67
 
68
 
static BOOL Static_MakeText(Handle hObject, long reason);
69
 
static BOOL TableStub();
70
 
static BOOL IncludeTable();
 
68
static Bool Static_MakeText(Handle hObject, long reason);
 
69
static Bool TableStub();
 
70
static Bool IncludeTable();
71
71
 
72
72
//********************************************************************
73
 
BOOL MakeText()
 
73
Bool MakeText()
74
74
{
75
 
/* ��������� �������.
76
 
 
77
 
   ������� �������� � ����:
78
 
         "<< ������� 1: ����� 1, �������� 2, ����� 2 >>"
79
 
 
80
 
   ����� ����� �����������, ���� gPreserveLineBreaks = TRUE.
 
75
/* Текстовые форматы.
 
76
 
 
77
   Таблицы выдаются в виде:
 
78
         "<< Таблица 1: строк 1, столбцов 2, ячеек 2 >>"
 
79
 
 
80
   Концы строк сохраняются, если gPreserveLineBreaks = TRUE.
81
81
*/
82
82
 
83
83
        return BrowsePage(Static_MakeText,
86
86
 
87
87
}
88
88
//********************************************************************
89
 
BOOL Static_MakeText(
 
89
Bool Static_MakeText(
90
90
                        Handle hObject,
91
 
                        long reason     // ��. enum BROWSE_REASON
 
91
                        long reason     // См. enum BROWSE_REASON
92
92
                        )
93
93
{
94
 
// � ����� ���������� WordControl
 
94
// В конце вызывается WordControl
95
95
 
96
96
        switch(reason)
97
97
                {
98
98
                case BROWSE_CHAR:
99
 
                        // ������
100
 
                        // ���������� ����
 
99
                        // Символ
 
100
                        // Установить язык
101
101
                        {
102
102
                        long lang = CED_GetCharFontLang(hObject);
103
103
                        if (lang != gLanguage)
104
104
                                SetLanguage(lang);
105
105
                        }
106
106
 
107
 
                        // �������� ������
 
107
                        // Записать символ
108
108
                        ONE_CHAR(hObject);
109
109
                        break;
110
110
 
111
111
                case BROWSE_LINE_END:
112
 
                        // ����� ������
 
112
                        // Конец строки
113
113
                        if ( 0 ||
114
114
                                gFormat==ROUT_FMT_SmartText ||
115
115
                                ( gPreserveLineBreaks || gEdLineHardBreak)
118
118
                        break;
119
119
 
120
120
                case BROWSE_PARAGRAPH_END:
121
 
                        // ����� ������
 
121
                        // Конец абзаца
122
122
                        NEW_LINE;
123
123
                        break;
124
124
 
125
125
                case BROWSE_TABLE_START:
126
 
                        // ������ �������
 
126
                        // Начало таблицы
127
127
 
128
 
                        // �������� ������� � ����� ��������
 
128
                        // Включить таблицу в текст страницы
129
129
                        if (gTableTextOptions & ROUT_TABLE_TEXT_INCLUDED)
130
130
                                {if (!IncludeTable()) return FALSE;}
131
131
                        else
132
 
                                // ���������� ����� ������� � ������ ��������
 
132
                                // Обозначить место таблицы в тексте страницы
133
133
                                {if (!TableStub()) return FALSE;}
134
134
 
135
135
                        break;
136
136
 
137
137
                case BROWSE_TABLE_END:
138
 
                        // ����� �������
 
138
                        // Конец таблицы
139
139
                        NEW_LINE;
140
140
                        break;
141
141
 
142
142
                }
143
143
 
144
 
        // �������� �� ������� � ��������
 
144
        // Слежение за словами и строками
145
145
        WORDS_CONTROL(reason);
146
146
 
147
 
        return TRUE;    // ���������� ��������
 
147
        return TRUE;    // Продолжить просмотр
148
148
}
149
149
//********************************************************************
150
 
BOOL NewLine()
 
150
Bool NewLine()
151
151
{
152
 
// �������� ����� ������
 
152
// Записать конец строки
153
153
 
154
154
        CHECK_MEMORY(10);
155
155
 
156
 
        // ��� ������ Words.cpp
 
156
        // Для модуля Words.cpp
157
157
        gCharBack = gMemCur;
158
158
 
159
159
        Byte *p = (Byte*)gEOL;
163
163
        return TRUE;
164
164
}
165
165
//********************************************************************
166
 
BOOL OneChar(Handle charHandle)
 
166
Bool OneChar(Handle charHandle)
167
167
{
168
168
        // write one symbol
169
169
        char sCodePageName[200]={0};
184
184
        gCharCode = c1;
185
185
        gCharBack = gMemCur;
186
186
 
187
 
        // �������, ����������� ��� ������������ SmartText,
188
 
        // ����� ������ 253; �� ������� ����������
189
 
        // ��� ���� ��������� ��������
 
187
        // Пробелы, вставленные для выравнивания SmartText,
 
188
        // имеют оценку 253; их следует пропускать
 
189
        // для всех остальных форматов
190
190
        if (c1 == ' ' && alt->probability == 253 &&
191
191
                gFormat != ROUT_FMT_SmartText
192
192
            )
193
193
                return TRUE;
194
194
 
195
 
        // ����������� ������ �������������
 
195
        // Специальные случаи перекодировки
196
196
        switch(c1)
197
197
                {
198
 
                // ����������� �������� - ���������,
199
 
                // �� �������� ��� ����. 26.05.99
200
 
#ifdef __MAC__
201
 
                case (BYTE)206: case (BYTE)207:
202
 
                case (BYTE)174: case (BYTE)190:
203
 
                        if( gLanguage==LANG_FRENCH )
204
 
                                c2=�1;
205
 
                        break;
206
 
#endif
207
198
                // unknows symbol
208
199
                case bad_char:
209
200
                        c2 = gBadChar;
211
202
 
212
203
                case 0x97:
213
204
                        //  long dash -> double hyphen
214
 
                        // except SmartText � HTML
 
205
                        // except SmartText и HTML
215
206
                        // 29.02.2000
216
207
                        if (gFormat == ROUT_FMT_HTML || gFormat == ROUT_FMT_HOCR || gActiveCode==ROUT_CODE_UTF8)
217
208
                                {
226
217
                                }
227
218
                        break;
228
219
 
229
 
                // ������� ������ � HTML ���������� �� �������
 
220
                // Угловые скобки в HTML заменяются на круглые
230
221
                case '<':
231
222
                case '>':
232
223
                        if (gFormat == ROUT_FMT_HTML || gFormat == ROUT_FMT_HOCR) {
249
240
                        }
250
241
                        break;
251
242
 
252
 
                // ������� oe / OE
 
243
                // Дифтонг oe / OE
253
244
                case oe_deaf_sound:
254
245
                        if( FALSE == (
255
246
                                        gLanguage==LANG_RUSSIAN ||
280
271
                                }
281
272
                        break;
282
273
 
283
 
#ifndef __MAC__
284
 
                //      0xA9 � -> (C),
285
 
                //      0xAE � -> (R)
 
274
                //      0xA9 © -> (C),
 
275
                //      0xAE ® -> (R)
286
276
                case  0xA9:  case  0xAE:
 
277
                    if(gActiveCode == ROUT_CODE_UTF8)
 
278
                        break;
 
279
 
287
280
                        if( gActiveCode==ROUT_CODE_ASCII ||
288
281
                                gActiveCode==ROUT_CODE_ISO
289
282
                          )
299
292
                        return TRUE;
300
293
                        break;
301
294
 
302
 
#endif
303
 
                // 0x99 � -> (TM) except ANSI and UTF8
 
295
                // 0x99 ™ -> (TM) except ANSI and UTF8
304
296
                case  0x99:
305
 
                        if( gActiveCode!=ROUT_CODE_ANSI && gActiveCode!=ROUT_CODE_UTF8)
 
297
            if( gActiveCode!=ROUT_CODE_ANSI && gActiveCode!=ROUT_CODE_UTF8)
306
298
                                {
307
299
                                *gMemCur++ = '(';
308
300
                                *gMemCur++ = c2;        // 'T'
328
320
        return TRUE;
329
321
}
330
322
//********************************************************************
331
 
BOOL PutString(char *s)
 
323
Bool PutString(char *s)
332
324
{
333
 
// ������ ������ � �����.
334
 
// ���������� �������� ������ �����, ��� �����
335
 
// ������������� ������������ NEW_LINE
 
325
// Запись строки в ответ.
 
326
// Желательно избегать концов строк, для этого
 
327
// рекомендуется использовать NEW_LINE
336
328
 
337
 
        ULONG lth = strlen(s);
 
329
        ulong lth = strlen(s);
338
330
 
339
331
        if ( !lth )
340
332
                return TRUE;
341
333
 
342
 
        CHECK_MEMORY(lth+10);   // � �������
 
334
        CHECK_MEMORY(lth+10);   // С запасом
343
335
 
344
336
        strcpy((char*)gMemCur,s);
345
337
        gMemCur += lth;
346
338
        return TRUE;
347
339
}
348
340
//********************************************************************
349
 
BOOL PutSpaces(long lth)
 
341
Bool PutSpaces(long lth)
350
342
{
351
 
// ������ �������� � �����.
 
343
// Запись пробелов в ответ.
352
344
 
353
345
        if ( lth <= 0 )
354
346
                return TRUE;
355
347
 
356
 
        CHECK_MEMORY(lth+10);   // � �������
 
348
        CHECK_MEMORY(lth+10);   // С запасом
357
349
 
358
350
        memset (gMemCur,' ', lth);
359
351
        gMemCur += lth;
360
352
        return TRUE;
361
353
}
362
354
//********************************************************************
363
 
static BOOL TableStub()
 
355
static Bool TableStub()
364
356
{
365
 
// ����������� ������� � ������ ��������
 
357
// Обозначение таблицы в тексте страницы
366
358
 
367
 
// ����� "�������", "�����:", "��������:", "�����:"
 
359
// Слова "Таблица", "Строк:", "Столбцов:", "Ячеек:"
368
360
char word1[40]="", word2[40]="", word3[40]="", word4[40]="";
369
361
 
370
362
        LoadString((HINSTANCE)ghInst_rout,
378
370
 
379
371
        char buf[1000] = "";
380
372
        sprintf(buf,
381
 
                        "<< %s %d: %s %d, %s %d, %s %d >>",
 
373
                        "<< %s %ld: %s %ld, %s %ld, %s %ld >>",
382
374
                        word1, gHitTables,
383
375
                        word2, gTableRows,
384
376
                        word3, gTableCols,
389
381
        return TRUE;
390
382
}
391
383
//********************************************************************
392
 
static BOOL IncludeTable()
 
384
static Bool IncludeTable()
393
385
{
394
386
/*
395
 
        �������� ������� � ����� ��������
 
387
        Включить таблицу в текст страницы
396
388
 
397
389
*/
398
390
 
399
 
        // ��������� ������ ������
 
391
        // Сохранить начало памяти
400
392
        Byte *saveMemStart = gMemStart;
401
393
 
402
 
        // ������ ���������� ��������� ������
 
394
        // Начало оставшейся свободной памяти
403
395
        gMemStart = gMemCur;
404
396
 
405
 
        // �������� ��������� ������
 
397
        // Обнулить свободную память
406
398
        memset(gMemStart,0,gMemEnd - gMemStart);
407
399
 
408
 
        // ������� ��������� �����
409
 
        BOOL good = MakeTableText();
 
400
        // Вызвать табличный текст
 
401
        Bool good = MakeTableText();
410
402
 
411
 
        // ������������ ������ ������
 
403
        // Восстановить начало памяти
412
404
        gMemStart = saveMemStart;
413
405
 
414
406
        return good;