RedCloth 4.1.9-universal-java → 4.2.0-universal-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of RedCloth might be problematic. Click here for more details.
- data/CHANGELOG +55 -0
 - data/Manifest +34 -38
 - data/README +17 -5
 - data/Rakefile +79 -30
 - data/RedCloth.gemspec +8 -9
 - data/ext/redcloth_scan/redcloth.h +38 -13
 - data/lib/redcloth.rb +9 -3
 - data/lib/redcloth/formatters/html.rb +2 -2
 - data/lib/redcloth/formatters/latex.rb +99 -54
 - data/lib/redcloth/formatters/latex_entities.yml +2 -2
 - data/lib/redcloth/version.rb +9 -4
 - data/lib/redcloth_scan.jar +0 -0
 - data/lib/tasks/pureruby.rake +12 -0
 - data/spec/custom_tags_spec.rb +50 -0
 - data/spec/differs/inline.rb +48 -0
 - data/{test/test_erb.rb → spec/erb_spec.rb} +6 -9
 - data/spec/extension_spec.rb +26 -0
 - data/{test → spec/fixtures}/basic.yml +90 -4
 - data/{test → spec/fixtures}/code.yml +29 -0
 - data/{test → spec/fixtures}/definitions.yml +0 -0
 - data/{test → spec/fixtures}/extra_whitespace.yml +0 -0
 - data/{test → spec/fixtures}/filter_html.yml +0 -0
 - data/{test → spec/fixtures}/filter_pba.yml +0 -0
 - data/{test → spec/fixtures}/html.yml +15 -0
 - data/{test → spec/fixtures}/images.yml +16 -6
 - data/{test → spec/fixtures}/instiki.yml +0 -0
 - data/{test → spec/fixtures}/links.yml +7 -1
 - data/{test → spec/fixtures}/lists.yml +162 -1
 - data/{test → spec/fixtures}/poignant.yml +0 -0
 - data/{test → spec/fixtures}/sanitize_html.yml +0 -0
 - data/{test → spec/fixtures}/table.yml +121 -23
 - data/{test → spec/fixtures}/textism.yml +44 -15
 - data/{test → spec/fixtures}/threshold.yml +6 -14
 - data/spec/formatters/class_filtered_html_spec.rb +7 -0
 - data/spec/formatters/filtered_html_spec.rb +7 -0
 - data/spec/formatters/html_no_breaks_spec.rb +9 -0
 - data/spec/formatters/html_spec.rb +13 -0
 - data/spec/formatters/id_filtered_html_spec.rb +7 -0
 - data/spec/formatters/latex_spec.rb +13 -0
 - data/spec/formatters/lite_mode_html_spec.rb +7 -0
 - data/spec/formatters/no_span_caps_html_spec.rb +7 -0
 - data/spec/formatters/sanitized_html_spec.rb +7 -0
 - data/spec/formatters/style_filtered_html_spec.rb +7 -0
 - data/spec/parser_spec.rb +95 -0
 - data/spec/spec.opts +3 -0
 - data/spec/spec_helper.rb +42 -0
 - metadata +46 -51
 - data/ext/mingw-rbconfig.rb +0 -176
 - data/ext/redcloth_scan/redcloth_attributes.c.rl +0 -55
 - data/ext/redcloth_scan/redcloth_attributes.java.rl +0 -95
 - data/ext/redcloth_scan/redcloth_attributes.rl +0 -33
 - data/ext/redcloth_scan/redcloth_common.c.rl +0 -18
 - data/ext/redcloth_scan/redcloth_common.java.rl +0 -18
 - data/ext/redcloth_scan/redcloth_common.rl +0 -115
 - data/ext/redcloth_scan/redcloth_inline.c.rl +0 -193
 - data/ext/redcloth_scan/redcloth_inline.java.rl +0 -140
 - data/ext/redcloth_scan/redcloth_inline.rl +0 -156
 - data/ext/redcloth_scan/redcloth_scan.c.rl +0 -228
 - data/ext/redcloth_scan/redcloth_scan.java.rl +0 -577
 - data/ext/redcloth_scan/redcloth_scan.rl +0 -320
 - data/extras/ragel_profiler.rb +0 -73
 - data/test/helper.rb +0 -108
 - data/test/test_custom_tags.rb +0 -58
 - data/test/test_extensions.rb +0 -31
 - data/test/test_formatters.rb +0 -24
 - data/test/test_parser.rb +0 -73
 - data/test/test_restrictions.rb +0 -41
 - data/test/validate_fixtures.rb +0 -74
 
| 
         @@ -1,55 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            /*
         
     | 
| 
       2 
     | 
    
         
            -
             * redcloth_attributes.c.rl
         
     | 
| 
       3 
     | 
    
         
            -
             *
         
     | 
| 
       4 
     | 
    
         
            -
             * Copyright (C) 2009 Jason Garber
         
     | 
| 
       5 
     | 
    
         
            -
             */
         
     | 
| 
       6 
     | 
    
         
            -
            #include <ruby.h>
         
     | 
| 
       7 
     | 
    
         
            -
            #include "redcloth.h"
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
            %%{
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
              machine redcloth_attributes;
         
     | 
| 
       12 
     | 
    
         
            -
              include redcloth_common "redcloth_common.c.rl";
         
     | 
| 
       13 
     | 
    
         
            -
              include redcloth_attributes "redcloth_attributes.rl";
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
            }%%
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
            %% write data nofinal;
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
            VALUE
         
     | 
| 
       21 
     | 
    
         
            -
            redcloth_attribute_parser(machine, self, p, pe)
         
     | 
| 
       22 
     | 
    
         
            -
              int machine;
         
     | 
| 
       23 
     | 
    
         
            -
              VALUE self;
         
     | 
| 
       24 
     | 
    
         
            -
              char *p, *pe;
         
     | 
| 
       25 
     | 
    
         
            -
            {
         
     | 
| 
       26 
     | 
    
         
            -
              int cs, act;
         
     | 
| 
       27 
     | 
    
         
            -
              char *ts = 0, *te = 0, *reg = 0, *bck = NULL, *eof = NULL;
         
     | 
| 
       28 
     | 
    
         
            -
              VALUE regs = rb_hash_new();
         
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
              %% write init;
         
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
              cs = machine;
         
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
              %% write exec;
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
              return regs;
         
     | 
| 
       37 
     | 
    
         
            -
            }
         
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
            VALUE
         
     | 
| 
       40 
     | 
    
         
            -
            redcloth_attributes(self, str)
         
     | 
| 
       41 
     | 
    
         
            -
              VALUE self, str;
         
     | 
| 
       42 
     | 
    
         
            -
            {
         
     | 
| 
       43 
     | 
    
         
            -
              StringValue(str);
         
     | 
| 
       44 
     | 
    
         
            -
              int cs = redcloth_attributes_en_inline;
         
     | 
| 
       45 
     | 
    
         
            -
              return redcloth_attribute_parser(cs, self, RSTRING_PTR(str), RSTRING_PTR(str) + RSTRING_LEN(str) + 1);
         
     | 
| 
       46 
     | 
    
         
            -
            }
         
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
            VALUE
         
     | 
| 
       49 
     | 
    
         
            -
            redcloth_link_attributes(self, str)
         
     | 
| 
       50 
     | 
    
         
            -
              VALUE self, str;
         
     | 
| 
       51 
     | 
    
         
            -
            {
         
     | 
| 
       52 
     | 
    
         
            -
              StringValue(str);
         
     | 
| 
       53 
     | 
    
         
            -
              int cs = redcloth_attributes_en_link_says;
         
     | 
| 
       54 
     | 
    
         
            -
              return redcloth_attribute_parser(cs, self, RSTRING_PTR(str), RSTRING_PTR(str) + RSTRING_LEN(str) + 1);
         
     | 
| 
       55 
     | 
    
         
            -
            }
         
     | 
| 
         @@ -1,95 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            /*
         
     | 
| 
       2 
     | 
    
         
            -
             * redcloth_attributes.rl
         
     | 
| 
       3 
     | 
    
         
            -
             *
         
     | 
| 
       4 
     | 
    
         
            -
             * Copyright (C) 2009 Jason Garber
         
     | 
| 
       5 
     | 
    
         
            -
             */
         
     | 
| 
       6 
     | 
    
         
            -
            import java.io.IOException;
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
            import org.jruby.Ruby;
         
     | 
| 
       9 
     | 
    
         
            -
            import org.jruby.RubyArray;
         
     | 
| 
       10 
     | 
    
         
            -
            import org.jruby.RubyClass;
         
     | 
| 
       11 
     | 
    
         
            -
            import org.jruby.RubyHash;
         
     | 
| 
       12 
     | 
    
         
            -
            import org.jruby.RubyModule;
         
     | 
| 
       13 
     | 
    
         
            -
            import org.jruby.RubyNumeric;
         
     | 
| 
       14 
     | 
    
         
            -
            import org.jruby.RubyObject;
         
     | 
| 
       15 
     | 
    
         
            -
            import org.jruby.RubyString;
         
     | 
| 
       16 
     | 
    
         
            -
            import org.jruby.RubySymbol;
         
     | 
| 
       17 
     | 
    
         
            -
            import org.jruby.anno.JRubyMethod;
         
     | 
| 
       18 
     | 
    
         
            -
            import org.jruby.runtime.Block;
         
     | 
| 
       19 
     | 
    
         
            -
            import org.jruby.runtime.CallbackFactory;
         
     | 
| 
       20 
     | 
    
         
            -
            import org.jruby.runtime.builtin.IRubyObject;
         
     | 
| 
       21 
     | 
    
         
            -
            import org.jruby.exceptions.RaiseException;
         
     | 
| 
       22 
     | 
    
         
            -
            import org.jruby.runtime.load.BasicLibraryService;
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
            import org.jruby.util.ByteList;
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
            public class RedclothAttributes extends RedclothScanService.Base {
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
            %%{
         
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
              machine redcloth_attributes;
         
     | 
| 
       31 
     | 
    
         
            -
              include redcloth_common "redcloth_common.java.rl";
         
     | 
| 
       32 
     | 
    
         
            -
              include redcloth_attributes "redcloth_attributes.rl";
         
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
            }%%
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
            %% write data nofinal;
         
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
              public void SET_ATTRIBUTES() {
         
     | 
| 
       39 
     | 
    
         
            -
                SET_ATTRIBUTE("class_buf", "class");
         
     | 
| 
       40 
     | 
    
         
            -
                SET_ATTRIBUTE("id_buf", "id");
         
     | 
| 
       41 
     | 
    
         
            -
                SET_ATTRIBUTE("lang_buf", "lang");
         
     | 
| 
       42 
     | 
    
         
            -
                SET_ATTRIBUTE("style_buf", "style");
         
     | 
| 
       43 
     | 
    
         
            -
              }
         
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
              public void SET_ATTRIBUTE(String B, String A) {
         
     | 
| 
       46 
     | 
    
         
            -
                if(!((RubyHash)regs).aref(runtime.newSymbol(B)).isNil()) {
         
     | 
| 
       47 
     | 
    
         
            -
                  ((RubyHash)regs).aset(runtime.newSymbol(A), ((RubyHash)regs).aref(runtime.newSymbol(B)));
         
     | 
| 
       48 
     | 
    
         
            -
                }
         
     | 
| 
       49 
     | 
    
         
            -
              }
         
     | 
| 
       50 
     | 
    
         
            -
             
         
     | 
| 
       51 
     | 
    
         
            -
              private int machine;
         
     | 
| 
       52 
     | 
    
         
            -
               
         
     | 
| 
       53 
     | 
    
         
            -
              public RedclothAttributes(int machine, IRubyObject self, byte[] data, int p, int pe) {
         
     | 
| 
       54 
     | 
    
         
            -
                this.runtime = self.getRuntime();
         
     | 
| 
       55 
     | 
    
         
            -
                this.self = self;
         
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
                // This is GROSS but necessary for EOF matching
         
     | 
| 
       58 
     | 
    
         
            -
                this.data = new byte[pe+1];
         
     | 
| 
       59 
     | 
    
         
            -
                System.arraycopy(data, p, this.data, 0, pe);
         
     | 
| 
       60 
     | 
    
         
            -
                this.data[pe] = 0;
         
     | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
       62 
     | 
    
         
            -
                this.p = 0;
         
     | 
| 
       63 
     | 
    
         
            -
                this.pe = pe+1;
         
     | 
| 
       64 
     | 
    
         
            -
                this.eof = this.pe;
         
     | 
| 
       65 
     | 
    
         
            -
                this.orig_p = 0;
         
     | 
| 
       66 
     | 
    
         
            -
                this.orig_pe = this.pe;
         
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
       68 
     | 
    
         
            -
                this.regs = RubyHash.newHash(runtime);
         
     | 
| 
       69 
     | 
    
         
            -
                this.machine = machine;
         
     | 
| 
       70 
     | 
    
         
            -
              }
         
     | 
| 
       71 
     | 
    
         
            -
             
     | 
| 
       72 
     | 
    
         
            -
              public IRubyObject parse() {
         
     | 
| 
       73 
     | 
    
         
            -
                %% write init;
         
     | 
| 
       74 
     | 
    
         
            -
              
         
     | 
| 
       75 
     | 
    
         
            -
                cs = machine;
         
     | 
| 
       76 
     | 
    
         
            -
             
     | 
| 
       77 
     | 
    
         
            -
                %% write exec;
         
     | 
| 
       78 
     | 
    
         
            -
             
     | 
| 
       79 
     | 
    
         
            -
                return regs;
         
     | 
| 
       80 
     | 
    
         
            -
              }
         
     | 
| 
       81 
     | 
    
         
            -
             
     | 
| 
       82 
     | 
    
         
            -
              public static IRubyObject attributes(IRubyObject self, IRubyObject str) {
         
     | 
| 
       83 
     | 
    
         
            -
                ByteList bl = str.convertToString().getByteList();
         
     | 
| 
       84 
     | 
    
         
            -
                int cs = redcloth_attributes_en_inline;
         
     | 
| 
       85 
     | 
    
         
            -
                return new RedclothAttributes(cs, self, bl.bytes, bl.begin, bl.realSize).parse();
         
     | 
| 
       86 
     | 
    
         
            -
              }
         
     | 
| 
       87 
     | 
    
         
            -
             
     | 
| 
       88 
     | 
    
         
            -
              public static IRubyObject link_attributes(IRubyObject self, IRubyObject str) {
         
     | 
| 
       89 
     | 
    
         
            -
                Ruby runtime = self.getRuntime();
         
     | 
| 
       90 
     | 
    
         
            -
             
     | 
| 
       91 
     | 
    
         
            -
                ByteList bl = str.convertToString().getByteList();
         
     | 
| 
       92 
     | 
    
         
            -
                int cs = redcloth_attributes_en_link_says;
         
     | 
| 
       93 
     | 
    
         
            -
                return new RedclothAttributes(cs, self, bl.bytes, bl.begin, bl.realSize).parse();
         
     | 
| 
       94 
     | 
    
         
            -
              }
         
     | 
| 
       95 
     | 
    
         
            -
            }
         
     | 
| 
         @@ -1,33 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            /*
         
     | 
| 
       2 
     | 
    
         
            -
             * redcloth_attributes.rl
         
     | 
| 
       3 
     | 
    
         
            -
             *
         
     | 
| 
       4 
     | 
    
         
            -
             * Copyright (C) 2009 Jason Garber
         
     | 
| 
       5 
     | 
    
         
            -
             */
         
     | 
| 
       6 
     | 
    
         
            -
            %%{
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
              machine redcloth_attributes;
         
     | 
| 
       9 
     | 
    
         
            -
              
         
     | 
| 
       10 
     | 
    
         
            -
              C2_CLAS = ( "(" ( [^)#]+ >A %{ STORE("class_buf"); } )? ("#" [^)]+ >A %{STORE("id_buf");} )? ")" ) ;
         
     | 
| 
       11 
     | 
    
         
            -
              C2_LNGE = ( "[" [^\[\]]+ >A %{ STORE("lang_buf"); } "]" ) ;
         
     | 
| 
       12 
     | 
    
         
            -
              C2_STYL = ( "{" [^}]+ >A %{ STORE("style_buf"); } "}" ) ;
         
     | 
| 
       13 
     | 
    
         
            -
              C2 = ( C2_CLAS | C2_STYL | C2_LNGE )+ ;
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
              mtext_with_attributes = ( C2 mtext >A %T ) >X ;
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
              inline := |*
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
                mtext_with_attributes { SET_ATTRIBUTES(); } ;
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
              *|;
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
              link_text_with_attributes = C2 "."* " "* ( mtext+ ) >A %{ STORE("name"); } ;
         
     | 
| 
       24 
     | 
    
         
            -
              link_text_without_attributes = ( mtext+ ) >B %{ STORE_B("name_without_attributes"); } ;
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
              link_says := |*
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
                link_text_with_attributes { SET_ATTRIBUTES(); } ;
         
     | 
| 
       29 
     | 
    
         
            -
                link_text_without_attributes { SET_ATTRIBUTE("name_without_attributes", "name"); } ;
         
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
              *|;
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
            }%%;
         
     | 
| 
         @@ -1,18 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            %%{
         
     | 
| 
       2 
     | 
    
         
            -
              
         
     | 
| 
       3 
     | 
    
         
            -
              machine redcloth_common;
         
     | 
| 
       4 
     | 
    
         
            -
              include redcloth_common "redcloth_common.rl";
         
     | 
| 
       5 
     | 
    
         
            -
              
         
     | 
| 
       6 
     | 
    
         
            -
              action esc { rb_str_cat_escaped(self, block, ts, te); }
         
     | 
| 
       7 
     | 
    
         
            -
              action esc_pre { rb_str_cat_escaped_for_preformatted(self, block, ts, te); }
         
     | 
| 
       8 
     | 
    
         
            -
              action ignore { rb_str_append(block, rb_funcall(self, rb_intern("ignore"), 1, regs)); }
         
     | 
| 
       9 
     | 
    
         
            -
              
         
     | 
| 
       10 
     | 
    
         
            -
              # conditionals
         
     | 
| 
       11 
     | 
    
         
            -
              action starts_line {
         
     | 
| 
       12 
     | 
    
         
            -
                p == orig_p || *(p-1) == '\r' || *(p-1) == '\n' || *(p-1) == '\f'
         
     | 
| 
       13 
     | 
    
         
            -
              }
         
     | 
| 
       14 
     | 
    
         
            -
              action starts_phrase {
         
     | 
| 
       15 
     | 
    
         
            -
                p == orig_p || *(p-1) == '\r' || *(p-1) == '\n' || *(p-1) == '\f' || *(p-1) == ' '
         
     | 
| 
       16 
     | 
    
         
            -
              }
         
     | 
| 
       17 
     | 
    
         
            -
              
         
     | 
| 
       18 
     | 
    
         
            -
            }%%;
         
     | 
| 
         @@ -1,18 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            %%{
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
              machine redcloth_common;
         
     | 
| 
       4 
     | 
    
         
            -
              include redcloth_common "redcloth_common.rl";
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
              action esc { strCatEscaped(self, block, data, ts, te); }
         
     | 
| 
       7 
     | 
    
         
            -
              action esc_pre { strCatEscapedForPreformatted(self, block, data, ts, te); }
         
     | 
| 
       8 
     | 
    
         
            -
              action ignore { ((RubyString)block).append(self.callMethod(runtime.getCurrentContext(), "ignore", regs)); }
         
     | 
| 
       9 
     | 
    
         
            -
              
         
     | 
| 
       10 
     | 
    
         
            -
              # conditionals
         
     | 
| 
       11 
     | 
    
         
            -
              action starts_line {
         
     | 
| 
       12 
     | 
    
         
            -
                p == orig_p || data[(p-1)] == '\r' || data[(p-1)] == '\n' || data[(p-1)] == '\f'
         
     | 
| 
       13 
     | 
    
         
            -
              }
         
     | 
| 
       14 
     | 
    
         
            -
              action starts_phrase {
         
     | 
| 
       15 
     | 
    
         
            -
                p == orig_p || data[(p-1)] == '\r' || data[(p-1)] == '\n' || data[(p-1)] == '\f' || data[(p-1)] == ' '
         
     | 
| 
       16 
     | 
    
         
            -
              }
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
            }%%;
         
     | 
| 
         @@ -1,115 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            %%{
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
              machine redcloth_common;
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
              action A { reg = p; }
         
     | 
| 
       6 
     | 
    
         
            -
              action B { bck = p; }
         
     | 
| 
       7 
     | 
    
         
            -
              action T { STORE("text"); }
         
     | 
| 
       8 
     | 
    
         
            -
              action X { CLEAR_REGS(); RESET_REG(); }
         
     | 
| 
       9 
     | 
    
         
            -
              action cat { CAT(block); }
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
              # simple
         
     | 
| 
       12 
     | 
    
         
            -
              LF = ( '\n' ) ;
         
     | 
| 
       13 
     | 
    
         
            -
              default = ^0 ;
         
     | 
| 
       14 
     | 
    
         
            -
              EOF = 0 ;
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
              # textile modifiers
         
     | 
| 
       17 
     | 
    
         
            -
              A_LEFT = "<" %{ ASET("align", "left"); } ;
         
     | 
| 
       18 
     | 
    
         
            -
              A_RIGHT = ">" %{ ASET("align", "right"); } ;
         
     | 
| 
       19 
     | 
    
         
            -
              A_JUSTIFIED = "<>" %{ ASET("align", "justify"); } ;
         
     | 
| 
       20 
     | 
    
         
            -
              A_CENTER = "=" %{ ASET("align", "center"); } ;
         
     | 
| 
       21 
     | 
    
         
            -
              A_PADLEFT = "(" >A %{ AINC("padding-left"); } ;
         
     | 
| 
       22 
     | 
    
         
            -
              A_PADRIGHT = ")" >A %{ AINC("padding-right"); } ;
         
     | 
| 
       23 
     | 
    
         
            -
              A_HLGN = ( A_LEFT | A_RIGHT | A_JUSTIFIED | A_CENTER | A_PADLEFT | A_PADRIGHT ) ;
         
     | 
| 
       24 
     | 
    
         
            -
              A_LIMIT = ( A_LEFT | A_CENTER | A_RIGHT ) ;
         
     | 
| 
       25 
     | 
    
         
            -
              A_VLGN = ( "-" %{ ASET("vertical-align", "middle"); } | "^" %{ ASET("vertical-align", "top"); } | "~" %{ ASET("vertical-align", "bottom"); } ) ;
         
     | 
| 
       26 
     | 
    
         
            -
              C_CLAS = ( "(" ( [^)#]+ >A %{ STORE("class"); } )? ("#" [^)]+ >A %{STORE("id");} )? ")" ) ;
         
     | 
| 
       27 
     | 
    
         
            -
              C_LNGE = ( "[" [^\]]+ >A %{ STORE("lang"); } "]" ) ;
         
     | 
| 
       28 
     | 
    
         
            -
              C_STYL = ( "{" [^}]+ >A %{ STORE("style"); } "}" ) ;
         
     | 
| 
       29 
     | 
    
         
            -
              S_CSPN = ( "\\" [0-9]+ >A %{ STORE("colspan"); } ) ;
         
     | 
| 
       30 
     | 
    
         
            -
              S_RSPN = ( "/" [0-9]+ >A %{ STORE("rowspan"); } ) ;
         
     | 
| 
       31 
     | 
    
         
            -
              D_HEADER = "_" %{ ASET("th", "true"); } ;
         
     | 
| 
       32 
     | 
    
         
            -
              A = ( ( A_HLGN | A_VLGN )* ) ;
         
     | 
| 
       33 
     | 
    
         
            -
              A2 = ( A_LIMIT? ) ;
         
     | 
| 
       34 
     | 
    
         
            -
              S = ( S_CSPN | S_RSPN )* ;
         
     | 
| 
       35 
     | 
    
         
            -
              C = ( C_CLAS | C_STYL | C_LNGE )* ;
         
     | 
| 
       36 
     | 
    
         
            -
              D = ( D_HEADER ) ;
         
     | 
| 
       37 
     | 
    
         
            -
              N_CONT = "_" %{ list_continue = 1; };
         
     | 
| 
       38 
     | 
    
         
            -
              N_NUM = digit+ >A %{ STORE("start"); };
         
     | 
| 
       39 
     | 
    
         
            -
              N = ( N_CONT | N_NUM )? ;
         
     | 
| 
       40 
     | 
    
         
            -
              PUNCT = ( "!" | '"' | "#" | "$" | "%" | "&" | "'" | "," | "-" | "." | "/" | ":" | ";" | "=" | "?" | "\\" | "^" | "`" | "|" | "~" | "[" | "]" | "(" | ")" | "<" ) ;
         
     | 
| 
       41 
     | 
    
         
            -
              dotspace = ("." " "*) ;
         
     | 
| 
       42 
     | 
    
         
            -
              indent =  [ \t]* ;
         
     | 
| 
       43 
     | 
    
         
            -
              
         
     | 
| 
       44 
     | 
    
         
            -
              # very un-DRY; Adrian says an action-stripping macro will come in a future Ragel version
         
     | 
| 
       45 
     | 
    
         
            -
              A_LEFT_noactions = "<" ;
         
     | 
| 
       46 
     | 
    
         
            -
              A_RIGHT_noactions = ">" ;
         
     | 
| 
       47 
     | 
    
         
            -
              A_JUSTIFIED_noactions = "<>" ;
         
     | 
| 
       48 
     | 
    
         
            -
              A_CENTER_noactions = "=" ;
         
     | 
| 
       49 
     | 
    
         
            -
              A_PADLEFT_noactions = "(" ;
         
     | 
| 
       50 
     | 
    
         
            -
              A_PADRIGHT_noactions = ")"  ;
         
     | 
| 
       51 
     | 
    
         
            -
              A_HLGN_noactions = ( A_LEFT_noactions | A_RIGHT_noactions | A_JUSTIFIED_noactions | A_CENTER_noactions | A_PADLEFT_noactions | A_PADRIGHT_noactions ) ;
         
     | 
| 
       52 
     | 
    
         
            -
              A_VLGN_noactions = ( "-" | "^" | "~" ) ;
         
     | 
| 
       53 
     | 
    
         
            -
              C_CLAS_noactions = ( "(" ( [^)#]+ )? ("#" [^)]+ )? ")" ) ;
         
     | 
| 
       54 
     | 
    
         
            -
              C_LNGE_noactions = ( "[" [^\]]+ "]" ) ;
         
     | 
| 
       55 
     | 
    
         
            -
              C_STYL_noactions = ( "{" [^}]+ "}" ) ;
         
     | 
| 
       56 
     | 
    
         
            -
              A_noactions = ( ( A_HLGN_noactions | A_VLGN_noactions )* ) ;
         
     | 
| 
       57 
     | 
    
         
            -
              C_noactions = ( C_CLAS_noactions | C_STYL_noactions | C_LNGE_noactions )* ;
         
     | 
| 
       58 
     | 
    
         
            -
              C_noquotes_noactions = C_noactions -- '"' ;
         
     | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
       60 
     | 
    
         
            -
              # text blocks
         
     | 
| 
       61 
     | 
    
         
            -
              trailing = PUNCT - ("'" | '"') ;
         
     | 
| 
       62 
     | 
    
         
            -
              chars = (default - space)+ ;
         
     | 
| 
       63 
     | 
    
         
            -
              phrase = chars -- trailing ;
         
     | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
       65 
     | 
    
         
            -
              # html tags (from Hpricot)
         
     | 
| 
       66 
     | 
    
         
            -
              NameChar = [\-A-Za-z0-9._:?] ;
         
     | 
| 
       67 
     | 
    
         
            -
              Name = [A-Za-z_:] NameChar* ;
         
     | 
| 
       68 
     | 
    
         
            -
              NameAttr = NameChar+ ;
         
     | 
| 
       69 
     | 
    
         
            -
              Q1Attr = [^']* ;
         
     | 
| 
       70 
     | 
    
         
            -
              Q2Attr = [^"]* ;
         
     | 
| 
       71 
     | 
    
         
            -
              UnqAttr = ( space | [^ \t\r\n<>"'] [^ \t\r\n<>]* ) ;
         
     | 
| 
       72 
     | 
    
         
            -
              Nmtoken = NameChar+ ;
         
     | 
| 
       73 
     | 
    
         
            -
              Attr =  NameAttr space* "=" space* ('"' Q2Attr '"' | "'" Q1Attr "'" | UnqAttr space+ ) space* ;
         
     | 
| 
       74 
     | 
    
         
            -
              AttrEnd = ( NameAttr space* "=" space* UnqAttr? | Nmtoken ) ;
         
     | 
| 
       75 
     | 
    
         
            -
              AttrSet = ( Attr | Nmtoken space+ ) ;
         
     | 
| 
       76 
     | 
    
         
            -
              
         
     | 
| 
       77 
     | 
    
         
            -
              script_tag_start = ( "<script" [^>]* ">" ) >X >A %T ;
         
     | 
| 
       78 
     | 
    
         
            -
              script_tag_end = ( "</script>" >A %T LF? ) >X ;
         
     | 
| 
       79 
     | 
    
         
            -
              
         
     | 
| 
       80 
     | 
    
         
            -
              code_tag_start = "<code" [^>]* ">" ;
         
     | 
| 
       81 
     | 
    
         
            -
              code_tag_end = "</code>" ;
         
     | 
| 
       82 
     | 
    
         
            -
              
         
     | 
| 
       83 
     | 
    
         
            -
              notextile = "<notextile>" >X (default+ -- "</notextile>") >A %T "</notextile>";
         
     | 
| 
       84 
     | 
    
         
            -
              
         
     | 
| 
       85 
     | 
    
         
            -
              # URI tokens (lifted from Mongrel)
         
     | 
| 
       86 
     | 
    
         
            -
              CTL = (cntrl | 127);
         
     | 
| 
       87 
     | 
    
         
            -
              safe = ("$" | "-" | "_" | ".");
         
     | 
| 
       88 
     | 
    
         
            -
              extra = ("!" | "*" | "'" | "(" | ")" | "," | "#");
         
     | 
| 
       89 
     | 
    
         
            -
              reserved = (";" | "/" | "?" | ":" | "@" | "&" | "=" | "+");
         
     | 
| 
       90 
     | 
    
         
            -
              unsafe = (CTL | " " | "\"" | "%" | "<" | ">");
         
     | 
| 
       91 
     | 
    
         
            -
              national = any -- (alpha | digit | reserved | extra | safe | unsafe);
         
     | 
| 
       92 
     | 
    
         
            -
              unreserved = (alpha | digit | safe | extra | national);
         
     | 
| 
       93 
     | 
    
         
            -
              escape = ("%" xdigit xdigit);
         
     | 
| 
       94 
     | 
    
         
            -
              uchar = (unreserved | escape);
         
     | 
| 
       95 
     | 
    
         
            -
              pchar = (uchar | ":" | "@" | "&" | "=" | "+");
         
     | 
| 
       96 
     | 
    
         
            -
              scheme = ( alpha | digit | "+" | "-" | "." )+ ;
         
     | 
| 
       97 
     | 
    
         
            -
              absolute_uri = (scheme ":" (uchar | reserved )*);
         
     | 
| 
       98 
     | 
    
         
            -
              safepath = (pchar* (alpha | digit | safe) pchar*) ;
         
     | 
| 
       99 
     | 
    
         
            -
              path = (safepath ( "/" pchar* )*) ;
         
     | 
| 
       100 
     | 
    
         
            -
              query = ( uchar | reserved )* ;
         
     | 
| 
       101 
     | 
    
         
            -
              param = ( pchar | "/" )* ;
         
     | 
| 
       102 
     | 
    
         
            -
              params = (param ( ";" param )*) ;
         
     | 
| 
       103 
     | 
    
         
            -
              rel_path = (path (";" params)?) ("?" query)?;
         
     | 
| 
       104 
     | 
    
         
            -
              absolute_path = ("/"+ rel_path?);
         
     | 
| 
       105 
     | 
    
         
            -
              target = ("#" pchar*) ;
         
     | 
| 
       106 
     | 
    
         
            -
              uri = (target | absolute_uri | absolute_path | rel_path) ;
         
     | 
| 
       107 
     | 
    
         
            -
             
     | 
| 
       108 
     | 
    
         
            -
              # common
         
     | 
| 
       109 
     | 
    
         
            -
              title = ( '(' default+ >A %{ STORE("title"); } :> ')' ) ;
         
     | 
| 
       110 
     | 
    
         
            -
              word = ( alnum | safe | " " ) ;
         
     | 
| 
       111 
     | 
    
         
            -
              mspace = ( ( " " | "\t" | LF )+ ) -- LF{2} ;
         
     | 
| 
       112 
     | 
    
         
            -
              mtext = ( chars (mspace chars)* ) ;
         
     | 
| 
       113 
     | 
    
         
            -
              
         
     | 
| 
       114 
     | 
    
         
            -
             
     | 
| 
       115 
     | 
    
         
            -
            }%%;
         
     | 
| 
         @@ -1,193 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            /*
         
     | 
| 
       2 
     | 
    
         
            -
             * redcloth_inline.c.rl
         
     | 
| 
       3 
     | 
    
         
            -
             *
         
     | 
| 
       4 
     | 
    
         
            -
             * Copyright (C) 2009 Jason Garber
         
     | 
| 
       5 
     | 
    
         
            -
             */
         
     | 
| 
       6 
     | 
    
         
            -
            #include <ruby.h>
         
     | 
| 
       7 
     | 
    
         
            -
            #include "redcloth.h"
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
            %%{
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
              machine redcloth_inline;
         
     | 
| 
       12 
     | 
    
         
            -
              include redcloth_common "redcloth_common.c.rl";
         
     | 
| 
       13 
     | 
    
         
            -
              include redcloth_inline "redcloth_inline.rl";
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
            }%%
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
            %% write data nofinal;
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
            VALUE
         
     | 
| 
       20 
     | 
    
         
            -
            red_pass(VALUE self, VALUE regs, VALUE ref, ID meth, VALUE refs)
         
     | 
| 
       21 
     | 
    
         
            -
            {
         
     | 
| 
       22 
     | 
    
         
            -
              VALUE txt = rb_hash_aref(regs, ref);
         
     | 
| 
       23 
     | 
    
         
            -
              if (!NIL_P(txt)) rb_hash_aset(regs, ref, redcloth_inline2(self, txt, refs));
         
     | 
| 
       24 
     | 
    
         
            -
              return rb_funcall(self, meth, 1, regs);
         
     | 
| 
       25 
     | 
    
         
            -
            }
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
            VALUE
         
     | 
| 
       28 
     | 
    
         
            -
            red_parse_attr(VALUE self, VALUE regs, VALUE ref)
         
     | 
| 
       29 
     | 
    
         
            -
            {
         
     | 
| 
       30 
     | 
    
         
            -
              VALUE txt = rb_hash_aref(regs, ref);
         
     | 
| 
       31 
     | 
    
         
            -
              VALUE new_regs = redcloth_attributes(self, txt);
         
     | 
| 
       32 
     | 
    
         
            -
              return rb_funcall(regs, rb_intern("update"), 1, new_regs);
         
     | 
| 
       33 
     | 
    
         
            -
            }
         
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
            VALUE
         
     | 
| 
       36 
     | 
    
         
            -
            red_parse_link_attr(VALUE self, VALUE regs, VALUE ref)
         
     | 
| 
       37 
     | 
    
         
            -
            {
         
     | 
| 
       38 
     | 
    
         
            -
              VALUE txt = rb_hash_aref(regs, ref);
         
     | 
| 
       39 
     | 
    
         
            -
              VALUE new_regs = red_parse_title(redcloth_link_attributes(self, txt), ref);
         
     | 
| 
       40 
     | 
    
         
            -
              
         
     | 
| 
       41 
     | 
    
         
            -
              return rb_funcall(regs, rb_intern("update"), 1, new_regs);
         
     | 
| 
       42 
     | 
    
         
            -
            }
         
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
            VALUE
         
     | 
| 
       45 
     | 
    
         
            -
            red_parse_image_attr(VALUE self, VALUE regs, VALUE ref)
         
     | 
| 
       46 
     | 
    
         
            -
            {
         
     | 
| 
       47 
     | 
    
         
            -
              
         
     | 
| 
       48 
     | 
    
         
            -
              return red_parse_title(regs, ref);
         
     | 
| 
       49 
     | 
    
         
            -
            }
         
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
            VALUE
         
     | 
| 
       52 
     | 
    
         
            -
            red_parse_title(VALUE regs, VALUE ref)
         
     | 
| 
       53 
     | 
    
         
            -
            {
         
     | 
| 
       54 
     | 
    
         
            -
              // Store title/alt
         
     | 
| 
       55 
     | 
    
         
            -
              VALUE txt = rb_hash_aref(regs, ref);
         
     | 
| 
       56 
     | 
    
         
            -
              if ( txt != Qnil ) {
         
     | 
| 
       57 
     | 
    
         
            -
                char *p = RSTRING_PTR(txt) + RSTRING_LEN(txt);
         
     | 
| 
       58 
     | 
    
         
            -
                if (*(p - 1) == ')') {
         
     | 
| 
       59 
     | 
    
         
            -
                  char level = -1;
         
     | 
| 
       60 
     | 
    
         
            -
                  p--;
         
     | 
| 
       61 
     | 
    
         
            -
                  while (p > RSTRING_PTR(txt) && level < 0) {
         
     | 
| 
       62 
     | 
    
         
            -
                    switch(*(p - 1)) {
         
     | 
| 
       63 
     | 
    
         
            -
                      case '(': ++level; break;
         
     | 
| 
       64 
     | 
    
         
            -
                      case ')': --level; break;
         
     | 
| 
       65 
     | 
    
         
            -
                    }
         
     | 
| 
       66 
     | 
    
         
            -
                    --p;
         
     | 
| 
       67 
     | 
    
         
            -
                  }
         
     | 
| 
       68 
     | 
    
         
            -
                  VALUE title = STR_NEW(p + 1, RSTRING_PTR(txt) + RSTRING_LEN(txt) - 2 - p );
         
     | 
| 
       69 
     | 
    
         
            -
                  if (p > RSTRING_PTR(txt) && *(p - 1) == ' ') --p;
         
     | 
| 
       70 
     | 
    
         
            -
                  if (p != RSTRING_PTR(txt)) {
         
     | 
| 
       71 
     | 
    
         
            -
                    rb_hash_aset(regs, ref, STR_NEW(RSTRING_PTR(txt), p - RSTRING_PTR(txt) ));
         
     | 
| 
       72 
     | 
    
         
            -
                    rb_hash_aset(regs, ID2SYM(rb_intern("title")), title);
         
     | 
| 
       73 
     | 
    
         
            -
                  }
         
     | 
| 
       74 
     | 
    
         
            -
                }
         
     | 
| 
       75 
     | 
    
         
            -
              }
         
     | 
| 
       76 
     | 
    
         
            -
              return regs;
         
     | 
| 
       77 
     | 
    
         
            -
            }
         
     | 
| 
       78 
     | 
    
         
            -
             
     | 
| 
       79 
     | 
    
         
            -
            VALUE
         
     | 
| 
       80 
     | 
    
         
            -
            red_pass_code(VALUE self, VALUE regs, VALUE ref, ID meth)
         
     | 
| 
       81 
     | 
    
         
            -
            {
         
     | 
| 
       82 
     | 
    
         
            -
              VALUE txt = rb_hash_aref(regs, ref);
         
     | 
| 
       83 
     | 
    
         
            -
              if (!NIL_P(txt)) {
         
     | 
| 
       84 
     | 
    
         
            -
                VALUE txt2 = STR_NEW2("");
         
     | 
| 
       85 
     | 
    
         
            -
                rb_str_cat_escaped_for_preformatted(self, txt2, RSTRING_PTR(txt), RSTRING_PTR(txt) + RSTRING_LEN(txt));
         
     | 
| 
       86 
     | 
    
         
            -
                rb_hash_aset(regs, ref, txt2);
         
     | 
| 
       87 
     | 
    
         
            -
              }
         
     | 
| 
       88 
     | 
    
         
            -
              return rb_funcall(self, meth, 1, regs);
         
     | 
| 
       89 
     | 
    
         
            -
            }
         
     | 
| 
       90 
     | 
    
         
            -
             
     | 
| 
       91 
     | 
    
         
            -
            VALUE
         
     | 
| 
       92 
     | 
    
         
            -
            red_block(VALUE self, VALUE regs, VALUE block, VALUE refs)
         
     | 
| 
       93 
     | 
    
         
            -
            {
         
     | 
| 
       94 
     | 
    
         
            -
              ID method;
         
     | 
| 
       95 
     | 
    
         
            -
              VALUE fallback;
         
     | 
| 
       96 
     | 
    
         
            -
              VALUE sym_text = ID2SYM(rb_intern("text"));
         
     | 
| 
       97 
     | 
    
         
            -
              VALUE btype = rb_hash_aref(regs, ID2SYM(rb_intern("type")));
         
     | 
| 
       98 
     | 
    
         
            -
              block = rb_funcall(block, rb_intern("strip"), 0);
         
     | 
| 
       99 
     | 
    
         
            -
              if ((!NIL_P(block)) && !NIL_P(btype))
         
     | 
| 
       100 
     | 
    
         
            -
              {
         
     | 
| 
       101 
     | 
    
         
            -
                method = rb_str_intern(btype);
         
     | 
| 
       102 
     | 
    
         
            -
                if (method == ID2SYM(rb_intern("notextile"))) {
         
     | 
| 
       103 
     | 
    
         
            -
                  rb_hash_aset(regs, sym_text, block);
         
     | 
| 
       104 
     | 
    
         
            -
                } else {
         
     | 
| 
       105 
     | 
    
         
            -
                  rb_hash_aset(regs, sym_text, redcloth_inline2(self, block, refs));
         
     | 
| 
       106 
     | 
    
         
            -
                }
         
     | 
| 
       107 
     | 
    
         
            -
                if (rb_ary_includes(rb_funcall(self, rb_intern("formatter_methods"), 0), method)) {
         
     | 
| 
       108 
     | 
    
         
            -
                  block = rb_funcall(self, SYM2ID(method), 1, regs);
         
     | 
| 
       109 
     | 
    
         
            -
                } else {
         
     | 
| 
       110 
     | 
    
         
            -
                  fallback = rb_hash_aref(regs, ID2SYM(rb_intern("fallback")));
         
     | 
| 
       111 
     | 
    
         
            -
                  if (!NIL_P(fallback)) {
         
     | 
| 
       112 
     | 
    
         
            -
                    rb_str_append(fallback, rb_hash_aref(regs, sym_text));
         
     | 
| 
       113 
     | 
    
         
            -
                    CLEAR_REGS();
         
     | 
| 
       114 
     | 
    
         
            -
                    rb_hash_aset(regs, sym_text, fallback);
         
     | 
| 
       115 
     | 
    
         
            -
                  }
         
     | 
| 
       116 
     | 
    
         
            -
                  block = rb_funcall(self, rb_intern("p"), 1, regs);
         
     | 
| 
       117 
     | 
    
         
            -
                }
         
     | 
| 
       118 
     | 
    
         
            -
              }
         
     | 
| 
       119 
     | 
    
         
            -
              return block;
         
     | 
| 
       120 
     | 
    
         
            -
            }
         
     | 
| 
       121 
     | 
    
         
            -
             
     | 
| 
       122 
     | 
    
         
            -
            VALUE
         
     | 
| 
       123 
     | 
    
         
            -
            red_blockcode(VALUE self, VALUE regs, VALUE block)
         
     | 
| 
       124 
     | 
    
         
            -
            {
         
     | 
| 
       125 
     | 
    
         
            -
              VALUE btype = rb_hash_aref(regs, ID2SYM(rb_intern("type")));
         
     | 
| 
       126 
     | 
    
         
            -
              if (RSTRING_LEN(block) > 0)
         
     | 
| 
       127 
     | 
    
         
            -
              {
         
     | 
| 
       128 
     | 
    
         
            -
                rb_hash_aset(regs, ID2SYM(rb_intern("text")), block);
         
     | 
| 
       129 
     | 
    
         
            -
                block = rb_funcall(self, rb_intern(RSTRING_PTR(btype)), 1, regs);
         
     | 
| 
       130 
     | 
    
         
            -
              }
         
     | 
| 
       131 
     | 
    
         
            -
              return block;
         
     | 
| 
       132 
     | 
    
         
            -
            }
         
     | 
| 
       133 
     | 
    
         
            -
             
     | 
| 
       134 
     | 
    
         
            -
            void
         
     | 
| 
       135 
     | 
    
         
            -
            red_inc(VALUE regs, VALUE ref)
         
     | 
| 
       136 
     | 
    
         
            -
            {
         
     | 
| 
       137 
     | 
    
         
            -
              int aint = 0;
         
     | 
| 
       138 
     | 
    
         
            -
              VALUE aval = rb_hash_aref(regs, ref);
         
     | 
| 
       139 
     | 
    
         
            -
              if (aval != Qnil) aint = NUM2INT(aval);
         
     | 
| 
       140 
     | 
    
         
            -
              rb_hash_aset(regs, ref, INT2NUM(aint + 1));
         
     | 
| 
       141 
     | 
    
         
            -
            }
         
     | 
| 
       142 
     | 
    
         
            -
             
     | 
| 
       143 
     | 
    
         
            -
            VALUE
         
     | 
| 
       144 
     | 
    
         
            -
            redcloth_inline(self, p, pe, refs)
         
     | 
| 
       145 
     | 
    
         
            -
              VALUE self;
         
     | 
| 
       146 
     | 
    
         
            -
              char *p, *pe;
         
     | 
| 
       147 
     | 
    
         
            -
              VALUE refs;
         
     | 
| 
       148 
     | 
    
         
            -
            {
         
     | 
| 
       149 
     | 
    
         
            -
              int cs, act;
         
     | 
| 
       150 
     | 
    
         
            -
              char *ts = NULL, *te = NULL, *reg = NULL, *eof = NULL;
         
     | 
| 
       151 
     | 
    
         
            -
              char *orig_p = p;
         
     | 
| 
       152 
     | 
    
         
            -
              VALUE block = STR_NEW2("");
         
     | 
| 
       153 
     | 
    
         
            -
              VALUE regs = Qnil;
         
     | 
| 
       154 
     | 
    
         
            -
              
         
     | 
| 
       155 
     | 
    
         
            -
              %% write init;
         
     | 
| 
       156 
     | 
    
         
            -
             
     | 
| 
       157 
     | 
    
         
            -
              %% write exec;
         
     | 
| 
       158 
     | 
    
         
            -
             
     | 
| 
       159 
     | 
    
         
            -
              return block;
         
     | 
| 
       160 
     | 
    
         
            -
            }
         
     | 
| 
       161 
     | 
    
         
            -
             
     | 
| 
       162 
     | 
    
         
            -
            /** Append characters to a string, escaping (&, <, >, ", ') using the formatter's escape method.
         
     | 
| 
       163 
     | 
    
         
            -
              * @param str ruby string
         
     | 
| 
       164 
     | 
    
         
            -
              * @param ts  start of character buffer to append
         
     | 
| 
       165 
     | 
    
         
            -
              * @param te  end of character buffer
         
     | 
| 
       166 
     | 
    
         
            -
              */
         
     | 
| 
       167 
     | 
    
         
            -
            void
         
     | 
| 
       168 
     | 
    
         
            -
            rb_str_cat_escaped(self, str, ts, te)
         
     | 
| 
       169 
     | 
    
         
            -
              VALUE self, str;
         
     | 
| 
       170 
     | 
    
         
            -
              char *ts, *te;
         
     | 
| 
       171 
     | 
    
         
            -
            {
         
     | 
| 
       172 
     | 
    
         
            -
              VALUE source_str = STR_NEW(ts, te-ts);
         
     | 
| 
       173 
     | 
    
         
            -
              VALUE escaped_str = rb_funcall(self, rb_intern("escape"), 1, source_str);
         
     | 
| 
       174 
     | 
    
         
            -
              rb_str_concat(str, escaped_str);
         
     | 
| 
       175 
     | 
    
         
            -
            }
         
     | 
| 
       176 
     | 
    
         
            -
             
     | 
| 
       177 
     | 
    
         
            -
            void
         
     | 
| 
       178 
     | 
    
         
            -
            rb_str_cat_escaped_for_preformatted(self, str, ts, te)
         
     | 
| 
       179 
     | 
    
         
            -
              VALUE self, str;
         
     | 
| 
       180 
     | 
    
         
            -
              char *ts, *te;
         
     | 
| 
       181 
     | 
    
         
            -
            {
         
     | 
| 
       182 
     | 
    
         
            -
              VALUE source_str = STR_NEW(ts, te-ts);
         
     | 
| 
       183 
     | 
    
         
            -
              VALUE escaped_str = rb_funcall(self, rb_intern("escape_pre"), 1, source_str);
         
     | 
| 
       184 
     | 
    
         
            -
              rb_str_concat(str, escaped_str);
         
     | 
| 
       185 
     | 
    
         
            -
            }
         
     | 
| 
       186 
     | 
    
         
            -
             
     | 
| 
       187 
     | 
    
         
            -
            VALUE
         
     | 
| 
       188 
     | 
    
         
            -
            redcloth_inline2(self, str, refs)
         
     | 
| 
       189 
     | 
    
         
            -
              VALUE self, str, refs;
         
     | 
| 
       190 
     | 
    
         
            -
            {
         
     | 
| 
       191 
     | 
    
         
            -
              StringValue(str);
         
     | 
| 
       192 
     | 
    
         
            -
              return redcloth_inline(self, RSTRING_PTR(str), RSTRING_PTR(str) + RSTRING_LEN(str) + 1, refs);
         
     | 
| 
       193 
     | 
    
         
            -
            }
         
     |