Первоначальная идея заключалась в создании технологии максимально простого перехода от конкретного текста (протокола, заявки, договора, доверенности и т.д.) к программе, автоматизирующей создание (т.е. генерацию) документов по шаблону. Вот почему доменное имя этого сайта называется "gendoc" - сокращенно от "генерация документов".
Ниже приведен пример для иллюстрации этой идеи.
Пусть целью является разработка программы для автоматизированного создания текстов писем-приглашений.
Посмотреть листинг итоговой программы
Посмотреть скриншот результата
Пусть текст приглашения выглядит следующим образом:
Уважаемый Иван Иванович!
Приглашаем Вас на встречу выпускников,
которая состоится 10.12.2010г. в 17:00
в ресторане "Вечерний".
Приходите обязательно!
С уважением,
Дирекция школы N4
Для этого в начало каждой строки текста достаточно поместить символ >. Для интерпретатора КОНЦЕПТ это является командой вывода строки в выходной поток.
>Уважаемый Иван Иванович!
>Приглашаем Вас на встречу выпускников,
>которая состоится 10.12.2010г. в 17:00
>в ресторане "Вечерний".
>Приходите обязательно!
>С уважением,
>Дирекция школы N4
Это уже не просто текст, а программа КОНЦЕПТ, которую можно скопировать и выполнить в интерпретаторе здесь. Это касается также всех последующих примеров на этой странице.
Чтобы перейти от конкретного текста к шаблону, нужно в тексте выделить переменные (т.е. изменяемые) фрагменты. В КОНЦЕПТ такие переменные фрагменты называются подстановками или просто переменными и заключаются в [].
В рассматриваемом примере логично выделить следующие переменные части: кому адресовано приглашение, название мероприятия, дата и время начала, место, подпись приглашающего.
>Уважаемый [Иван Иванович]!
>Приглашаем Вас [на встречу выпускников],
>которая состоится [10.12.2010г.] в [17:00]
>[в ресторане "Вечерний"].
>Приходите обязательно!
>С уважением,
>[Дирекция школы N4]
Если выполнить этот текст/шаблон/программу в интерпретаторе КОНЦЕПТ, то пользователю последовательно будет задано шесть вопросов, по одному для каждой подстановки. Ниже приведены протокол запуска последнего примера и полученный в результате текст.
Введите значение переменной "Иван Иванович": Петр Петрович
Введите значение переменной "на встречу выпускников": на соревнование по легкой атлетике
Введите значение переменной "10.12.2010г.": 22.06.2011
Введите значение переменной "17:00": 10:00
Введите значение переменной "в ресторане "Вечерний"": на стадионе "Метеор"
Введите значение переменной "Дирекция школы N4": Городской спорткоммитет
Уважаемый Петр Петрович!
Приглашаем Вас на соревнование по легкой атлетике,
которая состоится 22.06.2011 в 10:00
на стадионе "Метеор".
Приходите обязательно!
С уважением,
Городской спорткоммитет
Переменным шаблона нужно задать более общие наименования. Этот шаг можно было бы объединить с предыдущим.
>Уважаемый [Имя и отчество приглашаемого]!
>Приглашаем Вас [Название мероприятия],
>которая состоится [Дата проведения мероприятия] в [Время начала]
>[Место проведения мероприятия].
>Приходите обязательно!
>С уважением,
>[Подпись]
На предыдущих шагах для определения значений переменных
использовался встроенный механизм интерпретатора КОНЦЕПТ:
1) значения переменных запрашиваются в порядке их появления в тексте
2) используется типовой запрос 'Введите значение переменной:"<имя_переменной>":'
3) начальным значением является пустая строка и отсутствует возможность выбора значения из списка возможных
На данном шаге используются команды КОНЦЕПТ "присвоить" и "ввести" для улучшения интерфейса ввода данных рассматриваемого примера. Команда КОНЦЕПТ - это фраза, начинающаяся с новой строки одним или двумя ключевыми словами, за которыми следует список аргументов, разделенных одним или несколькими пробелами. Если строка начинается с символа *, то она является комментарием.
* Запрос значений переменных
ввести переменная 'Имя и отчество приглашаемого' 'Кого пригласить?'
ввести меню1 'Название мероприятия' 'Какое мероприятие?' 'на встречу выпускников;на соревнование по легкой атлетике;на званый ужин'
ввести переменная 'Дата проведения мероприятия' 'Когда?' [$Сегодня]
ввести меню1 'Время начала' 'Время?' '10:00;12:00;14:00;17:00;19:00'
ввести меню1 'Место проведения мероприятия' 'Где?' 'в ресторане "Вечерний";на стадионе "Метеор";у меня дома'
присвоить Подпись 'Иван Петров'
* Шаблон текста
>Уважаемый [Имя и отчество приглашаемого]!
>Приглашаем Вас [Название мероприятия],
>которая состоится [Дата проведения мероприятия] в [Время начала]
>[Место проведения мероприятия].
>Приходите обязательно!
>С уважением,
>[Подпись]
Одним из недостатков программы, представленной на Шаге 5, является отсутствие согласования окончания слова "которая" с выбранным названием мероприятия. Для рассматирваемого примера правильными являются следующие сочетания: "встреча-которая", "соревнование-которое", "ужин-который". Чтобы это исправить, можно добавить в программу КОНЦЕПТ дополнительный код, как показано ниже.
* Запрос значений переменных
ввести переменная 'Имя и отчество приглашаемого' 'Кого пригласить?'
ввести меню1 'Название мероприятия' 'Какое мероприятие?' 'на встречу выпускников;на соревнование по легкой атлетике;на званый ужин'
ввести переменная 'Дата проведения мероприятия' 'Когда?' [$Сегодня]
ввести меню1 'Время начала' 'Время?' '10:00;12:00;14:00;17:00;19:00'
ввести меню1 'Место проведения мероприятия' 'Где?' 'в ресторане "Вечерний";на стадионе "Метеор";у меня дома'
присвоить Подпись 'Иван Петров'
* Логическая обработка
присвоить употребление_который который
выбрать [Название мероприятия]
вариант 'на встречу выпускников'
присвоить употребление_который которая
вариант 'на соревнование по легкой атлетике'
присвоить употребление_который которое
конецВыбора
* Шаблон текста
>Уважаемый [Имя и отчество приглашаемого]!
>Приглашаем Вас [Название мероприятия],
>[употребление_который] состоится [Дата проведения мероприятия] в [Время начала]
>[Место проведения мероприятия].
>Приходите обязательно!
>С уважением,
>[Подпись]
Даже для такого простого примера блок логической обработки может быть существенно развит. Например, можно менять обращение "Уважаемый/Уважаемая" в зависимости от того, направляется приглашение мужчине или женщине. Вставлять или не вставлять слово "Уважаемый" и менять "Вас" на "тебя" в зависимости от признака официальное/фамильярное приглашение.
Для генерации приглашений по списку используется команда КОНЦЕПТ "для..следующий". Список приглашенных лиц помещается в переменную "ПРИГЛАСИТЬ". Внутри цикла используется встроенная переменная "$ОбъектЦикла", которая при каждом проходе цикла последовательно принимает значения из списка "ПРИГЛАСИТЬ".
* Запрос значений переменных
присвоить ПРИГЛАСИТЬ 'Иван Иванович;Пер Петрович;Анна Александровна;Дмитрий Дмитриевич'
ввести меню1 'Название мероприятия' 'Какое мероприятие?' 'на встречу выпускников;на соревнование по легкой атлетике;на званый ужин'
ввести переменная 'Дата проведения мероприятия' 'Когда?' [$Сегодня]
ввести меню1 'Время начала' 'Время?' '10:00;12:00;14:00;17:00;19:00'
ввести меню1 'Место проведения мероприятия' 'Где?' 'в ресторане "Вечерний";на стадионе "Метеор";у меня дома'
присвоить Подпись 'Иван Петров'
* Логическая обработка
присвоить употребление_который который
выбрать [Название мероприятия]
вариант 'на встречу выпускников'
присвоить употребление_который которая
вариант 'на соревнование по легкой атлетике'
присвоить употребление_который которое
конецВыбора
для [ПРИГЛАСИТЬ]
* Шаблон текста
>Уважаемый [$ОбъектЦикла]!
>Приглашаем Вас [Название мероприятия],
>[употребление_который] состоится [Дата проведения мероприятия] в [Время начала]
>[Место проведения мероприятия].
>Приходите обязательно!
>С уважением,
>[Подпись]
>
следующий
Для того, чтобы придать тексту приглашения более красивый вид,
можно использовать возможности форматирования HTML.
Чтобы иметь возможность просматривать в HTML-браузере результат
работы программы и печатать список приглашений,
нужно сформировать HTML файл. По умолчанию, программа КОНЦЕПТ выводит строки
в окно результата интерпретатора. Для перенаправления вывода строк в файл,
нужно использовать команду "ФАЙЛ ПИСАТЬ". Для форматирования текста используются
стандартные тэги HTML, о которых можно прочитать
в любом справочнике или книге с описанием HTML.
Посмотреть листинг итоговой программы
Посмотреть скриншот результата