code: function tokenize(str) {
    var lines = str.split(LB_RE);
    var line;
    var tokens = [];
  
    // 空文字は無視します
    if (str.length === 0) { return tokens; }
  
    var isCGMD = false;
    // 全ての行をなめる
    while ((line = lines.shift()) !== undefined) {
      // CGMDのスタート / エンドでフラグを打つ
      if (CGMD_START_RE.exec(line.trim())) {
        isCGMD = true;
        tokens.push(new CGMD_Token());
        tokens[tokens.length - 1].addBody(line);
        continue;
      }
      if (CGMD_END_RE.exec(line.trim())) {
        isCGMD = false;
        tokens[tokens.length - 1].addBody(line);
        continue;
      }
  
      if (
        // ふつうのMDでありつつ
        isCGMD === false &&
        (
          // 最初か
          tokens.length === 0 ||
          // さっきまでCGMDを処理していたなら
          tokens[tokens.length - 1].isTypeCGMD()
        )
      ) {
        // 新しい区分にしてから
        tokens.push(new MD_Token());
      }
  
      // 中身を入れる
      tokens[tokens.length - 1].addBody(line);
    }
  
    // 全行見終わってまだこのフラグが立ってるなら閉じ忘れ
    if (isCGMD) {
      throw new Error('Missing close tag for CGMD!');
    }
  
    return tokens;
  }
docs: トークン化する
  
  @param {string} str
  マークダウンであろう文字列
  @return {array}
  トークンの配列