Show:
                            /**
                             * The ACE Editor Velocity Plugin
                             *
                             * @module aui-ace-editor
                             * @submodule aui-ace-autocomplete-velocity
                             */
                            
                            var Lang = A.Lang,
                            
                                MATCH_DIRECTIVES = 0,
                                MATCH_VARIABLES = 1,
                            
                                /**
                                 * A base class for Velocity plugin.
                                 *
                                 * @class A.AceEditor.AutoCompleteVelocity
                                 * @extends A.AceEditor.TemplateProcessor
                                 * @param {Object} config Object literal specifying widget configuration
                                 *     properties.
                                 * @constructor
                                 */
                                Velocity = A.Base.create('aui-ace-autocomplete-velocity', A.AceEditor.TemplateProcessor, [], {
                            
                                    /**
                                     * Checks if the provided content contains directive or variable.
                                     *
                                     * @method getMatch
                                     * @param {String} content The content which should be traversed for
                                     *     matches
                                     * @return {Object} An Object which contains the following properties:
                                     * content - the found content
                                     * start - the start index of the match
                                     * type - match type, could be 0 (DIRECTIVES) or 1 (VARIABLES)
                                     */
                                    getMatch: function(content) {
                                        var instance = this,
                                            match,
                                            matchIndex;
                            
                                        if ((matchIndex = content.lastIndexOf('#')) >= 0) {
                                            content = content.substring(matchIndex);
                            
                                            if (instance.get('directivesMatcher').test(content)) {
                                                match = {
                                                    content: content.substring(1),
                                                    start: matchIndex,
                                                    type: MATCH_DIRECTIVES
                                                };
                                            }
                                        }
                                        else if ((matchIndex = content.lastIndexOf('$')) >= 0) {
                                            content = content.substring(matchIndex);
                            
                                            if (instance.get('variablesMatcher').test(content)) {
                                                match = {
                                                    content: content.substring(1),
                                                    start: matchIndex,
                                                    type: MATCH_VARIABLES
                                                };
                                            }
                                        }
                            
                                        return match;
                                    }
                                }, {
                            
                                    /**
                                     * Static property which provides a string to identify the class.
                                     *
                                     * @property NAME
                                     * @type String
                                     * @static
                                     */
                                    NAME: 'aui-ace-autocomplete-velocity',
                            
                                    /**
                                     * Static property provides a string to identify the namespace.
                                     *
                                     * @property NS
                                     * @type String
                                     * @static
                                     */
                                    NS: 'aui-ace-autocomplete-velocity',
                            
                                    /**
                                     * Static property used to define the default attribute
                                     * configuration for the Velocity.
                                     *
                                     * @property ATTRS
                                     * @type Object
                                     * @static
                                     */
                                    ATTRS: {
                            
                                        /**
                                         * Contains the list of supported directives according to Velocity
                                         * specification.
                                         *
                                         * @attribute directives
                                         * @default
                                         * value: [
                                         *  'else',
                                         *  'elseif',
                                         *  'foreach',
                                         *  'if',
                                         *  'include',
                                         *  'macro',
                                         *  'parse',
                                         *  'set',
                                         *  'stop'
                                         *]
                                         * @type Array
                                         */
                                        directives: {
                                            validator: Lang.isArray,
                                            value: [
                                                'else',
                                                'elseif',
                                                'foreach',
                                                'if',
                                                'include',
                                                'macro',
                                                'parse',
                                                'set',
                                                'stop'
                                           ]
                                        },
                            
                                        /**
                                         * Contains the regular expression which checks for directive.
                                         *
                                         * @attribute directivesMatcher
                                         * @default /#[\w]*[^#]*$/
                                         */
                                        directivesMatcher: {
                                            setter: '_setRegexValue',
                                            value: /#[\w]*[^#]*$/
                                        },
                            
                                        /**
                                         * The Editor in which the current instance is plugged.
                                         *
                                         * @attribute host
                                         * @type Object
                                         */
                                        host: {
                                            validator: Lang.isObject
                                        },
                            
                                        /**
                                         * Contains the supported variables.
                                         *
                                         * @attribute variables
                                         * @type Object
                                         */
                                        variables: {
                                            validator: Lang.isObject
                                        },
                            
                                        /**
                                         * Contains the regular expression which will check for variable
                                         * match.
                                         *
                                         * @attribute variablesMatcher
                                         * @default /\$[\w., ()"]*(?:[^$]|\\\$)*$/
                                         */
                                        variablesMatcher: {
                                            setter: '_setRegexValue',
                                            value: /\$[\w., ()"]*(?:[^$]|\\\$)*$/
                                        }
                                    }
                                });
                            
                            A.AceEditor.AutoCompleteVelocity = Velocity;