ThirdParty/Jasy/jasy/js/api/Comment.py

Thu, 10 Jan 2019 14:23:49 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Thu, 10 Jan 2019 14:23:49 +0100
branch
maintenance
changeset 6647
2a11e1b2dcbe
parent 3145
a9de05d4a22f
permissions
-rw-r--r--

Created global tag <release-19.01>.

2779
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 #
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2 # Jasy - Web Tooling Framework
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright 2010-2012 Zynga Inc.
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
3145
a9de05d4a22f # __IGNORE_WARNING__ added/ removed.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 2847
diff changeset
6 from __future__ import unicode_literals
2847
1843ef6e2656 Merge with default branch.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 2779
diff changeset
7
2779
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 import re
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 import jasy.core.Console as Console
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 __all__ = ["CommentException", "Comment"]
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 # Used to measure the doc indent size (with leading stars in front of content)
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 docIndentReg = re.compile(r"^(\s*\*\s*)(\S*)")
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 class CommentException(Exception):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 """
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 Thrown when errors during comment processing are detected.
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 """
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 def __init__(self, message, lineNo=0):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 Exception.__init__(self, "Comment error: %s (line: %s)" % (message, lineNo+1))
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 class Comment():
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 """
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 Comment class is attached to parsed nodes and used to store all comment related
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 information.
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 The class supports a new Markdown and TomDoc inspired dialect to make developers life
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 easier and work less repeative.
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 """
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 # Relation to code
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 context = None
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 # Collected text of the comment
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 text = None
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 def __init__(self, text, context=None, lineNo=0, indent="", fileId=None):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 # Store context (relation to code)
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 self.context = context
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 # Store fileId
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 self.fileId = fileId
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 # Figure out the type of the comment based on the starting characters
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 # Inline comments
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 if text.startswith("//"):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 # "// hello" => " hello"
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 text = " " + text[2:]
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 self.variant = "single"
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 # Doc comments
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 elif text.startswith("/**"):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 # "/** hello */" => " hello "
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 text = " " + text[3:-2]
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 self.variant = "doc"
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 # Protected comments which should not be removed
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 # (e.g these are used for license blocks)
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 elif text.startswith("/*!"):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 # "/*! hello */" => " hello "
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 text = " " + text[3:-2]
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 self.variant = "protected"
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 # A normal multiline comment
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 elif text.startswith("/*"):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 # "/* hello */" => " hello "
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 text = " " + text[2:-2]
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 self.variant = "multi"
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 else:
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 raise CommentException("Invalid comment text: %s" % text, lineNo)
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 # Multi line comments need to have their indentation removed
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 if "\n" in text:
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 text = self.__outdent(text, indent, lineNo)
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 # For single line comments strip the surrounding whitespace
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 else:
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 # " hello " => "hello"
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 text = text.strip()
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 # The text of the comment
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 self.text = text
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 def __outdent(self, text, indent, startLineNo):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 """
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 Outdent multi line comment text and filtering empty lines
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 """
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 lines = []
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 # First, split up the comments lines and remove the leading indentation
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 for lineNo, line in enumerate((indent+text).split("\n")):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 if line.startswith(indent):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 lines.append(line[len(indent):].rstrip())
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 elif line.strip() == "":
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 lines.append("")
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 else:
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 # Only warn for doc comments, otherwise it might just be code commented
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 # out which is sometimes formatted pretty crazy when commented out
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 if self.variant == "doc":
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 Console.warn("Could not outdent doc comment at line %s in %s",
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 startLineNo+lineNo, self.fileId)
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 return text
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 # Find first line with real content, then grab the one after it to get the
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 # characters which need
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 outdentString = ""
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 for lineNo, line in enumerate(lines):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 if line != "" and line.strip() != "":
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 matchedDocIndent = docIndentReg.match(line)
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 if not matchedDocIndent:
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 # As soon as we find a non doc indent like line we stop
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 break
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 elif matchedDocIndent.group(2) != "":
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 # otherwise we look for content behind the indent to get the
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 # correct real indent (with spaces)
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 outdentString = matchedDocIndent.group(1)
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 break
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 lineNo += 1
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 # Process outdenting to all lines (remove the outdentString from the start
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 # of the lines)
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 if outdentString != "":
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 lineNo = 0
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 outdentStringLen = len(outdentString)
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 for lineNo, line in enumerate(lines):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 if len(line) <= outdentStringLen:
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 lines[lineNo] = ""
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 else:
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 if not line.startswith(outdentString):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 # Only warn for doc comments, otherwise it might just be code
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 # commented out which is sometimes formatted pretty crazy when
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 # commented out
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 if self.variant == "doc":
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 Console.warn(
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 "Invalid indentation in doc comment at line %s in %s",
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 startLineNo+lineNo, self.fileId)
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 else:
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 lines[lineNo] = line[outdentStringLen:]
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 # Merge final lines and remove leading and trailing new lines
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 return "\n".join(lines).strip("\n")

eric ide

mercurial