summaryrefslogtreecommitdiff
path: root/bk_html.c
diff options
context:
space:
mode:
authorJacob Nevins <jacobn@chiark.greenend.org.uk>2007-01-31 23:32:12 +0000
committerJacob Nevins <jacobn@chiark.greenend.org.uk>2007-01-31 23:32:12 +0000
commit00a9dfeae70a670a881f1af41dbe32833dfa6dc5 (patch)
tree8b84215e057776eb025179047ac2755986f521fa /bk_html.c
parentb9c115fc173a1374e32453054a3b86c67934d604 (diff)
downloadhalibut-00a9dfeae70a670a881f1af41dbe32833dfa6dc5.zip
halibut-00a9dfeae70a670a881f1af41dbe32833dfa6dc5.tar.gz
halibut-00a9dfeae70a670a881f1af41dbe32833dfa6dc5.tar.bz2
halibut-00a9dfeae70a670a881f1af41dbe32833dfa6dc5.tar.xz
Add an `Up' link to the HTML navigation bar of sufficiently deep documents.
(This doesn't affect any of the source texts I know about.) Also add <link rel="up">, even in the cases where it's just the same as <link rel="ToC">. (This does.) [originally from svn r7193]
Diffstat (limited to 'bk_html.c')
-rw-r--r--bk_html.c34
1 files changed, 31 insertions, 3 deletions
diff --git a/bk_html.c b/bk_html.c
index 1d4aa5b..0c66eb7 100644
--- a/bk_html.c
+++ b/bk_html.c
@@ -61,7 +61,7 @@ typedef struct {
char *body_tag, *nav_attr;
wchar_t *author, *description;
wchar_t *index_text, *contents_text, *preamble_text, *title_separator;
- wchar_t *nav_prev_text, *nav_next_text, *nav_separator;
+ wchar_t *nav_prev_text, *nav_next_text, *nav_up_text, *nav_separator;
wchar_t *index_main_sep, *index_multi_sep;
wchar_t *pre_versionid, *post_versionid;
int restrict_charset, output_charset;
@@ -282,6 +282,7 @@ static htmlconfig html_configure(paragraph *source) {
ret.title_separator = L" - ";
ret.nav_prev_text = L"Previous";
ret.nav_next_text = L"Next";
+ ret.nav_up_text = L"Up";
ret.nav_separator = L" | ";
ret.index_main_sep = L": ";
ret.index_multi_sep = L", ";
@@ -494,6 +495,8 @@ static htmlconfig html_configure(paragraph *source) {
ret.nav_prev_text = uadv(k);
} else if (!ustricmp(k, L"html-nav-next-text")) {
ret.nav_next_text = uadv(k);
+ } else if (!ustricmp(k, L"html-nav-up-text")) {
+ ret.nav_up_text = uadv(k);
} else if (!ustricmp(k, L"html-nav-separator")) {
ret.nav_separator = uadv(k);
} else if (!ustricmp(k, L"html-index-main-separator")) {
@@ -970,8 +973,6 @@ void html_backend(paragraph *sourceform, keywordlist *keywords,
html_nl(&ho);
}
- /* FIXME: link rel="up" */
-
if (f != files.head) {
element_empty(&ho, "link");
element_attr(&ho, "rel", "ToC");
@@ -979,6 +980,17 @@ void html_backend(paragraph *sourceform, keywordlist *keywords,
html_nl(&ho);
}
+ if (conf.leaf_level > 0) {
+ htmlsect *p = f->first->parent;
+ assert(p == f->last->parent);
+ if (p) {
+ element_empty(&ho, "link");
+ element_attr(&ho, "rel", "up");
+ element_attr(&ho, "href", p->file->filename);
+ html_nl(&ho);
+ }
+ }
+
if (has_index && files.index && f != files.index) {
element_empty(&ho, "link");
element_attr(&ho, "rel", "index");
@@ -1057,6 +1069,22 @@ void html_backend(paragraph *sourceform, keywordlist *keywords,
if (f != files.head)
element_close(&ho, "a");
+ /* We don't bother with "Up" links for leaf-level 1,
+ * as they would be identical to the "Contents" links. */
+ if (conf.leaf_level >= 2) {
+ htmlsect *p = f->first->parent;
+ assert(p == f->last->parent);
+ html_text(&ho, conf.nav_separator);
+ if (p) {
+ element_open(&ho, "a");
+ element_attr(&ho, "href", p->file->filename);
+ }
+ html_text(&ho, conf.nav_up_text);
+ if (p) {
+ element_close(&ho, "a");
+ }
+ }
+
if (has_index && files.index) {
html_text(&ho, conf.nav_separator);
if (f != files.index) {