Форум сайта python.su
Добрый вечер. Вдохновился глупой идеей, написать интерпретатор brainfuck'а на питоне с ГУИ и простеньким дебагером. Проблемы возникли с дебагом. Суть его такова, что снизу выводятся ячейки, а команда брейнфака, которая в данный момнет выполняется выделяется жирным шрифтом. Вот пример кода, для выделения команды жирным цветом:
def SyntaxLight(self):
string=str(self.inputText.toPlainText())
string=list(string)
for p in range(0,len(string)):
if p==self.i:
string[p]='<b>'+string[p]+'</b>'
temp=''.join(string)
temp.replace('<','<')
temp.replace('>','>')
self.inputText.setText(temp)
++++++++++>++Он после подсвечивания первой команды “+” переделывает в(стоит сказать, что команду он все таки подсвечивает:))
.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.
——.——–.>+.>.
++++++++++[>+++++++>++++++++++>+++>+++ .>+.+++++++..+++.>++..+++. ——.——–.>+.>.При этом не все списки команд он переделывает, понять при каких именно комбинациях не смог.
Офлайн
temp.replace('<','<'), temp.replace('>','>') - ты походу этим макаром теги разметки раскурочил:) Затем, цикл тут зачем? можно так написать: string = string + ‘<b>’ + string + </b> + string
Потом: лучше бы ты где-то запоминал код программы, а не брал его каждый раз из self.inputText; str.replace() - не делает преобразований на месте, их надо сохранить в переменную, т.е. вместо temp.replace('>','>'), надо писать temp = temp.replace('>','>').
В общем у меня это как-то так вышло:
your_raw_source_code = '++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++'
buffer = []
for c in your_raw_source_code:
if c == '<':
c = '<'
elif c == '>':
c = '>'
elif c == '\n':
c = '<br />'
buffer.append(c)
string = buffer[:self.i] + ['<b>'] + buffer[self.i] + ['</b>'] + buffer[self.i+1]
self.inputText.setText(''.join(string))
Офлайн
poltergeistМаркеры я уже потом приделал, подумал, что без них худо)
temp.replace('<','<'), temp.replace('>','>') - ты походу этим макаром теги разметки раскурочил:) Затем, цикл тут зачем? можно так написать: string = string + ‘<b>’ + string + </b> + string
Потом: лучше бы ты где-то запоминал код программы, а не брал его каждый раз из self.inputText; str.replace() - не делает преобразований на месте, их надо сохранить в переменную, т.е. вместо temp.replace('>','>'), надо писать temp = temp.replace('>','>').
Отредактировано (Май 22, 2009 23:56:22)
Офлайн
Ты что-то путаешь, у тебя в коде выше явные проблемы. Напиши тут какой хтмл ты вставляешь, что ожидаешь увидеть и что ты видишь на самом деле.
Попробуй сделать ещё print self.inputText.toHtml(), что выдаст?
У меня всё нормально сработало, возможно и баг, а возможно и ты где-то что-то упустил.
Офлайн
Вообщем дело обстоит так…
если выполнить команду
self.inputText.setHtml('++++++++++>++.>+.+++++++.
.+++.>++.<<+++++++++++++++.>.+++.——.——–.>+.>.')
он выдает в результате
++++++++++[>+++++++>++++++++++>+++>+++.>+.+++++++..+++.>++..+++.——.——–.>+.>.
то есть там теги или нет, все равно вырезает некоторые символы. Я хочу чтобы после смещения команды, в данном случае от первого + до второго +, второй плюс выделялся жирным, соответсвенно, когда выполняется третий +, то уже он подсвечивается жирным.
если вместо setHtml использовать setText или setPlaintext то отображается все правильно. Но если в строчке команд списать любой хтмл тег, то и при setText и при setHtml он высвечивает неправильно.
Отредактировано (Май 23, 2009 15:06:15)
Офлайн
Ступил, все вы правильно написали, спасибо) Проблема была в ‘>’ и ‘<’, которые наверно он по ошибке воспринимал как десрикпотры хтмл, от сюда скрытие оного из текста
Офлайн