forked from enlightenment/efl
parent
0431dd24fd
commit
92f8e013ea
2 changed files with 0 additions and 911 deletions
@ -1,513 +0,0 @@ |
||||
;;; edje-mode-el -- Major mode for editing Edje files |
||||
|
||||
;; Author: Gustavo Sverzut Barbieri <barbieri@gmail.com> |
||||
;; Created: 2007-07-23 |
||||
;; Keywords: Edje major-mode |
||||
;; Url: http://barbieri-playground.googlecode.com/svn/dot-files/edje-mode.el |
||||
;; (if you find this file have problems, check that Url and request update) |
||||
|
||||
;; Copyright (C) 2007 Gustavo Sverzut Barbieri <barbieri@gmail.com> |
||||
|
||||
;; This program is free software; you can redistribute it and/or |
||||
;; modify it under the terms of the GNU General Public License as |
||||
;; published by the Free Software Foundation; either version 2 of |
||||
;; the License, or (at your option) any later version. |
||||
|
||||
;; This program is distributed in the hope that it will be |
||||
;; useful, but WITHOUT ANY WARRANTY; without even the implied |
||||
;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR |
||||
;; PURPOSE. See the GNU General Public License for more details. |
||||
|
||||
;; You should have received a copy of the GNU General Public |
||||
;; License along with this program; if not, write to the Free |
||||
;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, |
||||
;; MA 02111-1307 USA |
||||
|
||||
;;; Commentary: |
||||
;; |
||||
;; This mode is based on tutorial from Scott Andrew Borton: |
||||
;; http://two-wugs.net/emacs/mode-tutorial.html |
||||
|
||||
|
||||
(defvar edje-mode-hook nil) |
||||
|
||||
(defun number-or-nil-to-string (v &optional default) |
||||
(cond ((numberp v) (number-to-string v)) |
||||
((stringp v) (if (string= v "") (number-to-string default) v)) |
||||
(t (number-to-string default)))) |
||||
|
||||
(defun non-empty-string (s) |
||||
(and (not (eq 'nil s)) |
||||
(not (string= "" s)))) |
||||
|
||||
(defun edje-new-program-action-signal-emit (source emission) |
||||
"Insert new program SIGNAL_EMIT" |
||||
(interactive "ssource: \nsemission: ") |
||||
(insert |
||||
(concat |
||||
" action: SIGNAL_EMIT \"" source "\" \"" emission "\";\n" |
||||
))) |
||||
|
||||
(defun edje-new-program-action-state-set (state value target) |
||||
"Insert new program STATE_SET" |
||||
(interactive "sstate: \nsvalue (0.0): \nstarget: ") |
||||
(insert |
||||
(concat |
||||
" action: STATE_SET \"" state "\" " |
||||
(number-or-nil-to-string value 0.0) ";\n" |
||||
" target: \"" target "\";\n" |
||||
))) |
||||
|
||||
(defun edje-new-program-action (action) |
||||
"Insert new program action" |
||||
(interactive "saction: ") |
||||
(setq action (upcase action)) |
||||
(cond ((string= action "STATE_SET") |
||||
(edje-new-program-action-state-set "" 0.0 "")) |
||||
((string= action "SIGNAL_EMIT") |
||||
(edje-new-program-action-signal-emit "" "")) |
||||
)) |
||||
|
||||
(defun edje-new-program (name signal source action) |
||||
"Insert new program block" |
||||
(interactive "sname: \nssignal: \nssource: \nsaction: ") |
||||
(insert |
||||
(concat |
||||
"\n" |
||||
" program {\n" |
||||
" name: \"" name "\";\n" |
||||
|
||||
(if (non-empty-string signal) |
||||
(concat " signal: \"" signal "\";\n")) |
||||
|
||||
(if (non-empty-string source) |
||||
(concat " source: \"" source "\";\n")) |
||||
)) |
||||
|
||||
(edje-new-program-action action) |
||||
|
||||
(insert |
||||
(concat |
||||
" }\n" |
||||
"\n" |
||||
))) |
||||
|
||||
(defun edje-new-desc-relative (x y &optional defx defy) |
||||
"Insert new part description 'relative' line" |
||||
(interactive "sx: \nsy: ") |
||||
(insert |
||||
(concat |
||||
" relative: " |
||||
(number-or-nil-to-string x defx) " " |
||||
(number-or-nil-to-string y defy) ";\n" |
||||
))) |
||||
|
||||
(defun edje-new-desc-offset (x y &optional defx defy) |
||||
"Insert new part description 'offset' line" |
||||
(interactive "sx: \nsy: ") |
||||
(insert |
||||
(concat |
||||
" offset: " |
||||
(number-or-nil-to-string x defx) " " |
||||
(number-or-nil-to-string y defy) ";\n" |
||||
))) |
||||
|
||||
(defun edje-new-desc-inherit (name val) |
||||
"Insert new part description 'inherit' line" |
||||
(interactive "sname: \nsvalue: ") |
||||
(insert |
||||
(concat |
||||
" inherit: \"" name "\" " |
||||
(number-or-nil-to-string val 0.0) ";\n" |
||||
))) |
||||
|
||||
(defun edje-new-desc-text (font size text) |
||||
"Insert new part description 'text' block" |
||||
(interactive "sfont: \nssize: \nstext: ") |
||||
(insert |
||||
(concat |
||||
" text {\n" |
||||
" font: \"" font "\";\n" |
||||
" size: " (number-or-nil-to-string size) ";\n" |
||||
" text: \"" text "\";\n" |
||||
" }\n" |
||||
))) |
||||
|
||||
(defun edje-new-desc-image (name) |
||||
"Insert new part description 'image' block" |
||||
(interactive "sname: ") |
||||
(insert |
||||
(concat |
||||
" image {\n" |
||||
" normal: \"" name "\";\n" |
||||
" }\n" |
||||
))) |
||||
|
||||
(defun edje-new-desc-color (r g b a &optional defr defg defb defa) |
||||
"Insert new part description 'color' line" |
||||
(interactive "sred: \nsgreen: \nsblue: \nsalpha: ") |
||||
(insert |
||||
(concat |
||||
" color: " |
||||
(number-or-nil-to-string r defr) " " |
||||
(number-or-nil-to-string g defg) " " |
||||
(number-or-nil-to-string b defb) " " |
||||
(number-or-nil-to-string a defa) ";\n" |
||||
))) |
||||
|
||||
(defun edje-new-desc (name val &optional |
||||
r1_rx r1_ry |
||||
r2_rx r2_ry |
||||
r1_ox r1_oy |
||||
r2_ox r2_oy |
||||
part_type) |
||||
"Insert new part description block" |
||||
(interactive "sName: \nsValue: ") |
||||
(insert |
||||
(concat |
||||
" description {\n" |
||||
" state: \"" name "\" " (number-or-nil-to-string val 0.0) ";\n")) |
||||
(if (string= part_type "RECT") (edje-new-desc-color 255 255 255 255)) |
||||
(insert " rel1 {\n") |
||||
(edje-new-desc-relative r1_rx r1_ry 0.0 0.0) |
||||
(edje-new-desc-offset r1_ox r1_oy 0 0) |
||||
(insert |
||||
(concat |
||||
" }\n" |
||||
" rel2 {\n" |
||||
)) |
||||
(edje-new-desc-relative r2_rx r2_ry 1.0 1.0) |
||||
(edje-new-desc-offset r2_ox r2_oy -1 -1) |
||||
(insert " }\n") |
||||
(cond ((string= part_type "IMAGE") (edje-new-desc-image "")) |
||||
((string= part_type "TEXT") (edje-new-desc-text "" 10 "contents")) |
||||
) |
||||
(insert " }\n") |
||||
) |
||||
|
||||
(defun edje-new-part (name type &optional |
||||
r1_rx r1_ry |
||||
r2_rx r2_ry |
||||
r1_ox r1_oy |
||||
r2_ox r2_oy) |
||||
"Insert new part" |
||||
(interactive "sName: \nsType: ") |
||||
(setq type (upcase type)) |
||||
(insert |
||||
(concat |
||||
"\n" |
||||
" part {\n" |
||||
" name: \"" name "\";\n" |
||||
" type: " type ";\n" |
||||
" mouse_events: 0;\n" |
||||
)) |
||||
(edje-new-desc "default" 0.0 r1_rx r1_ry r2_rx r2_ry r1_ox r1_oy r2_ox r2_oy type) |
||||
(insert |
||||
(concat |
||||
" }\n" |
||||
))) |
||||
|
||||
(defun edje-setup-compile () |
||||
(set (make-local-variable 'compile-command) |
||||
(concat "edje_cc " (buffer-file-name)) |
||||
)) |
||||
|
||||
(defun edje-cc () |
||||
"Runs edje_cc with current buffer." |
||||
(interactive) |
||||
(compile (edje-setup-compile))) |
||||
|
||||
(defvar edje-mode-map |
||||
(let ((edje-mode-map (make-sparse-keymap))) |
||||
(define-key edje-mode-map "\C-j" 'newline-and-indent) |
||||
(define-key edje-mode-map "\C-cp" 'edje-new-part) |
||||
(define-key edje-mode-map "\C-cd" 'edje-new-desc) |
||||
(define-key edje-mode-map "\C-cr" 'edje-new-desc-relative) |
||||
(define-key edje-mode-map "\C-co" 'edje-new-desc-offset) |
||||
(define-key edje-mode-map "\C-ch" 'edje-new-desc-inherit) |
||||
(define-key edje-mode-map "\C-cc" 'edje-new-desc-color) |
||||
(define-key edje-mode-map "\C-ci" 'edje-new-desc-image) |
||||
(define-key edje-mode-map "\C-ct" 'edje-new-desc-text) |
||||
(define-key edje-mode-map "\C-cg" 'edje-new-program) |
||||
(define-key edje-mode-map "\C-ca" 'edje-new-program-action) |
||||
(define-key edje-mode-map "\C-cs" 'edje-new-program-action-state-set) |
||||
(define-key edje-mode-map "\C-ce" 'edje-new-program-action-signal-emit) |
||||
edje-mode-map) |
||||
"Keymap for Edje major mode") |
||||
|
||||
(add-hook 'c-mode-hook 'edje-setup-compile) |
||||
(add-to-list 'auto-mode-alist '("\\.edc$" . edje-mode)) |
||||
|
||||
(defconst edje-font-lock-keywords-1 |
||||
(eval-when-compile |
||||
(list |
||||
(list (concat "[ \t]*\\<" |
||||
(regexp-opt |
||||
'( |
||||
"collections" |
||||
"data" |
||||
"description" |
||||
"dragable" |
||||
"fill" |
||||
"fonts" |
||||
"group" |
||||
"image" |
||||
"images" |
||||
"origin" |
||||
"part" |
||||
"parts" |
||||
"program" |
||||
"programs" |
||||
"rel1" |
||||
"rel2" |
||||
"script" |
||||
"spectra" |
||||
"style" |
||||
"styles" |
||||
"text" |
||||
) t) "\\>\\([ \t]*{\\|\\.\\)") |
||||
'(1 font-lock-function-name-face)) |
||||
|
||||
)) |
||||
"Major keywords") |
||||
|
||||
(defconst edje-font-lock-keywords-2 |
||||
(eval-when-compile |
||||
(append edje-font-lock-keywords-1 |
||||
(list |
||||
(list |
||||
(concat "^\\([ \t]*\\|[ \t]*[a-z]+\\.\\|\\)\\<" |
||||
(regexp-opt |
||||
'("action" |
||||
"after" |
||||
"alias" |
||||
"align" |
||||
"angle" |
||||
"aspect" |
||||
"aspect_preference" |
||||
"base" |
||||
"border" |
||||
"clip_to" |
||||
"collections" |
||||
"color" |
||||
"color2" |
||||
"color3" |
||||
"color_class" |
||||
"color_classes" |
||||
"confine" |
||||
"data" |
||||
"description" |
||||
"dragable" |
||||
"effect" |
||||
"elipsis" |
||||
"events" |
||||
"fill" |
||||
"fit" |
||||
"fixed" |
||||
"font" |
||||
"fonts" |
||||
"gradient" |
||||
"group" |
||||
"ignore_flags" |
||||
"image" |
||||
"images" |
||||
"in" |
||||
"inherit" |
||||
"item" |
||||
"max" |
||||
"middle" |
||||
"min" |
||||
"mouse_events" |
||||
"name" |
||||
"normal" |
||||
"offset" |
||||
"origin" |
||||
"part" |
||||
"parts" |
||||
"pointer_mode" |
||||
"precise_is_inside" |
||||
"program" |
||||
"programs" |
||||
"rel1" |
||||
"rel2" |
||||
"relative" |
||||
"repeat_events" |
||||
"signal" |
||||
"size" |
||||
"smooth" |
||||
"source" |
||||
"spectra" |
||||
"spectrum" |
||||
"spread" |
||||
"state" |
||||
"step" |
||||
"style" |
||||
"styles" |
||||
"tag" |
||||
"target" |
||||
"text" |
||||
"text_class" |
||||
"text_source" |
||||
"to" |
||||
"to_x" |
||||
"to_y" |
||||
"transition" |
||||
"tween" |
||||
"type" |
||||
"use_alternate_font_metrics" |
||||
"visible" |
||||
"x" |
||||
"y" |
||||
) t) "\\>[ \t]*[:,]") |
||||
'(2 font-lock-keyword-face)) |
||||
))) |
||||
"Minor keywords") |
||||
|
||||
(defconst edje-font-lock-keywords-3 |
||||
(eval-when-compile |
||||
(append edje-font-lock-keywords-2 |
||||
(list |
||||
(list |
||||
(concat "\\<" |
||||
(regexp-opt |
||||
'(; image options (st_images_image) |
||||
"RAW" |
||||
"COMP" |
||||
"LOSSY" |
||||
"USER" |
||||
; part types (st_collections_group_parts_part_type) |
||||
"NONE" |
||||
"RECT" |
||||
"TEXT" |
||||
"IMAGE" |
||||
"SWALLOW" |
||||
"TEXTBLOCK" |
||||
"GRADIENT" |
||||
"GROUP" |
||||
; ignore flags (st_collections_group_parts_part_ignore_flags) |
||||
;"NONE" |
||||
"ON_HOLD" |
||||
; pointer mode (st_collections_group_parts_part_pointer_mode) |
||||
"AUTOGRAB" |
||||
"NOGRAB" |
||||
; aspect (st_collections_group_parts_part_description_aspect_preference) |
||||
"NONE" |
||||
"VERTICAL" |
||||
"HORIZONTAL" |
||||
"BOTH" |
||||
; text effect (st_collections_group_parts_part_effect) |
||||
"NONE" |
||||
"PLAIN" |
||||
"OUTLINE" |
||||
"SOFT_OUTLINE" |
||||
"SHADOW" |
||||
"SOFT_SHADOW" |
||||
"OUTLINE_SHADOW" |
||||
"OUTLINE_SOFT_SHADOW" |
||||
"FAR_SHADOW" |
||||
"FAR_SOFT_SHADOW" |
||||
"GLOW" |
||||
; image fill (st_collections_group_parts_part_description_fill_type) |
||||
"SCALE" |
||||
"TILE" |
||||
; program action (st_collections_group_programs_program_action) |
||||
"STATE_SET" |
||||
"ACTION_STOP" |
||||
"SIGNAL_EMIT" |
||||
"DRAG_VAL_SET" |
||||
"DRAG_VAL_STEP" |
||||
"DRAG_VAL_PAGE" |
||||
"SCRIPT" |
||||
; program transition (st_collections_group_programs_program_transition) |
||||
"LINEAR" |
||||
"SINUSOIDAL" |
||||
"CUBIC_BEZIER" |
||||
"ACCELERATE" |
||||
"DECELERATE" |
||||
) t) "\\>") |
||||
'(1 font-lock-builtin-face)) |
||||
))) |
||||
"Enumerate values") |
||||
|
||||
(defconst edje-font-lock-keywords-4 |
||||
(eval-when-compile |
||||
(append edje-font-lock-keywords-3 |
||||
(list |
||||
(list |
||||
(concat "[ \t]*#" |
||||
(regexp-opt |
||||
'("if" |
||||
"ifdef" |
||||
"ifndef" |
||||
"define" |
||||
"else" |
||||
"endif" |
||||
"include" |
||||
"undef") t) "[ \t]*") |
||||
'(1 font-lock-builtin-face)) |
||||
))) |
||||
"CPP directives") |
||||
|
||||
(defconst edje-font-lock-keywords-5 |
||||
(eval-when-compile |
||||
(append edje-font-lock-keywords-4 |
||||
(list |
||||
(list "[ \t]*#undef[ \t]+\\([a-zA-Z_][a-zA-Z0-9_]*\\)" |
||||
'(1 font-lock-variable-name-face)) |
||||
(list "[ \t]*#define[ \t]+\\([a-zA-Z_][a-zA-Z0-9_]*\\)(" |
||||
'(1 font-lock-function-name-face)) |
||||
(list "[ \t]*#define[ \t]+\\([a-zA-Z_][a-zA-Z0-9_]*\\)" |
||||
'(1 font-lock-variable-name-face)) |
||||
))) |
||||
"CPP directives that define constants") |
||||
|
||||
|
||||
(defvar edje-font-lock-keywords edje-font-lock-keywords-5) |
||||
|
||||
(defvar edje-mode-syntax-table |
||||
(let ((edje-mode-syntax-table (make-syntax-table))) |
||||
; This is added so entity names with underscores can be more easily parsed |
||||
(modify-syntax-entry ?_ "w" edje-mode-syntax-table) |
||||
(modify-syntax-entry ?/ ". 124b" edje-mode-syntax-table) |
||||
(modify-syntax-entry ?* ". 23" edje-mode-syntax-table) |
||||
(modify-syntax-entry ?\n "> b" edje-mode-syntax-table) |
||||
|
||||
edje-mode-syntax-table) |
||||
"Syntax table for edje-mode") |
||||
|
||||
(c-add-style |
||||
"edje" |
||||
'("gnu" |
||||
(indent-tabs-mode . nil) |
||||
(tab-width . 8) |
||||
(c-basic-offset . 3) |
||||
(c-backslash-column . 72) |
||||
(c-hanging-braces-alist . |
||||
((block-open after) |
||||
(brace-list-open after) |
||||
(substatement-open after)) |
||||
) |
||||
(c-offsets-alist . |
||||
((statement-block-intro . +) |
||||
(defun-open . 0) |
||||
(substatement-open . 0) |
||||
(defun-block-intro . +) |
||||
(block-open . 0) |
||||
(label . +) |
||||
)))) |
||||
|
||||
|
||||
(define-derived-mode edje-mode c-mode "Edje" |
||||
"Major mode for editing Edje files" |
||||
(interactive) |
||||
(use-local-map edje-mode-map) |
||||
(set-syntax-table edje-mode-syntax-table) |
||||
(set (make-local-variable 'font-lock-defaults) '(edje-font-lock-keywords)) |
||||
(set (make-local-variable 'require-final-newline) t) |
||||
(c-set-style "edje") |
||||
(run-hooks 'edje-mode-hook) |
||||
) |
||||
|
||||
(provide 'edje-mode) |
||||
|
||||
;;; edje-mode.el ends here |
@ -1,398 +0,0 @@ |
||||
;;; eo-mode-el -- Major mode for editing Eo (eolian) files |
||||
|
||||
;; Author: Gustavo Sverzut Barbieri <barbieri@profusion.mobi> |
||||
;; Created: 2016-07-29 |
||||
;; Keywords: EFL Eo major-mode |
||||
|
||||
;; Copyright (C) 2016 Gustavo Sverzut Barbieri <barbieri@profusion.mobi> |
||||
|
||||
;; This program is free software; you can redistribute it and/or |
||||
;; modify it under the terms of the GNU General Public License as |
||||
;; published by the Free Software Foundation; either version 2 of |
||||
;; the License, or (at your option) any later version. |
||||
|
||||
;; This program is distributed in the hope that it will be |
||||
;; useful, but WITHOUT ANY WARRANTY; without even the implied |
||||
;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR |
||||
;; PURPOSE. See the GNU General Public License for more details. |
||||
|
||||
;; You should have received a copy of the GNU General Public |
||||
;; License along with this program; if not, write to the Free |
||||
;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, |
||||
;; MA 02111-1307 USA |
||||
|
||||
;; To enable for *.eo and *.eot files, add to ~/.emacs: |
||||
;; |
||||
;; (add-to-list 'load-path "SOMEPATH/.emacs.d/site-packages/eo-mode.el") |
||||
;; (add-to-list 'auto-mode-alist '("\\.eo$\\|\\.eot$" . eo-mode)) |
||||
;; (autoload 'eo-mode "eo-mode") |
||||
|
||||
|
||||
(defvar eo-mode-hook nil) |
||||
|
||||
(defconst eo-font-lock-units |
||||
(eval-when-compile |
||||
(list |
||||
(list (concat |
||||
"^\\<" |
||||
(regexp-opt |
||||
'( |
||||
"abstract" |
||||
"class" |
||||
"mixin" |
||||
"interface" |
||||
"type" |
||||
"const" |
||||
"var" |
||||
"struct" |
||||
"enum" |
||||
"import" |
||||
) t) "\\>\\(\\(\\s-+@" |
||||
"\\(extern\\|free([^)]+)\\)" |
||||
"\\)+\\|\\)\\s-+\\<\\([a-zA-Z_][a-zA-Z0-9_.]*\\)\\>") |
||||
'(1 font-lock-keyword-face) |
||||
'(2 font-lock-type-face) |
||||
'(5 font-lock-function-name-face) |
||||
))) |
||||
"Toplevel Units") |
||||
|
||||
(defconst eo-font-lock-blocks |
||||
(eval-when-compile |
||||
(append eo-font-lock-units |
||||
(list |
||||
(list (concat |
||||
"^\\s-+" |
||||
(regexp-opt |
||||
'( |
||||
"methods" |
||||
"events" |
||||
"implements" |
||||
"constructors" |
||||
"params" |
||||
"keys" |
||||
"values" |
||||
) t) "\\s-*{") |
||||
'(1 font-lock-builtin-face) |
||||
)))) |
||||
"blocks") |
||||
|
||||
(defconst eo-font-lock-blocks-with-modifiers |
||||
(eval-when-compile |
||||
(append eo-font-lock-blocks |
||||
(list |
||||
(list (concat |
||||
"^\\s-+" |
||||
(regexp-opt |
||||
'( |
||||
"get" |
||||
"set" |
||||
) t) |
||||
"\\(\\s-+@" |
||||
(regexp-opt |
||||
'( |
||||
"virtual_pure" |
||||
) t) |
||||
"\\|\\)\\s-*{") |
||||
'(1 font-lock-builtin-face) |
||||
'(2 font-lock-type-face) |
||||
)))) |
||||
"blocks") |
||||
|
||||
(defconst eo-font-lock-constants |
||||
(eval-when-compile |
||||
(append eo-font-lock-blocks-with-modifiers |
||||
(list |
||||
(list (concat |
||||
"\\<" |
||||
(regexp-opt |
||||
'( |
||||
"null" |
||||
"true" |
||||
"false" |
||||
) t) "\\>") |
||||
'(1 font-lock-constant-face) |
||||
)))) |
||||
"Constants") |
||||
|
||||
(defconst eo-font-lock-event |
||||
(eval-when-compile |
||||
(append eo-font-lock-constants |
||||
(list |
||||
(list (concat |
||||
"^\\s-+\\([a-zA-Z][a-zA-Z0-9_,]*\\)\\(\\s-+@" |
||||
(regexp-opt |
||||
'( |
||||
"private" |
||||
"protected" |
||||
"beta" |
||||
"hot" |
||||
) t) "\\|\\)\\s-*\\(:\\|;\\)") |
||||
'(1 font-lock-variable-name-face) |
||||
'(2 font-lock-type-face) |
||||
)))) |
||||
"event") |
||||
|
||||
(defconst eo-font-lock-param |
||||
(eval-when-compile |
||||
(append eo-font-lock-event |
||||
(list |
||||
(list (concat |
||||
"^\\s-+\\(@" |
||||
(regexp-opt |
||||
'( |
||||
"in" |
||||
"out" |
||||
"inout" |
||||
) t) |
||||
"\\s-+\\|\\)\\([a-zA-Z][a-zA-Z0-9_]*\\)" |
||||
"\\s-*:[^@]+*\\(\\(\\s-+@" |
||||
(regexp-opt |
||||
'( |
||||
"nonull" |
||||
"nullable" |
||||
"optional" |
||||
) t) |
||||
"\\)+\\|\\)\\s-*;" |
||||
) |
||||
'(1 font-lock-type-face) |
||||
'(3 font-lock-variable-name-face) |
||||
'(4 font-lock-type-face) |
||||
)))) |
||||
"parameters") |
||||
|
||||
|
||||
(defconst eo-font-lock-return |
||||
(eval-when-compile |
||||
(append eo-font-lock-param |
||||
(list |
||||
(list (concat |
||||
"^\\s-+return\\s-*:[^@]+*\\(\\(\\s-+@" |
||||
(regexp-opt |
||||
'( |
||||
"warn_unused" |
||||
) t) |
||||
"\\)+\\|\\)\\s-*;" |
||||
) |
||||
'(1 font-lock-type-face) |
||||
)))) |
||||
"return") |
||||
|
||||
(defconst eo-font-lock-default-implementation |
||||
(eval-when-compile |
||||
(append eo-font-lock-return |
||||
(list |
||||
(list (concat |
||||
"^\\s-+" |
||||
(regexp-opt |
||||
'( |
||||
"class.constructor" |
||||
"class.destructor" |
||||
) t) |
||||
"\\s-*;" |
||||
) |
||||
'(1 font-lock-builtin-face) |
||||
)))) |
||||
"Default Implementation") |
||||
|
||||
(defconst eo-font-lock-implementation |
||||
(eval-when-compile |
||||
(append eo-font-lock-default-implementation |
||||
(list |
||||
(list (concat |
||||
"^\\s-+" |
||||
"\\(@\\(auto\\|empty\\)\\s-+\\|\\)" |
||||
"\\([a-zA-Z.][a-zA-Z0-9_.]*\\)" |
||||
"\\s-*;" |
||||
) |
||||
'(1 font-lock-type-face) |
||||
'(3 font-lock-variable-name-face) |
||||
)))) |
||||
"Implementation") |
||||
|
||||
(defconst eo-font-lock-property |
||||
(eval-when-compile |
||||
(append eo-font-lock-implementation |
||||
(list |
||||
(list (concat |
||||
"^\\s-+\\(@property\\)\\s-+" |
||||
"\\([a-zA-Z][a-zA-Z0-9_]*\\)\\(\\(\\s-+@" |
||||
(regexp-opt |
||||
'( |
||||
"protected" |
||||
"class" |
||||
"virtual_pure" |
||||
"part" |
||||
) t) |
||||
"\\)+\\|\\)\\s-*{" |
||||
) |
||||
'(1 font-lock-type-face) |
||||
'(2 font-lock-variable-name-face) |
||||
'(3 font-lock-type-face) |
||||
)))) |
||||
"Property method") |
||||
|
||||
(defconst eo-font-lock-method |
||||
(eval-when-compile |
||||
(append eo-font-lock-property |
||||
(list |
||||
(list (concat |
||||
"^\\s-+\\([a-zA-Z][a-zA-Z0-9_]*\\)\\(\\(\\s-+@" |
||||
(regexp-opt |
||||
'( |
||||
"protected" |
||||
"const" |
||||
"class" |
||||
"virtual_pure" |
||||
) t) |
||||
"\\)+\\|\\)\\s-*{" |
||||
) |
||||
'(1 font-lock-variable-name-face) |
||||
'(2 font-lock-type-face) |
||||
)))) |
||||
"Method") |
||||
|
||||
|
||||
(defconst eo-font-lock-fields |
||||
(eval-when-compile |
||||
(append eo-font-lock-method |
||||
(list |
||||
(list "^\\s-+\\<\\([a-zA-Z0-9][a-zA-Z0-9_,]*\\)\\>:" |
||||
'(1 font-lock-variable-name-face) |
||||
)))) |
||||
"Fields & Events without modifiers") |
||||
|
||||
(defconst eo-font-lock-complex-type |
||||
(eval-when-compile |
||||
(append eo-font-lock-fields |
||||
(list |
||||
(list (concat |
||||
"\\<" |
||||
(regexp-opt |
||||
'( |
||||
"accessor" |
||||
"array" |
||||
"iterator" |
||||
"hash" |
||||
"list" |
||||
) t) |
||||
"\\>\\s-*<" |
||||
) |
||||
'(1 font-lock-builtin-face) |
||||
)))) |
||||
"Complex types, C++ template style.") |
||||
|
||||
(defconst eo-font-lock-expression-functions |
||||
(eval-when-compile |
||||
(append eo-font-lock-complex-type |
||||
(list |
||||
(list (concat |
||||
"\\<" |
||||
(regexp-opt |
||||
'( |
||||
"own" |
||||
"const" |
||||
"free" |
||||
) t) |
||||
"\\>\\s-*(" |
||||
) |
||||
'(1 font-lock-builtin-face) |
||||
)))) |
||||
"Expression Functions") |
||||
|
||||
(defconst eo-font-lock-known-types |
||||
(eval-when-compile |
||||
(append eo-font-lock-expression-functions |
||||
(list |
||||
(list (concat |
||||
"\\<" |
||||
(regexp-opt |
||||
'( |
||||
"byte" |
||||
"ubyte" |
||||
"char" |
||||
"short" |
||||
"ushort" |
||||
"int" |
||||
"uint" |
||||
"long" |
||||
"ulong" |
||||
"llong" |
||||
"ullong" |
||||
"int8" |
||||
"uint8" |
||||
"int16" |
||||
"uint16" |
||||
"int32" |
||||
"uint32" |
||||
"int64" |
||||
"uint64" |
||||
"int128" |
||||
"uint128" |
||||
"size" |
||||
"ssize" |
||||
"intptr" |
||||
"uintptr" |
||||
"ptrdiff" |
||||
"time" |
||||
"float" |
||||
"double" |
||||
"bool" |
||||
"void" |
||||
"void_ptr" |
||||
) t) |
||||
"\\>" |
||||
) |
||||
'(1 font-lock-builtin-face) |
||||
)))) |
||||
"Expression Functions") |
||||
|
||||
(defgroup eo nil |
||||
"EFL's Eo formatting." |
||||
:prefix "eo-" |
||||
:group 'faces) |
||||
|
||||
(defface eo-docstring-face |
||||
'((t :inherit font-lock-string-face)) |
||||
"Face used to highlight documentation strings." |
||||
:group 'eo) |
||||
|
||||
(defconst eo-font-lock-docstring |
||||
(eval-when-compile |
||||
(append eo-font-lock-known-types |
||||
(list |
||||
(list "\\(\\[\\[.*\\]\\]\\)" |
||||
'(1 'eo-docstring-face t) ;; t = overrides comment existing formatting |
||||
)))) |
||||
"Documentation") |
||||
|
||||
(defvar eo-font-lock eo-font-lock-docstring) |
||||
|
||||
(defvar eo-mode-syntax-table |
||||
(let ((eo-mode-syntax-table (make-syntax-table))) |
||||
;; [ is open and matches ], but [[ is a docstring starter |
||||
(modify-syntax-entry ?[ "(]12c" eo-mode-syntax-table) |
||||
(modify-syntax-entry ?] ")[34c" eo-mode-syntax-table) |
||||
eo-mode-syntax-table) |
||||
"Syntax table for eo-mode") |
||||
|
||||
(c-add-style |
||||
"eo" |
||||
'("gnu" |
||||
(indent-tabs-mode . nil) |
||||
(tab-width . 8) |
||||
(c-basic-offset . 4) |
||||
(c-backslash-column . 72) |
||||
)) |
||||
|
||||
(define-derived-mode eo-mode c-mode "Eo" |
||||
"Major mode for editing Eo files" |
||||
(interactive) |
||||
(use-local-map eo-mode-map) |
||||
(set-syntax-table eo-mode-syntax-table) |
||||
(set (make-local-variable 'font-lock-defaults) '(eo-font-lock)) |
||||
(set (make-local-variable 'require-final-newline) t) |
||||
(c-set-style "eo") |
||||
(run-hooks 'eo-mode-hook) |
||||
) |
||||
|
||||
(provide 'eo-mode) |
Loading…
Reference in new issue