39 ||
c ==
'_' ||
c ==
'@';
45 ||
c ==
'_' ||
c ==
'@';
48 static bool isReservedKeyword (String::CharPointerType token,
const int tokenLength)
noexcept
50 static const char*
const keywords2Char[] =
51 {
"do",
"if",
"or",
nullptr };
53 static const char*
const keywords3Char[] =
54 {
"and",
"asm",
"for",
"int",
"new",
"not",
"try",
"xor",
nullptr };
56 static const char*
const keywords4Char[] =
57 {
"auto",
"bool",
"case",
"char",
"else",
"enum",
"goto",
58 "long",
"this",
"true",
"void",
nullptr };
60 static const char*
const keywords5Char[] =
61 {
"bitor",
"break",
"catch",
"class",
"compl",
"const",
"false",
"final",
62 "float",
"or_eq",
"short",
"throw",
"union",
"using",
"while",
nullptr };
64 static const char*
const keywords6Char[] =
65 {
"and_eq",
"bitand",
"delete",
"double",
"export",
"extern",
"friend",
66 "import",
"inline",
"module",
"not_eq",
"public",
"return",
"signed",
67 "sizeof",
"static",
"struct",
"switch",
"typeid",
"xor_eq",
nullptr };
69 static const char*
const keywords7Char[] =
70 {
"__cdecl",
"_Pragma",
"alignas",
"alignof",
"concept",
"default",
71 "mutable",
"nullptr",
"private",
"typedef",
"uint8_t",
"virtual",
74 static const char*
const keywordsOther[] =
75 {
"@class",
"@dynamic",
"@end",
"@implementation",
"@interface",
"@public",
76 "@private",
"@protected",
"@property",
"@synthesize",
"__fastcall",
"__stdcall",
77 "atomic_cancel",
"atomic_commit",
"atomic_noexcept",
"char16_t",
"char32_t",
78 "co_await",
"co_return",
"co_yield",
"const_cast",
"constexpr",
"continue",
79 "decltype",
"dynamic_cast",
"explicit",
"namespace",
"noexcept",
"operator",
"override",
80 "protected",
"register",
"reinterpret_cast",
"requires",
"static_assert",
81 "static_cast",
"synchronized",
"template",
"thread_local",
"typename",
"unsigned",
82 "volatile",
nullptr };
88 case 2:
k = keywords2Char;
break;
89 case 3:
k = keywords3Char;
break;
90 case 4:
k = keywords4Char;
break;
91 case 5:
k = keywords5Char;
break;
92 case 6:
k = keywords6Char;
break;
93 case 7:
k = keywords7Char;
break;
96 if (tokenLength < 2 || tokenLength > 16)
103 for (
int i = 0;
k[
i] !=
nullptr; ++
i)
110 template <
typename Iterator>
114 String::CharPointerType::CharType possibleIdentifier[100] = {};
115 String::CharPointerType possible (possibleIdentifier);
119 auto c = source.nextChar();
121 if (tokenLength < 20)
127 if (tokenLength > 1 && tokenLength <= 16)
129 possible.writeNull();
131 if (
isReservedKeyword (String::CharPointerType (possibleIdentifier), tokenLength))
138 template <
typename Iterator>
141 auto c = source.peekNextChar();
143 if (
c ==
'l' ||
c ==
'L' ||
c ==
'u' ||
c ==
'U')
154 return (
c >=
'0' &&
c <=
'9')
155 || (
c >=
'a' &&
c <=
'f')
156 || (
c >=
'A' &&
c <=
'F');
159 template <
typename Iterator>
162 if (source.peekNextChar() ==
'-')
165 if (source.nextChar() !=
'0')
168 auto c = source.nextChar();
170 if (
c !=
'x' &&
c !=
'X')
189 return c >=
'0' &&
c <=
'7';
192 template <
typename Iterator>
195 if (source.peekNextChar() ==
'-')
198 if (source.nextChar() !=
'0')
212 return c >=
'0' &&
c <=
'9';
215 template <
typename Iterator>
218 if (source.peekNextChar() ==
'-')
234 template <
typename Iterator>
237 if (source.peekNextChar() ==
'-')
248 const bool hasPoint = (source.peekNextChar() ==
'.');
264 auto c = source.peekNextChar();
265 bool hasExponent = (
c ==
'e' ||
c ==
'E');
270 c = source.peekNextChar();
272 if (
c ==
'+' ||
c ==
'-')
275 int numExpDigits = 0;
283 if (numExpDigits == 0)
287 c = source.peekNextChar();
289 if (
c ==
'f' ||
c ==
'F')
291 else if (! (hasExponent || hasPoint))
297 template <
typename Iterator>
300 const Iterator original (source);
317 template <
typename Iterator>
320 auto quote = source.nextChar();
324 auto c = source.nextChar();
326 if (
c == quote ||
c == 0)
334 template <
typename Iterator>
337 bool lastWasStar =
false;
341 auto c = source.nextChar();
343 if (
c == 0 || (
c ==
'/' && lastWasStar))
346 lastWasStar = (
c ==
'*');
350 template <
typename Iterator>
353 bool lastWasBackslash =
false;
357 auto c = source.peekNextChar();
367 Iterator next (source);
369 auto c2 = next.peekNextChar();
371 if (
c2 ==
'/' ||
c2 ==
'*')
378 if (
c ==
'\n' ||
c ==
'\r')
380 source.skipToEndOfLine();
382 if (lastWasBackslash)
388 lastWasBackslash = (
c ==
'\\');
393 template <
typename Iterator>
396 if (source.peekNextChar() ==
c)
400 template <
typename Iterator>
403 auto c = source.peekNextChar();
405 if (
c == c1 ||
c ==
c2)
409 template <
typename Iterator>
412 source.skipWhitespace();
413 auto firstChar = source.peekNextChar();
420 case '0':
case '1':
case '2':
case '3':
case '4':
421 case '5':
case '6':
case '7':
case '8':
case '9':
430 if (firstChar ==
'.')
482 auto nextChar = source.peekNextChar();
486 source.skipToEndOfLine();
509 case '|':
case '&':
case '^':
545 String::CharPointerType
t;
561 const int maxCharsOnLine,
const bool breakAtNewLines,
562 const bool replaceSingleQuotes,
const bool allowStringBreaks)
565 bool lastWasHexEscapeCode =
false;
566 bool trigraphDetected =
false;
568 for (
int i = 0;
i < numBytesToRead || numBytesToRead < 0; ++
i)
570 auto c = (
unsigned char) utf8[
i];
571 bool startNewLine =
false;
576 case '\t':
out <<
"\\t"; trigraphDetected =
false; lastWasHexEscapeCode =
false; charsOnLine += 2;
break;
577 case '\r':
out <<
"\\r"; trigraphDetected =
false; lastWasHexEscapeCode =
false; charsOnLine += 2;
break;
578 case '\n':
out <<
"\\n"; trigraphDetected =
false; lastWasHexEscapeCode =
false; charsOnLine += 2; startNewLine = breakAtNewLines;
break;
579 case '\\':
out <<
"\\\\"; trigraphDetected =
false; lastWasHexEscapeCode =
false; charsOnLine += 2;
break;
580 case '\"':
out <<
"\\\""; trigraphDetected =
false; lastWasHexEscapeCode =
false; charsOnLine += 2;
break;
583 if (trigraphDetected)
587 trigraphDetected =
false;
592 trigraphDetected =
true;
595 lastWasHexEscapeCode =
false;
600 if (numBytesToRead < 0)
604 lastWasHexEscapeCode =
true;
605 trigraphDetected =
false;
610 if (replaceSingleQuotes)
613 lastWasHexEscapeCode =
false;
614 trigraphDetected =
false;
622 if (
c >= 32 &&
c < 127 && ! (lastWasHexEscapeCode
626 lastWasHexEscapeCode =
false;
627 trigraphDetected =
false;
630 else if (allowStringBreaks && lastWasHexEscapeCode &&
c >= 32 &&
c < 127)
632 out <<
"\"\"" << (char)
c;
633 lastWasHexEscapeCode =
false;
634 trigraphDetected =
false;
640 lastWasHexEscapeCode =
true;
641 trigraphDetected =
false;
648 if ((startNewLine || (maxCharsOnLine > 0 && charsOnLine >= maxCharsOnLine))
649 && (numBytesToRead < 0 ||
i < numBytesToRead - 1))
653 lastWasHexEscapeCode =
false;
670 return mo.toString();
#define noexcept
Definition DistrhoDefines.h:72
@ tokenType_error
Definition juce_CPlusPlusCodeTokeniser.h:54
@ tokenType_punctuation
Definition juce_CPlusPlusCodeTokeniser.h:63
@ tokenType_float
Definition juce_CPlusPlusCodeTokeniser.h:60
@ tokenType_keyword
Definition juce_CPlusPlusCodeTokeniser.h:56
@ tokenType_bracket
Definition juce_CPlusPlusCodeTokeniser.h:62
@ tokenType_identifier
Definition juce_CPlusPlusCodeTokeniser.h:58
@ tokenType_integer
Definition juce_CPlusPlusCodeTokeniser.h:59
@ tokenType_comment
Definition juce_CPlusPlusCodeTokeniser.h:55
@ tokenType_preprocessor
Definition juce_CPlusPlusCodeTokeniser.h:64
@ tokenType_string
Definition juce_CPlusPlusCodeTokeniser.h:61
@ tokenType_operator
Definition juce_CPlusPlusCodeTokeniser.h:57
Definition juce_CharPointer_ASCII.h:38
static bool isLetter(char character) noexcept
Definition juce_CharacterFunctions.cpp:79
static int getHexDigitValue(juce_wchar digit) noexcept
Definition juce_CharacterFunctions.cpp:112
static bool isLetterOrDigit(char character) noexcept
Definition juce_CharacterFunctions.cpp:90
Definition juce_MemoryOutputStream.h:36
Definition juce_OutputStream.h:38
Definition juce_String.h:53
static String toHexString(IntegerType number)
Definition juce_String.h:1097
struct huft * t
Definition inflate.c:943
register unsigned k
Definition inflate.c:946
register unsigned i
Definition inflate.c:1575
unsigned s
Definition inflate.c:1555
static void c2(register WDL_FFT_COMPLEX *a)
Definition fft.c:270
float out
Definition lilv_test.c:1461
Definition carla_juce.cpp:31
NewLine newLine
Definition juce_String.cpp:28
wchar_t juce_wchar
Definition juce_CharacterFunctions.h:42
bool isEOF() const noexcept
Definition juce_CPlusPlusCodeTokeniserFunctions.h:543
int numChars
Definition juce_CPlusPlusCodeTokeniserFunctions.h:546
juce_wchar peekNextChar() noexcept
Definition juce_CPlusPlusCodeTokeniserFunctions.h:539
juce_wchar nextChar() noexcept
Definition juce_CPlusPlusCodeTokeniserFunctions.h:538
void skipWhitespace() noexcept
Definition juce_CPlusPlusCodeTokeniserFunctions.h:541
StringIterator(const String &s) noexcept
Definition juce_CPlusPlusCodeTokeniserFunctions.h:535
void skip() noexcept
Definition juce_CPlusPlusCodeTokeniserFunctions.h:540
StringIterator(String::CharPointerType s) noexcept
Definition juce_CPlusPlusCodeTokeniserFunctions.h:536
String::CharPointerType t
Definition juce_CPlusPlusCodeTokeniserFunctions.h:545
void skipToEndOfLine() noexcept
Definition juce_CPlusPlusCodeTokeniserFunctions.h:542
Definition juce_CPlusPlusCodeTokeniserFunctions.h:35
static bool isDecimalDigit(const juce_wchar c) noexcept
Definition juce_CPlusPlusCodeTokeniserFunctions.h:210
static void skipPreprocessorLine(Iterator &source) noexcept
Definition juce_CPlusPlusCodeTokeniserFunctions.h:351
static void skipIfNextCharMatches(Iterator &source, const juce_wchar c1, const juce_wchar c2) noexcept
Definition juce_CPlusPlusCodeTokeniserFunctions.h:401
static bool parseFloatLiteral(Iterator &source) noexcept
Definition juce_CPlusPlusCodeTokeniserFunctions.h:235
static bool isIdentifierStart(const juce_wchar c) noexcept
Definition juce_CPlusPlusCodeTokeniserFunctions.h:36
static String addEscapeChars(const String &s)
Definition juce_CPlusPlusCodeTokeniserFunctions.h:666
static bool parseOctalLiteral(Iterator &source) noexcept
Definition juce_CPlusPlusCodeTokeniserFunctions.h:193
static void writeEscapeChars(OutputStream &out, const char *utf8, const int numBytesToRead, const int maxCharsOnLine, const bool breakAtNewLines, const bool replaceSingleQuotes, const bool allowStringBreaks)
Definition juce_CPlusPlusCodeTokeniserFunctions.h:560
static void skipComment(Iterator &source) noexcept
Definition juce_CPlusPlusCodeTokeniserFunctions.h:335
static bool isHexDigit(const juce_wchar c) noexcept
Definition juce_CPlusPlusCodeTokeniserFunctions.h:152
static bool isIdentifierBody(const juce_wchar c) noexcept
Definition juce_CPlusPlusCodeTokeniserFunctions.h:42
static int readNextToken(Iterator &source)
Definition juce_CPlusPlusCodeTokeniserFunctions.h:410
static bool isReservedKeyword(String::CharPointerType token, const int tokenLength) noexcept
Definition juce_CPlusPlusCodeTokeniserFunctions.h:48
static bool parseDecimalLiteral(Iterator &source) noexcept
Definition juce_CPlusPlusCodeTokeniserFunctions.h:216
static void skipQuotedString(Iterator &source) noexcept
Definition juce_CPlusPlusCodeTokeniserFunctions.h:318
static bool skipNumberSuffix(Iterator &source)
Definition juce_CPlusPlusCodeTokeniserFunctions.h:139
static int parseIdentifier(Iterator &source) noexcept
Definition juce_CPlusPlusCodeTokeniserFunctions.h:111
static void skipIfNextCharMatches(Iterator &source, const juce_wchar c) noexcept
Definition juce_CPlusPlusCodeTokeniserFunctions.h:394
static int parseNumber(Iterator &source)
Definition juce_CPlusPlusCodeTokeniserFunctions.h:298
static bool isOctalDigit(const juce_wchar c) noexcept
Definition juce_CPlusPlusCodeTokeniserFunctions.h:187
static bool parseHexLiteral(Iterator &source) noexcept
Definition juce_CPlusPlusCodeTokeniserFunctions.h:160
return c
Definition crypt.c:175
int result
Definition process.c:1455
mo
Definition zipinfo.c:2287
#define const
Definition zconf.h:137