src/eric7/Plugins/VcsPlugins/vcsGit/GitDiffHighlighter.py

branch
eric7
changeset 9221
bf71ee032bb4
parent 9209
b99e7fd55fd3
child 9413
80c06d472826
equal deleted inserted replaced
9220:e9e7eca7efee 9221:bf71ee032bb4
7 Module implementing a syntax highlighter for diff outputs. 7 Module implementing a syntax highlighter for diff outputs.
8 """ 8 """
9 9
10 from PyQt6.QtGui import QColor 10 from PyQt6.QtGui import QColor
11 11
12 from EricGui.EricGenericDiffHighlighter import ( 12 from EricGui.EricGenericDiffHighlighter import TERMINAL, EricGenericDiffHighlighter
13 TERMINAL, EricGenericDiffHighlighter
14 )
15 13
16 14
17 class GitDiffHighlighter(EricGenericDiffHighlighter): 15 class GitDiffHighlighter(EricGenericDiffHighlighter):
18 """ 16 """
19 Class implementing a diff highlighter for Git. 17 Class implementing a diff highlighter for Git.
20 """ 18 """
19
21 def __init__(self, doc, whitespace=True): 20 def __init__(self, doc, whitespace=True):
22 """ 21 """
23 Constructor 22 Constructor
24 23
25 @param doc reference to the text document (QTextDocument) 24 @param doc reference to the text document (QTextDocument)
26 @param whitespace flag indicating to highlight whitespace 25 @param whitespace flag indicating to highlight whitespace
27 at the end of a line (boolean) 26 at the end of a line (boolean)
28 """ 27 """
29 self.whitespace = whitespace 28 self.whitespace = whitespace
30 29
31 super().__init__(doc) 30 super().__init__(doc)
32 31
33 def generateRules(self): 32 def generateRules(self):
34 """ 33 """
35 Public method to generate the rule set. 34 Public method to generate the rule set.
36 """ 35 """
37 diffHeader = self.makeFormat(fg=self.textColor, 36 diffHeader = self.makeFormat(fg=self.textColor, bg=self.headerColor)
38 bg=self.headerColor) 37 diffHeaderBold = self.makeFormat(
39 diffHeaderBold = self.makeFormat(fg=self.textColor, 38 fg=self.textColor, bg=self.headerColor, bold=True
40 bg=self.headerColor, 39 )
41 bold=True) 40 diffContext = self.makeFormat(fg=self.textColor, bg=self.contextColor)
42 diffContext = self.makeFormat(fg=self.textColor,
43 bg=self.contextColor)
44 41
45 diffAdded = self.makeFormat(fg=self.textColor, 42 diffAdded = self.makeFormat(fg=self.textColor, bg=self.addedColor)
46 bg=self.addedColor) 43 diffRemoved = self.makeFormat(fg=self.textColor, bg=self.removedColor)
47 diffRemoved = self.makeFormat(fg=self.textColor,
48 bg=self.removedColor)
49 44
50 if self.whitespace: 45 if self.whitespace:
51 try: 46 try:
52 badWhitespace = self.makeFormat(fg=self.textColor, 47 badWhitespace = self.makeFormat(
53 bg=self.whitespaceColor) 48 fg=self.textColor, bg=self.whitespaceColor
49 )
54 except AttributeError: 50 except AttributeError:
55 badWhitespace = self.makeFormat(fg=self.textColor, 51 badWhitespace = self.makeFormat(
56 bg=QColor(255, 0, 0, 192)) 52 fg=self.textColor, bg=QColor(255, 0, 0, 192)
53 )
57 54
58 # We specify the whitespace rule last so that it is 55 # We specify the whitespace rule last so that it is
59 # applied after the diff addition/removal rules. 56 # applied after the diff addition/removal rules.
60 diffOldRegex = TERMINAL(r'^--- ') 57 diffOldRegex = TERMINAL(r"^--- ")
61 diffNewRegex = TERMINAL(r'^\+\+\+ ') 58 diffNewRegex = TERMINAL(r"^\+\+\+ ")
62 diffContextRegex = TERMINAL(r'^@@ ') 59 diffContextRegex = TERMINAL(r"^@@ ")
63 60
64 diffHeader1Regex = TERMINAL(r'^diff --git a/.*b/.*') 61 diffHeader1Regex = TERMINAL(r"^diff --git a/.*b/.*")
65 diffHeader2Regex = TERMINAL(r'^index \S+\.\.\S+') 62 diffHeader2Regex = TERMINAL(r"^index \S+\.\.\S+")
66 diffHeader3Regex = TERMINAL(r'^new file mode') 63 diffHeader3Regex = TERMINAL(r"^new file mode")
67 diffHeader4Regex = TERMINAL(r'^deleted file mode') 64 diffHeader4Regex = TERMINAL(r"^deleted file mode")
68 65
69 diffAddedRegex = TERMINAL(r'^\+') 66 diffAddedRegex = TERMINAL(r"^\+")
70 diffRemovedRegex = TERMINAL(r'^-') 67 diffRemovedRegex = TERMINAL(r"^-")
71 diffBarRegex = TERMINAL(r'^([ ]+.*)(\|[ ]+\d+[ ]+[+-]+)$') 68 diffBarRegex = TERMINAL(r"^([ ]+.*)(\|[ ]+\d+[ ]+[+-]+)$")
72 diffStsRegex = (r'(.+\|.+?)(\d+)(.+?)([\+]*?)([-]*?)$') 69 diffStsRegex = r"(.+\|.+?)(\d+)(.+?)([\+]*?)([-]*?)$"
73 diffSummaryRegex = (r'(\s+\d+ files changed[^\d]*)' 70 diffSummaryRegex = (
74 r'(:?\d+ insertions[^\d]*)' 71 r"(\s+\d+ files changed[^\d]*)"
75 r'(:?\d+ deletions.*)$') 72 r"(:?\d+ insertions[^\d]*)"
73 r"(:?\d+ deletions.*)$"
74 )
76 75
77 if self.whitespace: 76 if self.whitespace:
78 self.createRules((r'(..*?)(\s+)$', (None, badWhitespace))) 77 self.createRules((r"(..*?)(\s+)$", (None, badWhitespace)))
79 self.createRules((diffOldRegex, diffRemoved), 78 self.createRules(
80 (diffNewRegex, diffAdded), 79 (diffOldRegex, diffRemoved),
81 (diffContextRegex, diffContext), 80 (diffNewRegex, diffAdded),
82 (diffBarRegex, (diffHeaderBold, diffHeader)), 81 (diffContextRegex, diffContext),
83 (diffHeader1Regex, diffHeader), 82 (diffBarRegex, (diffHeaderBold, diffHeader)),
84 (diffHeader2Regex, diffHeader), 83 (diffHeader1Regex, diffHeader),
85 (diffHeader3Regex, diffHeader), 84 (diffHeader2Regex, diffHeader),
86 (diffHeader4Regex, diffHeader), 85 (diffHeader3Regex, diffHeader),
87 (diffAddedRegex, diffAdded), 86 (diffHeader4Regex, diffHeader),
88 (diffRemovedRegex, diffRemoved), 87 (diffAddedRegex, diffAdded),
89 (diffStsRegex, (None, diffHeader, 88 (diffRemovedRegex, diffRemoved),
90 None, diffHeader, 89 (diffStsRegex, (None, diffHeader, None, diffHeader, diffHeader)),
91 diffHeader)), 90 (diffSummaryRegex, (diffHeader, diffHeader, diffHeader)),
92 (diffSummaryRegex, (diffHeader, 91 )
93 diffHeader,
94 diffHeader))
95 )

eric ide

mercurial