Erich Gamma Ralph Johnson Richard Helm John Vlissides Addison-Wesley


Проектирование редактора документов



Download 6,32 Mb.
Pdf ko'rish
bet68/273
Sana02.03.2022
Hajmi6,32 Mb.
#479589
1   ...   64   65   66   67   68   69   70   71   ...   273
Bog'liq
Priemioop

Проектирование редактора документов
virtual void CheckCharacter(Character*);
virtual void CheckRow(Row*);
virtual void Checklmage(Image*);
// ... и так далее
List& GetMisspellings();
protected:
virtual bool IsMisspelled(const char*);
private:
char _currentWord[MAX_WORD_SIZE];
List _misspellings;
};
Операция проверки в классе SpellingChecker для глифов типа Character
могла бы выглядеть так:
void SpellingChecker::CheckCharacter (Character* с) {
const char ch = c->GetCharCode();
if (isalpha(ch)) {
// добавить букву к _currentWord
} else {
// встретилась не-буква
if (IsMisspelled(_currentWord)) {
// добавить _currentWord в „misspellings
_misspellings.Append(strdup(_currentWord));
}
_currentWord[0] = '\б';
// переустановить _currentWord для проверки
// следующего слова
}
}
Обратите внимание, что мы определили специальную операцию Get Char Code
только для класса Character. Объект проверки правописания может работать со
специфическими для подклассов операциями, не прибегая к проверке или приве-
дению типов, а это позволяет нам трактовать некоторые объекты специальным
образом.
Объект класса CheckCharacter накапливает буквы в буфере _currentWord.
Когда встречается не-буква, например символ подчеркивания, этот объект вызы-
вает операцию IsMisspelled для проверки орфографии слова, находящегося


в _currentWord.
1
Если слово написано неправильно, то CheckCharacter добав-
ляет его в список слов с ошибками. Затем буфер _currentWord очищается для
приема следующего слова. По завершении обхода можно добраться до списка слов
с ошибками с помощью операции GetMis spell ings.
Теперь логично обойти всю структуру глифов, вызывая CheckMe для каждого
глифа и передавая ей объект проверки правописания в качестве аргумента. Тем
самым текущий глиф для Spell ingChecker идентифицируется и может продол-
жать проверку:
SpelIingChecker spel1ingChecker;
Composition* с;
//
...
Glyph* g;
Preorderlterator i(c);
for (i.First (); !i.IsDone(); i.NextO) {
g = i.CurrentItern();
g->CheckMe(spellingChecker) ;
}
На следующей диаграмме показано, как взаимодействуют глифы типа Character
и объект SpellingChecker.
|
Этот подход работает при поиске орфографических ошибок, но как он может
помочь в поддержке нескольких видов анализа? Похоже, что придется добавлять
операцию вроде CheckMe (SpellingChecker&) в класс Glyph и его подклассы
1
Функция IsMisspel led реализует алгоритм проверки орфографии, детали которого мы здесь не
приводим, поскольку мы сделали его независимым от дизайна Lexi. Мы можем поддержать разные
алгоритмы, порождая подклассы класса SpellingChecker. Или применить для этой цели паттерн
стратегия (как для форматирования в разделе 2.3).
Правописание и расстановка переносов



Download 6,32 Mb.

Do'stlaringiz bilan baham:
1   ...   64   65   66   67   68   69   70   71   ...   273




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish