| @@ -2,13 +2,24 @@ import json | |||||
| import sys | import sys | ||||
| import socket | import socket | ||||
| import struct | import struct | ||||
| import subprocess | |||||
| from os import path | |||||
| from pygments import lexers as pgl, util | from pygments import lexers as pgl, util | ||||
| from ..languages import LANGS | from ..languages import LANGS | ||||
| from .python import parse_py | from .python import parse_py | ||||
| _all__ = ["parse"] | |||||
| _all__ = ["parse", "start_parse_servers"] | |||||
| PARSER_COMMANDS = [ | |||||
| ('Java', ['mvn', '-f', | |||||
| path.join(path.dirname(__file__), "../../parsers/java/pom.xml"), | |||||
| 'exec:java', '-Dexec.args="%d"']), | |||||
| ('Ruby', ['rake', '-f', | |||||
| path.join(path.dirname(__file__), "../../parsers/ruby/Rakefile"), | |||||
| "'start_server[%d]'"]) | |||||
| ] | |||||
| class UnsupportedFileError(Exception): | class UnsupportedFileError(Exception): | ||||
| pass | pass | ||||
| @@ -72,6 +83,22 @@ def _recv_data(server_socket): | |||||
| server_socket.close() | server_socket.close() | ||||
| return ''.join(total_data) | return ''.join(total_data) | ||||
| def start_parse_servers(): | |||||
| """ | |||||
| Starts all the parse servers for languages besides python. | |||||
| :rtype: list | |||||
| """ | |||||
| procs = [] | |||||
| for (lang, cmd) in PARSER_COMMANDS: | |||||
| procs.append( | |||||
| subprocess.Popen(' '.join(cmd) % (5001 + LANGS.index(lang)), | |||||
| shell=True)) | |||||
| return procs | |||||
| def parse(codelet): | def parse(codelet): | ||||
| """ | """ | ||||
| Dispatches the codelet to the correct parser based on its language. | Dispatches the codelet to the correct parser based on its language. | ||||
| @@ -87,7 +114,7 @@ def parse(codelet): | |||||
| lang = _lang(codelet) | lang = _lang(codelet) | ||||
| source = codelet.code | source = codelet.code | ||||
| codelet.language = lang | codelet.language = lang | ||||
| server_socket_number = 5000 + lang | |||||
| server_socket_number = 5001 + lang | |||||
| if lang == LANGS.index('Python'): | if lang == LANGS.index('Python'): | ||||
| parse_py(codelet) | parse_py(codelet) | ||||