1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
|
* Add some optimizations to the query stuff: add query rules to the per-gi
rule lists only if they actually contain at least on element node with that
gi, add a seperate list of char rules and a findCharRule function to use
for char nodes (or combine the various find...Rule functions into one
which gets the list to look in as a parameter). Then hasCharRules_ can
be replaced by charRules_[0].size() > 0 || charRules_[1].size() > 0.
x
* Redo the modules stuff. Move it from Interpreter to grove/. Ideally, the
style engine shouldn't need any hardwired knowledge about the limitations
of the grove implementation, but should query it.
* Redo the features stuff to make it cleaner.
* Remove the SdataMapper hack from the grove interface. Rename SdataMapper
to something like GroveConstructionParameters and pass it to the grove
construction process. Eventually we want to add the standard-chars,
combine-char and other stuff to the GroveConstructionParameters.
* Make the in-memory representation for char chunks more compact. Right
now we store a flat array of 32bit chars, which is wasteful. If we use
a different representation, DataNode::charChunk will involve a making
a copy and thus be much more expensive than currently. Thus we should
make sure it is not called unnecessarily often (eg its called twice
in ProcessContext::processNode).
* Add more error messages to the SchemeParser. Currently, many parser
functions just return 0 to the caller; they should also issue a message.
Add sth like AllowedTokensMessageArg and use that in
SchemeParser::tokenRecover to give information about the expected tokens.
* Free Expressions when they are no longer needed. Later, maybe replace the
allocation mechanism with a simpler one that does not actually free
individual objects.
* Wrap lines in help message. (Add wrapping OutputCharStream.)
Then fold the info<n> messages into a single message
* The empty delimEnd message has been removed from ParserMessages.msg.
If translators need to do something different than just put a string
before the actual delimiter, we should support simple insertions in
message fragments and use
+delim++delimiter %
instead.
Things which are missing and need a lot of work
===============================================
* Redesign the App class hierarchy to prepare for breaking OpenJade in
exchangeable components.
* Check the win32 port of OpenJade (OpenSP works).
* Support i18n on win32. As a first step, write a perl script to translate
the .rc files using the translations from the <lang>.po files. Be careful,
the quoting in .rc seems to be different from the quoting in .po.
This will give us compile-time language-choice on win32, ie one could
decide to run this script for de.po before the compilation to get the
German translations compiled in. I still have no idea how install-time
language-selection would be handled.
* SGML backend: Change the document-type FO to be non-atomic, to allow an
internal DTD subset. ADD FOs for DTD declarations.
* query: leads to current-node not being an element node.
* char-script-case: this should be handled by the backends.
* baseset-encoding, literal-described-char, other-chars:
must abandon SP_CHARSET_FIXED to do this, since otherwise
SP does unwanted conversions on numeric char refs. On the
other hand, we do want SP_CHARSET_FIXED, if we are using
jades builtin repertoire (ie Unicode). This could be done
by scanning the cmdline args for "-s"/"--strict" before
constructing the JadeApp instance.
We have to map other-chars in the Unicode/UCS private area somewhere and
tell the user/backend about it.
* combine-char: If we do this, we can't do character translation
as a map char --> char any longer, but instead have to deal
with string --> string.
* Annex K #ALL/#IMLICIT content tokens. Implementation idea: At the
begin of the instance and after seeing a new implicit element type
in the instance, go over all definitions and recompile the model
groups. Also adjust the inclusions/exclusions. Optimization: recompile
only those which actually use #ALL/#IMPLICIT.
<<<<<<< TODO
* Annex K #IMPLIED doctype name.
=======
* Annex K DTD data entities: add a DTD notation framework. Applications
should have a way to register DTD notation handlers which would then
be called for DTD data entities with the corresponding notation. They
would get a pointer to the entity and to the current Dtd and would
add the element and entity declarations they extract from the entity
to the Dtd.
>>>>>>> 1.12.2.6
* check table-auto-width and multi-process features.
* A caching mechanism for DTDs, dsssl specs, ...
This is complicated, since the result of parsing a DTD does depend not
only on the sysid, but also on cmdline options which could define parameter
entities and on the catalogs used to search for entities.
* An XSLFO backend ? Would try to approximate the DSSSL FOT into an XSLFO
document. Then we could take advantage of existing XSL formatters. We could
also drop JadeTeX in favor of PassiveTeX (when it gets ready) then.
* TeXFOTBuilder: Only output Start/EndNode pairs for nodes actually referred to
(see RtfFOTBuilder).
* Do page feature in the front-end.
* TeX backend: Implement general indirect FOs by outputting relevant info from
a TeX run and reading that info in the next OJ run.
Simple things
=============
* install ports, ICs, etc only in SL Interpreters.
* Perhaps split InterpreterMessages into InterpreterMessages and
SchemeParserMessages (and more...).
<<<<<<< TODO
* Remove FOTBuilder::characters(const Vector<CharacterNIC> &) and instead add
a procedure that lets the backend query character properties for a Char
array. Makes storing parts of the FOT more efficient (otherwise,
SaveFOTBuilder will have to store the NIC Vectors, for example.)
Should be done before next release.
* A way for backends to declare/access extension character properties.
(Not needed until we have a backend that actually would do this.)
* Validation of extension flow objects. (Not very important, since the backends
can handle these special cases without major effort.) Instead we could add a
FOTBuilder::FOMessage() non-virtual, so that backends may produce consistent
error messages without knowing about ProcessContext internals.
=======
* Set up framework for I18N: generating .po from .msg, po/OpenXYZ.pot from ../*.po,
generate and install .mo files. This has been done for OpenSP,
still to do for OpenJade.
If you add a new .msg file, you now have to remember to add it
to po/POTFILES.in.
Adding support for a new language is done by:
1) cp po/OpenSP.pot <lang>.po
2) Add translations in po/<lang>.po
3) cvs add po/<lang>.po
4) Add <lang> to ALL_LINGUAS in configure.in
5) cvs commit configure.in po/<lang>.po
Here <lang> stands for the proper 2-letter language code
(is that ISO 639 ?)
Still to do: figure out how to create translated .rc files from
the translations in <lang>.po. This will need some perl magic
to read in <lang>.po, then go over the .rc file and for each string,
look up the translation. Then write out a translated .rc file
containing the proper language identification (ask Didier about this).
>>>>>>> 1.12.2.6
* Support uri-ref addresses in more backends.
Things which have to be added to the jade internals documentation
=================================================================
* writing backends.
* scheme primitives: special meaning of partIndex == unsigned(-1),
(define internal: ...), (define feature: foo ...).
* language stuff.
* feature checking.
* grove plan checking.
* color spaces.
* char repertoire stuff.
* messages: module stuff, message numbers
I18n handling.
Reorganization
==============
* clean up the mess of SP_ defines
* replace many SP_ defines by their more `standard' automake
names (see the bottom of acconfig.h)
|