1#!/usr/bin/env perl 2#************************************************************** 3# 4# Licensed to the Apache Software Foundation (ASF) under one 5# or more contributor license agreements. See the NOTICE file 6# distributed with this work for additional information 7# regarding copyright ownership. The ASF licenses this file 8# to you under the Apache License, Version 2.0 (the 9# "License"); you may not use this file except in compliance 10# with the License. You may obtain a copy of the License at 11# 12# http://www.apache.org/licenses/LICENSE-2.0 13# 14# Unless required by applicable law or agreed to in writing, 15# software distributed under the License is distributed on an 16# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17# KIND, either express or implied. See the License for the 18# specific language governing permissions and limitations 19# under the License. 20# 21#************************************************************** 22 23 24 25parse_args(); 26execute_args(); 27exit(0); 28 29my $source = undef; 30my $dest = undef; 31my @languages = undef; 32 33sub parse_args 34{ 35 # at most two arguments 36 explain(), exit(100) if ( $#ARGV > 1 ); 37 38 # destination file is the second argument, if present 39 $dest = $ARGV[1] if ( $#ARGV > 0 ); 40 41 # source file is the first argument if present 42 if ( $#ARGV > -1 ) 43 { 44 $source = $ARGV[0]; 45 if ( ! -f $source ) 46 { 47 print STDERR "$source is not a valid file, aborting"; 48 exit(101); 49 } 50 } 51 52 # check which languages to use 53 my $languages = $ENV{WITH_LANG}; 54 if ( ( ! defined $languages ) || ( "$languages" eq "" ) ) 55 { 56 print STDERR "$0: WITH_LANG not set or empty, defaulting to 'en-US'\n"; 57 $languages = "en-US"; 58 } 59 @languages = split ( ' ', $languages ); 60} 61 62sub execute_args 63{ 64 my @description = (); 65 if ( defined $source ) 66 { 67 open SOURCE, "$source" || die "could not open $source: $?\n"; 68 @description = <SOURCE>; 69 close SOURCE; 70 } 71 else 72 { 73 @description = <STDIN>; 74 } 75 76 if ( defined $dest ) 77 { 78 open DEST, ">$dest" || die "could not open $dest for writing: $?\n"; 79 } 80 81 foreach (@description) 82 { 83 chomp; s/\r//; 84 85 if ( /\#LANG\#/ ) 86 { 87 foreach $lang ( @languages ) 88 { 89 my $transformed = $_; 90 $transformed =~ s/\#LANG#/$lang/g; 91 if ( defined $dest ) 92 { 93 print DEST "$transformed\n"; 94 } 95 else 96 { 97 print STDOUT "$transformed\n"; 98 } 99 } 100 } 101 else 102 { 103 if ( defined $dest ) 104 { 105 print DEST "$_\n"; 106 } 107 else 108 { 109 print STDOUT "$_\n"; 110 } 111 } 112 } 113 114 close DEST if ( defined $dest ); 115} 116 117# explains the program's usage 118sub explain 119{ 120 print STDOUT "usage:\n"; 121 print STDOUT " $0 [<description_file> [<output_file>]]\n"; 122 print STDOUT " transforms the given extension description file\n"; 123 print STDOUT "\n"; 124 print STDOUT " If <output_file> is not given, STDOUT is used.\n"; 125 print STDOUT " If <description_file> is not given, STDIN is used.\n"; 126 print STDOUT "\n"; 127 print STDOUT " The following transformations are done at the moment:\n"; 128 print STDOUT " - duplicate all lines containing #LANG#, for ever token of \$WITH_LANG\n"; 129 print STDOUT " replacing every occurrence of \$LANG with a token\n"; 130 print STDOUT "\n"; 131 print STDOUT " And yes, the functionality of this script should be\n"; 132 print STDOUT " - moved to solenv/inc/tg_ext.mk\n"; 133 print STDOUT " - implemented as XSLT, to be much less error-prone\n"; 134} 135