module CIGUI
Основной модуль, обеспечивающий работу Cigui.<br> Для передачи команд используйте массив $do, например:
-
$do<<“команда”
-
$do.push(“команда”)
Оба варианта имеют один и тот же результат.<br> Перед запуском модуля вызовите метод ::setup.<br> Для исполнения команд вызовите метод ::update.<br>
In Files
- cigui.rb
- localize.rb
Constants
- CMB
Хэш-таблица всех возможных сочетаний слов из VOCAB и их положения относительно друг друга в тексте.<br> Именно по этим сочетаниям производится поиск команд Cigui в тексте. Редактировать без понимания правил составления регулярных выражений не рекомендуется.
- VOCAB
Специальный словарь, содержащий все используемые команды Cigui. Предоставляет возможности не только внесения новых слов, но и добавление локализации (перевода) имеющихся (см. update_by_user).<br> Для удобства поиска разбит по категориям:
-
common - общие команды, не имеющие категории;
-
cigui - управление интерпретатором;
-
event - событиями на карте;
-
map - параметрами карты;
-
picture - изображениями, используемыми через команды событий;
-
sprite - самостоятельными изображениями;
-
text - текстом и шрифтами
-
window - окнами.
Русификацию этого словаря Вы можете найти в файле localize.rb по адресу: <github.com/deadelf79/CIGUI/>, если этот файл не приложен к демонстрационной версии проекта, который у Вас есть.
-
Attributes
Хранит массив всех произведенных действий (все записи last).<br> Действия записываются только если параметр ::logging имеет значение true. Результаты работы decimal, fraction, boolean, substring и их расширенных аналогов не логгируются.<br> Открыт только для чтения.
Флаг включения/выключения логгирования действий. Если имеет значение true, то записи всех произведенных действий с момента применения значения будут записываться в массив ::last_log
Внутренний массив для вывода информации обо всех созданных спрайтах.<br> Открыт только для чтения.
Внутренний массив для вывода информации обо всех созданных окнах.<br> Открыт только для чтения.
Public Class Methods
Данный метод работает по аналогии с boolean, но производит поиск в строке с учетом указанных префикса (текста перед подстрокой) и постфикса (после подстроки).<br> prefix и postfix могут содержать символы, используемые в регулярных выражениях Если булевое значение в строке не обнаружено, по умолчанию возвращает false.
# File cigui.rb, line 1444 def bool(source_string, prefix='', postfix='') match=prefix+"((?:#{VOCAB[:true]}|#{VOCAB[:false]}))"+postfix if source_string.match(match).size>1 return false if source_string.match(/#{match}/)[1]==nil match2="(#{VOCAB[:true]})" return true if source_string.match(/#{match2}/)[1] end return false end
Данный метод производит поиск булевого значения (true или false) в строке и возвращает его. Если булевое значение в строке не обнаружено, по умолчанию возвращает false.<br> Слова true и false берутся из словаря VOCAB, что значит, что их локализованные версии также могут быть успешно найдены при поиске.
# File cigui.rb, line 1328 def boolean(source_string) match="((?:#{VOCAB[:true]}|#{VOCAB[:false]}))" if source_string.match(match).size>1 return false if source_string.match(/#{match}/)[1]==nil match2="(#{VOCAB[:true]})" return true if source_string.match(/#{match2}/)[1] end return false end
Данный метод работает по аналогии с decimal, но производит поиск в строке с учетом указанных префикса (текста перед числом) и постфикса (после числа).<br> Метод не требует обязательного указания символов квадратных и круглых скобок, а также одинарных и двойных кавычек вокруг числа.<br> prefix и postfix могут содержать символы, используемые в регулярных выражениях для более точного поиска.
dec('x=1cm','x=','cm') # => 1 dec('y=120 m','[xy]=','[\s]*(?:cm|m|km)') # => 120
В отличие от frac, возвращает целое число. <br> Метод работает вне зависимости от работы модуля - нет необходимости запускать для вычисления setup и update.
# File cigui.rb, line 1395 def dec(source_string, prefix='', postfix='', std_conversion=true) frac(source_string, prefix, postfix, std_conversion).to_i rescue raise "#{CIGUIERR::CantReadNumber}\n\tcurrent line of $do: #{source_string}" end
Данный метод возвращает первое попавшееся целое число, найденное в строке source_string.<br> Производит поиск только в том случае, если число записано:
-
в скобки, например (10);
-
в квадратные скобки, например [23];
-
в кавычки(апострофы), например '45';
-
в двойные кавычки, например “8765”.
Также, вернет всю целую часть числа записанную:
-
до точки, так здесь [1.35] вернет 1;
-
до запятой, так здесь (103,81) вернет 103;
-
до первого пробела (при стандартной конвертации в целое число), так здесь “816 586,64” вернет только 816;
-
через символ подчеркивания, так здесь '1_000_0_0_0,143' вернет ровно один миллион (1000000).
Если присвоить std_conversion значение false, то это отменит стандартную конвертацию строки, встроенную в Ruby, и метод попробует найти число, игнорируя пробелы, табуляцию и знаки подчеркивания. Выключение std_conversion может привести к неожиданным последствиям.
decimal('[10,25]') # => 10 decimal('[1 0 2]',false) # => 102 decimal('[1_234_5678 89]',false) # => 123456789
<br> Метод работает вне зависимости от работы модуля - нет необходимости запускать для вычисления setup и update.
# File cigui.rb, line 1281 def decimal(source_string, std_conversion=true) fraction(source_string, std_conversion).to_i rescue raise "#{CIGUIERR::CantReadNumber}\n\tcurrent line of $do: #{source_string}" end
Данный метод работает по аналогии с fraction, но производит поиск в строке с учетом указанных префикса (текста перед числом) и постфикса (после числа).<br> Метод не требует обязательного указания символов квадратных и круглых скобок, а также одинарных и двойных кавычек вокруг числа.<br> prefix и postfix могут содержать символы, используемые в регулярных выражениях для более точного поиска.
frac('x=31.2mm','x=','mm') # => 31.2 frac('y=987,67 m','[xy]=','[\s]*(?:cm|m|km)') # => 987.67
В отличие от dec, возвращает рациональное число. <br> Метод работает вне зависимости от работы модуля - нет необходимости запускать для вычисления setup и update.
# File cigui.rb, line 1413 def frac(source_string, prefix='', postfix='', std_conversion=true) match=prefix+'([\-\+]?[\d\s_]*(?:[\s]*[\,\.][\s]*(?:[\d\s_]*))*)'+postfix return source_string.match(/#{match}/)[1].gsub!(/[\s_]*/){}.to_f if !std_conversion source_string.match(/#{match}/)[1].to_f rescue raise "#{CIGUIERR::CantReadNumber}\n\tcurrent line of $do: #{source_string}" end
Данный метод работает по аналогии с decimal, но возвращает рациональное число (число с плавающей запятой или точкой).<br> Имеется пара замечаний к правилам использования в дополнение к упомянутым в decimal:
-
Все цифры после запятой или точки считаются дробной частью и также могут содержать помимо цифр символ подчёркивания;
-
При наличии между цифрами в дробной части пробела вернет ноль (в стандартной конвертации в целое или дробное число).
Если присвоить std_conversion значение false, то это отменит стандартную конвертацию строки, встроенную в Ruby, и метод попробует найти число, игнорируя пробелы, табуляцию и знаки подчеркивания. Выключение std_conversion может привести к неожиданным последствиям.
fraction('(109,86)') # => 109.86 fraction('(1 0 9 , 8 6)',false) # => 109.86
<br> Метод работает вне зависимости от работы модуля - нет необходимости запускать для вычисления setup и update.
# File cigui.rb, line 1302 def fraction(source_string, std_conversion=true) match='(?:[\[|"\(\])[\s]*([\-\+]?[\d\s_]*(?:[\s]*[\,\.][\s]*(?:[\d\s_]*))*)(?:[\]|"\)\])' return source_string.match(/#{match}/)[1].gsub!(/[\s_]*/){}.to_f if !std_conversion source_string.match(/#{match}/)[1].to_f rescue raise "#{CIGUIERR::CantReadNumber}\n\tcurrent line of $do: #{source_string}" end
Возвращает сообщение о последнем произведенном действии или классе последнего использованного объекта, используя метод Kernel.inspect.<br> Пример:
CIGUI.setup puts CIGUI.last # => 'CIGUI started'
# File cigui.rb, line 1461 def last @last_action.is_a?(String) ? @last_action : @last_action.inspect end
Возвращает массив из четырех значений для передачи в качестве параметра в объекты класса Rect. Массив в строке должен быть помещен в квадратные скобки, а значения в нем должны разделяться точкой с запятой.<br> Пример:
rect('[1;2,0;3.5;4.0_5]') # => [ 1, 2.0, 3.5, 4.05 ]
# File cigui.rb, line 1344 def rect(source_string) read='' start=false arr=[] for index in 0...source_string.size char=source_string[index] if char=='[' start=true next end if start if char!=';' if char!=']' read+=char else arr<<read break end else arr<<read read='' end end end if arr.size<4 for index in 1..4-arr.size arr<<0 end elsif arr.size>4 arr.slice!(4,arr.size) end for index in 0...arr.size arr[index]=dec(arr[index]) if arr[index].is_a? String arr[index]=0 if arr[index].is_a? NilClass end return arr end
Требуется выполнить этот метод перед началом работы с CIGUI.<br> Инициализирует массив $do, если он еще не был создан. В этот массив пользователь подает команды для исполнения при следующем запуске метода update.<br> Если даже массив $do был инициализирован ранее, то исполняет команду cigui start прежде всего.<br> Пример:
begin CIGUI.setup #~~~ some code fragment ~~~ CIGUI.update #~~~ some other code fragment ~~~ end
# File cigui.rb, line 1201 def setup $do||=[] $do.insert 0,'cigui start' _setup end
Данный метод работает по аналогии с substring, но производит поиск в строке с учетом указанных префикса (текста перед подстрокой) и постфикса (после подстроки).<br> Указание квадратных или круглый скобок, а также экранированных одинарных или двойных кавычек в строке после префикса обязательно. prefix и postfix могут содержать символы, используемые в регулярных выражениях для более точного поиска.<br> Пример:
puts 'Who can make me strong?' someone = substring("Make[ me ]invincible",'Make','invincible') puts 'Only'+someone # => 'Only me'
Метод работает вне зависимости от работы модуля - нет необходимости запускать для вычисления setup и update.
# File cigui.rb, line 1433 def substr(source_string, prefix='', postfix='') match=prefix+'(?:[\[\(\"\])[\s]*([\w\s _\!\#\$\%\^\&\*]*)[\s]*(?:[\]|"\)\])'+postfix return source_string.match(/#{match}/)[1] rescue raise "#{CIGUIERR::CantReadString}\n\tcurrent line of $do: #{source_string}" end
Данный метод производит поиск подстроки, используемой в качестве параметра.<br> Строка должна быть заключена в одинарные или двойные кавычки или же в круглые или квадратные скобки. Пример:
substring('[Hello cruel world!]') # => Hello cruel world! substring("set window label='SomeSome' and no more else") # => SomeSome
# File cigui.rb, line 1317 def substring(source_string) match='(?:[\[\(\"\])[\s]*([\w\s _\!\#\$\%\^\&\*]*)[\s]*(?:[\]|"\)\])' return source_string.match(match)[1] rescue raise "#{CIGUIERR::CantReadString}\n\tcurrent line of $do: #{source_string}" end
Вызывает все методы обработки команд, содержащиеся в массиве $do.<br> Вызовет исключение CIGUIERR::CantInterpretCommand в том случае, если после выполнения cigui finish в массиве $do будут находится новые команды для обработки.<br> По умолчанию очищает массив $do после обработки всех команд. Если clear_after_update поставить значение false, то все команды из массива $do будут выполнены повторно при следующем запуске этого метода.<br> Помимо приватных методов обработки вызывает также метод update_by_user, который может быть модифицирован пользователем (подробнее смотри в описании метода).<br>
# File cigui.rb, line 1217 def update(clear_after_update=true) $do.each do |line| _restart? line _common? line _cigui? line _window? line #_ update_internal_objects update_by_user(line) end $do.clear if clear_after_update end
Метод обработки текста, созданный для пользовательских модификаций, не влияющих на работу встроенных обработчиков.<br> Используйте alias этого метода при добавлении обработки собственных команд.<br> Пример:
alias my_update update_by_user def update_by_user # add new word VOCAB[:window][:throw]='throw' # add 'window throw' combination CMB[:window_throw]="(?:(?:#{VOCAB[:window][:main]})+[\s]*(?:#{VOCAB[:window][:throw]})+)" # call method window_throw? line end
# File cigui.rb, line 1255 def update_by_user(string) end
Вызывает обновление всех объектов из внутренних массивов ::windows и ::sprites.<br> Вызывается автоматически по окончании обработки команд из массива $do в методе update.
# File cigui.rb, line 1232 def update_internal_objects @windows.each{ |win| win.update if win.is_a? Win3 } @sprites.each{ |spr| spr.update if spr.is_a? Spr3 } end