1
0
Fork 0
doc/devel/scheme/overview/overview-meta.en.tm

123 lines
4.8 KiB
Plaintext
Raw Normal View History

2019-01-17 00:04:56 +08:00
<TeXmacs|1.99.8>
2011-08-28 15:59:50 +08:00
2019-01-17 00:04:56 +08:00
<style|<tuple|tmdoc|old-spacing>>
2011-08-28 15:59:50 +08:00
<\body>
<tmdoc-title|Meta information and logical programming>
Small software projects usually consist of a collection of routines and
data. In a large software project, where a typical contributor has no
2019-01-17 00:04:56 +08:00
complete overview of the program, it is a good practice to associate
2011-08-28 15:59:50 +08:00
additional <em|meta-information> to the individual routines and data. This
meta-information typically serves documentation purposes, but becomes even
2012-09-01 00:03:13 +08:00
more interesting if it can be used in an automated fashion to implement
2011-08-28 15:59:50 +08:00
more general additional functionality.
The <scm|tm-define> macro supports several options for associating
meta-information to <scheme> functions and symbols. For instance, the
<scm|:synopsis>, <scm|:argument> and <scm|:returns> options allow you to
associate short documentation strings to the function, its arguments and
its return value:
2012-09-01 00:03:13 +08:00
<\scm-code>
2011-08-28 15:59:50 +08:00
(tm-define (square x)
\ \ (:synopsis "Compute the square of @x")
\ \ (:argument x "A number")
\ \ (:returns "The square of @x")
\ \ (* x x))
2012-09-01 00:03:13 +08:00
</scm-code>
2011-08-28 15:59:50 +08:00
This information is exploited by <TeXmacs> in several ways. For instance,
the synopsis of the function can be retrieved by executing <scm|(help
square)>. More interestingly, assuming that we defined <scm|square> as
2012-09-01 00:03:13 +08:00
above, typing <shortcut|(interactive exec-interactive-command)> followed by
<scm|square> and <shortcut|(kbd-return)> allows you to execute <scm|square>
2019-01-17 00:04:56 +08:00
in an interactive way: you will be prompted for \PA number\Q on the footer.
2012-09-01 00:03:13 +08:00
Moreover, after typing <shortcut|(interactive exec-interactive-command)>,
2019-01-17 00:04:56 +08:00
you will be able to use \Ptab-completion\Q in order to enter <scm|square>:
2011-08-28 15:59:50 +08:00
typing <key|s q u tab> will usually complete into<nbsp><scm|square>.
In a similar vein, the <scm|:interactive> and <scm|:check-mark> options
allow you to specify that a given routine requires interactive user input
or when it should give rise to a check-mark when used in a menu. For
instance, the statement
2012-09-01 00:03:13 +08:00
<\scm-code>
2011-08-28 15:59:50 +08:00
(tm-property (choose-file fun text type)
\ \ (:interactive #t))
2012-09-01 00:03:13 +08:00
</scm-code>
2011-08-28 15:59:50 +08:00
in the source code of <TeXmacs> states that <scm|choose-file> is an
2019-01-17 00:04:56 +08:00
interactive command. As a consequence, the <menu|File|Load> entry, which is
2011-08-28 15:59:50 +08:00
defined by
2012-09-01 00:03:13 +08:00
<\scm-code>
2011-08-28 15:59:50 +08:00
("Load" (choose-file load-buffer "Load file" ""))
2012-09-01 00:03:13 +08:00
</scm-code>
2011-08-28 15:59:50 +08:00
will be followed by dots <scm|...> in the <menu|File> menu. The interesting
point here is that, although the command <scm|choose-file> may be reused
several times in different menu entries, we only have to specify once that
it is an interactive command. Similarly, consider the definition
2012-09-01 00:03:13 +08:00
<\scm-code>
2011-08-28 15:59:50 +08:00
(tm-define (toggle-session-math-input)
\ \ (:check-mark "v" session-math-input?)
\ \ (session-use-math-input (not (session-math-input?))))
2012-09-01 00:03:13 +08:00
</scm-code>
2011-08-28 15:59:50 +08:00
Given a menu item with <scm|(toggle-session-math-input)> as its associated
action, this definition specifies in particular that a check-mark should be
displayed before the menu item whenever the <scm|session-math-input?>
predicate holds.
Another frequently used option is <scm|:secure>, which specifies that a
2012-09-01 00:03:13 +08:00
given routine can be used inside <TeXmacs> documents, in particular inside
<markup|extern> and <markup|action> macros. For instance, the default
implementation of the <markup|fold> tag allows the user to click on the
2019-01-17 00:04:56 +08:00
\P<math|<op|\<circ\>>>\Q before the folded text so as to unfold the tag.
When doing this, the scheme script <scm|mouse-unfold> is launched. However,
for this to work, the <scm|mouse-unfold> function needs to be secure:
2012-09-01 00:03:13 +08:00
<\scm-code>
2013-11-14 21:33:16 +08:00
(tm-define mouse-unfold
2011-08-28 15:59:50 +08:00
\ \ (:secure #t)
\ \ (with-action t
\ \ \ \ (tree-go-to t :start)
\ \ \ \ (fold)))
2012-09-01 00:03:13 +08:00
</scm-code>
2011-08-28 15:59:50 +08:00
2012-09-01 00:03:13 +08:00
You can read more about the tags which depend on <scheme> scripts in
2019-01-17 00:04:56 +08:00
\P<hlink|Invoking <scheme> scripts from <TeXmacs>
markup|overview-start.en.tm#markup-scripts>\Q.\
2011-08-28 15:59:50 +08:00
In the future, the number of options for entering meta-information is
likely to increase. <TeXmacs> also supports an additional mechanism for the
automatic deduction of new meta-properties from existing meta-properties.
This mechanism is based on a less general, but more efficient form of
<em|logical programming>. However, since it is not fully stable yet, it
will be documented only later.
<tmdoc-copyright|2005|Joris van der Hoeven>
<tmdoc-license|Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License, Version 1.1
or any later version published by the Free Software Foundation; with no
Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
Texts. A copy of the license is included in the section entitled "GNU Free
Documentation License".>
2019-01-17 00:04:56 +08:00
</body>
<initial|<\collection>
</collection>>