fix comments, add new keywords
This commit is contained in:
		
							parent
							
								
									bfec1109a8
								
							
						
					
					
						commit
						e5e235f95c
					
				| 
						 | 
					@ -17,17 +17,17 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(defvar undar-keywords
 | 
					(defvar undar-keywords
 | 
				
			||||||
  '("function" "to" "in" "is" "as" "use" "if" "else" "default"
 | 
					  '("function" "to" "in" "is" "as" "use" "if" "else" "default"
 | 
				
			||||||
    "for" "try" "catch" "while" "do" "exit" "switch" 
 | 
					    "for" "try" "catch" "while" "do" "exit" "switch" "continue"
 | 
				
			||||||
    "return" "const" "type" "this" "yield" "case"
 | 
					    "return" "const" "type" "this" "yield" "case" "loop" "plex"
 | 
				
			||||||
    "assert" "break" "mod" "not" "and" "or" "print" "let"
 | 
					    "assert" "break" "mod" "not" "and" "or" "print" "ref" "interface"
 | 
				
			||||||
    "band" "bor" "bxor" "srl" "sll")
 | 
					     "implements" "impls" "band" "bor" "bxor" "srl" "sll")
 | 
				
			||||||
  "Keywords in Undar.")
 | 
					  "Keywords in Undar.")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(defvar undar-types
 | 
					(defvar undar-types
 | 
				
			||||||
  '("byte" "str" "real" "bool"
 | 
					  '("byte" "str" "real" "bool"
 | 
				
			||||||
    "int" "nat" "f32" "f64"
 | 
					    "int" "nat" "f32" "void"
 | 
				
			||||||
    "u8" "u16" "u32" "u64"
 | 
					    "u8" "u16" "u32"
 | 
				
			||||||
    "i8" "i16" "i32" "i64")
 | 
					    "i8" "i16" "i32")
 | 
				
			||||||
  "Types in Undar.")
 | 
					  "Types in Undar.")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(defvar undar-constants
 | 
					(defvar undar-constants
 | 
				
			||||||
| 
						 | 
					@ -48,44 +48,50 @@
 | 
				
			||||||
    ;; Structs: CamelCase identifiers
 | 
					    ;; Structs: CamelCase identifiers
 | 
				
			||||||
    ("\\b[A-Z][a-zA-Z0-9_]*\\b" . font-lock-type-face)
 | 
					    ("\\b[A-Z][a-zA-Z0-9_]*\\b" . font-lock-type-face)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ;; Function definitions: "fn name(...)"
 | 
					    ;; Function definitions: "function name(...)"
 | 
				
			||||||
    ("\\_<function\\>\\s-+\\(\\w+\\)(" (1 font-lock-function-name-face))
 | 
					    ("\\_<function\\>\\s-+\\([\\w+\\)(" (1 font-lock-function-name-face))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ;; Function calls: "name(...)"
 | 
					    ;; Numbers (Integers and Floats)
 | 
				
			||||||
    ("\\_<\\([a-zA-Z_][a-zA-Z0-9_]*\\)\\s-*(" (1 font-lock-function-name-face))
 | 
					    ("\\b-?[0-9]+\\(?:\\.[0-9]+\\)?\\(?:[eE][+-]?[0-9]+\\)?\\b" . font-lock-constant-face)
 | 
				
			||||||
 | 
					 | 
				
			||||||
    ;; Floating point numbers
 | 
					 | 
				
			||||||
    ("\\b-?[0-9]+\\.[0-9]+\\b" . font-lock-constant-face)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ;; Integers
 | 
					 | 
				
			||||||
    ("\\b-?[0-9]+\\b" . font-lock-constant-face)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ;; Strings with double quotes
 | 
					    ;; Strings with double quotes
 | 
				
			||||||
    ("\"[^\"\n]*\"" . font-lock-string-face)
 | 
					    ("\"[^\"\n]*\"" . font-lock-string-face)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ;; Strings with backticks
 | 
					    ;; Strings with backticks
 | 
				
			||||||
    ("`[^`]*`" . font-lock-string-face))
 | 
					    ("`[^`\n]*`" . font-lock-string-face))
 | 
				
			||||||
 | 
					 | 
				
			||||||
  "Font lock keywords for Undar mode.")
 | 
					  "Font lock keywords for Undar mode.")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(defvar undar-mode-syntax-table
 | 
					(defvar undar-mode-syntax-table
 | 
				
			||||||
  (let ((st (make-syntax-table)))
 | 
					  (let ((st (make-syntax-table)))
 | 
				
			||||||
    ;; '/' starts a comment
 | 
					    ;; C-style comments: // and /* */
 | 
				
			||||||
    (modify-syntax-entry ?! "<" st)
 | 
					    ;; Clear potential existing syntax for / and * if needed (though default is usually fine initially)
 | 
				
			||||||
 | 
					    ;; Clearing standard C++/C comment syntax if it was somehow set beforehand is generally not needed
 | 
				
			||||||
 | 
					    ;; unless explicitly overridden elsewhere, so we rely on the default being clean.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ;; The crucial setup for both // and /* */ comments together:
 | 
				
			||||||
 | 
					    ;; / is punctuation and starts both // (1, 2) and /* (4) comments
 | 
				
			||||||
 | 
					    (modify-syntax-entry ?\/ ". 124" st) 
 | 
				
			||||||
 | 
					    ;; * is punctuation and part of /* */ (2, 3) and also part of // (b) comments (this is key for //)
 | 
				
			||||||
 | 
					    (modify-syntax-entry ?* ". 23b" st) 
 | 
				
			||||||
 | 
					    ;; Newline ends comments (>) and is part of // comments (b) - essential for // to end correctly
 | 
				
			||||||
    (modify-syntax-entry ?\n ">" st) 
 | 
					    (modify-syntax-entry ?\n ">" st) 
 | 
				
			||||||
    ;; Strings
 | 
					    ;; Strings
 | 
				
			||||||
    (modify-syntax-entry ?\" "\"" st)
 | 
					    (modify-syntax-entry ?\" "\"" st)
 | 
				
			||||||
    (modify-syntax-entry ?` "\"" st)
 | 
					    (modify-syntax-entry ?` "\"" st)
 | 
				
			||||||
    st)
 | 
					    st)
 | 
				
			||||||
  "Syntax table for Undar mode.")
 | 
					  "Syntax table for Undar mode, using C-style comments (// and /* */).")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(define-derived-mode undar-mode prog-mode "Undâr"
 | 
					(define-derived-mode undar-mode prog-mode "Undâr"
 | 
				
			||||||
  "Major mode for editing Undar code."
 | 
					  "Major mode for editing Undar code."
 | 
				
			||||||
  :syntax-table undar-mode-syntax-table
 | 
					  :syntax-table undar-mode-syntax-table
 | 
				
			||||||
  (setq-local font-lock-defaults '(undar-font-lock-keywords))
 | 
					  (setq-local font-lock-defaults '(undar-font-lock-keywords))
 | 
				
			||||||
  (setq-local comment-start "! ")
 | 
					  ;; Set comment syntax for commands like M-; (comment-dwim)
 | 
				
			||||||
 | 
					  (setq-local comment-start "// ")
 | 
				
			||||||
  (setq-local comment-end "")
 | 
					  (setq-local comment-end "")
 | 
				
			||||||
 | 
					  (setq-local comment-start-skip "\\(//+\\|/\\*+\\)\\s *")
 | 
				
			||||||
 | 
					  ;; Ensure comments are ignored during parsing (e.g., for indentation)
 | 
				
			||||||
  (setq-local parse-sexp-ignore-comments t)
 | 
					  (setq-local parse-sexp-ignore-comments t)
 | 
				
			||||||
 | 
					  ;; Use C-style indentation function
 | 
				
			||||||
  (setq-local indent-line-function 'c-indent-line))
 | 
					  (setq-local indent-line-function 'c-indent-line))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
;;;###autoload
 | 
					;;;###autoload
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue