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

📄 shtags.pl

📁 MSYS在windows下模拟了一个类unix的终端
💻 PL
字号:
#!/usr/bin/env perl## shtags: create a tags file for perl scripts## Author:	Stephen Riehm# Last Changed:	96/11/27 19:46:06## "@(#) shtags 1.1 by S. Riehm"## obvious... :-)sub usage    {    print <<_EOUSAGE_ ;USAGE: $program [-kvwVx] [-t <file>] <files>    -t <file>	Name of tags file to create. (default is 'tags')    -s <shell>	Name of the shell language in the script    -v		Include variable definitions.		(variables mentioned at the start of a line)    -V		Print version information.    -w		Suppress "duplicate tag" warnings.    -x		Explicitly create a new tags file. Normally tags are merged.    <files>	List of files to scan for tags._EOUSAGE_    exit 0    }sub version{    #    # Version information    #    @id = split( ', ', 'scripts/bin/shtags, /usr/local/, LOCAL_SCRIPTS, 1.1, 96/11/27, 19:46:06' );    $id[0] =~ s,.*/,,;    print <<_EOVERS;$id[0]:		$id[3]Last Modified:	@id[4,5]Component:	$id[1]Release:	$id[2]_EOVERS    exit( 1 );}## initialisations#($program = $0) =~ s,.*/,,;require 'getopts.pl';## parse command line#&Getopts( "t:s:vVwx" ) || &usage();$tags_file = $opt_t || 'tags';$explicit = $opt_x;$variable_tags = $opt_v;$allow_warnings = ! $opt_w;&version          if $opt_V;&usage()	unless @ARGV != 0;# slurp up the existing tags. Some will be replaced, the ones that aren't# will be re-written exactly as they were readif( ! $explicit && open( TAGS, "< $tags_file" ) )    {    while( <TAGS> )	{	/^\S+/;	$tags{$&} = $_;	}    close( TAGS );    }## for each line of every file listed on the command line, look for a# 'sub' definition, or, if variables are wanted aswell, look for a# variable definition at the start of a line#while( <> )    {    &check_shell($_), ( $old_file = $ARGV ) if $ARGV ne $old_file;    next unless $shell;    if( $shell eq "sh" )	{	next	unless /^\s*(((\w+)))\s*\(\s*\)/		    || ( $variable_tags && /^(((\w+)=))/ );	$match = $3;	}    if( $shell eq "ksh" )	{	# ksh	next	unless /^\s*function\s+(((\w+)))/		    || ( $variable_tags && /^(((\w+)=))/ );	$match = $3;	}    if( $shell eq "perl" )	{	# perl	next	unless /^\s*sub\s+(\w+('|::))?(\w+)/		    || /^\s*(((\w+))):/		    || ( $variable_tags && /^(([(\s]*[\$\@\%]{1}(\w+).*=))/ );	$match = $3;	}    if( $shell eq "tcl" )	{	next	unless /^\s*proc\s+(((\S+)))/		    || ( $variable_tags && /^\s*set\s+(((\w+)\s))/ );	$match = $3;	}    chop;    warn "$match - duplicate ignored\n"	if ( $new{$match}++	    || !( $tags{$match} = sprintf( "%s\t%s\t?^%s\$?\n", $match, $ARGV, $_ ) ) )	    && $allow_warnings;    }# write the new tags to the tags file - note that the whole file is rewrittenopen( TAGS, "> $tags_file" );foreach( sort( keys %tags ) )    {    print TAGS "$tags{$_}";    }close( TAGS );sub check_shell    {    local( $_ ) = @_;    # read the first line of a script, and work out which shell it is,    # unless a shell was specified on the command line    #    # This routine can't handle clever scripts which start sh and then    # use sh to start the shell they really wanted.    if( $opt_s )	{	$shell = $opt_s;	}    else	{	$shell = "sh"	if /^:$/ || /^#!.*\/bin\/sh/;	$shell = "ksh"	if /^#!.*\/ksh/;	$shell = "perl"	if /^#!.*\/perl/;	$shell = "tcl"  if /^#!.*\/wish/;	printf "Using $shell for $ARGV\n";	}    }

⌨️ 快捷键说明

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