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

📄 prepare-changelog.pl

📁 无线通信的主要编程软件,是无线通信工作人员的必备工具,关天相关教程我会在后续传上.
💻 PL
📖 第 1 页 / 共 2 页
字号:
            # Open brace.            if ($1 eq "{")              {                # Promote potiential name to real function name at the                # start of the outer level set of braces (function body?).                if (!$in_braces and $potential_start)                  {                    $start = $potential_start;                    $name = $potential_name;                  }                $in_braces++;                next;              }            # Close brace.            if ($1 eq "}")              {                $in_braces--;                # End of an outer level set of braces.                # This could be a function body.                if (!$in_braces and $name)                  {                    push @ranges, [ $start, $INPUT_LINE_NUMBER, $name ];                    $name = "";                  }                $potential_start = 0;                $potential_name = "";                next;              }            # Semicolon.            if ($1 eq ";")              {                $potential_start = 0;                $potential_name = "";                next;              }            # Word.            $word = $1;            if (!$in_parentheses)              {                $potential_start = 0;                $potential_name = "";              }            if (!$potential_start)              {                $potential_start = $INPUT_LINE_NUMBER;                $potential_name = "";              }          }      }    warn "mismatched braces in $file_name\n" if $in_braces;    warn "mismatched parentheses in $file_name\n" if $in_parentheses;    return @ranges;  }# Read a file and get all the line ranges of the things that look like Java# classes, interfaces and methods.## A class or interface name is the word that immediately follows# `class' or `interface' when followed by an open curly brace and not# a semicolon. It can appear at the top level, or inside another class# or interface block, but not inside a function block## A class or interface starts at the first character after the first close# brace or after the function name and ends at the close brace.## A function name is the last word before an open parenthesis before# an open brace rather than a semicolon. It can appear at top level or# inside a class or interface block, but not inside a function block.## A function starts at the first character after the first close# brace or after the function name and ends at the close brace.## Comment handling is simple-minded but will work for all but pathological cases.## Result is a list of triples: [ start_line, end_line, function_name ].sub get_function_line_ranges_for_java  {    my ($file_handle, $file_name) = @_;    my @current_scopes;    my @ranges;    my $in_comment = 0;    my $in_macro = 0;    my $in_parentheses = 0;    my $in_braces = 0;    my $in_non_block_braces = 0;    my $class_or_interface_just_seen = 0;    my $word = "";    my $potential_start = 0;    my $potential_name = "";    my $potential_name_is_class_or_interface = 0;        my $start = 0;    my $name = "";    my $current_name_is_class_or_interface = 0;        while (<$file_handle>)      {        # Handle continued multi-line comment.        if ($in_comment)          {            next unless s-.*\*/--;            $in_comment = 0;          }        # Handle continued macro.        if ($in_macro)          {            $in_macro = 0 unless /\\$/;            next;          }        # Handle start of macro (or any preprocessor directive).        if (/^\s*\#/)          {            $in_macro = 1 if /^([^\\]|\\.)*\\$/;            next;          }        # Handle comments and quoted text.        while (m-(/\*|//|\'|\")-) # \' and \" keep emacs perl mode happy          {            my $match = $1;            if ($match eq "/*")              {                if (!s-/\*.*?\*/--)                  {                    s-/\*.*--;                    $in_comment = 1;                  }              }            elsif ($match eq "//")              {                s-//.*--;              }            else # ' or "              {                if (!s-$match([^\\]|\\.)*?$match--)                  {                    warn "mismatched quotes at line $INPUT_LINE_NUMBER in $file_name\n";                    s-$match.*--;                  }              }          }                # Find function names.        while (m-(\w+|[(){};])-g)          {            # Open parenthesis.            if ($1 eq "(")              {                if (!$in_parentheses) {                    $potential_name = $word;                    $potential_name_is_class_or_interface = 0;                }                $in_parentheses++;                next;              }            # Close parenthesis.            if ($1 eq ")")              {                $in_parentheses--;                next;              }            # Open brace.            if ($1 eq "{")              {                # Promote potiential name to real function name at the                # start of the outer level set of braces (function/class/interface body?).                if (!$in_non_block_braces                    and (!$in_braces or $current_name_is_class_or_interface)                     and $potential_start)                  {                    if ($name)                      {                          push @ranges, [ $start, ($INPUT_LINE_NUMBER - 1),                                           join ('.', @current_scopes) ];                      }                    $current_name_is_class_or_interface = $potential_name_is_class_or_interface;                                        $start = $potential_start;                    $name = $potential_name;                    push (@current_scopes, $name);                  } else {                      $in_non_block_braces++;                  }                $potential_name = "";                $potential_start = 0;                 $in_braces++;                next;              }            # Close brace.            if ($1 eq "}")              {                $in_braces--;                                # End of an outer level set of braces.                # This could be a function body.                if (!$in_non_block_braces)                   {                    if ($name)                      {                        push @ranges, [ $start, $INPUT_LINE_NUMBER,                                         join ('.', @current_scopes) ];                                                pop (@current_scopes);                                                if (@current_scopes)                           {                            $current_name_is_class_or_interface = 1;                                                        $start = $INPUT_LINE_NUMBER + 1;                            $name =  $current_scopes[$#current_scopes-1];                          }                        else                          {                            $current_name_is_class_or_interface = 0;                            $start = 0;                            $name =  "";                          }                     }                  }                else                  {                    $in_non_block_braces-- if $in_non_block_braces;                  }                $potential_start = 0;                $potential_name = "";                next;              }            # Semicolon.            if ($1 eq ";")              {                $potential_start = 0;                $potential_name = "";                next;              }                        if ($1 eq "class" or $1 eq "interface") {                $class_or_interface_just_seen = 1;                next;            }            # Word.            $word = $1;            if (!$in_parentheses)              {                if ($class_or_interface_just_seen) {                    $potential_name = $word;                    $potential_start = $INPUT_LINE_NUMBER;                    $class_or_interface_just_seen = 0;                    $potential_name_is_class_or_interface = 1;                    next;                }              }            if (!$potential_start)              {                $potential_start = $INPUT_LINE_NUMBER;                $potential_name = "";              }            $class_or_interface_just_seen = 0;          }      }    warn "mismatched braces in $file_name\n" if $in_braces;    warn "mismatched parentheses in $file_name\n" if $in_parentheses;    return @ranges;  }

⌨️ 快捷键说明

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