11#include " CodeService/FormatElement/RangeFormatContext.h"
2- #include " CodeService/FormatElement/TextElement.h"
3- #include < string_view>
2+
43
54RangeFormatContext::RangeFormatContext (std::shared_ptr<LuaParser> parser, LuaCodeStyleOptions& options,
65 LuaFormatRange validRange)
@@ -12,15 +11,15 @@ RangeFormatContext::RangeFormatContext(std::shared_ptr<LuaParser> parser, LuaCod
1211{
1312}
1413
15- void RangeFormatContext::Print (TextElement& textElement )
14+ void RangeFormatContext::Print (std::string_view text, TextRange range )
1615{
17- int startOffset = textElement. GetTextRange () .StartOffset ;
16+ int startOffset = range .StartOffset ;
1817 int startLine = _parser->GetLine (startOffset);
19- int endLine = _parser->GetLine (textElement. GetTextRange () .EndOffset );
18+ int endLine = _parser->GetLine (range .EndOffset );
2019 if (startLine > _validRange.EndLine || endLine < _validRange.StartLine )
2120 {
2221 _inValidRange = false ;
23- _characterCount += textElement. GetText () .size ();
22+ _characterCount += text .size ();
2423 return ;
2524 }
2625
@@ -49,8 +48,8 @@ void RangeFormatContext::Print(TextElement& textElement)
4948 }
5049 }
5150 }
52- _buffer.append (textElement. GetText () );
53- _characterCount += textElement. GetText () .size ();
51+ _buffer.append (text );
52+ _characterCount += text .size ();
5453
5554 if (startLine < _formattedRange.StartLine )
5655 {
@@ -64,6 +63,57 @@ void RangeFormatContext::Print(TextElement& textElement)
6463 }
6564}
6665
66+ void RangeFormatContext::Print (char ch, int offset)
67+ {
68+ int startLine = _parser->GetLine (offset);
69+ int endLine = _parser->GetLine (offset);
70+ if (startLine > _validRange.EndLine || endLine < _validRange.StartLine )
71+ {
72+ _inValidRange = false ;
73+ _characterCount += 1 ;
74+ return ;
75+ }
76+
77+ _inValidRange = true ;
78+ if (!_indentStack.empty ())
79+ {
80+ auto & indentState = _indentStack.back ();
81+ if (indentState.Style == IndentStyle::Space)
82+ {
83+ if (_characterCount < indentState.SpaceIndent )
84+ {
85+ PrintIndent (indentState.SpaceIndent - _characterCount, indentState.Style );
86+ }
87+ }
88+ else
89+ {
90+ if (_characterCount == 0 )
91+ {
92+ PrintIndent (indentState.TabIndent , indentState.Style );
93+ PrintIndent (indentState.SpaceIndent , IndentStyle::Space);
94+ }
95+ else if (_characterCount >= indentState.TabIndent && (indentState.SpaceIndent + indentState.TabIndent >
96+ _characterCount))
97+ {
98+ PrintIndent (indentState.SpaceIndent - (_characterCount - indentState.TabIndent ), IndentStyle::Space);
99+ }
100+ }
101+ }
102+ _buffer.push_back (ch);
103+ _characterCount++;
104+
105+ if (startLine < _formattedRange.StartLine )
106+ {
107+ _formattedRange.StartLine = startLine;
108+ _formattedRange.StartCharacter = _parser->GetColumn (offset);
109+ }
110+
111+ if (endLine > _formattedRange.EndLine )
112+ {
113+ _formattedRange.EndLine = endLine;
114+ }
115+ }
116+
67117void RangeFormatContext::PrintBlank (int blank)
68118{
69119 for (int i = 0 ; i < blank; i++)
0 commit comments