James Edward Gray II wrote:
> On Sep 14, 2005, at 8:21 AM, Robert Klemme wrote:
>
>> Ah!  In that case I'd something like:
>>
>> html.sub!(/(<p>)(.*?)(<\/p>)(.*)/) { $1 << $2.strip << $3 }
>> html.sub!(/<p>(.*?)<\/p>(.*)/) { "<p>#{$1.strip}</p>" }
>
> The method takes a chunk of HTML and pulls the first paragraph out of
> it (minus the <p> and </p> tags).  But I want to know if there was
> other content, so I can add an ellipses if needed.
>
> Here's the entire method, defined in a Rails helper module:
>
>      def excerpt( textile, id )
>          html = sanitize(textilize(textile))
>          html.sub!(/<p>(.*?)<\/p>(.*)\Z/m) { $1.strip }
>          if $2 =~ /\S/
>              "#{html} #{link_to '...', :action => :show, :id => id}"
>          else
>              html
>          end
>      end
>
> It works as expected now.

This might be a bit more efficient (dunno how often you call it):

     def excerpt( textile, id )
         html = sanitize(textilize(textile))
         html.sub!(/<p>(.*?)<\/p>(.*)\Z/m) { $1.strip }
         html << link_to( '...', :action => :show, :id => id ) if $2 =~
/\S/
         html
     end

An alternative

     def excerpt( textile, id )
         html = sanitize(textilize(textile))
         html.sub!(/<p>(.*?)<\/p>.*(\S)?\Z/m) { $1.strip }
         html << link_to( '...', :action => :show, :id => id ) if $2
         html
     end

Just an idea...

Cheers

    robert