editor/npp/create-pawn-npp.pl
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--
Backed out changeset: 65eb3df32b1c
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">&quot;&apos;0&quot;&apos;0</Keywords>
skamonkey@2949
    13
            <Keywords name="Folder+">{</Keywords>
skamonkey@2949
    14
            <Keywords name="Folder-">}</Keywords>
skamonkey@3088
    15
            <Keywords name="Operators">+ - * / = ! % &amp; ( ) , . : ; ? @ [ ] ^ | ~ + &lt; = &gt;</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;