Synced with upstream

master
Yevgen Muntyan 2007-06-09 06:57:30 -05:00
parent fb6fe1c916
commit bdbcd9152e
6 changed files with 568 additions and 320 deletions

View File

@ -104,11 +104,32 @@ _gtk_source_language_new_from_file (const gchar *filename,
}
if (lang != NULL)
{
lang->priv->language_manager = lm;
g_object_add_weak_pointer (G_OBJECT (lm),
(gpointer*) &lang->priv->language_manager);
}
return lang;
}
static void
gtk_source_language_dispose (GObject *object)
{
GtkSourceLanguage *lang;
lang = GTK_SOURCE_LANGUAGE (object);
if (lang->priv->language_manager != NULL)
{
g_object_remove_weak_pointer (G_OBJECT (lang->priv->language_manager),
(gpointer*) &lang->priv->language_manager);
lang->priv->language_manager = NULL;
}
G_OBJECT_CLASS (gtk_source_language_parent_class)->finalize (object);
}
static void
gtk_source_language_finalize (GObject *object)
{
@ -135,6 +156,7 @@ gtk_source_language_class_init (GtkSourceLanguageClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->dispose = gtk_source_language_dispose;
object_class->finalize = gtk_source_language_finalize;
g_type_class_add_private (object_class, sizeof(GtkSourceLanguagePrivate));
@ -534,23 +556,31 @@ _gtk_source_language_create_engine (GtkSourceLanguage *language)
gboolean success = FALSE;
GtkSourceContextData *ctx_data;
ctx_data = _gtk_source_context_data_new (language);
switch (language->priv->version)
if (language->priv->language_manager == NULL)
{
case GTK_SOURCE_LANGUAGE_VERSION_1_0:
success = _gtk_source_language_file_parse_version1 (language, ctx_data);
break;
case GTK_SOURCE_LANGUAGE_VERSION_2_0:
success = _gtk_source_language_file_parse_version2 (language, ctx_data);
break;
g_critical ("_gtk_source_language_create_engine() is called after "
"language manager was finalized");
}
if (!success)
_gtk_source_context_data_unref (ctx_data);
else
language->priv->ctx_data = ctx_data;
{
ctx_data = _gtk_source_context_data_new (language);
switch (language->priv->version)
{
case GTK_SOURCE_LANGUAGE_VERSION_1_0:
success = _gtk_source_language_file_parse_version1 (language, ctx_data);
break;
case GTK_SOURCE_LANGUAGE_VERSION_2_0:
success = _gtk_source_language_file_parse_version2 (language, ctx_data);
break;
}
if (!success)
_gtk_source_context_data_unref (ctx_data);
else
language->priv->ctx_data = ctx_data;
}
}
else
{

View File

@ -138,7 +138,6 @@ gtk_source_language_manager_init (GtkSourceLanguageManager *lm)
{
lm->priv = G_TYPE_INSTANCE_GET_PRIVATE (lm, GTK_TYPE_SOURCE_LANGUAGE_MANAGER,
GtkSourceLanguageManagerPrivate);
lm->priv = g_new0 (GtkSourceLanguageManagerPrivate, 1);
lm->priv->language_ids = NULL;
lm->priv->available_languages = NULL;
lm->priv->lang_dirs = NULL;

View File

@ -22,6 +22,7 @@
#include "gtksourcestylescheme.h"
#include "gtksourceview.h"
#include "gtksourcelanguage-private.h"
#include <gtk/gtk.h>
#include <string.h>
#define STYLE_HAS_FOREGROUND(s) ((s) && ((s)->mask & GTK_SOURCE_STYLE_USE_FOREGROUND))
@ -32,7 +33,9 @@
#define STYLE_BRACKET_MATCH "bracket-match"
#define STYLE_BRACKET_MISMATCH "bracket-mismatch"
#define STYLE_CURSOR "cursor"
#define STYLE_SECONDARY_CURSOR "secondary-cursor"
#define STYLE_CURRENT_LINE "current-line"
#define STYLE_LINE_NUMBERS "line-numbers"
enum {
PROP_0,
@ -355,17 +358,101 @@ set_text_style (GtkWidget *widget,
}
static void
set_cursor_color (GtkWidget *widget,
GtkSourceStyle *style)
set_line_numbers_style (GtkWidget *widget,
GtkSourceStyle *style)
{
GdkColor *color;
gint i;
GdkColor *fg = NULL;
GdkColor *bg = NULL;
if (style != NULL && STYLE_HAS_FOREGROUND (style))
color = &style->foreground;
else
color = &widget->style->text[GTK_STATE_NORMAL];
fg = &style->foreground;
if (style != NULL && STYLE_HAS_BACKGROUND (style))
bg = &style->background;
g_print ("implement me\n");
for (i = 0; i < 5; ++i)
{
gtk_widget_modify_fg (widget, i, fg);
gtk_widget_modify_bg (widget, i, bg);
}
}
static void
set_cursor_colors (GtkWidget *widget,
const GdkColor *primary,
const GdkColor *secondary)
{
#if !GTK_CHECK_VERSION(2,11,3)
char *rc_string;
char *widget_name;
widget_name = g_strdup_printf ("gtk-source-view-%p", (gpointer) widget);
if (strcmp (widget_name, gtk_widget_get_name (widget)) != 0)
gtk_widget_set_name (widget, widget_name);
rc_string = g_strdup_printf (
"style \"%p\"\n"
"{\n"
" GtkWidget::cursor-color = \"#%02x%02x%02x\"\n"
" GtkWidget::secondary-cursor-color = \"#%02x%02x%02x\"\n"
"}\n"
"widget \"*.%s\" style \"%p\"\n",
(gpointer) widget,
primary->red >> 8, primary->green >> 8, primary->blue >> 8,
secondary->red >> 8, secondary->green >> 8, secondary->blue >> 8,
widget_name,
(gpointer) widget
);
gtk_rc_parse_string (rc_string);
g_free (rc_string);
g_free (widget_name);
#else
gtk_widget_modify_cursor (widget, primary, secondary);
#endif
}
static void
unset_cursor_colors (GtkWidget *widget)
{
#if !GTK_CHECK_VERSION(2,11,3)
set_cursor_colors (widget,
&widget->style->text[GTK_STATE_NORMAL],
&widget->style->text_aa[GTK_STATE_NORMAL]);
#else
gtk_widget_modify_cursor (widget, NULL, NULL);
#endif
}
static void
update_cursor_colors (GtkWidget *widget,
GtkSourceStyle *style_primary,
GtkSourceStyle *style_secondary)
{
GdkColor color;
GdkColor *primary = NULL, *secondary = NULL;
if (style_primary != NULL && STYLE_HAS_FOREGROUND (style_primary))
primary = &style_primary->foreground;
if (style_secondary != NULL && STYLE_HAS_FOREGROUND (style_secondary))
secondary = &style_secondary->foreground;
if (primary != NULL && secondary == NULL)
{
GdkColor tmp = widget->style->base[GTK_STATE_NORMAL];
color.red = ((gint) tmp.red + primary->red) / 2;
color.green = ((gint) tmp.green + primary->green) / 2;
color.blue = ((gint) tmp.blue + primary->blue) / 2;
secondary = &color;
}
if (primary != NULL)
set_cursor_colors (widget, primary, secondary);
else
unset_cursor_colors (widget);
}
/**
@ -386,7 +473,7 @@ _gtk_source_style_scheme_apply (GtkSourceStyleScheme *scheme,
if (scheme != NULL)
{
GtkSourceStyle *style;
GtkSourceStyle *style, *style2;
gtk_widget_ensure_style (widget);
@ -401,8 +488,14 @@ _gtk_source_style_scheme_apply (GtkSourceStyleScheme *scheme,
set_text_style (widget, style, GTK_STATE_SELECTED);
gtk_source_style_free (style);
style = gtk_source_style_scheme_get_style (scheme, STYLE_LINE_NUMBERS);
set_line_numbers_style (widget, style);
gtk_source_style_free (style);
style = gtk_source_style_scheme_get_style (scheme, STYLE_CURSOR);
set_cursor_color (widget, style);
style2 = gtk_source_style_scheme_get_style (scheme, STYLE_SECONDARY_CURSOR);
update_cursor_colors (widget, style, style2);
gtk_source_style_free (style2);
gtk_source_style_free (style);
}
else
@ -412,7 +505,8 @@ _gtk_source_style_scheme_apply (GtkSourceStyleScheme *scheme,
set_text_style (widget, NULL, GTK_STATE_PRELIGHT);
set_text_style (widget, NULL, GTK_STATE_INSENSITIVE);
set_text_style (widget, NULL, GTK_STATE_SELECTED);
set_cursor_color (widget, NULL);
set_line_numbers_style (widget, NULL);
unset_cursor_colors (widget);
}
}

View File

@ -1,110 +1,215 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE language SYSTEM "language.dtd">
<language _name="Objective Caml" version="1.0" _section="Sources" mimetypes="text/x-ocaml">
<!-- vim: set sts=2 sw=2: -->
<language id="objective-caml" _name="Objective Caml" version="2.0" _section="Sources">
<metadata>
<property name="mimetypes">text/x-ocaml</property>
<property name="globs">*.ml;*.mli;*.mll;*.mly</property>
<property name="block-comment-start">(*</property>
<property name="block-comment-end">*)</property>
</metadata>
<escape-char>\</escape-char>
<styles>
<style id="comment" _name="Comment" map-to="def:comment"/>
<style id="ocamldoc" _name="Ocamldoc Comments" map-to="def:note"/>
<style id="base-n-integer" _name="Base-N Integer" map-to="def:base-n-integer"/>
<style id="floating-point" _name="Floating Point" map-to="def:floating-point"/>
<style id="decimal" _name="Decimal" map-to="def:decimal"/>
<style id="string" _name="String" map-to="def:string"/>
<style id="keyword" _name="Keyword" map-to="def:keyword"/>
<style id="meta-keyword" _name="Type, module or object keyword" map-to="def:keyword"/>
<style id="fun-keyword" _name="Builtin-function keyword" map-to="def:keyword"/>
<style id="data-type" _name="Data Type" map-to="def:data-type"/>
<style id="label" _name="Labeled argument" map-to="def:data-type"/>
<style id="poly-variant" _name="Polymorphic Variant" map-to="def:data-type"/>
<style id="variant" _name="Variant Constructor" map-to="def:data-type"/>
<style id="type-var" _name="Type Variable" map-to="def:data-type"/>
<style id="module" _name="Module Path" map-to="def:data-type"/>
<style id="escape" _name="String/Char escape" map-to="def:escape"/>
<style id="boolean" _name="Boolean constant" map-to="def:string"/>
<style id="error" _name="Error" map-to="def:error"/>
</styles>
<block-comment _name = "Comment" style = "Comment">
<start-regex>\(\*</start-regex>
<end-regex>\*\)</end-regex>
</block-comment>
<pattern-item _name = "Decimal" style = "Decimal">
<regex>\b[-]?[0-9][0-9_]*[lLn]?\b</regex>
</pattern-item>
<pattern-item _name = "Hex Number" style = "Base-N Integer">
<regex>\b[-]?0[xX][0-9A-Fa-f][0-9A-Fa-f_]*[lL]?\b</regex>
</pattern-item>
<pattern-item _name = "Octal Number" style = "Base-N Integer">
<regex>\b[-]?0[oO][0-7][0-7_]*[lL]?\b</regex>
</pattern-item>
<pattern-item _name = "Binary Number" style = "Base-N Integer">
<regex>\b[-]?0[bB][01][01_]*[lL]?\b</regex>
</pattern-item>
<pattern-item _name = "Floating Point Number" style = "Floating Point">
<regex>\b[-]?[0-9][0-9_]*(\.[0-9_]*)?([Ee][+-]?[0-9][0-9_]*)?</regex>
</pattern-item>
<string _name = "Character Constant" style = "String" end-at-line-end = "TRUE">
<start-regex>&apos;</start-regex>
<end-regex>&apos;</end-regex>
</string>
<string _name = "String" style = "String" end-at-line-end = "FALSE">
<start-regex>&quot;</start-regex>
<end-regex>&quot;</end-regex>
</string>
<keyword-list _name = "Boolean Constant" style = "String" case-sensitive="FALSE">
<keyword>true</keyword>
<keyword>false</keyword>
</keyword-list>
<pattern-item _name = "Module" style = "Data Type">
<regex>\b[A-Z][A-Za-z0-9_']*</regex>
</pattern-item>
<pattern-item _name = "Label" style = "Data Type">
<regex>[~?][a-z][A-Za-z0-9_']*</regex>
</pattern-item>
<keyword-list _name = "Keywords" style = "Keyword" case-sensitive="TRUE">
<keyword>and</keyword>
<keyword>as</keyword>
<keyword>assert</keyword>
<keyword>asr</keyword>
<keyword>begin</keyword>
<keyword>class</keyword>
<keyword>constraint</keyword>
<keyword>do</keyword>
<keyword>done</keyword>
<keyword>downto</keyword>
<keyword>else</keyword>
<keyword>end</keyword>
<keyword>exception</keyword>
<keyword>external</keyword>
<keyword>for</keyword>
<keyword>fun</keyword>
<keyword>function</keyword>
<keyword>functor</keyword>
<keyword>if</keyword>
<keyword>in</keyword>
<keyword>include</keyword>
<keyword>inherit</keyword>
<keyword>initializer</keyword>
<keyword>land</keyword>
<keyword>lazy</keyword>
<keyword>let</keyword>
<keyword>lor</keyword>
<keyword>lsl</keyword>
<keyword>lsr</keyword>
<keyword>lxor</keyword>
<keyword>match</keyword>
<keyword>method</keyword>
<keyword>mod</keyword>
<keyword>module</keyword>
<keyword>mutable</keyword>
<keyword>new</keyword>
<keyword>object</keyword>
<keyword>of</keyword>
<keyword>open</keyword>
<keyword>or</keyword>
<keyword>private</keyword>
<keyword>rec</keyword>
<keyword>sig</keyword>
<keyword>struct</keyword>
<keyword>then</keyword>
<keyword>to</keyword>
<keyword>try</keyword>
<keyword>type</keyword>
<keyword>val</keyword>
<keyword>virtual</keyword>
<keyword>when</keyword>
<keyword>while</keyword>
<keyword>with</keyword>
</keyword-list>
<definitions>
<define-regex id="cap-ident">[A-Z][A-Za-z0-9_']*</define-regex>
<define-regex id="low-ident">[a-z][A-Za-z0-9_']*</define-regex>
<define-regex id="char-esc">\\((\\|"|'|n|t|b|r)|[0-9]{3}|x[0-9a-fA-F]{2})</define-regex>
<context id="escape-seq" style-ref="escape">
<match>\%{char-esc}</match>
</context>
<!-- here's the main context -->
<context id="objective-caml">
<include>
<context id="ocamldoc" style-ref="ocamldoc">
<start>\(\*\*</start>
<end>\*\)</end>
<include>
<context id="comment-in-comment" style-ref="comment">
<start>\(\*</start>
<end>\*\)</end>
<include>
<context ref="string"/>
<context ref="comment-in-comment"/>
<context ref="def:in-comment:*"/>
</include>
</context>
<context ref="string"/>
<context ref="def:in-comment:*"/>
</include>
</context>
<context id="comment" style-ref="comment">
<start>\(\*</start>
<end>\*\)</end>
<include>
<context ref="string"/>
<context ref="comment-in-comment"/>
<context ref="def:in-comment:*"/>
</include>
</context>
<context id="decimal" style-ref="decimal">
<match>[-]?[0-9][0-9_]*[lLn]?</match>
</context>
<context id="hex-number" style-ref="base-n-integer">
<match>[-]?0[xX][0-9A-Fa-f][0-9A-Fa-f_]*[lL]?</match>
</context>
<context id="octal-number" style-ref="base-n-integer">
<match>[-]?0[oO][0-7][0-7_]*[lL]?</match>
</context>
<context id="binary-number" style-ref="base-n-integer">
<match>[-]?0[bB][01][01_]*[lL]?</match>
</context>
<context id="floating-point-number" style-ref="floating-point">
<match>[-]?[0-9][0-9_]*(\.[0-9_]*)?([Ee][+-]?[0-9][0-9_]*)?</match>
</context>
<context id="label" style-ref="label">
<match>[~?]\%{low-ident}</match>
</context>
<context id="poly-variant" style-ref="poly-variant">
<match>`\%{cap-ident}</match>
</context>
<context id="modpath" style-ref="module">
<!-- include final '.'? At the moment, no. -->
<match>\%{cap-ident}(\.\%{cap-ident})*(?=\.)</match>
</context>
<context id="variant" style-ref="variant">
<match>\%{cap-ident}</match>
</context>
<context id="string" style-ref="string">
<start>"</start>
<end>"</end>
<include>
<context ref="escape-seq"/>
</include>
</context>
<context id="character-constant" style-ref="string">
<match>('\%{char-esc}')|('[^\\']')</match>
</context>
<context id="type-var" style-ref="type-var">
<match>'\%{low-ident}</match>
</context>
<context id="arraylit">
<start>\[\|</start>
<end>\|\]</end>
<include>
<context ref="objective-caml"/>
</include>
</context>
<context id="badarray" style-ref="error" extend-parent="false">
<match>\|\]</match>
</context>
<context id="listlit">
<start>\[</start>
<end>(?&lt;!\|)\]</end>
<include>
<context ref="objective-caml"/>
</include>
</context>
<context id="badlist" style-ref="error" extend-parent="false">
<match>\]</match>
</context>
<context id="boolean-constant" style-ref="boolean">
<keyword>true</keyword>
<keyword>false</keyword>
</context>
<!-- Flow control & common keywords -->
<context id="keywords" style-ref="keyword">
<keyword>and</keyword>
<keyword>assert</keyword>
<keyword>begin</keyword>
<keyword>do</keyword>
<keyword>done</keyword>
<keyword>downto</keyword>
<keyword>else</keyword>
<keyword>end</keyword>
<keyword>for</keyword>
<keyword>fun</keyword>
<keyword>function</keyword>
<keyword>if</keyword>
<keyword>in</keyword>
<keyword>let</keyword>
<keyword>match</keyword>
<keyword>rec</keyword>
<keyword>then</keyword>
<keyword>to</keyword>
<keyword>try</keyword>
<keyword>val</keyword>
<keyword>when</keyword>
<keyword>while</keyword>
<keyword>with</keyword>
</context>
<!-- types, objects and modules -->
<context id="meta-words" style-ref="meta-keyword">
<keyword>as</keyword>
<keyword>class</keyword>
<keyword>constraint</keyword>
<keyword>exception</keyword>
<keyword>external</keyword>
<keyword>functor</keyword>
<keyword>include</keyword>
<keyword>inherit</keyword>
<keyword>initializer</keyword>
<keyword>method</keyword>
<keyword>module</keyword>
<keyword>mutable</keyword>
<keyword>new</keyword>
<keyword>object</keyword>
<keyword>of</keyword>
<keyword>open</keyword>
<keyword>private</keyword>
<keyword>struct</keyword>
<keyword>sig</keyword>
<keyword>type</keyword>
<keyword>virtual</keyword>
</context>
<context id="function-keywords" style-ref="fun-keyword">
<!-- function-like keywords -->
<keyword>asr</keyword>
<keyword>land</keyword>
<keyword>lazy</keyword>
<keyword>lor</keyword>
<keyword>lsl</keyword>
<keyword>lsr</keyword>
<keyword>lxor</keyword>
<keyword>mod</keyword>
<keyword>or</keyword>
<!-- from pervasives, but same as others -->
<keyword>lnot</keyword>
</context>
<context id="types" style-ref="data-type">
<!-- pervasives types -->
<keyword>option</keyword>
<keyword>ignore</keyword>
<keyword>ref</keyword>
<keyword>array</keyword>
<keyword>bool</keyword>
<keyword>char</keyword>
<keyword>float</keyword>
<keyword>int</keyword>
<keyword>list</keyword>
<keyword>string</keyword>
<keyword>unit</keyword>
<!-- note: Some and None are highlighted as variants -->
</context>
</include>
</context>
</definitions>
</language>

View File

@ -7,11 +7,12 @@
</metadata>
<styles>
<style id="comment" name="Comment" map-to="def:comment"/>
<style id="data-type" name="Data Type" map-to="def:data-type"/>
<style id="string" name="String" map-to="def:string"/>
<style id="keyword" name="Keyword" map-to="def:keyword"/>
<style id="others" name="Others"/>
<style id="comment" _name="Comment" map-to="def:comment"/>
<style id="data-type" _name="Data Type" map-to="def:data-type"/>
<style id="string" _name="String" map-to="def:string"/>
<style id="keyword" _name="Keyword" map-to="def:keyword"/>
<style id="operator" _name="Operator" map-to="def:keyword"/>
<style id="others" _name="Others"/>
</styles>
<definitions>
@ -66,221 +67,239 @@
<match>-&gt;[a-zA-Z_][a-zA-Z0-9_]*</match>
</context>
<context id="keywords" style-ref="keyword">
<context id="operators" style-ref="operator">
<keyword>and</keyword>
<keyword>cmp</keyword>
<keyword>eq</keyword>
<keyword>ge</keyword>
<keyword>gt</keyword>
<keyword>le</keyword>
<keyword>lt</keyword>
<keyword>m</keyword>
<keyword>ne</keyword>
<keyword>not</keyword>
<keyword>or</keyword>
<keyword>read</keyword>
<keyword>keys</keyword>
<keyword>chomp</keyword>
<keyword>if</keyword>
<keyword>else</keyword>
<keyword>elsif</keyword>
<keyword>unless</keyword>
<keyword>open</keyword>
<keyword>close</keyword>
<keyword>split</keyword>
<keyword>for</keyword>
<keyword>while</keyword>
<keyword>foreach</keyword>
<keyword>exit</keyword>
<keyword>sub</keyword>
<keyword>print</keyword>
<keyword>use</keyword>
<keyword>require</keyword>
<keyword>elseif</keyword>
<keyword>continue</keyword>
<keyword>until</keyword>
<keyword>do</keyword>
<keyword>last</keyword>
<keyword>next</keyword>
<keyword>redo</keyword>
<keyword>goto</keyword>
<keyword>chop</keyword>
<keyword>chr</keyword>
<keyword>crypt</keyword>
<keyword>hex</keyword>
<keyword>index</keyword>
<keyword>lc</keyword>
<keyword>lcfirst</keyword>
<keyword>length</keyword>
<keyword>oct</keyword>
<keyword>ord</keyword>
<keyword>reverse</keyword>
<keyword>rindex</keyword>
<keyword>printf</keyword>
<keyword>sprintf</keyword>
<keyword>substr</keyword>
<keyword>uc</keyword>
<keyword>ucfirst</keyword>
<keyword>pos</keyword>
<keyword>quotemeta</keyword>
<keyword>study</keyword>
<keyword>q</keyword>
<keyword>qq</keyword>
<keyword>qr</keyword>
<keyword>qw</keyword>
<keyword>qx</keyword>
<keyword>s</keyword>
<keyword>tr</keyword>
<keyword>xor</keyword>
</context>
<context id="keywords" style-ref="keyword">
<keyword>abs</keyword>
<keyword>accept</keyword>
<keyword>alarm</keyword>
<keyword>atan2</keyword>
<keyword>cos</keyword>
<keyword>exp</keyword>
<keyword>int</keyword>
<keyword>log</keyword>
<keyword>rand</keyword>
<keyword>sin</keyword>
<keyword>sqrt</keyword>
<keyword>srand</keyword>
<keyword>pop</keyword>
<keyword>push</keyword>
<keyword>shift</keyword>
<keyword>splice</keyword>
<keyword>unshift</keyword>
<keyword>grep</keyword>
<keyword>join</keyword>
<keyword>map</keyword>
<keyword>sort</keyword>
<keyword>unpack</keyword>
<keyword>pack</keyword>
<keyword>delete</keyword>
<keyword>each</keyword>
<keyword>exists</keyword>
<keyword>values</keyword>
<keyword>bind</keyword>
<keyword>binmode</keyword>
<keyword>closedir</keyword>
<keyword>dbmclose</keyword>
<keyword>dbmopen</keyword>
<keyword>die</keyword>
<keyword>eof</keyword>
<keyword>fileno</keyword>
<keyword>flock</keyword>
<keyword>format</keyword>
<keyword>getc</keyword>
<keyword>readdir</keyword>
<keyword>rewinddir</keyword>
<keyword>seek</keyword>
<keyword>seekdir</keyword>
<keyword>select</keyword>
<keyword>syscall</keyword>
<keyword>sysread</keyword>
<keyword>sysseek</keyword>
<keyword>syswrite</keyword>
<keyword>tell</keyword>
<keyword>telldir</keyword>
<keyword>truncate</keyword>
<keyword>warn</keyword>
<keyword>write</keyword>
<keyword>vec</keyword>
<keyword>bless</keyword>
<keyword>caller</keyword>
<keyword>chdir</keyword>
<keyword>chmod</keyword>
<keyword>chomp</keyword>
<keyword>chop</keyword>
<keyword>chown</keyword>
<keyword>chr</keyword>
<keyword>chroot</keyword>
<keyword>fcntl</keyword>
<keyword>glob</keyword>
<keyword>ioctl</keyword>
<keyword>link</keyword>
<keyword>lstat</keyword>
<keyword>mkdir</keyword>
<keyword>opendir</keyword>
<keyword>readlink</keyword>
<keyword>rename</keyword>
<keyword>rmdir</keyword>
<keyword>stat</keyword>
<keyword>symlink</keyword>
<keyword>umask</keyword>
<keyword>unlink</keyword>
<keyword>utime</keyword>
<keyword>caller</keyword>
<keyword>dump</keyword>
<keyword>eval</keyword>
<keyword>return</keyword>
<keyword>wantarray</keyword>
<keyword>import</keyword>
<keyword>local</keyword>
<keyword>my</keyword>
<keyword>our</keyword>
<keyword>package</keyword>
<keyword>closedir</keyword>
<keyword>close</keyword>
<keyword>connect</keyword>
<keyword>continue</keyword>
<keyword>cos</keyword>
<keyword>crypt</keyword>
<keyword>dbmclose</keyword>
<keyword>dbmopen</keyword>
<keyword>defined</keyword>
<keyword>formline</keyword>
<keyword>prototype</keyword>
<keyword>reset</keyword>
<keyword>scalar</keyword>
<keyword>undef</keyword>
<keyword>alarm</keyword>
<keyword>delete</keyword>
<keyword>die</keyword>
<keyword>do</keyword>
<keyword>dump</keyword>
<keyword>each</keyword>
<keyword>elseif</keyword>
<keyword>else</keyword>
<keyword>elsif</keyword>
<keyword>endgrent</keyword>
<keyword>endhostent</keyword>
<keyword>endnetent</keyword>
<keyword>endprotoent</keyword>
<keyword>endpwent</keyword>
<keyword>endservent</keyword>
<keyword>eof</keyword>
<keyword>eval</keyword>
<keyword>exec</keyword>
<keyword>exists</keyword>
<keyword>exit</keyword>
<keyword>exp</keyword>
<keyword>fcntl</keyword>
<keyword>fileno</keyword>
<keyword>flock</keyword>
<keyword>foreach</keyword>
<keyword>for</keyword>
<keyword>fork</keyword>
<keyword>format</keyword>
<keyword>formline</keyword>
<keyword>getc</keyword>
<keyword>getgrent</keyword>
<keyword>getgrgid</keyword>
<keyword>getgrnam</keyword>
<keyword>gethostbyaddr</keyword>
<keyword>gethostbyname</keyword>
<keyword>gethostent</keyword>
<keyword>getlogin</keyword>
<keyword>getnetbyaddr</keyword>
<keyword>getnetbyname</keyword>
<keyword>getnetent</keyword>
<keyword>getpeername</keyword>
<keyword>getpgrp</keyword>
<keyword>getppid</keyword>
<keyword>getpriority</keyword>
<keyword>kill</keyword>
<keyword>pipe</keyword>
<keyword>setpgrp</keyword>
<keyword>setpriority</keyword>
<keyword>sleep</keyword>
<keyword>system</keyword>
<keyword>times</keyword>
<keyword>wait</keyword>
<keyword>waitpid</keyword>
<keyword>no</keyword>
<keyword>bless</keyword>
<keyword>ref</keyword>
<keyword>tie</keyword>
<keyword>tied</keyword>
<keyword>untie</keyword>
<keyword>accept</keyword>
<keyword>bind</keyword>
<keyword>connect</keyword>
<keyword>getpeername</keyword>
<keyword>getprotobyname</keyword>
<keyword>getprotobynumber</keyword>
<keyword>getprotoent</keyword>
<keyword>getpwent</keyword>
<keyword>getpwnam</keyword>
<keyword>getpwuid</keyword>
<keyword>getservbyname</keyword>
<keyword>getservbyport</keyword>
<keyword>getservent</keyword>
<keyword>getsockname</keyword>
<keyword>getsockopt</keyword>
<keyword>glob</keyword>
<keyword>gmtime</keyword>
<keyword>goto</keyword>
<keyword>grep</keyword>
<keyword>hex</keyword>
<keyword>if</keyword>
<keyword>import</keyword>
<keyword>index</keyword>
<keyword>int</keyword>
<keyword>ioctl</keyword>
<keyword>join</keyword>
<keyword>keys</keyword>
<keyword>kill</keyword>
<keyword>last</keyword>
<keyword>lcfirst</keyword>
<keyword>lc</keyword>
<keyword>length</keyword>
<keyword>link</keyword>
<keyword>listen</keyword>
<keyword>recv</keyword>
<keyword>send</keyword>
<keyword>setsockopt</keyword>
<keyword>shutdown</keyword>
<keyword>socket</keyword>
<keyword>socketpair</keyword>
<keyword>local</keyword>
<keyword>localtime</keyword>
<keyword>log</keyword>
<keyword>lstat</keyword>
<keyword>map</keyword>
<keyword>mkdir</keyword>
<keyword>msgctl</keyword>
<keyword>msgget</keyword>
<keyword>msgrcv</keyword>
<keyword>msgsnd</keyword>
<keyword>my</keyword>
<keyword>next</keyword>
<keyword>no</keyword>
<keyword>oct</keyword>
<keyword>opendir</keyword>
<keyword>open</keyword>
<keyword>ord</keyword>
<keyword>our</keyword>
<keyword>package</keyword>
<keyword>pack</keyword>
<keyword>pipe</keyword>
<keyword>pop</keyword>
<keyword>pos</keyword>
<keyword>printf</keyword>
<keyword>print</keyword>
<keyword>prototype</keyword>
<keyword>push</keyword>
<keyword>quotemeta</keyword>
<keyword>rand</keyword>
<keyword>readdir</keyword>
<keyword>read</keyword>
<keyword>readlink</keyword>
<keyword>recv</keyword>
<keyword>redo</keyword>
<keyword>ref</keyword>
<keyword>rename</keyword>
<keyword>require</keyword>
<keyword>reset</keyword>
<keyword>return</keyword>
<keyword>reverse</keyword>
<keyword>rewinddir</keyword>
<keyword>rindex</keyword>
<keyword>rmdir</keyword>
<keyword>scalar</keyword>
<keyword>seekdir</keyword>
<keyword>seek</keyword>
<keyword>select</keyword>
<keyword>semctl</keyword>
<keyword>semget</keyword>
<keyword>semop</keyword>
<keyword>send</keyword>
<keyword>setgrent</keyword>
<keyword>sethostent</keyword>
<keyword>setnetent</keyword>
<keyword>setpgrp</keyword>
<keyword>setpriority</keyword>
<keyword>setprotoent</keyword>
<keyword>setpwent</keyword>
<keyword>setservent</keyword>
<keyword>setsockopt</keyword>
<keyword>shift</keyword>
<keyword>shmctl</keyword>
<keyword>shmget</keyword>
<keyword>shmread</keyword>
<keyword>shmwrite</keyword>
<keyword>endgrent</keyword>
<keyword>endhostent</keyword>
<keyword>endnetent</keyword>
<keyword>endpwent</keyword>
<keyword>getgrent</keyword>
<keyword>getgrgid</keyword>
<keyword>getgrnam</keyword>
<keyword>getlogin</keyword>
<keyword>getpwent</keyword>
<keyword>getpwnam</keyword>
<keyword>getpwuid</keyword>
<keyword>setgrent</keyword>
<keyword>setpwent</keyword>
<keyword>endprotoent</keyword>
<keyword>endservent</keyword>
<keyword>gethostbyaddr</keyword>
<keyword>gethostbyname</keyword>
<keyword>gethostent</keyword>
<keyword>getnetbyaddr</keyword>
<keyword>getnetbyname</keyword>
<keyword>getnetent</keyword>
<keyword>getprotobyname</keyword>
<keyword>getprotobynumber</keyword>
<keyword>getprotoent</keyword>
<keyword>getservbyname</keyword>
<keyword>getservbyport</keyword>
<keyword>getservent</keyword>
<keyword>sethostent</keyword>
<keyword>setnetent</keyword>
<keyword>setprotoent</keyword>
<keyword>setservent</keyword>
<keyword>gmtime</keyword>
<keyword>localtime</keyword>
<keyword>shutdown</keyword>
<keyword>sin</keyword>
<keyword>sleep</keyword>
<keyword>socket</keyword>
<keyword>socketpair</keyword>
<keyword>sort</keyword>
<keyword>splice</keyword>
<keyword>split</keyword>
<keyword>sprintf</keyword>
<keyword>sqrt</keyword>
<keyword>srand</keyword>
<keyword>stat</keyword>
<keyword>study</keyword>
<keyword>sub</keyword>
<keyword>substr</keyword>
<keyword>symlink</keyword>
<keyword>syscall</keyword>
<keyword>sysread</keyword>
<keyword>sysseek</keyword>
<keyword>system</keyword>
<keyword>syswrite</keyword>
<keyword>telldir</keyword>
<keyword>tell</keyword>
<keyword>tied</keyword>
<keyword>tie</keyword>
<keyword>time</keyword>
<keyword>times</keyword>
<keyword>truncate</keyword>
<keyword>ucfirst</keyword>
<keyword>uc</keyword>
<keyword>umask</keyword>
<keyword>undef</keyword>
<keyword>unless</keyword>
<keyword>unlink</keyword>
<keyword>unpack</keyword>
<keyword>unshift</keyword>
<keyword>untie</keyword>
<keyword>until</keyword>
<keyword>use</keyword>
<keyword>utime</keyword>
<keyword>values</keyword>
<keyword>vec</keyword>
<keyword>wait</keyword>
<keyword>waitpid</keyword>
<keyword>wantarray</keyword>
<keyword>warn</keyword>
<keyword>while</keyword>
<keyword>write</keyword>
</context>
<context id="perl">
@ -294,6 +313,7 @@
<context ref="variables"/>
<context ref="function-call"/>
<context ref="method-call"/>
<context ref="operators"/>
<context ref="keywords"/>
</include>
</context>

View File

@ -26,7 +26,7 @@
</context>
<context end-at-line-end="true">
<start>^([\w_]+)\s*\:\s*</start>
<start>^([\w_\.]+)\s*\:\s*</start>
<include>
<context sub-pattern="1" where="start" style-ref="info"/>
<context ref="var-value"/>