editor/geshi/create-pawn-geshi.pl
author Nicholas Hastings <skamonkey@gmail.com>
Wed May 25 13:31:14 2011 -0400 (2011-05-25)
changeset 3285 065beec73902
parent 3116 98fac242ab40
permissions -rw-r--r--
Backed out changeset: 65eb3df32b1c
skamonkey@2944
     1
use File::Glob;
skamonkey@2944
     2
skamonkey@2944
     3
my $output = <<EOF;
skamonkey@2944
     4
<?php
skamonkey@2944
     5
/**
skamonkey@2944
     6
 * =============================================================================
skamonkey@2944
     7
 * SourcePawn GeSHi Syntax File
skamonkey@2944
     8
 * Copyright (C) 2010 AlliedModders LLC
skamonkey@2944
     9
 * INC parser originally by Zach "theY4Kman" Kanzler,
skamonkey@2944
    10
 *     ported to perl and enhanced by Nicholas "psychonic" Hastings
skamonkey@2944
    11
 * =============================================================================
skamonkey@2944
    12
 *
skamonkey@2944
    13
 * This program is free software; you can redistribute it and/or modify it under
skamonkey@2944
    14
 * the terms of the GNU General Public License, version 3.0, as published by the
skamonkey@2944
    15
 * Free Software Foundation.
skamonkey@2944
    16
 * 
skamonkey@2944
    17
 * This program is distributed in the hope that it will be useful, but WITHOUT
skamonkey@2944
    18
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
skamonkey@2944
    19
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
skamonkey@2944
    20
 * details.
skamonkey@2944
    21
 *
skamonkey@2944
    22
 * You should have received a copy of the GNU General Public License along with
skamonkey@2944
    23
 * this program.  If not, see <http://www.gnu.org/licenses/>.
skamonkey@2944
    24
 */
skamonkey@2944
    25
skamonkey@2944
    26
\$language_data = array(
skamonkey@2948
    27
	'LANG_NAME' => 'SourcePawn',
skamonkey@2948
    28
	'COMMENT_SINGLE' => array(1 => '//'),
skamonkey@2948
    29
	'COMMENT_MULTI' => array("/*" => "*/"),
skamonkey@2948
    30
	'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
skamonkey@2948
    31
	'QUOTEMARKS' => array('"','\\''),
skamonkey@2948
    32
	'ESCAPE_CHAR' => '\\\\',
skamonkey@2948
    33
	'ESCAPE_REGEXP' => array(
skamonkey@2948
    34
		1 => "#\\\\\\\\x[\\da-fA-F]{1,2}#",
skamonkey@2948
    35
		2 => "#\\\\\\\\b[01]{1,8}#",
skamonkey@2948
    36
		3 => "#%[%sdif%NLbxXtTc]#",
skamonkey@2948
    37
		),
skamonkey@2948
    38
	'SYMBOLS' => array(
skamonkey@2948
    39
		0 => array(';'),
skamonkey@2944
    40
		// Assignment operators
skamonkey@2948
    41
		1 => array('=', '+=', '-=', '/=', '*=', '&=', '|=', '~=', '^='),
skamonkey@2944
    42
		// Comparison and logical operators
skamonkey@2948
    43
		2 => array('==', '!=', '&&', '||', '>', '<', '<=', '>='),
skamonkey@2944
    44
		// Other operators
skamonkey@2948
    45
		3 => array('+', '-', '*', '/', '|', '&', '~', '++', '--', '^', '%%', '!'),
skamonkey@2944
    46
		),
skamonkey@2948
    47
	'KEYWORDS' => array(
skamonkey@2944
    48
		// Reserved words
skamonkey@2944
    49
		1 => array(
skamonkey@2948
    50
			'for', 'if', 'else', 'do', 'while', 'switch', 'case', 'return',
skamonkey@2948
    51
			'break', 'continue', 'new', 'decl', 'public', 'stock', 'const',
skamonkey@2948
    52
			'enum', 'forward', 'static', 'funcenum', 'functag', 'native',
skamonkey@2974
    53
			'sizeof', 'true', 'false', 'default',
skamonkey@2944
    54
			),
skamonkey@2944
    55
		// Tags
skamonkey@2944
    56
		2 => array(
skamonkey@2948
    57
			'Action', 'bool', 'Float', 'Plugin', 'String', 'any',
skamonkey@2944
    58
			__tags__
skamonkey@2944
    59
			),
skamonkey@2944
    60
		// Natives
skamonkey@2944
    61
		3 => array(
skamonkey@2944
    62
			__natives__
skamonkey@2944
    63
			),
skamonkey@2944
    64
		// Forwards
skamonkey@2944
    65
		4 => array(
skamonkey@2944
    66
			__forwards__
skamonkey@2944
    67
			),
skamonkey@2944
    68
		// Defines
skamonkey@2944
    69
		5 => array(
skamonkey@2948
    70
			'MaxClients',
skamonkey@2944
    71
			__defines__
skamonkey@2944
    72
			),
skamonkey@2944
    73
		),
skamonkey@2948
    74
	'NUMBERS' => array(
skamonkey@2948
    75
		GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_FLT_NONSCI | GESHI_NUMBER_BIN_PREFIX_0B | GESHI_NUMBER_HEX_PREFIX
skamonkey@2948
    76
		),
skamonkey@2948
    77
	'TAB_WIDTH' => 4,
skamonkey@2948
    78
	'CASE_SENSITIVE' => array(
skamonkey@2948
    79
		1 => true,
skamonkey@2948
    80
		2 => true,
skamonkey@2948
    81
		3 => true,
skamonkey@2948
    82
		4 => true,
skamonkey@2948
    83
		5 => true
skamonkey@2948
    84
		),
skamonkey@2948
    85
	'REGEXPS' => array(
skamonkey@2948
    86
		0 => array(
skamonkey@2948
    87
			GESHI_SEARCH => '(#include\\s+)(&lt;\\w+&gt;)',
skamonkey@2948
    88
			GESHI_REPLACE => '\\\\2',
skamonkey@2948
    89
			GESHI_BEFORE => '\\\\1',
skamonkey@2948
    90
			),
skamonkey@2948
    91
		1 => array(
skamonkey@2948
    92
			GESHI_SEARCH => '(#\\w+)(\\s+)',
skamonkey@2948
    93
			GESHI_REPLACE => '\\\\1',
skamonkey@3116
    94
			GESHI_AFTER => '\\\\2'
skamonkey@2948
    95
			),
skamonkey@2948
    96
		),
skamonkey@2948
    97
	'STYLES' => array(
skamonkey@3116
    98
		'KEYWORDS' => array(
skamonkey@3116
    99
			1 => 'color: #0000EE; font-weight: bold;',
skamonkey@3116
   100
			2 => 'color: #218087; font-weight: bold;',
skamonkey@3116
   101
			3 => 'color: #000040;',
skamonkey@3116
   102
			4 => 'color: #000040;',
skamonkey@3116
   103
			5 => 'color: #8000FF;',
skamonkey@3116
   104
			),
skamonkey@3116
   105
		'COMMENTS' => array(
skamonkey@3116
   106
			1 => 'color: #006600; font-style: italic;',
skamonkey@3116
   107
			'MULTI' => 'color: #006600; font-style: italic;',
skamonkey@3116
   108
			),
skamonkey@3116
   109
		'ESCAPE_CHAR' => array(
skamonkey@3116
   110
			0 => 'color: #ff00ff;',
skamonkey@2948
   111
			1 => 'color: #ff00ff;',
skamonkey@2948
   112
			2 => 'color: #ff00ff;',
skamonkey@2948
   113
			3 => 'color: #ff00ff;',
skamonkey@3116
   114
			),
skamonkey@3116
   115
		'SYMBOLS' => array(
skamonkey@3116
   116
			0 => 'color: #1B5B00; font-weight: bold;',
skamonkey@3116
   117
			1 => 'color: #1B5B00;',
skamonkey@3116
   118
			2 => 'color: #1B5B00;',
skamonkey@3116
   119
			3 => 'color: #1B5B00;',
skamonkey@3116
   120
			),
skamonkey@3116
   121
		'STRINGS' => array(
skamonkey@3116
   122
			0 => 'color: #B90000;',
skamonkey@3116
   123
			),
skamonkey@3116
   124
		'BRACKETS' => array(
skamonkey@3116
   125
			0 => 'color: #1B5B00; font-weight: bold;',
skamonkey@3116
   126
			),
skamonkey@3116
   127
		'NUMBERS' => array(
skamonkey@3116
   128
			0 => 'color: #AE5700;',
skamonkey@3116
   129
			),
skamonkey@2948
   130
		'REGEXPS' => array(
skamonkey@2948
   131
			0 => 'color: #B90000;',
skamonkey@2948
   132
			1 => 'color: #0000aa;'
skamonkey@3116
   133
			),
skamonkey@3116
   134
		'SCRIPT' => array(
skamonkey@3116
   135
			),
skamonkey@3116
   136
		'METHODS' => array(
skamonkey@2948
   137
			)
skamonkey@3116
   138
		)
skamonkey@2944
   139
);
skamonkey@2944
   140
skamonkey@2944
   141
?>
skamonkey@2944
   142
EOF
skamonkey@2944
   143
skamonkey@2944
   144
my @incs = glob("sourcepawn_include/*.inc");
skamonkey@2944
   145
my %generated_stuff = {};
skamonkey@2944
   146
my @forwards = ();
skamonkey@2944
   147
my @natives = ();
skamonkey@2944
   148
my @tags = ();
skamonkey@2944
   149
my @defines = ();
skamonkey@2944
   150
skamonkey@2944
   151
foreach (@incs)
skamonkey@2944
   152
{
skamonkey@2944
   153
	undef $/;
skamonkey@2944
   154
	open FILE, $_ or die "Couldn't open file: $!";
skamonkey@2944
   155
	binmode FILE;
skamonkey@2944
   156
	my $contents = <FILE>;
skamonkey@2944
   157
	close FILE;
skamonkey@2944
   158
	
skamonkey@2944
   159
	push(@tags, $contents =~ m/enum\s+([a-zA-Z][a-zA-Z0-9_-]*)\s*\{/g);
skamonkey@2944
   160
	push(@forwards, $contents =~ m/forward\s+(?:[a-zA-Z]*:)?([a-zA-Z][a-zA-Z0-9_-]*)\s*\(/g);
skamonkey@2944
   161
	push(@natives, $contents =~ m/native\s+(?:[a-zA-Z]*:)?([a-zA-Z][a-zA-Z0-9_-]*)\s*\(/g);
skamonkey@2944
   162
	push(@natives, $contents =~ m/stock\s+(?:[a-zA-Z]*:)?([a-zA-Z][a-zA-Z0-9_-]*)\s*\(/g);
skamonkey@2944
   163
	push(@defines, $contents =~ m/\#define\s+([^_\s][^\s]*)/g);
skamonkey@2948
   164
	while ($contents =~ m/[^c]enum\s+(?:\w+\s+)?\{(.+?)\}/sg)
skamonkey@2944
   165
	{
skamonkey@2944
   166
		my $enumcontents = $1;
skamonkey@2948
   167
		$enumcontents =~ s/=\s*[a-zA-Z0-9\+\-\*\/_\|&><\(\)~\^!=]+\s*//g;
skamonkey@2944
   168
		$enumcontents =~ s/\/\/.*//g;
skamonkey@2944
   169
		$enumcontents =~ s/\/\*.*?\*\///sg;
skamonkey@2944
   170
		$enumcontents =~ s/\s//g;
skamonkey@2944
   171
		$enumcontents =~ s/,$//;
skamonkey@2944
   172
		push(@defines, split(/,/, $enumcontents));
skamonkey@2944
   173
	}
skamonkey@2944
   174
}
skamonkey@2944
   175
skamonkey@2944
   176
foreach (@tags)
skamonkey@2944
   177
{
skamonkey@2948
   178
	$generated_stuff{tags} .= "'$_',";
skamonkey@2944
   179
}
skamonkey@2944
   180
skamonkey@2944
   181
foreach (@forwards)
skamonkey@2944
   182
{
skamonkey@2948
   183
	$generated_stuff{forwards} .= "'$_',";
skamonkey@2944
   184
}
skamonkey@2944
   185
skamonkey@2944
   186
foreach (@natives)
skamonkey@2944
   187
{
skamonkey@2948
   188
	$generated_stuff{natives} .= "'$_',";
skamonkey@2944
   189
}
skamonkey@2944
   190
skamonkey@2944
   191
foreach (@defines)
skamonkey@2944
   192
{
skamonkey@2948
   193
	$generated_stuff{defines} .= "'$_',";
skamonkey@2944
   194
}
skamonkey@2944
   195
skamonkey@2944
   196
$output =~ s/__tags__/$generated_stuff{tags}/;
skamonkey@2944
   197
$output =~ s/__forwards__/$generated_stuff{forwards}/;
skamonkey@2944
   198
$output =~ s/__natives__/$generated_stuff{natives}/;
skamonkey@2944
   199
$output =~ s/__defines__/$generated_stuff{defines}/;
skamonkey@2944
   200
skamonkey@2944
   201
open OUTPUTTEXT, ">sourcepawn.php";
skamonkey@2944
   202
print OUTPUTTEXT $output;
skamonkey@2944
   203
close OUTPUTTEXT;