Interpreter in program Demagog

ВСТРОЕННЫЙ ИНТЕРПРЕТАТОР В ПРОГРАММЕ DEMAGOG

Это - известный скриптовый язык программирования Lua, с дополнительными функциями, частью написанными на самом Lua, частью импортированными из проекта Demagog. Здесь даны лишь минимально необходимые сведения. Подробнее см. Роберту Иерузалимски "Программирование на языке Lua", книгу в электронном виде можно найти в Интернете.
 
1. ОСНОВНЫЕ ОПРЕДЕЛЕНИЯ
Красным цветом указаны не обязательные элементы
   
-- все, что после этих знаков - комментарий
; разделитель операторов в строке (не обязателен)
'строка символов'
"строка символов"
строковая константа; может содержать экранированные последовательности: \a звонок, \b backspace, \f перевод страницы, \r возврат каретки, \n перевод строки, \v \t верт. и гор. табуляция, \\ обратный слэш, \' апостроф, \" двойная кавычка, \ddd десятичный код символа (d означает десятичную цифру), \xhh 16-ричный код символа (h означает 16-ичную цифру)
[[строка символов]] строковая константа; все символы воспринимаются как они есть
nil значение переменной, для которой не было операций присваивания
переменная = выражение присваивание
   
if логическое_выражение then
  ...
elseif
  ...
else
  ...
end
условный оператор
   
for i = min, max, step do
  ...
end
оператор цикла
break оператор выхода из цикла до его завершения; например:

for i = 1, #a do
  ...
  if (a[i] < 0) and (i > 10) then break end
end
   
переменная = {} создать пустую таблицу с данным именем (одномерную таблицу часто называют: "список")
переменная = {значение1, ... значениеN} создать таблицу с данным именем и заполнить ее значениями, индексированными целыми числами по порядку: 1 ... N;
переменная = {[индекс1]=значение1, ... [индексN]=значениеN} создать таблицу с данным именем и заполнить ее значениями по принципу: [индекс]=значение; индекс может быть числовым или строковым (здесь квадратные скобки - это обозначение индекса таблицы!)
имя_таблицы[индекс] = значение присвоить значение элементу таблицы
имя_таблицы[индекс] обратится по индексу к элементу таблицы, если в таблице нет запрошенного элемента, то возвращается nil
имя_таблицы.строка эквивалентно имя_таблицы['строка'], при этом 'строка' должна содержать только латинские буквы!
   
print(переменная1,...,переменнаяN) вывод значений переменных
put(переменная1,...,переменнаяN) следующий вывод будет в ту же строку
print() вывод пустой строки
goto label переход по метке
::label:: метка
   
Имена переменных регистрозависимы.
Имена переменных должны начинаться с буквы и могут содержать только буквы латинского алфавита, цифры и знак подчеркивания.
 
На выходе интерпретатора - результаты выполнения команд print и/или put.
   
2. ОПЕРАЦИИ И ФУНКЦИИ  
   
2.1. Математические операции:  
   
* умножение
/ деление
// целочисленное деление
^ возведение в степень
+ сложение
.. сцепление строк (конкатенация)
- вычитание
% остаток от целочисленного деления
< меньше
<= меньше или равно
> больше
>= больше или равно
~= не равно
== равно
and и
or или
   
2.2. Элементарные математические функции:
(Значок  ==> указывает на возвращаемое значение)
 
   
math.rad перевод градусов в радианы
math.deg перевод радианов в градусы
math.sin синус
math.cos косинус
math.tan тангенс
math.asin арксинус
math.acos арккосинус
math.atan арктангенс
math.log(x, base) логарифм x по основанию base; по умолчанию base = e - число Эйлера, т.е. имеем натуральный логарифм; log(x,10) - десятичный логарифм x
math.exp экспонента
math.sqrt квадратный корень
math.ceil округление до целого в большую сторону
math.floor округление до целого в меньшую сторону
round(x,d) округление x до заданного количества знаков d; например:

p = round(3.1415926,2)
print(p)
-- результат: 3.14
   
2.3. Генераторы псевдослучайных чисел:  
   
math.random(m, n) генератор псевдослучайных чисел:
без аргументов, возвращает псевдослучайное действительной число в интервале [0,1)
с аргументом m, возвращает псевдослучайное целое число из отрезка [1, m]
с двумя аргументами m и n, возвращает псевдослучайное целое число из отрезка [m, n]
math.randomseed(x) инициализирует генератор псевдослучайных чисел параметром x
каждый параметр порождает соответствующую (но одну и ту же) последовательность псевдослучайных чисел
irontab(n) таблица целых псевдослучайных чисел от 1 до n; например:

t = irontab(1000)
-- список чисел для каждого диапазона всегда один и тот же
-- т.н. "железная таблица" Гуго Штейнгауза
randexp(m) генератор псевдослучайных чисел с экспоненциальным распределением и средним значением m
randgamma(k,m) генератор псевдослучайных чисел c гамма-распределением порядка k = 1, 2, 3, ... и средним значением m; при k = 1 совпадает с экспоненциальным
randnormal(m,st) генератор псевдослучайных чисел с нормальным (Гаусса) распределением, средним значением m и стандартным отклонением st
   
2.4. Функции работы со строками, таблицами и файлами:  
   
#s длина строки s; например: #'qwertу' ==> 6; так же может обозначать количество элементов в массиве
string.rep(b, n) строка, составленная из строки b, повторенной n раз; например:

b = string.rep('*',5)
print(b)
-- результат: *****
string.find(s, z ,init ,plain) позиция по шаблону z в строке s с начальной позиции init (по умолчанию 1), если не найдено, то nil; например:

k = string.find('rt','qwerty',1,true)
print(k)
-- результат: 4

Значение plain = true выключает поиск по шаблону1 и подстрока z ищется, как она есть, без учета магических2 символов. Второй результат - позиция окончания найденного фрагмента.
string.match (s, z , init) первое вхождение шаблона z в строку s; поиск с позиции init (по умолчанию 1, может быть отрицательной); в случае обнаружения, возвращает захваченные значения, иначе nil; если z не содержит захватов, то производится простое сравнение
string.sub(s, i, j) часть строки s с позиции i до позиции j; например:

 b= sub('qwerty',4,5)
 print(b)

-- результат: rt
string.gsub(s, sour, repl) заменяет в строке s подстроки sour на repl; например: string.gsub('qwertyQwerty','qwe','U' ) ==> UrtyQwerty 1 -- результат замены и количество замен (одна)
string.split(s, sep) "режет"  строку s по символу-разделителю sep на части и запоминает их в списке; например: s = 'abc|123|pi=3.14'; a = string.split(s,'|'); идущие подряд разделители считаются за один
string.trim(s) удаление оконечных пробелов в строке s
string.lower(s) перевод строки s в нижний регистр
string.upper(s) перевод строки s в верхний регистр
table.sortuniq(t) сортирует таблицу t, удаляя дубликаты
filesize(f) размер в байтах файла с именем f
SecondsToClock(seconds) переводит секунды в строку вида чч:мм:сс
ValidFileName(fname) возвращает true, если имя файла не содержит недопустимх символов, и false в противном случае
FileExists(f) существует ли файл с именем f; возвращает true или false
Exists(f) существует ли файл или папка f. Возвращает true/false и код ошибки
IsFolder(f) существует ли папка f
DriveLetters() возвращает список дисков, доступных на компьютере
SaveToFile(list, f) записать список строк list в файл f; строки в файле разделяются символами '\r\n'; например, записать одну строку initdir: SaveToFile({initdir},'@.libr')
LoadFromFile(f ,allformats) прочесть ansi-файл, состоящий из строк, разделенных символами '\r\n' в список ansi-строк; например:
initdir = LoadFromFile('@.libr')[1]
если второй параметр задан true, то читается и преобразуется в ansi-строки файл любого поддерживаемого в Demagog формата, допустимые кодировки: ansi, unicode, unicode-be, utf-8; например:
t = LoadFromFile('123.docx',true)
Body(w) удаление из слова w всех знаков препинания: например: s = '({["Громовержец!?.."]})'; Body(s) ==> 'Громовержец'
Similar(w1,w2,k) степень сходства слов w1 и w2, определяемая по совпадению 1, 2, .. k-буквенных последовательностей в обеих словах; по умолчанию k = 3; например:

x = Similar('колесо','окосел')
y = Similar('лес','лес')
z = Similar('лес','роща')
print(x,y,z)
-- результат: 0.4666  1    0 
SplitFileName(f) принимает имя файла и возвращает список из трех строк: путь, краткое имя без пути и расширения, расширение; например:

p = SplitFileName( [[d:\qwerty\йцукен.1.txt]] )

print(p[1])
print(p[2])
print(p[3])

-- результат:
-- d:\qwerty\    
-- йцукен.1    
-- .txt
Fragments(s, fragsize, parag) разделяет текст  s на фрагменты с заданным количеством символов fragsize; 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, то исходные текстовые файлы удаляются.
PlsToDic(f, folder, casesens, tag) преобразует файл f формата .pls в словарь .dic или .hmg; результат помещается в папку f (по умолчанию '' соответствует корневой папке программы); casesens = true / false (по умолчанию false - не учитывать регистр); tag - шаблон pls-тега (по умолчанию '<phoneme alphabet="%1" ph="%2"/>').
Тип результата: .dic / .hmg определяется автоматически, исходя из структуры pls-файла.

-- пример 1
folder = [[d:\~tmp\etc\gen]]
casesens = true
tag = [[<phoneme ph="%2"/>]]
PlsToDic([[d:\Demagog\work\Dopolneniya.pls]], folder, casesens, tag)

-- пример 2
PlsToDic('Dopolneniya.pls')
-- обрабатывается файл в корневой папке программы
-- результат будет там же
   
2.5. Функции проекта Demagog, доступ к которым открыт интерпретатору Lua  
   
2.5.1. Функции работы с текстом:  
   
StrMatch(s, mask) true или false в зависимости от того, найдено ли совпадение со строкой s по маске mask или набору масок, разделенных символом |, например:

s = 'британские ученые сделали открытие'
fnd = StrMatch(s,'британ*|*учен*')
print(fnd)
-- результат: true
RexMatch(s, mask, pos) ищет совпадение в строке s по регулярному выражению mask с начальной позиции pos (по умолчанию 1); возвращает совпавший фрагмент и позицию его начала. Если не найдено, то возвращает '', 0. Примеры:

-- печать всех строк текста из окна 1, отвечающих заданному регулярному выражению
-- поиск идет с учетом регистра (символ @ в начале РВ)
s = WText(1)
r = [[@^[^\=]*\=[^\=]*вОрон\b[^\=]*$]]
k = 1
while k > 0 do
    fnd, k = RexMatch(s,r,k)
    print(fnd)
    if k > 0 then k = k+#fnd+1 end
end

-- Удаление из текста по шаблону
s = WText(1)
r = [[\bвсе\b\s+\w+\s+\w+ло\b]]
k = 1
while k > 0 do
fnd, k = RexMatch(s,r,k)
if k > 0 then
z = k + #fnd
s = string.sub(s,1,k-1)..string.sub(s,z+1,#s) -- вырезаем найденное
end
end
WNew(1,s) -- обновляем исходный текст

-- найти и выделить в тексте в окне 4 слово "история"
s = WText(4)
mask = [[история]]
fnd, k = RexMatch(s,mask,1)
if k > 0 then WSel(4,k-1,#fnd) end
RexRepl(s, r) замены в строке s по списку rex-правил r. Примеры:

-- тестирование словаря
d = LoadFromFile(HomeFolder('dic')..'Michel.dic',true)
s = WText(1)
z = os.clock()
s = DicRepl(s,d,true,true)
ShowMessage('Time = '..os.clock()-z)
WNew(0,s)
DicMatch(s, mask, pos) ищет совпадение в строке s по dic-выражению mask с начальной позиции pos (по умолчанию 1); возвращает совпавший фрагмент и позицию его начала. Если не найдено, то возвращает '', 0. Пример:

-- печать всех фрагментов текста из окна 2, отвечающих заданному dic-правилу
-- поиск, в данном случае, идет без учета регистра
s = WText(2)
r = [[все * *ло]]
k = 1
while k > 0 do
    fnd, k = DicMatch(s,r,k)
    print(fnd)
    if k > 0 then k = k+#fnd end
end
DicRepl(s, r, fastalg, fancy) замены в строке s по массиву dic-правил r; fastalg = true/false - использовать быстрый алгоритм или прямой перебор, по умолчанию true; fancy = true/false - учитывать ли символы абзацев в результирующей строке, по умолчанию true. Пример:

-- тестирование одиночного правила
r = [[все * *ло=всё ло]]
s = [[Мне все давно надоело...]]
s = DicRepl(s,{r})
ShowMessage(s)
Clipboard(s) поместить в буфер обмена содержимое строки s и возвратить предыдущее текстовое содержание буфера обмена; примеры: s = Clipboard(); sold = Clipboard(snew); s = Clipboard('')
WText(i) возвращает ansi-строку, содержащую текст из вкладки i
WSel(i , pos, len) выделяет фрагмент текста во вкладке i с позиции pos длиной len; WSel(i, pos) устанавливает текстовый курсор в позицию pos - в обоих случаях возвращает итоговую позицию курсора; WSel(i) просто возвращает текущую позицию курсора
WClearSel(i) погасить выделение текста во вкладке i - то же самое, что WSel(i, WSel(i), 0)
WSelText(i, z) заменяет выделенный текст во вкладке i содержимым строки z; WSelText(i) просто возвращает выделенный текст из вкладки i
WActive(i, editmode) делает активной вкладку i (i от 1 до 16)  и возвращает номер предыдущей активной вкладки, например: WActive(7); i = 0 - то же самое, что i = 16; WActive() просто возвращает номер текущей активной вкладки; editmode - по умолчанию true - доступно редактирование текста во вкладке, false - вкладка только для чтения
WName(i) имя файла, открытого во вкладке i; если текст во вкладе еще не сохранен, то возвращает пустую строку; если во вкладке не было ни открытия файла, ни ввода текста, то возвращает false
WNew(i, newtext) загружает во вкладку i текст из строки newtext (если не указана, то подразумевается пустая строка), прежний текст уничтожается; например: WNew(0, 'Лог-файл')
WOpen(i, filename) загружает во вкладку i текст из файла filename
WAdd(i, j, delim) добавляет к тексту во вкладке i текст из вкладки j, используя строку-разделитель delim; например: delim = '\r\n\r\n'; WAdd(1, 9, delim); по умолчанию delim = ''; если j = -1, то к тексту во вкладке i просто добавляется строка delim
WLog(s) добавляет во вкладку Статистики строку s или пустую строку, если параметр не указан
WSave(i, filename) сохранить текст во вкладке i в файл с именем filename; WSave(i) сохраняет текст во вкладке i под прежним именем файла; если текст еще ни разу не был сохранен, то файл создается под "временным" именем
WFilter(i, j, dicname, mode) во вкладке i выполняет замены по словарю из файла dicname, результат помещает во вкладку j; для dic-словарей применяется быстрый алгоритм или алгоритм прямого перебора - смотря что указано в Настройках программы, если не задан параметр mode; иначе: mode=true - быстрый алгоритм, mode=false - прямой перебор
BufNew(s) очистить внутренний буфер (ВБ) и заполнить его строкой s; по умолчанию s = ''
BufOpen(i) показать содержимое ВБ во вкладке i
BufAdd(i, s) добавить к содержимому ВБ текст из вкладки i с разделителем s; по умолчанию s = ''. Если номер вкладки не указан, то просто добавляется строка s
   
2.5.2. Специальные функции:  
   
HomeFolder(f) имя папки f в рабочем каталоге Demagog'a с добавлением полного пути; например, HomeFolder('dic') ==> что-то вроде этого: 'D:\0 - Unicode\Demagog-U\dic\' (в зависимости от того, где находится Demagog на вашем компьютере); HomeFolder() ==> полное имя рабочей папки Demagog'a
CurrentLang() текущий язык интерфейса; возможные значения: 'English', 'Esperanto', 'Russian', 'Spanish', 'Ukrainian'
AllFiles(folder, mask) список имен файлов в папке folder, имена которых отвечают маске mask; например:
a = AllFiles([[D:\Demagog\dic','*.rex]])
если маска начинается с символа '.', то подразумевается '*.'; например '.txt' соответствует '*.txt'
AllFolders(folder, mask) то же самое, что AllFiles(), но возвращает список имен папок, содержащихся в заданной
   
2.5.3. Функции сообщений и диалога:  
   
ShowMessage(s) выводит на экран сообщение s; например: ShowMessage('Расчет закончен')
MessageDialog(s) выводит на экран вопрос s, возвращает true, если "да" и false, если "нет"; например:
answer = MessageDialog('Начать расчет?')
OpenDialog(multiselect) отображает диалог открытия файла; возвращает полное имя выбранного файла, если multiselect = false или не указано; или список полных имен выбранных файлов, если multiselect = true; в случае отказа от выбора возвращает nil
Input(title, prompt) отображает окно ввода данных с заголовком title и названиями вводимых величин, перечисленными в списке promp; например:
coff = Input('Решить квадратное уравнение',{'A=1','B','C'})
значения по умолчанию, если есть, отделяются символом "="; возвращает  список строк; в случае отказа от выбора возвращает nil
Menu(caption, items, ind) отображает окно меню с заголовком caption, пункты которого заданы в списке items; ind - номер выделенного пункта, по умолчанию 1. Возвращает номер выбранного пункта меню или 0, если отказ от выбора. Например, показать все файлы в заданной папке:
Menu('Все словари',AllFiles(HomeFolder('dic'),'.*'))
Folders(caption, initdir, cancreatedir) отображает меню выбора папки с заголовком caption; если задано initdir, то эта папка будет показана выделенной; cancreatedir = true для показа кнопки создания новой папки; возвращает строку - полное имя выбранной папки или false, если отказ от выбора
GaugeInit(max) инициализирует индикатор "бегущая строка", задавая диапазон от 0 до max
Gauge(i) отображает индикатор "бегущая строка" при изменении i от 0 до max;  Пример:

GaugeInit(1000)
for i = 1, 1000 do
    -- какие-то вычисления
    if i % 10 == 0 tnen Gauge(i) end -- продвинуть индикатор в новую позицию
end
Gauge(0) -- погасить индикатор по завершении процесса
ShutdownDialog(ind) отображает запрос о возможности выключения компьютера; ind = 1 или 2 - номер выделенного пункта, по умолчанию 1. Возвращает true или false, в завистмости от ответа пользователя. Пример:
a = ShutdownDialog(); ... if a then os.execute('shutdown /s') end
Sound() короткий звуковой сигнал
   
2.5.4. Функции чтения вслух и записи аудио:  
   
CSpeak() читает вслух текст из буфера обмена
StrSpeak(s) читает вслух строку s
WAuduo(i, targetdir, splitmode) записывает в аудио-файл текст во вкладке i; возвращает true или false, в зависимости от того, подтвердил ли пользователь папку назначения для аудио или отказался; targetdir - принудительно задает папку назначения, отменяя ее запрос, прописанный в Настройках; targetdir = '' означает запись аудио в ту же папку, где находится исходный текст; splitmode = true/false - принудительно задает деление/не деление файла на серии, невзирая на прописанное в Настройках
ForbidTextAutochange() отменяет реакцию функций WAudio, CSpeak, StrSpeak на словари, активированные в Панели словарей. Отменяет (если было задано в Настройках) автоматическое выполнение опций: "Вставлять примечания в текст при открытии файла", "Эвристическое распознавание кодировки русскоязычного текста", "Придать тексту аккуратный вид при открытии файла". Один раз запущенная, действует до окончания скрипта.
   
3. Графическая библиотека Demagog дает возможность получать результаты работы скрипта в наглядной форме, в виде графиков и диаграмм
! для подключения в начале скрипта необходимо указать: require "profiles/grafica"
Общие сведения ось X направлена ВПРАВО
ось Y направлена ВВЕРХ
координаты - это вещественные числа, как положительные, так и отрицательные
0, 0 - начало координат
единицы измерения могут быть ЛЮБЫМИ (преобразование к пиксельным координатам производится автоматически)
все объекты (кроме "точечных" Pix и Dot) - масштабируемые; изображение подстраивается под размер окна Инфографики, с сохранением пропорций
цвет задается строкой из шести 16-ричных цифр; каждые 2 из них обозначают уровень красного, зеленого и синего цветов; например: '000000' - черный, 'FFFFFF' - белый, 'ffc0cb' - розовый (регистр букв неважен)
   
3.1. Рабочая область  
Area(x1,y1,x2,y2) задает рабочую область координатами ее левого-нижнего и правого-верхнего углов; если не задана, то определяется автоматически, расположением и размерами объектов
Polar(x,y,a,b,t) возвращает координаты точки эллипса с центром x, y, полуосями a, b и образующей угол t с осью X
(так можно переводить полярные координаты в декартовы)
   
3.1. Цвета и шрифты  
Pen(h,width) задает цвет и толщину линии; по умолчанию - черный,  1
Brush(h) задает цвет кисти; если пустая строка - то заливка не производится; Brush() без параметров задает случайный цвет заливки
Fill(x, y, h, mode) заполняет замкнутую область цветом текущей кисти от точки x, y; если mode = true, то заполняются все прилегающие области, цвет которых равен h; если mode = false, то то заполняются все прилегающие области, цвет которых НЕ равен h
Font(name,size,h) задает имя, размер и цвет шрифта
   
3.2. Точки  
Pix(x,y,h) задает цвет точки x, y; немасштабируемый объект
Dot(x,y,d) рисует кружок с координатами x, y и диаметром d; немасштабируемый объект, его размер - условность, для комфортной видимости на экране
   
3.3. Линии  
MoveTo(x,y) перемещает графический курсор в точку x, y
LineTo(x,y) чертит линию от текущего положения курсора до точки x, y; туда же переместится и курсор
   
3.4. Примитивы  
TextOut(x,y,text,mode) печатает строку text, относительно точки x, y; mode = 0 - выравнивание по левому краю (по умолчанию). 1 - по правому краю, 2 - по центру; можно использовать предопределенные константы taLeft, taCenter, taRight
Ellipse(x1,y1,x2,y2) рисует эллипс, вписанный в воображаемый прямоугольник с левым-нижним углом x1,y1 и правым-верхним x2,y2
Rectangle(x1,y1,x2,y2) рисует прямоуголник с левым-нижним углом x1,y1 и правым-верхним x2,y2
RoundRect(x1,y1,x2,y2) то же самое, что Rectangle, но со скругленными углами
Polygon(p) рисует многоугольник по множеству точек {x1, y1, ... xN, yN}
Pie(x1,y1,x2,y2,t1,t2) рисует сектор эллипса, вписанного в воображаемый прямоугольник с левым-нижним углом x1,y1 и правым-верхним x2,y2; t1, t2 - начальный и конечный углы (в радианах) - отсчитываются против часовой стрелки
   
3.5. Композиции  
PieChart(c,g)  круговая диаграмма
c - подпись
g -таблица данных: {{name1,percent1,color1}, ... ,{nameN,percentN,colorN}}
Graph(c,g,v) график
c - подпись
g - таблица данных: {{x1,y1}, ... {xN,yN}}
v - таблица параметров (все они - не обязательные, в скобках - значения по умолчанию):
v.AspectRatio - соотношение ширины и высоты (1)
v.SinglePoints - true / false, соединять ли точки графика (true)
v.Framing - обрамлять ли рамкой и надписями (true)
v.penColor - цвет карандаша (случайный)
v.penWidth - толщина карандаша (1)
v.xStep - шаг координатной сетки по оси X (nil)
v.yStep - шаг координатной сетки по оси Y (nil)
v.xEvery - шаг надписей по оси X (nil)
v.yEvery - шаг надписей по оси Y (nil)
v.xmin, v.ymin, v.xmax, v.ymax - размеры области графика, заданные пользователем; если они меньше реальной области графика, то игнорирутся
Histogram(c,g,v) гистограмма
c - подпись
g - таблица данных: {x1, ... xN}
v - таблица параметров (только v.xStep - обязателен!):
v.AspectRatio - соотношение ширины и высоты (1)
v.Framing - обрамлять ли рамкой и надписями (true)
v.fillColor - цвет заливки (случайный)
v.xStep - шаг координатной сетки по оси X = интервал гистограммы
v.yStep -  шаг координатной сетки по оси Y (nil)
v.xEvery - шаг надписей по оси X (nil)
v.yEvery - шаг надписей по оси X (nil)
v.xmin, v.ymin, v.xmax, v.ymax - размеры области гистограммы, заданные пользователем; если они меньше реальной области гистограммы, то игнорирутся
   
3.6. Диалоги  
ColorDialog() возвращает строку - rgb-код цвета, заключенную в апострофы; например:

-- Insert color code in the current tab from the position
-- of the cursor or instead of the selected text

-- Script to execute according to the hot key assigned to it

require "profiles/grafica"

c = ColorDialog()
if c ~= nil then
    c = "'"..c.."'"
    ind = WActive()
    z = WSel(ind)
    b = WSelText(ind)
    WSelText(ind,c)
    WSel(ind,z-#b,8)
end
   
3.7. Управление  
Clear() очищает окно Инфографики от прежних результатов
Show() открывает окно Инфографики
Hide() скрывает окно Инфографики
Render() строит изображение в окне Инфографики
SaveFrame(f) сохраняет изображение в png-файл f; эквивалентно нажатию кнопки "Сохранить" в окне Инфографики
   
3.8. Прочее  
Delay(msec) задерживает выполнение скрипта на msec миллисекунд
GROSS "машинная бесконечность", константа = 1.797693E+308


   
1 Основные шаблоны поиска: . все символы; %a буквы; управляющие символы; %d цифры; %g печатаемые символы, кроме пробельных; %l строчные буквы; %p символы пунктуации; %s пробельные символы; %u заглавные буквы; %w буквенно-цифровые символы; %x шестнадцатеричные.
  Любая из этих букв в верхнем регистре означает дополнение класса, т.е. множество не входящих в него символов. Пример: %A все небуквенные символы.
  %bxy сбалансированная строка, ограниченная слева символом "x" и справа символом "y", например: %b()
  %f[множество_символов] пограничный образец, соответствует пустой строке, только если следующий символ входит в указанное множество, а предыдущий - нет.
2 Магические символы: ( ) захват по образцу; . любой символ; % экранирующий для магических символов; + одно или более повторений; * ноль или более повторений; - 0 или более коротких повторений; ? 0 или 1 вхождение; [ ] диапазон символов; ^ начало строки (или дополнение класса, если в диапазоне символов); $ конец строки;