2 ===============================================================================
4 ===============================================================================
6 Implement better tools for debugging
7 * Mechanism to recover all scheme error messages in a dedicated
8 TeXmacs buffer, together with foldable backtraces.
9 * Provide correct locations for the "texmacs-error" primitive.
10 * Provide a clean exception semantics for all routines in the basic APIs.
11 * Clean exception semantics for C++ routines which are exported to Scheme.
12 * Emergency saving of modified buffers on fatal_error.
13 * Throw-catch mechanism in C++ code when compiling with enable-debug
14 and replacement of fatal_error when possible.
15 * Test-suite of TeXmacs documents for different features and
16 automated checks for certain types of correctness.
18 Hunt down memory leaks
20 * Implement marking algorithm
22 ===============================================================================
24 ===============================================================================
26 Internal plug-in for Guile
28 Integrate menus in new GUI system
31 * Rename "drd-" -> "logic-" for routines from kernel/drd.
32 * Appropriate naming convention for routines which operate on markup:
33 when to use tmconcat-, concat-, concat/, tree-concat-, ...,
34 especially for tags like "tree" which are also used as data types.
36 More systematic preservation of locality
37 * Replace dispatch tables by contextual overloading where possible
40 ===============================================================================
42 ===============================================================================
45 * Equivalent of TEX \topsep
46 In TEXMACS, the \topsep always equals 0.75em. It should be possible
47 to modify this. For symmetry, we might also introduce a ``bottom sep''.
48 * Resizing macro expansions
49 When attempting to resize a macro application to become smaller than
50 the ``x'', the invisible markers may have undesirable side-effects.
52 Separate environment variables for ``typewriter'', ``sans serif'',
53 ``small caps'', ``slant'', etc.
54 Find rendering font as a function of selected font and language.
55 * Simplification of page parameters
56 Should we still reorganize? It should be easy to access to
57 the page width and height and some other parameters.
60 * Introduction of the paragraph tag
61 Distinguish between paragraphs and paragraph units.
62 * Page decorations (headers and footers)
63 Should the corresponding environment variables become macros?
64 * Fine-grained baseline skip
65 Associate baseline skip (or ascent and descent) to each individual box
66 in concatenation. Next compute maximum over each line. Take maximum of
67 maximum after first line and maximum before second line in order to
68 obtain final value. Also for other parameters such as baselineskip?
69 * Precise scope of variables which affect paragraph layout.
70 * User-defined hyphenations of words.
71 * Cursor movement is extremely slow for oriental languages.
74 * Horizontal grouping instead of \bigop ... \big.
75 Introduce grouping primitives in which expressions with big operands
76 (and maybe large delimiters) can be encapsulated. The advantage is that
77 this eases parsing and an indicative bounding box is shown.
78 * Scripts to large delimiters produced by macros
79 Such scripts are not put at the right positions
80 * Macro for fractions in continued fractions.
81 * Less vertical spacing in text style between numerator/denominator and bar.
82 * Left-numbering of equation arrays
83 Should be possible now using the extern primitive.
84 * Consider fractions and scripts as operators
85 Consider fractions as operators => spaces before and after.
86 Similarly for scripts => small space before left scripts and
89 Determine spacing between two mathematical boxes as a function of
90 the rough semantics of the boxes. Application: no need for operators
94 * Introduce a style options mechanism
95 Option -> call back macro which can be enriched by several packages
96 Call back macros called at end of reading style files when option selected
97 Selected options postpended to name for style-file caching
98 * Grey menu entries for parameters which cannot be changed in style
99 For instance, a style might provide a limited number of font base sizes.
103 Boxes should not have origins; its children should have positions instead.
106 * Temporarily inccorect markup
107 When pressing A-backspace inside a surround tag, we first remove
108 two children of the surround tag (so that it obtains arity 1) and
109 next remove the tag itself. The temporarily inccorect surround tag
110 of arity 1 may cause bridge_surround to crash.
111 Temporary fix: add extra nodes in the bridge.
112 Better fix: implement an elementary modification assign_label
113 which allows to change the surround tag into another tag like tuple
114 before performing incorrect operations.
116 ===============================================================================
118 ===============================================================================
121 * Icon menu for font size.
122 * Buggy title environment: remove author, transform selection
124 * Strong inside strong, "with color red" inside "with color red", etc.
125 * "with color black" at the left/right extreme of "with color red".
126 * Remove "document" when applying "strong" to a single paragraph.
127 * More generally: automatically turn block content into inline content
131 * User-defined macros can be turned into a compound using the backspace key,
132 builtin macros can't. Why is that? How do I change the name of the
133 call to a buildin macro? Can I avoid removing it and creating a new one?
134 * If the first argument of a call to a user defined macro contains a
135 <document> tag, I cannot turn it into a compound any more. Why that?
136 * There seems to be no way to manually create or remove <document> tags.
137 * Edit the "init" part of a file in source code form.
139 A facility "Edit as" to convert a selection into any other format and
140 put the result in an "edit-as" tag for manual editing. When pressing
141 return, reconvert back into TEXMACS.
142 * More customizable presentation of source tags
143 Make the presentation of source code more customizable by user macros.
144 Done for syntactic highlighting, but should also be done for special
145 rendering of certain primitives and the rendering of tags.
146 * Primitive for block arguments
147 Currently, we may stretch tags. We also need a primitive for stretching
150 Tags for short commands inside the program.
152 Display informative flags at places where tags have been stretched or
153 a modification to the source style has been applied.
156 * Assistant for creating your own styles.
158 ===============================================================================
159 TOOLS AND FREQUENTLY USED SUBROUTINES
160 ===============================================================================
163 * Implement different routines for quoting and quote/unquote
164 using the appropriate routine.
166 General caching mechanism
167 * Optimize performance as a function of cost of recomputation and
171 * Avoid name-clashes with built-in commands
172 Importation of LATEX macros whose names coincide with built-in
173 commands may lead to incorrect documents (e.g. the point macro
174 in publs/1998/zeta.tex). We should probably post-correct imported
176 * Better parsing of verbatim arguments
177 Some commands, like cite, documentclass, etc. take verbatim arguments,
178 which should not be parsed in the generic way. The string_arg function
179 is a temporary remedy.
181 ===============================================================================
183 ===============================================================================
186 * Better looking icons.
187 * Explanatory messages on the status bar
188 * Better "mouse button layout": do as much as possible with left mouse
189 button only and reserve right button for contextual menu.
190 * Compatability with pen-based devices.
191 * Fine-grained resizing using keyboard (also allow modification of grain?).
192 * Resizing using mouse.
193 * Automatic detection of simple types of curves when dragging
195 * Automatic detection of simple ornaments (arrows, dots).
196 * Cairo plug-in for nicer looking graphics.
197 * Graphical macros and constraint-based drawings.
198 * Documentation, reference guide (markup specification) and tutorial.
200 Reorganization of Scheme code
201 * First rough reorganization of code.
202 * Clean API for graphical objet and current decorations:
203 1) remove/restore one object (while preserving z-order).
204 2) remove/restore a selection of objects (while preserving z-order).
205 3) specify decorations for current graphical object.
207 * Clean API for setting/retrieving graphical attributes
208 (color, line width, line style, fill color, etc.).
209 1) Selecting the value of a given attribute.
210 2) Retrieving the value of a given attribute.
211 3) Apply attributes to one or more objects.
212 4) Retrieve attributes from one (or more) objects.
213 * Clean API for global attributes of the entire graphics
215 2) Retrieve an attribute.
216 * Clean API for simple object construction
217 1) Different types of arguments: point, length, content, etc.
218 2) Adding an argument to the current object.
219 3) Removing an argument from a current object.
220 4) Event handlers and how to map mouse buttons to different actions.
221 5) Computation of decorations.
222 * Clean API for groups.
223 1) Adding an object / region.
224 2) Removing an object / region.
225 3) Geometric transformations.
229 7) Computation of decorations.
230 * Documentation of all APIs.
232 ===============================================================================
233 UPCOMING STYLE REWRITING TOOL
234 ===============================================================================
237 * Attention to implicitly changed variables, such as the-tags,
238 the-label, etc., which may cause the entire document to be retypeset.
239 * Attention to base-file-name, cur-file-name, current-part.
240 Also put these variables in vars.hpp.
241 * Replace "arg" primitive by quasi-quoting mechanism.
242 This seems to be quite necessary: consider <assign|foo|<macro|body|...>>
243 and a document piece <\foo>...</foo> with a large body. When making
244 changes to the body; the environment for typesetting the body
245 also changes, because we need to store the body in the "foo" environment
246 argument variable. For this reason, we implemented an alternative
247 mechanism, which is enabled using #define ALTERNATIVE_MACRO_EXPANSION.
248 * More systematic usage of symbols instead of strings.
249 * Should BibTeX labels really be prefixed by "bib-"?
250 * Links and multiple views: which view should be selected when
251 following a hyperlink. More generally: refine criteria for
252 automatically preferring one locus over another one in presence
255 Problem with auxiliary data in hidden markup (eg. labels, loci, links, indexes)
256 * Analogy: hidden markup <-> loaded file which is not in a buffer.
257 We might want to associate auxiliary data to tree nodes instead of files.
258 Notice that there are different types of hidden structures:
259 1) Contents should *not* be evaluated when hidden, but we need to
260 keep track of auxiliary data. Example: a hidden chapter.
261 2) Contents are evaluated but not typeset: auxiliary data may
262 be kept in macro expander. Example: fold.
263 3) Contents are not evaluated, not typeset and no auxiliary data
264 are attached to the contents. Example: a comment or any piece of
265 markup which has to be completely ignored.
267 ===============================================================================
268 UPCOMING MARKUP-BASED GUI
269 ===============================================================================
272 * Attach the action to be applied after popup input to a specific buffer.
273 * Cleaner implementation of read-only parts in documents.
274 * Cleaner implementation of size computation of widget.
275 Also: notebooks and folding constructs, which may require
276 to update the size later on.
277 * Cleaner implementation of widget fields (i.e. the way we associate
279 * Don't require the specification of a body for hidden input fields.
280 * Argument history and browsing suggestions using keyboard.
281 * Destroy call backs associated to a widget when the corresponding
282 window is closed using another method than "dismiss".
283 Idea: potentially associate a dismiss routine to each buffer.
285 ===============================================================================
286 MANAGEMENT AND ADMINISTRATION
287 ===============================================================================
292 * CVS mirror at Savannah and automatic update scheme.
293 * Also search for other mirror sites (increases availability and
294 visibility on the web).
296 ===============================================================================
297 TUTORIAL OR SERIES OF INTRODUCTORY ARTICLES (E.G. FOR LINUX MAGAZINE)
298 ===============================================================================
300 General introduction/quick overview
301 * Different purposes of TEXMACS
302 * Writing a simple text
303 * Style-sheets and writing a simple macro
304 * Running a computer algebra system
305 * Inserting an action tag which launches an xterm (and mutator tag?)
307 Writing simple structured texts
308 * Why are structured documents useful?
309 * How to enter structure into TEXMACS, redundancy of the interface
310 * Understanding the visual indications, cursor movement
311 * Editing the structure (removing structure, improper nesting, variants,
313 * Exploiting structure: spell checking, searching
314 * Reminders about correct typography
316 Writing mathematical texts
317 * Entering math mode, equations, equation arrays
318 * Simple mathematical formulas, recall cursor movement
319 * Mathematical symbols, variants
320 * Semantics of multiplication, function application and
321 other implicit semantics
322 * Simple matrices and other tabular environments
324 Writing simple macros and style-sheets
325 * Rendering of source code, what is source code?
327 * A simple style package
328 * Customization of some existing macros