⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 convert.pl

📁 代码检索工具GLOBAL源码。可用来浏览分析LINUX源码。
💻 PL
字号:
#!/usr/bin/perl## Copyright (c) 2001 Tama Communications Corporation## This file is part of GNU GLOBAL.## GNU GLOBAL 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 2, or (at your option)# any later version.## GNU GLOBAL 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 this program; if not, write to the Free Software# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.## Main procedure.#$com = $0;$com =~ s/.*\///;while ($ARGV[0] =~ /^-/) {        $opt = shift;        if ($opt eq '--c') {                $c = 1;        } elsif ($opt eq '--perl') {                $perl = 1;        } elsif ($opt eq '--man') {                $man = 1;	} elsif ($opt eq '--info') {                $info = 1;	} elsif ($opt eq '--menu') {                $menu = 1;	}}if ($menu) {	&menu'gen(@ARGV);} else {	$infile = $ARGV[0];	open(INFILE, $infile) || die("cannot open '$infile'\n");	if ($c) {		&c'gen();	} elsif ($perl) {		&perl'gen();	} elsif ($man) {		&man'gen();	} elsif ($info) {		&info'gen();	}	close(INFILE);}exit 0;#------------------------------------------------------------------## Read line.##------------------------------------------------------------------$lastline = '';sub getline {	if ($lastline) {		$_ = $lastline;		$lastline = '';	} else {		while (<INFILE>) {			last unless (/^#/);		}	}	($_) ? 1 : 0;}sub ungetline {	$lastline = $_;}#------------------------------------------------------------------## C package.##------------------------------------------------------------------package c;sub convert {	local($arg) = '[^},]+';	local($macros) = 'arg|code|var|file|name|option';	chop;	s/^\s+//;	while (s/\@($macros)\{($arg)\}/$2/) {		;	}	while (s/\@xref\{($arg),($arg)\}/$1($2)/) {		;	}}sub gen {	local($help_const) = 0;	print "/* This file is generated automatically by $'com from $'infile. */\n";	while (&'getline()) {		if (/^\@NAME\s+(.*)\s+-/) {			print "const char *progname = \"$1\";\n";		} elsif (/^\@SYNOPSIS$/) {			local($first) = 1;			print "const char *usage_const = \"";			while (&'getline()) {				if (/^\@/) {					&'ungetline();					last;				}				convert();				if ($first) {					$first = 0;					print "Usage: ";				} else {					print "\\n\\\n";					print "       ";				}				print $_;			}			print "\\n\";\n";		} elsif (/^\@COMMANDS$/ || /^\@OPTIONS$/) {			if (!$help_const) {				$help_const = 1;				print "const char *help_const = \"";			}			if (/^\@COMMANDS$/) {				print "Commands:";			} else {				print "Options:";			}			print "\\n\\\n";			local($itemize) = 0;			while (&'getline()) {				if (/^\@/) {					&'ungetline();					last;				}				convert();				if (/^\@begin_itemize$/) {					$itemize = 1;				} elsif (/^\@end_itemize$/) {					$itemize = 0;				} elsif ($itemize) {					if (/^\@item\{(.*)\}$/) {						print $1;					} else {						print "       ";						print;					}					print "\\n\\\n";				}			}		}	}	print "\";\n";}#------------------------------------------------------------------## Perl package.##------------------------------------------------------------------package perl;sub convert {	local($arg) = '[^},]+';	while (s/\@file\{($arg)\}/'$1'/) {		;	}	&c'convert();}sub gen {	local($help_const) = 0;	print "# This part is generated automatically by $'com from $'infile.\n";	while (&'getline()) {		if (/^\@NAME\s+(.*)\s+-/) {			print "\$program = '$1';\n";		} elsif (/^\@SYNOPSIS$/) {			&'getline();			convert();			print "\$usage_const = \"Usage: $_\";\n";		} elsif (/^\@OPTIONS$/) {			print "\$help_const = \"\$usage_const\\\nOptions:\\\n";			while (&'getline()) {				if (/^\@/) {					&'ungetline();					last;				}				convert();				if (/^\@begin_itemize$/) {					$itemize = 1;				} elsif (/^\@end_itemize$/) {					$itemize = 0;				} elsif ($itemize) {					if (/^\@item\{(.*)\}$/) {						print $1;					} else {						print "       ";						print;					}					print "\\\n";				}			}		}	}	print "\";\n";	print "# end of generated part.\n";}#------------------------------------------------------------------## Man package.##------------------------------------------------------------------package man;sub convert {	local($arg) = '[^},]+';	s/^\s+//;	while (s/\@arg\{($arg)\}/\\fI$1\\fP/) {		;	}	while (/\@code\{($arg)\}/) {		$val = $1;		$val =~ s/\./\\./g;		s/\@code\{$arg\}/$val/;	}	while (s/\@file\{($arg)\}/\\'$1\\'/) {		;	}	while (s/\@(var|name|option)\{($arg)\}/\\fB$2\\fP/) {		;	}	while (s/\@xref\{($arg),($arg)\}/\\fB$1\\fP($2)/) {		;	}	s/\@{/{/g;	s/\@}/}/g;	s/\@br$/\n.br/;}sub gen {	local($arg) = '[^,]+';	print ".\\\" This file is generated automatically by $'com from $'infile.\n";	while (&'getline()) {		if (/^\@HEADER\s+($arg),($arg),($arg),($arg)\n$/) {			print ".TH $1 $2 \"$3\" \"$4\"\n";		} elsif (/^\@NAME\s+(.*)$/) {			local($name) = $1;			$name =~ s/-/\\-/;			print ".SH NAME\n$name\n";		} elsif (/^\@(SYNOPSIS)$/) {			print ".SH $1\n";			while (&'getline()) {				if (/^\@/) {					&'ungetline();					last;				} elsif (/^$/) {					print ".PP\n";					next;				}				convert();				print;				print ".br\n";			}		} elsif (/^\@(.*)$/) {			$type = $1;			local($varbatim) = ($type =~ /^(EXAMPLES|FORMAT)$/) ? 1 : 0;			if ($type =~ /\s+/) {				$type = "\"$type\"";			}			print ".SH $type\n";			print ".nf\n" if ($varbatim);			local($itemize) = 0;			while (&'getline()) {				if (/^\@/) {					&'ungetline();					last;				} elsif (/^$/) {					print ".PP\n";					next;				} elsif ($varbatim) {					print;					next;				}				convert();				if (/^\@begin_itemize$/) {					$itemize = 1;				} elsif (/^\@end_itemize$/) {					$itemize = 0;				} elsif ($itemize && /^\@item\{(.*)\}$/) {					print ".TP\n$1\n";				} else {					print;				}			}			print ".fi\n" if ($varbatim);		}	}}#------------------------------------------------------------------## Info package.##------------------------------------------------------------------package info;sub convert {	local($arg) = '[^},]+';	chop;	s/^\s+//;	while (s/\@xref\{($arg),($arg)\}/$1($2)/) {		;	}	s/\@option\{/\@samp\{/g;	while (s/\@(arg|name)\{($arg)\}/$2/) {		;	}	s/\@br$/\@\*/;}sub gen {	print "\@c This file is generated automatically by $'com from $'infile.\n";	while (&'getline()) {		if (/^\@HEADER/) {			;		} elsif (/^\@(NAME)\s+(.*)$/) {			local($name) = $2;			print "\@unnumberedsubsec $1\n";			print "$name\n";		} elsif (/^\@(SYNOPSIS)$/) {			print "\@unnumberedsubsec $1\n";			print "\@noindent\n";			print "\@quotation\n";			while (&'getline()) {				if (/^\@/) {					&'ungetline();					last;				} elsif (/^$/) {					print;					next;				}				convert();				print;				print "\@*\n";			}			print "\@end quotation\n";		} elsif (/^\@(.*)$/) {			$type = $1;			local($varbatim) = ($type =~ /^(EXAMPLES|FORMAT)$/) ? 1 : 0;			print "\@unnumberedsubsec $type\n";			print "\@example\n" if ($varbatim);			local($itemize) = 0;			while (&'getline()) {				if (/^\@/) {					&'ungetline();					last;				} elsif (/^$/) {					print;					next;				} elsif ($varbatim) {					s/\{/@\{/g;					s/\}/@\}/g;					print;					next;				}				convert();				if (/^\@begin_itemize$/) {					$itemize = 1;					print "\@table \@asis\n";				} elsif (/^\@end_itemize$/) {					$itemize = 0;					print "\@end table\n";				} elsif ($itemize && /^\@item\{(.*)\}$/) {					print "\@item $1\n";				} else {					print "$_\n";				}			}			print "\@end example\n" if ($varbatim);		}	}}#------------------------------------------------------------------## Menu package.##------------------------------------------------------------------package menu;sub gen {	local(@args) = @_;	local($line, $name);	foreach $dir (@args) {		$infile = "$dir/manual.in";		open(INFILE, $infile) || die("cannot open '$infile'\n");		while (<INFILE>) {			if (/^\@NAME\s+((\S+)\s+\-\s+.*)$/) {				$line = $1;				$name = $2;				last;			}		}		close(INFILE);		push(@name, $name);		push(@line, $line);	}	print "\@c This file is generated automatically by $'com from a set of manual.in.\n";	print "\@menu\n";	for ($i = 0; $i < @name; $i++) {		$name = $name[$i];		$line = $line[$i];		$name .= '::';		printf "* %-16s %s\n", $name, $line;	}	print "\@end menu\n\n";	for ($i = 0; $i < @name; $i++) {		$name = $name[$i];		$line = $line[$i];		printf "\@node %s\n", $name;		printf "\@section %s\n", $line;		printf "\@include $name.ref\n";	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -