diff options
Diffstat (limited to 'utils/syntax.pl')
-rwxr-xr-x | utils/syntax.pl | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/utils/syntax.pl b/utils/syntax.pl new file mode 100755 index 0000000..42a4acc --- /dev/null +++ b/utils/syntax.pl @@ -0,0 +1,81 @@ +#!/usr/bin/perl +# +# This script reads the syntaces of commands from irssi source tree. +# Then it browses through all '.in' files in the current directory and +# substitutes '@SYNTAX:foo@' tags with real syntaces found. This data +# is written into the corresponding files without the '.in' extension. +# For example: help.in -> ../help +# +# This path has to be changed. It should point to your irssi/src directory +# Remember to include the asterisk ('*'). +$SRC_PATH='src'; + +@files = sort `find src -name '*.c'`; + +foreach $file (@files) { + open (FILE, "$file"); + while (<FILE>) { + chomp; + if (m!/\*.SYNTAX\:! || $state) { + s/^\s+/ /; + s/.*SYNTAX: //; + if (/^ [A-Z]+/) { + push @lines, $line; + $line = ""; + s/^ //; + } + $line .= $_; + if (m!\*/!) { + $line =~ s!\*/!!; + push @lines, $line; + $line = ""; + $state = 0; + } else { + $state = 1; + } + } + } + close (FILE); +} +while (<docs/help/in/*.in>) { + next if (/Makefile/); + next if (/meson\.build/); + + open (FILE, "$_"); + @data = <FILE>; + close (FILE); + $count = 0; + foreach $DATARIVI (@data) { + if ($DATARIVI =~ /\@SYNTAX\:(.+)\@/) { + $SYNTAX = join "\n", (grep /^\U$1 /, @lines); + $SYNTAX .= "\n" if $SYNTAX; + $SYNTAX =~ s/ *$//; $SYNTAX =~ s/ *\n/\n/g; + + # add %| after "COMMAND SUB " so parameters will indent correctly + $SYNTAX =~ s/^([A-Z ]+)/\1%|/; + $SYNTAX =~ s/(\n[A-Z ]+)/\1%|/g; + # no need for this if there's no parameters + $SYNTAX =~ s/%\|$//; + $DATARIVI = $SYNTAX; + } elsif ($DATARIVI =~ /^\S+/) { + if ($data[$count+1] =~ /^\S+/) { + chomp $DATARIVI; + $DATARIVI =~ s/ *$//g; + $DATARIVI .= " "; + } + } else { + $DATARIVI =~ s/^\t/ / while ($DATARIVI =~ /^\t/); + } + $count++; + } + + # must always end with empty line + push @data, "\n" if ($data[@data-1] ne "\n"); + push @data, "\n" if ($data[@data-2] !~ /\n$/); + + $newfilename = $_; $newfilename =~ s/\.in$//; + $newfilename =~ s/\/in\//\//; + open (NEWFILE, ">$newfilename"); + print NEWFILE @data; + close (NEWFILE); +} |