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-paste.pamphlet | |
parent | 33949ff2e6e5b5abe8d22c5604f42a6c9371079a (diff) | |
download | open-axiom-8531f4c74274b8aa99168d220738227557a9c418.tar.gz |
* hyper/: De-pamphletize.
Diffstat (limited to 'src/hyper/parse-paste.pamphlet')
-rw-r--r-- | src/hyper/parse-paste.pamphlet | 428 |
1 files changed, 0 insertions, 428 deletions
diff --git a/src/hyper/parse-paste.pamphlet b/src/hyper/parse-paste.pamphlet deleted file mode 100644 index af851bd7..00000000 --- a/src/hyper/parse-paste.pamphlet +++ /dev/null @@ -1,428 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/parse-paste} -\author{The Axiom Team} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{parse-paste.h} -<<parse-paste.h>>= -<<license>> -#ifndef _PARSE_PASTE_H_ -#define _PARSE_PASTE_H_ 1 - -#include "axiom-c-macros.h" -#include "hyper.h" - -extern short int gInPaste; - -#endif -@ -\section{parse-paste.c} -<<parse-paste.c>>= -/****************************************************************************** - * - * parse-paste.c: HyperDoc routines for paste-in areas. - * - * Copyright The Numerical Algorithms Group Limited 1991, 1992, 1993. - * - ****************************************************************************/ -#define _PARSE_PASTE_C -#include "axiom-c-macros.h" -#include "useproto.h" -#include "debug.h" - - -#include "parse.h" -#include "parse-aux.h" -#include "mem.h" -#include "display.h" -#include "group.h" - -#include "all_hyper_proto.H1" - - -extern FILE *cfile; -short int gInPaste; - - -void -parse_paste(void) -{ - TextNode *pn = curr_node; - PasteNode *paste; - int where; - - if (gParserRegion != Scrolling) { - fprintf(stderr, "(HyperDoc) Paste areas are only allowed in the scrolling area:"); - print_page_and_filename(); - jump(); - } - gInPaste++; - - /* now I need to get the name */ - get_token(); - if (token.type != Lbrace) { - fprintf(stderr, "(HyperDoc) A paste area needs a name:\n"); - print_next_ten_tokens(); - print_page_and_filename(); - jump(); - } - pn->data.text = alloc_string(get_input_string()); - pn->type = Paste; - - /* - * now see if there is already an entry in the hash_table for this thing, - * if not create it and put it there. - */ - paste = (PasteNode *) hash_find(gWindow->fPasteHashTable, pn->data.text); - if (paste == 0) { - paste = alloc_paste_node(pn->data.text); - hash_insert(gWindow->fPasteHashTable, (char *)paste, paste->name); - } - else if (paste->haspaste) { - fprintf(stderr, "(HyperDoc) Tried to redefine paste area %s\n", paste->name); - print_page_and_filename(); - /* jump(); */ - } - paste->haspaste = 1; - paste->paste_item = current_item(); - get_token(); - if (token.type == Lsquarebrace) { - /* user wishes to specify a where to send the command */ - where = get_where(); - if (where == -1) { - paste->where = -1; - fprintf(stderr, "(HyperDoc) \\begin{paste} was expecting [lisp|unix|ht]\n"); - print_next_ten_tokens(); - print_page_and_filename(); - jump(); - } - else - paste->where = where; - get_token(); - } - else - paste->where = FromFile; - - /* now try to get the command argument or page name */ - if (token.type != Lbrace) { - paste->where = 0; - fprintf(stderr, "(HyperDoc) \\begin{paste} was expecting an argument\n"); - print_next_ten_tokens(); - print_page_and_filename(); - jump(); - } - paste->arg_node = alloc_node(); - curr_node = paste->arg_node; - parse_HyperDoc(); - curr_node->type = Endarg; - - gWindow->fDisplayedWindow = gWindow->fScrollWindow; - - /* Now try to find the displaying text */ - pn->next = alloc_node(); - curr_node = pn->next; - parse_HyperDoc(); - curr_node->type = Endpaste; - paste->end_node = curr_node; - - paste->begin_node = pn; - gInPaste--; -} - -void -parse_pastebutton(void) -{ - PasteNode *paste; - TextNode *pb; - - /* - * this routine parse a \pastebutton expression. The syntax is - * \pastebutton{name} - */ - pb = curr_node; - pb->type = Pastebutton; - - /* first thing I should do is get the name */ - get_token(); - if (token.type != Lbrace) { - fprintf(stderr, "(HyperDoc) \\pastebutton needs a name\n"); - print_page_and_filename(); - print_next_ten_tokens(); - jump(); - } - pb->data.text = alloc_string(get_input_string()); - - /* - * now I should see if the paste area has already been parsed, and if not - * I should create a spot in the hash table for it - */ - paste = (PasteNode *) hash_find(gWindow->fPasteHashTable, pb->data.text); - if (paste == 0) { - paste = alloc_paste_node(pb->data.text); - hash_insert(gWindow->fPasteHashTable,(char *) paste, paste->name); - } - else if (paste->hasbutton) { - fprintf(stderr, "(HyperDoc) Tried to redefine paste area %s\n", paste->name); - print_page_and_filename(); - /* jump(); */ - } - paste->hasbutton = 1; - - /* Now we need to parse the HyperDoc and for the displayed text */ - - get_token(); - if (token.type != Lbrace) { - fprintf(stderr, "(HyperDoc) \\pastebutton was expecting a { \n"); - print_page_and_filename(); - print_next_ten_tokens(); - jump(); - } - pb->next = alloc_node(); - curr_node = pb->next; - parse_HyperDoc(); - curr_node->type = Endpastebutton; - - /* once that is done I need only make the window for this link */ - pb->link = make_paste_window(paste); -} - - -/* - * this routine is responsible for parsing a patch from a file. To do this I - * guess er will init_scanner, then parse, the parsed piece of text - * will replace the current PasteNode which will be squashed down to - * nothing, and then discarded. - */ - -HyperDocPage * -parse_patch(PasteNode *paste) -{ - TextNode *new; - TextNode *end_node; - TextNode *begin_node; - TextNode *arg_node; - TextNode *throw; - TextNode *next_node; - InputItem *paste_item = paste->paste_item; - int where = paste->where; - GroupItem *g = paste->group; - ItemStack *is = paste->item_stack; - PatchStore *patch; - char *patch_name; - int ret_value = 1; - - /* prepare to throw away the current paste node */ - end_node = paste->end_node; - next_node = end_node->next; - begin_node = paste->begin_node; - arg_node = paste->arg_node; - throw = begin_node->next; - - /* now read the new stuff and add it in between all this stuff */ - - switch (where) { - case FromFile: - patch_name = print_to_string(arg_node); - patch = (PatchStore *) hash_find(gWindow->fPatchHashTable, patch_name); - if (!patch) { - fprintf(stderr, "(HyperDoc) Unknown patch name %s\n", patch_name); - BeepAtTheUser(); - return 0; - } - if (!patch->loaded) - load_patch(patch); - input_type = FromString; - input_string = patch->string; - break; - case FromSpadSocket: - input_type = FromSpadSocket; - ret_value = issue_serverpaste(arg_node); - if (ret_value < 0) { - paste->where = where; - paste->end_node = end_node; - paste->arg_node = arg_node; - paste->group = g; - paste->item_stack = is; - paste->haspaste = 1; - return 0; - } - break; - case FromUnixFD: - input_type = FromUnixFD; - issue_unixpaste(arg_node); - break; - default: - fprintf(stderr, "(HyperDoc) \\parsebutton error: Unknown where\n"); - exit(-1); - break; - } - - paste->where = 0; - paste->end_node = paste->arg_node = paste->begin_node = 0; - paste->group = 0; - paste->item_stack = 0; - paste->haspaste = 0; - paste->paste_item = 0; - - - /* set the jump buffer in case it is needed */ - if (setjmp(jmpbuf)) { - /*** OOOPS, an error occurred ****/ - fprintf(stderr, "(HyperDoc) Had an error parsing a patch: Goodbye!\n"); - exit(-1); - } - - - end_node->next = 0; - free_node(throw, 1); - - init_parse_patch(gWindow->page); - init_paste_item(paste_item); - get_token(); - if (token.type != Patch) { - fprintf(stderr, "(HyperDoc) Pastebutton %s was expecting a patch\n", - paste->name); - jump(); - } - if (input_type == FromString) { - get_token(); - if (token.type != Lbrace) { - token_name(token.type); - fprintf(stderr, "(HyperDoc) Unexpected %s \n", ebuffer); - print_page_and_filename(); - jump(); - } - - get_token(); - if (token.type != Word) { - token_name(token.type); - fprintf(stderr, "(HyperDoc) Unexpected %s \n", ebuffer); - print_page_and_filename(); - jump(); - } - - get_token(); - if (token.type != Rbrace) { - token_name(token.type); - fprintf(stderr, "(HyperDoc) Unexpected %s \n", ebuffer); - print_page_and_filename(); - jump(); - } - } - new = alloc_node(); - curr_node = new; - parse_HyperDoc(); - - /* Once I am back, I need only reallign all the text structures */ - curr_node->type = Noop; - curr_node->next = next_node; - begin_node->next = new; - begin_node->type = Noop; - free(begin_node->data.text); - begin_node->data.text = 0; - - gWindow->fDisplayedWindow = gWindow->fScrollWindow; - - repaste_item(); - - paste_page(begin_node); - - /* so now I should just be able to disappear */ - return gWindow->page; -} - -static void -load_patch(PatchStore *patch) -{ - long start_fpos; - int size = 0; - int limsize; - char *trace; - - - save_scanner_state(); - cfile = find_fp(patch->fpos); - - init_scanner(); - - /** First thing I should do is make sure that the name is correct ***/ - start_fpos = fpos; - get_expected_token(Patch); - get_expected_token(Lbrace); - get_expected_token(Word); - if (strcmp(token.id, patch->name)) { - /** WOW, Somehow I had the location of the wrong macro **/ - fprintf(stderr, "(HyperDoc) Expected patch name %s: got instead %s in load_patch\n", - patch->name, token.id); - jump(); - } - get_expected_token(Rbrace); - - scan_HyperDoc(); - fseek(cfile, patch->fpos.pos + start_fpos, 0); - limsize = fpos - start_fpos + 1; - patch->string = (char *) halloc((limsize + 1) * sizeof(char), "Patch String"); - for (size = 1, trace = patch->string; size < limsize; size++) - *trace++ = getc(cfile); - *trace = '\0'; - patch->loaded = 1; - restore_scanner_state(); -} - - -@ -\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-paste.c>> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} - - - - |