bixbite 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. data/LICENSE +20 -0
  2. data/README.markdown +49 -0
  3. data/VERSION +1 -0
  4. data/bin/bixbite +73 -0
  5. data/lib/bixbite.rb +13 -0
  6. data/lib/bixbite/command.rb +14 -0
  7. data/lib/bixbite/create.rb +76 -0
  8. data/template/Rakefile +25 -0
  9. data/template/assets/bixbite/Rakefile.rb +297 -0
  10. data/template/assets/naturaldocs/NaturalDocs/Config/Languages.txt +286 -0
  11. data/template/assets/naturaldocs/NaturalDocs/Config/Topics.txt +382 -0
  12. data/template/assets/naturaldocs/NaturalDocs/Help/customizinglanguages.html +52 -0
  13. data/template/assets/naturaldocs/NaturalDocs/Help/customizingtopics.html +74 -0
  14. data/template/assets/naturaldocs/NaturalDocs/Help/documenting.html +58 -0
  15. data/template/assets/naturaldocs/NaturalDocs/Help/documenting/reference.html +146 -0
  16. data/template/assets/naturaldocs/NaturalDocs/Help/documenting/walkthrough.html +180 -0
  17. data/template/assets/naturaldocs/NaturalDocs/Help/example/Default.css +528 -0
  18. data/template/assets/naturaldocs/NaturalDocs/Help/example/NaturalDocs.js +204 -0
  19. data/template/assets/naturaldocs/NaturalDocs/Help/examples.css +90 -0
  20. data/template/assets/naturaldocs/NaturalDocs/Help/images/header/background.png +0 -0
  21. data/template/assets/naturaldocs/NaturalDocs/Help/images/header/leftside.png +0 -0
  22. data/template/assets/naturaldocs/NaturalDocs/Help/images/header/logo.png +0 -0
  23. data/template/assets/naturaldocs/NaturalDocs/Help/images/header/overbody.png +0 -0
  24. data/template/assets/naturaldocs/NaturalDocs/Help/images/header/overbodybg.png +0 -0
  25. data/template/assets/naturaldocs/NaturalDocs/Help/images/header/overleftmargin.png +0 -0
  26. data/template/assets/naturaldocs/NaturalDocs/Help/images/header/overmenu.png +0 -0
  27. data/template/assets/naturaldocs/NaturalDocs/Help/images/header/overmenubg.png +0 -0
  28. data/template/assets/naturaldocs/NaturalDocs/Help/images/header/rightside.png +0 -0
  29. data/template/assets/naturaldocs/NaturalDocs/Help/images/logo.gif +0 -0
  30. data/template/assets/naturaldocs/NaturalDocs/Help/images/menu/about.png +0 -0
  31. data/template/assets/naturaldocs/NaturalDocs/Help/images/menu/background.png +0 -0
  32. data/template/assets/naturaldocs/NaturalDocs/Help/images/menu/bottomleft.png +0 -0
  33. data/template/assets/naturaldocs/NaturalDocs/Help/images/menu/bottomright.png +0 -0
  34. data/template/assets/naturaldocs/NaturalDocs/Help/images/menu/community.png +0 -0
  35. data/template/assets/naturaldocs/NaturalDocs/Help/images/menu/customizing.png +0 -0
  36. data/template/assets/naturaldocs/NaturalDocs/Help/images/menu/using.png +0 -0
  37. data/template/assets/naturaldocs/NaturalDocs/Help/index.html +9 -0
  38. data/template/assets/naturaldocs/NaturalDocs/Help/javascript/BrowserStyles.js +77 -0
  39. data/template/assets/naturaldocs/NaturalDocs/Help/javascript/PNGHandling.js +72 -0
  40. data/template/assets/naturaldocs/NaturalDocs/Help/keywords.html +38 -0
  41. data/template/assets/naturaldocs/NaturalDocs/Help/languages.html +32 -0
  42. data/template/assets/naturaldocs/NaturalDocs/Help/menu.html +79 -0
  43. data/template/assets/naturaldocs/NaturalDocs/Help/output.html +84 -0
  44. data/template/assets/naturaldocs/NaturalDocs/Help/running.html +40 -0
  45. data/template/assets/naturaldocs/NaturalDocs/Help/styles.css +290 -0
  46. data/template/assets/naturaldocs/NaturalDocs/Help/styles.html +52 -0
  47. data/template/assets/naturaldocs/NaturalDocs/Help/troubleshooting.html +18 -0
  48. data/template/assets/naturaldocs/NaturalDocs/Info/CSSGuide.txt +947 -0
  49. data/template/assets/naturaldocs/NaturalDocs/Info/File Parsing.txt +83 -0
  50. data/template/assets/naturaldocs/NaturalDocs/Info/HTMLTestCases.pm +269 -0
  51. data/template/assets/naturaldocs/NaturalDocs/Info/Languages.txt +107 -0
  52. data/template/assets/naturaldocs/NaturalDocs/Info/NDMarkup.txt +91 -0
  53. data/template/assets/naturaldocs/NaturalDocs/Info/Symbol Management.txt +59 -0
  54. data/template/assets/naturaldocs/NaturalDocs/Info/images/Logo.png +0 -0
  55. data/template/assets/naturaldocs/NaturalDocs/JavaScript/NaturalDocs.js +836 -0
  56. data/template/assets/naturaldocs/NaturalDocs/License-GPL.txt +341 -0
  57. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/BinaryFile.pm +294 -0
  58. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Builder.pm +280 -0
  59. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Builder/Base.pm +348 -0
  60. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Builder/FramedHTML.pm +345 -0
  61. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Builder/HTML.pm +398 -0
  62. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Builder/HTMLBase.pm +3693 -0
  63. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/ClassHierarchy.pm +860 -0
  64. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/ClassHierarchy/Class.pm +412 -0
  65. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/ClassHierarchy/File.pm +157 -0
  66. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/ConfigFile.pm +497 -0
  67. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Constants.pm +165 -0
  68. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/DefineMembers.pm +100 -0
  69. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Error.pm +305 -0
  70. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/File.pm +540 -0
  71. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/ImageReferenceTable.pm +383 -0
  72. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/ImageReferenceTable/Reference.pm +44 -0
  73. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/ImageReferenceTable/String.pm +110 -0
  74. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages.pm +1475 -0
  75. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/ActionScript.pm +1473 -0
  76. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Ada.pm +38 -0
  77. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Advanced.pm +828 -0
  78. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Advanced/Scope.pm +95 -0
  79. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Advanced/ScopeChange.pm +70 -0
  80. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Base.pm +832 -0
  81. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/CSharp.pm +1484 -0
  82. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/PLSQL.pm +319 -0
  83. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Pascal.pm +143 -0
  84. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Perl.pm +1370 -0
  85. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Prototype.pm +92 -0
  86. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Prototype/Parameter.pm +87 -0
  87. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Simple.pm +503 -0
  88. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Tcl.pm +219 -0
  89. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Menu.pm +3406 -0
  90. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Menu/Entry.pm +201 -0
  91. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/NDMarkup.pm +76 -0
  92. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Parser.pm +1331 -0
  93. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Parser/JavaDoc.pm +464 -0
  94. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Parser/Native.pm +1060 -0
  95. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Parser/ParsedTopic.pm +253 -0
  96. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Project.pm +1402 -0
  97. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Project/ImageFile.pm +160 -0
  98. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Project/SourceFile.pm +113 -0
  99. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/ReferenceString.pm +334 -0
  100. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Settings.pm +1418 -0
  101. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Settings/BuildTarget.pm +66 -0
  102. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SourceDB.pm +678 -0
  103. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SourceDB/Extension.pm +84 -0
  104. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SourceDB/File.pm +129 -0
  105. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SourceDB/Item.pm +201 -0
  106. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SourceDB/ItemDefinition.pm +45 -0
  107. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SourceDB/WatchedFileDefinitions.pm +159 -0
  108. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/StatusMessage.pm +102 -0
  109. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SymbolString.pm +212 -0
  110. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SymbolTable.pm +1984 -0
  111. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SymbolTable/File.pm +186 -0
  112. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SymbolTable/IndexElement.pm +522 -0
  113. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SymbolTable/Reference.pm +273 -0
  114. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SymbolTable/ReferenceTarget.pm +97 -0
  115. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SymbolTable/Symbol.pm +428 -0
  116. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SymbolTable/SymbolDefinition.pm +96 -0
  117. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Topics.pm +1319 -0
  118. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Topics/Type.pm +151 -0
  119. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Version.pm +384 -0
  120. data/template/assets/naturaldocs/NaturalDocs/NaturalDocs +400 -0
  121. data/template/assets/naturaldocs/NaturalDocs/NaturalDocs.bat +17 -0
  122. data/template/assets/naturaldocs/NaturalDocs/Styles/Default.css +767 -0
  123. data/template/assets/naturaldocs/NaturalDocs/Styles/Roman.css +765 -0
  124. data/template/assets/naturaldocs/NaturalDocs/Styles/Small.css +763 -0
  125. data/template/assets/utilities/pngout +0 -0
  126. data/template/deploy/public_html/.htaccess +0 -0
  127. data/template/documentation/js/.htaccess +0 -0
  128. data/template/src/html/.htaccess +76 -0
  129. data/template/src/html/css/cmn/global.css +96 -0
  130. data/template/src/html/css/cmn/ie.css +15 -0
  131. data/template/src/html/css/cmn/ie6.css +15 -0
  132. data/template/src/html/images/cmn/.htaccess +0 -0
  133. data/template/src/html/images/tmp/.htaccess +0 -0
  134. data/template/src/html/includes/debug.inc +5 -0
  135. data/template/src/html/includes/footer.inc +52 -0
  136. data/template/src/html/includes/header.inc +61 -0
  137. data/template/src/html/includes/html.inc +3 -0
  138. data/template/src/html/includes/namespace.inc +19 -0
  139. data/template/src/html/includes/page.inc +151 -0
  140. data/template/src/html/index.html +35 -0
  141. data/template/src/html/js/cmn/bootstrap.js +74 -0
  142. data/template/src/html/js/cmn/global.js +142 -0
  143. data/template/src/html/js/cmn/lib/LAB.js +348 -0
  144. data/template/src/html/min/.htaccess +4 -0
  145. data/template/src/html/min/MinifyCLI.php +19 -0
  146. data/template/src/html/min/README.txt +132 -0
  147. data/template/src/html/min/builder/_index.js +242 -0
  148. data/template/src/html/min/builder/bm.js +36 -0
  149. data/template/src/html/min/builder/index.php +182 -0
  150. data/template/src/html/min/builder/ocCheck.php +36 -0
  151. data/template/src/html/min/builder/rewriteTest.js +1 -0
  152. data/template/src/html/min/config.php +187 -0
  153. data/template/src/html/min/groupsConfig.php +34 -0
  154. data/template/src/html/min/index.php +66 -0
  155. data/template/src/html/min/lib/FirePHP.php +1370 -0
  156. data/template/src/html/min/lib/HTTP/ConditionalGet.php +348 -0
  157. data/template/src/html/min/lib/HTTP/Encoder.php +326 -0
  158. data/template/src/html/min/lib/JSMin.php +314 -0
  159. data/template/src/html/min/lib/JSMinPlus.php +1872 -0
  160. data/template/src/html/min/lib/Minify.php +532 -0
  161. data/template/src/html/min/lib/Minify/Build.php +103 -0
  162. data/template/src/html/min/lib/Minify/CSS.php +83 -0
  163. data/template/src/html/min/lib/Minify/CSS/Compressor.php +250 -0
  164. data/template/src/html/min/lib/Minify/CSS/UriRewriter.php +270 -0
  165. data/template/src/html/min/lib/Minify/Cache/APC.php +130 -0
  166. data/template/src/html/min/lib/Minify/Cache/File.php +125 -0
  167. data/template/src/html/min/lib/Minify/Cache/Memcache.php +137 -0
  168. data/template/src/html/min/lib/Minify/ClosureCompiler.php +85 -0
  169. data/template/src/html/min/lib/Minify/CommentPreserver.php +90 -0
  170. data/template/src/html/min/lib/Minify/Controller/Base.php +202 -0
  171. data/template/src/html/min/lib/Minify/Controller/Files.php +78 -0
  172. data/template/src/html/min/lib/Minify/Controller/Groups.php +94 -0
  173. data/template/src/html/min/lib/Minify/Controller/MinApp.php +132 -0
  174. data/template/src/html/min/lib/Minify/Controller/Page.php +82 -0
  175. data/template/src/html/min/lib/Minify/Controller/Version1.php +118 -0
  176. data/template/src/html/min/lib/Minify/HTML.php +245 -0
  177. data/template/src/html/min/lib/Minify/ImportProcessor.php +157 -0
  178. data/template/src/html/min/lib/Minify/Lines.php +131 -0
  179. data/template/src/html/min/lib/Minify/Logger.php +45 -0
  180. data/template/src/html/min/lib/Minify/Packer.php +37 -0
  181. data/template/src/html/min/lib/Minify/Source.php +187 -0
  182. data/template/src/html/min/lib/Minify/YUICompressor.php +139 -0
  183. data/template/src/html/min/lib/Solar/Dir.php +199 -0
  184. data/template/src/html/min/lib/closure-compiler.jar +0 -0
  185. data/template/src/html/min/lib/yuicompressor-2.4.2.jar +0 -0
  186. data/template/src/html/min/utils.php +90 -0
  187. data/template/src/templates/css/template.css +7 -0
  188. data/template/src/templates/js/template.js +72 -0
  189. data/template/src/templates/template.html +18 -0
  190. data/template/src/yaml/config.yml +46 -0
  191. data/template/src/yaml/deploy.yml +35 -0
  192. data/test/bixbite_test.rb +7 -0
  193. data/test/test_helper.rb +10 -0
  194. metadata +278 -0
@@ -0,0 +1,345 @@
1
+ ###############################################################################
2
+ #
3
+ # Package: NaturalDocs::Builder::FramedHTML
4
+ #
5
+ ###############################################################################
6
+ #
7
+ # A package that generates output in HTML with frames.
8
+ #
9
+ # All functions are called with Package->Function() notation.
10
+ #
11
+ ###############################################################################
12
+
13
+ # This file is part of Natural Docs, which is Copyright (C) 2003-2008 Greg Valure
14
+ # Natural Docs is licensed under the GPL
15
+
16
+
17
+ use strict;
18
+ use integer;
19
+
20
+ package NaturalDocs::Builder::FramedHTML;
21
+
22
+ use base 'NaturalDocs::Builder::HTMLBase';
23
+
24
+
25
+ ###############################################################################
26
+ # Group: Implemented Interface Functions
27
+
28
+
29
+ #
30
+ # Function: INIT
31
+ #
32
+ # Registers the package with <NaturalDocs::Builder>.
33
+ #
34
+ sub INIT
35
+ {
36
+ NaturalDocs::Builder->Add(__PACKAGE__);
37
+ };
38
+
39
+
40
+ #
41
+ # Function: CommandLineOption
42
+ #
43
+ # Returns the option to follow -o to use this package. In this case, "html".
44
+ #
45
+ sub CommandLineOption
46
+ {
47
+ return 'FramedHTML';
48
+ };
49
+
50
+
51
+ #
52
+ # Function: BuildFile
53
+ #
54
+ # Builds the output file from the parsed source file.
55
+ #
56
+ # Parameters:
57
+ #
58
+ # sourcefile - The <FileName> of the source file.
59
+ # parsedFile - An arrayref of the source file as <NaturalDocs::Parser::ParsedTopic> objects.
60
+ #
61
+ sub BuildFile #(sourceFile, parsedFile)
62
+ {
63
+ my ($self, $sourceFile, $parsedFile) = @_;
64
+
65
+ my $outputFile = $self->OutputFileOf($sourceFile);
66
+
67
+
68
+ # 99.99% of the time the output directory will already exist, so this will actually be more efficient. It only won't exist
69
+ # if a new file was added in a new subdirectory and this is the first time that file was ever parsed.
70
+ if (!open(OUTPUTFILEHANDLE, '>' . $outputFile))
71
+ {
72
+ NaturalDocs::File->CreatePath( NaturalDocs::File->NoFileName($outputFile) );
73
+
74
+ open(OUTPUTFILEHANDLE, '>' . $outputFile)
75
+ or die "Couldn't create output file " . $outputFile . "\n";
76
+ };
77
+
78
+ print OUTPUTFILEHANDLE
79
+
80
+
81
+
82
+ # IE 6 doesn't like any doctype here at all. Add one (strict or transitional doesn't matter) and it makes the page slightly too
83
+ # wide for the frame. Mozilla and Opera handle it like champs either way because they Don't Suck(tm).
84
+
85
+ # '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" '
86
+ # . '"http://www.w3.org/TR/REC-html40/loose.dtd">' . "\n\n"
87
+
88
+ '<html><head>'
89
+
90
+ . (NaturalDocs::Settings->CharSet() ?
91
+ '<meta http-equiv="Content-Type" content="text/html; charset=' . NaturalDocs::Settings->CharSet() . '">' : '')
92
+
93
+ . '<title>'
94
+ . $self->BuildTitle($sourceFile)
95
+ . '</title>'
96
+
97
+ . '<link rel="stylesheet" type="text/css" href="' . $self->MakeRelativeURL($outputFile, $self->MainCSSFile(), 1) . '">'
98
+
99
+ . '<script language=JavaScript src="' . $self->MakeRelativeURL($outputFile, $self->MainJavaScriptFile(), 1) . '"></script>'
100
+
101
+ . '</head><body class="FramedContentPage" onLoad="NDOnLoad()">'
102
+ . $self->OpeningBrowserStyles()
103
+
104
+ . $self->StandardComments()
105
+
106
+ . "\n\n\n"
107
+ . $self->BuildContent($sourceFile, $parsedFile)
108
+ . "\n\n\n"
109
+
110
+ . $self->BuildToolTips()
111
+
112
+ . $self->ClosingBrowserStyles()
113
+ . '</body></html>';
114
+
115
+
116
+ close(OUTPUTFILEHANDLE);
117
+ };
118
+
119
+
120
+ #
121
+ # Function: BuildIndex
122
+ #
123
+ # Builds an index for the passed type.
124
+ #
125
+ # Parameters:
126
+ #
127
+ # type - The <TopicType> to limit the index to, or undef if none.
128
+ #
129
+ sub BuildIndex #(type)
130
+ {
131
+ my ($self, $type) = @_;
132
+
133
+ my $indexTitle = $self->IndexTitleOf($type);
134
+ my $indexFile = $self->IndexFileOf($type);
135
+
136
+ my $startIndexPage =
137
+
138
+ '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" '
139
+ . '"http://www.w3.org/TR/REC-html40/loose.dtd">' . "\n\n"
140
+
141
+ . '<html><head>'
142
+
143
+ . (NaturalDocs::Settings->CharSet() ?
144
+ '<meta http-equiv="Content-Type" content="text/html; charset=' . NaturalDocs::Settings->CharSet() . '">' : '')
145
+
146
+ . '<title>';
147
+
148
+ if (defined NaturalDocs::Menu->Title())
149
+ { $startIndexPage .= $self->StringToHTML(NaturalDocs::Menu->Title()) . ' - '; };
150
+
151
+ $startIndexPage .=
152
+ $indexTitle
153
+ . '</title>'
154
+
155
+ . '<link rel="stylesheet" type="text/css" href="' . $self->MakeRelativeURL($indexFile, $self->MainCSSFile(), 1) . '">'
156
+
157
+ . '<script language=JavaScript src="' . $self->MakeRelativeURL($indexFile, $self->MainJavaScriptFile(), 1) . '"></script>'
158
+
159
+ . '</head><body class="FramedIndexPage" onLoad="NDOnLoad()">'
160
+ . $self->OpeningBrowserStyles()
161
+
162
+ . "\n\n\n"
163
+ . $self->StandardComments()
164
+ . "\n\n\n"
165
+ . '<div id=Index>'
166
+ . '<div class=IPageTitle>'
167
+ . $indexTitle
168
+ . '</div>';
169
+
170
+
171
+ my $endIndexPage =
172
+
173
+ '</div><!--Index-->'
174
+ . "\n\n\n"
175
+
176
+ . $self->ClosingBrowserStyles()
177
+
178
+ . '</body></html>';
179
+
180
+ my $startSearchResultsPage =
181
+
182
+ '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" '
183
+ . '"http://www.w3.org/TR/REC-html40/loose.dtd">' . "\n\n"
184
+
185
+ . '<html><head>'
186
+
187
+ . (NaturalDocs::Settings->CharSet() ?
188
+ '<meta http-equiv="Content-Type" content="text/html; charset=' . NaturalDocs::Settings->CharSet() . '">' : '')
189
+
190
+ . '<link rel="stylesheet" type="text/css" href="' . $self->MakeRelativeURL($indexFile, $self->MainCSSFile(), 1) . '">'
191
+
192
+ . '<script language=JavaScript src="' . $self->MakeRelativeURL($indexFile, $self->MainJavaScriptFile(), 1) . '"></script>'
193
+ . '<script language=JavaScript src="' . $self->MakeRelativeURL($indexFile, $self->SearchDataJavaScriptFile(), 1) . '">'
194
+ . '</script>'
195
+
196
+ . '</head><body class="FramedSearchResultsPage" onLoad="NDOnLoad()">'
197
+ . $self->OpeningBrowserStyles()
198
+
199
+ . "\n\n\n"
200
+ . $self->StandardComments()
201
+ . "\n\n\n"
202
+
203
+ . '<div id=Index>'
204
+ . '<div class=IPageTitle>'
205
+ . 'Search Results'
206
+ . '</div>';
207
+
208
+ my $endSearchResultsPage =
209
+
210
+ '</div><!--Index-->'
211
+ . "\n\n\n"
212
+
213
+ . $self->ClosingBrowserStyles()
214
+
215
+ . '</body></html>';
216
+
217
+ my $indexContent = NaturalDocs::SymbolTable->Index($type);
218
+ my $pageCount = $self->BuildIndexPages($type, $indexContent, $startIndexPage, $endIndexPage,
219
+ $startSearchResultsPage, $endSearchResultsPage);
220
+ $self->PurgeIndexFiles($type, $indexContent, $pageCount + 1);
221
+ };
222
+
223
+
224
+ #
225
+ # Function: UpdateMenu
226
+ #
227
+ # Builds the menu file. Also generates index.html.
228
+ #
229
+ sub UpdateMenu
230
+ {
231
+ my $self = shift;
232
+
233
+ my $outputDirectory = NaturalDocs::Settings->OutputDirectoryOf($self);
234
+ my $outputFile = NaturalDocs::File->JoinPaths($outputDirectory, 'menu.html');
235
+
236
+
237
+ open(OUTPUTFILEHANDLE, '>' . $outputFile)
238
+ or die "Couldn't create output file " . $outputFile . "\n";
239
+
240
+ my $title = 'Menu';
241
+ if (defined $title)
242
+ { $title .= ' - ' . NaturalDocs::Menu->Title(); };
243
+
244
+ $title = $self->StringToHTML($title);
245
+
246
+
247
+ print OUTPUTFILEHANDLE
248
+
249
+
250
+ '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" '
251
+ . '"http://www.w3.org/TR/REC-html40/loose.dtd">' . "\n\n"
252
+
253
+ . '<html><head>'
254
+
255
+ . (NaturalDocs::Settings->CharSet() ?
256
+ '<meta http-equiv="Content-Type" content="text/html; charset=' . NaturalDocs::Settings->CharSet() . '">' : '')
257
+
258
+ . '<title>'
259
+ . $title
260
+ . '</title>'
261
+
262
+ . '<base target="Content">'
263
+
264
+ . '<link rel="stylesheet" type="text/css" href="' . $self->MakeRelativeURL($outputFile, $self->MainCSSFile(), 1) . '">'
265
+
266
+ . '<script language=JavaScript src="' . $self->MakeRelativeURL($outputFile, $self->MainJavaScriptFile(), 1) . '"></script>'
267
+ . '<script language=JavaScript src="' . $self->MakeRelativeURL($outputFile, $self->SearchDataJavaScriptFile(), 1) . '">'
268
+ . '</script>'
269
+
270
+ . '</head><body class="FramedMenuPage" onLoad="NDOnLoad()">'
271
+ . $self->OpeningBrowserStyles()
272
+
273
+ . $self->StandardComments()
274
+
275
+ . "\n\n\n"
276
+ . $self->BuildMenu(undef, undef)
277
+ . "\n\n\n"
278
+ . $self->BuildFooter(1)
279
+ . "\n\n\n"
280
+
281
+ . $self->ClosingBrowserStyles()
282
+ . '</body></html>';
283
+
284
+
285
+ close(OUTPUTFILEHANDLE);
286
+
287
+
288
+ # Update index.html
289
+
290
+ my $firstMenuEntry = $self->FindFirstFile();
291
+ my $indexFile = NaturalDocs::File->JoinPaths( NaturalDocs::Settings->OutputDirectoryOf($self), 'index.html' );
292
+
293
+ # We have to check because it's possible that there may be no files with Natural Docs content and thus no files on the menu.
294
+ if (defined $firstMenuEntry)
295
+ {
296
+ open(INDEXFILEHANDLE, '>' . $indexFile)
297
+ or die "Couldn't create output file " . $indexFile . ".\n";
298
+
299
+ print INDEXFILEHANDLE
300
+
301
+ '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" '
302
+ . '"http://www.w3.org/TR/REC-html40/frameset.dtd">'
303
+
304
+ . '<html>'
305
+
306
+ . '<head>'
307
+
308
+ . (NaturalDocs::Settings->CharSet() ?
309
+ '<meta http-equiv="Content-Type" content="text/html; charset=' . NaturalDocs::Settings->CharSet() . '">' : '')
310
+
311
+ . '<title>'
312
+ . $self->StringToHTML(NaturalDocs::Menu->Title())
313
+ . '</title>'
314
+
315
+ . '</head>'
316
+
317
+ . $self->StandardComments()
318
+
319
+ . '<frameset cols="185,*">'
320
+ . '<frame name=Menu src="menu.html">'
321
+ . '<frame name=Content src="'
322
+ . $self->MakeRelativeURL($indexFile, $self->OutputFileOf($firstMenuEntry->Target()), 1) . '">'
323
+ . '</frameset>'
324
+
325
+ . '<noframes>'
326
+ . 'This documentation was designed for use with frames. However, you can still use it by '
327
+ . '<a href="menu.html">starting from the menu page</a>.'
328
+ . "<script language=JavaScript><!--\n"
329
+ . 'location.href="menu.html";'
330
+ . "\n// --></script>"
331
+ . '</noframes>'
332
+
333
+ . '</html>';
334
+
335
+ close INDEXFILEHANDLE;
336
+ }
337
+
338
+ elsif (-e $indexFile)
339
+ {
340
+ unlink($indexFile);
341
+ };
342
+ };
343
+
344
+
345
+ 1;
@@ -0,0 +1,398 @@
1
+ ###############################################################################
2
+ #
3
+ # Package: NaturalDocs::Builder::HTML
4
+ #
5
+ ###############################################################################
6
+ #
7
+ # A package that generates output in HTML.
8
+ #
9
+ # All functions are called with Package->Function() notation.
10
+ #
11
+ ###############################################################################
12
+
13
+ # This file is part of Natural Docs, which is Copyright (C) 2003-2008 Greg Valure
14
+ # Natural Docs is licensed under the GPL
15
+
16
+
17
+ use strict;
18
+ use integer;
19
+
20
+ package NaturalDocs::Builder::HTML;
21
+
22
+ use base 'NaturalDocs::Builder::HTMLBase';
23
+
24
+
25
+ ###############################################################################
26
+ # Group: Implemented Interface Functions
27
+
28
+
29
+ #
30
+ # Function: INIT
31
+ #
32
+ # Registers the package with <NaturalDocs::Builder>.
33
+ #
34
+ sub INIT
35
+ {
36
+ NaturalDocs::Builder->Add(__PACKAGE__);
37
+ };
38
+
39
+
40
+ #
41
+ # Function: CommandLineOption
42
+ #
43
+ # Returns the option to follow -o to use this package. In this case, "html".
44
+ #
45
+ sub CommandLineOption
46
+ {
47
+ return 'HTML';
48
+ };
49
+
50
+
51
+ #
52
+ # Function: BuildFile
53
+ #
54
+ # Builds the output file from the parsed source file.
55
+ #
56
+ # Parameters:
57
+ #
58
+ # sourcefile - The <FileName> of the source file.
59
+ # parsedFile - An arrayref of the source file as <NaturalDocs::Parser::ParsedTopic> objects.
60
+ #
61
+ sub BuildFile #(sourceFile, parsedFile)
62
+ {
63
+ my ($self, $sourceFile, $parsedFile) = @_;
64
+
65
+ my $outputFile = $self->OutputFileOf($sourceFile);
66
+
67
+
68
+ # 99.99% of the time the output directory will already exist, so this will actually be more efficient. It only won't exist
69
+ # if a new file was added in a new subdirectory and this is the first time that file was ever parsed.
70
+ if (!open(OUTPUTFILEHANDLE, '>' . $outputFile))
71
+ {
72
+ NaturalDocs::File->CreatePath( NaturalDocs::File->NoFileName($outputFile) );
73
+
74
+ open(OUTPUTFILEHANDLE, '>' . $outputFile)
75
+ or die "Couldn't create output file " . $outputFile . "\n";
76
+ };
77
+
78
+ print OUTPUTFILEHANDLE
79
+
80
+
81
+ '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" '
82
+ . '"http://www.w3.org/TR/REC-html40/strict.dtd">' . "\n\n"
83
+
84
+ . '<html><head>'
85
+
86
+ . (NaturalDocs::Settings->CharSet() ?
87
+ '<meta http-equiv="Content-Type" content="text/html; charset=' . NaturalDocs::Settings->CharSet() . '">' : '')
88
+
89
+ . '<title>'
90
+ . $self->BuildTitle($sourceFile)
91
+ . '</title>'
92
+
93
+ . '<link rel="stylesheet" type="text/css" href="' . $self->MakeRelativeURL($outputFile, $self->MainCSSFile(), 1) . '">'
94
+
95
+ . '<script language=JavaScript src="' . $self->MakeRelativeURL($outputFile, $self->MainJavaScriptFile(), 1) . '">'
96
+ . '</script>'
97
+ . '<script language=JavaScript src="' . $self->MakeRelativeURL($outputFile, $self->SearchDataJavaScriptFile(), 1) . '">'
98
+ . '</script>'
99
+
100
+ . '</head><body class="ContentPage" onLoad="NDOnLoad()">'
101
+ . $self->OpeningBrowserStyles()
102
+
103
+ . $self->StandardComments()
104
+
105
+ . "\n\n\n"
106
+ . $self->BuildContent($sourceFile, $parsedFile)
107
+ . "\n\n\n"
108
+ . $self->BuildFooter()
109
+ . "\n\n\n"
110
+ . $self->BuildMenu($sourceFile, undef)
111
+ . "\n\n\n"
112
+ . $self->BuildToolTips()
113
+ . "\n\n\n"
114
+ . '<div id=MSearchResultsWindow>'
115
+ . '<iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe>'
116
+ . '<a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a>'
117
+ . '</div>'
118
+ . "\n\n\n"
119
+
120
+ . $self->ClosingBrowserStyles()
121
+ . '</body></html>';
122
+
123
+
124
+ close(OUTPUTFILEHANDLE);
125
+ };
126
+
127
+
128
+ #
129
+ # Function: BuildIndex
130
+ #
131
+ # Builds an index for the passed type.
132
+ #
133
+ # Parameters:
134
+ #
135
+ # type - The <TopicType> to limit the index to, or undef if none.
136
+ #
137
+ sub BuildIndex #(type)
138
+ {
139
+ my ($self, $type) = @_;
140
+
141
+ my $indexTitle = $self->IndexTitleOf($type);
142
+
143
+ my $startIndexPage =
144
+
145
+ '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" '
146
+ . '"http://www.w3.org/TR/REC-html40/strict.dtd">' . "\n\n"
147
+
148
+ . '<html><head>'
149
+
150
+ . (NaturalDocs::Settings->CharSet() ?
151
+ '<meta http-equiv="Content-Type" content="text/html; charset=' . NaturalDocs::Settings->CharSet() . '">' : '')
152
+
153
+ . '<title>'
154
+ . $indexTitle;
155
+
156
+ if (defined NaturalDocs::Menu->Title())
157
+ { $startIndexPage .= ' - ' . $self->StringToHTML(NaturalDocs::Menu->Title()); };
158
+
159
+ $startIndexPage .=
160
+ '</title>'
161
+
162
+ . '<link rel="stylesheet" type="text/css" href="' . $self->MakeRelativeURL($self->IndexDirectory(),
163
+ $self->MainCSSFile()) . '">'
164
+
165
+ . '<script language=JavaScript src="' . $self->MakeRelativeURL($self->IndexDirectory(),
166
+ $self->MainJavaScriptFile()) . '"></script>'
167
+ . '<script language=JavaScript src="' . $self->MakeRelativeURL($self->IndexDirectory(),
168
+ $self->SearchDataJavaScriptFile()) . '">'
169
+ . '</script>'
170
+
171
+ . '</head><body class="IndexPage" onLoad="NDOnLoad()">'
172
+ . $self->OpeningBrowserStyles()
173
+
174
+ . $self->StandardComments()
175
+
176
+ . "\n\n\n"
177
+
178
+ . '<div id=Index>'
179
+ . '<div class=IPageTitle>'
180
+ . $indexTitle
181
+ . '</div>';
182
+
183
+ my $endIndexPage =
184
+ '</div><!--Index-->'
185
+
186
+ . "\n\n\n"
187
+ . $self->BuildFooter()
188
+ . "\n\n\n"
189
+ . $self->BuildMenu(undef, $type)
190
+ . "\n\n\n"
191
+ . '<div id=MSearchResultsWindow>'
192
+ . '<iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe>'
193
+ . '<a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a>'
194
+ . '</div>'
195
+ . "\n\n\n"
196
+
197
+ . $self->ClosingBrowserStyles()
198
+ . '</body></html>';
199
+
200
+
201
+ my $startSearchResultsPage =
202
+
203
+ '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" '
204
+ . '"http://www.w3.org/TR/REC-html40/strict.dtd">' . "\n\n"
205
+
206
+ . '<html><head>'
207
+
208
+ . (NaturalDocs::Settings->CharSet() ?
209
+ '<meta http-equiv="Content-Type" content="text/html; charset=' . NaturalDocs::Settings->CharSet() . '">' : '')
210
+
211
+ . '<link rel="stylesheet" type="text/css" href="' . $self->MakeRelativeURL($self->SearchResultsDirectory(),
212
+ $self->MainCSSFile()) . '">'
213
+
214
+ . '<script language=JavaScript src="' . $self->MakeRelativeURL($self->SearchResultsDirectory(),
215
+ $self->MainJavaScriptFile()) . '"></script>'
216
+
217
+ . '</head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()">'
218
+ . $self->OpeningBrowserStyles()
219
+
220
+ . $self->StandardComments()
221
+
222
+ . "\n\n\n"
223
+
224
+ . '<div id=Index>';
225
+
226
+
227
+ my $endSearchResultsPage =
228
+ '</div>'
229
+ . $self->ClosingBrowserStyles()
230
+ . '</body></html>';
231
+
232
+ my $indexContent = NaturalDocs::SymbolTable->Index($type);
233
+ my $pageCount = $self->BuildIndexPages($type, $indexContent, $startIndexPage, $endIndexPage,
234
+ $startSearchResultsPage, $endSearchResultsPage);
235
+ $self->PurgeIndexFiles($type, $indexContent, $pageCount + 1);
236
+ };
237
+
238
+
239
+ #
240
+ # Function: UpdateMenu
241
+ #
242
+ # Updates the menu in all the output files that weren't rebuilt. Also generates index.html.
243
+ #
244
+ sub UpdateMenu
245
+ {
246
+ my $self = shift;
247
+
248
+
249
+ # Update the menu on unbuilt files.
250
+
251
+ my $filesToUpdate = NaturalDocs::Project->UnbuiltFilesWithContent();
252
+
253
+ foreach my $sourceFile (keys %$filesToUpdate)
254
+ {
255
+ $self->UpdateFile($sourceFile);
256
+ };
257
+
258
+
259
+ # Update the menu on unchanged index files.
260
+
261
+ my $indexes = NaturalDocs::Menu->Indexes();
262
+
263
+ foreach my $index (keys %$indexes)
264
+ {
265
+ if (!NaturalDocs::SymbolTable->IndexChanged($index))
266
+ {
267
+ $self->UpdateIndex($index);
268
+ };
269
+ };
270
+
271
+
272
+ # Update index.html
273
+
274
+ my $firstMenuEntry = $self->FindFirstFile();
275
+ my $indexFile = NaturalDocs::File->JoinPaths( NaturalDocs::Settings->OutputDirectoryOf($self), 'index.html' );
276
+
277
+ # We have to check because it's possible that there may be no files with Natural Docs content and thus no files on the menu.
278
+ if (defined $firstMenuEntry)
279
+ {
280
+ open(INDEXFILEHANDLE, '>' . $indexFile)
281
+ or die "Couldn't create output file " . $indexFile . ".\n";
282
+
283
+ print INDEXFILEHANDLE
284
+ '<html><head>'
285
+ . '<meta http-equiv="Refresh" CONTENT="0; URL='
286
+ . $self->MakeRelativeURL( NaturalDocs::File->JoinPaths( NaturalDocs::Settings->OutputDirectoryOf($self), 'index.html'),
287
+ $self->OutputFileOf($firstMenuEntry->Target()), 1 ) . '">'
288
+ . '</head></html>';
289
+
290
+ close INDEXFILEHANDLE;
291
+ }
292
+
293
+ elsif (-e $indexFile)
294
+ {
295
+ unlink($indexFile);
296
+ };
297
+ };
298
+
299
+
300
+
301
+ ###############################################################################
302
+ # Group: Support Functions
303
+
304
+
305
+ #
306
+ # Function: UpdateFile
307
+ #
308
+ # Updates an output file. Replaces the menu, HTML title, and footer. It opens the output file, makes the changes, and saves it
309
+ # back to disk, which is much quicker than rebuilding the file from scratch if these were the only things that changed.
310
+ #
311
+ # Parameters:
312
+ #
313
+ # sourceFile - The source <FileName>.
314
+ #
315
+ # Dependencies:
316
+ #
317
+ # - Requires <Builder::BuildMenu()> to surround its content with the exact strings "<div id=Menu>" and "</div><!--Menu-->".
318
+ # - Requires <Builder::BuildFooter()> to surround its content with the exact strings "<div id=Footer>" and
319
+ # "</div><!--Footer-->".
320
+ #
321
+ sub UpdateFile #(sourceFile)
322
+ {
323
+ my ($self, $sourceFile) = @_;
324
+
325
+ my $outputFile = $self->OutputFileOf($sourceFile);
326
+
327
+ if (open(OUTPUTFILEHANDLE, '<' . $outputFile))
328
+ {
329
+ my $content;
330
+
331
+ read(OUTPUTFILEHANDLE, $content, -s OUTPUTFILEHANDLE);
332
+ close(OUTPUTFILEHANDLE);
333
+
334
+
335
+ $content =~ s{<title>[^<]*<\/title>}{'<title>' . $self->BuildTitle($sourceFile) . '</title>'}e;
336
+
337
+ $content =~ s/<div id=Menu>.*?<\/div><!--Menu-->/$self->BuildMenu($sourceFile, undef)/es;
338
+
339
+ $content =~ s/<div id=Footer>.*?<\/div><!--Footer-->/$self->BuildFooter()/e;
340
+
341
+
342
+ open(OUTPUTFILEHANDLE, '>' . $outputFile);
343
+ print OUTPUTFILEHANDLE $content;
344
+ close(OUTPUTFILEHANDLE);
345
+ };
346
+ };
347
+
348
+
349
+ #
350
+ # Function: UpdateIndex
351
+ #
352
+ # Updates an index's output file. Replaces the menu and footer. It opens the output file, makes the changes, and saves it
353
+ # back to disk, which is much quicker than rebuilding the file from scratch if these were the only things that changed.
354
+ #
355
+ # Parameters:
356
+ #
357
+ # type - The index <TopicType>, or undef if none.
358
+ #
359
+ sub UpdateIndex #(type)
360
+ {
361
+ my ($self, $type) = @_;
362
+
363
+ my $page = 1;
364
+
365
+ my $outputFile = $self->IndexFileOf($type, $page);
366
+
367
+ my $newMenu = $self->BuildMenu(undef, $type);
368
+ my $newFooter = $self->BuildFooter();
369
+
370
+ while (-e $outputFile)
371
+ {
372
+ open(OUTPUTFILEHANDLE, '<' . $outputFile)
373
+ or die "Couldn't open output file " . $outputFile . ".\n";
374
+
375
+ my $content;
376
+
377
+ read(OUTPUTFILEHANDLE, $content, -s OUTPUTFILEHANDLE);
378
+ close(OUTPUTFILEHANDLE);
379
+
380
+
381
+ $content =~ s/<div id=Menu>.*?<\/div><!--Menu-->/$newMenu/es;
382
+
383
+ $content =~ s/<div id=Footer>.*<\/div><!--Footer-->/$newFooter/e;
384
+
385
+
386
+ open(OUTPUTFILEHANDLE, '>' . $outputFile)
387
+ or die "Couldn't save output file " . $outputFile . ".\n";
388
+
389
+ print OUTPUTFILEHANDLE $content;
390
+ close(OUTPUTFILEHANDLE);
391
+
392
+ $page++;
393
+ $outputFile = $self->IndexFileOf($type, $page);
394
+ };
395
+ };
396
+
397
+
398
+ 1;