[svn:parrot] r37743 - in trunk: lib/Parrot/Docs tools/docs

fperrad at svn.parrot.org fperrad at svn.parrot.org
Thu Mar 26 11:01:49 UTC 2009


Author: fperrad
Date: Thu Mar 26 11:01:47 2009
New Revision: 37743
URL: https://trac.parrot.org/parrot/changeset/37743

Log:
[chm] compute an index
code from bsdz++ in TT #492
format output like HTML Help Workshop 4.1

Modified:
   trunk/lib/Parrot/Docs/Group.pm
   trunk/tools/docs/mk_chm.pl

Modified: trunk/lib/Parrot/Docs/Group.pm
==============================================================================
--- trunk/lib/Parrot/Docs/Group.pm	Thu Mar 26 07:56:28 2009	(r37742)
+++ trunk/lib/Parrot/Docs/Group.pm	Thu Mar 26 11:01:47 2009	(r37743)
@@ -194,17 +194,18 @@
     return @contents;
 }
 
+
 sub build_toc_chm {
     my $self = shift;
     my $source = shift;
-    my $indent = shift || q{ } x 6;
+    my $indent = shift || "\t";
 
     my $toc = q{};
     $toc .= qq{$indent<LI> <OBJECT type="text/sitemap">\n};
-    $toc .= qq{$indent    <param name="Name" value="$self->{NAME}">\n};
-    $toc .= qq{$indent    <param name="Local" value="$self->{INDEX_PATH}">\n}
+    $toc .= qq{$indent\t<param name="Name" value="$self->{NAME}">\n};
+    $toc .= qq{$indent\t<param name="Local" value="$self->{INDEX_PATH}">\n}
         if ( exists $self->{INDEX_PATH} );
-    $indent .= q{ } x 2;
+    $indent .= "\t";
     $toc .= qq{$indent</OBJECT>\n};
     $toc .= qq{$indent<UL>\n};
     foreach my $content ( @{ $self->{CONTENTS} } ) {
@@ -219,10 +220,10 @@
                         my $file = $source->file_with_relative_path( $rel_path );
                         next if ( !$file->contains_pod && !$file->is_docs_link );
                         my $title = $file->title || $rel_path;
-                        $toc .= qq{$indent  <LI> <OBJECT type="text/sitemap">\n};
-                        $toc .= qq{$indent      <param name="Name" value="$title">\n};
-                        $toc .= qq{$indent      <param name="Local" value="$rel_path.html">\n};
-                        $toc .= qq{$indent    </OBJECT>\n};
+                        $toc .= qq{$indent<LI> <OBJECT type="text/sitemap">\n};
+                        $toc .= qq{$indent\t<param name="Name" value="$title">\n};
+                        $toc .= qq{$indent\t<param name="Local" value="$rel_path.html">\n};
+                        $toc .= qq{$indent\t</OBJECT>\n};
                     }
                 }
             }
@@ -233,10 +234,10 @@
                 my $file = $source->file_with_relative_path( $rel_path );
                 next if ( !$file->contains_pod && !$file->is_docs_link );
                 my $title = $file->title || $rel_path;
-                $toc .= qq{$indent  <LI> <OBJECT type="text/sitemap">\n};
-                $toc .= qq{$indent      <param name="Name" value="$title">\n};
-                $toc .= qq{$indent      <param name="Local" value="$rel_path.html">\n};
-                $toc .= qq{$indent    </OBJECT>\n};
+                $toc .= qq{$indent<LI> <OBJECT type="text/sitemap">\n};
+                $toc .= qq{$indent\t<param name="Name" value="$title">\n};
+                $toc .= qq{$indent\t<param name="Local" value="$rel_path.html">\n};
+                $toc .= qq{$indent\t</OBJECT>\n};
             }
         }
     }
@@ -244,6 +245,76 @@
     return $toc;
 }
 
+
+sub build_index_chm {
+    my $self = shift;
+    my $source = shift;
+
+    eval 'require Pod::PseudoPod::Index';
+    return q{} if $@;
+
+    sub Pod::PseudoPod::Index::ourkeys {
+        my $self = shift;
+        $self->scan($self->{'index'});
+        return $self->{'ourkeys'};
+     }
+
+    sub Pod::PseudoPod::Index::scan {
+        my ($self,$node) = @_;
+        foreach my $key (sort {lc($a) cmp lc($b)} keys %{$node}) {
+            next if $key eq 'page';
+            push @{$self->{'ourkeys'}}, $key;
+            $self->scan($node->{$key});
+        }
+    }
+
+
+    foreach my $content ( @{ $self->{CONTENTS} } ) {
+        my @to_process;
+        if ( ref $content && $content->isa( 'Parrot::Docs::Group' ) ) {
+            $content->build_index_chm( $source );
+        }
+        elsif ( ref $content ) {
+            push @to_process, @{ $content->{CONTENTS} };
+        }
+        else {
+            push @to_process, $content;
+        }
+
+        foreach my $item ( @to_process ) {
+            my @rel_paths  = $self->file_paths_relative_to_source( $source, $item );
+            foreach my $rel_path (@rel_paths) {
+                my $file = $source->file_with_relative_path( $rel_path );
+
+                next if ( !$file->contains_pod && !$file->is_docs_link );
+                my $title = $file->title || $rel_path;
+
+                my $index_parser = Pod::PseudoPod::Index->new();
+                $index_parser->parse_file($file->{'PATH'});
+                my $ourkeys = $index_parser->ourkeys();
+
+                foreach my $k (@{$ourkeys}) {
+                    push @{$source->{'_INDEX'}{$k}}, $rel_path;
+                }
+            }
+        }
+    }
+
+    my $index;
+    for my $key (%{$source->{_INDEX}}) {
+        next if ! defined $source->{_INDEX}{$key};
+        next if $key =~ /^\s*$/;
+        $index .= qq{\t<LI> <OBJECT type="text/sitemap">\n};
+        $index .= qq{\t\t<param name="Keyword" value="$key">\n};
+        foreach my $ref (@{$source->{_INDEX}{$key}}) {
+            (my $shortkey = $key) =~ s/( opcode \(PASM\)| directive| \(.*\)| \(.*\) instruction (PIR))//;
+             $index .= qq{\t\t<param name="Local" value="$ref.html#$shortkey">\n};
+        }
+        $index .= qq{\t\t</OBJECT>\n};
+    }
+    return $index;
+}
+
 =back
 
 =head1 SEE ALSO

Modified: trunk/tools/docs/mk_chm.pl
==============================================================================
--- trunk/tools/docs/mk_chm.pl	Thu Mar 26 07:56:28 2009	(r37742)
+++ trunk/tools/docs/mk_chm.pl	Thu Mar 26 11:01:47 2009	(r37743)
@@ -42,7 +42,8 @@
 
 my $docs = Parrot::Docs::Section::Parrot->new;
 my $dist = Parrot::Distribution->new;
-my $toc  = $docs->build_toc_chm( $dist );
+my $toc   = $docs->build_toc_chm( $dist );
+my $index = $docs->build_index_chm( $dist );
 
 my $filename = 'docs/html/parrot.hhp';
 open my $OUT, '>', $filename
@@ -72,15 +73,15 @@
 $filename = 'docs/html/index.hhk';
 open $OUT, '>', $filename
     or die "Can't open $filename ($!)";
-print $OUT <<'TEXT';
+print $OUT <<"TEXT";
 <HTML>
-  <HEAD>
-  </HEAD>
-  <BODY>
-    <UL>
-    </UL>
-  </BODY>
-</HTML>
+<HEAD>
+<meta name="generator" content="(Perl $])">
+</HEAD><BODY>
+<UL>
+$index
+</UL>
+</BODY></HTML>
 TEXT
 close $OUT;
 
@@ -89,79 +90,77 @@
     or die "Can't open $filename ($!)";
 print $OUT <<"TEXT";
 <HTML>
-  <HEAD>
-    <meta name="generator" content="(Perl $])">
-  </HEAD>
-  <BODY>
-    <OBJECT type="text/site properties">
-      <param name="ImageType" value="Folder">
-    </OBJECT>
-    <UL>
+<HEAD>
+<meta name="generator" content="(Perl $])">
+</HEAD><BODY>
+<OBJECT type="text/site properties">
+	<param name="ImageType" value="Folder">
+</OBJECT>
+<UL>
 $toc
-      <LI> <OBJECT type="text/sitemap">
-          <param name="Name" value="Book">
-        </OBJECT>
-        <UL>
-          <LI> <OBJECT type="text/sitemap">
-              <param name="Name" value="Overview">
-              <param name="Local" value="../book/ch01_overview.html">
-            </OBJECT>
-          <LI> <OBJECT type="text/sitemap">
-              <param name="Name" value="Getting Started">
-              <param name="Local" value="../book/ch02_getting_started.html">
-            </OBJECT>
-          <LI> <OBJECT type="text/sitemap">
-              <param name="Name" value="PIR Basics">
-              <param name="Local" value="../book/ch03_pir_basics.html">
-            </OBJECT>
-          <LI> <OBJECT type="text/sitemap">
-              <param name="Name" value="PIR Subroutines">
-              <param name="Local" value="../book/ch04_pir_subroutines.html">
-            </OBJECT>
-          <LI> <OBJECT type="text/sitemap">
-              <param name="Name" value="PASM">
-              <param name="Local" value="../book/ch05_pasm.html">
-            </OBJECT>
-          <LI> <OBJECT type="text/sitemap">
-              <param name="Name" value="Library">
-              <param name="Local" value="../book/ch06_library.html">
-            </OBJECT>
-          <LI> <OBJECT type="text/sitemap">
-              <param name="Name" value="Testing and Debugging">
-              <param name="Local" value="../book/ch07_testing_and_debugging.html">
-            </OBJECT>
-          <LI> <OBJECT type="text/sitemap">
-              <param name="Name" value="Architecture">
-              <param name="Local" value="../book/ch08_architecture.html">
-            </OBJECT>
-          <LI> <OBJECT type="text/sitemap">
-              <param name="Name" value="Parrot Compiler Toolkit">
-              <param name="Local" value="../book/ch09_pct.html">
-            </OBJECT>
-          <LI> <OBJECT type="text/sitemap">
-              <param name="Name" value="High Level Languages">
-              <param name="Local" value="../book/ch10_hlls.html">
-            </OBJECT>
-          <LI> <OBJECT type="text/sitemap">
-              <param name="Name" value="PMC">
-              <param name="Local" value="../book/ch11_pmcs.html">
-            </OBJECT>
-          <LI> <OBJECT type="text/sitemap">
-              <param name="Name" value="Opcodes">
-              <param name="Local" value="../book/ch12_opcodes.html">
-            </OBJECT>
-          <LI> <OBJECT type="text/sitemap">
-              <param name="Name" value="References">
-              <param name="Local" value="../book/ch13_reference.html">
-            </OBJECT>
-          <LI> <OBJECT type="text/sitemap">
-              <param name="Name" value="Appendix : Patch Submission">
-              <param name="Local" value="../book/appX_patch_submission.html">
-            </OBJECT>
-        </UL>
-    </UL>
-  </BODY>
-</HTML>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Name" value="Book">
+		</OBJECT>
+	<UL>
+		<LI> <OBJECT type="text/sitemap">
+			<param name="Name" value="Overview">
+			<param name="Local" value="../book/ch01_overview.html">
+			</OBJECT>
+		<LI> <OBJECT type="text/sitemap">
+			<param name="Name" value="Getting Started">
+			<param name="Local" value="../book/ch02_getting_started.html">
+			</OBJECT>
+		<LI> <OBJECT type="text/sitemap">
+			<param name="Name" value="PIR Basics">
+			<param name="Local" value="../book/ch03_pir_basics.html">
+			</OBJECT>
+		<LI> <OBJECT type="text/sitemap">
+			<param name="Name" value="PIR Subroutines">
+			<param name="Local" value="../book/ch04_pir_subroutines.html">
+			</OBJECT>
+		<LI> <OBJECT type="text/sitemap">
+			<param name="Name" value="PASM">
+			<param name="Local" value="../book/ch05_pasm.html">
+			</OBJECT>
+		<LI> <OBJECT type="text/sitemap">
+			<param name="Name" value="Library">
+			<param name="Local" value="../book/ch06_library.html">
+			</OBJECT>
+		<LI> <OBJECT type="text/sitemap">
+			<param name="Name" value="Testing and Debugging">
+			<param name="Local" value="../book/ch07_testing_and_debugging.html">
+			</OBJECT>
+		<LI> <OBJECT type="text/sitemap">
+			<param name="Name" value="Architecture">
+			<param name="Local" value="../book/ch08_architecture.html">
+			</OBJECT>
+		<LI> <OBJECT type="text/sitemap">
+			<param name="Name" value="Parrot Compiler Toolkit">
+			<param name="Local" value="../book/ch09_pct.html">
+			</OBJECT>
+		<LI> <OBJECT type="text/sitemap">
+			<param name="Name" value="High Level Languages">
+			<param name="Local" value="../book/ch10_hlls.html">
+			</OBJECT>
+		<LI> <OBJECT type="text/sitemap">
+			<param name="Name" value="PMC">
+			<param name="Local" value="../book/ch11_pmcs.html">
+			</OBJECT>
+		<LI> <OBJECT type="text/sitemap">
+			<param name="Name" value="Opcodes">
+			<param name="Local" value="../book/ch12_opcodes.html">
+			</OBJECT>
+		<LI> <OBJECT type="text/sitemap">
+			<param name="Name" value="References">
+			<param name="Local" value="../book/ch13_reference.html">
+			</OBJECT>
+		<LI> <OBJECT type="text/sitemap">
+			<param name="Name" value="Appendix : Patch Submission">
+			<param name="Local" value="../book/appX_patch_submission.html">
+			</OBJECT>
+	</UL>
+-</UL>
+</BODY></HTML>
 TEXT
 close $OUT;
 


More information about the parrot-commits mailing list