Маркеры символа для документации HTMLBASED
Поскольку HeaderDoc генерирует документацию для ряда заголовочных файлов, это вводит названные привязки (<a name=”marker”></a>) в HTML для маркировки расположения документации для каждого символа API. Этот документ описывает состав этих маркеров.
Как Вы будете видеть, каждый маркер сам описание и может ответить на вопросы, такие как:
Каково имя этого символа?
Какой символ - это (например, функция, определение типа или метод)?
Какому классу этот метод принадлежит?
Что является языковой средой: C, C++, Java, Objective C?
С этой встроенной информацией документация HTML может быть отсканирована для создания списков API в различных целях. Например, такой список мог использоваться, чтобы проверить, что все объявили, что API имеет соответствующую документацию. Или, документация могла быть отсканирована для создания индексов различных видов. Сценарий сканирования мог также создать гиперссылки от индексов до исходной документации. Короче говоря, эти привязки сохраняют, по крайней мере, часть семантической информации, обычно теряющейся при преобразовании материала в формат HTML.
Строка маркера
Строка маркера определяется как:
marker := prefix '/' lang-type '/' sym-type '/' sym-value
Маркер является строкой, составленной из двух или больше значений, разделенных наклонной чертой вправо (/). Символ наклонной черты вправо используется, потому что это не допустимый символ на имена символа ни для одного из языков в настоящее время на рассмотрении.
Префикс определяет этот маркер как соответствующий нашим соглашениям и помогает идентифицировать эти маркеры для сканеров. Тип языка определяет язык символа. Тип символа определяет некоторую семантическую информацию о символе, такой как, является ли это именем класса или именем функции. Значение символа является строкой, представляющей символ.
Поскольку строка должна быть закодирована как часть URL, это должно повиноваться очень строгому ряду правил. В частности любые символы кроме букв и чисел должны быть закодированы как объект URL. Например, оператор + в C++ был бы закодирован как %2b.
По умолчанию префикс //apple_ref. Однако строка префиксов может быть изменена с помощью конфигурационного файла HeaderDoc.
Определенные в настоящее время типы языка описаны в Таблице b-1.
| Сценарий AppleScript |
| C заголовок или исходный код |
| Заголовок C++ или исходный код |
| Специальное пространство имен в целях документации. (Содержание нужно считать неструктурированным за исключением специальных форм, отмеченных в Специальных Ссылочных типах API в документе Иерархия.) |
| Файл Языка описания интерфейса. Примечание: Это значение является значением по умолчанию если никакое значение для |
| Заголовок Java |
| Сценарий JavaScript Примечание: Некоторые исторические реализации использовали строку |
| Описание интерфейса Генератора Интерфейса Маха |
| Заголовок Objective C или исходный код |
| Исходный код Паскаля |
| сценарий perl |
| Сценарий PHP |
| Сценарий Python |
| Сценарий Ruby |
| Граница, Korn, Граница Снова или сценарий оболочки C |
| Сценарий TCL |
Тип языка определяет привязку к языку символа. Некоторые логические символы могут быть доступными больше чем на одном языке. c язык определяет символы, которые можно вызвать от языковой семьи C (C, Objective C и C++).
Типы символа для всех языков
Символ вводит характерный для всех языков, описаны в Таблице b-2.
тег | структура, объединение или перечислимый тег |
| перечислимая константа — т.е. символ, определенный в перечислении |
| имя определения типа (или Паскаль |
| макро-имя (без' ()') |
| глобальная переменная, экземпляр или статические файлом данные |
| имя функции (без' ()') |
Типы символа для языков с классами
catНазвание категории (только Objective C).
clИмя класса.
clconstПостоянные значения, определенные в классе. Например:
//apple_ref/java/clconst/ClassName/kConstantName
clmКласс (или статичный [в Java или C++]) метод.
Примечание: Форматы для имен методов описаны в Objective C (occ) Формат Имени метода и C++ / Java (cpp/java) Формат Имени метода.
dataДанные экземпляра. Например:
//apple_ref/cpp/data/MyClass/MyVariable
intfИнтерфейс или имя протокола.
intfcmМетод класса определяется в протоколе
Примечание: Форматы для имен методов описаны в Objective C (occ) Формат Имени метода и C++ / Java (cpp/java) Формат Имени метода.
intfmМетод, определенный в интерфейсе (или протокол).
Примечание: Форматы для имен методов описаны в Objective C (occ) Формат Имени метода и C++ / Java (cpp/java) Формат Имени метода.
intfpСвойство, определенное в интерфейсе (или протокол)
//apple_ref/occ/intfp/ClassName/PropertyName
instmМетод экземпляра.
Примечание: Форматы для имен методов описаны в Objective C (occ) Формат Имени метода и C++ / Java (cpp/java) Формат Имени метода.
instpСвойство Instance. Например:
//apple_ref/occ/instp/ClassName/PropertyName
C++ (cpp) типы символа
tmpltШаблон класса C++.
ftmpltШаблон функции C++.
Примечание: Формат для этого типа описан в C++ / Java (cpp/java) Формат Имени метода.
funcC++ определил объем функции (другими словами, не экстерн 'C'); включает тип возврата и подпись, как описано в C++ / Java (cpp/java) Формат Имени метода, но без имени класса. Например:
//apple_ref/cpp/func/funcName/returnType/(argType,argType,argType)
Objective C (occ) формат имени метода
Формат для имен методов для Objective C:
class_name '/' method_name |
e.g.: //apple_ref/occ/instm/NSString/stringWithCString: |
Для методов в категориях Objective C название категории не включено в маркер имени метода. Класс назвал используемым, класс, на котором определяется категория. Например, для windowDidMove: метод делегата для NSWindow, маркер был бы:
e.g.: //apple_ref/occ/intfm/NSObject/windowDidMove: |
Формат свойства Objective C
Формат для протокола Objective C:
class_name '/' protocol_name |
e.g. //apple_ref/occ/instp/MyClass/MyProp |
C++ / Java (cpp/java) Формат Имени метода
Формат для имен методов для Java и C++:
class_name '/' method_name '/' return_type '/' '(' signature ')' |
e.g.: //apple_ref/java/instm/NSString/stringWithCString/NSString/(char*) |
Для Java и C++, подписи являются частью имени метода; подписи включаются в круглые скобки. Алгоритм для кодирования подписи:
Удалите название параметра; например,
change (Foo *bar, int i)к(Foo *, int ).Удалите пробелы; например, изменение
(Foo *, int )к(Foo*,int).
Соедините интерфейсом с форматом привязки разработчика
Формат для Интерфейсной привязки Разработчика:
'binding' '/' class_name '/' binding_name |
e.g. //apple_ref/occ/binding/myclass/mybinding |
Специальные Ссылочные типы API в документе Иерархия
В целом, doc иерархия должна считаться непрозрачным блобом содержания. Вы не должны рассчитывать на структуру a doc Ссылка API. Однако существует несколько специальных подтипов в doc пространство, которые являются значительными и должны использоваться только в формулируемой цели.
uid— Уникальный идентификатор для документа. Можно использовать значения, сгенерированныеuuidgenздесь. Все другие значения резервируются для использования Apple.title:...— HeaderDoc-специфичная иерархия для специальных идентификаторов сгенерирована от части имени комментария HeaderDoc. Они сгенерированы когда:Имя указано в комментарии HeaderDoc, не соответствующем проанализированного имени.
Объявление анализируется, который не имеет никакого имени (такого как анонимное перечисление), и указанное имя содержит пробелы или другие запрещенные символы.
Полное имя для этой ссылочной части зависит от имени исходного типа данных. Например, определение типа было бы:
//apple_ref/doc/title:tdef/Whatever
Большую часть времени, если Вы видите их в выводе HeaderDoc, это означает, что имя, указанное в комментарии HeaderDoc, является неправильным.
enumconstant,functionparam,methodparam,defineparam,structfield,typedeffield— Специальные ссылочные типы для полей в структурах, параметров в функциях, и т.д. Появляется в важном моменте в документации.Они редко полезны, но могут использоваться в случаях, где, например, функция имеет многочисленные параметры для соединения с определенным параметром в списке.
enumconstantполе должно только появиться если нормальный ссылочный маркер API (econst) не делает, что означает, что Вы вряд ли будете фактически видеть этот тип маркера на практике.anysymbol— Допустимый в запросах на канал только. Запрос на канал в этом пространстве имен заставляет преобразователь ссылки искать символ по имени вместо ссылкой API. Например, запрос на канал://apple_ref/doc/anysymbol/MyProject
соответствовал бы любую из следующих ссылок API:
//apple_ref/c/func/MyProject
//apple_ref/cpp/instm/MyClass/MyProject/bool/(char*,int)
//apple_ref/perl/data/MyProject
//apple_ref/java/cl/MyProject
И т.д. Если больше чем один из этих символов существует, он соответствует самый близкий символ в иерархии (как определено числом продвижения частей абсолютного пути).
Используя ссылки API в теге @link
Когда ссылочный маркер API появляется в комментарии, он точно походит на нормальный ссылочный маркер API за одним исключением: в любой точке, где наклонная черта появляется, законно предшествовать той наклонной черте с наклонной чертой влево. Причина этого может быть продемонстрирована следующим маркером символа:
//apple_ref/cpp/instm/MyClass/MyMethod/void*/(char*,int) |
Заметьте это */ появляется в маркере символа, который обычно заканчивал бы комментарий во многих языках программирования. Для фиксации этого Вы настроили бы символ для сходства с этим:
/* ... |
@link //apple_ref/cpp/instm/MyClass/MyMethod/void*\/(char*,int) ... @/link |
... |
*/ |
Это препятствует тому, чтобы компилятор дросселировал на ссылочном маркере API. HeaderDoc прозрачно удаляет наклонную черту влево при обработке маркера.
Используя resolveLinks для Разрешения Перекрестных ссылок
HeaderDoc включает вызванный инструмент resolveLinks (в /usr/bin или Xcode.app/Contents/Developer/usr/bin начало в 8,8, в /System/Library/Perl/Extras/PERL_VERSION/HeaderDoc/bin в предыдущих версиях), который используется для разрешения перекрестных ссылок для Вас Везде, где перекрестная ссылка появляется, сгенерирована ссылка, если существует место назначения.
resolveLinks инструмент обрабатывает все дерево содержания в двух передачах. В первой передаче это определяет местоположение целевых привязок. Эти целевые привязки похожи на это:
<a name="//apple_ref/..."></a> |
Каждый из них name значения являются идентификатором для символа API. Формат для этих идентификаторов указан в Строке Маркера.
Во второй передаче, resolveLinks поиски перекрестных ссылок на эти места назначения. Эти перекрестные ссылки могут произойти в одной из двух форм, в зависимости от того, как ли место назначения, известно, существует или нет.
<a logicalPath=“//apple_ref/...“ href="path">foo</a> |
<!-- a logicalPath=“//apple_ref/...“ --> |
Каждый из них logicalPath значения тогда соединяются (если возможный) с name значения получены во время первой передачи. Если место назначения существует для перекрестной ссылки, resolveLinks вставляет относительный путь целевой привязки в запросе перекрестной ссылки href атрибут. Результат состоит в том, что привязка перекрестной ссылки является теперь допустимой ссылкой к требуемой целевой привязке.
Если ссылка существует, и запрос перекрестной ссылки находится в форме комментария, resolveLinks инструмент изменяет запрос перекрестной ссылки из комментария в привязку (ссылка) тег. Точно так же, если место назначения не существует, это изменяет перекрестную ссылку от тега привязки до тега комментария. Результат состоит в том, что никогда не должно быть никаких неработающих ссылок.
По большей части этот процесс очевиден для Вас как пользователь. Существует два исключения, однако: перекрестные ссылки между наборами документа и перекрестные ссылки с помощью многократных ссылочных префиксов API (такой как apple_ref).
Разрешение конфликтных ссылок API
В целом ссылки API не должны конфликтовать. Однако, если два символа с идентичными именами и типами происходят в различных пространствах имен, возможно иметь конфликт, когда Вы соединяете документацию, содержащую оба пространства имен.
Когда это происходит, HeaderDoc предпринимает попытку максимальных усилий выбора правильного соответствия. Для каждого потенциального места назначения ссылки HeaderDoc исследует путь файла, содержащего ту привязку, и считает число продвижения частей пути, соответствующих между тем путем и путем файла, содержащего запрос на канал. Затем HeaderDoc выбирает место назначения с большинством соответствующих частей пути. (В случае связи HeaderDoc обычно выбирает первое проанализированное место назначения, но Вы не должны рассчитывать на это упорядочивание.)
Используя многократные ссылочные префиксы API
Если Вы используете многократные ссылочные префиксы API в единственном дереве выходного содержания и хотите соединить его вместе использование resolveLinks, необходимо сказать resolveLinks для поиска всех префиксов, Вы заботитесь о. Существует два способа сделать это:
Выполненный
resolveLinksвручную, указание-rфлаг для каждого префикса. Например:resolveLinks -r david_ref -r joe_ref /path/to/dir
Укажите список допустимых префиксов в Вашем
headerDoc2HTML.configфайл с помощьюexternalAPIUIDPrefixesопция.Примечание: Этот конфигурационный файл читается
gatherHeaderDoc, неresolveLinks. Таким образом эта установка конфигурационного файла влияет на поведениеresolveLinksтолько, когдаresolveLinksвыполняетсяgatherHeaderDoc, не, когда Вы работаетеresolveLinksвручную.
Используя внешние файлы перекрестной ссылки
Каждый раз, когда resolveLinks обрабатывает дерево, оно генерирует файл перекрестной ссылки для того содержания. По умолчанию это сохранило этот файл как /tmp/xref_out, но можно изменить это с -x флаг для более позднего использования.
Если Вы хотите обработать дерево в режиме только для чтения (не написав изменения в ответ в самом дереве), можно указать -n (никакая запись) флаг. В этом режиме это генерирует выходной файл перекрестной ссылки, но не изменит файлы ввода HTML.
Начало в HeaderDoc 8.8, resolveLinks поддерживает дополнительные флаги для использования в своих интересах этих файлов перекрестной ссылки. Как правило, Вы использовали бы некоторую комбинацию -s, -S, -b, и -i флаги.
Эти три флага взаимосвязаны тонкими способами. Цель сложности состоит в том так, чтобы можно было создать ссылки между двумя папками таким способом, которым ссылки будут допустимы после того, как папки будут помещены в их заключительное расположение. С этой целью флаги обеспечивают префиксное разделение и предварительное ожидание.
Является самым простым объяснить эти флаги путем обеспечения примера случая общего использования. У Вас есть два каталога, A и B.
Текущее расположение | Заключительное расположение |
|---|---|
|
|
|
|
Для создания этих ссылок Вы сначала генерировали бы файлы перекрестной ссылки для каждой папки как это:
resolveLinks -n -x /tmp/A.xrefs -b "$PWD/" "A" |
resolveLinks -n -x /tmp/B.xrefs -b "$PWD/" "B" |
Пути в получающемся файле перекрестной ссылки находятся в форме A/... или B/....
Затем, необходимо фактически разрешить ссылки. Это - то, где другие флаги играют роль.
resolveLinks -b "$PWD/" -s /tmp/B.xrefs -S "/Library/WebServer/Documents/Utilities/" -i "/Library/WebServer/Documents/Tools/" "A" |
resolveLinks -b "$PWD/" -s /tmp/A.xrefs -S "/Library/WebServer/Documents/Tools/" -i "/Library/WebServer/Documents/Utilities/" "B" |
Можно передать в многократных парах -s и -S флаги (максимум до 1 024) для дополнительной гибкости. Для каждого файла семени необходимо сначала использовать -s флаг для указания расположения самого файла семени затем используйте -S флаг для указания расположения, где будет в конечном счете установлено содержание, описанное тем файлом семени.
Кроме того, для отбора путей к файлам необходимо также использовать -i флаг для сообщения resolveLinks где будет в конечном счете установлена папка, которую Вы обрабатываете. Обратите внимание на то, что как прежде, -b флаг определяет, какую часть разделить от каждого пути в папке Вы обрабатываете, и что запаздывающая наклонная черта в -b флаг является значительным здесь также.
В действительности можно думать о флагах как это:
-b— Снимает изоляцию с ведущих частей пути от папки, которую Вы в настоящее время обрабатываете. Последняя часть пути разделяется только если сопровождаемый запаздывающей наклонной чертой.-i— Добавляют ведущие части пути к папке, которую Вы в настоящее время обрабатываете (представление предложенного заключительного расположения установки).-S— Добавляют ведущие части пути к папкам, обработанным ранее и импортированным из файла семени (представляющий их предложенные заключительные расположения установки).
Наконец при желании можно передать -a флаг для сообщения resolveLinks использовать абсолютные пути вместо относительных путей при соединении с содержанием, описанным определенным файлом семени или всеми файлами семени. Как -S флаг, если передано перед первым -s флаг, -a флаг изменяет соединяющееся поведение глобально. Иначе, это изменяет только соединяющееся поведение для предыдущего -s флаг.
Для получения дополнительной информации см. страницу руководства для resolveLinks.