Add outline and shadow to IIgs doc conversion

RTF includes outline and shadow styles, but for some reason
CiderPress wasn't generating them.  They don't appear in the Rich
Text Edit file viewer, but if you extract the file and open it with
Microsoft Word you can see the text in all its glory.
This commit is contained in:
Andy McFadden 2015-01-14 12:20:51 -08:00
parent cc93d4ab92
commit f6601161fe
2 changed files with 97 additions and 31 deletions

View File

@ -682,6 +682,46 @@ void ReformatText::RTFUnderlineOff(void)
} }
} }
void ReformatText::RTFOutlineOn(void)
{
if (fOutlineEnabled)
return;
if (fUseRTF) {
BufPrintf("\\outl ");
fOutlineEnabled = true;
}
}
void ReformatText::RTFOutlineOff(void)
{
if (!fOutlineEnabled)
return;
if (fUseRTF) {
BufPrintf("\\outl0 ");
fOutlineEnabled = false;
}
}
void ReformatText::RTFShadowOn(void)
{
if (fShadowEnabled)
return;
if (fUseRTF) {
BufPrintf("\\shad ");
fShadowEnabled = true;
}
}
void ReformatText::RTFShadowOff(void)
{
if (!fShadowEnabled)
return;
if (fUseRTF) {
BufPrintf("\\shad0 ");
fShadowEnabled = false;
}
}
void ReformatText::RTFSubscriptOn(void) void ReformatText::RTFSubscriptOn(void)
{ {
if (fSubscriptEnabled) if (fSubscriptEnabled)
@ -871,7 +911,7 @@ void ReformatText::RTFSetGSFont(uint16_t family)
newMult = 1.5f; newMult = 1.5f;
break; break;
default: default:
LOGI("Unrecognized font family 0x%04x", family); LOGI("Unrecognized font family 0x%04x, using Arial", family);
RTFSetFont(kFontArial); RTFSetFont(kFontArial);
newMult = 1.0f; newMult = 1.0f;
break; break;
@ -897,11 +937,11 @@ void ReformatText::RTFSetGSFontSize(int points)
} }
/* /*
* Set bold/italic/underline. "Teach" ignores you if you try to * Set bold/italic/underline etc.
* underline text smaller than 8 points, but if you leave the mode *
* on from a previous block it will act like it wants to underline * Note that "Teach" does not show underlining on text that is 8 points
* text but not actually do it. We have to emulate this behavior, * or smaller. We have to emulate this behavior or some documents, such
* or some documents (e.g. "MZ.MANUAL") look terrible. * as ModZap's "MZ.Manual", look terrible.
* *
* Set the font size before calling here. * Set the font size before calling here.
* *
@ -914,26 +954,41 @@ void ReformatText::RTFSetGSFontStyle(uint8_t qdStyle)
if (!fUseRTF) if (!fUseRTF)
return; return;
if ((qdStyle & kQDStyleBold) != 0) if ((qdStyle & kQDStyleBold) != 0) {
RTFBoldOn(); RTFBoldOn();
else } else {
RTFBoldOff(); RTFBoldOff();
if ((qdStyle & kQDStyleItalic) != 0) }
if ((qdStyle & kQDStyleItalic) != 0) {
RTFItalicOn(); RTFItalicOn();
else } else {
RTFItalicOff(); RTFItalicOff();
if ((qdStyle & kQDStyleUnderline) != 0 && fPreMultPointSize > 8) }
if ((qdStyle & kQDStyleUnderline) != 0 && fPreMultPointSize > 8) {
RTFUnderlineOn(); RTFUnderlineOn();
else } else {
RTFUnderlineOff(); RTFUnderlineOff();
if ((qdStyle & kQDStyleSuperscript) != 0) }
if ((qdStyle & kQDStyleOutline) != 0) {
RTFOutlineOn();
} else {
RTFOutlineOff();
}
if ((qdStyle & kQDStyleShadow) != 0) {
RTFShadowOn();
} else {
RTFShadowOff();
}
if ((qdStyle & kQDStyleSuperscript) != 0) {
RTFSuperscriptOn(); RTFSuperscriptOn();
else } else {
RTFSuperscriptOff(); RTFSuperscriptOff();
if ((qdStyle & kQDStyleSubscript) != 0) }
if ((qdStyle & kQDStyleSubscript) != 0) {
RTFSubscriptOn(); RTFSubscriptOn();
else } else {
RTFSubscriptOff(); RTFSubscriptOff();
}
} }

View File

@ -180,23 +180,29 @@ private:
*/ */
class ReformatText : public Reformat { class ReformatText : public Reformat {
public: public:
typedef enum ParagraphJustify { enum ParagraphJustify {
kJustifyLeft, kJustifyLeft,
kJustifyRight, kJustifyRight,
kJustifyCenter, kJustifyCenter,
kJustifyFull, kJustifyFull,
} ParagraphJustify;
ReformatText(void) {
fUseRTF = true;
fLeftMargin = fRightMargin = 0;
fPointSize = fPreMultPointSize = 8;
fGSFontSizeMult = 1.0;
fJustified = kJustifyLeft;
fBoldEnabled = fItalicEnabled = fUnderlineEnabled =
fSuperscriptEnabled = fSubscriptEnabled = false;
fTextColor = kColorNone;
}; };
ReformatText()
: fLeftMargin(0),
fRightMargin(0),
fPointSize(8),
fPreMultPointSize(8),
fGSFontSizeMult(1.0),
fBoldEnabled(false),
fItalicEnabled(false),
fUnderlineEnabled(false),
fOutlineEnabled(false),
fShadowEnabled(false),
fSuperscriptEnabled(false),
fSubscriptEnabled(false),
fJustified(kJustifyLeft),
fTextColor(kColorNone)
{}
virtual ~ReformatText(void) {} virtual ~ReformatText(void) {}
/* /*
@ -308,16 +314,19 @@ protected:
void RTFParaRight(void); void RTFParaRight(void);
void RTFParaCenter(void); void RTFParaCenter(void);
void RTFParaJustify(void); void RTFParaJustify(void);
void RTFLeftMargin(int margin);
void RTFRightMargin(int margin);
//void RTFSetMargins(void);
void RTFSubscriptOn(void); void RTFSubscriptOn(void);
void RTFSubscriptOff(void); void RTFSubscriptOff(void);
void RTFSuperscriptOn(void); void RTFSuperscriptOn(void);
void RTFSuperscriptOff(void); void RTFSuperscriptOff(void);
void RTFOutlineOn(void);
void RTFOutlineOff(void);
void RTFShadowOn(void);
void RTFShadowOff(void);
void RTFSetColor(TextColor color); void RTFSetColor(TextColor color);
void RTFSetFont(RTFFont font); void RTFSetFont(RTFFont font);
void RTFSetFontSize(int points); void RTFSetFontSize(int points);
void RTFLeftMargin(int margin);
void RTFRightMargin(int margin);
void RTFSetGSFont(uint16_t family); void RTFSetGSFont(uint16_t family);
void RTFSetGSFontSize(int points); void RTFSetGSFontSize(int points);
void RTFSetGSFontStyle(uint8_t qdStyle); void RTFSetGSFontStyle(uint8_t qdStyle);
@ -404,6 +413,8 @@ private:
bool fBoldEnabled; bool fBoldEnabled;
bool fItalicEnabled; bool fItalicEnabled;
bool fUnderlineEnabled; bool fUnderlineEnabled;
bool fOutlineEnabled;
bool fShadowEnabled;
bool fSuperscriptEnabled; bool fSuperscriptEnabled;
bool fSubscriptEnabled; bool fSubscriptEnabled;
ParagraphJustify fJustified; ParagraphJustify fJustified;