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

« back to all changes in this revision

Viewing changes to cuneiform_src/Kern/rout/src/words.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:
65
65
#include "rout_own.h"
66
66
 
67
67
//********************************************************************
68
 
BOOL IsLetter(Byte c)
 
68
Bool IsLetter(Byte c)
69
69
{
70
70
        Byte type = gAlphabetTable[c];
71
71
 
73
73
                   (type & CASE_LOWER);
74
74
}
75
75
//********************************************************************
76
 
BOOL IsEOL(Byte c)
 
76
Bool IsEOL(Byte c)
77
77
{
78
78
        return c == 0x0d ||
79
79
                   c == 0x0a;
80
80
}
81
81
//********************************************************************
82
 
BOOL WordsControl(
83
 
                long reason     // ��. enum BROWSE_REASON
 
82
Bool WordsControl(
 
83
                long reason     // См. enum BROWSE_REASON
84
84
                )
85
85
{
86
 
// �������� �� ������� � ��������
87
 
// ���������� ����� ������ ������� ��� ����� ������
88
 
// ��� ����� ���� ���������
 
86
// Слежение за словами и строками
 
87
// Вызывается после записи символа или конца строки
 
88
// или после иной обработки
89
89
 
90
90
        switch(reason)
91
91
                {
92
92
                case BROWSE_PARAGRAPH_START:
93
 
                        // ������ ������
 
93
                        // Начало абзаца
94
94
                        gLastEOL = NULL;
95
95
                        gBegWord = NULL;
96
96
                        gDefis = NULL;
98
98
                        break;
99
99
 
100
100
                case BROWSE_PARAGRAPH_END:
101
 
                        // ����� ������
102
 
                        // ���������� ����� ����� ���� ����
 
101
                        // Конец абзаца
 
102
                        // Обработать конец слова если есть
103
103
                        if ( gBegWord && !WordEnd() )
104
104
                                return FALSE;
105
105
 
110
110
                        break;
111
111
 
112
112
                case BROWSE_LINE_END:
113
 
                        // ����� ������
114
 
                        // ������������ ����� �� ������ ����� ������
115
 
                        // ��� ������� � ������ ��������� ������
 
113
                        // Конец строки
 
114
                        // Запоминается адрес до записи конца строки
 
115
                        // или пробела в начале следующей строки
116
116
                        if ( gCharBack && IsEOL(*gCharBack) )
117
117
                                gLastEOL = gCharBack;
118
118
                        else
120
120
                        break;
121
121
 
122
122
                case BROWSE_LINE_START:
123
 
                        // ������ ������
 
123
                        // Начало строки
124
124
                        {
125
 
                        Byte c = *(gMemCur-1);  // ���������� ������
126
 
                        if (gLastEOL &&                 // ���������� ������
127
 
                                c &&                            // �� ��������� �����
128
 
                                !IsEOL(c) &&            // ��� ����� ������ ������
129
 
                                !(gFormat==ROUT_FMT_HTML && // ��� ����� ������ HTML
 
125
                        Byte c = *(gMemCur-1);  // Предыдущий символ
 
126
                        if (gLastEOL &&                 // Предыдущая строка
 
127
                                c &&                            // Не кончается нулем
 
128
                                !IsEOL(c) &&            // Нет конца строки текста
 
129
                                !(gFormat==ROUT_FMT_HTML && // Нет конца строки HTML
130
130
                                  !memcmp("<br>",(char*)gMemCur-4,4)
131
131
                                 ) &&
132
 
                                c != ' '                        // �� ����� �� ������
 
132
                                c != ' '                        // На конце не пробел
133
133
                                )
134
134
                                {
135
 
                                // �������� ������ ����� ����� �������
 
135
                                // Вставить пробел перед новой строкой
136
136
                                *gMemCur++ = ' ';
137
137
                                }
138
138
                        }
139
139
                        break;
140
140
 
141
141
                case BROWSE_CHAR:
142
 
                        // ������
 
142
                        // Символ
143
143
 
144
 
                        // �����
 
144
                        // Буква
145
145
                        if (IS_LETTER(gCharCode))
146
146
                                {
147
 
                                // ������ �����
 
147
                                // Начало слова
148
148
                                if(!gBegWord)
149
149
                                        gBegWord = gCharBack;
150
150
                                }
151
 
                        // �� �����. � ����� ����.
 
151
                        // Не буква. А слово есть.
152
152
                        else if (gBegWord)
153
153
                                {
154
 
                                // �����
 
154
                                // Дефис
155
155
                                if (gCharCode == '-')
156
156
                                        {
157
 
                                        Byte c = *(gMemCur-2);  // ���������� ������
 
157
                                        Byte c = *(gMemCur-2);  // Предыдущий символ
158
158
                                        if ( c == '-' )
159
159
                                                {
160
 
                                                // ��� ������ ������ ��� ����
 
160
                                                // Два дефиса подряд это тире
161
161
                                                if ( gDefis == gMemCur-2 )
162
162
                                                        gDefis = 0;
163
163
                                                }
164
164
                                        else
165
165
                                                {
166
 
                                                // ������� ����� � "������" ������ ����� ���� ������
 
166
                                                // Скрытый дефис в "мягкой" строке может быть удален
167
167
                                                if ( gEdCharHidden &&
168
168
                                                        !(gPreserveLineBreaks || gEdLineHardBreak)
169
169
                                                   )
171
171
                                                }
172
172
                                        }
173
173
 
174
 
                                // ����� �����
 
174
                                // Конец слова
175
175
                                else
176
176
                                        {
177
 
                                        // ���������� ����� �����
 
177
                                        // Обработать конец слова
178
178
                                        if ( !WordEnd() )
179
179
                                                return FALSE;
180
180
                                        }
187
187
        return TRUE;
188
188
}
189
189
//********************************************************************
190
 
BOOL WordEnd()
 
190
Bool WordEnd()
191
191
{
192
 
// ���������� ����� �����
193
 
// �������: gBegWord > 0,
 
192
// Обработать конец слова
 
193
// Имеется: gBegWord > 0,
194
194
//                      gDefis >= 0,
195
195
//                      gLastEOL >= 0
196
196
 
197
 
        BOOL hasWordBreak = (gBegWord < gDefis &&
 
197
        Bool hasWordBreak = (gBegWord < gDefis &&
198
198
                                             gDefis + 1 == gLastEOL &&
199
199
                                                *gLastEOL == ' '
200
200
                                                 );
201
201
 
202
 
        // ��������� ��������
 
202
        // Обработка переноса
203
203
        if (hasWordBreak)
204
204
                {
205
 
                // ������� ����� � ������ ����� ��������
 
205
                // Стереть дефис и пробел между строками
206
206
                long lth = 2;
207
207
                memcpy(gDefis, gDefis + lth,
208
208
                           gMemCur - gDefis - lth);