groff-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Groff-commit] groff/src/roff/groff read_groff_options.pl


From: Bernd Warken
Subject: [Groff-commit] groff/src/roff/groff read_groff_options.pl
Date: Thu, 25 Apr 2013 22:36:25 +0000

CVSROOT:        /cvsroot/groff
Module name:    groff
Changes by:     Bernd Warken <bwarken>  13/04/25 22:36:25

Added files:
        src/roff/groff : read_groff_options.pl 

Log message:
        Add file <groff_top>/src/roff/groff/read_groff_options.pl

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/groff/src/roff/groff/read_groff_options.pl?cvsroot=groff&rev=1.1

Patches:
Index: read_groff_options.pl
===================================================================
RCS file: read_groff_options.pl
diff -N read_groff_options.pl
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ read_groff_options.pl       25 Apr 2013 22:36:24 -0000      1.1
@@ -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 <address@hidden>.
+
+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;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]