Handle single quotes

This commit is contained in:
Greg Ercolano 2020-09-20 16:05:16 -07:00
parent 4d503899a3
commit d66e146a89
3 changed files with 14 additions and 8 deletions

View File

@ -33,7 +33,8 @@ Fl_Text_Display::Style_Table_Entry CodeEditor::
{ FL_BLUE, FL_COURIER, 11 }, // D - Strings
{ FL_DARK_RED, FL_COURIER, 11 }, // E - Directives
{ FL_DARK_RED, FL_COURIER_BOLD, 11 }, // F - Types
{ FL_BLUE, FL_COURIER_BOLD, 11 } // G - Keywords
{ FL_BLUE, FL_COURIER_BOLD, 11 }, // G - Keywords
{ 220, /* med cyan */ FL_COURIER, 11 } // H - Single quote chars
};
// attempt to make the fluid code editor widget honour textsize setting
@ -61,6 +62,7 @@ void CodeEditor::style_parse(const char *in_tbuff, // text buffer to par
// 'E' - Directives #define, #include..
// 'F' - Types void, char..
// 'G' - Keywords if, while..
// 'H' - Chars 'x'
StyleParse sp;
sp.tbuff = in_tbuff;
@ -83,8 +85,10 @@ void CodeEditor::style_parse(const char *in_tbuff, // text buffer to par
if ( !sp.parse_escape() ) break;
} else if ( strncmp(sp.tbuff, "//", 2)==0 ) { // Line comment?
if ( !sp.parse_line_comment() ) break;
} else if ( c == '"' ) { // Start of quoted string?
if ( !sp.parse_quoted_string() ) break;
} else if ( c == '"' ) { // Start of double quoted string?
if ( !sp.parse_quoted_string('"', 'D') ) break;
} else if ( c == '\'' ) { // Start of single quoted string?
if ( !sp.parse_quoted_string('\'', 'H') ) break;
} else if ( c == '#' && sp.lwhite ) { // Start of '#' directive?
if ( !sp.parse_directive() ) break;
} else if ( !sp.last && (islower(c) || c == '_') ) { // Possible C/C++ keyword?

View File

@ -258,18 +258,19 @@ int StyleParse::parse_keyword() {
return parse_over_key(key, style);
}
// Style parse a quoted string.
// Style parse a quoted string, either "" or ''.
// Returns 0 if hit end of buffer, 1 otherwise.
//
int StyleParse::parse_quoted_string() {
style = 'D'; // start string style
int StyleParse::parse_quoted_string(char quote_char, // e.g. '"' or '\''
char in_style) { // style for quoted text
style = in_style; // start string style
if ( !parse_over_char() ) return 0; // parse over opening quote
// Parse until closing quote reached
char c;
while ( len > 0 ) {
c = tbuff[0];
if ( c == '"' ) { // Closing quote? Parse and done
if ( c == quote_char ) { // Closing quote? Parse and done
if ( !parse_over_char() ) return 0; // close quote
break;
} else if ( c == '\\' ) { // Escape sequence? Parse over, continue

View File

@ -50,7 +50,8 @@ public:
int parse_over_key(const char *key, char s);
int parse_over_angles(char s);
int parse_keyword(); // "switch"
int parse_quoted_string(); // "hello"
int parse_quoted_string(char quote_char, char in_style);
// "hello", 'x'
int parse_directive(); // "#define"
int parse_line_comment(); // "// text.."
int parse_escape(); // "\'"