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,383 @@
1
+ ###############################################################################
2
+ #
3
+ # Package: NaturalDocs::ImageReferenceTable
4
+ #
5
+ ###############################################################################
6
+ #
7
+ # A <NaturalDocs::SourceDB>-based package that manages all the image references appearing in source files.
8
+ #
9
+ ###############################################################################
10
+
11
+ # This file is part of Natural Docs, which is Copyright (C) 2003-2008 Greg Valure
12
+ # Natural Docs is licensed under the GPL
13
+
14
+ use strict;
15
+ use integer;
16
+
17
+ use NaturalDocs::ImageReferenceTable::String;
18
+ use NaturalDocs::ImageReferenceTable::Reference;
19
+
20
+
21
+ package NaturalDocs::ImageReferenceTable;
22
+
23
+ use base 'NaturalDocs::SourceDB::Extension';
24
+
25
+
26
+ ###############################################################################
27
+ # Group: Information
28
+
29
+ #
30
+ # Topic: Usage
31
+ #
32
+ # - <NaturalDocs::Project> and <NaturalDocs::SourceDB> must be initialized before this package can be used.
33
+ #
34
+ # - Call <Register()> before using.
35
+ #
36
+ #
37
+ # Topic: Programming Notes
38
+ #
39
+ # When working on this code, remember that there are three things it has to juggle.
40
+ #
41
+ # - The information in <NaturalDocs::SourceDB>.
42
+ # - Image file references in <NaturalDocs::Project>.
43
+ # - Source file rebuilding on changes.
44
+ #
45
+ # Managing the actual image files will be handled between <NaturalDocs::Project> and the <NaturalDocs::Builder>
46
+ # sub-packages.
47
+ #
48
+ #
49
+ # Topic: Implementation
50
+ #
51
+ # Managing image references is simpler than managing the references in <NaturalDocs::SymbolTable>. In SymbolTable,
52
+ # you have to worry about reference targets popping into and out of existence. A link may go to a file that hasn't been
53
+ # reparsed yet and the target may no longer exist. We have to deal with that when we know it, which may be after the
54
+ # reference's file was parsed. Also, a new definition may appear that serves as a better interpretation of a link than its
55
+ # current target, and again we may only know that after the reference's file has been parsed already. So we have to deal
56
+ # with scores and potential symbols and each symbol knowing exactly what links to it and so forth.
57
+ #
58
+ # Not so with image references. All possible targets (all possible image files) are known by <NaturalDocs::Project> early
59
+ # on and will remain consistent throughout execution. So because of that, we can get away with only storing reference
60
+ # counts with each image and determining exactly where a reference points to as we find them.
61
+ #
62
+ # Reference counts are stored with the image file information in <NaturalDocs::Project>. However, it is not loaded and
63
+ # saved to disk by it. Rather, it is regenerated by this package when it loads <ImageReferenceTable.nd>.
64
+ # NaturalDocs::Project only stores the last modification time (so it can add files to the build list if they've changed) and
65
+ # whether it had any references at all on the last run (so it knows whether it should care if they've changed.)
66
+ # ImageReferenceTable.nd stores each reference's target, width, and height. Whether their interpretations have changed is
67
+ # dealt with in the <Load()> function, again since the list of targets (image files) is constant.
68
+ #
69
+ # The package is based on <NaturalDocs::SourceDB>, so read it's documentation for more information on how it works.
70
+ #
71
+
72
+
73
+ ###############################################################################
74
+ # Group: Variables
75
+
76
+
77
+ #
78
+ # var: extensionID
79
+ # The <ExtensionID> granted by <NaturalDocs::SourceDB>.
80
+ #
81
+ my $extensionID;
82
+
83
+
84
+
85
+ ###############################################################################
86
+ # Group: Files
87
+
88
+
89
+ #
90
+ # File: ImageReferenceTable.nd
91
+ #
92
+ # The data file which stores all the image references from the last run of Natural Docs.
93
+ #
94
+ # Format:
95
+ #
96
+ # > [Standard Binary Header]
97
+ #
98
+ # It starts with the standard binary header from <NaturalDocs::BinaryFile>.
99
+ #
100
+ # > [Image Reference String or undef]
101
+ # > [AString16: target file]
102
+ # > [UInt16: target width or 0]
103
+ # > [UInt16: target height or 0]
104
+ #
105
+ # For each <ImageReferenceString>, it's target, width, and height are stored. The target is needed so we can tell if it
106
+ # changed from the last run, and the dimensions are needed because if the target hasn't changed but the file's dimensions
107
+ # have, the source files need to be rebuilt.
108
+ #
109
+ # <ImageReferenceStrings> are encoded by <NaturalDocs::ImageReferenceTable::String>.
110
+ #
111
+ # > [AString16: definition file or undef] ...
112
+ #
113
+ # Then comes a series of AString16s for all the files that define the reference until it hits an undef.
114
+ #
115
+ # This whole series is repeated for each <ImageReferenceString> until it hits an undef.
116
+ #
117
+ # Revisions:
118
+ #
119
+ # 1.4:
120
+ #
121
+ # - The file was added to Natural Docs.
122
+ #
123
+
124
+
125
+
126
+ ###############################################################################
127
+ # Group: Functions
128
+
129
+
130
+ #
131
+ # Function: Register
132
+ # Registers the package with <NaturalDocs::SourceDB>.
133
+ #
134
+ sub Register
135
+ {
136
+ my $self = shift;
137
+ $extensionID = NaturalDocs::SourceDB->RegisterExtension($self, 0);
138
+ };
139
+
140
+
141
+ #
142
+ # Function: Load
143
+ #
144
+ # Loads the data from <ImageReferenceTable.nd>. Returns whether it was successful.
145
+ #
146
+ sub Load # => bool
147
+ {
148
+ my $self = shift;
149
+
150
+ if (NaturalDocs::Settings->RebuildData())
151
+ { return 0; };
152
+
153
+ # The file format hasn't changed since it was introduced.
154
+ if (!NaturalDocs::BinaryFile->OpenForReading( NaturalDocs::Project->DataFile('ImageReferenceTable.nd') ))
155
+ { return 0; };
156
+
157
+
158
+ # [Image Reference String or undef]
159
+ while (my $referenceString = NaturalDocs::ImageReferenceTable::String->FromBinaryFile())
160
+ {
161
+ NaturalDocs::SourceDB->AddItem($extensionID, $referenceString,
162
+ NaturalDocs::ImageReferenceTable::Reference->New());
163
+
164
+ # [AString16: target file]
165
+ # [UInt16: target width or 0]
166
+ # [UInt16: target height or 0]
167
+
168
+ my $targetFile = NaturalDocs::BinaryFile->GetAString16();
169
+ my $width = NaturalDocs::BinaryFile->GetUInt16();
170
+ my $height = NaturalDocs::BinaryFile->GetUInt16();
171
+
172
+ my $newTargetFile = $self->SetReferenceTarget($referenceString);
173
+ my $newWidth;
174
+ my $newHeight;
175
+
176
+ if ($newTargetFile)
177
+ {
178
+ NaturalDocs::Project->AddImageFileReference($newTargetFile);
179
+ ($newWidth, $newHeight) = NaturalDocs::Project->ImageFileDimensions($newTargetFile);
180
+ };
181
+
182
+ my $rebuildDefinitions = ($newTargetFile ne $targetFile || $newWidth != $width || $newHeight != $height);
183
+
184
+
185
+ # [AString16: definition file or undef] ...
186
+ while (my $definitionFile = NaturalDocs::BinaryFile->GetAString16())
187
+ {
188
+ NaturalDocs::SourceDB->AddDefinition($extensionID, $referenceString, $definitionFile);
189
+
190
+ if ($rebuildDefinitions)
191
+ { NaturalDocs::Project->RebuildFile($definitionFile); };
192
+ };
193
+ };
194
+
195
+
196
+ NaturalDocs::BinaryFile->Close();
197
+ return 1;
198
+ };
199
+
200
+
201
+ #
202
+ # Function: Save
203
+ #
204
+ # Saves the data to <ImageReferenceTable.nd>.
205
+ #
206
+ sub Save
207
+ {
208
+ my $self = shift;
209
+
210
+ my $references = NaturalDocs::SourceDB->GetAllItemsHashRef($extensionID);
211
+
212
+ NaturalDocs::BinaryFile->OpenForWriting( NaturalDocs::Project->DataFile('ImageReferenceTable.nd') );
213
+
214
+ while (my ($referenceString, $referenceObject) = each %$references)
215
+ {
216
+ # [Image Reference String or undef]
217
+ # [AString16: target file]
218
+ # [UInt16: target width or 0]
219
+ # [UInt16: target height or 0]
220
+
221
+ NaturalDocs::ImageReferenceTable::String->ToBinaryFile($referenceString);
222
+
223
+ my $target = $referenceObject->Target();
224
+ my ($width, $height);
225
+
226
+ if ($target)
227
+ { ($width, $height) = NaturalDocs::Project->ImageFileDimensions($target); };
228
+
229
+ NaturalDocs::BinaryFile->WriteAString16( $referenceObject->Target() );
230
+ NaturalDocs::BinaryFile->WriteUInt16( ($width || 0) );
231
+ NaturalDocs::BinaryFile->WriteUInt16( ($height || 0) );
232
+
233
+ # [AString16: definition file or undef] ...
234
+
235
+ my $definitions = $referenceObject->GetAllDefinitionsHashRef();
236
+
237
+ foreach my $definition (keys %$definitions)
238
+ { NaturalDocs::BinaryFile->WriteAString16($definition); };
239
+
240
+ NaturalDocs::BinaryFile->WriteAString16(undef);
241
+ };
242
+
243
+ NaturalDocs::ImageReferenceTable::String->ToBinaryFile(undef);
244
+
245
+ NaturalDocs::BinaryFile->Close();
246
+ };
247
+
248
+
249
+ #
250
+ # Function: AddReference
251
+ #
252
+ # Adds a new image reference.
253
+ #
254
+ sub AddReference #(FileName file, string referenceText)
255
+ {
256
+ my ($self, $file, $referenceText) = @_;
257
+
258
+ my $referenceString = NaturalDocs::ImageReferenceTable::String->Make($file, $referenceText);
259
+
260
+ if (!NaturalDocs::SourceDB->HasItem($extensionID, $referenceString))
261
+ {
262
+ my $referenceObject = NaturalDocs::ImageReferenceTable::Reference->New();
263
+ NaturalDocs::SourceDB->AddItem($extensionID, $referenceString, $referenceObject);
264
+
265
+ my $target = $self->SetReferenceTarget($referenceString);
266
+ if ($target)
267
+ { NaturalDocs::Project->AddImageFileReference($target); };
268
+ };
269
+
270
+ NaturalDocs::SourceDB->AddDefinition($extensionID, $referenceString, $file);
271
+ };
272
+
273
+
274
+ #
275
+ # Function: OnDeletedDefinition
276
+ #
277
+ # Called for each definition deleted by <NaturalDocs::SourceDB>. This is called *after* the definition has been deleted from
278
+ # the database, so don't expect to be able to read it.
279
+ #
280
+ sub OnDeletedDefinition #(ImageReferenceString referenceString, FileName file, bool wasLastDefinition)
281
+ {
282
+ my ($self, $referenceString, $file, $wasLastDefinition) = @_;
283
+
284
+ if ($wasLastDefinition)
285
+ {
286
+ my $referenceObject = NaturalDocs::SourceDB->GetItem($extensionID, $referenceString);
287
+ my $target = $referenceObject->Target();
288
+
289
+ if ($target)
290
+ { NaturalDocs::Project->DeleteImageFileReference($target); };
291
+
292
+ NaturalDocs::SourceDB->DeleteItem($extensionID, $referenceString);
293
+ };
294
+ };
295
+
296
+
297
+ #
298
+ # Function: GetReferenceTarget
299
+ #
300
+ # Returns the image file the reference resolves to, or undef if none.
301
+ #
302
+ # Parameters:
303
+ #
304
+ # sourceFile - The source <FileName> the reference appears in.
305
+ # text - The reference text.
306
+ #
307
+ sub GetReferenceTarget #(FileName sourceFile, string text) => FileName
308
+ {
309
+ my ($self, $sourceFile, $text) = @_;
310
+
311
+ my $referenceString = NaturalDocs::ImageReferenceTable::String->Make($sourceFile, $text);
312
+ my $reference = NaturalDocs::SourceDB->GetItem($extensionID, $referenceString);
313
+
314
+ if (!defined $reference)
315
+ { return undef; }
316
+ else
317
+ { return $reference->Target(); };
318
+ };
319
+
320
+
321
+ #
322
+ # Function: SetReferenceTarget
323
+ #
324
+ # Determines the best target for the passed <ImageReferenceString> and sets it on the
325
+ # <NaturalDocs::ImageReferenceTable::Reference> object. Returns the new target <FileName>. Does *not* add any source
326
+ # files to the bulid list.
327
+ #
328
+ sub SetReferenceTarget #(ImageReferenceString referenceString) => FileName
329
+ {
330
+ my ($self, $referenceString) = @_;
331
+
332
+ my $referenceObject = NaturalDocs::SourceDB->GetItem($extensionID, $referenceString);
333
+ my ($sourcePath, $text) = NaturalDocs::ImageReferenceTable::String->InformationOf($referenceString);
334
+
335
+
336
+ # Try the path relative to the source file first.
337
+
338
+ my $target;
339
+
340
+ my $imageFile = NaturalDocs::File->JoinPaths($sourcePath, $text);
341
+ my $exists = NaturalDocs::Project->ImageFileExists($imageFile);
342
+
343
+
344
+ # Then try relative image directories.
345
+
346
+ if (!$exists)
347
+ {
348
+ my $relativeImageDirectories = NaturalDocs::Settings->RelativeImageDirectories();
349
+
350
+ for (my $i = 0; $i < scalar @$relativeImageDirectories && !$exists; $i++)
351
+ {
352
+ $imageFile = NaturalDocs::File->JoinPaths($sourcePath, $relativeImageDirectories->[$i], 1);
353
+ $imageFile = NaturalDocs::File->JoinPaths($imageFile, $text);
354
+
355
+ $exists = NaturalDocs::Project->ImageFileExists($imageFile);
356
+ };
357
+ };
358
+
359
+
360
+ # Then try absolute image directories.
361
+
362
+ if (!$exists)
363
+ {
364
+ my $imageDirectories = NaturalDocs::Settings->ImageDirectories();
365
+
366
+ for (my $i = 0; $i < scalar @$imageDirectories && !$exists; $i++)
367
+ {
368
+ $imageFile = NaturalDocs::File->JoinPaths($imageDirectories->[$i], $text);
369
+ $exists = NaturalDocs::Project->ImageFileExists($imageFile);
370
+ };
371
+ };
372
+
373
+
374
+ if ($exists)
375
+ { $target = NaturalDocs::Project->ImageFileCapitalization($imageFile); };
376
+ #else leave it as undef.
377
+
378
+ $referenceObject->SetTarget($target);
379
+ return $target;
380
+ };
381
+
382
+
383
+ 1;
@@ -0,0 +1,44 @@
1
+ ###############################################################################
2
+ #
3
+ # Package: NaturalDocs::ImageReferenceTable::Reference
4
+ #
5
+ ###############################################################################
6
+ #
7
+ # A class for references being tracked in <NaturalDocs::SourceDB>.
8
+ #
9
+ ###############################################################################
10
+
11
+ # This file is part of Natural Docs, which is Copyright (C) 2003-2008 Greg Valure
12
+ # Natural Docs is licensed under the GPL
13
+
14
+ use strict;
15
+ use integer;
16
+
17
+
18
+ package NaturalDocs::ImageReferenceTable::Reference;
19
+
20
+ use base 'NaturalDocs::SourceDB::Item';
21
+
22
+
23
+ use NaturalDocs::DefineMembers 'TARGET', 'Target()', 'SetTarget()',
24
+ 'NEEDS_REBUILD', 'NeedsRebuild()', 'SetNeedsRebuild()';
25
+
26
+
27
+ #
28
+ # Variables: Members
29
+ #
30
+ # The following constants are indexes into the object array.
31
+ #
32
+ # TARGET - The image <FileName> this reference resolves to, or undef if none.
33
+ #
34
+
35
+
36
+ #
37
+ # Functions: Member Functions
38
+ #
39
+ # Target - Returns the image <FileName> this reference resolves to, or undef if none.
40
+ # SetTarget - Replaces the image <FileName> this reference resolves to, or undef if none.
41
+ #
42
+
43
+
44
+ 1;
@@ -0,0 +1,110 @@
1
+ ###############################################################################
2
+ #
3
+ # Package: NaturalDocs::ImageReferenceTable::String
4
+ #
5
+ ###############################################################################
6
+ #
7
+ # A package for creating and managing <ImageReferenceStrings>.
8
+ #
9
+ ###############################################################################
10
+
11
+ # This file is part of Natural Docs, which is Copyright (C) 2003-2008 Greg Valure
12
+ # Natural Docs is licensed under the GPL
13
+
14
+ use strict;
15
+ use integer;
16
+
17
+
18
+ package NaturalDocs::ImageReferenceTable::String;
19
+
20
+
21
+ #
22
+ # Type: ImageReferenceString
23
+ #
24
+ # A string representing a unique image reference. It's composed of the reference text and the directory of the source file.
25
+ # The source file name itself isn't included because two files in the same directory with the same reference text will always go
26
+ # to the same targets.
27
+ #
28
+
29
+
30
+ #
31
+ # Function: Make
32
+ #
33
+ # Converts a source <FileName> and the reference text to an <ImageReferenceString>.
34
+ #
35
+ sub Make #(FileName sourceFile, string text) => ImageReferenceString
36
+ {
37
+ my ($self, $sourceFile, $text) = @_;
38
+
39
+ my $path = NaturalDocs::File->NoFileName($sourceFile);
40
+
41
+ # Condense whitespace and remove any separator characters.
42
+ $path =~ tr/ \t\r\n\x1C/ /s;
43
+ $text =~ tr/ \t\r\n\x1C/ /s;
44
+
45
+ return $path . "\x1C" . $text;
46
+ };
47
+
48
+
49
+ #
50
+ # Function: InformationOf
51
+ #
52
+ # Returns the information contained in the <ImageReferenceString> as the array ( path, text ).
53
+ #
54
+ sub InformationOf #(ImageReferenceString referenceString)
55
+ {
56
+ my ($self, $referenceString) = @_;
57
+ return split(/\x1C/, $referenceString);
58
+ };
59
+
60
+
61
+ #
62
+ # Function: ToBinaryFile
63
+ #
64
+ # Writes an <ImageReferenceString> to <NaturalDocs::BinaryFile>. Can also encode an undef.
65
+ #
66
+ # Format:
67
+ #
68
+ # > [AString16: path] [AString16: reference text] ...
69
+ #
70
+ # Undef is represented by the first AString16 being undef.
71
+ #
72
+ sub ToBinaryFile #(ImageReferenceString referenceString)
73
+ {
74
+ my ($self, $referenceString) = @_;
75
+
76
+ if (defined $referenceString)
77
+ {
78
+ my ($path, $text) = split(/\x1C/, $referenceString);
79
+
80
+ NaturalDocs::BinaryFile->WriteAString16($path);
81
+ NaturalDocs::BinaryFile->WriteAString16($text);
82
+ }
83
+ else
84
+ {
85
+ NaturalDocs::BinaryFile->WriteAString16(undef);
86
+ };
87
+ };
88
+
89
+
90
+ #
91
+ # Function: FromBinaryFile
92
+ #
93
+ # Loads an <ImageReferenceString> or undef from <NaturalDocs::BinaryFile> and returns it.
94
+ #
95
+ sub FromBinaryFile
96
+ {
97
+ my $self = shift;
98
+
99
+ my $path = NaturalDocs::BinaryFile->GetAString16();
100
+
101
+ if (!defined $path)
102
+ { return undef; };
103
+
104
+ my $text = NaturalDocs::BinaryFile->GetAString16();
105
+
106
+ return $path . "\x1C" . $text;
107
+ };
108
+
109
+
110
+ 1;