Язык SmokeDoc Script (SDS) предназначен для обработки типовых текстовых документов с
целью извлечения из них требуемых фрагментов текста.

Обрабатываемый документ проходит через цепочку директив и фильтров. Цепочка определяется директивой LocationMatch <ereg>. Цепочка применяется если имя документа подходит под регулярное выражение <ereg>. Один документ может быть обработан только одной цепочкой. Перед началом обработки содержимое документа помещается в переменную @body. После из этой переменной могут быть извлечены фрагменты и помещены в другие переменные с помощью фильтров. Фильтры могут изменять содержимое переменных, удалять переменные или добавлять новые. Несколько переменных в контейнере могут иметь одно название, в этом случае, если применить директиву к переменной с именем, например, varname, то эта директива будет применена ко всем переменным с таким именем.
 

Основные

Документ локальный или сетевой типовой текстовый файл: Web-страница, RSS-лента, партнерский фид, CVS, XML, SQL и др.
Директива предопределенная функция языка SDS
Фильтр предопределенный макрос для обработки текстовых данных
Цепочка набор директив и фильтров
Контейнер общее хранилище переменных
Группа извлекаемые данные могут размещены в разных группы, что позволяет более эффективно их экспортировать.

 

Обозн

[] значение в квадратных скобках необязательно.
# начало комментария.
\t табуляция, определяет вложенность директив.

 

Перем

Все переменные содержатся в хранилище, называемом контейнер, и бывают двух типов:

  • Обычные переменные. Переменных такого типа с одинаковым именем можно поместить в контейнер сколько угодно.
  • Сингл-переменные. Можно поместить только одну переменную с некоторым именем в контейнер. Если в контейнере уже есть сингл-переменная с некоторым именем, то при помещении в контейнер сингл-переменной с таким же именем, новая переменная заменит старую. Имена сингл-переменных начинаются со знака $.

Имена переменных не чувствительны к регистру, могут состоять из латинских букв, цифр, тире и знака подчеркивания. В начале имени могут быть символы @ и $.

 

Пример прогр

Этот пример демонстрирует, как можно извлечь данные из RSS ленты.

LocationMatch #.#

# Получаем записи
Filter Search @body WithParams pattern=#<item>(.+)</item>#Uuis name=items index=1

# Проходимся по всем записям
Foreach items As $item
# Выбираем данные по каждой из записей
    Filter Search $item WithParams pattern=#<title>(.+)</title>#Uuis name=item_title index=1
    Filter Search $item WithParams pattern=#<link>(.+)</link>#Uuis name=item_link index=1
    Filter Search $item WithParams pattern=#<pubDate>(.+)</pubDate>#Uuis name=item_date index=1
    Filter Search $item WithParams pattern=#<dc:creator>(.+)</dc:creator>#Uuis name=item_author index=1
    Filter Search $item WithParams pattern=#<category>(.+)</category>#Uuis name=item_category index=1
    Filter Search $item WithParams pattern=#<description>(.+)</description>#Uuis name=item_description index=1
    Filter Search $item WithParams pattern=#<content:encoded>(.+)</content:encoded>#Uuis name=item_content index=1
# Раскодируем сущности
    Filter Html item_title item_link item_author WithParams direction=decode
# Удаляем тег CDATA
    Filter Replace item_category item_description item_content WithParams search=#^<\!\[CDATA\[# regexp=true
    Filter Replace item_category item_description item_content WithParams search=#\]\]>$# regexp=true
    MakeArray item_cats item_category
# Создаем элемент
    MakeItem entry title=item_title link=item_link date=item_date author=item_author category=item_cats shortbody=item_description longbody=item_content
# Удаляем временные переменные
    Unset ^item_

#Dump entry
StoreItem entry

SmokeDoc Script Reference Стандартные директивы