Открытый христианский форум JesusChrist.ru

Библия | Книги | Словари | Софт | Аудио, BQT, Евангелизм, JCQ, Молитва

Добро пожаловать на Открытый христианский форум JesusChrist.ru. Для того чтобы писать в форуме, Вам необходимо зарегистрироваться и войти на форум через ссылку для входа.

Общие разделы
   >> "Цитата из Библии"
Просмотров: 1740 Просмотреть ВСЕ ветвиСледующая ветвь*Отображение Ветвями

Klangtao
жидобандеровец
09/10/11 22:51

# 859426

Редактор модулей: действующий концепт-конструктор Help admins  

Как известно, в Biblequote-сообществе не первый год поднимается вопрос о создании редактора модулей. Активное его решение стопорит, как думается, прежде всего отсутствие чёткого и общего представления о том, каковы, собственно, его задачи и основные функции.

Предлагаемый действующий концепт на основе моей программы «Церковнославянский правщик» (только Advanced-версия) предлагает реализацию полного цикла этого процесса - в качестве не столько готового решения, сколько предмета для дальнейшего обсуждения, от которого можно было бы отталкиваться. Концепт назван также «конструктором», потому что практически все описанные ниже инструменты реализованы в виде макросов и пользовательских форм, которые любой пользователь может редактировать и даже (хотя почему «даже»? прежде всего!) создавать новые под свои запросы. Макроязык Правщика основан на языке программирования VBScript и гораздо проще, чем используемый сами-знаете-где VBA. Внутренний графический конструктор форм, на мой взгляд, тоже предельно прост и интуитивен.

Кросспост - на форуме "Эсхатоса". Там со скриншотами :)

Программа работает под Windows XP и даже 9x. Поступил один тревожный сигнал, что «семёрка» ругнулась на старую версию компонента RichTextBox и вылечить это не удалось.

Итак, возможные этапы создания модуля - то, с чем приходится обычно сталкиваться.

1. Преобразование RTF / DOC(X) в HTML, желательно без «мусора».

Это (для разнообразия) делается не макросом, а стандартным функционалом программы, который, однако, не совсем на виду. При загруженном .rtf- или вордовском файле (с последними программа, разумеется, работает не непосредственно, а создаёт .rtf-копию, причём только если на компьютере предустановлен M$ Office) в поле ввода, находящееся в панели инструментов (собственно, занимающее бОльшую его часть) следует ввести .HTM (обязательно с точкой!) или, ежели хотите, чтобы новый файл назывался иначе, чем исходный RTF - Новое имя.htm .

После этого вызываем команду меню Файл > Переименовать * - и через некоторое время имеем в окне код вновь созданной вэб-страницы.

Поддерживаются исключительно базовые элементы форматирования: выделение полужирным, курсивом или /и подчёркиванием, цвет, гарнитура и размер шрифта, выравнивание абзацев. То есть то, что и нужно обычно для Цитаты. Если же файл содержит другую информацию (рисунки, таблицы), то преобразовывать придётся внешними инструментами - и сразу же переходить к п.2.

2. Чистка HTML-файла от «мусора».

Здесь мы уже переходим к «надстройкам» или «инструментам расширения», как названы они в справке. Не «плагины» - потому что, как было сказаны, абсолютно доступны для редактирования пользователем, чего понятие плагина обычно не предполагает. Прячутся эти не-плагины в меню Сервис, где сгруппированы по типам - Макросы, Формы и Мультизамены (а лежат все навалом в папке Scripts, если что).

Для выборочной чистки документа от ненужных Цитате тэгов следует вызвать Формы > ClearTags. В левом списке появившейся формы будут все найденные в документе HTML-тэги. Если перед вызовом формы был выделен текст, покажет только тэги из выделения и работать будет с ним (это вообще является общим принципом Правщика для большинства операций).

Щелчок «крысой» по выбранному элементу в левом списке переносить его в правый и наоборот. А радиокнопки вверху правого списка дают нам выбрать, тэги из какого списка будем убивать в документе. Если же отмечен чекбокс Атрибуты, то удаляться будут не сами тэги, а только атрибуты в открывающих. Например, нам для Цитаты не нужны параметры выравнивания абзацев - мы ставим этот флажок для списка с тэгами p, h1, h2 и др. После чего остаётся жать на «Выполнить» и, если надо, задать следующее задание для чистки.

3. Объединение файлов

С этим часто приходится сталкиваться создателям модулей, стянувших из интернета текст, который разбит на отдельные вэб-страницы по главам - а в Цитате книга должна идти одним файлом. Справиться с этим нам поможет Формы > Consolid. Она используется для трёх совершенно разных задач, которые мы в своё время рассмотрим. Сейчас следует выбрать опцию «Объединить файлы».

С помощью кнопки «Выбрать папку», собственно, и выбираем папку, где лежит наше сырьё. В комбобоксе над кнопкой можно предварительно выставить фильтр *.htm; *.html - тогда в список из выбранной папки будут загружены только файлы с этим расширением.

Далее предстоит упорядочить наш список перед слиянием. Кнопки <<Выше и Ниже>> выбранный файл перемещается соответственно требуемому порядку объединения вверх или вниз по списку, если есть куда. Кнопка "-" удаляет файл из списка, кнопка "+" позволяет добавлять на слияние файлы из других папок (они будут указаны в списке с полным путём).

Но это не ещё всё. Поскольку мы наверняка имеем дело с вэб-документами, то необходимо, чтобы программа при объединении отрезала от каждого файла начало и конец - как минимум, по тэгу <body>, а чаще всего также ненужное нам обрамляющее оформления сайта, с которого спёрты наши странички. Для этого нам следует, загружая двойными щелчками по именам файлов в списке их содержимое в окно для просмотра, определить в них строки (последовательность символов), которые служат метками начала и конца текстовой части. Если страницы скачаны с одного сайта, имеют общее оформление, то такие метки, как правило, найти не трудно. Важно, чтобы они, во-первых, были первыми с начала / конца соответственно (иначе обрежет не по тем, которые вы хотели, а по предыдущим), а во-вторых, чтобы ни были во всех файлах. Последнее, впрочем, не так принципиально: если где-то метка не будет найдена, обрежет по <body>. Назначаемую метку следует выделить в тексте просматриваемого файла, после чего кликнуть в текстовом поле «От:» для метки начала копируемого в новый файл фрагмента или «До:» для метки конца.

При нажатии кнопки «Начать слияние» в окне появится шаблон со строками %Текст% и %Индекс%. Первая метка является обязательной и соответствует вырезаемому из файла фрагменту. Подстановка для второй формируется для каждого фрагмента из его порядкового номера и, через знак подчёркивания, имя файла, в котором он находился (без расширения). Поскольку у нас для Цитаты каждый фрагмент наверняка будет соответствовать новой главе, мы вместо него или вдобавок к нему должны поставить перед %Текст% признак главы, который собираемся использовать - <h1>%Индекс%</h1>, <chapter name="%Индекс%">, <hr>, <G> и т.п., кто на что горазд. Он будет повторен перед каждым фрагментом, а переменная %Индекс%, если была оставлена, заменится её значением для данного фрагмента. Если теперь сделать двойной клик на имени любого файла в списке, то шаблон будет обёрнуть взятыми из него «шапкой» и «подвалом» (отрезанными частями по меткам «От:» и «До:»). Его можно подредактировать (ни в кем случае не трогая меток <!-- Начало --> и <!-- Конец --> ) или оставить как есть - это будет оформление большого файла, полученного в результате слияния.

При повторном нажатии кнопки (которая называется теперь «Продолжить слияние») будет предложено создать оглавление ко всем фрагментам, добавляемое в начало файла. Полученный документ - результат слияния - будет загружен в окно программы, после чего его уже можно будет сохранить, присвоив имя.

4. Фрагментация файлов

Реже возникает противоположная задача: разбить большой файл на части, которые будут соответствовать книгам модуля. Она решается с помощью Макросы > FileBrake. Как видим, это уже не форма а программный модуль, поэтому работа с ним хотя и проще, но не столь наглядна.

Прежде, чем вызывать эту команду меню, следует сделать две вещи:
1) проставить в тексте документа метки разбиения - любые строки, которые не встречаются в тексте и не имеют внутри проблелов. Скажем, @@@.
2) Ввести это @@@ в поле ввода на тулбаре. Можно и не вводить, а выделить в тексте и нажать F2. Впрочем, если поле ввода к моменту вызова макроса окажется пустым, он предложит ввести его в появившееся окно.

В результате в каталоге, где находится файл, будет создана одноимённая ему (без расширения) папка с новыми файлами, разбитыми по меткам, с именами по порядковым номерам и расширением исходного файла. Если мы согласились на предложение создать оглавление к этим файлам, оно будет сгенерировано и загружено в окно программы.

Это самый простой вариант - и нас он наверняка не устроит. Во-первых, мы, возможно, хотели бы более информативных имён для книг модуля. Во-вторых, каждую из них эстетичней было бы оформить как правильный HTML-файл (а для Цитаты-6 отсутствие такого оформления вообще может привести к проблемам с чтением модуля). Поэтому добавлена возможность использовать использвать доплнительные параметры.

Итак, если после нашего, условно говоря, @@@ в поле ввода стоит пробел, то текст после него (и до первого ?, если есть) будет воспринят как маска имён создаваемых файлов. Например, Book# означает, что книги будут называться Book1(.htm(l)), Book02, Book3 и т.д. (или Book01, Book02, если их получается больше десяти), #* - сразу после номера будет идти первое слово фрагмента, # ** - после номера через пробел будут идти несколько первых слов первого абзаца и пр.

Наконец, если в маску входит символ ?, то собственно маской переопределяется часть строки перед ним, остаток до конца или до следующего ? (может быть пустым при двух ?? подряд) назначается меткой, отделяющей от собственно разбиваемого текста «шапку» в его начале, которая будет повторяться во всех создаваемых файлах. Часть после второго ? - аналогичная метка для «подвала» в конце. Поскольку мы имеем дело с вэб-страницами, то наш запрос, вероятно, будет выглядеть как @@@ Book#?<body>?</body>. Причём поскольку метки начинаются с <, они сами станут частью шапки и подвала, повторяясь с ними в каждом файле. Если мы задали шапку и / или подвал и в исходном файле поставили в их области наше первоначальное @@@ (например <title>@@@</title>), то при разбиении они будут заменены в каждом файле его именем (без расширения) по определённой нами маске.

5. Инструменты вэб-редактирования

Если Правщик работает с HTML-документом, то при нажатии клавиши < появляется окно для ввода тега (можно с атрибутами), которым будет отмечен выделенный текст. При вводе в тексте файла строки color= появляется системная палитра для выбора цвета, который будет вставлен в виде словесного обозначения (для 16-ти базовых цветов) либо шестнадцатеричного RGB-кода. Работают (как и в RTF-режиме) стандартные комбинации Ctl+I, Ctrl+B, Ctrl+U для форматирования выделенного текста соответственно курсивом, полужирным или подчёркиванием. Команды выбора цвета и форматирования текста данными начертаниями есть также в меню Формат, как и пункт Шрифт…, позволяющий комплексно оформить выделенный текст с помощью системного диалога шрифта.

Особенность формата модулей к Цитате - командные гиперссылки, передающие программе адрес конкретного абзаца в конкретном модуле, к которому она должна перейти по нажатию. Особенность контента модулей - как правило, большое количество библейских ссылок. Макросы > Biblehref превращает выделенный библейский индекс в рабочую гиперссылку на модуль «Русский синодальный текст с номерами Стронга». Если ссылка была с сокращённым названием книги, в строку ввода заносится её код (порядковый номер), который может подставляться при следующем вызове макроса, когда новая ссылка состоит только из главы и стихов (то есть книга была указана ранее): <a href="go rststrong 43 1 3 4">Ин. 1:3-4</a>, <a href="go rststrong 43 17 17">17:17</a>. Очевидно, предусмотрены не все возможные сокращения - их список (расположенный не в самом макросе, а в вызываемой им таблице мультизамены @BibleName) можно дополнить.

6. Поиск и замена. Мультизамена.

Из обычного для текстовых редакторов функционала программы следует отметить поиск и замену по причине нестандартности её интерфейса. Формат поисковых запросов, записываемых всё в ту же строку ввода и сохраняемых в списке при ней в случае успешного выполнения (чтобы была возможность повторить, если надо, чуть изменив) подробно описан в справке. Если же вы не оценили его очевидных для автора преимуществ, можно использовать привычного вида диалог Формы > FindReplace, опять же являющийся редактируемой пользовательской формой. Состав дополнительных опций на нём будет разным в зависимости от типа файла. Как и в «этом вашем» Ворде, поддерживаются кодирующие спецсимволы, а для более сложных случаев - регулярные выражения (стандартные, как в Perl и т.п. с некоторыми специфическими обозначениями и возможностью создавать свои).

Таблицы мультизамены являются мощным средством автоматизации работы с документами, с которым можно разбраться на входящих в дистрибутив примерах. Простые и опциональные описания последовательно выполняемых сквозных замен могут чередоваться в них с рядом команд (в том числе вызовом других таблиц и макросов), фрагментами со списком побайтовых замен по всей длине текста, остановами, предлагающими пользователю принять или отклонить группу последующих замен. Если в процессе работы Правщика было сделано несколько успешных замен по всему тексту (выделенному фрагменту), в меню Сервис > Мультизамены над списком существующих таблиц появляется пункт Создать. При его вызове создаётся новый документ, в который загружаются все сохранённые текущие замены. Его можно отредактировать и сохранить, после чего новая таблица появится в списке, если только имя файла не начинается с @ - такие таблицы вызываются только из других таблиц и из макросов.

Если мультизамену надо использовать окказионально и нет смысла её сохранять, если она представляет собой модификацию и комбинацию существующих - к нашим услугам Формы > MultiRepl.

В окно формы могут быть добавлены успешные замены или существующие таблицы, после чего отредактированы. Если выделить в нём часть таблицы и вызвать на выполнение, будут выполнены только замены из выделенной части. Для простых (обратимых) замен можно задать выполнение в прямом или обратном порядке. Если таблицу решено всё-таки сохранить под новым и существующим именем, это можно сделать прямо отсюда.

Наконец, применить сохранённую или временную таблицу мультизамены к целой группе файлов можно с помощью уже знакомой нам Формы > Consolid. При выборе опции «Мультизамена» внешний вид формы меняется: исчезают ненужные кнопки <<Выше и Ниже>> (порядок, в котором будут обрабатываться файлы, не имеет значения), зато появляется кнопка «Вставить таблицу». Добавление и удаление файлов в список происходит так же, как и в режиме слияния.

7. Макросы

Как и мультизамены, макросы Правщика можно не только написать, но и записать - с помощью соответственного пункта в меню Макросы. При его вызове кнопки в правой части панели переопределяются как Пауза и Стоп с стандартными пиктограммами. Действия, совершенные во время работы в этом режиме (не на паузе), записываются в макрос.

В отличие от «этого вашего», макрос сохраняется под присваиваемым именем (или не сохраняется, если пользователь отклонил) только при завершении записи, после чего предлагается открыть его для просмотра и редактирования. Прочее о макросах и пользовательских формах зри в справке.

8. Компиляция модулей (проверка кода и индексация файлов)

Вот мы и подошли к третьему режиму Формы > MultiRepl - «Модули BibleQuote». Предварительная подготовка в точности такая же, как и при слиянии файлов: выбор каталога, добавление, перемещение и ранжирование файлов, вызов их в окно для просмотра и экспорта признаков главы и абзаца. Но если для слияния метки «От» и «До» факультативны, то для модулей признаки главы и абзаца / стиха обязательны - без них кнопка «Создать модуль» останется недоступной.

При первом нажатии кнопки в окне сформируется верхняя часть INI-файла - общие параметры модуля. Легко усовершенствовать процедуру, чтобы (по аналогии с BqiniMaker'ом) при наличии в папке готового bibleqt.ini данные брались из него - но не знаю, нужно ли. После внесения необходимых изменений жмём кнопку повторно. Начинается последовательная обработка файлов в списке сверху вниз. Перед признаками начала глав и стихов, не предваряемых в файлах Windows'овским абзацем (CrLf), он подставляется; если в файле не найдено ни одного признака главы, признак ставится в его начало (после тэга <body>, если есть); если файл добавлен из другого каталога, он копируется в папку модуля. После чего к INI-файлу добавляются для данной книги параметры PathName (имя файла), FullName (содержимое тэга <title>; если не найдено - "Книга " + порядковый номер), ShortName (генерируется из FullName), ChapterQty (количество найденных в файле признаков главы). Сформированный файл сохраняется под именем bibleqt.ini в папке модуля и открывается в окне Правщика.

9. Можно ли сделать так, чтобы не лазить каждый раз в меню «Сервис»?

Не мона, а нуна! Формы > HotKeys позволяет присвоить выбранную вами комбинацию клавиш любой мультизамене, макросу или форме (в том числе и себе самой). Выбрав группу и элемент списка, ставим курсор в поле под ним и нажимаем назначаемую комбинацию. Если она уже чему-то присвоена или является стандартной комбинаций Правщика, выводится соответственное сообщение, иначе становится активна кнопка «Назначить». После назначения комбинация «горячих клавиш» появляется в меню рядом с именем соответствующего ей пункта.

Да, всё описанное - пока для ANSI-формата и под «пятёрку»...

Klangtao
жидобандеровец
14/12/11 05:16

# 875302

Re: Редактор модулей: действующий концепт-конструктор нов [re: Klangtao, #859426] Help admins  

В качестве альтернативы - one touch конвертер модулей из HTML, DOC, FB2 и Zefania XML Bible Markup.



ОТВЕТИТЬ ВСЕМ   Просмотреть ВСЕ ветвиСледующая ветвь*Отображение Ветвями
Перейти на