def expand_abbreviation(*l_arg, **d_arg): profile_name, doc_type = get_profile_name(), get_doc_type() cur_line = vim.current.line cur_index = vim.current.window.cursor[1] cur_line_num = vim.current.window.cursor[0] - 1 insertion_point = insertion_point_maker() get_insertion_point = insertion_point.get_insertion_point zen_core.insertion_point = get_insertion_point zen_core.sub_insertion_point = get_insertion_point abbr, start_index = (None, None) if "prompt" in d_arg and d_arg["prompt"]: if cur_index + 1 == len(cur_line): cur_index += 1 abbr = vim.eval('input("Expand abbreviation: ")') start_index = cur_index else: if cur_index + 1 == len(cur_line): cur_index += 1 abbr, start_index = zen_core.find_abbr_in_line(cur_line, cur_index) if not abbr: cur_index -= 1 if not abbr: abbr, start_index = zen_core.find_abbr_in_line(cur_line, cur_index) if abbr: result = cur_line[0:start_index] + zen_core.expand_abbreviation(abbr, doc_type, profile_name) if result: cur_line_pad = re.match(r"^(\s+)", cur_line) if cur_line_pad: result = zen_core.pad_string(result, cur_line_pad.group(1)) vim.current.buffer[cur_line_num : cur_line_num + 1] = ( result.replace(insertion_point.placeholder, "", 1) + cur_line[cur_index:] ).split("\n") if "set_return" in d_arg and d_arg["set_return"]: vim.command("let l:can_replace = 1") for line in result.split("\n"): cur_line_num += 1 pos = line.find(insertion_point.placeholder) if pos > -1: vim.current.window.cursor = (cur_line_num, pos) break
def zenExpand(): cursor = kate.activeView().cursorPosition() line = str(kate.activeDocument().line( cursor.line() )) abbr = zen_core.find_abbr_in_line( line, cursor.column() ) code = zen_core.expand_abbreviation(abbr[0], 'html', 'xhtml') indentation = find_spaces.match(line).group(0) codelines = code.splitlines() cursor_column = -1 for i, codeline in enumerate(codelines): if i > 0: codeline = indentation + codeline codelines[i] = codeline if cursor_column >= 0: continue cursor_column = codeline.find('|') if cursor_column >= 0: cursor_line = i codelines[cursor_line] = codeline[:cursor_column] + codeline[cursor_column+1:] cursor_column -= len(find_spaces.match(codeline).group(0)) code = "\n".join(codelines) krange = KTextEditor.Range(cursor.line(), abbr[1], cursor.line(), abbr[1]+len(abbr[0])) kate.activeDocument().replaceText(krange, code) if cursor_column >= 0: cursor.setLine(cursor.line() + cursor_line) line = str(kate.activeDocument().line( cursor.line() )) if cursor_line == 0: cursor_column += abbr[1] else: cursor_column += len(find_spaces.match(line).group(0)) cursor.setColumn(cursor_column) kate.activeView().setCursorPosition(cursor)
def extractAbbr(line): return zen.find_abbr_in_line(line, len(line))[0]
#!/usr/bin/env python # -*- coding: utf-8 -*- ''' Coda plug-in Created on Apr 20, 2009 @author: sergey ''' import os from zencoding import zen_core from zencoding.settings import zen_settings zen_core.newline = os.getenv('CODA_LINE_ENDING', zen_core.newline) zen_core.insertion_point = '$$IP$$' cur_line = 'hello world div>p' cur_index = 17 abbr = zen_core.find_abbr_in_line(cur_line, cur_index) if abbr: print(zen_core.expand_abbr(abbr))
zen_core.newline = os.getenv('TM_LINE_ENDING', zen_core.newline) point_ix = 0 def place_ins_point(text): globals()['point_ix'] += 1 return '$%s' % point_ix zen_core.insertion_point = '$$IP$$' zen_core.sub_insertion_point = '' cur_line = os.getenv('TM_CURRENT_LINE', '') cur_index = int(os.getenv('TM_LINE_INDEX', 0)) # doc_type = re.search(r'\b(html|css|xml|xsl)\b', scope) doc_type = 'html' abbr, start_index = zen_core.find_abbr_in_line(cur_line, cur_index) if abbr: result = cur_line[0:start_index] + zen_core.expand_abbr(abbr, doc_type) cur_line_pad = re.match(r'^(\s+)', cur_line) if cur_line_pad: result = zen_core.pad_string(result, cur_line_pad.group(1)) sys.stdout.write(result + cur_line[cur_index:]) else: sys.stdout.write(cur_line[0:cur_index] + zen_settings['indentation'] + '$$IP$$' + cur_line[cur_index:])
try: if 'xsl' in scope: doc_type = 'xsl' else: doc_type = re.findall(r'\bhtml|css|xml\b', scope)[-1] except: doc_type = 'html' # doc_type = re.search(r'\b(html|css|xml|xsl)\b', scope) if not doc_type: doc_type = 'html' profile_name = 'xhtml' "Output profile name" abbr = os.getenv('TM_SELECTED_TEXT', '') if abbr: result = zen_core.expand_abbreviation(abbr, doc_type, profile_name) if result: sys.stdout.write(result) else: abbr, start_index = zen_core.find_abbr_in_line(cur_line, cur_index) if abbr: result = cur_line[0:start_index] + zen_core.expand_abbreviation(abbr, doc_type, profile_name) cur_line_pad = re.match(r'^(\s+)', cur_line) if cur_line_pad: result = zen_core.pad_string(result, cur_line_pad.group(1)) sys.stdout.write(result + cur_line[cur_index:])