2019-07-23 19:42:19 +00:00
|
|
|
|
#LyX 2.3 created this file. For more info see http://www.lyx.org/
|
|
|
|
|
\lyxformat 544
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_document
|
|
|
|
|
\begin_header
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\save_transient_properties true
|
|
|
|
|
\origin unavailable
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\textclass scrartcl
|
|
|
|
|
\begin_preamble
|
|
|
|
|
\usepackage{tikz}
|
|
|
|
|
\usepackage{pgffor}
|
|
|
|
|
\end_preamble
|
|
|
|
|
\options DIV=11
|
|
|
|
|
\use_default_options false
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\maintain_unincluded_children false
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\language english
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\language_package default
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\inputencoding auto
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\fontencoding global
|
|
|
|
|
\font_roman "newcent" "default"
|
|
|
|
|
\font_sans "default" "default"
|
|
|
|
|
\font_typewriter "default" "default"
|
|
|
|
|
\font_math "auto" "auto"
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\font_default_family default
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\use_non_tex_fonts false
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\font_sc false
|
|
|
|
|
\font_osf false
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\font_sf_scale 100 100
|
|
|
|
|
\font_tt_scale 100 100
|
|
|
|
|
\use_microtype false
|
|
|
|
|
\use_dash_ligatures true
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\graphics default
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\default_output_format default
|
|
|
|
|
\output_sync 0
|
|
|
|
|
\bibtex_command default
|
|
|
|
|
\index_command default
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\paperfontsize default
|
|
|
|
|
\spacing single
|
|
|
|
|
\use_hyperref true
|
|
|
|
|
\pdf_title "Teapot User Guide"
|
|
|
|
|
\pdf_author "Michael Haardt, Jörg Walter"
|
|
|
|
|
\pdf_bookmarks true
|
|
|
|
|
\pdf_bookmarksnumbered true
|
|
|
|
|
\pdf_bookmarksopen true
|
|
|
|
|
\pdf_bookmarksopenlevel 2
|
|
|
|
|
\pdf_breaklinks false
|
|
|
|
|
\pdf_pdfborder true
|
|
|
|
|
\pdf_colorlinks false
|
|
|
|
|
\pdf_backref false
|
|
|
|
|
\pdf_pdfusetitle true
|
|
|
|
|
\papersize default
|
|
|
|
|
\use_geometry false
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\use_package amsmath 1
|
|
|
|
|
\use_package amssymb 1
|
|
|
|
|
\use_package cancel 1
|
|
|
|
|
\use_package esint 1
|
|
|
|
|
\use_package mathdots 0
|
|
|
|
|
\use_package mathtools 1
|
|
|
|
|
\use_package mhchem 1
|
|
|
|
|
\use_package stackrel 1
|
|
|
|
|
\use_package stmaryrd 1
|
|
|
|
|
\use_package undertilde 1
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\cite_engine basic
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\cite_engine_type default
|
|
|
|
|
\biblio_style plain
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\use_bibtopic false
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\use_indices false
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\paperorientation portrait
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\suppress_date false
|
|
|
|
|
\justification true
|
|
|
|
|
\use_refstyle 0
|
|
|
|
|
\use_minted 0
|
|
|
|
|
\index Index
|
|
|
|
|
\shortcut idx
|
|
|
|
|
\color #008000
|
|
|
|
|
\end_index
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\secnumdepth 3
|
|
|
|
|
\tocdepth 3
|
|
|
|
|
\paragraph_separation indent
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\paragraph_indentation default
|
|
|
|
|
\is_math_indent 0
|
|
|
|
|
\math_numbering_side default
|
|
|
|
|
\quotes_style english
|
|
|
|
|
\dynamic_quotes 0
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\papercolumns 1
|
|
|
|
|
\papersides 1
|
|
|
|
|
\paperpagestyle fancy
|
|
|
|
|
\tracking_changes false
|
|
|
|
|
\output_changes false
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\html_math_output 0
|
|
|
|
|
\html_css_as_file 0
|
|
|
|
|
\html_be_strict false
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_header
|
|
|
|
|
|
|
|
|
|
\begin_body
|
|
|
|
|
|
|
|
|
|
\begin_layout Title
|
|
|
|
|
Teapot User Guide
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Author
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Michael Haardt, Jörg Walter, Glen Whitney
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Date
|
|
|
|
|
\begin_inset CommandInset href
|
|
|
|
|
LatexCommand href
|
|
|
|
|
name " http://www.syntax-k.de/projekte/teapot"
|
|
|
|
|
target "http://www.syntax-k.de/projekte/teapot"
|
2019-07-23 19:42:19 +00:00
|
|
|
|
literal "false"
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Publishers
|
|
|
|
|
\begin_inset CommandInset href
|
|
|
|
|
LatexCommand href
|
|
|
|
|
name "https://code.studioinfinity.org/glen/teapot-spreadsheet"
|
|
|
|
|
target "https://code.studioinfinity.org/glen/teapot-spreadsheet"
|
|
|
|
|
literal "false"
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Abstract
|
2019-07-23 19:42:19 +00:00
|
|
|
|
For ages, spreadsheet programs have been closely associated with financial
|
2019-07-22 20:32:33 +00:00
|
|
|
|
calculations done by typical end-users.
|
2019-07-23 19:42:19 +00:00
|
|
|
|
But time has shown that there is also hacker's work which can be done with
|
|
|
|
|
them, like calculate monitor timings for various resolutions, or produce
|
|
|
|
|
convincing time statistics which justify the lack of documentation or the
|
|
|
|
|
need for a budget increase to your employer.
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
The first part of this user guide explains how the various operations of
|
2019-09-09 14:33:41 +00:00
|
|
|
|
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
are used, whereas the second part gives an introduction to spreadsheets
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
and explains the expression evaluator and its functions and operators.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
\begin_inset CommandInset toc
|
|
|
|
|
LatexCommand tableofcontents
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
\begin_inset Newpage newpage
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Section
|
|
|
|
|
Copyright, Contributors and License
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
2019-07-23 19:42:19 +00:00
|
|
|
|
(Table Editor And Planner, Or: Teapot), is copyrighted 1995–2006 by Michael
|
2023-07-26 03:21:43 +00:00
|
|
|
|
Haardt, and 2009–2010 by Jörg Walter, and 2019-2023 by Glen Whitney, and
|
|
|
|
|
is licensed under the Gnu General Public License v3 or later.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
The implementation of clocked expressions is modelled after the description
|
|
|
|
|
of clocked evaluation in the PhD work of Jörg Wittenberger at the University
|
|
|
|
|
of Technology in Dresden, Germany.
|
|
|
|
|
The trigonometric functions were inspired by Koniorczyk Mátyás.
|
|
|
|
|
The context output format was contributed by Marko Schuetz.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
The (currently unused) message catalogs were contributed by Guido Müsch,
|
|
|
|
|
Wim van Dorst, and Volodymyr M.
|
|
|
|
|
Lisivka.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
This program is free software: you can redistribute it and/or modify it
|
|
|
|
|
under the terms of the GNU General Public License as published by the Free
|
|
|
|
|
Software Foundation, either version 3 of the License, or (at your option)
|
|
|
|
|
any later version.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
This program is distributed in the hope that it will be useful, but WITHOUT
|
|
|
|
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
|
|
|
FOR A PARTICULAR PURPOSE.
|
|
|
|
|
See the GNU General Public License for more details.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2019-07-23 19:42:19 +00:00
|
|
|
|
You should have received a copy of the GNU General Public License v3 along
|
2019-07-22 20:32:33 +00:00
|
|
|
|
with this program.
|
|
|
|
|
If not, see <
|
|
|
|
|
\begin_inset CommandInset href
|
|
|
|
|
LatexCommand href
|
|
|
|
|
target "http://www.gnu.org/licenses/"
|
2019-07-23 19:42:19 +00:00
|
|
|
|
literal "false"
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
>.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Section
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Introduction to Spreadsheets
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsection
|
|
|
|
|
General Introduction
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2019-07-23 19:42:19 +00:00
|
|
|
|
A spreadsheet consists of cells formed by rows and columns.
|
|
|
|
|
Additionally, in many spreadsheets you have a third dimension, which you
|
|
|
|
|
can imagine as various layers laying on top of each other.
|
|
|
|
|
The third dimension allows you to hide intermediate results, calculate
|
|
|
|
|
additional results you do not want to appear in the
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
official
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2019-07-23 19:42:19 +00:00
|
|
|
|
tables, keep information per time period (like 12 layers for each month
|
|
|
|
|
in a year) while allowing you to make calculations over the entire time
|
|
|
|
|
interval and much more.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
Figure
|
|
|
|
|
\begin_inset CommandInset ref
|
|
|
|
|
LatexCommand ref
|
|
|
|
|
reference "fig:Three-Dimensional-Spread-Sheet"
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
shows the three dimensions:
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
\begin_inset Float figure
|
|
|
|
|
placement h
|
|
|
|
|
wide false
|
|
|
|
|
sideways false
|
|
|
|
|
status open
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
\align center
|
|
|
|
|
\begin_inset ERT
|
|
|
|
|
status open
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
\backslash
|
|
|
|
|
color{white}
|
|
|
|
|
\backslash
|
|
|
|
|
hrule}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\backslash
|
|
|
|
|
begin{tikzpicture}[scale=.1,anchor=west]
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\backslash
|
|
|
|
|
foreach
|
|
|
|
|
\backslash
|
|
|
|
|
z in {0,2,4,6}
|
|
|
|
|
\backslash
|
|
|
|
|
filldraw[fill=white,ystep=1,xstep=3,shift={(0,0,
|
|
|
|
|
\backslash
|
|
|
|
|
z)}] (0,0) rectangle (60,10) (0,0) grid (60,10);
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\backslash
|
|
|
|
|
draw[->] (70,10,10) -- +(30,0,0) node{x};
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\backslash
|
|
|
|
|
draw[->] (70,10,10) -- +(0,-10,0) node{y};
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\backslash
|
|
|
|
|
draw[->] (70,10,10) -- +(0,0,-10) node{z};
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\backslash
|
|
|
|
|
end{tikzpicture}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
\backslash
|
|
|
|
|
color{white}
|
|
|
|
|
\backslash
|
|
|
|
|
hrule}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\begin_inset Caption Standard
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
\begin_inset CommandInset label
|
|
|
|
|
LatexCommand label
|
|
|
|
|
name "fig:Three-Dimensional-Spread-Sheet"
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2023-04-30 16:19:12 +00:00
|
|
|
|
Three-Dimensional Spreadsheet Layout
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
You can think of cells as variables, which value is the value of an associated
|
|
|
|
|
expression.
|
|
|
|
|
The expression may be constant, like 1.23, or it may be a function of other
|
|
|
|
|
cell values.
|
|
|
|
|
The advantage compared to a programmable calculator is that if you change
|
|
|
|
|
a number, you directly see all changes in other cells caused by that.
|
|
|
|
|
Often this allows you to get a feeling how much you may change basic sizes
|
|
|
|
|
with still getting satisfying results without having to solve the problem
|
|
|
|
|
analytically.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
Spreadsheets offer many editing operations in order to modify, clear, copy
|
2019-07-22 20:32:33 +00:00
|
|
|
|
and move cells or blocks of cells.
|
|
|
|
|
Besides the usual mathematical functions, there are functions which work
|
|
|
|
|
on blocks of cells, like calculating the sum of a block or counting all
|
|
|
|
|
non-empty elements.
|
|
|
|
|
Further there are functions working on character strings, because most
|
|
|
|
|
likely you also want text besides numbers.
|
|
|
|
|
The next section will introduce you to some of these by examples.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2019-09-09 14:33:41 +00:00
|
|
|
|
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
is a traditional spreadsheet and a typical UNIX program, because it does
|
|
|
|
|
just one thing: Calculations.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
It does not include any graphics functions and never will, but it allows
|
|
|
|
|
to export data in many formats, so you can use your favourite graphics
|
|
|
|
|
software.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsection
|
|
|
|
|
The First Steps
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2019-09-09 14:33:41 +00:00
|
|
|
|
Now that you have an idea what
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
is about, it is probably a good time to take your first steps with it.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
This section will show you how to create and save a sheet which contains
|
|
|
|
|
two numbers and their sum.
|
|
|
|
|
Start the program without any arguments
|
|
|
|
|
\begin_inset Foot
|
|
|
|
|
status collapsed
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-09-09 14:33:41 +00:00
|
|
|
|
If you are using the graphical version of
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
, please see section
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset CommandInset ref
|
|
|
|
|
LatexCommand vref
|
2019-07-23 19:42:19 +00:00
|
|
|
|
reference "subsec:Differences-Between-User"
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
:
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Quote
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
teapot
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
You see an empty sheet with the cell cursor being at the upper left corner.
|
|
|
|
|
Further, the status line tells you that this cell is really empty:
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Quote
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
E @(0,0,0)=
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
The
|
|
|
|
|
\family typewriter
|
|
|
|
|
E
|
|
|
|
|
\family default
|
|
|
|
|
means that you can edit the sheet.
|
|
|
|
|
A
|
|
|
|
|
\family typewriter
|
|
|
|
|
V
|
|
|
|
|
\family default
|
|
|
|
|
would mean that you could only view its contents.
|
|
|
|
|
The meaning of
|
|
|
|
|
\family typewriter
|
|
|
|
|
@()
|
|
|
|
|
\family default
|
|
|
|
|
will be explained soon.
|
2019-09-09 14:33:41 +00:00
|
|
|
|
You are now in the command mode of
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
Press the
|
|
|
|
|
\series bold
|
|
|
|
|
Enter
|
|
|
|
|
\series default
|
|
|
|
|
key to edit this cell.
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
A complete list of command mode operations will be given later.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
A prompt will appear below the status line:
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Quote
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
Cell contents:
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
\series bold
|
|
|
|
|
1
|
|
|
|
|
\series default
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
Now the cell at position 0,0,0 has the integer constant 1.
|
|
|
|
|
The status line shows you the cell contents, whereas in the sheet you see
|
|
|
|
|
its value.
|
|
|
|
|
Since constants are identical with their values, both are 1.
|
|
|
|
|
Now move the cell cursor down one row and edit that cell, giving it the
|
|
|
|
|
integer constant
|
|
|
|
|
\family typewriter
|
|
|
|
|
41
|
|
|
|
|
\family default
|
|
|
|
|
.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
Now that you have two numbers, move the cell cursor to cell 0,2,0 and give
|
|
|
|
|
that cell the following contents:
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Quote
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
Cell contents:
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
\series bold
|
|
|
|
|
@(0,0,0)+@(0,1,0)
|
|
|
|
|
\series default
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
If you were confused about the difference between contents and value of
|
|
|
|
|
a cell, it should become more clear now: The status line shows the contents,
|
|
|
|
|
which is the arithmetic expression to calculate the sum of two cells, whereas
|
|
|
|
|
in the sheet you see the value of that expression: 42, which was to be
|
|
|
|
|
expected.
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
@(
|
|
|
|
|
\family default
|
|
|
|
|
\shape italic
|
|
|
|
|
x
|
|
|
|
|
\family typewriter
|
|
|
|
|
\shape default
|
|
|
|
|
,
|
|
|
|
|
\family default
|
|
|
|
|
\shape italic
|
|
|
|
|
y
|
|
|
|
|
\family typewriter
|
|
|
|
|
\shape default
|
|
|
|
|
,
|
|
|
|
|
\family default
|
|
|
|
|
\shape italic
|
|
|
|
|
z
|
|
|
|
|
\family typewriter
|
|
|
|
|
\shape default
|
|
|
|
|
)
|
|
|
|
|
\family default
|
|
|
|
|
is a function which takes three coordinates and returns the value of the
|
|
|
|
|
cell at the given position.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
As you can see, the arithmetic expression is not too readable.
|
|
|
|
|
If you would move cells around, it would not even work any more.
|
|
|
|
|
For these reasons, you can use symbolic names instead of coordinates, called
|
|
|
|
|
labels.
|
|
|
|
|
When used in an expression, a label is like a pointer to a cell, its data
|
|
|
|
|
type is
|
|
|
|
|
\emph on
|
|
|
|
|
location
|
|
|
|
|
\emph default
|
|
|
|
|
.
|
|
|
|
|
Move to cell 0,0,0 and use
|
|
|
|
|
\series bold
|
|
|
|
|
/
|
|
|
|
|
\series default
|
|
|
|
|
(slash) in command mode to get into the main menu.
|
|
|
|
|
Depending on your screen size, you may not see all of it.
|
|
|
|
|
In this case, move the highlighted block right (or left) to scroll through
|
|
|
|
|
it and to see all items.
|
|
|
|
|
Now change its label attribute: A)ttributes, L)abel:
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Quote
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
Cell label:
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
\series bold
|
|
|
|
|
Paper
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
Then go one cell down and change its label to
|
|
|
|
|
\series bold
|
|
|
|
|
Tapes
|
|
|
|
|
\series default
|
|
|
|
|
.
|
|
|
|
|
After, move again one cell down and change the expression to:
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Quote
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
Cell contents:
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
\series bold
|
|
|
|
|
@(Paper)+@(Tapes)
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
As you see, you can call the function
|
|
|
|
|
\family typewriter
|
|
|
|
|
@
|
|
|
|
|
\family default
|
|
|
|
|
with three integer values or with one location value.
|
|
|
|
|
Now the expression is more understandable, at least to you.
|
|
|
|
|
To someone else, the sheet only contained three numbers, so a little text
|
|
|
|
|
should be added.
|
|
|
|
|
To accomplish that, a new column needs to be inserted: B)lock, I)insert,
|
|
|
|
|
C)olumn, W)hole column.
|
|
|
|
|
The last menu item means that you want to insert a whole new column, not
|
|
|
|
|
only a partial column.
|
|
|
|
|
If you move the cursor around, you will see that everything is still fine,
|
|
|
|
|
because you used labels.
|
|
|
|
|
Go to cell 0,0,0 and edit it:
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Quote
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
Cell contents:
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
\series bold
|
|
|
|
|
"Paper:"
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
This is how you enter strings.
|
|
|
|
|
A string is a data type on its own, don't confuse this with labels.
|
|
|
|
|
If you feel like it, leave the quotes and the colon away, and you will
|
|
|
|
|
see the difference, because the result will not be a string, but the value
|
|
|
|
|
of the label
|
|
|
|
|
\family typewriter
|
|
|
|
|
Paper
|
|
|
|
|
\family default
|
|
|
|
|
, which is
|
|
|
|
|
\family typewriter
|
|
|
|
|
&(1,0,0)
|
|
|
|
|
\family default
|
|
|
|
|
.
|
|
|
|
|
Now change the cells below to
|
|
|
|
|
\series bold
|
|
|
|
|
"Tapes:"
|
|
|
|
|
\series default
|
|
|
|
|
and
|
|
|
|
|
\series bold
|
|
|
|
|
"Result:"
|
|
|
|
|
\series default
|
|
|
|
|
.
|
|
|
|
|
This is something that is understandable to others, too.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
As the last step, save your work sheet to a file: F)ile, S)ave.
|
2019-08-27 06:56:19 +00:00
|
|
|
|
The native file format is Teapot ASCII, so choose that.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
Up to now, your sheet does not have a name, so you will be prompted for
|
|
|
|
|
one:
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Quote
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
New file name:
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
\series bold
|
|
|
|
|
firststep
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
Unless you see an error message after, your sheet is written to a file.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
If you have come this far, quit (from the main menu) and you have successfully
|
2019-09-09 14:33:41 +00:00
|
|
|
|
completed your first steps on using
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
Now you know cells, the difference between contents and values, you learned
|
|
|
|
|
that labels are a good thing and you can do simple cell modifications as
|
|
|
|
|
well as saving your work.
|
|
|
|
|
This is enough for most applications.
|
|
|
|
|
If the capabilities described in the next section confuse you, then it
|
|
|
|
|
is unlikely that you need them really.
|
|
|
|
|
Just skip that section and don't worry about it.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
You may wonder what happens if you have circular dependencies, i.e.
|
|
|
|
|
you have a cell which evaluates to its own value plus one.
|
|
|
|
|
Well, the answer is that it depends on the order in which you create this
|
|
|
|
|
cell.
|
|
|
|
|
If you first give it the value 1 and after edit it to contain the expression
|
|
|
|
|
which refers to itself plus 1, then you will find that each recalculation,
|
|
|
|
|
like after editing other cells, will increase the value.
|
|
|
|
|
While this may be funny, it is certainly not useful as you can not reset
|
|
|
|
|
the cell and you have little control of its development.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
What you really want is a base value and an iterative expression along with
|
|
|
|
|
a way to control the recalculations.
|
2019-09-09 14:33:41 +00:00
|
|
|
|
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
supports this by allowing two expressions per cell.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
The expressions you have used so far are the ones which evaluate to the
|
|
|
|
|
base values.
|
|
|
|
|
Each time you edit a cell, the whole sheet will be reset, which means that
|
|
|
|
|
all results are recalculated using the base values.
|
|
|
|
|
After, you can clock the sheet, which is why the iterative part is also
|
|
|
|
|
called clocked expression.
|
|
|
|
|
A clock is an atomic operation, which means that all cell results will
|
|
|
|
|
be recalculated in a way that the new result will only show after the entire
|
|
|
|
|
recalculation.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2019-09-09 14:33:41 +00:00
|
|
|
|
An example will demonstrate how to make use of this feature.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
The notation
|
|
|
|
|
\shape italic
|
|
|
|
|
x
|
|
|
|
|
\shape default
|
|
|
|
|
->
|
|
|
|
|
\shape italic
|
|
|
|
|
y
|
|
|
|
|
\shape default
|
|
|
|
|
means that
|
|
|
|
|
\shape italic
|
|
|
|
|
x
|
|
|
|
|
\shape default
|
|
|
|
|
is the base expression and
|
|
|
|
|
\shape italic
|
|
|
|
|
y
|
|
|
|
|
\shape default
|
|
|
|
|
is the clocked expression.
|
2019-09-09 14:33:41 +00:00
|
|
|
|
Don't let this confuse you, as both are entered separately:
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
does not have an -> operator, but it displays the cell contents this way
|
|
|
|
|
so you can easily see both expressions at once.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
So, give the cell a base expression of
|
|
|
|
|
\family typewriter
|
|
|
|
|
1
|
|
|
|
|
\family default
|
|
|
|
|
and a clocked expression of
|
|
|
|
|
\family typewriter
|
|
|
|
|
@(0,0,0)+1
|
|
|
|
|
\family default
|
|
|
|
|
(using
|
|
|
|
|
\series bold
|
|
|
|
|
ESC-Enter
|
|
|
|
|
\series default
|
|
|
|
|
or
|
|
|
|
|
\series bold
|
|
|
|
|
Meta-Enter
|
|
|
|
|
\series default
|
|
|
|
|
) and you will see:
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Quote
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
@(0,0,0)=1 -> @(0,0,0)+1
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
The sheet is currently in reset condition and the result is 1.
|
|
|
|
|
Now clock it and you will see how the value increases.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2019-07-23 19:42:19 +00:00
|
|
|
|
After this introductory chapter, you should be familiar with the basic concepts
|
2023-04-30 16:19:12 +00:00
|
|
|
|
in spreadsheets.
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
The next chapters explain all operations available in detail.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
You should read them to get an overview of the possibilities offered by
|
2019-09-09 14:33:41 +00:00
|
|
|
|
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
.
|
|
|
|
|
Finally, we will come back to using
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
by showing some common problems and their solutions.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsection
|
|
|
|
|
\begin_inset CommandInset label
|
|
|
|
|
LatexCommand label
|
2019-07-23 19:42:19 +00:00
|
|
|
|
name "subsec:Differences-Between-User"
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
Differences Between User Interfaces
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
comes in two flavours: A mouse-and-keyboard operated graphical application
|
|
|
|
|
and a traditional console-based program.
|
2019-09-09 14:33:41 +00:00
|
|
|
|
There has been a concerted effort to ensure this manual accurately documents
|
|
|
|
|
both flavours, but there could still be occasional inconsistencies.
|
|
|
|
|
Note that the executable name for the graphical version of
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
is typically
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\family typewriter
|
|
|
|
|
fteapot
|
|
|
|
|
\family default
|
|
|
|
|
, so to follow the tutorial above with the GUI version, start with that
|
|
|
|
|
command instead of
|
|
|
|
|
\family typewriter
|
|
|
|
|
teapot
|
|
|
|
|
\family default
|
|
|
|
|
.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2019-09-09 14:33:41 +00:00
|
|
|
|
Most notably, at the moment the key bindings can be fairly different in
|
|
|
|
|
the two flavours.
|
|
|
|
|
If something doesn't work for
|
|
|
|
|
\family typewriter
|
|
|
|
|
fteapot
|
|
|
|
|
\family default
|
|
|
|
|
as described here, check the pull-down menus, where most operations can
|
|
|
|
|
be found.
|
|
|
|
|
In addition to the keys it shares with the console version, the GUI variant
|
|
|
|
|
has extended mouse and keyboard bindings that work similarly to other GUI
|
|
|
|
|
applications.
|
2019-07-23 19:42:19 +00:00
|
|
|
|
The table in the following section attempts to summarize all bindings from
|
|
|
|
|
both variants.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Section
|
|
|
|
|
Command Mode
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2019-09-09 14:33:41 +00:00
|
|
|
|
Right after starting
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
, you are in the command mode.
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
Many operations from the command mode are also available from menus, but
|
2019-07-22 20:32:33 +00:00
|
|
|
|
using keys is faster and some things, like moving the cell cursor, are
|
|
|
|
|
only available through keys.
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Tables
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset CommandInset ref
|
|
|
|
|
LatexCommand vref
|
|
|
|
|
reference "tab:Key-Bindings-in"
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2019-07-23 19:42:19 +00:00
|
|
|
|
through
|
|
|
|
|
\begin_inset CommandInset ref
|
|
|
|
|
LatexCommand vref
|
|
|
|
|
reference "tab:Key-Bindings-in-2"
|
|
|
|
|
plural "false"
|
|
|
|
|
caps "false"
|
|
|
|
|
noprefix "false"
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
list all available key bindings
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset Foot
|
|
|
|
|
status collapsed
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-09-09 14:33:41 +00:00
|
|
|
|
If you are using the graphical version of
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
, please see section
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset CommandInset ref
|
|
|
|
|
LatexCommand vref
|
2019-07-23 19:42:19 +00:00
|
|
|
|
reference "subsec:Differences-Between-User"
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
.
|
2019-07-23 19:42:19 +00:00
|
|
|
|
If a binding is only available in the console variant, it is enclosed in
|
|
|
|
|
square brackets; if the binding only works in the graphical variant, it
|
|
|
|
|
is in curly braces (the mnemonic for this notation is that square brackets
|
|
|
|
|
are
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
plain
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
and curly braces are
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
fancy
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
).
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
\begin_inset Float table
|
2019-07-23 19:42:19 +00:00
|
|
|
|
placement !tbh
|
2019-07-22 20:32:33 +00:00
|
|
|
|
wide false
|
|
|
|
|
sideways false
|
|
|
|
|
status open
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
\begin_inset Tabular
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<lyxtabular version="3" rows="19" columns="3">
|
|
|
|
|
<features tabularvalignment="middle">
|
|
|
|
|
<column alignment="left" valignment="top" width="6cm">
|
|
|
|
|
<column alignment="left" valignment="top">
|
|
|
|
|
<column alignment="left" valignment="top">
|
2019-07-22 20:32:33 +00:00
|
|
|
|
<row>
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
\series bold
|
|
|
|
|
Cursor Motions
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="left" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Function Key
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
ASCII Key
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
Operation
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Next Character/Right Arrow
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
2019-07-22 20:32:33 +00:00
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
[Ctrl-F]
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Right
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Prev.
|
|
|
|
|
Character/Left Arrow
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
[Ctrl-B]
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Left
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Next Line/Down Arrow
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
2019-07-22 20:32:33 +00:00
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
[Ctrl-N]
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Down
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Previous Line/Up Arrow
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
[Ctrl-P]
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Up
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
{Shift-PageDown}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
{Click on right of layer number}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
2019-07-22 20:32:33 +00:00
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2023-04-09 05:41:50 +00:00
|
|
|
|
+
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Next Layer
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
{Shift-PageUp}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
{Click on left of layer number}
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
- (Dash/Minus)
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Previous Layer
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Begin/Home
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
2019-07-22 20:32:33 +00:00
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
[Ctrl-A]
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
To column 0
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
End
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
[Ctrl-E]
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
To last column
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
{Ctrl-Home} {Ctrl-PageUp}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2023-04-09 05:41:50 +00:00
|
|
|
|
<
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
To row 0
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
{Ctrl-End} {Ctrl-PageDown}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2023-04-09 05:41:50 +00:00
|
|
|
|
>
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
To last row
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
{Shift-Home}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2023-04-09 05:41:50 +00:00
|
|
|
|
_ (Underscore)
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
To Layer 0
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
{Shift-End}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2023-04-09 05:41:50 +00:00
|
|
|
|
*
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
To last layer
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2023-04-09 05:41:50 +00:00
|
|
|
|
{Ctrl-Right}
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
[Ctrl-X >]
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Jump one page right
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2023-04-09 05:41:50 +00:00
|
|
|
|
{Ctrl-Left}
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
[Ctrl-X >]
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Jump one page left
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
PageDown {Ctrl-Down}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
[Ctrl-V]
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Jump one page down
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
PageUp {Ctrl-Up}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
[Meta-V]
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Jump one page up
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="left" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
{Ctrl-G}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Go to arbitrary location
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
</lyxtabular>
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
\begin_inset Caption Standard
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
\begin_inset CommandInset label
|
|
|
|
|
LatexCommand label
|
|
|
|
|
name "tab:Key-Bindings-in"
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
Cursor Motion Key Bindings in Command Mode
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
\begin_inset Float table
|
|
|
|
|
placement !tbh
|
|
|
|
|
wide false
|
|
|
|
|
sideways false
|
|
|
|
|
status open
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
\begin_inset Tabular
|
2023-04-09 05:41:50 +00:00
|
|
|
|
<lyxtabular version="3" rows="15" columns="3">
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<features tabularvalignment="middle">
|
|
|
|
|
<column alignment="left" valignment="top" width="5cm">
|
|
|
|
|
<column alignment="left" valignment="top">
|
|
|
|
|
<column alignment="left" valignment="top">
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
\series bold
|
|
|
|
|
Program Control
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="left" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Function Key
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
ASCII Key
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
Operation
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2023-04-09 05:41:50 +00:00
|
|
|
|
[F10] {Menu bar always shown}
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
[/]
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Main menu
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
F3
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
[Ctrl-X Ctrl-S] {Ctrl-S}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Save sheet
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
{Ctrl-Shift-S}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Save sheet as...
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
[Esc z]
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Save sheet and quit
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
F2
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
[Ctrl-X Ctrl-R] {Ctrl-O}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Load sheet
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
{Meta-F}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Activate File menu
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
2023-04-09 05:41:50 +00:00
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
{Meta-B}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Activate Block menu
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
{Meta-V}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Activate View menu
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
{Meta-O}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Activate fOrmat menu
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
2023-04-09 05:41:50 +00:00
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2023-04-09 05:41:50 +00:00
|
|
|
|
F1
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2023-04-09 05:41:50 +00:00
|
|
|
|
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2023-04-09 05:41:50 +00:00
|
|
|
|
Show help
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Ctrl-L
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Redraw screen
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2023-04-09 05:41:50 +00:00
|
|
|
|
{Esc}
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2023-04-09 05:41:50 +00:00
|
|
|
|
[Ctrl-C] [Ctrl-G]
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Abort current action
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="left" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Cancel
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
[Ctrl-X Ctrl-C] {Ctrl-Q}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Quit
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
</lyxtabular>
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
\begin_inset Caption Standard
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
\begin_inset CommandInset label
|
|
|
|
|
LatexCommand label
|
|
|
|
|
name "tab:Key-Bindings-in-1"
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
Program Control Key Bindings in Command Mode
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
2019-07-23 19:42:19 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
\begin_inset Float table
|
|
|
|
|
placement !tbh
|
|
|
|
|
wide false
|
|
|
|
|
sideways false
|
|
|
|
|
status open
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
\begin_inset Tabular
|
2023-04-09 05:41:50 +00:00
|
|
|
|
<lyxtabular version="3" rows="29" columns="3">
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<features tabularvalignment="middle">
|
|
|
|
|
<column alignment="left" valignment="top" width="5cm">
|
|
|
|
|
<column alignment="left" valignment="top">
|
|
|
|
|
<column alignment="left" valignment="top">
|
2019-07-22 20:32:33 +00:00
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\series bold
|
|
|
|
|
Modify Cells/Blocks
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<cell alignment="left" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Function Key
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
ASCII Key
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
Operation
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Enter
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
[Ctrl-J] [Ctrl-M]
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Edit cell contents
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Backspace
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
[Ctrl-H]
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Edit cell and delete last character
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
, @,
|
|
|
|
|
\emph on
|
|
|
|
|
digit
|
|
|
|
|
\emph default
|
|
|
|
|
,
|
|
|
|
|
\emph on
|
|
|
|
|
letter
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Overwrite cell contents
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-09-09 14:33:41 +00:00
|
|
|
|
{Meta-Enter}
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
[Esc Ctrl-J] [Esc Ctrl-M]
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Edit clocked cell contents
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-09-09 14:33:41 +00:00
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
{Shift-Meta-Enter}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
[Esc s]
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Edit style expression
|
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
.
|
|
|
|
|
(Period)
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Start/End Mark block (see text)
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
{Shift-Right} {Shift-Left}
|
|
|
|
|
\end_layout
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
{Shift-Down} {Shift-Up}
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Start Mark and Move
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
{Ctrl-Insert}
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
{Ctrl-C}
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Copy cell/text/block; End Mark
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
{Shift-Delete}
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
{Ctrl-X}
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Designate block for moving; End Mark
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
{Shift-Insert}
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
[Ctrl-Y] {Ctrl-V}
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Paste/move block
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
{Delete}
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Clear block
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
{Meta-A}
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Set cell label
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
2023-04-09 05:41:50 +00:00
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
{Ctrl-D}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Toggle cell/block dim
|
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2023-04-09 05:41:50 +00:00
|
|
|
|
{Ctrl-B}
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Toggle cell/block bold
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
2023-04-09 05:41:50 +00:00
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
{Ctrl-I}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Toggle cell/block italic
|
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2023-04-09 05:41:50 +00:00
|
|
|
|
{Ctrl-U}
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Toggle cell/block underlined
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
{Meta-L}
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Make cell/block left justified
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
{Meta-C}
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Make cell/block centered
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
{Meta-R}
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Make cell/block right justified
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
{Meta-P}
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Set cell/block precision
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
{Meta-W}
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Set column width
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
2023-04-09 05:41:50 +00:00
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
{Meta-H}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Set row height
|
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
{Meta-E}
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Toggle cell/block shadowed
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
{Meta-T}
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Toggle cell/block transparent
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
{Meta-I}
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Toggle cell/block ignored
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Ctrl-R
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Reset sheet
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<cell alignment="left" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2023-04-09 05:41:50 +00:00
|
|
|
|
F8, F9, {Shift-Tab}
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
[Ctrl-S]
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Clock sheet
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
</lyxtabular>
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\begin_inset Caption Standard
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
\begin_inset CommandInset label
|
|
|
|
|
LatexCommand label
|
2019-07-23 19:42:19 +00:00
|
|
|
|
name "tab:Key-Bindings-in-2"
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Key Bindings that Modify Cells in Command Mode
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2019-07-23 19:42:19 +00:00
|
|
|
|
One command-mode key in particular needs additional explanation.
|
|
|
|
|
The .
|
|
|
|
|
(Period) marks blocks: The first time it is pressed marks the beginning
|
|
|
|
|
of a block, which is then extended by moving the cell cursor.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
The next time, it marks the end of the block which lets you move the cell
|
|
|
|
|
cursor after without changing the block.
|
|
|
|
|
The third time, it removes the block marks again.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Section
|
|
|
|
|
The Line Editor
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2019-09-09 14:33:41 +00:00
|
|
|
|
Many operations in
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
require editing a line of text, e.g.
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
editing cell contents, typing file names and the like.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
Similar to the command mode, all things can be reached by control codes
|
|
|
|
|
and most by function keys.
|
|
|
|
|
Table
|
|
|
|
|
\begin_inset CommandInset ref
|
|
|
|
|
LatexCommand vref
|
|
|
|
|
reference "tab:Key-Bindings-forLineEditor"
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2019-07-23 19:42:19 +00:00
|
|
|
|
lists all available key bindings, again with brackets for those keys that
|
|
|
|
|
only work in the console variant and curly braces for the graphical variant.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
\begin_inset Float table
|
|
|
|
|
wide false
|
|
|
|
|
sideways false
|
|
|
|
|
status open
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
\begin_inset Tabular
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<lyxtabular version="3" rows="16" columns="3">
|
|
|
|
|
<features tabularvalignment="middle">
|
|
|
|
|
<column alignment="left" valignment="top">
|
|
|
|
|
<column alignment="left" valignment="top">
|
|
|
|
|
<column alignment="left" valignment="top">
|
2019-07-22 20:32:33 +00:00
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Function Key
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
ASCII Key
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
Operation
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Previous Character/Left Arrow
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
[Ctrl-B]
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Move cursor left
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Next Character/Right Arrow
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
[Ctrl-F]
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Move cursor right
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Begin/Home
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
[Ctrl-A]
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Move cursor to column 0
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
End
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
[Ctrl-E]
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Move cursor to last column
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Enter
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
[Ctrl-J] [Ctrl-M]
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Finish editing/accept line
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Ctrl-L
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Redraw screen
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
[Ctrl-T]
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Transpose characters
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
[Ctrl-
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\backslash
|
2019-07-23 19:42:19 +00:00
|
|
|
|
]
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Go to matching paren
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Cancel [Up Arrow] {Esc}
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
[Ctrl-G] [Ctrl-C]
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Abort editing
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Backspace
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
[Ctrl-H]
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Delete previous character
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
[Ctrl-K]
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Delete rest of line
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Delete
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
[Ctrl-?] [Ctrl-D]
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Delete current character
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
[Tab]
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
File name completion
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Insert
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
Toggle insert mode
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
2019-07-22 20:32:33 +00:00
|
|
|
|
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
{Tab}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
[Ctrl-O]
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Toggle motion in sheet (see text)
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
</lyxtabular>
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\begin_inset Caption Standard
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
\begin_inset CommandInset label
|
|
|
|
|
LatexCommand label
|
|
|
|
|
name "tab:Key-Bindings-forLineEditor"
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
Key Bindings for the line editor
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
Besides the regular line editor operations, you may use Ctrl-O (Tab in the
|
2019-07-22 20:32:33 +00:00
|
|
|
|
GUI version) to temporarily leave the editor in order to move around in
|
|
|
|
|
the sheet if you are editing cell contents.
|
|
|
|
|
Another Ctrl-O (resp.
|
|
|
|
|
Tab) brings you back to the line editor.
|
|
|
|
|
While moving around in the sheet, you can insert the value (v) or position
|
|
|
|
|
(p) at the cursor position in the edited cell.
|
|
|
|
|
Clicking on a cell while editing has the same effect as moving to that
|
|
|
|
|
cell and pressing (p).
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Aborting line editing means that you will return immediately to command
|
|
|
|
|
mode; whatever you started doing will have no effect.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Section
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
Interactive Operations
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
Most actions are available through the menu.
|
|
|
|
|
Most of these will be applied to all cells within a block if a block of
|
|
|
|
|
cells is marked.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsection
|
|
|
|
|
\begin_inset CommandInset label
|
|
|
|
|
LatexCommand label
|
2019-07-23 19:42:19 +00:00
|
|
|
|
name "subsec:Cell-Attributes"
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
Cell Attributes
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
Cells can have several attributes:
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Itemize
|
2019-07-23 19:42:19 +00:00
|
|
|
|
A cell label, which is useful because it avoids the need to directly address
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
cells by their position, and because it continues to work if the cell is
|
|
|
|
|
moved or if parts of the spreadsheet are inserted or deleted.
|
2019-09-09 14:33:41 +00:00
|
|
|
|
A cell label must be different from any of the function names (see the
|
|
|
|
|
list in
|
|
|
|
|
\begin_inset CommandInset ref
|
|
|
|
|
LatexCommand ref
|
|
|
|
|
reference "subsec:Functions"
|
|
|
|
|
plural "false"
|
|
|
|
|
caps "false"
|
|
|
|
|
noprefix "false"
|
2019-07-23 19:42:19 +00:00
|
|
|
|
|
2019-09-09 14:33:41 +00:00
|
|
|
|
\end_inset
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
2019-09-09 14:33:41 +00:00
|
|
|
|
).
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Itemize
|
2019-09-09 14:33:41 +00:00
|
|
|
|
A
|
Make tpa the default file format for Teapot
There turned out to be one blocking technical issue for full adpotion of
tpa format, and that was the fact that the printed representation of
floating values inside the tpa file might not reproduce the same double
when read. This change therefore introduces the "hexact" floating point
format, based on the the %La format string, which produces a hex
representation with exact round trips. While working on this, it was
convenient to add a new representation "compact" which is basically the
shorter of decimal and scientific representations, without trailing zeros.
This is now the default float format, but of course one can select decimal
or scientific formats to restore prior appearance. However, full-precision
compact format is now the (only) format for editing cell contents, as it
is accurate and efficient. Of course you can enter floating point values
in any format you like when typing in a formula.
The addition of several new floating point options overloaded the menus
in terminal teapot, so this change also revamps those menus slightly,
including eliminating the unused MenuChoice struct, and just specifying menus
with an array of strings.
Closes #63.
2019-08-24 16:58:46 +00:00
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2019-09-09 14:33:41 +00:00
|
|
|
|
style,
|
Make tpa the default file format for Teapot
There turned out to be one blocking technical issue for full adpotion of
tpa format, and that was the fact that the printed representation of
floating values inside the tpa file might not reproduce the same double
when read. This change therefore introduces the "hexact" floating point
format, based on the the %La format string, which produces a hex
representation with exact round trips. While working on this, it was
convenient to add a new representation "compact" which is basically the
shorter of decimal and scientific representations, without trailing zeros.
This is now the default float format, but of course one can select decimal
or scientific formats to restore prior appearance. However, full-precision
compact format is now the (only) format for editing cell contents, as it
is accurate and efficient. Of course you can enter floating point values
in any format you like when typing in a formula.
The addition of several new floating point options overloaded the menus
in terminal teapot, so this change also revamps those menus slightly,
including eliminating the unused MenuChoice struct, and just specifying menus
with an array of strings.
Closes #63.
2019-08-24 16:58:46 +00:00
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2019-09-09 14:33:41 +00:00
|
|
|
|
which controls the visual appearance of the value of the cell on screen
|
|
|
|
|
as well as in presentation output formats such as formatted text, \SpecialChar LaTeX
|
|
|
|
|
, html,
|
|
|
|
|
etc.
|
|
|
|
|
Styles are addressed more fully in the next subsection.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Itemize
|
|
|
|
|
A flag indicating whether the cell is
|
Make tpa the default file format for Teapot
There turned out to be one blocking technical issue for full adpotion of
tpa format, and that was the fact that the printed representation of
floating values inside the tpa file might not reproduce the same double
when read. This change therefore introduces the "hexact" floating point
format, based on the the %La format string, which produces a hex
representation with exact round trips. While working on this, it was
convenient to add a new representation "compact" which is basically the
shorter of decimal and scientific representations, without trailing zeros.
This is now the default float format, but of course one can select decimal
or scientific formats to restore prior appearance. However, full-precision
compact format is now the (only) format for editing cell contents, as it
is accurate and efficient. Of course you can enter floating point values
in any format you like when typing in a formula.
The addition of several new floating point options overloaded the menus
in terminal teapot, so this change also revamps those menus slightly,
including eliminating the unused MenuChoice struct, and just specifying menus
with an array of strings.
Closes #63.
2019-08-24 16:58:46 +00:00
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2019-09-09 14:33:41 +00:00
|
|
|
|
locked.
|
Make tpa the default file format for Teapot
There turned out to be one blocking technical issue for full adpotion of
tpa format, and that was the fact that the printed representation of
floating values inside the tpa file might not reproduce the same double
when read. This change therefore introduces the "hexact" floating point
format, based on the the %La format string, which produces a hex
representation with exact round trips. While working on this, it was
convenient to add a new representation "compact" which is basically the
shorter of decimal and scientific representations, without trailing zeros.
This is now the default float format, but of course one can select decimal
or scientific formats to restore prior appearance. However, full-precision
compact format is now the (only) format for editing cell contents, as it
is accurate and efficient. Of course you can enter floating point values
in any format you like when typing in a formula.
The addition of several new floating point options overloaded the menus
in terminal teapot, so this change also revamps those menus slightly,
including eliminating the unused MenuChoice struct, and just specifying menus
with an array of strings.
Closes #63.
2019-08-24 16:58:46 +00:00
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
2019-09-09 14:33:41 +00:00
|
|
|
|
\end_layout
|
Make tpa the default file format for Teapot
There turned out to be one blocking technical issue for full adpotion of
tpa format, and that was the fact that the printed representation of
floating values inside the tpa file might not reproduce the same double
when read. This change therefore introduces the "hexact" floating point
format, based on the the %La format string, which produces a hex
representation with exact round trips. While working on this, it was
convenient to add a new representation "compact" which is basically the
shorter of decimal and scientific representations, without trailing zeros.
This is now the default float format, but of course one can select decimal
or scientific formats to restore prior appearance. However, full-precision
compact format is now the (only) format for editing cell contents, as it
is accurate and efficient. Of course you can enter floating point values
in any format you like when typing in a formula.
The addition of several new floating point options overloaded the menus
in terminal teapot, so this change also revamps those menus slightly,
including eliminating the unused MenuChoice struct, and just specifying menus
with an array of strings.
Closes #63.
2019-08-24 16:58:46 +00:00
|
|
|
|
|
2019-09-09 14:33:41 +00:00
|
|
|
|
\begin_layout Itemize
|
|
|
|
|
A flag indicating whether the cell is
|
Make tpa the default file format for Teapot
There turned out to be one blocking technical issue for full adpotion of
tpa format, and that was the fact that the printed representation of
floating values inside the tpa file might not reproduce the same double
when read. This change therefore introduces the "hexact" floating point
format, based on the the %La format string, which produces a hex
representation with exact round trips. While working on this, it was
convenient to add a new representation "compact" which is basically the
shorter of decimal and scientific representations, without trailing zeros.
This is now the default float format, but of course one can select decimal
or scientific formats to restore prior appearance. However, full-precision
compact format is now the (only) format for editing cell contents, as it
is accurate and efficient. Of course you can enter floating point values
in any format you like when typing in a formula.
The addition of several new floating point options overloaded the menus
in terminal teapot, so this change also revamps those menus slightly,
including eliminating the unused MenuChoice struct, and just specifying menus
with an array of strings.
Closes #63.
2019-08-24 16:58:46 +00:00
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2019-09-09 14:33:41 +00:00
|
|
|
|
ignored.
|
Make tpa the default file format for Teapot
There turned out to be one blocking technical issue for full adpotion of
tpa format, and that was the fact that the printed representation of
floating values inside the tpa file might not reproduce the same double
when read. This change therefore introduces the "hexact" floating point
format, based on the the %La format string, which produces a hex
representation with exact round trips. While working on this, it was
convenient to add a new representation "compact" which is basically the
shorter of decimal and scientific representations, without trailing zeros.
This is now the default float format, but of course one can select decimal
or scientific formats to restore prior appearance. However, full-precision
compact format is now the (only) format for editing cell contents, as it
is accurate and efficient. Of course you can enter floating point values
in any format you like when typing in a formula.
The addition of several new floating point options overloaded the menus
in terminal teapot, so this change also revamps those menus slightly,
including eliminating the unused MenuChoice struct, and just specifying menus
with an array of strings.
Closes #63.
2019-08-24 16:58:46 +00:00
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2019-09-09 14:33:41 +00:00
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-09-09 14:33:41 +00:00
|
|
|
|
\begin_layout Standard
|
2023-04-09 05:41:50 +00:00
|
|
|
|
In addition, each column has a width and each row has a height.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-09-09 14:33:41 +00:00
|
|
|
|
\begin_layout Subsubsection
|
|
|
|
|
Label
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-09-09 14:33:41 +00:00
|
|
|
|
\begin_layout Standard
|
|
|
|
|
This operation lets you edit the cell label of the current cell.
|
|
|
|
|
Further it changes all occurences of it in the cell contents to the new
|
|
|
|
|
value, unless you erased the cell label.
|
|
|
|
|
If a block has been marked at the time you edit the cell label, all occurences
|
|
|
|
|
of the label in contents of cells in that block will be changed (rather
|
|
|
|
|
than in the entire sheet).
|
|
|
|
|
Once a cell is labeled, an occurrence of that label in any expression will
|
|
|
|
|
evaluate to the (current) location of the cell.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsubsection
|
|
|
|
|
Lock
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
You can lock cells to protect them from accidental editing.
|
|
|
|
|
Note that this protects you from modifying single cells.
|
|
|
|
|
If you modify a block of cells which contains locked cells, those will
|
|
|
|
|
be modified as well.
|
|
|
|
|
Therefore, use extra caution in applying block commands.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsubsection
|
|
|
|
|
Ignore
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
Ignored cells will be completely ignored.
|
|
|
|
|
They appear as empty cells on screen and during calculations.
|
|
|
|
|
This is useful for temporarily disabling parts of your calculation, as
|
|
|
|
|
the former content reappears when the ignore flag is removed again.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsubsection
|
|
|
|
|
Column Width
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
The column width only affects the screen display, not the formatting of
|
|
|
|
|
the final output (except in the case of formatted text files).
|
|
|
|
|
It is intended to let you make better usage of the screen for more overview.
|
|
|
|
|
If the width is too small to display the cell value, a placeholder will
|
|
|
|
|
be displayed.
|
2023-04-09 05:41:50 +00:00
|
|
|
|
The column width is measured in
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
characters,
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
which are exact in the console and correspond to an arbitrary notional
|
|
|
|
|
character width in the graphical version, where the actual number of characters
|
|
|
|
|
that fit in a cell of a given width will depend on the font and size.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsubsection
|
|
|
|
|
Row Height
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
Similar comments apply to the row height as to the column width.
|
|
|
|
|
An important difference is that row heights are expressed in
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
twelfths of a character.
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
This means that in the console version, all row heights upt to 23 are displayed
|
|
|
|
|
as a single-character-high row; heights 24 to 35 are shown as two characters
|
|
|
|
|
high; and so on.
|
|
|
|
|
In the graphical version, of course, the actual row height is proportional
|
|
|
|
|
to the specified value, with a height of 12 able to display one full-height
|
|
|
|
|
character.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-09-09 14:33:41 +00:00
|
|
|
|
\begin_layout Subsection
|
|
|
|
|
Styles
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
In
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
, a collection of all of the attributes that can affect the visual or formatted
|
|
|
|
|
text of the value of a cell is called a
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2019-09-09 14:33:41 +00:00
|
|
|
|
style.
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2019-09-09 14:33:41 +00:00
|
|
|
|
The possble attributes in such a collection are enumerated in the following
|
|
|
|
|
items.
|
|
|
|
|
There are options in the menu systems of both teapot and fteapot to set
|
|
|
|
|
each of these attributes for a cell.
|
|
|
|
|
Some parts of the style can also be affected by command keys (see
|
|
|
|
|
\begin_inset CommandInset ref
|
|
|
|
|
LatexCommand ref
|
|
|
|
|
reference "tab:Key-Bindings-in-2"
|
|
|
|
|
plural "false"
|
|
|
|
|
caps "false"
|
|
|
|
|
noprefix "false"
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
).
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\begin_layout Standard
|
2019-09-09 14:33:41 +00:00
|
|
|
|
However,
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
's power to manipulate styles goes well beyond these menu items.
|
|
|
|
|
Every cell in fact has a
|
|
|
|
|
\emph on
|
|
|
|
|
third
|
|
|
|
|
\emph default
|
|
|
|
|
associated expression, the style expression.
|
|
|
|
|
This is accessed with Shift-Meta-Enter in
|
|
|
|
|
\family typewriter
|
|
|
|
|
fteapot
|
|
|
|
|
\family default
|
|
|
|
|
and Esc-s in
|
|
|
|
|
\family typewriter
|
|
|
|
|
teapot
|
|
|
|
|
\family default
|
|
|
|
|
.
|
|
|
|
|
Any valid expression which returns a style may be entered, and then the
|
|
|
|
|
expression will be evaluated whenever the cell needs to be displayed, and
|
|
|
|
|
the computed result used to control the display of the cell.
|
|
|
|
|
So for example, you can easily make the background color of a cell depend
|
|
|
|
|
on its value; try setting the style expression for a cell to be
|
|
|
|
|
\family sans
|
|
|
|
|
background(13+int(@>0))
|
|
|
|
|
\family default
|
|
|
|
|
and then making the contents of the cell either a positive or negative
|
|
|
|
|
number.
|
|
|
|
|
(Here
|
|
|
|
|
\family sans
|
|
|
|
|
@
|
|
|
|
|
\family default
|
|
|
|
|
is a convenient abbreviation for
|
|
|
|
|
\family sans
|
|
|
|
|
@()
|
|
|
|
|
\family default
|
|
|
|
|
, the value of the current cell.) Note that you can combine different styles
|
|
|
|
|
by adding them with the usual + operator; in case of conflict between attribute
|
|
|
|
|
s, the left style takes precedence.
|
|
|
|
|
So
|
|
|
|
|
\family sans
|
|
|
|
|
bold() + underline()
|
|
|
|
|
\family default
|
|
|
|
|
produces a bold, underlined style, whereas
|
|
|
|
|
\family sans
|
|
|
|
|
floatfmt(scientific) + floatfmt(decimal)
|
|
|
|
|
\family default
|
|
|
|
|
will display non-integer numerical values in scientific format.
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-09-09 14:33:41 +00:00
|
|
|
|
\begin_layout Standard
|
|
|
|
|
In fact, the menu functions to set items operate simply by adding terms
|
|
|
|
|
to the style expression for the cell(s) being changed, to force the correspondi
|
|
|
|
|
ng attribute of the style to have the spcecified values.
|
|
|
|
|
You can always see the current style expression for a cell by using the
|
|
|
|
|
proper key to edit its style expression, and then escaping the editor if
|
|
|
|
|
you don't want to change it.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2019-09-09 14:33:41 +00:00
|
|
|
|
A detailed discussion of each style attribute follows.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsubsection
|
2019-09-09 14:33:41 +00:00
|
|
|
|
Justification (adjustment)
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2019-09-09 14:33:41 +00:00
|
|
|
|
Cell values may be aligned to the
|
|
|
|
|
\family sans
|
|
|
|
|
left
|
|
|
|
|
\family default
|
|
|
|
|
, the
|
|
|
|
|
\family sans
|
|
|
|
|
right
|
|
|
|
|
\family default
|
|
|
|
|
, or the
|
|
|
|
|
\family sans
|
|
|
|
|
center
|
|
|
|
|
\family default
|
|
|
|
|
.
|
|
|
|
|
If the justification property of the style is not set to one of these three
|
|
|
|
|
values (using the
|
|
|
|
|
\family sans
|
|
|
|
|
justify
|
|
|
|
|
\family default
|
|
|
|
|
() function), then number values will be right-aligned and all other values
|
|
|
|
|
will be left-aligned.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsubsection
|
2019-09-09 14:33:41 +00:00
|
|
|
|
Floating-point Format
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2019-09-09 14:33:41 +00:00
|
|
|
|
Floating-point (non-integer) numerical values in a cell may be displayed
|
|
|
|
|
in one of four possible formats.
|
|
|
|
|
Namely, they are
|
|
|
|
|
\family sans
|
|
|
|
|
decimal
|
|
|
|
|
\family default
|
|
|
|
|
(12.34),
|
|
|
|
|
\family sans
|
|
|
|
|
scientific
|
|
|
|
|
\family default
|
|
|
|
|
(1.234e1),
|
|
|
|
|
\family sans
|
|
|
|
|
compact
|
|
|
|
|
\family default
|
|
|
|
|
(a mix of these to produce the shorter notation depending on the magnitude
|
|
|
|
|
of the value; this is the default), or
|
|
|
|
|
\family sans
|
|
|
|
|
hexact
|
|
|
|
|
\family default
|
|
|
|
|
(a specialized hexadecimal format used for exact round trips to text representa
|
|
|
|
|
tion and back, rarely used for display.) This property is set with the
|
|
|
|
|
\family sans
|
|
|
|
|
floatfmt()
|
|
|
|
|
\family default
|
|
|
|
|
function.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\begin_layout Subsubsection
|
2019-09-09 14:33:41 +00:00
|
|
|
|
Precision
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2019-09-09 14:33:41 +00:00
|
|
|
|
This attribute, set with the
|
|
|
|
|
\family sans
|
|
|
|
|
precision()
|
|
|
|
|
\family default
|
|
|
|
|
function and defaulting to 3, is an integer determining the number of digits
|
|
|
|
|
used in the display of floating point values.
|
|
|
|
|
Exactly how it affects the display depends on the floating-point format.
|
|
|
|
|
For
|
|
|
|
|
\family sans
|
|
|
|
|
decimal
|
|
|
|
|
\family default
|
|
|
|
|
and
|
|
|
|
|
\family sans
|
|
|
|
|
scientific
|
|
|
|
|
\family default
|
|
|
|
|
, the precision specifies the maximum number of digits after the decimal
|
|
|
|
|
point.
|
|
|
|
|
For
|
|
|
|
|
\family sans
|
|
|
|
|
compact
|
|
|
|
|
\family default
|
|
|
|
|
, it determines the maximum total number of digits, before and after the
|
|
|
|
|
decimal point.
|
|
|
|
|
Precision has no effect on the
|
|
|
|
|
\family sans
|
|
|
|
|
hexact
|
|
|
|
|
\family default
|
|
|
|
|
format.
|
|
|
|
|
A negative precision value subtracts from the maximum number of digits
|
|
|
|
|
that could be meaningful given the limited accuracy of the computer's internal
|
|
|
|
|
representation of floating point numbers, with -1 representing the maximum
|
|
|
|
|
meaningful precision.
|
|
|
|
|
(Very large precision values may produce more digits, but the trailing
|
|
|
|
|
digits become meaningless as the computer cannot record variation on this
|
|
|
|
|
tiny scale.) Note that this attribute only changes what is displayed;
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
always uses the maximum precision internally for calculations.
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-09-18 12:49:53 +00:00
|
|
|
|
\begin_layout Subsubsection
|
|
|
|
|
Dim
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
This attribute is a simple true-false flag set with
|
|
|
|
|
\family sans
|
|
|
|
|
dim()
|
|
|
|
|
\family default
|
|
|
|
|
that determines whether the cell value will be displayed with dim characters,
|
|
|
|
|
if possible.
|
|
|
|
|
It defaults to false.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_layout Subsubsection
|
2019-09-09 14:33:41 +00:00
|
|
|
|
Bold
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2019-09-09 14:33:41 +00:00
|
|
|
|
This attribute is a simple true-false flag set with
|
|
|
|
|
\family sans
|
|
|
|
|
bold
|
|
|
|
|
\family default
|
|
|
|
|
() that determines whether the cell value will be displayed in a bold font,
|
|
|
|
|
if possible.
|
|
|
|
|
It defaults to false.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-09-18 12:49:53 +00:00
|
|
|
|
\begin_layout Subsubsection
|
|
|
|
|
Italic
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
This attribute is a simple true-false flag set with
|
|
|
|
|
\family sans
|
|
|
|
|
italic()
|
|
|
|
|
\family default
|
|
|
|
|
that determines whether the cell value will be displayed in an italic font,
|
|
|
|
|
if possible.
|
|
|
|
|
It defaults to false.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_layout Subsubsection
|
2019-09-09 14:33:41 +00:00
|
|
|
|
Underline
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2019-09-09 14:33:41 +00:00
|
|
|
|
This attribute is a simple true-false flag set with
|
|
|
|
|
\family sans
|
|
|
|
|
underline
|
|
|
|
|
\family default
|
|
|
|
|
() that determines whether the cell value will be underlined when displayed.
|
|
|
|
|
It defaults to false.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsubsection
|
2023-05-02 02:23:57 +00:00
|
|
|
|
\begin_inset CommandInset label
|
|
|
|
|
LatexCommand label
|
|
|
|
|
name "subsec:Shadowed"
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2019-09-09 14:33:41 +00:00
|
|
|
|
Shadowed
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-09-09 14:33:41 +00:00
|
|
|
|
\begin_layout Standard
|
2023-05-02 02:23:57 +00:00
|
|
|
|
This attribute is a simple true-false flag set with shadowed(), defaulting
|
2019-09-09 14:33:41 +00:00
|
|
|
|
to false.
|
|
|
|
|
When true, it means that the left neighbour cell will additionally use
|
|
|
|
|
the display room of this cell (and all following shadowed cells to the
|
|
|
|
|
immediate right as well).
|
|
|
|
|
Thus, the shadowed cell becomes invisible
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
underneath
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
the cell to the left, although it retains its contents and its value will
|
|
|
|
|
be computed, simply not displayed unless/until the shadowing is removed.
|
|
|
|
|
You may think of shadowing as a way to get multi-column cells, for formatting
|
|
|
|
|
purposes or so that longer text may be displayed.
|
|
|
|
|
This mechanism is provided in
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
in place of a general
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
merge cells
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
2019-09-09 14:33:41 +00:00
|
|
|
|
feature as in other spreadsheets.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsubsection
|
|
|
|
|
Transparent
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
Usually, values are quoted as needed so that you get the exact same output
|
2019-09-09 14:33:41 +00:00
|
|
|
|
in whatever display format is being used as on screen.
|
|
|
|
|
That can be overridden with this true-false flag set with
|
|
|
|
|
\family sans
|
|
|
|
|
transparent
|
|
|
|
|
\family default
|
|
|
|
|
(), defaulting to false.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
Transparent cells will be exported as-is into display-oriented file formats
|
2019-09-09 14:33:41 +00:00
|
|
|
|
(html, \SpecialChar LaTeX
|
|
|
|
|
, etc.) so that you can embed commands for subsequent processing
|
|
|
|
|
in cell values.
|
|
|
|
|
When it is false, those special characters are quoted so they appear as-is.
|
|
|
|
|
Not quoting them allows special effects (if you know html, roff, or \SpecialChar LaTeX
|
|
|
|
|
),
|
|
|
|
|
but of course will cause the cell contents to look odd in formats other
|
|
|
|
|
than the one for which the special values were designed.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsubsection
|
2019-09-09 14:33:41 +00:00
|
|
|
|
Colors
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2019-09-09 14:33:41 +00:00
|
|
|
|
The
|
|
|
|
|
\family sans
|
|
|
|
|
foreground
|
|
|
|
|
\family default
|
|
|
|
|
() and
|
|
|
|
|
\family sans
|
|
|
|
|
background
|
|
|
|
|
\family default
|
2023-07-26 03:21:43 +00:00
|
|
|
|
() colors used to display a cell may be set and the
|
|
|
|
|
\family sans
|
|
|
|
|
hashing
|
|
|
|
|
\family default
|
|
|
|
|
() color may be set as well.
|
|
|
|
|
(Currently this only affects screen display.) The value of each of these
|
|
|
|
|
attributes is a positive integer which acts as an index into the
|
2019-09-09 14:33:41 +00:00
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
2019-09-09 14:33:41 +00:00
|
|
|
|
palette
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
2019-09-09 14:33:41 +00:00
|
|
|
|
of colors for the display device being used.
|
|
|
|
|
Currently, each of
|
|
|
|
|
\family typewriter
|
|
|
|
|
teapot
|
|
|
|
|
\family default
|
|
|
|
|
and
|
|
|
|
|
\family typewriter
|
|
|
|
|
fteapot
|
|
|
|
|
\family default
|
|
|
|
|
set up a default palette appropriate for their respective capabilities.
|
2023-07-26 05:20:43 +00:00
|
|
|
|
Currently, the color number 254 is treated specially: when the foreground
|
|
|
|
|
is set to this color, the contents of the cell are not drawn into the cell
|
|
|
|
|
at all.
|
|
|
|
|
So color 254 is a hard-coded
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
invisible
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
or zero-alpha color.
|
2019-09-09 14:33:41 +00:00
|
|
|
|
Hopefully, a future enhancement will allow one to display, edit, save,
|
|
|
|
|
and restore the palette.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsection
|
|
|
|
|
Block Functions
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsubsection
|
|
|
|
|
Copy/Move
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
To copy a block of cells, mark it, then move the cell cursor to where the
|
|
|
|
|
upper left corner of the copy should be and issue the copy command.
|
2019-09-09 14:33:41 +00:00
|
|
|
|
Moving works similarly, just use the move command.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
Of course you can mark three-dimensional blocks and copy them anywhere
|
|
|
|
|
in the three-dimensional sheet, but doing so requires a good three-dimensional
|
|
|
|
|
imagination to get what you want.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsubsection
|
|
|
|
|
Fill
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2019-09-09 14:33:41 +00:00
|
|
|
|
To fill a block of cells, first mark the block it should be filled with.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
This may be just one cell! Then move the cell cursor to where the upper
|
|
|
|
|
left corner of the block to be filled should be and issue the fill command.
|
|
|
|
|
You will be prompted for how often the marked block should be repeated
|
|
|
|
|
in each dimension.
|
|
|
|
|
For example, you may to repeat a cell 9 times below.
|
|
|
|
|
Mark it, then move down one row.
|
|
|
|
|
Issue the fill command and answer 1 to the number of column repetitions,
|
|
|
|
|
9 to rows and 1 to layers.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-07-29 16:03:36 +00:00
|
|
|
|
\begin_layout Subsubsection
|
|
|
|
|
Fill With
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
This works in the
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
opposite direction
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
from Fill, but is handy for when you just want to replicate a single cell
|
|
|
|
|
but don't know the exact count of repetitions you want.
|
|
|
|
|
To use this operation, first mark the block you want to fill.
|
|
|
|
|
Then make the current cell be the (single) cell you want to use to fill
|
|
|
|
|
that block.
|
|
|
|
|
Then execute Fill With.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_layout Subsubsection
|
|
|
|
|
Clear
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
Clearing means to delete the cell contents and set all attributes to the
|
|
|
|
|
default value.
|
|
|
|
|
If you want to preserve the attributes, just edit the contents of a cell
|
|
|
|
|
and delete them.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsubsection
|
|
|
|
|
Insert
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
Since work sheets can be three-dimensional, you can insert cells in all
|
|
|
|
|
three dimensions, too.
|
|
|
|
|
The inserted cells will be empty and their attributes have the default
|
|
|
|
|
values.
|
|
|
|
|
Cells will always be moved away from the front upper left corner to make
|
|
|
|
|
room for the inserted cells.
|
|
|
|
|
If no block is marked, you will be asked if you really only want to insert
|
|
|
|
|
a cell of if you want to insert a whole row, line or sheet.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsubsection
|
|
|
|
|
Delete
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
Deleting works contrary to inserting.
|
|
|
|
|
The deleted cells will be filled by moving neighbour cells to their positions.
|
|
|
|
|
You will be prompted for the direction from where those cells will be taken.
|
|
|
|
|
Deleting an entire column column-wise is done by marking the column, use
|
|
|
|
|
the delete command and chose X direction.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsubsection
|
|
|
|
|
\begin_inset CommandInset label
|
|
|
|
|
LatexCommand label
|
2019-07-23 19:42:19 +00:00
|
|
|
|
name "subsec:Sort"
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
Sort
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
Marked blocks of cells can be sorted after one or multiple keys, either
|
|
|
|
|
column-wise, row-wise or depth-wise.
|
|
|
|
|
Sorting a two dimensional block row-wise will sort lines, but if a three
|
|
|
|
|
dimensional block is sorted row-wise, then horizontal layers will be sorted.
|
|
|
|
|
The sort key is specified as vector which is orthogonal to the sorted elements,
|
|
|
|
|
either in ascending or descending order.
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
The following example illustrates the sort operation.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
The upper left part of the screen should look like this:
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\begin_inset Separator latexpar
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
\align center
|
|
|
|
|
\begin_inset Tabular
|
|
|
|
|
<lyxtabular version="3" rows="5" columns="3">
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<features tabularvalignment="middle">
|
|
|
|
|
<column alignment="center" valignment="top">
|
|
|
|
|
<column alignment="center" valignment="top">
|
|
|
|
|
<column alignment="center" valignment="top">
|
2019-07-22 20:32:33 +00:00
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="center" valignment="top" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
0
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
0
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
1
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="center" valignment="top" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
0
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
1
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
one
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="center" valignment="top" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
1
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
2
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
two
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="center" valignment="top" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
2
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
3
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
three
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="center" valignment="top" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
3
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
4
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
four
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
</lyxtabular>
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
The box shows you which block to mark.
|
|
|
|
|
Now this block should be sorted row-wise, with the sort key being the numbers
|
|
|
|
|
in descending order, i.e.
|
|
|
|
|
we want the lines being numbered 4,3,2,1.
|
|
|
|
|
Go to the block menu, then select sort.
|
|
|
|
|
Use
|
|
|
|
|
\family typewriter
|
|
|
|
|
R)ow
|
|
|
|
|
\family default
|
|
|
|
|
, because that is how we want to sort this block.
|
|
|
|
|
The X position of the sort key vector is 0, because the column 0 contains
|
|
|
|
|
the numbers.
|
|
|
|
|
The Z position is 0, too, because those numbers are on sheet 0.
|
|
|
|
|
Now chose
|
|
|
|
|
\family typewriter
|
|
|
|
|
D)escending
|
|
|
|
|
\family default
|
|
|
|
|
as direction.
|
|
|
|
|
At this point, you could add a secondary key or decide to sort the block
|
|
|
|
|
by the keys entered so far.
|
|
|
|
|
Use
|
|
|
|
|
\family typewriter
|
|
|
|
|
S)ort region
|
|
|
|
|
\family default
|
|
|
|
|
to sort it.
|
|
|
|
|
That's it, the screen should look like this now:
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\begin_inset Separator latexpar
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
\align center
|
|
|
|
|
\begin_inset Tabular
|
|
|
|
|
<lyxtabular version="3" rows="5" columns="3">
|
2019-07-23 19:42:19 +00:00
|
|
|
|
<features tabularvalignment="middle">
|
|
|
|
|
<column alignment="center" valignment="top">
|
|
|
|
|
<column alignment="center" valignment="top">
|
|
|
|
|
<column alignment="center" valignment="top">
|
2019-07-22 20:32:33 +00:00
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="center" valignment="top" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
0
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
0
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
1
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="center" valignment="top" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
0
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
4
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" topline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
four
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="center" valignment="top" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
1
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
3
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
three
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="center" valignment="top" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
2
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
2
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
two
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<cell alignment="center" valignment="top" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
3
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" leftline="true" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
1
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
<cell alignment="center" valignment="top" usebox="none">
|
|
|
|
|
\begin_inset Text
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
one
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
</cell>
|
|
|
|
|
</row>
|
|
|
|
|
</lyxtabular>
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsubsection
|
|
|
|
|
Mirror
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
Mirroring a marked block of cells can be done in three directions: Left/right,
|
|
|
|
|
upside/down and front/back.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsection
|
|
|
|
|
Saving and Loading
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsubsection
|
|
|
|
|
File names
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
Usually, you want to overwrite the loaded file.
|
|
|
|
|
For this reason, the loaded file name is remembered.
|
|
|
|
|
If the sheet doesn't have a file name, like after starting an empty sheet,
|
|
|
|
|
you will be asked for a name when saving.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
Occasionally, you may want to rename a sheet, like before making critical
|
|
|
|
|
changes or when you load an existing sheet to have a start for making a
|
|
|
|
|
new one.
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
The Save As operation allows you to save the file under a new name.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsubsection
|
|
|
|
|
File Formats
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Paragraph
|
|
|
|
|
ASCII (.tpa)
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
The ASCII file format allows easy generation/modification of saved sheets
|
|
|
|
|
by shell scripts.
|
Make tpa the default file format for Teapot
There turned out to be one blocking technical issue for full adpotion of
tpa format, and that was the fact that the printed representation of
floating values inside the tpa file might not reproduce the same double
when read. This change therefore introduces the "hexact" floating point
format, based on the the %La format string, which produces a hex
representation with exact round trips. While working on this, it was
convenient to add a new representation "compact" which is basically the
shorter of decimal and scientific representations, without trailing zeros.
This is now the default float format, but of course one can select decimal
or scientific formats to restore prior appearance. However, full-precision
compact format is now the (only) format for editing cell contents, as it
is accurate and efficient. Of course you can enter floating point values
in any format you like when typing in a formula.
The addition of several new floating point options overloaded the menus
in terminal teapot, so this change also revamps those menus slightly,
including eliminating the unused MenuChoice struct, and just specifying menus
with an array of strings.
Closes #63.
2019-08-24 16:58:46 +00:00
|
|
|
|
Note that when reading a .tpa file, either ordinary decimal or scientific
|
|
|
|
|
formats for floating point number are recognized, as well as the exact
|
|
|
|
|
hex floating point format used by default when saving.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
The default extension is
|
|
|
|
|
\family typewriter
|
|
|
|
|
.
|
|
|
|
|
\family default
|
|
|
|
|
tpa.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
Make tpa the default file format for Teapot
There turned out to be one blocking technical issue for full adpotion of
tpa format, and that was the fact that the printed representation of
floating values inside the tpa file might not reproduce the same double
when read. This change therefore introduces the "hexact" floating point
format, based on the the %La format string, which produces a hex
representation with exact round trips. While working on this, it was
convenient to add a new representation "compact" which is basically the
shorter of decimal and scientific representations, without trailing zeros.
This is now the default float format, but of course one can select decimal
or scientific formats to restore prior appearance. However, full-precision
compact format is now the (only) format for editing cell contents, as it
is accurate and efficient. Of course you can enter floating point values
in any format you like when typing in a formula.
The addition of several new floating point options overloaded the menus
in terminal teapot, so this change also revamps those menus slightly,
including eliminating the unused MenuChoice struct, and just specifying menus
with an array of strings.
Closes #63.
2019-08-24 16:58:46 +00:00
|
|
|
|
\begin_layout Paragraph
|
|
|
|
|
Legacy XDR (.tp)
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
XDR (eXternal Data Representation) is a standard invented by Sun Microsystems
|
|
|
|
|
which defines a canonical way of storing/transporting data on external
|
|
|
|
|
media.
|
|
|
|
|
Its advantage is that it is widely available and that it defines a portable
|
|
|
|
|
floating point number format.
|
2019-09-09 14:33:41 +00:00
|
|
|
|
The native
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
file format formerly used XDR to be portable across different machine architect
|
|
|
|
|
ures and operating systems.
|
Make tpa the default file format for Teapot
There turned out to be one blocking technical issue for full adpotion of
tpa format, and that was the fact that the printed representation of
floating values inside the tpa file might not reproduce the same double
when read. This change therefore introduces the "hexact" floating point
format, based on the the %La format string, which produces a hex
representation with exact round trips. While working on this, it was
convenient to add a new representation "compact" which is basically the
shorter of decimal and scientific representations, without trailing zeros.
This is now the default float format, but of course one can select decimal
or scientific formats to restore prior appearance. However, full-precision
compact format is now the (only) format for editing cell contents, as it
is accurate and efficient. Of course you can enter floating point values
in any format you like when typing in a formula.
The addition of several new floating point options overloaded the menus
in terminal teapot, so this change also revamps those menus slightly,
including eliminating the unused MenuChoice struct, and just specifying menus
with an array of strings.
Closes #63.
2019-08-24 16:58:46 +00:00
|
|
|
|
The advantage of this over the portable ASCII format was that due to the
|
2019-09-09 14:33:41 +00:00
|
|
|
|
(usually) missing conversion calculations to ensure that any floating point
|
|
|
|
|
constants would be saved/loaded exactly without conversion errors, the
|
|
|
|
|
value of a cell might change slightly when saved and restored in the ASCII
|
|
|
|
|
format.
|
|
|
|
|
The XDR format was discontinued when the ASCII format was made exact by
|
|
|
|
|
virtue of the exact hexadecimal
|
Make tpa the default file format for Teapot
There turned out to be one blocking technical issue for full adpotion of
tpa format, and that was the fact that the printed representation of
floating values inside the tpa file might not reproduce the same double
when read. This change therefore introduces the "hexact" floating point
format, based on the the %La format string, which produces a hex
representation with exact round trips. While working on this, it was
convenient to add a new representation "compact" which is basically the
shorter of decimal and scientific representations, without trailing zeros.
This is now the default float format, but of course one can select decimal
or scientific formats to restore prior appearance. However, full-precision
compact format is now the (only) format for editing cell contents, as it
is accurate and efficient. Of course you can enter floating point values
in any format you like when typing in a formula.
The addition of several new floating point options overloaded the menus
in terminal teapot, so this change also revamps those menus slightly,
including eliminating the unused MenuChoice struct, and just specifying menus
with an array of strings.
Closes #63.
2019-08-24 16:58:46 +00:00
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
%a
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
style (
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
hexact
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
) of representing floating point values, and so there was no need for a
|
|
|
|
|
specialized binary format.
|
2019-09-09 14:33:41 +00:00
|
|
|
|
Old .tp files may be read, but
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
no longer writes files in this format.
|
Make tpa the default file format for Teapot
There turned out to be one blocking technical issue for full adpotion of
tpa format, and that was the fact that the printed representation of
floating values inside the tpa file might not reproduce the same double
when read. This change therefore introduces the "hexact" floating point
format, based on the the %La format string, which produces a hex
representation with exact round trips. While working on this, it was
convenient to add a new representation "compact" which is basically the
shorter of decimal and scientific representations, without trailing zeros.
This is now the default float format, but of course one can select decimal
or scientific formats to restore prior appearance. However, full-precision
compact format is now the (only) format for editing cell contents, as it
is accurate and efficient. Of course you can enter floating point values
in any format you like when typing in a formula.
The addition of several new floating point options overloaded the menus
in terminal teapot, so this change also revamps those menus slightly,
including eliminating the unused MenuChoice struct, and just specifying menus
with an array of strings.
Closes #63.
2019-08-24 16:58:46 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_layout Paragraph
|
|
|
|
|
CSV (.csv)
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2019-09-09 14:33:41 +00:00
|
|
|
|
CSV (comma separated value) files only contain the data, not the expressions
|
2019-07-22 20:32:33 +00:00
|
|
|
|
calculating it.
|
2023-04-30 16:19:12 +00:00
|
|
|
|
Many spreadsheets can generate this file format and many graphics programs
|
2019-07-22 20:32:33 +00:00
|
|
|
|
like gnuplot(1) can read it.
|
|
|
|
|
The field separator usually is a tab or comma, strings may be enclosed
|
|
|
|
|
in double quotes and decimal numbers have a dot to mark the fractional
|
|
|
|
|
part.
|
|
|
|
|
One popular variation uses semicolons for separating fields and a decimal
|
2019-09-09 14:33:41 +00:00
|
|
|
|
comma instead of a decimal point, which
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
tries to autodetect.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
On load, strings without quotes and with a
|
|
|
|
|
\emph on
|
|
|
|
|
0x
|
|
|
|
|
\emph default
|
|
|
|
|
prefix followed by hexadecimal digits will be converted to integers.
|
|
|
|
|
When loading CSV files, the sheet will not be cleared and the data will
|
|
|
|
|
be load relative to the current cursor position.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Paragraph
|
|
|
|
|
SC SpreadsheetCalculator (.sc)
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2019-09-09 14:33:41 +00:00
|
|
|
|
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
can load simple SC sheets to convert them to
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
's native format.
|
|
|
|
|
While loading,
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
converts all references to absolute cell positions to labels.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
This allows to insert and delete in such sheets without screwing the whole
|
|
|
|
|
sheet up.
|
2019-09-09 14:33:41 +00:00
|
|
|
|
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
can not save sheets in SC format, because SC lacks many features.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
For now, only the most basic SC features are supported.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Paragraph
|
|
|
|
|
Lotus 1-2-3 (.wk1)
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2019-09-09 14:33:41 +00:00
|
|
|
|
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
can load simple WK1 sheets to convert them to
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
's native format.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
By default, 1-2-3 cell references are relative, so don't be surprised by
|
2019-09-09 14:33:41 +00:00
|
|
|
|
a big amount of relative references in the resulting
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
sheet.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
For now, only the most basic 1-2-3 features are supported.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Paragraph
|
|
|
|
|
Formatted ASCII (.txt)
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
The generated formatted ASCII files contain about what you see on the screen.
|
|
|
|
|
If your sheet has more than one layer, then the various layers will be
|
|
|
|
|
saved separated by form feeds.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Paragraph
|
|
|
|
|
Troff tbl (.tbl)
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2019-09-09 14:33:41 +00:00
|
|
|
|
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
can generate tbl(1) table bodies in single files which are supposed to
|
|
|
|
|
be used like this:
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Quote
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
.TS
|
|
|
|
|
\begin_inset Newline newline
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\family default
|
|
|
|
|
\shape italic
|
|
|
|
|
options
|
|
|
|
|
\family typewriter
|
|
|
|
|
\shape default
|
|
|
|
|
;
|
|
|
|
|
\begin_inset Newline newline
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
.so
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
\shape italic
|
|
|
|
|
filename
|
|
|
|
|
\begin_inset Newline newline
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
\shape default
|
|
|
|
|
.TE
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
You will have to use soelim(1) to eliminate the
|
|
|
|
|
\family typewriter
|
|
|
|
|
.so
|
|
|
|
|
\family default
|
|
|
|
|
requests before the tbl run.
|
|
|
|
|
The
|
|
|
|
|
\shape italic
|
|
|
|
|
options
|
|
|
|
|
\family typewriter
|
|
|
|
|
\shape default
|
|
|
|
|
;
|
|
|
|
|
\family default
|
|
|
|
|
are optional.
|
|
|
|
|
If you use GNU roff, you will need to eliminate
|
|
|
|
|
\family typewriter
|
|
|
|
|
.lf
|
|
|
|
|
\family default
|
|
|
|
|
requests, because this GNU roff extension confuses GNU tbl:
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Quote
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
soelim
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
\shape italic
|
|
|
|
|
file
|
|
|
|
|
\shape default
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
| grep -v '^
|
|
|
|
|
\backslash
|
|
|
|
|
.lf'
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
Alternatively, you can generate a stand-alone document, which needs no further
|
|
|
|
|
operations to format and print.
|
|
|
|
|
Note: If no block is marked, the whole sheet will be saved.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Paragraph
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\SpecialChar LaTeX
|
|
|
|
|
(.latex)
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2019-07-23 19:42:19 +00:00
|
|
|
|
If you generate \SpecialChar LaTeX2e
|
|
|
|
|
tables in single files, you include them in documents using
|
|
|
|
|
the
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\family typewriter
|
|
|
|
|
|
|
|
|
|
\backslash
|
|
|
|
|
include
|
|
|
|
|
\family default
|
|
|
|
|
command.
|
|
|
|
|
Alternatively, you can generate a stand-alone document, which needs no
|
|
|
|
|
further operations to format and print.
|
|
|
|
|
Note: If no block is marked, the whole sheet will be saved.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Paragraph
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Con\SpecialChar TeX
|
|
|
|
|
t (.tex)
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2019-07-23 19:42:19 +00:00
|
|
|
|
Analogous to \SpecialChar LaTeX
|
|
|
|
|
output, this generates input suitable to the Con\SpecialChar TeX
|
|
|
|
|
t macro package.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Paragraph
|
|
|
|
|
HTML (.html)
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
You can generate html table bodies in single files which could be used in
|
|
|
|
|
combination with server-side includes.
|
|
|
|
|
This feature differs between the various servers, so refer to the manual
|
|
|
|
|
for your web server for details, please.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
Alternatively, you can generate a stand-alone document.
|
|
|
|
|
Note: If no block is marked, the whole sheet will be saved.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsection
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
Other operations
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsubsection
|
|
|
|
|
Goto Location
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
Sometimes, you directly want to go to a specific position, either to change
|
|
|
|
|
its contents to see which cell a location expression refers to.
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
This operation lets you enter an expression, which must evaluate to a value
|
2019-07-22 20:32:33 +00:00
|
|
|
|
of the type location.
|
|
|
|
|
If so, the cursor is positioned to that location.
|
|
|
|
|
For example, you could enter
|
|
|
|
|
\family typewriter
|
|
|
|
|
&(10,2)
|
|
|
|
|
\family default
|
|
|
|
|
to go to cell 10,2 of the current layer or you could enter the name of
|
|
|
|
|
a label you want to go to.
|
|
|
|
|
Relative movements are no problem, either.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsubsection
|
|
|
|
|
Shell
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
Start a sub shell.
|
2019-09-09 14:33:41 +00:00
|
|
|
|
Exiting from that sub shell will bring you back into
|
|
|
|
|
\family typewriter
|
|
|
|
|
teapot
|
|
|
|
|
\family default
|
|
|
|
|
.
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
This operation does not exist in the GUI version.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsubsection
|
|
|
|
|
Version
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2019-09-09 14:33:41 +00:00
|
|
|
|
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
will display its version number and copyright statement.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsubsection
|
|
|
|
|
Help
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2019-09-09 14:33:41 +00:00
|
|
|
|
If
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
was built with the integrated help viewer, you can access this manual from
|
|
|
|
|
within
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
itself.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Section
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
Batch operations
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2019-09-09 14:33:41 +00:00
|
|
|
|
Besides interactive facilities,
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
has a batch mode.
|
|
|
|
|
Using this batch mode, shell scripts can generate output from
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
sheets.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
This is handy if you use make(1) to generate a bigger document containing
|
2019-07-23 19:42:19 +00:00
|
|
|
|
tables, because you don't have to generate a tbl or \SpecialChar LaTeX
|
|
|
|
|
file each time you
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
modify a sheet: make will do so.
|
2019-09-09 14:33:41 +00:00
|
|
|
|
In batch mode,
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
reads batch commands from standard input.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
The following commands are available:
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
\series bold
|
|
|
|
|
goto
|
|
|
|
|
\family default
|
|
|
|
|
\shape italic
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
location
|
|
|
|
|
\series default
|
|
|
|
|
\shape default
|
|
|
|
|
Go to the specified
|
|
|
|
|
\shape italic
|
|
|
|
|
location
|
|
|
|
|
\shape default
|
|
|
|
|
.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
\series bold
|
|
|
|
|
from
|
|
|
|
|
\family default
|
|
|
|
|
\shape italic
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
location
|
|
|
|
|
\series default
|
|
|
|
|
\shape default
|
|
|
|
|
Start marking a block.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
\series bold
|
|
|
|
|
to
|
|
|
|
|
\family default
|
|
|
|
|
\shape italic
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
location
|
|
|
|
|
\series default
|
|
|
|
|
\shape default
|
|
|
|
|
End marking a block.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
\series bold
|
|
|
|
|
sort-x
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
d|a
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
y
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
z
|
|
|
|
|
\emph default
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
[
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
d|a
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
y
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
z
|
|
|
|
|
\emph default
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
...
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
]
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
\series bold
|
|
|
|
|
sort-
|
|
|
|
|
\family default
|
|
|
|
|
y
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
d|a
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
x
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
z
|
|
|
|
|
\emph default
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
[
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
d|a
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
x
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
z
|
|
|
|
|
\emph default
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
...
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
]
|
|
|
|
|
\series default
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
\series bold
|
|
|
|
|
sort-
|
|
|
|
|
\family default
|
|
|
|
|
z
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
d|a
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
x
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\emph default
|
|
|
|
|
y
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
[
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
d|a
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
x
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\emph default
|
|
|
|
|
y
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
...
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
]
|
|
|
|
|
\series default
|
|
|
|
|
Sorts the marked block as described in section
|
|
|
|
|
\begin_inset CommandInset ref
|
|
|
|
|
LatexCommand vref
|
2019-07-23 19:42:19 +00:00
|
|
|
|
reference "subsec:Sort"
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
, column-wise, row-wise or depth-wise, respectivly.
|
|
|
|
|
"d" or "a" specify the sort order to be descending or ascending.
|
|
|
|
|
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
,
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\emph default
|
|
|
|
|
and
|
|
|
|
|
\emph on
|
|
|
|
|
z
|
|
|
|
|
\emph default
|
|
|
|
|
specify the position of the sort key
|
|
|
|
|
\family typewriter
|
|
|
|
|
relative
|
|
|
|
|
\family default
|
|
|
|
|
to the first cell of the marked block.
|
|
|
|
|
Up to eight sort keys can be specified.
|
|
|
|
|
This example reproduces the result from section
|
|
|
|
|
\begin_inset CommandInset ref
|
|
|
|
|
LatexCommand ref
|
2019-07-23 19:42:19 +00:00
|
|
|
|
reference "subsec:Sort"
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
:
|
2019-07-23 19:42:19 +00:00
|
|
|
|
\begin_inset Separator latexpar
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_deeper
|
|
|
|
|
\begin_layout Quote
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
echo "
|
|
|
|
|
\begin_inset Newline newline
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
from &(1,1,0)
|
|
|
|
|
\begin_inset Newline newline
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
to &(2,4,0)
|
|
|
|
|
\begin_inset Newline newline
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
sort-y d 0 0
|
|
|
|
|
\begin_inset Newline newline
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
save-csv result_num.txt
|
|
|
|
|
\begin_inset Newline newline
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
" | teapot -b doc/unsorted
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_deeper
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
\series bold
|
|
|
|
|
save-tbl
|
|
|
|
|
\family default
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
file
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
2019-07-30 19:07:54 +00:00
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
\series bold
|
|
|
|
|
save-csv
|
|
|
|
|
\family default
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
file
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
2019-07-30 19:07:54 +00:00
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
\series bold
|
|
|
|
|
save-latex
|
|
|
|
|
\family default
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
file
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
2019-07-30 19:07:54 +00:00
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
\series bold
|
|
|
|
|
save-context
|
|
|
|
|
\family default
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
file
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
2019-07-30 19:07:54 +00:00
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
\series bold
|
|
|
|
|
save-html
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\family default
|
|
|
|
|
\emph on
|
|
|
|
|
file
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
|
|
|
|
Save the marked block in the specified format as
|
|
|
|
|
\emph on
|
|
|
|
|
file
|
|
|
|
|
\emph default
|
|
|
|
|
.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
\series bold
|
|
|
|
|
load-csv
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\family default
|
|
|
|
|
\emph on
|
|
|
|
|
file
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
|
|
|
|
Load
|
|
|
|
|
\emph on
|
|
|
|
|
file
|
|
|
|
|
\emph default
|
|
|
|
|
in the specified format to the last
|
|
|
|
|
\family typewriter
|
|
|
|
|
goto
|
|
|
|
|
\family default
|
|
|
|
|
location.
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
This has the same functionality as the interactive load described in subsection
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
|
|
|
|
\emph on
|
|
|
|
|
5.12.4
|
|
|
|
|
\emph default
|
|
|
|
|
.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Section
|
2023-04-30 16:19:12 +00:00
|
|
|
|
Sheets, Cells, and Clocking
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2023-04-30 16:19:12 +00:00
|
|
|
|
A
|
|
|
|
|
\emph on
|
|
|
|
|
sheet
|
|
|
|
|
\emph default
|
|
|
|
|
is a three-dimensional collection of
|
|
|
|
|
\emph on
|
|
|
|
|
cells
|
|
|
|
|
\emph default
|
|
|
|
|
.
|
|
|
|
|
The slices in the X, Y, and Z directions are called the
|
|
|
|
|
\emph on
|
|
|
|
|
columns
|
|
|
|
|
\emph default
|
|
|
|
|
,
|
|
|
|
|
\emph on
|
|
|
|
|
rows
|
|
|
|
|
\emph default
|
|
|
|
|
, and
|
|
|
|
|
\emph on
|
|
|
|
|
layers
|
|
|
|
|
\emph default
|
|
|
|
|
, respectively.
|
|
|
|
|
At any given time, the valid coordinates for a sheet are all non-negative
|
|
|
|
|
integers up to some current limit in each of the X, Y, and Z directions,
|
|
|
|
|
which may be different in each direction.
|
|
|
|
|
Generally speaking, direct references to cells with negative coordinates
|
|
|
|
|
are an error, whereas indirect references to cells with negative coordinates
|
|
|
|
|
and all references to cells with coordinates beyond the current limits
|
|
|
|
|
act as references to empty cells with all default attributes/styles.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2023-04-30 16:19:12 +00:00
|
|
|
|
Each cell has three expressions, all of which are optional: a base (reset)
|
|
|
|
|
expression, a clocked expression, and a style expression.
|
|
|
|
|
It also has an associated current value.
|
|
|
|
|
See section
|
|
|
|
|
\begin_inset CommandInset ref
|
|
|
|
|
LatexCommand ref
|
|
|
|
|
reference "sec:Expressions"
|
|
|
|
|
plural "false"
|
|
|
|
|
caps "false"
|
|
|
|
|
noprefix "false"
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
for the semantics of expressions and values.
|
|
|
|
|
When the sheet is in the reset state (the default/initial state), all cells
|
|
|
|
|
set their current values to the value of their base expression; references
|
|
|
|
|
to other cells use those other cells' current values.
|
|
|
|
|
The recomputation of current values updates referred-to cells first in
|
|
|
|
|
an effort to produce the expected, correct values.
|
|
|
|
|
However, if there are circular references among cells, this update process
|
|
|
|
|
does not attempt to produce a fully self-consistent state, in that a given
|
|
|
|
|
cell is only updated once.
|
|
|
|
|
Hence the resulting current values can depend on the order updates occur,
|
|
|
|
|
and it may happen that a cell's current value is not equal to the value
|
|
|
|
|
of its base expression computed with current values of all cells.
|
|
|
|
|
This behavior may seem problematic, but in fact it's not always possible
|
|
|
|
|
to produce a self-consistent state.
|
|
|
|
|
The simplest example is if the base expression for the cell with coordinates
|
|
|
|
|
(0,0,0) is @(0,0,0)+1, since no number is one more than itself.
|
|
|
|
|
Moreover, in the absence of circular reference chains among the base expression
|
|
|
|
|
s, the recomputation of current values is guaranteed to reach a consistent
|
|
|
|
|
state for all cells.
|
|
|
|
|
The bottom line is that although circular references in base expressions
|
|
|
|
|
are not disallowed, their utility may be limited because their behavior
|
|
|
|
|
is relatively unpredictable.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
When a sheet is clocked (see Table
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset CommandInset ref
|
|
|
|
|
LatexCommand ref
|
|
|
|
|
reference "tab:Key-Bindings-in"
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2023-04-30 16:19:12 +00:00
|
|
|
|
), every cell with a clocked expression is clocked.
|
|
|
|
|
When a cell is clocked (either because the sheet was clocked or by virtue
|
|
|
|
|
of the clock() function documented in section
|
|
|
|
|
\begin_inset CommandInset ref
|
|
|
|
|
LatexCommand ref
|
|
|
|
|
reference "subsec:All-other-functions"
|
|
|
|
|
plural "false"
|
|
|
|
|
caps "false"
|
|
|
|
|
noprefix "false"
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
), its clocked expression is evaluated using the current value of all cells
|
|
|
|
|
referenced directly or indirectly, including cells that are also currently
|
|
|
|
|
being clocked.
|
|
|
|
|
Then the new current value of (all of the) clocked cell(s) is set to the
|
|
|
|
|
result of that evaluation.
|
|
|
|
|
Finally, the current values of the unclocked cells (which include any cells
|
|
|
|
|
that have no clocked expression) are recomputed based on the new current
|
|
|
|
|
values.
|
|
|
|
|
The upshot of these rules is that one can control the updating of potentially
|
|
|
|
|
circular references precisely: the computation of clocked expressions always
|
|
|
|
|
uses values of all cells, including other clocked cells, from the previous
|
|
|
|
|
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
tick
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
, and the computation of base expressions uses values of all cells, including
|
|
|
|
|
other unclocked cells, from the current tick.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
Finally, whenever the style of a given cell is needed, for example to display
|
|
|
|
|
the cell, its style expression is evaluated based on the current values
|
|
|
|
|
of all cells to which it refers directly or indirectly.
|
|
|
|
|
The expression must evaluate to a style value (see subsection
|
|
|
|
|
\begin_inset CommandInset ref
|
|
|
|
|
LatexCommand ref
|
|
|
|
|
reference "subsec:Data-Types"
|
|
|
|
|
plural "false"
|
|
|
|
|
caps "false"
|
|
|
|
|
noprefix "false"
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
) and that value provides the style of the cell.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Section
|
|
|
|
|
\begin_inset CommandInset label
|
|
|
|
|
LatexCommand label
|
|
|
|
|
name "sec:Expressions"
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
Expressions and values
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
In
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
, values are specific data items and expressions are the formulas that can
|
|
|
|
|
be evaluated to produce those values.
|
|
|
|
|
This section describes the possible values, the allowed syntax of expressions,
|
|
|
|
|
and the semantics of valid expressions.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsection
|
2023-04-30 16:19:12 +00:00
|
|
|
|
\begin_inset CommandInset label
|
|
|
|
|
LatexCommand label
|
|
|
|
|
name "subsec:Data-Types"
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
Data Types
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2019-09-09 14:33:41 +00:00
|
|
|
|
In
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
, each value has an associated data type.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
The following data types exist:
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
2019-09-09 14:33:41 +00:00
|
|
|
|
Empty Empty cells behave as if they have 0, 0.0 or
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
as value, depending on context.
|
2019-09-09 14:33:41 +00:00
|
|
|
|
However, the specific unique
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
empty
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
value can be tested for explicitly, distinct from any of these, for example
|
|
|
|
|
with
|
|
|
|
|
\family sans
|
|
|
|
|
is(
|
|
|
|
|
\emph on
|
|
|
|
|
loc
|
|
|
|
|
\emph default
|
|
|
|
|
, empty)
|
|
|
|
|
\family default
|
|
|
|
|
.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
String A string is a sequence of characters enclosed by double quotes:
|
|
|
|
|
\family typewriter
|
|
|
|
|
"This is a string"
|
|
|
|
|
\family default
|
|
|
|
|
.
|
|
|
|
|
A double quote can be part of the string, if it is quoted using a backslash:
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\backslash
|
|
|
|
|
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
.
|
|
|
|
|
If you want the backslash to appear in the output instead of quoting the
|
|
|
|
|
next character, use it to quote itself:
|
|
|
|
|
\family typewriter
|
|
|
|
|
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\backslash
|
|
|
|
|
|
|
|
|
|
\backslash
|
|
|
|
|
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
Floating
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
Point Floating point values are inexact, their precision and range depends
|
2019-09-09 14:33:41 +00:00
|
|
|
|
on the implementation of the C type long double on your system.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
An example is:
|
|
|
|
|
\family typewriter
|
|
|
|
|
42.0
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
Integer Integer values are exact, their range depends on the C type long
|
2019-09-09 14:33:41 +00:00
|
|
|
|
long on your system.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
An example is:
|
|
|
|
|
\family typewriter
|
|
|
|
|
42
|
2019-08-27 06:56:19 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
Boolean
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
true
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
or
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
false,
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
used for logical conditions.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
2019-09-03 08:41:37 +00:00
|
|
|
|
Label Cell labels are of this type, but they generally evaluate to locations
|
|
|
|
|
(or cause an error if there is no cell with that label), so you don't generally
|
|
|
|
|
manipulate values of this type.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
Keyword The names of functions and of special arguments to functions, like
|
|
|
|
|
the
|
|
|
|
|
\family sans
|
|
|
|
|
decimal
|
|
|
|
|
\family default
|
|
|
|
|
flag to the
|
|
|
|
|
\family sans
|
|
|
|
|
float()
|
|
|
|
|
\family default
|
|
|
|
|
function.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
Location The values of cell labels and the result of the
|
|
|
|
|
\family sans
|
2019-07-22 20:32:33 +00:00
|
|
|
|
&()
|
|
|
|
|
\family default
|
|
|
|
|
function have this type, but there are no location constant literals.
|
2019-07-30 19:07:54 +00:00
|
|
|
|
However,
|
2019-09-03 08:41:37 +00:00
|
|
|
|
\family sans
|
|
|
|
|
&(3,2,1)
|
2019-07-30 19:07:54 +00:00
|
|
|
|
\family typewriter
|
2019-09-03 08:41:37 +00:00
|
|
|
|
,
|
2019-07-30 19:07:54 +00:00
|
|
|
|
\family default
|
|
|
|
|
for example, acts very much like a location constant literal.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
Error Syntactical or semantical (type mismatch) errors cause this value,
|
|
|
|
|
as well as division by 0 and the function
|
2019-09-03 08:41:37 +00:00
|
|
|
|
\family sans
|
2019-07-22 20:32:33 +00:00
|
|
|
|
error()
|
|
|
|
|
\family default
|
|
|
|
|
.
|
|
|
|
|
An error always has an assigned error message.
|
|
|
|
|
Functions and operators, when applied to a value of the type error, evaluate
|
|
|
|
|
to just that value.
|
2019-09-03 08:41:37 +00:00
|
|
|
|
That way, the first error encountered, possibly deep inside a complicated
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
expression, will be shown.
|
2019-09-03 08:41:37 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
2019-09-09 14:33:41 +00:00
|
|
|
|
Expression a
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
formula; some functions (like
|
2019-09-03 08:41:37 +00:00
|
|
|
|
\family sans
|
|
|
|
|
find()
|
|
|
|
|
\family default
|
|
|
|
|
) take an expression as an argument so that it can be evaluated from the
|
|
|
|
|
point of view of other cells.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
Style the encapsulated visual/display attributes of a cell.
|
2019-09-09 14:33:41 +00:00
|
|
|
|
Not many operators/functions apply to Style values, but there is one function
|
|
|
|
|
for each attribute of a Style (that produces Style values with that attribute
|
|
|
|
|
set), and they may be combined with the + operator.
|
|
|
|
|
Style expressions are the key to allowing the appearance of a cell to depend
|
|
|
|
|
on its value.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsection
|
|
|
|
|
Operators
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2019-09-09 14:33:41 +00:00
|
|
|
|
Unlike other spreadsheets, the operators in
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
check the type of the values they are applied to, which means trying to
|
|
|
|
|
add a string to a floating point number will result in an type error.
|
2019-07-25 13:56:15 +00:00
|
|
|
|
Operators on locations in the spreadsheet, which are just triples of integers,
|
|
|
|
|
generally operate following typical rules for vectors, with particular
|
|
|
|
|
notes below.
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
The following operators are available, listed in ascending precedence:
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-08-27 06:56:19 +00:00
|
|
|
|
\begin_layout Description
|
|
|
|
|
x
|
|
|
|
|
\series medium
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
|
|
|
|
and
|
|
|
|
|
\family default
|
|
|
|
|
\series medium
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
2019-08-28 19:40:50 +00:00
|
|
|
|
y evaluates to the logical conjunction of values
|
2019-08-27 06:56:19 +00:00
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
and
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\emph default
|
|
|
|
|
.
|
|
|
|
|
Note that this evaluation short-circuits: if
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
is false, then
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\emph default
|
|
|
|
|
is never evaluated, and so does not affect the value even if it is an error,
|
|
|
|
|
for example.
|
2019-08-28 19:40:50 +00:00
|
|
|
|
In determining the value, the boolean conversions of
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
and
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\emph default
|
|
|
|
|
are used (see the description of the bool() function below), but the actual
|
|
|
|
|
value returned is either that of
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
or
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\emph default
|
|
|
|
|
, namely,
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
if it corresponds to a boolean false value or
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\emph default
|
|
|
|
|
otherwise.
|
2019-08-27 06:56:19 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
x
|
|
|
|
|
\series medium
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
|
|
|
|
or
|
|
|
|
|
\family default
|
|
|
|
|
\series medium
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
2023-05-02 02:23:57 +00:00
|
|
|
|
y evaluates to the logical disjunction of Boolean values
|
2019-08-27 06:56:19 +00:00
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
and
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\emph default
|
|
|
|
|
.
|
|
|
|
|
As with
|
|
|
|
|
\family typewriter
|
2019-08-28 06:30:02 +00:00
|
|
|
|
\series bold
|
2019-08-27 06:56:19 +00:00
|
|
|
|
and
|
|
|
|
|
\family default
|
2019-08-28 06:30:02 +00:00
|
|
|
|
\series default
|
2019-08-27 06:56:19 +00:00
|
|
|
|
, this evaluation short-circuits if
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
is true.
|
2019-08-28 19:40:50 +00:00
|
|
|
|
Also in similar fashion, the value is
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
if it corresponds to a boolean true value and
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\emph default
|
|
|
|
|
otherwise.
|
2023-05-02 02:23:57 +00:00
|
|
|
|
Note the rules for these Boolean operators means they can also sometimes
|
|
|
|
|
be used for conditional-like behavior: Suppose you want to use the value
|
|
|
|
|
of the cell labeled
|
|
|
|
|
\family sans
|
|
|
|
|
OPTION
|
|
|
|
|
\family default
|
|
|
|
|
if it is non-empty and non-zero, and the value of the cell labeled
|
|
|
|
|
\family sans
|
|
|
|
|
DEFAULT
|
|
|
|
|
\family default
|
|
|
|
|
otherwise.
|
|
|
|
|
Since the empty and zero values are considered false, you can achieve this
|
|
|
|
|
with:
|
|
|
|
|
\family sans
|
|
|
|
|
|
|
|
|
|
\begin_inset Newline newline
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
@(OPTION) or @(DEFAULT)
|
2019-08-27 06:56:19 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series bold
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\family typewriter
|
|
|
|
|
\emph default
|
|
|
|
|
<
|
|
|
|
|
\family default
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
2019-08-27 06:56:19 +00:00
|
|
|
|
evaluates to Boolean true if
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
is less than
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\emph default
|
|
|
|
|
.
|
|
|
|
|
If
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
or
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\emph default
|
|
|
|
|
are empty, they are considered to be 0 if the other is an integer number,
|
|
|
|
|
0.0 if it is a floating point number and the empty string if it is a string.
|
2019-07-25 13:56:15 +00:00
|
|
|
|
On locations,
|
|
|
|
|
\emph on
|
|
|
|
|
x<y
|
|
|
|
|
\emph default
|
|
|
|
|
if every component of
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
is less than or equal to the corresponding component of
|
|
|
|
|
\emph on
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
y
|
2019-07-25 13:56:15 +00:00
|
|
|
|
\emph default
|
|
|
|
|
and at least one is strictly less.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series bold
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\family typewriter
|
|
|
|
|
\emph default
|
|
|
|
|
<=
|
|
|
|
|
\family default
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
2019-08-27 06:56:19 +00:00
|
|
|
|
evaluates to true if
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
is less than or equal to
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\emph default
|
|
|
|
|
.
|
2019-07-25 13:56:15 +00:00
|
|
|
|
For locations, this must hold for every component.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series bold
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\family typewriter
|
|
|
|
|
\emph default
|
|
|
|
|
>=
|
|
|
|
|
\family default
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
2019-08-27 06:56:19 +00:00
|
|
|
|
evaluates to true if
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
is greater than or equal to
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\emph default
|
|
|
|
|
.
|
2019-07-25 13:56:15 +00:00
|
|
|
|
For locations, this must hold for every component.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series bold
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\family typewriter
|
|
|
|
|
\emph default
|
|
|
|
|
>
|
|
|
|
|
\family default
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
2019-08-27 06:56:19 +00:00
|
|
|
|
evaluates to true if
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
is greater than
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\emph default
|
|
|
|
|
.
|
2019-07-25 13:56:15 +00:00
|
|
|
|
As with <, for locations, every component must be greater than or equal,
|
|
|
|
|
and at least one must be strictly greater.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series bold
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\family typewriter
|
|
|
|
|
\emph default
|
|
|
|
|
==
|
|
|
|
|
\family default
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
2019-08-27 06:56:19 +00:00
|
|
|
|
evaluates to true if
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
is equal to
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\emph default
|
|
|
|
|
.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series bold
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\family typewriter
|
|
|
|
|
\emph default
|
2019-07-30 19:07:54 +00:00
|
|
|
|
~=
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\family default
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
2019-08-27 06:56:19 +00:00
|
|
|
|
evaluates to true if the floating point value
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
is almost equal to the floating point value
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\emph default
|
|
|
|
|
.
|
2019-08-27 06:56:19 +00:00
|
|
|
|
Almost equal means that the numbers are equal or neighbor each other in
|
|
|
|
|
the floating point representation being used.
|
|
|
|
|
It is an error to use this comparison with any type but float.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series bold
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\family typewriter
|
|
|
|
|
\emph default
|
|
|
|
|
!=
|
|
|
|
|
\family default
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
|
|
|
|
evaluates to 1 if
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
is not equal to
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\emph default
|
|
|
|
|
.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-08-27 06:56:19 +00:00
|
|
|
|
\begin_layout Description
|
|
|
|
|
Note: a string of consecutive relational operators is interpreted as the
|
|
|
|
|
conjunction of each consecutive (overlapping) pair.
|
|
|
|
|
Thus
|
2019-08-28 06:30:02 +00:00
|
|
|
|
\family sans
|
2019-08-27 06:56:19 +00:00
|
|
|
|
2 <= y() <= 10
|
|
|
|
|
\family default
|
|
|
|
|
will evaluate to true precisely in rows 2 through 10, inclusive (it is
|
|
|
|
|
shorthand for
|
2019-08-28 06:30:02 +00:00
|
|
|
|
\family sans
|
2019-08-27 06:56:19 +00:00
|
|
|
|
2 <= y() and y() <= 10
|
|
|
|
|
\family default
|
|
|
|
|
).
|
|
|
|
|
Similarly
|
2019-08-28 06:30:02 +00:00
|
|
|
|
\family sans
|
2019-08-27 06:56:19 +00:00
|
|
|
|
@(cell1) == @(cell2) == @(cell3)
|
|
|
|
|
\family default
|
|
|
|
|
will return true exactly when all three cells have the same value.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series bold
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\family typewriter
|
|
|
|
|
\emph default
|
|
|
|
|
+
|
|
|
|
|
\family default
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
2019-08-27 06:56:19 +00:00
|
|
|
|
evaluates to the sum if
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
and
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\emph default
|
|
|
|
|
are numbers.
|
|
|
|
|
If
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
and
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\emph default
|
|
|
|
|
are strings, the result is the concatenated string.
|
2019-07-29 16:03:36 +00:00
|
|
|
|
If they are locations, this operates componentwise.
|
2019-09-03 08:41:37 +00:00
|
|
|
|
If they are styles, it means to take any unset components of the left-hand
|
|
|
|
|
style and fill them in with values from the right-hand style (ignoring
|
|
|
|
|
the right-hand components that are already set in the left-hand style).
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series bold
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\family typewriter
|
|
|
|
|
\emph default
|
|
|
|
|
-
|
|
|
|
|
\family default
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
2019-08-27 06:56:19 +00:00
|
|
|
|
evaluates to the difference if
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
and
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\emph default
|
|
|
|
|
are numbers.
|
2019-07-29 16:03:36 +00:00
|
|
|
|
If they are locations, this operates componentwise.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series bold
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\family typewriter
|
|
|
|
|
\emph default
|
|
|
|
|
*
|
|
|
|
|
\family default
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
2019-08-27 06:56:19 +00:00
|
|
|
|
evaluates to the product if
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
and
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\emph default
|
|
|
|
|
are numbers.
|
2019-07-25 13:56:15 +00:00
|
|
|
|
You can multiply a location by an integer, or take the dot product of the
|
|
|
|
|
coordinates of two locations (although the use case for that is unclear).
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series bold
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\family typewriter
|
|
|
|
|
\emph default
|
|
|
|
|
/
|
|
|
|
|
\family default
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
2019-08-27 06:56:19 +00:00
|
|
|
|
evaluates to the quotient if
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
and
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\emph default
|
|
|
|
|
are numbers.
|
2019-07-25 13:56:15 +00:00
|
|
|
|
You can divide a location by an integer.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series bold
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\family typewriter
|
|
|
|
|
\emph default
|
|
|
|
|
%
|
|
|
|
|
\family default
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
2019-08-27 06:56:19 +00:00
|
|
|
|
evaluates to the remainder of the division if
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
and
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\emph default
|
|
|
|
|
are numbers.
|
2019-07-25 13:56:15 +00:00
|
|
|
|
You can mod a location by an integer, or operate on two locations, in which
|
|
|
|
|
case the mod operation applies componentwise.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
\series bold
|
|
|
|
|
-
|
|
|
|
|
\family default
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
|
|
|
|
evaluates to
|
|
|
|
|
\family typewriter
|
|
|
|
|
-
|
|
|
|
|
\family default
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
if
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
2019-08-27 06:56:19 +00:00
|
|
|
|
is a number or location, or the negation of
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
if
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
is Boolean.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
If
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
is empty, the result will be empty, too.
|
2019-08-27 06:56:19 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series bold
|
|
|
|
|
\emph on
|
|
|
|
|
x^y
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
|
|
|
|
evaluates to
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
to the power of
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\emph default
|
|
|
|
|
.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
\series bold
|
|
|
|
|
(
|
|
|
|
|
\family default
|
|
|
|
|
\emph on
|
|
|
|
|
expression
|
|
|
|
|
\family typewriter
|
|
|
|
|
\emph default
|
|
|
|
|
)
|
|
|
|
|
\family default
|
|
|
|
|
\series default
|
|
|
|
|
evaluates to the expression.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series bold
|
|
|
|
|
\emph on
|
|
|
|
|
function
|
|
|
|
|
\family typewriter
|
|
|
|
|
\emph default
|
|
|
|
|
(
|
|
|
|
|
\family default
|
|
|
|
|
\emph on
|
|
|
|
|
argument
|
|
|
|
|
\family typewriter
|
|
|
|
|
\emph default
|
|
|
|
|
,
|
|
|
|
|
\family default
|
|
|
|
|
...
|
|
|
|
|
\family typewriter
|
|
|
|
|
)
|
|
|
|
|
\family default
|
|
|
|
|
\series default
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
evaluates to the value of the function applied to the values resulting
|
2019-07-22 20:32:33 +00:00
|
|
|
|
from evaluating the argument expressions.
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
Note that if no arguments are being supplied, the parentheses are optional.
|
|
|
|
|
Hence, for example, you can use
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
e
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
by itself, like a reserved constant whose value is the usual mathematical
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
e,
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
the base of natural logarithms.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsection
|
2019-09-09 14:33:41 +00:00
|
|
|
|
\begin_inset CommandInset label
|
|
|
|
|
LatexCommand label
|
|
|
|
|
name "subsec:Functions"
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
Functions
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2023-04-29 23:18:57 +00:00
|
|
|
|
This section documents all available functions.
|
|
|
|
|
Functions are listed within each section in alphabetical order.
|
2019-08-28 06:30:02 +00:00
|
|
|
|
The functions are described in a C-like notation; you don't have to write
|
|
|
|
|
the types when you use the function in a formula.
|
|
|
|
|
For example, use
|
|
|
|
|
\family sans
|
2019-07-22 20:32:33 +00:00
|
|
|
|
@(0,0,0)
|
|
|
|
|
\family default
|
2019-08-28 06:30:02 +00:00
|
|
|
|
, not
|
|
|
|
|
\family sans
|
|
|
|
|
@(int 0, int 0, int 0)
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\family default
|
|
|
|
|
.
|
|
|
|
|
If no type is given for the result of a function, it means the result type
|
|
|
|
|
depends on the arguments.
|
|
|
|
|
Brackets mark optional arguments.
|
2023-04-29 23:18:57 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsubsection
|
|
|
|
|
Addressing/value fetching functions
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
All of these functions come in pairs, an
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
addressing
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
one whose value is a
|
|
|
|
|
\emph on
|
|
|
|
|
location
|
|
|
|
|
\emph default
|
|
|
|
|
, and a corresponding
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
fetching
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
one that produces the
|
|
|
|
|
\emph on
|
|
|
|
|
value
|
|
|
|
|
\emph default
|
|
|
|
|
of the cell at the corresponding location.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
@
|
|
|
|
|
\series medium
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
([location
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
l
|
|
|
|
|
\emph default
|
|
|
|
|
,][int
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
][,[int
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
y
|
|
|
|
|
\emph default
|
|
|
|
|
][,[int
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
z
|
|
|
|
|
\emph default
|
|
|
|
|
]]])
|
|
|
|
|
\series default
|
2019-07-29 18:14:36 +00:00
|
|
|
|
returns the value of the cell at the specified location.
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
If any of
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
,
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\emph default
|
|
|
|
|
or
|
|
|
|
|
\emph on
|
|
|
|
|
z
|
|
|
|
|
\emph default
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
is specified, that value overrides the corresponding coordinate of the
|
2019-08-28 06:30:02 +00:00
|
|
|
|
given location, which defaults to the location of the current cell if it
|
|
|
|
|
is omitted.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
|
|
|
|
location
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
&
|
|
|
|
|
\series medium
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
([location
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
l
|
|
|
|
|
\emph default
|
|
|
|
|
,][int
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
][,
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
[int
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
y
|
|
|
|
|
\emph default
|
|
|
|
|
][,
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
[int
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
z
|
|
|
|
|
\emph default
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
]]])
|
|
|
|
|
\series default
|
|
|
|
|
the arguments are interpreted in exactly the same way as for
|
|
|
|
|
\series bold
|
|
|
|
|
@
|
|
|
|
|
\series default
|
|
|
|
|
(), but this fuction returns the location, not the value of the cell at
|
|
|
|
|
that location.
|
|
|
|
|
So note for example that a bare
|
|
|
|
|
\series bold
|
|
|
|
|
&
|
|
|
|
|
\series default
|
2019-08-27 06:56:19 +00:00
|
|
|
|
with no arguments (with or without parentheses) evaluates to the location
|
|
|
|
|
of the current cell.
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
D(
|
|
|
|
|
\series medium
|
|
|
|
|
[location
|
|
|
|
|
\emph on
|
|
|
|
|
|
2019-07-29 18:14:36 +00:00
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
l
|
|
|
|
|
\emph default
|
|
|
|
|
,][int
|
2019-07-29 18:14:36 +00:00
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
][,[int
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
2019-07-29 18:14:36 +00:00
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
y
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph default
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
][,[int
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
z
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph default
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
]]]
|
|
|
|
|
\series default
|
|
|
|
|
) Like
|
|
|
|
|
\series bold
|
|
|
|
|
&
|
|
|
|
|
\series default
|
|
|
|
|
(), except that any of
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
x, y,
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph default
|
2019-07-29 18:14:36 +00:00
|
|
|
|
or
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
2019-07-29 18:14:36 +00:00
|
|
|
|
z
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph default
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
specified are added to the given location, which defaults to the current
|
|
|
|
|
location; and as a special case, if only the location is given, i.e.
|
|
|
|
|
|
|
|
|
|
\family sans
|
2019-07-29 18:14:36 +00:00
|
|
|
|
\series bold
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
D
|
|
|
|
|
\family default
|
2019-07-29 18:14:36 +00:00
|
|
|
|
\series default
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
(
|
|
|
|
|
\emph on
|
|
|
|
|
l
|
|
|
|
|
\emph default
|
|
|
|
|
), then the location
|
|
|
|
|
\emph on
|
|
|
|
|
l
|
|
|
|
|
\emph default
|
|
|
|
|
is added to the current location.
|
|
|
|
|
Think
|
2019-07-29 18:14:36 +00:00
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
D
|
2019-07-29 18:14:36 +00:00
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
for
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
displaced (by).
|
2019-07-29 18:14:36 +00:00
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2019-08-27 06:56:19 +00:00
|
|
|
|
Thus, both
|
2019-07-30 19:07:54 +00:00
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
D
|
2019-07-30 19:07:54 +00:00
|
|
|
|
\series default
|
|
|
|
|
(-1)
|
|
|
|
|
\family default
|
2019-08-27 06:56:19 +00:00
|
|
|
|
and
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
D
|
|
|
|
|
\series default
|
|
|
|
|
(left)
|
|
|
|
|
\family default
|
|
|
|
|
return the location of the cell immediately to the left of this one, and
|
2019-07-30 19:07:54 +00:00
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
D
|
2019-07-30 19:07:54 +00:00
|
|
|
|
\series default
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
(,2,1)
|
|
|
|
|
\family default
|
|
|
|
|
returns the location of the cell two below this one on the following layer,
|
|
|
|
|
as does
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
D
|
|
|
|
|
\family default
|
|
|
|
|
\series default
|
|
|
|
|
(&(0,2,1)), but
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
D
|
2019-07-30 19:07:54 +00:00
|
|
|
|
\family default
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\series default
|
|
|
|
|
(TABLE,1) returns the location of the cell just to the right of the one
|
|
|
|
|
labeled
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
TABLE
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
.
|
2019-07-29 18:14:36 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
R(
|
|
|
|
|
\series medium
|
|
|
|
|
\emph on
|
|
|
|
|
args
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
|
|
|
|
) Shorthand for
|
2019-07-29 18:14:36 +00:00
|
|
|
|
\series bold
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
@
|
|
|
|
|
\series default
|
|
|
|
|
(
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
D
|
|
|
|
|
\family default
|
2019-07-29 18:14:36 +00:00
|
|
|
|
\series default
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
(args)).
|
2019-07-29 18:14:36 +00:00
|
|
|
|
Think
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
R
|
2019-07-29 18:14:36 +00:00
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
for
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
relative.
|
2019-07-29 18:14:36 +00:00
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
Thus
|
2019-07-30 19:07:54 +00:00
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
R
|
2019-07-30 19:07:54 +00:00
|
|
|
|
\series default
|
|
|
|
|
(-1)
|
|
|
|
|
\family default
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
returns the value of the cell immediately to the left of this one, and
|
2019-07-30 19:07:54 +00:00
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
R
|
2019-07-30 19:07:54 +00:00
|
|
|
|
\series default
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
(,,1)
|
2019-07-30 19:07:54 +00:00
|
|
|
|
\family default
|
2019-08-27 06:56:19 +00:00
|
|
|
|
returns the same cell as this one but on the following layer, as do
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
2019-08-27 06:56:19 +00:00
|
|
|
|
R
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\series default
|
|
|
|
|
(&(0,0,1)
|
|
|
|
|
\family default
|
2019-08-27 06:56:19 +00:00
|
|
|
|
) and
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
R
|
|
|
|
|
\series default
|
|
|
|
|
(below
|
|
|
|
|
\family default
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
), but
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
R
|
|
|
|
|
\family default
|
|
|
|
|
\series default
|
2019-08-27 06:56:19 +00:00
|
|
|
|
(TABLE,,1) returns the value of the cell immediately down from the one labeled
|
|
|
|
|
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
TABLE
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
.
|
2019-07-30 19:07:54 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
X(
|
|
|
|
|
\series medium
|
|
|
|
|
label
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
to,
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\emph default
|
|
|
|
|
label
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
from,
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\emph default
|
2019-09-09 14:33:41 +00:00
|
|
|
|
[
|
2019-07-30 19:07:54 +00:00
|
|
|
|
\emph on
|
|
|
|
|
fix_x
|
|
|
|
|
\emph default
|
|
|
|
|
]
|
|
|
|
|
\emph on
|
|
|
|
|
,
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\emph default
|
2019-09-09 14:33:41 +00:00
|
|
|
|
[
|
2019-07-30 19:07:54 +00:00
|
|
|
|
\emph on
|
|
|
|
|
fix_y
|
|
|
|
|
\emph default
|
|
|
|
|
]
|
|
|
|
|
\emph on
|
|
|
|
|
,
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\emph default
|
2019-09-09 14:33:41 +00:00
|
|
|
|
[
|
2019-07-30 19:07:54 +00:00
|
|
|
|
\emph on
|
|
|
|
|
fix_z
|
|
|
|
|
\emph default
|
|
|
|
|
]
|
|
|
|
|
\series default
|
|
|
|
|
)
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
Excel reference
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
: returns the value of the cell at a computed target location.
|
|
|
|
|
This target location is the one reached from the current cell via the same
|
|
|
|
|
offset as the cell with label
|
|
|
|
|
\emph on
|
|
|
|
|
to
|
|
|
|
|
\emph default
|
|
|
|
|
has from label
|
|
|
|
|
\emph on
|
|
|
|
|
from.
|
|
|
|
|
|
|
|
|
|
\emph default
|
|
|
|
|
The idea is that if you label the source of data you want to reference,
|
|
|
|
|
say with
|
|
|
|
|
\family sans
|
|
|
|
|
SRC
|
|
|
|
|
\family default
|
|
|
|
|
, and the location of some place you want to start referring to it with
|
|
|
|
|
|
|
|
|
|
\family sans
|
|
|
|
|
REF
|
|
|
|
|
\family default
|
|
|
|
|
, then you can use
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
X
|
|
|
|
|
\series default
|
|
|
|
|
(SRC,REF)
|
|
|
|
|
\family default
|
|
|
|
|
to refer to the source data, and fill this formula to neighboring cells
|
|
|
|
|
to refer to the neighbors of the source, and it will all continue to work
|
|
|
|
|
if either the source or the reference is moved around in the sheet.
|
|
|
|
|
|
|
|
|
|
\begin_inset Newline newline
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
If the
|
|
|
|
|
\emph on
|
|
|
|
|
fix_DIM
|
|
|
|
|
\emph default
|
2019-09-09 14:33:41 +00:00
|
|
|
|
argument is the
|
|
|
|
|
\family sans
|
|
|
|
|
fix
|
|
|
|
|
\family default
|
|
|
|
|
keyword (as opposed to an empty value), then the corresponding coordinate
|
|
|
|
|
of the target cell is set to match that of
|
2019-07-30 19:07:54 +00:00
|
|
|
|
\emph on
|
|
|
|
|
to
|
|
|
|
|
\emph default
|
|
|
|
|
.
|
|
|
|
|
This corresponds to fixing the row or column (or layer) of the reference,
|
|
|
|
|
as with a
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
$
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
character in Excel.
|
|
|
|
|
Thus
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
X
|
|
|
|
|
\series default
|
2023-05-02 02:23:57 +00:00
|
|
|
|
(SRC,REF,fix,fix,fix)
|
2019-07-30 19:07:54 +00:00
|
|
|
|
\family default
|
|
|
|
|
is identical to
|
|
|
|
|
\family sans
|
|
|
|
|
@(SRC)
|
|
|
|
|
\family default
|
2023-05-02 02:23:57 +00:00
|
|
|
|
, but you should certainly prefer the latter for clarity of expression when
|
|
|
|
|
that's what you mean.
|
2019-07-30 19:07:54 +00:00
|
|
|
|
\begin_inset Newline newline
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
There is a corresponding location function
|
|
|
|
|
\family sans
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\series bold
|
|
|
|
|
X&
|
|
|
|
|
\series default
|
|
|
|
|
()
|
2019-07-30 19:07:54 +00:00
|
|
|
|
\family default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
as well, which takes exactly the same arguments with the same meanings
|
|
|
|
|
and returns the corresponding location, rather than the value there, but
|
|
|
|
|
it is rarely needed.
|
|
|
|
|
It is provided for completeness of the pairing described in the introduction
|
|
|
|
|
to this section.
|
2019-07-30 19:07:54 +00:00
|
|
|
|
\begin_inset Newline newline
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
See the FAQ below for further discussion of cell references.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
2023-04-29 23:18:57 +00:00
|
|
|
|
\begin_layout Subsubsection
|
|
|
|
|
Accumulation functions
|
|
|
|
|
\end_layout
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
2023-04-29 23:18:57 +00:00
|
|
|
|
\begin_layout Standard
|
|
|
|
|
All of these functions accumulate an entire array of values in some way.
|
|
|
|
|
They differ only in how the values are accumulated, and otherwise have
|
|
|
|
|
exactly the same behavior/signature, namely:
|
2019-08-26 06:19:34 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series bold
|
2023-04-29 23:18:57 +00:00
|
|
|
|
\emph on
|
|
|
|
|
accumulator
|
2019-08-26 06:19:34 +00:00
|
|
|
|
\family sans
|
|
|
|
|
\series default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
\emph default
|
|
|
|
|
(
|
2019-08-26 06:19:34 +00:00
|
|
|
|
\family default
|
|
|
|
|
\series medium
|
2023-04-29 23:18:57 +00:00
|
|
|
|
[location
|
|
|
|
|
\emph on
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2023-04-29 23:18:57 +00:00
|
|
|
|
l1
|
|
|
|
|
\emph default
|
|
|
|
|
[,
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
2023-04-29 23:18:57 +00:00
|
|
|
|
location
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2023-04-29 23:18:57 +00:00
|
|
|
|
l2
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
[,
|
|
|
|
|
\emph on
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2023-04-29 23:18:57 +00:00
|
|
|
|
expr
|
|
|
|
|
\emph default
|
|
|
|
|
]]])
|
|
|
|
|
\emph on
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\emph default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
2023-04-29 23:18:57 +00:00
|
|
|
|
\series bold
|
|
|
|
|
accumulator
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\series medium
|
2023-04-29 23:18:57 +00:00
|
|
|
|
\emph default
|
|
|
|
|
(
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
2023-04-29 23:18:57 +00:00
|
|
|
|
v1
|
|
|
|
|
\family roman
|
|
|
|
|
,
|
|
|
|
|
\family default
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2023-04-29 23:18:57 +00:00
|
|
|
|
v2,
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
...
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph default
|
|
|
|
|
)
|
|
|
|
|
\series default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
The first form evaluates to the accumulation of
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
2023-04-29 23:18:57 +00:00
|
|
|
|
expr
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
computed for each location in the block defined by corner locations
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
2023-04-29 23:18:57 +00:00
|
|
|
|
l1
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
and
|
|
|
|
|
\emph on
|
|
|
|
|
l2
|
|
|
|
|
\emph default
|
|
|
|
|
.
|
|
|
|
|
(Note that negative coordinates in the block corners are simply interpreted
|
|
|
|
|
as zero.) The expression
|
|
|
|
|
\emph on
|
|
|
|
|
expr
|
|
|
|
|
\emph default
|
|
|
|
|
defaults to
|
|
|
|
|
\begin_inset Quotes eld
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
2023-04-29 23:18:57 +00:00
|
|
|
|
\series bold
|
|
|
|
|
@
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\series default
|
|
|
|
|
|
2023-04-29 23:18:57 +00:00
|
|
|
|
\begin_inset Quotes erd
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_inset
|
|
|
|
|
|
2023-04-29 23:18:57 +00:00
|
|
|
|
– in other words, it accumulates the values in that block.
|
|
|
|
|
The location
|
|
|
|
|
\emph on
|
|
|
|
|
l2
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
defaults to
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
2023-04-29 23:18:57 +00:00
|
|
|
|
l1
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
, corresponding to a one-cell block, and
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
2023-04-29 23:18:57 +00:00
|
|
|
|
l1
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
in turn defaults to the current location.
|
|
|
|
|
The second form simply accumulates all of the argument values.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
The available accumulators are:
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
2023-04-29 23:18:57 +00:00
|
|
|
|
int
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
count Returns the number of accumulated values that are true when converted
|
|
|
|
|
to a boolean value.
|
|
|
|
|
For a block defined by corner locations
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
2023-04-29 23:18:57 +00:00
|
|
|
|
l1
|
|
|
|
|
\emph default
|
|
|
|
|
and
|
|
|
|
|
\emph on
|
|
|
|
|
l2
|
|
|
|
|
\emph default
|
|
|
|
|
,
|
|
|
|
|
\begin_inset Quotes eld
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_inset
|
|
|
|
|
|
2023-04-29 23:18:57 +00:00
|
|
|
|
count(
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
2023-04-29 23:18:57 +00:00
|
|
|
|
l1,l2
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
)
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
is essentially a shorthand for
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
sum(
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
2023-04-29 23:18:57 +00:00
|
|
|
|
l1, l2,
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
int(bool()))
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
2023-04-29 23:18:57 +00:00
|
|
|
|
max In the first form, returns the
|
|
|
|
|
\emph on
|
|
|
|
|
location
|
|
|
|
|
\emph default
|
|
|
|
|
within the block of the maximum value being accumulated; to get the maximum
|
|
|
|
|
value occurring in the block with corners
|
|
|
|
|
\emph on
|
|
|
|
|
l1
|
|
|
|
|
\emph default
|
|
|
|
|
and
|
|
|
|
|
\emph on
|
|
|
|
|
l2
|
|
|
|
|
\emph default
|
|
|
|
|
, use
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
@(max(
|
|
|
|
|
\emph on
|
|
|
|
|
l1
|
|
|
|
|
\emph default
|
|
|
|
|
,
|
|
|
|
|
\emph on
|
|
|
|
|
l2
|
|
|
|
|
\emph default
|
|
|
|
|
))
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
instead.
|
|
|
|
|
In the second form, simply returns the maximum of the argument values.
|
|
|
|
|
Recall that in comparisons with the corresponding types, an empty cell
|
|
|
|
|
corresponds to 0, 0.0, or
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
, as needed.
|
|
|
|
|
This accumulator returns an error if it encounters values that are not
|
|
|
|
|
comparable (like a string and an integer).
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
min Just like
|
|
|
|
|
\family sans
|
|
|
|
|
max
|
|
|
|
|
\family default
|
|
|
|
|
but for the minimum of the accumulated values.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\series medium
|
2023-04-29 23:18:57 +00:00
|
|
|
|
int
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
n Returns the number of accumulated values that are not empty.
|
|
|
|
|
For a block defined by corner locations
|
|
|
|
|
\emph on
|
|
|
|
|
l1
|
|
|
|
|
\emph default
|
|
|
|
|
and
|
|
|
|
|
\emph on
|
|
|
|
|
l2
|
|
|
|
|
\emph default
|
|
|
|
|
,
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
n(
|
|
|
|
|
\emph on
|
|
|
|
|
l1,l2
|
|
|
|
|
\emph default
|
|
|
|
|
)
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
is essentially a shorthand for
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
sum(
|
|
|
|
|
\emph on
|
|
|
|
|
l1, l2,
|
|
|
|
|
\emph default
|
|
|
|
|
int(-is(@,empty)))
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
sum Returns the sum of the accumulated values (recall for strings this is
|
|
|
|
|
the concatenation).
|
|
|
|
|
This accumulator returns an error if encounters values that cannot be added
|
|
|
|
|
(like a string and an integer).
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsubsection
|
2023-04-30 16:19:12 +00:00
|
|
|
|
\begin_inset CommandInset label
|
|
|
|
|
LatexCommand label
|
|
|
|
|
name "subsec:All-other-functions"
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2023-04-29 23:18:57 +00:00
|
|
|
|
All other functions
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\series medium
|
2023-04-29 23:18:57 +00:00
|
|
|
|
string
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
$
|
|
|
|
|
\series medium
|
|
|
|
|
(string
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2023-04-29 23:18:57 +00:00
|
|
|
|
env
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph default
|
|
|
|
|
)
|
|
|
|
|
\series default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
evaluates to the contents of the specified environment variable.
|
|
|
|
|
If the variable does not exist, then an empty string will be returned.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
above|below|left|right|up|down
|
|
|
|
|
\series medium
|
|
|
|
|
[([location
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
2023-04-29 23:18:57 +00:00
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
l
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
])] As bare words (without any arguments and also without the parentheses)
|
|
|
|
|
these symbols return a one-cell displacement in the named direction, e.g.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
2023-04-29 23:18:57 +00:00
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
D
|
|
|
|
|
\series default
|
|
|
|
|
(above)
|
|
|
|
|
\family default
|
|
|
|
|
\series medium
|
|
|
|
|
gives the location of the same cell as the current on but in the previous
|
|
|
|
|
layer and
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
R
|
|
|
|
|
\series default
|
|
|
|
|
(up)
|
|
|
|
|
\family default
|
|
|
|
|
\series medium
|
|
|
|
|
yields the value of the cell one up from the current cell.
|
|
|
|
|
With parentheses, they act like
|
|
|
|
|
\series bold
|
|
|
|
|
@
|
|
|
|
|
\series default
|
|
|
|
|
()
|
|
|
|
|
\series medium
|
|
|
|
|
but displaced by one cell in the named direction, so
|
|
|
|
|
\family sans
|
|
|
|
|
\series default
|
|
|
|
|
right()
|
|
|
|
|
\family default
|
|
|
|
|
\series medium
|
|
|
|
|
returns the value of the cell immediately to the right of the current one,
|
|
|
|
|
and
|
|
|
|
|
\family sans
|
|
|
|
|
\series default
|
|
|
|
|
down(MYTABLE)
|
|
|
|
|
\family default
|
|
|
|
|
\series medium
|
|
|
|
|
gives the value one line down from the cell labeled
|
|
|
|
|
\family sans
|
|
|
|
|
\series default
|
|
|
|
|
MYTABLE
|
|
|
|
|
\family default
|
|
|
|
|
\series medium
|
|
|
|
|
, etc.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
|
|
|
|
float
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
abs
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\series medium
|
2023-04-29 23:18:57 +00:00
|
|
|
|
(float
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
)
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\series default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
|
|
|
|
int
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
abs
|
|
|
|
|
\series medium
|
|
|
|
|
(int
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
)
|
|
|
|
|
\series default
|
|
|
|
|
evaluates to the absolute value of
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
|
|
|
|
float
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
acos
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\series medium
|
|
|
|
|
(float|int
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
)
|
|
|
|
|
\series default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
evaluates to the arc cosine of
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
, where
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
is given in radians.
|
2023-04-29 23:18:57 +00:00
|
|
|
|
|
2019-07-29 17:22:15 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-09-03 08:41:37 +00:00
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
2023-04-29 23:18:57 +00:00
|
|
|
|
float
|
2019-09-03 08:41:37 +00:00
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
arcosh
|
2019-09-03 08:41:37 +00:00
|
|
|
|
\series medium
|
2023-04-29 23:18:57 +00:00
|
|
|
|
(float|int
|
2019-09-03 08:41:37 +00:00
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2023-04-29 23:18:57 +00:00
|
|
|
|
x
|
2019-09-03 08:41:37 +00:00
|
|
|
|
\emph default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
)
|
2019-09-03 08:41:37 +00:00
|
|
|
|
\series default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
evaluates to the arc hyperbolic cosine of
|
2019-09-03 08:41:37 +00:00
|
|
|
|
\emph on
|
2023-04-29 23:18:57 +00:00
|
|
|
|
x
|
2019-09-03 08:41:37 +00:00
|
|
|
|
\emph default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
, where
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
is given in radians.
|
|
|
|
|
|
2019-09-03 08:41:37 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-08-26 06:19:34 +00:00
|
|
|
|
\begin_layout Description
|
2023-04-29 23:18:57 +00:00
|
|
|
|
|
2019-08-26 06:19:34 +00:00
|
|
|
|
\series medium
|
2023-04-29 23:18:57 +00:00
|
|
|
|
float
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
arsinh
|
|
|
|
|
\series medium
|
|
|
|
|
(float|int
|
2019-08-26 06:19:34 +00:00
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2023-04-29 23:18:57 +00:00
|
|
|
|
x
|
2019-08-26 06:19:34 +00:00
|
|
|
|
\emph default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
)
|
2019-08-26 06:19:34 +00:00
|
|
|
|
\series default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
evaluates to the arc hyperbolic sine of
|
2019-08-26 06:19:34 +00:00
|
|
|
|
\emph on
|
2023-04-29 23:18:57 +00:00
|
|
|
|
x
|
2019-08-26 06:19:34 +00:00
|
|
|
|
\emph default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
, where
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
is given in radians.
|
|
|
|
|
|
2019-08-26 06:19:34 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-07-29 17:22:15 +00:00
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
2023-04-29 23:18:57 +00:00
|
|
|
|
float
|
2019-07-29 17:22:15 +00:00
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
artanh
|
2019-07-29 17:22:15 +00:00
|
|
|
|
\series medium
|
2023-04-29 23:18:57 +00:00
|
|
|
|
(float|int
|
2019-07-29 17:22:15 +00:00
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2023-04-29 23:18:57 +00:00
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
)
|
|
|
|
|
\series default
|
|
|
|
|
evaluates to the arc hyperbolic tangent of
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
, where
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
is given in radians.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
|
|
|
|
float
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
asin
|
|
|
|
|
\series medium
|
|
|
|
|
(float|int
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
)
|
|
|
|
|
\series default
|
|
|
|
|
evaluates to the arc sine of
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
, where
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
is given in radians.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
|
|
|
|
float
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
atan
|
|
|
|
|
\series medium
|
|
|
|
|
(float|int
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
)
|
|
|
|
|
\series default
|
|
|
|
|
evaluates to the arc tangent of
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
, where
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
is given in radians.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
|
|
|
|
style
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
|
|
|
|
background
|
|
|
|
|
\series medium
|
|
|
|
|
(int
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\emph default
|
|
|
|
|
c)
|
|
|
|
|
\series default
|
|
|
|
|
evaluates to a style token with the background color set to
|
|
|
|
|
\emph on
|
|
|
|
|
c
|
|
|
|
|
\emph default
|
|
|
|
|
(and no other fields set).
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
below
|
|
|
|
|
\series medium
|
|
|
|
|
[([location
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
l
|
|
|
|
|
\emph default
|
|
|
|
|
])] displacement by one cell in the positive
|
|
|
|
|
\series default
|
|
|
|
|
\emph on
|
|
|
|
|
z
|
|
|
|
|
\emph default
|
|
|
|
|
direction; see the fuller description at
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
above
|
|
|
|
|
\series default
|
|
|
|
|
.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
|
|
|
|
int
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
bitand
|
|
|
|
|
\series medium
|
|
|
|
|
(int
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
v1,
|
|
|
|
|
\begin_inset space ~
|
2019-07-29 17:22:15 +00:00
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
...
|
|
|
|
|
\emph default
|
|
|
|
|
) evaluates to the bitwise
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
and
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
of all the supplied values.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
|
|
|
|
int
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
bitor
|
|
|
|
|
\series medium
|
|
|
|
|
(int
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
v
|
|
|
|
|
\emph default
|
|
|
|
|
1,
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\emph default
|
|
|
|
|
...) evaluates to the bitwise
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
or
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
of all the supplied values.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-08-28 06:30:02 +00:00
|
|
|
|
\begin_layout Description
|
2019-08-28 19:40:50 +00:00
|
|
|
|
|
2019-09-03 08:41:37 +00:00
|
|
|
|
\series medium
|
|
|
|
|
style
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
|
|
|
|
bold
|
|
|
|
|
\series medium
|
|
|
|
|
([bool
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
b
|
|
|
|
|
\emph default
|
|
|
|
|
])
|
|
|
|
|
\series default
|
|
|
|
|
evaluates to a style token with the bold property set to
|
|
|
|
|
\emph on
|
|
|
|
|
b
|
|
|
|
|
\emph default
|
|
|
|
|
, which defaults to true (and no other fields set).
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
2019-08-28 19:40:50 +00:00
|
|
|
|
\series medium
|
|
|
|
|
bool
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
bool
|
|
|
|
|
\series medium
|
|
|
|
|
[([
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
])]
|
|
|
|
|
\series default
|
|
|
|
|
Converts
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
to a boolean value.
|
|
|
|
|
This is very permissive; error values are unaffected; empty, integer 0,
|
|
|
|
|
float 0.0, and boolean false values are false, and everything else is true.
|
|
|
|
|
If
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
is omitted, defaults to the value of the current cell.
|
|
|
|
|
If the parentheses are omitted as well, acts as a keyword, for example
|
|
|
|
|
for testing types with
|
2019-08-28 06:30:02 +00:00
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
is
|
|
|
|
|
\series default
|
2019-08-28 19:40:50 +00:00
|
|
|
|
().
|
2019-08-28 06:30:02 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
|
|
|
|
float
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
ceil
|
|
|
|
|
\series medium
|
|
|
|
|
(float
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
) evaluates to the smallest integral floating-point value greater than or
|
|
|
|
|
equal to
|
|
|
|
|
\family sans
|
|
|
|
|
\series default
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-09-03 08:41:37 +00:00
|
|
|
|
\begin_layout Description
|
|
|
|
|
center keyword used as an argument to
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
justify
|
|
|
|
|
\family default
|
|
|
|
|
\series default
|
|
|
|
|
().
|
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_layout Description
|
|
|
|
|
clock
|
|
|
|
|
\series medium
|
|
|
|
|
(integer
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
condition
|
|
|
|
|
\emph default
|
2019-07-30 19:07:54 +00:00
|
|
|
|
,[location[,location])
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\series default
|
|
|
|
|
conditionally clocks the specified cell if the condition is not 0.
|
|
|
|
|
If two locations are given, all cells in that range will be clocked.
|
|
|
|
|
The return value of clock is empty.
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
Note that the clocked expression of a cell can clock itself; indeed, that's
|
|
|
|
|
the only way that a cell can be clocked more than once in a single recalculatio
|
|
|
|
|
n.
|
|
|
|
|
Take care with the
|
|
|
|
|
\emph on
|
|
|
|
|
condition
|
|
|
|
|
\emph default
|
|
|
|
|
expression to avoid recalculation becoming stuck in an infinite loop, however.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
Make tpa the default file format for Teapot
There turned out to be one blocking technical issue for full adpotion of
tpa format, and that was the fact that the printed representation of
floating values inside the tpa file might not reproduce the same double
when read. This change therefore introduces the "hexact" floating point
format, based on the the %La format string, which produces a hex
representation with exact round trips. While working on this, it was
convenient to add a new representation "compact" which is basically the
shorter of decimal and scientific representations, without trailing zeros.
This is now the default float format, but of course one can select decimal
or scientific formats to restore prior appearance. However, full-precision
compact format is now the (only) format for editing cell contents, as it
is accurate and efficient. Of course you can enter floating point values
in any format you like when typing in a formula.
The addition of several new floating point options overloaded the menus
in terminal teapot, so this change also revamps those menus slightly,
including eliminating the unused MenuChoice struct, and just specifying menus
with an array of strings.
Closes #63.
2019-08-24 16:58:46 +00:00
|
|
|
|
\begin_layout Description
|
2019-09-03 08:41:37 +00:00
|
|
|
|
compact used as a keyword to the
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
string
|
|
|
|
|
\family default
|
|
|
|
|
\series default
|
|
|
|
|
() function; listed here to record that this identifier may not be used
|
|
|
|
|
as a cell label.
|
Make tpa the default file format for Teapot
There turned out to be one blocking technical issue for full adpotion of
tpa format, and that was the fact that the printed representation of
floating values inside the tpa file might not reproduce the same double
when read. This change therefore introduces the "hexact" floating point
format, based on the the %La format string, which produces a hex
representation with exact round trips. While working on this, it was
convenient to add a new representation "compact" which is basically the
shorter of decimal and scientific representations, without trailing zeros.
This is now the default float format, but of course one can select decimal
or scientific formats to restore prior appearance. However, full-precision
compact format is now the (only) format for editing cell contents, as it
is accurate and efficient. Of course you can enter floating point values
in any format you like when typing in a formula.
The addition of several new floating point options overloaded the menus
in terminal teapot, so this change also revamps those menus slightly,
including eliminating the unused MenuChoice struct, and just specifying menus
with an array of strings.
Closes #63.
2019-08-24 16:58:46 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
|
|
|
|
float
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
cos
|
|
|
|
|
\series medium
|
|
|
|
|
(float|int
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
)
|
|
|
|
|
\series default
|
|
|
|
|
evaluates to the cosine of
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
, where
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
is given in radians.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
|
|
|
|
float
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
cosh
|
|
|
|
|
\series medium
|
|
|
|
|
(float|int
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
)
|
|
|
|
|
\series default
|
|
|
|
|
evaluates to the hyperbolic cosine of
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
, where
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
is given in radians.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\begin_layout Description
|
|
|
|
|
decimal used as a keyword to the string() function; listed here to record
|
|
|
|
|
that this identifier may not be used as a cell label.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
|
|
|
|
float
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
deg2rad
|
|
|
|
|
\series medium
|
|
|
|
|
(float|int
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
Make tpa the default file format for Teapot
There turned out to be one blocking technical issue for full adpotion of
tpa format, and that was the fact that the printed representation of
floating values inside the tpa file might not reproduce the same double
when read. This change therefore introduces the "hexact" floating point
format, based on the the %La format string, which produces a hex
representation with exact round trips. While working on this, it was
convenient to add a new representation "compact" which is basically the
shorter of decimal and scientific representations, without trailing zeros.
This is now the default float format, but of course one can select decimal
or scientific formats to restore prior appearance. However, full-precision
compact format is now the (only) format for editing cell contents, as it
is accurate and efficient. Of course you can enter floating point values
in any format you like when typing in a formula.
The addition of several new floating point options overloaded the menus
in terminal teapot, so this change also revamps those menus slightly,
including eliminating the unused MenuChoice struct, and just specifying menus
with an array of strings.
Closes #63.
2019-08-24 16:58:46 +00:00
|
|
|
|
)
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\series default
|
|
|
|
|
evaluates to the degrees that are equivalent to
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
radians.
|
2019-09-18 12:49:53 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
|
|
|
|
style
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
|
|
|
|
dim
|
|
|
|
|
\series medium
|
|
|
|
|
([bool
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
b
|
|
|
|
|
\emph default
|
|
|
|
|
])
|
|
|
|
|
\series default
|
|
|
|
|
evaluates to a style token with the dim property set to
|
|
|
|
|
\emph on
|
|
|
|
|
b
|
|
|
|
|
\emph default
|
|
|
|
|
, which defaults to true (and no other fields set).
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-08-26 06:19:34 +00:00
|
|
|
|
\begin_layout Description
|
|
|
|
|
down
|
|
|
|
|
\series medium
|
|
|
|
|
[([location
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
l
|
|
|
|
|
\emph default
|
|
|
|
|
])] displacement by one cell in the positive
|
|
|
|
|
\series default
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\emph default
|
|
|
|
|
direction; see the fuller description at
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
above
|
|
|
|
|
\series default
|
|
|
|
|
.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
|
|
|
|
float
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
e
|
|
|
|
|
\series medium
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
[()]
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\series default
|
|
|
|
|
evaluates to the Euler constant
|
|
|
|
|
\emph on
|
|
|
|
|
e
|
|
|
|
|
\emph default
|
|
|
|
|
.
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
Note the parentheses are optional.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-08-28 06:30:02 +00:00
|
|
|
|
\begin_layout Description
|
|
|
|
|
empty
|
|
|
|
|
\series medium
|
|
|
|
|
[(
|
|
|
|
|
\shape italic
|
|
|
|
|
args
|
|
|
|
|
\shape default
|
|
|
|
|
)]
|
|
|
|
|
\series default
|
|
|
|
|
ignores all of its arguments and returns the empty value.
|
|
|
|
|
Without parentheses, acts as a keyword, typically for
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
is
|
|
|
|
|
\series default
|
|
|
|
|
().
|
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
|
|
|
|
error
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
error
|
|
|
|
|
\series medium
|
2019-08-28 06:30:02 +00:00
|
|
|
|
[([
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
|
|
|
|
message
|
|
|
|
|
\emph default
|
2019-08-28 06:30:02 +00:00
|
|
|
|
])]
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\series default
|
2019-08-28 06:30:02 +00:00
|
|
|
|
converts its argument to a string just as with the string() function, and
|
|
|
|
|
then returns an error with that string as the message.
|
|
|
|
|
Without parentheses, acts as a keyword, e.g.
|
|
|
|
|
for
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
is
|
|
|
|
|
\series default
|
|
|
|
|
()
|
|
|
|
|
\family default
|
|
|
|
|
.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
eval
|
|
|
|
|
\series medium
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
(location)
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\series default
|
|
|
|
|
evaluates to the value of the expression in the cell at the given
|
|
|
|
|
\emph on
|
|
|
|
|
location
|
|
|
|
|
\emph default
|
|
|
|
|
, but evaluated in the context of the cell using eval().
|
|
|
|
|
This function may not be used nested any deeper than 32 times.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
2019-08-27 06:56:19 +00:00
|
|
|
|
\series medium
|
|
|
|
|
boolean
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
false represents the false Boolean value.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-08-28 06:30:02 +00:00
|
|
|
|
\begin_layout Description
|
|
|
|
|
fident a keyword indicating the token type of
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
function identifier,
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
provided for the sake of completeness.
|
|
|
|
|
There is probably little practical call for this type.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-08-28 19:40:50 +00:00
|
|
|
|
\begin_layout Description
|
|
|
|
|
find
|
|
|
|
|
\series medium
|
|
|
|
|
(
|
|
|
|
|
\emph on
|
|
|
|
|
expr
|
|
|
|
|
\emph default
|
|
|
|
|
,
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\emph default
|
|
|
|
|
location
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
stride
|
|
|
|
|
\emph default
|
|
|
|
|
[,location
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
start
|
|
|
|
|
\emph default
|
|
|
|
|
]) examines cells in turn, returning the location of the first one at which
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
\emph on
|
|
|
|
|
expr
|
|
|
|
|
\emph default
|
|
|
|
|
evaluates to true, or boolean false if the boundary of the sheet is encountered.
|
|
|
|
|
The second argument
|
|
|
|
|
\emph on
|
|
|
|
|
stride
|
|
|
|
|
\emph default
|
|
|
|
|
must not have all zero components, and is added to the location being examined
|
|
|
|
|
at each iteration.
|
|
|
|
|
Often it is useful to use a direction constant like
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
up
|
|
|
|
|
\family default
|
|
|
|
|
\series default
|
|
|
|
|
for the stride.
|
|
|
|
|
The search begins at location
|
|
|
|
|
\emph on
|
|
|
|
|
start
|
|
|
|
|
\emph default
|
|
|
|
|
, which defaults to the current location plus the
|
|
|
|
|
\emph on
|
|
|
|
|
stride
|
|
|
|
|
\emph default
|
|
|
|
|
if it is not specified.
|
2019-09-09 14:33:41 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
fix used as a keyword to the
|
|
|
|
|
\family sans
|
|
|
|
|
X()
|
|
|
|
|
\family default
|
|
|
|
|
and
|
|
|
|
|
\family sans
|
|
|
|
|
X&()
|
|
|
|
|
\family default
|
|
|
|
|
functions; listed here to record that this identifier may not be used as
|
|
|
|
|
a cell label.
|
2019-08-28 19:40:50 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-08-27 06:56:19 +00:00
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\series medium
|
|
|
|
|
float
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
float
|
|
|
|
|
\series medium
|
2019-08-28 06:30:02 +00:00
|
|
|
|
[([float|string|int|empty
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
s
|
|
|
|
|
\emph default
|
2019-08-28 06:30:02 +00:00
|
|
|
|
])]
|
|
|
|
|
\series default
|
|
|
|
|
converts into a floating point number the given float, string, int, or
|
|
|
|
|
empty value (the latter converts to 0.0).
|
|
|
|
|
If the argument is omitted, the value of the current cell is used.
|
|
|
|
|
If the parentheses are omitted, acts as a keyword, e.g., for type testing
|
|
|
|
|
with
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
is
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\series default
|
2019-08-28 06:30:02 +00:00
|
|
|
|
()
|
|
|
|
|
\family default
|
|
|
|
|
.
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
2019-09-03 08:41:37 +00:00
|
|
|
|
\series medium
|
|
|
|
|
style
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
|
|
|
|
floatfmt
|
|
|
|
|
\series medium
|
|
|
|
|
(decimal|scientific|compact|hexact)
|
|
|
|
|
\series default
|
|
|
|
|
evaluates to a style token with the floating-point format set to the specified
|
|
|
|
|
format, given as a bare word (and no other fields set).
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\series medium
|
|
|
|
|
float
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
floor
|
|
|
|
|
\series medium
|
|
|
|
|
(float
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
) evaluates to the largest integral floating-point value less than or equal
|
|
|
|
|
to
|
|
|
|
|
\series default
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
2019-09-03 08:41:37 +00:00
|
|
|
|
\series medium
|
|
|
|
|
style
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
|
|
|
|
foreground
|
|
|
|
|
\series medium
|
|
|
|
|
(int
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\emph default
|
|
|
|
|
c)
|
|
|
|
|
\series default
|
|
|
|
|
evaluates to a style token with the foreground color set to
|
|
|
|
|
\emph on
|
|
|
|
|
c
|
|
|
|
|
\emph default
|
|
|
|
|
(and no other fields set).
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\series medium
|
|
|
|
|
float
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
frac
|
|
|
|
|
\series medium
|
|
|
|
|
(float
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
2019-08-28 06:30:02 +00:00
|
|
|
|
)
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\series default
|
|
|
|
|
evaluates to the fractional part of
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
.
|
2019-08-28 06:30:02 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
funcall a keyword indicating the
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
funcall
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
token type used to encode expressions as tokens; may be used with
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
is
|
|
|
|
|
\series default
|
|
|
|
|
()
|
|
|
|
|
\family default
|
|
|
|
|
for example.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
2023-07-26 03:21:43 +00:00
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
|
|
|
|
style
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
|
|
|
|
hashing
|
|
|
|
|
\series medium
|
|
|
|
|
(int
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\emph default
|
|
|
|
|
c)
|
|
|
|
|
\series default
|
|
|
|
|
evaluates to a style token with the hashing color set to
|
|
|
|
|
\emph on
|
|
|
|
|
c
|
|
|
|
|
\emph default
|
|
|
|
|
(and no other fields set).
|
|
|
|
|
\end_layout
|
|
|
|
|
|
Make tpa the default file format for Teapot
There turned out to be one blocking technical issue for full adpotion of
tpa format, and that was the fact that the printed representation of
floating values inside the tpa file might not reproduce the same double
when read. This change therefore introduces the "hexact" floating point
format, based on the the %La format string, which produces a hex
representation with exact round trips. While working on this, it was
convenient to add a new representation "compact" which is basically the
shorter of decimal and scientific representations, without trailing zeros.
This is now the default float format, but of course one can select decimal
or scientific formats to restore prior appearance. However, full-precision
compact format is now the (only) format for editing cell contents, as it
is accurate and efficient. Of course you can enter floating point values
in any format you like when typing in a formula.
The addition of several new floating point options overloaded the menus
in terminal teapot, so this change also revamps those menus slightly,
including eliminating the unused MenuChoice struct, and just specifying menus
with an array of strings.
Closes #63.
2019-08-24 16:58:46 +00:00
|
|
|
|
\begin_layout Description
|
|
|
|
|
hexact used as a keyword to the string() function; listed here to record
|
|
|
|
|
that this identifier may not be used as a cell label.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
2023-05-02 02:23:57 +00:00
|
|
|
|
\begin_layout Description
|
|
|
|
|
if
|
|
|
|
|
\series medium
|
|
|
|
|
(
|
|
|
|
|
\emph on
|
|
|
|
|
condition
|
|
|
|
|
\emph default
|
|
|
|
|
[,
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
then_expr
|
|
|
|
|
\emph default
|
|
|
|
|
[
|
|
|
|
|
\emph on
|
|
|
|
|
,
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
else_expr
|
|
|
|
|
\emph default
|
|
|
|
|
]]) Typical conditional expression.
|
|
|
|
|
First the
|
|
|
|
|
\series default
|
|
|
|
|
\emph on
|
|
|
|
|
condition
|
|
|
|
|
\emph default
|
|
|
|
|
is evaluated.
|
|
|
|
|
If its value is falsy, then the value of the
|
|
|
|
|
\emph on
|
|
|
|
|
else_expr
|
|
|
|
|
\emph default
|
|
|
|
|
is returned if it is present, or else the empty value is returned.
|
|
|
|
|
(If you just want to return the value of the
|
|
|
|
|
\emph on
|
|
|
|
|
condition
|
|
|
|
|
\emph default
|
|
|
|
|
when it corresponds to boolean false, use
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\emph on
|
|
|
|
|
condition
|
|
|
|
|
\emph default
|
|
|
|
|
and
|
|
|
|
|
\emph on
|
|
|
|
|
then_expr
|
|
|
|
|
\emph default
|
|
|
|
|
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
instead.) If the value of
|
|
|
|
|
\emph on
|
|
|
|
|
condition
|
|
|
|
|
\emph default
|
|
|
|
|
is truthy, then the value of the
|
|
|
|
|
\emph on
|
|
|
|
|
then_expr
|
|
|
|
|
\emph default
|
|
|
|
|
is returned if it is present, otherwise the value of the
|
|
|
|
|
\emph on
|
|
|
|
|
condition
|
|
|
|
|
\emph default
|
|
|
|
|
is returned.
|
|
|
|
|
Note that if() is short-circuiting in the sense that the
|
|
|
|
|
\emph on
|
|
|
|
|
condition
|
|
|
|
|
\emph default
|
|
|
|
|
is always evaluated but at most one of
|
|
|
|
|
\emph on
|
|
|
|
|
then_expr
|
|
|
|
|
\emph default
|
|
|
|
|
and
|
|
|
|
|
\emph on
|
|
|
|
|
else_expr
|
|
|
|
|
\emph default
|
|
|
|
|
is (note, if evaluating
|
|
|
|
|
\emph on
|
|
|
|
|
condition
|
|
|
|
|
\emph default
|
|
|
|
|
results in an error, then this expression produces an error without evaluating
|
|
|
|
|
either
|
|
|
|
|
\emph on
|
|
|
|
|
then_expr
|
|
|
|
|
\emph default
|
|
|
|
|
or
|
|
|
|
|
\emph on
|
|
|
|
|
else_expr
|
|
|
|
|
\emph default
|
|
|
|
|
).
|
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
|
|
|
|
int
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
int
|
|
|
|
|
\series medium
|
2023-05-02 02:23:57 +00:00
|
|
|
|
[([int|boolean|float|string|empty
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
2019-08-28 06:30:02 +00:00
|
|
|
|
][,
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2019-08-28 06:30:02 +00:00
|
|
|
|
direction
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph default
|
2019-08-28 06:30:02 +00:00
|
|
|
|
])]
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\series default
|
2019-08-28 06:30:02 +00:00
|
|
|
|
converts to an
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
2019-08-28 06:30:02 +00:00
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph default
|
2023-05-02 02:23:57 +00:00
|
|
|
|
integer the given integer, boolean, float, string, or empty value
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
2019-08-28 06:30:02 +00:00
|
|
|
|
x.
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph default
|
2023-05-02 02:23:57 +00:00
|
|
|
|
(The latter converts to 0, and Boolean true converts to 1 and false to 0.)
|
|
|
|
|
The optional second argument must be the name of one of the functions that
|
|
|
|
|
produces a floating point integral value from a float, i.e.,
|
2019-08-28 06:30:02 +00:00
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
ceil
|
|
|
|
|
\family default
|
|
|
|
|
\series default
|
|
|
|
|
,
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
floor
|
|
|
|
|
\family default
|
|
|
|
|
\series default
|
|
|
|
|
,
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
round
|
|
|
|
|
\family default
|
|
|
|
|
\series default
|
|
|
|
|
, or
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
trunc
|
|
|
|
|
\family default
|
|
|
|
|
\series default
|
|
|
|
|
, and it directs how to convert floating point values to an integer.
|
|
|
|
|
(The default is
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
trunc
|
|
|
|
|
\family default
|
|
|
|
|
\series default
|
|
|
|
|
, see the documentation of the corresponding functions for a description
|
|
|
|
|
of the conversion behavior.) If
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
2019-08-28 06:30:02 +00:00
|
|
|
|
x
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph default
|
2019-08-28 06:30:02 +00:00
|
|
|
|
is omitted, the value of the current cell is used.
|
|
|
|
|
If in addition the parentheses are omitted, acts as a keyword, e.g., for
|
|
|
|
|
value testing with
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
is
|
|
|
|
|
\series default
|
|
|
|
|
()
|
|
|
|
|
\family default
|
|
|
|
|
.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-08-28 06:30:02 +00:00
|
|
|
|
\begin_layout Description
|
|
|
|
|
is
|
|
|
|
|
\series medium
|
|
|
|
|
[([
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
2019-08-28 06:30:02 +00:00
|
|
|
|
x
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph default
|
2019-08-28 06:30:02 +00:00
|
|
|
|
][,
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
|
|
|
|
|
2019-08-28 06:30:02 +00:00
|
|
|
|
\begin_inset space ~
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_inset
|
|
|
|
|
|
2019-08-28 06:30:02 +00:00
|
|
|
|
type1,
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2019-08-28 06:30:02 +00:00
|
|
|
|
type2
|
|
|
|
|
\emph default
|
|
|
|
|
,...])]
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\series default
|
2019-08-28 06:30:02 +00:00
|
|
|
|
Boolean-valued type testing.
|
|
|
|
|
Returns true if the given value
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
2019-08-28 06:30:02 +00:00
|
|
|
|
x
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph default
|
2019-08-28 06:30:02 +00:00
|
|
|
|
is any of the listed types.
|
|
|
|
|
Each type may be any of the keywords
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
bool, empty, error, fident, float, funcall, int
|
|
|
|
|
\family default
|
|
|
|
|
\series default
|
|
|
|
|
,
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
2019-09-09 14:33:41 +00:00
|
|
|
|
lident, location, number, operator,
|
2019-08-28 06:30:02 +00:00
|
|
|
|
\family default
|
|
|
|
|
\series default
|
2019-09-09 14:33:41 +00:00
|
|
|
|
|
2019-08-28 06:30:02 +00:00
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
string
|
|
|
|
|
\family default
|
|
|
|
|
\series default
|
2019-09-09 14:33:41 +00:00
|
|
|
|
, or
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
style
|
|
|
|
|
\family default
|
|
|
|
|
\series default
|
2019-08-28 06:30:02 +00:00
|
|
|
|
.
|
|
|
|
|
Each of these identifies a single type, except
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
number
|
|
|
|
|
\family default
|
|
|
|
|
\series default
|
|
|
|
|
, which is a shorthand for
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
empty
|
|
|
|
|
\family default
|
|
|
|
|
\series default
|
|
|
|
|
,
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
float
|
|
|
|
|
\family default
|
|
|
|
|
\series default
|
|
|
|
|
,
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
int
|
|
|
|
|
\family default
|
|
|
|
|
\series default
|
|
|
|
|
.
|
|
|
|
|
If no types are specified, returns true for any non-empty value.
|
|
|
|
|
(In other words,
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
is
|
|
|
|
|
\series default
|
|
|
|
|
(
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\emph on
|
2019-08-28 06:30:02 +00:00
|
|
|
|
x
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\emph default
|
2019-08-28 06:30:02 +00:00
|
|
|
|
)
|
|
|
|
|
\family default
|
|
|
|
|
is a boolean-valued version of
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
n
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\series default
|
2019-08-28 06:30:02 +00:00
|
|
|
|
(
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
2019-08-28 06:30:02 +00:00
|
|
|
|
x
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph default
|
2019-08-28 06:30:02 +00:00
|
|
|
|
)
|
|
|
|
|
\family default
|
|
|
|
|
, without the special behavior when
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
is a location.) If
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
is omitted, defaults to the value of the current cell; the parentheses
|
|
|
|
|
may be omitted as well, so bare
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
is
|
|
|
|
|
\family default
|
|
|
|
|
\series default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
tests whether the current cell is non-empty.
|
|
|
|
|
\end_layout
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
2023-04-29 23:18:57 +00:00
|
|
|
|
\begin_layout Description
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
2023-04-29 23:18:57 +00:00
|
|
|
|
\series medium
|
|
|
|
|
style
|
2019-07-29 16:42:51 +00:00
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
2023-04-29 23:18:57 +00:00
|
|
|
|
\series default
|
2019-07-29 16:42:51 +00:00
|
|
|
|
\emph default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
italic
|
|
|
|
|
\series medium
|
|
|
|
|
([bool
|
2019-07-29 16:42:51 +00:00
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2023-04-29 23:18:57 +00:00
|
|
|
|
b
|
|
|
|
|
\emph default
|
|
|
|
|
])
|
2019-07-29 16:42:51 +00:00
|
|
|
|
\series default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
evaluates to a style token with the italic property set to
|
|
|
|
|
\emph on
|
|
|
|
|
b
|
2019-07-29 16:42:51 +00:00
|
|
|
|
\emph default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
, which defaults to true (and no other fields set).
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
2019-07-29 16:42:51 +00:00
|
|
|
|
\series medium
|
2023-04-29 23:18:57 +00:00
|
|
|
|
style
|
2019-07-29 16:42:51 +00:00
|
|
|
|
\emph on
|
2023-04-29 23:18:57 +00:00
|
|
|
|
|
2019-07-29 16:42:51 +00:00
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
2023-04-29 23:18:57 +00:00
|
|
|
|
\series default
|
2019-07-29 16:42:51 +00:00
|
|
|
|
\emph default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
justify
|
|
|
|
|
\series medium
|
|
|
|
|
(left|right|center)
|
|
|
|
|
\series default
|
|
|
|
|
evaluates to a style token with the justification set to the specified
|
|
|
|
|
direction, given as a bare word.
|
|
|
|
|
No other fields are set in the result.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
left
|
|
|
|
|
\series medium
|
|
|
|
|
[([location
|
2019-07-29 16:42:51 +00:00
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2023-04-29 23:18:57 +00:00
|
|
|
|
l
|
2019-07-29 16:42:51 +00:00
|
|
|
|
\emph default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
])] displacement by one cell in the negative
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\series default
|
|
|
|
|
\emph on
|
2023-04-29 23:18:57 +00:00
|
|
|
|
x
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
direction; see the fuller description at
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
above
|
|
|
|
|
\series default
|
2019-07-22 20:32:33 +00:00
|
|
|
|
.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
2023-04-29 23:18:57 +00:00
|
|
|
|
string
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
len
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\series medium
|
2023-04-29 23:18:57 +00:00
|
|
|
|
(string
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2023-04-29 23:18:57 +00:00
|
|
|
|
s
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
)
|
|
|
|
|
\series default
|
|
|
|
|
evaluates to the length of
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
2023-04-29 23:18:57 +00:00
|
|
|
|
s
|
|
|
|
|
\emph default
|
|
|
|
|
.
|
|
|
|
|
\end_layout
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
2023-04-29 23:18:57 +00:00
|
|
|
|
\begin_layout Description
|
|
|
|
|
lident a keyword indicating the
|
|
|
|
|
\begin_inset Quotes eld
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_inset
|
|
|
|
|
|
2023-04-29 23:18:57 +00:00
|
|
|
|
label identifier
|
|
|
|
|
\begin_inset Quotes erd
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\end_inset
|
|
|
|
|
|
2023-04-29 23:18:57 +00:00
|
|
|
|
token type.
|
|
|
|
|
This type is not generally accessible, as labels always evaluate to their
|
|
|
|
|
locations (or error if there is no such label).
|
|
|
|
|
\end_layout
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
|
2023-04-29 23:18:57 +00:00
|
|
|
|
\begin_layout Description
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
|
2023-04-29 23:18:57 +00:00
|
|
|
|
\series medium
|
|
|
|
|
float
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\series default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
log
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\series medium
|
2023-04-29 23:18:57 +00:00
|
|
|
|
(float|int
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2023-04-29 23:18:57 +00:00
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
[,
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2023-04-29 23:18:57 +00:00
|
|
|
|
float|int
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\emph on
|
2023-04-29 23:18:57 +00:00
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
y
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
])
|
|
|
|
|
\series default
|
|
|
|
|
evaluates to the logarithm of
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
2023-04-29 23:18:57 +00:00
|
|
|
|
x
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph default
|
|
|
|
|
.
|
2023-04-29 23:18:57 +00:00
|
|
|
|
If
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\emph on
|
2023-04-29 23:18:57 +00:00
|
|
|
|
y
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\emph default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
is not specified, the result will be the natural logarithm, otherwise it
|
|
|
|
|
will be the logarithm to the base of
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\emph on
|
2023-04-29 23:18:57 +00:00
|
|
|
|
y
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\emph default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
location currently this is only a keyword, e.g., for use with
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
2023-04-29 23:18:57 +00:00
|
|
|
|
is
|
|
|
|
|
\series default
|
|
|
|
|
()
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\family default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
.
|
|
|
|
|
Use
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\family sans
|
2023-04-29 23:18:57 +00:00
|
|
|
|
\series bold
|
|
|
|
|
&
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\series default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
()
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\family default
|
2023-04-29 23:18:57 +00:00
|
|
|
|
to convert three integers to a location.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-08-28 06:30:02 +00:00
|
|
|
|
\begin_layout Description
|
|
|
|
|
number
|
|
|
|
|
\series medium
|
|
|
|
|
[([bool|empty|int|float|string
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
])]
|
|
|
|
|
\series default
|
|
|
|
|
Converts its argument, which defaults to the value of the current cell,
|
|
|
|
|
to the most appropriate number type.
|
|
|
|
|
Thus, it leaves ints and floats alone, converts boolean values to integers
|
|
|
|
|
1 or 0, converts empty to integer 0, and converts numeric strings to ints
|
|
|
|
|
if they don't have a decimal point and floats if they do.
|
|
|
|
|
Without parentheses, acts as a keyword for
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
is
|
|
|
|
|
\series default
|
|
|
|
|
()
|
|
|
|
|
\family default
|
|
|
|
|
, abbreviating the combination of float, int, and empty.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
operator A keyword indicating the
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
operator
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
token type, representing symbols like parentheses, plus signs, commas,
|
|
|
|
|
etc.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_layout Description
|
|
|
|
|
poly
|
|
|
|
|
\series medium
|
|
|
|
|
(float|integer
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
,
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
float|integer
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
cn
|
|
|
|
|
\emph default
|
|
|
|
|
[,
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2019-08-28 06:30:02 +00:00
|
|
|
|
...])
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\series default
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
evaluates the polynomial
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset Formula $c_{n}\cdot x^{n}+\ldots+c_{0}\cdot x^{0}$
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\emph default
|
|
|
|
|
.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
2019-09-03 08:41:37 +00:00
|
|
|
|
\series medium
|
|
|
|
|
style
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
|
|
|
|
precision
|
|
|
|
|
\series medium
|
|
|
|
|
(int
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
)
|
|
|
|
|
\series default
|
|
|
|
|
evaluates to a style token in which the precision is set to
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
(and no other fields are set).
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\series medium
|
|
|
|
|
float
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
rad2deg
|
|
|
|
|
\series medium
|
|
|
|
|
(float|int
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
)
|
|
|
|
|
\series default
|
|
|
|
|
evaluates to the radians that are equivalent to
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
degrees.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-08-26 06:19:34 +00:00
|
|
|
|
\begin_layout Description
|
|
|
|
|
right
|
|
|
|
|
\series medium
|
|
|
|
|
[([location
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
l
|
|
|
|
|
\emph default
|
|
|
|
|
])] displacement by one cell in the positive
|
|
|
|
|
\series default
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
direction; see the fuller description at
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
above
|
|
|
|
|
\series default
|
|
|
|
|
.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
|
|
|
|
float
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
rnd
|
|
|
|
|
\series medium
|
|
|
|
|
()
|
|
|
|
|
\series default
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
evaluates to a pseudo-random number between 0.0 and 1.0, changing each time
|
|
|
|
|
the expression is evaluated.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
|
|
|
|
float
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
round
|
|
|
|
|
\series medium
|
|
|
|
|
(float
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
) evaluates to the argument
|
|
|
|
|
\series default
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
rounded to an integral value.
|
|
|
|
|
Unless the system floating-point rounding direction has been changed, this
|
|
|
|
|
will be the integral value nearest to
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
scientific Used as a keyword argument to the string() function; listed here
|
|
|
|
|
to record that this identifier may not be used as a cell label.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
2019-09-03 08:41:37 +00:00
|
|
|
|
\series medium
|
|
|
|
|
style
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
|
|
|
|
shadowed
|
|
|
|
|
\series medium
|
|
|
|
|
([bool
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
b
|
|
|
|
|
\emph default
|
|
|
|
|
])
|
|
|
|
|
\series default
|
|
|
|
|
evaluates to a style token with the shadowed property set to
|
|
|
|
|
\emph on
|
|
|
|
|
b
|
|
|
|
|
\emph default
|
|
|
|
|
, which defaults to true (and no other fields set).
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\series medium
|
|
|
|
|
float
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
sin
|
|
|
|
|
\series medium
|
|
|
|
|
(float|int
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
)
|
|
|
|
|
\series default
|
|
|
|
|
evaluates to the sine of
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
, where
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
is given in radians.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
|
|
|
|
float
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
sinh
|
|
|
|
|
\series medium
|
|
|
|
|
(float|int
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
)
|
|
|
|
|
\series default
|
|
|
|
|
evaluates to the hyperbolic sine of
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
, where
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
is given in radians.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\series medium
|
|
|
|
|
float
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
sqrt
|
|
|
|
|
\series medium
|
|
|
|
|
(float|int
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
)
|
|
|
|
|
\series default
|
|
|
|
|
evaluates to the square root of
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\series medium
|
|
|
|
|
string
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
strftime
|
|
|
|
|
\series medium
|
|
|
|
|
(string
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
f
|
|
|
|
|
\emph default
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
[,
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
integer
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
t
|
|
|
|
|
\emph default
|
|
|
|
|
])
|
|
|
|
|
\series default
|
|
|
|
|
evaluates to the time
|
|
|
|
|
\emph on
|
|
|
|
|
t
|
|
|
|
|
\emph default
|
|
|
|
|
formatted according to the format specified in
|
|
|
|
|
\emph on
|
|
|
|
|
f
|
|
|
|
|
\emph default
|
|
|
|
|
.
|
|
|
|
|
Times in
|
|
|
|
|
\emph on
|
|
|
|
|
t
|
|
|
|
|
\emph default
|
|
|
|
|
are counted in seconds since epoch (1970-1-1 0:00).
|
|
|
|
|
If
|
|
|
|
|
\emph on
|
|
|
|
|
t
|
|
|
|
|
\emph default
|
|
|
|
|
is empty or 0, the actual time is used.
|
|
|
|
|
For the format specifications consult the man page of your c library, strftime
|
|
|
|
|
(3).
|
|
|
|
|
Example:
|
|
|
|
|
\emph on
|
|
|
|
|
@(now)=int(strftime("%s"))
|
|
|
|
|
\emph default
|
|
|
|
|
sets the field with label now to the actual time.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
|
|
|
|
string
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
string
|
|
|
|
|
\series medium
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
(
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
[,
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
[integer
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
precision
|
|
|
|
|
\emph default
|
|
|
|
|
][,
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
Make tpa the default file format for Teapot
There turned out to be one blocking technical issue for full adpotion of
tpa format, and that was the fact that the printed representation of
floating values inside the tpa file might not reproduce the same double
when read. This change therefore introduces the "hexact" floating point
format, based on the the %La format string, which produces a hex
representation with exact round trips. While working on this, it was
convenient to add a new representation "compact" which is basically the
shorter of decimal and scientific representations, without trailing zeros.
This is now the default float format, but of course one can select decimal
or scientific formats to restore prior appearance. However, full-precision
compact format is now the (only) format for editing cell contents, as it
is accurate and efficient. Of course you can enter floating point values
in any format you like when typing in a formula.
The addition of several new floating point options overloaded the menus
in terminal teapot, so this change also revamps those menus slightly,
including eliminating the unused MenuChoice struct, and just specifying menus
with an array of strings.
Closes #63.
2019-08-24 16:58:46 +00:00
|
|
|
|
\emph on
|
|
|
|
|
format
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph default
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
]])
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\series default
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
evaluates to the string representation of its first argument.
|
|
|
|
|
The optional second argument gives the precision used for converting floating
|
|
|
|
|
point numbers to string form.
|
Make tpa the default file format for Teapot
There turned out to be one blocking technical issue for full adpotion of
tpa format, and that was the fact that the printed representation of
floating values inside the tpa file might not reproduce the same double
when read. This change therefore introduces the "hexact" floating point
format, based on the the %La format string, which produces a hex
representation with exact round trips. While working on this, it was
convenient to add a new representation "compact" which is basically the
shorter of decimal and scientific representations, without trailing zeros.
This is now the default float format, but of course one can select decimal
or scientific formats to restore prior appearance. However, full-precision
compact format is now the (only) format for editing cell contents, as it
is accurate and efficient. Of course you can enter floating point values
in any format you like when typing in a formula.
The addition of several new floating point options overloaded the menus
in terminal teapot, so this change also revamps those menus slightly,
including eliminating the unused MenuChoice struct, and just specifying menus
with an array of strings.
Closes #63.
2019-08-24 16:58:46 +00:00
|
|
|
|
The optional third argument may be one of the keywords
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
decimal
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
,
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
scientific
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
Make tpa the default file format for Teapot
There turned out to be one blocking technical issue for full adpotion of
tpa format, and that was the fact that the printed representation of
floating values inside the tpa file might not reproduce the same double
when read. This change therefore introduces the "hexact" floating point
format, based on the the %La format string, which produces a hex
representation with exact round trips. While working on this, it was
convenient to add a new representation "compact" which is basically the
shorter of decimal and scientific representations, without trailing zeros.
This is now the default float format, but of course one can select decimal
or scientific formats to restore prior appearance. However, full-precision
compact format is now the (only) format for editing cell contents, as it
is accurate and efficient. Of course you can enter floating point values
in any format you like when typing in a formula.
The addition of several new floating point options overloaded the menus
in terminal teapot, so this change also revamps those menus slightly,
including eliminating the unused MenuChoice struct, and just specifying menus
with an array of strings.
Closes #63.
2019-08-24 16:58:46 +00:00
|
|
|
|
,
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
compact
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
, or
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
Make tpa the default file format for Teapot
There turned out to be one blocking technical issue for full adpotion of
tpa format, and that was the fact that the printed representation of
floating values inside the tpa file might not reproduce the same double
when read. This change therefore introduces the "hexact" floating point
format, based on the the %La format string, which produces a hex
representation with exact round trips. While working on this, it was
convenient to add a new representation "compact" which is basically the
shorter of decimal and scientific representations, without trailing zeros.
This is now the default float format, but of course one can select decimal
or scientific formats to restore prior appearance. However, full-precision
compact format is now the (only) format for editing cell contents, as it
is accurate and efficient. Of course you can enter floating point values
in any format you like when typing in a formula.
The addition of several new floating point options overloaded the menus
in terminal teapot, so this change also revamps those menus slightly,
including eliminating the unused MenuChoice struct, and just specifying menus
with an array of strings.
Closes #63.
2019-08-24 16:58:46 +00:00
|
|
|
|
hexact
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
Make tpa the default file format for Teapot
There turned out to be one blocking technical issue for full adpotion of
tpa format, and that was the fact that the printed representation of
floating values inside the tpa file might not reproduce the same double
when read. This change therefore introduces the "hexact" floating point
format, based on the the %La format string, which produces a hex
representation with exact round trips. While working on this, it was
convenient to add a new representation "compact" which is basically the
shorter of decimal and scientific representations, without trailing zeros.
This is now the default float format, but of course one can select decimal
or scientific formats to restore prior appearance. However, full-precision
compact format is now the (only) format for editing cell contents, as it
is accurate and efficient. Of course you can enter floating point values
in any format you like when typing in a formula.
The addition of several new floating point options overloaded the menus
in terminal teapot, so this change also revamps those menus slightly,
including eliminating the unused MenuChoice struct, and just specifying menus
with an array of strings.
Closes #63.
2019-08-24 16:58:46 +00:00
|
|
|
|
, controlling the format for converting floating point numbers to string
|
|
|
|
|
form.
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
If the optional arguments are not specified, current defaults are used.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
|
|
|
|
int
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
strptime
|
|
|
|
|
\series medium
|
|
|
|
|
(string
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
f
|
|
|
|
|
\emph default
|
|
|
|
|
,
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
string
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
datetime
|
|
|
|
|
\emph default
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
)
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\series default
|
|
|
|
|
evaluates to the seconds since epoch (1970-1-1 0:00) of the
|
|
|
|
|
\emph on
|
|
|
|
|
datetime
|
|
|
|
|
\emph default
|
|
|
|
|
string, parsed according to the format specified in
|
|
|
|
|
\emph on
|
|
|
|
|
f
|
|
|
|
|
\emph default
|
|
|
|
|
.
|
|
|
|
|
For the format specifications consult the man page of your c library, strptime
|
|
|
|
|
(3).
|
2019-09-09 14:33:41 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
|
|
|
|
style
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
style
|
|
|
|
|
\series medium
|
|
|
|
|
[([
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
])]
|
|
|
|
|
\series default
|
|
|
|
|
attempts to convert
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
to a style; this currently only succeeds if
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
already is a style; or if it is a location, it extracts the current style
|
|
|
|
|
of that location.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
2019-09-09 14:33:41 +00:00
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
defaults to the current location.
|
|
|
|
|
Without parentheses as a bare word,
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
style
|
|
|
|
|
\family default
|
|
|
|
|
\series default
|
|
|
|
|
is a keyword used for example by
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
is
|
|
|
|
|
\family default
|
|
|
|
|
\series default
|
|
|
|
|
() to test the type of an entity.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
|
|
|
|
string
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
substr
|
|
|
|
|
\series medium
|
|
|
|
|
(string
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
s,
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph default
|
|
|
|
|
integer
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
x
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph default
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
[,integer
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
y
|
|
|
|
|
\emph default
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
])
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\series default
|
|
|
|
|
evaluates to the substring of
|
|
|
|
|
\emph on
|
|
|
|
|
s
|
|
|
|
|
\emph default
|
|
|
|
|
between
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
and
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\emph default
|
|
|
|
|
, which start at 0.
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
If is omitted, the substring proceeds to the end of the string.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
|
|
|
|
float
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
tan
|
|
|
|
|
\series medium
|
|
|
|
|
(float|int
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
)
|
|
|
|
|
\series default
|
|
|
|
|
evaluates to the tangent of
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
, where
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
is given in radians.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
|
|
|
|
float
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
tanh
|
|
|
|
|
\series medium
|
|
|
|
|
(float|int
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
)
|
|
|
|
|
\series default
|
|
|
|
|
evaluates to the hyperbolic tangent of
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
, where
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
is given in radians.
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
|
|
|
|
float
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
tau
|
|
|
|
|
\series medium
|
|
|
|
|
[()]
|
|
|
|
|
\series default
|
|
|
|
|
evaluates to the circle constant
|
|
|
|
|
\begin_inset Formula $\tau$
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
, the ratio of circumference to radius of any circle.
|
|
|
|
|
(Note
|
|
|
|
|
\begin_inset Formula $\tau=2\pi$
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
.)
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
|
|
|
|
int
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
time
|
|
|
|
|
\series medium
|
|
|
|
|
[()]
|
|
|
|
|
\begin_inset ERT
|
|
|
|
|
status open
|
|
|
|
|
|
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
each time this expression is evaluated, it gives the time in seconds since
|
|
|
|
|
the epoch.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
2019-09-03 08:41:37 +00:00
|
|
|
|
\series medium
|
|
|
|
|
style
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
|
|
|
|
transparent
|
|
|
|
|
\series medium
|
|
|
|
|
([bool
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
b
|
|
|
|
|
\emph default
|
|
|
|
|
])
|
|
|
|
|
\series default
|
|
|
|
|
evaluates to a style token with the transparent property set to
|
|
|
|
|
\emph on
|
|
|
|
|
b
|
|
|
|
|
\emph default
|
|
|
|
|
, which defaults to true (and no other fields set).
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
2019-08-27 06:56:19 +00:00
|
|
|
|
\series medium
|
|
|
|
|
boolean
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
true represents the true Boolean value.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\series medium
|
|
|
|
|
float
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
trunc
|
|
|
|
|
\series medium
|
|
|
|
|
(float
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
) evaluates to the integer part of
|
|
|
|
|
\series default
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
in floating-point form; generally this should be the same as
|
|
|
|
|
\emph on
|
|
|
|
|
x -
|
|
|
|
|
\emph default
|
|
|
|
|
frac(
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
).
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-09-03 08:41:37 +00:00
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
|
|
|
|
style
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
\emph default
|
|
|
|
|
underline
|
|
|
|
|
\series medium
|
|
|
|
|
([bool
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
b
|
|
|
|
|
\emph default
|
|
|
|
|
])
|
|
|
|
|
\series default
|
|
|
|
|
evaluates to a style token with the underline property set to
|
|
|
|
|
\emph on
|
|
|
|
|
b
|
|
|
|
|
\emph default
|
|
|
|
|
, which defaults to true (and no other fields set).
|
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-08-26 06:19:34 +00:00
|
|
|
|
\begin_layout Description
|
|
|
|
|
up
|
|
|
|
|
\series medium
|
|
|
|
|
[([location
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
l
|
|
|
|
|
\emph default
|
|
|
|
|
])] displacement by one cell in the negative
|
|
|
|
|
\series default
|
|
|
|
|
\emph on
|
2019-09-03 08:41:37 +00:00
|
|
|
|
y
|
|
|
|
|
\emph default
|
|
|
|
|
direction; see the fuller description at
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
above
|
|
|
|
|
\series default
|
|
|
|
|
.)
|
2019-08-26 06:19:34 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
|
|
|
|
int
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
x
|
|
|
|
|
\series medium
|
|
|
|
|
([location
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
l
|
|
|
|
|
\emph default
|
2019-07-29 17:22:15 +00:00
|
|
|
|
])
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\series default
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
|
|
|
|
int
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
y
|
|
|
|
|
\series medium
|
|
|
|
|
([location
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
l
|
|
|
|
|
\emph default
|
2019-07-29 17:22:15 +00:00
|
|
|
|
])
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\series default
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
|
|
|
|
|
\series medium
|
|
|
|
|
int
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\series default
|
|
|
|
|
z
|
|
|
|
|
\series medium
|
|
|
|
|
([location
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\begin_inset space ~
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
l
|
|
|
|
|
\emph default
|
|
|
|
|
])
|
|
|
|
|
\series default
|
|
|
|
|
evaluate to the
|
|
|
|
|
\emph on
|
|
|
|
|
x
|
|
|
|
|
\emph default
|
|
|
|
|
,
|
|
|
|
|
\emph on
|
|
|
|
|
y
|
|
|
|
|
\emph default
|
|
|
|
|
and
|
|
|
|
|
\emph on
|
|
|
|
|
z
|
|
|
|
|
\emph default
|
|
|
|
|
position of the given location, of the currently updated cell if none is
|
|
|
|
|
given.
|
|
|
|
|
These functions are usually used in combination with the @ function for
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
obtaining information from other cells, but see also the convenience functions
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
2019-07-30 19:07:54 +00:00
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
R
|
|
|
|
|
\series default
|
|
|
|
|
()
|
|
|
|
|
\family default
|
|
|
|
|
and
|
|
|
|
|
\family sans
|
|
|
|
|
\series bold
|
|
|
|
|
D
|
|
|
|
|
\series default
|
|
|
|
|
()
|
|
|
|
|
\family default
|
|
|
|
|
for relative references.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsection
|
|
|
|
|
Expression Grammar
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
digit::=
|
|
|
|
|
\family typewriter
|
|
|
|
|
0
|
|
|
|
|
\family default
|
|
|
|
|
| ..
|
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
9
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
hex_digit::=
|
|
|
|
|
\family typewriter
|
|
|
|
|
0
|
|
|
|
|
\family default
|
|
|
|
|
| ..
|
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
9
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
a
|
|
|
|
|
\family default
|
|
|
|
|
| ..
|
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
f
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
octal_digit::=
|
|
|
|
|
\family typewriter
|
|
|
|
|
0
|
|
|
|
|
\family default
|
|
|
|
|
| ..
|
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
7
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
decimal_integer::=
|
|
|
|
|
\emph on
|
|
|
|
|
digit
|
|
|
|
|
\emph default
|
|
|
|
|
{
|
|
|
|
|
\emph on
|
|
|
|
|
digit
|
|
|
|
|
\emph default
|
|
|
|
|
}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
hex_integer::=
|
|
|
|
|
\family typewriter
|
|
|
|
|
0x
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
\emph on
|
|
|
|
|
hex_digit
|
|
|
|
|
\emph default
|
|
|
|
|
{
|
|
|
|
|
\emph on
|
|
|
|
|
hexdigit
|
|
|
|
|
\emph default
|
|
|
|
|
}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
octal_integer::=
|
|
|
|
|
\family typewriter
|
|
|
|
|
0
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
\emph on
|
|
|
|
|
octal_digit
|
|
|
|
|
\emph default
|
|
|
|
|
{
|
|
|
|
|
\emph on
|
|
|
|
|
octdigit
|
|
|
|
|
\emph default
|
|
|
|
|
}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
integer::=
|
|
|
|
|
\emph on
|
|
|
|
|
decimal_integer
|
|
|
|
|
\emph default
|
|
|
|
|
|
|
|
|
|
|
\emph on
|
|
|
|
|
hex_integer
|
|
|
|
|
\emph default
|
|
|
|
|
|
|
|
|
|
|
\emph on
|
|
|
|
|
octal_integer
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
float::=
|
|
|
|
|
\emph on
|
|
|
|
|
digit
|
|
|
|
|
\emph default
|
|
|
|
|
{
|
|
|
|
|
\emph on
|
|
|
|
|
digit
|
|
|
|
|
\emph default
|
|
|
|
|
} [
|
|
|
|
|
\family typewriter
|
|
|
|
|
.
|
|
|
|
|
|
|
|
|
|
\family default
|
|
|
|
|
] {
|
|
|
|
|
\emph on
|
|
|
|
|
digit
|
|
|
|
|
\emph default
|
|
|
|
|
} [
|
|
|
|
|
\family typewriter
|
|
|
|
|
e
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
E
|
|
|
|
|
\family default
|
|
|
|
|
[
|
|
|
|
|
\family typewriter
|
|
|
|
|
+
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
-
|
|
|
|
|
\family default
|
|
|
|
|
]
|
|
|
|
|
\emph on
|
|
|
|
|
digit
|
|
|
|
|
\emph default
|
|
|
|
|
{
|
|
|
|
|
\emph on
|
|
|
|
|
digit
|
|
|
|
|
\emph default
|
|
|
|
|
} ]
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
quoted_character::=
|
|
|
|
|
\emph on
|
|
|
|
|
|
|
|
|
|
\backslash
|
|
|
|
|
any_character
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
character::=
|
|
|
|
|
\emph on
|
|
|
|
|
any_character
|
|
|
|
|
\emph default
|
|
|
|
|
|
|
|
|
|
|
\emph on
|
|
|
|
|
quoted_character
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
string::=
|
|
|
|
|
\family typewriter
|
|
|
|
|
"
|
|
|
|
|
\family default
|
|
|
|
|
{
|
|
|
|
|
\emph on
|
|
|
|
|
character
|
|
|
|
|
\emph default
|
|
|
|
|
}
|
|
|
|
|
\family typewriter
|
|
|
|
|
"
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
identifier_character::=
|
|
|
|
|
\family typewriter
|
|
|
|
|
_
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
@
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
&
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
.
|
|
|
|
|
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
$
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
|
\emph on
|
|
|
|
|
alpha_character
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
identifier::=
|
|
|
|
|
\emph on
|
|
|
|
|
identifier_character
|
|
|
|
|
\emph default
|
|
|
|
|
{
|
|
|
|
|
\emph on
|
|
|
|
|
identifier_character
|
|
|
|
|
\emph default
|
|
|
|
|
|
|
|
|
|
|
\emph on
|
|
|
|
|
digit
|
|
|
|
|
\emph default
|
|
|
|
|
}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
function::=
|
|
|
|
|
\emph on
|
|
|
|
|
identifier
|
|
|
|
|
\emph default
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
[
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\family typewriter
|
|
|
|
|
(
|
|
|
|
|
\family default
|
|
|
|
|
[
|
|
|
|
|
\emph on
|
|
|
|
|
term
|
|
|
|
|
\emph default
|
|
|
|
|
] {
|
|
|
|
|
\family typewriter
|
|
|
|
|
,
|
|
|
|
|
\family default
|
|
|
|
|
[
|
|
|
|
|
\emph on
|
|
|
|
|
term
|
|
|
|
|
\emph default
|
|
|
|
|
] }
|
|
|
|
|
\family typewriter
|
|
|
|
|
)
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\family default
|
|
|
|
|
]
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
label::=
|
|
|
|
|
\emph on
|
|
|
|
|
identifier
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
parenterm::=
|
|
|
|
|
\family typewriter
|
|
|
|
|
(
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
\emph on
|
|
|
|
|
term
|
|
|
|
|
\emph default
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
)
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
negterm::=
|
|
|
|
|
\family typewriter
|
|
|
|
|
-
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
\emph on
|
|
|
|
|
primary
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
primary::=
|
|
|
|
|
\emph on
|
|
|
|
|
function
|
|
|
|
|
\emph default
|
|
|
|
|
|
|
|
|
|
|
\emph on
|
|
|
|
|
label
|
|
|
|
|
\emph default
|
|
|
|
|
|
|
|
|
|
|
\emph on
|
|
|
|
|
parenterm
|
|
|
|
|
\emph default
|
|
|
|
|
|
|
|
|
|
|
\emph on
|
|
|
|
|
negterm
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
2019-08-27 06:56:19 +00:00
|
|
|
|
powterm::= [
|
|
|
|
|
\family typewriter
|
|
|
|
|
-
|
|
|
|
|
\family default
|
|
|
|
|
]
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
|
|
|
|
primary
|
|
|
|
|
\emph default
|
|
|
|
|
{
|
|
|
|
|
\family typewriter
|
|
|
|
|
‸
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
\emph on
|
|
|
|
|
primary
|
|
|
|
|
\emph default
|
|
|
|
|
}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
mathterm::=
|
|
|
|
|
\emph on
|
|
|
|
|
powterm
|
|
|
|
|
\emph default
|
|
|
|
|
{
|
|
|
|
|
\family typewriter
|
|
|
|
|
/
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
*
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
%
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
\emph on
|
|
|
|
|
powterm
|
|
|
|
|
\emph default
|
|
|
|
|
}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
factor::=
|
|
|
|
|
\emph on
|
|
|
|
|
mathterm
|
|
|
|
|
\emph default
|
|
|
|
|
{
|
|
|
|
|
\family typewriter
|
|
|
|
|
+
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
-
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
\emph on
|
|
|
|
|
mathterm
|
|
|
|
|
\emph default
|
|
|
|
|
}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
2019-08-27 06:56:19 +00:00
|
|
|
|
relterm::=
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\emph on
|
|
|
|
|
factor
|
|
|
|
|
\emph default
|
|
|
|
|
{
|
|
|
|
|
\family typewriter
|
|
|
|
|
<
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
<=
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
>=
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
>
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
==
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
|
\family typewriter
|
|
|
|
|
!=
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
\emph on
|
|
|
|
|
factor
|
|
|
|
|
\emph default
|
|
|
|
|
}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-08-27 06:56:19 +00:00
|
|
|
|
\begin_layout Description
|
|
|
|
|
conjterm::=
|
|
|
|
|
\emph on
|
|
|
|
|
relterm
|
|
|
|
|
\family sans
|
|
|
|
|
|
|
|
|
|
\emph default
|
|
|
|
|
{
|
|
|
|
|
\family typewriter
|
|
|
|
|
and
|
|
|
|
|
\family sans
|
|
|
|
|
|
|
|
|
|
\family default
|
|
|
|
|
\emph on
|
|
|
|
|
relterm
|
|
|
|
|
\family sans
|
|
|
|
|
|
|
|
|
|
\emph default
|
|
|
|
|
}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Description
|
|
|
|
|
term::=
|
|
|
|
|
\emph on
|
|
|
|
|
conjterm
|
|
|
|
|
\family sans
|
|
|
|
|
|
|
|
|
|
\emph default
|
|
|
|
|
{
|
|
|
|
|
\family typewriter
|
|
|
|
|
or
|
|
|
|
|
\family sans
|
|
|
|
|
|
|
|
|
|
\family default
|
|
|
|
|
\emph on
|
|
|
|
|
conjterm
|
|
|
|
|
\family sans
|
|
|
|
|
|
|
|
|
|
\emph default
|
|
|
|
|
}
|
|
|
|
|
\end_layout
|
|
|
|
|
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\begin_layout Subsection
|
|
|
|
|
Implementation notes
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
Note that the implementation of a function can tell the difference between
|
|
|
|
|
whether it is called with parentheses and no arguments, like
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
func()
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
, or called without parentheses at all, like
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
func
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
– in the former case it receives an argument count of 0, and in the latter
|
|
|
|
|
an argument count of -1.
|
|
|
|
|
So the same symbol can have different semantics depending on which way
|
2019-08-26 06:19:34 +00:00
|
|
|
|
it is called.
|
|
|
|
|
In most cases such a difference is counterintuitive, but it seems to work
|
|
|
|
|
fairly well for the directional
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2019-08-26 06:19:34 +00:00
|
|
|
|
constants,
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2019-08-26 06:19:34 +00:00
|
|
|
|
i.e.
|
|
|
|
|
bare
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2019-08-26 06:19:34 +00:00
|
|
|
|
left
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
is the displacement &(-1,0,0), whereas left() is the location one to the
|
|
|
|
|
left.
|
|
|
|
|
The no-parentheses form is also useful for constants like
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2019-08-26 06:19:34 +00:00
|
|
|
|
e
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
and
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
tau
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
, and it is also used, for example, to allow the names of the functions
|
|
|
|
|
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
floor
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
,
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
round
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2019-08-26 06:19:34 +00:00
|
|
|
|
, etc.
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
to be used as keywords for the int() function.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-08-27 06:56:19 +00:00
|
|
|
|
\begin_layout Standard
|
|
|
|
|
Note also that some functions are actually implemented as
|
|
|
|
|
\emph on
|
|
|
|
|
macros
|
|
|
|
|
\emph default
|
|
|
|
|
, which are just like functions but receive their arguments unevaluated.
|
|
|
|
|
The difference is meant to be transparent to usage of the function, so
|
|
|
|
|
it is not mentioned elsewhere in this documentation.
|
|
|
|
|
However, the macro facility is necessary when the function would need to
|
|
|
|
|
control the evaluation of the arguments, as in the short-circuiting logical
|
|
|
|
|
operations, or takes an expression as an argument, say to evaluate it on
|
|
|
|
|
other cells.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_layout Section
|
|
|
|
|
Frequently Asked Questions
|
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-09-09 16:18:00 +00:00
|
|
|
|
\begin_layout Subsection
|
|
|
|
|
Can I see some examples of teapot in action?
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
Sure, the standard distribution comes with an examples folder containing
|
|
|
|
|
several spreadsheet files illustrating some of
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
's features.
|
|
|
|
|
Each sheet is accompanied by a README file with a brief explanation of
|
|
|
|
|
what is going on in the file.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\begin_layout Subsection
|
|
|
|
|
Why is 1.0 unequal 1.0?
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
If your machine uses binary floating point arithmetic, and chances are that
|
|
|
|
|
it does, you may eventually find yourself in the following situation:
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Quote
|
2023-05-02 02:23:57 +00:00
|
|
|
|
|
|
|
|
|
\family sans
|
2019-07-22 20:32:33 +00:00
|
|
|
|
0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2023-05-02 02:23:57 +00:00
|
|
|
|
You expect to see
|
|
|
|
|
\family sans
|
|
|
|
|
1.0
|
|
|
|
|
\family default
|
|
|
|
|
as result, and indeed that is what you get.
|
|
|
|
|
Now you compare this result to the constant
|
|
|
|
|
\family sans
|
|
|
|
|
1.0
|
|
|
|
|
\family default
|
|
|
|
|
, but surprisingly for many users, the result is
|
|
|
|
|
\family sans
|
|
|
|
|
false
|
|
|
|
|
\family default
|
|
|
|
|
.
|
2019-09-09 14:33:41 +00:00
|
|
|
|
Appearantly, 1.0 is unequal 1.0 for
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2019-09-09 14:33:41 +00:00
|
|
|
|
This is not a bug in
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
, in fact it is not a bug at all.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
The problem is, that 0.1 (1.0/10.0) does not have an exact representation
|
|
|
|
|
in binary floating point arithmetic, similar to how 1.0/3.0 does not have
|
|
|
|
|
an exact representation in decimal arithmetic (or binary, for that matter).
|
|
|
|
|
As such, a value very close to 0.1 is used, but when displaying it, it will
|
|
|
|
|
be rounded to 0.1.
|
|
|
|
|
The result is obvious, adding this number which is a little different from
|
|
|
|
|
0.1 ten times leads to a result very close to but not quite 1.0.
|
|
|
|
|
Since it is so close, displaying it rounded to only a few digits precision
|
|
|
|
|
shows 1.0.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2019-09-09 14:33:41 +00:00
|
|
|
|
To solve the comparison problem,
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
has the operator
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\family typewriter
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
~=
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\family default
|
|
|
|
|
(in contrast to the operator ==), which compares two floating point values
|
|
|
|
|
apart from the last significant bit.
|
|
|
|
|
Use this operator to compare the two values from above and the result will
|
|
|
|
|
be 1, meaning they are about equal.
|
|
|
|
|
Don't assume that a number which can be expressed with a finite number
|
|
|
|
|
of decimal digits will be represented exactly in binary floating point
|
|
|
|
|
arithmetic.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Subsection
|
|
|
|
|
How do I hide intermediate results?
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2023-04-30 16:19:12 +00:00
|
|
|
|
If you used flat, two-dimensional spreadsheets before, you are probably
|
2019-07-22 20:32:33 +00:00
|
|
|
|
used to hidden cells which contain intermediate results, global constants,
|
|
|
|
|
scratch areas and the like.
|
2019-09-09 14:33:41 +00:00
|
|
|
|
|
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
has no way to hide cells, but you have three dimensions.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
Just use one or more layers for such cells and give each cell a label in
|
|
|
|
|
order to reference and find it easily.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
2023-05-02 02:23:57 +00:00
|
|
|
|
\begin_layout Standard
|
|
|
|
|
If you're really wedded to cells that calculate but don't appear on the
|
|
|
|
|
display, you can use such hacks as
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
shadowing
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
a cell with computations in it (see subsection
|
|
|
|
|
\begin_inset CommandInset ref
|
|
|
|
|
LatexCommand ref
|
|
|
|
|
reference "subsec:Shadowed"
|
|
|
|
|
plural "false"
|
|
|
|
|
caps "false"
|
|
|
|
|
noprefix "false"
|
|
|
|
|
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2023-07-26 05:20:43 +00:00
|
|
|
|
) or using the hard-coded
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
invisible
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
color number 254, etc.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
2023-05-02 02:23:57 +00:00
|
|
|
|
\begin_layout Subsection
|
|
|
|
|
Can you share a trick for multi-way dispatch?
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2023-05-02 02:23:57 +00:00
|
|
|
|
By now,
|
2019-09-09 14:33:41 +00:00
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
2023-05-02 02:23:57 +00:00
|
|
|
|
has a conventional
|
|
|
|
|
\family sans
|
|
|
|
|
if()
|
|
|
|
|
\family default
|
|
|
|
|
operator for convenience when you want to choose between two alternatives
|
|
|
|
|
based on a single Boolean condition.
|
|
|
|
|
However, a methodology used to provide conditional behavior before
|
|
|
|
|
\family sans
|
|
|
|
|
if()
|
|
|
|
|
\family default
|
|
|
|
|
was implemented is still worth knowing about, because it can actually provide
|
|
|
|
|
more flexibility and power, particularly in providing for multi-way dispatch.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
For example, suppose that you want to produce one of the strings
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\family typewriter
|
2023-05-02 02:23:57 +00:00
|
|
|
|
NONE
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\family default
|
2023-05-02 02:23:57 +00:00
|
|
|
|
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
,
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\family typewriter
|
2023-05-02 02:23:57 +00:00
|
|
|
|
ONE
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\family default
|
2023-05-02 02:23:57 +00:00
|
|
|
|
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
, or
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\family typewriter
|
2023-05-02 02:23:57 +00:00
|
|
|
|
MANY
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\family default
|
|
|
|
|
|
2023-05-02 02:23:57 +00:00
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
2019-07-22 20:32:33 +00:00
|
|
|
|
|
2023-05-02 02:23:57 +00:00
|
|
|
|
depending on whether the cell labeled
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\family typewriter
|
2023-05-02 02:23:57 +00:00
|
|
|
|
INPUT
|
|
|
|
|
\family default
|
|
|
|
|
has a value that is zero, one, or greater than one, respectively.
|
|
|
|
|
Here's one convenient way to arrange that.
|
|
|
|
|
In some scratch area, create a cell labeled
|
|
|
|
|
\family typewriter
|
|
|
|
|
OUTPUT
|
|
|
|
|
\family default
|
|
|
|
|
that contains the string
|
|
|
|
|
\family typewriter
|
|
|
|
|
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
NONE
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\family default
|
2023-05-02 02:23:57 +00:00
|
|
|
|
with the two successive cells to the right containing
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\family typewriter
|
2023-05-02 02:23:57 +00:00
|
|
|
|
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
ONE
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\family default
|
2023-05-02 02:23:57 +00:00
|
|
|
|
and
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\family typewriter
|
2023-05-02 02:23:57 +00:00
|
|
|
|
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
MANY
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\family default
|
|
|
|
|
.
|
2023-05-02 02:23:57 +00:00
|
|
|
|
Then the expression
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Quote
|
|
|
|
|
|
|
|
|
|
\family sans
|
|
|
|
|
@(OUTPUT, min(@(INPUT), 2))
|
2019-09-09 14:33:41 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2023-05-02 02:23:57 +00:00
|
|
|
|
does the trick: the (optional) second argument of the fetch function
|
2019-09-09 14:33:41 +00:00
|
|
|
|
\family sans
|
2023-05-02 02:23:57 +00:00
|
|
|
|
@()
|
2019-09-09 14:33:41 +00:00
|
|
|
|
\family default
|
2023-05-02 02:23:57 +00:00
|
|
|
|
adds to the X-coordinate of the
|
|
|
|
|
\family typewriter
|
|
|
|
|
OUTPUT
|
|
|
|
|
\family default
|
|
|
|
|
location, and the
|
2019-09-09 14:33:41 +00:00
|
|
|
|
\family sans
|
2023-05-02 02:23:57 +00:00
|
|
|
|
min()
|
2019-09-09 14:33:41 +00:00
|
|
|
|
\family default
|
2023-05-02 02:23:57 +00:00
|
|
|
|
makes sure the amount being added to that coordinate is no more than two.
|
|
|
|
|
(Note that for this to work exactly as shown assumes that the value in
|
|
|
|
|
the
|
|
|
|
|
\family typewriter
|
|
|
|
|
INPUT
|
|
|
|
|
\family default
|
|
|
|
|
cell is always a non-negative integer.
|
|
|
|
|
You should relatively easily be able to enhance the given expression to
|
|
|
|
|
handle other possibilities for
|
|
|
|
|
\family typewriter
|
|
|
|
|
INPUT
|
|
|
|
|
\family default
|
|
|
|
|
, for example if it might be negative or have a floating-point value.) If
|
|
|
|
|
you want to use Boolean conditions on input variables in a similar way,
|
|
|
|
|
you can convert them to integers with
|
2019-09-09 14:33:41 +00:00
|
|
|
|
\family sans
|
2023-05-02 02:23:57 +00:00
|
|
|
|
int()
|
|
|
|
|
\family default
|
|
|
|
|
.
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-07-30 19:07:54 +00:00
|
|
|
|
\begin_layout Subsection
|
|
|
|
|
But my references don't do the right thing when I move or copy them!
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
If you are used to other spreadsheets, you have probably noticed that references
|
|
|
|
|
like
|
|
|
|
|
\family sans
|
|
|
|
|
@(0,1,0)
|
|
|
|
|
\family default
|
|
|
|
|
(for the start of the second row) or
|
|
|
|
|
\family sans
|
|
|
|
|
@(MYDATA)
|
|
|
|
|
\family default
|
|
|
|
|
(for a location) are
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
absolute
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
– they always refer to the same location no matter where in the spreadsheet
|
|
|
|
|
they occur.
|
|
|
|
|
And of course sometimes it is convenient, for example when making a column
|
|
|
|
|
of consecutive numbers, to refer to nearby cells in a relative manner,
|
|
|
|
|
either with say
|
|
|
|
|
\family sans
|
|
|
|
|
@(x(),y()-1,z())+1
|
|
|
|
|
\family default
|
|
|
|
|
or
|
|
|
|
|
\family sans
|
|
|
|
|
@(&()+&(0,-1,0))+1
|
|
|
|
|
\family default
|
2019-09-09 14:33:41 +00:00
|
|
|
|
or
|
2019-07-30 19:07:54 +00:00
|
|
|
|
\family sans
|
|
|
|
|
R(,-1)+1
|
|
|
|
|
\family default
|
2023-05-02 02:23:57 +00:00
|
|
|
|
or
|
|
|
|
|
\family sans
|
|
|
|
|
R(up)+1
|
|
|
|
|
\family default
|
|
|
|
|
or
|
|
|
|
|
\family sans
|
|
|
|
|
up()+1
|
|
|
|
|
\family default
|
|
|
|
|
to add one to the value of the cell which is up one position from the current
|
|
|
|
|
cell (all of these expressions work).
|
2019-09-09 14:33:41 +00:00
|
|
|
|
Then you can fill that expression downwards and get your column of consecutive
|
2019-07-30 19:07:54 +00:00
|
|
|
|
numbers.
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
|
|
|
|
But these sorts of relative expressions only keep working if the cells move
|
|
|
|
|
together with the cells they refer to.
|
|
|
|
|
If for example you have a row of cells that are all referring to the row
|
|
|
|
|
above with a relative reference (like
|
|
|
|
|
\family sans
|
|
|
|
|
R(,-1)
|
|
|
|
|
\family default
|
2023-05-02 02:23:57 +00:00
|
|
|
|
) and you insert another row in between them, your references will all be
|
2019-07-30 19:07:54 +00:00
|
|
|
|
messed up.
|
2023-05-02 02:23:57 +00:00
|
|
|
|
Thus, there is value to
|
2019-07-30 19:07:54 +00:00
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
Excel-style
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
references that can be used to fill and which also can move around while
|
|
|
|
|
still just
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
referring to what you want.
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
2023-05-02 02:23:57 +00:00
|
|
|
|
Note that labeled cells handle some aspects of this desired behavior, because
|
|
|
|
|
the label goes with the cell when it is moved in the spreadsheet
|
2019-07-30 19:07:54 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2023-05-02 02:23:57 +00:00
|
|
|
|
However, to provide for the cases when just labels by themselves are not
|
|
|
|
|
enough,
|
2019-09-09 14:33:41 +00:00
|
|
|
|
\noun on
|
|
|
|
|
teapot
|
|
|
|
|
\noun default
|
|
|
|
|
has a function
|
2019-07-30 19:07:54 +00:00
|
|
|
|
\family sans
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
\series bold
|
|
|
|
|
X
|
|
|
|
|
\series default
|
|
|
|
|
(SRC, REF)
|
2019-07-30 19:07:54 +00:00
|
|
|
|
\family default
|
|
|
|
|
to retrieve the value of the cell labeled
|
|
|
|
|
\family sans
|
|
|
|
|
SRC
|
|
|
|
|
\family default
|
|
|
|
|
|
|
|
|
|
\bar under
|
|
|
|
|
from
|
|
|
|
|
\bar default
|
|
|
|
|
the cell labeled
|
|
|
|
|
\family sans
|
|
|
|
|
REF
|
|
|
|
|
\family default
|
|
|
|
|
.
|
|
|
|
|
If the so-labeled cells move around (either the source or the reference)
|
|
|
|
|
it will still work.
|
|
|
|
|
This is not particularly useful in and of itself; what makes it useful
|
|
|
|
|
is that from a cell other than
|
|
|
|
|
\family sans
|
|
|
|
|
REF
|
|
|
|
|
\family default
|
|
|
|
|
, it gives you the value of the cell that stands in the same relation to
|
|
|
|
|
|
|
|
|
|
\family sans
|
|
|
|
|
SRC
|
|
|
|
|
\family default
|
|
|
|
|
as that cell stands to
|
|
|
|
|
\family sans
|
|
|
|
|
REF
|
|
|
|
|
\family default
|
|
|
|
|
.
|
|
|
|
|
So in the cell to the right of
|
|
|
|
|
\family sans
|
|
|
|
|
REF
|
|
|
|
|
\family default
|
|
|
|
|
, it will give you the value of the cell to the right of
|
|
|
|
|
\family sans
|
|
|
|
|
SRC
|
|
|
|
|
\family default
|
|
|
|
|
; in the cell below, it gives you the cell below
|
|
|
|
|
\family sans
|
|
|
|
|
SRC
|
|
|
|
|
\family default
|
|
|
|
|
, etc.
|
|
|
|
|
Now you can fill a block of cells around
|
|
|
|
|
\family sans
|
|
|
|
|
REF
|
|
|
|
|
\family default
|
|
|
|
|
with formulas contaning
|
|
|
|
|
\family sans
|
|
|
|
|
X(SRC,REF)
|
|
|
|
|
\family default
|
|
|
|
|
and they will refer to the analogous block of cells around
|
|
|
|
|
\family sans
|
|
|
|
|
SRC
|
|
|
|
|
\family default
|
|
|
|
|
.
|
|
|
|
|
|
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
Streamline internals of teapot
The primary change is to add a “funcall” token, so that an entire expression
can be encapsulated as a single token. This change is used to allow a cell to
include simply a selection of appropriate semantic tokens. I.e., the content
and iterative content are now each a single token like the value and the
result value. Token vectors are used only as intermediate results in scanning
and parsing.
Not this means the cells are now in effect storing parse trees, so
computation should be slightly faster and future extensions (like #56) should
be facilitated.
This commit also takes the opportunity while internals are being altered to
add another token to a cell for future use for computed attributes, cf #22,
and to change the internal numerical values from double and ints to long
doubles and long longs. However, the change attempts to encapsulate that
choice so it would be easy to change back or change to another representation.
Note that these changes break savexdr(), as the internal binary format of
a cell is now different. Rather than reimplement it, it is deprecated as
the world does not need another binary spreadsheet format. Hence, the
ascii format for teapot spreadsheets becomes the primary file format.
Loading of old xdr files is still supported for backward compatibility.
Closes #59.
Also along the way, various other slight fixes and enhancements crept in,
a partial but probably not exhaustive list of which follows:
Fixes #31.
Further revisions and improvements to documentation.
Make the approximate comparison of floating point values scale more
accurately with the size of the doubles being compared.
Further extensions of absolute and relative cell addressing.
Addition of (circle constant) tau function/constant.
Modified string conversion to simply use internal printing routines, and
to take "scientific" and "decimal" keywords.
Allowed n() function to take a list of values, or just a single location
defaulting to the current location.
Added floor, ceil, trunc, and round functions, and allowed them to be
keywords controlling the int() integer conversion function as well.
Allowed substr() to drop its last argument to go to the end of the string.
Provided an enum of built-in functions to preserve legacy function
identifiers, allowing the large table inside func.c to be reorganized
in a clearer fashion.
Added additional annotation of properties of the built-in functions,
including precedence.
All operators are now also accessible as built-in functions.
Made precedence of unary - lower than ^ to match python.
Avoided inadvertently using FLTK @symbol abbreviations for formulas with
"@" in them.
2019-08-23 19:12:06 +00:00
|
|
|
|
Sometimes you want to make this kind of reference and fix one of the coordinates
|
2019-07-30 19:07:54 +00:00
|
|
|
|
but not the others;
|
|
|
|
|
\family sans
|
|
|
|
|
X()
|
|
|
|
|
\family default
|
|
|
|
|
has optional flags for this, as well, so that
|
|
|
|
|
\family sans
|
2019-09-09 14:33:41 +00:00
|
|
|
|
X(SRC,REF,,,fix)
|
2019-07-30 19:07:54 +00:00
|
|
|
|
\family default
|
|
|
|
|
will always be on the same layer as
|
|
|
|
|
\family sans
|
|
|
|
|
SRC
|
|
|
|
|
\family default
|
|
|
|
|
regardless of what layer it is called from or what layer
|
|
|
|
|
\family sans
|
|
|
|
|
REF
|
|
|
|
|
\family default
|
|
|
|
|
is on.
|
2019-09-09 14:33:41 +00:00
|
|
|
|
(This flag roughly corresponds to supplying the
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
$
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
in an Excel cell reference.) Thus
|
2019-07-30 19:07:54 +00:00
|
|
|
|
\family sans
|
2019-09-09 14:33:41 +00:00
|
|
|
|
X(SRC,REF,fix,fix,fix)
|
2019-07-30 19:07:54 +00:00
|
|
|
|
\family default
|
|
|
|
|
is just
|
|
|
|
|
\family sans
|
|
|
|
|
@(SRC)
|
|
|
|
|
\family default
|
2023-05-02 02:23:57 +00:00
|
|
|
|
, although of course if that's all you want, there's no need to use
|
|
|
|
|
\family sans
|
|
|
|
|
X()
|
|
|
|
|
\family default
|
|
|
|
|
.
|
2019-07-30 19:07:54 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
|
|
|
|
\begin_layout Standard
|
2019-09-09 14:33:41 +00:00
|
|
|
|
You might ask as a follow-up question: Isn't
|
2019-07-30 19:07:54 +00:00
|
|
|
|
\family sans
|
|
|
|
|
X(SRC, REF)
|
|
|
|
|
\family default
|
|
|
|
|
much more cumbersome than just referring to cells by coordinate and then
|
2019-09-09 14:33:41 +00:00
|
|
|
|
letting Excel
|
|
|
|
|
\begin_inset Quotes eld
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
do the right thing
|
|
|
|
|
\begin_inset Quotes erd
|
|
|
|
|
\end_inset
|
|
|
|
|
|
|
|
|
|
as you copy and move either that formula or the referred-to data? The response
|
2023-05-02 02:23:57 +00:00
|
|
|
|
to this criticism is that in a typical spreadsheet, there are only a small
|
|
|
|
|
number of fundamental references, and all other references derive from
|
|
|
|
|
them in a natural way.
|
2019-07-30 19:07:54 +00:00
|
|
|
|
So you generally only need a few labels, and by taking just a little extra
|
|
|
|
|
time to apply those labels and refer to them in initial formulas, you are
|
|
|
|
|
making the semantics of your references much clearer and in essence documenting
|
|
|
|
|
them within your spreadsheet.
|
2023-05-02 02:23:57 +00:00
|
|
|
|
This modicum of extra effort will be repaid by a spreadsheet that is easier
|
|
|
|
|
to use, understand, maintain, and update.
|
2019-07-30 19:07:54 +00:00
|
|
|
|
\end_layout
|
|
|
|
|
|
2019-07-22 20:32:33 +00:00
|
|
|
|
\end_body
|
|
|
|
|
\end_document
|