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,464 @@
1
+ ###############################################################################
2
+ #
3
+ # Package: NaturalDocs::Parser::JavaDoc
4
+ #
5
+ ###############################################################################
6
+ #
7
+ # A package for translating JavaDoc topics into Natural Docs.
8
+ #
9
+ # Supported tags:
10
+ #
11
+ # - @param
12
+ # - @author
13
+ # - @deprecated
14
+ # - @code, @literal (doesn't change font)
15
+ # - @exception, @throws (doesn't link to class)
16
+ # - @link, @linkplain (doesn't change font)
17
+ # - @return, @returns
18
+ # - @see
19
+ # - @since
20
+ # - @value (shown as link instead of replacement)
21
+ # - @version
22
+ #
23
+ # Stripped tags:
24
+ #
25
+ # - @inheritDoc
26
+ # - @serial, @serialField, @serialData
27
+ # - All other block level tags.
28
+ #
29
+ # Unsupported tags:
30
+ #
31
+ # These will appear literally in the output because I cannot handle them easily.
32
+ #
33
+ # - @docRoot
34
+ # - Any other tags not mentioned
35
+ #
36
+ # Supported HTML:
37
+ #
38
+ # - p
39
+ # - b, i, u
40
+ # - pre
41
+ # - a href
42
+ # - ol, ul, li (ol gets converted to ul)
43
+ # - gt, lt, amp, quot, nbsp entities
44
+ #
45
+ # Stripped HTML:
46
+ #
47
+ # - code
48
+ # - HTML comments
49
+ #
50
+ # Unsupported HTML:
51
+ #
52
+ # These will appear literally in the output because I cannot handle them easily.
53
+ #
54
+ # - Any tags with additional properties other than a href. (ex. <p class=Something>)
55
+ # - Any other tags not mentioned
56
+ #
57
+ # Reference:
58
+ #
59
+ # http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/javadoc.html
60
+ #
61
+ ###############################################################################
62
+
63
+ # This file is part of Natural Docs, which is Copyright (C) 2003-2008 Greg Valure
64
+ # Natural Docs is licensed under the GPL
65
+
66
+ use strict;
67
+ use integer;
68
+
69
+ package NaturalDocs::Parser::JavaDoc;
70
+
71
+
72
+ #
73
+ # hash: blockTags
74
+ # An existence hash of the all-lowercase JavaDoc block tags, not including the @.
75
+ #
76
+ my %blockTags = ( 'param' => 1, 'author' => 1, 'deprecated' => 1, 'exception' => 1, 'return' => 1, 'see' => 1,
77
+ 'serial' => 1, 'serialfield' => 1, 'serialdata' => 1, 'since' => 1, 'throws' => 1, 'version' => 1,
78
+ 'returns' => 1 );
79
+
80
+ #
81
+ # hash: inlineTags
82
+ # An existence hash of the all-lowercase JavaDoc inline tags, not including the @.
83
+ #
84
+ my %inlineTags = ( 'inheritdoc' => 1, 'docroot' => 1, 'code' => 1, 'literal' => 1, 'link' => 1, 'linkplain' => 1, 'value' => 1 );
85
+
86
+
87
+ ##
88
+ # Examines the comment and returns whether it is *definitely* JavaDoc content, i.e. is owned by this package.
89
+ #
90
+ # Parameters:
91
+ #
92
+ # commentLines - An arrayref of the comment lines. Must have been run through <NaturalDocs::Parser->CleanComment()>.
93
+ # isJavaDoc - Whether the comment is JavaDoc styled. This doesn't necessarily mean it has JavaDoc content.
94
+ #
95
+ # Returns:
96
+ #
97
+ # Whether the comment is *definitely* JavaDoc content.
98
+ #
99
+ sub IsMine #(string[] commentLines, bool isJavaDoc)
100
+ {
101
+ my ($self, $commentLines, $isJavaDoc) = @_;
102
+
103
+ if (!$isJavaDoc)
104
+ { return undef; };
105
+
106
+ for (my $line = 0; $line < scalar @$commentLines; $line++)
107
+ {
108
+ if ($commentLines->[$line] =~ /^ *@([a-z]+) /i && exists $blockTags{$1} ||
109
+ $commentLines->[$line] =~ /\{@([a-z]+) /i && exists $inlineTags{$1})
110
+ {
111
+ return 1;
112
+ };
113
+ };
114
+
115
+ return 0;
116
+ };
117
+
118
+
119
+ ##
120
+ # Parses the JavaDoc-syntax comment and adds it to the parsed topic list.
121
+ #
122
+ # Parameters:
123
+ #
124
+ # commentLines - An arrayref of the comment lines. Must have been run through <NaturalDocs::Parser->CleanComment()>.
125
+ # *The original memory will be changed.*
126
+ # isJavaDoc - Whether the comment is JavaDoc styled. This doesn't necessarily mean it has JavaDoc content.
127
+ # lineNumber - The line number of the first of the comment lines.
128
+ # parsedTopics - A reference to the array where any new <NaturalDocs::Parser::ParsedTopics> should be placed.
129
+ #
130
+ # Returns:
131
+ #
132
+ # The number of parsed topics added to the array, which in this case will always be one.
133
+ #
134
+ sub ParseComment #(string[] commentLines, bool isJavaDoc, int lineNumber, ParsedTopics[]* parsedTopics)
135
+ {
136
+ my ($self, $commentLines, $isJavaDoc, $lineNumber, $parsedTopics) = @_;
137
+
138
+
139
+ # Stage one: Before block level tags.
140
+
141
+ my $i = 0;
142
+ my $output;
143
+ my $unformattedText;
144
+ my $inCode;
145
+ my $sharedCodeIndent;
146
+
147
+ while ($i < scalar @$commentLines &&
148
+ !($commentLines->[$i] =~ /^ *@([a-z]+) /i && exists $blockTags{$1}) )
149
+ {
150
+ my $line = $self->ConvertAmpChars($commentLines->[$i]);
151
+ my @tokens = split(/(&lt;\/?pre&gt;)/, $line);
152
+
153
+ foreach my $token (@tokens)
154
+ {
155
+ if ($token =~ /^&lt;pre&gt;$/i)
156
+ {
157
+ if (!$inCode && $unformattedText)
158
+ {
159
+ $output .= '<p>' . $self->FormatText($unformattedText, 1) . '</p>';
160
+ };
161
+
162
+ $inCode = 1;
163
+ $unformattedText = undef;
164
+ }
165
+ elsif ($token =~ /^&lt;\/pre&gt;$/i)
166
+ {
167
+ if ($inCode && $unformattedText)
168
+ {
169
+ $unformattedText =~ s/^ {$sharedCodeIndent}//mg;
170
+ $unformattedText =~ s/\n{3,}/\n\n/g;
171
+ $unformattedText =~ s/\n+$//;
172
+ $output .= '<code>' . $unformattedText . '</code>';
173
+
174
+ $sharedCodeIndent = undef;
175
+ };
176
+
177
+ $inCode = 0;
178
+ $unformattedText = undef;
179
+ }
180
+ elsif (length($token))
181
+ {
182
+ if (!$inCode)
183
+ {
184
+ $token =~ s/^ +//;
185
+ if ($unformattedText)
186
+ { $unformattedText .= ' '; };
187
+ }
188
+ else
189
+ {
190
+ $token =~ /^( *)/;
191
+ my $indent = length($1);
192
+
193
+ if (!defined $sharedCodeIndent || $indent < $sharedCodeIndent)
194
+ { $sharedCodeIndent = $indent; };
195
+ };
196
+
197
+ $unformattedText .= $token;
198
+ };
199
+ };
200
+
201
+ if ($inCode && $unformattedText)
202
+ { $unformattedText .= "\n"; };
203
+
204
+ $i++;
205
+ };
206
+
207
+ if ($unformattedText)
208
+ {
209
+ if ($inCode)
210
+ {
211
+ $unformattedText =~ s/^ {$sharedCodeIndent}//mg;
212
+ $unformattedText =~ s/\n{3,}/\n\n/g;
213
+ $unformattedText =~ s/\n+$//;
214
+ $output .= '<code>' . $unformattedText . '</code>';
215
+ }
216
+ else
217
+ { $output .= '<p>' . $self->FormatText($unformattedText, 1) . '</p>'; };
218
+
219
+ $unformattedText = undef;
220
+ };
221
+
222
+
223
+ # Stage two: Block level tags.
224
+
225
+ my ($keyword, $value, $unformattedTextPtr, $unformattedTextCloser);
226
+ my ($params, $authors, $deprecation, $throws, $returns, $seeAlso, $since, $version);
227
+
228
+
229
+ while ($i < scalar @$commentLines)
230
+ {
231
+ my $line = $self->ConvertAmpChars($commentLines->[$i]);
232
+ $line =~ s/^ +//;
233
+
234
+ if ($line =~ /^@([a-z]+) ?(.*)$/i)
235
+ {
236
+ ($keyword, $value) = (lc($1), $2);
237
+
238
+ # Process the previous one, if any.
239
+ if ($unformattedText)
240
+ {
241
+ $$unformattedTextPtr .= $self->FormatText($unformattedText) . $unformattedTextCloser;
242
+ $unformattedText = undef;
243
+ };
244
+
245
+ if ($keyword eq 'param')
246
+ {
247
+ $value =~ /^([a-z0-9_]+) *(.*)$/i;
248
+
249
+ $params .= '<de>' . $1 . '</de><dd>';
250
+ $unformattedText = $2;
251
+
252
+ $unformattedTextPtr = \$params;
253
+ $unformattedTextCloser = '</dd>';
254
+ }
255
+ elsif ($keyword eq 'exception' || $keyword eq 'throws')
256
+ {
257
+ $value =~ /^([a-z0-9_]+) *(.*)$/i;
258
+
259
+ $throws .= '<de>' . $1 . '</de><dd>';
260
+ $unformattedText = $2;
261
+
262
+ $unformattedTextPtr = \$throws;
263
+ $unformattedTextCloser = '</dd>';
264
+ }
265
+ elsif ($keyword eq 'return' || $keyword eq 'returns')
266
+ {
267
+ if ($returns)
268
+ { $returns .= ' '; };
269
+
270
+ $unformattedText = $value;
271
+ $unformattedTextPtr = \$returns;
272
+ $unformattedTextCloser = undef;
273
+ }
274
+ elsif ($keyword eq 'author')
275
+ {
276
+ if ($authors)
277
+ { $authors .= ', '; };
278
+
279
+ $unformattedText = $value;
280
+ $unformattedTextPtr = \$authors;
281
+ $unformattedTextCloser = undef;
282
+ }
283
+ elsif ($keyword eq 'deprecated')
284
+ {
285
+ if ($deprecation)
286
+ { $deprecation .= ' '; };
287
+
288
+ $unformattedText = $value;
289
+ $unformattedTextPtr = \$deprecation;
290
+ $unformattedTextCloser = undef;
291
+ }
292
+ elsif ($keyword eq 'since')
293
+ {
294
+ if ($since)
295
+ { $since .= ', '; };
296
+
297
+ $unformattedText = $value;
298
+ $unformattedTextPtr = \$since;
299
+ $unformattedTextCloser = undef;
300
+ }
301
+ elsif ($keyword eq 'version')
302
+ {
303
+ if ($version)
304
+ { $version .= ', '; };
305
+
306
+ $unformattedText = $value;
307
+ $unformattedTextPtr = \$version;
308
+ $unformattedTextCloser = undef;
309
+ }
310
+ elsif ($keyword eq 'see')
311
+ {
312
+ if ($seeAlso)
313
+ { $seeAlso .= ', '; };
314
+
315
+ $unformattedText = undef;
316
+
317
+ if ($value =~ /^&(?:quot|lt);/i)
318
+ { $seeAlso .= $self->FormatText($value); }
319
+ else
320
+ { $seeAlso .= $self->ConvertLink($value); };
321
+ };
322
+
323
+ # Everything else will be skipped.
324
+ }
325
+ elsif ($unformattedText)
326
+ {
327
+ $unformattedText .= ' ' . $line;
328
+ };
329
+
330
+ $i++;
331
+ };
332
+
333
+ if ($unformattedText)
334
+ {
335
+ $$unformattedTextPtr .= $self->FormatText($unformattedText) . $unformattedTextCloser;
336
+ $unformattedText = undef;
337
+ };
338
+
339
+ if ($params)
340
+ { $output .= '<h>Parameters</h><dl>' . $params . '</dl>'; };
341
+ if ($returns)
342
+ { $output .= '<h>Returns</h><p>' . $returns . '</p>'; };
343
+ if ($throws)
344
+ { $output .= '<h>Throws</h><dl>' . $throws . '</dl>'; };
345
+ if ($since)
346
+ { $output .= '<h>Since</h><p>' . $since . '</p>'; };
347
+ if ($version)
348
+ { $output .= '<h>Version</h><p>' . $version . '</p>'; };
349
+ if ($deprecation)
350
+ { $output .= '<h>Deprecated</h><p>' . $deprecation . '</p>'; };
351
+ if ($authors)
352
+ { $output .= '<h>Author</h><p>' . $authors . '</p>'; };
353
+ if ($seeAlso)
354
+ { $output .= '<h>See Also</h><p>' . $seeAlso . '</p>'; };
355
+
356
+
357
+ # Stage three: Build the parsed topic.
358
+
359
+ my $summary = NaturalDocs::Parser->GetSummaryFromBody($output);
360
+
361
+ push @$parsedTopics, NaturalDocs::Parser::ParsedTopic->New(undef, undef, undef, undef, undef, $summary,
362
+ $output, $lineNumber, undef);
363
+ return 1;
364
+ };
365
+
366
+
367
+ ##
368
+ # Translates any inline tags or HTML codes to <NDMarkup> and returns it.
369
+ #
370
+ sub FormatText #(string text, bool inParagraph)
371
+ {
372
+ my ($self, $text, $inParagraph) = @_;
373
+
374
+ # JavaDoc Literal
375
+
376
+ $text =~ s/\{\@(?:code|literal) ([^\}]*)\}/$self->ConvertAmpChars($1)/gie;
377
+
378
+
379
+ # HTML
380
+
381
+ $text =~ s/&lt;b&gt;(.*?)&lt;\/b&gt;/<b>$1<\/b>/gi;
382
+ $text =~ s/&lt;i&gt;(.*?)&lt;\/i&gt;/<i>$1<\/i>/gi;
383
+ $text =~ s/&lt;u&gt;(.*?)&lt;\/u&gt;/<u>$1<\/u>/gi;
384
+
385
+ $text =~ s/&lt;code&gt;(.*?)&lt;\/code&gt;/$1/gi;
386
+
387
+ $text =~ s/&lt;ul.*?&gt;(.*?)&lt;\/ul&gt;/<ul>$1<\/ul>/gi;
388
+ $text =~ s/&lt;ol.*?&gt;(.*?)&lt;\/ol&gt;/<ul>$1<\/ul>/gi;
389
+ $text =~ s/&lt;li.*?&gt;(.*?)&lt;\/li&gt;/<li>$1<\/li>/gi;
390
+
391
+ $text =~ s/&lt;!--.*?--&gt;//gi;
392
+
393
+ $text =~ s/&lt;\/p&gt;//gi;
394
+ $text =~ s/^&lt;p&gt;//i;
395
+ if ($inParagraph)
396
+ { $text =~ s/&lt;p&gt;/<\/p><p>/gi; }
397
+ else
398
+ { $text =~ s/&lt;p&gt;//gi; };
399
+
400
+ $text =~ s/&lt;a href=&quot;mailto:(.*?)&quot;.*?&gt;(.*?)&lt;\/a&gt;/$self->MakeEMailLink($1, $2)/gie;
401
+ $text =~ s/&lt;a href=&quot;(.*?)&quot;.*?&gt;(.*?)&lt;\/a&gt;/$self->MakeURLLink($1, $2)/gie;
402
+
403
+ $text =~ s/&amp;nbsp;/ /gi;
404
+ $text =~ s/&amp;amp;/&amp;/gi;
405
+ $text =~ s/&amp;gt;/&gt;/gi;
406
+ $text =~ s/&amp;lt;/&lt;/gi;
407
+ $text =~ s/&amp;quot;/&quot;/gi;
408
+
409
+
410
+
411
+ # JavaDoc
412
+
413
+ $text =~ s/\{\@inheritdoc\}//gi;
414
+ $text =~ s/\{\@(?:linkplain|link|value) ([^\}]*)\}/$self->ConvertLink($1)/gie;
415
+
416
+ return $text;
417
+ };
418
+
419
+
420
+ sub ConvertAmpChars #(text)
421
+ {
422
+ my ($self, $text) = @_;
423
+
424
+ $text =~ s/&/&amp;/g;
425
+ $text =~ s/</&lt;/g;
426
+ $text =~ s/>/&gt;/g;
427
+ $text =~ s/"/&quot;/g;
428
+
429
+ return $text;
430
+ };
431
+
432
+ sub ConvertLink #(text)
433
+ {
434
+ my ($self, $text) = @_;
435
+
436
+ $text =~ /^ *([a-z0-9\_\.\:\#]+(?:\([^\)]*\))?) *(.*)$/i;
437
+ my ($target, $label) = ($1, $2);
438
+
439
+ # Convert the anchor to part of the link, but remove it altogether if it's the beginning of the link.
440
+ $target =~ s/^\#//;
441
+ $target =~ s/\#/\./;
442
+
443
+ $label =~ s/ +$//;
444
+
445
+ if (!length $label)
446
+ { return '<link target="' . $target . '" name="' . $target . '" original="' . $target . '">'; }
447
+ else
448
+ { return '<link target="' . $target . '" name="' . $label . '" original="' . $label . ' (' . $target . ')">'; };
449
+ };
450
+
451
+ sub MakeURLLink #(target, text)
452
+ {
453
+ my ($self, $target, $text) = @_;
454
+ return '<url target="' . $target . '" name="' . $text . '">';
455
+ };
456
+
457
+ sub MakeEMailLink #(target, text)
458
+ {
459
+ my ($self, $target, $text) = @_;
460
+ return '<email target="' . $target . '" name="' . $text . '">';
461
+ };
462
+
463
+
464
+ 1;