История версий
7.30.422

7.30.422-x64

Releases 2024.03.31
[~] Поправка в алгоритме разбора текстов в формате fb2.
[~] Поправка в функции Input() встроенного интерпретатора. При вводе данных не отображался первый символ вводимого текста.
[~] Поправка в форме "Сервис - Статистика - Выполнить скрипт - Из файла". Не полностью были видны клавиши OK и Esc.
[~] В опции "Найти/Заменить - Библиотекарь" невозможно было ввести данные в поле "Что" из буфера обмена по клавише Ctrl+V.
[~] Файлы настроек $.cfg, созданные версиями программы младше 422, не работали в текущей версии 422.
[~] Поправка в питон-скрипте синтеза речи на моделях Silero, для правильного отображения имен файлов, содержащих символы юникода.
[~] Поправка в алгоритме запоминания списка ранее открытых файлов.
[~] Улучшено извлечение текста из документов pdf. Текст извлекается, если документ имеет текстовый слой, за исключением т.н. "зашифрованных pdf".
[~] Поправка в алгоритме извлечения текста из документов epub.
[~] Поправка в алгоритме извлечения картинок из документов docx.
7.30.422-x64-Silero
Экспериментальная сборка для чтения текстов голосами от компании Silero. Внимание! Этот дистрибутив, при распаковке, требует наличия 1.4 Гб свободного места на жестком диске. Кроме собственно Demagog, в нем содержатся нейросетевые модели для 6 языков: deutch, english, french, russian, spanish, ukrainian. А так же модуль pytorch для работы с ними. Инструкция в pdf-формате находится внутри архива.
 7.30.422-x64-Silero-CUDA Экспериментальная сборка для чтения текстов голосами от компании Silero, с использованием видеокарты от фирмы Nvidia, поддерживающей CUDA. Это значительно ускоряет синтез аудиофайлов. Внимание! Этот дистрибутив, при распаковке, требует наличия 5.5 Гб свободного места на жестком диске. Кроме собственно Demagog, в нем содержатся нейросетевые модели для 6 языков: deutch, english, french, russian, spanish, ukrainian. А так же модуль pytorch для работы с ними. Инструкция в pdf-формате находится внутри архива.
7.30.420

7.30.420-x64
[+] Добавлено извлечение текста из файлов: Adobe PDF (.pdf), MS Excel (.xls, .xslx), MS Power Point (.ppt, .pptx), Open Document (.odt, .ods, .odp, .odg), OpenOffice.org  (.sxw, .sxc, .sxi, .sxd).

Замечание 1. Из pdf-файла текст извлекается в том случае, если данный файл имеет текстовый слой. Кириллический текст извлекается корректно, если имеет юникодную кодировку.

Замечание 2. Иногда под видом формата .doc скрываются файлы .rtf или даже просто .txt. Теперь из таких "замаскированных" файлов текст извлекается корректно.

[-] Исправлена ошибка извлечения картинок из документов doc, когда документ содержал ссылку на несуществующую картинку.

[~] Для опции "Правка - Вставить Ctrl+V" не работала опция отмены "Правка - Отменить Ctrl+Z".

[~] Поправка в функции WSeries() встроенного интерпретатора. Исключена ситуация, когда последний файл серии оказывался пустым "охвостком".

[~] Поправка в алгоритме извлечения текста из файлов epub.

[~] Опция поиска в файлах "Сервис - Библиотекарь" перемещена в состав опции "Правка - Найти/Заменить", вкладка "Библиотекарь". Кнопка "Искать!" выполняет поиск, при удаче активируется кнопка "Показать". Найденные результаты могут быть показаны в любое время, пока не будет выполнен новый поиск.
Любой из списка найденных файлов можно открыть в текущей вкладке главного окна. Допустимо групповое выделение и открытие файлов, во вкладках, начиная с текущей, и до вкладки "Статистика" (не включая ее).
Выражение для поиска при этом копируется во вкладку "Правка - Найти/Заменить - Найти", чтобы можно было посмотреть результат поиска в любом из найденных файлов.
Замечание. Открытие во вкладках главного окна найденных файлов - "затирает" ранее открытые файлы! Убедитесь, что они были заранее сохранены.
7.30.419
7.30.419-x64
[-] Исправленена ошибка опции "Формат - Шрифт", когда для rtf / dxt документов менялся шрифт всего документа, вместо выделенного текста.
[-] Исправлена ошибка опции "Формат - Литературный текст", возникавшая при попытке применить ее к пустому тексту.
[-] Исключены настройки фоновой картинки "растянуть" и "заполнить", как неактуальные. Теперь всегда используется режим "замостить".
[-] Исключена опция "Формат - Масштаб", как неактуальная.
[-] Исправлено ложное срабатывание проверки орфографии, когда орфо-словарь вообще не выбран в Панели словарей.
[-] Для функции Form() встроенного интерпретатора исправлена ошибка выхода за границы массива в компоненте Notes.
7.30.416
[~] Поправка в алгоритме деления текста на фрагменты,  исключающая возврат назад для текста, меньшего, чем заданный размер фрагмента и не имеющего заключительного EOL.
[~] Поправка в хеш-алгоритме словарных замен, исключающая повторное применение т.н. "циклических правил".
[+] Функция OpenDialog() встроенного интерпретатора Lua теперь имеет дополнительные параметры. OpenDialog(multiselect, title, init_dir, filter, filter_index).
[~] Улучшена процедура сортировки в алгоритме "Сервис - Статистика - Сравнение файлов".
[~] Улучшена процедура сортировки словаря в алгоритме словарных замен прямым перебором.
7.30.416-x64 [~] Поправка в алгоритме деления текста на фрагменты,  исключающая возврат назад для текста, меньшего, чем заданный размер фрагмента и не имеющего заключительного EOL.
[~] Поправка в хеш-алгоритме словарных замен,  исключающая повторное применение т.н. "циклических правил".
[+] Функция OpenDialog() встроенных интерпретаторов Lua и Puthon теперь имеет дополнительные параметры. OpenDialog(multiselect, title, init_dir, filter, filter_index).
[~] Поправка в функции WSelText() встроенного интерпретатора Lua.
[~] Улучшена процедура сортировки  в алгоритме "Сервис - Статистика - Сравнение файлов".
[~] Улучшена процедура сортировки словаря в алгоритме словарных замен прямым перебором.
7.30.414

7.30.414-x64
[+] В функции Form() встроенных интерпретаторов Lua и Python добавлен элемент Spin для ввода целых числовых значений в заданном диапазоне.
[~] Исключен пункт "Сервис - Общие настройки - Чтение - Целое число абзацев в блоке". Теперь размеры блоков текста никогда не превышают заданной длины. Если абзац длиннее заданного размера, то он автоматически делится на части.
[~] Размер читаемого блока по умолчанию (при первом запуске программы) принят 10000 символов.
[~] Если размер читаемого блока задан <= 1000 символов, то, при чтении вслух, в окне выделяется сразу весь читаемый блок.
[~] Если размер читаемого блока задан 0 < FragSize < 100, то автоматически устанавливается размер 100 символов. 0 - означает отсутствие ограничений (не рекомендуется).
7.30.411 [~] "Сервис - Орфография - Проверка словарей DIC" теперь определяет, как ошибочные, правила с одинаковыми левой и правой частью, кроме $ в начале правила.

[-] "Найти - Подсчитать" в режиме "Расширенный". Если хоть 1 символ в строке поиска был задан его кодом, то получался результат 0.

[~] Прочие небольшие поправки.
7.30.411-x64 [~] "Сервис - Орфография - Проверка словарей DIC" теперь определяет, как ошибочные, правила с одинаковыми левой и правой частью, кроме $ в начале правила.

[-] "Найти - Подсчитать" в режиме "Расширенный". Если хоть 1 символ в строке поиска был задан его кодом, то получался результат 0.

[~] Прочие небольшие поправки.
7.30.409 [-] Поправки в алгоритме извлечения текста из файлов *.epub

[+] Функция Form() встроенного интерпретатора теперь способна отображать еще один компонент: маркированный список.
7.30.409-x64 [-] Поправки в алгоритме извлечения текста из файлов *.epub
[+] Функция Form() встроенного интерпретатора Lua теперь способна отображать еще один компонент: маркированный список.
[+] Интерпретатору Python теперь доступен ряд функций  Demagog. Подробнее см. "Сервис - Статистика - Выполнить скрипт - Шпаргалка".
7.30.407

7.30.407 (x64)
[-] В 64-разрядной версии исправлена ошибка "Floating point division by zero", возникавшая при запуске некоторых питон-скриптов.

В обеих линейках версий:

[~] Небольшие поправки в работе опции "Файл - Записать аудио" в режиме записи сериала.

[~] Результаты выполнения опций:
  - Сервис - Показать применение правил;
  - Сервис - Статистика - Расхождение файлов;
  - Формат - Вставить примечания - показ найденных примечаний;
теперь отображаются на экране в отдельных окнах. Раньше они выводились в одно и то же окно, затирая друг друга.

[~] Небольшие изменения в дизайне окна "Правка - Найти / Заменить".
7.30.406
[+] "Сервис - Общие настройки... - Аудио" теперь позволяет добавить до 5 пользовательских аудиокодеков. Пользовательские кодеки могут находиться в любом месте на компьютере.

[+] "Сервис - Статистика - Выполнить скрипт - Из файла" теперь позволяет запускать скрипты не только из папки ..\Demagog\_Tests_, но также из любого места на компьютере.
7.30.405 [+] Добавлена функция для интерпретатора Lua: SaveDialog() - открывает диалог сохранения файла. Пример:

s = 'Hello, World!'
d = SaveDialog()
if d then SaveToFile({s},d) end


[~] В меню "Сервис - Общие настройки..." убрана вкладка "Картинки". Все ее опции перенесены во вкладку "Литературный текст".
7.30.405 (x64)
Release 2022.05.18
64-разрядная версия Demagog. Пока - экспериментальная.

[+] Добавлена поддержка скриптов на языке Python. По умолчанию используется встроенный (embedded) интерпретатор. Но, если на вашем компьютере уже имеется установленный Python, то можно подключиться к нему.

[+] Имеется возможность выполнять скрипты Lua из скриптов Python.

[+] Добавлена функция для интерпретатора Lua: SaveDialog() - открывает диалог сохранения файла.

[-] Исключена поддерка SAPI4, ввиду несовместимости с 64-bit Windows.

[~] В меню "Сервис - Общие настройки..." убрана вкладка "Картинки". Все ее опции перенесены во вкладку "Литературный текст".
7.30.403 [+] Функция встроенного интерпретатора table.duplicates(t ,dupall) - возвращает таблицу дубликатов из таблицы t. По умолчанию dupall = false -  считать дубликаты с первого повторяющегося элемента, иначе выводить ВСЕ повторяющиеся элементы.

[+] Функция встроенного интерпретатора Hash(s, n) - возвращает целый числовой хеш строки s  в диапазоне от 1 до n-1, где n - некоторое простое число. По умолчанию n = 1000003.

[~] Функция встроенного интерпретатора irontab(i) - возвращает дробный числовой хеш натурального числа i в диапазоне от 0 до 1. i не должно превышать 2^31-1.

[~] Поправки в алгоритме эвристического распознавания кодировки UTF-8 в русскоязычных текстах. Не срабатывал, когда в кириллическом тексте имелась значительная доля латиницы.

[~] Поправки в алгоритме опции "Сервис - Библиотекарь" - при поиске совпадений по ключевым словам пропускался первый файл из подходящих по типу.

[~] Поправки в опции "Файл - Недавние" - не срабатывали пункты меню для файлов, содержащих символы "амперсанд" в названии.

[~] Опции: "Сервис - Библиотекарь"; "Сервис - Преобразовать текст - Объединить тексты"; "Сервис - Преобразовать текст - Пакетный конвертер -> TXT" - теперь используют в своей работе невидимое окно -1 вместо 0-Статистика.
7.30.402 [~] Поправки в алгоритме извлечения текста из файлов fb2.

[+] Функция встроенного интерпретатора FileAvailable(f) - возвращает true, если файл f существует и не занят другим процессом.

[+] Функция встроенного интерпретатора RunPy(p, c, d, wait) - выполняет python-скрипт; p - полное имя интерпретатора python (например: C:\python39\python.exe); c - имя python-скрипта; d - строка параметров (если есть, иначе nil); wait = true / false (по умолчанию false) - ожидать ли нажатия любой клавиши по завершении (true необходимо, если скрипт получает/выводит данные, используя консоль).


[~] В опции "Закладки - Создать оглавление - Разбить", при разбитии текста на главы в последнем создаваемом файле удалялся последней символ.

[~] При открытии файла типа .epub не отображались имя автора и название текста.

[~] Функция встроенного интерпретатора Form() может создавать немодальное окно. См. "Выполнить скрипт - Шпаргалка", описание функции Form, примеры использования.

[~] Поправки в алгоритме IPA-транскрипции для русского языка: слова"карего", "завтрего", оканчивающиеся на "него", и буквосочетания "без ж...", "без сж...".

[~] Функция встроенного интерпретатора IsFolder теперь называется более логично: FolderExists. Старое название по-прежнему работоспособно, но упоминаний о нем в "Шпаргалке" больше нет.


[+] Скрипт для создания электронной книги в формате EPUB. (см. гл. 19. Сам себе Гутенберг...)

Замечание общего характера. Я больше не использую архиватор UPX для уменьшения размера исполняемого файла Demagog.exe. Это имело смысл для некоторого уменьшения размера дистрибутива программы, чтобы обегчить скачивание из Интернета. Но при современных скоростях Интернета это уже не актуально.
7.30.401 [~] При открытии/закрытии Панели словарей "ломались" строки текста в окне.
[~] Поправки в опции "Закладки - Создать оглавление".
[~] Поправки в алгоритме IPA-транскрипции для русского языка: буквосочетания "тч", "дч", "дщ", "нтщ".
[~] Поправки в опции "Закладки - Перейти по закладке - Разделить текст на файлы по закладкам".
[~] Поправки в опции "Закладки - Создать оглавление".
7.30.398 Небольшие поправки и улучшения.
[~] То, что файл во вкладке изменен при редактировании, теперь отражается не надписью в Строке состояния, а символом * в имени файла на заголовке окна программы.
[~] Поправки в алгоритме опции "Правка - Текст - Сортировка строк".
[~] Поправка в функции встроенного интерпретатора: Frequency, DosToAnsi, AnsiToDos.
[~] Работа опции "Сервис - Статистика - Расхождение" теперь отображается в Строке состояния, и может быть прервана горячей клавишей Break.
[+] Функции встроенного интерпретатора: MatchAll, table.unique, StrFromFile, StrToFile, Restart.
7.30.397 [~] Небольшие поправки и улучшения. В том числе:
- функции встроенного интерпретатора Input() и Menu() теперь позволяют менять размер шрифта;
- макет формы ввода для функции Form() теперь задается в виде таблицы Lua (макеты прежнего текстового формата также будут работать).
[+] Функции встроенного интерпретатора FileNavigator и Execute.
7.30.395 [-] Исправлена ошибка в опции "Формат - Литературный текст" из-за которой сделанные изменения не отражались в тексте.
[~] Небольшие поправки в алгоритме МФА-транскрипции для русского языка.
7.30.393 [~] Поправки в алгоритме МФА-транскрипции для русского языка.

[+] Добавлена опция "Сервис - Общие настройки... - Чтение - Абзацный отступ в измененном тексте", по умолчанию 0.

[~] Изменения в параметрах функций встроенного интерпретатора Menu(caption, items, ind, width) и Input(title, prompt, width, ratio). width - ширина окна в пикселях, по умолчанию 686; ratio - соотношение между шириной колонки названий и колонки значений, по умолчанию 0.5; при ratio = 0 будет показана только вторая колонка формы ввода данных.

[+] Функция встроенного интерпретатора Form(layout) - выводит на экран форму ввода данных в соответствии с макетом layout. Описание содержится в "Сервис - Статистика - Выполнить скрипт - Шпаргалка".    
7.30.390 [~] Небольшие поправки и улучшения,
[+] в т.ч. функция встроенного интерпретатора Sort(t, sorttype, utf8) - возвращает таблицу, соответствующую отсортированной таблице t; тип сортировки sorttype задается так же, как в WSort(); utf8 = true означает, что таблица t в кодировке utf8, по умолчанию false.
7.30.389 [~] Поправки в алгоритме МФА-транскрипции для русского языка.

[~] Функции встроенного интерпретатора AnsiToUtf8 и Utf8ToAnsi теперь работают значительно бустрее.

[+] Функция встроенного интерпретатора LoadText(f) - возвращает текст из файла f в виде ansi-строки. Файл может быть в ansi-кодировке или в юникодной со спецификацией: Unicode, UnicodeBE, UTF-8. Если файл имеет кодировку UTF-8 без спецификации, то будет возвращена кодированная ansi-строка.

[+] Функция встроенного интерпретатора WSort(i, sorttype) - сортирует строки текста во вкладке i; параметр sorttype указывает тип сортировки, по умолчанию stNormal. Поддерживаются следующие типы сортировки:
stNormal - обычная, по алфавиту
stNoDup - без дубликатов
stDupOnly - только дубликаты
stUniqOnly - только уникальные
stInverse - инверсная
stLen - по возрастанию длины
stLenDes - по убыванию длины
stNum - цифровая по возрастанию
stNumDes - цифровая по убыванию
stDic - сортировка словарей dic по убыванию длин левых частей правил ($ и * в подсчет длины не входят)
Замечание. Цифровая сортировка ведется по числовому содержимому строки до первого знака табуляции, если он есть, иначе до конца строки.
7.30.388 [~] Небольшие поправки и улучшения,
[+] в т.ч. функция встроенного интерпретатора WSpeak(i, wait) - читает вслух текст из вкладки i; wait = true приостанавливает работу скрипта до завершения чтения, по умолчанию false.
7.30.387 [~] Усовершенствован дизайн окна "Правка - Транскрипция". Для русского языка каждому символу МФА сопоставлены примеры произношения: в начале, середине и конце слова.

[~] Небольшие поправки в алгоритме МФА-транскрипции для русского языка.

[~] Дополнительный параметр в функциях встроенного интерпретатора:
WText(i, utf8) - когда utf8 = true, то возвращается текст в виде строки в кодировке UTF-8 без спецификации.
WSelText(i, z, utf8) - когда utf8 = true, то параметр z должен быть строкой UTF-8 без спецификации.
WNew(i, newtext, mode, utf8) - когда utf8 = true, то параметр newtext должен быть строкой UTF-8 без спецификации.
Во всех упомянутых выше функциях по умолчанию utf8 = false.

[+] Функция встроенного интерпретатора IPAtoXS(s) - переводит транскрипцию МФА в "машиночитаемую" транскрипцию X-SAMPA. Параметр s должен быть строкой в кодировке UTF-8 без спецификации. Пример:
print(IPAtoXS(RuIPA('Эврика'))). Результат: "Evr_jIk@
7.30.386 [+] Функция встроенного интерпретатора table.sortdig(lines, mode) - сортирует таблицу строк lines, по их цифровому содержимому, по возрастанию, если mode = true и по убыванию, если mode = false или nil. Цифровое содержимое в строке ищется до первого символа табуляции (если он есть).

[+] "Правка - Транскрипция". Когда выбран язык голосового движка "Russian", доступны две кнопки получения транскрипции: "RU -> IPA" и "IPA -> UPS". Для получения транскрипции IPA (Международный фонетический алфавит) русское слово/словосочетание необходимо вводить в нижнем регистре, а ударные гласные в нем обозначать верхним регистром! Пример: сегОдня прекрАсный дЕнь.

[+] Функция встроенного интерпретатора RuIPA(s) - для кириллической строки s возвращает ее транскрипцию в IPA в виде строки в кодировке UTF-8 без спецификации. Пример работы с такими строками показан в "Статистика - Выполнить скрипт - Шпаргалка - Пример использования функций RuIPA и RuUPS".

[+] Функция встроенного интерпретатора RuUPS(s) - для кириллической строки s возвращает ее транскрипцию в UPS (Microsoft Universal Phone Set).
7.30.385 [+] "Сервис - Общие настройки... - Прочее - Спрашивать разрешения на вставку примечаний". По умолчанию: включено.

[+] Переменная окружения Notes_Ask для функции встроенного интерпретатора Settings. Пример:

-- при открытии документа, имеющиеся в нем примечания
-- автоматически переносятся в текст, и разрешения на это
-- программа не спрашивает
o = {}
o.Notes_Auto = true
o.Notes_Ask = false
Settings(o)
WOpen(1)

[~] Функция встроенного интерпретатора WSel(i, pos, len) - выделяет фрагмент текста во вкладке i с позиции pos длиной len (по умолчанию 0); и возвращает pos и len; WSel(i, pos) устанавливает текстовый курсор в позицию pos, возвращая pos и 0; WSel(i) просто возвращает текущую позицию курсора и длину выделенного (или 0).
7.30.384 [~] "Сервис - Показать применение правил Ctrl+T" и "Сервис - Статистика - Словарные замены" - список примененных правил состоит из двух столбцов: количество срабатываний правила и собственно правило. Разделитель - знак табуляции.

[~] "Правка - Текст - Сортировка строк - Цифровая..." - если строка сначала содержит цифры, за которыми следует знак табуляции, то при сортировке принимается во внимание только такой "заголовочный номер". Если этот номер отсутствует, то по-прежнему сортировка проводится по всем цифрам, обнаруженным в строке.
Замечание. Это можно использовать для сортировки отчета о применении правил по частоте, см. выше.

[+] Функция встроенного интерпретатора WStat(i, j, k, dname, gauge) - подсчитывает статистику замен во вкладке i по словарю dicname, измененный текст помещает во вкладку j, список примененных правил во вкладку k; если j = k, то оба результата совмещаются в одной вкладке; gauger = true/false - показывать ли индикатор процесса (по умолчанию true).
7.30.383 [+] Функция встроенного интерпретатора ParagsLimitation(text, limit) - приведение абзацев в тексте к размеру, не превышающему заданный предел; cлишком большие абзацы делятся при этом на меньшие - по знакам конца предложений или знакам препинания ( в т.ч. / и \ ), или в крайнем случае - по пробелам между словами. (Идея и первоначальная разработка: tonio_k).

-- пример использования
z = os.clock()
s = WText(1)
s = ParagsLimitation(s,500)
-- вставляем двойные пустые строки для наглядности разбиения абзацев
s = string.gsub(s,'\r','\r\r')
print('время выполнения, сек: '..(os.clock()-z))
print()
print(s)

[+] Функция встроенного интерпретатора BreakKeyName() - имя горячей клавиши, назначенной в Настройках для прерывания длительных процессов; если не назначена, то вернет nil.

[~] Функция встроенного интерпретатора LuaRepl(s, r, gauge) - теперь принимает список правил r вида: шаблон=замена.

[+] Для разделения левой и правой части правила произношения в словарях dic и rex, наряду со стандартным разделителем = (знак равенства) допускается использовать символ с кодом 6. Его можно вставить через "Правка - Найти/Заменить - Замена", режим замены: "Расширенный".
Cтрока для поиска: =
Строка для замены: #6

[~] "Сервис - Общие настройки... - Чтение - Читать текст последовательными блоками с количеством символов ..." Если размер блока указан в пределах от 1 до 256 символов, то при чтении он сразу целиком выделяется на экране. Это увеличивает точность слежения за чтением.
Замечание. Размер блока = 1 означает чтение отдельными абзацами или предложениями. В зависимости от того, отмечен ли пункт "Целое число абзацев в блоке".

[+] "Сервис - Статистика - Выполнить скрипт - Шпаргалка". Краткое руководство по встроенному интерпретатору. Вызывается также кнопкой со значком интеграла на Панели инструментов.

[-] Иногда после выполнения скрипта и выдачи результатов в окно Статистики, установленный в программе масштаб текста самопроизвольно сбрасывался на 100.

Функции встроеннго интерпретатора:

[-] IsFolder(s) возвращала true / nil вместо true / false.

[-] WFilter(i, j, dicnsme, gauger) не реагировала на параметр gauger.

[+] AnsiToDos(s), DosToAnsi(s), table.sortlen(lines, mode).

[~] CyrSort(s) переименована в table.sortcyr(s).
7.30.382 [~] Параметр Encoder_Param = '' в функции встроенного интерпретатора Settings() означает отказ от конвертации аудиофайла. Пример:

-- отменить конвертацию аудиофайла
o = {}; o.Encoder_Param = ''; Settings(o)
WAudio(1) 
-- получим wav-файл для текста в окне 1


[-] Опция "Сервис - Общие настройки... - Прочее - Вставлять примечания в текст при открытии файла" не всегда срабатывала при открытии файла через меню "Файл - Недавние".

[-] Опции "Найти - Подсчитать" и "Найти - Все подходящие" в режиме Lua-шаблона не работали, когда в поле поиска был указан Lua-скрипт.

[+] Функция встроенного интерпретатора CyrSort(lines, dupignore) - сортировка таблицы кириллических строк lines, без учета регистра и игнорируя различие "е/ё"; dupignore - игнорировать ли дубликаты, по умолчанию false. В отсортированном списке строки, совпадающие с точностью до "е/ё", будут стоять рядом.

[~] "Правка - Найти/Заменить - Заменить все - Шаблон REX" не могла обработать сплошной (не разделенный на слова) текст длиннее 512 символов. Это ограничение теперь поднято до 32767 символов.

[~] Небольшие поправки в подсветке омографов в тексте.

[~] "Формат - Масштаб..." запоминает выбранный масштаб текста в файле настроек $.cfg

[+] "Правка - Найти / Заменить - Шаблон Lua" - в качестве шаблона поиска может быть однострочный скрипт, возвращающий строку - шаблон поиска. Признаком скрипта служит символ @ в начале. Пример шаблона поиска больших абзацев в тексте (> 1000 символов):
@return string.rep('[^\\r]',1000)..'[^\\r]+'


[~] До 15 скриптов (вместо прежних 9) могут быть закреплены за функциональными клавишами: Shift+Ctrl+1 .. 9 A .. F

[~] Дополнение в функции встроенного интепретатора WSeries(i, folder, fragsize, parag, header, ender, startnum) - при parag = true делящей текст в окне i на фрагменты по абзацам, а при parag = false по предложениям. Поскольку фрагмент заканчивается добавлением абзаца/предложения, на котором превышается fragsize, то фрагменты всегда получаются чуть больше заданного размера.
    Теперь, при parag =
nil текст делится на фрагменты по абзацам не превышая предел. Абзацы, б
ольшие чем fragsize, дополнительно делятся на части по символам . ! ? … ; ,

[+] "Сервис - Орфография - Проверка словарей Dic" воспринимает, как ошибочные, так же и правила вида: $шаблон=$замена.
7.30.381 [+] LuaMatch(s, mask, pos) - функция встроенного интерпретатора, ищет совпадение в строке s по шаблону mask с позиции pos (по умолчанию 1); возвращает совпавший фрагмент и позицию его начала; если не найдено, то возвращает '', 0.

[~] Улучшена работа опции "Формат - Литературный текст". Прежде она не всегда срабатывала на текстах, вставленных из буфера обмена.

[+] Опция "Найти / Заменить" наравне с шаблонами dic и rex может теперь работать и с шаблонами Lua.

[+] LuaRepl(s,p) - функция встроенного интерпретатора, замены в строке s по Lua-правилу p вида: шаблон_поиска=строка_замены.

[~] WNew(i, newtext, mode) - функция встроенного интерпретатора, теперь имеет третий параметр. При mode = true (по умолчанию) вкладка i становится свободной от загруженных файлов; при mode = false ранее загруженный файл остается во вкладке i, но всё его прежнее содержимое стирается.
7.30.380 [~] Окно опции "Речь - Мультилингва - Настроить..." теперь немодальное.

Функции встроенного интерпретатора:

[~] Voice(ShortName) - кроме полного имени голоса, скорости и тембра, возвращает также (для SAPI5) громкость в % от системной.

[~] SetVoice(ShortName, Rate, Pitch, Volume) - кроме устанавки в Панели инструментов голоса по его краткому имени и заполнения полей скорости и тембра заданными значениями, может также (для SAPI5) установить громкость в % от системной.

[~] WSeries(i, folder, fragsize, parag, header, ender, startnum) - создает сериал из документа, загруженного во вкладку i, и возвращает количество созданных файлов.
7.30.379 Функции встроенного интерпретатора:

[+] Voice(ShortName) - возвращает полное имя голоса по его краткому имени, или nil, если подходящего голоса не найдено; если имя не указано, то возвращается полное имя голоса, указанного в Панели инструментов.

[+] SetVoice(ShortName, Rate, Pitch) - устанавливает в Панели инструментов голос по его краткому имени, и заполняет поля скорости и тембра заданными значениями (по умолчанию 0); если подходящий голос не найден, то никаких действий не производится.

-- попытка настроить голос Microsoft Pavel Mobile - Russian
if Voice('Pav') then
    SetVoice('Pav')
else
    ShowMessage('Этот голос не установлен на компьютере!')
end

[+] VoiceList() - возвращает список голосов, установленных на компьютере.

a = VoiceList()
for k, v in pairs(a) do ShowMessage(k..' '..v) end

[+] Markup(s, ru, en) - возвращает строку с разметкой Мультилингвы для русско-английского текста s; параметры ru / en это строки вида: 'КраткоеИмяГолоса,скорость,тембр,громкость'. Скорость и тембр от -10 до 10, громкость от 0 до 100. По умолчанию: 0,0,100. В процессе своей работы функция Markup проверяет: не был ли текст s размечен раньше, и удаляет старую разметку перед тем как сделать ее заново.

ru = 'Tatyana,0,0,100'
en = 'Jennifer,0,0,100'
s = 'This is a table. Это стол.'
snew = Markup(s, ru, en)
print(snew)
-- Результат:
-- {{Jennifer',0,0,100}}This is a table. {{Tatyana,0,0,100}}Это стол.

[+] WMarkup(i, j, ru, en) - аналогична функции Markup, но размечается текст во вкладке i, а результат помещается во вкладку j.

[+] DelMarkup(s) - удаляет русско-английскую разметку из текста s.

[+] WDelMarkup(i, j) - аналогична функции DelMarkup, но удаляется разметка из текста во вкладке i, результат помещается во вкладку j.

s = '{{Jennifer,0,0,100}}This is a table. {{Tatyana,0,0,100}}Это стол.'
snew = DelMarkup(s)
print(snew)
-- Результат:
-- This is a table. Это стол.

[~] Опция "Речь - Билингва" объединена с опцией "Речь - Мультилингва" и реализована, как частный случай Мультилингвы: для русского и английского языков. Вместо русского можно задавать голоса для следующих кириллических языков: украинского, белорусского, сербского, македонского, болгарского.

[~] Перечень настроек, доступных для изменения функцией Settings, дополнен параметром  Reading_Multilingva - включить / выключить многоязычный режим. См. ..\_Tests_\argo-interpreter.htm.

-- включить режим Мультилингвы
o = {}; o.Reading_Multilingva = true; Settings(o)
-- записать аудио для текста с разметкой Мультилингвы во вкладке 5
WAudio(5)

[~] rtf-файлы открываются, "как есть", без автоматического преобразования в плоский текст.
7.30.378 [+] "Сервис - Общие настройки - Прочее - Шаблон вставки примечаний".

[-] В опции "Найти / Заменить" невозможно было запомнить шаблон замены, если строка замены была пустой.

[~] При открытии файла типа .fb2 теперь: игнорируется тег <keywords> вместе с его содержимым, а также правильно обрабатывается символ  &laguo; - открывающая двойная угловая кавычка.

[~] "Формат - Вставить примечания" для документов типа fb2 вместо эвристического алгоритма использует анализ xml-разметки документа.

[~] Включенная подсветка омографов обновляется "на лету" при редактировании словаря омографов.

[-] Устранен (иногда возникавший) эффект самопроизвольного скроллинга подсвеченного текста.

[~] "Сервис - Общие настройки..." - усовершенствован контроль ввода числовых значений.

[+] Опция вызова из командной строки: \a "имя скрипта.lua" Например:

chcp 1251
Demagog.exe "d:\Books\Пророк.txt" /a "d:\Demagog\_Tests_\YaTTS.lua" /m /q

Demagog будет запущен свернутым в значок, и откроет в первом свободном окне или окне Статистики файл "Пророк.txt". Это окно станет активным. А скрипт YaTTS.lua отправит текст из активного окна сервису Яндекс, и получит обратно готовый аудиофайл. По окончании работы Demagog автоматически закроется.

[~] В опции "Сервис - Преобразовать текст - Пакетный конвертер PLS -> DIC / HMG", теперь учитывается, что одному тегу phoneme могут предшествовать несколько тегов grapheme.

[~] Опция "Формат - Шрифт..." теперь срабатывает быстрее.

[~] Перечень настроек, доступных для изменения функцией Settings, дополнен параметром File_Encoding, см. ..\_Tests_\argo-interpreter.htm. Пример:

o = {}
o.File_Encoding = feUTF8
Settings(o)
folder = [[d:\~tmp\etc\gen]]
tag = [[<phoneme ph="%2"/>]]
-- результат будет в кодировке utf-8
PlsToDic([[d:\Demagog\work\Dopolneniya.pls]], folder, false, tag)

[~] В ..\_Tests_\argo-interpreter.htm наконец-то указано, что функция LoadFromFile(fname, allformats) при отсутствующем (или равном false) втором параметре, может побайтно загружать не только файлы в кодировке ansi, но и в кодировке utf-8.

[~] WordFrequency(s, gauger) - добавлен второй параметр: показывать индикатор процесса, по умолчанию true.

[~] uwarn(s) - определяет кодировку строки s и возвращает число: 0 - кодировка не распознана; 1 - ANSI; 2 - Unicode; 3 - Unicode Big Endian; 4 - UTF-8. Этим числам соответствуют предопределенные константы: feUnknown, feANSI, feUnocode, feUnicodeBE, feUtf8.

[+] Функции встроенного интерпретатора AnsiToUtf8(s, hasbom), Utf8ToAnsi(s), CancelScript(), table.save(t, f), table.load(f)
7.30.377 [~] Изменения в Настройках. Опция "Сервис - Общие настройки - Чтение - Правила из dic-словарей применяются в порядке убывания длины" теперь означает ровно то, что в ней написано. Для переключения на "быстрый алгоритм" словарных замен служит новая опция: "Хешировать dic-словари". По умолчанию обе опции включены.

[~] Изменения в функциях встроенного интерпретатора:
WFilter(i, j, dicname, gauger), DicRepl(s, p, gauger), RexRepl(s, p, gauger) - gauger = true/false - показывать ли индикатор процесса, по умолчанию true.
Т.о. эти функции больше не имеют параметра для переключения между "быстрым алгоритмом и "прямым перебором". (Всё равно, для rex-словарей этот параметр не имел смысла). Указанное переключение теперь производится с помощью функции FastDic(), см. далее.

[+] StatusMessage(c) - функция встроенного интерпретатора - вывод сообщения в Строку состояния. Пример:

-- тест вывода в строку состояния
for i = 1,100 do
    StatusMessage('Выполнено '..i..'%')
    pause(0.1)
end
StatusMessage('')
print('Ура!')

[+] Settings(o) - функция встроенного интерпретатора, изменение настроек программы, указанных в списке o; действует до завершения скрипта. Полный перечень настроек, доступных для изменения, приведен в файле ..\_Tests_\argo-interpreter.htm. Пример:

o = {}  -- задать изменения настроек программы
o.Reading_BlockSize = 40000
o.Reading_HashAlgorithm = false
Settings(o)  -- применить новые настройки
WFilter(1,0,HomeFolder('dic')..'Michelangelo.dic',true)

[+] FastDic(hashalg, ordered) - установка значений настроек Reading_HashAlgorithm и Reading_OrderedRules. Примеры:

-- применять быстрый алгоритм с сортировкой
-- подходящих правил по убыванию длины

FastDic(true,true)
WFilter(1,0,HomeFolder('dic')..'Michelangelo.dic')

-- применять алгоритм прямого перебора
-- в порядке следования правил в словаре

FastDic(false,false)
WFilter(1,0,HomeFolder('dic')..'Michelangelo.dic')

[-] Исправлена ошибка в опции "Сервис - Статистика - Сравнение файлов - Расхождение", когда поиск расхождений сразу прерывался на сообщении "Не удалось выполнить".

[-] Не всегда срабатывала настройка "Сервис - Общие настройки... - Литературный текст - Абзацный отступ".

[-] При выполнении скрипта из меню, команда печати print() показывала результат в окне Статистики без указания имени выполненного скрипта.
7.29.376 [-] Исправлена ошибка, когда при множественном открытии файлов не срабатывали настройки "Вставлять примечания в текст при открытии файла", и "Литературный текст - При открытии файла".

[-] Исправлена работа опции "Правка - Транскрипция".

[-] Исправлена работа опции "Правка - Поиск/Замена - Заменить все" для режимов поиска "Шаблон DIC" и "Шаблон REX".

[~] Улучшена работа опции "Сервис - Преобразовать текст - Пакетный конвертер PLS -> DIC / HMG". Сконвертированные правила считались дубликатами по совпадению транскрипции, вместо совпадения всего правила.

[+] "Сервис - Библиотекарь" - найденные файлы можно открыть одновременно, выделив нужные в итоговом меню.

[+] Функция встроенного интерпретатора WNotes(i) - проверка наличия примечаний и комментариев в тексте, открытом во вкладке i.

[+] Функция встроенного интерпретатора WordFrequency(s) - подсчет частоты слов в тексте s.
7.29.375 [~] Через диалог открытия файлов, или перетаскиванием можно открыть одновременно до 16 файлов. Первый из отмеченных файлов открывается в текущей вкладке. Остальные в следующих, потом с начала.

[~] Улучшено слежение за чтением, когда в Настройках указано "Целое число абзацев в блоке".
7.29.374 [~] Если указано "Сервис - Общие -настройки... - Прочее - Вставлять примечания в текст при открытии файла", то при открытии файла выдается список найденных примечаний. При этом программа ожидает решения пользователя: переносить примечания в текст или нет.

[~] Изменен интерфейс Окна шаблонов в опции "Правка - Найти/Заменить - Шаблоны". Доступно редактирование списка непосредственно в Окне шаблонов. Если в качестве префикса - типа поиска указан символ # то вся строка будет воспринята, как комментарий.

[-] Исправлена ошибка в работе опции "Показать применение правил Ctrl+T". Она возникала при проверке применения правил из rex-словарей.
7.29.373 [+] "Сервис - Статистика - Измененный текст" - величина абзацного отступа берется из "Формат - Литературный текст - Абзацный отступ".

[-] "Сервис - Преобразовать текст - Пакетная запись аудио". Когда в Настройках не стоял запрос папки назначения, то аудиофайлы сохранялись в корень папки Demagog, вместо исходной папки с текстами.

[-] "Правка - Найти/Заменить" - исправления в режиме "Расширенный".

[-] "Правка - Найти/Заменить - Заменить все" иногда происходило зависание при заменах по шаблону rex.

[-] Исправлена ошибка в функции встроенного интерпретатора: WLog().

[~] Функция встроенного интерпретатора Graph() допускает многострочные подписи под графиками. Для этого в строке-подписи используется символ переноса \r

[~] Обновлен скрипт Graphics demo.lua

[~] Небольшие поправки в библиотеке встроенного интерпретатора: grafica.lua

[+] Функция встроенного интерпретатора: Cancel(). Возвращает true если была нажата глобальная клавиша прерывания длительных процессов (Break по умолчанию).

[+] Функция встроенного интерпретатора: ForgotCancel(). Сбрасывает флаг нажатия пользователем глобальной клавиши Break.

[+] Функция встроенного интерпретатора: Headline(name) - изменяет заголовок окна Инфографики, по умолчанию: 'Инфографика'.
7.29.372 [~] В опции "Сервис - Статистика - Выполнить скрипт - Из файла  Ctrl+F2" доступна навигация не только в корне папки скриптов _Tests_, но и по вложенным папкам (если таковые имеются).
7.29.371 [-] Исправлена ошибка функции встроенного интерпретатора: WFilter().
7.29.369 [~] "Сервис - Статистика - Сравнение Файлов - Расхождение" теперь позволяет сравнивать не только файлы на диске, но и содержимое вкладок текстового редактора.
[~] Навигация в окне, где показываются результаты сравнения, теперь выполняется не только щелчком мыши, но и клавиатурными стрелками "вправо" / "влево".
[-] Исправлена небольшая ошибка формирования измененного текста в режиме быстрого алгоритма словарных замен.
7.29.368 [~] Изменения в опции "Сервис - Статистика - Сравнение Файлов - Точка расхождения...":

Переименована в "Расхождение...". Теперь находятся сразу все позиции расхождений и выдаются их номера. Click на номере позиции показывает расхождение обоих файлов в контексте.

Процесс поиска расхождений можно прервать клавишей Break.

Замечание. Оба текста "нормализуются" перед сравнением, путем удаления лишних пробелов и табуляций. Также удаляются пустые строки. Невидимые "символы абзацев" заменяются на ¶ для визуального восприятия.
Показанный контекст или его фрагменты можно копировать в окно "Найти / Заменить Ctrl+F" для поиска / исправления в текстах-оригиналах.

[~]Изменения в составе функций встроенного интерпретатора:

WNew, WOpen, WSave, WAdd, WText, WFilter допускают указание в качестве номера вкладки значения -1; это внутренний буфер памяти, его можно использовать для хранения каких-либо промежуточных результатов.

Исключены: BufNew, BufOpen, BufAdd.

WAdd при указании только двух параметров теперь корректно различает тип 2-го параметра: строка или номер вкладки.

Обновлен скрипт Collection of texts.lua
7.29.367 [~] Функция встроенного интерпретатора IgnoreDicPan() переименована в ForbidTextAutochange(). Отменяет реакцию функций WAudio, CSpeak, StrSpeak на словари, активированные в Панели словарей. Отменяет (если было задано в Настройках) автоматическое выполнение опций: "Вставлять примечания в текст при открытии файла", "Эвристическое распознавание кодировки русскоязычного текста", "Придать тексту аккуратный вид при открытии файла". Один раз запущенная, действует до окончания скрипта.

[~] Опция "Сервис - Статистика - Необработанные омографы" может выдавать результат как отсортированным по алфавиту, так и в порядке следования омографов в тексте.

[~] Опции "Формат - Литературный текст" и "Формат - Вставить примечания" недоступны для документов типа словарей или скриптов.

[+] Добавлена функция встроенного интерпретатора table.sortuniq(t). Сортирует таблицу t, удаляя дубликаты.
7.29.366 [-] Исправлена ошибка в функции встроенного интерпретатора: Input(). Неправильно работал ввод строк, содержащих символ |

[+] Добавлена функция встроенного интерпретатора: PlsToDic(f, folder, casesens, tag) - преобразование файла фонетической разметки .pls в словарь типа .dic или.hmg. Тип результата: .dic / .hmg определяется автоматически, исходя из структуры pls-файла.

[~] Улучшена процедура записи аудио под SAPI4.

[-] Исправлена ошибка в функции встроенного интерпретатора: WAdd()

[-] Исправлена ошибка в скрипте Pronunciation adjustment.lua

[~] Обновления в файле справки argo-interpreter.htm
7.29.363 [-] В версиях Windows младше 10 обновление фоновой картинки срабатывало не сразу, а при переходе в другое окно.

[-] При отключении словарей .orfo / .hmg в Панели словарей (или удалении их вручную из папки dic), кнопки подсветки орфографии / омографов становились недоступными. В результате, невозможно было выключить ранее включенный режим подсветки, и он продолжал выполняться "вхолостую".

[+] Расположение окон "Правка - Найти / Заменить" и "Правка - Транскрипция" запоминается в настройках.

[+] Можно получать результаты работы скрипта в наглядной форме, в виде графиков и диаграмм. Описание в ..\_Tests_\argo_interpreter.htm, раздел "3. Графическая библиотека Demagog".
7.29.362
[~] Ряд пунктов меню "Сервис" объединен в субменю под общим заголовком "Преобразовать текст".

[~] Небольшие поправки в интерфейсе опции "Правка - Транскрипция".

[~] Настройка "скриптов по умолчанию" нуждалась в указании полных путей к скриптам. Теперь можно указывать относительные пути, если скрипты находятся в домашней папке Demagog. Например: _Tests_\simple.lua

[-] Функция встроенного интерпретатора Menu() выдавала ошибку при вызове с пустым списком пунктов, вместо того, чтобы просто показать пустое меню.

[~] "Сервис - Общие настройки... - Аудио". Указанные пользователем параметры Custom Encoder не исчезают бесследно, после выбора какого-то стандартного кодека, а сохраняются для дальнейшего использования, когда Custom Encoder будет выбран вновь.

[~] "Сервис - Общие настройки... - Аудио". Некоторые утилиты-кодеки (или bat-файлы, содержащие обращения к ним) требуют указания полного пути, даже если находятся в домашней папке Demagog. Теперь можно записывать имя Custom Encoder с префиксом %~ означающим домашнюю папку Demagog. Например: %~conv.bat

Изменения во встроенном интерпретаторе:

[+] RexRepl(s, r) - замены в строке s по массиву rex-правил r.

[+] DicRepl(s, r, fastalg, fancy) - замены в строке s по массиву dic-правил r; fastalg = true/false - использовать быстрый алгоритм или прямой перебор, по умолчанию true; fancy = true/false - учитывать ли символы абзацев в результирующей строке, по умолчанию true.

[+] Возможность выполнять до 9 скриптов "по умолчанию", через горячие клавиши Shift+Ctrl+1 .. Shift+Ctrl+9. Настройка в "Сервис - Статистика - Выполнить скрипт - По умолчанию".

[-] Input(...) - если в форме ввода была только 1 строка и та пустая, то возвращалось значение {} вместо правильного {''}
Кроме того, закрытие формы ввода крестиком было эквивалентно нажатию "OK" вместо "Отменить".

[-] WText(i) - если во вкладке i фрагмент текста был выделен, то возвращался только он вместо всего текста.

[~] WSelText(i, z) - заменяет выделенный текст во вкладке i содержимым строки z; WSelText(i) просто возвращает выделенный текст из вкладки i

[-] LoadFromFile(f, allformats) - при значении allformats = true загруженный текст терял все пустые строки.

[+] Exists(f) - существует ли файл или папка f. Возвращает true/false и код ошибки.

[+] IsFolder(f) - существует ли папка f.

[+] DriveLetters() - список дисков, доступных на компьютере.
7.29.361 Изменения во встроенном интерпретаторе:

[+] RexMatch(s, mask, pos) - ищет совпадение в строке s по регулярному выражению mask с начальной позиции pos (по умолчанию 1); возвращает совпавший фрагмент и позицию его начала. Если не найдено, то возвращает '', 0.

[+] DicMatch(s, mask, pos) - ищет совпадение в строке s по dic-выражению mask с начальной позиции pos (по умолчанию 1); возвращает совпавший фрагмент и позицию его начала. Если не найдено, то возвращает '', 0.

[+] BufNew(s) - очистить внутренний буфер (ВБ) и заполнить его строкой s; по умолчанию s = ''.

[+] BufOpen(i) - показать содержимое ВБ во вкладке i.

[+] BufAdd(i, s) - добавить к содержимому ВБ текст из вкладки i с разделителем s; по умолчанию s = ''. Если номер вкладки не указан, то просто добавляется строка s.

[~] FilterAndAudioToAll(folder, mask, diclist, remsource) - словарные замены теперь применяются к каждому файлу на его временной копии. Так  обеспечивается сохранность исходных текстов в случае нештатного прерывания программы. (Спасибо tonio_k).

[+] SecondsToClock(seconds) - переводит секунды в строку вида чч:мм:сс. (Спасибо balaamster).

[~] Скрипт Collection of texts.lua для своей работы теперь использует только окно Статистики.
7.29.360 Изменения в опциях:

[~] "Сервис - Библиотекарь" - не видел файлов с длинными полными именами.

Изменения во встроенном интерпретаторе:

[+] SplitFileName(f) - возвращает список из 3-х строк: путь, краткое имя без пути и расширения, расширение.

[+] Fragments(s, fragsize, parag) - делит текст на фрагменты с заданным количеством символов; необязательный параметр parag = true - фрагменты собираются из абзацев, иначе - из предложений.

[+] WSeries(i, folder, fragsize, parag, header, ender, startnum) - создает сериал из документа, загруженного во вкладку i; folder - папка назначения; fragsize - размер серии в символах; parag = true - набор фрагментов по абзацам, false - по предложениям; по умолчанию false; header - заголовочная фраза серии, в которой должен содержаться маркер вставки номера %d; ender - последняя фраза серии, в которой должен содержаться маркер вставки номера %d; startnum - начальный номер серии, по умолчанию 1.

[+] FilterToAll(folder, mask, diclist) - применяет к файлам в папке folder, имена которых отвечают маске mask, словари, перечисленные в списке diclist; возвращает 2 значения: количество обработанных файлов и количество примененных словарей. Список словарей задается в виде 2-мерной таблицы: diclist = { {'словарь1', mode'}, {'словарь2', mode}, ... {'словарьN', mode} }; mode = true, если dic-словарь применяется по быстрому алгоритму и false, если прямым перебором. По умолчанию: true. Допускается упрощенная запись списка словарей: diclist = {'словарь1', ... {'словарьX'}, ... } - т.е. в фигурные скобки заключается только имя dic-словаря, применяемого прямым перебором.

[+] AudioToAll(folder, mask, remsource) - создать аудио для всех файлов в папке folder, отвечающих маске mask; если remsource = true, то исходные текстовые файлы будут удалены. Возвращает количество аудиофайлов.

[+] FilterAndAudioToAll(folder, mask, diclist, remsource) - применяет словари из списка diclist ко всем файлам в папке folder, отвечающим маске mask; и записывает для них аудио. Если remsource = true, то исходные текстовые файлы удаляются. (Спасибо tonio_k)

[+] ShutdownDialog(ind) - отображает запрос о возможности выключения компьютера; ind = 1 или 2 - номер выделенного пункта, по умолчанию 1. Возвращает true или false, в завистмости от ответа пользователя.

[+] IgnoreDicPan() - отменяет реакцию функций WAudio, CSpeak, StrSpeak на словари, активированные в Панели словарей.  Один раз запущенная, действует до окончания скрипта.

[+] WLog(s) - добавляет во вкладку Статистики строку s или пустую строку, если параметр не указан. (Спасибо balaamster).

[+] Sound() - выдает звуковой сигнал.

[~] Menu(caption, items, ind) - добавлен параметр ind - номер выделенного пункта, по умолчанию 1.

[~] WAudio() больше не выдает звуковой сигнал по завершении работы. "Финальный звонок" можно задать отдельно функцией Sound().

[~] WText(i) возвращает ansi-строку, содержащую текст (или его выделенный фрагмент) из вкладки i.

[-] WSpeak(i) - исключена, как неактуальная.
7.29.358 Изменения в составе функций встроенного интерпретатора:
[~] WAuduo(i, targetdir, splitmode) теперь имеет необязательные 2-й и 3-й параметры. targetdir - принудительно задает папку назначения, отменяя ее запрос, прописанный в Настройках; targetdir = '' означает запись аудио в ту же папку, где находится исходный текст; splitmode = true/false - принудительно задает деление/не деление файла на серии, невзирая на прописанное в Настройках.
[+] WName(i) - возвращает имя файла, открытого во вкладке i; если текст во вкладке еще не сохранен, то возвращает пустую строку; если во вкладке не было ни открытия файла, ни ввода текста, то возвращает false.
[+] AllFolders(folder, mask) - возвращает список имен папок в папке folder, имена которых отвечают маске mask.
7.29.357 [+] Запись аудио как сериала, прерванную нажатием глобальной клавиши Break, можно продолжить, указав ту же самую папку назначения. Программа самостоятельно обнаружит необработанные текстовые файлы сериала и выдаст запрос: продолжить или начать с начала?
[~] Функция встроенного интерпретатора WFilter( i, j, dicname, mode ) теперь имеет необязательный четвертый параметр:
    mode = true, если словарь формата .dic работает по быстрому алгоритму;
    mode = false, если словарь формата .dic работает прямым перебором;
    Если mode не указан, то значение берется из "Сервис - Общие настройки... - Чтение - Правила из dic-словарей применяются в порядке убывания длины";
    Если словарь имеет тип .rex, то mode игнорируется (если был по ошибке указан).
7.29.356 [-] Исправлена ошибка функции встроенного интерпретатора WFilter(), когда словарные замены по dic-словарям выполнялись только по "быстрому алгоритму", независимо от указанного в Настройках.
[~] Функция встроенного интерпретатора WActive() теперь имеет второй параметр: true или false - разрешать/запрещать редактирование в активном окне. По умолчанию: true.
[~] Теперь при прерывании серийной записи аудио, в папке назначения вмеcте с готовыми аудиофайлами остаются и необработанные текстовые файлы. В дальнейшем их можно будет преобразовать в аудиофайлы опцией "Сервис - Пакетная запись аудио".
[+] Добавлен пример скрипта Fragments with given words.lua
7.29.355 [-] Исправлена ошибка опции "Формат - Вставить примечания", когда при включенной опции "Сервис - Общие настройки... - Литературный текст - При открытии файла", в текст вставлялись все примечания, кроме последнего.
[-] Исправлена ошибка обработки тега <sequence number ...> при открытии файлов типа fb2.
[-] При повторной записи аудио как сериала с тем же именем, теперь нет автоматического удаления файлов, созданных ранее. Файлы с совпадающими именами будут перезаписаны.
[-] Исправлена ошибка опции "Правка - Найти/Заменить - Поиск - Подсчитать", когда совпадение с самого начала текста - не учитывалось , и подсчет на этом заканчивался.
[~] "Сервис - Общие настройки... - Литературный текст - При открытии файла" и "Сервис - Общие настройки... - Прочее - Вставлять примечания при открытии файла" теперь действуют также на "Сервис - Пакетный ковертер --> TXT" и "Сервис - Объединить тексты".
7.29.354 [+] Добавлена опция "Сервис - Общие настройки... - Сериалы - Добавлять имя файла к номеру части". По умолчанию - включено.
[+] Добавлена опция "Сервис - Общие настройки... - Набор - Выполнять следующие действия", позволяющая разом отключать и включать заново выбранные варианты автозамены.
[+] Добавлен сплиттер между областью текста и областью Галереи. Это позволяет изменять пропорцию "текст-картинка" с помощью мыши. Сделанные изменения сохраняются в Настройках.
[-] Устранен иногда возникавший эффект искажения видимого в окне текста при изменении размеров окна.
7.29.353 [-+] Исключена опция "Правка - Заменить символы". Все ее пункты перенесены в "Сервис - Общие настройки - Литературный текст".
[+] Добавлена настройка "Сервис - Общие настройки... - Литературный текст - При открытии файла".
[~] Задание величины абзацного отступа перенесено из "Сервис - Общие настройки - Литературный текст" в "Сервис - Общие настройки... - Набор".
[+] Добавлена функция встроенного интерпретатора WLiterary(i) - применение опции "Литературный текст" к тексту в окне i.
[~] Применение опции "Литературный текст" теперь разрешено и для файлов типа dxt, rtf. Если в тексте имелось специфическое dxt/rtf-форматирование, то оно будет удалено.
[-] Исключена функция встроенного интерпретатора Search() как дублирующая уже имеющиеся функции поиска.
[-] Исправлена ошибка, когда отметки подключенных словарей исчезали при следующем запуске программы.
[-] Исправлена ошибка опции Ctrl+T, возникавшая при MouseClick на пустом списке примененных правил.
7.29.352 [+] "Сервис - Библиотекарь". Улучшено отображение файлов с длинными именами.
[~] "Сервис - Библиотекарь". Найденная книга теперь открывается в активном окне редактора, а не в "Статистике".
[+] В контекстное меню вкладок добавлены пункты: "Переместить" - отметить документ для перемещения в другую вкладку; "Принять" - забрать документ из другой вкладки.
[~] Улучшено распознавание файлов типа .fb2
[-] Исправлена ошибка в опции "Правка - Заменить символы - Удалить переносы".
[-] Исправлена ошибка в опции"Правка - Заменить символы - Удалить разрывы строк внутри абзацев".
7.29.350 [~] Улучшена работа функции WAdd() во встроенном интерпретаторе.
[~] Обновлен пример скрипта Collection of texts.lua
[-] Исправлена ошибка неполного просмотра вложенных папок в опции "Сервис - Библиотекарь".
7.29.347 [~] В алгоритме "прямого перебора" отдельно стоящие в шаблоне звездочки захватывают соответствующее количество любых слов в тексте, не разделенных разрывами строк. Т.е. в пределах одного абзаца. Такое поведение совпадает с принятым в "быстром алгоритме".
[+] Небольшие поправки в скриптах Pronunciation adjustment.lua и Orthodox Easter date.lua
7.29.346 [-] Исправлена ошибка в алгоритме "прямого перебора", когда правило распознавалось, как подходящее, но замены по нему не производились.
[-] Исправлена ошибка дублирования записей в статистике примененных правил.
7.29.345 [+] Для документов типа .dxt и .rtf, а также для еще не сохраненных документов, доступна опция "Правка - Вставить как текст".
[~] Улучшена работа функции встроенного интерпретатора WSave().
[+] Функция встроенного интерпретатора ValidFileName(fname). Возвращает true, если fname не содержит символов * | \ / , : " < > ? и false в противном случае.
[~] Обновлены скрипты Pronunciation adjustment.lua и Fragments with numbers.lua
7.29.344 [+] "Сервис - Общие настройки... - Сериалы". Можно задавать  шаблоны заголовочной и заключительной строк в серии.
[~] Функия встроенного интерпретатора WAudio() возвращает true или false в зависимости о того, подтвердил ли пользователь выбор папки назначения для аудио.
[~] Закрытие окна "Поиск и замена в тексте" закрывает также и окно шаблонов поиска, если оно было открыто.
[~] Выбор шаблона поиска (DblClick, Enter, кнопка "Перейти" одновременно делает активным окно "Поиск и замена в тексте".
[+] "Сервис - Общие настройки... - Орфография - Проверка словарей Dic". Опция представлена в усеченном варианте - поиск правил: с совпадающими левыми и правыми частями; содержащих * в правой части; а так же пар правил с одинаковыми левыми частями.
[~] Поправки в алгоритме словарных замен "прямым перебором" по dic-словарю, в части применения правил со звездочками внутри.
[+] Пример скрипта Audio recording and computer shutdown.lua
7.29.343 [+] Обновлен алгоритм словарных замен для случая, когда в настройках указано: не сортировать автоматически словари Dic. В этом случае правила замен применяются к тексту строго в том порядке, в каком они размещены в словаре.
[+] "Правка - Текст - Сортировка словарей Dic". Выполняет классическую сортировку словаря формата Dic - в порядке убывания длины левой части правила.
[+] "Правка - Найти / Заменить". Добавлены кнопки "Запомнить шаблон" и "Показать шаблоны".
[+] Новая версия кодека lame.exe
7.29.342 [-] Исправлена некорректная (в отдельных случаях) работа опции "Сервис - Общие настройки... - Прочее - Вставлять примечания в текст при открытии файла". Спрасибо tonio_k, проведшему ряд тестов, позволивших выявить источник проблемы.
[-] Исправлен глюк встроенного интерпретатора: "Lua library 'Lua5.3.0.dll' not found". Спасибо evmir_troll-hunter и tonio_k, сообщившим об этой ошибке.
7.29.341 [+] "Сервис - Общие настройки... - Чтение - Правила из dic-словарей применяются в порядке убывания длины". По умолчанию: включено. Иначе, в порядке следования правил в словаре.
[+] Функция встроенного интерпретатора WSave(i[,fname]) - сохранить текст во вкладке i в файл с именем fname. Eсли fname не задано, то сохраняется под прежним именем; а если текст еще ни разу не был сохранен, то имя генерируется автоматически.
[+] Прочие небольшие поправки.
7.29.340 [+] "Правка - Транскрипция", шаблоны тегов UPS и PLS сохраняются в настройках. Если вместо шаблона оставить пустое поле, то при следующем выполнении восстанавливается шаблон по умолчанию.
[+] "Правка - Транскрипция", при чтении вслух по кнопке "Тест", все подключенные словари игнорируются.
[+] "Речь - прочесть абзац", при чтении вслух строки словаря, все подключенные словари игнорируются.
7.29.339 [+] Размеры и положение Окна Закладок сохраняются в Настройках.
Для того, чтобы новые параметры сохранились, необходимо следующее. Нажать какую-либо клавишу навигации или управления - т.е. начать работать с закладками. Или просто провести курсором мыши над списком закладок, при этом будет показано уведомление о сохранении параметров Окна закладок.
[~] Настройка "Сервис - Общие настройки - Прочее - Вставлять примечания при открытии файла" действует и при открытии файла перетаскиванием.
[-] Исправлена ошибка открытия htm-файлов, когда сопутствующая папка, содержащая рисунки - не существует.
[-] Не всегда верно определялась папка назначения при записи аудио.
[-] Исправлена ошибка стартового меню в скрипте Pronunciation adjustment.lua
7.29.338 [+] "Сервис - Общие настройки... - Прочее - Вставлять примечания в текст при открытии файла".
[+] При открытии Окна поиска, ранее найденный текст показыватся в нем выделенным.
[~] Окно Закладок - не модальное, изменяемого размера.
[+] Скрипт Pronunciation adjustment.lua, стартовое меню: Работать с текстом в текущем окне | Загрузить новый файл.
[~] Функция встроенного интерпретатора WAdd(i,j,delimiter) может иметь значение параметра j = -1. В этом случае к тексту в окне i просто добавляется строка delimiter.
[~] Более эффективный пример команд постобработки в ..profiles\notes.re
[-] Ukrainian.ln, исправлена всплывающая подсказка под кнопкой "Орфография".
[-] "Формат - Показывать... - Кнопки", не переключалась видимость кнопки "Орфография".
[-] "Сервис - Общие настройки... - Глобальные клавиши - Вставить закладку при чтении вслух", исключена, как неактуальная.
[-] При вставке примечаний в текст, абзацы разделялись лишней пустой строкой.
7.29.337 [+] "Формат - Вставить примечания". Вставка в текст примечаний и комментариев, вместо ссылок на них. Списки примечаний и комментариев в конце текста при этом будут удалены.
[+] "Сервис - Орфография - Проверка регулярных выражений Ctrl+Alt+P". Проверка текста - списка регулярных выражений (целиком или выделенный фрагмент). В rex-словарях проверяются только левые части правил. При обнаружении ошибочного выражения - оно выделяется, и выдается диагностическое сообщение библиотеки SkRegExp.
[+] "Правка - Найти омографы Ctrl+H - Добавить фразу в словарь".
[-] Исправлены мелкие ошибки.
7.29.336 [-] Длина индикатора "бегущая строка" не изменялась при изменении размеров окна программы.
[-] Отключение словаря .orfo/.hmg при нажатой кнопке подсветки вызывало ошибку деления на 0.
[-] "Правка - Транскрипция", в режиме PLS кнопка "Тест" выдавала ошибку голосового движка.
7.29.335 [~] Опция "Сервис - Статистика - Имена и аббревиатуры" перенесена в раздел "Сервис - Статистика - Нестандартные слова". Туда же добавлены опции: "Текст в разрядку" и "Смесь Latin-Cyrillic".
7.29.334 [-] Включенная подсветка блокировала прокрутку текста колесиком мыши;
[-] Опция "Сервис - Измененный текст", не выполнялась, если хотя бы для одного из голосов мультилингвы не был назначен словарь;
[~] Улучшено слежение за чтением.
7.29.333 [+] Опция "Правка - Найти омографы Ctrl+H";
[+] Опция "Сервис - Библиотекарь Ctrl+B";
[-] Примеры скриптов Find homographs.lua, Librarian.lua утратили актуальность;
[-] В функции встроенного интерпретатора Menu() не срабатывал параметр "выбранный по умолчанию пункт меню".
7.29.332 [~] Вместе с кнопками опции "Сервис - Статистика - ..." становится недоступной и кнопка "Выполнить скрипт", на время выполнения длительных операций статобработки текста.

[~] Функция встроенного интерпретатора WFilter() делает недоступными кнопки опции "Сервис - Статистика - ..." и "Выполнить скрипт" на время выполнения  операции словарных замен.

[-]   В функции Input встроенного интерпретатора пустые значения полей игнорировались. Теперь незаполненное поле возвращает пустую строку.

[~] Функция встроенного интерпретатора LoadFromFile теперь имеет второй параметр, по умолчанию false. Если указан true, то загрузка может производится из файла любого, поддерживаемого Demagog формата. Например: t = LoadFromFile('123.docx',true)

[+] Функция CurrentLang(),  возвращающая название языка интерфейса.

[-] Неактуальные функции встроенного интерпретатора: SAPI(), SetVoice(), Voices()

[+] Обновлены примеры скриптов.

[-] Без указания папки назначения аудио сохранялось не там же, где текст, а в корневой папке Demagog'a.
7.29.331 [~] Панель словарей стала "многостраничной". Внешне ничего не изменилось, т.к. страницы лежат поверх друг друга. При выборе нового голоса  открывается соответствующая страница. Таким образом, каждый голос будет иметь собственный набор подключенных словарей.

[~] Кнопки опции "Сервис - Статистика - ..." становятся недоступными на время выполнения длительных операций над текстом.

[~] Кнопка "Найти далее" в опции "Правка - Найти / Заменить" теперь является "кнопкой по умолчанию", срабатывающей при нажатии Enter в поле ввода данных.

[~] Немного изменен интерфейс опции "Правка - Транскрипция".

[+] Опция "Сервис - Пакетный конвертер PLS --> DIC / HMG"

[~] Функция встроенного интерпретатора LoadFromFile теперь имеет второй параметр. Если он указан true, то загрузка может производится из файла любого, поддерживаемого Demagog формата. Например: t = LoadFromFile('123.docx',true)

[~] Обновлен пример скрипта Pronunciation adjustment.lua

[-] В функции Input() встроенного интерпретатора форма ввода данных не могла содержать более 16 строк.
7.29.330b [-] Правило с отдельно стоящей звездочкой в dic-словаре, вида: $* шаблон=замена cрабатывало неверно.
7.29.330a [~] Улучшена работа опции "Речь - Прочесть абзац". Если абзац - это правило в словаре, то читается левая или правая часть правила, в зависимости от того, где стоит текстовый курсор. Или всё правило, если курсор стоит в точности перед знаком "=".

[-] При активном окне "Поиск и замена в тексте", текст из буфера обмена вставлялся клавишами Shift+Ins или Ctrl+V не в поле поиска/замены, а в текст в окне редактирования.

[-] Опция "Сервис - Показать применение правил  Ctrl+T" в верхнем окошке отображала текст не измененным, хотя следующий ниже список примененных правил доказывал, что изменения были сделаны.
7.29.330 [+] Опция "Речь - Билингва РУС / ENG". Когда она включена, то читаемый текст анализируется на присутствие в нем русских и английских фрагментов, каждый из которых читается, соответственно, русским или английским голосовым движком. Требуемые движки, из числа установленных в системе, указываются в "Речь - Билингва РУС / ENG - Настройка".

[+] Опция "Речь - Мультилингва", когда текст предварительно разделен пользователем на части специальными командами смены голоса, вручную или с помощью составленого им для этих целей соответствующего rex-словаря. Команда смены голоса имеет вид:

{{ИмяГолосовогоДвижка, Скорость, Тембр, Громкость}}

Имя голосового движка можно указывать не полностью, лишь бы оно было уникальным. Скорость и тембр: -10..10, громкость: 0..100. Стандартные значения: 0,0,100 можно не указывать. Пример:

{{Irina,0,0,100}}Привет, мир!{{Zira,0,0,100}}Hello, World!{{Ludovico,,,80}}Saluton mondo!{{Zira}}Program "Demagog" is the speaking text editor!

Таким образом, программа может читать текст, написанный на разных языках.

Замечание 1. Билингва и мультилингва доступны только под SAPI5.
Замечание 2. Запись аудио, при включенной билингве или мультилингве, производится, как обычно: "Файл - Записать аудио", при этом получается, соответственно, русско-английское или многоязычное аудио.


[~] Опция "Сервис - Показать применение правил" теперь позволяет отыскивать в словаре любое правило из списка. Клик мышью по выбраному правилу - выделяет его и открывает доступ к кнопке "Найти". Будет выдано сообщение с именем словаря, где содержится данное правило. "OK" - откроет словарь и покажет в нем правило выделенным цветом.

[~] В опции "Сохранить как...", при автоматическом формировании имени еще не сохраненного текста по содержанию его первых строк, из полученного имени удаляются кавычки, если они есть.

[+] Функция встроенного интерпретатора: Clipboard(s), помещающая в Буфер обмена содержимое строки s, и возвращающая его предыдущее текстовое содержимое. Примеры: s = Clipboard(); sold = Clipboard(snew); s = Clipboard('').

[~] В файлах языковых ресурсов, при задании текста всплывающей подсказки, можно вставлять символы || для обозначения перехода на новую строку. Аналогично задается перевод строки для сообщений диалоговых окон. Примеры:

[APopAndDog]
C=Поп и собака
H=У попа была собака,||он ее любил.||Она съела кусок мяса,||он ее убил


[Msg_Balda]
C=А Балда приговаривал с укоризной:||Не гонялся бы ты, поп, за дешевизной!


[-] В автоматически сгегенерированном имени аудиофайла присутствовали недопустимые символы ":", отчего запись аудио не производилась.

[-] В опции "Речь - Чтение в цикле" возврат на начало чтения происходил раньше, чем достигался конец текста.


[-] Опция командной строки /a
7.28.329
1) Добавлена опция "Формат - Показывать - Строка состояния"; 2) Добавлена опция "Формат - Показывать - Кнопки..."; 3) Больше нет деления на 1-ю и 2-ю панели инструментов - всё теперь - одна панель с переносом на вторую строку в правильном месте; опция "Кнопки... - По умолчанию" соответствует показу только первой строки Панели инструментов; 4) Индикатор длительных процессов перемещен в Строку состояния; 5)  Обновлены примеры скриптов; 6) Добавлено несколько новых функций во встроенный интерпретатор; 7) Опция "Формат - Количество  вкладок..." закрывает документы во вкладках, ставших невидимыми, исключая тем самым возможность их "анонимного" открытия при следующем запуске программы, когда включена опция "Открывать предыдущий файл...".
7.28.328
1) В опции "Сервис - Общие настройки... - Литературный текст" добавлена возможность настройки цветов подсветки орфографических ошибок, омографов и близкостоящих похожих слов; 2) Выделенная строка в Панели словарей теперь запоминает позицию последнего открытого для редактирования словаря; 3) Убрана автопроверка наличия в тексте rtf-форматирования, контроль выбора формата сохраняемого файла доверен пользователю; 4) Внесены изменения в состав функций встроенного интерпретатора, обновлены примеры скриптов; 5) В строке состояния код символа теперь показывается в десятичной и шестнадцатеричной форме; 6) Исправлена ошибка, когда применение форматирования "Литературный текст" к тексту, состоящему всего из одной строки - полностью его удаляло; 7) Исправлена ошибка открытия файлов типа .epub, если в его тексте встречались символы #127; 8) Исправлена ошибка, когда не запоминалось подключение словаря, если его имя содержало символ(ы) "+".
7.28.327
1) В опцию "Правка - Текст - Сортировка строк" добавлены новые виды сортировок; 2) Добавлена опция "Сервис - Статистика - Сравнение файлов - Игнорировать дубликаты", по умолчанию - включена; 3) Внесены изменения в состав функций встроенного интерпретатора, обновлены примеры скриптов; 4) Улучшена работа опции "Сервис - Общие настройки... - Набор - Вставлять закрывающие кавычки и скобки"; 5) Улучшена работа опции "Правка - Найти/Заменить"; 6) Исключена опция "Литературный текст - Автоматически сохранять текст, извлеченный из документа не txt-формата", как утратившая актуальность; 7) Исправлена ошибка, когда при открытии словаря для редактирования в активной свободной вкладке, в названии вкладки не отображалось имя словаря.
7.28.326 1) Словарь произношения теперь открывается для редактирования в текущей активной вкладке, если она свободна, иначе во вкладке "0 - Статистика"; 2) Добавлена опция "Формат - Показывать - Параметры голоса" для показа или сокрытия параметров голосового движка; 3) Опция "Сервис - Вторая панель инструментов" перенесена в "Формат - Показывать - Вторая панель инструментов"; 4) Исправлена ошибка, когда файл, загруженный в первой вкладке, не отображался сразу, а только после перехода в другую вкладку и возврата в первую.
7.28.325 1) Количество вкладок в окне редактора может регулироваться пользователем: "Формат - Количество вкладок". От 2 до 16. При самом первом запуске программы: 10, но если файл настроек $.cfg уже существует и создан в предыдущих версиях, то вкладок останется 16, пока пользователь не изменит его (если захочет);

2) Добавлена опция "Сервис - Общие настройки - Литературный текст - Открывать RTF-файлы, "как есть", соблюдая присущее им форматирование";

3) Изменения в опции "Вторая панель инструментов":
    - Доступ к операциям сравнения файлов выполняется через кнопку с выпадающим меню;
    - В группе кнопок стилей добавлены "Зачеркнутый шрифт", "Маркированный список", "Создать таблицу";
    - Добавлена кнопка "Выполнить скрипт";

4) Добавлена опция "Сервис - Общие настройки... - Литературный текст - Поля при печати";

5) Исправлена ошибка, приводившая к падению программы, если вкладка в окне редактора получала фокус клавишей Tab и затем нажималась клавиша Application;

6) Исправлена ошибка, когда автоматическая вставка парных кавычек «» съедала следующий за ними символ в тексте;
7.28.324 1) В контекстное меню редактора добавлен пункт "Сортировать строки по алфавиту". Применимо для списков, словарей и тому подобных текстов; 2) Добавлена опция "Сервис - Общие настройки... - Набор - Вставлять закрывающие кавычки и скобки". Если справа от курсора в тексте пусто, то при вводе одного из символов " ' ( [ { автоматически вставляется соответствующий закрывающий; 3) В меню "Правка - Изменить" добавлены пункты: "Озаглавить предложение" и "Latin <--> Cyrillic"; 4) Клик в окне редактирования или переход в другую вкладку теперь не останавливает чтение вслух, если читается буфер обмена или выделенный текст; 5) Добавлена опция "Речь - Прочесть абзац Ctrl+F5". То есть прочесть вслух абзац, в котором стоит курсор. Если в абзаце есть символ "=", то  читается часть до или после него; в зависимости от того, с какой стороны находится курсор; 6) Улучшена работа опции "Сервис - Создать сериал", в режиме когда в настройках указано, что допустимы разрывы предложений.
7.28.323
1) Добавлена опция "Сервис - Общие настройки... - Прочее - Проверять наличие обновлений при запуске программы"; 2) Во встроенный интерпретатор добавлены функции: WSel(i, pos, len) для выделения фрагмента текста во вкладке i с позиции pos длиной len; и WSelText(i, z) для замены выделенного текста во вкладке i содержимым строки z; 3) В опции "Файл - Сохранить как...", если новое имя файла бралось по умолчанию, то новое расширение имени присоединялось к прежнему через точку. Теперь же происходит корректная замена.
7.28.322 1) Добавлена опция "Сервис - Общие настройки - Аудио - Спрашивать, куда сохранять аудио (иначе там же, где исходный текст)"; 2) Добавлена опция "Сервис - Общие настройки - Набор - Запретить вставку в текст символа Tab (клавиша будет использована для навигации)"; 3) При открытии Панели словарей, первый пункт меню в ней выделен цветом. Раньше требовался клик мышью, чтобы вообще понять, что это - меню; 4) Контекстное меню Панели словарей пополнено пунктами: "Отметить", "Очистить", "Редактировать".
7.28.321 1) Добавлена опция "Речь - Читать в цикле (Ctrl + R)", с помощью которой чтение текста, по окончании, начинается с начала, и т.д. пока не будет нажата клавиша "Стоп"; 2) В панель инструментов добавлена кнопка "Общие настройки..."; 3) Обеспечено запоминание последней открытой вкладки в окне "Общие настройки..."; 4) Пополнен список опций командной строки, см. Справку; 5) В контекстное меню панели словарей добавлены пункты "Отметить все", "Очистить все"; 6) При чтении вслух или записи аудио отображается процент выполнения; 7) Во встроенный интерпретатор добавлена функция: WText(i) - возвращающая текст из вкладки i; 8) Добавлен пример скрипта, вычисляющего долю служебных слов в тексте; 9) Улучшена работа опции "Сервис - Общие настройки... - Прочее - Эвристическое распознавание кодировки русскоязычного текста". По умолчанию эта опция теперь выключена, как редко используемая; 10) Исправлена ошибка в опции "Правка - Найти / Заменить - Подсчитать" в режиме поиска "Обычный"; 11) Исправлена ошибка в опции "Сервис - Общие настройки... - Литературный текст - Удалить текст внутри: [...] {...} <...>"; 12) Исправлена ошибка, когда при чтении выделенного текста или буфера обмена, повторное нажатие F8 или F9 - блокировало клавиши F6, F7 и кнопки "Пауза", "Стоп"; 13) Исправлена ошибка, когда опция командной строки /m не срабатывала, если не было указано имя файла; 14) Исправлена ошибка, когда чтение выделенного текста или буфера обмена неправильно отображалось в строке состояния; 15) В опции "Сервис - Общие настройки... - Глобальные клавиши - Прочесть буфер обмена" добавлен модификатор: "или выделенный текст". Что позволит читать вслух выделенный текст в окнах других приложений.
7.28.320 1) Состояние панели словарей: открыта / закрыта - теперь запоминается в настройках программы; 2) Поправки в примерах скриптов и в описании встроенного интерпретатора; 3) Возможность подключать внешние конвертеры для извлечения текстов из документов, формат которых не поддерживается Demagog'ом. Настройки конвертеров располагаются в файле ..\profiles\aliens.lst; 4) Улучшена работа опции "Сервис - Общие настройки... - Набор - Подставлять заглавную букву в начале предложения".
7.28.319 1) Факт максимизации окна программы теперь запоминается в настройках; 2) Добавлено контекстное меню на вкладках; 3) Добавлена опция "Сервис - Общие настройки - Прочее - Запретить запуск нескольких экземпляров программы", по умолчанию: ВКЛЮЧЕНО; 4) Если программа запущена с вышеуказанным запретом, то вызов ее из командной строки с параметром "имя файла" откроет этот файл в том же экземпляре программы в первой свободной вкладке; 5) Клик по панели Галереи сворачивает / разворачивает ее; 6) Клик по тексту во время чтения - останавливает его; 7) Подсветка орфо-ошибок / омографов / созвучий выполняется быстрее.
7.28.318 1) Исправлено извлечение текстов и иллюстраций из файлов .epub; 2) Для опции "Файл - Новый" назначена горячая клавиша Ctrl+N
7.28.317 1) Вместо собственного встроенного интерпретатора используется библиотека VerySimpleLua поддержки скриптового языка Lua. Работает заметно быстрее; 2) Исправлена ошибка опции "Сервис - Статистика - Сравнение файлов", когда при сравнении файлов не выдавался список отличающихся строк, а только указывалось их количество; 3) Исправлена ошибка опции "Сервис - Создать сериал", когда файлы серий получали расширение, отличающееся от .txt; 4) Исправлена ошибка при открытии файла типа fb2: иногда пропадал последний символ 1-й строки; 5) Исправлена ошибка опции "Правка - Поиск/Замена - Заменить все": при включенной фоновой картинке результаты не отображались сразу, а "проявлялись" при повторном входе в данную вкладку.
7.28.316 1) При чтении вслух, в строке состояния отображается текущее положение курсора; 2) Аудиофайлы, созданные по еще не сохраненным текстам (вручную набранным или скопированным из буфера обмена) получают уникальные имена, а не одно и тоже, как ранее; 3) Для улучшения визуального восприятия, текст в окне редактирования отображается с небольшим отступом от левого и правого края.
7.28.315 1) Изменен интерфейс опции "Найти/Заменить"; 2) Процедура подсветки теперь учитывает и символ табуляции, как разделитель слов; 3) Добавлен пункт меню "Формат - Масштаб..."; 4) Исправлена ошибка из-за которой невозможно было открыть переименованный вручную .dxt; 5) Если в настройках сохранены размеры окна программы, не соответствующие размерам дисплея (например, при переносе программы с другого компьютера), то упомянутые настройки корректируются так, чтобы окно программы было видно на дисплее целиком.
7.28.314 1) Добавлена опция "Сервис - Общие настройки... - Литературный текст - Автоматически сохранять текст, извлеченный из документа не txt-формата". По умолчанию - ВЫКЛЮЧЕНО.

2) Введена поддержка формата "документ Demagog" - .dxt, позволяющего хранить вместе с текстом закладки и изображения. В документе Demagog возможно применение различных шрифтов, и стилей: жирный, курсив, подчеркнутый, зачеркнутый; выравнивание влево, вправо, по центру. При вставке в dxt-файл через буфер обмена текстов из Word сохраняются шрифты и стили, а также таблицы. Вставленные в dxt-файл таблицы из Word или Excel можно редактировать.

3) Исправлено извлечение картинок из документов epub

4) Исключена опция "Файл - Открыть как RTF". С теми же возможностями форматирования файлы теперь можно открывать/сохранять как dxt

5) Исключена опция "Правка - Таблица символов", т.к. это было просто обращение к стандартному приложению Windows

6) Текст и картинки из документов .docx теперь извлекаются без обращения к MS Word

7) Если в документе docx имеется т.н. "авто-оглавление", то при импорте текста, Demagog формирует соответствующий список закладок

8) При запуске программы, загрузка ранее открытых файлов выполняется быстрее

9) Вместо "Правка - Вставить картинку (Ctrl+K)" картинки в "документ Demagog" (.dxt) можно также вставлять перетаскиванием

10) Исправлена ошибка подсчета абзацев в опции "Сервис - Статистика - Общая"

11) Исключена возможность открытия не текстовых файлов путем автоматического поиска подходящего приложения в операционной системе

12) Исключен параметр командной строки - номер вкладки, в которой открывать файл

13) При открытии файла проверяется: не открыт ли уже этот файл в Demagog'e? В этом случае повторное открытие файла не выполняется, а вкладка, в которой он уже открыт - становится активной

14) При открытии файла запуском командной строки: Demagog.exe ИмяФайла, файл помещается в первую свободную вкладку или, если таковых нет, во вкладку "Статистика"
7.28.312 1) Улучшено извлечение картинок из документов epub; 2) Исправлена проявившаяся в вер. 311 ошибка в опции "Сервис - Общие настройки - Аудио"
7.28.311 1) Добавлена опция "Правка - фонетическая транскрипция". Она действует только в режиме SAPI5 и служит для вставки в документ тега <PRON SYM="фонетическая запись"/>. "Фонетическая запись" составляется из символов фонетических алфавитов SAPI Phone Set или Microsoft Universal Phone Set (UPS) для выбранного языка;

Замечание. Из известных мне русскоязычных голосовых движков, тег <PRON> с алфавитом UPS поддерживают:

MS Irina Desltop - Russian
MS Pavel Mobile - Russian
IVONA 2 Tatyana - Russian female voice
IVONA 2 Maxim OEM - Russian male voice

2) Исправлена ошибка в опции "Поиск/Замена", когда в "расширенном режиме" не работал поиск по кодам символов, меньших 32;

3) Исправлена ошибка интерфейса, когда в режиме "Поиск/Замена - Замена - Расширенный" название радио-кнопки обрезалось справа;

4) В опции "Сервис - Объединение файлов", если для имени единого файла не указано расширение, то принимается .txt
7.28.310 1) "Сервис - Профили - Сохранить профиль..." предлагает по умолчанию имя сохраненного профиля в формате: ггггммдд-ччммсс.cfg; 2) Если аудио записывается, как сериал, то в конце записи текущее окно очищается от содержимого последней серии, т.к. все тексты серий - временные и после аудиозаписи уже не существуют! 3) "Сервис - Пакетный конвертер --> TXT" - перед началом конвертации происходит переход в окно Статистики, где потом и отображается процесс. По завершении окно Статистики очищается; 4) "Сервис - Объединить тексты..." - перед выдачей диалога выбора файлов происходит переход в окно Статистики, где потом и отображается процесс. По завершении окно Статистики очищается; 5) "Сервис - Объединить тексты..." теперь в начале запрашивает: в какую папку поместить полученный единый текст; 6) "Сервис - Объединить тексты..." теперь дает объединенному тексту по умолчанию имя United1.txt. Если файл уже существует, то United2.txt и т.д. 7) В настройках программы теперь можно указать, в какую папку помещать любой *.txt полученный при открытии non-txt-документа; 8) Доработано извлечение картинок из документов MSWord и Web-страниц (учтен тег <v: imagedata>) 9) Во всех прежних версиях при открытии сохраненной веб-страницы, после извлечения текста исходный *.htm уничтожался - что является ошибкой. Исправлено.
7.28.309 1) При открытии окна словарей подсказка для кнопки словарей менялась на русскую, независимо от выбранного языка интерфейса; 2) Если текст в окне еще не сохранен ни под каким именем, то опция "Правка - Вставить картинку" теперь потребует это сделать. Иначе картинка вставлена не будет, т.к. неизвестно, куда? 3) Если в настройках указано "Записывать аудио как сериал", но текст слишком мал, чтобы быть разделенным на серии, то аудио пишется с него целиком. Одновременно с этим, всё равно создавалась пустая папка для несуществующего сериала. Исправлено; 4) Из файлов языковых ресурсов *.ln удалены несколько секций, соответствовавших давно исключенным из Demagog'a опциям; 5) Опция "Правка - Вставить картинку" теперь недоступна, если в настройках отключен показ картинок;
6) Исправлено: файл, открываемый как rtf, в некоторых случаях переименовывался с добавлением символа ~ в конце; 7) Исправлено: в интерпретаторе символ ";" внутри строковой константы воспринимался как признак переноса команды на новую строку; 8) Исправлено: в сообщении об ошибке интерпретатора зачастую ошибочно указывался номер ошибочной строки :) 9) В интепретатор добавлена строковая функция trim() 10) В интерпретаторе добавлена проверка на не сбалансированные апострофы; 11) В программу добавлен язык интерфейса - испанский.
7.28.308 1) RightClick в панели словарей позволяет открыть папку словарей в Проводнике Windows; 2) Отключение фоновой картинки происходит без перезапуска программы; 3) В строке состояния корректно запоминается статус "Модифицирован" при различных действиях пользователя, изменяющих файлы в нескольких окнах. Раньше, при переходе из окна в окно, статус "Модифицирован" переставал отображаться, при том, что файл еще не был сохранен; 4) Улучшена работа опции "Поиск/Замена - Заменить все" по шаблону REX; 5) Исправлена ошибка из-за которой при включенной подсветке было невозможно переместить вертикальный ползунок вверх; 6) Добавлена опция "Общие настройки... - Картинки - Фоновая картинка под текстом", задающая выбор режима: замостить, растянуть или заполнить. По умолчанию: "замостить".
7.28.307 Небольшие поправки и улучшения
7.28.306 1) Исправлена ошибка, когда в диалогах сохранения и загрузки профилей отсутствовал перевод заголовков на выбранный язык интерфейса; 2)  Исправлена ошибка, когда при удалении картинки из Галереи все остальные иллюстрации переставали отображаться; 3) Т. н. "нечеткий поиск" в "Найти/Заменить" теперь работает.
7.28.305 1) Исправлена ошибка, вызывавшая небольшое смещение верхнего края текстового окна, когда включен показ кртинок; 2) Удалена опция Ctrl+K - скрыть Галерею, как излишняя, т.к. отключение показа иллюстраций делается в "Сервис - Общие настройки - Картинки"; 3) Отступ Галереи относительно главного окна теперь задается в %, а не в пикселах.
7.28.304 1) Объединены пункты меню "Сервис - Показать измененный текст" и "Сервис - Показать примененные правила"; 2) Во встроенном интерпретаторе: а) усилен контроль неявного преобразования типов, б) в сообщении об ошибке теперь правильно указывается номер строки.
7.28.302 1) Добавлена поддержка формата ePub; 2) Тип последнего открытого файла запоминается в Диалоге открытия файлов; 3) Исправлена ошибка, когда для загруженного файла в галерее отображалась не первая по счету картинка в книге; 4) Во встроенном интерпретаторе добавлена проверка имени переменной - должно начинаться с буквы.
7.28.301 1) Исправлены ошибки в опции "Общие настройки... - Набор"; 2) Подсветка омографа при его редактировании теперь выполняется корректно; 3) При открытии файла в кодировке UTF-8, не имеющего BOM, не срабатывала опция "Общие настройки... - Прочее - Эвристическое распознвание кодировки русскоязычного текста". Исправлено; 4) Исправлена ошибка, состоявшая в самопроизвольном возвращении текстового курсора в начало окна, при включенной подсветке 5) Добавлен язык интерфейса - эсперанто;
6) Исправлена ошибка в функции HomeFolder() встроенного интерпретатора;
7) Добавлена функция встроенного интерпретатора lines().
7.28.299 1) Теперь при создании закладки, если часть текста выделена, то наименованием закладки является именно выделенный текст. Иначе: столько текста после позиции курсора, сколько поместится в строку в окне закладок;
2) Добавлена опция "Закладки - Создать оглавление". Для этого используются правила - регулярные выражения в profiles\headers.re. В настоящее время правила обеспечивают составление оглавлений для русских и английских литературных текстов. Опытные пользователи могут модифицировать правила для других языков;
3) В опции "Сервис - Общие настройки... - Сериалы" добавлен пункт: "Не допускать разрывов предложений" (Спасибо Евгению Мирошниченко);
4) В опции "Сервис - Статистика - Общая" добавлены пункты: "Средняя длина абзаца", "Максимальная длина абзаца";
5) Опция "Формат - Использовать фоновую картинку..." теперь понимает, кроме изображений bmp, также jpg, jpeg, png, gif.
7.28.298 1) Слегка изменен дизайн панели словарей и окна закладок для улучшения визуального восприятия (предложено Евгением Мирошниченко); 2) Небольшие поправки.
7.28.297 1) Добавлена опция "Сервис - Статистика - Необработанные омографы"; 2)  Улучшена работа опции "Сервис - Статистика - Имена и аббревиатуры"; 3) Исправлены ошибки в опции "Найти / Заменить" - "Подсчитать" и "Все подходящие"; 4) Прочие небольшие поправки. Спасибо Евгению Мирошниченко за полезные предложения и тестирование.
7.28.295 beta
Начало 2016 года
Новый этап. Версия, полностью поддерживающая Юникод!
Годы 2008..2015 Развитие проекта. Говорящий текстовый редактор Demagog становится известен в стране и мире :)
1.08.020 beta
28 октября 2007
Первая, опубликованная в Инете версия. День рождения программы Demagog. Program "Demagog" birthday.
2007 год Начало проекта "Demagog". Отработка алгоритма словарных замен.