-
Notifications
You must be signed in to change notification settings - Fork 30
/
kwsCheckBadCharacters.cxx
60 lines (46 loc) · 1.82 KB
/
kwsCheckBadCharacters.cxx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/*=========================================================================
Program: KWStyle - Kitware Style Checker
Module: kwsCheckBadCharacters.cxx
Copyright (c) Kitware, Inc. All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
#include "kwsParser.h"
#include "kwsPushBoostWarnings.h"
#include <boost/xpressive/xpressive.hpp>
#include "kwsPopBoostWarnings.h"
using namespace boost::xpressive;
namespace kws {
/** Check if the current file has bad characters */
bool Parser::CheckBadCharacters(bool checkComments)
{
m_TestsDone[BADCHARACTERS] = true;
m_TestsDescription[BADCHARACTERS] = "Checking for bad characters";
std::string buffer = m_BufferNoComment;
if(checkComments)
{
buffer = m_Buffer;
}
bool hasError = false;
// space characters along with printable characters (space through
// ~) are fine; others are "bad"
sregex lineWithBadCharRegex =
sregex::compile(R"(^[^\r\n]*?([^\s[:print:]])[^\r\n]*$)");
sregex_iterator currentBadCharIterator(buffer.begin(), buffer.end(), lineWithBadCharRegex);
sregex_iterator end;
for (; currentBadCharIterator != end; ++currentBadCharIterator)
{
Error error;
smatch const ¤tMatch = *currentBadCharIterator;
error.line = this->GetLineNumber(currentMatch.position(1), !checkComments);
error.line2 = error.line;
error.number = BADCHARACTERS;
error.description = "Bad character";
m_ErrorList.push_back(error);
hasError = true;
}
return !hasError;
}
} // end namespace kws