diff --git a/Tools/HTMLLinker.html b/Tools/HTMLLinker.html new file mode 100644 index 000000000..48aeca1fc --- /dev/null +++ b/Tools/HTMLLinker.html @@ -0,0 +1,337 @@ + + +
+<a href="NSString.html">
tag. By fixing up a
+ link we mean to modify the path in the href
so that
+ it points to the actual file on disk. For example, if you have
+ the file NSString.html
in the directory
+ /home/nicola/Doc
, when the linker fixes up the
+ <a href="NSString.html">
link, it will replace
+ it with <a
+ href="/home/nicola/Doc/NSString.html">
.
+
+ -
), and which are not the values of defaults (for
+ example, not the YES
in -CheckLinks YES
,
+ because that is the value of the default
+ -CheckLinks
), are interpreted as input files if they
+ come before the --Destinations
argument, and as
+ destination files if they come after it. If a directory is
+ specified as an input (or destination) file, the linker will
+ recurse into the directory and add to the list of input (or
+ destination) files all files in the directory (and in the
+ directory's subdirectories, no matter how deeply nested) which
+ have one of the following extensions: .html
,
+ .HTML
, .htm
or .HTM
. The
+ --Destinations
argument ends the list of input files,
+ and is followed by the list of destination files. A typical
+ invocation of the linker might be as follows:
+ + HTMLLinker myfile.html --Destinations /usr/GNUstep/System/Documentation ++ this invokes the linker with a single input file, +
myfile.html
, and all the HTML files inside the
+ /usr/GNUstep/System/Documentation
directory as
+ destination files.
+
+ href
, such as
+ <a href="dest.html#location">
. The destination
+ file of the link is the file specified in the href
;
+ dest.html
in the example. If the link contains a
+ path to the file, for example <a
+ href="/nicola/Documentation/dest.html#location">
, the
+ path is ignored, so this link is considered by the linker to be
+ exactly the same as <a
+ href="dest.html#location>
.
+
+ rel
attribute set to dynamical
, as in
+ the following example: <a href="nicola.html"
+ rel="dynamical">
. In this way, you can specify in your
+ HTML document which links you want to be fixed up, and which you
+ don't want to be. But in certain situations you might want to
+ force the linker to attempt to fixup all links; you can run the
+ linker with the -CheckAllLinks YES
option to cause
+ this behaviour. As a special exception, links which obviously are
+ not to be fixed up, such as links beginning with mailto: or
+ news:, and links without a filename (which means they refer
+ to the same file they are in) are never fixed up.
+
+ <a href="dest.html#location">
), it
+ searches the list of destination files for a file with the same
+ name as the destination file of the link. If no such file is
+ found, the HTML linker emits a warning, and replaces the link in
+ the file with a link to the pathless filename. In the example, it
+ would simply emit <a
+ href="dest.html#location">
. If the destination file is
+ found in the list, instead, the HTML linker replaces the link with
+ the full path to the destination file on disk. For example, if
+ there is a /home/nicola/Doc/dest.html
destination
+ file, the HTML linker will fixup the link to be <a
+ href="/home/nicola/Doc/dest.html#location">
(as a
+ special exception, if there is a path mapping which matches the
+ path to the destination file, it's applied to the path in the
+ link. See below for a detailed explanation of path mappings).
+ It's important to notice that you must have unique filenames for
+ the linker to work properly. For example, if you have two
+ different destination files with the same name, say
+ NSObject.html
, then a link to
+ NSObject.html
is likely not to be properly resolved
+ because the linker has no way to know if you meant the link to
+ point to the first or the second destination file! You should
+ choose filenames better to more uniquely specify their contents,
+ for example NSObject_class.html
and
+ NSObject_protocol.html
if the first file documents
+ the NSObject class and the second one the NSObject protocol. Then
+ all links will clearly refer to one file or the other one, and no
+ confusion will arise. If there are multiple destination files for
+ a link, the linker will guess which one is the right one, and that
+ might not give the desired result.
+
+ -CheckLinks
+ YES
(note that this option is the default, so the second
+ check is normally performed unless you pass -CheckLinks
+ NO
to the linker), the linker will actually check that the
+ link can be resolved. In practice, the linker checks that the
+ destination file actually contains the specified named section.
+ For example, consider the link <a
+ href="dest.html#location">
. This link points to the
+ name location
inside the dest.html
file.
+ When checking the link, the linker will read the destination file
+ dest.html
, and parse it looking for an anchor tag
+ with a name attribute set to location
- in practice
+ something like <a name="location">
. If it does
+ not find it, it emits a warning. If you already know that all
+ links can be resolved, you can run the linker with
+ -CheckLinks NO
skipping the parsing of destination
+ files in order to get peak performance.
+
+ /opt/doc/base
and some other HTML documentation in
+ /opt/doc/gui
. The HTML files in the two
+ documentation directories refer to each other. You can run the
+ HTML linker and fixup all links, and we are happy. But now
+ suppose that you set up a web server; the web server, for example,
+ will serve URLs beginning with /Base
(meaning as in
+ requests from a browser of the form
+ http://www.server.org/Base
) by taking files from
+ /opt/doc/base
, and URLs beginning with
+ Gui
by taking files from /opt/doc/gui
.
+ To fixup the links in this case, you need path mappings. A path
+ mapping specifies that a certain directory on disk is to be
+ referred in some different way in links. In the example, you
+ would pass
+ + -PathMapping '{ "/opt/doc/base"="/Base"; "/opt/doc/gui"="/Gui"; }' ++ to the linker. + + Each path mapping maps a path on disk to a virtual + path. For example, it maps the path on disk +
/opt/doc/base
to the virtual path /Base
.
+ Each time the linker fixes up a link, after finding the
+ destination file, it checks the list of path mappings. If the
+ path to the destination file begins with the path on disk
+ of one of the path mappings, then that path on disk is
+ replaced with the corresponding virtual path in the path
+ to the destination file before the path to the destination file is
+ written out in the link.
+
+ For example, if you have the path mapping explained above, and if
+ the linker is fixing up the link <a
+ href="hi.html">
, where the destination file is
+ /opt/doc/base/nicola/hi.html
, then the destination
+ path matches the path mapping for /opt/doc/base
, so
+ the path mapping is applied and the link is fixed up to be
+ <a href="/Base/nicola/hi.html">
rather than
+ <a href="/opt/doc/base/nicola/hi.html">
as it
+ would normally have been without the path mapping.
+
+ -PathMappings
, as in
+ + -PathMappings '{ "/opt/doc/base"="/Base"; "/opt/doc/gui"="/Gui"; }' ++ where
/opt/doc/base
and /opt/doc/gui
are
+ the paths on disk and /Base
and /Gui
are
+ the corresponding web server URL paths.
+
+ + { + "/opt/doc/base"="/Base"; + "/opt/doc/gui"="/Gui"; + } ++ and then tell the linker to read the path mappings from that file, + by giving the filename as option to the +
-PathMappingsFile
. For example, if the file
+ containing the mappings is called mappings
, then you need
+ to pass
+ + -PathMappingsFile mappings ++ to the linker to have it read mappings from the file. + +
-
)
+ require an argument, as in
+ + HTMLLinker Documentation -CheckLinks YES --Destinations Documentation ++ which sets
CheckLinks
to YES
. The options
+ might be anywhere on the command line. Options which do not begin
+ with a single hypen (such as --help
) do not require
+ an argument, as in
+ + HTMLLinker --help ++ +
YES
(the default) causes the linker,
+ whenever it fixes up a link, to check that the destination file
+ actually contains the target <a name="">
tag.
+ (bug - does not manage yet the id
attribute as per
+ newer HTML specifications). You might set it to NO
+ if you already know all links are correct, this will give you a
+ performance improvement because the linker does not need to parse
+ destination files to check links then.
+
+ NO
(the default) only links containing the
+ rel
attribute set to dynamical
are fixed
+ up in the input files. If set to YES
, all links are
+ fixed up.
+
+ YES
prints some more messages than if set
+ to NO
(the default).
+
+ --Destinations
are considered input files,
+ while all files (or directories) after --Destinations
+ are considered destination files.
+
+