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

📄 grog.pl

📁 早期freebsd实现
💻 PL
字号:
#!/usr/bin/perl# grog -- guess options for groff command# Inspired by doctype script in Kernighan & Pike, Unix Programming# Environment, pp 306-8.$prog = $0;$prog =~ s@.*/@@;push(@command, "groff");while ($ARGV[0] =~ /^-./) {    $arg = shift(@ARGV);    last if $arg eq "--";    push(@command, $arg);}if (@ARGV) {    foreach $arg (@ARGV) {	&process($arg, 0);    }}else {    &process("-", 0);}sub process {    local($filename, $level) = @_;    local(*FILE);    if (!open(FILE, $filename eq "-" ? $filename : "< $filename")) {	print STDERR "$prog: can't open \`$filename': $!\n";	exit 1 unless $level;	return;    }    while (<FILE>) {	if (/^\.TS/) {	    $_ = <FILE>;	    if (!/^\./) {		$tbl++;		$soelim++ if $level;	    }	}	elsif (/^\.EQ/) {	    $_ = <FILE>;	    if (!/^\./ || /^\.[0-9]/) {		$eqn++;		$soelim++ if $level;	    }	}	elsif (/^\.PS([ 0-9.<].*)?$/) {	    if (/^\.PS\s*<\s*(\S+)/) {		$pic++;		$soelim++ if $level;		&process($1, $level);	    }	    else {	    	$_ = <FILE>;	    	if (!/^\./ || /^\.ps/) {		    $pic++;		    $soelim++ if $level;		}	    }	}	elsif (/^\.R1/ || /^\.\[/) {	    $refer++;	    $soelim++ if $level;	}	elsif (/^\.[PLI]P/) {	    $PP++;	}	elsif (/^\.P$/) {	    $P++;	}        elsif (/^\.(PH|SA)/) {            $mm++;	}	elsif (/^\.TH/) {	    $TH++;	}	elsif (/^\.SH/) {	    $SH++;	}	elsif (/^\.([pnil]p|sh)/) {	    $me++;	}	elsif (/^\.Dd/) {	    $mdoc++;	}	elsif (/^\.(Tp|Dp|De|Cx|Cl)/) {	    $mdoc_old = 1;	}        # In the old version of -mdoc `Oo' is a toggle, in the new it's	# closed by `Oc'.	elsif (/^\.Oo/) {	    $Oo++;	}	elsif (/^\.Oc/) {	    $Oo--;	}	if (/^\.so/) {	    chop;	    s/^.so *//;	    s/\\\".*//;	    s/ .*$//;	    &process($_, $level + 1) unless /\\/ || $_ eq "";	}    }    close(FILE);}if ($pic || $tbl || $eqn || $refer) {    $s = "-";    $s .= "s" if $soelim;    $s .= "R" if $refer;    $s .= "p" if $pic;    $s .= "t" if $tbl;    $s .= "e" if $eqn;    push(@command, $s);}if ($me > 0) {    push(@command, "-me");}elsif ($SH > 0 && $TH > 0) {    push(@command, "-man");}elsif ($PP > 0) {    push(@command, "-ms");}elsif ($P > 0 || $mm > 0) {    push(@command, "-mm");}elsif ($mdoc > 0) {    push(@command, ($mdoc_old || $Oo > 0) ? "-mdoc.old" : "-mdoc");}push(@command, "--") if @ARGV && $ARGV[0] =~ /^-./;push(@command, @ARGV);# We could implement an option to execute the command here.foreach (@command) {    next unless /[\$\\\"\';&()|<> \t\n]/;    s/\'/\'\\\'\'/;    $_ = "'" . $_ . "'";}print join(' ', @command), "\n";

⌨️ 快捷键说明

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