more mode clean-up

--HG--
branch : pmacs2
This commit is contained in:
moculus 2009-03-31 03:15:27 +00:00
parent 04b672f318
commit db0479b68d
10 changed files with 86 additions and 200 deletions

View File

@ -44,10 +44,10 @@ class Mutt(mode.Fundamental):
config = {
'mutt.margin': 72,
}
def __init__(self, w):
mode.Fundamental.__init__(self, w)
self.add_bindings('learn-word', ('C-c l',))
self.add_bindings('mutt-wrap-paragraph', ('M-q',))
self.add_bindings('mutt-insert-space', ('SPACE',))
_bindings = {
'learn-word': ('C-c l',),
'mutt-wrap-paragraph': ('M-q',),
'mutt-insert-space': ('SPACE',),
}
install = Mutt.install

View File

@ -1,28 +1,29 @@
import color, mode
from lex import Grammar, PatternRule, RegionRule
from lex import Grammar, PatternRule, RegionRule, PatternMatchRule
from mode.python import StringGrammar1, StringGrammar2, StringGrammar3, StringGrammar4
class StringGrammar(Grammar):
rules = [
PatternRule(r'octal', r'\\[0-7]{3}'),
PatternRule(r'escaped', r'\\.'),
]
chr1 = '[a-zA-Z_.?]'
chr2 = '[a-zA-Z0-9_.?$#@~]'
word = chr1 + chr2 + '*'
class NasmGrammar(Grammar):
rules = [
PatternRule(r'nasm_keyword', r"(?:section|global|extern)(?![a-zA-Z_])"),
PatternRule(r'macros', r"%(?:define|undef|assign|strlen|macro|endmacro|if|elif|else|endif|ifdef|ifndef|include|push|pop|stacksize)(?![a-zA-Z_])"),
PatternRule(r'instructions', r"(?:jeq|jne|ja|jmp|push|pushad|pushfd|call|ret|sub|add|pop|popa|popad|popfd|call|and|cwd|cdq|cmp|cmpxchg|cpuid|div|divpd|enter|leave|fadd|fld|fmul|fsqrt|fsub|hlt|imul|inc|int|int3|lea|mov|movd|mul|neg|not|nop|or|sal|sar|shl|shr|shld|shrd|syscall|sysenter|sysexit|test|xchg|xadd|xor)(?![a-zA-Z_])"),
PatternRule(r'registers', r"(?:eax|ax|ah|al|ebx|bx|bh|bl|ecx|cx|ch|cl|esi|edi|esp|ebp)(?![a-zA-Z_])"),
PatternRule(r'prefix', r"(?:dword|word|lock)(?![a-zA-Z_])"),
PatternRule(r'nasm_label', r"[a-zA-Z_.][a-zA-Z0-9_.]*:"),
PatternRule(r"identifier", r"[a-zA-Z_][a-zA-Z0-9_]*"),
PatternRule(r"integer", r"(0|[1-9][0-9]*|0[0-7]+|0[xX][0-9a-fA-F]+)[lL]?"),
PatternRule(r"float", r"[0-9]+\.[0-9]*|\.[0-9]+|([0-9]|[0-9]+\.[0-9]*|\.[0-9]+)[eE][\+-]?[0-9]+"),
RegionRule(r'string', r'"""', StringGrammar, r'"""'),
RegionRule(r'string', r"'''", StringGrammar, r"'''"),
RegionRule(r'string', r'"', StringGrammar, r'"'),
RegionRule(r'string', r"'", StringGrammar, r"'"),
PatternRule(r'comment', r';.*$'),
PatternRule('continuation', r'\\\n$'),
PatternRule('nasm_keyword', "(?:section|global|extern)(?!" + chr2 + ")"),
PatternRule('macros', "%(?:define|undef|assign|strlen|macro|endmacro|if|elif|else|endif|ifdef|ifndef|include|push|pop|stacksize)(?!" + chr2 + ")"),
PatternRule('instructions', "(?:jeq|jne|ja|jmp|push|pushad|pushfd|call|ret|sub|add|pop|popa|popad|popfd|call|and|cwd|cdq|cmp|cmpxchg|cpuid|div|divpd|enter|leave|fadd|fld|fmul|fsqrt|fsub|hlt|imul|inc|int|int3|lea|mov|movd|mul|neg|not|nop|or|sal|sar|shl|shr|shld|shrd|syscall|sysenter|sysexit|test|xchg|xadd|xor)(?!" + chr2 + ")"),
PatternRule('registers', "(?:eax|ax|ah|al|ebx|bx|bh|bl|ecx|cx|ch|cl|esi|edi|esp|ebp)(?!" + chr2 + ")"),
PatternRule('prefix', "(?:dword|word|lock)(?!" + chr2 + ")"),
PatternMatchRule('x', '(' + word + ')(:)', 'nasm_label', 'delimiter'),
#PatternRule('nasm_label', word + ":"),
PatternRule("identifier", r'\$?' + word),
PatternRule("integer", "(0|[1-9][0-9]*|0[0-7]+|0[xX][0-9a-fA-F]+)[lL]?"),
PatternRule("float", r"[0-9]+\.[0-9]*|\.[0-9]+|([0-9]|[0-9]+\.[0-9]*|\.[0-9]+)[eE][\+-]?[0-9]+"),
RegionRule('string', "'''", StringGrammar3, "'''"),
RegionRule('string', '"""', StringGrammar4, '"""'),
RegionRule('string', "'", StringGrammar1, "'"),
RegionRule('string', '"', StringGrammar2, '"'),
PatternRule('comment', ';.*$'),
]
class Nasm(mode.Fundamental):

View File

@ -11,9 +11,12 @@ class StringGrammar(Grammar):
PatternRule(r'hex', r'\\x[0-9A-Fa-f]{2}'),
]
#class CommentGrammar(Grammar):
# rules = []
#CommentGrammar.rules.append(RegionRule(r'comment', r'\(\*', CommentGrammar, r'\*\)'))
class CommentGrammar(Grammar):
rules = []
CommentGrammar.rules.append(RegionRule(r'comment', r'\(\*', CommentGrammar, r'\*\)'))
rules = [RegionRule(r'comment', r'\(\*', None, r'\*\)')]
class OcamlGrammar(Grammar):
rules = [

View File

@ -1,7 +1,6 @@
import color, mode, tab
from mode import Fundamental
from lex import Grammar, PatternRule, RegionRule
from mode.python import StringGrammar
#from mode.c import CTabber
class PHPGrammar(Grammar):
rules = [
@ -35,132 +34,7 @@ class PHPGrammar(Grammar):
PatternRule(r"eol", r"\n$"),
]
#class JavaTabber(CTabber):
# def is_base(self, y):
# if y == 0:
# return True
#
# highlighter = self.mode.window.buffer.highlights[self.mode.name]
# if not highlighter.tokens[y]:
# return False
#
# for t in highlighter.tokens[y]:
# if t.name == 'null':
# pass
# elif t.name == 'keyword':
# if t.string in ('class', 'interface'):
# return True
# elif t.string in ('public', 'private', 'protected', 'static',
# 'final', 'native', 'synchronized', 'abstract',
# 'threadsafe', 'transient'):
# pass
# else:
# return False
# else:
# return False
#
# return False
#
# # detecting function declarations is annoying; this assumes that people
# # won't put a variable type and name on different lines, but that they
# # might do that for function return type and name.
# #
# # unfortunately, valid function return types might include any of the
# # four types of tokens below
# decl = False
# for t in highlighter.tokens[y]:
# if t.name in ('keyword', 'identifier', 'structname', 'enumname'):
# decl = True
# continue
# if decl and t.name == 'function':
# break
# else:
# decl = False
# break
# if decl:
# return True
#
# return False
#
# def _handle_open_token(self, currlvl, y, i):
# self._opt_pop('cont')
# token = self.get_token(y, i)
# if token.string == '{':
# self._opt_pop('cond')
# currlvl = tab.StackTabber._handle_open_token(self, currlvl, y, i)
# return currlvl
# def _handle_close_token(self, currlvl, y, i):
# w = self.mode.tabwidth
# self._opt_pop('cont')
# currlvl = tab.StackTabber._handle_close_token(self, currlvl, y, i)
# token = self.get_token(y, i)
# if self.is_rightmost_token(y, i):
# if token.string == '}':
# self._opt_pop('cond')
# self._opt_pop('cont')
# elif self._peek_name() == 'cond':
# pass
# else:
# self._opt_append('cont', currlvl + w)
# return currlvl
# def _handle_other_token(self, currlvl, y, i):
# w = self.mode.tabwidth
# token = self.get_token(y, i)
# fqname = token.fqname()
# if fqname == 'delimiter' and token.string == ';':
# self._opt_pop('cond')
# self._opt_pop('cont')
# self._opt_pop('cond')
#
# elif fqname == 'keyword':
# if token.string in ('do', 'else', 'for', 'if', 'while'):
# self._append('cond', currlvl + w)
# elif token.string == 'break':
# self._opt_pop('case', 'while', 'for')
# elif token.string == 'continue':
# self._opt_pop('while', 'for')
# elif token.string == 'case':
# self._opt_pop('case')
# currlvl = self.get_curr_level()
# self._opt_append('case', currlvl + w)
#
# elif fqname == 'string.start':
# self._opt_append('string', None)
# elif fqname == 'string.end':
# self._opt_pop('string')
# if self.is_rightmost_token(y, i):
# self._opt_append('cont', currlvl + w)
#
# # TODO: this could be a lot better
# elif fqname == 'macro':
# currlvl = 0
# elif fqname.startswith('macro.start'):
# self._opt_append('macro', None)
# currlvl = 0
# elif fqname.startswith('macro.end'):
# self._opt_pop('macro', None)
#
# elif fqname.startswith('macroblock.start'):
# self._opt_append('macroblock', None)
# currlvl = 0
# elif fqname.startswith('macroblock.end'):
# self._opt_pop('macroblock', None)
#
# if self.is_rightmost_token(y, i):
# if self._has_markers() and self._peek_name() == 'cond':
# pass
# elif(not fqname.startswith('string') and
# not fqname.startswith('comment') and
# not fqname.startswith('macro') and
# not fqname == 'delimiter' and
# not fqname == 'header' and
# not fqname == 'null' and
# not fqname == 'eol' and
# token.string not in ('}', ';', '(', '{', '[', ',')):
# self._opt_append('cont', currlvl + w)
# return currlvl
class PHP(mode.Fundamental):
class PHP(Fundamental):
name = 'PHP'
extensions = ['.php']
#tabbercls = JavaTabber
@ -181,8 +55,13 @@ class PHP(mode.Fundamental):
'php_integer': ('green', 'default', 'bold'),
'php_float': ('green', 'default', 'bold'),
}
_bindings = {
'close-paren': (')',),
'close-brace': ('}',),
'close-bracket': (']',),
}
def __init__(self, w):
mode.Fundamental.__init__(self, w)
Fundamental.__init__(self, w)
self.add_bindings('close-paren', (')',))
self.add_bindings('close-brace', ('}',))
self.add_bindings('close-bracket', (']',))

View File

@ -1,11 +1,11 @@
import re, string
import color, method, minibuffer, mode, searchutil
from point import Point
import re
from method import Method
from mode import Fundamental
import minibuffer, searchutil
subgroup_re = re.compile(r'((?:\\\\)*)\\(0|[1-9][0-9]*)')
class ReplaceOne(method.Method):
class ReplaceOne(Method):
'In a replace command, replace the next occurance'
def execute(self, w, **vargs):
m = w.buffer.method
@ -13,7 +13,7 @@ class ReplaceOne(method.Method):
_find_next(m, False)
_finish(m, w)
class ReplaceDone(method.Method):
class ReplaceDone(Method):
'In a replace command, replace the next occurance and exit'
def execute(self, w, **vargs):
m = w.buffer.method
@ -21,14 +21,14 @@ class ReplaceDone(method.Method):
_end(w)
w.set_error("Replace done")
class SkipReplace(method.Method):
class SkipReplace(Method):
'In a replace command, skip the next occurance'
def execute(self, w, **vargs):
m = w.buffer.method
_find_next(m, True)
_finish(m, w)
class ReplaceAll(method.Method):
class ReplaceAll(Method):
'In a replace command, replace all remaining occurances'
def execute(self, w, **vargs):
m = w.buffer.method
@ -38,7 +38,7 @@ class ReplaceAll(method.Method):
_end(w)
w.set_error("Replace ended")
class CancelReplace(method.Method):
class CancelReplace(Method):
'Cancel a currently running replace command'
def execute(self, w, **vargs):
_end(w)
@ -137,11 +137,11 @@ def _end(w):
w.buffer.method.old_window = None
assert not w.application.mini_active
class Replace(mode.Fundamental):
class Replace(Fundamental):
name = 'Replace'
actions = [ReplaceAll, ReplaceDone, ReplaceOne, SkipReplace, CancelReplace]
def __init__(self, w):
mode.Fundamental.__init__(self, w)
Fundamental.__init__(self, w)
self.actions = {}
self.bindings = {}

View File

@ -1,7 +1,7 @@
import re, string
import color, method, minibuffer, mode, searchutil
from point import Point
import method, minibuffer, searchutil
from method import Method
from mode import Fundamental
selected_color = 'magenta'
unselected_color = 'yellow'
@ -19,7 +19,7 @@ def _make_regex(w, s):
except:
raise searchutil.IllegalPatternError("failed to compile: %r" % s)
class SearchNext(method.Method):
class SearchNext(Method):
'In a search command, move to the next occurance'
def execute(self, w, **vargs):
w.buffer.method.direction = 'next'
@ -34,7 +34,7 @@ class SearchNext(method.Method):
action = InsertSearchString(w.application.last_search)
action.execute(w)
class SearchPrevious(method.Method):
class SearchPrevious(Method):
'In a search command, move to the previous occurance'
def execute(self, w, **vargs):
w.buffer.method.direction = 'previous'
@ -49,7 +49,7 @@ class SearchPrevious(method.Method):
except searchutil.IllegalPatternError:
w.application.clear_highlighted_ranges('search')
class EndSearch(method.Method):
class EndSearch(Method):
'End the current search command, leaving the cursor in place'
def execute(self, w, **vargs):
old_w = w.buffer.method.old_window
@ -58,18 +58,18 @@ class EndSearch(method.Method):
old_w.set_mark_point(old_c)
w.set_error("Mark set to search start")
class CancelSearch(method.Method):
class CancelSearch(Method):
'End the current search command, restoring the cursor to the search start'
def execute(self, w, **vargs):
w.buffer.method.old_window.goto(w.buffer.method.old_cursor)
_end(w)
w.set_error("Search cancelled")
class SearchDeleteLeft(method.Method):
class SearchDeleteLeft(Method):
def execute(self, w, **vargs):
w.left_delete()
_post_delete(w)
class SearchDeleteLeftWord(method.Method):
class SearchDeleteLeftWord(Method):
def execute(self, w, **vargs):
w.delete_left_word()
_post_delete(w)
@ -91,7 +91,7 @@ def _post_delete(w):
except searchutil.IllegalPatternError:
w.application.clear_highlighted_ranges('search')
class InsertSearchString(method.Method):
class InsertSearchString(Method):
def __init__(self, s):
self.name = 'insert-search-string-%s' % (s)
self.string = s
@ -119,12 +119,12 @@ def _end(w):
w.application.clear_highlighted_ranges('search')
w.application.last_search = w.buffer.make_string()
class Search(mode.Fundamental):
class Search(Fundamental):
name = 'Search'
actions = [SearchNext, SearchPrevious, EndSearch, CancelSearch,
SearchDeleteLeft, SearchDeleteLeftWord]
def __init__(self, w):
mode.Fundamental.__init__(self, w)
Fundamental.__init__(self, w)
# clear out all the defaults that we don't want/need, and add ours
self.actions = {}

View File

@ -1,5 +1,6 @@
import commands
import color, mode, tab
from tab import StackTabber
from mode import Fundamental
from lex import Grammar, PatternRule, RegionRule, PatternMatchRule, OverridePatternRule
from method import Method
@ -129,7 +130,7 @@ ShGrammar.rules = [
PatternRule(r'eol', r'\n$'),
]
class ShTabber(tab.StackTabber):
class ShTabber(StackTabber):
def is_base(self, y):
if y == 0:
return True
@ -144,7 +145,7 @@ class ShTabber(tab.StackTabber):
# we have to ignore ) when used in "case" statements.
return currlvl
else:
return tab.StackTabber._handle_close_token(self, currlvl, y, i)
return StackTabber._handle_close_token(self, currlvl, y, i)
def _handle_other_token(self, currlvl, y, i):
w = self.mode.tabwidth
token = self.get_token(y, i)
@ -169,7 +170,7 @@ class ShCheckSyntax(Method):
else:
app.data_buffer("*Sh-Check-Syntax*", output)
class Sh(mode.Fundamental):
class Sh(Fundamental):
name = 'sh'
paths = ['/etc/profile']
basenames = ['.bashrc', '.bash_profile', '.profile']

View File

@ -1,4 +1,4 @@
import color, mode
from mode import Fundamental
from lex import Grammar, PatternRule, RegionRule
from mode.sh import ShGrammar
@ -7,7 +7,7 @@ class ShellGrammar(Grammar):
PatternRule(r'shell_input', r'^>>>.*$'),
PatternRule(r'shell_mesg', r'^===.*$'),
]
class Shell(mode.Fundamental):
class Shell(Fundamental):
name = 'Shell'
grammar = ShellGrammar()
colors = {

View File

@ -1,4 +1,5 @@
import mode, tab
from tab import StackTabber
from mode import Fundamental
from lex import Grammar, PatternRule, NocasePatternRule, RegionRule, NocaseRegionRule, OverridePatternRule
from mode.python import StringGrammar1, StringGrammar2
@ -81,7 +82,7 @@ PlPgSqlGrammar2.rules = [
class SqlGrammar(Grammar):
rules = base_rules + function_rules + sql_rules + string_rules + end_rules
class SqlTabber(tab.StackTabber):
class SqlTabber(StackTabber):
wst = ('spaces', 'null', 'eol', 'function.body.spaces', 'function.body.eol')
st = ('spaces', 'null', 'function.body.spaces')
def is_base(self, y):
@ -144,7 +145,7 @@ class SqlTabber(tab.StackTabber):
return currlvl
class Sql(mode.Fundamental):
class Sql(Fundamental):
name = 'Sql'
extensions = ['.sql']
grammar = SqlGrammar

View File

@ -1,4 +1,5 @@
import color, mode, method, ispell
import mode, method, ispell
from mode import Fundamental
from lex import Token, Rule, PatternRule, RegionRule, Grammar
class WordRule(PatternRule):
@ -71,7 +72,7 @@ class LearnWord(method.Method):
w.insert_string_at_cursor(' ')
w.left_delete()
class Text(mode.Fundamental):
class Text(Fundamental):
name = 'Text'
extensions = ['.txt']
grammar = TextGrammar
@ -79,10 +80,10 @@ class Text(mode.Fundamental):
config = {
'text.margin': 78,
}
def __init__(self, w):
mode.Fundamental.__init__(self, w)
self.add_bindings('learn-word', ('C-c l',))
self.add_bindings('text-insert-space', ('SPACE',))
self.add_bindings('text-wrap-paragraph', ('M-q',))
_bindings = {
'learn-word': ('C-c l',),
'text-insert-space': ('SPACE',),
'text-wrap-paragraph': ('M-q',),
}
install = Text.install