help-texinfo
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Colons in indices


From: Jan Nieuwenhuizen
Subject: Re: Colons in indices
Date: 04 May 2001 11:46:12 +0200
User-agent: Gnus/5.090003 (Oort Gnus v0.03) Emacs/20.7

address@hidden writes:

>     Any ideas how to allow colons in menu items are welcome.
> 
> In the general case, I think info readers (and generators) would have to
> use something other than : as the separator in references, otherwise it
> seems ambiguous.  True, you could heuristically guess depending on
> whether one parsing leads to valid node names and the other doesn't, but
> that seems yucky.

Yes, maybe it is.  I haven't really looked into this, as LilyPond
currently apparently doesn't use colons in node names, but only in
index entries, generated by the @defun command.

It seems that those can be handled fairly easily by adding the below
to your .emacs.  We'll have to look into colons in node names before
sending a patch to info.el, I guess.

What do you think?  Not using colons in node-names would be fine with
me, as long as they can be used in the index?

Greetings,
Jan.

;; New entries allow for colons, but need whitespace (or punctuation)
;; after the last colon.  The -legacy are needed entries that
;; are followed immediately by text.

(setq Info-reference-start-re "\\*note[ \n]")
(setq Info-reference-re "\\*note[ \n]\\(.*\\):[ \n,.]")
(setq Info-reference-legacy-re "\\*note[ \n]\\([^:]*\\):")
(setq Info-entry-start-re "\\* +")
(setq Info-index-entry-re "\\* +\\(.*[^:]\\):[ \t]")
(setq Info-index-entry-legacy-re "\\* +\\([^:]*\\):")
(setq Info-menu-entry-legacy-re "\\* +\\([^:]*\\)::")

(defun Info-try-follow-nearest-node ()
  (interactive)
  "Follow a node reference near point.  Return non-nil if successful."
  (let (node)
    (cond
     ;; Note with trailing space or punctuation; node may have embedded
     ;; colons: `*note NODE::Name::,' 
     ((setq node (Info-get-token (point)
                                 Info-reference-start-re
                                 Info-reference-re))
      (Info-follow-reference node))
     ;; Note without trailing punctuation or space, but without embedded
     ;; colons: `*note NODE-NAME:'
     ((setq node (Info-get-token (point) Info-reference-start-re
                                 Info-reference-legacy-re))
      (Info-follow-reference node))
     ;; Index entry with possibly embedded colons: `* NODE::NAME: '
     ((setq entry (Info-get-token (point) Info-entry-start-re
                                  Info-index-entry-re))
      (beginning-of-line)
      (forward-char (- (string-width entry) 1))
      (setq node (Info-extract-menu-node-name))
      (Info-goto-node node))
     ;; Menu entry: `* NODE-NAME::'
     ((setq node (Info-get-token (point) Info-entry-start-re
                                 Info-menu-entry-legacy-re))
      (Info-goto-node node))
     ;; Index without trailing space, but without embedded colons:
     ;; `* NODE-NAME:immediate text'
     ((Info-get-token (point) Info-entry-start-re
                      Info-index-entry-legacy-re)
      (beginning-of-line)
      (forward-char 2)
      (setq node (Info-extract-menu-node-name))
      (Info-goto-node node))
     ((setq node (Info-get-token (point) "Up: " "Up: \\([^,\n\t]*\\)"))
      (Info-goto-node node))
     ((setq node (Info-get-token (point) "Next: " "Next: \\([^,\n\t]*\\)"))
      (Info-goto-node node))
     ((setq node (Info-get-token (point) "File: " "File: \\([^,\n\t]*\\)"))
      (Info-goto-node "Top"))
     ((setq node (Info-get-token (point) "Prev: " "Prev: \\([^,\n\t]*\\)"))
      (Info-goto-node node)))
    node))

-- 
Jan Nieuwenhuizen <address@hidden> | GNU LilyPond - The music typesetter
http://www.xs4all.nl/~jantien       | http://www.lilypond.org




reply via email to

[Prev in Thread] Current Thread [Next in Thread]