All files / hummus-toc/src addTOCPages.js

100% Statements 25/25
100% Branches 9/9
100% Functions 3/3
100% Lines 25/25

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 471x   1x 166x               1x 3x   3x 3x   3x 3x 3x   3x       3x 160x 160x 160x 160x 4x 2x   4x 4x 4x 4x   156x         3x 3x    
const {verticalMax, horizontalMax, verticalMargin, leftMarginEnd, lineSpacing, fontPath} = require('../config')
 
const writeLine = (pageCtx, text, font, fontFactor, horizontalBegin, verticalBegin) => {
  pageCtx.BT()
    .k(0,0,0,1)
    .Tf(font, fontFactor)
    .Tm(30,0,0,30, horizontalBegin, verticalBegin)
    .Tj(text)
    .ET()
}
 
module.exports = (writer, text, customFont = null) => {
  const font = writer.getFontForFile(customFont ? customFont : fontPath, 0)
 
  let page = writer.createPage(0,0,horizontalMax,verticalMax)
  let pageCtx = writer.startPageContentContext(page)
 
  const verticalTextStart = verticalMax - verticalMargin
  writeLine(pageCtx, 'Contents', font, 1, leftMarginEnd, verticalTextStart)
  writeLine(pageCtx, 'Page', font, .8, 470, verticalTextStart)
 
  let pageSize = 0
  // Courier = .4
  // Monofur = .47
  // Monkey = .63, with heading of 1 and .8
  text.forEach(({line}, idx) => {
    const pageIndex = pageSize ? idx % pageSize : idx
    const verticalOffset = lineSpacing * (pageIndex + 1)
    const verticalLineStart = verticalTextStart - verticalOffset
    if (verticalLineStart <= verticalMargin) {
      if (!pageSize) {
        pageSize = idx + 1
      }
      writer.writePage(page)
      page = writer.createPage(0,0,horizontalMax,verticalMax)
      pageCtx = writer.startPageContentContext(page)
      writeLine(pageCtx, line, font, .63, leftMarginEnd, verticalTextStart)
    } else {
      writeLine(pageCtx, line, font, .63, leftMarginEnd, verticalLineStart)
    }
 
  })
 
  writer.writePage(page)
  return pageSize
}