public override void PrintBy(Printing.IPrinter printer) { var restoreStart = printer.StorePositionAndFont(); Array.ForEach(_baseText, x => x.PrintBy(printer)); printer.Space(_appendingLength); PrintRuby(printer, restoreStart); }
private void PrintRuby(Printing.IPrinter printer, Printing.PrinterMemento restoreStart) { var restoreEnd = printer.StorePositionAndFont(); try { restoreStart(); float bodyFontSize = printer.FontSize; float rubyFontSize = bodyFontSize / 2; //TODO: 設定を統一するか、書式情報として運搬 printer.LineFeed(-(bodyFontSize + rubyFontSize) / 2); printer.FontSize = rubyFontSize; Array.ForEach(_rubyText, x => x.PrintBy(printer)); } finally { restoreEnd(); } }
public override void PrintBy(Printing.IPrinter printer) { Printing.PrinterMemento restoreStart = null; bool canAddEmphasisDots = CanAddEmphasisDots(); if (canAddEmphasisDots) restoreStart = printer.StorePositionAndFont(); _decoratee.PrintBy(printer); if (!canAddEmphasisDots) return; var restoreEnd = printer.StorePositionAndFont(); { restoreStart(); var baseFontSize = printer.FontSize; printer.LineFeed(-baseFontSize / 2 - correction); printer.Space(_decoratee.Offset); printer.PrintJapaneseLetter(sesami, baseFontSize); } restoreEnd(); }