Cogito, ergo sum
Difference between revisions of "Legacy:Emacs"
From Unreal Wiki, The Unreal Engine Documentation Site
(Header had a funky non-ascii arrow entity instead of the standard "---" specified in Info node "(elisp) Library Headers" -- fix.) |
(Updating to new version that actually works) |
||
Line 4: | Line 4: | ||
<pre> | <pre> | ||
− | + | (defvar unrealscript-mode-hook nil) | |
− | + | (defvar unrealscript-mode-map | |
− | + | (let ((unrealscript-mode-map (make-sparse-keymap))) | |
− | + | (define-key unrealscript-mode-map "\C-j" 'newline-and-indent) | |
− | + | unrealscript-mode-map) | |
− | + | "Keymap for UNREALSCRIPT major mode") | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | (defconst unrealscript-font-lock-keywords-1 | |
+ | (list | ||
+ | '("\\<\\(?:break\\|c\\(?:\\(?:as\\|ontinu\\)e\\)\\|do\\|e\\(?:lse\\|xtends\\)\\|for\\(?:each\\)?\\|i\\(?:f\\|nterface\\)\\|new\\|return\\|switch\\|var\\|while\\|class\\)\\>" . font-lock-keyword-face)) | ||
+ | "Minimal highlighting expressions for UNREALSCRIPT mode.") | ||
+ | (defconst unrealscript-font-lock-keywords-2 | ||
+ | (append unrealscript-font-lock-keywords-1 | ||
+ | (list | ||
+ | '("\\<\\(?:array\\|b\\(?:ool\\|yte\\)\\|c\\(?:lass\\|o\\(?:erce\\|lor\\|ords\\)\\)\\|de\\(?:faultproperties\\|legate\\)\\|e\\(?:num\\|vent\\)\\|f\\(?:alse\\|loat\\|unction\\)\\|int\\|local\\|name\\|o\\(?:ptional\\|ut\\)\\|plane\\|r\\(?:egion\\|otator\\)\\|st\\(?:ate\\|r\\(?:ing\\|uct\\)\\)\\|true\\|v\\(?:\\(?:a\\|ecto\\)r\\)\\)\\>" . font-lock-keyword-face))) | ||
+ | "Additional Keywords to highlight in UNREALSCRIPT mode.") | ||
− | |||
− | |||
− | + | (defconst unrealscript-font-lock-keywords-3 | |
+ | (append unrealscript-font-lock-keywords-2 | ||
+ | (list | ||
+ | '("\\<\\(?:A\\(?:bstract\\|llowAbstract\\|uto\\(?:Comment\\|ExpandCategories\\)\\)\\|Co\\(?:llapseCategories\\|nfig\\)\\|D\\(?:ep\\(?:endsOn\\|recated\\)\\|isplayName\\|ontCollapseCategories\\)\\|Edit\\(?:Condition\\|InlineNew\\)\\|FriendlyName\\|Hide\\(?:Categories\\|DropDown\\)\\|I\\(?:\\(?:mplemen\\|nheri\\)ts\\)\\|N\\(?:ative\\(?:Replication\\)?\\|o\\(?:Export\\|nTransient\\|t\\(?:EditInlineNew\\|Placeable\\)\\)\\)\\|P\\(?:erObject\\(?:Config\\|Localized\\)\\|laceable\\)\\|ShowCategories\\|T\\(?:oolTip\\|ransient\\)\\|Within\\)\\>" . font-lock-type-face) | ||
+ | '("\\<\\(?:auto\\|c\\(?:lient\\|on\\(?:fig\\|st\\)\\)\\|d\\(?:atabinding\\|eprecated\\|uplicatetransient\\)\\|e\\(?:dit\\(?:const\\|fixedsize\\|inline\\(?:use\\)?\\|oronly\\)\\|x\\(?:ec\\|port\\)\\)\\|globalconfig\\|i\\(?:gnores\\|n\\(?:it\\|put\\|stanced\\|terp\\)\\|terator\\)\\|l\\(?:atent\\|ocalized\\)\\|n\\(?:ative\\(?:replication\\)?\\|o\\(?:clear\\|export\\|import\\|ntransactional\\|tforconsole\\)\\)\\|operator\\|p\\(?:o\\(?:\\(?:inte\\|stoperato\\)r\\)\\|r\\(?:eoperator\\|ivate\\|otected\\)\\|ublic\\)\\|re\\(?:liable\\|pnotify\\)\\|s\\(?:erver\\|i\\(?:mulated\\|ngular\\)\\|kip\\|tatic\\)\\|tra\\(?:nsient\\|vel\\)\\|unreliable\\)\\>" . font-lock-keyword-face) | ||
+ | '("\\<\\(?:A\\(?:bs\\|cos\\|dd\\(?:Item\\)?\\|llActors\\|s\\(?:c\\|in\\)\\|tan\\)\\|B\\(?:asedActors\\|egin\\(?:Play\\|State\\)\\)\\|C\\(?:aps\\|eil\\|h\\(?:ildActors\\|r\\)\\|l\\(?:amp\\|earTimer\\)\\|o\\(?:\\(?:llidingActor\\)?s\\)\\)\\|D\\(?:estroyed\\|i\\(?:\\(?:sabl\\|vid\\)e\\)\\|ynamicActors\\)\\|E\\(?:mpty\\|n\\(?:\\(?:abl\\|dStat\\)e\\)\\|val\\|xp\\)\\|F\\(?:Clamp\\|M\\(?:ax\\|in\\)\\|Rand\\|astTrace\\|in\\(?:d\\|ish\\(?:Anim\\|Interpolation\\)\\)\\)\\|G\\(?:etTimer\\(?:Count\\|Rate\\)\\|oTo\\(?:State\\)?\\)\\|I\\(?:n\\(?:Str\\|itGame\\|sert\\(?:Item\\)?\\|vert\\)\\|s\\(?:\\(?:InStat\\|TimerActiv\\)e\\)\\)\\|L\\(?:e\\(?:ft\\|n\\|rp\\)\\|o\\(?:cs\\|ge\\)\\)\\|M\\(?:ax\\|i\\(?:rrorVectorByNormal\\|[dn]\\)\\)\\|Normal\\|OverlappingActors\\|P\\(?:o\\(?:pState\\|stBeginPlay\\)\\|reBeginPlay\\|ushState\\)\\|R\\(?:and\\|e\\(?:move\\(?:I\\(?:ndex\\|tem\\)\\)?\\|pl\\(?:ace\\)?\\)\\|ight\\|ound\\)\\|S\\(?:et\\(?:State\\|Timer\\)\\|in\\|leep\\|merp\\|p\\(?:awn\\|lit\\)\\|q\\(?:rt\\|uare\\)\\)\\|T\\(?:an\\|ick\\|ouchingActors\\|race\\(?:Actors\\)?\\)\\|V\\(?:Rand\\|Size\\|isible\\(?:\\(?:Colliding\\)?Actors\\)\\)\\|\\(?:ro\\|vec\\)t\\)\\>" . font-lock-function-name-face))) | ||
+ | "Balls-out highlighting in UNREALSCRIPT mode.") | ||
− | ( | + | (defvar unrealscript-font-lock-keywords unrealscript-font-lock-keywords-3 |
+ | "Default highlighting expressions for UNREALSCRIPT mode.") | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | ( | + | (defvar unrealscript-indent-width 4) |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | (defun looking-at-unrealscript-indent-keyword () | |
− | ( | + | (or (looking-at "^[\t ]*while") (looking-at "^[\t ]*if") (looking-at "^[\t ]*else") (looking-at "^[\t ]*for"))) |
− | + | ||
− | ( | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | ( | + | (defun looking-at-unrealscript-block-end () |
− | + | (or (looking-at "^[\t ]*end") (and (looking-at "^.*}[ \t]*$") (not (looking-at "^.*{"))))) | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
+ | (defun looking-at-unrealscript-block-start () | ||
+ | (or (looking-at "^[\t ]*begin") (and (looking-at "^.*{") (not (looking-at "^.*}[ \t]*$"))))) | ||
− | ;; " | + | ;; Function to control indenting. |
− | ;; | + | (defun unrealscript-indent-line () |
− | ;; | + | "Indent current line as Unrealscript code" |
+ | (interactive) | ||
+ | ;; Set the point to beginning of line. | ||
+ | (beginning-of-line) | ||
+ | (if (bobp) | ||
+ | (indent-line-to 0) | ||
+ | (let ((not-indented t) (lines-back 0) cur-indent) | ||
+ | (if (looking-at-unrealscript-block-end) ; Check for closing brace | ||
+ | ;; if we are at the end of a block | ||
+ | (progn | ||
+ | (save-excursion | ||
+ | (forward-line -1) | ||
+ | (setq lines-back (+ lines-back 1)) | ||
+ | (setq cur-indent (- (current-indentation) unrealscript-indent-width))) | ||
+ | ;; Safety check to make sure we don't indent negative. | ||
+ | (if (< cur-indent 0) | ||
+ | (setq cur-indent 0))) | ||
+ | ;; else scan backward | ||
+ | (save-excursion | ||
+ | (if (looking-at-unrealscript-block-start) ; Opening block | ||
+ | (progn | ||
+ | (forward-line -1) | ||
+ | (setq lines-back (+ lines-back 1)) | ||
+ | (setq cur-indent (current-indentation)) | ||
+ | (setq not-indented nil)) | ||
+ | (while not-indented | ||
+ | (forward-line -1) | ||
+ | (setq lines-back (+ lines-back 1)) | ||
+ | (if (looking-at-unrealscript-block-end) ;; Closing Block | ||
+ | (progn | ||
+ | (setq cur-indent (current-indentation)) | ||
+ | (setq not-indented nil)) | ||
+ | (if (looking-at-unrealscript-block-start) | ||
+ | (progn | ||
+ | (setq cur-indent (+ (current-indentation) unrealscript-indent-width)) | ||
+ | (setq not-indented nil)) | ||
+ | (if (looking-at-unrealscript-indent-keyword) | ||
+ | (progn | ||
+ | (setq cur-indent (current-indentation)) | ||
+ | (forward-line 1) | ||
+ | (setq lines-back (- lines-back 1)) | ||
+ | (if (looking-at-unrealscript-block-start) | ||
+ | (setq not-indented nil) ;; has block | ||
+ | (if (zerop lines-back) ;; no block | ||
+ | (progn | ||
+ | (setq cur-indent (+ cur-indent unrealscript-indent-width)) | ||
+ | (setq not-indented nil)) | ||
+ | (setq not-indented nil)))) | ||
+ | (if (bobp) | ||
+ | (setq not-indented nil))))))))) | ||
+ | (if cur-indent | ||
+ | (indent-line-to cur-indent) | ||
+ | (indent-line-to 0))))) | ||
− | ( | + | (defun unrealscript-populate-syntax-table (table) |
− | + | "Populate the given syntax table as necessary for a C-like language. | |
− | + | This includes setting ' and \" as string delimiters, and setting up | |
− | + | the comment syntax to handle both line style \"//\" and block style | |
− | + | \"/*\" \"*/\" comments." | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | (modify-syntax-entry ?_ "_" table) | |
− | + | (modify-syntax-entry ?\\ "\\" table) | |
− | + | (modify-syntax-entry ?+ "." table) | |
− | + | (modify-syntax-entry ?- "." table) | |
− | ( | + | (modify-syntax-entry ?= "." table) |
− | + | (modify-syntax-entry ?% "." table) | |
− | ( | + | (modify-syntax-entry ?< "." table) |
− | + | (modify-syntax-entry ?> "." table) | |
+ | (modify-syntax-entry ?& "." table) | ||
+ | (modify-syntax-entry ?| "." table) | ||
+ | (modify-syntax-entry ?\' "\"" table) | ||
+ | (modify-syntax-entry ?\240 "." table) | ||
− | ;; | + | ;; Set up block and line oriented comments. The new C |
− | ;; | + | ;; standard mandates both comment styles even in C, so since |
− | ;; | + | ;; all languages now require dual comments, we make this the |
− | ( | + | ;; default. |
− | + | (modify-syntax-entry ?/ ". 124b" table) | |
− | + | (modify-syntax-entry ?* ". 23" table) | |
− | + | ||
− | + | ||
+ | (modify-syntax-entry ?\n "> b" table) | ||
+ | ;; Give CR the same syntax as newline, for selective-display | ||
+ | (modify-syntax-entry ?\^m "> b" table) | ||
+ | table) | ||
− | ( | + | (defvar unrealscript-mode-syntax-table |
− | + | (let ((unrealscript-mode-syntax-table (unrealscript-populate-syntax-table (make-syntax-table)))) | |
− | ( | + | unrealscript-mode-syntax-table) |
− | + | "Syntax table for unrealscript-mode") | |
− | + | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
(defun unrealscript-mode () | (defun unrealscript-mode () | ||
− | "Major mode for editing | + | "Major mode for editing Unrealscript files" |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
(interactive) | (interactive) | ||
(kill-all-local-variables) | (kill-all-local-variables) | ||
− | |||
(set-syntax-table unrealscript-mode-syntax-table) | (set-syntax-table unrealscript-mode-syntax-table) | ||
− | ( | + | (use-local-map unrealscript-mode-map) |
− | + | (setq indent-line-function 'unrealscript-indent-line) | |
− | + | (setq font-lock-defaults '(unrealscript-font-lock-keywords nil t)) | |
− | + | (setq major-mode 'unrealscript-mode) | |
− | ( | + | (setq mode-name "UNREALSCRIPT") |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | ( | + | |
− | ( | + | |
− | + | ||
(run-hooks 'unrealscript-mode-hook) | (run-hooks 'unrealscript-mode-hook) | ||
− | (setq font-lock-keywords-case-fold-search t | + | (setq case-fold-search t) |
− | + | (setq font-lock-keywords-case-fold-search t)) | |
+ | |||
(provide 'unrealscript-mode) | (provide 'unrealscript-mode) | ||
</pre> | </pre> |
Latest revision as of 10:48, 1 December 2010
Emacs can do everything. Check out shell-mode or compile-mode for compiling unrealscript, and launching unreal.
Here is the source of unrealscript-mode. Suggestions, bug reports, etc, welcome,
(defvar unrealscript-mode-hook nil) (defvar unrealscript-mode-map (let ((unrealscript-mode-map (make-sparse-keymap))) (define-key unrealscript-mode-map "\C-j" 'newline-and-indent) unrealscript-mode-map) "Keymap for UNREALSCRIPT major mode") (defconst unrealscript-font-lock-keywords-1 (list '("\\<\\(?:break\\|c\\(?:\\(?:as\\|ontinu\\)e\\)\\|do\\|e\\(?:lse\\|xtends\\)\\|for\\(?:each\\)?\\|i\\(?:f\\|nterface\\)\\|new\\|return\\|switch\\|var\\|while\\|class\\)\\>" . font-lock-keyword-face)) "Minimal highlighting expressions for UNREALSCRIPT mode.") (defconst unrealscript-font-lock-keywords-2 (append unrealscript-font-lock-keywords-1 (list '("\\<\\(?:array\\|b\\(?:ool\\|yte\\)\\|c\\(?:lass\\|o\\(?:erce\\|lor\\|ords\\)\\)\\|de\\(?:faultproperties\\|legate\\)\\|e\\(?:num\\|vent\\)\\|f\\(?:alse\\|loat\\|unction\\)\\|int\\|local\\|name\\|o\\(?:ptional\\|ut\\)\\|plane\\|r\\(?:egion\\|otator\\)\\|st\\(?:ate\\|r\\(?:ing\\|uct\\)\\)\\|true\\|v\\(?:\\(?:a\\|ecto\\)r\\)\\)\\>" . font-lock-keyword-face))) "Additional Keywords to highlight in UNREALSCRIPT mode.") (defconst unrealscript-font-lock-keywords-3 (append unrealscript-font-lock-keywords-2 (list '("\\<\\(?:A\\(?:bstract\\|llowAbstract\\|uto\\(?:Comment\\|ExpandCategories\\)\\)\\|Co\\(?:llapseCategories\\|nfig\\)\\|D\\(?:ep\\(?:endsOn\\|recated\\)\\|isplayName\\|ontCollapseCategories\\)\\|Edit\\(?:Condition\\|InlineNew\\)\\|FriendlyName\\|Hide\\(?:Categories\\|DropDown\\)\\|I\\(?:\\(?:mplemen\\|nheri\\)ts\\)\\|N\\(?:ative\\(?:Replication\\)?\\|o\\(?:Export\\|nTransient\\|t\\(?:EditInlineNew\\|Placeable\\)\\)\\)\\|P\\(?:erObject\\(?:Config\\|Localized\\)\\|laceable\\)\\|ShowCategories\\|T\\(?:oolTip\\|ransient\\)\\|Within\\)\\>" . font-lock-type-face) '("\\<\\(?:auto\\|c\\(?:lient\\|on\\(?:fig\\|st\\)\\)\\|d\\(?:atabinding\\|eprecated\\|uplicatetransient\\)\\|e\\(?:dit\\(?:const\\|fixedsize\\|inline\\(?:use\\)?\\|oronly\\)\\|x\\(?:ec\\|port\\)\\)\\|globalconfig\\|i\\(?:gnores\\|n\\(?:it\\|put\\|stanced\\|terp\\)\\|terator\\)\\|l\\(?:atent\\|ocalized\\)\\|n\\(?:ative\\(?:replication\\)?\\|o\\(?:clear\\|export\\|import\\|ntransactional\\|tforconsole\\)\\)\\|operator\\|p\\(?:o\\(?:\\(?:inte\\|stoperato\\)r\\)\\|r\\(?:eoperator\\|ivate\\|otected\\)\\|ublic\\)\\|re\\(?:liable\\|pnotify\\)\\|s\\(?:erver\\|i\\(?:mulated\\|ngular\\)\\|kip\\|tatic\\)\\|tra\\(?:nsient\\|vel\\)\\|unreliable\\)\\>" . font-lock-keyword-face) '("\\<\\(?:A\\(?:bs\\|cos\\|dd\\(?:Item\\)?\\|llActors\\|s\\(?:c\\|in\\)\\|tan\\)\\|B\\(?:asedActors\\|egin\\(?:Play\\|State\\)\\)\\|C\\(?:aps\\|eil\\|h\\(?:ildActors\\|r\\)\\|l\\(?:amp\\|earTimer\\)\\|o\\(?:\\(?:llidingActor\\)?s\\)\\)\\|D\\(?:estroyed\\|i\\(?:\\(?:sabl\\|vid\\)e\\)\\|ynamicActors\\)\\|E\\(?:mpty\\|n\\(?:\\(?:abl\\|dStat\\)e\\)\\|val\\|xp\\)\\|F\\(?:Clamp\\|M\\(?:ax\\|in\\)\\|Rand\\|astTrace\\|in\\(?:d\\|ish\\(?:Anim\\|Interpolation\\)\\)\\)\\|G\\(?:etTimer\\(?:Count\\|Rate\\)\\|oTo\\(?:State\\)?\\)\\|I\\(?:n\\(?:Str\\|itGame\\|sert\\(?:Item\\)?\\|vert\\)\\|s\\(?:\\(?:InStat\\|TimerActiv\\)e\\)\\)\\|L\\(?:e\\(?:ft\\|n\\|rp\\)\\|o\\(?:cs\\|ge\\)\\)\\|M\\(?:ax\\|i\\(?:rrorVectorByNormal\\|[dn]\\)\\)\\|Normal\\|OverlappingActors\\|P\\(?:o\\(?:pState\\|stBeginPlay\\)\\|reBeginPlay\\|ushState\\)\\|R\\(?:and\\|e\\(?:move\\(?:I\\(?:ndex\\|tem\\)\\)?\\|pl\\(?:ace\\)?\\)\\|ight\\|ound\\)\\|S\\(?:et\\(?:State\\|Timer\\)\\|in\\|leep\\|merp\\|p\\(?:awn\\|lit\\)\\|q\\(?:rt\\|uare\\)\\)\\|T\\(?:an\\|ick\\|ouchingActors\\|race\\(?:Actors\\)?\\)\\|V\\(?:Rand\\|Size\\|isible\\(?:\\(?:Colliding\\)?Actors\\)\\)\\|\\(?:ro\\|vec\\)t\\)\\>" . font-lock-function-name-face))) "Balls-out highlighting in UNREALSCRIPT mode.") (defvar unrealscript-font-lock-keywords unrealscript-font-lock-keywords-3 "Default highlighting expressions for UNREALSCRIPT mode.") (defvar unrealscript-indent-width 4) (defun looking-at-unrealscript-indent-keyword () (or (looking-at "^[\t ]*while") (looking-at "^[\t ]*if") (looking-at "^[\t ]*else") (looking-at "^[\t ]*for"))) (defun looking-at-unrealscript-block-end () (or (looking-at "^[\t ]*end") (and (looking-at "^.*}[ \t]*$") (not (looking-at "^.*{"))))) (defun looking-at-unrealscript-block-start () (or (looking-at "^[\t ]*begin") (and (looking-at "^.*{") (not (looking-at "^.*}[ \t]*$"))))) ;; Function to control indenting. (defun unrealscript-indent-line () "Indent current line as Unrealscript code" (interactive) ;; Set the point to beginning of line. (beginning-of-line) (if (bobp) (indent-line-to 0) (let ((not-indented t) (lines-back 0) cur-indent) (if (looking-at-unrealscript-block-end) ; Check for closing brace ;; if we are at the end of a block (progn (save-excursion (forward-line -1) (setq lines-back (+ lines-back 1)) (setq cur-indent (- (current-indentation) unrealscript-indent-width))) ;; Safety check to make sure we don't indent negative. (if (< cur-indent 0) (setq cur-indent 0))) ;; else scan backward (save-excursion (if (looking-at-unrealscript-block-start) ; Opening block (progn (forward-line -1) (setq lines-back (+ lines-back 1)) (setq cur-indent (current-indentation)) (setq not-indented nil)) (while not-indented (forward-line -1) (setq lines-back (+ lines-back 1)) (if (looking-at-unrealscript-block-end) ;; Closing Block (progn (setq cur-indent (current-indentation)) (setq not-indented nil)) (if (looking-at-unrealscript-block-start) (progn (setq cur-indent (+ (current-indentation) unrealscript-indent-width)) (setq not-indented nil)) (if (looking-at-unrealscript-indent-keyword) (progn (setq cur-indent (current-indentation)) (forward-line 1) (setq lines-back (- lines-back 1)) (if (looking-at-unrealscript-block-start) (setq not-indented nil) ;; has block (if (zerop lines-back) ;; no block (progn (setq cur-indent (+ cur-indent unrealscript-indent-width)) (setq not-indented nil)) (setq not-indented nil)))) (if (bobp) (setq not-indented nil))))))))) (if cur-indent (indent-line-to cur-indent) (indent-line-to 0))))) (defun unrealscript-populate-syntax-table (table) "Populate the given syntax table as necessary for a C-like language. This includes setting ' and \" as string delimiters, and setting up the comment syntax to handle both line style \"//\" and block style \"/*\" \"*/\" comments." (modify-syntax-entry ?_ "_" table) (modify-syntax-entry ?\\ "\\" table) (modify-syntax-entry ?+ "." table) (modify-syntax-entry ?- "." table) (modify-syntax-entry ?= "." table) (modify-syntax-entry ?% "." table) (modify-syntax-entry ?< "." table) (modify-syntax-entry ?> "." table) (modify-syntax-entry ?& "." table) (modify-syntax-entry ?| "." table) (modify-syntax-entry ?\' "\"" table) (modify-syntax-entry ?\240 "." table) ;; Set up block and line oriented comments. The new C ;; standard mandates both comment styles even in C, so since ;; all languages now require dual comments, we make this the ;; default. (modify-syntax-entry ?/ ". 124b" table) (modify-syntax-entry ?* ". 23" table) (modify-syntax-entry ?\n "> b" table) ;; Give CR the same syntax as newline, for selective-display (modify-syntax-entry ?\^m "> b" table) table) (defvar unrealscript-mode-syntax-table (let ((unrealscript-mode-syntax-table (unrealscript-populate-syntax-table (make-syntax-table)))) unrealscript-mode-syntax-table) "Syntax table for unrealscript-mode") (defun unrealscript-mode () "Major mode for editing Unrealscript files" (interactive) (kill-all-local-variables) (set-syntax-table unrealscript-mode-syntax-table) (use-local-map unrealscript-mode-map) (setq indent-line-function 'unrealscript-indent-line) (setq font-lock-defaults '(unrealscript-font-lock-keywords nil t)) (setq major-mode 'unrealscript-mode) (setq mode-name "UNREALSCRIPT") (run-hooks 'unrealscript-mode-hook) (setq case-fold-search t) (setq font-lock-keywords-case-fold-search t)) (provide 'unrealscript-mode)