/ff-url-finder

text parser for freefeed

Primary LanguageJavaScript

ff-url-finder

Экспортирует класс URLFinder.

Конструктор: new URLFinder(tlDomains, localDomains), где tlDomains — массив доменов 1-го уровня, которые должны распознаваться без явного указания протокола, localDomains — массив доменов, ссылки в которых считаются локальными.

Поле: withHashTags = false — нужно ли определять в тексте хэш-теги (по умолчанию false). Синтаксис хэш-тегов см. в файле hashtag-syntax.md.

Поле: withArrows = false — нужно ли определять в тексте стрелки-ссылки (^^^ или ↑↑↑).

Метод: parse(text) — разбивает строку текста на список блоков следующих типов:

{type: "text", text: "aa "} // простой текст
{type: "link", text: "google.com", url: "http://google.com/"} // внешняя ссылка
{type: "atLink", text: "@alice", username: "alice"} // @-ссылка с username
{type: "localLink", text: "freefeed.net/abc", uri: "/abc"} // локальная ссылка (в одном из доменов localDomains)
{type: "email", text: "aa@bb.ru", address: "aa@bb.ru"} // адрес e-mail
{type: "hashTag", text: "#3pm", hashTag: "3pm"} // хэш-тег
{type: "arrow", text: "^^^", count: 3} // стрелка-ссылка

Везде: type — тип блока, text — текст, который должен показываться пользователю (текст внутри тега A для ссылок). Остальные поля типо-специфичны.

Статический метод URLFinder.shorten(url, max_length) — возвращает url, укороченный до длины не большей max_length (без учёта протокола).

Фичи

  • Понимает ссылки без явно указанного протокола (для заданного набора TLD);
  • В тексте для пользователя делает urldecode, а также преобразует IDN к человекопонятному виду;
  • Правильно обрабатывает концевые скобки в URL;
  • Распознаёт стрелки-ссылки, при этом знает, что такое 10^6 или (=^・^=).