Важная информация

User Tag List

Страница 6 из 16 ПерваяПервая ... 2345678910 ... ПоследняяПоследняя
Показано с 51 по 60 из 151

Тема: Z80 Asm plugin for Sublime Text 2

  1. #51
    Master Аватар для elf/2
    Регистрация
    14.01.2005
    Адрес
    N.Novgorod
    Сообщений
    803
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию xasify

    жалкое подобие XAS'ного автоформата, парсер тупейший, автоформатируем по enter'у

    пишем с начала строки, без таба и пробела. если первый кусок строки похож на название регистра, то считаем что это LD. если кусок похож на флаг и второго аргумента нет, то это ret. если второй аргумент есть - call

    мнемоники, регистры и флаги переводим в верхний регистр.

    стоит на это тратить время?

    Код:
    import re
    from operator import methodcaller
    unify = methodcaller('upper')
    
    mnemonics = set('adc|add|and|bit|call|ccf|cp|cpl|cpd|cpdr|cpi|cpir|daa|dec|di|djnz|ei|ex|exx|halt|im|in|inc|ind|indr|inf|ini|inir|jp|jr|ld|ldd|lddr|ldi|ldir|neg|nop|exx|or|otdr|otir|out|outd|outi|pop|push|res|ret|reti|retn|rl|rla|rlc|rlca|rld|rr|rra|rrc|rrca|rrd|rst|sbc|scf|set|sla|sli|sll|sra|srl|sub|xor'.split('|'))
    registers = set("a|b|c|d|e|h|l|i|r|xl|lx|xh|hx|ixl|ixh|yl|ly|yh|hy|iyl|iyh|af|bc|de|hl|sp|ix|iy|af'|(hl)|(de)|(bc)|(ix)|(iy)".split('|'))
    flags = set('z|nz|c|nc|po|pe|p|m'.split('|'))
    
    def format_args(args, extra):
        r = []
        if args:
            r.append(' ')
            if len(args) > 1:
                r.append(','.join(args))
            else:
                r.append(args[0])
    
        if extra:
            r.append('\t')
            r.append(extra)
        return r
    
    def parse_args(line, parts, split_base):
    	args = []
    	extra = None
    	for i, p in enumerate(parts[split_base:]):
    		if i > 1:
    			parts = re.split('\s+|,\s*', line, maxsplit=split_base + 2)
    			extra = parts[-1]
    			break
    		if p.startswith(';'):
    			parts = re.split('\s+|,\s*', line, maxsplit=split_base + i)
    			extra = parts[-1]
    			break
    		else:
    			if p.lower() in registers or p.lower() in flags:
    				args.append(unify(p))
    			else:
    				args.append(p)
    
    	return args, extra
    
    class xasify(sublime_plugin.TextCommand):
    	def run(self, edit):
    		line = self.view.line(self.view.sel()[0])
    		l = self.view.substr(line)
    
    		if l.startswith((' ', '\t', ';')):
    			return
    		parts = re.split('\s+|,\s*', l)
    
    		tokens = []
    
    		if parts[0].lower() in mnemonics:
    			tokens.append('\t')
    			tokens.append(unify(parts[0]))
    			args, extra = parse_args(l, parts, 1)
    		elif len(parts) > 1 and parts[1].lower() in mnemonics:
    			tokens.append(parts[0])
    			tokens.append('\t')
    			tokens.append(unify(parts[1]))
    			args, extra = parse_args(l, parts, 2)
    		elif parts[0] in registers:
    			tokens.append('\t' + unify('LD'))
    			args, extra = parse_args(l, parts, 0)
    		elif parts[0] in flags:
    			args, extra = parse_args(l, parts, 0)
    			if len(args) == 1:
    				tokens.append('\t' + unify('RET'))
    			else:
    				tokens.append('\t' + unify('CALL'))
    
    		tokens.extend(format_args(args, extra))
    		new_line = ''.join(tokens)
    
    		self.view.replace(edit, line, new_line + '\n')
    Код:
    	{
    		"keys": ["enter"], "command": "xasify",
    		"context": [
    			{
    				"operand": "source.z80asm",
    				"operator": "equal",
    				"key": "selector"
    			}
    		]
    	}

  2. #52
    Banned
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,094
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от elf/2 Посмотреть сообщение
    стоит на это тратить время?
    круто! была такая идея - сделать автодополнение, как в шторме но у меня руки не скоро дойдут... так что если есть желание - я только рад.

    там сейчас тока ентером нельзя строки вставлять при этом...

  3. #53
    Master Аватар для elf/2
    Регистрация
    14.01.2005
    Адрес
    N.Novgorod
    Сообщений
    803
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от psb Посмотреть сообщение
    круто! была такая идея - сделать автодополнение, как в шторме
    а где можно про штормовое автодополнение почитать? в смысле есть ли где-нибудь правила по которым оно работает?
    Цитата Сообщение от psb Посмотреть сообщение
    там сейчас тока ентером нельзя строки вставлять при этом...
    мой косяк как-то вот так надо написать
    Код:
    		if l.startswith((' ', '\t', ';')) or line.empty():
    			self.view.insert(edit, self.view.sel()[0].begin(), '\n')
    			return

  4. #54
    Banned
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,094
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от elf/2 Посмотреть сообщение
    а где можно про штормовое автодополнение почитать?
    скорее всего нигде, только шторм загрузить и ставить эксперименты. но смысл там такой же, если написать a,b или a b (в любом месте строки), то он сделает ld a,b. и он убирает лишние пробелы. очень похоже на твое автодополнение.

  5. #55
    Super Moderator Аватар для Alex Rider
    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,908
    Спасибо Благодарностей отдано 
    29
    Спасибо Благодарностей получено 
    89
    Поблагодарили
    31 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Поставил Sublime Text 3, положил содержимое скачанного архива в %UserProfile%\AppData\Roaming\Sublime Text 3\Packages\User\
    Появился пункт меню "Z80ASM", в нем почти все менюайтемы задизейблены (сеттинги открывают путсые файлы). Code Completion в рамках проекта не показывает метки из других мдулей (только имена модулей). ЧЯДНТ?

  6. #56
    Banned
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,094
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    скорее всего надо было положить просто в Packages, без user.

  7. #57
    Super Moderator Аватар для Alex Rider
    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,908
    Спасибо Благодарностей отдано 
    29
    Спасибо Благодарностей получено 
    89
    Поблагодарили
    31 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от psb Посмотреть сообщение
    скорее всего надо было положить просто в Packages, без user.
    Так еще хуже:
    ---------------------------
    Sublime Text
    ---------------------------
    Error loading syntax file "Packages/User/sublime-text-z80asm-master/z80asm/z80asm.tmLanguage": Unable to open Packages/User/sublime-text-z80asm-master/z80asm/z80asm.tmLanguage
    ---------------------------
    OK
    ---------------------------

    ---------------------------
    Sublime Text
    ---------------------------
    Error loading colour scheme Packages/z80asm/z80asm.tmTheme: Unable to open Packages/z80asm/z80asm.tmTheme
    ---------------------------
    OK
    ---------------------------

  8. #58
    Banned
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,094
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex Rider Посмотреть сообщение
    Error loading syntax file "Packages/User/sublime-text-z80asm-master/z80asm/z80asm.tmLanguage"
    а должно быть вот так: Packages/z80asm/z80asm.tmLanguage

  9. #59
    Guru Аватар для breeze
    Регистрация
    11.02.2005
    Адрес
    【RB】
    Сообщений
    3,692
    Спасибо Благодарностей отдано 
    29
    Спасибо Благодарностей получено 
    42
    Поблагодарили
    30 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от psb Посмотреть сообщение
    а должно быть вот так: Packages/z80asm/z80asm.tmLanguage
    Может он что с подпутями напутал? На всякий случай укажу полный путь:

    c:\Users\%UserName%\AppData\Roaming\Sublime Text 2\Packages\z80asm\

    Для третьего я так понимаю разница будет только в цифре?

    c:\Users\%UserName%\AppData\Roaming\Sublime Text 3\Packages\z80asm\
    (๑•̀ㅂ•́)و✧ Doors UI → https://t.me/doorsui | https://t.me/atari_xl_xe ← Atari XL/XE (●´ω`●)ゞ

  10. #60
    Banned
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,094
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    в плагине используется ${Packages}, т.е. путь до пэкэджей будет правильный, но вот папка z80asm должна лежать строго в Packages/, это описано в ридми.

Страница 6 из 16 ПерваяПервая ... 2345678910 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. RT-11 DSK Total Commander wcx plugin.
    от Patron в разделе ДВК, УКНЦ
    Ответов: 371
    Последнее: 26.08.2023, 15:15
  2. text mоde
    от sv в разделе Демо
    Ответов: 5
    Последнее: 16.02.2009, 15:47
  3. Новый FAR plugin для форматирования дисков TR DOS
    от Alexandr Medvedev в разделе Утилиты
    Ответов: 3
    Последнее: 03.08.2007, 16:44

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •