zenweb 2.18.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.
- data.tar.gz.sig +0 -0
- data/History.txt +426 -0
- data/Manifest.txt +54 -0
- data/README.txt +63 -0
- data/Rakefile +22 -0
- data/bin/zenweb +27 -0
- data/bin/zenwebpage +66 -0
- data/bin/zenwebsite +39 -0
- data/design/REQUIREMENTS.txt +52 -0
- data/design/ZENWEB_2.txt +69 -0
- data/design/heirarchy.png +0 -0
- data/design/heirarchy.tgif +311 -0
- data/docs/Customizing +76 -0
- data/docs/FAQ +12 -0
- data/docs/Features +128 -0
- data/docs/Presentation +88 -0
- data/docs/QuickStart +32 -0
- data/docs/Renderers +85 -0
- data/docs/SiteMap +13 -0
- data/docs/YourOwnWebsite +32 -0
- data/docs/index +14 -0
- data/docs/metadata.txt +10 -0
- data/lib/ZenWeb.rb +850 -0
- data/lib/ZenWeb/CalendarRenderer.rb +162 -0
- data/lib/ZenWeb/CompactRenderer.rb +45 -0
- data/lib/ZenWeb/CompositeRenderer.rb +63 -0
- data/lib/ZenWeb/FileAttachmentRenderer.rb +57 -0
- data/lib/ZenWeb/FooterRenderer.rb +38 -0
- data/lib/ZenWeb/GenericRenderer.rb +143 -0
- data/lib/ZenWeb/HeaderRenderer.rb +52 -0
- data/lib/ZenWeb/HtmlRenderer.rb +81 -0
- data/lib/ZenWeb/HtmlTableRenderer.rb +94 -0
- data/lib/ZenWeb/HtmlTemplateRenderer.rb +173 -0
- data/lib/ZenWeb/MetadataRenderer.rb +83 -0
- data/lib/ZenWeb/RelativeRenderer.rb +98 -0
- data/lib/ZenWeb/RubyCodeRenderer.rb +56 -0
- data/lib/ZenWeb/SitemapRenderer.rb +56 -0
- data/lib/ZenWeb/StandardRenderer.rb +40 -0
- data/lib/ZenWeb/StupidRenderer.rb +88 -0
- data/lib/ZenWeb/SubpageRenderer.rb +45 -0
- data/lib/ZenWeb/TextToHtmlRenderer.rb +219 -0
- data/lib/ZenWeb/TocRenderer.rb +61 -0
- data/lib/ZenWeb/XXXRenderer.rb +32 -0
- data/test/SiteMap +14 -0
- data/test/Something +4 -0
- data/test/include.txt +3 -0
- data/test/index +8 -0
- data/test/metadata.txt +10 -0
- data/test/ryand/SiteMap +10 -0
- data/test/ryand/blah +4 -0
- data/test/ryand/blah-blah +4 -0
- data/test/ryand/index +52 -0
- data/test/ryand/metadata.txt +2 -0
- data/test/ryand/stuff/index +4 -0
- data/test/test_zenweb.rb +1624 -0
- metadata +161 -0
- metadata.gz.sig +0 -0
data/README.txt
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
= ZenWeb
|
|
2
|
+
|
|
3
|
+
* http://rubyforge.org/projects/zenweb/
|
|
4
|
+
|
|
5
|
+
== DESCRIPTION:
|
|
6
|
+
|
|
7
|
+
ZenWeb is a set of classes/tools for organizing and formating a
|
|
8
|
+
website. It is website oriented rather than webpage oriented, unlike
|
|
9
|
+
most rendering tools. It is content oriented, rather than style
|
|
10
|
+
oriented, unlike most rendering tools. It provides a plugin system of
|
|
11
|
+
renderers and filters to provide a very flexible, and powerful system.
|
|
12
|
+
|
|
13
|
+
Documentation is available in the docs directory, and can be generated
|
|
14
|
+
into html (in docshtml) simply by running make. See QuickStart and
|
|
15
|
+
YourOwnWebsite for setup and starting to build a website.
|
|
16
|
+
|
|
17
|
+
(EXPERIMENTAL) If you are running apache, you might try 'make apache'
|
|
18
|
+
which will run a private version of apache that points to the
|
|
19
|
+
generated documenation. Point your browser to port 8080 of localhost
|
|
20
|
+
or whatever machine you are running on.
|
|
21
|
+
|
|
22
|
+
== FEATURES:
|
|
23
|
+
|
|
24
|
+
* SiteMap oriented for a comprehensive website.
|
|
25
|
+
* Generic architecture w/ a set of plugins to extend any page or directory.
|
|
26
|
+
* Incremental page builds for very fast generation.
|
|
27
|
+
* Simple text-to-html markup makes creating large websites easy.
|
|
28
|
+
* ZenTest 1.0 compliant. http://sf.net/projects/zentest/
|
|
29
|
+
* Much much more... I should probably add that here, huh?
|
|
30
|
+
|
|
31
|
+
== REQUIREMENTS:
|
|
32
|
+
|
|
33
|
+
* Ruby - 1.6.5-7 and 1.7.2 have been tested.
|
|
34
|
+
* Test::Unit testing framework via RAA on http://www.ruby-lang.org/.
|
|
35
|
+
|
|
36
|
+
== INSTALL:
|
|
37
|
+
|
|
38
|
+
* make test && sudo make install
|
|
39
|
+
|
|
40
|
+
== LICENSE:
|
|
41
|
+
|
|
42
|
+
(The MIT License)
|
|
43
|
+
|
|
44
|
+
Copyright (c) 2001-2009 Ryan Davis, Zen Spider Software
|
|
45
|
+
|
|
46
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
47
|
+
a copy of this software and associated documentation files (the
|
|
48
|
+
"Software"), to deal in the Software without restriction, including
|
|
49
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
50
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
51
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
52
|
+
the following conditions:
|
|
53
|
+
|
|
54
|
+
The above copyright notice and this permission notice shall be
|
|
55
|
+
included in all copies or substantial portions of the Software.
|
|
56
|
+
|
|
57
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
58
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
59
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
60
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
61
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
62
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
63
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# -*- ruby -*-
|
|
2
|
+
|
|
3
|
+
require 'rubygems'
|
|
4
|
+
require 'hoe'
|
|
5
|
+
|
|
6
|
+
Hoe.plugin :seattlerb
|
|
7
|
+
|
|
8
|
+
Hoe.spec 'zenweb' do
|
|
9
|
+
developer 'Ryan Davis', 'ryand-ruby@zenspider.com'
|
|
10
|
+
|
|
11
|
+
clean_globs.push(*"testhtml docshtml httpd.conf httpd.pid *.log".split)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
task :docs do
|
|
15
|
+
ruby "-w -Ilib bin/zenweb docs"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# TODO:
|
|
19
|
+
# apache: docs
|
|
20
|
+
# grep -v CustomLog $$(httpd -V | grep SERVER_CONFIG_FILE | cut -f 2 -d= | cut -f 2 -d\") > httpd.conf; httpd -X -d $$PWD/docshtml -f $$PWD/httpd.conf -c "PidFile $$PWD/httpd.pid" -c "Port 8080" -c "ErrorLog $$PWD/error.log" -c "TransferLog $$PWD/access.log" -c "DocumentRoot $$PWD/docshtml"
|
|
21
|
+
|
|
22
|
+
# vim: syntax=ruby
|
data/bin/zenweb
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require 'rubygems'
|
|
4
|
+
require 'ZenWeb'
|
|
5
|
+
|
|
6
|
+
puts ZenWebsite.banner() unless $TESTING
|
|
7
|
+
|
|
8
|
+
if (ARGV.size == 2) then
|
|
9
|
+
path = ARGV.shift
|
|
10
|
+
url = ARGV.shift
|
|
11
|
+
elsif (ARGV.size == 1) then
|
|
12
|
+
path = ARGV.shift || raise(ArgumentError, "Need a sitemap path to load.")
|
|
13
|
+
url = "/SiteMap.html"
|
|
14
|
+
else
|
|
15
|
+
raise(ArgumentError, "Usage: #{$0} datadir [sitemapurl]")
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
if path == "data" then
|
|
19
|
+
dest = "html"
|
|
20
|
+
else
|
|
21
|
+
dest = path + "html"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
dirty = test ?d, dest
|
|
25
|
+
|
|
26
|
+
ZenWebsite.new(url, path, dest).renderSite
|
|
27
|
+
Metadata.displayBadMetadata unless dirty
|
data/bin/zenwebpage
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
#!/usr/local/bin/ruby -w
|
|
2
|
+
|
|
3
|
+
def usage
|
|
4
|
+
puts "#{$0} filepath [title [subtitle]]"
|
|
5
|
+
exit 1
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
path = ARGV.shift || usage()
|
|
9
|
+
title = ARGV.shift || 'Title'
|
|
10
|
+
subtitle = ARGV.shift || 'Subtitle'
|
|
11
|
+
|
|
12
|
+
filename = File.basename(path)
|
|
13
|
+
|
|
14
|
+
puts "Creating #{filename}"
|
|
15
|
+
|
|
16
|
+
file = File.new(path, "w")
|
|
17
|
+
|
|
18
|
+
if filename == 'metadata.txt' then
|
|
19
|
+
file.puts "'renderers' = [ 'StandardRenderer' ]"
|
|
20
|
+
elsif filename == 'Makefile' then
|
|
21
|
+
file.puts "# use this to override"
|
|
22
|
+
file.puts "RUBYPATH="
|
|
23
|
+
file.puts "DEBUG="
|
|
24
|
+
file.puts "ZENWEB=/usr/local/bin/zenweb"
|
|
25
|
+
file.puts "INSTALLDIR=/usr/local/www"
|
|
26
|
+
file.puts ""
|
|
27
|
+
file.puts "all: html"
|
|
28
|
+
file.puts ""
|
|
29
|
+
file.puts "html:"
|
|
30
|
+
file.puts " RUBYPATH=$(RUBYPATH) ruby $(DEBUG) $(ZENWEB) data"
|
|
31
|
+
file.puts ""
|
|
32
|
+
file.puts "realclean: clean"
|
|
33
|
+
file.puts " -rm -rf html"
|
|
34
|
+
file.puts ""
|
|
35
|
+
file.puts "clean:"
|
|
36
|
+
file.puts " rm -rf httpd.conf httpd.pid error.log access.log"
|
|
37
|
+
file.puts " -find . -name \*~ -exec rm {} \\;"
|
|
38
|
+
file.puts " -find data -name \*.html -print0 | xargs -0 rm -f"
|
|
39
|
+
file.puts ""
|
|
40
|
+
file.puts "apache: all"
|
|
41
|
+
file.puts %q% grep -v CustomLog $$(httpd -V | grep SERVER_CONFIG_FILE | cut -f 2 -d= | cut -f 2 -d\") > httpd.conf; httpd -X -d $$PWD/html -f $$PWD/httpd.conf -c "PidFile $$PWD/httpd.pid" -c "Port 8080" -c "ErrorLog $$PWD/error.log" -c "TransferLog $$PWD/access.log" -c "DocumentRoot $$PWD/html"%
|
|
42
|
+
file.puts ""
|
|
43
|
+
file.puts "copy:"
|
|
44
|
+
file.puts " rsync -r html/ $(INSTALLDIR)"
|
|
45
|
+
file.puts ""
|
|
46
|
+
file.puts ".PHONY: all html clean copy"
|
|
47
|
+
else
|
|
48
|
+
file.puts "# 'title' = '#{title}'"
|
|
49
|
+
file.puts "# 'subtitle' = '#{subtitle}'"
|
|
50
|
+
file.puts "# 'keywords' = 'Keywords used by search engines.'"
|
|
51
|
+
file.puts "# 'description' = 'Basic desc for search engines.'"
|
|
52
|
+
|
|
53
|
+
if filename == 'SiteMap' then
|
|
54
|
+
file.puts "# 'renderers' = [ 'SitemapRenderer', 'StandardRenderer' ]"
|
|
55
|
+
file.puts ""
|
|
56
|
+
file.puts "/index.html"
|
|
57
|
+
file.puts "/SiteMap.html"
|
|
58
|
+
else
|
|
59
|
+
file.puts ""
|
|
60
|
+
file.puts "** Section Header"
|
|
61
|
+
file.puts ""
|
|
62
|
+
file.puts "TO" + "DO: write this page" # to avoid my source TAG scanner
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
file.close
|
data/bin/zenwebsite
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
#!/usr/local/bin/ruby -w
|
|
2
|
+
|
|
3
|
+
def usage
|
|
4
|
+
puts "#{$0} dir"
|
|
5
|
+
exit 1
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def error(msg)
|
|
9
|
+
$stderr.puts(msg)
|
|
10
|
+
exit 1
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
base = File.expand_path(File.dirname($0))
|
|
14
|
+
path = ARGV.shift || usage()
|
|
15
|
+
|
|
16
|
+
cmd = "#{base}/ZenWebpage.rb"
|
|
17
|
+
unless test ?f, cmd then
|
|
18
|
+
puts "Can't find ZenWebpage.rb in #{base}, falling back to PATH"
|
|
19
|
+
cmd = "ZenWebpage.rb"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
puts "Using #{cmd} to create files"
|
|
23
|
+
puts "Creating directory #{File.basename(path)}"
|
|
24
|
+
|
|
25
|
+
Dir.mkdir(path)
|
|
26
|
+
Dir.chdir(path)
|
|
27
|
+
|
|
28
|
+
system("#{base}/ZenWebpage.rb Makefile") or error("Failed: #{$?}")
|
|
29
|
+
|
|
30
|
+
Dir.mkdir("data")
|
|
31
|
+
Dir.chdir("data")
|
|
32
|
+
|
|
33
|
+
system("#{base}/ZenWebpage.rb SiteMap SiteMap") or error("Failed: #{$?}")
|
|
34
|
+
system("#{base}/ZenWebpage.rb metadata.txt") or error("Failed: #{$?}")
|
|
35
|
+
system("#{base}/ZenWebpage.rb index Welcome") or error("Failed: #{$?}")
|
|
36
|
+
|
|
37
|
+
Dir.chdir("..")
|
|
38
|
+
|
|
39
|
+
system("make") or error("Failed: #{$?}")
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
Requirements Document, Version 1.0.1,
|
|
2
|
+
Created: 2001-01-17
|
|
3
|
+
Modified: 2001-01-17
|
|
4
|
+
|
|
5
|
+
+ Must provide a generic architecture for generating a website from a
|
|
6
|
+
file called a sitemap, and a directory of files that provide the
|
|
7
|
+
content.
|
|
8
|
+
|
|
9
|
+
+ The sitemap consists of a list of urls and metadata.
|
|
10
|
+
|
|
11
|
+
+ The urls in the sitemap correspond to the files in the content
|
|
12
|
+
directory.
|
|
13
|
+
|
|
14
|
+
+ The urls in the sitemap will also have an optional pagetype, which
|
|
15
|
+
will dictate what will generate the page, and correspondingly, what
|
|
16
|
+
the page will look like.
|
|
17
|
+
|
|
18
|
+
+ Another file, named Metadata.txt, contains metadata of it's own that
|
|
19
|
+
is scoped to all files in the directory and below. This file may exist
|
|
20
|
+
in any directory and will overlay the metadata defined in files in any
|
|
21
|
+
parent directories.
|
|
22
|
+
|
|
23
|
+
+ A simple, default, markup scheme will be defined and will determine
|
|
24
|
+
the overall structure of the page.
|
|
25
|
+
|
|
26
|
+
+ Embedded ruby should be evaluated and the result should be emitted
|
|
27
|
+
into the resulting content.
|
|
28
|
+
|
|
29
|
+
+ Scope of Metadata:
|
|
30
|
+
|
|
31
|
+
{ Sitemap { Metadata.txt { Metadata.txt* { File }}}}
|
|
32
|
+
|
|
33
|
+
+ General Structure:
|
|
34
|
+
|
|
35
|
+
data/
|
|
36
|
+
SiteMap [ urls, pagetypes, metadata ]
|
|
37
|
+
other content files
|
|
38
|
+
Metadata.txt
|
|
39
|
+
subdir/
|
|
40
|
+
other content files
|
|
41
|
+
Metadata.txt
|
|
42
|
+
|
|
43
|
+
+ General Algorithm:
|
|
44
|
+
|
|
45
|
+
1) Open Sitemap:
|
|
46
|
+
1) Read all urls:
|
|
47
|
+
1) Find page corresponding to url.
|
|
48
|
+
2) Open file.
|
|
49
|
+
3) Parse file, extracting metadata and content.
|
|
50
|
+
4) Based on current metadata, instantiate the correct type of page.
|
|
51
|
+
2) Generate a makefile OR dependency map.
|
|
52
|
+
3) Run make OR iterate over each page instance and IF it should be generated, generate it.
|
data/design/ZENWEB_2.txt
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# -*- outline -*-
|
|
2
|
+
|
|
3
|
+
* ZenWeb 2.0 Planning:
|
|
4
|
+
|
|
5
|
+
** Requirements:
|
|
6
|
+
|
|
7
|
+
*** Major
|
|
8
|
+
|
|
9
|
+
These items are needed for betatesting.
|
|
10
|
+
|
|
11
|
+
**** Sitemap
|
|
12
|
+
|
|
13
|
+
Reads simple sitemap description file, from there generates website.
|
|
14
|
+
|
|
15
|
+
Urls in sitemap must map to filesystem.
|
|
16
|
+
|
|
17
|
+
Must deal with ~username urls correctly.
|
|
18
|
+
|
|
19
|
+
Sitemap must give each document the knowedge of it's relatives (parent, children, siblings)
|
|
20
|
+
|
|
21
|
+
**** Flexible metadata system
|
|
22
|
+
|
|
23
|
+
Metadata must be available per directory, each child overlaying the parents.
|
|
24
|
+
|
|
25
|
+
Metadata must be available per file, overlaying the directory.
|
|
26
|
+
|
|
27
|
+
Metadata must be flexible, allowing for basically anything to be a value.
|
|
28
|
+
|
|
29
|
+
Metadata will drive most of the process.
|
|
30
|
+
|
|
31
|
+
**** Rendering Engine(s)
|
|
32
|
+
|
|
33
|
+
System must allow for multiple rendering engines to be applied to any given datafile.
|
|
34
|
+
|
|
35
|
+
Engines are specified by metadata.
|
|
36
|
+
|
|
37
|
+
Example engines must be supplied:
|
|
38
|
+
Raw
|
|
39
|
+
text2html
|
|
40
|
+
embedded ruby
|
|
41
|
+
header/footer.
|
|
42
|
+
|
|
43
|
+
*** Minor
|
|
44
|
+
|
|
45
|
+
These items are not needed for betatesting, but should be implemented
|
|
46
|
+
for final shipment.
|
|
47
|
+
|
|
48
|
+
**** Differential Rendering
|
|
49
|
+
|
|
50
|
+
Whatever generates the HTML should know about the structure and
|
|
51
|
+
generate the minimum set necessary. This includes building parents,
|
|
52
|
+
children, and immediate siblings ONLY when we actually need them
|
|
53
|
+
built.
|
|
54
|
+
|
|
55
|
+
Important relationships should be specified by metadata.
|
|
56
|
+
|
|
57
|
+
**** Tools
|
|
58
|
+
|
|
59
|
+
System could use sitemap and metadata to simply generate a makefile
|
|
60
|
+
and execute it.
|
|
61
|
+
|
|
62
|
+
Tool to find files not in sitemap.
|
|
63
|
+
|
|
64
|
+
Tool to find files in sitemap, but not on filesystem. Generate
|
|
65
|
+
template for quick prototyping of website.
|
|
66
|
+
|
|
67
|
+
**** Extras
|
|
68
|
+
|
|
69
|
+
Possibly design for live execution in server.
|
|
Binary file
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
%TGIF 4.1.41
|
|
2
|
+
state(0,37,100.000,0,0,0,16,1,9,2,2,0,0,1,0,1,1,'Courier',0,57600,0,0,0,10,0,0,1,1,0,16,0,0,1,1,1,1,1088,1408,0,0,2880,0).
|
|
3
|
+
%
|
|
4
|
+
% @(#)$Header$
|
|
5
|
+
% %W%
|
|
6
|
+
%
|
|
7
|
+
unit("1 pixel/pixel").
|
|
8
|
+
color_info(13,65535,0,[
|
|
9
|
+
"magenta", 65535, 0, 65535, 65535, 0, 65535, 1,
|
|
10
|
+
"red", 65535, 0, 0, 65535, 0, 0, 1,
|
|
11
|
+
"green", 0, 65535, 0, 0, 65535, 0, 1,
|
|
12
|
+
"blue", 0, 0, 65535, 0, 0, 65535, 1,
|
|
13
|
+
"yellow", 65535, 65535, 0, 65535, 65535, 0, 1,
|
|
14
|
+
"pink", 65535, 49931, 53052, 65535, 49344, 52171, 1,
|
|
15
|
+
"cyan", 0, 65535, 65535, 0, 65535, 65535, 1,
|
|
16
|
+
"CadetBlue", 22885, 40569, 42649, 24415, 40606, 41120, 1,
|
|
17
|
+
"white", 65535, 65535, 65535, 65535, 65535, 65535, 1,
|
|
18
|
+
"black", 0, 0, 0, 0, 0, 0, 1,
|
|
19
|
+
"DarkSlateGray", 10402, 19764, 18724, 12079, 20303, 20303, 1,
|
|
20
|
+
"#0000ff", 0, 0, 65535, 0, 0, 65280, 1,
|
|
21
|
+
"#ff00ff", 65535, 0, 65535, 65280, 0, 65280, 1
|
|
22
|
+
]).
|
|
23
|
+
script_frac("0.6").
|
|
24
|
+
fg_bg_colors('black','white').
|
|
25
|
+
dont_reencode("FFDingbests:ZapfDingbats").
|
|
26
|
+
page(1,"",1,'').
|
|
27
|
+
group([
|
|
28
|
+
box('black','',32,32,544,352,2,1,1,161,0,0,0,0,0,'1',0,[
|
|
29
|
+
]),
|
|
30
|
+
group([
|
|
31
|
+
box('black','',304,144,400,176,2,1,1,0,0,0,0,0,0,'1',0,[
|
|
32
|
+
]),
|
|
33
|
+
text('black',352,153,1,1,1,56,14,1,11,3,2,0,0,0,2,56,14,0,0,"",0,0,0,0,164,'',[
|
|
34
|
+
minilines(56,14,0,0,1,0,0,[
|
|
35
|
+
mini_line(56,11,3,0,0,0,[
|
|
36
|
+
str_block(0,56,11,3,0,0,0,0,0,[
|
|
37
|
+
str_seg('black','Courier',0,69120,56,11,3,0,0,0,0,0,0,0,
|
|
38
|
+
"Metadata")])
|
|
39
|
+
])
|
|
40
|
+
])])
|
|
41
|
+
],
|
|
42
|
+
6,0,0,[
|
|
43
|
+
]),
|
|
44
|
+
group([
|
|
45
|
+
box('black','',432,48,528,80,2,1,1,11,0,0,0,0,0,'1',0,[
|
|
46
|
+
]),
|
|
47
|
+
text('black',480,59,1,1,1,90,11,12,9,2,2,0,0,0,2,90,11,0,0,"",0,0,0,0,68,'',[
|
|
48
|
+
minilines(90,11,0,0,1,0,0,[
|
|
49
|
+
mini_line(90,9,2,0,0,0,[
|
|
50
|
+
str_block(0,90,9,2,0,0,0,0,0,[
|
|
51
|
+
str_seg('black','Courier',0,57600,90,9,2,0,0,0,0,0,0,0,
|
|
52
|
+
"GenericRenderer")])
|
|
53
|
+
])
|
|
54
|
+
])])
|
|
55
|
+
],
|
|
56
|
+
10,0,0,[
|
|
57
|
+
]),
|
|
58
|
+
group([
|
|
59
|
+
box('black','',176,48,272,80,2,1,1,14,0,0,0,0,0,'1',0,[
|
|
60
|
+
]),
|
|
61
|
+
text('black',224,57,1,1,1,77,14,15,11,3,2,0,0,0,2,77,14,0,0,"",0,0,0,0,68,'',[
|
|
62
|
+
minilines(77,14,0,0,1,0,0,[
|
|
63
|
+
mini_line(77,11,3,0,0,0,[
|
|
64
|
+
str_block(0,77,11,3,0,0,0,0,0,[
|
|
65
|
+
str_seg('black','Courier',0,69120,77,11,3,0,0,0,0,0,0,0,
|
|
66
|
+
"ZenDocument")])
|
|
67
|
+
])
|
|
68
|
+
])])
|
|
69
|
+
],
|
|
70
|
+
13,0,0,[
|
|
71
|
+
]),
|
|
72
|
+
group([
|
|
73
|
+
box('black','',176,144,272,176,2,1,1,17,0,0,0,0,0,'1',0,[
|
|
74
|
+
]),
|
|
75
|
+
text('black',224,153,1,1,1,70,14,18,11,3,2,0,0,0,2,70,14,0,0,"",0,0,0,0,164,'',[
|
|
76
|
+
minilines(70,14,0,0,1,0,0,[
|
|
77
|
+
mini_line(70,11,3,0,0,0,[
|
|
78
|
+
str_block(0,70,11,3,0,-1,0,0,0,[
|
|
79
|
+
str_seg('black','Courier',0,69120,70,11,3,0,-1,0,0,0,0,0,
|
|
80
|
+
"ZenSitemap")])
|
|
81
|
+
])
|
|
82
|
+
])])
|
|
83
|
+
],
|
|
84
|
+
16,0,0,[
|
|
85
|
+
]),
|
|
86
|
+
group([
|
|
87
|
+
box('black','',48,48,144,80,2,1,1,20,0,0,0,0,0,'1',0,[
|
|
88
|
+
]),
|
|
89
|
+
text('black',96,57,1,1,1,70,14,21,11,3,2,0,0,0,2,70,14,0,0,"",0,0,0,0,68,'',[
|
|
90
|
+
minilines(70,14,0,0,1,0,0,[
|
|
91
|
+
mini_line(70,11,3,0,0,0,[
|
|
92
|
+
str_block(0,70,11,3,0,-1,0,0,0,[
|
|
93
|
+
str_seg('black','Courier',0,69120,70,11,3,0,-1,0,0,0,0,0,
|
|
94
|
+
"ZenWebsite")])
|
|
95
|
+
])
|
|
96
|
+
])])
|
|
97
|
+
],
|
|
98
|
+
19,0,0,[
|
|
99
|
+
]),
|
|
100
|
+
poly('black','',2,[
|
|
101
|
+
224,144,224,80],1,1,1,31,0,2,0,0,0,0,0,'1',0,0,
|
|
102
|
+
"0","",[
|
|
103
|
+
0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[
|
|
104
|
+
]),
|
|
105
|
+
group([
|
|
106
|
+
box('black','',304,48,400,80,2,1,1,40,0,0,0,0,0,'1',0,[
|
|
107
|
+
]),
|
|
108
|
+
text('black',352,57,1,1,1,28,14,41,11,3,2,0,0,0,2,28,14,0,0,"",0,0,0,0,68,'',[
|
|
109
|
+
minilines(28,14,0,0,1,0,0,[
|
|
110
|
+
mini_line(28,11,3,0,0,0,[
|
|
111
|
+
str_block(0,28,11,3,0,0,0,0,0,[
|
|
112
|
+
str_seg('black','Courier',0,69120,28,11,3,0,0,0,0,0,0,0,
|
|
113
|
+
"Hash")])
|
|
114
|
+
])
|
|
115
|
+
])])
|
|
116
|
+
],
|
|
117
|
+
39,0,0,[
|
|
118
|
+
]),
|
|
119
|
+
poly('black','',2,[
|
|
120
|
+
352,144,352,80],1,1,1,56,0,2,0,0,0,0,0,'1',0,0,
|
|
121
|
+
"0","",[
|
|
122
|
+
0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[
|
|
123
|
+
]),
|
|
124
|
+
group([
|
|
125
|
+
box('black','',432,144,528,176,2,1,1,59,0,0,0,0,0,'1',0,[
|
|
126
|
+
]),
|
|
127
|
+
text('black',480,155,1,1,1,18,11,60,9,2,2,0,0,0,2,18,11,0,0,"",0,0,0,0,164,'',[
|
|
128
|
+
minilines(18,11,0,0,1,0,0,[
|
|
129
|
+
mini_line(18,9,2,0,0,0,[
|
|
130
|
+
str_block(0,18,9,2,0,-3,0,0,0,[
|
|
131
|
+
str_seg('black','Courier',0,57600,18,9,2,0,-3,0,0,0,0,0,
|
|
132
|
+
"...")])
|
|
133
|
+
])
|
|
134
|
+
])])
|
|
135
|
+
],
|
|
136
|
+
58,0,0,[
|
|
137
|
+
]),
|
|
138
|
+
poly('black','',2,[
|
|
139
|
+
480,144,480,80],1,1,1,66,0,2,0,0,0,0,0,'1',0,0,
|
|
140
|
+
"0","",[
|
|
141
|
+
0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[
|
|
142
|
+
]),
|
|
143
|
+
poly('black','',2,[
|
|
144
|
+
496,144,480,80],1,1,1,68,0,2,0,0,0,0,0,'1',0,0,
|
|
145
|
+
"0","",[
|
|
146
|
+
0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[
|
|
147
|
+
]),
|
|
148
|
+
poly('black','',2,[
|
|
149
|
+
464,144,480,80],1,1,1,69,0,2,0,0,0,0,0,'1',0,0,
|
|
150
|
+
"0","",[
|
|
151
|
+
0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[
|
|
152
|
+
]),
|
|
153
|
+
group([
|
|
154
|
+
box('black','',400,304,496,336,2,1,1,73,0,0,0,0,0,'1',0,[
|
|
155
|
+
]),
|
|
156
|
+
text('black',448,313,1,1,1,56,14,74,11,3,2,0,0,0,2,56,14,0,0,"",0,0,0,0,324,'',[
|
|
157
|
+
minilines(56,14,0,0,1,0,0,[
|
|
158
|
+
mini_line(56,11,3,0,0,0,[
|
|
159
|
+
str_block(0,56,11,3,0,0,0,0,0,[
|
|
160
|
+
str_seg('black','Courier',0,69120,56,11,3,0,0,0,0,0,0,0,
|
|
161
|
+
"Metadata")])
|
|
162
|
+
])
|
|
163
|
+
])])
|
|
164
|
+
],
|
|
165
|
+
72,0,0,[
|
|
166
|
+
]),
|
|
167
|
+
group([
|
|
168
|
+
box('black','',80,304,176,336,2,1,1,76,0,0,0,0,0,'1',0,[
|
|
169
|
+
]),
|
|
170
|
+
text('black',128,315,1,1,1,90,11,77,9,2,2,0,0,0,2,90,11,0,0,"",0,0,0,0,324,'',[
|
|
171
|
+
minilines(90,11,0,0,1,0,0,[
|
|
172
|
+
mini_line(90,9,2,0,0,0,[
|
|
173
|
+
str_block(0,90,9,2,0,0,0,0,0,[
|
|
174
|
+
str_seg('black','Courier',0,57600,90,9,2,0,0,0,0,0,0,0,
|
|
175
|
+
"GenericRenderer")])
|
|
176
|
+
])
|
|
177
|
+
])])
|
|
178
|
+
],
|
|
179
|
+
75,0,0,[
|
|
180
|
+
]),
|
|
181
|
+
group([
|
|
182
|
+
box('black','',240,304,336,336,2,1,1,79,0,0,0,0,0,'1',0,[
|
|
183
|
+
]),
|
|
184
|
+
text('black',288,313,1,1,1,77,14,80,11,3,2,0,0,0,2,77,14,0,0,"",0,0,0,0,324,'',[
|
|
185
|
+
minilines(77,14,0,0,1,0,0,[
|
|
186
|
+
mini_line(77,11,3,0,0,0,[
|
|
187
|
+
str_block(0,77,11,3,0,0,0,0,0,[
|
|
188
|
+
str_seg('black','Courier',0,69120,77,11,3,0,0,0,0,0,0,0,
|
|
189
|
+
"ZenDocument")])
|
|
190
|
+
])
|
|
191
|
+
])])
|
|
192
|
+
],
|
|
193
|
+
78,0,0,[
|
|
194
|
+
]),
|
|
195
|
+
group([
|
|
196
|
+
box('black','',240,208,336,240,2,1,1,82,0,0,0,0,0,'1',0,[
|
|
197
|
+
]),
|
|
198
|
+
text('black',288,217,1,1,1,70,14,83,11,3,2,0,0,0,2,70,14,0,0,"",0,0,0,0,228,'',[
|
|
199
|
+
minilines(70,14,0,0,1,0,0,[
|
|
200
|
+
mini_line(70,11,3,0,0,0,[
|
|
201
|
+
str_block(0,70,11,3,0,-1,0,0,0,[
|
|
202
|
+
str_seg('black','Courier',0,69120,70,11,3,0,-1,0,0,0,0,0,
|
|
203
|
+
"ZenSitemap")])
|
|
204
|
+
])
|
|
205
|
+
])])
|
|
206
|
+
],
|
|
207
|
+
81,0,0,[
|
|
208
|
+
]),
|
|
209
|
+
group([
|
|
210
|
+
box('black','',80,208,176,240,2,1,1,85,0,0,0,0,0,'1',0,[
|
|
211
|
+
]),
|
|
212
|
+
text('black',128,217,1,1,1,70,14,86,11,3,2,0,0,0,2,70,14,0,0,"",0,0,0,0,228,'',[
|
|
213
|
+
minilines(70,14,0,0,1,0,0,[
|
|
214
|
+
mini_line(70,11,3,0,0,0,[
|
|
215
|
+
str_block(0,70,11,3,0,-1,0,0,0,[
|
|
216
|
+
str_seg('black','Courier',0,69120,70,11,3,0,-1,0,0,0,0,0,
|
|
217
|
+
"ZenWebsite")])
|
|
218
|
+
])
|
|
219
|
+
])])
|
|
220
|
+
],
|
|
221
|
+
84,0,0,[
|
|
222
|
+
]),
|
|
223
|
+
poly('black','',2,[
|
|
224
|
+
288,304,288,240],2,1,1,87,0,2,0,0,0,0,0,'1',0,0,
|
|
225
|
+
"0","",[
|
|
226
|
+
0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[
|
|
227
|
+
]),
|
|
228
|
+
poly('black','',2,[
|
|
229
|
+
32,192,544,192],0,3,1,98,0,2,0,0,0,0,0,'3',0,0,
|
|
230
|
+
"0","",[
|
|
231
|
+
0,12,5,0,'12','5','0'],[0,12,5,0,'12','5','0'],[
|
|
232
|
+
]),
|
|
233
|
+
poly('black','',2,[
|
|
234
|
+
176,224,240,224],1,1,1,137,0,2,0,0,0,0,0,'1',0,0,
|
|
235
|
+
"0","",[
|
|
236
|
+
0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[
|
|
237
|
+
]),
|
|
238
|
+
text('black',207,232,1,1,1,30,11,142,9,2,2,0,0,0,2,30,11,0,0,"",0,0,0,0,241,'',[
|
|
239
|
+
minilines(30,11,0,0,1,0,0,[
|
|
240
|
+
mini_line(30,9,2,0,0,0,[
|
|
241
|
+
str_block(0,30,9,2,0,0,0,0,0,[
|
|
242
|
+
str_seg('black','Courier',0,57600,30,9,2,0,0,0,0,0,0,0,
|
|
243
|
+
"has-a")])
|
|
244
|
+
])
|
|
245
|
+
])]),
|
|
246
|
+
text('black',319,264,1,1,1,48,11,151,9,2,2,0,0,0,2,48,11,0,0,"",0,0,0,0,273,'',[
|
|
247
|
+
minilines(48,11,0,0,1,0,0,[
|
|
248
|
+
mini_line(48,9,2,0,0,0,[
|
|
249
|
+
str_block(0,48,9,2,0,-1,0,0,0,[
|
|
250
|
+
str_seg('black','Courier',0,57600,48,9,2,0,-1,0,0,0,0,0,
|
|
251
|
+
"has-many")])
|
|
252
|
+
])
|
|
253
|
+
])]),
|
|
254
|
+
poly('black','',2,[
|
|
255
|
+
128,240,128,304],1,1,1,152,0,2,0,0,0,0,0,'1',0,0,
|
|
256
|
+
"0","",[
|
|
257
|
+
0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[
|
|
258
|
+
]),
|
|
259
|
+
poly('black','',2,[
|
|
260
|
+
336,320,400,320],1,1,1,153,0,2,0,0,0,0,0,'1',0,0,
|
|
261
|
+
"0","",[
|
|
262
|
+
0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[
|
|
263
|
+
]),
|
|
264
|
+
text('black',143,264,1,1,1,24,11,156,9,2,2,0,0,0,2,24,11,0,0,"",0,0,0,0,273,'',[
|
|
265
|
+
minilines(24,11,0,0,1,0,0,[
|
|
266
|
+
mini_line(24,9,2,0,0,0,[
|
|
267
|
+
str_block(0,24,9,2,0,-1,0,0,0,[
|
|
268
|
+
str_seg('black','Courier',0,57600,24,9,2,0,-1,0,0,0,0,0,
|
|
269
|
+
"uses")])
|
|
270
|
+
])
|
|
271
|
+
])]),
|
|
272
|
+
text('black',367,328,1,1,1,30,11,159,9,2,2,0,0,0,2,30,11,0,0,"",0,0,0,0,337,'',[
|
|
273
|
+
minilines(30,11,0,0,1,0,0,[
|
|
274
|
+
mini_line(30,9,2,0,0,0,[
|
|
275
|
+
str_block(0,30,9,2,0,0,0,0,0,[
|
|
276
|
+
str_seg('black','Courier',0,57600,30,9,2,0,0,0,0,0,0,0,
|
|
277
|
+
"has-a")])
|
|
278
|
+
])
|
|
279
|
+
])]),
|
|
280
|
+
text('black',96,151,1,1,1,54,11,375,9,2,2,0,0,0,2,54,11,0,0,"",0,0,0,0,160,'',[
|
|
281
|
+
minilines(54,11,0,0,1,0,0,[
|
|
282
|
+
mini_line(54,9,2,0,0,0,[
|
|
283
|
+
str_block(0,54,9,2,0,-1,0,0,0,[
|
|
284
|
+
str_seg('black','Courier',0,57600,54,9,2,0,-1,0,0,0,0,0,
|
|
285
|
+
"heirarchy")])
|
|
286
|
+
])
|
|
287
|
+
])]),
|
|
288
|
+
text('black',432,215,1,1,1,54,11,377,9,2,2,0,0,0,2,54,11,0,0,"",0,0,0,0,224,'',[
|
|
289
|
+
minilines(54,11,0,0,1,0,0,[
|
|
290
|
+
mini_line(54,9,2,0,0,0,[
|
|
291
|
+
str_block(0,54,9,2,0,-1,0,0,0,[
|
|
292
|
+
str_seg('black','Courier',0,57600,54,9,2,0,-1,0,0,0,0,0,
|
|
293
|
+
"relations")])
|
|
294
|
+
])
|
|
295
|
+
])]),
|
|
296
|
+
poly('black','',5,[
|
|
297
|
+
496,320,528,320,528,288,480,288,480,304],1,1,1,720,0,0,0,0,0,0,0,'1',0,0,
|
|
298
|
+
"00","",[
|
|
299
|
+
0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[
|
|
300
|
+
]),
|
|
301
|
+
text('black',511,264,1,1,1,30,11,726,9,2,2,0,0,0,2,30,11,0,0,"",0,0,0,0,273,'',[
|
|
302
|
+
minilines(30,11,0,0,1,0,0,[
|
|
303
|
+
mini_line(30,9,2,0,0,0,[
|
|
304
|
+
str_block(0,30,9,2,0,0,0,0,0,[
|
|
305
|
+
str_seg('black','Courier',0,57600,30,9,2,0,0,0,0,0,0,0,
|
|
306
|
+
"has-a")])
|
|
307
|
+
])
|
|
308
|
+
])])
|
|
309
|
+
],
|
|
310
|
+
782,0,0,[
|
|
311
|
+
]).
|