`
Beaver's
  • 浏览: 394665 次
  • 性别: Icon_minigender_2
  • 来自: 天津
社区版块
存档分类
最新评论

LXR 搜索关键字高亮显示

    博客分类:
  • lxr
 
阅读更多
前一段时间,使用lxr 搭建了 android源码索引平台,具体搭建过程参考另一篇blog:LXR 索引Android 源码

平台在逐步完善中,界面简单可依赖,并加入了用户单点登录、用户权限设定、平台访问计数、搜索关键字高亮显示等功能。

来说说关键字在源码中高亮显示的具体实现,这部分的开发,修改了lxr 底层lib 库以及ident文件,思想是对在url 中加入关键字信息,在点击link 后,跳转到源码文件,可以在url中获得关键字,实现高亮,具体实现如下:

ident 文件的修改,有“#  beaver add(update)的行”:

sub refexpand {
        my $templ = shift;
        my $ret   = '';

        my @refs = $index->symdeclarations($identifier, $releaseid);

        my $file_hits = 0;
        my $last_file;
        my $def;
        foreach my $def (@refs) {
        #       my ($file, $line, $type, $rel) = @$def;
                my ($file, $line, $type, $rel, $i) = @$def; # beaver add
                $i = $identifier; # beaver add
                $file_hits++ if $file ne $last_file;
                $last_file = $file;

                $rel &&= "(member of " . idref($rel, "search-member", $rel) . ")";
                $ret .= expandtemplate(
                        $templ,
                        (
                                file    => sub { $file },
                                line    => sub { $line },
                                type    => sub { $type },
                                rel     => sub { $rel },
                                [color=red]identifier => sub {$i},[/color]
                                fileref => sub {
                                        fileref("$file, line $line", "search-decl", $file, $line, $i); # beaver update
                                }
                        )
                );

                #       print("<span class=\"search-li1\"> $type_names{$type} in ".
                #             fileref("$file, line $line", "search-decl",
                #                     $file, $line).
                #             " $rel</span>\n");
        }
        $declare_hits = "<div style='margin-left:30px'>" . scalar @refs . " declarations in $file_hits files.</div>";
        return $ret;
}

sub usesexpand {
        my $templ = shift;
        my $ret   = '';

        my @uses = $index->symreferences($identifier, $releaseid);
        my $file_hits = 0;
        my $last_file;
        foreach my $ref (sort { $$a[0] cmp $$b[0] } @uses) {
        #       my ($file, $line) = @$ref;
               my ($file, $line ,$i) = @$ref; #beaver add
                $i = $identifier; #beaver add
                $file_hits++ if $file ne $last_file;
                $last_file = $file;
                $ret .= expandtemplate(
                        $templ,
                        (
                                file    => sub { $file },
                                line    => sub { $line },
                                [color=red]identifier => sub {$i},  # beaver add[/color]
                                fileref => sub {
                                        fileref("$file, line $line", "search-ref", $file, $line, $i); # beaver update
                                }
                        )
                );
        }
        $reference_hits = "<div style='margin-left:30px'>" . scalar @uses . " references in $file_hits files.</div>";
        return $ret;
}
...


修改 lxr/lib/LXR/Commom.pm文件中fileref 函数:

sub fileref {

        my ($desc, $css, $path, $line, $identifier, @args) = @_; # beaver update

        # jwz: URL-quote any special characters.
        $path =~ s|([^-a-zA-Z0-9.\@/_\r\n])|sprintf("%%%02X", ord($1))|ge;

        if ($line > 0 && length($line) < 3) {
                $line = ('0' x (3 - length($line))) . $line;
        }

        return ("<a class='$css' href=\"$config->{virtroot}/source$path"
                  .(&urlargs(@args) ne '' ? &urlargs(@args)."&" : "?")
                  . "i=$identifier"       # beaver add
                  . ($line > 0 ? "#$line" : "")
                  . "\"\>$desc</a>");
...
}


修改以上两个文件,实现搜索的关键字在源码中高亮显示,截图如下所示,分别为输入关键字-》显示搜索结果-》点击list查看源码:

  • 大小: 43.3 KB
  • 大小: 109.2 KB
  • 大小: 62.3 KB
分享到:
评论

相关推荐

    lxr-0.9.10.gz_lxr_lxr source download

    1. **全文搜索**:LXR允许用户输入关键字进行全局搜索,返回的结果会包含所有匹配的源文件、函数、变量等,极大地提高了代码查找效率。 2. **源码导航**:每个源文件都配有一份详细的索引,用户可以点击文件名直接...

    lxr-0.9.6.tgz

    5. **源代码高亮**:LXR对显示的源代码进行语法高亮,便于阅读和理解代码逻辑。 6. **自定义配置**:LXR允许用户根据自己的需求调整界面和搜索设置,以适应不同的开发环境和习惯。 安装和使用LXR 0.9.6版通常涉及...

    lxr-0.9.5.zip_lxr_lxr-0.9.5

    - **自定义配置**:可以根据个人需求定制lxr的行为,例如设置搜索范围、显示格式等。 2. **安装与使用:** - 解压"lxr-0.9.5.zip",获取lxr的源码包。 - 配置环境,确保具备编译所需的依赖,如GCC、Perl等。 - ...

    lxr-0.3.tar.gz_lxr_lxr tar

    对于lxr的高级用法,可以自定义配置文件,设置索引规则、搜索选项等,以满足不同项目的需求。此外,lxr还可以与其他版本控制系统如Git或SVN集成,实现对版本化源码的动态索引。 总的来说,lxr是开发过程中的一款...

    LXR+mysql+glimpse+apache源码浏览平台搭建心得(二)lxr.conf

    LXR+mysql+glimpse+apache源码浏览平台搭建心得(二)lxr.conf

    LXR+mysql+glimpse+apache源码浏览平台搭建心得(一)

    首先,LXR(Linux Cross-Reference)是一款强大的开源源码索引工具,它能为大型代码库生成可供搜索的索引,便于快速查找函数、变量、宏定义等。安装LXR需要先获取源码,并遵循以下步骤: 1. 安装依赖:在大多数...

    LXR,PPAR

    方法:我们研究了LXR激动剂(GW3965)或PPARγ(吡格列酮)和PPARδ(GW0742)激动剂在SLE动物模型,雌性MRL / MpJ-Fas / J小鼠和BALB / cAJcl小鼠经p烷治疗后的疗效。 使用单向方差分析和Tukey的真实显着差异检验...

    Construction of Recombinant Lentivirus Vector Targeting Bovine LXRα mRNA and Its Silencing Effects on Bovine Muscle Satellite Cells

    牛LXRα基因mRNA重组慢病毒载体的构建及其对牛肌肉卫星细胞的干扰效果,刘永峰,赵璐,肝X受体α(LXRα)基因是核激素受体家族的成员,它可以调节参与胆固醇代谢基因的转录。近期研究发现LXRα被认为是一个调节巨噬...

    计算机网络lxr4.pkt

    计算机网络lxr4.pkt

    论文研究 - 儿茶素绿茶GMB4克隆通过培养的巨噬细胞暴露的OX-LDL中的LXR信号传导增加ABCA1的mRNA

    基于生物信息学研究的儿茶素显示作为有效的LXR激动剂候选物,可以用作动脉粥样硬化的抑制剂。 这项研究旨在证明,通过在暴露于ox-LDL的培养的巨噬细胞中利用ABCA1,ABCG1,SRB1基因表达的作用,施用Catechins绿茶...

    LXR Cross Referencer-开源

    通用源代码索引器和交叉引用器,可提供基于Web的源代码浏览以及指向任何标识符的定义和用法的链接。 支持多种语言。 http://lxr.sourceforge.net中的最新信息

    LXRβ调节海马突触可塑性改善APP_PS1小鼠认知功能的研究.pdf

    【LXRβ(肝X受体β)】:LXRβ是属于核受体家族的一种蛋白质,它在调节胆固醇代谢和炎症反应中起着关键作用。研究表明,LXRβ可能通过影响神经元功能和突触可塑性,对阿尔茨海默病的进程产生影响。 【突触可塑性】...

    LXR.rar_android_contact

    "LXR.rar_android_contact"这个压缩包文件包含的是Android应用程序处理联系人(Contact)功能的源代码,这对于开发者,尤其是那些致力于构建社交应用或者需要管理用户联系信息的App开发者来说,是一个非常有价值的...

    LXR:LXR鼓合成器固件的源文件

    Sonic Potions LXR Drumsynth固件 LXR是基于32位Cortex-M4处理器和Atmega644 8位CPU的数字鼓合成器。 由朱利安·施密特(Julian Schmidt)开发。 The 'front' folder contains the AVR code The 'mainboard' folder...

    离心冷水机组制冷剂替代物—— LXR 1和 LXR 2 (2002年)

    针对离心式冷水机组制冷剂的特殊要求,遵循优势互补的原则,筛选出了两种新的氟利昂 12(R12)离心式冷水机组替代物 LXR1和 LXR2。对它们的基本物性参数和循环性能与 R12进行了对比;并研究了蒸发温度、冷凝温度、过热度...

    hsa-miR-206负调控核受体LXRα mRNA的表达水平 (2013年)

    本研究发现,hsa-miR-206通过与LXRα 3′ UTR直接相互作用,以抑制细胞中LXRα的mRNA水平,下调LXRα的转录活性,并最终使LXRα配体GW3965对 LXR的目的基因SCD-1的诱导作用受到抑制.这些结果表明,hsa-miR-206能够...

    Lxr82.github.io

    Lxr82.github.io 测试

    glimpse 最新版本

    Webglimpse requires Glimpse. Separate use of Glimpse requires a license. If you are installing Webglimpse via ssh, you will need to install Glimpse first. (The FTP and cPanel installers automatically ...

    java版商城源码下载-LXR-Kill1:LXR-Kill1

    java版商城源码下载 SpringBoot-SecondKill 介绍 基于SpringBoot+Mybatis+Mysql+中间件构建的商城秒杀系统;其中,中间件主要包括:缓存中间件Redis、消息中间件RabbitMQ、统一协调调度中心中间件ZooKeeper、综合...

    电信设备-通过LXRa基因多态性进行牛育种方法.zip

    《通过LXRα基因多态性进行牛育种方法》 在现代畜牧业中,基因育种技术已经成为提高动物生产性能、抗病能力和适应性的关键手段。这篇资料详细介绍了利用LXRα(Liver X Receptor alpha)基因多态性在牛育种中的应用...

Global site tag (gtag.js) - Google Analytics