bixbite 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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;