예제 #1
0
 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);
 }
예제 #2
0
 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();
     }
 }
예제 #3
0
        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();
        }