aboutsummaryrefslogtreecommitdiffstats
path: root/data
diff options
context:
space:
mode:
authorGustavo Sverzut Barbieri <barbieri@gmail.com>2013-01-04 02:08:14 +0000
committerGustavo Sverzut Barbieri <barbieri@gmail.com>2013-01-04 02:08:14 +0000
commit9ea2ce1041549c90f94062ce5ec145056e7fbdfa (patch)
tree3bcd3fb016bc498a72ff99c8d67c8b7ef2d91718 /data
parente2ce20e9a4dfd12bb383a1b60032f2ef7b507850 (diff)
downloadefl-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.am18
-rw-r--r--data/edje/edc.vim368
-rw-r--r--data/edje/edje-mode.el512
-rw-r--r--data/edje/edje.xml11
-rw-r--r--data/edje/include/edje.inc272
-rw-r--r--data/edje/vim/autoload/edccomplete.vim892
-rw-r--r--data/edje/vim/ftdetect/edc.vim3
-rw-r--r--data/edje/vim/ftplugin/edc.vim23
-rw-r--r--data/edje/vim/indent/edc.vim83
-rw-r--r--data/edje/vim/plugin-info.txt8
-rw-r--r--data/edje/vim/snippets/edc.snippets99
-rw-r--r--data/edje/vim/syntax/edc.vim235
-rw-r--r--data/edje/vim/syntax/embryo.vim195
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