void Printing.IPrintable.PrintBy(Printing.IPrinter printer) { int pageNumber = 0; int lineNumberInPage = 0; foreach (var line in _lineEnum) { if (lineNumberInPage >= _numberOfLines) { printer.PageBreak(); lineNumberInPage = 0; ++pageNumber; Progress(pageNumber); } line.PrintBy(printer); printer.LineFeed(_leading); printer.CarriageReturn(); ++lineNumberInPage; } Progress(pageNumber + 1); }
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(); }