Commit eca0a8ba authored by Daniel Brown's avatar Daniel Brown
Browse files

changing remove comments to get rid of inline comments too

parent 2aeae8e3
......@@ -8,7 +8,7 @@ import numpy as np
import pylab as pl
code = """
l l1 1 0 0 n1
l l1 1 0 0 n1 ### test
s s1 10 1 n1 n2
m m1 0.5 0.5 0 n2 n3
s s2 10 1 n3 n4
......@@ -29,7 +29,7 @@ kat.add(photodiode('pd_trs','n5'))
kat.add(photodiode('pd_cav','n4', num_demods=1, demods=[1]))
kat.add(xaxis("lin", [0, 360], kat.m2, kat.m2.phi, 100))
kat.add(xaxis("lin", [0, 360], kat.m2.phi, 100))
kat.m1.Rcx = -1000.0
kat.m1.Rcy = -1000.0
......
......@@ -17,6 +17,8 @@ from pykat.gui.graphics import *
from pykat.SIfloat import *
from pykat.param import Param, AttrParam
import pykat.exceptions as pkex
next_component_id = 1
class NodeGaussSetter(object):
......@@ -235,10 +237,10 @@ class mirror(AbstractMirrorComponent):
values = text.split(" ")
if values[0] != "m" and values[0] != "m1" and values[0] != "m2":
raise exceptions.RuntimeError("'{0}' not a valid Finesse mirror command".format(text))
raise pkex.BasePyKatException("'{0}' not a valid Finesse mirror command".format(text))
if len(values) != 7:
raise exceptions.RuntimeError("Mirror Finesse code format incorrect '{0}'".format(text))
raise pkex.BasePyKatException("Mirror Finesse code format incorrect '{0}'".format(text))
if len(values[0])==1:
values.pop(0) # remove initial value
......@@ -290,10 +292,10 @@ class beamSplitter(AbstractMirrorComponent):
values = text.split(" ")
if values[0] != "bs" and values[0] != "bs1" and values[0] != "bs2":
raise exceptions.RuntimeError("'{0}' not a valid Finesse beam splitter command".format(text))
raise pkex.BasePyKatException("'{0}' not a valid Finesse beam splitter command".format(text))
if len(values) != 10:
raise exceptions.RuntimeError("Beam splitter Finesse code format incorrect '{0}'".format(text))
raise pkex.BasePyKatException("Beam splitter Finesse code format incorrect '{0}'".format(text))
if len(values[0])==2:
values.pop(0) # remove initial value
......@@ -356,7 +358,7 @@ class space(Component):
values = text.split(" ")
if values[0] != "s":
raise exceptions.RuntimeError("'{0}' not a valid Finesse space command".format(text))
raise pkex.BasePyKatException("'{0}' not a valid Finesse space command".format(text))
values.pop(0) # remove initial value
......@@ -365,7 +367,7 @@ class space(Component):
elif len(values) == 4:
return space(values[0], values[2], values[3], values[1])
else:
raise exceptions.RuntimeError("Space Finesse code format incorrect '{0}'".format(text))
raise pkex.BasePyKatException("Space Finesse code format incorrect '{0}'".format(text))
def getFinesseText(self):
rtn = []
......@@ -397,16 +399,16 @@ class grating(Component):
if node3 != None:
self._requested_node_names.append(node3)
else:
raise exceptions.RuntimeError("Grating node 3 not specified")
raise pkex.BasePyKatException("Grating node 3 not specified")
if n > 3:
if node4 != None:
self._requested_node_names.append(node4)
else:
raise exceptions.RuntimeError("Grating node 4 not specified")
raise pkex.BasePyKatException("Grating node 4 not specified")
if n > 4 or n < 2:
raise exceptions.RuntimeError("Grating must have between 2 and 4 ports")
raise pkex.BasePyKatException("Grating must have between 2 and 4 ports")
self.__n = n
self.__d = Param("d", self, SIfloat(d))
......@@ -422,7 +424,7 @@ class grating(Component):
@n.setter
def n(self, value):
if value < 2 or value > 4:
raise exceptions.RuntimeError("Grating must have between 2 and 4 ports")
raise pkex.BasePyKatException("Grating must have between 2 and 4 ports")
else:
self.__n = value
......@@ -466,11 +468,11 @@ class grating(Component):
values = text.split(" ")
if values[0][0 : 2] != "gr":
raise exceptions.RuntimeError("'{0}' not a valid Finesse grating command".format(text))
raise pkex.BasePyKatException("'{0}' not a valid Finesse grating command".format(text))
if len(values[0]) > 2:
if int(values[0][2]) > 4 or int(values[0][2]) < 2:
raise exceptions.RuntimeError("Grating must have between 2 and 4 ports")
raise pkex.BasePyKatException("Grating must have between 2 and 4 ports")
else:
n = int(values[0][2])
else:
......@@ -480,17 +482,17 @@ class grating(Component):
if n == 2:
if len(values) != 4:
raise exceptions.RuntimeError("Two port grating must have 2 nodes defined")
raise pkex.BasePyKatException("Two port grating must have 2 nodes defined")
return grating(values[0], values[2], values[3], None, None, n, values[1])
elif n == 3:
if len(values) != 5:
raise exceptions.RuntimeError("Three port grating must have 3 nodes defined")
raise pkex.BasePyKatException("Three port grating must have 3 nodes defined")
return grating(values[0], values[2], values[3], values[4], None, n, values[1])
else:
if len(values) != 6:
raise exceptions.RuntimeError("Four port grating must have 4 nodes defined")
raise pkex.BasePyKatException("Four port grating must have 4 nodes defined")
return grating(values[0], values[2], values[3], values[4], values[5], n, values[1])
......@@ -534,14 +536,14 @@ class isolator(Component):
values = text.split(" ")
if values[0] != "isol":
raise exceptions.RuntimeError("'{0}' not a valid Finesse isolator command".format(text))
raise pkex.BasePyKatException("'{0}' not a valid Finesse isolator command".format(text))
values.pop(0) # remove initial value
if len(values) == 4:
return isolator(values[0], values[2], values[3], values[1])
else:
raise exceptions.RuntimeError("Isolator Finesse code format incorrect '{0}'".format(text))
raise pkex.BasePyKatException("Isolator Finesse code format incorrect '{0}'".format(text))
def getFinesseText(self):
rtn = ['isol {0} {1} {2} {3}'.format(self.name, self.S.value, self.nodes[0].name, self.nodes[1].name)]
......@@ -576,14 +578,14 @@ class lens(Component):
values = text.split(" ")
if values[0] != "lens":
raise exceptions.RuntimeError("'{0}' not a valid Finesse lens command".format(text))
raise pkex.BasePyKatException("'{0}' not a valid Finesse lens command".format(text))
values.pop(0) # remove initial value
if len(values) == 4:
return lens(values[0], values[2], values[3], values[1])
else:
raise exceptions.RuntimeError("Lens Finesse code format incorrect '{0}'".format(text))
raise pkex.BasePyKatException("Lens Finesse code format incorrect '{0}'".format(text))
def getFinesseText(self):
rtn = ['lens {0} {1} {2} {3}'.format(self.name, self.f.value, self.nodes[0].name, self.nodes[1].name)]
......@@ -651,7 +653,7 @@ class modulator(Component):
v = text.split(" ")
if v[0] != "mod":
raise exceptions.RuntimeError("'{0}' not a valid Finesse modulator command".format(text))
raise pkex.BasePyKatException("'{0}' not a valid Finesse modulator command".format(text))
v.pop(0) # remove initial value
......@@ -707,7 +709,7 @@ class laser(Component):
values = text.split(" ")
if values[0] != "l":
raise exceptions.RuntimeError("'{0}' not a valid Finesse laser command".format(text))
raise pkex.BasePyKatException("'{0}' not a valid Finesse laser command".format(text))
values.pop(0) # remove initial value
......
......@@ -377,8 +377,6 @@ class kat(object):
blockComment = False
commands=self.remove_comments(commands)
# convert block of strings to list of lines
commands = commands.split('\n')
commands=self.processConstants(commands)
......@@ -990,6 +988,10 @@ class kat(object):
return getattr(self, '__comp_' + name)
def remove_comments(self, string):
"""
This takes a raw Finesse code string and removes any comments
It returns a list of lines however, not a multiline string.
"""
pattern = r"(\".*?\"|\'.*?\'|%{3}[^\r\n]*$)|(/\*.*?\*/|%[^\r\n]*$|#[^\r\n]*$|//[^\r\n]*$)"
# first group captures quoted strings (double or single)
# second group captures comments (//single-line or /* multi-line */)
......@@ -1001,7 +1003,23 @@ class kat(object):
return "" # so we will return empty to remove the comment
else: # otherwise, we will return the 1st group
return match.group(1) # captured quoted-string
return regex.sub(_replacer, string)
# remove any inline comments
string = regex.sub(_replacer, string)
commands = []
for line in string.split('\n'):
# add to a list all the positions of any inline comment markers
i = [line.find('#'), line.find('\\')]
i = filter(lambda a: a != -1, i)
if len(i) == 0:
commands.append(line)
else:
commands.append(line[0:min(i)])
return commands
# printing pykat logo on first input
kat.logo()
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment