UverseWiki

Адресация в ссылках

Ссылки могут указывать на внешний ресурс (когда указан протокол, например http://google.com) или на внутренний. Для обоих типов адресации существую свои правила адресации:

Интервики и цифрови́ки

Оба понятния обозначают краткие имена для адресации – вроде ярлыков на файлы. Интервики и цифрови́ки задаются в ссылке вместо адреса.

  * ((go:UverseWiki Искать UverseWiki в Гугле));
  * ((ВП:wiki==Спросить о "вики" у Википедии));
  * ((Codenet:#4444 Сообщение №4444 на CodeNet.ru)).
  • Искать UverseWiki в Гугле;
  • Спросить о «вики» у Википедии;
  • Сообщение №4444 на CodeNet.ru.

Итак, интервики-адрес состоит двух частей, разделённых двоеточием: слева – краткое имя ресурса, справо – собственно поисковая фраза или запрос. С цифрови́ки тоже самое, только разделитель – :#, после которого идёт номер сообщения или ещё какой-то идентификатор (обязательно цифра).
В остальном синтаксис тот же, что и при зщадании ссылок.

Интервики задаются в файле interwiki.conf, а цифрови́ки – в numberlinks.conf.

Внешние ссылки

Внешние ссылки – это URL, содержащие имя протокола, например: http://i-forge.net, file:///usr/local/etc/svn-repos. Для внешних ссылок, в отличии от внутренних, существует всего два правила генерации автозаглавия, если оно не было задано в ссылке явно:

  1. Получением его из тега <title> для удалённых HTML-страниц;
  2. Подстановкой имени домена: ((http://not-existing-domain.net))[not-existing-domain.net].

Автозаглавие из <title>

При не заданном явно отображаемом названии для вики-ссылки и если включена настройка UWikiSettings->$fetchRemoteTitles (по умолчанию включена), вики-процессор попытается получить удалённый документ и прочитать заглавие из его тега <title>, расположенном внутри тега <head>.

Если сервер отправит Content-Type в заголовках ответа, а также если установлен модуль iconv для PHP, то будет произведена конверсия заглавия в UTF-8. Если одно из условий не выполнено, iconv() вернула ошибку а также если полученное заглавие не находится в UTF-8, то этот метод не срабатывает и используются другие способы генерации автоназвания.

Вики-процессор будет читать не более первых 4-х Кб удалённой страницы (значение по умолачнию настройки UWikiSettings->$fetchRemoteTitlesMaxSize) – если <title> не был найден в этом интервале либо тег <head> закрылся, этот метод определения не срабатывает.

Примеры:

  * ((http://google.com))
  * ((http://uverse.i-forge.net))
  * ((http://not-existing-domain.net))
  * ((http://www.google.ru/intl/en_com/images/srpr/logo1w.png))

Внутренние ссылки

Компоненты ссылки

Локальные ссылки имеют три части (возьмём для примера адрес форум:99#1.1-2):

  • интервики – часть пути ссылки от его начала до первого двоеточия («:»). В нашем примере это «форум».
  • путь – часть пути ссылки после первого двоеточия (разделитель интервики), либо от её начала если интервики не задана, и до первого знака «#» (разделитель якоря). В нашем примере это «99».
  • якорь – часть пути ссылки после первого знака «#» и до её конца. В нашем примере это «1.1-2».

Любой компонент ссылки может отсутствовать, хотя по крайней мере один всегда задан. Примеры:

((гугл:поиск))              - задана интервики "гугл" и путь "поиск".
Наш ((форум:))              - задана только интервики "форум" без пути.
((/Главная#начало))         - задан путь "/Главная" и якорь "начало".

Кроме этого, ссылки могут содержать название, которое отделяется от собственно пути (страницы, на которую ссылаются) либо знаком двойного равно (==), либо пробелом, если такого знака нет. Если нет ни ==, ни пробела, ссылка считается заданной с пустым заглавием. Тоже самое происходит, если знак == стоит в конце ссылки и он не экранирован тильдой:

((гугл:поиск))              - пустое заглавие.
((гугл:поиск заглавие))     - заглавие указано, разделитель - пробел.
((гугл:поисковая фраза==))  - пустое заглавие.
См. ((Имя документа == здесь))  - пробелы вокруг "==" игнорируются.

Разделитель - двойное равно (==), путь ссылки - "поисковая фраза":
((гугл:поисковая фраза==название))

Автозаглавие

Как было описано выше, локальная вики-ссылка состоит из частей, одна из которых – её название, которое отображается в тексте вместо адреса. Название может быть задано явно – с помощью разделителей (двойное равно, ==, или пробел), либо быть опущено – так называемое пустое заглавие.

Заданное явно заглавие не изменяется и отображается как есть; пустое заглавие включает механизм автоподстановки:

…по частям пути

Пути локальных ссылок имеют 3 компонентаинтервики, путь и якорь. Каждый из них может отсутствовать, но как минимум один всегда есть.

При автоподстановке названия берётся самая значимая заданная часть пути ссылки и используется как отображаемое заглавие для неё.

Значимость частей пути в порядке убывания следующая:

  1. Якорь – если задан якорь, то он используется как название: ((Документ#якорь)) эквивалентно написанию ((Документ#якорь якорь)) или ((Документ#якорь==якорь)).
  2. Путь – если ссылка указывает на документ, то берётся его имя (либо по его заглавию, если он не часть интервики, либо имя его файла); если ссылка указывает на кластер, то либо заглавие кластера, либо последний компонент кластера.
    • примеры: ((ссылка/на/страницу))((ссылка/на/страницу==страницу)); ((ссылка/на/кластер/))((ссылка/на/страницу/кластер/==кластер)).
  3. Интервики – наконец, если ни якорь, ни путь не определены, то берётся имя интервики (без двоеточия за ним): ((гугл:)) эквивалентно ((гугл: гугл)) или ((гугл:==гугл)).

…по заглавию документа

При ссылках на локальный вики-документ (страницу или кластер) можно не указывать название для ссылки – в этом случае оно будет прочитано из документа (его заглавие), либо из заглавия файла-огловления кластера (см. This {{Action}} has wrong syntax and can't be executed.).

Этот метод работает только для существующих и доступных (по правам доступа) документов – если это не так, либо документ/оглавление не содержит заглавия, то используются другие способы получения автоназвания для ссылки.

Примеры:

  * ((Markers)), ((Line breaks==)) - по заглавию страницы.
  * ((.)), ((/Blog)) - по заглавию кластера.
  * ((Несуществующая_страница)), ((Неизвестный_формат.rar)).

…заменой окончания

Как часто вам приходилось два раза писать имя страницы целиком и только менять окончание в её названии? Что ж, мы с этим встречались достаточно, поэтому добавили возможность быстрой замены окончания в ссылке (на интервики, страницу или якорь – см. компоненты ссылки) без повторного ввода всего её названия-пути.

Для английского и других языков, мало использующих окончания, эта проблема практически не стоит, а вот в русском окончания меняются в зависимости от фразы, то есть почти всегда будут отличаться от утвердительной формы, используемой в заголовке или якоре.
В самом деле, не писать же на английский манер вместо См. раздел о ((якорях)) что-то вроде См. раздел "((Якори))" из-за того, что надоедает каждый раз писать ((якори якорях)).

Замена окончания делается с помощью значка «плюс» (+), поставленного внутри адреса. Проще всего его поведение объяснить на примерах:

  * См. раздел о ((#якор+и))ях.
    - Идентично написанию "...о ((#якори якорях))."
  * На нашей ((стен+а))е чего только не понаписано...
    - Идентично "На нашей ((стена стене))..."
  * Давайте ((игра+))ть!
    - Эквивалентно "Давайте ((игра играть))!"
  * Стреляйте, братец, там ваш ((враг+и)).
    - Тоже самое, что и "...ваш ((враги враг))."
  * ((#Якор+я))ная ссылка.
  * Ссылка на раздел с ((функция+:))ми.
    - Тоже самое, что и "...с ((функция: функциями))."
  • См. раздел о якорях.
    • Идентично написанию «…о якорях
  • На нашей стене чего только не понаписано…
    • Идентично «На нашей стене…»
  • Давайте играть!
  • Стреляйте, братец, там ваш враг.
    • Тоже самое, что и «…ваш враг
  • Якорная ссылка.
  • Ссылка на раздел с функциями.
    • Тоже самое, что и «…с функциями

Схематично это выглядит так: ((ссылка+окончание_ссылки))окончание_названия. Указано может быть либо окончание ссылки, либо названия, либо оба, но не ни одного. Кроме этого, окончание заменяется не обязательно в последнем слове – это может быть любое слово:

Это указано в описании ((Функци+и обработки строк))й.
- эквивалентно "((Функции обработки строк==Функций обработки строк))".

Это указано в описании обработки строкй. – эквивалентно «Функций обработки строк».

Слишком длинные окончания игнорируются во избежание ложных срабатываний – зависит от настройки settings->$longestLinkEnding, по-умолчанию 3 символа. Наличие нескольких неэкранированных плюсиков также приводит к его игнорированию для всей ссылки:

  * рабочая ссылка с заменённым ((окончание+))м;
  * тоже рабочая ссылка с ((оконча+ние))м;
  * а у этой окончание уже не распознано: ((оконч+ание))м;
  * тоже самое здесь: ((окончание+))мммм.
  * ((Од+ин дв+а))три.

Замена окончаний работает только для внутренних адресов и ссылок без явно указанных названий:

  * ((http://google.co+m));
  * ((Ссылка Заголово+к)).
  * ((Ссылка == Заголово+к)).

Отменить замену окончания можно просто указав название ссылки явно, либо если замена нужна, но перед ней находится плюсик, можно его отменить тильдой:

  * ((Ссыл+ка==Ссылка));
  * ((Ссылка+ Ссылка)) - пробел также разделяет адрес и название;
  * ((Нек~+ая ссылк+а==))и.
  * ((Нек~+ая ссылка==)) - а здесь и так всего один плюсик.