module CIGUI - RDoc Documentation

RDoc

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_log[R]

Хранит массив всех произведенных действий (все записи last).<br> Действия записываются только если параметр ::logging имеет значение true. Результаты работы decimal, fraction, boolean, substring и их расширенных аналогов не логгируются.<br> Открыт только для чтения.

logging[RW]

Флаг включения/выключения логгирования действий. Если имеет значение true, то записи всех произведенных действий с момента применения значения будут записываться в массив ::last_log

sprites[R]

Внутренний массив для вывода информации обо всех созданных спрайтах.<br> Открыт только для чтения.

windows[R]

Внутренний массив для вывода информации обо всех созданных окнах.<br> Открыт только для чтения.

Public Class Methods

bool(source_string, prefix='', postfix='') click to toggle source

Данный метод работает по аналогии с 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
boolean(source_string) click to toggle source

Данный метод производит поиск булевого значения (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
dec(source_string, prefix='', postfix='', std_conversion=true) click to toggle source

Данный метод работает по аналогии с 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
decimal(source_string, std_conversion=true) click to toggle source

Данный метод возвращает первое попавшееся целое число, найденное в строке 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
frac(source_string, prefix='', postfix='', std_conversion=true) click to toggle source

Данный метод работает по аналогии с 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
fraction(source_string, std_conversion=true) click to toggle source

Данный метод работает по аналогии с 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
last() click to toggle source

Возвращает сообщение о последнем произведенном действии или классе последнего использованного объекта, используя метод 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(source_string) click to toggle source

Возвращает массив из четырех значений для передачи в качестве параметра в объекты класса 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
setup() click to toggle source

Требуется выполнить этот метод перед началом работы с 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
substr(source_string, prefix='', postfix='') click to toggle source

Данный метод работает по аналогии с 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
substring(source_string) click to toggle source

Данный метод производит поиск подстроки, используемой в качестве параметра.<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
update(clear_after_update=true) click to toggle source

Вызывает все методы обработки команд, содержащиеся в массиве $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
update_by_user(string) click to toggle source

Метод обработки текста, созданный для пользовательских модификаций, не влияющих на работу встроенных обработчиков.<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
update_internal_objects() click to toggle source

Вызывает обновление всех объектов из внутренних массивов ::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