import os
from ..subprocess_code_interpreter import SubprocessCodeInterpreter
class AppleScript(SubprocessCodeInterpreter):
file_extension = "applescript"
proper_name = "AppleScript"
def __init__(self):
super().__init__()
self.start_cmd = os.environ.get('SHELL', '/bin/zsh')
def preprocess_code(self, code):
code = self.add_active_line_indicators(code)
code = code.replace('"', r'\"')
code = '"' + code + '"'
code = "osascript -e " + code
code += '; echo "## end_of_execution ##"'
return code
def add_active_line_indicators(self, code):
modified_lines = []
lines = code.split('\n')
for idx, line in enumerate(lines):
if line.strip(): modified_lines.append(f'log "## active_line {idx + 1} ##"')
modified_lines.append(line)
return '\n'.join(modified_lines)
def detect_active_line(self, line):
prefix = "## active_line "
if prefix in line:
try:
return int(line.split(prefix)[1].split()[0])
except:
pass
return None
def detect_end_of_execution(self, line):
return "## end_of_execution ##" in line