<commit_before>﻿# = Руководство Cigui
# В данном руководстве описана работа модуля CIGUI,
# а также методы для управления его работой.<br>
# Рекомендуется к прочтению пользователям, имеющим навыки программирования
# (написания скриптов) на Ruby.<br>
# Для получения помощи по командам, обрабатываемым Cigui,
# перейдите по адресу: <https://github.com/deadelf79/CIGUI/wiki>
# ---
# Author:: Sergey 'DeadElf79' Anikin (mailto:<EMAIL>)
# License:: Public Domain (see <http://unlicense.org> for more information)

# Модуль, содержащий данные обо всех возможных ошибках, которые
# может выдать CIGUI при некорректной работе.<br>
# Включает в себя:
# * CIGUIERR::CantStart
# * CIGUIERR::CantReadNumber
# * CIGUIERR::CantReadString
# * CIGUIERR::CantInterpretCommand
# * CIGUIERR::CannotCreateWindow
# * CIGUIERR::WrongWindowIndex
#
module CIGUIERR
  # Ошибка, которая появляется при неудачной попытке запуска интерпретатора Cigui
  # 
  class CantStart < StandardError
	private
	def message
		'Could not initialize module'
	end
  end
  
  # Ошибка, которая появляется, если в строке не было обнаружено числовое значение.<br>
  # Правила оформления строки указаны для каждого типа значений отдельно:
  # * целые числа - CIGUI.decimal
  # * дробные числа - CIGUI.fraction
  #
  class CantReadNumber < StandardError
	private
	def message
		'Could not find numerical value in this string'
	end
  end
  
  # Ошибка, которая появляется, если в строке не было обнаружено строчное значение.<br>
  # Правила оформления строки и примеры использования указаны в описании
  # к этому методу: CIGUI.string
  #
  class CantReadString < StandardError
	private
	def message
		'Could not find substring'
	end
  end
  
  # Ошибка, которая появляется при попытке работать с Cigui после
  # вызова команды <i>cigui finish</i>.
  #
  class CantInterpretCommand < StandardError
	private
	def message
		'Unable to process the command after CIGUI was finished'
	end
  end
  
  # Ошибка создания окна.
  #
  class CannotCreateWindow < StandardError
	private
	def message
		'Unable to create window'
	end
  end
  
  # Ошибка, которая появляется при попытке обращения
  # к несуществующему индексу в массиве <i>windows</i><br>
  # Вызывается при некорректном вводе пользователя
  #
  class WrongWindowIndex < StandardError
	private
	def message
		'Index must be included in range of 0 to internal windows array size'
	end
  end
end

# Инициирует классы, если версия Ruby выше 1.9.0
# 
if RUBY_VERSION.to_f>=1.9
	begin
		# Класс окна с реализацией всех возможностей, доступных при помощи Cigui.<br>
		# Реализация выполнена для RGSS3.
		#
		class Win3 < Window_Selectable
			# Скорость перемещения
			attr_accessor :speed
			# Прозрачность окна. Может принимать значения от 0 до 255
			attr_accessor :opacity
			# Прозрачность фона окна. Может принимать значения от 0 до 255
			attr_accessor :back_opacity
			# Метка окна. Строка, по которой происходит поиск экземпляра
			# в массиве CIGUI.windows при выборе окна по метке (select by label)
			attr_reader :label
			
			# Создает окно. По умолчанию задается размер 192х64 и
			# помещается в координаты 0, 0
			#
			def initialize(x=0,y=0,w=192,h=64)
				super 0,0,192,64
				@label=nil
				@items=[]
				@texts=[]
				@speed=1
			end
			
			# Обновляет окно. Влияет только на положение курсора (параметр cursor_rect),
			# прозрачность и цветовой тон окна.
			def update;end
			
			# Обновляет окно. В отличие от #update, влияет только
			# на содержимое окна (производит повторную отрисовку).
			def refresh
				self.contents.clear
			end
			
			# Задает метку окну, проверяя ее на правильность перед этим:
			# * удаляет круглые и квадратгые скобки
			# * удаляет кавычки
			# * заменяет пробелы и табуляцию на символы подчеркивания
			# * заменяет символы "больше" и "меньше" на символы подчеркивания
			def label=(string)
				# make right label
				string.gsub!(/[\[\]\(\)\'\"]/){''}
				string.gsub!(/[ \t\<\>]/){'_'}
				# then label it
				@label = string
			end
			
			# Этот метод позволяет добавить текст в окно.<br>
			# Принимает в качестве параметра значение класса Text
			def add_text(text)
				add_item(text, "text_#{@index.last}".to_sym, false, true)
			end
			
			# Этот метод добавляет команду во внутренний массив <i>items</i>.
			# Команды используются для отображения кнопок.<br>
			# * command - отображаемый текст кнопки
			# * procname - название вызываемого метода
			# По умолчанию значение enable равно true, что значит,
			# что кнопка включена и может быть нажата.
			# 
			def add_item(command,procname,enabled=true, text_only=false)
				@items+=[
					{
						:command=>command,
						:procname=>procname,
						:enabled=>enabled,
						:x=>:auto,
						:y=>:auto,
						:text_only=text_only
					}
				]
			end
			
			# Метод удаляет команду из внутреннего массива <i>items</i>.<br>
			# В качестве аргумента принимаются:
			# * индекс команды
			# * имя команды
			# * имя вызываемой процедуры
			# 
			def delete_item(indexORcomORproc)
				i=indexORcomORproc
				case i.class
				when Fixnum
				
				when String
					# try to find by commands
					
					# try to find by procnames
				end
			end
			
			# Включает кнопку.<br>
			# В параметр commandORindex помещается либо строковое значение,
			# являющееся названием кнопки, либо целое число - индекс кнопки	во внутреннем массиве <i>items</i>.
			#	enable_item(0) # => @items[0].enabled set 'true'
			#	enable_item('New game') # => @items[0].enabled set 'true'
			# Включение происходит только если кнопка не имеет тип text_only (устанавливается
			# при добавлении с помощью метода #add_text).
			#
			def enable_item(commandORindex)
				case commandORindex.class<commit_msg>Added 'delete_item' to Win3<commit_after>﻿# = Руководство Cigui
# В данном руководстве описана работа модуля CIGUI,
# а также методы для управления его работой.<br>
# Рекомендуется к прочтению пользователям, имеющим навыки программирования
# (написания скриптов) на Ruby.<br>
# Для получения помощи по командам, обрабатываемым Cigui,
# перейдите по адресу: <https://github.com/deadelf79/CIGUI/wiki>
# ---
# Author:: Sergey 'DeadElf79' Anikin (mailto:<EMAIL>)
# License:: Public Domain (see <http://unlicense.org> for more information)

# Модуль, содержащий данные обо всех возможных ошибках, которые
# может выдать CIGUI при некорректной работе.<br>
# Включает в себя:
# * CIGUIERR::CantStart
# * CIGUIERR::CantReadNumber
# * CIGUIERR::CantReadString
# * CIGUIERR::CantInterpretCommand
# * CIGUIERR::CannotCreateWindow
# * CIGUIERR::WrongWindowIndex
#
module CIGUIERR
  # Ошибка, которая появляется при неудачной попытке запуска интерпретатора Cigui
  # 
  class CantStart < StandardError
	private
	def message
		'Could not initialize module'
	end
  end
  
  # Ошибка, которая появляется, если в строке не было обнаружено числовое значение.<br>
  # Правила оформления строки указаны для каждого типа значений отдельно:
  # * целые числа - CIGUI.decimal
  # * дробные числа - CIGUI.fraction
  #
  class CantReadNumber < StandardError
	private
	def message
		'Could not find numerical value in this string'
	end
  end
  
  # Ошибка, которая появляется, если в строке не было обнаружено строчное значение.<br>
  # Правила оформления строки и примеры использования указаны в описании
  # к этому методу: CIGUI.string
  #
  class CantReadString < StandardError
	private
	def message
		'Could not find substring'
	end
  end
  
  # Ошибка, которая появляется при попытке работать с Cigui после
  # вызова команды <i>cigui finish</i>.
  #
  class CantInterpretCommand < StandardError
	private
	def message
		'Unable to process the command after CIGUI was finished'
	end
  end
  
  # Ошибка создания окна.
  #
  class CannotCreateWindow < StandardError
	private
	def message
		'Unable to create window'
	end
  end
  
  # Ошибка, которая появляется при попытке обращения
  # к несуществующему индексу в массиве <i>windows</i><br>
  # Вызывается при некорректном вводе пользователя
  #
  class WrongWindowIndex < StandardError
	private
	def message
		'Index must be included in range of 0 to internal windows array size'
	end
  end
end

# Инициирует классы, если версия Ruby выше 1.9.0
# 
if RUBY_VERSION.to_f>=1.9
	begin
		# Класс окна с реализацией всех возможностей, доступных при помощи Cigui.<br>
		# Реализация выполнена для RGSS3.
		#
		class Win3 < Window_Selectable
			# Скорость перемещения
			attr_accessor :speed
			# Прозрачность окна. Может принимать значения от 0 до 255
			attr_accessor :opacity
			# Прозрачность фона окна. Может принимать значения от 0 до 255
			attr_accessor :back_opacity
			# Метка окна. Строка, по которой происходит поиск экземпляра
			# в массиве CIGUI.windows при выборе окна по метке (select by label)
			attr_reader :label
			
			# Создает окно. По умолчанию задается размер 192х64 и
			# помещается в координаты 0, 0
			#
			def initialize(x=0,y=0,w=192,h=64)
				super 0,0,192,64
				@label=nil
				@items=[]
				@texts=[]
				@speed=1
			end
			
			# Обновляет окно. Влияет только на положение курсора (параметр cursor_rect),
			# прозрачность и цветовой тон окна.
			def update;end
			
			# Обновляет окно. В отличие от #update, влияет только
			# на содержимое окна (производит повторную отрисовку).
			def refresh
				self.contents.clear
			end
			
			# Задает метку окну, проверяя ее на правильность перед этим:
			# * удаляет круглые и квадратгые скобки
			# * удаляет кавычки
			# * заменяет пробелы и табуляцию на символы подчеркивания
			# * заменяет символы "больше" и "меньше" на символы подчеркивания
			def label=(string)
				# make right label
				string.gsub!(/[\[\]\(\)\'\"]/){''}
				string.gsub!(/[ \t\<\>]/){'_'}
				# then label it
				@label = string
			end
			
			# Этот метод позволяет добавить текст в окно.<br>
			# Принимает в качестве параметра значение класса Text
			def add_text(text)
				add_item(text, "text_#{@index.last}".to_sym, false, true)
			end
			
			# Этот метод добавляет команду во внутренний массив <i>items</i>.
			# Команды используются для отображения кнопок.<br>
			# * command - отображаемый текст кнопки
			# * procname - название вызываемого метода
			# По умолчанию значение enable равно true, что значит,
			# что кнопка включена и может быть нажата.
			# 
			def add_item(command,procname,enabled=true, text_only=false)
				@items+=[
					{
						:command=>command,
						:procname=>procname,
						:enabled=>enabled,
						:x=>:auto,
						:y=>:auto,
						:text_only=text_only
					}
				]
			end
			
			# Метод удаляет команду из внутреннего массива <i>items</i>.<br>
			# В качестве аргумента принимаются:
			# * индекс команды
			# * имя команды
			# * имя вызываемой процедуры
			# 
			def delete_item(indexORcomORproc)
				i=indexORcomORproc
				case i.class
				when Fixnum
					@items-=[@items[i.to_i]]
				when String
					# Довольно ненадёжный поиск, но я пока не придумал,
					# как его улучшить. Может, стоит добавить
					# возможность поиска регулярных выражений?
					@items.each{ |item|
						# try to find by commands
						@items-=[item] if item[:command]==i
						# try to find by procnames
						@items-=[item] if item[:procname]==i
					}
				end
			end
			
			# Включает кнопку.<br>
			# В параметр commandORindex помещается либо строковое значение,
			# являющееся названием кнопки, либо целое число - индекс кнопки	во внутреннем массиве <i>items</i>.
			#	enable_item(0) # => @items[0].enabled set 'true'
			#	enable_item('New game') # => @items[0].enabled set 'true'
			# Включение происходит только если кнопка не имеет тип text_only (устанавливается
			# при добавлении с помощью метода #add_text).
			#
			def enable_item(commandORindex)
				case commandORindex.class
{'fraction_non_alphanumeric': 0.08390469660610216, 'fraction_numerical': 0.007799108673294481, 'mean_word_length': 3.450419527078566, 'pattern_counts': {'":': 0, '<': 67, '<?xml version=': 0, '>': 69, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1280725', 'n_tokens_mistral': 5147, 'n_tokens_neox': 5128, 'n_words': 1215}