- Сообщений: 247
- Спасибо получено: 537
Debugger
11 года 8 мес. назад #72703
от Iren_Rin
Так и не удалось починить кодировку пути к проекту, потому что в игре вырезаны почти все кодировки, кроме utf-8 и ANSII-8BIT. 12cp1 нету
Надеюсь мне не придется в итоге писать класс кодировки. Так что печально, но факт - подключение скриптов из вне пока что работает только для проекта, путь к которому задан полностью в ANSII-8BIT символах. Я понимаю, что конечного игрока не заставишь сохранить проект не там, где он хочет, так что постараюсь это как нибудь пофиксить.
Еще узнал что код не исполняется в неактивной консоли, строчки, которые вы ввели сохраняются в буфере винды, а потом передаются на STDIN консоли, когда она становится активна. И с этим я могу бороться только очень грязными способами, так что пусть пока остается как есть.
Я добавил отображение класса и метода, где был установлен break point. Имя файла оказался бесполезным, в случае с внутренними скриптами.
Еще узнал что код не исполняется в неактивной консоли, строчки, которые вы ввели сохраняются в буфере винды, а потом передаются на STDIN консоли, когда она становится активна. И с этим я могу бороться только очень грязными способами, так что пусть пока остается как есть.
Я добавил отображение класса и метода, где был установлен break point. Имя файла оказался бесполезным, в случае с внутренними скриптами.
Спасибо сказали: Lipton
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
11 года 8 мес. назад - 11 года 8 мес. назад #72815
от Iren_Rin
К сожалению решить наскоком проблему с кодировкой пути к проекту не удалось. Поэтому как временное решение для таких проектов предлагаю загружать консоль в проект по старинке - вставив скрипт.
в этом большом файле
сгружены все файлы, и пропущены require команды. Просто вставьте этот скрипт и все должно работать без проблем.
Так же добавил возможность выводить переменные из binding в файл. Это будет работать только в том случае, если ваш проект сохранен в папке, в пути к которой нет кириллицы (не ANSII символов). Функционал получился очень и очень странным, все же нужно сделать нормальную консоль для XP. Запись ведется по умолчанию в файл debugger.txt в корне проекта.
Файл дописывается, старый текст не стирается, чтобы не потерять важную информацию в случае чего. Просто чистите его когда вам нужно. Выводить результат вызова методов не могу - они требуют аргументов и блоков.
Так же добавил возможность выводить переменные из binding в файл. Это будет работать только в том случае, если ваш проект сохранен в папке, в пути к которой нет кириллицы (не ANSII символов). Функционал получился очень и очень странным, все же нужно сделать нормальную консоль для XP. Запись ведется по умолчанию в файл debugger.txt в корне проекта.
Code:
Debugger.render binding #загрузить локальные переменные и переменные объекта
Debugger.render binding, true #загрузить то же, что и сверху, плюс константы, которых может быть много
Последнее редактирование: 11 года 8 мес. назад пользователем Iren_Rin.
Спасибо сказали: DeadElf79
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
11 года 8 мес. назад #72816
от DeadElf79
А загружать без абсолютного пути никак не получится? Раз уж кодировкой дело не решить, то как-то же пути к папкам Data и Graphics находит и без особых проблем. или это особенность require?
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
11 года 8 мес. назад - 11 года 8 мес. назад #72818
от DeadElf79
Насчет гемов - пока хз, но вот загрузка *.rb с помощью require проходит на ура, в $LOAD_PATH итак записана текущая папка.
Гемы это обязательно требуют или можно обойтись, не пробовал? Если требуют, попробуй как раз $LOAD_PATH+'some gem name'.
Гемы это обязательно требуют или можно обойтись, не пробовал? Если требуют, попробуй как раз $LOAD_PATH+'some gem name'.
Последнее редактирование: 11 года 8 мес. назад пользователем DeadElf79. Причина: дополнил тут про гемы
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
11 года 8 мес. назад #72819
от DeadElf79
Решение исключительно для винды. Возможно, что где-либо еще оно не будет поддерживаться, поэтому можно включить его в сборку с пометкой об этом.
Короче, мы переводим строку в номера символов в таблице кодировки CP1251, если номер символа больше 128, то проверяем, содержится ли русская буква под его номером и заменяем ее на соответствующую букву в кодировке UTF8.
Пример кода:
Название папки символическое - Дебаггер.
Результат вывода:
- значит, что букву "Д" он уже точно перевел в нужную кодировку, ура!
Кстати, специально для аккуратности выполнения, немного модифицировал твой же код для скрипта в мейкере:
Теперь он будет выдавать ошибку и не вылетать. Вылеты меня раздражали
Короче, мы переводим строку в номера символов в таблице кодировки CP1251, если номер символа больше 128, то проверяем, содержится ли русская буква под его номером и заменяем ее на соответствующую букву в кодировке UTF8.
Пример кода:
Code:
str=File.expand_path(".")
ords=str.each_char.to_a
arr=[]
ords.each{ |item|
if item.ord<128
arr<<item
else
puts item.ord
case item.ord
when 196
arr<<["Д"]
end
end
}
arr.each{ |item|
puts item
}
Название папки символическое - Дебаггер.
Результат вывода:
Кстати, специально для аккуратности выполнения, немного модифицировал твой же код для скрипта в мейкере:
Code:
class SideScriptsLoader
class << self
def load(dir)
new(dir).load
end
def add_to_path(dir)
new(dir).add_to_path
end
end
def initialize(dir)
@dirname = File.expand_path dir, Dir.pwd
end
def load
if @dirname.ascii_only?
load_entries if Dir.exist? @dirname
else
puts 'error in load'
end
end
def add_to_path
if @dirname.ascii_only?
$LOAD_PATH << @dirname if Dir.exist? @dirname
else
puts 'error in add to path'
end
end
private
def load_entries
Dir.entries(@dirname).each do |entry|
require filname(entry) if entry =~ /\.rb\Z/
end
end
def filname(entry)
File.expand_path File.join(@dirname, entry), Dir.pwd
end
end
SideScriptsLoader.add_to_path 'lib' #добавляем lib папку в $LOAD_PATH
SideScriptsLoader.load 'lib' #загружаем все rb файлы из lib папки
Теперь он будет выдавать ошибку и не вылетать. Вылеты меня раздражали
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
11 года 8 мес. назад #72825
от Iren_Rin
Строки это последовательность байтов с меткой кодировки. Нам не нужно отображать строку с путем, нам нужно ее правильно предоставить и загрузить по ней файл. В своем способе ты заменяешь одни байты, на другие, да это можно отоброзить на экране, но когда ты сделаешь require такой строки, руби не найдут файла. Для примера - попробуй просто скопировать путь к папке из адресной строки, вставить это в игровой редактор скриптов, и сделать require - файл не будет найден.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
11 года 8 мес. назад #72872
от Iren_Rin
- Файл batch.rb переехал в отдельную папку batch/
- Исправил баг с сепаратором класса \ метода - убрал ошибку, и теперь методы класса \ объекта обозначаются так:
- Добавил метод bug для binding.
- Исправил баг с сепаратором класса \ метода - убрал ошибку, и теперь методы класса \ объекта обозначаются так:
Code:
MyClass#instance_method
MyClass.class_method
Code:
Debugger.load_console binding #так все еще работает
binding.bug #тоже самое, что и сверху.
Спасибо сказали: DeadElf79
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
11 года 7 мес. назад #73621
от DeadElf79
Вроде как обошел require с его ошибками в кодировке и прочими "прелестями". Написал все достаточно просто, если оформить как надо - будет вообще хорошо.
Демка с примером: yadi.sk/d/FCa9W9c-bSztM
Демка с примером: yadi.sk/d/FCa9W9c-bSztM
Спасибо сказали: Iren_Rin
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Время создания страницы: 0.101 секунд
