diff --git a/src/document/html/renderer.c b/src/document/html/renderer.c index fd85bc710..e566ea5e4 100644 --- a/src/document/html/renderer.c +++ b/src/document/html/renderer.c @@ -1505,10 +1505,9 @@ put_chars_conv(struct html_context *html_context, * represented by key. I the trivial case, key="0123456789". A more homerow * friendly key="gfdsahjkl;trewqyuiopvcxznm". Returns the length of link_sym. */ -static int -dec2qwerty(int num, char *link_sym, const char *key) +int +dec2qwerty(int num, unsigned char *link_sym, const unsigned char *key, int base) { - int base = strlen(key); int newlen, i, pow; if (base < 2) return 0; @@ -1528,10 +1527,9 @@ dec2qwerty(int num, char *link_sym, const char *key) * Returns the value of link_sym in decimal according to key. */ int -qwerty2dec(const char *link_sym, const char *key) +qwerty2dec(const unsigned char *link_sym, const unsigned char *key, int base) { int z = 0; - int base = strlen(key); int symlen = strlen(link_sym); int i; int pow; @@ -1555,12 +1553,13 @@ put_link_number(struct html_context *html_context) unsigned char *fi = format.image; struct form_control *ff = format.form; int slen = 0; + int base = strlen(symkey); format.link = format.target = format.image = NULL; format.form = NULL; s[slen++] = '['; - slen += dec2qwerty(part->link_num, s + 1, symkey); + slen += dec2qwerty(part->link_num, s + 1, symkey, base); s[slen++] = ']'; s[slen] = '\0'; diff --git a/src/document/html/renderer.h b/src/document/html/renderer.h index ffae4cb07..54cbecb0d 100644 --- a/src/document/html/renderer.h +++ b/src/document/html/renderer.h @@ -68,5 +68,6 @@ void free_table_cache(void); struct part *format_html_part(struct html_context *html_context, unsigned char *, unsigned char *, int, int, int, struct document *, int, int, unsigned char *, int); -int qwerty2dec(const char *link_sym, const char *key); +int dec2qwerty(int num, unsigned char *link_sym, const unsigned char *key, int base); +int qwerty2dec(const unsigned char *link_sym, const unsigned char *key, int base); #endif diff --git a/src/viewer/dump/dump.c b/src/viewer/dump/dump.c index cb9558ff5..0958f070b 100644 --- a/src/viewer/dump/dump.c +++ b/src/viewer/dump/dump.c @@ -23,6 +23,7 @@ #include "cache/cache.h" #include "config/options.h" #include "document/document.h" +#include "document/html/renderer.h" #include "document/options.h" #include "document/renderer.h" #include "document/view.h" @@ -326,9 +327,12 @@ dump_references(struct document *document, int fd, unsigned char buf[D_BUF]) { if (document->nlinks && get_opt_bool("document.dump.references", NULL)) { + unsigned char key_sym[64] = {0}; int x; unsigned char *header = "\nReferences\n\n Visible links\n"; + const unsigned char *label_key = get_opt_str("document.browse.links.label_key", NULL); int headlen = strlen(header); + int base = strlen(label_key); if (hard_write(fd, header, headlen) != headlen) return -1; @@ -341,12 +345,15 @@ dump_references(struct document *document, int fd, unsigned char buf[D_BUF]) if (!where) continue; if (document->options.links_numbering) { + + dec2qwerty(x + 1, key_sym, label_key, base); + if (link->title && *link->title) - snprintf(buf, D_BUF, "%4d. %s\n\t%s\n", - x + 1, link->title, where); + snprintf(buf, D_BUF, "%4s. %s\n\t%s\n", + key_sym, link->title, where); else - snprintf(buf, D_BUF, "%4d. %s\n", - x + 1, where); + snprintf(buf, D_BUF, "%4s. %s\n", + key_sym, where); } else { if (link->title && *link->title) snprintf(buf, D_BUF, " . %s\n\t%s\n", diff --git a/src/viewer/text/link.c b/src/viewer/text/link.c index cb299a0af..b129e4bd9 100644 --- a/src/viewer/text/link.c +++ b/src/viewer/text/link.c @@ -1223,13 +1223,14 @@ goto_link_symbol(struct session *ses, unsigned char *sym) char *symkey = get_opt_str("document.browse.links.label_key", ses); struct document_view *doc_view; int num; + int base = strlen(symkey); assert(ses && sym); if_assert_failed return; doc_view = current_frame(ses); assert(doc_view); if_assert_failed return; - num = qwerty2dec(sym, symkey); + num = qwerty2dec(sym, symkey, base); goto_link_number_do(ses, doc_view, num - 1); }