annotate scripts/miscellaneous/publish.m @ 30242:33d895260fa4

publish.m: Support some non-ASCII characters in comments for pdf output. * scripts/miscellaneous/publish.m: Clarify documentation. Publishing Markup is only interpreted in section comments. Remove sentence that suggests that commands in the output format might be interpreted in that format. * scripts/miscellaneous/private/__publish_latex_output__.m: Add substitution rules for some multi-byte UTF-8 characters (mostly Latin-based) to LaTeX publish template. This fixes a bug where using these characters in comments would cause `pdflatex` to fail. See: https://github.com/gnu-octave/octave/pull/5
author Markus Mützel <markus.muetzel@gmx.de>
date Sun, 17 Oct 2021 12:28:51 +0200
parents 7854d5752dd2
children 363fb10055df
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
1 ########################################################################
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
2 ##
29358
0a5b15007766 update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents: 27923
diff changeset
3 ## Copyright (C) 2010-2021 The Octave Project Developers
27918
b442ec6dda5c use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents: 27846
diff changeset
4 ##
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
5 ## See the file COPYRIGHT.md in the top-level directory of this
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
6 ## distribution or <https://octave.org/copyright/>.
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
7 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
8 ## This file is part of Octave.
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
9 ##
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24491
diff changeset
10 ## Octave is free software: you can redistribute it and/or modify it
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
11 ## under the terms of the GNU General Public License as published by
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24491
diff changeset
12 ## the Free Software Foundation, either version 3 of the License, or
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22708
diff changeset
13 ## (at your option) any later version.
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
14 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
15 ## Octave is distributed in the hope that it will be useful, but
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
16 ## WITHOUT ANY WARRANTY; without even the implied warranty of
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22708
diff changeset
17 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22708
diff changeset
18 ## GNU General Public License for more details.
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
19 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
20 ## You should have received a copy of the GNU General Public License
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
21 ## along with Octave; see the file COPYING. If not, see
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24491
diff changeset
22 ## <https://www.gnu.org/licenses/>.
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
23 ##
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
24 ########################################################################
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
25
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
26 ## -*- texinfo -*-
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
27 ## @deftypefn {} {} publish (@var{file})
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
28 ## @deftypefnx {} {} publish (@var{file}, @var{output_format})
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
29 ## @deftypefnx {} {} publish (@var{file}, @var{option1}, @var{value1}, @dots{})
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
30 ## @deftypefnx {} {} publish (@var{file}, @var{options})
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
31 ## @deftypefnx {} {@var{output_file} =} publish (@var{file}, @dots{})
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
32 ##
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
33 ## Generate a report from the Octave script file @var{file} in one of several
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
34 ## output formats.
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
35 ##
30242
33d895260fa4 publish.m: Support some non-ASCII characters in comments for pdf output.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29359
diff changeset
36 ## The generated reports interpret Publishing Markup in section comments, which
33d895260fa4 publish.m: Support some non-ASCII characters in comments for pdf output.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29359
diff changeset
37 ## is explained in detail in the GNU Octave manual. Section comments are
33d895260fa4 publish.m: Support some non-ASCII characters in comments for pdf output.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29359
diff changeset
38 ## comment blocks that start with a line with double comment character.
33d895260fa4 publish.m: Support some non-ASCII characters in comments for pdf output.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29359
diff changeset
39 ##
33d895260fa4 publish.m: Support some non-ASCII characters in comments for pdf output.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29359
diff changeset
40 ## Assume the following example, using some Publishing Markup, to be the
33d895260fa4 publish.m: Support some non-ASCII characters in comments for pdf output.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29359
diff changeset
41 ## contents of the script file @file{pub_example.m}:
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
42 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
43 ## @example
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
44 ## @group
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
45 ## ## Headline title
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
46 ## #
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
47 ## # Some *bold*, _italic_, or |monospaced| Text with
25024
3c817af70eed maint: use https for all Octave project URLs
Mike Miller <mtmiller@octave.org>
parents: 24534
diff changeset
48 ## # a <https://www.octave.org link to *GNU Octave*>.
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
49 ## ##
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
50 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
51 ## # "Real" Octave commands to be evaluated
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
52 ## sombrero ()
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
53 ##
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
54 ## %% @sc{matlab} comment style ('%') is supported as well
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
55 ## %
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
56 ## % * Bulleted list item 1
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
57 ## % * Bulleted list item 2
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
58 ## %
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
59 ## % # Numbered list item 1
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
60 ## % # Numbered list item 2
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
61 ## @end group
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
62 ## @end example
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
63 ##
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
64 ## To publish this script file, type @code{publish ("pub_example.m")}.
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
65 ##
30242
33d895260fa4 publish.m: Support some non-ASCII characters in comments for pdf output.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29359
diff changeset
66 ## When called with one input argument, a HTML report is generated in a
33d895260fa4 publish.m: Support some non-ASCII characters in comments for pdf output.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29359
diff changeset
67 ## subdirectory @file{html} relative to the current working directory. Any
33d895260fa4 publish.m: Support some non-ASCII characters in comments for pdf output.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29359
diff changeset
68 ## Octave commands in @file{pub_example.m} are evaluated in a separate context
33d895260fa4 publish.m: Support some non-ASCII characters in comments for pdf output.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29359
diff changeset
69 ## and any figures created while executing the script file are included in the
33d895260fa4 publish.m: Support some non-ASCII characters in comments for pdf output.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29359
diff changeset
70 ## report.
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
71 ##
23549
c8daadf7543b publish.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 23548
diff changeset
72 ## Using @code{publish (@var{file}, @var{output_format})} is equivalent to the
c8daadf7543b publish.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 23548
diff changeset
73 ## function call using a structure
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
74 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
75 ## @example
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
76 ## @group
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
77 ## @var{options}.format = @var{output_format};
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
78 ## publish (@var{file}, @var{options})
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
79 ## @end group
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
80 ## @end example
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
81 ##
22299
9fc91bb2aec3 doc: grammarcheck documentation for 4.2 release.
Rik <rik@octave.org>
parents: 22157
diff changeset
82 ## @noindent
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
83 ## which is described below. The same holds for using option/value pairs
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
84 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
85 ## @example
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
86 ## @group
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
87 ## @var{options}.@var{option1} = @var{value1};
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
88 ## publish (@var{file}, @var{options})
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
89 ## @end group
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
90 ## @end example
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
91 ##
23549
c8daadf7543b publish.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 23548
diff changeset
92 ## The structure @var{options} can have the following field names. If a field
c8daadf7543b publish.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 23548
diff changeset
93 ## name is not specified, the default value is used:
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
94 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
95 ## @itemize @bullet
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
96 ## @item
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
97 ## @samp{format} --- Output format of the published script file, one of
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
98 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
99 ## @samp{html} (default), @samp{doc}, @samp{latex}, @samp{ppt},
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
100 ## @samp{pdf}, or @samp{xml}.
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
101 ##
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
102 ## The output formats @samp{doc}, @samp{ppt}, and @samp{xml} are not currently
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
103 ## supported. To generate a @samp{doc} report, open a generated @samp{html}
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
104 ## report with your office suite.
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
105 ##
23188
e2e182a8e699 Allow custom output generators for code publishing.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23086
diff changeset
106 ## In Octave custom formats are supported by implementing all callback
e2e182a8e699 Allow custom output generators for code publishing.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23086
diff changeset
107 ## subfunctions in a function file named
e2e182a8e699 Allow custom output generators for code publishing.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23086
diff changeset
108 ## @samp{__publish_<custom format>_output__.m}. To obtain a template for the
e2e182a8e699 Allow custom output generators for code publishing.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23086
diff changeset
109 ## HTML format type:
e2e182a8e699 Allow custom output generators for code publishing.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23086
diff changeset
110 ##
e2e182a8e699 Allow custom output generators for code publishing.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23086
diff changeset
111 ## @example
e2e182a8e699 Allow custom output generators for code publishing.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23086
diff changeset
112 ## @group
e2e182a8e699 Allow custom output generators for code publishing.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23086
diff changeset
113 ## edit (fullfile (fileparts (which ("publish")), ...
e2e182a8e699 Allow custom output generators for code publishing.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23086
diff changeset
114 ## "private", "__publish_html_output__.m"))
e2e182a8e699 Allow custom output generators for code publishing.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23086
diff changeset
115 ## @end group
e2e182a8e699 Allow custom output generators for code publishing.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23086
diff changeset
116 ## @end example
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
117 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
118 ## @item
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
119 ## @samp{outputDir} --- Full path of the directory where the generated report
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
120 ## will be located. If no directory is given, the report is generated in a
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
121 ## subdirectory @file{html} relative to the current working directory.
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
122 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
123 ## @item
22299
9fc91bb2aec3 doc: grammarcheck documentation for 4.2 release.
Rik <rik@octave.org>
parents: 22157
diff changeset
124 ## @samp{stylesheet} --- Not supported, only for @sc{matlab} compatibility.
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
125 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
126 ## @item
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
127 ## @samp{createThumbnail} --- Not supported, only for @sc{matlab}
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
128 ## compatibility.
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
129 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
130 ## @item
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
131 ## @samp{figureSnapMethod} --- Not supported, only for @sc{matlab}
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
132 ## compatibility.
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
133 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
134 ## @item
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
135 ## @samp{imageFormat} --- Desired format for any images produced while
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
136 ## evaluating the code. The allowed image formats depend on the output format:
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
137 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
138 ## @itemize @bullet
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
139 ## @item @samp{html}, @samp{xml} --- @samp{png} (default), any image format
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
140 ## supported by Octave
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
141 ##
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
142 ## @item @samp{latex} --- @samp{epsc2} (default), any image format supported by
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
143 ## Octave
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
144 ##
22299
9fc91bb2aec3 doc: grammarcheck documentation for 4.2 release.
Rik <rik@octave.org>
parents: 22157
diff changeset
145 ## @item @samp{pdf} --- @samp{jpg} (default) or @samp{bmp}, note @sc{matlab}
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
146 ## uses @samp{bmp} as default
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
147 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
148 ## @item @samp{doc} or @samp{ppt} --- @samp{png} (default), @samp{jpg},
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
149 ## @samp{bmp}, or @samp{tiff}
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
150 ## @end itemize
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
151 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
152 ## @item
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
153 ## @samp{maxWidth} and @samp{maxHeight} --- Maximum width (height) of the
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
154 ## produced images in pixels. An empty value means no restriction. Both
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
155 ## values must be set in order for the option to work properly.
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
156 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
157 ## @samp{[]} (default), integer value @geq{} 0
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
158 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
159 ## @item
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
160 ## @samp{useNewFigure} --- Use a new figure window for figures created by the
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
161 ## evaluated code. This avoids side effects with already opened figure
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
162 ## windows.
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
163 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
164 ## @samp{true} (default) or @samp{false}
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
165 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
166 ## @item
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
167 ## @samp{evalCode} --- Evaluate code of the Octave source file
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
168 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
169 ## @samp{true} (default) or @samp{false}
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
170 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
171 ## @item
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
172 ## @samp{catchError} --- Catch errors while evaluating code and continue
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
173 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
174 ## @samp{true} (default) or @samp{false}
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
175 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
176 ## @item
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
177 ## @samp{codeToEvaluate} --- Octave commands that should be evaluated prior to
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
178 ## publishing the script file. These Octave commands do not appear in the
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
179 ## generated report.
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
180 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
181 ## @item
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
182 ## @samp{maxOutputLines} --- Maximum number of output lines from code
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
183 ## evaluation which are included in output.
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
184 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
185 ## @samp{Inf} (default) or integer value > 0
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
186 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
187 ## @item
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
188 ## @samp{showCode} --- Show the evaluated Octave commands in the generated
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
189 ## report
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
190 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
191 ## @samp{true} (default) or @samp{false}
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
192 ## @end itemize
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
193 ##
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
194 ## The option output @var{output_file} is a string with path and file name
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
195 ## of the generated report.
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
196 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
197 ## @seealso{grabcode}
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
198 ## @end deftypefn
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
199
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
200 function output_file = publish (file, varargin)
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
201
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
202 if (nargin < 1)
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
203 print_usage ();
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
204 endif
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
205
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
206 if (exist (file, "file") != 2)
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
207 error ("publish: FILE does not exist");
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
208 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
209
22384
ac45255ccd2c minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22330
diff changeset
210 ## Check file to be in Octave's load path
ac45255ccd2c minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22330
diff changeset
211 [file_path, file_name, file_ext] = fileparts (file);
ac45255ccd2c minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22330
diff changeset
212 if (isempty (file_path))
28892
3cac3ceb9629 maint: Use coding style with parentheses after function name to distinguish from a variable.
Rik <rik@octave.org>
parents: 27923
diff changeset
213 file_path = pwd ();
22384
ac45255ccd2c minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22330
diff changeset
214 endif
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
215 if (exist ([file_name, file_ext]) != 2)
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
216 error (["publish: " file " is not in the load path"]);
22384
ac45255ccd2c minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22330
diff changeset
217 endif
ac45255ccd2c minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22330
diff changeset
218
23549
c8daadf7543b publish.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 23548
diff changeset
219 ## Check file extension and that file is an Octave script
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
220 file_info = __which__ (file_name);
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
221 if (! strcmp (file_ext, ".m") || ! strcmp (file_info.type, "script"))
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
222 error ("publish: only script files can be published");
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
223 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
224
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
225 ## Check file to be parsable
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
226 __parse_file__ (file);
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
227
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
228 ## Get structure with necessary options
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
229 options = struct ();
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
230 if (numel (varargin) == 1)
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
231 ## Call: publish (file, format)
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
232 if (ischar (varargin{1}))
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
233 options.format = varargin{1};
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
234 ## Call: publish (file, options)
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
235 elseif (isstruct (varargin{1}))
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
236 options = varargin{1};
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
237 else
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
238 error ("publish: second argument must be OUTPUT_FORMAT or OPTIONS");
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
239 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
240 ## Call: publish (file, Name1, Value1, Name2, Value2, ...)
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
241 elseif (rem (numel (varargin), 2) == 0
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
242 && all (cellfun (@ischar, varargin(1:2:end))))
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
243 options = cell2struct (varargin(2:2:end), varargin(1:2:end), 2);
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
244 else
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
245 error ("publish: invalid arguments");
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
246 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
247
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
248 ## Validate options struct
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
249
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
250 ## Options for the output
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
251 if (! isfield (options, "format"))
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
252 options.format = "html";
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
253 else
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
254 ## FIXME: Implement remaining formats
23188
e2e182a8e699 Allow custom output generators for code publishing.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23086
diff changeset
255 if (any (strcmpi (options.format, {"doc", "ppt", "xml"})))
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
256 error ('publish: Output format "%s" is not yet supported',
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
257 options.format);
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
258 endif
23188
e2e182a8e699 Allow custom output generators for code publishing.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23086
diff changeset
259 ## Supported or custom output format
e2e182a8e699 Allow custom output generators for code publishing.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23086
diff changeset
260 supported_formats = {"html", "doc", "latex", "ppt", "xml", "pdf"};
e2e182a8e699 Allow custom output generators for code publishing.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23086
diff changeset
261 if (! any (strcmpi (options.format, supported_formats)))
23549
c8daadf7543b publish.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 23548
diff changeset
262 ## Check existence of custom formatter
23188
e2e182a8e699 Allow custom output generators for code publishing.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23086
diff changeset
263 custom_formatter = ["__publish_", options.format, "_output__"];
e2e182a8e699 Allow custom output generators for code publishing.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23086
diff changeset
264 if (! exist (custom_formatter, "file"))
e2e182a8e699 Allow custom output generators for code publishing.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23086
diff changeset
265 error (['publish: Custom output format "%s" requires the ', ...
23549
c8daadf7543b publish.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 23548
diff changeset
266 "formatter function:\n\n\t%s\n\n\t", ...
c8daadf7543b publish.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 23548
diff changeset
267 'See "help publish" for more information.'],
23188
e2e182a8e699 Allow custom output generators for code publishing.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23086
diff changeset
268 options.format, custom_formatter);
e2e182a8e699 Allow custom output generators for code publishing.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23086
diff changeset
269 endif
e2e182a8e699 Allow custom output generators for code publishing.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23086
diff changeset
270 else
e2e182a8e699 Allow custom output generators for code publishing.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23086
diff changeset
271 options.format = validatestring (options.format, supported_formats);
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
272 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
273 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
274
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
275 if (! isfield (options, "outputDir"))
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
276 ## Matlab R2016a doc says default is "", but specifies to create a
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
277 ## subdirectory named "html" in the current working directory.
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
278 options.outputDir = fullfile (file_path, "html");
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
279 elseif (! ischar (options.outputDir))
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
280 error ("publish: OUTPUTDIR must be a string");
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
281 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
282
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
283 if (! isfield (options, "stylesheet"))
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
284 options.stylesheet = "";
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
285 elseif (! ischar (options.stylesheet))
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
286 error ("publish: STYLESHEET must be a string");
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
287 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
288
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
289 ## Options for the figures
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
290 if (! isfield (options, "createThumbnail"))
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
291 options.createThumbnail = true;
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
292 elseif (! isscalar (options.createThumbnail)
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
293 || ! isreal (options.createThumbnail))
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
294 error ("publish: CREATETHUMBNAIL must be TRUE or FALSE");
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
295 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
296
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
297 if (! isfield (options, "figureSnapMethod"))
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
298 options.figureSnapMethod = "entireGUIWindow";
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
299 else
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
300 options.figureSnapMethod = validatestring (options.figureSnapMethod, ...
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
301 {"entireGUIWindow", "print", "getframe", "entireFigureWindow"});
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
302 ## FIXME: implement other SnapMethods
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
303 warning ("publish: option FIGURESNAPMETHOD currently not supported");
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
304 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
305
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
306 if (! isfield (options, "imageFormat"))
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
307 switch (options.format)
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
308 case "latex"
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
309 options.imageFormat = "epsc2";
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
310 case "pdf"
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
311 ## Note: Matlab R2016a uses bmp as default
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
312 options.imageFormat = "jpg";
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
313 otherwise
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
314 options.imageFormat = "png";
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
315 endswitch
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
316 elseif (! ischar (options.imageFormat))
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
317 error ("publish: IMAGEFORMAT must be a string");
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
318 else
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
319 ## Check valid imageFormat for chosen format
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
320 ## html, latex, and xml accept any imageFormat
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
321 switch (options.format)
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
322 case {"doc", "ppt"}
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
323 options.imageFormat = validatestring (options.imageFormat,
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
324 {"png", "jpg", "bmp", "tiff"});
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
325 case "pdf"
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
326 options.imageFormat = validatestring (options.imageFormat,
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
327 {"bmp", "jpg"});
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
328 endswitch
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
329 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
330
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
331 if (! isfield (options, "maxHeight"))
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
332 options.maxHeight = [];
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
333 elseif (! isscalar (options.maxHeight) || options.maxHeight < 1)
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
334 error ("publish: MAXHEIGHT must be a positive integer");
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
335 else
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
336 options.maxHeight = uint64 (options.maxHeight);
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
337 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
338
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
339 if (! isfield (options, "maxWidth"))
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
340 options.maxWidth = [];
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
341 elseif (! isscalar (options.maxWidth) || options.maxWidth < 1)
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
342 error ("publish: MAXWIDTH must be a positive integer");
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
343 else
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
344 options.maxWidth = uint64 (options.maxWidth);
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
345 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
346
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
347 if (! isfield (options, "useNewFigure"))
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
348 options.useNewFigure = true;
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
349 elseif (! isscalar (options.useNewFigure) || ! isreal (options.useNewFigure))
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
350 error ("publish: USENEWFIGURE must be TRUE or FALSE");
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
351 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
352
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
353 ## Options for the code
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
354 if (! isfield (options, "evalCode"))
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
355 options.evalCode = true;
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
356 elseif (! isscalar (options.evalCode) || ! isreal (options.evalCode))
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
357 error ("publish: EVALCODE must be TRUE or FALSE");
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
358 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
359
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
360 if (! isfield (options, "catchError"))
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
361 options.catchError = true;
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
362 elseif (! isscalar (options.catchError) || ! isreal (options.catchError))
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
363 error ("publish: CATCHERROR must be TRUE or FALSE");
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
364 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
365
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
366 if (! isfield (options, "codeToEvaluate"))
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
367 options.codeToEvaluate = "";
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
368 elseif (! ischar (options.codeToEvaluate))
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
369 error ("publish: CODETOEVALUTE must be a string");
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
370 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
371
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
372 if (! isfield (options, "maxOutputLines"))
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
373 options.maxOutputLines = Inf;
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
374 elseif (! isscalar (options.maxOutputLines) || options.maxOutputLines < 0)
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
375 error ("publish: MAXOUTPUTLINES must be an integer >= 0");
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
376 else
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
377 options.maxOutputLines = uint64 (options.maxOutputLines);
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
378 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
379
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
380 if (! isfield (options, "showCode"))
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
381 options.showCode = true;
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
382 elseif (! isscalar (options.showCode) || ! isreal (options.showCode))
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
383 error ("publish: SHOWCODE must be TRUE or FALSE");
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
384 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
385
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
386 doc.title = "";
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
387 doc.intro = "";
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
388 doc.body = cell ();
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
389 doc.m_source = deblank (read_file_to_cellstr (file));
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
390 doc.m_source_file_name = file;
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
391
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
392 ## Split code and paragraphs, find formatting
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
393 doc = parse_m_source (doc);
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
394
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
395 ## Create output directory
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
396 [status, msg] = mkdir (options.outputDir);
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
397 if (status != 1)
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
398 error ("publish: cannot create output directory: %s", msg);
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
399 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
400
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
401 if (options.evalCode)
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
402 doc = eval_code (doc, options);
25749
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
403 eval_context ("clear");
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
404 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
405
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
406 output_file = create_output (doc, options);
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
407
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
408 endfunction
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
409
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
410
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
411 function doc = parse_m_source (doc)
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
412 ## PARSE_M_SOURCE First parsing level
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
413 ## This function extracts the overall structure (paragraphs and code
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
414 ## sections) given in doc.m_source.
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
415 ##
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
416 ## The result is written to doc.body, which then contains a cell
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
417 ## vector of structs, either of
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
418 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
419 ## a) {struct ("type", "code", ...
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
420 ## "lines", [a, b], ...
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
421 ## "output", [])}
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
422 ## b) {struct ("type", "section", ...
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
423 ## "content", title_str)}
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
424 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
425 ## Second parsing level is invoked for the paragraph contents, resulting
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
426 ## in more elements for doc.body.
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
427
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
428 if (isempty (doc.m_source))
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
429 return; # Nothing to parse
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
430 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
431
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
432 ## Parsing helper functions
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
433 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
434 ## Checks line to have N "%" or "#" lines
23549
c8daadf7543b publish.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 23548
diff changeset
435 ## followed either by a space or end of string
25698
ac386820f2b6 Return true when strncmp matches, but number of characters exceeds strlen (bug #54373)
Rik <rik@octave.org>
parents: 25054
diff changeset
436 function r = is_publish_markup (cstr, N)
ac386820f2b6 Return true when strncmp matches, but number of characters exceeds strlen (bug #54373)
Rik <rik@octave.org>
parents: 25054
diff changeset
437 str = char (cstr);
ac386820f2b6 Return true when strncmp matches, but number of characters exceeds strlen (bug #54373)
Rik <rik@octave.org>
parents: 25054
diff changeset
438
ac386820f2b6 Return true when strncmp matches, but number of characters exceeds strlen (bug #54373)
Rik <rik@octave.org>
parents: 25054
diff changeset
439 r = any (strncmp (str, {"%%%", "##"}, N));
ac386820f2b6 Return true when strncmp matches, but number of characters exceeds strlen (bug #54373)
Rik <rik@octave.org>
parents: 25054
diff changeset
440 if (r)
ac386820f2b6 Return true when strncmp matches, but number of characters exceeds strlen (bug #54373)
Rik <rik@octave.org>
parents: 25054
diff changeset
441 len = length (str);
ac386820f2b6 Return true when strncmp matches, but number of characters exceeds strlen (bug #54373)
Rik <rik@octave.org>
parents: 25054
diff changeset
442 if (len == N)
ac386820f2b6 Return true when strncmp matches, but number of characters exceeds strlen (bug #54373)
Rik <rik@octave.org>
parents: 25054
diff changeset
443 r = true;
ac386820f2b6 Return true when strncmp matches, but number of characters exceeds strlen (bug #54373)
Rik <rik@octave.org>
parents: 25054
diff changeset
444 elseif (len > N && str(N+1) == " ")
ac386820f2b6 Return true when strncmp matches, but number of characters exceeds strlen (bug #54373)
Rik <rik@octave.org>
parents: 25054
diff changeset
445 r = true;
ac386820f2b6 Return true when strncmp matches, but number of characters exceeds strlen (bug #54373)
Rik <rik@octave.org>
parents: 25054
diff changeset
446 else
ac386820f2b6 Return true when strncmp matches, but number of characters exceeds strlen (bug #54373)
Rik <rik@octave.org>
parents: 25054
diff changeset
447 r = false;
ac386820f2b6 Return true when strncmp matches, but number of characters exceeds strlen (bug #54373)
Rik <rik@octave.org>
parents: 25054
diff changeset
448 endif
ac386820f2b6 Return true when strncmp matches, but number of characters exceeds strlen (bug #54373)
Rik <rik@octave.org>
parents: 25054
diff changeset
449 endif
ac386820f2b6 Return true when strncmp matches, but number of characters exceeds strlen (bug #54373)
Rik <rik@octave.org>
parents: 25054
diff changeset
450
ac386820f2b6 Return true when strncmp matches, but number of characters exceeds strlen (bug #54373)
Rik <rik@octave.org>
parents: 25054
diff changeset
451 return;
ac386820f2b6 Return true when strncmp matches, but number of characters exceeds strlen (bug #54373)
Rik <rik@octave.org>
parents: 25054
diff changeset
452 endfunction
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
453 ## Checks line of cellstring to be a paragraph line
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
454 is_paragraph = @(cstr) is_publish_markup (cstr, 1);
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
455 ## Checks line of cellstring to be a section headline
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
456 is_head = @(cstr) is_publish_markup (cstr, 2);
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
457 ## Checks line of cellstring to be a headline without section break, using
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
458 ## the cell mode in Matlab (for compatibility), just treated as a new head.
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
459 is_no_break_head = @(cstr) is_publish_markup (cstr, 3);
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
460
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
461 ## Find the indices of paragraphs starting with "%%", "##", or "%%%"
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
462 par_start_idx = find (cellfun (is_head, doc.m_source)
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
463 | cellfun (is_no_break_head, doc.m_source));
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
464
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
465 ## If the whole document is code
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
466 if (isempty (par_start_idx))
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
467 doc.body{end+1}.type = "code";
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
468 doc.body{end}.content = strtrim (strjoin (doc.m_source, "\n"));
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
469 doc.body{end}.lines = [1, length(doc.m_source)];
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
470 doc.body{end}.output = {};
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
471 return;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
472 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
473
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
474 ## Determine continuous range of paragraphs
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
475 par_end_idx = [par_start_idx(2:end) - 1, length(doc.m_source)];
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
476 for i = 1:numel (par_end_idx)
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
477 idx = find (! cellfun (is_paragraph,
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
478 doc.m_source(par_start_idx(i) + 1:par_end_idx(i))));
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
479 if (! isempty (idx))
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
480 par_end_idx(i) = par_start_idx(i) + idx(1) - 1;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
481 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
482 endfor
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
483 ## Code sections between paragraphs
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
484 code_start_idx = par_end_idx(1:end-1) + 1;
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
485 code_end_idx = par_start_idx(2:end) - 1;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
486 ## Code at the beginning?
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
487 if (par_start_idx(1) > 1)
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
488 code_start_idx = [1, code_start_idx];
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
489 code_end_idx = [par_start_idx(1) - 1, code_end_idx];
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
490 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
491 ## Code at the end?
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
492 if (par_end_idx(end) < length (doc.m_source))
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
493 code_start_idx = [code_start_idx, par_end_idx(end) + 1];
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
494 code_end_idx = [code_end_idx, length(doc.m_source)];
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
495 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
496 ## Remove overlaps
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
497 idx = code_start_idx > code_end_idx;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
498 code_start_idx(idx) = [];
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
499 code_end_idx(idx) = [];
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
500 ## Remove empty code blocks
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
501 idx = [];
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
502 for i = 1:numel (code_start_idx)
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
503 if (all (cellfun (@(cstr) isempty (char (cstr)),
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
504 doc.m_source(code_start_idx(i):code_end_idx(i)))))
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
505 idx = [idx, i];
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
506 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
507 endfor
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
508 code_start_idx(idx) = [];
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
509 code_end_idx(idx) = [];
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
510
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
511 ## Try to find a document title and introduction text
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
512 ## 1. First paragraph must start in first line
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
513 ## 2. Second paragraph must start before any code
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
514 title_offset = 0;
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
515 if (is_head (doc.m_source{1})
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
516 && ! isempty (par_start_idx)
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
517 && par_start_idx(1) == 1
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
518 && (isempty (code_start_idx)
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
519 || (length (par_start_idx) > 1
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
520 && par_start_idx(2) < code_start_idx(1))))
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
521 doc.title = doc.m_source{1};
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
522 doc.title = doc.title(4:end);
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
523 content = doc.m_source(2:par_end_idx(1));
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
524 ## Strip leading "# "
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
525 content = cellfun (@(c) cellstr (c(3:end)), content);
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
526 doc.intro = parse_paragraph_content (content);
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
527 title_offset = 1;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
528 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
529
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
530 ## Add non-empty paragraphs and code to doc
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
531 j = 1;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
532 i = (1 + title_offset);
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
533 while (i <= numel (par_start_idx) || j <= numel (code_start_idx))
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
534 ## Add code while there is code left
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
535 ## and code is before the next paragraph or there are no more paragraphs
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
536 while (j <= numel (code_start_idx)
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
537 && (i > numel (par_start_idx)
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
538 || par_start_idx(i) > code_start_idx(j)))
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
539 doc.body{end+1}.type = "code";
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
540 lines = [code_start_idx(j), code_end_idx(j)];
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
541 doc.body{end}.content = ...
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
542 strtrim (strjoin (doc.m_source(lines(1):lines(2)), "\n"));
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
543 doc.body{end}.lines = lines;
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
544 doc.body{end}.output = {};
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
545 j++;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
546 endwhile
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
547
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
548 if (i <= numel (par_start_idx))
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
549 type_str = "section";
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
550 title_str = doc.m_source{par_start_idx(i)};
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
551 if (is_head (doc.m_source(par_start_idx(i))))
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
552 title_str = title_str(4:end);
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
553 else
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
554 title_str = title_str(5:end);
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
555 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
556 ## Append, if paragraph title is given
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
557 if (! isempty (title_str))
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
558 doc.body{end+1}.type = type_str;
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
559 doc.body{end}.content = title_str;
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
560 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
561
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
562 content = doc.m_source(par_start_idx(i) + 1:par_end_idx(i));
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
563 ## Strip leading "# "
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
564 content = cellfun (@(c) cellstr (c(3:end)), content);
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
565 doc.body = [doc.body, parse_paragraph_content(content)];
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
566 i++;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
567 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
568 endwhile
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
569
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
570 endfunction
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
571
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
572
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
573 function p_content = parse_paragraph_content (content)
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
574 ## PARSE_PARAGRAPH_CONTENT second parsing level
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
575 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
576 ## Parses the content of a paragraph (without potential title) and
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
577 ## returns a cell vector of structs, that can be appended to doc.body,
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
578 ## either of
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
579 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
580 ## a) {struct ("type", "preformatted_code", ...
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
581 ## "content", code_str)}
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
582 ## b) {struct ("type", "preformatted_text", ...
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
583 ## "content", text_str)}
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
584 ## c) {struct ("type", "bulleted_list", ...
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
585 ## "content", {"item1", "item2", ..})}
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
586 ## d) {struct ("type", "numbered_list", ...
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
587 ## "content", {"item1", "item2", ..})}
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
588 ## e) {struct ("type", "include", ...
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
589 ## "content", file_str)}
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
590 ## f) {struct ("type", "graphic", ...
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
591 ## "content", file_str)}
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
592 ## g) {struct ("type", "html", ...
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
593 ## "content", html_str)}
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
594 ## h) {struct ("type", "latex", ...
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
595 ## "content", latex_str)}
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
596 ## i) {struct ("type", "text", ...
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
597 ## "content", text_str)}
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
598 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
599 ## Option i) might contain:
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
600 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
601 ## * Italic "_", bold "*", and monospaced "|" text
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
602 ## * Inline "$" and block "$$" LaTeX math
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
603 ## * Links
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
604 ## * Trademark symbols
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
605
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
606 p_content = cell ();
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
607
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
608 if (isempty (content))
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
609 return;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
610 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
611
23926
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
612 ## Extract <html> and <latex> blocks recursively.
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
613 content_str = strjoin (content, "\n");
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
614 tags = {"html", "latex"};
28912
0de38a6ef693 maint: Use Octave convention of space after function name in scripts dir.
Rik <rik@octave.org>
parents: 28896
diff changeset
615 for i = 1:length (tags)
23926
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
616 tok = regexp (content_str, ...
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
617 ['(.*?)(^|\n\n)(<', tags{i}, '>)\n(.*?)\n(<\/', ...
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
618 tags{i}, '>)($|\n\n)(.*)'], "tokens", "once");
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
619 if (! isempty (tok))
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
620 ## If there was some text before that block --> recursion
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
621 if (! strcmpi (tok{1}, ["<", tags{i}, ">"]))
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
622 p_content = parse_paragraph_content (strsplit (tok{1}, "\n"));
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
623 tok(1:2) = [];
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
624 endif
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
625 ## Extract the block content
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
626 p_content{end+1}.type = tags{i};
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
627 p_content{end}.content = tok{2};
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
628 ## If there was some text after that block --> recursion
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
629 if (length (tok) == 5)
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
630 p_content = [p_content, ...
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
631 parse_paragraph_content(strsplit (tok{5}, "\n"))];
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
632 endif
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
633 return;
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
634 endif
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
635 endfor
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
636
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
637 ## Split into blocks separated by empty lines
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
638 idx = [0, find(cellfun (@isempty, content)), length(content) + 1];
23926
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
639
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
640 ## For each block
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
641 for i = find (diff (idx) > 1)
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
642 block = content(idx(i) + 1:idx(i+1) - 1);
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
643
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
644 ## Octave code (two leading spaces)
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
645 if (all (cellfun (@(c) strncmp (char (c), " ", 2), block)))
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
646 p_content{end+1}.type = "preformatted_code";
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
647 block = cellfun (@(c) cellstr (c(3:end)), block);
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
648 p_content{end}.content = strjoin (block, "\n");
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
649 continue;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
650 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
651
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
652 ## Preformatted text (one leading space)
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
653 if (all (cellfun (@(c) strncmp (char (c), " ", 1), block)))
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
654 p_content{end+1}.type = "preformatted_text";
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
655 block = cellfun (@(c) cellstr (c(2:end)), block);
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
656 p_content{end}.content = strjoin (block, "\n");
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
657 continue;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
658 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
659
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
660 ## Bulleted list starts with "* "
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
661 if (strncmp (block{1}, "* ", 2))
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
662 p_content{end+1}.type = "bulleted_list";
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
663 tmpstr = strjoin (block, "\n");
23549
c8daadf7543b publish.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 23548
diff changeset
664 ## Remove first "* "
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
665 tmpstr = tmpstr(3:end);
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
666 ## Split items
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
667 p_content{end}.content = strsplit (tmpstr, "\n* ");
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
668 continue;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
669 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
670
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
671 ## Numbered list starts with "# "
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
672 if (strncmp (block{1}, "# ", 2))
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
673 p_content{end+1}.type = "numbered_list";
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
674 tmpstr = strjoin (block, "\n");
23549
c8daadf7543b publish.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 23548
diff changeset
675 ## Remove first "# "
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
676 tmpstr = tmpstr(3:end);
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
677 ## Split items
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
678 p_content{end}.content = strsplit (tmpstr, "\n# ");
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
679 continue;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
680 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
681
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
682 ## Include <include>fname.m</include>
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
683 if (! isempty (fname = regexpi (strjoin (block, ""),
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
684 '^<include>(.*)</include>$',
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
685 "tokens")))
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
686 ## Includes result in preformatted code
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
687 p_content{end+1}.type = "preformatted_code";
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
688 include_code = read_file_to_cellstr (strtrim ((fname{1}){1}));
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
689 p_content{end}.content = strjoin (include_code, "\n");
22157
c5842206aaea maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents: 22113
diff changeset
690
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
691 continue;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
692 endif
22157
c5842206aaea maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents: 22113
diff changeset
693
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
694 ## Graphic <<myGraphic.png>>
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
695 if (! isempty (fname = regexpi (strjoin (block, ""),
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
696 '^<<(.*)>>$',
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
697 "tokens")))
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
698 p_content{end+1}.type = "graphic";
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
699 p_content{end}.content = strtrim ((fname{1}){1});
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
700 continue;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
701 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
702
23926
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
703 ## Now it can be only normal text or markups belonging to normal text
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
704 ## that are handled while output generation:
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
705 ##
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
706 ## * Italic "_", bold "*", and monospaced "|" text
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
707 ## * Inline "$" and block "$$" LaTeX math
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
708 ## * Links
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
709 ## * Trademark symbols
23964
1a0cbb573a67 publish: Improve escaping of special characters in output (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23926
diff changeset
710 p_content{end+1}.type = "text";
1a0cbb573a67 publish: Improve escaping of special characters in output (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23926
diff changeset
711 p_content{end}.content = strjoin (block, "\n");
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
712 endfor
28945
6e460773bdda maint: Use newlines after "function" and before "endfunction" for clarity.
Rik <rik@octave.org>
parents: 28912
diff changeset
713
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
714 endfunction
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
715
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
716
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
717 function m_source = read_file_to_cellstr (file)
23549
c8daadf7543b publish.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 23548
diff changeset
718 ## READ_FILE_TO_CELLSTR reads a given file line by line into a cellstring
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
719
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
720 fid = fopen (file, "r");
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
721 i = 0;
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
722 do
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
723 m_source{++i} = fgetl (fid);
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
724 until (! ischar (m_source{i}))
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
725 fclose (fid);
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
726 m_source = m_source(1:end-1); # No EOL
28945
6e460773bdda maint: Use newlines after "function" and before "endfunction" for clarity.
Rik <rik@octave.org>
parents: 28912
diff changeset
727
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
728 endfunction
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
729
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
730
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
731 function ofile = create_output (doc, options)
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
732 ## CREATE_OUTPUT creates the desired output file
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
733
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
734 formatter = [];
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
735 switch (options.format)
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
736 case "html"
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
737 formatter = @__publish_html_output__;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
738 case {"latex", "pdf"}
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
739 formatter = @__publish_latex_output__;
23188
e2e182a8e699 Allow custom output generators for code publishing.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23086
diff changeset
740 otherwise
e2e182a8e699 Allow custom output generators for code publishing.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23086
diff changeset
741 ## Custom formatter
e2e182a8e699 Allow custom output generators for code publishing.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23086
diff changeset
742 formatter = eval (["@__publish_", options.format, "_output__"]);
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
743 endswitch
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
744
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
745 ## Use title, or if not given, the m-file name
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
746 title_str = doc.title;
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
747 if (isempty (title_str))
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
748 [~, title_str] = fileparts (doc.m_source_file_name);
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
749 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
750
23964
1a0cbb573a67 publish: Improve escaping of special characters in output (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23926
diff changeset
751 content = formatter ("header",
1a0cbb573a67 publish: Improve escaping of special characters in output (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23926
diff changeset
752 formatter ("escape_special_chars", title_str),
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
753 format_output (doc.intro, formatter, options),
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
754 get_toc (doc.body, formatter));
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
755 content = [content, format_output(doc.body, formatter, options)];
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
756 content = [content, formatter("footer", strjoin (doc.m_source, "\n"))];
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
757
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
758 ## Write file
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
759 [~, ofile] = fileparts (doc.m_source_file_name);
23188
e2e182a8e699 Allow custom output generators for code publishing.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23086
diff changeset
760 ofile_name = [ofile, formatter("output_file_extension")];
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
761 ofile = fullfile (options.outputDir, ofile_name);
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
762 fid = fopen (ofile, "w");
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
763 fputs (fid, content);
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
764 fclose (fid);
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
765
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
766 ## Compile LaTeX, if compiler found
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
767 if (strcmp (options.format, "pdf"))
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
768 status = system ("pdflatex --version");
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
769 if (status == 0)
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
770 for i = 1:2
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
771 ## FIXME: This looks very likely to break when switching OS
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
772 system (["cd ", options.outputDir," && pdflatex ", ofile_name]);
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
773 endfor
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
774 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
775 endif
28945
6e460773bdda maint: Use newlines after "function" and before "endfunction" for clarity.
Rik <rik@octave.org>
parents: 28912
diff changeset
776
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
777 endfunction
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
778
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
779
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
780 function toc_cstr = get_toc (cstr, formatter)
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
781 ## GET_TOC extracts the table of contents from a cellstring (e.g., doc.body)
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
782 ## with each section headline as a cell in a returned cellstring.
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
783
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
784 toc_cstr = cell ();
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
785 for i = 1:numel (cstr)
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
786 if (strcmp (cstr{i}.type, "section"))
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
787 toc_cstr{end+1} = format_text (cstr{i}.content, formatter);
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
788 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
789 endfor
28945
6e460773bdda maint: Use newlines after "function" and before "endfunction" for clarity.
Rik <rik@octave.org>
parents: 28912
diff changeset
790
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
791 endfunction
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
792
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
793
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
794 function str = format_output (cstr, formatter, options)
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
795 ## FORMAT_OUTPUT steps through all blocks (doc.intro or doc.body) in cstr and
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
796 ## produces a single result string with the source code in the desired output
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
797 ## format.
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
798 ##
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
799 ## formatter has the only knowledge how to enforce the target format
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
800 ## and produces for each block the necessary target format source string.
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
801
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
802 str = "";
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
803 for i = 1:numel (cstr)
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
804 switch (cstr{i}.type)
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
805 case "code"
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
806 if (options.showCode)
23964
1a0cbb573a67 publish: Improve escaping of special characters in output (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23926
diff changeset
807 str = [str, formatter("code", cstr{i}.content)];
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
808 endif
23191
5f79bb3fdd28 * scripts/general/publish.m: Avoid creation of empty ouput blocks.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23188
diff changeset
809 if ((options.evalCode) && (! isempty (cstr{i}.output)))
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
810 str = [str, formatter("code_output", cstr{i}.output)];
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
811 endif
22384
ac45255ccd2c minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22330
diff changeset
812 case {"text", "section"}
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
813 str = [str, formatter(cstr{i}.type, ...
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
814 format_text (cstr{i}.content, formatter))];
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
815 case {"bulleted_list", "numbered_list"}
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
816 items = cellfun (@(str) format_text(str, formatter), ...
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
817 cstr{i}.content, "UniformOutput", false);
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
818 str = [str, formatter(cstr{i}.type, items)];
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
819 otherwise
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
820 str = [str, formatter(cstr{i}.type, cstr{i}.content)];
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
821 endswitch
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
822 endfor
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
823
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
824 endfunction
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
825
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
826
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
827 function str = format_text (str, formatter)
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
828 ## FORMAT_TEXT formats inline formats in strings.
23923
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
829 ## These are: links, block/inline math, bold, italic, monospaced, (TM), (R)
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
830
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
831 ## Helper to clarify the following regular expressions. It is suitable for
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
832 ## inline formatting, that is delimited literally at start and end by
27216
823b4bcf79fc unless necessary for formatting or code, use ' instead of `
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
833 ## 'delim'. 'term' is an indicating character for the end delimiter.
23923
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
834 ##
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
835 ## Best explained by example ('^' start and '$' end of input):
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
836 ##
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
837 ## Positive matches:
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
838 ##
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
839 ## ^*bold*$
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
840 ## ^*bold*.$
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
841 ## ^(*bold*)$
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
842 ## ^ *bold* $
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
843 ## ^Text *bold* text$
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
844 ## ^*bold text*$
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
845 ##
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
846 ## Negative matches:
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
847 ##
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
848 ## ^Text*bold*text$
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
849 ## ^*bold *$
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
850 ## ^* bold* $
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
851 ## ^*bold text *$
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
852 ##
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
853 regex_helper = @(delim, term) ['(^|(?<=\s)|(?=\W))', delim, ...
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
854 '(?!\s)[^', term, ']*(?<!\s)', delim, '($|(?=\s)|(?=\W))'];
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
855
22674
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
856 ## Regular expressions for the formats:
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
857 ##
23923
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
858 ## 1) Links "<http://www.someurl.com>"
27846
4075474fd9d0 fix URL parsing of `publish` (bug #57426).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 27216
diff changeset
859 ## 2) Links "<octave:Function SOME TEXT>"
4075474fd9d0 fix URL parsing of `publish` (bug #57426).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 27216
diff changeset
860 ## 3) Links "<http://www.someurl.com SOME TEXT>"
23923
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
861 ## 4) LaTeX block math "$$x^2$$"
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
862 ## 5) LaTeX inline math "$x^2$"
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
863 ## 6) Bold *text*
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
864 ## 7) Italic _text_
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
865 ## 8) Monospaced |text|
23964
1a0cbb573a67 publish: Improve escaping of special characters in output (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23926
diff changeset
866 ## 9) (TM) or (R)
22674
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
867 regexes = {'<\S{3,}[^\s<>]*>', ...
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
868 '<octave:[^\s<>]* *[^<>$]*>', ...
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
869 '<\S{3,}[^\s<>]* *[^<>$]*>', ...
23923
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
870 regex_helper('\$\$', '$'), ...
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
871 regex_helper('\$', '$'), ...
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
872 regex_helper('\*', '*'), ...
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
873 regex_helper('_', '_'), ...
23964
1a0cbb573a67 publish: Improve escaping of special characters in output (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23926
diff changeset
874 regex_helper('\|', '|'), ...
1a0cbb573a67 publish: Improve escaping of special characters in output (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23926
diff changeset
875 '\((TM|R)\)'};
22674
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
876
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
877 ## Function to escape some special characters for the GNU Octave manual,
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
878 ## see https://www.gnu.org/software/texinfo/manual/texinfo/html_node/HTML-Xref-Node-Name-Expansion.html
22674
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
879 texinfo_esc = @(str) strrep (strrep (str, "-", "_002d"), "_", "_005f");
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
880
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
881 ## Substitute all occurrences with placeholders
22674
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
882 placeholder_cstr = {};
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
883 plh = 0;
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
884 for i = 1:numel (regexes)
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
885 cstr = regexp (str, regexes{i}, "match");
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
886 for j = 1:numel (cstr)
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
887 plh += 1;
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
888 str = regexprep (str, regexes{i}, ["PUBLISHPLACEHOLDER" num2str(plh)],
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
889 "once");
22674
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
890 switch (i)
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
891 case 1
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
892 ## Links "<http://www.someurl.com>"
22674
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
893 url = cstr{j};
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
894 cstr{j} = formatter ("link", url(2:end-1), url(2:end-1));
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
895 case 2
27846
4075474fd9d0 fix URL parsing of `publish` (bug #57426).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 27216
diff changeset
896 ## Links "<octave:Function SOME TEXT>"
4075474fd9d0 fix URL parsing of `publish` (bug #57426).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 27216
diff changeset
897 idx = strfind (cstr{j}, " ")(1);
22674
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
898 url = cstr{j};
23549
c8daadf7543b publish.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 23548
diff changeset
899 url = texinfo_esc (url(9:idx-1));
23317
ef94844a3c12 * publish.m: Refer to the online manual of the current Octave version.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23220
diff changeset
900 v = version ();
ef94844a3c12 * publish.m: Refer to the online manual of the current Octave version.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23220
diff changeset
901 if (v(end) == '+')
ef94844a3c12 * publish.m: Refer to the online manual of the current Octave version.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23220
diff changeset
902 v = "interpreter";
ef94844a3c12 * publish.m: Refer to the online manual of the current Octave version.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23220
diff changeset
903 endif
ef94844a3c12 * publish.m: Refer to the online manual of the current Octave version.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23220
diff changeset
904 url = sprintf ( ...
ef94844a3c12 * publish.m: Refer to the online manual of the current Octave version.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23220
diff changeset
905 "https://www.gnu.org/software/octave/doc/%s/XREF%s.html", v, url);
22674
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
906 txt = cstr{j};
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
907 txt = format_text (txt(idx+1:end-1), formatter);
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
908 cstr{j} = formatter ("link", url, txt);
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
909 case 3
27846
4075474fd9d0 fix URL parsing of `publish` (bug #57426).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 27216
diff changeset
910 ## Links "<http://www.someurl.com SOME TEXT>"
4075474fd9d0 fix URL parsing of `publish` (bug #57426).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 27216
diff changeset
911 idx = strfind (cstr{j}, " ")(1);
22674
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
912 url = cstr{j};
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
913 url = url(2:idx-1);
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
914 txt = cstr{j};
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
915 txt = format_text (txt(idx+1:end-1), formatter);
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
916 cstr{j} = formatter ("link", url, txt);
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
917 case 4
23923
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
918 ## LaTeX block math "$$"
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
919 txt = cstr{j};
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
920 cstr{j} = formatter ("blockmath", txt(3:end-2));
22674
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
921 case 5
23923
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
922 ## LaTeX inline math "$"
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
923 txt = cstr{j};
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
924 cstr{j} = formatter ("inlinemath", txt(2:end-1));
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
925 case 6
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
926 ## Bold
22674
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
927 txt = cstr{j};
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
928 cstr{j} = formatter ("bold", format_text (txt(2:end-1), formatter));
23923
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
929 case 7
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
930 ## Italic
22674
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
931 txt = cstr{j};
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
932 cstr{j} = formatter ("italic", format_text (txt(2:end-1), formatter));
23923
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
933 case 8
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
934 ## Monospaced
22674
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
935 txt = cstr{j};
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
936 cstr{j} = formatter ("monospaced", format_text (txt(2:end-1), ...
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
937 formatter));
23964
1a0cbb573a67 publish: Improve escaping of special characters in output (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23926
diff changeset
938 case 9
1a0cbb573a67 publish: Improve escaping of special characters in output (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23926
diff changeset
939 ## (TM) or (R)
1a0cbb573a67 publish: Improve escaping of special characters in output (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23926
diff changeset
940 txt = cstr{j};
1a0cbb573a67 publish: Improve escaping of special characters in output (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23926
diff changeset
941 cstr{j} = formatter (txt(2:end-1));
22674
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
942 endswitch
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
943 endfor
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
944 placeholder_cstr = [placeholder_cstr, cstr];
22306
2cd1afd0f12f publish.m: prevent formatting of inline and block math.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22299
diff changeset
945 endfor
22674
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
946
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
947 ## Replace special symbols
23964
1a0cbb573a67 publish: Improve escaping of special characters in output (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23926
diff changeset
948 str = formatter ("escape_special_chars", str);
22674
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
949
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
950 ## Restore placeholders
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
951 for i = plh:-1:1
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
952 str = strrep (str, ["PUBLISHPLACEHOLDER" sprintf("%d", i)],
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
953 placeholder_cstr{i});
22674
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
954 endfor
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
955
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
956 endfunction
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
957
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
958
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
959 function doc = eval_code (doc, options)
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
960 ## EVAL_CODE Third level parsing
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
961 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
962 ## Generates the output of the script code and takes care of generated
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
963 ## figures.
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
964
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
965 ## Necessary as the code does not run interactively
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
966 page_screen_output (false, "local");
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
967
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
968 ## Remember previously opened figures
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
969 fig_ids = findall (0, "type", "figure");
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
970 [~, fig_name] = fileparts (doc.m_source_file_name);
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
971 fig_num = 1;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
972 fig_list = struct ();
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
973
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
974 ## Evaluate code, that does not appear in the output.
25749
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
975 eval_code_helper (options.codeToEvaluate);
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
976
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
977 ## Create a new figure, if there are existing plots
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
978 if (! isempty (fig_ids) && options.useNewFigure)
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
979 figure ();
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
980 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
981
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
982 for i = 1:numel (doc.body)
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
983 if (strcmp (doc.body{i}.type, "code"))
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
984 r = doc.body{i}.lines;
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
985 code_str = strjoin (doc.m_source(r(1):r(2)), "\n");
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
986 if (options.catchError)
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
987 try
25749
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
988 doc.body{i}.output = eval_code_helper (code_str);
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
989 catch err
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
990 doc.body{i}.output = cellstr (["error: ", err.message, ...
23549
c8daadf7543b publish.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 23548
diff changeset
991 "\n\tin:\n\n", code_str]);
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
992 end_try_catch
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
993 else
25749
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
994 doc.body{i}.output = eval_code_helper (code_str);
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
995 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
996
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
997 ## Check for newly created figures ...
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
998 fig_ids_new = setdiff (findall (0, "type", "figure"), fig_ids);
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
999 ## ... and save them
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
1000 for j = 1:numel (fig_ids_new)
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1001 drawnow ();
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1002 if (isempty (get (fig_ids_new(j), "children")))
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1003 continue;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1004 endif
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
1005 fname = [fig_name, "-", sprintf("%d", fig_num)];
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1006 if (strncmp (options.imageFormat, "eps", 3))
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
1007 fname = [fname ".eps"];
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1008 else
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
1009 fname = [fname "." options.imageFormat];
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1010 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1011 print_opts = {fig_ids_new(j), ...
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
1012 fullfile(options.outputDir, fname), ...
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
1013 ["-d" options.imageFormat], "-color"};
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1014 if (! isempty (options.maxWidth) && ! isempty (options.maxHeight))
23549
c8daadf7543b publish.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 23548
diff changeset
1015 print_opts{end+1} = sprintf ("-S%d,%d", options.maxWidth,
c8daadf7543b publish.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 23548
diff changeset
1016 options.maxHeight);
c8daadf7543b publish.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 23548
diff changeset
1017 elseif (! isempty (options.maxWidth) || ! isempty (options.maxHeight))
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1018 warning (["publish: specify both options.maxWidth ", ...
23549
c8daadf7543b publish.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 23548
diff changeset
1019 "and options.maxHeight"]);
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1020 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1021 print (print_opts{:});
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1022 fig_num++;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1023 delete (fig_ids_new(j));
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1024 fig_elem = cell ();
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1025 fig_elem{1} = struct ("type", "graphic", "content", fname);
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1026 if (isfield (fig_list, num2str (i)))
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
1027 fig_elem = [getfield(fig_list, sprintf ("%d", i)), fig_elem];
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1028 endif
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
1029 fig_list = setfield (fig_list, sprintf ("%d", i), fig_elem);
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1030 ## Create a new figure, if there are existing plots
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1031 if (isempty (setdiff (findall (0, "type", "figure"), fig_ids)) ...
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
1032 && ! isempty (fig_ids) && options.useNewFigure)
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1033 figure ();
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1034 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1035 endfor
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1036
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1037 ## Truncate output to desired length
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
1038 if (options.maxOutputLines < length (doc.body{i}.output))
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
1039 doc.body{i}.output = doc.body{i}.output(1:options.maxOutputLines);
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1040 endif
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
1041 doc.body{i}.output = strjoin (doc.body{i}.output, "\n");
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1042 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1043 endfor
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1044
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
1045 ## Close any figures opened by publish function
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1046 delete (setdiff (findall (0, "type", "figure"), fig_ids));
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1047
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1048 ## Insert figures to document
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1049 fig_code_blocks = fieldnames (fig_list);
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1050 body_offset = 0;
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
1051 for i = 1:numel (fig_code_blocks)
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1052 elems = getfield (fig_list, fig_code_blocks{i});
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
1053 ## Compute index where the figure(s) has to be inserted
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
1054 j = str2double (fig_code_blocks{i}) + body_offset;
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
1055 doc.body = [doc.body(1:j), elems, doc.body(j+1:end)];
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
1056 body_offset = body_offset + numel (elems);
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1057 endfor
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
1058
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1059 endfunction
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1060
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1061
25749
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1062 function cstr = eval_code_helper (__code__)
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1063 ## EVAL_CODE_HELPER evaluates a given string with Octave code in an extra
23547
8133a5041662 publish.m: Fix corruption of results for some code inputs (bug #51178).
Rik <rik@octave.org>
parents: 23219
diff changeset
1064 ## temporary context and returns a cellstring with the eval output.
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1065
25749
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1066 if (isempty (__code__))
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1067 return;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1068 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1069
25749
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1070 eval_context ("load");
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1071 cstr = evalc (__code__);
25750
e30a2492eb85 publish.m: Use Octave coding conventions for comments and logical negation.
Rik <rik@octave.org>
parents: 25749
diff changeset
1072 ## Split string by lines and preserve blank lines.
25749
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1073 cstr = strsplit (strrep (cstr, "\n\n", "\n \n"), "\n");
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1074 eval_context ("save");
28945
6e460773bdda maint: Use newlines after "function" and before "endfunction" for clarity.
Rik <rik@octave.org>
parents: 28912
diff changeset
1075
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1076 endfunction
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1077
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1078
25749
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1079 function cstr = eval_context (op)
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1080 ## EVAL_CONTEXT temporary evaluation context.
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1081 persistent ctext
25750
e30a2492eb85 publish.m: Use Octave coding conventions for comments and logical negation.
Rik <rik@octave.org>
parents: 25749
diff changeset
1082
e30a2492eb85 publish.m: Use Octave coding conventions for comments and logical negation.
Rik <rik@octave.org>
parents: 25749
diff changeset
1083 ## Variable cstr in "eval_code_helper" is newly created anyways.
25749
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1084 forbidden_var_names = {"__code__"};
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1085
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1086 switch (op)
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1087 case "save"
25750
e30a2492eb85 publish.m: Use Octave coding conventions for comments and logical negation.
Rik <rik@octave.org>
parents: 25749
diff changeset
1088 ## Clear previous context
25749
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1089 ctext = containers.Map;
25750
e30a2492eb85 publish.m: Use Octave coding conventions for comments and logical negation.
Rik <rik@octave.org>
parents: 25749
diff changeset
1090 ## Get variable names
25749
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1091 var_names = evalin ("caller", "whos");
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1092 var_names = {var_names.name};
25750
e30a2492eb85 publish.m: Use Octave coding conventions for comments and logical negation.
Rik <rik@octave.org>
parents: 25749
diff changeset
1093 ## Store all variables to context
25749
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1094 for i = 1:length (var_names)
25750
e30a2492eb85 publish.m: Use Octave coding conventions for comments and logical negation.
Rik <rik@octave.org>
parents: 25749
diff changeset
1095 if (! any (strcmp (var_names{i}, forbidden_var_names)))
25749
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1096 ctext(var_names{i}) = evalin ("caller", var_names{i});
28947
b73a54c31152 maint: Use Octave-specific end keywords rather than just 'end'.
Rik <rik@octave.org>
parents: 28945
diff changeset
1097 endif
25749
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1098 endfor
25750
e30a2492eb85 publish.m: Use Octave coding conventions for comments and logical negation.
Rik <rik@octave.org>
parents: 25749
diff changeset
1099
25749
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1100 case "load"
25750
e30a2492eb85 publish.m: Use Octave coding conventions for comments and logical negation.
Rik <rik@octave.org>
parents: 25749
diff changeset
1101 if (! isempty (ctext))
25749
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1102 keys = ctext.keys ();
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1103 for i = 1:length (keys)
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1104 assignin ("caller", keys{i}, ctext(keys{i}));
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1105 endfor
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1106 endif
25750
e30a2492eb85 publish.m: Use Octave coding conventions for comments and logical negation.
Rik <rik@octave.org>
parents: 25749
diff changeset
1107
25749
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1108 case "clear"
25750
e30a2492eb85 publish.m: Use Octave coding conventions for comments and logical negation.
Rik <rik@octave.org>
parents: 25749
diff changeset
1109 ## Clear any context
25749
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1110 ctext = [];
25750
e30a2492eb85 publish.m: Use Octave coding conventions for comments and logical negation.
Rik <rik@octave.org>
parents: 25749
diff changeset
1111
25749
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1112 otherwise
25750
e30a2492eb85 publish.m: Use Octave coding conventions for comments and logical negation.
Rik <rik@octave.org>
parents: 25749
diff changeset
1113 ## Do nothing
e30a2492eb85 publish.m: Use Octave coding conventions for comments and logical negation.
Rik <rik@octave.org>
parents: 25749
diff changeset
1114
25749
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1115 endswitch
28945
6e460773bdda maint: Use newlines after "function" and before "endfunction" for clarity.
Rik <rik@octave.org>
parents: 28912
diff changeset
1116
25749
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1117 endfunction
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1118
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1119
27216
823b4bcf79fc unless necessary for formatting or code, use ' instead of `
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1120 ## Note: Functional BIST tests are located in the 'test/publish' directory.
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1121
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
1122 ## Test input validation
28896
90fea9cc9caa test: Add expected error message <Invalid call> to BIST tests for nargin.
Rik <rik@octave.org>
parents: 28892
diff changeset
1123 %!error <Invalid call> publish ()
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1124 %!error publish (1)
22706
5a5d6c8647f6 publish.m: Fix some BIST tests.
Rik <rik@octave.org>
parents: 22705
diff changeset
1125 %!error <FILE does not exist> publish ("%%_non_existent_file_%%.m")
5a5d6c8647f6 publish.m: Fix some BIST tests.
Rik <rik@octave.org>
parents: 22705
diff changeset
1126 %!error <only script files can be published> publish ("publish.m")
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1127 %!error publish ("test_script.m", "format", "html", "showCode")