Hello,
in the current form groff doesn't deal well with URL references for
bibliographic entries. There is no documented markup to specify a URL as
part of .Rs/.Re entries. .Lk doesn't behave properly as can be seen with
the timecounter(9) man page on NetBSD.

I propose to add a new macro .%U to allow such references. Preliminary
patch without integration into the HTML backend is attached. I do not
mind the implementation details, but I would like to see a consensus of
how this should be done.

Joerg
Index: tmac/doc-common
===================================================================
RCS file: /home/joerg/repo/netbsd/src/gnu/dist/groff/tmac/doc-common,v
retrieving revision 1.8
diff -u -p -r1.8 doc-common
--- tmac/doc-common     6 Feb 2006 18:25:49 -0000       1.8
+++ tmac/doc-common     28 Sep 2009 16:28:29 -0000
@@ -46,6 +46,7 @@
 .nr %Q 1
 .nr %R 1
 .nr %T 1
+.nr %U 1
 .nr %V 1
 .nr Ac 3
 .nr Ad 12n
@@ -1096,6 +1097,8 @@
 .  tm doc-reference-title-count == \n[doc-reference-title-count]
 .  tm doc-reference-title-name == `\*[doc-reference-title-name]'
 .  tm doc-reference-title-name-for-book == 
`\*[doc-reference-title-name-for-book]'
+.  tm doc-url-count == \n[doc-url-count]
+.  tm doc-url-name == `\*[doc-url-name]'
 .  tm doc-volume-count == \n[doc-volume-count]
 .  tm doc-volume-name == `\*[doc-volume-name]'
 .  tm doc-have-author == \n[doc-have-author]
Index: tmac/doc.tmac
===================================================================
RCS file: /home/joerg/repo/netbsd/src/gnu/dist/groff/tmac/doc.tmac,v
retrieving revision 1.5
diff -u -p -r1.5 doc.tmac
--- tmac/doc.tmac       6 Feb 2006 18:25:49 -0000       1.5
+++ tmac/doc.tmac       28 Sep 2009 16:58:42 -0000
@@ -3430,6 +3430,8 @@
 .  nr doc-reference-title-count-saved \n[doc-reference-title-count]
 .  ds doc-reference-title-name-saved "\*[doc-reference-title-name]
 .  ds doc-reference-title-name-for-book-saved 
"\*[doc-reference-title-name-for-book]
+.  nr doc-url-count-saved \n[doc-url-count]
+.  ds doc-url-name-saved "\*[doc-url-name]
 .  nr doc-volume-count-saved \n[doc-volume-count]
 .  ds doc-volume-name-saved "\*[doc-volume-name]
 .  nr doc-have-author-saved \n[doc-have-author]
@@ -3570,6 +3572,8 @@
 .  nr doc-reference-title-count \n[doc-reference-title-count-saved]
 .  ds doc-reference-title-name "\*[doc-reference-title-name-saved]
 .  ds doc-reference-title-name-for-book 
"\*[doc-reference-title-name-for-book-saved]
+.  nr doc-url-count \n[doc-url-count-saved]
+.  ds doc-url-name "\*[doc-url-name-saved]
 .  nr doc-volume-count \n[doc-volume-count-saved]
 .  ds doc-volume-name "\*[doc-volume-name-saved]
 .  nr doc-have-author \n[doc-have-author-saved]
@@ -5194,6 +5198,8 @@
 .\" NS   doc-reference-title-name-for-book
 .\" NS   doc-report-count
 .\" NS   doc-report-name
+.\" NS   doc-url-count
+.\" NS   doc-url-name
 .\" NS   doc-volume-count
 .\" NS   doc-volume-name
 .
@@ -5208,6 +5214,7 @@
 .  nr doc-corporate-count 0
 .  nr doc-report-count 0
 .  nr doc-reference-title-count 0
+.  nr doc-url-count 0
 .  nr doc-volume-count 0
 .  nr doc-date-count 0
 .  nr doc-page-number-count 0
@@ -5316,6 +5323,13 @@
 .    doc-finish-reference \n[doc-volume-count]
 .  \}
 .
+.  if \n[doc-url-count] \{\
+.    unformat doc-url-name
+.    chop doc-url-name
+.    nop \*[doc-url-name]\c
+.    doc-finish-reference \n[doc-url-count]
+.  \}
+.
 .  if \n[doc-page-number-count] \{\
 .    unformat doc-page-number-string
 .    chop doc-page-number-string
@@ -6019,6 +6033,12 @@
 ..
 .
 .
+.\" NS doc-url-count global register
+.\" NS   counter of hypertext references
+.
+.nr doc-url-count 0
+.
+.
 .\" NS doc-volume-count global register
 .\" NS   counter of reference title references
 .
@@ -6031,6 +6051,48 @@
 .ds doc-volume-name
 .
 .
+.\" NS %U user macro
+.\" NS   hypertext reference
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS   doc-reference-count
+.\" NS   doc-url-count
+.\" NS
+.\" NS local variables:
+.\" NS   doc-env-%U
+.\" NS
+.\" NS width register `%U' set in doc-common
+.
+.de %U
+.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
+.    tm Usage: .%U URL ... (#\n[.c])
+.    return
+.  \}
+.
+.  nr doc-url-count +1
+.  nr doc-reference-count +1
+.
+.  ds doc-macro-name %U
+.  doc-parse-args \$@
+.
+.  nr doc-arg-ptr +1
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.
+.  \" append to reference box
+.  boxa doc-url-name
+.  ev doc-env-%U
+.  evc 0
+.  in 0
+.  nf
+.  doc-do-references
+..
+.
+.
 .\" NS %V user macro
 .\" NS   reference volume
 .\" NS
@@ -6039,7 +6101,7 @@
 .\" NS   doc-curr-font
 .\" NS   doc-curr-size
 .\" NS   doc-macro-name
-.\" NS   doc-reference-title-count
+.\" NS   doc-reference-count
 .\" NS   doc-volume-count
 .\" NS
 .\" NS local variables:
Index: tmac/groff_mdoc.man
===================================================================
RCS file: /home/joerg/repo/netbsd/src/gnu/dist/groff/tmac/groff_mdoc.man,v
retrieving revision 1.10
diff -u -p -r1.10 groff_mdoc.man
--- tmac/groff_mdoc.man 19 May 2009 09:04:50 -0000      1.10
+++ tmac/groff_mdoc.man 28 Sep 2009 16:18:53 -0000
@@ -2528,6 +2528,8 @@ Corporate or foreign author.
 Report name.
 .It Li .%T
 Title of article.
+.It Li .%U
+Optional hypertext reference.
 .It Li .%V
 Volume.
 .El

Reply via email to