small fixes
This commit is contained in:
parent
0bc67209b9
commit
38438904dc
2 changed files with 37 additions and 31 deletions
|
|
@ -8,11 +8,12 @@ enum class IndentAction
|
|||
};
|
||||
|
||||
constexpr int TAB_WIDTH = 8;
|
||||
constexpr char TAB = '\t';
|
||||
|
||||
class IndentStack
|
||||
{
|
||||
std::stack<int> indent_stack;
|
||||
int pending_dedents = 0;
|
||||
int dedent_queue = 0;
|
||||
|
||||
public:
|
||||
IndentStack() { indent_stack.push(0); }
|
||||
|
|
@ -32,15 +33,15 @@ public:
|
|||
return IndentAction::Indent;
|
||||
}
|
||||
|
||||
while (indent_stack.top() > spaces)
|
||||
while (!indent_stack.empty() && indent_stack.top() > spaces)
|
||||
{
|
||||
indent_stack.pop();
|
||||
pending_dedents++;
|
||||
dedent_queue++;
|
||||
}
|
||||
|
||||
if (pending_dedents > 0)
|
||||
if (dedent_queue > 0)
|
||||
{
|
||||
pending_dedents--;
|
||||
dedent_queue--;
|
||||
return IndentAction::Dedent;
|
||||
}
|
||||
|
||||
|
|
@ -49,11 +50,11 @@ public:
|
|||
|
||||
bool popDedent()
|
||||
{
|
||||
if (pending_dedents <= 0)
|
||||
if (dedent_queue <= 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
pending_dedents--;
|
||||
dedent_queue--;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -62,18 +63,24 @@ public:
|
|||
int spaces = 0;
|
||||
for (int i = 0; i < length; i++)
|
||||
{
|
||||
spaces += (text[i] == '\t') ? TAB_WIDTH : 1;
|
||||
if (text[i] == TAB)
|
||||
{
|
||||
spaces += TAB_WIDTH - (spaces % TAB_WIDTH);
|
||||
continue;
|
||||
}
|
||||
spaces++;
|
||||
}
|
||||
return spaces;
|
||||
}
|
||||
|
||||
bool hasRemainingDedents()
|
||||
{
|
||||
return pending_dedents > 0;
|
||||
return dedent_queue > 0;
|
||||
}
|
||||
|
||||
IndentAction closeBlock()
|
||||
{
|
||||
// Force indentation reset at EOF
|
||||
return updateIndentation(0);
|
||||
}
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue