UverseWiki

Якоря

Якорь задаёт имя положению на странице, на которое можно затем точно сослаться — в противовес обычной ссылке без якоря, которая откроет страницу в её начале. Регистр имени якоря как при ссылках на него, так и при задании значения не имеет — имя якоря всегда преобразуется к нижнему регистру.
См. также Адресация в ссылках.

Якоря могут быть блочными — для этого конструкция, напоминающая якорную ссылку, помещается на отдельной строке, как здесь:

((#блочный_якорь))
А это - ссылка на ((#блочный_якорь блочный якорь)).

А это — ссылка на блочный якорь.

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

((#блочный_якорь))
А это - ссылка на ((#блочный якорь==)).

А это — ссылка на блочный якорь.

Кроме этого есть возможность создания строчных якорей, если включена настройка UWikiSettings->$inlineAnchors (по-умолчанию включена).

Строчные якоря

Это режим по умолчанию; задаётся настройкой UWikiSettings->$inlineAnchors. Якоря задаются как будто это ссылка без названия на якорь в текущем документе:

Якорь можно расположить прямо [((#здесь_якорь))] внутри строки.

Якорь можно расположить прямо [] внутри строки.

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

  * ((#здесь_якорь==)).

Замена окончания))= работает так, что если окончание указано, то название можно опустить, даже несмотря на то, что имя якоря как будто стоит само по себе:

  * ссылка на один из ((#якор+ь))ей.

Кстати, в зависимости от темы ссылки на якоря на текущей странице, которые не существуют, могут выделяться другие цветом — например, как эта.

Отключенные строчные якоря

Когда насройка UWikiSettings->$inlineAnchors отключена (по умолчанию она включена, поэтому действует режим строчных якорей), обработка ссылок изменяется так:

  • ссылки на якоря без явно указанного названия, как это: ((#ссылка)), трактуются как ссылки на якорь, определённый в текущем документе — в противоположность строчным якорям.
  • блочные якоря получают возможность содержать пробелы в своём имени — пример был указан в начале раздела.

Автогенерируемые якоря

Движок автоматически создаёт якоря для элементов, указанных в настройке UWikiSettings->$anchorize — по умолчанию это заголовки и абзацы. Имя якорей заголовов генерируется из содержимого этого заголовка, а имена якорей для других элементов — из их порядкового номера, считая от заголовка.

Якорь для заголовка составляется из «слов»словом здесь считается любая буква, цифра, точка, подчёркивание или дефис. Алгоритм таков:

  1. Содержимое заголовка (например, «Эт некая глава») приводится к нижнему регистру и разбивается на «слова»«эт», «некая» и «глава».
  2. Ищется уникальная последовательность слов, для которой ещё не зарегистрирован якорь — при этом, если добавленное в конец (после подчёркивания) слово короче 3-х символов (UWikiMinAnchorPieceLength), то за ним добавляется следующее, даже если полученная комбинация уже уникальна. Это сделано для исключения предлогов и тому подобных языковых конструкций, не несущих смысловой нагрузки.
  3. Если такую последовательность найти не получилось (все варианты уже заняты якорями), то, как последнее средство, в конец добавляется счётчик, начиная с 1, и увеличивается, пока мы, наконец, не найдём незанятое имя.
    • в нашем случае уникальная комбинация это «эт» и «некая» — имя якоря «эт_некая».
    • если же оба якоря «эт_некая» и «эт_некая_глава» были бы заняты, то мы бы получили якорь «эт_некая_глава_1».

Якоря для прочих элементов генерируются по их порядку после заголовка. Например, если включена автогенерация якорей для заголовков, абзацев и списков:

== Заглавие ==
  Абзац 1.

=== Секция ==
  Абзац 2.

  1. Пункт 1.
  2. Пункт 2.

  Абзац 3.

Абзац 1.

Секция

Абзац 2.

  1. Пункт 1.
  2. Пункт 2.

Абзац 3.

Чтобы увидеть якорь просто наведите мышку на заголовок, абзац или строку.

См. также настройку UWikiSettings->$autoAnchorContractions, которая задаёт правила сокращения имён автосгенерированных якорей, а также позволяет отключить прибавление префикса определённого элемента к имени якоря (в примере выше якоря для абзацев не имеют префиксов, а якоря списков начинаются с «wacko_listitem_»).

Перегенерация якорей

Для улучшения качества генерируемых якорей есть ещё механизм перегенерации якорей для заголовков при обнаружении заголовка с похожим содержимым. Например, у нас есть 2 заголовка «Глава первая» и «Глава вторая». По алгоритму выше им якоря были бы такими:

  • «Глава первая» → якорь «глава»;
  • «Глава вторая» → якорь «глава_вторая».

Такие имена не слишком наглядны — в чём тогда разница между просто «главой» и «главой два»? Если происходит такая коллизия, то первоначальный якорь перегенерируется (тем не менее, не освобождая ранее занятое имя, чтобы оно больше не могло использоваться другими). Выходит:

  • «Глава первая» → якорь «глава_первая»;
  • «Глава вторая» → якорь «глава_вторая».

А если бы у нас была ещё одна «Глава вторая»:

  • «Глава первая» → якорь «глава_первая»;
  • «Глава вторая» → якорь «глава_вторая_1».
  • «Глава вторая» → якорь «глава_вторая_2».

Более жизненный пример, взятый из исходников документации нашей UverseWiki:

  • «Static Methods» → якорь «static methods»;
  • «Instance Methods» → якорь «instance methods».
  • «Static Variables» → якорь «static variables»;
  • «Instance Variables» → якорь «instanse variables».

Больше информации по теме — UWikiSettings->$anchorize.