1#************************************************************************* 2# 3# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4# 5# Copyright 2000, 2010 Oracle and/or its affiliates. 6# 7# OpenOffice.org - a multi-platform office productivity suite 8# 9# This file is part of OpenOffice.org. 10# 11# OpenOffice.org is free software: you can redistribute it and/or modify 12# it under the terms of the GNU Lesser General Public License version 3 13# only, as published by the Free Software Foundation. 14# 15# OpenOffice.org is distributed in the hope that it will be useful, 16# but WITHOUT ANY WARRANTY; without even the implied warranty of 17# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18# GNU Lesser General Public License version 3 for more details 19# (a copy is included in the LICENSE file that accompanied this code). 20# 21# You should have received a copy of the GNU Lesser General Public License 22# version 3 along with OpenOffice.org. If not, see 23# <http://www.openoffice.org/license.html> 24# for a copy of the LGPLv3 License. 25# 26#************************************************************************* 27 28$ARGV0 = shift @ARGV; 29$ARGV1 = shift @ARGV; 30$ARGV2 = shift @ARGV; 31$ARGV3 = shift @ARGV; 32 33open( INFILE, $ARGV0 ) or die "Error: cannot open input file: $!"; 34my %tokens; 35while ( <INFILE> ) 36{ 37 # trim newline 38 chomp( $_ ); 39 # trim leading/trailing whitespace 40 $_ =~ s/^\s*//g; 41 $_ =~ s/\s*$//g; 42 # check for valid characters 43 $_ =~ /^[a-zA-Z0-9-_]+$/ or die "Error: invalid character in token '$_'"; 44 $id = "XML_$_"; 45 $id =~ s/-/_/g; 46 $tokens{$_} = $id; 47} 48close ( INFILE ); 49 50# generate output files 51 52open ( IDFILE, ">$ARGV1" ) or die "Error: cannot open output file: $!"; 53open ( NAMEFILE, ">$ARGV2" ) or die "Error: cannot open output file: $!"; 54open ( GPERFFILE, ">$ARGV3" ) or die "Error: cannot open output file: $!"; 55 56print( GPERFFILE "%language=C++\n" ); 57print( GPERFFILE "%global-table\n" ); 58print( GPERFFILE "%null-strings\n" ); 59print( GPERFFILE "%struct-type\n" ); 60print( GPERFFILE "struct xmltoken {\n" ); 61print( GPERFFILE " const sal_Char *name;\n" ); 62print( GPERFFILE " sal_Int32 nToken;\n" ); 63print( GPERFFILE "};\n" ); 64print( GPERFFILE "%%\n" ); 65 66$i = 0; 67foreach( sort( keys( %tokens ) ) ) 68{ 69 print( IDFILE "const sal_Int32 $tokens{$_} = $i;\n" ); 70 print( NAMEFILE "\"$_\",\n" ); 71 print( GPERFFILE "$_,$tokens{$_}\n" ); 72 ++$i; 73} 74 75print( IDFILE "const sal_Int32 XML_TOKEN_COUNT = $i;\n" ); 76print( GPERFFILE "%%\n" ); 77 78close( IDFILE ); 79close( NAMEFILE ); 80close( GPERFFILE ); 81