|
commit d66e146a89cd92307cb404bb203a9ce46f890375
Author: Greg Ercolano <erco@seriss.com>
AuthorDate: Sun Sep 20 16:05:16 2020 -0700
Commit: Greg Ercolano <erco@seriss.com>
CommitDate: Sun Nov 1 12:16:23 2020 -0800
Handle single quotes
fluid/CodeEditor.cxx | 10 +++++++---
fluid/StyleParse.cxx | 9 +++++----
fluid/StyleParse.h | 3 ++-
3 files changed, 14 insertions(+), 8 deletions(-)
diff --git fluid/CodeEditor.cxx fluid/CodeEditor.cxx
index c0e91dd..3d7d475 100644
--- fluid/CodeEditor.cxx
+++ fluid/CodeEditor.cxx
@@ -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?
diff --git fluid/StyleParse.cxx fluid/StyleParse.cxx
index 043f2c8..abbb33f 100644
--- fluid/StyleParse.cxx
+++ fluid/StyleParse.cxx
@@ -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
diff --git fluid/StyleParse.h fluid/StyleParse.h
index 97755d6..2fcc4f4 100644
--- fluid/StyleParse.h
+++ fluid/StyleParse.h
@@ -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(); // "\'"
[ Direct Link to Message ] | |