diff options
author | dos-reis <gdr@axiomatics.org> | 2008-03-07 15:19:01 +0000 |
---|---|---|
committer | dos-reis <gdr@axiomatics.org> | 2008-03-07 15:19:01 +0000 |
commit | 8531f4c74274b8aa99168d220738227557a9c418 (patch) | |
tree | c50b77870e432317be8f99c248e1339f74b51661 /src/hyper/parse-types.pamphlet | |
parent | 33949ff2e6e5b5abe8d22c5604f42a6c9371079a (diff) | |
download | open-axiom-8531f4c74274b8aa99168d220738227557a9c418.tar.gz |
* hyper/: De-pamphletize.
Diffstat (limited to 'src/hyper/parse-types.pamphlet')
-rw-r--r-- | src/hyper/parse-types.pamphlet | 821 |
1 files changed, 0 insertions, 821 deletions
diff --git a/src/hyper/parse-types.pamphlet b/src/hyper/parse-types.pamphlet deleted file mode 100644 index 8f3902ce..00000000 --- a/src/hyper/parse-types.pamphlet +++ /dev/null @@ -1,821 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/parse-types} -\author{The Axiom Team} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{parse-types.h} -<<parse-types.h>>= -<<license>> -#ifndef _PARSE_TYPES_H_ -#define _PARSE_TYPES_H_ 1 - -#include "hyper.h" - -extern boolean gInButton; -extern boolean gInIf; -extern boolean gInItems; -extern boolean gInOptional; - - -#endif -@ -\section{parse-types.c} -<<parse-types.c>>= -/****************************************************************************** - * - * parse-types.h: HyperDoc parsing routines for node types. - * - * Copyright The Numerical Algorithms Group Limited 1991, 1992, 1993. - * - ****************************************************************************/ -#define _PARSE_TYPES_C -#include "axiom-c-macros.h" -#include "useproto.h" -#include "debug.h" - -#include "parse.h" -#include "parse-aux.h" -#include "parse-types.h" -#include "cond.h" -#include "lex.h" -#include "mem.h" -#include "extent.h" -#include "hterror.h" - -#include "all_hyper_proto.H1" - -boolean gInButton = FALSE; -boolean gInIf = FALSE; -boolean gInItems = FALSE; -boolean gInOptional = FALSE; - -void -parse_ifcond(void) -{ - TextNode *ifnode = curr_node; - TextNode *endif; - TextNode *condnode; - - /* - * parse a conditional. At first I am just going to parse if - * <hypertext> fi - */ - if (gInIf) { - curr_node->type = Noop; - fprintf(stderr, "\\if found within \\if \n"); - longjmp(jmpbuf, 1); - fprintf(stderr, "Longjump failed, Exiting\n"); - exit(-1); - } - gInIf++; - curr_node->type = Ifcond; - curr_node->space = token.id[-1]; - curr_node->data.ifnode = alloc_ifnode(); - /* Now get the cond node I hope */ - - condnode = curr_node->data.ifnode->cond = alloc_node(); - curr_node = condnode; - parse_condnode(); - - endif = alloc_node(); - endif->type = Endif; - ifnode->data.ifnode->thennode = alloc_node(); - curr_node = ifnode->data.ifnode->thennode; - parse_HyperDoc(); - if (token.type == Fi) { - curr_node->type = Fi; - curr_node->next = endif; - ifnode->data.ifnode->elsenode = endif; - } - else if (token.type == Else) { - /* first finish up the then part */ - curr_node->type = Fi; - curr_node->next = endif; - /* the go and parse the else part */ - ifnode->data.ifnode->elsenode = alloc_node(); - curr_node = ifnode->data.ifnode->elsenode; - parse_HyperDoc(); - if (token.type != Fi) { - token_name(token.type); - curr_node->type = Noop; - fprintf(stderr, "Expected a \\fi not a %s", ebuffer); - longjmp(jmpbuf, 1); - fprintf(stderr, "Longjump failed, Exiting\n"); - exit(-1); - } - curr_node->type = Fi; - curr_node->next = endif; - } - else { - curr_node->type = Noop; - token_name(token.type); - fprintf(stderr, "Expected a \\fi not a %s", ebuffer); - longjmp(jmpbuf, 1); - fprintf(stderr, "Longjump failed, Exiting\n"); - exit(-1); - } - ifnode->next = ifnode->data.ifnode->thennode; - ifnode->width = -1; /* A flag for compute if extents */ - curr_node = endif; - gInIf--; -} - -static void -parse_condnode(void) -{ - get_token(); - - switch (token.type) { - case Cond: - curr_node->type = Cond; - curr_node->data.text = alloc_string(token.id); - break; - case Haslisp: - case Hasreturn: - case Lastwindow: - case Hasup: - curr_node->type = token.type; - break; - case Boxcond: - curr_node->type = Boxcond; - curr_node->data.text = alloc_string(token.id); - break; - case Hasreturnto: - parse_hasreturnto(); - break; - default: - { - char eb[128]; - token_name(token.type); - sprintf(eb, "Unexpected Token %s\n", eb); - htperror(eb, HTCONDNODE); - } - break; - } -} - -static void -parse_hasreturnto(void) -{ - TextNode *hrt = curr_node, *arg_node = alloc_node(); - - curr_node->type = Hasreturnto; - curr_node = arg_node; - get_expected_token(Lbrace); - parse_HyperDoc(); - curr_node->type = Endarg; - hrt->data.node = arg_node; - curr_node = hrt; -} - -void -parse_newcond(void) -{ - char label[256]; - - get_expected_token(Lbrace); - get_expected_token(Unkeyword); - strcpy(label, token.id); - get_expected_token(Rbrace); - insert_cond(label, "0"); - curr_node->type = Noop; -} - -void -parse_setcond(void) -{ - char label[256], cond[256]; - - get_expected_token(Lbrace); - get_expected_token(Cond); - strcpy(label, token.id); - get_expected_token(Rbrace); - get_expected_token(Lbrace); - get_expected_token(Word); - strcpy(cond, token.id); - get_expected_token(Rbrace); - change_cond(label, cond); - curr_node->type = Noop; -} - -void -parse_begin_items(void) -{ - TextNode *bi = curr_node; - - /* - * This procedure parses a begin item. It sets the current - * node and sees if there is an optional argument for the itemspace - */ - - bi->type = token.type; - get_token(); - if (token.type == Lsquarebrace) { - bi->data.node = alloc_node(); - curr_node = bi->data.node; - gInOptional++; - parse_HyperDoc(); - gInOptional--; - curr_node->type = Enddescription; - if (token.type != Rsquarebrace) { - fprintf(stderr, "(HyperDoc) Optional arguments must end with ].\n"); - print_next_ten_tokens(); - print_page_and_filename(); - jump(); - } - curr_node = bi; - } - else - unget_token(); - gInItems++; -} - -void -parse_item(void) -{ - if (!gInItems) { - fprintf(stderr, "\\item found outside an items environment\n"); - print_page_and_filename(); - print_next_ten_tokens(); - jump(); - } - curr_node->type = Item; - get_token(); - if (token.type == Lsquarebrace) { - /* I should parse the optional argument */ - curr_node->next = alloc_node(); - curr_node = curr_node->next; - curr_node->type = Description; - curr_node->next = alloc_node(); - curr_node = curr_node->next; - gInOptional++; - parse_HyperDoc(); - gInOptional--; - curr_node->type = Enddescription; - if (token.type != Rsquarebrace) { - fprintf(stderr, "(HyperDoc) Optional arguments must end with ].\n"); - print_next_ten_tokens(); - print_page_and_filename(); - jump(); - } - } - else { - unget_token(); - } -} - -void -parse_mitem(void) -{ - if (!gInItems) { - fprintf(stderr, "\\mitem found outside an items environment\n"); - print_page_and_filename(); - print_next_ten_tokens(); - jump(); - } - curr_node->type = Mitem; -} - -char *vbuf = NULL; -int vbuf_size = 0; - -#define VbufSlop 10 -#define resizeVbuf()\ - if (size == vbuf_size) { \ - vbuf = resizeBuffer(size + VbufSlop, vbuf, &vbuf_size); \ - vb = vbuf + size; \ - } - -#define new_verb_node() \ - resizeVbuf(); \ - *vb = '\0'; \ - curr_node->data.text = alloc_string(vbuf); \ - curr_node->next = alloc_node(); \ - curr_node = curr_node->next; \ - curr_node->type = Newline; \ - curr_node->next = alloc_node(); \ - curr_node = curr_node->next; \ - curr_node->type = type; \ - if (*end_string == '\n') es = end_string+1; \ - else es = end_string; \ - size = 0; \ - vb = vbuf; - -void -parse_verbatim(int type) -{ - int size = 0, c; - char *end_string, *vb = vbuf, *es; - - curr_node->type = type; - if (token.id[-1]) - curr_node->space = 1; - if (type == Spadsrctxt) { - es = end_string = "\n\\end{spadsrc}"; - } - else if (type == Math) - es = end_string = "$"; - else - es = end_string = "\\end{verbatim}"; - while ((c = get_char()) != EOF) { - resizeVbuf(); - size++; - if (c == '\n') { - new_verb_node(); - continue; - } - *vb++ = c; - if (*es++ != c) - es = end_string; - if (!*es) - break; - } - if (c == EOF) { - fprintf(stderr, "parse_verbatim: Unexpected EOF found\n"); - longjmp(jmpbuf, 1); - } - resizeVbuf(); - if (*end_string == '\n') - es = end_string + 1; - else - es = end_string; - vbuf[size - strlen(es)] = '\0'; - if (*vbuf) { - curr_node->data.text = alloc_string(vbuf); - curr_node->next = alloc_node(); - curr_node = curr_node->next; - } - if (type == Spadsrctxt) - curr_node->type = Endspadsrc; - else if (type == Math) - curr_node->type = Endmath; - else - curr_node->type = Endverbatim; -} - -void -parse_input_pix(void) -{ - TextNode *pixnode; - char *filename; - - pixnode = curr_node; - pixnode->type = token.type; - pixnode->space = token.id[-1]; - pixnode->width = -1; - get_expected_token(Lbrace); - filename = get_input_string(); - pixnode->data.text = alloc_string(filename); - curr_node = pixnode; - if (pixnode->type == Inputimage) { - char f[256]; - char *p; - - if ((gXDisplay && DisplayPlanes(gXDisplay, gXScreenNumber) == 1) || gSwitch_to_mono ==1) { - pixnode->type = Inputbitmap; - strcpy(f, pixnode->data.text); - strcat(f, ".bm"); - p=pixnode->data.text; - pixnode->data.text = alloc_string(f); - free(p); - } - else { - pixnode->type = Inputpixmap; - strcpy(f, pixnode->data.text); -#ifdef OLD - strcat(f, ".pm"); -#endif - strcat(f, ".xpm.Z"); - p=pixnode->data.text; - pixnode->data.text = alloc_string(f); - free(p); - } - } -} - -void -parse_centerline(void) -{ - curr_node->type = token.type; - curr_node->space = token.id[-1]; - curr_node->width = -1; - curr_node->next = alloc_node(); - curr_node = curr_node->next; - get_expected_token(Lbrace); - parse_HyperDoc(); - if (token.type != Rbrace) { - curr_node->type = Noop; - fprintf(stderr, "(HyperdDoc) \\centerline was expecting a }\n"); - print_page_and_filename(); - print_next_ten_tokens(); - longjmp(jmpbuf, 1); - } - curr_node->type = Endcenter; -} - -void -parse_command(void) -{ - TextNode *link_node, *save_node, *arg_node; - - gInButton++; - if (gParserMode == SimpleMode) { - curr_node->type = Noop; - fprintf(stderr, "Parser Error token %s unexpected\n", - token_table[token.type]); - longjmp(jmpbuf, 1); - } - gStringValueOk = 1; - - /* set the values for the current node */ - curr_node->type = token.type; - curr_node->space = token.id[-1]; - - /* now parse for the label */ - link_node = curr_node; - curr_node->next = alloc_node(); - curr_node = curr_node->next; - get_expected_token(Lbrace); - parse_HyperDoc(); - curr_node->type = Endbutton; - save_node = curr_node; - arg_node = alloc_node(); - curr_node = arg_node; - get_expected_token(Lbrace); - parse_HyperDoc(); - curr_node->type = Endarg; - link_node->link = make_link_window(arg_node, link_node->type, 0); - gStringValueOk = 0; - curr_node = save_node; - gInButton--; -} - -void -parse_button(void) -{ - TextNode *link_node, *save_node; - - gInButton++; - if (gParserMode == SimpleMode) { - curr_node->type = Noop; - fprintf(stderr, "Parser Error token %s unexpected\n", - token_table[token.type]); - longjmp(jmpbuf, 1); - } - /* fill the node */ - curr_node->type = token.type; - curr_node->space = token.id[-1]; - - /* the save the current node for creating the link and stuff */ - link_node = curr_node; - - /* then parse the label */ - curr_node->next = alloc_node(); - curr_node = curr_node->next; - get_expected_token(Lbrace); - parse_HyperDoc(); - curr_node->type = Endbutton; - - /* now try to get the argument node */ - save_node = curr_node; - get_expected_token(Lbrace); - save_node->data.node = alloc_node(); - curr_node = save_node->data.node; - parse_HyperDoc(); - curr_node->type = Endarg; - - /* - * buffer[0] = '\0'; print_to_string(arg_node, buffer + 1); - */ - link_node->link = - make_link_window(save_node->data.node, link_node->type, 0); - curr_node = save_node; - gInButton--; -} - -extern int example_number; - -void -parse_spadcommand(TextNode *spad_node) -{ - /*TextNode *node = NULL;*/ - - example_number++; - gInButton++; - spad_node->type = token.type; - spad_node->space = token.id[-1]; - get_expected_token(Lbrace); - cur_spadcom = curr_node; - - spad_node->next = alloc_node(); - curr_node = spad_node->next; - parse_HyperDoc(); - curr_node->type = Endspadcommand; - cur_spadcom = NULL; - spad_node->link = make_link_window(spad_node->next, spad_node->type, 1); - gInButton--; -} - -void -parse_spadsrc(TextNode *spad_node) -{ - char buf[512], *c = buf; - int ch, start_opts = 0; - /*TextNode *node = NULL;*/ - - example_number++; - gInButton++; - gInSpadsrc++; - spad_node->type = Spadsrc; - spad_node->space = token.id[-1]; - - cur_spadcom = curr_node; - spad_node->next = alloc_node(); - curr_node = spad_node->next; - - do { - ch = get_char(); - if (ch == ']') - start_opts = 0; - if (start_opts) - *c++ = ch; - if (ch == '[') - start_opts = 1; - } while (ch != '\n'); - *c = '\0'; - parse_verbatim(Spadsrctxt); - parse_from_string(buf); - - curr_node->type = Endspadsrc; - cur_spadcom = NULL; - spad_node->link = make_link_window(spad_node->next, Spadsrc, 1); - gInButton--; - gInSpadsrc--; -} - -void -parse_env(TextNode *node) -{ - char *env; - char buff[256]; - char *buff_pntr = &buff[1]; - int noEnv = 0; - - get_expected_token(Lbrace); - get_expected_token(Word); - env = getenv(token.id); - - if (env == NULL) { - /** The environment variable was not found **/ - - fprintf(stderr, "(HyperDoc) Warning: environment variable \'%s\' was not found.\n", - token.id); - - env = halloc(1, "string"); - env[0] = '\0'; - noEnv = 1; - } - - buff[0] = token.id[-1]; - strcpy(buff_pntr, env); - - if (noEnv) - free(env); - - node->data.text = alloc_string(buff_pntr); - node->type = Word; - - get_expected_token(Rbrace); -} - -/* - * This parse_value routine accepts an empty {} but makes it a zero instead - * of a one. Thus \indent{} is equivelant to \indent{0} - */ - -void -parse_value1(void) -{ - TextNode *value_node, *ocn = curr_node; - char *s; - - curr_node->type = token.type; - curr_node->space = token.id[-1]; - - value_node = alloc_node(); - value_node->type = Word; - curr_node->data.node = value_node; - get_expected_token(Lbrace); - s = get_input_string(); - if (!is_number(s)) { - fprintf(stderr, - "Parser Error: parse for value was expecting a numeric value\n"); - strcpy(value_node->data.text, "0"); - } - else { - value_node->data.text = alloc_string(s); - } - curr_node = ocn; -} - -/* - * This command accepts an empty argument command. Thus \space{} is - * equivelant \space{1} - */ - -void -parse_value2(void) -{ - TextNode *value_node, *ocn = curr_node; - char *s; - - curr_node->type = token.type; - curr_node->space = token.id[-1]; - - value_node = alloc_node(); - value_node->type = Word; - curr_node->data.node = value_node; - get_expected_token(Lbrace); - s = get_input_string(); - if (!is_number(s)) { - fprintf(stderr, - "Parser Error: parse for value was expecting a numeric value\n"); - strcpy(value_node->data.text, "1"); - } - else { - value_node->data.text = alloc_string(s); - } - curr_node = ocn; -} - - -/* parse a \table sommand */ - -void -parse_table(void) -{ - TextNode *tn = curr_node; - - if (gParserMode != AllMode) { - curr_node->type = Noop; - fprintf(stderr, "Parser Error token %s unexpected\n", - token_table[token.type]); - longjmp(jmpbuf, 1); - } - curr_node->type = Table; - get_expected_token(Lbrace); - curr_node->next = alloc_node(); - curr_node = curr_node->next; - - get_token(); - if (token.type == Lbrace) { - while (token.type != Rbrace) { - curr_node->type = Tableitem; - curr_node->next = alloc_node(); - curr_node = curr_node->next; - parse_HyperDoc(); - curr_node->type = Endtableitem; - curr_node->next = alloc_node(); - curr_node = curr_node->next; - get_token(); - } - curr_node->type = Endtable; - } - else { /* a patch for SG for empty tables */ - if (token.type != Rbrace) { - token_name(token.type); - fprintf(stderr, - "Unexpected Token %s found while parsing a table\n", - ebuffer); - print_page_and_filename(); - jump(); - } - tn->type = Noop; - tn->next = NULL; - free(curr_node); - curr_node = tn; - } -} - -void -parse_box(void) -{ - curr_node->type = token.type; - curr_node->space = token.id[-1]; - curr_node->width = -1; - curr_node->next = alloc_node(); - curr_node = curr_node->next; - get_expected_token(Lbrace); - parse_HyperDoc(); - curr_node->type = Endbox; -} - -void -parse_mbox(void) -{ - curr_node->type = token.type; - curr_node->space = token.id[-1]; - curr_node->width = -1; - curr_node->next = alloc_node(); - curr_node = curr_node->next; - get_expected_token(Lbrace); - parse_HyperDoc(); - curr_node->type = Endbox; -} - -void -parse_free(void) -{ - TextNode *free_node = curr_node; - - curr_node->type = token.type; - curr_node->space = token.id[-1]; - curr_node->width = -1; - curr_node->data.node = alloc_node(); - curr_node = curr_node->data.node; - get_expected_token(Lbrace); - parse_HyperDoc(); - curr_node->type = Endarg; - curr_node = free_node; -} - -void -parse_help(void) -{ - curr_node->type = Noop; - get_token(); - if (token.type != Lbrace) { - token_name(token.type); - fprintf(stderr, "\\helppage was expecting a { and not a %s\n", ebuffer); - print_page_and_filename(); - jump(); - } - -/* before we clobber this pointer we better free the contents (cf. alloc_page) */ - free(gPageBeingParsed->helppage); - gPageBeingParsed->helppage = alloc_string(get_input_string()); - - if (token.type != Rbrace) { - token_name(token.type); - fprintf(stderr, "\\helppage was expecting a } and not a %s\n", - ebuffer); - print_page_and_filename(); - jump(); - } -} -@ -\section{License} -<<license>>= -/* -Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - - Neither the name of The Numerical ALgorithms Group Ltd. nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER -OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -@ -<<*>>= -<<license>> -<<parse-types.c>> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} - - - - |