@@ -10,10 +10,8 @@ namespace Rubberduck.SmartIndenter
10
10
internal class AbsoluteCodeLine
11
11
{
12
12
private const string StupidLineEnding = ": _" ;
13
- private const char StringPlaceholder = '\a ' ;
14
- private const char BracketPlaceholder = '\x2 ';
15
- private static readonly Regex StringReplaceRegex = new Regex ( StringPlaceholder . ToString ( CultureInfo . InvariantCulture ) ) ;
16
- private static readonly Regex BracketReplaceRegex = new Regex ( BracketPlaceholder . ToString ( CultureInfo . InvariantCulture ) ) ;
13
+ private static readonly Regex StringReplaceRegex = new Regex ( StringLiteralAndBracketEscaper . StringPlaceholder . ToString ( CultureInfo . InvariantCulture ) ) ;
14
+ private static readonly Regex BracketReplaceRegex = new Regex ( StringLiteralAndBracketEscaper . BracketPlaceholder . ToString ( CultureInfo . InvariantCulture ) ) ;
17
15
private static readonly Regex LineNumberRegex = new Regex ( @"^(?<number>(-?\d+)|(&H[0-9A-F]{1,8}))\s+(?<code>.*)" , RegexOptions . ExplicitCapture ) ;
18
16
private static readonly Regex EndOfLineCommentRegex = new Regex ( @"^(?!(Rem\s)|('))(?<code>[^']*)(\s(?<comment>'.*))$" , RegexOptions . ExplicitCapture ) ;
19
17
private static readonly Regex ProcedureStartRegex = new Regex ( @"^(Public\s|Private\s|Friend\s)?(Static\s)?(Sub|Function|Property\s(Let|Get|Set))\s" ) ;
@@ -34,8 +32,9 @@ internal class AbsoluteCodeLine
34
32
private string _code ;
35
33
private readonly bool _stupidLineEnding ;
36
34
private readonly string [ ] _segments ;
37
- private List < string > _strings ;
38
- private List < string > _brackets ;
35
+ private readonly StringLiteralAndBracketEscaper _escaper ;
36
+ //private List<string> _strings;
37
+ //private List<string> _brackets;
39
38
40
39
public AbsoluteCodeLine ( string code , IIndenterSettings settings ) : this ( code , settings , null ) { }
41
40
@@ -56,72 +55,17 @@ public AbsoluteCodeLine(string code, IIndenterSettings settings, AbsoluteCodeLin
56
55
57
56
Original = code ;
58
57
59
- ExtractStringLiteralsAndBrackets ( ) ;
58
+ _escaper = new StringLiteralAndBracketEscaper ( _code ) ;
59
+ _code = _escaper . EscapedString ;
60
+
60
61
ExtractLineNumber ( ) ;
61
62
ExtractEndOfLineComment ( ) ;
62
63
63
- _code = Regex . Replace ( _code , StringPlaceholder + "+" , StringPlaceholder . ToString ( CultureInfo . InvariantCulture ) ) ;
64
- _code = Regex . Replace ( _code , BracketPlaceholder + "+" , BracketPlaceholder . ToString ( CultureInfo . InvariantCulture ) ) . Trim ( ) ;
64
+ _code = Regex . Replace ( _code , StringLiteralAndBracketEscaper . StringPlaceholder + "+" , StringLiteralAndBracketEscaper . StringPlaceholder . ToString ( CultureInfo . InvariantCulture ) ) ;
65
+ _code = Regex . Replace ( _code , StringLiteralAndBracketEscaper . BracketPlaceholder + "+" , StringLiteralAndBracketEscaper . BracketPlaceholder . ToString ( CultureInfo . InvariantCulture ) ) . Trim ( ) ;
65
66
_segments = _code . Split ( new [ ] { ": " } , StringSplitOptions . None ) ;
66
67
}
67
68
68
- //TODO: This should be a class.
69
- private void ExtractStringLiteralsAndBrackets ( )
70
- {
71
- _strings = new List < string > ( ) ;
72
- _brackets = new List < string > ( ) ;
73
-
74
- var chars = _code . ToCharArray ( ) ;
75
- var quoted = false ;
76
- var bracketed = false ;
77
- var ins = 0 ;
78
- var strpos = 0 ;
79
- var brkpos = 0 ;
80
- for ( var c = 0 ; c < chars . Length ; c ++ )
81
- {
82
- if ( chars [ c ] == '"' && ! bracketed )
83
- {
84
- if ( ! quoted )
85
- {
86
- strpos = c ;
87
- quoted = true ;
88
- continue ;
89
- }
90
- if ( c + 1 < chars . Length && chars [ c ] == '"' )
91
- {
92
- c ++ ;
93
- }
94
- quoted = false ;
95
- _strings . Add ( new string ( chars . Skip ( strpos ) . Take ( c - strpos ) . ToArray ( ) ) ) ;
96
- for ( var e = strpos ; e < c ; e ++ )
97
- {
98
- chars [ e ] = StringPlaceholder ;
99
- }
100
- }
101
- else if ( ! quoted && ! bracketed && chars [ c ] == '[' )
102
- {
103
- bracketed = true ;
104
- brkpos = c ;
105
- ins ++ ;
106
- }
107
- else if ( ! quoted && bracketed && chars [ c ] == ']' )
108
- {
109
- ins -- ;
110
- if ( ins != 0 )
111
- {
112
- continue ;
113
- }
114
- bracketed = false ;
115
- _brackets . Add ( new string ( chars . Skip ( brkpos ) . Take ( c - brkpos ) . ToArray ( ) ) ) ;
116
- for ( var e = brkpos ; e < c ; e ++ )
117
- {
118
- chars [ e ] = BracketPlaceholder ;
119
- }
120
- }
121
- }
122
- _code = new string ( chars ) ;
123
- }
124
-
125
69
private void ExtractLineNumber ( )
126
70
{
127
71
if ( Previous == null || ! Previous . HasContinuation )
@@ -162,15 +106,18 @@ public string Escaped
162
106
{
163
107
get
164
108
{
109
+ // ReSharper disable LoopCanBeConvertedToQuery
165
110
var output = Original ;
166
- foreach ( var item in _strings )
111
+ foreach ( var item in _escaper . EscapedStrings )
112
+
167
113
{
168
- output = output . Replace ( item , new string ( StringPlaceholder , item . Length ) ) ;
114
+ output = output . Replace ( item , new string ( StringLiteralAndBracketEscaper . StringPlaceholder , item . Length ) ) ;
169
115
}
170
- foreach ( var item in _brackets )
116
+ foreach ( var item in _escaper . EscapedBrackets )
171
117
{
172
- output = output . Replace ( item , new string ( BracketPlaceholder , item . Length ) ) ;
118
+ output = output . Replace ( item , new string ( StringLiteralAndBracketEscaper . BracketPlaceholder , item . Length ) ) ;
173
119
}
120
+ // ReSharper restore LoopCanBeConvertedToQuery
174
121
return output ;
175
122
}
176
123
}
@@ -320,13 +267,13 @@ public string Indent(int indents, bool atProcStart, bool absolute = false)
320
267
}
321
268
322
269
var code = string . Join ( ": " , _segments ) ;
323
- if ( _strings . Any ( ) )
270
+ if ( _escaper . EscapedStrings . Any ( ) )
324
271
{
325
- code = _strings . Aggregate ( code , ( current , literal ) => StringReplaceRegex . Replace ( current , literal , 1 ) ) ;
272
+ code = _escaper . EscapedStrings . Aggregate ( code , ( current , literal ) => StringReplaceRegex . Replace ( current , literal , 1 ) ) ;
326
273
}
327
- if ( _brackets . Any ( ) )
274
+ if ( _escaper . EscapedBrackets . Any ( ) )
328
275
{
329
- code = _brackets . Aggregate ( code , ( current , expr ) => BracketReplaceRegex . Replace ( current , expr , 1 ) ) ;
276
+ code = _escaper . EscapedBrackets . Aggregate ( code , ( current , expr ) => BracketReplaceRegex . Replace ( current , expr , 1 ) ) ;
330
277
}
331
278
332
279
code = string . Join ( string . Empty , number , new string ( ' ' , gap ) , code ) ;
0 commit comments