diff options
| -rw-r--r-- | rst_context.lua | 40 | ||||
| -rw-r--r-- | rst_parser.lua | 6 | 
2 files changed, 38 insertions, 8 deletions
diff --git a/rst_context.lua b/rst_context.lua index 36dbdfc..d92a33d 100644 --- a/rst_context.lua +++ b/rst_context.lua @@ -210,7 +210,7 @@ end  function rst_context.substitution_reference (str)      rst_context.addsetups("substitutions") -    return [[{\\RSTsubstitution]] .. string.strip(str) .. "}" +    return [[{\\RSTsubstitution]] .. str:gsub("%s", "") .. "}"  end  function rst_context.escape (str) @@ -1047,7 +1047,8 @@ end  function optional_setups.substitutions ()      local images_done = {} -    local image = function(name, data) +    local directives = {} +    directives.image = function(name, data)          local img = ""          if not images_done[name] then              img = img .. string.format([[ @@ -1063,20 +1064,45 @@ function optional_setups.substitutions ()          return img      end +    directives.ctx = function(name, data) +        local ctx = string.format([[ + +\startbuffer[%s] +%s +\stopbuffer +\def\RSTsubstitution%s{ +  \getbuffer[%s] +} +]], name, data, name, name) +        return ctx +    end + +    directives.lua = function(name, data) +        local luacode = string.format([[ + +\startbuffer[%s] +\startluacode +%s +\stopluacode +\stopbuffer +\def\RSTsubstitution%s{%% +  \getbuffer[%s]%% +} +]], name, data, name, name) +        return luacode +    end +      local substitutions = [[  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  % Substitutions                                                 %  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -  ]]      local rs = rst_context.substitutions      for name, content in next, rs do          local directive, data = content.directive, content.data -        name, data = string.strip(name), string.strip(data) -        if string.strip(directive) == "image" then -            substitutions = substitutions .. image(name, data) -        end +        name, data = name:gsub("%s", ""), string.strip(data) +        substitutions = substitutions .. directives[directive](name, data)      end      return substitutions  end diff --git a/rst_parser.lua b/rst_parser.lua index dd20354..1ef0aa0 100644 --- a/rst_parser.lua +++ b/rst_parser.lua @@ -128,6 +128,10 @@ local parser = P{                      --+ V"comment block"                      , +    explicit_markup_block = V"explicit_markup"^1 +                          * V"end_block" +                          , +  --------------------------------------------------------------------------------  -- Substitution definition block  -------------------------------------------------------------------------------- @@ -140,7 +144,7 @@ local parser = P{                              * C((1 - V"colon" - V"space" - V"eol")^1) -- directive                              * V"double_colon"                              * C(V"data_directive_block") -                            * V"end_block" +                            * V"blank_line"^-1                              / rst.substitution_definition                              ,  | 
