branch : pmacs2
This commit is contained in:
moculus 2009-03-11 19:08:26 +00:00
parent 553e968615
commit 83c7ea1fb9
1 changed files with 20 additions and 3 deletions

View File

@ -1,6 +1,8 @@
import time
from mode import Fundamental from mode import Fundamental
from lex import Grammar, PatternRule, RegionRule, NocasePatternRule, NocaseRegionRule from lex import Grammar, PatternRule, RegionRule, NocasePatternRule, NocaseRegionRule
from mode.python import StringGrammar2 from mode.python import StringGrammar2
from method.shell import Interact
class DataGrammar(Grammar): class DataGrammar(Grammar):
rules = [PatternRule(r'data', r'[^)]+')] rules = [PatternRule(r'data', r'[^)]+')]
@ -12,13 +14,14 @@ class StringGrammar3(Grammar):
class ForthGrammar(Grammar): class ForthGrammar(Grammar):
rules = [ rules = [
PatternRule(r'comment', r"\\.*$"), PatternRule(r'comment', r"\\(?: .*)?\n$"),
RegionRule(r'comment', r'\(', DataGrammar, r'\)'), RegionRule(r'comment', r'\((?= |\n)', DataGrammar, r'\)'),
NocaseRegionRule(r'comment', r'0 \[if\]', DataGrammar, r'\[(?:endif|then)\]'), NocaseRegionRule(r'comment', r'0 \[if\]', DataGrammar, r'\[(?:endif|then)\]'),
PatternRule(r'delimiter', r"[:;\[\]]"), PatternRule(r'delimiter', r"[:;\[\]]"),
RegionRule(r'string', r'[.cs]" ', StringGrammar1, r'"'), RegionRule(r'string', r'[.cs]" ', StringGrammar1, r'"'),
RegionRule(r'string', r'[.s]\\" ', StringGrammar2, r'"'), RegionRule(r'string', r'[.s]\\" ', StringGrammar2, r'"'),
RegionRule(r'string', r'.\( ', StringGrammar3, r'\)'), RegionRule(r'string', r'\.\( ', StringGrammar3, r'\)'),
PatternRule(r'operator', r'(?:mod|m\*|f\+|f-|f\*|f/|\+|-|\*/mod|\*/|\*|/mod|/)(?=[ \n$])'),
NocasePatternRule(r'keyword', r'(?:variable|value|until|tuck|truth|to|then|test|swap|step|see|rot|roll|recurse|r>|pick|over|mod|m\*|loop|locals|invert|if|hex|here|fsort|fln|fexp|f!|f@|f\+|f-|f\*|f/|execute|endif|else|dup|drop|does>|do|decimal|d!|d@|create|constant|cells|cell|c!|c@|bye|begin|allot|\[(?:if|then|endif)\]|>r|!|@|\+loop|\+|-|\*/mod|\*/|\*|/mod|/)(?=[ \n$])'), NocasePatternRule(r'keyword', r'(?:variable|value|until|tuck|truth|to|then|test|swap|step|see|rot|roll|recurse|r>|pick|over|mod|m\*|loop|locals|invert|if|hex|here|fsort|fln|fexp|f!|f@|f\+|f-|f\*|f/|execute|endif|else|dup|drop|does>|do|decimal|d!|d@|create|constant|cells|cell|c!|c@|bye|begin|allot|\[(?:if|then|endif)\]|>r|!|@|\+loop|\+|-|\*/mod|\*/|\*|/mod|/)(?=[ \n$])'),
PatternRule(r'forth_def', r'(?<=:) +[^ ]+'), PatternRule(r'forth_def', r'(?<=:) +[^ ]+'),
NocasePatternRule(r'number', r"'[a-z]"), NocasePatternRule(r'number', r"'[a-z]"),
@ -31,6 +34,19 @@ class ForthGrammar(Grammar):
PatternRule(r'eol', r'\n'), PatternRule(r'eol', r'\n'),
] ]
class GforthStart(Interact):
args = []
def _execute(self, w, **vargs):
Interact._execute(self, w, bname='*GForth*', cmd='gforth')
class GforthLoadFile(Interact):
args = []
def _execute(self, w, **vargs):
Interact._execute(self, w, bname='*GForth*', cmd='gforth')
b = w.application.get_buffer_by_name('*GForth*')
time.sleep(0.1)
for line in w.buffer.lines:
b.pipe_write(line + '\n')
class Forth(Fundamental): class Forth(Fundamental):
modename = 'FORTH' modename = 'FORTH'
extensions = ['.fs', '.fi', '.fb'] extensions = ['.fs', '.fi', '.fb']
@ -40,5 +56,6 @@ class Forth(Fundamental):
'forth_def': ('blue', 'default', 'bold'), 'forth_def': ('blue', 'default', 'bold'),
'forth_word': ('yellow', 'default', 'bold'), 'forth_word': ('yellow', 'default', 'bold'),
} }
actions = [GforthStart, GforthLoadFile]
install = Forth.install install = Forth.install