commit 8f23f91e1beeb47b7a1c06fad32ba518e213f6db
Author: Koji Yokota <yok...@lyx.org>
Date:   Wed Jun 4 08:53:01 2025 +0900

    Introducing LaTeX support for \intertext and \shortintertext
    
    Squashed commit of the following:
    
    commit 8514efb45e568521192e0b73ee20edebe2d95831
    Author: Koji Yokota <yok...@lyx.org>
    Date:   Mon May 12 20:33:20 2025 +0900
    
        Adjusting drawing dimensions of intertext
    
    commit 23f39432ab4c2e4b364b807b9baebad68087a54c
    Author: Koji Yokota <yok...@lyx.org>
    Date:   Sat May 10 22:37:45 2025 +0900
    
        Add support for DocBook/ePub export
    
    commit 34d51e674ea33ef692fd3d0bf1e94fad9b1f7fdb
    Author: Koji Yokota <yok...@lyx.org>
    Date:   Fri May 2 22:52:14 2025 +0900
    
        Removing unnecessary comment-outs
    
    commit 6c96b227557a32b09a14a2870f74680622b277d2
    Author: Koji Yokota <yok...@lyx.org>
    Date:   Fri May 2 21:20:34 2025 +0900
    
        Accommodating the case of long intertexts
    
    commit 300ebbc7fdf2ae5ab5ced0d5eec26877c698d06f
    Author: Koji Yokota <yok...@lyx.org>
    Date:   Fri May 2 21:17:48 2025 +0900
    
        Fixing traces of rough drafts
    
    commit 89679013ab720f4feea1ed128ac088ebb3b0bcc8
    Author: Koji Yokota <yok...@lyx.org>
    Date:   Fri May 2 17:47:37 2025 +0900
    
        Simplifying metrics calculus
    
    commit 84c33568d6f45751794c6419a2bbcc5b7d21a840
    Author: Koji Yokota <yok...@lyx.org>
    Date:   Fri May 2 11:53:25 2025 +0900
    
        Add main new files
    
    commit 99556226f0106eeb02cce7becc5d4b733c92a147
    Author: Koji Yokota <yok...@lyx.org>
    Date:   Fri May 2 11:38:16 2025 +0900
    
        Add LaTeX support for \intertext and \shortintertext
---
 lib/symbols                       |   2 +
 src/Cursor.cpp                    |   3 +-
 src/Makefile.am                   |   2 +
 src/insets/Inset.cpp              |   1 +
 src/insets/InsetCode.h            |  34 ++++++------
 src/mathed/InsetMath.h            |   3 ++
 src/mathed/InsetMathIntertext.cpp | 108 ++++++++++++++++++++++++++++++++++++++
 src/mathed/InsetMathIntertext.h   |  57 ++++++++++++++++++++
 src/mathed/MathFactory.cpp        |   3 ++
 9 files changed, 196 insertions(+), 17 deletions(-)

diff --git a/lib/symbols b/lib/symbols
index 689bd0d203..7c4cb76963 100644
--- a/lib/symbols
+++ b/lib/symbols
@@ -248,6 +248,8 @@ overset           overset     none
 mbox              mbox        forcetext
 tag               mbox        forcetext
 tag*              mbox        forcetext
+intertext         intertext   forcetext
+shortintertext    intertext   forcetext
 #newcommand        newcommand  none
 #label             label       none
 #left              left        none
diff --git a/src/Cursor.cpp b/src/Cursor.cpp
index 099b6f2a58..10dc27726c 100644
--- a/src/Cursor.cpp
+++ b/src/Cursor.cpp
@@ -1816,7 +1816,8 @@ bool Cursor::macroModeClose(bool cancel)
                || (it != words.end() && (it->second.inset == "font"
                                          || it->second.inset == "oldfont"
                                          || it->second.inset == "textsize"
-                                         || it->second.inset == "mbox"));
+                                         || it->second.inset == "mbox"
+                                         || it->second.inset == "intertext"));
        bool ert_macro = !user_macro && it == words.end() && atomAsMacro;
 
        if (in && in->currentMode() == Inset::TEXT_MODE
diff --git a/src/Makefile.am b/src/Makefile.am
index 7117232822..f3edd9d339 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -430,6 +430,8 @@ liblyxmathed_a_SOURCES = \
        mathed/InsetMathGrid.h \
        mathed/InsetMathHull.cpp \
        mathed/InsetMathHull.h \
+       mathed/InsetMathIntertext.cpp \
+       mathed/InsetMathIntertext.h \
        mathed/InsetMathKern.cpp \
        mathed/InsetMathKern.h \
        mathed/InsetMathLefteqn.cpp \
diff --git a/src/insets/Inset.cpp b/src/insets/Inset.cpp
index d60e4a8078..8884906b8e 100644
--- a/src/insets/Inset.cpp
+++ b/src/insets/Inset.cpp
@@ -147,6 +147,7 @@ static void build_translator()
        insetnames[MATH_GRID_CODE] = InsetName("mathgrid");
        insetnames[MATH_CODE] = InsetName("math");
        insetnames[MATH_HULL_CODE] = InsetName("mathhull");
+       insetnames[MATH_INTERTEXT_CODE] = InsetName("mathintertext");
        insetnames[MATH_KERN_CODE] = InsetName("mathkern");
        insetnames[MATH_LEFTEQN_CODE] = InsetName("mathlefteqn");
        insetnames[MATH_LIM_CODE] = InsetName("mathlim");
diff --git a/src/insets/InsetCode.h b/src/insets/InsetCode.h
index 6082e76395..e7d113ef1a 100644
--- a/src/insets/InsetCode.h
+++ b/src/insets/InsetCode.h
@@ -165,11 +165,13 @@ enum InsetCode {
        ///
        MATH_HULL_CODE,
        ///
+       MATH_INTERTEXT_CODE,
+       ///
        MATH_KERN_CODE,
        ///
-       MATH_LEFTEQN_CODE,
+       MATH_LEFTEQN_CODE, // 75
        ///
-       MATH_LIM_CODE, // 75
+       MATH_LIM_CODE,
        ///
        MATH_MATRIX_CODE,
        ///
@@ -177,9 +179,9 @@ enum InsetCode {
        ///
        MATH_NEST_CODE,
        ///
-       MATH_NUMBER_CODE,
+       MATH_NUMBER_CODE, // 80
        ///
-       MATH_OVERSET_CODE, // 80
+       MATH_OVERSET_CODE,
        ///
        MATH_PAR_CODE,
        ///
@@ -187,9 +189,9 @@ enum InsetCode {
        ///
        MATH_REF_CODE,
        ///
-       MATH_ROOT_CODE,
+       MATH_ROOT_CODE, // 85
        ///
-       MATH_SCRIPT_CODE, // 85
+       MATH_SCRIPT_CODE,
        ///
        MATH_SIZE_CODE,
        ///
@@ -197,9 +199,9 @@ enum InsetCode {
        ///
        MATH_SPECIALCHAR_CODE,
        ///
-       MATH_SPLIT_CODE,
+       MATH_SPLIT_CODE, // 90
        ///
-       MATH_SQRT_CODE, // 90
+       MATH_SQRT_CODE,
        ///
        MATH_STACKREL_CODE,
        ///
@@ -207,9 +209,9 @@ enum InsetCode {
        ///
        MATH_SUBSTACK_CODE,
        ///
-       MATH_SYMBOL_CODE,
+       MATH_SYMBOL_CODE, // 95
        ///
-       MATH_TABULAR_CODE, // 95
+       MATH_TABULAR_CODE,
        ///
        MATH_TEXTSIZE_CODE,
        ///
@@ -217,9 +219,9 @@ enum InsetCode {
        ///
        MATH_UNKNOWN_CODE,
        ///
-       MATH_XARROW_CODE,
+       MATH_XARROW_CODE, // 100
        ///
-       MATH_XYMATRIX_CODE, // 100
+       MATH_XYMATRIX_CODE,
        ///
        MATH_MACRO_CODE,
        ///
@@ -227,9 +229,9 @@ enum InsetCode {
        ///
        PREVIEW_CODE,
        ///
-       MATH_DIAGRAM_CODE,
+       MATH_DIAGRAM_CODE, // 105
        ///
-       SCRIPT_CODE, // 105
+       SCRIPT_CODE,
        ///
        IPA_CODE,
        ///
@@ -237,9 +239,9 @@ enum InsetCode {
        ///
        IPADECO_CODE,
        ///
-       MATH_CLASS_CODE,
+       MATH_CLASS_CODE, // 110
        ///
-       COUNTER_CODE, // 110
+       COUNTER_CODE,
        ///
        INDEXMACRO_CODE,
        ///
diff --git a/src/mathed/InsetMath.h b/src/mathed/InsetMath.h
index 7e10264130..f6d8fcb8c6 100644
--- a/src/mathed/InsetMath.h
+++ b/src/mathed/InsetMath.h
@@ -88,6 +88,7 @@ class InsetMathFrac;
 class InsetMathFont;
 class InsetMathGrid;
 class InsetMathHull;
+class InsetMathIntertext;
 class InsetMathMatrix;
 class InsetMathNest;
 class InsetMathScript;
@@ -170,6 +171,8 @@ public:
        virtual InsetMathGrid const     * asGridInset() const     { return 
nullptr; }
        virtual InsetMathHull           * asHullInset()           { return 
nullptr; }
        virtual InsetMathHull const     * asHullInset() const     { return 
nullptr; }
+       virtual InsetMathIntertext       * asIntertextInset()          { return 
nullptr; }
+       virtual InsetMathIntertext const * asIntertextInset() const    { return 
nullptr; }
        virtual InsetMathMacro          * asMacroInset()          { return 
nullptr; }
        virtual InsetMathMacro const    * asMacroInset() const    { return 
nullptr; }
        virtual InsetMathMacroTemplate       * asMacroTemplateInset()       { 
return nullptr; }
diff --git a/src/mathed/InsetMathIntertext.cpp 
b/src/mathed/InsetMathIntertext.cpp
new file mode 100644
index 0000000000..8b9003b268
--- /dev/null
+++ b/src/mathed/InsetMathIntertext.cpp
@@ -0,0 +1,108 @@
+/**
+ * \file InsetMathIntertext.cpp
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author Koji Yokota
+ *
+ * Full author contact details are available in file CREDITS.
+ */
+
+#include <config.h>
+
+#include "InsetMathIntertext.h"
+
+#include "Buffer.h"
+#include "BufferView.h"
+#include "Dimension.h"
+#include "InsetMathChar.h"
+#include "LaTeXFeatures.h"
+#include "MathData.h"
+#include "MathFactory.h"
+#include "MathStream.h"
+#include "MathSupport.h"
+#include "MetricsInfo.h"
+#include "support/docstream.h"
+#include "support/lstrings.h"
+
+using lyx::support::escape;
+
+
+namespace lyx {
+
+InsetMathIntertext::InsetMathIntertext(Buffer * buf, docstring const & name)
+       : InsetMathNest(buf, 1), name_(name)
+{}
+
+
+void InsetMathIntertext::write(TeXMathStream & os) const
+{
+       ModeSpecifier specifier(os, TEXT_MODE);
+       os << '\\' << name_ << '{' << cell(0) << '}';
+}
+
+
+Inset * InsetMathIntertext::clone() const
+{
+       return new InsetMathIntertext(*this);
+}
+
+
+void InsetMathIntertext::metrics(MetricsInfo & mi, Dimension & dim) const
+{
+       Changer dummy = mi.base.changeFontSet("text");
+       cell(0).metrics(mi, dim);
+       if (name_ == "shortintertext")
+               dim.asc += 2 * dim.asc + dim.des + spacer_;
+       else
+               dim.asc += 3 * dim.asc + 2 * (dim.des + spacer_);
+}
+
+
+void InsetMathIntertext::draw(PainterInfo & pi, int x, int y) const
+{
+       Changer dummy = pi.base.changeFontSet("text");
+       Dimension const dim = dimension(*pi.base.bv);
+       int text_y;
+       // note that dim.asc is already updated in metrics()
+       if (name_ == "shortintertext")
+               text_y = y - (dim.asc + dim.des + spacer_)/2;
+       else
+               text_y = y - (dim.asc - dim.des + spacer_)/2;
+       cell(0).draw(pi, x, text_y);
+}
+
+
+docstring InsetMathIntertext::name() const
+{
+       return name_;
+}
+
+
+void InsetMathIntertext::mathmlize(MathMLStream & ms) const
+{
+       ms << MTagInline("mtext", "style=\"position:absolute;left:0px\"");
+       for (size_type i=0; i<cell(0).size(); ++i)
+               ms << cell(0)[i]->asCharInset()->getChar();
+       ms << ETagInline("mtext");
+       // make a new line
+       ms << ETag("mtd") << ETag("mtr")
+          << MTag("mtr", "style=\"height:3ex\"") << ETag("mtr")
+          << MTag("mtr") << MTag("mtd");
+}
+
+
+void InsetMathIntertext::infoize(odocstream & os) const
+{
+       os << "Intertext ";
+}
+
+
+void InsetMathIntertext::validate(LaTeXFeatures & features) const
+{
+       if (name_ == "shortintertext" && features.runparams().isLaTeX())
+               features.require("mathtools");
+       InsetMathNest::validate(features);
+}
+
+} // namespace lyx
diff --git a/src/mathed/InsetMathIntertext.h b/src/mathed/InsetMathIntertext.h
new file mode 100644
index 0000000000..30db04c9ff
--- /dev/null
+++ b/src/mathed/InsetMathIntertext.h
@@ -0,0 +1,57 @@
+// -*- C++ -*-
+/**
+ * \file InsetMathIntertext.h
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author Koji Yokota
+ *
+ * Full author contact details are available in file CREDITS.
+ */
+
+#ifndef MATH_INTERTEXTINSET_H
+#define MATH_INTERTEXTINSET_H
+
+#include "InsetMathNest.h"
+
+#include "support/docstring.h"
+
+
+namespace lyx {
+
+
+/// Support for LaTeX's \\intertext command
+
+class InsetMathIntertext : public InsetMathNest {
+public:
+       ///
+       explicit InsetMathIntertext(Buffer * buf, docstring const & name);
+       ///
+       mode_type currentMode() const override { return TEXT_MODE; }
+       ///
+       docstring name() const override;
+       ///
+       void metrics(MetricsInfo & mi, Dimension & dim) const override;
+       ///
+       void draw(PainterInfo & pi, int x, int y) const override;
+       ///
+       void write(TeXMathStream & os) const override;
+       ///
+       void mathmlize(MathMLStream & ms) const override;
+       ///
+       void infoize(odocstream & os) const override;
+       ///
+       InsetCode lyxCode() const override { return MATH_INTERTEXT_CODE; }
+       ///
+       void validate(LaTeXFeatures &) const override;
+
+private:
+       Inset * clone() const override;
+       /// the string
+       docstring name_;
+       int spacer_ = 10;
+};
+
+
+} // namespace lyx
+#endif
diff --git a/src/mathed/MathFactory.cpp b/src/mathed/MathFactory.cpp
index f03915925e..f39bef3d96 100644
--- a/src/mathed/MathFactory.cpp
+++ b/src/mathed/MathFactory.cpp
@@ -27,6 +27,7 @@
 #include "InsetMathFont.h"
 #include "InsetMathFontOld.h"
 #include "InsetMathFrac.h"
+#include "InsetMathIntertext.h"
 #include "InsetMathLefteqn.h"
 #include "InsetMathOverset.h"
 #include "InsetMathPhantom.h"
@@ -568,6 +569,8 @@ MathAtom createInsetMath(docstring const & s, Buffer * buf)
                        return MathAtom(new InsetMathBox(buf, l->name));
 //             if (inset == "fbox")
 //                     return MathAtom(new InsetMathFBox(l));
+               if (inset == "intertext")
+                       return MathAtom(new InsetMathIntertext(buf, l->name));
                if (inset == "style")
                        return MathAtom(new InsetMathSize(buf, l));
                if (inset == "font")
-- 
lyx-cvs mailing list
lyx-cvs@lists.lyx.org
https://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to