From 7a49bf81adf065d8b7bef6b6e983cd1a3c1b40ab Mon Sep 17 00:00:00 2001 From: =?utf8?q?Uwe=20St=C3=B6hr?= Date: Tue, 14 Jun 2011 20:56:51 +0000 Subject: [PATCH] - example files: save in current format (still not finished) - amsbook.layout: the Address style is required in our example amsbook-test.lyx to be able to compile it git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/branches/BRANCH_2_0_X@39050 a592a061-630c-0410-9148-cb99ea01b6c8 --- lib/examples/Literate.lyx | 1002 +++++++++++++++++---------------- lib/examples/amsbook-test.lyx | 52 +- lib/examples/listerrors.lyx | 634 +++++++++++---------- lib/examples/noweb2lyx.lyx | 643 +++++++++++---------- lib/layouts/amsbook.layout | 1 - 5 files changed, 1248 insertions(+), 1084 deletions(-) diff --git a/lib/examples/Literate.lyx b/lib/examples/Literate.lyx index cc7d373899..b0bc5483d6 100644 --- a/lib/examples/Literate.lyx +++ b/lib/examples/Literate.lyx @@ -1,20 +1,29 @@ -#LyX 1.6.0 created this file. For more info see http://www.lyx.org/ -\lyxformat 345 +#LyX 2.0 created this file. For more info see http://www.lyx.org/ +\lyxformat 413 \begin_document \begin_header -\use_default_options false \textclass literate-article +\use_default_options false +\maintain_unincluded_children false \language english +\language_package default \inputencoding default +\fontencoding global \font_roman default \font_sans default \font_typewriter default \font_default_family default +\use_non_tex_fonts false \font_sc false \font_osf false \font_sf_scale 100 \font_tt_scale 100 + \graphics default +\default_output_format default +\output_sync 0 +\bibtex_command default +\index_command default \paperfontsize default \spacing single \use_hyperref false @@ -22,20 +31,31 @@ \use_geometry false \use_amsmath 0 \use_esint 0 +\use_mhchem 1 +\use_mathdots 1 \cite_engine basic \use_bibtopic false +\use_indices false \paperorientation portrait +\suppress_date false +\use_refstyle 0 +\index Index +\shortcut idx +\color #008000 +\end_index \secnumdepth 3 \tocdepth 3 \paragraph_separation indent -\defskip medskip +\paragraph_indentation default \quotes_language english \papercolumns 1 \papersides 1 \paperpagestyle default \tracking_changes false \output_changes false -\author "" +\html_math_output 0 +\html_css_as_file 0 +\html_be_strict false \end_header \begin_body @@ -145,129 +165,129 @@ Algorithm \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap int -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap main (int argc, char **argv) -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if (argc == 2) { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap switch (argv[1][0]) { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap case 'n': -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap break; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap case 'x': -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap break; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap case 'a': -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap break; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap case 's': -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap case 'b': -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap break; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap case 'g': -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap default: -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap break; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } else { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap int main (int argc, char **argv); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout @@ -284,9 +304,9 @@ We resort to some global variables to allow access from several different \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap char buffer[200][200]; \begin_inset Newline newline \end_inset @@ -336,35 +356,35 @@ This function has been slightly changed from EW's original to make scanning \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap void -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap output_error (int buf_size, int error_line, char *tool) -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap int i; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap fprintf(stdout, "! Build Error: ==> %s ==> \backslash n", tool); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap fprintf(stdout, " ... \backslash n @@ -372,51 +392,51 @@ n nl.%d ... \backslash n", error_line); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap for (i=0; i>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap void output_error (int buf_size, int error_line, char *tool); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout @@ -435,37 +455,37 @@ Both noweave and notangle routines, always output one single line for each \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap last_buf_line = 0; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap while (fgets(buffer[0], 200, stdin)) { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if (noweb_try(0)) -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap output_error(1, err_line, "noweb"); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout @@ -478,83 +498,87 @@ The examination itself is very inefficient. array. \end_layout +\begin_layout Scrap + +\end_layout + \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap char *noweb_msgs[] = { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap "couldn't open file", -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap "couldn't open temporary file", -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap "error writing temporary file", -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap "ill-formed option", -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap "unknown option", -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap "Bad format sequence", -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap "Can't open output file", -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap "Can't open temporary file", -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap "Capacity exceeded:", -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap "Ignoring unknown option -", -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap "This can't happen:", -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap "non-numeric line number in" -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap }; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap char *noweb_msgs_mimic_gcc[] = { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap ": unescaped << in documentation chunk" -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap }; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout @@ -575,6 +599,10 @@ A noweb error message can be any string that contains a matching pair of > >, or any of the above strings \end_layout +\begin_layout Scrap + +\end_layout + \begin_layout Scrap <>= \begin_inset Newline newline @@ -729,13 +757,13 @@ noweb_try (int buf_line) \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap int noweb_try (int buf_line); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout @@ -747,37 +775,37 @@ The xlc compiler always outputs one single line for each error found, thus \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap last_buf_line = 0; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap while (fgets(buffer[last_buf_line], 200, stdin)) { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if (xlc_try(0)) -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap output_error(1, err_line, "xlc"); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout @@ -796,85 +824,93 @@ line The following routine tests if a given buffer line matches this criteria: \end_layout +\begin_layout Scrap + +\end_layout + +\begin_layout Scrap + +\end_layout + \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap int -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap xlc_try (int buf_line) -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap char *s, *t; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap t = buffer[buf_line]; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap s = t+1; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap while (*s != '"' && *s != ' ' && *s != ' \backslash 0') -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap s++; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if (*t != '"' || *s != '"' || strncmp(s+1, ", line ", 7) != 0) -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap return 0; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap s += 8; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap err_line = atoi(s); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap return 1; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap int xlc_try (int buf_line); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout @@ -916,144 +952,144 @@ Every gcc error message contains a string with no space followed by a \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap char *s, *t; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap last_buf_line = 0; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap while (fgets(buffer[last_buf_line], 200, stdin)) { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap /****** Skip lines until I find an error */ -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap s = (char *)strpbrk(buffer[last_buf_line], " :"); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if (s == NULL || *s == ' ') -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap continue; /* No gcc error found here */ -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap do { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap /****** OK It is an error message, get line number */ -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap err_line = atoi(s+1); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if (last_err_line == 0 || last_err_line == err_line) { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap last_err_line = err_line; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap continue; /* It's either a header or a continuation, don't output yet */ -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap /****** Completed the scan of one error message, output it to LyX */ -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap discharge_buffer(1); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap break; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } while (fgets(buffer[last_buf_line], 200, stdin)); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap /****** EOF completes the scan of whatever was being scanned */ -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap discharge_buffer(0); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap /****** Search first ":" in the error number */ -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap s = (char *)strpbrk(buffer[last_buf_line], " :"); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap last_buf_line++; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if (s == NULL || *s == ' ') -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap /****** Search second ":" in the error number */ -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap t = (char *)strpbrk(s+1, " :"); \begin_inset Newline newline \end_inset @@ -1083,32 +1119,40 @@ if (t != s+1+strspn(s+1, "0123456789")) @ \end_layout +\begin_layout Scrap + +\end_layout + +\begin_layout Scrap + +\end_layout + \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap err_line = 0; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap discharge_buffer(1); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap continue; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout @@ -1128,99 +1172,107 @@ last line In those cases we empty the buffer completely. \end_layout +\begin_layout Scrap + +\end_layout + +\begin_layout Scrap + +\end_layout + \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap void -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap discharge_buffer (int save_last) -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if (last_err_line != 0) { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap clean_gcc_messages(); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if (save_last != 0) { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap output_error(last_buf_line-1, last_err_line, "gcc"); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap strcpy (buffer[0], buffer[last_buf_line-1]); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap last_err_line = err_line; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap last_buf_line = 1; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } else { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap ++last_buf_line; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap clean_gcc_messages(); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap output_error(last_buf_line-1, last_err_line, "gcc"); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap last_err_line = 0; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap last_buf_line = 0; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap void discharge_buffer (int save_last); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout @@ -1251,117 +1303,117 @@ More could be done. \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap void -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap clean_gcc_messages () -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap int index; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap char search [30]; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap char *tail, *head; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap int search_len = sprintf(search, ".nw:%d:", last_err_line); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap for (index = 0; index < last_buf_line-1; index++) { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap tail = (char *)strstr (buffer[index], search); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if ( tail == NULL) { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap tail = (char *) strstr (buffer[index], ".nw:"); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if (tail) { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap tail += 4; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } else { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap tail += search_len; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if (tail != NULL) { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap head = buffer[index]; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap while (*(head++) = *(tail++)); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap void clean_gcc_messages (); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout @@ -1373,13 +1425,13 @@ To combine the scan of noweb error messages and xlc error messages is very \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap last_buf_line = 0; \begin_inset Newline newline \end_inset @@ -1425,127 +1477,127 @@ To combine the scan of noweb error messages and gcc error messages is simple \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap char *s, *t; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap last_buf_line = 0; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap while (fgets(buffer[last_buf_line], 200, stdin)) { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap /****** Skip lines until I find an error */ -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if (last_buf_line == 0 && noweb_try(0)) { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap output_error(1, err_line, "noweb"); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap continue; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap s = (char *)strpbrk(buffer[last_buf_line], " :"); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if (s == NULL || *s == ' ') -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap continue; /* No gcc error found here */ -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap do { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap /****** OK It is an error, get line number */ -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap err_line = atoi(s+1); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if (last_err_line == 0 || last_err_line == err_line) { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap last_err_line = err_line; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap continue; /* It's either a header or a continuation, don't output yet */ -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap /****** Completed the scan of one error message, output it to LyX */ -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap discharge_buffer(1); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap break; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } while (fgets(buffer[last_buf_line], 200, stdin)); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap /****** EOF completes the scan of whatever was being scanned */ -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap discharge_buffer(0); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout @@ -1555,33 +1607,33 @@ Wrapping the code into a file \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap #include -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap #include -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout @@ -1616,25 +1668,25 @@ listerrors.c \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap #!/bin/sh -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if [ -z "$NOWEB_SOURCE" ]; then NOWEB_SOURCE=Literate.nw; fi -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap notangle -L -Rlisterrors.c ${NOWEB_SOURCE} > listerrors.c -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap gcc -g -o listerrors listerrors.c -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout diff --git a/lib/examples/amsbook-test.lyx b/lib/examples/amsbook-test.lyx index 86ab253ff6..bda2225612 100644 --- a/lib/examples/amsbook-test.lyx +++ b/lib/examples/amsbook-test.lyx @@ -1,24 +1,35 @@ -#LyX 1.6.0 created this file. For more info see http://www.lyx.org/ -\lyxformat 345 +#LyX 2.0 created this file. For more info see http://www.lyx.org/ +\lyxformat 413 \begin_document \begin_header -\use_default_options false \textclass amsbook +\use_default_options false \begin_modules theorems-ams +eqs-within-sections +figs-within-sections theorems-ams-extended \end_modules +\maintain_unincluded_children false \language english +\language_package default \inputencoding default +\fontencoding global \font_roman default \font_sans default \font_typewriter default \font_default_family default +\use_non_tex_fonts false \font_sc false \font_osf false \font_sf_scale 100 \font_tt_scale 100 + \graphics default +\default_output_format default +\output_sync 0 +\bibtex_command default +\index_command default \paperfontsize default \spacing single \use_hyperref false @@ -26,20 +37,31 @@ theorems-ams-extended \use_geometry false \use_amsmath 0 \use_esint 0 +\use_mhchem 1 +\use_mathdots 1 \cite_engine basic \use_bibtopic false +\use_indices false \paperorientation portrait +\suppress_date false +\use_refstyle 0 +\index Index +\shortcut idx +\color #008000 +\end_index \secnumdepth 3 \tocdepth 3 \paragraph_separation indent -\defskip medskip +\paragraph_indentation default \quotes_language english \papercolumns 1 \papersides 2 \paperpagestyle default \tracking_changes false \output_changes false -\author "" +\html_math_output 0 +\html_css_as_file 0 +\html_be_strict false \end_header \begin_body @@ -54,15 +76,20 @@ David L. \end_layout \begin_layout Address -Department of Mathematics -\begin_inset Newline newline -\end_inset +Department of Mathematics, +\begin_inset ERT +status collapsed + +\begin_layout Plain Layout + + +\backslash +newline +\end_layout -Lehigh University -\begin_inset Newline newline \end_inset -Bethlehem, PA 18015 +Lehigh University, Bethlehem, PA 18015 \end_layout \begin_layout Current Address @@ -499,6 +526,7 @@ Need some criteria \end_layout \begin_layout Bibliography +\labelwidthstring References \begin_inset CommandInset bibitem LatexCommand bibitem key "1" @@ -513,6 +541,7 @@ Out of my head \end_layout \begin_layout Bibliography +\labelwidthstring References \begin_inset CommandInset bibitem LatexCommand bibitem key "2" @@ -527,6 +556,7 @@ Instructions for preparation of papers and monographs: AMS-LaTeX \end_layout \begin_layout Bibliography +\labelwidthstring References \begin_inset CommandInset bibitem LatexCommand bibitem key "3" diff --git a/lib/examples/listerrors.lyx b/lib/examples/listerrors.lyx index 9baaecffec..47e3e41186 100644 --- a/lib/examples/listerrors.lyx +++ b/lib/examples/listerrors.lyx @@ -1,8 +1,7 @@ -#LyX 1.6.0 created this file. For more info see http://www.lyx.org/ -\lyxformat 345 +#LyX 2.0 created this file. For more info see http://www.lyx.org/ +\lyxformat 413 \begin_document \begin_header -\use_default_options false \textclass literate-article \begin_preamble % @@ -18,17 +17,27 @@ \def\nwendcode{\endtrivlist \endgroup \vfil\penalty10\vfilneg} \let\nwdocspar=\smallbreak \end_preamble +\use_default_options false +\maintain_unincluded_children false \language english +\language_package default \inputencoding auto +\fontencoding global \font_roman times \font_sans helvet \font_typewriter courier \font_default_family default +\use_non_tex_fonts false \font_sc false \font_osf false \font_sf_scale 100 \font_tt_scale 100 + \graphics default +\default_output_format default +\output_sync 0 +\bibtex_command default +\index_command default \paperfontsize default \spacing single \use_hyperref false @@ -36,20 +45,31 @@ \use_geometry false \use_amsmath 0 \use_esint 0 +\use_mhchem 1 +\use_mathdots 1 \cite_engine basic \use_bibtopic false +\use_indices false \paperorientation portrait +\suppress_date false +\use_refstyle 0 +\index Index +\shortcut idx +\color #008000 +\end_index \secnumdepth 3 \tocdepth 3 \paragraph_separation indent -\defskip medskip +\paragraph_indentation default \quotes_language english \papercolumns 1 \papersides 1 \paperpagestyle default \tracking_changes false \output_changes false -\author "" +\html_math_output 0 +\html_css_as_file 0 +\html_be_strict false \end_header \begin_body @@ -287,95 +307,95 @@ listerrors \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap #!/usr/bin/python -tt -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap """reformat noweb and compiler errors for LyX. -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap Expects to read from stdin and output to stdout. -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap """ -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap __author__ = "Kayvan A. Sylvan " -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap __date__ = "$Date: 2005/07/18 09:42:26 $" -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap __version__ = "$Revision: 1.5 $" -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap __credits__ = """Edmar Wienskoski Jr. -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap original Literate support for LyX. -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap Bernard Michael Hurley -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap modifications to original listerrors.""" -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap __copyright__ = "Copyright 2002 - Kayvan Sylvan." -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap import sys, string -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if __name__ == "__main__": -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap main() -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout @@ -389,21 +409,25 @@ The following function mimics the TeX error message format. \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap def write_error(msg, tool = "noweb", line_number = 1): -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap """Write out the given message in TeX error style. -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap -\begin_inset Newline newline -\end_inset +\end_layout + +\begin_layout Scrap +\end_layout + +\begin_layout Scrap called like: write_error(msg, tool, line_number).""" \begin_inset Newline newline \end_inset @@ -483,65 +507,65 @@ pushline \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap __lines = [] # lines pushed back -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap def getline(file = sys.stdin): -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap """read a line from internal stack or from file. -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap optional file argument defaults to sys.stdin.""" -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap global __lines -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap lines = __lines -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if lines: -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap line = lines.pop() -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap else: -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap line = file.readline() -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap return line -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ %def getline \end_layout @@ -551,17 +575,21 @@ And now for the corresponding pushline function: \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap def pushline(line): -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap "push a line onto the pushback stack." -\begin_inset Newline newline -\end_inset +\end_layout + +\begin_layout Scrap +\end_layout + +\begin_layout Scrap global __lines \begin_inset Newline newline \end_inset @@ -600,47 +628,47 @@ listerrors \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap def main(): -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap """Entry point for listerrors. Takes no options. -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap Reads stdin and writes to stdout. Filter errors""" -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap while 1: -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap line = getline() -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if line == "": break -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ %def main \end_layout @@ -651,9 +679,13 @@ For each line read in, we need to find out if it matches any of our tools \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout + +\begin_layout Scrap +\end_layout + +\begin_layout Scrap try_patterns_dispatch = [ noweb_try, gcc_try, xlc_try ] \begin_inset Newline newline \end_inset @@ -690,50 +722,50 @@ Noweb errors are output on a single line, so examining just the current \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap def noweb_try(line): -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap """see if line is a noweb error. -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap Returns 1 on success, 0 otherwise. Outputs on stdout.""" -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap retval = 0 -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap return retval -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ %def noweb_try \end_layout @@ -750,47 +782,51 @@ unescaped < < in documentation chunk This is the only message with an associated line number from noweb. \end_layout +\begin_layout Scrap + +\end_layout + \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if string.find(line, ": unescaped << in documentation chunk") != -1: -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap line_parts = string.split(line, ':') -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap num_str = line_parts[1] -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap num_len = len(num_str) -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap i = 0 -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap while i < num_len and (num_str[i] in string.digits): i = i + 1 -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if i == num_len: -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap write_error(":" + line_parts[2], "noweb", int(num_str)) -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap retval = 1 -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout @@ -801,9 +837,13 @@ Some noweb messages are simply about undefined scraps. \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout + +\begin_layout Scrap +\end_layout + +\begin_layout Scrap if (not retval): \begin_inset Newline newline \end_inset @@ -839,81 +879,81 @@ Finally, here is an additional list of explicit strings to check for. \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if (not retval): -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap msgs_to_try = ("couldn't open file", -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap "couldn't open temporary file", -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap "error writing temporary file", -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap "ill-formed option", -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap "unknown option", -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap "Bad format sequence", -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap "Can't open output file", -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap "Can't open temporary file", -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap "Capacity exceeded:", -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap "Ignoring unknown option -", -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap "This can't happen:", -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap "non-numeric line number in") -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap for msg in msgs_to_try: -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if string.find(line, msg) != -1: -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap write_error(line, "noweb") -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap retval = 1 -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap break -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout @@ -927,17 +967,21 @@ The gcc errors can be multi-line, with the following format: \begin_layout LyX-Code foo.c: In function `main': -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap foo.c:3: `bar' undeclared (first use in this function) -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap foo.c:3: (Each undeclared identifier is reported only once -\begin_inset Newline newline -\end_inset +\end_layout + +\begin_layout Scrap + +\end_layout +\begin_layout Scrap foo.c:3: for each function it appears in.) \begin_inset Newline newline \end_inset @@ -952,43 +996,43 @@ In order to parse this, the gcc error handler has to look ahead and return \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap def gcc_try(line): -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap """See if line is a gcc error. Read ahead to handle all the lines. -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap Returns 1 on success, 0 otherwise. Outputs on stdout.""" -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap retval = 0 -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap return retval -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ %def gcc_try \end_layout @@ -1068,53 +1112,53 @@ At the point in the code that we know that we are in the middle of an error \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap num_str = next_line[first_space:num_end] -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap msgs = [line[first_space:]] -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap msgs.append(next_line[num_end + 1:]) -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap header_to_see = next_line[:num_end] -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap next_line = getline() -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap while next_line and next_line[:num_end] == header_to_see: -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap msgs.append(next_line[num_end + 1:]) -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap next_line = getline() -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if next_line: pushline(next_line) -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap write_error(msgs, "gcc", int(num_str)) -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap retval = 1 -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout @@ -1148,81 +1192,89 @@ re \end_layout +\begin_layout Scrap + +\end_layout + +\begin_layout Scrap + +\end_layout + \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap def xlc_try(line): -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap """see if line is an xlc error. -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap Returns 1 on success, 0 otherwise. Outputs on stdout.""" -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap retval = 0 -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if line[0] == '"': # This is the first character of all xlc errors -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap next_quote = string.find(line, '"', 1) -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap first_space = string.find(line, ' ') -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if (next_quote != -1) and (first_space > next_quote): # no space inisde quotes -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if line[first_space - 1:first_space + 6] == ", line ": -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap num_start = num_end = first_space + 6 -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap while line[num_end] in string.digits: num_end = num_end + 1 -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if num_end > num_start: -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap write_error(line, "xlc", int(line[num_start : num_end])) -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap retval = 1 -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap return retval -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ %def xlc_try \end_layout @@ -1261,25 +1313,25 @@ This section defines our build-script, which extracts the code. \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap #!/bin/sh -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if [ -z "$NOWEB_SOURCE" ]; then NOWEB_SOURCE=listerrors.nw; fi -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap notangle -Rlisterrors ${NOWEB_SOURCE} > listerrors -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap chmod +x listerrors -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout diff --git a/lib/examples/noweb2lyx.lyx b/lib/examples/noweb2lyx.lyx index 8685e99498..3bba1fc09e 100644 --- a/lib/examples/noweb2lyx.lyx +++ b/lib/examples/noweb2lyx.lyx @@ -1,8 +1,7 @@ -#LyX 1.6.0 created this file. For more info see http://www.lyx.org/ -\lyxformat 345 +#LyX 2.0 created this file. For more info see http://www.lyx.org/ +\lyxformat 413 \begin_document \begin_header -\use_default_options false \textclass literate-article \begin_preamble % @@ -14,17 +13,27 @@ \def\nwendcode{\endtrivlist \endgroup} \let\nwdocspar=\smallbreak \end_preamble +\use_default_options false +\maintain_unincluded_children false \language english +\language_package default \inputencoding default +\fontencoding global \font_roman default \font_sans default \font_typewriter default \font_default_family default +\use_non_tex_fonts false \font_sc false \font_osf false \font_sf_scale 100 \font_tt_scale 100 + \graphics default +\default_output_format default +\output_sync 0 +\bibtex_command default +\index_command default \paperfontsize default \spacing single \use_hyperref false @@ -32,20 +41,31 @@ \use_geometry false \use_amsmath 0 \use_esint 0 +\use_mhchem 1 +\use_mathdots 1 \cite_engine basic \use_bibtopic false +\use_indices false \paperorientation portrait +\suppress_date false +\use_refstyle 0 +\index Index +\shortcut idx +\color #008000 +\end_index \secnumdepth 3 \tocdepth 3 \paragraph_separation indent -\defskip medskip +\paragraph_indentation default \quotes_language english \papercolumns 1 \papersides 1 \paperpagestyle default \tracking_changes false \output_changes false -\author "" +\html_math_output 0 +\html_css_as_file 0 +\html_be_strict false \end_header \begin_body @@ -121,79 +141,79 @@ noweb \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap #!@PERL@ -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap # -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap # Copyright (C) 1999 Kayvan A. Sylvan -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap # You are free to use and modify this code under the terms of -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap # the GNU General Public Licence version 2 or later. -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap # -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap # Written with assistance from: -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap # Edmar Wienskoski Jr. -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap # Amir Karger -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap # -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap # $Id: noweb2lyx.lyx,v 1.5 2005/07/18 09:42:27 jamatos Exp $ -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap # -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap # NOTE: This file was automatically generated from noweb2lyx.lyx using noweb. -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap # -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout @@ -212,9 +232,13 @@ noweb \begin_layout LyX-Code @ Here is some documentation. -\begin_inset Newline newline -\end_inset +\end_layout + +\begin_layout Scrap +\end_layout + +\begin_layout Scrap We can do arbitrary LaTeX code here. \begin_inset Newline newline \end_inset @@ -458,49 +482,49 @@ With all that preamble out of the way, we now have the basic high-level \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if (!$post_only) { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if ((!$pre_only) && (!$post_only)) { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if (!$pre_only) { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout @@ -515,23 +539,27 @@ In this section, we present the code that performs the task of creating This algorithm is outlined in the code that follows: \end_layout +\begin_layout Scrap + +\end_layout + \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap inputline: while() -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if (/^ \backslash s* @@ -543,23 +571,23 @@ s* > \backslash >=/) { # Beginning of a noweb scrap -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } elsif (/^@ \backslash s+(.*)/) { # Beginning of a documentation chunk -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap print OUTPUT $1; # We do not need the ``@'' part -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } elsif (/ \backslash [ @@ -569,33 +597,33 @@ s+(.*)/) { # Beginning of a documentation chunk ] \backslash ]/) { # noweb quoted code -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } else { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap print OUTPUT; # Just let the line pass through -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout @@ -607,9 +635,9 @@ In the code above, we do some pre-processing of the noweb ``[[...]]'' construct. \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap s/ \backslash [ @@ -667,21 +695,21 @@ noweb \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout @@ -764,33 +792,33 @@ to read and write files. \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if ($pre_only) { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap &setup_files($input_file, $output_file); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } else { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap $relyx_file = "temp$$"; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap &setup_files($input_file, $relyx_file); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout @@ -829,33 +857,33 @@ status collapsed \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap sub setup_files { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap my($in, $out) = @_; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap open(INPUT, "<$in") || die "Cannot read $in: $! \backslash n"; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap open(OUTPUT, ">$out") || die "Cannot write $out: $! \backslash n"; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ %def setup_files \end_layout @@ -874,17 +902,17 @@ After we see the beginning of the scrap, we need to read in and save the \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap $savedScrap = $_; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap $endLine = ""; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout @@ -954,9 +982,9 @@ The final piece of the first pass of the conversion is done by this code. \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap print OUTPUT " \backslash @@ -964,13 +992,13 @@ print OUTPUT " begin{reLyXskip} \backslash n"; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap print OUTPUT $savedScrap; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap print OUTPUT " \backslash @@ -980,13 +1008,13 @@ end{reLyXskip} n \backslash n"; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap print OUTPUT "$endLine"; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout @@ -1057,17 +1085,17 @@ files. \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap close(INPUT); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap close(OUTPUT); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout @@ -1122,17 +1150,17 @@ In order to run reLyX, we need to know the article class of the input document \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout @@ -1229,55 +1257,55 @@ noweb2lyx \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap open(INPUT, "<$relyx_file") || -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap die "Cannot read $relyx_file: $! \backslash n"; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap $class = "article"; # default if none found -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap parse: while() { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if (/ \backslash \backslash docu[m]entclass{(.*)}/) { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap $class = $1; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap last parse; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap close(INPUT); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout @@ -1338,41 +1366,41 @@ We need to perform some post-processing of what reLyX produces in order \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap line: while() -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap print OUTPUT; # default -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap <> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout @@ -1514,29 +1542,29 @@ is taken care of by this code: \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if ($post_only) { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap &setup_files("$input_file", "$output_file"); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } else { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap &setup_files("$relyx_file.lyx", "$output_file"); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout @@ -1551,53 +1579,53 @@ Now, as we outlined before, the final step is transforming the code-chunks \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if (/ \backslash \backslash latex latex/) { # Beginning of some latex code -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if (($line = ) =~ /^ \backslash s*<> -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } else { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap # print the \backslash latex latex line + next line -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap print OUTPUT "$_$line"; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap next line; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout @@ -1608,9 +1636,13 @@ When we are sure that we are in a code chunk, we must read in the rest of \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout + +\begin_layout Scrap + +\end_layout +\begin_layout Scrap $savedScrap = " \backslash @@ -1659,43 +1691,43 @@ Okay, now we just need to eat the rest of the latex layout. \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap slurp: while () { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap last slurp if / \backslash \backslash latex /; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap next slurp if / \backslash \backslash newline/; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap next slurp if /^ \backslash s*$/; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap warn "confused by line: $_"; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout @@ -1734,9 +1766,9 @@ noweb \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if (/ \backslash [ @@ -1746,9 +1778,9 @@ if (/ ] \backslash ]/) { # special code for [[var]] -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap s/ \backslash [ @@ -1772,21 +1804,21 @@ n latex default \backslash n/g; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap print OUTPUT; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap next line; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout @@ -1800,13 +1832,13 @@ The cleanup code is very simple: \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap system("rm -f $relyx_file*") unless ($post_only || $pre_only); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout @@ -1826,74 +1858,73 @@ noweb2lyx \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap &usage() if ($#ARGV < 1); # zero or one argument -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap if ($ARGV[0] eq "-pre") { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap &usage unless ($#ARGV == 2); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap $input_file = $ARGV[1]; $output_file = $ARGV[2]; $pre_only = 1; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } elsif ($ARGV[0] eq "-post") { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap &usage unless ($#ARGV == 2); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap $input_file = $ARGV[1]; $output_file = $ARGV[2]; $post_only = 1; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } else { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap &usage unless ($#ARGV == 1); -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap $input_file = $ARGV[0]; $output_file = $ARGV[1]; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap $pre_only = 0; $post_only = 0; -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap } -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ %def input_file output_file pre_only post_only \end_layout \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap sub usage() { -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap print "Usage: noweb2lyx [-pre | -post] input-file output-file -\begin_inset Newline newline -\end_inset - +\end_layout +\begin_layout Scrap \begin_inset Newline newline \end_inset @@ -1957,25 +1988,25 @@ notangle -Rbuild-script $1 | sh \begin_layout Scrap <>= -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap PREFIX=/usr -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap notangle -Rnoweb2lyx.in noweb2lyx.nw > noweb2lyx.in -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap sed -e "s=@PERL@=$PREFIX/bin/perl=" noweb2lyx.in > noweb2lyx -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap chmod +x noweb2lyx -\begin_inset Newline newline -\end_inset +\end_layout +\begin_layout Scrap @ \end_layout diff --git a/lib/layouts/amsbook.layout b/lib/layouts/amsbook.layout index 18c1a3f6a1..8ab52581e9 100644 --- a/lib/layouts/amsbook.layout +++ b/lib/layouts/amsbook.layout @@ -113,7 +113,6 @@ Input stdcounters.inc Input amsdefs.inc # Unwanted styles from the includes -NoStyle Address NoStyle Verse # Chapter is _not_ prepended -- 2.39.5