5 |
Alph is an implementation of xanalogical hypertext (see e.g. Nelson's |
Alph is an implementation of xanalogical hypertext (see e.g. Nelson's |
6 |
writings). The fundamental point in xanalogical hypertext is that |
writings). The fundamental point in xanalogical hypertext is that |
7 |
each smallest unit of media has a unique identity. |
each smallest unit of media has a unique identity. |
8 |
Alph does not use the tumbler model in previous implementations, |
|
9 |
but is rather based on *scrollblocks* - fixed units |
Spans and Media types |
10 |
of fluid media. This allows Alph to exist on top of Storm. |
===================== |
11 |
|
|
12 |
|
The most user-visible objects in Alph are spans. A span |
13 |
|
is a contiguous block of permanent media, e.g. "the 5 characters |
14 |
|
'xyahb' typed on 5 May 2003 by Janne V. Kujala" or |
15 |
|
"the 23x12 block of pixels in a particular photo snapshot of a custom |
16 |
|
controller built from lego bricks by Asko Soukka". |
17 |
|
Spans are operated on much as any immutable media objects, |
18 |
|
like Java's own ``String``s. |
19 |
|
|
20 |
The media types handled by Alph are |
The media types handled by Alph are |
21 |
|
|
91 |
a new span, if the the object and the parameter were consecutive |
a new span, if the the object and the parameter were consecutive |
92 |
in the right order. |
in the right order. |
93 |
|
|
94 |
|
Manipulating text: Enfilades, Span makers |
95 |
|
========================================= |
96 |
|
|
97 |
|
|
98 |
|
Scrollblocks |
99 |
|
============ |
100 |
|
|
101 |
|
Alph does not use the tumbler model in previous implementations, |
102 |
|
but is rather based on *scrollblocks* - fixed units |
103 |
|
of fluid media. This allows Alph to exist on top of Storm. |
104 |
|
|
105 |
|
Each span can contain media only inside one scrollblock: |
106 |
|
|
107 |
|
.. UML:: alph_scrollblock |
108 |
|
|
109 |
|
class Span "interface" |
110 |
|
|
111 |
|
class ScrollBlock |
112 |
|
assoc multi(1) - multi(*) Span |
113 |
|
methods |
114 |
|
String getContentType() |
115 |
|
Span getCurrent() |
116 |
|
boolean isMutable() |
117 |
|
String getID() |
118 |
|
Object getBlockId() |
119 |
|
|
120 |
|
|
121 |
|
|
122 |
|
|
123 |
|
The scrollblock model assumes that given a span it is possible |
124 |
|
to access all the fluid media units inside the same block. |
125 |
|
However, this is not always true: |
126 |
|
there are some span types that do not have a real scroll block - |
127 |
|
``FakeTextSpan`` and ``URN5TextSpan``. |
128 |
|
|
129 |
|
|
130 |
|
Access to the original media: block files |
131 |
|
========================================= |
132 |
|
|
133 |
|
Alph does not currently provide access methods |
134 |
|
for data in images and pagespans. This is because the |
135 |
|
programs may use their own methods for accessing these - |
136 |
|
e.g. Fenfire uses either Java AWT *or* the Libvob OpenGL |
137 |
|
system implemented in C++. Forcing access using AWT images |
138 |
|
would make things inefficient for the OpenGL system. |
139 |
|
|
140 |
|
Because of this, Alph provides direct access to the underlying |
141 |
|
block: |
142 |
|
|
143 |
|
|
144 |
|
|
145 |
|
|