started adding documentation facilities to scala mode

--HG--
branch : pmacs2
This commit is contained in:
Erik Osheim 2010-09-11 10:29:56 -04:00
parent 3d8b0036d1
commit 8468559e7f
1 changed files with 36 additions and 3 deletions

View File

@ -4,6 +4,9 @@ from lex import Grammar, PatternRule, RegionRule, PatternMatchRule
from mode.xml import XMLGrammar from mode.xml import XMLGrammar
from mode.pipe import Pipe from mode.pipe import Pipe
from method.shell import Interact from method.shell import Interact
from method import Method, arg
import default
import urllib2
chr1 = '[a-zA-Z_]' chr1 = '[a-zA-Z_]'
chr2 = '[a-zA-Z_0-9]' chr2 = '[a-zA-Z_0-9]'
@ -28,6 +31,7 @@ class ScalaGrammar(Grammar):
PatternRule('delimiter', r'(?:;|{|}|\[|\]|\(|\)|,|\.|<(?![a-zA-Z_])|>|:|/|\+|-|\*|=)'), PatternRule('delimiter', r'(?:;|{|}|\[|\]|\(|\)|,|\.|<(?![a-zA-Z_])|>|:|/|\+|-|\*|=)'),
RegionRule('scala.inline', r'(?:^| )(?=<[a-zA-Z_])', XMLGrammar, '^[ \t]*$'),
PatternRule('spaces', r'(?:\t| )+'), PatternRule('spaces', r'(?:\t| )+'),
PatternRule('eol', r'\n'), PatternRule('eol', r'\n'),
@ -52,8 +56,6 @@ class ScalaGrammar(Grammar):
PatternRule('scala.annotation', '@[a-zA-Z_][a-zA-Z0-9_]*'), PatternRule('scala.annotation', '@[a-zA-Z_][a-zA-Z0-9_]*'),
PatternRule('scala.bareword', '[a-zA-Z_][a-zA-Z0-9_]*'), PatternRule('scala.bareword', '[a-zA-Z_][a-zA-Z0-9_]*'),
PatternRule('scala.null', 'null'), PatternRule('scala.null', 'null'),
RegionRule('scala.inline', r'(?:^| )(?=<[a-zA-Z_])', XMLGrammar, '^[ \t]*$'),
] ]
class ScalaTabber(StackTabber2): class ScalaTabber(StackTabber2):
@ -89,6 +91,34 @@ class ScalaStart(Interact):
def _execute(self, w, **vargs): def _execute(self, w, **vargs):
Interact._execute(self, w, bname='*Scala*', cmd='scala') Interact._execute(self, w, bname='*Scala*', cmd='scala')
class ScalaDocBrowse(Method):
def _execute(self, w, **vargs):
a = w.application
url = a.config['scala.api']
Interact().execute(w, bname='*Scala-Doc*', cmd='links "%s"' % url)
class ScalaDocLookup(Method):
args = [arg('name', t='string', p='Name: ', dv=default.current_word,
ld=True, h='The Scala name to get help on')]
def _execute(self, w, **vargs):
try:
import BeautifulSoup
except ImportError:
w.set_error('BeautifulSoup is not installed...')
return
a = w.application
name = vargs.get('name')
path = a.getpath('cache', 'scala', 'api.html')
url = a.config['scala.api']
a.mkdirs('cache', 'scala')
if not os.path.exists(path):
open(path, 'w').write(urllib2.urlopen(url).read())
w.set_error('looking up %s...' % name)
class Scala(Fundamental): class Scala(Fundamental):
name = 'Scala' name = 'Scala'
extensions = ['.scala'] extensions = ['.scala']
@ -96,11 +126,14 @@ class Scala(Fundamental):
tabbercls = ScalaTabber tabbercls = ScalaTabber
grammar = ScalaGrammar grammar = ScalaGrammar
commentc = '//' commentc = '//'
actions = [ScalaStart] actions = [ScalaStart, ScalaDocBrowse, ScalaDocLookup]
opentokens = ('delimiter',) opentokens = ('delimiter',)
opentags = {'(': ')', '[': ']', '{': '}'} opentags = {'(': ')', '[': ']', '{': '}'}
closetokens = ('delimiter',) closetokens = ('delimiter',)
closetags = {')': '(', ']': '[', '}': '{'} closetags = {')': '(', ']': '[', '}': '{'}
config = {
'scala.api': 'http://www.scala-lang.org/api/current/allclasses.html',
}
colors = { colors = {
'scala.annotation': ('magenta', 'default'), 'scala.annotation': ('magenta', 'default'),