commit 94a48c75f3d78c55b70aeea996009a64d4d5aee2
Author: Juergen Spitzmueller <[email protected]>
Date: Thu Jul 11 11:37:49 2013 +0200
Properly nest ulem commands within other font changes
This reverts the wrong fix to #8424 which caused #8733 and fixes both
problems properly
diff --git a/src/Font.cpp b/src/Font.cpp
index d00cbf2..df4da44 100644
--- a/src/Font.cpp
+++ b/src/Font.cpp
@@ -392,46 +392,45 @@ int Font::latexWriteStartChanges(odocstream & os,
BufferParams const & bparams,
count += 6;
env = true; //We have opened a new environment
}
+ // \noun{} is a LyX special macro
+ if (f.noun() == FONT_ON) {
+ os << "\\noun{";
+ count += 6;
+ env = true; //We have opened a new environment
+ }
+ if (f.size() != FONT_SIZE_INHERIT) {
+ // If we didn't open an environment above, we open one here
+ if (!env) {
+ os << '{';
+ ++count;
+ }
+ os << '\\'
+ << LaTeXSizeNames[f.size()]
+ << "{}";
+ count += strlen(LaTeXSizeNames[f.size()]) + 3;
+ }
+ // The ulem commands need to be on the deepest nesting level
+ // because ulem puts every nested group or macro in a box,
+ // which prevents linebreaks (#8424, #8733)
if (f.underbar() == FONT_ON) {
os << "\\uline{";
count += 10;
runparams.inulemcmd = true;
- env = true; //We have opened a new environment
}
if (f.strikeout() == FONT_ON) {
os << "\\sout{";
count += 9;
runparams.inulemcmd = true;
- env = true; //We have opened a new environment
}
if (f.uuline() == FONT_ON) {
os << "\\uuline{";
count += 11;
runparams.inulemcmd = true;
- env = true; //We have opened a new environment
}
if (f.uwave() == FONT_ON) {
os << "\\uwave{";
count += 10;
runparams.inulemcmd = true;
- env = true; //We have opened a new environment
- }
- // \noun{} is a LyX special macro
- if (f.noun() == FONT_ON) {
- os << "\\noun{";
- count += 6;
- env = true; //We have opened a new environment
- }
- if (f.size() != FONT_SIZE_INHERIT) {
- // If we didn't open an environment above, we open one here
- if (!env) {
- os << '{';
- ++count;
- }
- os << '\\'
- << LaTeXSizeNames[f.size()]
- << '{';
- count += strlen(LaTeXSizeNames[f.size()]) + 2;
}
return count;
}
@@ -480,46 +479,40 @@ int Font::latexWriteEndChanges(otexstream & os,
BufferParams const & bparams,
++count;
env = true; // Size change need not bother about closing env.
}
+ if (f.noun() == FONT_ON) {
+ os << '}';
+ ++count;
+ env = true; // Size change need not bother about closing env.
+ }
+ if (f.size() != FONT_SIZE_INHERIT) {
+ // We only have to close if only size changed
+ if (!env) {
+ os << '}';
+ ++count;
+ }
+ }
if (f.underbar() == FONT_ON) {
os << '}';
++count;
runparams.inulemcmd = false;
- env = true; // Size change need not bother about closing env.
}
if (f.strikeout() == FONT_ON) {
os << '}';
++count;
runparams.inulemcmd = false;
- env = true; // Size change need not bother about closing env.
}
if (f.uuline() == FONT_ON) {
os << '}';
++count;
runparams.inulemcmd = false;
- env = true; // Size change need not bother about closing env.
}
if (f.uwave() == FONT_ON) {
os << '}';
++count;
runparams.inulemcmd = false;
- env = true; // Size change need not bother about closing env.
- }
- if (f.noun() == FONT_ON) {
- os << '}';
- ++count;
- env = true; // Size change need not bother about closing env.
- }
- if (f.size() != FONT_SIZE_INHERIT) {
- // We only have to close if only size changed
- if (!env) {
- os << '}';
- ++count;
- }
- os << '}';
- ++count;
}
- // When the current language is Hebrew, Arabic, or Farsi
+ // If the current language is Hebrew, Arabic, or Farsi
// the numbers are written Left-to-Right. ArabTeX package
// reorders the number automatically but the packages used
// for Hebrew and Farsi (Arabi) do not.