diff options
author | Gustavo Sverzut Barbieri <barbieri@gmail.com> | 2013-01-04 02:08:14 +0000 |
---|---|---|
committer | Gustavo Sverzut Barbieri <barbieri@gmail.com> | 2013-01-04 02:08:14 +0000 |
commit | 9ea2ce1041549c90f94062ce5ec145056e7fbdfa (patch) | |
tree | 3bcd3fb016bc498a72ff99c8d67c8b7ef2d91718 /data | |
parent | e2ce20e9a4dfd12bb383a1b60032f2ef7b507850 (diff) | |
download | efl-9ea2ce1041549c90f94062ce5ec145056e7fbdfa.tar.gz efl-9ea2ce1041549c90f94062ce5ec145056e7fbdfa.tar.xz efl-9ea2ce1041549c90f94062ce5ec145056e7fbdfa.zip |
efl: merge edje.
this is still in progress, mostly the multisense stuff is pending.
it seems that when we merge ecore_audio in edje the libremix and
similar are gone, at least from Edje, and will be in ecore_audio
itself (or pulseaudio).
Changes:
* __UNUSED__ to EINA_UNUSED
* binaries (epp, embryo_cc, edje_cc) now consider EFL_RUN_IN_TREE and
will assume the binaries are still not installed, running from
build tree location (needs more testing, maybe doesn't work with
srcdir != builddir, still doesn't solve cross compile builds)
SVN revision: 82139
Diffstat (limited to 'data')
-rw-r--r-- | data/Makefile.am | 18 | ||||
-rw-r--r-- | data/edje/edc.vim | 368 | ||||
-rw-r--r-- | data/edje/edje-mode.el | 512 | ||||
-rw-r--r-- | data/edje/edje.xml | 11 | ||||
-rw-r--r-- | data/edje/include/edje.inc | 272 | ||||
-rw-r--r-- | data/edje/vim/autoload/edccomplete.vim | 892 | ||||
-rw-r--r-- | data/edje/vim/ftdetect/edc.vim | 3 | ||||
-rw-r--r-- | data/edje/vim/ftplugin/edc.vim | 23 | ||||
-rw-r--r-- | data/edje/vim/indent/edc.vim | 83 | ||||
-rw-r--r-- | data/edje/vim/plugin-info.txt | 8 | ||||
-rw-r--r-- | data/edje/vim/snippets/edc.snippets | 99 | ||||
-rw-r--r-- | data/edje/vim/syntax/edc.vim | 235 | ||||
-rw-r--r-- | data/edje/vim/syntax/embryo.vim | 195 |
13 files changed, 2718 insertions, 1 deletions
diff --git a/data/Makefile.am b/data/Makefile.am index f2d475397..fc04b811c 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -1,12 +1,28 @@ MAINTAINERCLEANFILES = Makefile.in +EXTRA_DIST = + +######################################################################## +# Embryo embryofilesdir = $(datadir)/embryo/include embryofiles_DATA = embryo/default.inc +######################################################################## +# Evas evasfilesdir = $(datadir)/evas evasfiles_DATA = evas/checkme +######################################################################## +# Eo eofilesdir = $(datadir)/eo eofiles_DATA = eo/eo_step.py -EXTRA_DIST = embryo/default.inc evas/checkme eo/eo_step.py +######################################################################## +# Edje +edjefilesdir = $(datadir)/edje/include +edjefiles_DATA = edje/include/edje.inc + +mimedir = $(datadir)/mime/packages +mime_DATA = edje/edje.xml + +EXTRA_DIST += edje/edc.vim edje/edje-mode.el diff --git a/data/edje/edc.vim b/data/edje/edc.vim new file mode 100644 index 000000000..6041dcf1f --- /dev/null +++ b/data/edje/edc.vim @@ -0,0 +1,368 @@ +" Vim syntax file +" Language: EDC +" Maintainer: billiob <billiob@gmail.com> +" Last Change: 05/08/2011 + +" For version 5.x: Clear all syntax items +" For version 6.x: Quit when a syntax file was already loaded +" +" Usage: +" 1) Copy this file to $HOME/.vim/syntax/ +" 2) Paste the following line to your $HOME/.vimrc file to load the syntax +" automatically: +" +" au BufNewFile,BufRead *.edc set syntax=edc +" +if version < 600 + syntax clear +elseif exists("b:current_syntax") + finish +endif + +" A bunch of useful C keywords +syn keyword cStructure images data fonts collections group externals +syn keyword cStructure part parts dragable description rel1 rel2 +syn keyword cStatement text image font fill origin size tag +syn keyword cStructure programs program script script_only lua_script lua_script_only styles style base +syn keyword cStructure spectra spectrum box +syn keyword cStructure physics movement_freedom faces face world +syn match cType "+ + +;" contained + +syn keyword cLabel item name min max type effect +syn keyword cLabel mouse_events repeat_events clip_to +syn keyword cLabel color_class text_class x y confine +syn keyword cLabel state visible align step aspect aspect_preference fixed +syn keyword cLabel relative offset to to_x to_y normal tween +syn keyword cLabel border color color2 color3 font size fit align +syn keyword cLabel signal source action transition in target after +syn keyword cLabel text smooth inherit scale middle ignore_flags +syn keyword cLabel alias events entry_mode select_mode multiline +syn keyword cLabel source1 source2 source3 source4 source5 source6 +syn keyword cLabel text_source transitions layout padding +syn keyword cLabel size_w size_h size_max_w size_max_h size_min_w size_min_w +syn keyword cLabel spread scale_hint elipsis ellipsis pointer_mode prefer +syn keyword cLabel precise_is_inside use_alternate_font_metrics options +syn keyword cLabel aspect_mode position span angle repch api +syn keyword cLabel external params size_range border_scale minmul + +syn keyword cLabel mass density material restitution friction +syn keyword cLabel ignore_part_pos light_on damping sleep +syn keyword cLabel physics_body hardness linear angular +syn keyword cLabel backface_cull gravity rate z depth + +syn keyword cConditional if else switch +syn keyword cRepeat while for do +syn keyword cConstant COMP RAW LOSSY USER +syn keyword cConstant RECT TEXT IMAGE SWALLOW TEXTBLOCK GRADIENT SPACER +syn keyword cConstant GROUP BOX TABLE EXTERNAL ITEM +syn keyword cConstant SOLID AUTOGRAB NOGRAB +syn keyword cConstant NONE PLAIN OUTLINE SOFT_OUTLINE SHADOW +syn keyword cConstant SOFT_SHADOW OUTLINE_SHADOW OUTLINE_SOFT_SHADOW +syn keyword cConstant FAR_SOFT_SHADOW FAR_SHADOW GLOW +syn keyword cConstant STATE_SET ACTION_STOP SIGNAL_EMIT +syn keyword cConstant SCRIPT LUA_SCRIPT +syn keyword cConstant DRAG_VAL_SET DRAG_VAL_STEP DRAG_VAL_PAGE +syn keyword cConstant LINEAR SINUSOIDAL ACCELERATE DECELERATE +syn keyword cConstant VERTICAL HORIZONTAL ON_HOLD BOTH EDITABLE EXPLICIT +syn keyword cConstant FOCUS_SET "default" NEITHER +syn keyword cConstant DYNAMIC STATIC PASSWORD + +syn keyword cConstant RIGID_BOX RIGID_SPHERE SOFT_BOX SOFT_SPHERE +syn keyword cConstant RIGID_CYLINDER SOFT_CYLINDER +syn keyword cConstant CLOTH BOUNDARY_TOP BOUNDARY_BOTTOM BOUNDARY_LEFT +syn keyword cConstant BOUNDARY_RIGHT BOUNDARY_FRONT BOUNDARY_BACK +syn keyword cConstant PHYSICS_IMPULSE PHYSICS_TORQUE_IMPULSE +syn keyword cConstant PHYSICS_FORCE PHYSICS_TORQUE PHYSICS_STOP +syn keyword cConstant PHYSICS_FORCES_CLEAR PHYSICS_VEL_SET +syn keyword cConstant PHYSICS_ANG_VEL_SET BOX_MIDDLE_FRONT +syn keyword cConstant BOX_MIDDLE_BACK BOX_FRONT BOX_BACK BOX_LEFT +syn keyword cConstant BOX_RIGHT BOX_TOP BOX_BOTTOM +syn keyword cConstant CYLINDER_MIDDLE_FRONT CYLINDER_MIDDLE_BACK +syn keyword cConstant CYLINDER_FRONT CYLINDER_BACK CYLINDER_CURVED +syn keyword cConstant CLOTH_FRONT CLOTH_BACK SPHERE_FRONT SPHERE_BACK + +syn keyword cTodo contained TODO FIXME XXX + +" cCommentGroup allows adding matches for special things in comments +syn cluster cCommentGroup contains=cTodo + +" String and Character constants +" Highlight special characters (those which have a backslash) differently +syn match cSpecial display contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)" +if !exists("c_no_utf") + syn match cSpecial display contained "\\\(u\x\{4}\|U\x\{8}\)" +endif +if exists("c_no_cformat") + syn region cString start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial + " cCppString: same as cString, but ends at end of line + syn region cCppString start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial +else + syn match cFormat display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([diuoxXfeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained + syn match cFormat display "%%" contained + syn region cString start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat + " cCppString: same as cString, but ends at end of line + syn region cCppString start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial,cFormat +endif + +syn match cCharacter "L\='[^\\]'" +syn match cCharacter "L'[^']*'" contains=cSpecial +if exists("c_gnu") + syn match cSpecialError "L\='\\[^'\"?\\abefnrtv]'" + syn match cSpecialCharacter "L\='\\['\"?\\abefnrtv]'" +else + syn match cSpecialError "L\='\\[^'\"?\\abfnrtv]'" + syn match cSpecialCharacter "L\='\\['\"?\\abfnrtv]'" +endif +syn match cSpecialCharacter display "L\='\\\o\{1,3}'" +syn match cSpecialCharacter display "'\\x\x\{1,2}'" +syn match cSpecialCharacter display "L'\\x\x\+'" + +"when wanted, highlight trailing white space +if exists("c_space_errors") + if !exists("c_no_trail_space_error") + syn match cSpaceError display excludenl "\s\+$" + endif + if !exists("c_no_tab_space_error") + syn match cSpaceError display " \+\t"me=e-1 + endif +endif + +"catch errors caused by wrong parenthesis and brackets +syn cluster cParenGroup contains=cParenError,cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserCont,cUserLabel,cBitField,cCommentSkip,cOctalZero,cCppOut,cCppOut2,cCppSkip,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom +if exists("c_no_bracket_error") + syn region cParen transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cCppString + " cCppParen: same as cParen but ends at end-of-line; used in cDefine + syn region cCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString + syn match cParenError display ")" + syn match cErrInParen display contained "[{}]" +else + syn region cParen transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cErrInBracket,cCppBracket,cCppString + " cCppParen: same as cParen but ends at end-of-line; used in cDefine + syn region cCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cErrInBracket,cParen,cBracket,cString + syn match cParenError display "[\])]" + syn match cErrInParen display contained "[\]{}]" + syn region cBracket transparent start='\[' end=']' contains=ALLBUT,@cParenGroup,cErrInParen,cCppParen,cCppBracket,cCppString + " cCppBracket: same as cParen but ends at end-of-line; used in cDefine + syn region cCppBracket transparent start='\[' skip='\\$' excludenl end=']' end='$' contained contains=ALLBUT,@cParenGroup,cErrInParen,cParen,cBracket,cString + syn match cErrInBracket display contained "[);{}]" +endif + +"integer number, or floating point number without a dot and with "f". +syn case ignore +syn match cNumbers display transparent "\<\d\|\.\d" contains=cNumber,cFloat,cOctalError,cOctal +" Same, but without octal error (for comments) +syn match cNumbersCom display contained transparent "\<\d\|\.\d" contains=cNumber,cFloat,cOctal +syn match cNumber display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>" +"hex number +syn match cNumber display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>" +" Flag the first zero of an octal number as something special +syn match cOctal display contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=cOctalZero +syn match cOctalZero display contained "\<0" +syn match cFloat display contained "\d\+f" +"floating point number, with dot, optional exponent +syn match cFloat display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=" +"floating point number, starting with a dot, optional exponent +syn match cFloat display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>" +"floating point number, without dot, with exponent +syn match cFloat display contained "\d\+e[-+]\=\d\+[fl]\=\>" +" flag an octal number with wrong digits +syn match cOctalError display contained "0\o*[89]\d*" +syn case match + +if exists("c_comment_strings") + " A comment can contain cString, cCharacter and cNumber. + " But a "*/" inside a cString in a cComment DOES end the comment! So we + " need to use a special type of cString: cCommentString, which also ends on + " "*/", and sees a "*" at the start of the line as comment again. + " Unfortunately this doesn't very well work for // type of comments :-( + syntax match cCommentSkip contained "^\s*\*\($\|\s\+\)" + syntax region cCommentString contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=cSpecial,cCommentSkip + syntax region cComment2String contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=cSpecial + syntax region cCommentL start="//" skip="\\$" end="$" keepend contains=@cCommentGroup,cComment2String,cCharacter,cNumbersCom,cSpaceError + syntax region cComment matchgroup=cCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@cCommentGroup,cCommentStartError,cCommentString,cCharacter,cNumbersCom,cSpaceError +else + syn region cCommentL start="//" skip="\\$" end="$" keepend contains=@cCommentGroup,cSpaceError + syn region cComment matchgroup=cCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@cCommentGroup,cCommentStartError,cSpaceError +endif +" keep a // comment separately, it terminates a preproc. conditional +syntax match cCommentError display "\*/" +syntax match cCommentStartError display "/\*"me=e-1 contained + +syn keyword cOperator sizeof +if exists("c_gnu") + syn keyword cStatement __asm__ + syn keyword cOperator typeof __real__ __imag__ +endif +syn keyword cType int long short char void +syn keyword cType signed unsigned float double +if !exists("c_no_ansi") || exists("c_ansi_typedefs") + syn keyword cType size_t wchar_t ptrdiff_t sig_atomic_t fpos_t + syn keyword cType clock_t time_t va_list jmp_buf FILE DIR div_t ldiv_t + syn keyword cType mbstate_t wctrans_t wint_t wctype_t +endif +if !exists("c_no_c99") " ISO C99 + syn keyword cType bool complex + syn keyword cType int8_t int16_t int32_t int64_t + syn keyword cType uint8_t uint16_t uint32_t uint64_t + syn keyword cType int_least8_t int_least16_t int_least32_t int_least64_t + syn keyword cType uint_least8_t uint_least16_t uint_least32_t uint_least64_t + syn keyword cType int_fast8_t int_fast16_t int_fast32_t int_fast64_t + syn keyword cType uint_fast8_t uint_fast16_t uint_fast32_t uint_fast64_t + syn keyword cType intptr_t uintptr_t + syn keyword cType intmax_t uintmax_t +endif +if exists("c_gnu") + syn keyword cType __label__ __complex__ __volatile__ +endif + +syn keyword cStructure struct union enum typedef +syn keyword cStorageClass static register auto volatile extern const +if exists("c_gnu") + syn keyword cStorageClass inline __attribute__ +endif + +if !exists("c_no_ansi") || exists("c_ansi_constants") || exists("c_gnu") + if exists("c_gnu") + syn keyword cConstant __GNUC__ __FUNCTION__ __PRETTY_FUNCTION__ + endif + syn keyword cConstant __LINE__ __FILE__ __DATE__ __TIME__ __STDC__ + syn keyword cConstant __STDC_VERSION__ + syn keyword cConstant CHAR_BIT MB_LEN_MAX MB_CUR_MAX + syn keyword cConstant UCHAR_MAX UINT_MAX ULONG_MAX USHRT_MAX + syn keyword cConstant CHAR_MIN INT_MIN LONG_MIN SHRT_MIN + syn keyword cConstant CHAR_MAX INT_MAX LONG_MAX SHRT_MAX + syn keyword cConstant SCHAR_MIN SINT_MIN SLONG_MIN SSHRT_MIN + syn keyword cConstant SCHAR_MAX SINT_MAX SLONG_MAX SSHRT_MAX + syn keyword cConstant FLT_RADIX FLT_ROUNDS + syn keyword cConstant FLT_DIG FLT_MANT_DIG FLT_EPSILON + syn keyword cConstant DBL_DIG DBL_MANT_DIG DBL_EPSILON + syn keyword cConstant LDBL_DIG LDBL_MANT_DIG LDBL_EPSILON + syn keyword cConstant FLT_MIN FLT_MAX FLT_MIN_EXP FLT_MAX_EXP + syn keyword cConstant FLT_MIN_10_EXP FLT_MAX_10_EXP + syn keyword cConstant DBL_MIN DBL_MAX DBL_MIN_EXP DBL_MAX_EXP + syn keyword cConstant DBL_MIN_10_EXP DBL_MAX_10_EXP + syn keyword cConstant LDBL_MIN LDBL_MAX LDBL_MIN_EXP LDBL_MAX_EXP + syn keyword cConstant LDBL_MIN_10_EXP LDBL_MAX_10_EXP + syn keyword cConstant HUGE_VAL CLOCKS_PER_SEC NULL + syn keyword cConstant LC_ALL LC_COLLATE LC_CTYPE LC_MONETARY + syn keyword cConstant LC_NUMERIC LC_TIME + syn keyword cConstant SIG_DFL SIG_ERR SIG_IGN + syn keyword cConstant SIGABRT SIGFPE SIGILL SIGHUP SIGINT SIGSEGV SIGTERM + " Add POSIX signals as well... + syn keyword cConstant SIGABRT SIGALRM SIGCHLD SIGCONT SIGFPE SIGHUP + syn keyword cConstant SIGILL SIGINT SIGKILL SIGPIPE SIGQUIT SIGSEGV + syn keyword cConstant SIGSTOP SIGTERM SIGTRAP SIGTSTP SIGTTIN SIGTTOU + syn keyword cConstant SIGUSR1 SIGUSR2 + syn keyword cConstant _IOFBF _IOLBF _IONBF BUFSIZ EOF + syn keyword cConstant FOPEN_MAX FILENAME_MAX L_tmpnam + syn keyword cConstant SEEK_CUR SEEK_END SEEK_SET + syn keyword cConstant TMP_MAX stderr stdin stdout + syn keyword cConstant EXIT_FAILURE EXIT_SUCCESS RAND_MAX + " Add POSIX errors as well + syn keyword cConstant E2BIG EACCES EAGAIN EBADF EBADMSG EBUSY + syn keyword cConstant ECANCELED ECHILD EDEADLK EDOM EEXIST EFAULT + syn keyword cConstant EFBIG EILSEQ EINPROGRESS EINTR EINVAL EIO EISDIR + syn keyword cConstant EMFILE EMLINK EMSGSIZE ENAMETOOLONG ENFILE ENODEV + syn keyword cConstant ENOENT ENOEXEC ENOLCK ENOMEM ENOSPC ENOSYS + syn keyword cConstant ENOTDIR ENOTEMPTY ENOTSUP ENOTTY ENXIO EPERM + syn keyword cConstant EPIPE ERANGE EROFS ESPIPE ESRCH ETIMEDOUT EXDEV + " math.h + syn keyword cConstant M_E M_LOG2E M_LOG10E M_LN2 M_LN10 M_PI M_PI_2 M_PI_4 + syn keyword cConstant M_1_PI M_2_PI M_2_SQRTPI M_SQRT2 M_SQRT1_2 +endif +if !exists("c_no_c99") " ISO C99 + syn keyword cConstant true false +endif + +syn region cPreCondit start="^\s*#\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" end="//"me=s-1 contains=cComment,cCppString,cCharacter,cCppParen,cParenError,cNumbers,cCommentError,cSpaceError +syn match cPreCondit display "^\s*#\s*\(else\|endif\)\>" +if !exists("c_no_if0") + syn region cCppOut start="^\s*#\s*if\s\+0\+\>" end=".\|$" contains=cCppOut2 + syn region cCppOut2 contained start="0" end="^\s*#\s*\(endif\>\|else\>\|elif\>\)" contains=cSpaceError,cCppSkip + syn region cCppSkip contained start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*#\s*endif\>" contains=cSpaceError,cCppSkip +endif +syn region cIncluded display contained start=+"+ skip=+\\\\\|\\"+ end=+"+ +syn match cIncluded display contained "<[^>]*>" +syn match cInclude display "^\s*#\s*include\>\s*["<]" contains=cIncluded +"syn match cLineSkip "\\$" +syn cluster cPreProcGroup contains=cPreCondit,cIncluded,cInclude,cDefine,cErrInParen,cErrInBracket,cUserLabel,cSpecial,cOctalZero,cCppOut,cCppOut2,cCppSkip,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cString,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cParen,cBracket,cMulti +syn region cDefine start="^\s*#\s*\(define\|undef\)\>" skip="\\$" end="$" end="//"me=s-1 contains=ALLBUT,@cPreProcGroup +syn region cPreProc start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@cPreProcGroup + +syn match cUserLabel display "\I\i*" contained + + + +if exists("c_minlines") + let b:c_minlines = c_minlines +else + if !exists("c_no_if0") + let b:c_minlines = 50 " #if 0 constructs can be long + else + let b:c_minlines = 15 " mostly for () constructs + endif +endif +exec "syn sync ccomment cComment minlines=" . b:c_minlines + +" Define the default highlighting. +" For version 5.7 and earlier: only when not done already +" For version 5.8 and later: only when an item doesn't have highlighting yet +if version >= 508 || !exists("did_c_syn_inits") + if version < 508 + let did_c_syn_inits = 1 + command -nargs=+ HiLink hi link <args> + else + command -nargs=+ HiLink hi def link <args> + endif + + HiLink cFormat cSpecial + HiLink cCppString cString + HiLink cCommentL cComment + HiLink cCommentStart cComment + HiLink cLabel Label + HiLink cUserLabel Label + HiLink cConditional Conditional + HiLink cRepeat Repeat + HiLink cCharacter Character + HiLink cSpecialCharacter cSpecial + HiLink cNumber Number + HiLink cOctal Number + HiLink cOctalZero PreProc " link this to Error if you want + HiLink cFloat Float + HiLink cOctalError cError + HiLink cParenError cError + HiLink cErrInParen cError + HiLink cErrInBracket cError + HiLink cCommentError cError + HiLink cCommentStartError cError + HiLink cSpaceError cError + HiLink cSpecialError cError + HiLink cOperator Operator + HiLink cStructure Structure + HiLink cStorageClass StorageClass + HiLink cInclude Include + HiLink cPreProc PreProc + HiLink cDefine Macro + HiLink cIncluded cString + HiLink cError Error + HiLink cStatement Statement + HiLink cPreCondit PreCondit + HiLink cType Type + HiLink cConstant Constant + HiLink cCommentString cString + HiLink cComment2String cString + HiLink cCommentSkip cComment + HiLink cString String + HiLink cComment Comment + HiLink cSpecial SpecialChar + HiLink cTodo Todo + HiLink cCppSkip cCppOut + HiLink cCppOut2 cCppOut + HiLink cCppOut Comment + + delcommand HiLink +endif + +let b:current_syntax = "edc" + +" vim: ts=8 diff --git a/data/edje/edje-mode.el b/data/edje/edje-mode.el new file mode 100644 index 000000000..33c6fe613 --- /dev/null +++ b/data/edje/edje-mode.el @@ -0,0 +1,512 @@ +;;; 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" + "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 diff --git a/data/edje/edje.xml b/data/edje/edje.xml new file mode 100644 index 000000000..eb299e702 --- /dev/null +++ b/data/edje/edje.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info"> + <mime-type type="text/edje"> + <comment>Edje source file</comment> + <glob pattern="*.edc"/> + </mime-type> + <mime-type type="application/edje"> + <comment>Edje file</comment> + <glob pattern="*.edj"/> + </mime-type> +</mime-info> diff --git a/data/edje/include/edje.inc b/data/edje/include/edje.inc new file mode 100644 index 000000000..5fc9ec2b3 --- /dev/null +++ b/data/edje/include/edje.inc @@ -0,0 +1,272 @@ +/* Edje exported calls */ + +/************************************************/ +/* Basic data storage/retrieval (it's explicit) */ +/************************************************/ +/* Example: + * + * In the "global" script section of a group: + * + * script { + * public global_value1; + * public global_value2; + * public global_value3; + * } + * + * In the program script sections, OR in any global functions/routines: + * ( several examples of setting/getting values) + * + * set_int(global_value1, 7); + * set_float(global_value2, 42.0); + * set_str(global_value3, "I am a smelly fish!"); + * new value1 = get_int(global_value1); + * new Float:value2 = get_float(global_value2); + * new value3[100]; get_str(global_value3, value3, 100); + * set_int(global_value1, value1); + * set_float(global_value2, value2); + * set_str(global_value3, value3); + */ +native get_int (id); +native set_int (id, val); +native Float:get_float (id); +native set_float (id, Float:val); +native get_strlen(id); +native get_str (id, dst[], maxlen); +native set_str (id, str[]); + +/********************/ +/* Edje list calls */ +/********************/ +native count (id); +native remove (id, n); +native append_int (id, v); +native prepend_int(id, v); +native insert_int (id, pos, v); +native replace_int (id, pos, v); +native fetch_int (id, pos); +native append_str (id, str[]); +native prepend_str(id, str[]); +native insert_str (id, pos, str[]); +native replace_str(id, pos, str[]); +native fetch_str (id, pos, dst[], maxlen); +native append_float (id, Float:v); +native prepend_float(id, Float:v); +native insert_float (id, pos, Float:v); +native replace_float(id, pos, Float:v); +native Float:fetch_float (id, pos); + +/********************/ +/* Edje timer calls */ +/********************/ +native timer (Float:in, fname[], val); +native cancel_timer(id); + +/*******************/ +/* Edje anim calls */ +/*******************/ +native anim (Float:len, fname[], val); +native cancel_anim(id); + +/***********************************************************/ +/* Edje utility calls for dealing with edjes/programs etc. */ +/***********************************************************/ +/* Example: + * + * emit("this_thing", "clicked"); + * emit("state", "playing"); + * + * set_state(PART:"logo", "glowing", 0.0); + * set_state(PART:"button", "default", 0.0); + * + * set_tween_state(PART:"button", 0.5, "default", 0.0, "clicked", 0.0); + * + * run_program(PROGRAM:"program_name"); + */ +native emit (sig[], src[]); +native get_part_id (part[]); +native get_image_id (image[]); +native get_program_id (program[]); +native set_state (part_id, state[], Float:state_val); +native get_state (part_id, dst[], maxlen, &Float:val); +native set_tween_state (part_id, Float:tween, state1[], Float:state1_val, state2[], Float:state2_val); +native run_program (program_id); +native get_drag_dir (part_id); +native get_drag (part_id, &Float:dx, &Float:dy); +native set_drag (part_id, Float:dx, Float:dy); +native get_drag_size (part_id, &Float:dx, &Float:dy); +native set_drag_size (part_id, Float:dx, Float:dy); +native get_drag_step (part_id, &Float:dx, &Float:dy); +native set_drag_step (part_id, Float:dx, Float:dy); +native get_drag_page (part_id, &Float:dx, &Float:dy); +native set_drag_page (part_id, Float:dx, Float:dy); +native set_text (part_id, str[]); +native get_text (part_id, dst[], maxlen); +native get_min_size (&w, &h); +native get_max_size (&w, &h); +native get_color_class (class[], &r, &g, &b, &a); +native set_color_class (class[], r, g, b, a); +native set_text_class (class[], font[], Float:size); +native get_text_class (class[], font[], &Float:size); +native get_geometry (part_id, &x, &y, &w, &h); +native get_mouse (&x, &y); +native get_mouse_buttons(); +native stop_program (program_id); +native stop_programs_on (part_id); +native set_min_size (Float:w, Float:h); +native set_max_size (Float:w, Float:h); +native part_swallow (part_id, GROUP:str[]); + +native external_param_get_int(id, param_name[]); +native external_param_set_int(id, param_name[], value); +native Float:external_param_get_float(id, param_name[]); +native external_param_set_float(id, param_name[], Float:value); +native external_param_get_strlen(id, param_name[]); +native external_param_get_str(id, param_name[], value[], value_maxlen); +native external_param_set_str(id, param_name[], value[]); +native external_param_get_choice_len(id, param_name[]); +native external_param_get_choice(id, param_name[], value[], value_maxlen); +native external_param_set_choice(id, param_name[], value[]); +native external_param_get_bool(id, param_name[]); +native external_param_set_bool(id, param_name[], value); + +enum Msg_Type +{ + MSG_NONE = 0, + MSG_STRING = 2, + MSG_INT = 3, + MSG_FLOAT = 4, + MSG_STRING_SET = 5, + MSG_INT_SET = 6, + MSG_FLOAT_SET = 7, + MSG_STRING_INT = 8, + MSG_STRING_FLOAT = 9, + MSG_STRING_INT_SET = 10, + MSG_STRING_FLOAT_SET = 11 +}; + +native send_message(Msg_Type:type, id, ...); + +/**********************/ +/* Custom state calls */ +/**********************/ + +/* Example: + * + * Create the custom state for "my_part", based on the + * default description of the same part: + * + * custom_state(PART:"my_part", "default", 0.0); + * + * Later, use set_state_val() to change the properties of the custom + * state: + * + * set_state_val(PART:"my_part", STATE_ALIGNMENT, 0.5, 0.5); + * + * get_state_val() works the same way. + */ + +native custom_state(part_id, state[], Float:state_val = 0.0); + +enum State_Param +{ + STATE_ALIGNMENT = 1, + STATE_MIN = 2, + STATE_MAX = 3, + STATE_STEP = 4, + STATE_ASPECT = 5, + STATE_ASPECT_PREF = 6, + STATE_COLOR = 7, + STATE_COLOR2 = 8, + STATE_COLOR3 = 9, + STATE_COLOR_CLASS = 10, + STATE_REL1 = 11, + STATE_REL1_TO = 12, + STATE_REL1_OFFSET = 13, + STATE_REL2 = 14, + STATE_REL2_TO = 15, + STATE_REL2_OFFSET = 16, + STATE_IMAGE = 17, + STATE_BORDER = 18, + STATE_FILL_SMOOTH = 19, + STATE_FILL_POS = 20, + STATE_FILL_SIZE = 21, + STATE_TEXT = 22, + STATE_TEXT_CLASS = 23, + STATE_TEXT_FONT = 24, + STATE_TEXT_STYLE = 25, + STATE_TEXT_SIZE = 26, + STATE_TEXT_FIT = 27, + STATE_TEXT_MIN = 28, + STATE_TEXT_MAX = 29, + STATE_TEXT_ALIGN = 30, + STATE_VISIBLE = 31, + STATE_MAP_ON = 32, + STATE_MAP_PERSP = 33, + STATE_MAP_LIGHT = 34, + STATE_MAP_ROT_CENTER = 35, + STATE_MAP_ROT_X = 36, + STATE_MAP_ROT_Y = 37, + STATE_MAP_ROT_Z = 38, + STATE_MAP_BACK_CULL = 39, + STATE_MAP_PERSP_ON = 40, + STATE_PERSP_ZPLANE = 41, + STATE_PERSP_FOCAL = 42, + STATE_PHYSICS_MASS = 43, + STATE_PHYSICS_FRICTION = 44, + STATE_PHYSICS_RESTITUTION = 45, + STATE_PHYSICS_DAMPING = 46, + STATE_PHYSICS_SLEEP = 47, + STATE_PHYSICS_MATERIAL = 48, + STATE_PHYSICS_DENSITY = 49, + STATE_PHYSICS_IGNORE_PART_POS = 50, + STATE_PHYSICS_LIGHT_ON = 51, + STATE_PHYSICS_HARDNESS = 52, + STATE_PHYSICS_MOV_FREEDOM_LIN = 53, + STATE_PHYSICS_MOV_FREEDOM_ANG = 54, + STATE_PHYSICS_BACK_CULL = 55, + STATE_PHYSICS_Z = 56, + STATE_PHYSICS_DEPTH = 57 +}; + +native set_state_val(part_id, State_Param:p, ...); +native get_state_val(part_id, State_Param:p, ...); + +/* Multisense */ +native play_sample (sample_name[], Float:speed); +native play_tone (tone_name[], Float:duration); + +/***********************************************************/ +/* Edje physics calls. */ +/***********************************************************/ +/* Example: + * + * physics_impulse(PART:"logo", 0, 50.8, 0); + * physics_torque_impulse(PART:"logo", 0, 0, 3.4); + * + * physics_force(PART:"logo", 0, 240, 0); + * physics_torque(PART:"logo", 0, 0, 2.2); + * physics_clear_forces(PART:"logo"); + * + * physics_set_velocity(PART:"logo", 40.5, 0, 0); + * physics_set_ang_velocity(PART:"logo", 0, 0, -3); + * physics_stop(PART:"logo"); + * + * physics_set_rotation(PART:"logo", 0.707, 0, 0, 0.707); + */ +native physics_impulse (part_id, Float:x, Float:y, Float:z); +native physics_torque_impulse (part_id, Float:x, Float:y, Float:z); + +native physics_torque (part_id, Float:x, Float:y, Float:z); +native physics_get_torques (part_id, &Float:x, &Float:y, &Float:z); +native physics_force (part_id, Float:x, Float:y, Float:z); +native physics_get_forces (part_id, &Float:x, &Float:y, &Float:z); +native physics_clear_forces (part_id); + +native physics_set_velocity (part_id, Float:x, Float:y, Float:z); +native physics_get_velocity (part_id, &Float:x, &Float:y, &Float:z); +native physics_set_ang_velocity (part_id, Float:x, Float:y, Float:z); +native physics_get_ang_velocity (part_id, &Float:x, &Float:y, &Float:z); +native physics_stop (part_id); + +native physics_set_rotation (part_id, Float:w, Float:x, Float:y, Float:z); +native physics_get_rotation (part_id, &Float:w, &Float:x, &Float:y, &Float:z); diff --git a/data/edje/vim/autoload/edccomplete.vim b/data/edje/vim/autoload/edccomplete.vim new file mode 100644 index 000000000..e2521e9c4 --- /dev/null +++ b/data/edje/vim/autoload/edccomplete.vim @@ -0,0 +1,892 @@ +" Vim completion script +" Language: EDC +" Maintainer: Viktor Kojouharov +" Last Change: 2007 02 24 + +function! edccomplete#Complete(findstart, base) + if a:findstart + " locate the start of the word + let line = getline('.') + let start = col('.') - 1 + let compl_begin = col('.') - 2 + let lastword = -1 + if line =~ ':' && line !~ '\.' + while start > 0 && (line[start - 1] =~ '\k' || line[start - 1] =~ '"') + let start -= 1 + endwhile + else + while start > 0 + if line[start - 1] =~ '\k' + let start -= 1 + elseif line[start - 1] =~ '\.' + if lastword == -1 + let lastword = start - 2 + endif + let start -= 1 + else + break + endif + endwhile + endif + let b:compl_context = getline('.')[0:compl_begin] + + if lastword == -1 + let ppe = searchpos('\.', 'bcn') + let pps = searchpos('\w\+\.', 'bcn') + let b:sparent = '' + if ppe != [0, 0] && pps[0] == ppe[0] && pps[1] <= ppe[1] && pps[0] == line('.') + let b:scontext = line[pps[1] -1 : ppe[1] - 2] + call edccomplete#FindParent(pps[0], pps[1]) + return start + endif + + let startpos = searchpair('{', '', '}', 'bnW') + let lnum = startpos + let line = getline(lnum) + + if line !~ '\a\+' + let lnum = prevnonblank(lnum - 1) + let line = getline(lnum) + endif + + call edccomplete#FindParent(lnum, 1) + let b:scontext = matchstr(line, '\w\+') + + return start + else + let b:scontext = line[start : lastword] + + return lastword + 2 + endif + else + " find months matching with "a:base" + let res = [] + if exists("b:compl_context") + let line = b:compl_context + unlet! b:compl_context + else + let line = a:base + endif + + if b:scontext == 'part' + call edccomplete#AddLabel(res, line, a:base, s:partLabel) + call edccomplete#AddStatement(res, line, a:base, s:partStatement) + if line =~ 'type:\s*' + call edccomplete#AddKeyword(res, a:base, s:partTypes) + elseif line =~ 'effect:\s*' + call edccomplete#AddKeyword(res, a:base, s:partEffects) + elseif line =~ 'select_mode:\s*' + call edccomplete#AddKeyword(res, a:base, s:partSelectMode) + elseif line =~ 'ignore_flags:\s*' + call edccomplete#AddKeyword(res, a:base, s:partIgnoreFlags) + elseif line =~ 'pointer_mode:\s*' + call edccomplete#AddKeyword(res, a:base, s:partPointerMode) + elseif line =~ 'editable_mode:\s*' + call edccomplete#AddKeyword(res, a:base, s:partEditableMode) + endif + if line =~ 'image:\s*".\{-}"' + call edccomplete#AddKeyword(res, a:base, s:imageStorageMethod) + endif + + elseif b:scontext == 'dragable' + call edccomplete#AddLabel(res, line, a:base, s:dragableLabel) + + elseif b:scontext == 'description' + call edccomplete#AddLabel(res, line, a:base, s:descriptionLabel) + call edccomplete#AddStatement(res, line, a:base, s:descriptionStatement) + if line =~ 'aspect_preference:\s*' + call edccomplete#AddKeyword(res, a:base, s:aspectPrefTypes) + elseif line =~ 'inherit:\s*"\?' + call edccomplete#FindStates(res, a:base, 1) + endif + + elseif b:scontext == 'rel1' || b:scontext == 'rel2' + call edccomplete#AddLabel(res, line, a:base, s:relLabel) + if line =~ 'to\%(_[xy]\)\?:\s*"\?' + call edccomplete#FindNamesIn(res, a:base, 'parts') + endif + + elseif b:scontext == 'map' + call edccomplete#AddLabel(res, line, a:base, s:mapLabel) + call edccomplete#AddStatement(res, line, a:base, s:mapStatement) + + elseif b:scontext == 'rotation' + call edccomplete#AddLabel(res, line, a:base, s:rotationLabel) + + elseif b:scontext == 'perspective' + call edccomplete#AddLabel(res, line, a:base, s:perspectiveLabel) + + elseif b:scontext == 'params' + call edccomplete#AddLabel(res, line, a:base, s:paramsLabel) + + elseif b:scontext == 'image' + call edccomplete#AddLabel(res, line, a:base, s:imageLabel) + if line =~ 'image:\s*".\{-}"' + call edccomplete#AddKeyword(res, a:base, s:imageStorageMethod) + elseif line =~ 'middle:\s*' + call edccomplete#AddKeyword(res, a:base, s:imageMiddleTypes) + elseif line =~ 'scale_hint:\s*' + call edccomplete#AddKeyword(res, a:base, s:imageScaleHint) + endif + + elseif b:scontext == 'fill' + call edccomplete#AddLabel(res, line, a:base, s:fillLabel) + call edccomplete#AddStatement(res, line, a:base, s:fillStatement) + if line =~ 'type:\s*' + call edccomplete#AddKeyword(res, a:base, s:fillTypes) + endif + + elseif b:scontext == 'origin' || b:scontext == 'size' + call edccomplete#AddLabel(res, line, a:base, s:fillInnerStatement) + + elseif b:scontext == 'text' + call edccomplete#AddLabel(res, line, a:base, s:textLabel) + call edccomplete#AddStatement(res, line, a:base, s:textStatement) + + elseif b:scontext == 'program' + call edccomplete#AddLabel(res, line, a:base, s:programLabel) + call edccomplete#AddStatement(res, line, a:base, s:programStatement) + if line =~ 'transition:\s*' + call edccomplete#AddKeyword(res, a:base, s:transitionTypes) + elseif line =~ 'STATE_SET\s*"\?' + call edccomplete#FindStates(res, a:base, 0) + elseif line =~ 'action:\s*' + call edccomplete#AddKeyword(res, a:base, s:actionTypes) + elseif line =~ 'target:\s*"\?' + call edccomplete#FindNamesIn(res, a:base, 'parts') + elseif line =~ 'after:\s*"\?' + call edccomplete#FindNamesIn(res, a:base, 'programs') + endif + + elseif b:scontext == 'programs' + call edccomplete#AddLabel(res, line, a:base, s:programsLabel) + call edccomplete#AddStatement(res, line, a:base, s:programsStatement) + if line =~ 'image:\s*".\{-}"' + call edccomplete#AddKeyword(res, a:base, s:imageStorageMethod) + endif + + elseif b:scontext == 'box' && b:sparent == 'part' + call edccomplete#AddStatement(res, line, a:base, s:boxStatement) + + elseif b:scontext == 'items' + call edccomplete#AddStatement(res, line, a:base, s:boxItemsStatement) + + elseif b:scontext == 'item' + call edccomplete#AddLabel(res, line, a:base, s:boxItemLabel) + if line =~ 'type:\s*' + call edccomplete#AddKeyword(res, a:base, s:boxItemTypes) + elseif line =~ 'aspect_mode:\s*"\?' + call edccomplete#AddKeyword(res, a:base, s:boxItemAspectMode) + endif + + elseif b:scontext == 'box' && b:sparent == 'description' + call edccomplete#AddLabel(res, line, a:base, s:boxDescLabel) + if line =~ 'layout:\s*' + call edccomplete#AddKeyword(res, a:base, s:boxLayout) + endif + + elseif b:scontext == 'table' && b:sparent == 'description' + call edccomplete#AddLabel(res, line, a:base, s:tableDescLabel) + if line =~ 'homogeneous:\s*' + call edccomplete#AddKeyword(res, a:base, s:tableHomogeneousMode) + endif + + elseif b:scontext == 'group' + call edccomplete#AddLabel(res, line, a:base, s:groupLabel) + call edccomplete#AddStatement(res, line, a:base, s:groupStatement) + if line =~ 'image:\s*".\{-}"' + call edccomplete#AddKeyword(res, a:base, s:imageStorageMethod) + endif + + elseif b:scontext == 'parts' + call edccomplete#AddLabel(res, line, a:base, s:partsLabel) + call edccomplete#AddStatement(res, line, a:base, s:partsStatement) + if line =~ 'image:\s*".\{-}"' + call edccomplete#AddKeyword(res, a:base, s:imageStorageMethod) + endif + + elseif b:scontext == 'data' + call edccomplete#AddLabel(res, line, a:base, s:dataLabel) + + elseif b:scontext == 'fonts' + call edccomplete#AddLabel(res, line, a:base, s:fontsLabel) + + elseif b:scontext == 'spectra' + call edccomplete#AddStatement(res, line, a:base, s:spectraStatement) + + elseif b:scontext == 'spectrum' + call edccomplete#AddLabel(res, line, a:base, s:spectrumLabel) + + elseif b:scontext == 'gradient' + call edccomplete#AddLabel(res, line, a:base, s:gradientLabel) + call edccomplete#AddStatement(res, line, a:base, s:gradientStatement) + if line =~ 'type:\s*' + call edccomplete#AddKeyword(res, a:base, s:gradientTypes) + endif + + elseif b:scontext == 'styles' + call edccomplete#AddStatement(res, line, a:base, s:stylesStatement) + + elseif b:scontext == 'style' + call edccomplete#AddLabel(res, line, a:base, s:styleLabel) + + elseif b:scontext == 'color_classes' + call edccomplete#AddStatement(res, line, a:base, s:color_classesStatement) + + elseif b:scontext == 'color_class' + call edccomplete#AddLabel(res, line, a:base, s:color_classLabel) + + elseif b:scontext == 'images' + call edccomplete#AddLabel(res, line, a:base, s:imagesLabel) + if line =~ 'image:\s*".\{-}"' + call edccomplete#AddKeyword(res, a:base, s:imageStorageMethod) + endif + + elseif b:scontext == 'collections' + call edccomplete#AddLabel(res, line, a:base, s:collectionsLabel) + call edccomplete#AddStatement(res, line, a:base, s:collectionsStatement) + if line =~ 'image:\s*".\{-}"' + call edccomplete#AddKeyword(res, a:base, s:imageStorageMethod) + endif + + elseif b:scontext == 'externals' + call edccomplete#AddLabel(res, line, a:base, s:externalsLabel) + + elseif strlen(b:scontext) == 0 + call edccomplete#AddStatement(res, line, a:base, s:topStatement) + endif + + unlet! b:scontext + + return res + endif +endfunction + +function! edccomplete#AddLabel(res, line, base, label) + if a:line =~ ':' + return + endif + + for m in sort(keys(a:label)) + if m =~ '^' . a:base + call add(a:res, {'word': m . ':', 'menu': a:label[m]}) + endif + endfor +endfunction + +function! edccomplete#AddKeyword(res, base, label) + for m in sort(keys(a:label)) + if m =~ '^' . a:base + call add(a:res, {'word': m, 'menu': a:label[m]}) + endif + endfor +endfunction + +function! edccomplete#AddStatement(res, line, base, statement) + if a:line =~ ':' + return + endif + + for m in sort(a:statement) + if m =~ '^' . a:base + call add(a:res, m . ' {') + endif + endfor +endfunction + +function! edccomplete#FindStates(res, base, in_part) + let curpos = getpos('.') + call remove(curpos, 0, 0) + + let states_list = [] + if a:in_part == 1 " in the current part only + let part_start = search('^[ \t}]*\<part\>[ \t{]*$', 'bnW') + if part_start != 0 " found it + let line = getline(part_start) + if line !~ '{' + let part_start = nextnonblank(part_start) + endif + call cursor(part_start, 0) + let part_end = searchpair('{', '', '}', 'nW') + endif + else " in the current parts group + let part_start = search('^[ \t}]*\<parts\>[ \t{]*$', 'bnW') + if part_start != 0 " found it + let line = getline(part_start) + if line !~ '{' + let part_start = nextnonblank(part_start) + endif + call cursor(part_start, 0) + let part_end = searchpair('{', '', '}', 'nW') + endif + endif + + let state_num = search('\%(state:\s*\)"\w\+"', 'W', part_end) + while state_num + let state = matchstr(getline(state_num), '\%(state:\s*\)\@<="\w\+"') + call extend(states_list, [state]) + let state_num = search('\%(state:\s*\)"\w\+"', 'W', part_end) + endwhile + call cursor(curpos) + + for m in sort(states_list) + if m =~ '^' . a:base + call add(a:res, m) + endif + endfor +endfunction + +function! edccomplete#FindNamesIn(res, base, str) + let curpos = getpos('.') + call remove(curpos, 0, 0) + + let names_list = [] + let part_start = search('^[ \t}]*\<' . a:str . '\>[ \t{]*$', 'bnW') + if part_start != 0 " found it + let line = getline(part_start) + if line !~ '{' + let part_start = nextnonblank(part_start) + endif + call cursor(part_start, 0) + let part_end = searchpair('{', '', '}', 'nW') + endif + + let name_num = search('\%(name:\s*\)"\w\+"', 'W', part_end) + while name_num + let name = matchstr(getline(name_num), '\%(name:\s*\)\@<="\w\+"') + call extend(names_list, [name]) + let name_num = search('\%(name:\s*\)"\w\+"', 'W', part_end) + endwhile + call cursor(curpos) + + for m in sort(names_list) + if m =~ '^' . a:base + call add(a:res, m) + endif + endfor +endfunction + +function! edccomplete#FindParent(lnum, cnum) + call setpos('.', [0, a:lnum, a:cnum, 0]) + let ppe = searchpos('\.', 'bcn') + let pps = searchpos('\w\+\.', 'bcn') + if ppe != [0, 0] && pps[0] == ppe[0] && pps[1] <= ppe[1] && pps[0] == line('.') + let b:sparent = line[pps[1] -1 : ppe[1] - 2] + return + endif + + let startpos = searchpair('{', '', '}', 'bnW') + let lnum = startpos + let line = getline(lnum) + + if line !~ '\a\+' + let line = getline(prevnonblank(lnum - 1)) + endif + + let b:sparent = matchstr(line, '\w\+') +endfunction + +" part +let s:partLabel = { + \ 'name': '"name"', + \ 'type': 'keyword', + \ 'effect': 'keyword', + \ 'clip_to': '"part_name"', + \ 'scale': '0-1', + \ 'mouse_events': '0-1', + \ 'repeat_events': '0-1', + \ 'ignore_flags': 'keyword ...', + \ 'pointer_mode': 'keyword', + \ 'select_mode': 'keyword', + \ 'precise_is_inside': '0-1', + \ 'use_alternate_font_metrics': '0-1', + \ 'image': '"filename" keyword', + \ 'font': '"filename" "name"', + \ 'entry_mode': 'keyword', + \ 'multiline': '0-1 (TEXTBLOCK only)', + \ 'source': '"group_name" (GROUP or TEXTBLOCK only)', + \ 'source2': '"group_name" (TEXTBLOCK only)', + \ 'source3': '"group_name" (TEXTBLOCK only)', + \ 'source4': '"group_name" (TEXTBLOCK only)', + \ 'source5': '"group_name" (TEXTBLOCK only)', + \ 'source6': '"group_name" (TEXTBLOCK only)', + \ } +let s:partStatement = [ + \ 'dragable', + \ 'images', + \ 'fonts', + \ 'description', + \ 'styles', + \ 'color_classes', + \ 'program', + \ 'programs', + \ 'box', + \ ] + +" dragable +let s:dragableLabel = { + \ 'x': '0-1 int int', + \ 'y': '0-1 int int', + \ 'confine': '"part_name"', + \ 'events': '"draggable_part_name"', + \ } + +" description +let s:descriptionLabel = { + \ 'state': '"name" index (float)', + \ 'inherit': '"description" index (float)', + \ 'visible': '0-1', + \ 'align': 'x y (float)', + \ 'fixed': 'width height (0-1)', + \ 'min': 'width height (int)', + \ 'max': 'width height (int)', + \ 'step': 'width height (int)', + \ 'aspect': 'min max (float)', + \ 'aspect_preference': 'keyword', + \ 'color_class': '"name"', + \ 'color': '0-255 0-255 0-255 0-255', + \ 'color2': '0-255 0-255 0-255 0-255', + \ 'color3': '0-255 0-255 0-255 0-255', + \ 'font': '"filename" "name"', + \ } +let s:descriptionStatement = [ + \ 'rel1', + \ 'rel2', + \ 'image', + \ 'fill', + \ 'text', + \ 'gradient', + \ 'images', + \ 'fonts', + \ 'styles', + \ 'color_classes', + \ 'program', + \ 'programs', + \ 'box', + \ 'map', + \ ] + +" rel +let s:relLabel = { + \ 'relative': 'x y (float)', + \ 'offset': 'x y (int)', + \ 'to': '"part_name"', + \ 'to_x': '"part_name"', + \ 'to_y': '"part_name"', + \ } +" map +let s:mapLabel = { + \ 'on': '0-1', + \ 'perspective': '"part_name"', + \ 'light': '"part_name"', + \ 'smooth': '0-1', + \ 'pespective_on':'0-1', + \ 'backface_cull':'0-1', + \ 'alpha': '0-1', + \ } +let s:mapStatement = [ + \ 'rotation', + \ ] + +let s:rotationLabel = { + \ 'center': '"part_name"', + \ 'x': '"degrees (float)"', + \ 'y': '"degrees (float)"', + \ 'z': '"degrees (float)"', + \ } + +" params +let s:paramsLabel = { + \ 'int': '"name" int', + \ 'double': '"name" double', + \ 'string': '"name" "string"', + \ } + +" perspective +let s:perspectiveLabel = { + \ 'zplane': 'int', + \ 'focal': 'int', + \ } + + +" image +let s:imageLabel = { + \ 'image': '"filename" keyword', + \ 'normal': '"filename"', + \ 'tween': '"filename"', + \ 'border': 'left right top bottom (int)', + \ 'middle': 'keyword', + \ 'border_scale': '0-1', + \ 'scale_hint': 'keyword', + \ } + +" fill +let s:fillLabel = { + \ 'smooth': '0-1', + \ 'angle': '0-360 (GRADIENT)', + \ 'spread': '0-1', + \ 'type': 'keyword', + \ } +let s:fillStatement = [ + \ 'origin', + \ 'size', + \ ] +" fill origin/size +let s:fillInnerStatement = { + \ 'relative': 'width height (float)', + \ 'offset': 'x y (int)', + \ } +" fill types +let s:fillTypes = { + \ 'SCALE': '', + \ 'TILE': '', + \ } + +" text +let s:textLabel = { + \ 'text': '"string"', + \ 'font': '"font_name"', + \ 'size': 'size (int)', + \ 'text_class': '"class_name"', + \ 'fit': 'x y (0-1)', + \ 'min': 'x y (0-1)', + \ 'max': 'x y (0-1)', + \ 'align': 'x y (float)', + \ 'source': '"part_name"', + \ 'text_source': '"text_part_name"', + \ 'style': '"style_name"', + \ 'elipsis': '0.0-1.0', + \ 'repch': '"string" (PASSWORD mode)', + \ } +let s:textStatement = [ + \ 'fonts', + \ ] + +" program +let s:programLabel = { + \ 'name': '"name"', + \ 'signal': '"signal_name"', + \ 'source': '"part_name"', + \ 'action': 'keyword ...', + \ 'transition': 'keyword time (float)', + \ 'filter': '"part_name" "state_name"', + \ 'in': 'from range (float)', + \ 'target': '"part_name"', + \ 'after': '"program_name"', + \ } +let s:programStatement = [ + \ 'script', + \ 'lua_script', + \ ] + + +" programs +let s:programsLabel = { + \ 'image': '"filename" keyword', + \ 'font': '"filename" "name"', + \ } +let s:programsStatement = [ + \ 'images', + \ 'fonts', + \ 'program', + \ ] + +" box and table +let s:boxStatement = [ + \ 'items', + \ ] +let s:boxItemsStatement = [ + \ 'item', + \ ] +let s:boxItemLabel = { + \ 'type': 'keyword', + \ 'name': '"name"', + \ 'source': '"group_name"', + \ 'min': 'width height (int)', + \ 'prefer': 'width height (int)', + \ 'max': 'width height (int)', + \ 'padding': 'left right top bottom (int)', + \ 'align': 'x y (float)', + \ 'weight': 'x y (float)', + \ 'aspect': 'w h (float)', + \ 'aspect_mode': 'keyword', + \ 'options': '"extra options"', + \ } +let s:boxDescLabel = { + \ 'layout': '"string" ["string"]', + \ 'align': 'float float', + \ 'padding': 'int int', + \ } +let s:tableItemLabel = { + \ 'position': 'col row (int)', + \ 'span': 'col row (int)', + \ } +let s:tableDescLabel = { + \ 'homogeneous': 'keyword', + \ 'align': 'float float', + \ 'padding': 'int int', + \ } + +" group +let s:groupLabel = { + \ 'name': '"name"', + \ 'alias': '"alias"', + \ 'min': 'width height', + \ 'max': 'width height', + \ 'image': '"filename" keyword', + \ 'font': '"filename" "name"', + \ 'script_only': '0-1', + \ } +let s:groupStatement = [ + \ 'data', + \ 'script', + \ 'lua_script', + \ 'parts', + \ 'images', + \ 'fonts', + \ 'styles', + \ 'color_classes', + \ 'program', + \ 'programs', + \ 'externals', + \ ] + +" parts +let s:partsStatement = [ + \ 'images', + \ 'fonts', + \ 'part', + \ 'styles', + \ 'color_classes', + \ 'program', + \ 'programs', + \ ] +let s:partsLabel = { + \ 'image': '"filename" keyword', + \ 'font': '"filename" "name"', + \ } + +" data +let s:dataLabel = { + \ 'item': '"key" "value"', + \ 'file': '"key" "filename"', + \ } + +" fonts +let s:fontsLabel = { + \ 'font': '"filename" "name"', + \ } + +"images +let s:imagesLabel = { + \ 'image': '"filename" keyword', + \ } + +"collections +let s:collectionsStatement = [ + \ 'group', + \ 'images', + \ 'fonts', + \ 'styles', + \ 'color_classes', + \ 'externals', + \ ] +let s:collectionsLabel = { + \ 'image': '"filename" keyword', + \ 'font': '"filename" "name"', + \ } + +" externals +let s:externalsLabel = { + \ 'external': '"name"', + \ } + +" spectra +let s:spectraStatement = [ + \ 'spectrum', + \ ] +" spectrum +let s:spectrumLabel = { + \ 'name': '"name"', + \ 'color': '0-255 0-255 0-255 0-255', + \ } +" gradient +let s:gradientLabel = { + \ 'type': '"keyword"', + \ 'spectrum': '"spectrum_name"', + \ } +let s:gradientStatement = [ + \ 'rel1', + \ 'rel2', + \ ] +" gradient types +let s:gradientTypes = { + \ '"linear"': '', + \ '"radial"': '', + \ '"rectangular"': '', + \ '"angular"': '', + \ '"sinusoidal"': '', + \ } + +" styles +let s:stylesStatement = [ + \ 'style', + \ ] +" style +let s:styleLabel = { + \ 'name': '"name"', + \ 'base': '".. default style properties .."', + \ 'tag': '"tagname" "style properties"', + \ } + +" color_classes +let s:color_classesStatement = [ + \ 'color_class', + \ ] +" color_class +let s:color_classLabel = { + \ 'name': '"name"', + \ 'color': '0-255 0-255 0-255 0-255', + \ 'color2': '0-255 0-255 0-255 0-255', + \ 'color3': '0-255 0-255 0-255 0-255', + \ } + +" toplevel +let s:topStatement = [ + \ 'fonts', + \ 'images', + \ 'data', + \ 'collections', + \ 'spectra', + \ 'styles', + \ 'color_classes', + \ 'externals', + \ ] + +" images image storage method +let s:imageStorageMethod = { + \ 'COMP': '', + \ 'RAW': '', + \ 'USER': '', + \ 'LOSSY': '0-100', + \ } +" image middle types +let s:imageMiddleTypes = { + \ '0': '', + \ '1': '', + \ 'NONE': '', + \ 'DEFAULT': '', + \ 'SOLID': '', + \ } +" image scale hint +let s:imageScaleHint = { + \ '0': '', + \ 'NONE': '', + \ 'DYNAMIC': '', + \ 'STATIC': '', + \ } + +" part types +let s:partTypes = { + \ 'TEXT': '', + \ 'IMAGE': '', + \ 'RECT': '', + \ 'TEXTBLOCK': '', + \ 'SWALLOW': '', + \ 'GRADIENT': '', + \ 'GROUP': '', + \ 'BOX': '', + \ 'TABLE': '', + \ 'EXTERNAL': '', + \ } +" part effects +let s:partEffects = { + \ 'NONE': '', + \ 'PLAIN': '', + \ 'OUTLINE': '', + \ 'SOFT_OUTLINE': '', + \ 'SHADOW': '', + \ 'SOFT_SHADOW': '', + \ 'OUTLINE_SHADOW': '', + \ 'OUTLINE_SOFT_SHADOW': '', + \ 'FAR_SHADOW': '', + \ 'FAR_SOFT_SHADOW': '', + \ 'GLOW': '', + \ } +" part select_mode +let s:partSelectMode = { + \ 'DEFAULT': '', + \ 'EXPLICIT': '', + \ } +" part ignore flags +let s:partIgnoreFlags = { + \ 'NONE': '', + \ 'ON_HOLD': '', + \ } +" part pointer mode +let s:partPointerMode = { + \ 'AUTOGRAB': '', + \ 'NOGRAB': '', + \ } +" part editable_mode +let s:partEditableMode = { + \ 'NONE': '', + \ 'PLAIN': '', + \ 'EDITABLE': '', + \ 'PASSWORD': '', + \ } + +" aspect_preference types +let s:aspectPrefTypes = { + \ 'VERTICAL': '', + \ 'HORIZONTAL': '', + \ 'BOTH': '', + \ } + +" program transition types +let s:transitionTypes = { + \ 'LINEAR': '0.0 - 1.0', + \ 'SINUSOIDAL': '0.0 - 1.0', + \ 'ACCELERATE': '0.0 - 1.0', + \ 'DECELERATE': '0.0 - 1.0', + \ } +" program action types +let s:actionTypes = { + \ 'STATE_SET': '"string" "0.0 - 1.0"', + \ 'ACTION_STOP': '', + \ 'SIGNAL_EMIT': '"string" "string"', + \ 'DRAG_VAL_SET': 'float float', + \ 'DRAG_VAL_STEP': 'float float', + \ 'DRAG_VAL_PAGE': 'float float', + \ 'FOCUS_SET': '', + \ } +" box item types +let s:boxItemTypes = { + \ 'GROUP': '', + \ } +" box item aspect mode +let s:boxItemAspectMode = { + \ 'NONE': '', + \ 'NEITHER': '', + \ 'VERTICAL': '', + \ 'HORIZONTAL': '', + \ 'BOTH': '', + \ } +" box layout +let s:boxLayout = { + \ '"horizontal"': '', + \ '"horizontal_homogeneous"': '', + \ '"horizontal_max"': '', + \ '"horizontal_flow"': '', + \ '"vertical"': '', + \ '"vertical_homogeneous"': '', + \ '"vertical_max"': '', + \ '"vertical_flow"': '', + \ '"stack"': '', + \ } +" table homogeneous mode +let s:tableHomogeneousMode = { + \ 'NONE': '', + \ 'TABLE': '', + \ 'ITEM': '', + \ } diff --git a/data/edje/vim/ftdetect/edc.vim b/data/edje/vim/ftdetect/edc.vim new file mode 100644 index 000000000..d8cc228c2 --- /dev/null +++ b/data/edje/vim/ftdetect/edc.vim @@ -0,0 +1,3 @@ +au BufRead,BufNewFile *.edc set filetype=edc +au BufRead,BufNewFile *.sma set filetype=embryo +au BufRead,BufNewFile *.embryo set filetype=embryo diff --git a/data/edje/vim/ftplugin/edc.vim b/data/edje/vim/ftplugin/edc.vim new file mode 100644 index 000000000..5a90a56a6 --- /dev/null +++ b/data/edje/vim/ftplugin/edc.vim @@ -0,0 +1,23 @@ +" Vim filetype plugin file +" Language: EDC +" Maintainer: Viktor Kojouharov +" Latest Revision: 2006-10-29 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let b:undo_ftplugin = "setl com< cms< inc< fo< efm< mp<" + +setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:// +setlocal commentstring=/*%s*/ +setlocal formatoptions-=t formatoptions+=croql +setlocal include=^\s*#\s*include +setlocal efm=edje_cc:%s.\ %f:%l\ %m +setlocal mp=edje_cc\ % + +if exists('&ofu') + setlocal ofu=edccomplete#Complete + setlocal cfu=edccomplete#Complete +endif diff --git a/data/edje/vim/indent/edc.vim b/data/edje/vim/indent/edc.vim new file mode 100644 index 000000000..498be4a5b --- /dev/null +++ b/data/edje/vim/indent/edc.vim @@ -0,0 +1,83 @@ +" Vim indent file +" Language: EDC +" Maintainer: Viktor Kojouharov +" Latest Revision: 2007 02 24 + +if exists("b:did_indent") + finish +endif +let b:did_indent = 1 + +setlocal indentexpr=GetEDCIndent() +setlocal indentkeys=0{,0},!^F,o,O + +if exists("*GetEDCIndent") + finish +endif + +function s:prevnonblanknoncomment(lnum) + let lnum = a:lnum + while lnum > 1 + let lnum = prevnonblank(lnum) + let line = getline(lnum) + if line =~ '\*/' + while lnum > 1 && line !~ '/\*' + let lnum -= 1 + endwhile + if line =~ '^\s*/\*' + let lnum -= 1 + else + break + endif + elseif line =~ '^\s*//' + let lnum -= 1 + else + break + endif + endwhile + return lnum +endfunction + +function s:count_braces(lnum, count_open) + let n_open = 0 + let n_close = 0 + let line = getline(a:lnum) + let pattern = '[{}]' + let i = match(line, pattern) + while i != -1 + if synIDattr(synID(a:lnum, i + 1, 0), 'name') !~ 'c\%(CommentL\|Comment\|StringQ\{1,2}\)' + if line[i] == '{' + let n_open += 1 + elseif line[i] == '}' + if n_open > 0 + let n_open -= 1 + else + let n_close += 1 + endif + endif + endif + let i = match(line, pattern, i + 1) + endwhile + return a:count_open ? n_open : n_close +endfunction + +function GetEDCIndent() + let line = getline(v:lnum) + if line =~ '^\s*\*' || line =~ '^\s*//' || line =~ '^\s*}' + return cindent(v:lnum) + endif + + let pnum = s:prevnonblanknoncomment(v:lnum - 1) + if pnum == 0 + return 0 + endif + + let ind = indent(pnum) + s:count_braces(pnum, 1) * &sw + + let pline = getline(pnum) + if pline =~ '}\s*$' + let ind -= (s:count_braces(pnum, 0) - (pline =~ '^\s*}' ? 1 : 0)) * &sw + endif + + return ind +endfunction diff --git a/data/edje/vim/plugin-info.txt b/data/edje/vim/plugin-info.txt new file mode 100644 index 000000000..e01cb420e --- /dev/null +++ b/data/edje/vim/plugin-info.txt @@ -0,0 +1,8 @@ +{ + "name" : "edje", + "version" : "dev", + "author" : "viktor kojouharov <vkojouharov at gmail.com>", + "repository" : {"type": "svn", "url": "http://svn.enlightenment.org/svn/e/trunk/edje/data/vim/"}, + "dependencies" : {}, + "description" : "Edje vim support addon" +} diff --git a/data/edje/vim/snippets/edc.snippets b/data/edje/vim/snippets/edc.snippets new file mode 100644 index 000000000..bb93e4226 --- /dev/null +++ b/data/edje/vim/snippets/edc.snippets @@ -0,0 +1,99 @@ +snippet col + collections { + ${1} + } + +snippet images + images { + ${1} + } + +snippet image + image: "${1:.png}" COMP; + +snippet group + group { name: "${1}"; + ${2} + parts { + ${3} + } + } + +snippet part + part { name: "${1}"; + type: ${2:RECT}; + mouse_events: 0; + description { state: "default" 0.0; + visible: 1; + color: 255 255 255 255; + rel1 { + to_x: "${2:bg}"; + to_y: "${3:bg}"; + relative: 0.0 0.0; + offset: 0 0; + } + rel2 { + to_x: "${4:bg}"; + to_y: "${5:bg}"; + relative: 1.0 1.0; + offset: -1 -1; + } + } + } + +snippet bg + part { name: "${1:bg}"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + visible: 1; + color: 0 0 0 0; + } + } + +snippet event + part { name: "${1:event}"; + type: RECT; + mouse_events: 1; + description { state: "default" 0.0; + visible: 1; + color: 0 0 0 0; + } + } + +snippet IMAGE + part { name: "${1:image}"; + type: IMAGE; + mouse_events: 0; + description { state: "default" 0.0; + visible: 1; + image { + normal: "${2}"; + border: 0 0 0 0; + middle: 1; + } + } + } + +snippet desc + description { state: "${1}" ${2:0.0}; + inherit: "default" 0.0; + ${3} + } + +snippet programs + programs { + ${1} + } + +snippet program + program { name: "${1}"; + ${2} + } + +snippet clicked + program { name: "${1:mouse_clicked}"; + signal: "mouse,clicked,${2:1}"; + source: "${2:event}"; + action: SIGNAL_EMIT "${3}" "${4}"; + } diff --git a/data/edje/vim/syntax/edc.vim b/data/edje/vim/syntax/edc.vim new file mode 100644 index 000000000..e21c01810 --- /dev/null +++ b/data/edje/vim/syntax/edc.vim @@ -0,0 +1,235 @@ +" Vim syntax file +" Language: EDC +" Maintainer: Viktor Kojouharov +" Last Change: 2007 02 24 + +" For version 5.x: Clear all syntax items +" For version 6.x: Quit when a syntax file was already loaded +if version < 600 + syntax clear +elseif exists("b:current_syntax") + finish +endif + +" A bunch of useful keywords +syn keyword edcBlock images data fonts collections group contained +syn keyword edcBlock part parts dragable description contained +syn keyword edcBlock text font fill origin size image contained +syn keyword edcBlock programs program styles style contained +syn keyword edcBlock gradient spectra spectrum contained +syn keyword edcBlock color_classes color_class rel1 rel2 contained +syn keyword edcBlock items item file params externals contained +syn keyword edcBlock map rotation perspective script lua_script contained + +syn keyword edcLabel item name alias min max type effect contained +syn keyword edcLabel mouse_events repeat_events clip_to contained +syn keyword edcLabel x y z confine events scale contained +syn keyword edcLabel ignore_flags precise_is_inside contained +syn keyword edcLabel use_alternate_font_metrics entry_mode contained +syn keyword edcLabel source source2 source3 source4 contained +syn keyword edcLabel source5 source6 multiline pointer_mode contained +syn keyword edcLabel state visible step aspect fixed middle contained +syn keyword edcLabel aspect_preference ellipsis elipsis image contained +syn keyword edcLabel relative offset to to_x to_y contained +syn keyword edcLabel border border_scale scale_hint color color2 color3 font size contained +syn keyword edcLabel signal action transition in filter contained +syn keyword edcLabel target after fit align contained +syn keyword edcLabel text smooth inherit tag base style contained +syn keyword edcLabel text_source color_class text_class contained +syn keyword edcLabel spectrum angle spread normal tween contained +syn keyword edcLabel padding prefer weight aspect_mode contained +syn keyword edcLabel options layout position span contained +syn keyword edcLabel homogeneous contained +syn keyword edcLabel on perspective light perspective_on contained +syn keyword edcLabel backface_cull alpha center focus zplane contained +syn keyword edcLabel int double string external script_only contained + +syn keyword edcConstant COMP RAW LOSSY NONE ON_HOLD AUTOGRAB NOGRAB +syn keyword edcConstant TEXT IMAGE RECT TEXTBLOCK SWALLOW GRADIENT GROUP +syn keyword edcConstant NONE PLAIN OUTLINE SOFT_OUTLINE SHADOW +syn keyword edcConstant SOFT_SHADOW OUTLINE_SHADOW OUTLINE_SOFT_SHADOW +syn keyword edcConstant GLOW FAR_SHADOW FAR_SOFT_SHADOW +syn keyword edcConstant STATE_SET ACTION_STOP SIGNAL_EMIT FOCUS_SET +syn keyword edcConstant DRAG_VAL_SET DRAG_VAL_STEP DRAG_VAL_PAGE +syn keyword edcConstant LINEAR SINUSOIDAL ACCELERATE DECELERATE +syn keyword edcConstant VERTICAL HORIZONTAL BOTH BOX TABLE +syn keyword edcConstant EDITABLE PASSWORD "default" + +syn keyword edcTodo contained TODO FIXME XXX + +syn match edcLabelMatch "\w\+:" contains=edcLabel +syn match edcBlockMatch "\w\+\_s*{" contains=edcBlock +syn match edcBlockMatch "\w\+\.\a"me=e-2 contains=edcBlock +" edcCommentGroup allows adding matches for special things in comments +syn cluster edcCommentGroup contains=edcTodo + +" String and Character constants +" Highlight special characters (those which have a backslash) differently +syn match edcSpecial display contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)" +syn region edcString start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=edcSpecial +syn match edcFormat display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([diuoxXfeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained +syn match edcFormat display "%%" contained +syn region edcString start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat + +syn match edcCharacter "L\='[^\\]'" +syn match edcCharacter "L'[^']*'" contains=edcSpecial +syn match edcSpecialError "L\='\\[^'\"?\\abfnrtv]'" +syn match edcSpecialCharacter "L\='\\['\"?\\abfnrtv]'" +syn match edcSpecialCharacter display "L\='\\\o\{1,3}'" +syn match edcSpecialCharacter display "'\\x\x\{1,2}'" +syn match edcSpecialCharacter display "L'\\x\x\+'" + +"when wanted, highlight trailing white space +if exists("edc_space_errors") + if !exists("edc_no_trail_space_error") + syn match edcSpaceError display excludenl "\s\+$" + endif + if !exists("edc_no_tab_space_error") + syn match edcSpaceError display " \+\t"me=e-1 + endif +endif + +"catch errors caused by wrong parenthesis and brackets +syn cluster edcParenGroup contains=edcParenError,edcIncluded,edcSpecial,edcCommentSkip,edcCommentString,edcComment2String,@edcCommentGroup,edcCommentStartError,edcUserCont,edcUserLabel,edcBitField,edcCommentSkip,edcOctalZero,edcFormat,edcNumber,edcFloat,edcOctal,edcOctalError,edcNumbersCom +if exists("edc_no_bracket_error") + syn region edcParen transparent start='(' end=')' contains=ALLBUT,@edcParenGroup + syn match edcParenError display ")" + syn match edcErrInParen display contained "[{}]" +else + syn region edcParen transparent start='(' end=')' contains=ALLBUT,@edcParenGroup,edcErrInBracket + syn match edcParenError display "[\])]" + syn match edcErrInParen display contained "[\]{}]" + syn region edcBracket transparent start='\[' end=']' contains=ALLBUT,@edcParenGroup,edcErrInParen + syn match edcErrInBracket display contained "[);{}]" +endif + +"integer number, or floating point number without a dot and with "f". +syn case ignore +syn match edcNumbers display transparent "\<\d\|\.\d" contains=edcNumber,edcFloat,edcOctalError,edcOctal +" Same, but without octal error (for comments) +syn match edcNumbersCom display contained transparent "\<\d\|\.\d" contains=edcNumber,edcFloat,edcOctal +syn match edcNumber display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>" +"hex number +syn match edcNumber display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>" +" Flag the first zero of an octal number as something special +syn match edcOctal display contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=edcOctalZero +syn match edcOctalZero display contained "\<0" +syn match edcFloat display contained "\d\+f" +"floating point number, with dot, optional exponent +syn match edcFloat display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=" +"floating point number, starting with a dot, optional exponent +syn match edcFloat display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>" +"floating point number, without dot, with exponent +syn match edcFloat display contained "\d\+e[-+]\=\d\+[fl]\=\>" +" flag an octal number with wrong digits +syn match edcOctalError display contained "0\o*[89]\d*" +syn case match + +if exists("edc_comment_strings") + " A comment can contain edcString, edcCharacter and edcNumber. + " But a "*/" inside a edcString in a edcComment DOES end the comment! So we + " need to use a special type of edcString: edcCommentString, which also ends + " on "*/", and sees a "*" at the start of the line as comment again. + " Unfortunately this doesn't very well work for // type of comments :-( + syntax match edcCommentSkip contained "^\s*\*\($\|\s\+\)" + syntax region edcCommentString contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=edcSpecial,edcCommentSkip + syntax region edcComment2String contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=edcSpecial + syntax region edcCommentL start="//" skip="\\$" end="$" keepend contains=@edcCommentGroup,edcComment2String,edcCharacter,edcNumbersCom,edcSpaceError + syntax region edcComment matchgroup=edcCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@edcCommentGroup,edcCommentStartError,edcCommentString,edcCharacter,edcNumbersCom,edcSpaceError +else + syn region edcCommentL start="//" skip="\\$" end="$" keepend contains=@edcCommentGroup,edcSpaceError + syn region edcComment matchgroup=edcCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@edcCommentGroup,edcCommentStartError,edcSpaceError +endif +" keep a // comment separately, it terminates a preproc. conditional +syntax match edcCommentError display "\*/" +syntax match edcCommentStartError display "/\*"me=e-1 contained + +syn region edcPreCondit start="^\s*#\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" end="//"me=s-1 contains=edcComment,edcCharacter,edcParenError,edcNumbers,edcCommentError,edcSpaceError +syn match edcPreCondit display "^\s*#\s*\(else\|endif\)\>" +syn region edcIncluded display contained start=+"+ skip=+\\\\\|\\"+ end=+"+ +syn match edcIncluded display contained "<[^>]*>" +syn match edcInclude display "^\s*#\s*include\>\s*["<]" contains=edcIncluded +syn cluster edcPreProcGroup contains=edcPreCondit,edcIncluded,edcInclude,edcDefine,edcErrInParen,edcErrInBracket,edcCommentSkip,edcCommentString,edcComment2String,@edcCommentGroup,edcCommentStartError,edcParen,edcBracket,edcMulti,edcUserLabel +syn cluster edcAlphaNum contains=edcSpecial,edcOctalZero,edcFormat,edcNumber,edcFloat,edcOctal,edcOctalError,edcNumbersCom,edcString +syn region edcDefine start="^\s*#\s*\(define\|undef\)\>" skip="\\$" end="$" end="//"me=s-1 contains=ALLBUT,@edcPreProcGroup +syn region edcPreProc start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@edcPreProcGroup + +syn match edcUserLabel display "\I\i*" contained + +syn include @edcEmbryo syntax/embryo.vim +unlet b:current_syntax +syn region edcScript matchgroup=edcScriptTag start="\<script\_s*{" end="}" contains=@edcEmbryo,edcScriptTag +syn keyword edcScriptTag contained script + +syn include @edcLua syntax/lua.vim +unlet b:current_syntax +syn region edcLuaScript matchgroup=edcLuaScriptTag start="\<lua_script\_s*{" end="}" contains=@edcLua,edcLuaScriptTag +syn keyword edcLuaScriptTag contained script + +if exists("edc_minlines") + let b:edc_minlines = edc_minlines +else + let b:edc_minlines = 50 " #if 0 constructs can be long +endif +exec "syn sync ccomment edcComment minlines=" . b:edc_minlines +"syn sync fromstart + +" Define the default highlighting. +" For version 5.7 and earlier: only when not done already +" For version 5.8 and later: only when an item doesn't have highlighting yet +if version >= 508 || !exists("did_edc_syn_inits") + if version < 508 + let did_edc_syn_inits = 1 + command -nargs=+ HiLink hi link <args> + else + command -nargs=+ HiLink hi def link <args> + endif + + HiLink edcFormat edcSpecial + HiLink edcCommentL edcComment + HiLink edcCommentStart edcComment + HiLink edcLabel Label + HiLink edcUserLabel Label + HiLink edcConditional Conditional + HiLink edcRepeat Repeat + HiLink edcCharacter Character + HiLink edcSpecialCharacter cSpecial + HiLink edcNumber Number + HiLink edcOctal Number + HiLink edcOctalZero PreProc " link this to Error if you want + HiLink edcFloat Float + HiLink edcOctalError edcError + HiLink edcParenError edcError + HiLink edcErrInParen edcError + HiLink edcErrInBracket edcError + HiLink edcCommentError edcError + HiLink edcCommentStartError edcError + HiLink edcSpaceError edcError + HiLink edcSpecialError edcError + HiLink edcOperator Operator + HiLink edcStructure Structure + HiLink edcStorageClass StorageClass + HiLink edcInclude Include + HiLink edcPreProc PreProc + HiLink edcDefine Macro + HiLink edcIncluded edcString + HiLink edcError Error + HiLink edcBlock Function + HiLink edcScriptTag Function + HiLink edcLuaScriptTag Function + HiLink edcPreCondit PreCondit + HiLink edcConstant Constant + HiLink edcCommentString edcString + HiLink edcComment2String edcString + HiLink edcCommentSkip edcComment + HiLink edcString String + HiLink edcComment Comment + HiLink edcSpecial SpecialChar + HiLink edcTodo Todo + + delcommand HiLink +endif + +let b:current_syntax = "edc" + +" vim: ts=8 diff --git a/data/edje/vim/syntax/embryo.vim b/data/edje/vim/syntax/embryo.vim new file mode 100644 index 000000000..11175d893 --- /dev/null +++ b/data/edje/vim/syntax/embryo.vim @@ -0,0 +1,195 @@ +" Vim syntax file +" Language: Embryo +" Maintainer: Viktor Kojouharov +" Last Change: 2006 10 06 + +" For version 5.x: Clear all syntax items +" For version 6.x: Quit when a syntax file was already loaded +if version < 600 + syntax clear +elseif exists("b:current_syntax") + finish +endif + +" A bunch of useful keywords +syn keyword embryoConditional if else switch +syn keyword embryoRepeat while for do in +syn keyword embryoBranch break continue +syn keyword embryoOperator new +syn keyword embryoType Float State_Param Msg_Type enum +syn keyword embryoStatement return with native stock forward +syn keyword embryoLabel case default +syn keyword embryoReserved public +syn keyword embryoEdjeKey PART PROGRAM + +syn keyword embryoTodo contained TODO FIXME XXX + +" embryoCommentGroup allows adding matches for special things in comments +syn cluster embryoCommentGroup contains=embryoTodo + +" String and Character constants +" Highlight special characters (those which have a backslash) differently +syn match embryoSpecial display contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)" +syn region embryoString start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=embryoSpecial +syn match embryoFormat display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([diuoxXfeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained +syn match embryoFormat display "%%" contained +syn region embryoString start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat + +syn match embryoCharacter "L\='[^\\]'" +syn match embryoCharacter "L'[^']*'" contains=embryoSpecial +syn match embryoSpecialError "L\='\\[^'\"?\\abfnrtv]'" +syn match embryoSpecialCharacter "L\='\\['\"?\\abfnrtv]'" +syn match embryoSpecialCharacter display "L\='\\\o\{1,3}'" +syn match embryoSpecialCharacter display "'\\x\x\{1,2}'" +syn match embryoSpecialCharacter display "L'\\x\x\+'" + +"when wanted, highlight trailing white space +if exists("embryo_space_errors") + if !exists("embryo_no_trail_space_error") + syn match embryoSpaceError display excludenl "\s\+$" + endif + if !exists("embryo_no_tab_space_error") + syn match embryoSpaceError display " \+\t"me=e-1 + endif +endif + +"catch errors caused by wrong parenthesis and brackets +syn cluster embryoParenGroup contains=embryoParenError,embryoIncluded,embryoSpecial,embryoCommentSkip,embryoCommentString,embryoComment2String,@embryoCommentGroup,embryoCommentStartErr,embryoUserCont,embryoUserLabel,embryoBitField,embryoCommentSkip,embryoOctalZero,embryoFormat,embryoNumber,embryoFloat,embryoOctal,embryoOctalError,embryoNumbersCom +if exists("embryo_no_bracket_error") + syn region embryoParen transparent start='(' end=')' contains=ALLBUT,@embryoParenGroup + syn match embryoParenError display ")" + syn match embryoErrInParen display contained "[{}]" +else + syn region embryoParen transparent start='(' end=')' contains=ALLBUT,@embryoParenGroup,embryoErrInBracket + syn match embryoParenError display "[\])]" + syn match embryoErrInParen display contained "[\]{}]" + syn region embryoBracket transparent start='\[' end=']' contains=ALLBUT,@embryoParenGroup,embryoErrInParen + syn match embryoErrInBracket display contained "[);{}]" +endif + +syn region embryoBrace start='{' end='}' transparent +"integer number, or floating point number without a dot and with "f". +syn case ignore +syn match embryoNumbers display transparent "\<\d\|\.\d" contains=embryoNumber,embryoFloat,embryoOctalError,embryoOctal +" Same, but without octal error (for comments) +syn match embryoNumbersCom display contained transparent "\<\d\|\.\d" contains=embryoNumber,embryoFloat,embryoOctal +syn match embryoNumber display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>" +"hex number +syn match embryoNumber display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>" +" Flag the first zero of an octal number as something special +syn match embryoOctal display contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=embryoOctalZero +syn match embryoOctalZero display contained "\<0" +syn match embryoFloat display contained "\d\+f" +"floating point number, with dot, optional exponent +syn match embryoFloat display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=" +"floating point number, starting with a dot, optional exponent +syn match embryoFloat display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>" +"floating point number, without dot, with exponent +syn match embryoFloat display contained "\d\+e[-+]\=\d\+[fl]\=\>" +" flag an octal number with wrong digits +syn match embryoOctalError display contained "0\o*[89]\d*" +syn case match + +if exists("embryo_comment_strings") + " A comment can contain embryoString, embryoCharacter and embryoNumber. + " But a "*/" inside a embryoString in a embryoComment DOES end the comment! So we + " need to use a special type of embryoString: embryoCommentString, which also ends + " on "*/", and sees a "*" at the start of the line as comment again. + " Unfortunately this doesn't very well work for // type of comments :-( + syntax match embryoCommentSkip contained "^\s*\*\($\|\s\+\)" + syntax region embryoCommentString contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=embryoSpecial,embryoCommentSkip + syntax region embryoComment2String contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=embryoSpecial + syntax region embryoCommentL start="//" skip="\\$" end="$" keepend contains=@embryoCommentGroup,embryoComment2String,embryoCharacter,embryoNumbersCom,embryoSpaceError + syntax region embryoComment matchgroup=embryoCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@embryoCommentGroup,embryoCommentStartErr,embryoCommentString,embryoCharacter,embryoNumbersCom,embryoSpaceError +else + syn region embryoCommentL start="//" skip="\\$" end="$" keepend contains=@embryoCommentGroup,embryoSpaceError + syn region embryoComment matchgroup=embryoCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@embryoCommentGroup,embryoCommentStartErr,embryoSpaceError +endif +" keep a // comment separately, it terminates a preproc. conditional +syntax match embryoCommentError display "\*/" +syntax match embryoCommentStartErr display "/\*"me=e-1 contained + +syn region embryoPreCondit start="^\s*#\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" end="//"me=s-1 contains=embryoComment,embryoCharacter,embryoParenError,embryoNumbers,embryoCommentError,embryoSpaceError +syn match embryoPreCondit display "^\s*#\s*\(else\|endif\)\>" +syn region embryoIncluded display contained start=+"+ skip=+\\\\\|\\"+ end=+"+ +syn match embryoIncluded display contained "<[^>]*>" +syn match embryoInclude display "^\s*#\s*include\>\s*["<]" contains=embryoIncluded +syn cluster embryoPreProcGroup contains=embryoPreCondit,embryoIncluded,embryoInclude,embryoDefine,embryoErrInParen,embryoErrInBracket,embryoCommentSkip,embryoCommentString,embryoComment2String,@embryoCommentGroup,embryoCommentStartErr,embryoParen,embryoBracket,embryoMulti,embryoUserLabel +syn cluster embryoAlphaNum contains=embryoSpecial,embryoOctalZero,embryoFormat,embryoNumber,embryoFloat,embryoOctal,embryoOctalError,embryoNumbersCom,embryoString +syn region embryoDefine start="^\s*#\s*\(define\|undef\)\>" skip="\\$" end="$" end="//"me=s-1 contains=ALLBUT,@embryoPreProcGroup +syn region embryoPreProc start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@embryoPreProcGroup + +syn match embryoUserLabel display "\I\i*" contained + +syn match embryoFunctionName "\h\w*\s*\%((\@=\)" + +if exists("embryo_minlines") + let b:embryo_minlines = embryo_minlines +else + let b:embryo_minlines = 50 " #if 0 constructs can be long +endif +exec "syn sync ccomment embryoComment minlines=" . b:embryo_minlines +"syn sync fromstart + +" Define the default highlighting. +" For version 5.7 and earlier: only when not done already +" For version 5.8 and later: only when an item doesn't have highlighting yet +if version >= 508 || !exists("did_embryo_syn_inits") + if version < 508 + let did_embryo_syn_inits = 1 + command -nargs=+ HiLink hi link <args> + else + command -nargs=+ HiLink hi def link <args> + endif + + HiLink embryoFormat embryoSpecial + HiLink embryoCommentL embryoComment + HiLink embryoCommentStart embryoComment + HiLink embryoLabel Label + HiLink embryoUserLabel Label + HiLink embryoConditional Conditional + HiLink embryoRepeat Repeat + HiLink embryoBranch Conditional + HiLink embryoReserved Keyword + HiLink embryoCharacter Character + HiLink embryoSpecialCharacter cSpecial + HiLink embryoNumber Number + HiLink embryoOctal Number + HiLink embryoOctalZero PreProc " link this to Error if you want + HiLink embryoFloat Float + HiLink embryoOctalError embryoError + HiLink embryoParenError embryoError + HiLink embryoErrInParen embryoError + HiLink embryoErrInBracket embryoError + HiLink embryoCommentError embryoError + HiLink embryoCommentStartErr embryoError + HiLink embryoSpaceError embryoError + HiLink embryoSpecialError embryoError + HiLink embryoOperator Operator + HiLink embryoStructure Structure + HiLink embryoEdjeKey Structure + HiLink embryoStorageClass StorageClass + HiLink embryoInclude Include + HiLink embryoPreProc PreProc + HiLink embryoDefine Macro + HiLink embryoIncluded embryoString + HiLink embryoError Error + HiLink embryoStatement Statement + HiLink embryoPreCondit PreCondit + HiLink embryoType Type + HiLink embryoConstant Constant + HiLink embryoCommentString embryoString + HiLink embryoComment2String embryoString + HiLink embryoCommentSkip embryoComment + HiLink embryoString String + HiLink embryoComment Comment + HiLink embryoSpecial SpecialChar + HiLink embryoTodo Todo + HiLink embryoFunctionName Function + + delcommand HiLink +endif + +let b:current_syntax = "embryo" + +" vim: ts=8 |