亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? generic.pm

?? 重新包裝過的lxr
?? PM
字號:
# -*- tab-width: 4 -*- ################################################# $Id: Generic.pm,v 1.1.1.1 2006/04/26 07:48:23 hellwolf Exp $## Implements generic support for any language that ectags can parse.# This may not be ideal support, but it should at least work until# someone writes better support.## This program 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 of the License, or# (at your option) any later version.## This program 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., 675 Mass Ave, Cambridge, MA 02139, USA.package LXR::Lang::Generic;$CVSID = '$Id: Generic.pm,v 1.1.1.1 2006/04/26 07:48:23 hellwolf Exp $ ';use strict;use LXR::Common;use LXR::Lang;use vars qw($AUTOLOAD);my $generic_config;@LXR::Lang::Generic::ISA = ('LXR::Lang');sub new {	my ($proto, $pathname, $release, $lang) = @_;	my $class = ref($proto) || $proto;	my $self = {};	bless($self, $class);	$$self{'release'}  = $release;	$$self{'language'} = $lang;	read_config() unless defined $generic_config;	%$self = (%$self, %$generic_config);	# Set langid	$$self{'langid'} = $self->langinfo('langid');	die "No langid for language $lang" if !defined $self->langid;	return $self;}# This is only executed once, saving the overhead of processing the# config file each time.  Because it is only done once, we also use# this to check the version of ctags.sub read_config {	open(CONF, $config->genericconf) || die "Can't open " . $config->genericconf . ", $!";	local ($/) = undef;	my $config_contents = <CONF>;	$config_contents =~ /(.*)/s;	$config_contents = $1;                                                        #untaint it	$generic_config  = eval("\n#line 1 \"generic.conf\"\n" . $config_contents);	die($@) if $@;	close CONF;	# Setup the ctags to declid mapping	my $langmap = $generic_config->{'langmap'};	foreach my $lang (keys %$langmap) {		my $typemap = $langmap->{$lang}{'typemap'};		foreach my $type (keys %$typemap) {			$typemap->{$type} = $index->getdecid($langmap->{$lang}{'langid'}, $typemap->{$type});		}	}	my $ctags = $config->ectagsbin;	$ENV{'PATH'} = '/bin:/usr/local/bin:/usr/bin:/usr/sbin';	my $version = `$ctags --version`;	$version =~ /Exuberant ctags +(\d+)/i;	if ($1 < 5) {		die "Exuberant ctags version 5 or above required, found $version\n";	}}sub indexfile {	my ($self, $name, $path, $fileid, $index, $config) = @_;	my $typemap = $self->langinfo('typemap');	my $langforce = ${ $self->eclangnamemapping }{ $self->language };	if (!defined $langforce) {		$langforce = $self->language;	}	if ($config->ectagsbin) {		open(CTAGS,			join(" ",				$config->ectagsbin, $self->ectagsopts, "--excmd=number",				"--language-force=$langforce", "-f", "-", $path, "|")		  )		  or die "Can't run ectags, $!";		while (<CTAGS>) {			chomp;			my ($sym, $file, $line, $type, $ext) = split(/\t/, $_);			$line =~ s/;\"$//;  #" fix fontification			$ext  =~ /language:(\w+)/;			$type = $typemap->{$type};			if (!defined $type) {				print "Warning: Unknown type ", (split(/\t/, $_))[3], "\n";				next;			}			# TODO: can we make it more generic in parsing the extension fields?			if (defined($ext) && $ext =~ /^(struct|union|class|enum):(.*)/) {				$ext = $2;				$ext =~ s/::<anonymous>//g;			} else {				$ext = undef;			}			$index->index($sym, $fileid, $line, $self->langid, $type, $ext);		}		close(CTAGS);	}}# This method returns the regexps used by SimpleParse to break the# code into different blocks such as code, string, include, comment etc.# Since this depends on the language, it's configured via generic.confsub parsespec {	my ($self) = @_;	my @spec = $self->langinfo('spec');	return @spec;}# Process a chunk of code# Basically, look for anything that looks like an identifier, and if# it is then make it a hyperlink, unless it's a reserved word in this# language.# Parameters:#   $code - reference to the code to markup#   @itag - ???# TODO : Make the handling of identifier recognition language dependantsub processcode {	my ($self, $code) = @_;	my ($start, $id);	$$code =~ s {(^|[^\w\#])([\w~][\w]*)\b}	# Replace identifier by link unless it's a reserved word	{	  $1.		(		  grep(/^$2$/, $self->langinfo('reserved')) ? "<span class='reserved'>$2</span>" : 		  ($index->issymbol($2, $$self{'release'}) ? join($2, @{$$self{'itag'}}) : $2)		);	}ge;}## Find references to symbols in the file#sub referencefile {	my ($self, $name, $path, $fileid, $index, $config) = @_;	require LXR::SimpleParse;	# Use dummy tabwidth here since it doesn't matter for referencing	&LXR::SimpleParse::init(new FileHandle($path), 1, $self->parsespec);	my $linenum = 1;	my ($btype, $frag) = &LXR::SimpleParse::nextfrag;	my @lines;	my $ls;	while (defined($frag)) {		@lines = ($frag =~ /(.*?\n)/g, $frag =~ /([^\n]*)$/);		if (defined($btype)) {			if ($btype eq 'comment' or $btype eq 'string' or $btype eq 'include') {				$linenum += @lines - 1;			} else {				print "BTYPE was: $btype\n";			}		} else {			my $l;			my $string;			foreach $l (@lines) {				foreach (					$l =~ /(?:^|[^a-zA-Z_\#]) 	# Non-symbol chars.				 (\~?_*[a-zA-Z][a-zA-Z0-9_]*) # The symbol.				 \b/ogx				  )				{					$string = $_;					#		  print "considering $string\n";					if (!grep(/^$string$/, $self->langinfo('reserved'))						&& $index->issymbol($string))					{						#			print "adding $string to references\n";						$index->reference($string, $fileid, $linenum);					}				}				$linenum++;			}			$linenum--;		}		($btype, $frag) = &LXR::SimpleParse::nextfrag;	}	print("+++ $linenum\n");}# Autoload magic to allow access using $generic->variable syntax# blatently ripped from Config.pm - I still don't fully understand how# this works.sub variable {	my ($self, $var, $val) = @_;	$self->{variables}{$var}{value} = $val if defined($val);	return $self->{variables}{$var}{value}	  || $self->vardefault($var);}sub varexpand {	my ($self, $exp) = @_;	$exp =~ s/\$\{?(\w+)\}?/$self->variable($1)/ge;	return $exp;}sub value {	my ($self, $var) = @_;	if (exists($self->{$var})) {		my $val = $self->{$var};		if (ref($val) eq 'ARRAY') {			return map { $self->varexpand($_) } @$val;		} elsif (ref($val) eq 'CODE') {			return $val;		} else {			return $self->varexpand($val);		}	} else {		return undef;	}}sub AUTOLOAD {	my $self = shift;	(my $var = $AUTOLOAD) =~ s/.*:://;	my @val = $self->value($var);	if (ref($val[0]) eq 'CODE') {		return $val[0]->(@_);	} else {		return wantarray ? @val : $val[0];	}}sub langinfo {	my ($self, $item) = @_;	my $val;	my $map = $self->langmap;	die if !defined $map;	if (exists $$map{ $self->language }) {		$val = $$map{ $self->language };	} else {		return undef;	}	if (defined $val && defined $$val{$item}) {		if (ref($$val{$item}) eq 'ARRAY') {			return wantarray ? @{ $$val{$item} } : $$val{$item};		}		return $$val{$item};	} else {		return undef;	}}1;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
3atv一区二区三区| 国产99精品国产| 国产精品乱码妇女bbbb| 日韩免费看的电影| 91麻豆精品国产91久久久使用方法 | 亚洲人成网站在线| 欧美激情自拍偷拍| 国产精品黄色在线观看| 国产精品美女久久久久aⅴ| 中文字幕精品一区二区三区精品| 国产欧美一区二区精品久导航| 欧美激情一区三区| ●精品国产综合乱码久久久久| 亚洲丝袜美腿综合| 亚洲一区二区三区自拍| 午夜精品久久久久久久| 看电视剧不卡顿的网站| 国产91在线看| 色激情天天射综合网| 91精品国产综合久久久久久久久久| 日韩三级电影网址| 久久久久久久久久久99999| 欧美成人一区二区三区片免费 | a4yy欧美一区二区三区| 欧美在线播放高清精品| 日韩三级.com| 中文字幕制服丝袜成人av| 亚洲成人午夜电影| 狠狠色狠狠色合久久伊人| 99久久综合国产精品| 欧美高清视频不卡网| 国产视频视频一区| 亚洲高清一区二区三区| 国产成人综合在线播放| 99久久亚洲一区二区三区青草| 欧美性受xxxx黑人xyx性爽| 久久综合久久鬼色中文字| 国产精品国产三级国产aⅴ无密码| 亚洲va欧美va国产va天堂影院| 国产精品2024| 午夜国产精品一区| av电影在线观看完整版一区二区| 欧美电影影音先锋| av高清不卡在线| 亚洲精品在线一区二区| 一区二区欧美国产| 成人午夜激情片| 精品国产百合女同互慰| 午夜成人免费电影| 99久久99久久免费精品蜜臀| 日韩精品专区在线影院重磅| 一区二区三区产品免费精品久久75| 国产精品69久久久久水密桃| 337p亚洲精品色噜噜狠狠| 亚洲伦理在线精品| 成人精品视频网站| 亚洲精品一区在线观看| 91久久线看在观草草青青| 国产亚洲成aⅴ人片在线观看| 日韩电影一区二区三区四区| 成人妖精视频yjsp地址| 久久免费看少妇高潮| 麻豆成人久久精品二区三区红| 在线观看av不卡| **欧美大码日韩| 国产精品亚洲а∨天堂免在线| 久久精品国产精品亚洲精品| 911精品产国品一二三产区| 一区二区三区中文在线| 91国产成人在线| 亚洲丝袜美腿综合| 99国产一区二区三精品乱码| 日本一区二区综合亚洲| 国产福利一区二区三区| 国产欧美一区二区精品性色| 国产一区二区在线观看免费| www国产成人免费观看视频 深夜成人网| 91污在线观看| 一卡二卡三卡日韩欧美| 91福利国产精品| 亚洲综合色噜噜狠狠| 欧美午夜精品久久久久久超碰| 亚洲激情在线播放| 欧美日本在线一区| 美女网站一区二区| 欧美精品一区二区蜜臀亚洲| 欧美精品一区二| 国产成人在线电影| 国产日韩欧美一区二区三区综合| 波多野结衣在线aⅴ中文字幕不卡| 国产精品乱码人人做人人爱| 在线影视一区二区三区| 婷婷成人激情在线网| 精品久久久久一区二区国产| 成人精品国产福利| 一区二区三区日韩欧美精品| 日本亚洲视频在线| 欧美国产日产图区| 欧美三级电影精品| 狠狠网亚洲精品| 亚洲欧洲综合另类| 91精品国产综合久久香蕉的特点| 国产一区激情在线| 亚洲日本一区二区三区| 欧美一区二区不卡视频| 成人性生交大片免费看中文网站| 亚洲第一成年网| 久久一二三国产| 亚洲伊人色欲综合网| 精品久久久网站| 色一区在线观看| 青娱乐精品视频在线| 国产精品久久久久久久久免费丝袜| 精品婷婷伊人一区三区三| 国产精品正在播放| 丝袜脚交一区二区| 亚洲国产精品成人综合 | 99精品视频一区二区三区| 水野朝阳av一区二区三区| 欧美激情一二三区| 欧美不卡一区二区三区四区| 色视频欧美一区二区三区| 狠狠狠色丁香婷婷综合激情| 亚洲第一成年网| 亚洲视频一区在线| 亚洲精品一区二区三区香蕉 | 日韩精彩视频在线观看| 国产精品剧情在线亚洲| 精品少妇一区二区三区日产乱码| 欧洲一区二区av| 成人黄色一级视频| 国产主播一区二区三区| 日本不卡视频在线观看| 亚洲午夜在线视频| 亚洲色图欧洲色图婷婷| 国产精品久久久久久久久图文区 | 成人毛片在线观看| 极品少妇xxxx精品少妇| 日韩精品成人一区二区在线| 一区二区三区在线免费播放| 国产精品污网站| 国产日韩精品一区| 久久久不卡影院| 久久久国产午夜精品| 久久伊人中文字幕| 久久视频一区二区| 久久影院午夜片一区| 国产亚洲欧洲一区高清在线观看| 日韩精品中文字幕一区二区三区 | 久久久久亚洲综合| 日韩视频123| 欧美丰满少妇xxxxx高潮对白| 欧美日韩一区二区三区不卡| 一区二区国产盗摄色噜噜| 亚洲欧美视频在线观看视频| 亚洲人成亚洲人成在线观看图片 | 国产精品美女久久久久久久久 | 国产精品视频一区二区三区不卡 | 色综合久久综合| 色婷婷av一区二区三区大白胸| 日本韩国欧美国产| 欧美精品一二三| 欧美大片在线观看一区二区| 久久影视一区二区| 国产精品天美传媒沈樵| 亚洲男人的天堂在线aⅴ视频| 色婷婷亚洲婷婷| 欧美日韩国产免费一区二区| 欧美精品一二三四| 欧美精品一区二区三区高清aⅴ| 国产日韩av一区| 亚洲美腿欧美偷拍| 日本成人在线一区| 国产精品18久久久久久久久| 99久久免费视频.com| 欧美喷潮久久久xxxxx| 精品欧美一区二区在线观看 | 午夜影院久久久| 狠狠色丁香婷婷综合久久片| www.亚洲人| 日韩丝袜情趣美女图片| 中文在线资源观看网站视频免费不卡| 日韩码欧中文字| 久久99精品久久久久婷婷| 91色porny在线视频| 日韩一区二区三区在线观看| 成人欧美一区二区三区| 美洲天堂一区二卡三卡四卡视频| 国产成人av电影免费在线观看| 欧美日韩在线播| 久久久亚洲午夜电影| 一区二区免费在线| 国产激情一区二区三区四区| 欧美偷拍一区二区| 国产亚洲成av人在线观看导航| 午夜久久久久久| 99久久免费精品| 国产午夜久久久久| 麻豆91在线观看| 欧美三级资源在线|