Author: henkp
Date: Sat Apr 28 10:05:44 2018
New Revision: 1830421

URL: http://svn.apache.org/viewvc?rev=1830421&view=rev
Log:
+= tmp ; generate attic.yaml from site-jekyll/src/_data/projects.json

Added:
    attic/site-lua/tmp/
    attic/site-lua/tmp/Makefile
    attic/site-lua/tmp/mk-yaml   (with props)

Added: attic/site-lua/tmp/Makefile
URL: 
http://svn.apache.org/viewvc/attic/site-lua/tmp/Makefile?rev=1830421&view=auto
==============================================================================
--- attic/site-lua/tmp/Makefile (added)
+++ attic/site-lua/tmp/Makefile Sat Apr 28 10:05:44 2018
@@ -0,0 +1,18 @@
+JEK = ../../site-jekyll/src
+JSON_JEK = ${JEK}/_data/projects.json
+JSON_ORG = projects.json
+
+test :
+       ./mk-yaml
+
+install : test
+       cp attic.yaml ../data
+
+diff :
+       diff ../data/attic.yaml attic.yaml
+
+DIFF :
+       diff ${JSON_ORG} ${JSON_JEK}
+
+USE :
+       cp ${JSON_JEK} ${JSON_ORG}

Added: attic/site-lua/tmp/mk-yaml
URL: 
http://svn.apache.org/viewvc/attic/site-lua/tmp/mk-yaml?rev=1830421&view=auto
==============================================================================
--- attic/site-lua/tmp/mk-yaml (added)
+++ attic/site-lua/tmp/mk-yaml Sat Apr 28 10:05:44 2018
@@ -0,0 +1,174 @@
+#! /usr/bin/perl
+
+use strict ;
+use warnings ;
+use JSON ;
+use YAML ;
+
+my $DEF_JSON_FILE = 'projects.json' ;
+my $DEF_YAML_FILE = 'attic.yaml' ;
+my $OUT_JSON_FILE = 'attic.json' ;
+my %tags  = () ;
+  { my $cnt = 1 ;
+    for my $tag ( qw(
+    name  
+    project  
+    subproject  
+    dist
+    stem  
+    retired  
+    mailnames  
+    tracker  
+    scm  
+    website  
+    wiki
+    nokeys  
+    board  
+    description  
+    postlude  
+  ) ) { $tags { $tag } = $cnt ++ ; }
+  }
+my %refs  ; $refs { $_ } ++ for qw( nokeys mailnames tracker postlude ) ;
+my %arrs  = ( mailnames => 1, tracker => 1 ) ;
+my @bools = qw( nokeys ) ;
+my %fold = ( description => 1, postlude => 1 ) ;
+
+my $prog = substr $0, rindex ( $0, '/' ) + 1 ;
+my $Usage = <<USAGE ;
+Usage: $prog [-v] [-q] [-d] [-f] [json [yaml]]
+option v : be verbose
+option q : be quiet
+option d : show debug info
+option f : action ; otherwise dry-run
+argument json : JSON file ; default $DEF_JSON_FILE
+argument yaml : YAML file ; default $DEF_YAML_FILE
+writes : $OUT_JSON_FILE
+----------------------------------------------------------
+USAGE
+sub Usage { die "$_[0]$Usage" ; }
+sub Error { die "[error] $prog: $_[0]\n" ; }
+sub Warn  { warn "[warn] $prog: $_[0]\n" ; }
+
+# usage: &GetOptions(ARG,ARG,..) defines $opt_ID as 1 or user spec'ed value
+# usage: &GetOptions(\%opt,ARG,ARG,..) defines $opt{ID} as 1 or user value
+# ARG = 'ID' | 'ID=SPC' | 'ID:SPC' for no-arg, required-arg or optional-arg
+# ID  = perl identifier
+# SPC = i|f|s for integer, fixedpoint real or string argument
+
+use Getopt::Long ;
+Getopt::Long::config ( 'no_ignore_case' ) ;
+my %opt = () ; Usage '' unless GetOptions
+  ( \%opt, qw(v q d f) ) ;
+Usage "Arg count\n" if @ARGV > 1 ;
+
+$opt{v} ||= $opt{d} ;
+
+my $JSON_FILE = shift || $DEF_JSON_FILE ;
+my $YAML_FILE = shift || $DEF_YAML_FILE ;
+
+Error "no json file ($JSON_FILE)" unless -f $JSON_FILE ;
+
+sub get_file ($)
+  { my $file = shift ;
+    open FILE, '<', $file or Error "can't open $file ($!)" ;
+    my $res = join '', <FILE> ;
+    close FILE ;
+    $res ;
+  }
+
+sub put_file ($$)
+  { my $file = shift ;
+    my $text = shift ;
+    open FILE, '>', $file or Error "can't write $file ($!)" ;
+    print FILE $text ;
+    close FILE ;
+  }
+
+sub get_json { my $res = from_json get_file $JSON_FILE ; $res ; }
+sub get_yaml { my @res = YAML::LoadFile $YAML_FILE ; [ @res ] ; }
+
+sub put_json
+  { my $file = shift ;
+    my $yaml = shift ;
+    put_file $file, JSON::to_json
+      ( [ map
+            { my $r ; %$r = %$_ ;
+              for my $t ( @bools )
+                { $r -> { $t } = ( $_ -> { $t } ? JSON::true : JSON::false )
+                    if exists $_ -> { $t } ;
+                }
+              $r ;
+            } @$yaml
+        ]
+      , { pretty => 1, canonical => 1 }
+      ) ;
+  }
+
+sub stringify ;
+sub stringify
+  { my $val = shift ;
+    my $res = undef ;
+    unless ( defined $val )
+      { $res = undef ; }
+    elsif ( not ref $val )
+      { $res = "$val" }
+    elsif ( ref $val eq 'ARRAY' )
+      { $res = [ map { stringify $_ } @$val ] }
+    elsif ( ref $val eq 'HASH' )
+      { $res = { map { ( $_ => stringify $val -> { $_ } ) } keys %$val } ; }
+    $res ;
+  }
+
+sub yaml
+  { my $hash = shift ;
+    my $res = "---\n" ;
+    for my $key ( sort { $tags { $a } <=> $tags { $b } } keys %$hash )
+      { my $val = $hash -> { $key } ;
+        $val = join "\n", @$val if $key eq 'postlude' ;
+        if ( $arrs { $key } )
+          { if ( @$val )
+              { $res .= sprintf "%s:\n%s"
+                  , $key, join '', map { "  - $_\n" } @$val ;
+              }
+            else
+              { $res .= sprintf "%s: []\n", $key ; }
+          }
+        elsif ( $fold { $key } )
+          { my @val = () ;
+            for my $val ( split "\n", $val )
+              { my $l = '' ;
+                my $i = $val =~ /<(li|tr)/ ? '  ' : '' ;
+                for my $w ( split ' ', $val )
+                  { if ( length "$l $w" > 70 )
+                      { push @val, $l ; $l = $i ; }
+                    $l .= ( $l eq '' ? '' : ' ' ) . $w ;
+                  }
+                push @val, $l if length $l ;
+              }
+            $res .= sprintf "%s: |-\n  %s\n", $key, join "\n  ", @val ;
+          }
+        else
+          { $val = "''" if defined $val and $val eq '' ;
+            $res .= sprintf "%s: %s\n", $key, $val ;
+          }
+      }
+    $res ;
+  }
+
+my $json = get_json ;
+my $yaml = '' ;
+
+for my $hash ( @$json )
+  { for my $t ( keys %$hash )
+      { my $ref = ref ( $hash -> { $t } ) ;
+        Error "unknown tag $t" unless $tags { $t } ;
+        Error "unknown ref $t $ref" if $ref and not $refs { $t } ;
+      }
+    $yaml .= yaml $hash ;
+  }
+
+open OUT, '>', $YAML_FILE or Error "can't write $YAML_FILE ($!)" ;
+print OUT $yaml ;
+close OUT ;
+my $YML = get_yaml $YAML_FILE ;
+put_json $OUT_JSON_FILE, $YML ;

Propchange: attic/site-lua/tmp/mk-yaml
------------------------------------------------------------------------------
    svn:executable = *


Reply via email to