1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 from PySide import QtGui
35 from PySide import QtCore
36
38 '''
39 Enabled the syntax highlightning for the ROS launch files.
40 '''
41
43 QtGui.QSyntaxHighlighter.__init__(self, parent)
44 self.rules = []
45 self.commentStart = QtCore.QRegExp("<!--")
46 self.commentEnd = QtCore.QRegExp("-->")
47 self.commentFormat = QtGui.QTextCharFormat()
48 f = QtGui.QTextCharFormat()
49 r = QtCore.QRegExp()
50 r.setMinimal(True)
51 f.setFontWeight(QtGui.QFont.Normal)
52 f.setForeground (QtCore.Qt.darkBlue)
53 tagList = ["\\blaunch\\b", "\\bnode\\b", "\\bmachine\\b", "\\binclude\\b",
54 "\\bremap\\b", "\\benv-loader\\b", "\\bparam\\b", "\\brosparam\\b",
55 "\\bgroup\\b", "\\btest\\b", "\\barg\\b"]
56 for tag in tagList:
57 r.setPattern(tag)
58 self.rules.append((QtCore.QRegExp(r), QtGui.QTextCharFormat(f)))
59
60 f.setForeground(QtCore.Qt.darkGreen)
61 attrList = ["\\bdeprecated=", "\\bpkg=", "\\btype=", "\\bname=",
62 "\\bargs=", "\\bmachine=", "\\brespawn=", "\\brequired=",
63 "\\bns=", "\\bclear_params=", "\\boutput=", "\\bcwd=",
64 "\\blaunch-prefix=", "\\baddress=", "\\benv-loader=", "\\bdefault=",
65 "\\buser=", "\\bpassword=", "\\btimeout=", "\\bros-root=",
66 "\\bros-package-path=", "\\bfile=", "\\bclear_params=", "\\bfrom=",
67 "\\bto=", "\\bvalue=", "\\btextfile=", "\\bbinfile=",
68 "\\bcommand=", "\\btest-name=", "\\btime-limit=", "\\bretry=",
69 "\\if=", "\\unless="]
70 for attr in attrList:
71 r.setPattern(attr)
72 self.rules.append((QtCore.QRegExp(r), QtGui.QTextCharFormat(f)))
73
74 f.setForeground(QtCore.Qt.magenta)
75 r.setPattern("\".*\"")
76 self.rules.append((QtCore.QRegExp(r), QtGui.QTextCharFormat(f)))
77
78 f.setForeground(QtGui.QColor(127,64,127))
79 r.setPattern ("\\$\\(.*\\)")
80 self.rules.append((QtCore.QRegExp(r), QtGui.QTextCharFormat(f)))
81
82 f.setForeground (QtCore.Qt.lightGray)
83 r.setPattern ("<!DOCTYPE.*>")
84 self.rules.append((QtCore.QRegExp(r), QtGui.QTextCharFormat(f)))
85 r.setPattern ("<\\?xml.*\\?>")
86 self.rules.append((QtCore.QRegExp(r), QtGui.QTextCharFormat(f)))
87
88 self.commentFormat.setFontItalic(True)
89 self.commentFormat.setForeground(QtCore.Qt.darkGray)
90
91
93 for pattern, format in self.rules:
94 index = pattern.indexIn(text)
95 while index >= 0:
96 length = pattern.matchedLength()
97 self.setFormat(index, length, format)
98 index = pattern.indexIn(text, index + length)
99
100 self.setCurrentBlockState(0)
101 startIndex = 0
102 if self.previousBlockState() != 1:
103 startIndex = self.commentStart.indexIn(text)
104 while startIndex >= 0:
105 endIndex = self.commentEnd.indexIn(text, startIndex)
106 commentLength = 0
107 if endIndex == -1:
108 self.setCurrentBlockState(1)
109 commentLength = len(text) - startIndex
110 else:
111 commentLength = endIndex - startIndex + self.commentEnd.matchedLength()
112 self.setFormat(startIndex, commentLength, self.commentFormat)
113 startIndex = self.commentStart.indexIn(text, startIndex + commentLength)
114