#!/usr/bin/env python3 # -*- coding: utf-8 -*- """comment.py: Hog 4 comment macro interpreter and OSC bridge.""" __author__ = "Kevin Matz" __copyright__ = "Copyright 2018, Company 235, LLC" __credits__ = ["Kevin Matz"] __license__ = "MIT" __version__ = "3.9" __maintainer__ = "Kevin Matz" __email__ = "kevin@company235.com" __status__ = "Prototype" import antlr4 import configparser import logging import readline import signal import sys from CommentMacroLexer import CommentMacroLexer from CommentMacroParser import CommentMacroParser from OscCommentMacroListener import OscCommentMacroListener from pythonosc import udp_client # setup logging logger = logging.getLogger("CommentMacro") logger.setLevel(logging.DEBUG) ch = logging.StreamHandler() # create console handler and ch.setLevel(logging.INFO) # set console log level to INFO logger.addHandler(ch) # add console log handler # TODO: refactor this to support multiple net#s config = configparser.ConfigParser(allow_no_value=True) config.read('server.cfg') # open config file servers = {} # init an empty dictionary server = config['hog4'] # section of config file net = server.getint("net", 1) # default to net #1 logger.info("Adding Hog device at net# " + str(net)) # osc clients are added to the dictionary with the net # as the key servers[net] = udp_client.SimpleUDPClient(server.get("ip", "10.0.0.1"), server.getint("port", 6600)) def comment(text): input_stream = antlr4.InputStream(text) lexer = CommentMacroLexer(input_stream) stream = antlr4.CommonTokenStream(lexer) parser = CommentMacroParser(stream) tree = parser.prog() oscMacro = OscCommentMacroListener(servers) walker = antlr4.ParseTreeWalker() walker.walk(oscMacro, tree) def orderly_exit(): logger.info('Goodbye.') sys.exit(0) if __name__ == '__main__': signal.signal(signal.SIGINT, orderly_exit) if len(sys.argv) > 1: logger.debug("found macro at argv[1]") comment(sys.argv[1]) else: while True: text = input("comment# ") if text == 'exit': orderly_exit() else: comment(text)