public Method

BlueCloth.transform_code_spans( str, rs )

Transform backticked spans into spans.

Source Code

# File bluecloth.rb, line 883
def transform_code_spans( str, rs )
        @log.debug " Transforming code spans"

        # Set up the string scanner and just return the string unless there's at
        # least one backtick.
        @scanner.string = str.dup
        unless @scanner.exist?( /`/ )
                @scanner.terminate
                @log.debug "No backticks found for code span in %p" % str
                return str
        end

        @log.debug "Transforming code spans in %p" % str

        # Build the transformed text anew
        text = ''

        # Scan to the end of the string
        until @scanner.empty?

                # Scan up to an opening backtick
                if pre = @scanner.scan_until( /.?(?=`)/m )
                        text += pre
                        @log.debug "Found backtick at %d after '...%s'" % [ @scanner.pos, text[-10, 10] ]

                        # Make a pattern to find the end of the span
                        opener = @scanner.scan( /`+/ )
                        len = opener.length
                        closer = Regexp::new( opener )
                        @log.debug "Scanning for end of code span with %p" % closer

                        # Scan until the end of the closing backtick sequence. Chop the
                        # backticks off the resultant string, strip leading and trailing
                        # whitespace, and encode any enitites contained in it.
                        codespan = @scanner.scan_until( closer ) or
                                raise FormatError::new( @scanner.rest[0,20],
                                        "No %p found before end" % opener )

                        @log.debug "Found close of code span at %d: %p" % [ @scanner.pos - len, codespan ]
                        codespan.slice!( -len, len )
                        text += "<code>%s</code>" %
                                encode_code( codespan.strip, rs )

                # If there's no more backticks, just append the rest of the string
                # and move the scan pointer to the end
                else
                        text += @scanner.rest
                        @scanner.terminate
                end
        end

        return text
end
Comments

Have your say
Please use Textile formatting (click here for a cheat sheet). Use <code/> and <pre/> for code samples.
Click here to login with OpenID to to post comments.