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,412 @@
1
+ ###############################################################################
2
+ #
3
+ # Class: NaturalDocs::ClassHierarchy::Class
4
+ #
5
+ ###############################################################################
6
+ #
7
+ # An object that stores information about a class in the hierarchy. It does not store its <SymbolString>; it assumes that it will
8
+ # be stored in a hashref where the key is the <SymbolString>.
9
+ #
10
+ ###############################################################################
11
+
12
+ # This file is part of Natural Docs, which is Copyright (C) 2003-2008 Greg Valure
13
+ # Natural Docs is licensed under the GPL
14
+
15
+ use strict;
16
+ use integer;
17
+
18
+ package NaturalDocs::ClassHierarchy::Class;
19
+
20
+
21
+ #
22
+ # Constants: Members
23
+ #
24
+ # The class is implemented as a blessed arrayref. The keys are the constants below.
25
+ #
26
+ # DEFINITIONS - An existence hashref of all the <FileNames> which define this class. Undef if none.
27
+ # PARENTS - An existence hashref of the <SymbolStrings> of all the parents this class has.
28
+ # CHILDREN - An existence hashref of the <SymbolStrings> of all the children this class has.
29
+ # PARENT_REFERENCES - A hashref of the parent <ReferenceStrings> this class has. The keys are the <ReferenceStrings>,
30
+ # and the values are existence hashrefs of all the <FileNames> that define them. Undef if none.
31
+ #
32
+ use NaturalDocs::DefineMembers 'DEFINITIONS', 'PARENTS', 'CHILDREN', 'PARENT_REFERENCES';
33
+ # Dependency: New() depends on the order of these constants, as well as the class not being derived from any other.
34
+
35
+
36
+ ###############################################################################
37
+ # Group: Modification Functions
38
+
39
+
40
+ #
41
+ # Function: New
42
+ #
43
+ # Creates and returns a new class.
44
+ #
45
+ sub New
46
+ {
47
+ # Dependency: This function depends on the order of the constants, as well as the class not being derived from any other.
48
+ my ($package, $definitionFile) = @_;
49
+
50
+ my $object = [ undef, undef, undef, undef ];
51
+ bless $object, $package;
52
+
53
+ return $object;
54
+ };
55
+
56
+
57
+ #
58
+ # Function: AddDefinition
59
+ #
60
+ # Adds a rew definition of this class and returns if that was the first definition.
61
+ #
62
+ # Parameters:
63
+ #
64
+ # file - The <FileName> the definition appears in.
65
+ #
66
+ # Returns:
67
+ #
68
+ # Whether this was the first definition of this class.
69
+ #
70
+ sub AddDefinition #(file)
71
+ {
72
+ my ($self, $file) = @_;
73
+
74
+ my $wasFirst;
75
+
76
+ if (!defined $self->[DEFINITIONS])
77
+ {
78
+ $self->[DEFINITIONS] = { };
79
+ $wasFirst = 1;
80
+ };
81
+
82
+ $self->[DEFINITIONS]->{$file} = 1;
83
+
84
+ return $wasFirst;
85
+ };
86
+
87
+
88
+ #
89
+ # Function: DeleteDefinition
90
+ #
91
+ # Removes the definition of this class and returns if there are no more definitions. Note that if there are no more
92
+ # definitions, you may still want to keep the object around if <HasChildren()> returns true.
93
+ #
94
+ # Parameters:
95
+ #
96
+ # file - The <FileName> the definition appears in.
97
+ #
98
+ # Returns:
99
+ #
100
+ # Whether this deleted the last definition of this class.
101
+ #
102
+ sub DeleteDefinition #(file)
103
+ {
104
+ my ($self, $file) = @_;
105
+
106
+ if (defined $self->[DEFINITIONS])
107
+ {
108
+ delete $self->[DEFINITIONS]->{$file};
109
+
110
+ if (!scalar keys %{$self->[DEFINITIONS]})
111
+ {
112
+ $self->[DEFINITIONS] = undef;
113
+ return 1;
114
+ };
115
+ };
116
+
117
+ return undef;
118
+ };
119
+
120
+
121
+ #
122
+ # Function: AddParentReference
123
+ #
124
+ # Adds a parent reference to the class and return whether it resulted in a new parent class.
125
+ #
126
+ # Parameters:
127
+ #
128
+ # reference - The <ReferenceString> used to determine the parent.
129
+ # file - The <FileName> the parent reference is in.
130
+ # referenceTranslations - A hashref of what each reference currently resolves to. The keys are the
131
+ # <ReferenceStrings> and the values are class <SymbolStrings>. It should include an entry for
132
+ # the reference parameter above.
133
+ #
134
+ # Returns:
135
+ #
136
+ # If the reference adds a new parent, it will return that parent's <SymbolString>. Otherwise it will return undef.
137
+ #
138
+ sub AddParentReference #(reference, file, referenceTranslations)
139
+ {
140
+ my ($self, $reference, $file, $referenceTranslations) = @_;
141
+
142
+ if (!defined $self->[PARENT_REFERENCES])
143
+ { $self->[PARENT_REFERENCES] = { }; };
144
+ if (!defined $self->[PARENTS])
145
+ { $self->[PARENTS] = { }; };
146
+
147
+
148
+ if (!exists $self->[PARENT_REFERENCES]->{$reference})
149
+ {
150
+ $self->[PARENT_REFERENCES]->{$reference} = { $file => 1 };
151
+
152
+ my $symbol = $referenceTranslations->{$reference};
153
+
154
+ if (!exists $self->[PARENTS]->{$symbol})
155
+ {
156
+ $self->[PARENTS]->{$symbol} = 1;
157
+ return $symbol;
158
+ }
159
+ else
160
+ { return undef; };
161
+ }
162
+ else
163
+ {
164
+ $self->[PARENT_REFERENCES]->{$reference}->{$file} = 1;
165
+ return undef;
166
+ };
167
+ };
168
+
169
+ #
170
+ # Function: DeleteParentReference
171
+ #
172
+ # Deletes a parent reference from the class and return whether it resulted in a loss of a parent class.
173
+ #
174
+ # Parameters:
175
+ #
176
+ # reference - The <ReferenceString> used to determine the parent.
177
+ # file - The <FileName> the parent declaration is in.
178
+ # referenceTranslations - A hashref of what each reference currently resolves to. The keys are the
179
+ # <ReferenceStrings> and the values are class <SymbolStrings>. It should include an entry for
180
+ # the reference parameter above.
181
+ #
182
+ # Returns:
183
+ #
184
+ # If this causes a parent class to be lost, it will return that parent's <SymbolString>. Otherwise it will return undef.
185
+ #
186
+ sub DeleteParentReference #(reference, file, referenceTranslations)
187
+ {
188
+ my ($self, $reference, $file, $referenceTranslations) = @_;
189
+
190
+ if (defined $self->[PARENT_REFERENCES] && exists $self->[PARENT_REFERENCES]->{$reference} &&
191
+ exists $self->[PARENT_REFERENCES]->{$reference}->{$file})
192
+ {
193
+ delete $self->[PARENT_REFERENCES]->{$reference}->{$file};
194
+
195
+ # Quit if there are other definitions of this reference.
196
+ if (scalar keys %{$self->[PARENT_REFERENCES]->{$reference}})
197
+ { return undef; };
198
+
199
+ delete $self->[PARENT_REFERENCES]->{$reference};
200
+
201
+ if (!scalar keys %{$self->[PARENT_REFERENCES]})
202
+ { $self->[PARENT_REFERENCES] = undef; };
203
+
204
+ my $parent = $referenceTranslations->{$reference};
205
+
206
+ # Check if any other references resolve to the same parent.
207
+ if (defined $self->[PARENT_REFERENCES])
208
+ {
209
+ foreach my $parentReference (keys %{$self->[PARENT_REFERENCES]})
210
+ {
211
+ if ($referenceTranslations->{$parentReference} eq $parent)
212
+ { return undef; };
213
+ };
214
+ };
215
+
216
+ # If we got this far, no other parent references resolve to this symbol.
217
+
218
+ delete $self->[PARENTS]->{$parent};
219
+
220
+ if (!scalar keys %{$self->[PARENTS]})
221
+ { $self->[PARENTS] = undef; };
222
+
223
+ return $parent;
224
+ }
225
+ else
226
+ { return undef; };
227
+ };
228
+
229
+
230
+ #
231
+ # Function: AddChild
232
+ # Adds a child <SymbolString> to the class. Unlike <AddParentReference()>, this does not keep track of anything other than
233
+ # whether it has it or not.
234
+ #
235
+ # Parameters:
236
+ #
237
+ # child - The <SymbolString> to add.
238
+ #
239
+ sub AddChild #(child)
240
+ {
241
+ my ($self, $child) = @_;
242
+
243
+ if (!defined $self->[CHILDREN])
244
+ { $self->[CHILDREN] = { }; };
245
+
246
+ $self->[CHILDREN]->{$child} = 1;
247
+ };
248
+
249
+ #
250
+ # Function: DeleteChild
251
+ # Deletes a child <SymbolString> from the class. Unlike <DeleteParentReference()>, this does not keep track of anything other
252
+ # than whether it has it or not.
253
+ #
254
+ # Parameters:
255
+ #
256
+ # child - The <SymbolString> to delete.
257
+ #
258
+ sub DeleteChild #(child)
259
+ {
260
+ my ($self, $child) = @_;
261
+
262
+ if (defined $self->[CHILDREN])
263
+ {
264
+ delete $self->[CHILDREN]->{$child};
265
+
266
+ if (!scalar keys %{$self->[CHILDREN]})
267
+ { $self->[CHILDREN] = undef; };
268
+ };
269
+ };
270
+
271
+
272
+
273
+ ###############################################################################
274
+ # Group: Information Functions
275
+
276
+ #
277
+ # Function: Definitions
278
+ # Returns an array of the <FileNames> that define this class, or an empty array if none.
279
+ #
280
+ sub Definitions
281
+ {
282
+ my ($self) = @_;
283
+
284
+ if (defined $self->[DEFINITIONS])
285
+ { return keys %{$self->[DEFINITIONS]}; }
286
+ else
287
+ { return ( ); };
288
+ };
289
+
290
+ #
291
+ # Function: IsDefinedIn
292
+ # Returns whether the class is defined in the passed <FileName>.
293
+ #
294
+ sub IsDefinedIn #(file)
295
+ {
296
+ my ($self, $file) = @_;
297
+
298
+ if (defined $self->[DEFINITIONS])
299
+ { return exists $self->[DEFINITIONS]->{$file}; }
300
+ else
301
+ { return 0; };
302
+ };
303
+
304
+ #
305
+ # Function: IsDefined
306
+ # Returns whether the class is defined in any files.
307
+ #
308
+ sub IsDefined
309
+ {
310
+ my ($self) = @_;
311
+ return defined $self->[DEFINITIONS];
312
+ };
313
+
314
+ #
315
+ # Function: ParentReferences
316
+ # Returns an array of the parent <ReferenceStrings>, or an empty array if none.
317
+ #
318
+ sub ParentReferences
319
+ {
320
+ my ($self) = @_;
321
+
322
+ if (defined $self->[PARENT_REFERENCES])
323
+ { return keys %{$self->[PARENT_REFERENCES]}; }
324
+ else
325
+ { return ( ); };
326
+ };
327
+
328
+ #
329
+ # Function: HasParentReference
330
+ # Returns whether the class has the passed parent <ReferenceString>.
331
+ #
332
+ sub HasParentReference #(reference)
333
+ {
334
+ my ($self, $reference) = @_;
335
+ return (defined $self->[PARENT_REFERENCES] && exists $self->[PARENT_REFERENCES]->{$reference});
336
+ };
337
+
338
+ #
339
+ # Function: HasParentReferences
340
+ # Returns whether the class has any parent <ReferenceStrings>.
341
+ #
342
+ sub HasParentReferences
343
+ {
344
+ my ($self) = @_;
345
+ return defined $self->[PARENT_REFERENCES];
346
+ };
347
+
348
+ #
349
+ # Function: Parents
350
+ # Returns an array of the parent <SymbolStrings>, or an empty array if none.
351
+ #
352
+ sub Parents
353
+ {
354
+ my ($self) = @_;
355
+
356
+ if (defined $self->[PARENTS])
357
+ { return keys %{$self->[PARENTS]}; }
358
+ else
359
+ { return ( ); };
360
+ };
361
+
362
+ #
363
+ # Function: HasParents
364
+ # Returns whether the class has any parent <SymbolStrings> defined.
365
+ #
366
+ sub HasParents
367
+ {
368
+ my ($self) = @_;
369
+ return defined $self->[PARENTS];
370
+ };
371
+
372
+ #
373
+ # Function: Children
374
+ # Returns an array of the child <SymbolStrings>, or an empty array if none.
375
+ #
376
+ sub Children
377
+ {
378
+ my ($self) = @_;
379
+
380
+ if (defined $self->[CHILDREN])
381
+ { return keys %{$self->[CHILDREN]}; }
382
+ else
383
+ { return ( ); };
384
+ };
385
+
386
+ #
387
+ # Function: HasChildren
388
+ # Returns whether any child <SymbolStrings> are defined.
389
+ #
390
+ sub HasChildren
391
+ {
392
+ my ($self) = @_;
393
+ return defined $self->[CHILDREN];
394
+ };
395
+
396
+
397
+ #
398
+ # Function: ParentReferenceDefinitions
399
+ # Returns an array of the <FileNames> which define the passed parent <ReferenceString>, or an empty array if none.
400
+ #
401
+ sub ParentReferenceDefinitions #(reference)
402
+ {
403
+ my ($self, $reference) = @_;
404
+
405
+ if (defined $self->[PARENT_REFERENCES] && exists $self->[PARENT_REFERENCES]->{$reference})
406
+ { return keys %{$self->[PARENT_REFERENCES]->{$reference}}; }
407
+ else
408
+ { return ( ); };
409
+ };
410
+
411
+
412
+ 1;
@@ -0,0 +1,157 @@
1
+ ###############################################################################
2
+ #
3
+ # Class: NaturalDocs::ClassHierarchy::File
4
+ #
5
+ ###############################################################################
6
+ #
7
+ # An object that stores information about what hierarchy information is present in a file. It does not store its <FileName>; it
8
+ # assumes that it will be stored in a hashref where the key is the <FileName>.
9
+ #
10
+ ###############################################################################
11
+
12
+ # This file is part of Natural Docs, which is Copyright (C) 2003-2008 Greg Valure
13
+ # Natural Docs is licensed under the GPL
14
+
15
+ use strict;
16
+ use integer;
17
+
18
+ package NaturalDocs::ClassHierarchy::File;
19
+
20
+
21
+ #
22
+ # Topic: Implementation
23
+ #
24
+ # Since there's only one member in the class, and it's a hashref, the class is simply the hashref itself blessed as a class.
25
+ # The keys are the class <SymbolStrings> that are defined in the file, and the values are existence hashrefs of each class'
26
+ # parent <ReferenceStrings>, or undef if none.
27
+ #
28
+
29
+
30
+ ###############################################################################
31
+ # Group: Modification Functions
32
+
33
+
34
+ #
35
+ # Function: New
36
+ #
37
+ # Creates and returns a new class.
38
+ #
39
+ sub New
40
+ {
41
+ my ($package) = @_;
42
+
43
+ my $object = { };
44
+ bless $object, $package;
45
+
46
+ return $object;
47
+ };
48
+
49
+ #
50
+ # Function: AddClass
51
+ # Adds a rew class <SymbolString> to the file.
52
+ #
53
+ sub AddClass #(class)
54
+ {
55
+ my ($self, $class) = @_;
56
+
57
+ if (!exists $self->{$class})
58
+ { $self->{$class} = undef; };
59
+ };
60
+
61
+ #
62
+ # Function: DeleteClass
63
+ # Deletes a class <SymbolString> from the file.
64
+ #
65
+ sub DeleteClass #(class)
66
+ {
67
+ my ($self, $class) = @_;
68
+ delete $self->{$class};
69
+ };
70
+
71
+ #
72
+ # Function: AddParentReference
73
+ # Adds a parent <ReferenceString> to a class <SymbolString>.
74
+ #
75
+ sub AddParentReference #(class, parentReference)
76
+ {
77
+ my ($self, $class, $parent) = @_;
78
+
79
+ if (!exists $self->{$class} || !defined $self->{$class})
80
+ { $self->{$class} = { }; };
81
+
82
+ $self->{$class}->{$parent} = 1;
83
+ };
84
+
85
+ #
86
+ # Function: DeleteParentReference
87
+ # Deletes a parent <ReferenceString> from a class <SymbolString>.
88
+ #
89
+ sub DeleteParentReference #(class, parent)
90
+ {
91
+ my ($self, $class, $parent) = @_;
92
+
93
+ if (exists $self->{$class})
94
+ {
95
+ delete $self->{$class}->{$parent};
96
+
97
+ if (!scalar keys %{$self->{$class}})
98
+ { $self->{$class} = undef; };
99
+ };
100
+ };
101
+
102
+
103
+
104
+ ###############################################################################
105
+ # Group: Information Functions
106
+
107
+
108
+ #
109
+ # Function: Classes
110
+ # Returns an array of the class <SymbolStrings> that are defined by this file, or an empty array if none.
111
+ #
112
+ sub Classes
113
+ {
114
+ my ($self) = @_;
115
+ return keys %{$self};
116
+ };
117
+
118
+ #
119
+ # Function: HasClass
120
+ # Returns whether the file defines the passed class <SymbolString>.
121
+ #
122
+ sub HasClass #(class)
123
+ {
124
+ my ($self, $class) = @_;
125
+ return exists $self->{$class};
126
+ };
127
+
128
+ #
129
+ # Function: ParentReferencesOf
130
+ # Returns an array of the parent <ReferenceStrings> that are defined by the class, or an empty array if none.
131
+ #
132
+ sub ParentReferencesOf #(class)
133
+ {
134
+ my ($self, $class) = @_;
135
+
136
+ if (!exists $self->{$class} || !defined $self->{$class})
137
+ { return ( ); }
138
+ else
139
+ { return keys %{$self->{$class}}; };
140
+ };
141
+
142
+ #
143
+ # Function: HasParentReference
144
+ # Returns whether the file defines the passed class <SymbolString> and parent <ReferenceString>.
145
+ #
146
+ sub HasParentReference #(class, parent)
147
+ {
148
+ my ($self, $class, $parent) = @_;
149
+
150
+ if (!$self->HasClass($class))
151
+ { return undef; };
152
+
153
+ return exists $self->{$class}->{$parent};
154
+ };
155
+
156
+
157
+ 1;