         return (truncateLineCount ?? self.getTruncateLineCount()) + self.location
     }
 
+    /**
+     行を描画する
+
+     - parameters:
+        - range: 全体における描画する行の範囲
+        - offset: 行頭オフセット
+        - oshidashi: 押し出しするか？
+        - on: 描画する context
+     */
     private mutating func drawLine(range: NSRange, offset: CGFloat, oshidashi: Bool = false, on context: CGContext) {
 
         // 反転をもどす

        }
    }

    private func draw(context: CGContext, on canvasContext: CGContext?) {
        if let canvasContext = canvasContext {
            CGContextDrawImage(
                canvasContext,
                CGRectMake(
                    0,
                    self.getDrawOffsetY(),
                    self.width + self.startPosition.x,   // 開始位置分、描画範囲が広がる(x分)
                    self.height + self.startPosition.y), // 開始位置分、描画範囲が広がる(y分)
                CGBitmapContextCreateImage(context)
            )
        }
    }

    /**
     文字を生成する。canvasContext を与えると、そこに文字を描画する。

     - parameter canvasContext: 文字が描画される context
     */
    private mutating func process(canvasContext: CGContext? = nil) -> CGContext? {


        CTLineDraw(ctline, context)
    }

    /**
     次の行に進む

     - parameter: 現在行の文字数 (これを `location` に加えて次の行に進む)
     */
    private mutating func goToNextLine(count: Int) {
        self.location += count
        self.lines += 1
    }

    /**
     `verticalAlignment` で設定した値をもとに Y 座標のオフセットを返す

     - returns: 描画する行の Y 座標のオフセット
     */
    private func getDrawOffsetY() -> CGFloat {
        switch self.verticalAlignment {
        case .Top:
