bufsize_t _scan_autolink_uri()

in src/scanners.c [749:1587]


bufsize_t _scan_autolink_uri(const unsigned char *p) {
  const unsigned char *marker = NULL;
  const unsigned char *start = p;

  {
    unsigned char yych;
    static const unsigned char yybm[] = {
        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
        0,   0,   0,   0,   0,   128, 128, 128, 128, 128, 128, 128, 128, 128,
        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
        128, 128, 128, 128, 0,   128, 0,   128, 128, 128, 128, 128, 128, 128,
        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
        128, 128, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
        0,   0,   0,   0,
    };
    yych = *p;
    if (yych <= '@')
      goto yy41;
    if (yych <= 'Z')
      goto yy43;
    if (yych <= '`')
      goto yy41;
    if (yych <= 'z')
      goto yy43;
  yy41:
    ++p;
  yy42 : { return 0; }
  yy43:
    yych = *(marker = ++p);
    if (yych <= '/') {
      if (yych <= '+') {
        if (yych <= '*')
          goto yy42;
      } else {
        if (yych <= ',')
          goto yy42;
        if (yych >= '/')
          goto yy42;
      }
    } else {
      if (yych <= 'Z') {
        if (yych <= '9')
          goto yy44;
        if (yych <= '@')
          goto yy42;
      } else {
        if (yych <= '`')
          goto yy42;
        if (yych >= '{')
          goto yy42;
      }
    }
  yy44:
    yych = *++p;
    if (yych <= '9') {
      if (yych <= ',') {
        if (yych == '+')
          goto yy46;
      } else {
        if (yych != '/')
          goto yy46;
      }
    } else {
      if (yych <= 'Z') {
        if (yych <= ':')
          goto yy47;
        if (yych >= 'A')
          goto yy46;
      } else {
        if (yych <= '`')
          goto yy45;
        if (yych <= 'z')
          goto yy46;
      }
    }
  yy45:
    p = marker;
    goto yy42;
  yy46:
    yych = *++p;
    if (yych <= '9') {
      if (yych <= ',') {
        if (yych == '+')
          goto yy49;
        goto yy45;
      } else {
        if (yych == '/')
          goto yy45;
        goto yy49;
      }
    } else {
      if (yych <= 'Z') {
        if (yych <= ':')
          goto yy47;
        if (yych <= '@')
          goto yy45;
        goto yy49;
      } else {
        if (yych <= '`')
          goto yy45;
        if (yych <= 'z')
          goto yy49;
        goto yy45;
      }
    }
  yy47:
    ++p;
    yych = *p;
    if (yybm[0 + yych] & 128) {
      goto yy47;
    }
    if (yych <= 0xEC) {
      if (yych <= 0xC1) {
        if (yych <= '<')
          goto yy45;
        if (yych <= '>')
          goto yy50;
        goto yy45;
      } else {
        if (yych <= 0xDF)
          goto yy52;
        if (yych <= 0xE0)
          goto yy53;
        goto yy54;
      }
    } else {
      if (yych <= 0xF0) {
        if (yych <= 0xED)
          goto yy55;
        if (yych <= 0xEF)
          goto yy54;
        goto yy56;
      } else {
        if (yych <= 0xF3)
          goto yy57;
        if (yych <= 0xF4)
          goto yy58;
        goto yy45;
      }
    }
  yy49:
    yych = *++p;
    if (yych <= '9') {
      if (yych <= ',') {
        if (yych == '+')
          goto yy59;
        goto yy45;
      } else {
        if (yych == '/')
          goto yy45;
        goto yy59;
      }
    } else {
      if (yych <= 'Z') {
        if (yych <= ':')
          goto yy47;
        if (yych <= '@')
          goto yy45;
        goto yy59;
      } else {
        if (yych <= '`')
          goto yy45;
        if (yych <= 'z')
          goto yy59;
        goto yy45;
      }
    }
  yy50:
    ++p;
    { return (bufsize_t)(p - start); }
  yy52:
    ++p;
    yych = *p;
    if (yych <= 0x7F)
      goto yy45;
    if (yych <= 0xBF)
      goto yy47;
    goto yy45;
  yy53:
    ++p;
    yych = *p;
    if (yych <= 0x9F)
      goto yy45;
    if (yych <= 0xBF)
      goto yy52;
    goto yy45;
  yy54:
    ++p;
    yych = *p;
    if (yych <= 0x7F)
      goto yy45;
    if (yych <= 0xBF)
      goto yy52;
    goto yy45;
  yy55:
    ++p;
    yych = *p;
    if (yych <= 0x7F)
      goto yy45;
    if (yych <= 0x9F)
      goto yy52;
    goto yy45;
  yy56:
    ++p;
    yych = *p;
    if (yych <= 0x8F)
      goto yy45;
    if (yych <= 0xBF)
      goto yy54;
    goto yy45;
  yy57:
    ++p;
    yych = *p;
    if (yych <= 0x7F)
      goto yy45;
    if (yych <= 0xBF)
      goto yy54;
    goto yy45;
  yy58:
    ++p;
    yych = *p;
    if (yych <= 0x7F)
      goto yy45;
    if (yych <= 0x8F)
      goto yy54;
    goto yy45;
  yy59:
    yych = *++p;
    if (yych <= '9') {
      if (yych <= ',') {
        if (yych != '+')
          goto yy45;
      } else {
        if (yych == '/')
          goto yy45;
      }
    } else {
      if (yych <= 'Z') {
        if (yych <= ':')
          goto yy47;
        if (yych <= '@')
          goto yy45;
      } else {
        if (yych <= '`')
          goto yy45;
        if (yych >= '{')
          goto yy45;
      }
    }
    yych = *++p;
    if (yych <= '9') {
      if (yych <= ',') {
        if (yych != '+')
          goto yy45;
      } else {
        if (yych == '/')
          goto yy45;
      }
    } else {
      if (yych <= 'Z') {
        if (yych <= ':')
          goto yy47;
        if (yych <= '@')
          goto yy45;
      } else {
        if (yych <= '`')
          goto yy45;
        if (yych >= '{')
          goto yy45;
      }
    }
    yych = *++p;
    if (yych <= '9') {
      if (yych <= ',') {
        if (yych != '+')
          goto yy45;
      } else {
        if (yych == '/')
          goto yy45;
      }
    } else {
      if (yych <= 'Z') {
        if (yych <= ':')
          goto yy47;
        if (yych <= '@')
          goto yy45;
      } else {
        if (yych <= '`')
          goto yy45;
        if (yych >= '{')
          goto yy45;
      }
    }
    yych = *++p;
    if (yych <= '9') {
      if (yych <= ',') {
        if (yych != '+')
          goto yy45;
      } else {
        if (yych == '/')
          goto yy45;
      }
    } else {
      if (yych <= 'Z') {
        if (yych <= ':')
          goto yy47;
        if (yych <= '@')
          goto yy45;
      } else {
        if (yych <= '`')
          goto yy45;
        if (yych >= '{')
          goto yy45;
      }
    }
    yych = *++p;
    if (yych <= '9') {
      if (yych <= ',') {
        if (yych != '+')
          goto yy45;
      } else {
        if (yych == '/')
          goto yy45;
      }
    } else {
      if (yych <= 'Z') {
        if (yych <= ':')
          goto yy47;
        if (yych <= '@')
          goto yy45;
      } else {
        if (yych <= '`')
          goto yy45;
        if (yych >= '{')
          goto yy45;
      }
    }
    yych = *++p;
    if (yych <= '9') {
      if (yych <= ',') {
        if (yych != '+')
          goto yy45;
      } else {
        if (yych == '/')
          goto yy45;
      }
    } else {
      if (yych <= 'Z') {
        if (yych <= ':')
          goto yy47;
        if (yych <= '@')
          goto yy45;
      } else {
        if (yych <= '`')
          goto yy45;
        if (yych >= '{')
          goto yy45;
      }
    }
    yych = *++p;
    if (yych <= '9') {
      if (yych <= ',') {
        if (yych != '+')
          goto yy45;
      } else {
        if (yych == '/')
          goto yy45;
      }
    } else {
      if (yych <= 'Z') {
        if (yych <= ':')
          goto yy47;
        if (yych <= '@')
          goto yy45;
      } else {
        if (yych <= '`')
          goto yy45;
        if (yych >= '{')
          goto yy45;
      }
    }
    yych = *++p;
    if (yych <= '9') {
      if (yych <= ',') {
        if (yych != '+')
          goto yy45;
      } else {
        if (yych == '/')
          goto yy45;
      }
    } else {
      if (yych <= 'Z') {
        if (yych <= ':')
          goto yy47;
        if (yych <= '@')
          goto yy45;
      } else {
        if (yych <= '`')
          goto yy45;
        if (yych >= '{')
          goto yy45;
      }
    }
    yych = *++p;
    if (yych <= '9') {
      if (yych <= ',') {
        if (yych != '+')
          goto yy45;
      } else {
        if (yych == '/')
          goto yy45;
      }
    } else {
      if (yych <= 'Z') {
        if (yych <= ':')
          goto yy47;
        if (yych <= '@')
          goto yy45;
      } else {
        if (yych <= '`')
          goto yy45;
        if (yych >= '{')
          goto yy45;
      }
    }
    yych = *++p;
    if (yych <= '9') {
      if (yych <= ',') {
        if (yych != '+')
          goto yy45;
      } else {
        if (yych == '/')
          goto yy45;
      }
    } else {
      if (yych <= 'Z') {
        if (yych <= ':')
          goto yy47;
        if (yych <= '@')
          goto yy45;
      } else {
        if (yych <= '`')
          goto yy45;
        if (yych >= '{')
          goto yy45;
      }
    }
    yych = *++p;
    if (yych <= '9') {
      if (yych <= ',') {
        if (yych != '+')
          goto yy45;
      } else {
        if (yych == '/')
          goto yy45;
      }
    } else {
      if (yych <= 'Z') {
        if (yych <= ':')
          goto yy47;
        if (yych <= '@')
          goto yy45;
      } else {
        if (yych <= '`')
          goto yy45;
        if (yych >= '{')
          goto yy45;
      }
    }
    yych = *++p;
    if (yych <= '9') {
      if (yych <= ',') {
        if (yych != '+')
          goto yy45;
      } else {
        if (yych == '/')
          goto yy45;
      }
    } else {
      if (yych <= 'Z') {
        if (yych <= ':')
          goto yy47;
        if (yych <= '@')
          goto yy45;
      } else {
        if (yych <= '`')
          goto yy45;
        if (yych >= '{')
          goto yy45;
      }
    }
    yych = *++p;
    if (yych <= '9') {
      if (yych <= ',') {
        if (yych != '+')
          goto yy45;
      } else {
        if (yych == '/')
          goto yy45;
      }
    } else {
      if (yych <= 'Z') {
        if (yych <= ':')
          goto yy47;
        if (yych <= '@')
          goto yy45;
      } else {
        if (yych <= '`')
          goto yy45;
        if (yych >= '{')
          goto yy45;
      }
    }
    yych = *++p;
    if (yych <= '9') {
      if (yych <= ',') {
        if (yych != '+')
          goto yy45;
      } else {
        if (yych == '/')
          goto yy45;
      }
    } else {
      if (yych <= 'Z') {
        if (yych <= ':')
          goto yy47;
        if (yych <= '@')
          goto yy45;
      } else {
        if (yych <= '`')
          goto yy45;
        if (yych >= '{')
          goto yy45;
      }
    }
    yych = *++p;
    if (yych <= '9') {
      if (yych <= ',') {
        if (yych != '+')
          goto yy45;
      } else {
        if (yych == '/')
          goto yy45;
      }
    } else {
      if (yych <= 'Z') {
        if (yych <= ':')
          goto yy47;
        if (yych <= '@')
          goto yy45;
      } else {
        if (yych <= '`')
          goto yy45;
        if (yych >= '{')
          goto yy45;
      }
    }
    yych = *++p;
    if (yych <= '9') {
      if (yych <= ',') {
        if (yych != '+')
          goto yy45;
      } else {
        if (yych == '/')
          goto yy45;
      }
    } else {
      if (yych <= 'Z') {
        if (yych <= ':')
          goto yy47;
        if (yych <= '@')
          goto yy45;
      } else {
        if (yych <= '`')
          goto yy45;
        if (yych >= '{')
          goto yy45;
      }
    }
    yych = *++p;
    if (yych <= '9') {
      if (yych <= ',') {
        if (yych != '+')
          goto yy45;
      } else {
        if (yych == '/')
          goto yy45;
      }
    } else {
      if (yych <= 'Z') {
        if (yych <= ':')
          goto yy47;
        if (yych <= '@')
          goto yy45;
      } else {
        if (yych <= '`')
          goto yy45;
        if (yych >= '{')
          goto yy45;
      }
    }
    yych = *++p;
    if (yych <= '9') {
      if (yych <= ',') {
        if (yych != '+')
          goto yy45;
      } else {
        if (yych == '/')
          goto yy45;
      }
    } else {
      if (yych <= 'Z') {
        if (yych <= ':')
          goto yy47;
        if (yych <= '@')
          goto yy45;
      } else {
        if (yych <= '`')
          goto yy45;
        if (yych >= '{')
          goto yy45;
      }
    }
    yych = *++p;
    if (yych <= '9') {
      if (yych <= ',') {
        if (yych != '+')
          goto yy45;
      } else {
        if (yych == '/')
          goto yy45;
      }
    } else {
      if (yych <= 'Z') {
        if (yych <= ':')
          goto yy47;
        if (yych <= '@')
          goto yy45;
      } else {
        if (yych <= '`')
          goto yy45;
        if (yych >= '{')
          goto yy45;
      }
    }
    yych = *++p;
    if (yych <= '9') {
      if (yych <= ',') {
        if (yych != '+')
          goto yy45;
      } else {
        if (yych == '/')
          goto yy45;
      }
    } else {
      if (yych <= 'Z') {
        if (yych <= ':')
          goto yy47;
        if (yych <= '@')
          goto yy45;
      } else {
        if (yych <= '`')
          goto yy45;
        if (yych >= '{')
          goto yy45;
      }
    }
    yych = *++p;
    if (yych <= '9') {
      if (yych <= ',') {
        if (yych != '+')
          goto yy45;
      } else {
        if (yych == '/')
          goto yy45;
      }
    } else {
      if (yych <= 'Z') {
        if (yych <= ':')
          goto yy47;
        if (yych <= '@')
          goto yy45;
      } else {
        if (yych <= '`')
          goto yy45;
        if (yych >= '{')
          goto yy45;
      }
    }
    yych = *++p;
    if (yych <= '9') {
      if (yych <= ',') {
        if (yych != '+')
          goto yy45;
      } else {
        if (yych == '/')
          goto yy45;
      }
    } else {
      if (yych <= 'Z') {
        if (yych <= ':')
          goto yy47;
        if (yych <= '@')
          goto yy45;
      } else {
        if (yych <= '`')
          goto yy45;
        if (yych >= '{')
          goto yy45;
      }
    }
    yych = *++p;
    if (yych <= '9') {
      if (yych <= ',') {
        if (yych != '+')
          goto yy45;
      } else {
        if (yych == '/')
          goto yy45;
      }
    } else {
      if (yych <= 'Z') {
        if (yych <= ':')
          goto yy47;
        if (yych <= '@')
          goto yy45;
      } else {
        if (yych <= '`')
          goto yy45;
        if (yych >= '{')
          goto yy45;
      }
    }
    yych = *++p;
    if (yych <= '9') {
      if (yych <= ',') {
        if (yych != '+')
          goto yy45;
      } else {
        if (yych == '/')
          goto yy45;
      }
    } else {
      if (yych <= 'Z') {
        if (yych <= ':')
          goto yy47;
        if (yych <= '@')
          goto yy45;
      } else {
        if (yych <= '`')
          goto yy45;
        if (yych >= '{')
          goto yy45;
      }
    }
    yych = *++p;
    if (yych <= '9') {
      if (yych <= ',') {
        if (yych != '+')
          goto yy45;
      } else {
        if (yych == '/')
          goto yy45;
      }
    } else {
      if (yych <= 'Z') {
        if (yych <= ':')
          goto yy47;
        if (yych <= '@')
          goto yy45;
      } else {
        if (yych <= '`')
          goto yy45;
        if (yych >= '{')
          goto yy45;
      }
    }
    yych = *++p;
    if (yych <= '9') {
      if (yych <= ',') {
        if (yych != '+')
          goto yy45;
      } else {
        if (yych == '/')
          goto yy45;
      }
    } else {
      if (yych <= 'Z') {
        if (yych <= ':')
          goto yy47;
        if (yych <= '@')
          goto yy45;
      } else {
        if (yych <= '`')
          goto yy45;
        if (yych >= '{')
          goto yy45;
      }
    }
    yych = *++p;
    if (yych <= '9') {
      if (yych <= ',') {
        if (yych != '+')
          goto yy45;
      } else {
        if (yych == '/')
          goto yy45;
      }
    } else {
      if (yych <= 'Z') {
        if (yych <= ':')
          goto yy47;
        if (yych <= '@')
          goto yy45;
      } else {
        if (yych <= '`')
          goto yy45;
        if (yych >= '{')
          goto yy45;
      }
    }
    ++p;
    if ((yych = *p) == ':')
      goto yy47;
    goto yy45;
  }
}