Cleaning
[texmacs.git] / src / TODO
blobfd4691f0fa41554695890fbe2cf62da0f71f8f91
2 ===============================================================================
3 GENERAL ARCHITECTURE
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
19   * Valgrind
20   * Implement marking algorithm
22 ===============================================================================
23 SCHEME INTERFACE
24 ===============================================================================
26 Internal plug-in for Guile
28 Integrate menus in new GUI system
30 Naming conventions
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
38     (i.e. LaTeX export).
40 ===============================================================================
41 TYPESETTER
42 ===============================================================================
44 General
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.
51   * Font parameters
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.
59 Text
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.
73 Mathematics
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
87     after right scripts.
88   * Better spacing
89     Determine spacing between two mathematical boxes as a function of
90     the rough semantics of the boxes. Application: no need for operators
91     like the unary minus.
93 Style-sheet language
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.
101 Boxes
102   * Origin of boxes
103     Boxes should not have origins; its children should have positions instead.
105 Current bridges
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 ===============================================================================
117 EDITOR
118 ===============================================================================
120 Structured text
121   * Icon menu for font size.
122   * Buggy title environment: remove author, transform selection
123     into title, etc.
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
128     when appropriate.
130 Editing source trees
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.
138   * Edit as option
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
148     tag arguments.
149   * Comments
150     Tags for short commands inside the program.
151   * Visual hints
152     Display informative flags at places where tags have been stretched or
153     a modification to the source style has been applied.
155 Styling
156   * Assistant for creating your own styles.
158 ===============================================================================
159 TOOLS AND FREQUENTLY USED SUBROUTINES
160 ===============================================================================
162 Quoting
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
168     storage requirement
170 LATEX import
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
175     documents.
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 ===============================================================================
182 GRAPHICS EDITOR
183 ===============================================================================
185 Interface
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
194     in drawing mode.
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.
206       4) undo and cancel.
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
214       1) Set an attribute.
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.
226       4) Changing z-order.
227       5) Group / ungroup.
228       6) Copy and paste.
229       7) Computation of decorations.
230   * Documentation of all APIs.
232 ===============================================================================
233 UPCOMING STYLE REWRITING TOOL
234 ===============================================================================
236 Reminders
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
253     of ambiguities.
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 ===============================================================================
271 Remaining issues
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
278     data to names).
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 ===============================================================================
289 Publicity
291 Mirror sites
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,
312     numbering)
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?
326   * A simple macro
327   * A simple style package
328   * Customization of some existing macros
330 Etc.