David Buddrige wrote: > Hi all, > > I am writing a program which will re-arrange a doc++ comment. > > A doc++ comment is a C/C++ comment that starts with an extra "*". An > example of a doc++ comment is this: > > /** > @doc Some general info about a function. > @precondition Any precondition that the function has > @postcondition Any postcondition that the function has. > */ > > > > I want to have all of my doc++ comments formatted so that the start > comment "/**" is on a line by itself, and each @entry is on a line by > itself. > > At the moment, I have some doc++ comments that are like this: > > /** @doc > > This is some general info about a function > > @precondition > > This is info about a precondition. > */ > > I would like to re-arrange this comment so that it looks like this: > > /** > @doc This is some general info about a function > @precondition This is info about a precondition. > */ > > To do this, I have written the following function: > > # This subroutine takes as input a single array reference, and > # rearranges any doc++ commands that are split over multiple lines so > # that each doc++ command is on a line of its own, including the /** and > # */ delimiters which indicate the start and end of a doc++ comment. > > sub format_docpp_comment > { > my $doc_comment_array; > my $comment_line; > my $single_comment_line; > > $doc_comment_array = $_[0]; # give a friendly name to the array > > foreach $comment_line ( @$doc_comment_array ) > { > #chomp $comment_line; > my $temp_string; > $temp_string = $comment_line; > chomp $temp_string; > $single_comment_line .= $temp_string; > } > > # At this point we have a single string that contains our entire > # doc++ comment. We can now use simple pattern matching to parse > # it. > > $single_comment_line =~ m"(\/\*\*)(([\t\n > ]*)(\@)(doc|invariant|return|precondition|postcondition)([\t\n\w\.\ > ]+))+"; > print "2: $2\n"; > } > > > > At this point, the $2 variable has within it, the very first doc++ style > comment which is usually: > > @doc some text. > > I want to get at the rest of the repeated @somecommand doc++ commands. > > Does anyone know how this is done? > > I kind'of want to store what I have already matched in $2 to some > scalar, and then delete that part of the string matched so far, so that > I can repeat the pattern match for the next chunk. However I am not > sure how to proceed. > > thanks > > David.
I haven't really read your code careful enough to see what you have done wrong but from the description of your problem, the following seems to work well: #!/usr/bin/perl -w use strict; my $i =<<'M'; /** @abcd hi whatever @again whatever is the world */ M $i =~ tr/\n//d; $i =~ s#\*/$#\n\*/#; $i =~ s/@/\n\t@/g; print "$i\n"; __END__ prints: /** @abcd hi whatever @again whatever is the world */ you will have to make $i a array ref to your function of course but I am sure you know how to do that :-) david -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]