Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[PATCH] v5.8.8 pod2html -- Add --[no]fragmentuniq to support more readable <a name=..> refs #8819

Closed
p5pRT opened this issue Mar 4, 2007 · 11 comments

Comments

@p5pRT
Copy link

p5pRT commented Mar 4, 2007

Migrated from rt.perl.org#41687 (status was 'resolved')

Searchable as RT41687$

@p5pRT
Copy link
Author

p5pRT commented Mar 4, 2007

From @jaalto

Created by jaalto@cante.cante.net

DESCRIPTION

THe pod2html converter constructs obfusticated <a name=...> frament
ids. Those are not suitable for posting in email and other social
context where URL links are exchanged.

THE SOLUTION

Offer alternate method to construct the frament identifiers in a more
human readable manner. By taking the words from the current line to
construct the ID are "readable choice". This of course does not
guarantee the uniqueness, but as this option is not enabled by
default, the user has the responsibility to make sure that all =item
and =head tags can be considered unique.

The patch implements new option​:

  --[no]fragmentuniq

The old, obfusticated id operation, is the deault. User can change the
method to use "human readble" fragments with​:

  --nofragmentuniq

USE CASES

[the default; notice "2d_23_2f_2d_2d" etc.]

<dt><strong><a name="item__2d_23_2f_2d_2dprogress_2dbar"><strong>-#/--progress-bar</strong></a></strong>
<dt><strong><a name="item__2da_7c_2d_2dappend"><strong>-a|--append</strong></a></strong>
<dt><strong><a name="item__2da_7c_2d_2duser_2dagent__22agent_string_22"><strong>-A|--user-agent "agent string"</strong></a></strong>
<dt><strong><a name="item__2d_2danyauth"><strong>--anyauth</strong></a></strong>

[with option --nofragmentuniq]

<dt><strong><a name="item__progress_bar"><strong>-#/--progress-bar</strong></a></strong>
<dt><strong><a name="item__a_append"><strong>-a|--append</strong></a></strong>
<dt><strong><a name="item__a_user_agentagent_string"><strong>-A|--user-agent "agent string"</strong></a></strong>
<dt><strong><a name="item__anyauth"><strong>--anyauth</strong></a></strong>

The PATCH for /usr/share/perl/5.8.8/Pod/Html.pm
........................................................................

Notice, that this patch builds on top of my previous bug report titled​:
"[perl #41686] perlbug AutoReply​: [PATCH] v5.8.8 pod2html -- option
--quota-style us for "q" => ``q'' conversion"

=== modified file 'Html.pm'

Inline Patch
--- Html.pm     2007-03-03 18:42:19 +0000
+++ Html.pm     2007-03-04 00:37:33 +0000
@@ -64,6 +64,16 @@

 Flushes the item and directory caches.

+=item fragmentuniq
+
+    --fragmentuniq
+
+Make the <a name=...> references fully unique by adding random text.
+In large text this is probably the only choice to make the hyperlink
+references unique. With --noframentuniq the reference is constructed
+from the words in the current line thus making it more human readable
+(suitable for posting links to the text).
+
 =item header

     --header
@@ -235,6 +245,7 @@
 my @Begin_Stack;
 my @Libpods;
 my($Htmlroot, $Htmldir, $Htmlfile, $Htmlfileurl, $Prelink, $QuoteStyleUS);
+my($FragmentUniq);
 my($Podfile, @Podpath, $Podroot);
 my $Css;

@@ -302,6 +313,7 @@
     $Doindex = 1;              # non-zero if we should generate an index
     $Prelink = 0;              # Treat <pre>..</pre> for URLsx
     $QuoteStyleUS = 0;         # Treat "quote" as ``quote'' in HTML
+    $FragmentUniq = 1;          # <a name=...> frament names
     $Backlink = '';            # text for "back to top" links
     $Listlevel = 0;            # current list depth
     @Listend = ();             # the text to use to end the list.
@@ -632,6 +644,8 @@
   --cachedir     - directory for the item and directory cache files.
   --css          - stylesheet URL
   --flush        - flushes the item and directory caches.
+  --[no]fragmentuniq
+x                 - Use words from line with random text to make <a name> links.
   --[no]header   - produce block header/footer (default is no headers).
   --help         - prints this message.
   --hiddendirs   - search hidden directories in podpath
@@ -667,7 +681,8 @@
 }

 sub parse_command_line {
-    my ($opt_backlink,$opt_cachedir,$opt_css,$opt_flush,$opt_header,$opt_help,
+    my ($opt_backlink,$opt_cachedir,$opt_css,$opt_flush,$opt_fragment_uniq,
+        $opt_header,$opt_help,
        $opt_htmldir,$opt_htmlroot,$opt_index,$opt_infile,$opt_libpods,
        $opt_netscape,$opt_outfile,$opt_prelink,
         $opt_podpath,$opt_podroot,$opt_quote_style_us,$opt_quiet,
@@ -679,6 +694,7 @@
                            'cachedir=s' => \$opt_cachedir,
                            'css=s'      => \$opt_css,
                            'flush'      => \$opt_flush,
+                            'fragmentuniq!' => \$opt_fragment_uniq,
                            'header!'    => \$opt_header,
                            'help'       => \$opt_help,
                            'hiddendirs!'=> \$opt_hiddendirs,
@@ -710,6 +726,7 @@
     $Cachedir = $opt_cachedir if defined $opt_cachedir;
     $Css      = $opt_css      if defined $opt_css;
     $Header   = $opt_header   if defined $opt_header;
+    $FragmentUniq = $opt_fragment_uniq   if defined $opt_fragment_uniq;
     $Htmldir  = $opt_htmldir  if defined $opt_htmldir;
     $Htmlroot = $opt_htmlroot if defined $opt_htmlroot;
     $Doindex  = $opt_index    if defined $opt_index;
@@ -2017,7 +2034,8 @@
     $heading =~ s/\s+\Z//;
     $heading =~ s/\A\s+//;
     # The hyphen is a disgrace to the English language.
-    $heading =~ s/[-"?]//g;
+    # $heading =~ s/[-"?]//g;
+    $heading =~ s/["?]//g;
     $heading = lc( $heading );
     return $heading;
 }
@@ -2093,12 +2111,38 @@
   return $res;
 }

+sub fragment_id_readable {
+    my $text = shift;
+
+    # just clean the punctuation and leave the words for the
+    # fragment identifier.
+    $text =~ s/([[:punct:]\s])+/$1/g;
+    $text =~ s/[[:punct:]\s]+\Z//g;
+
+    $text;
+}
+
+my @HC;
+sub fragment_id_unique {
+    my $text = shift;
+
+    # text? Normalize by obfusticating the fragment id to make it unique
+    $text =~ s/\s+/_/sg;
+
+    $text =~ s{(\W)}{
+        defined( $HC[ord($1)] ) ? $HC[ord($1)]
+        : ( $HC[ord($1)] = sprintf( "%%%02X", ord($1) ) ) }gxe;
+    $text = substr( $text, 0, 50 );
+
+    $text;
+}
+
 #
 # fragment_id - construct a fragment identifier from:
 #   a) =item text
 #   b) contents of C<...>
 #
-my @HC;
+
 sub fragment_id {
     my $text = shift();
     $text =~ s/\s+\Z//s;
@@ -2121,12 +2165,16 @@
        return $1 if $text =~ m{^([a-z\d_]+)(\s+[A-Z\d,/& ]+)?$};
        return $1 if $text =~ m{^([a-z\d]+)\s+Module(\s+[A-Z\d,/& ]+)?$};

-       # text? normalize!
-       $text =~ s/\s+/_/sg;
-       $text =~ s{(\W)}{
-         defined( $HC[ord($1)] ) ? $HC[ord($1)]
-                 : ( $HC[ord($1)] = sprintf( "%%%02X", ord($1) ) ) }gxe;
-        $text = substr( $text, 0, 50 );
+        my $frag;
+
+        if ( $FragmentUniq ) {
+            $frag = fragment_id_unique($text);
+        } else {
+            $frag = fragment_id_readable($text);
+        }
+
+        $frag;
+
     } else {
        return undef();
     }
Perl Info

Flags:
    category=core
    severity=low

Site configuration information for perl v5.8.8:

Configured by Debian Project at Wed Dec  6 23:17:41 UTC 2006.

Summary of my perl5 (revision 5 version 8 subversion 8) configuration:
  Platform:
    osname=linux, osvers=2.6.18.3, archname=i486-linux-gnu-thread-multi
    uname='linux saens 2.6.18.3 #1 smp sat nov 25 13:39:52 est 2006 i686 gnulinux '
    config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN -Dcccdlflags=-fPIC -Darchname=i486-linux-gnu -Dprefix=/usr -Dprivlib=/usr/share/perl/5.8 -Darchlib=/usr/lib/perl/5.8 -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.8.8 -Dsitearch=/usr/local/lib/perl/5.8.8 -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1 -Dsiteman3dir=/usr/local/man/man3 -Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Uusesfio -Uusenm -Duseshrplib -Dlibperl=libperl.so.5.8.8 -Dd_dosuid -des'
    hint=recommended, useposix=true, d_sigaction=define
    usethreads=define use5005threads=undef useithreads=define usemultiplicity=define
    useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
    use64bitint=undef use64bitall=undef uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
    optimize='-O2',
    cppflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include'
    ccversion='', gccversion='4.1.2 20061115 (prerelease) (Debian 4.1.1-20)', gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
    ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=4, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =' -L/usr/local/lib'
    libpth=/usr/local/lib /lib /usr/lib
    libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt
    perllibs=-ldl -lm -lpthread -lc -lcrypt
    libc=/lib/libc-2.3.6.so, so=so, useshrplib=true, libperl=libperl.so.5.8.8
    gnulibc_version='2.3.6'
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
    cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib'

Locally applied patches:
    


@INC for perl v5.8.8:
    /home/jaalto/var/lib/code/perl
    /etc/perl
    /usr/local/lib/perl/5.8.8
    /usr/local/share/perl/5.8.8
    /usr/lib/perl5
    /usr/share/perl5
    /usr/lib/perl/5.8
    /usr/share/perl/5.8
    /usr/local/lib/site_perl
    /usr/local/lib/perl/5.8.7
    /usr/local/share/perl/5.8.7
    /usr/local/lib/perl/5.8.4
    /usr/local/share/perl/5.8.4
    .


Environment for perl v5.8.8:
    HOME=/home/jaalto
    LANG (unset)
    LANGUAGE (unset)
    LC_ALL=en_US
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=/usr/local/bin:/home/jaalto/var/link/bin:/sbin:/bin:/usr/bin:/usr/sbin:/usr/share/bin:/usr/bin/X11:/usr/games
    PERL5LIB=/home/jaalto/var/lib/code/perl
    PERL_BADLANG (unset)
    SHELL=/bin/bash

@p5pRT
Copy link
Author

p5pRT commented Mar 4, 2007

From @eserte

Jari Aalto (via RT) <perlbug-followup@​perl.org> writes​:

# New Ticket Created by Jari Aalto
# Please include the string​: [perl #41687]
# in the subject line of all future correspondence about this issue.
# <URL​: http​://rt.perl.org/rt3/Ticket/Display.html?id=41687 >

This is a bug report for perl from jaalto@​cante.cante.net,
generated with the help of perlbug 1.35 running under perl v5.8.8.

-----------------------------------------------------------------
[Please enter your report here]

DESCRIPTION

THe pod2html converter constructs obfusticated <a name=...> frament
ids. Those are not suitable for posting in email and other social
context where URL links are exchanged.

THE SOLUTION

Offer alternate method to construct the frament identifiers in a more
human readable manner. By taking the words from the current line to
construct the ID are "readable choice". This of course does not
guarantee the uniqueness, but as this option is not enabled by
default, the user has the responsibility to make sure that all =item
and =head tags can be considered unique.

The patch implements new option​:

--[no]fragmentuniq

The old, obfusticated id operation, is the deault. User can change the
method to use "human readble" fragments with​:

--nofragmentuniq

Instead of creating a obfuscated id, why not just use an integer
counter which is incremented every time the same fragment id is used
and append this to the human readable id? Then there's no need for an
extra option.

Regards,
  Slaven

--
Slaven Rezic - slaven <at> rezic <dot> de

  tkrevdiff - graphical display of diffs between revisions (RCS, CVS or SVN)
  http​://ptktools.sourceforge.net/#tkrevdiff

@p5pRT
Copy link
Author

p5pRT commented Mar 4, 2007

The RT System itself - Status changed from 'new' to 'open'

@p5pRT
Copy link
Author

p5pRT commented Mar 5, 2007

From @jaalto

slaven@​rezic.de (Slaven Rezic) writes​:

Jari Aalto (via RT) <perlbug-followup@​perl.org> writes​:

# New Ticket Created by Jari Aalto
# Please include the string​: [perl #41687]
# in the subject line of all future correspondence about this issue.
# <URL​: http​://rt.perl.org/rt3/Ticket/Display.html?id=41687 >

This is a bug report for perl from jaalto@​cante.cante.net,
generated with the help of perlbug 1.35 running under perl v5.8.8.

-----------------------------------------------------------------
[Please enter your report here]

DESCRIPTION

THe pod2html converter constructs obfusticated <a name=...> frament
ids. Those are not suitable for posting in email and other social
context where URL links are exchanged.

THE SOLUTION

Offer alternate method to construct the frament identifiers in a more
human readable manner. By taking the words from the current line to
construct the ID are "readable choice". This of course does not
guarantee the uniqueness, but as this option is not enabled by
default, the user has the responsibility to make sure that all =item
and =head tags can be considered unique.

The patch implements new option​:

--[no]fragmentuniq

The old, obfusticated id operation, is the deault. User can change the
method to use "human readble" fragments with​:

--nofragmentuniq

Instead of creating a obfuscated id, why not just use an integer
counter which is incremented every time the same fragment id is used
and append this to the human readable id?

Yes, this would be better default for the pod2html

Then there's no need for an extra option.

There still is. Consider

  =pod

  =item --Verbose

  =cut

Where the link with integer would be

  http​://localhost/index.html#1

Whereas the "human readable", the proposed --fragmentuniq will produce
roughly​:

  http​://localhost/index.html#item_verbose

Sharing that link is much more friendly than just number.

Jari

@p5pRT
Copy link
Author

p5pRT commented Mar 5, 2007

From @tamias

On Sun, Mar 04, 2007 at 08​:52​:31PM +0200, Jari Aalto wrote​:

slaven@​rezic.de (Slaven Rezic) writes​:

Instead of creating a obfuscated id, why not just use an integer
counter which is incremented every time the same fragment id is used
and append this to the human readable id?

Yes, this would be better default for the pod2html

Then there's no need for an extra option.

There still is. Consider

=pod

=item \-\-Verbose

=cut

Where the link with integer would be

http&#8203;://localhost/index\.html\#1

Whereas the "human readable", the proposed --fragmentuniq will produce
roughly​:

http&#8203;://localhost/index\.html\#item\_verbose

Sharing that link is much more friendly than just number.

Note Slaven suggested *appending the integer to the human readable id*.

Ronald

@p5pRT
Copy link
Author

p5pRT commented Mar 5, 2007

From @jaalto

rjk-perl-p5p@​tamias.net (Ronald J Kimball) writes​:

On Sun, Mar 04, 2007 at 08​:52​:31PM +0200, Jari Aalto wrote​:

slaven@​rezic.de (Slaven Rezic) writes​:

Instead of creating a obfuscated id, why not just use an integer
counter which is incremented every time the same fragment id is used
and append this to the human readable id?

Yes, this would be better default for the pod2html

Then there's no need for an extra option.

There still is. Consider

=pod

=item \-\-Verbose

=cut

Where the link with integer would be

http&#8203;://localhost/index\.html\#1

Whereas the "human readable", the proposed --fragmentuniq will produce
roughly​:

http&#8203;://localhost/index\.html\#item\_verbose

Sharing that link is much more friendly than just number.

Note Slaven suggested *appending the integer to the human readable id*.

Ah, misread that, thanks.

Still, it's different to have fragment​:

  #item_verbose [1]

Than random number​:

  #item_verbose30 [2]

When you post a link to the page, you can just make it directly if you remember
the optiona name. But you can't do that if there is random number.

Anyway, the patch offers both choices​: Globally unique tags or sign
the words from the line.

Jari

@p5pRT
Copy link
Author

p5pRT commented Mar 5, 2007

From @eserte

Jari Aalto <jari.aalto@​cante.net> writes​:

rjk-perl-p5p@​tamias.net (Ronald J Kimball) writes​:

On Sun, Mar 04, 2007 at 08​:52​:31PM +0200, Jari Aalto wrote​:

slaven@​rezic.de (Slaven Rezic) writes​:

Instead of creating a obfuscated id, why not just use an integer
counter which is incremented every time the same fragment id is used
and append this to the human readable id?

Yes, this would be better default for the pod2html

Then there's no need for an extra option.

There still is. Consider

=pod

=item \-\-Verbose

=cut

Where the link with integer would be

http&#8203;://localhost/index\.html\#1

Whereas the "human readable", the proposed --fragmentuniq will produce
roughly​:

http&#8203;://localhost/index\.html\#item\_verbose

Sharing that link is much more friendly than just number.

Note Slaven suggested *appending the integer to the human readable id*.

Ah, misread that, thanks.

Still, it's different to have fragment​:

\#item\_verbose       \[1\]

Than random number​:

\#item\_verbose30     \[2\]

When you post a link to the page, you can just make it directly if you remember
the optiona name. But you can't do that if there is random number.

Anyway, the patch offers both choices​: Globally unique tags or sign
the words from the line.

Don't append a random number, but start from 1, and do not append
unless there's a need to disambiguate the fragments. So the first
fragment would be just

  #item_verbose

and if there was ever another fragment with the same name, then it
would be named

  #item_verbose_1

(or maybe start from 2, as it's really the 2nd fragment with the same
name)

Regards,
  Slaven

--
Slaven Rezic - slaven <at> rezic <dot> de

  tknotes - A knotes clone, written in Perl/Tk.
  http​://ptktools.sourceforge.net/#tknotes

@p5pRT
Copy link
Author

p5pRT commented Mar 7, 2007

From @jaalto

slaven@​rezic.de (Slaven Rezic) writes​:

Don't append a random number, but start from 1, and do not append
unless there's a need to disambiguate the fragments. So the first
fragment would be just

\#item\_verbose

and if there was ever another fragment with the same name, then it
would be named

\#item\_verbose\_1

(or maybe start from 2, as it's really the 2nd fragment with the same
name)

Good idea. I've reworked the patch as follows​:

- No more special option --fragmentuniq
- Be smart about making the fragment identifiers (as suggested by Slaven)
- Do not add extra 'item_' to fragments, instead add "class="item" to HTML 'a' tag.

Jari

USE CASE [v5.8.8. original pod2html]

  <dt><strong><a name="item__2d_23_2f_2d_2dprogress_2dbar"><strong>-#/--progress-bar</strong></a></strong>
  <dt><strong><a name="item__2da_2f_2d_2dappend"><strong>-a/--append</strong></a></strong>
  <dt><strong><a name="item__2da_2f_2d_2duser_2dagent__22agent_string_22"><strong>-A/--user-agent "agent string"</strong></a></strong>
  <dt><strong><a name="item__2d_2danyauth"><strong>--anyauth</strong></a></strong>
  <dt><strong><a name="item__2db_2f_2d_2dcookie_name_3ddata"><strong>-b/--cookie name=data</strong></a></strong>
  <dt><strong><a name="item__2db_2f_2d_2duse_2dascii"><strong>-B/--use-ascii</strong></a></strong>
  <dt><strong><a name="item__2d_2dbasic"><strong>--basic</strong></a></strong>

USE CASE [after the patch]

  <dt><strong><a name="progress_bar" class="item"><strong>-#/--progress-bar</strong></a></strong>
  <dt><strong><a name="a_append" class="item"><strong>-a/--append</strong></a></strong>
  <dt><strong><a name="a_user_agentagent_string" class="item"><strong>-A/--user-agent "agent string"</strong></a></strong>
  <dt><strong><a name="anyauth" class="item"><strong>--anyauth</strong></a></strong>
  <dt><strong><a name="b_cookie_name_data" class="item"><strong>-b/--cookie name=data</strong></a></strong>
  <dt><strong><a name="b_use_ascii" class="item"><strong>-B/--use-ascii</strong></a></strong>
  <dt><strong><a name="basic" class="item"><strong>--basic</strong></a></strong>

NEW PATCH [ /usr/share/perl/5.8.8/Pod/Html.pm ]

=== modified file 'Html.pm'

Inline Patch
--- Html.pm     2007-03-05 08:02:39 +0000
+++ Html.pm     2007-03-07 07:31:02 +0000
@@ -216,7 +216,6 @@

 =cut

-
 my($Cachedir);
 my($Dircache, $Itemcache);
 my @Begin_Stack;
@@ -1107,7 +1106,7 @@

 sub emit_item_tag($$$){
     my( $otext, $text, $compact ) = @_;
-    my $item = fragment_id( $text );
+    my $item = fragment_id( $text , -generate);

     $EmittedItem = $item;
     ### print STDERR "emit_item_tag=$item ($text)\n";
@@ -1116,9 +1115,9 @@
     if ($Items_Named{$item}++) {
        print HTML process_text( \$otext );
     } else {
-        my $name = 'item_' . $item;
+        my $name = $item;
         $name = anchorify($name);
-       print HTML qq{<a name="$name">}, process_text( \$otext ), '</a>';
+       print HTML qq{<a name="$name" class="item">}, process_text( \$otext ), '</a>';
     }
     print HTML "</strong>\n";
     undef( $EmittedItem );
@@ -1981,7 +1980,8 @@
     $heading =~ s/\s+\Z//;
     $heading =~ s/\A\s+//;
     # The hyphen is a disgrace to the English language.
-    $heading =~ s/[-"?]//g;
+    # $heading =~ s/[-"?]//g;
+    $heading =~ s/["?]//g;
     $heading = lc( $heading );
     return $heading;
 }
@@ -2057,14 +2057,70 @@
   return $res;
 }

+{
+    my %seen;   # static fragment record hash
+
+sub fragment_id_readable {
+    my $text     = shift;
+    my $generate = shift;   # optional flag
+
+    my $orig = $text;
+
+    # just clean the punctuation and leave the words for the
+    # fragment identifier.
+    $text =~ s/([[:punct:]\s])+/$1/g;
+    $text =~ s/[[:punct:]\s]+\Z//g;
+
+    #   "=item --version", remove leading punctuation.
+    $text =~ s/^[-[:punct:]]//;
+
+    unless ($text)
+    {
+        # Nothing left after removing punctuation, so leave it as is
+        # E.g. if option is named: "=item -#"
+
+        $text = $orig;
+    }
+
+    if ($generate) {
+        if ( exists $seen{$text} ) {
+            # This already exists, make it unique
+            $seen{$text}++;
+            $text = $text . $seen{$text};
+        } else {
+            $seen{$text} = 1;  # first time seen this fragment
+        }
+    }
+
+    $text;
+}}
+
+my @HC;
+sub fragment_id_obfusticated {  # This was the old "_2d_2d__"
+    my $text     = shift;
+    my $generate = shift;   # optional flag
+
+    # text? Normalize by obfusticating the fragment id to make it unique
+    $text =~ s/\s+/_/sg;
+
+    $text =~ s{(\W)}{
+        defined( $HC[ord($1)] ) ? $HC[ord($1)]
+        : ( $HC[ord($1)] = sprintf( "%%%02X", ord($1) ) ) }gxe;
+    $text = substr( $text, 0, 50 );
+
+    $text;
+}
+
 #
 # fragment_id - construct a fragment identifier from:
 #   a) =item text
 #   b) contents of C<...>
 #
-my @HC;
+
 sub fragment_id {
-    my $text = shift();
+    my $text     = shift;
+    my $generate = shift;   # optional flag
+
     $text =~ s/\s+\Z//s;
     if( $text ){
        # a method or function?
@@ -2085,12 +2141,8 @@
        return $1 if $text =~ m{^([a-z\d_]+)(\s+[A-Z\d,/& ]+)?$};
        return $1 if $text =~ m{^([a-z\d]+)\s+Module(\s+[A-Z\d,/& ]+)?$};

-       # text? normalize!
-       $text =~ s/\s+/_/sg;
-       $text =~ s{(\W)}{
-         defined( $HC[ord($1)] ) ? $HC[ord($1)]
-                 : ( $HC[ord($1)] = sprintf( "%%%02X", ord($1) ) ) }gxe;
-        $text = substr( $text, 0, 50 );
+        fragment_id_readable($text, $generate);
+
     } else {
        return undef();
     }

@p5pRT
Copy link
Author

p5pRT commented Mar 14, 2007

@rgs - Status changed from 'open' to 'resolved'

@p5pRT p5pRT closed this as completed Mar 14, 2007
@p5pRT
Copy link
Author

p5pRT commented Mar 15, 2007

From @jaalto

rgarciasuarez@​gmail.com ("Rafael Garcia-Suarez") writes​:

On 07/03/07, Jari Aalto <jari.aalto@​cante.net> wrote​:

Good idea. I've reworked the patch as follows​:

- No more special option --fragmentuniq
- Be smart about making the fragment identifiers (as suggested by
Slaven)
- Do not add extra 'item_' to fragments, instead add "class="item"
to HTML 'a' tag.

Thanks, applied as change #30584 (with test adjustments).

That's good, thank you,
Jari

@p5pRT
Copy link
Author

p5pRT commented Mar 15, 2007

From @rgarcia

On 07/03/07, Jari Aalto <jari.aalto@​cante.net> wrote​:

Good idea. I've reworked the patch as follows​:

- No more special option --fragmentuniq
- Be smart about making the fragment identifiers (as suggested by Slaven)
- Do not add extra 'item_' to fragments, instead add "class="item" to HTML 'a' tag.

Thanks, applied as change #30584 (with test adjustments).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant