| author | Nicholas Hastings <skamonkey@gmail.com> |
| Wed May 25 13:31:14 2011 -0400 (2011-05-25) | |
| changeset 3285 | 065beec73902 |
| parent 3088 | 3a3a37e3c8be |
| permissions | -rw-r--r-- |
| skamonkey@2949 | 1 |
use File::Glob; |
| skamonkey@2949 | 2 |
|
| skamonkey@2949 | 3 |
my $output = <<EOF; |
| skamonkey@2949 | 4 |
<NotepadPlus> |
| skamonkey@2949 | 5 |
<UserLang name="sourcemod" ext="sma inc p pawn core sp"> |
| skamonkey@2949 | 6 |
<Settings> |
| skamonkey@3088 | 7 |
<Global caseIgnored="no" escapeChar="\\" /> |
| skamonkey@2949 | 8 |
<TreatAsSymbol comment="yes" commentLine="yes" /> |
| skamonkey@2949 | 9 |
<Prefix words1="no" words2="yes" words3="no" words4="no" /> |
| skamonkey@2949 | 10 |
</Settings> |
| skamonkey@2949 | 11 |
<KeywordLists> |
| skamonkey@2949 | 12 |
<Keywords name="Delimiters">"'0"'0</Keywords> |
| skamonkey@2949 | 13 |
<Keywords name="Folder+">{</Keywords> |
| skamonkey@2949 | 14 |
<Keywords name="Folder-">}</Keywords> |
| skamonkey@3088 | 15 |
<Keywords name="Operators">+ - * / = ! % & ( ) , . : ; ? @ [ ] ^ | ~ + < = ></Keywords> |
| skamonkey@2949 | 16 |
<Keywords name="Comment">1/* 2*/ 0//</Keywords> |
| skamonkey@2974 | 17 |
<Keywords name="Words1">for if else do while switch case default return break continue new decl public stock const enum forward static funcenum functag native sizeof true false</Keywords> |
| skamonkey@2949 | 18 |
<Keywords name="Words2">#</Keywords> |
| skamonkey@2949 | 19 |
<Keywords name="Words3">Action bool Float Plugin String any __tags__</Keywords> |
| skamonkey@2949 | 20 |
<Keywords name="Words4">MaxClients __defines__</Keywords> |
| skamonkey@2949 | 21 |
</KeywordLists> |
| skamonkey@2949 | 22 |
<Styles> |
| skamonkey@2949 | 23 |
<WordsStyle name="DEFAULT" styleID="11" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" /> |
| skamonkey@2949 | 24 |
<WordsStyle name="FOLDEROPEN" styleID="12" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" /> |
| skamonkey@2949 | 25 |
<WordsStyle name="FOLDERCLOSE" styleID="13" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" /> |
| skamonkey@2949 | 26 |
<WordsStyle name="KEYWORD1" styleID="5" fgColor="0000FF" bgColor="FFFFFF" fontName="" fontStyle="0" /> |
| skamonkey@2949 | 27 |
<WordsStyle name="KEYWORD2" styleID="6" fgColor="0000A0" bgColor="FFFFFF" fontName="" fontStyle="0" /> |
| skamonkey@2949 | 28 |
<WordsStyle name="KEYWORD3" styleID="7" fgColor="25929A" bgColor="FFFFFF" fontName="" fontStyle="0" /> |
| skamonkey@2949 | 29 |
<WordsStyle name="KEYWORD4" styleID="8" fgColor="8000FF" bgColor="FFFFFF" fontName="" fontStyle="0" /> |
| skamonkey@2949 | 30 |
<WordsStyle name="COMMENT" styleID="1" fgColor="008040" bgColor="FFFFFF" fontName="" fontStyle="0" /> |
| skamonkey@2949 | 31 |
<WordsStyle name="COMMENT LINE" styleID="2" fgColor="008040" bgColor="FFFFFF" fontName="" fontStyle="0" /> |
| skamonkey@2949 | 32 |
<WordsStyle name="NUMBER" styleID="4" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" /> |
| skamonkey@2949 | 33 |
<WordsStyle name="OPERATOR" styleID="10" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" /> |
| skamonkey@2949 | 34 |
<WordsStyle name="DELIMINER1" styleID="14" fgColor="B90000" bgColor="FFFFFF" fontName="" fontStyle="0" /> |
| skamonkey@2949 | 35 |
<WordsStyle name="DELIMINER2" styleID="15" fgColor="B90000" bgColor="FFFFFF" fontName="" fontStyle="0" /> |
| skamonkey@2949 | 36 |
<WordsStyle name="DELIMINER3" styleID="16" fgColor="000000" bgColor="112435" fontName="" fontStyle="0" /> |
| skamonkey@2949 | 37 |
</Styles> |
| skamonkey@2949 | 38 |
</UserLang> |
| skamonkey@2949 | 39 |
</NotepadPlus> |
| skamonkey@2949 | 40 |
EOF |
| skamonkey@2949 | 41 |
|
| skamonkey@2949 | 42 |
my @incs = glob("sourcepawn_include/*.inc"); |
| skamonkey@2949 | 43 |
my %generated_stuff = {}; |
| skamonkey@2949 | 44 |
my @tags = (); |
| skamonkey@2949 | 45 |
my @defines = (); |
| skamonkey@2949 | 46 |
|
| skamonkey@2949 | 47 |
foreach (@incs) |
| skamonkey@2949 | 48 |
{ |
| skamonkey@2949 | 49 |
undef $/; |
| skamonkey@2949 | 50 |
open FILE, $_ or die "Couldn't open file: $!"; |
| skamonkey@2949 | 51 |
binmode FILE; |
| skamonkey@2949 | 52 |
my $contents = <FILE>; |
| skamonkey@2949 | 53 |
close FILE; |
| skamonkey@2949 | 54 |
|
| skamonkey@2949 | 55 |
push(@tags, $contents =~ m/enum\s+([a-zA-Z][a-zA-Z0-9_-]*)\s*\{/g); |
| skamonkey@2949 | 56 |
push(@defines, $contents =~ m/\#define\s+([^_\s][^\s]*)/g); |
| skamonkey@2949 | 57 |
while ($contents =~ m/[^c]enum\s+(?:\w+\s+)?{(.+?)}/sg) |
| skamonkey@2949 | 58 |
{ |
| skamonkey@2949 | 59 |
my $enumcontents = $1; |
| skamonkey@2949 | 60 |
$enumcontents =~ s/=\s*[a-zA-Z0-9\+\-\*\/_\|&><\(\)~\^!=]+\s*//g; |
| skamonkey@2949 | 61 |
$enumcontents =~ s/\/\/.*//g; |
| skamonkey@2949 | 62 |
$enumcontents =~ s/\/\*.*?\*\///sg; |
| skamonkey@2949 | 63 |
$enumcontents =~ s/\s//g; |
| skamonkey@2949 | 64 |
$enumcontents =~ s/,$//; |
| skamonkey@2949 | 65 |
push(@defines, split(/,/, $enumcontents)); |
| skamonkey@2949 | 66 |
} |
| skamonkey@2949 | 67 |
} |
| skamonkey@2949 | 68 |
|
| skamonkey@2949 | 69 |
foreach (@tags) |
| skamonkey@2949 | 70 |
{ |
| skamonkey@2949 | 71 |
$generated_stuff{tags} .= "$_ "; |
| skamonkey@2949 | 72 |
} |
| skamonkey@2949 | 73 |
|
| skamonkey@2949 | 74 |
foreach (@defines) |
| skamonkey@2949 | 75 |
{ |
| skamonkey@2949 | 76 |
$generated_stuff{defines} .= "$_ "; |
| skamonkey@2949 | 77 |
} |
| skamonkey@2949 | 78 |
|
| skamonkey@2949 | 79 |
$output =~ s/__tags__/$generated_stuff{tags}/; |
| skamonkey@2949 | 80 |
$output =~ s/__defines__/$generated_stuff{defines}/; |
| skamonkey@2949 | 81 |
|
| skamonkey@2949 | 82 |
open OUTPUTTEXT, ">userDefineLang.xml"; |
| skamonkey@2949 | 83 |
print OUTPUTTEXT $output; |
| skamonkey@2949 | 84 |
close OUTPUTTEXT; |