Ссылки могут указывать на внешний ресурс (когда указан протокол, например http://google.com) или на внутренний. Для обоих типов адресации существую свои правила адресации: ¶
Оба понятния обозначают краткие имена для адресации – вроде ярлыков на файлы. Интервики и цифрови́ки задаются в ссылке вместо адреса. ¶
* ((go:UverseWiki Искать UverseWiki в Гугле)); * ((ВП:wiki==Спросить о "вики" у Википедии)); * ((Codenet:#4444 Сообщение №4444 на CodeNet.ru)). |
|
Итак, интервики-адрес состоит двух частей, разделённых двоеточием: слева – краткое имя
ресурса, справо – собственно поисковая фраза или запрос. С цифрови́ки тоже самое,
только разделитель – :#, после которого идёт номер сообщения или ещё какой-то
идентификатор (обязательно цифра).
В остальном синтаксис тот же, что и при зщадании ссылок.
¶
Интервики задаются в файле interwiki.conf, а цифрови́ки – в numberlinks.conf. ¶
Внешние ссылки – это URL, содержащие имя протокола, например: http://i-forge.net, file:///usr/local/etc/svn-repos. Для внешних ссылок, в отличии от внутренних, существует всего два правила генерации автозаглавия, если оно не было задано в ссылке явно: ¶
При не заданном явно отображаемом названии для вики-ссылки и если включена настройка 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): ¶
Любой компонент ссылки может отсутствовать, хотя по крайней мере один всегда задан. Примеры: ¶
((гугл:поиск)) - задана интервики "гугл" и путь "поиск". Наш ((форум:)) - задана только интервики "форум" без пути. ((/Главная#начало)) - задан путь "/Главная" и якорь "начало".
Кроме этого, ссылки могут содержать название, которое отделяется от собственно пути (страницы, на которую ссылаются) либо знаком двойного равно (==), либо пробелом, если такого знака нет. Если нет ни ==, ни пробела, ссылка считается заданной с пустым заглавием. Тоже самое происходит, если знак == стоит в конце ссылки и он не экранирован тильдой: ¶
((гугл:поиск)) - пустое заглавие. ((гугл:поиск заглавие)) - заглавие указано, разделитель - пробел. ((гугл:поисковая фраза==)) - пустое заглавие. См. ((Имя документа == здесь)) - пробелы вокруг "==" игнорируются. Разделитель - двойное равно (==), путь ссылки - "поисковая фраза": ((гугл:поисковая фраза==название))
Как было описано выше, локальная вики-ссылка состоит из частей, одна из которых – её название, которое отображается в тексте вместо адреса. Название может быть задано явно – с помощью разделителей (двойное равно, ==, или пробел), либо быть опущено – так называемое пустое заглавие. ¶
Заданное явно заглавие не изменяется и отображается как есть; пустое заглавие включает механизм автоподстановки: ¶
Пути локальных ссылок имеют 3 компонента – интервики, путь и якорь. Каждый из них может отсутствовать, но как минимум один всегда есть. ¶
При автоподстановке названия берётся самая значимая заданная часть пути ссылки и используется как отображаемое заглавие для неё. ¶
Значимость частей пути в порядке убывания следующая: ¶
При ссылках на локальный вики-документ (страницу или кластер) можно не указывать название для ссылки – в этом случае оно будет прочитано из документа (его заглавие), либо из заглавия файла-огловления кластера (см. This {{Action}} has wrong syntax and can't be executed.). ¶
Этот метод работает только для существующих и доступных (по правам доступа) документов – если это не так, либо документ/оглавление не содержит заглавия, то используются другие способы получения автоназвания для ссылки. ¶
Примеры: ¶
* ((Markers)), ((Line breaks==)) - по заглавию страницы. * ((.)), ((/Blog)) - по заглавию кластера. * ((Несуществующая_страница)), ((Неизвестный_формат.rar)). |
|
Как часто вам приходилось два раза писать имя страницы целиком и только менять окончание в её названии? Что ж, мы с этим встречались достаточно, поэтому добавили возможность быстрой замены окончания в ссылке (на интервики, страницу или якорь – см. компоненты ссылки) без повторного ввода всего её названия-пути. ¶
Для английского и других языков, мало использующих окончания, эта проблема практически
не стоит, а вот в русском окончания меняются в зависимости от фразы, то есть почти всегда
будут отличаться от утвердительной формы, используемой в заголовке или якоре.
В самом деле, не писать же на английский манер вместо См. раздел о ((якорях)) что-то
вроде См. раздел "((Якори))" из-за того, что надоедает каждый раз писать ((якори якорях)).
¶
Замена окончания делается с помощью значка «плюс» (+), поставленного внутри адреса. Проще всего его поведение объяснить на примерах: ¶
* См. раздел о ((#якор+и))ях. - Идентично написанию "...о ((#якори якорях))." * На нашей ((стен+а))е чего только не понаписано... - Идентично "На нашей ((стена стене))..." * Давайте ((игра+))ть! - Эквивалентно "Давайте ((игра играть))!" * Стреляйте, братец, там ваш ((враг+и)). - Тоже самое, что и "...ваш ((враги враг))." * ((#Якор+я))ная ссылка. * Ссылка на раздел с ((функция+:))ми. - Тоже самое, что и "...с ((функция: функциями))." |
|
Схематично это выглядит так: ((ссылка+окончание_ссылки))окончание_названия. Указано может быть либо окончание ссылки, либо названия, либо оба, но не ни одного. Кроме этого, окончание заменяется не обязательно в последнем слове – это может быть любое слово: ¶
Это указано в описании ((Функци+и обработки строк))й. - эквивалентно "((Функции обработки строк==Функций обработки строк))". |
Это указано в описании обработки строкй. – эквивалентно «Функций обработки строк». ¶ |
Слишком длинные окончания игнорируются во избежание ложных срабатываний – зависит от настройки settings->$longestLinkEnding, по-умолчанию 3 символа. Наличие нескольких неэкранированных плюсиков также приводит к его игнорированию для всей ссылки: ¶
* рабочая ссылка с заменённым ((окончание+))м; * тоже рабочая ссылка с ((оконча+ние))м; * а у этой окончание уже не распознано: ((оконч+ание))м; * тоже самое здесь: ((окончание+))мммм. * ((Од+ин дв+а))три. |
|
Замена окончаний работает только для внутренних адресов и ссылок без явно указанных названий: ¶
* ((http://google.co+m)); * ((Ссылка Заголово+к)). * ((Ссылка == Заголово+к)). |
Отменить замену окончания можно просто указав название ссылки явно, либо если замена нужна, но перед ней находится плюсик, можно его отменить тильдой: ¶
* ((Ссыл+ка==Ссылка)); * ((Ссылка+ Ссылка)) - пробел также разделяет адрес и название; * ((Нек~+ая ссылк+а==))и. * ((Нек~+ая ссылка==)) - а здесь и так всего один плюсик. |
|