         self.verticalAlignment = verticalAlignment
     }
 
-    func createEmptyContext(context: CGContext? = nil) -> CGContext {
+    /**
+     context を生成する。与えられた context が nil でないときはそのままそれを返す
+
+     - parameter context: 描画する context
+     - returns: 生成した context
+     */
+    func createContext(context: CGContext? = nil) -> CGContext {
         if let context = context {
             return context
         }

            self.currentLongestTypographicWidth,
            self.currentPosition.y + self.font.ascender - self.font.capHeight)

        // 描画
        self.draw(context, on: canvasContext)


        return context
    }

    /**
     文字を context に描画する

     - parameter on: 文字が描画される canvas
     */
    mutating func drawText(on context: CGContext) {
        self.process(context)

        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:
