commit a81a0c55349693df59be9239cae2fdfd3333f7a1
Author: Juergen Spitzmueller <sp...@lyx.org>
Date:   Mon Oct 23 08:20:58 2017 +0200

    Implement ParamInfo::HANDLING_LTRIM and use it to ltrim InsetBibitem
    output
    
    See #9847.
    
    (cherry picked from commit 76f49fad78db5ed768db163feef4e3b3c062228f)
---
 src/insets/InsetBibitem.cpp       |    3 ++-
 src/insets/InsetCommandParams.cpp |   27 ++++++++++++++++-----------
 src/insets/InsetCommandParams.h   |    7 ++++---
 3 files changed, 22 insertions(+), 15 deletions(-)

diff --git a/src/insets/InsetBibitem.cpp b/src/insets/InsetBibitem.cpp
index d5ebaf7..08e8c76 100644
--- a/src/insets/InsetBibitem.cpp
+++ b/src/insets/InsetBibitem.cpp
@@ -112,7 +112,8 @@ ParamInfo const & InsetBibitem::findInfo(string const & /* 
cmdName */)
                param_info_.add("label", ParamInfo::LATEX_OPTIONAL,
                                ParamInfo::HANDLING_LATEXIFY);
                param_info_.add("key", ParamInfo::LATEX_REQUIRED,
-                               ParamInfo::HANDLING_ESCAPE);
+                               
ParamInfo::ParamHandling(ParamInfo::HANDLING_ESCAPE
+                                                        | 
ParamInfo::HANDLING_LTRIM));
                param_info_.add("literal", ParamInfo::LYX_INTERNAL);
        }
        return param_info_;
diff --git a/src/insets/InsetCommandParams.cpp 
b/src/insets/InsetCommandParams.cpp
index 9d34808..aa2458c 100644
--- a/src/insets/InsetCommandParams.cpp
+++ b/src/insets/InsetCommandParams.cpp
@@ -432,12 +432,21 @@ docstring InsetCommandParams::prepareCommand(OutputParams 
const & runparams,
                                             docstring const & command,
                                             ParamInfo::ParamHandling handling) 
const
 {
-       if (handling == ParamInfo::HANDLING_LATEXIFY)
+       docstring result;
+       bool ltrimmed = false;
+       // Trimming can be done on top of any of the other handlings
+       // We check this here since handling might be changed below.
+       if (handling & ParamInfo::HANDLING_LTRIM) {
+               // this is used if no other handling is done
+               result = command;
+               ltrimmed = true;
+       }
+       if (handling & ParamInfo::HANDLING_LATEXIFY)
                if ((*this)["literal"] == "true")
                        handling = ParamInfo::HANDLING_NONE;
-       docstring result;
-       switch (handling) {
-       case ParamInfo::HANDLING_LATEXIFY: {
+
+       // LATEXIFY, ESCAPE and NONE are mutually exclusive
+       if (handling & ParamInfo::HANDLING_LATEXIFY) {
                // First handle backslash
                result = subst(command, from_ascii("\\"), 
from_ascii("\\textbackslash{}"));
                // Then get LaTeX macros
@@ -476,17 +485,13 @@ docstring InsetCommandParams::prepareCommand(OutputParams 
const & runparams,
                                                        result.replace(pos, 1, 
backslash + chars_escape[k] + term);
                                }
                }
-               break;
        }
-       case ParamInfo::HANDLING_ESCAPE:
+       else if (handling & ParamInfo::HANDLING_ESCAPE)
                result = escape(command);
-               break;
-       case ParamInfo::HANDLING_NONE:
+       else if (handling & ParamInfo::HANDLING_NONE)
                result = command;
-               break;
-       } // switch
 
-       return result;
+       return ltrimmed ? ltrim(result) : result;
 }
 
 
diff --git a/src/insets/InsetCommandParams.h b/src/insets/InsetCommandParams.h
index 121fdac..e823205 100644
--- a/src/insets/InsetCommandParams.h
+++ b/src/insets/InsetCommandParams.h
@@ -42,9 +42,10 @@ public:
        };
        /// Special handling on output
        enum ParamHandling {
-               HANDLING_NONE,    /// no special handling
-               HANDLING_ESCAPE,  /// escape special characters
-               HANDLING_LATEXIFY /// transform special characters to LaTeX 
macros
+               HANDLING_NONE = 1,    /// no special handling
+               HANDLING_ESCAPE = 2,  /// escape special characters
+               HANDLING_LATEXIFY = 4, /// transform special characters to 
LaTeX macros
+               HANDLING_LTRIM = 8 /// trim blanks on the left
        };
        ///
        class ParamData {

Reply via email to