Index: icu46/source/tools/gendraft/genheaders.pl |
=================================================================== |
--- icu46/source/tools/gendraft/genheaders.pl (revision 0) |
+++ icu46/source/tools/gendraft/genheaders.pl (revision 0) |
@@ -0,0 +1,264 @@ |
+#!/usr/bin/perl |
+#* |
+#******************************************************************************* |
+#* Copyright (C) 2006-2010, International Business Machines |
+#* Corporation and others. All Rights Reserved. |
+#******************************************************************************* |
+#* |
+#* file name: genheaders.pl |
+#* encoding: US-ASCII |
+#* tab size: 8 (not used) |
+#* indentation:4 |
+#* |
+#* Created by: Ram Viswanadha |
+#* |
+#* This tool filters the deprecated.html and friends file generated by Doxygen and generates udarft.h |
+#* udeprctd.h and uobslete.h |
+#* |
+ |
+use File::Find; |
+use File::Basename; |
+use IO::File; |
+use Cwd; |
+use File::Copy; |
+use Getopt::Long; |
+use File::Path; |
+use File::Copy; |
+ |
+$draftHeaderName = "udraft.h"; |
+$draftAppend = "DRAFT_API_DO_NOT_USE"; |
+$draftDefine = "U_HIDE_DRAFT_API"; |
+ |
+$deprecatedHeaderName = "udeprctd.h"; |
+$deprecatedAppend = "DEPRECATED_API_DO_NOT_USE"; |
+$deprecatedDefine = "U_HIDE_DEPRECATED_API"; |
+ |
+$obsoleteHeaderName = "uobslete.h"; |
+$obsoleteAppend = "OBSOLETE_API_DO_NOT_USE"; |
+$obsoleteDefine = "U_HIDE_OBSOLETE_API"; |
+ |
+$systemHeaderName = "usystem.h"; |
+$systemAppend = "SYSTEM_API_DO_NOT_USE"; |
+$systemDefine = "U_HIDE_SYSTEM_API"; |
+ |
+$internalHeaderName = "uintrnal.h"; |
+$internalAppend = "INTERNAL_API_DO_NOT_USE"; |
+$internalDefine = "U_HIDE_INTERNAL_API"; |
+ |
+$versionAppend=""; |
+ |
+#run the program |
+main(); |
+ |
+#--------------------------------------------------------------------- |
+# The main program |
+ |
+sub main(){ |
+ GetOptions( |
+ "--srcdir=s" => \$srcDir, |
+ "--destdir=s" => \$destDir, |
+ "--version=s" => \$version, |
+ "--exclusion-list=s" => \$exclude, |
+ "--include-types" => \$includeTypes, |
+ "--verbose" => \$verbose |
+ ); |
+ usage() unless defined $srcDir; |
+ usage() unless defined $destDir; |
+ usage() unless defined $version; |
+ usage() unless defined $exclude; |
+ $draftFile = "$srcDir/draft.html"; |
+ $deprecatedFile = "$srcDir/deprecated.html"; |
+ $obsoleteFile = "$srcDir/obsolete.html"; |
+ $systemFile = "$srcDir/system.html"; |
+ $internalFile = "$srcDir/internal.html"; |
+ |
+ $versionAppend = $version; |
+ $versionAppend=~ s/^([0-9]+)\.([0-9]+).*/\1_\2/; |
+ $excludeFH = IO::File->new($exclude,"r") |
+ or die "could not open the file $exclude for reading: $! \n"; |
+ my %exclude; |
+ while (defined ($line = <$excludeFH>)){ |
+ next if( $line =~ /^#/); |
+ $line =~ s/^\s+//; |
+ $line =~ s/\s+\n$//; |
+ $exclude{$line}="EXCLUDE"; |
+ } |
+ |
+ writeFile($draftFile, $draftHeaderName, $destDir, $draftAppend, $draftDefine, \%exclude); |
+ writeFile($deprecatedFile, $deprecatedHeaderName, $destDir, $deprecatedAppend, $deprecatedDefine, \%exclude); |
+ writeFile($obsoleteFile, $obsoleteHeaderName, $destDir, $obsoleteAppend, $obsoleteDefine, \%exclude); |
+ writeFile($systemFile, $systemHeaderName, $destDir, $systemAppend, $systemDefine, \%exclude); |
+ writeFile($internalFile, $internalHeaderName, $destDir, $internalAppend, $internalDefine, \%exclude); |
+} |
+ |
+#----------------------------------------------------------------------- |
+sub getHeaderDef{ |
+ ($headerName) = @_; |
+ $headerDef = uc($headerName); # this is building the constant for #define |
+ $headerDef =~ s/\./_/; |
+ return $headerDef; |
+} |
+ |
+#----------------------------------------------------------------------- |
+sub writeFile{ |
+ ($infile,$outfile,$destDir, $symbolAppend, $symbolDef, $exclude) = @_; |
+ |
+ my $outFileName = $outfile; |
+ $headerDef = getHeaderDef($outfile); |
+ |
+ $outfile = $destDir."/".$outfile; |
+ |
+ $inFH = IO::File->new($infile,"r") |
+ or die "could not open the file $infile for reading: $! \n"; |
+ $outFH = IO::File->new($outfile,"w") |
+ or die "could not open the file $outfile for writing: $! \n"; |
+ |
+ #print "$headerDef>>> $outfile\n"; |
+ printHeader($outFH, $outFileName, $headerDef, $symbolDef); |
+ parseWriteFile($inFH, $outFH, $symbolAppend, $exclude); |
+ printFooter($outFH, $headerDef, $symbolDef); |
+ close($inFH); |
+ close($outFH); |
+} |
+ |
+#----------------------------------------------------------------------- |
+sub printHeader{ |
+ ($outFH, $headername, $HEADERDEF, $symbolDef) = @_; |
+ ($DAY, $MONTH, $YEAR) = (localtime)[3,4,5]; |
+ $YEAR += 1900; |
+#We will print our copyright here + warnings |
+print $outFH <<END_HEADER_COMMENT; |
+/* |
+******************************************************************************* |
+* Copyright (C) 2004-$YEAR, International Business Machines |
+* Corporation and others. All Rights Reserved. |
+******************************************************************************* |
+* |
+* file name: $headername |
+* encoding: US-ASCII |
+* tab size: 8 (not used) |
+* indentation:4 |
+* |
+* Created by: genheaders.pl, a perl script written by Ram Viswanadha |
+* |
+* Contains data for commenting out APIs. |
+* Gets included by umachine.h |
+* |
+* THIS FILE IS MACHINE-GENERATED, DON'T PLAY WITH IT IF YOU DON'T KNOW WHAT |
+* YOU ARE DOING, OTHERWISE VERY BAD THINGS WILL HAPPEN! |
+*/ |
+ |
+#ifndef $HEADERDEF |
+#define $HEADERDEF |
+ |
+#ifdef $symbolDef |
+ |
+END_HEADER_COMMENT |
+} |
+ |
+#----------------------------------------------------------------------- |
+sub parseWriteFile{ |
+ ($inFH, $outFH, $symbolAppend, $exclude) = @_; |
+ %disableRenaming; |
+ %enableRenaning; |
+ while (defined ($line = <$inFH>)){ |
+ #just process C APIs for now |
+ if($line =~ /\<dt\>/ ){ |
+ #special cases |
+ if( ($line =~ /LEUnicode/)|| ($line =~ /LanguageCodes/) || |
+ ($line =~ /ScriptCodes/) || ($line =~ /\:+/) || |
+ ($line =~ /Class/) ){ |
+ next; |
+ } |
+ if( $line =~ /^\<dt\>File [^\>]*\>([^\<]*)/ ) { |
+ print "Skipping file-scope $symbolAppend $1\n"; |
+ next; |
+ } |
+ #<dt>Global <a class="el" href="utrans_8h.html#a21">utrans_unregister</a> </dt> |
+ #<dt>Global <a class="el" href="classUnicodeString.html#w1w0">UnicodeString::kInvariant</a> </dt> |
+ # the below regular expression works for both the above formats. |
+ $line=~ m/\<dt\>.*\<a class=\".*\" href=\".*\">(.*)\<\/dt\>/; |
+ my $value = $1; |
+ $value =~ s/\<\/a\>\s*//g; |
+ $value =~ s/^\s+//; |
+ $value =~ s/\s+$//; |
+ #print "$exclude->{$value}\n"; |
+ if($exclude->{$value} eq "EXCLUDE"){ |
+ #print "$value $exclude->{$value}\n"; |
+ next; |
+ } |
+ print "$value $realSymbol $nonExSymbol :: $line\n" if defined $verbose; |
+ next if(isStringAcceptable($value)==1); |
+ if($value =~ /^operator[^a-zA-Z]/) { |
+ print "Skipping operator $symbolAppend $value from $line\n"; |
+ next; |
+ } |
+ $realSymbol = $value."_".$versionAppend; |
+ $nonExSymbol = $value."_".$symbolAppend; |
+ $disableRenaming{$value} = $nonExSymbol; |
+ $enableRenaming{$realSymbol} = $nonExSymbol; |
+ print "$value $realSymbol $nonExSymbol\n" if defined $verbose; |
+ |
+ } |
+ } |
+ print "size of disableRenaming: " . keys( %disableRenaming) . ".\n"; |
+ print "size of enableRenaming: " . keys( %enableRenaming) . ".\n"; |
+ print $outFH "# if U_DISABLE_RENAMING\n"; |
+ foreach $key (sort (keys(%disableRenaming))) { |
+ print $outFH "# define $key $disableRenaming{$key}\n"; |
+ delete($disableRenaming{$key}); |
+ } |
+ print $outFH "# else\n"; |
+ foreach $key (sort (keys(%enableRenaming))) { |
+ print $outFH "# define $key $enableRenaming{$key}\n"; |
+ delete($enableRenaming{$key}); |
+ } |
+ print $outFH "# endif /* U_DISABLE_RENAMING */\n"; |
+} |
+#----------------------------------------------------------------------- |
+sub isStringAcceptable{ |
+ ($string) = @_; |
+ @str = split(//, $string); |
+ $ret = 1; |
+ foreach $val (@str){ |
+ if(($val ne "_") && !($val =~ /[0-9A-Z]/)){ |
+ #print "$val\n"; |
+ $ret = 0; |
+ } |
+ } |
+ #print "$string : $ret\n"; |
+ if(!(defined $includeTypes)){ |
+ if($ret==0 && $str[0] eq 'U'){ |
+ $ret=1; |
+ } |
+ } |
+ return $ret; |
+} |
+ |
+#----------------------------------------------------------------------- |
+sub printFooter{ |
+ |
+ ($outFH, $headerDef, $symbolDef ) = @_; |
+#print the footer |
+print $outFH <<END_FOOTER; |
+ |
+#endif /* $symbolDef */ |
+#endif /* $headerDef */ |
+ |
+END_FOOTER |
+} |
+#----------------------------------------------------------------------- |
+sub usage { |
+ print << "END"; |
+Usage: |
+gendraft.pl |
+Options: |
+ --srcdir=<directory> |
+ --destdir=<directory> |
+ --version=<current version of ICU> |
+ --exclusion-list=<file name> |
+ --include-types |
+e.g.: genheaders.pl --srcdir=<icu>/source/common/docs/html --destdir=<icu>/source/common/unicode --version=2.8 --exclusion-list=exclude.txt |
+END |
+ exit(0); |
+} |
Property changes on: icu46/source/tools/gendraft/genheaders.pl |
___________________________________________________________________ |
Added: svn:executable |
+ * |
Added: svn:eol-style |
+ LF |