summaryrefslogtreecommitdiff
path: root/fluid/widgets/Style_Parser.h
diff options
context:
space:
mode:
Diffstat (limited to 'fluid/widgets/Style_Parser.h')
-rw-r--r--fluid/widgets/Style_Parser.h59
1 files changed, 59 insertions, 0 deletions
diff --git a/fluid/widgets/Style_Parser.h b/fluid/widgets/Style_Parser.h
new file mode 100644
index 000000000..287ea6b21
--- /dev/null
+++ b/fluid/widgets/Style_Parser.h
@@ -0,0 +1,59 @@
+//
+// Syntax highlighting for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2025 by Bill Spitzak and others.
+// Copyright 2020 Greg Ercolano.
+//
+// This library is free software. Distribution and use rights are outlined in
+// the file "COPYING" which should have been included with this file. If this
+// file is missing or damaged, see the license at:
+//
+// https://www.fltk.org/COPYING.php
+//
+// Please see the following page on how to report bugs and issues:
+//
+// https://www.fltk.org/bugs.php
+//
+
+#ifndef FLUID_WIDGETS_STYLE_PARSER_H
+#define FLUID_WIDGETS_STYLE_PARSER_H
+
+namespace fld {
+namespace widget {
+
+// Class to manage style parsing, friend of Code_Editor
+class Style_Parser {
+public:
+ const char *tbuff { nullptr }; // text buffer
+ char *sbuff { nullptr }; // style buffer
+ int len { 0 }; // running length
+ char style { 0 }; // current style
+ char lwhite { 1 }; // leading white space (1=white, 0=past white)
+ int col { 0 }; // line's column counter
+ char keyword[40] { }; // keyword parsing buffer
+ char last { 0 }; // flag for keyword parsing
+
+ Style_Parser() = default;
+
+ // Methods to aid in parsing
+ int parse_over_char(int handle_crlf=1);
+ int parse_over_white();
+ int parse_over_alpha();
+ int parse_to_eol(char s);
+ int parse_block_comment(); // "/* text.. */"
+ void buffer_keyword();
+ int parse_over_key(const char *key, char s);
+ int parse_over_angles(char s);
+ int parse_keyword(); // "switch"
+ int parse_quoted_string(char quote_char, char in_style);
+ // "hello", 'x'
+ int parse_directive(); // "#define"
+ int parse_line_comment(); // "// text.."
+ int parse_escape(); // "\'"
+ int parse_all_else(); // all other code
+};
+
+} // namespace widget
+} // namespace fld
+
+#endif // FLUID_WIDGETS_STYLE_PARSER_H