Python подсветка синтаксиса с (текстовый редактор) YAML

голоса
-1

Я создаю простой редактор текста в Python с использованием модуля Tkinter. Недавно я хотел добавить подсветку синтаксиса функции в моем текстовом редакторе. Я имею в виду некоторые PDF и создать этот кусок кода, но возникли некоторые проблемы. Спасибо за помощь

К ним относятся следующие ошибки:

imtiyaz@Baka:~/Dropbox/NoteBooktest/test$ python3 high.py
Traceback (most recent call last):
  File high.py, line 48, in <module>
     hello(root,'yamlsh.yml')
  File high.py, line 33, in __init__
     self.parse_syntax_file()
  File high.py, line 13, in parse_syntax_file
     self.numbers_color = config['number']['color']
KeyError: 'number'

Ниже приведен фрагмент кода
код high.py

from tkinter import *
import yaml

class hello:
 def parse_syntax_file(self):
   with open(self.syntax_file,'r') as stream:
   try:
     config = yaml.load(stream)
   except yaml.YAMLError as error:
     print(error)
     return
   self.categories = config['categories']
   self.numbers_color = config['number']['color']
   self.strings_color = config['string']['color']
   self.configure_tag()

 def configure_tag(self):
   for category in self.categories.keys():
     self.color = self.categories['category']['color']
     self.text_waidget.tag_configure(category, foreground=self.color)
   self.text_widget.tag_configure(number, foreground=self.numbers_color)
   self.text_widget.tag_configure(string, foreground=self.strings_color)

 def __init__(self,master, syntax_file):
   self.master = master
   self.syntax_file = syntax_file
   self.text_widget =  Text(self.master)
   self.text_widget.pack()
   self.categories = None
   self.numbers_color = 'green'
   self.strings_color = 'red'
   self.disallow_pre_char = [_,-,,,.]
   self.parse_syntax_file()
   self.text_widget.bind('<KeyRelease>',self.on_key_release)

 def on_key_release(self, event=None):
   self.highlight()

 def highlight(self, event=None):
   length = IntVar()
   for category in self.categories:
     matche = self.categories[category]['matche']
     for keyword in matche:
       start = 1.0
   self.text_widget.tag_add(category,idx,end)

root = Tk()
hello(root,'yamlsh.yml')
root.mainloop()`


yamlsh.yml

categories:
   Keywords:
    color:orange
    matche:[for, def, while, from, import, as, with, self]

    variables:
      color: red4
      matche: ['True', 'False', 'None']

    conditionals:
       color: green
       matche: [try, except, if, else, elif]

    functions:
       color: blue4
       matche: [int,str,dict,list,set,float]
    number:
       color: green;
    string:
       color: '#e1218b'

Еще раз спасибо!

Задан 20/10/2018 в 05:47
источник пользователем
На других языках...                            


1 ответов

голоса
1

Файл YAML имеет синтаксические ошибки, хотя это не проблема. После того, как вы исправить синтаксические ошибки вы первым делать это:

config = yaml.load(stream)

config Теперь отображение (словарь) с помощью одной клавиши, «категории», и это отображение с помощью одной клавиши «Ключевые слова».

Позже вы делаете это:

self.numbers_color = config['number']['color']

configне имеет ключ «номер», так что вы получите ошибку клавишного. Единственный ключ configимеет это categories, и единственное ключевое слово при том , что это «Ключевые слова».

Если вы пытаетесь получить значение «зеленый», что вам нужно сделать что-то вроде этого:

# get the 'categories' mapping
self.categories = config['categories']

# from 'categories', get the 'Keywords' mapping
self.keywords = self.categories['Keywords']

# from the 'Keywords' mapping, get the 'color' value for 'number'
self.numbers_color = self.keywords['number']['color']
Ответил 20/10/2018 в 12:48
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more