diff --git a/editor/geshi/create-amxx-geshi.pl b/editor/geshi/create-amxx-geshi.pl new file mode 100644 index 00000000..2de8048a --- /dev/null +++ b/editor/geshi/create-amxx-geshi.pl @@ -0,0 +1,203 @@ +use File::Glob; + +my $output = <. + */ + +\$language_data = array( + 'LANG_NAME' => 'Pawn (AMXX)', + 'COMMENT_SINGLE' => array(1 => '//'), + 'COMMENT_MULTI' => array("/*" => "*/"), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"','\\''), + 'ESCAPE_CHAR' => '^', + 'ESCAPE_REGEXP' => array( + 1 => "#\\\\\\\\x[\\da-fA-F]{1,2}#", + 2 => "#\\\\\\\\b[01]{1,8}#", + 3 => "#%[%sdif%NLbxXtTc]#", + ), + 'SYMBOLS' => array( + 0 => array(';'), + // Assignment operators + 1 => array('=', '+=', '-=', '/=', '*=', '&=', '|=', '~=', '^='), + // Comparison and logical operators + 2 => array('==', '!=', '&&', '||', '>', '<', '<=', '>='), + // Other operators + 3 => array('+', '-', '*', '/', '|', '&', '~', '++', '--', '^', '%%', '!'), + ), + 'KEYWORDS' => array( + // Reserved words + 1 => array( + 'for', 'if', 'else', 'do', 'while', 'switch', 'case', 'return', + 'break', 'continue', 'new', 'public', 'stock', 'const', + 'enum', 'forward', 'static', 'native', + 'sizeof', 'true', 'false', 'default', + ), + // Tags + 2 => array( + 'bool', 'Float', 'any', + __tags__ + ), + // Natives + 3 => array( + __natives__ + ), + // Forwards + 4 => array( + __forwards__ + ), + // Defines + 5 => array( + 'MaxClients', + __defines__ + ), + ), + 'NUMBERS' => array( + GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_FLT_NONSCI | GESHI_NUMBER_BIN_PREFIX_0B | GESHI_NUMBER_HEX_PREFIX + ), + 'TAB_WIDTH' => 4, + 'CASE_SENSITIVE' => array( + 1 => true, + 2 => true, + 3 => true, + 4 => true, + 5 => true + ), + 'REGEXPS' => array( + 0 => array( + GESHI_SEARCH => '(#include\\s+)(<\\w+>)', + GESHI_REPLACE => '\\\\2', + GESHI_BEFORE => '\\\\1', + ), + 1 => array( + GESHI_SEARCH => '(#\\w+)(\\s+)', + GESHI_REPLACE => '\\\\1', + GESHI_AFTER => '\\\\2' + ), + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0000EE; font-weight: bold;', + 2 => 'color: #218087; font-weight: bold;', + 3 => 'color: #000040;', + 4 => 'color: #000040;', + 5 => 'color: #8000FF;', + ), + 'COMMENTS' => array( + 1 => 'color: #006600; font-style: italic;', + 'MULTI' => 'color: #006600; font-style: italic;', + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #ff00ff;', + 1 => 'color: #ff00ff;', + 2 => 'color: #ff00ff;', + 3 => 'color: #ff00ff;', + ), + 'SYMBOLS' => array( + 0 => 'color: #1B5B00; font-weight: bold;', + 1 => 'color: #1B5B00;', + 2 => 'color: #1B5B00;', + 3 => 'color: #1B5B00;', + ), + 'STRINGS' => array( + 0 => 'color: #B90000;', + ), + 'BRACKETS' => array( + 0 => 'color: #1B5B00; font-weight: bold;', + ), + 'NUMBERS' => array( + 0 => 'color: #AE5700;', + ), + 'REGEXPS' => array( + 0 => 'color: #B90000;', + 1 => 'color: #0000aa;' + ), + 'SCRIPT' => array( + ), + 'METHODS' => array( + ) + ) +); + +?> +EOF + +my @incs = glob("amxx_include/*.inc"); +my %generated_stuff = {}; +my @forwards = (); +my @natives = (); +my @tags = (); +my @defines = (); + +foreach (@incs) +{ + undef $/; + open FILE, $_ or die "Couldn't open file: $!"; + binmode FILE; + my $contents = ; + close FILE; + + push(@tags, $contents =~ m/enum\s+([a-zA-Z][a-zA-Z0-9_-]*)\s*\{/g); + push(@forwards, $contents =~ m/forward\s+(?:[a-zA-Z]*:)?([a-zA-Z][a-zA-Z0-9_-]*)\s*\(/g); + push(@natives, $contents =~ m/native\s+(?:[a-zA-Z]*:)?([a-zA-Z][a-zA-Z0-9_-]*)\s*\(/g); + push(@natives, $contents =~ m/stock\s+(?:[a-zA-Z]*:)?([a-zA-Z][a-zA-Z0-9_-]*)\s*\(/g); + push(@defines, $contents =~ m/\#define\s+([^_\s][^\s]*)/g); + while ($contents =~ m/[^c]enum\s+(?:\w+\s+)?\{(.+?)\}/sg) + { + my $enumcontents = $1; + $enumcontents =~ s/=\s*[a-zA-Z0-9\+\-\*\/_\|&><\(\)~\^!=]+\s*//g; + $enumcontents =~ s/\/\/.*//g; + $enumcontents =~ s/\/\*.*?\*\///sg; + $enumcontents =~ s/\s//g; + $enumcontents =~ s/,$//; + push(@defines, split(/,/, $enumcontents)); + } +} + +foreach (@tags) +{ + $generated_stuff{tags} .= "'$_',"; +} + +foreach (@forwards) +{ + $generated_stuff{forwards} .= "'$_',"; +} + +foreach (@natives) +{ + $generated_stuff{natives} .= "'$_',"; +} + +foreach (@defines) +{ + $generated_stuff{defines} .= "'$_',"; +} + +$output =~ s/__tags__/$generated_stuff{tags}/; +$output =~ s/__forwards__/$generated_stuff{forwards}/; +$output =~ s/__natives__/$generated_stuff{natives}/; +$output =~ s/__defines__/$generated_stuff{defines}/; + +open OUTPUTTEXT, ">pawnamxx.php"; +print OUTPUTTEXT $output; +close OUTPUTTEXT; \ No newline at end of file