summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorbwarken <bwarken>2013-04-25 22:36:24 +0000
committerbwarken <bwarken>2013-04-25 22:36:24 +0000
commit00259af592d02dcdffac83bc94bd6bec14c02c66 (patch)
treea3188e9f295fb24e5d409e555529777400710388 /src
parenteeee598f31bbf1551a6fc1c642b6a16dd6c9d394 (diff)
downloadgroff-00259af592d02dcdffac83bc94bd6bec14c02c66.tar.gz
Add file <groff_top>/src/roff/groff/read_groff_options.pl
Diffstat (limited to 'src')
-rwxr-xr-xsrc/roff/groff/read_groff_options.pl165
1 files changed, 165 insertions, 0 deletions
diff --git a/src/roff/groff/read_groff_options.pl b/src/roff/groff/read_groff_options.pl
new file mode 100755
index 00000000..a403fbe7
--- /dev/null
+++ b/src/roff/groff/read_groff_options.pl
@@ -0,0 +1,165 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+use diagnostics;
+
+
+########################################################################
+# Legalese
+########################################################################
+
+use constant LASTUPDATE => '25 Apr 2013'; # date of last update
+
+### The following constants `LICENSE[12]' are the license for this
+### file using `GPL' >= 3
+
+use constant LICENSE1 => q*
+read_groff_options.pl - generate lines with the `groff' options.
+
+Source file position: <groff-source>/src/roff/groff/read_groff_options.pl
+*;
+
+use constant LICENSE2 => q*
+Copyright (C) 2013
+ Free Software Foundation, Inc.
+ Written by Bernd Warken <groff-bernd.warken-72@web.de>.
+
+This file is part of `groff'.
+
+ `GNU groff' is free software: you can redistribute it and/or modify it
+under the terms of the `GNU General Public License' as published by the
+`Free Software Foundation', either version 3 of the License, or (at your
+option) any later version.
+
+ `GNU groff' is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the `GNU
+General Public License' for more details.
+
+ You should have received a copy of the 'GNU General Public License`
+along with `groff', see the files `COPYING' and `LICENSE' in the top
+directory of the `groff' source package. If not, see
+<http://www.gnu.org/licenses/>.*;
+
+
+use constant DOCUMENTATION => q*
+ This file is not installed, but is used to generate output
+containing information of the `groff' options, which are read from the
+function `synopsis' of the file `groff.cpp' in
+`<groff-source>/src/roff/groff/'. The output is something like:
+
+groff_noarg: CENRSUVXZabceghijklpstvz
+groff_witharg: DFIKLMPTWdfmnorw
+*;
+
+
+##### end legalese
+
+$\ = "\n"; # adds newline at each print
+$/ = "\n"; # newline separates input
+$| = 1; # flush after each print or write command
+
+
+my $file = undef;
+{
+ use constant FALSE => 0;
+ use constant TRUE => 1;
+
+ use File::Spec qw[];
+
+ my $arg = shift;
+ my $cpp = 'groff.cpp';
+
+ if ( defined($arg) ) {
+ if ( -d $arg ) {
+ $file = File::Spec->catfile($arg, $cpp);
+ $file = undef unless ( -f $file );;
+ }
+ if ( -f $arg && $arg =~ /groff.cpp$/ ) {
+ $file = $arg;
+ }
+ } else { # no argument
+ if ( -f $cpp ) {
+ $file = $cpp;
+ }
+ }
+ die "read_groff_options.pl: needs a directory with $cpp as argument: $!."
+ unless ( defined($file) );
+
+}
+
+# $file is cpp-file
+
+my @lines = ();
+{
+ open(FH, '<', $file);
+ my $start_synopsis = FALSE;
+ foreach ( <FH> ) {
+ chomp;
+ if ( /^void\s+synopsis\(/ ) {
+ $start_synopsis = TRUE;
+ next;
+ }
+ if ( $start_synopsis ) {
+ if ( /\[-/ ) {
+ s/\\n//g;
+ push @lines, $_;
+ $start_synopsis = FALSE;
+ }
+ next;
+ }
+ if ( @lines ) {
+ if ( /\[-/ ) {
+ s/\\n//g;
+ push @lines, $_;
+ next;
+ } else {
+ last;
+ }
+ }
+ next;
+ }
+}
+
+{
+ my $noarg = '';
+ my $witharg = '';
+ my $first = shift @lines;
+ chomp $first;
+ $first =~ s/^[^-]*-(\w+)\]\s*//;
+ $noarg = $1;
+ unshift @lines, $first;
+
+ foreach ( @lines ) {
+ my $s = $_;
+ while ( $s =~ /-/ ) {
+ $s =~ s/^[^-]*-(\w)\w+]//;
+ $witharg .= $1;
+ }
+ }
+
+ sub sort_opts {
+ my @opts = split '', shift;
+ @opts = sort @opts;
+ return join '', @opts;
+ }
+
+ my $res = &sort_opts($noarg);
+ print 'groff_noarg: ' . $res;
+
+ $res = &sort_opts($witharg);
+ print 'groff_witharg: ' . $res;
+}
+
+print '';
+print '#' x 30 . ' License ' . '#' x 30;
+print q*
+groff_options.info - 2 lines with the `groff' options.
+
+This file is generated by the run of `make' in the `groff' source by
+the file <groff-source>/src/roff/groff/read_groff_options.pl.
+
+This file `groff_options.info' is installed in the `groff libdir'.*;
+
+print LICENSE2;