jianuo's picture
first
09321b6
raw
history blame
No virus
1.95 kB
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):
"""
Inserts an end_of_execution marker and adds active line indicators.
"""
# Add active line indicators to the code
code = self.add_active_line_indicators(code)
# Escape double quotes
code = code.replace('"', r"\"")
# Wrap in double quotes
code = '"' + code + '"'
# Prepend start command for AppleScript
code = 'osascript -e ' + code
# Append end of execution indicator
code += '; echo "##end_of_execution##"'
return code
def add_active_line_indicators(self, code):
"""
Adds log commands to indicate the active line of execution in the AppleScript.
"""
modified_lines = []
lines = code.split('\n')
for idx, line in enumerate(lines):
# Add log command to indicate the line number
if line.strip(): # Only add if line is not empty
modified_lines.append(f'log "##active_line{idx + 1}##"')
modified_lines.append(line)
return '\n'.join(modified_lines)
def detect_active_line(self, line):
"""
Detects active line indicator in the output.
"""
prefix = '##active_line'
if prefix in line:
try:
return int(line.split(prefix)[1].split()[0])
except Exception as e:
print(e)
pass
return None
def detect_end_of_execution(self, line):
"""
Detects end of execution marker in the output.
"""
return '##end_of_execution##' in line