Язык WordBasic - практический подход

       

Проверка правописания


В Word 7.0 для
Windows 95 появились операторы поддерживающие проверку грамматики и ряд других операций. Теперь очень удобно отслеживать так называемые "глазные ошибки" при вводе текста, вот только ОРФО не слишком хорошо различает слова набранные кириллицей от слов в латинице и поэтому в двуязычных текстах красной чертой подчеркнуты правильно набранные слова из-за того что у такого слова стоит не тот признак языка, который нужен. На самом деле это не так безобидно как кажется. При переходе с Word 6.0 на 7.0 мои файлы (в каждом из них смешанный текст на двух языках) “потолстели” на 60-70 Кбайт. Причина заключалась в том, что Word хранит информацию об ошибках правописания. Кроме того, когда таких “ошибок” слишком много, Word отключает автоматическую проверку орфографии, что естественно не радует. Следующая макрокоманда выделяет весь текст документа и устанавливает для него язык “Русский”, затем она последовательно просматривает цепочки слов и помечает слова, набранные латиницей, как “English(US)”. Вы можете модифицировать эти строки, как вам нужно, в частности для одного из текстов, где встречалось много английских названий функций, я поставил “Без проверки”. В этом варианте макрокоманда недостаточно аккуратно обрабатывает достижение конца документа, так как её всегда можно прервать по клавише Esc, но в документе остаётся три закладки, которые удаляются из меню Правка*Закладка*Удалить.
Sub MAIN
' SP – закладка в начале цепочки
' EP – закладка на текущей точке просмотра
' EP1 – закладка в конце распознанной цепочки
  StartOfDocument  ' выделить документ
  EndOfDocument 1
  Language "Русский"
  StartOfDocument 0  ' поиск цепочек на латинице
  SetEndOfBookmark "\Sel", "EP1"
  While AtEndOfDocument() <> - 1
    WordRight 1, 1 ' следующее слово


    SetStartOfBookmark "\Sel", "SP"
Loop:
    k = Len(Selection$())
    SetEndOfBookmark "\Sel", "EP"
   ExtendSelection
   EditGoTo "EP"

   Cancel
nodefis:
   a$ = Right$(RTrim$(Selection$()), 1)
   If (a$ = "–") Or Asc(a$) <= 64 Then
      SetEndOfBookmark "\Sel", "EP"
      Goto nextloop
   End If
   If Asc(a$) < 123 Then
      SetEndOfBookmark "\Sel", "EP1"
      WordRight 1, 1
      Goto Loop  ' продлить цепочку
   Else    ' смена типа цепочки
      If Not(CmpBookmarks("SP", "EP1") = 2) Then
                  EditGoTo "EP"
                  Goto nextloop
      End If
      ExtendSelection
      EditGoTo "EP1"
      Cancel
      If SelType() = 2 Then
                  Language Language$(7)
            EditGoTo "EP"
      End If
   End If
nextloop:
  Wend
End Sub
 
После обработки документов этой макрокомандой они снова “похудели”, а автоматическая проверка орфографии заработала. Расставлять же вручную признаки языка по тексту в 310 Кбайт – занятие похожее на мазохизм. Так что, пишите макросы!
Ряд новых функций связан с проверкой правописания. следует отметить, что в Word 6.0 эти функции недоступны и генерируют ошибку.
Прежде всего пишущему макрокоманду, обрабатывающую грамматические ошибки потребуется функция DocumentHasMisspellings(), которая возвращает информацию о статусе автоматической проверки правописания в окне активного документа. Она возвращает следующие значения:
 

Значение
Пояснение
-1
Или автоматическая проверка правописания выключена (если документ не пуст), или проверка осуществляется в настоящее время.
0
Или документ был полностью проверен и не содержит орфографических ошибок, или документ пуст.
1
Документ был полностью проверен и содержит, по крайней, мере одну орфографическую ошибку.

 
Оператор NextMisspelling находит следующее ошибочное слово.
SpellChecked, SpellChecked()указывают, проверено ли правописание выделенного текста или нет.
ToolsSpellingRecheckDocument производит проверку правописания по всему документу.
ToolsOptionsSpelling задаёт параметры для автоматической проверки текста.
 

Содержание раздела