Changeset 3919


Ignore:
Timestamp:
2003-03-19T14:57:06+12:00 (21 years ago)
Author:
jrm21
Message:

tidy and fix reg-exps when looking for #includes... it got stuck in a loop
in certain circumstances if "#include" was in there but not an actual
compiler statement...

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/gsdl/perllib/plugins/SRCPlug.pm

    r3540 r3919  
    179179
    180180    # Get '#include' directives for metadata
    181     if ($$textref =~ /\#\W?include\b/) {
    182     my $includes=$$textref;
    183 
    184     # remove commented lines
    185     $includes =~ s@/\*.*?\*/@@sg; # treat string as single line
    186     # ? means match smallest instead of longest !!!
    187     $includes =~ s@//.*$@@mg; # treat string as multiple lines
    188 
    189     # remove non- include lines (well, lines without a '#')
    190     $includes =~ s/^[^\#]*$//mg;
    191 
    192     # lines don't always start '#include "'.... we have to allow (eg)
    193     # '#  include ...'
    194     # '  #include ...'
    195     # also make sure it contains an actual filename, as we don't
    196     # do pre-processing (eg #including a macro).
    197     while ($includes =~ /\#\s*include.*(\"|<)/) {
    198         $includes =~ s/^.*?include.*?(\"|<)(.*)(\"|>).*$//m;
    199         my $include=$2;
    200         # remove leading pathname
    201         $include =~ s@^.*(/|\\)@@;
    202 
    203         my $incs_done=$doc_obj->get_metadata($section, "includes");
    204         foreach my $elem (@$incs_done) {
    205         if ("$elem" eq "$include") {goto header_done;}
    206         }
    207         $doc_obj->add_utf8_metadata($topsection, "includes", $include);
    208       header_done:
     181    if ($$textref !~ /\#\s*include\b/) {
     182    return;
     183    }
     184
     185    my @includes =
     186    ($$textref =~ m/^\s*\#\s*include\s*(?:\"|<)(.*?)(?:\"|>)/mg);
     187   
     188    my $incs_done_ref=$doc_obj->get_metadata($section, "includes");
     189    my @incs_done;
     190    if (defined($incs_done_ref)) {
     191    @incs_done=@$incs_done_ref;
     192    } else {
     193    @incs_done=();
     194    }
     195
     196    foreach my $inc (@includes) {
     197    # add entries, but only if they don't already exist
     198    if (!join('', map {$_ eq "$inc"?1:""} @incs_done)) {
     199        push @incs_done, $inc;
     200        $doc_obj->add_utf8_metadata($topsection, "includes", $inc);
    209201    }
    210202    }
Note: See TracChangeset for help on using the changeset viewer.