annotate scripts/miscellaneous/publish.m @ 30564:796f54d4ddbf stable

update Octave Project Developers copyright for the new year In files that have the "Octave Project Developers" copyright notice, update for 2021. In all .txi and .texi files except gpl.txi and gpl.texi in the doc/liboctave and doc/interpreter directories, change the copyright to "Octave Project Developers", the same as used for other source files. Update copyright notices for 2022 (not done since 2019). For gpl.txi and gpl.texi, change the copyright notice to be "Free Software Foundation, Inc." and leave the date at 2007 only because this file only contains the text of the GPL, not anything created by the Octave Project Developers. Add Paul Thomas to contributors.in.
author John W. Eaton <jwe@octave.org>
date Tue, 28 Dec 2021 18:22:40 -0500
parents 363fb10055df
children 939e69b45601
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 ##
30564
796f54d4ddbf update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents: 30379
diff changeset
3 ## Copyright (C) 2010-2022 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)
30379
363fb10055df maint: Style check m-files ahead of 7.1 release.
Rik <rik@octave.org>
parents: 30242
diff changeset
412
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
413 ## 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
414 ## 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
415 ## 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
416 ##
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
417 ## 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
418 ## 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
419 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
420 ## a) {struct ("type", "code", ...
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
421 ## "lines", [a, b], ...
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
422 ## "output", [])}
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
423 ## b) {struct ("type", "section", ...
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
424 ## "content", title_str)}
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
425 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
426 ## 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
427 ## 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
428
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
429 if (isempty (doc.m_source))
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
430 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
431 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
432
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
433 ## Parsing helper functions
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
434 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
435 ## Checks line to have N "%" or "#" lines
23549
c8daadf7543b publish.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 23548
diff changeset
436 ## 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
437 function r = is_publish_markup (cstr, N)
30379
363fb10055df maint: Style check m-files ahead of 7.1 release.
Rik <rik@octave.org>
parents: 30242
diff changeset
438
25698
ac386820f2b6 Return true when strncmp matches, but number of characters exceeds strlen (bug #54373)
Rik <rik@octave.org>
parents: 25054
diff changeset
439 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
440
ac386820f2b6 Return true when strncmp matches, but number of characters exceeds strlen (bug #54373)
Rik <rik@octave.org>
parents: 25054
diff changeset
441 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
442 if (r)
ac386820f2b6 Return true when strncmp matches, but number of characters exceeds strlen (bug #54373)
Rik <rik@octave.org>
parents: 25054
diff changeset
443 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
444 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
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 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
447 r = true;
ac386820f2b6 Return true when strncmp matches, but number of characters exceeds strlen (bug #54373)
Rik <rik@octave.org>
parents: 25054
diff changeset
448 else
ac386820f2b6 Return true when strncmp matches, but number of characters exceeds strlen (bug #54373)
Rik <rik@octave.org>
parents: 25054
diff changeset
449 r = false;
ac386820f2b6 Return true when strncmp matches, but number of characters exceeds strlen (bug #54373)
Rik <rik@octave.org>
parents: 25054
diff changeset
450 endif
ac386820f2b6 Return true when strncmp matches, but number of characters exceeds strlen (bug #54373)
Rik <rik@octave.org>
parents: 25054
diff changeset
451 endif
ac386820f2b6 Return true when strncmp matches, but number of characters exceeds strlen (bug #54373)
Rik <rik@octave.org>
parents: 25054
diff changeset
452
ac386820f2b6 Return true when strncmp matches, but number of characters exceeds strlen (bug #54373)
Rik <rik@octave.org>
parents: 25054
diff changeset
453 return;
ac386820f2b6 Return true when strncmp matches, but number of characters exceeds strlen (bug #54373)
Rik <rik@octave.org>
parents: 25054
diff changeset
454 endfunction
22113
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 paragraph line
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
456 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
457 ## 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
458 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
459 ## 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
460 ## 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
461 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
462
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
463 ## 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
464 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
465 | 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
466
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
467 ## 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
468 if (isempty (par_start_idx))
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
469 doc.body{end+1}.type = "code";
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
470 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
471 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
472 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
473 return;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
474 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
475
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
476 ## Determine continuous range of paragraphs
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
477 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
478 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
479 idx = find (! cellfun (is_paragraph,
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
480 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
481 if (! isempty (idx))
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
482 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
483 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
484 endfor
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
485 ## Code sections between paragraphs
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
486 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
487 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
488 ## Code at the beginning?
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
489 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
490 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
491 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
492 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
493 ## Code at the end?
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
494 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
495 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
496 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
497 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
498 ## Remove overlaps
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
499 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
500 code_start_idx(idx) = [];
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
501 code_end_idx(idx) = [];
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
502 ## Remove empty code blocks
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
503 idx = [];
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
504 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
505 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
506 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
507 idx = [idx, i];
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
508 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
509 endfor
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
510 code_start_idx(idx) = [];
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
511 code_end_idx(idx) = [];
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
512
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
513 ## 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
514 ## 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
515 ## 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
516 title_offset = 0;
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
517 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
518 && ! isempty (par_start_idx)
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
519 && par_start_idx(1) == 1
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
520 && (isempty (code_start_idx)
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
521 || (length (par_start_idx) > 1
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
522 && 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
523 doc.title = doc.m_source{1};
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
524 doc.title = doc.title(4:end);
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
525 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
526 ## Strip leading "# "
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
527 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
528 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
529 title_offset = 1;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
530 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
531
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
532 ## 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
533 j = 1;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
534 i = (1 + title_offset);
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
535 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
536 ## 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
537 ## 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
538 while (j <= numel (code_start_idx)
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
539 && (i > numel (par_start_idx)
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
540 || 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
541 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
542 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
543 doc.body{end}.content = ...
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
544 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
545 doc.body{end}.lines = lines;
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
546 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
547 j++;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
548 endwhile
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
549
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
550 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
551 type_str = "section";
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
552 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
553 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
554 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
555 else
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
556 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
557 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
558 ## 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
559 if (! isempty (title_str))
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
560 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
561 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
562 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
563
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
564 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
565 ## Strip leading "# "
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
566 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
567 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
568 i++;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
569 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
570 endwhile
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
571
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
572 endfunction
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
573
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
574
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
575 function p_content = parse_paragraph_content (content)
30379
363fb10055df maint: Style check m-files ahead of 7.1 release.
Rik <rik@octave.org>
parents: 30242
diff changeset
576
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
577 ## 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
578 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
579 ## 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
580 ## 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
581 ## either of
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
582 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
583 ## 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
584 ## "content", code_str)}
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
585 ## 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
586 ## "content", text_str)}
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
587 ## 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
588 ## "content", {"item1", "item2", ..})}
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
589 ## 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
590 ## "content", {"item1", "item2", ..})}
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
591 ## e) {struct ("type", "include", ...
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
592 ## "content", file_str)}
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
593 ## f) {struct ("type", "graphic", ...
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
594 ## "content", file_str)}
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
595 ## g) {struct ("type", "html", ...
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
596 ## "content", html_str)}
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
597 ## h) {struct ("type", "latex", ...
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
598 ## "content", latex_str)}
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
599 ## i) {struct ("type", "text", ...
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
600 ## "content", text_str)}
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
601 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
602 ## Option i) might contain:
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
603 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
604 ## * 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
605 ## * 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
606 ## * Links
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
607 ## * Trademark symbols
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
608
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
609 p_content = cell ();
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
610
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
611 if (isempty (content))
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
612 return;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
613 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
614
23926
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
615 ## 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
616 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
617 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
618 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
619 tok = regexp (content_str, ...
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
620 ['(.*?)(^|\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
621 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
622 if (! isempty (tok))
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
623 ## 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
624 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
625 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
626 tok(1:2) = [];
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
627 endif
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
628 ## Extract the block content
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
629 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
630 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
631 ## 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
632 if (length (tok) == 5)
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
633 p_content = [p_content, ...
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
634 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
635 endif
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
636 return;
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
637 endif
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
638 endfor
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
639
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
640 ## 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
641 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
642
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
643 ## For each block
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
644 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
645 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
646
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
647 ## 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
648 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
649 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
650 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
651 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
652 continue;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
653 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
654
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
655 ## 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
656 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
657 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
658 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
659 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
660 continue;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
661 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
662
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
663 ## Bulleted list starts with "* "
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
664 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
665 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
666 tmpstr = strjoin (block, "\n");
23549
c8daadf7543b publish.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 23548
diff changeset
667 ## Remove first "* "
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
668 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
669 ## Split items
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
670 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
671 continue;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
672 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
673
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
674 ## Numbered list starts with "# "
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
675 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
676 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
677 tmpstr = strjoin (block, "\n");
23549
c8daadf7543b publish.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 23548
diff changeset
678 ## Remove first "# "
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
679 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
680 ## Split items
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
681 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
682 continue;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
683 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
684
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
685 ## Include <include>fname.m</include>
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
686 if (! isempty (fname = regexpi (strjoin (block, ""),
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
687 '^<include>(.*)</include>$',
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
688 "tokens")))
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
689 ## 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
690 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
691 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
692 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
693
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
694 continue;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
695 endif
22157
c5842206aaea maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents: 22113
diff changeset
696
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
697 ## Graphic <<myGraphic.png>>
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
698 if (! isempty (fname = regexpi (strjoin (block, ""),
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
699 '^<<(.*)>>$',
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
700 "tokens")))
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
701 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
702 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
703 continue;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
704 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
705
23926
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
706 ## 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
707 ## 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
708 ##
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
709 ## * 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
710 ## * 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
711 ## * Links
58b76c741c3d publish: improve detecion of block markup (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23923
diff changeset
712 ## * 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
713 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
714 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
715 endfor
28945
6e460773bdda maint: Use newlines after "function" and before "endfunction" for clarity.
Rik <rik@octave.org>
parents: 28912
diff changeset
716
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
717 endfunction
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
718
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
719
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
720 function m_source = read_file_to_cellstr (file)
30379
363fb10055df maint: Style check m-files ahead of 7.1 release.
Rik <rik@octave.org>
parents: 30242
diff changeset
721
23549
c8daadf7543b publish.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 23548
diff changeset
722 ## READ_FILE_TO_CELLSTR reads a given file line by line into a cellstring
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
723 fid = fopen (file, "r");
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
724 i = 0;
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
725 do
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
726 m_source{++i} = fgetl (fid);
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
727 until (! ischar (m_source{i}))
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
728 fclose (fid);
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
729 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
730
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
731 endfunction
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
732
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
733
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
734 function ofile = create_output (doc, options)
30379
363fb10055df maint: Style check m-files ahead of 7.1 release.
Rik <rik@octave.org>
parents: 30242
diff changeset
735
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
736 ## 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
737 formatter = [];
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
738 switch (options.format)
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
739 case "html"
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
740 formatter = @__publish_html_output__;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
741 case {"latex", "pdf"}
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
742 formatter = @__publish_latex_output__;
23188
e2e182a8e699 Allow custom output generators for code publishing.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23086
diff changeset
743 otherwise
e2e182a8e699 Allow custom output generators for code publishing.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23086
diff changeset
744 ## Custom formatter
e2e182a8e699 Allow custom output generators for code publishing.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23086
diff changeset
745 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
746 endswitch
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
747
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
748 ## 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
749 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
750 if (isempty (title_str))
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
751 [~, 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
752 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
753
23964
1a0cbb573a67 publish: Improve escaping of special characters in output (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23926
diff changeset
754 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
755 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
756 format_output (doc.intro, formatter, options),
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
757 get_toc (doc.body, formatter));
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
758 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
759 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
760
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
761 ## Write file
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
762 [~, 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
763 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
764 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
765 fid = fopen (ofile, "w");
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
766 fputs (fid, content);
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
767 fclose (fid);
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
768
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
769 ## 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
770 if (strcmp (options.format, "pdf"))
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
771 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
772 if (status == 0)
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
773 for i = 1:2
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
774 ## 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
775 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
776 endfor
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
777 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
778 endif
28945
6e460773bdda maint: Use newlines after "function" and before "endfunction" for clarity.
Rik <rik@octave.org>
parents: 28912
diff changeset
779
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
780 endfunction
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
781
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
782
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
783 function toc_cstr = get_toc (cstr, formatter)
30379
363fb10055df maint: Style check m-files ahead of 7.1 release.
Rik <rik@octave.org>
parents: 30242
diff changeset
784
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
785 ## 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
786 ## 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
787 toc_cstr = cell ();
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
788 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
789 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
790 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
791 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
792 endfor
28945
6e460773bdda maint: Use newlines after "function" and before "endfunction" for clarity.
Rik <rik@octave.org>
parents: 28912
diff changeset
793
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
794 endfunction
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
795
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
796
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
797 function str = format_output (cstr, formatter, options)
30379
363fb10055df maint: Style check m-files ahead of 7.1 release.
Rik <rik@octave.org>
parents: 30242
diff changeset
798
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
799 ## 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
800 ## 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
801 ## format.
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
802 ##
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
803 ## 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
804 ## 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
805 str = "";
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
806 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
807 switch (cstr{i}.type)
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
808 case "code"
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
809 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
810 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
811 endif
23191
5f79bb3fdd28 * scripts/general/publish.m: Avoid creation of empty ouput blocks.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23188
diff changeset
812 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
813 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
814 endif
22384
ac45255ccd2c minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22330
diff changeset
815 case {"text", "section"}
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
816 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
817 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
818 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
819 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
820 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
821 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
822 otherwise
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
823 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
824 endswitch
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
825 endfor
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
826
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
827 endfunction
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
828
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
829
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
830 function str = format_text (str, formatter)
30379
363fb10055df maint: Style check m-files ahead of 7.1 release.
Rik <rik@octave.org>
parents: 30242
diff changeset
831
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
832 ## 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
833 ## 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
834
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
835 ## 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
836 ## 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
837 ## '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
838 ##
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
839 ## 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
840 ##
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
841 ## Positive matches:
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
842 ##
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
843 ## ^*bold*$
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
844 ## ^*bold*.$
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
845 ## ^(*bold*)$
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
846 ## ^ *bold* $
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
847 ## ^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
848 ## ^*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 ##
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
850 ## Negative matches:
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
851 ##
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
852 ## ^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
853 ## ^*bold *$
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
854 ## ^* bold* $
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
855 ## ^*bold text *$
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
856 ##
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
857 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
858 '(?!\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
859
22674
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
860 ## Regular expressions for the formats:
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
861 ##
23923
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
862 ## 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
863 ## 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
864 ## 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
865 ## 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
866 ## 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
867 ## 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
868 ## 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
869 ## 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
870 ## 9) (TM) or (R)
22674
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
871 regexes = {'<\S{3,}[^\s<>]*>', ...
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
872 '<octave:[^\s<>]* *[^<>$]*>', ...
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
873 '<\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
874 regex_helper('\$\$', '$'), ...
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
875 regex_helper('\$', '$'), ...
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
876 regex_helper('\*', '*'), ...
62dc81691d73 publish: improve detection of inline markup and fix MathJax usage.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23921
diff changeset
877 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
878 regex_helper('\|', '|'), ...
1a0cbb573a67 publish: Improve escaping of special characters in output (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23926
diff changeset
879 '\((TM|R)\)'};
22674
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 ## 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
882 ## 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
883 texinfo_esc = @(str) strrep (strrep (str, "-", "_002d"), "_", "_005f");
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
884
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
885 ## Substitute all occurrences with placeholders
22674
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
886 placeholder_cstr = {};
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
887 plh = 0;
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
888 for i = 1:numel (regexes)
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
889 cstr = regexp (str, regexes{i}, "match");
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
890 for j = 1:numel (cstr)
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
891 plh += 1;
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
892 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
893 "once");
22674
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
894 switch (i)
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
895 case 1
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
896 ## Links "<http://www.someurl.com>"
22674
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
897 url = cstr{j};
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
898 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
899 case 2
27846
4075474fd9d0 fix URL parsing of `publish` (bug #57426).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 27216
diff changeset
900 ## Links "<octave:Function SOME TEXT>"
4075474fd9d0 fix URL parsing of `publish` (bug #57426).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 27216
diff changeset
901 idx = strfind (cstr{j}, " ")(1);
22674
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
902 url = cstr{j};
23549
c8daadf7543b publish.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 23548
diff changeset
903 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
904 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
905 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
906 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
907 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
908 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
909 "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
910 txt = cstr{j};
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
911 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
912 cstr{j} = formatter ("link", url, txt);
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
913 case 3
27846
4075474fd9d0 fix URL parsing of `publish` (bug #57426).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 27216
diff changeset
914 ## 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
915 idx = strfind (cstr{j}, " ")(1);
22674
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
916 url = cstr{j};
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
917 url = url(2:idx-1);
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
918 txt = cstr{j};
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
919 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
920 cstr{j} = formatter ("link", url, txt);
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
921 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
922 ## 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
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 ("blockmath", txt(3:end-2));
22674
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
925 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
926 ## 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
927 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
928 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
929 case 6
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
930 ## Bold
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 ("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
933 case 7
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
934 ## Italic
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 ("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
937 case 8
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
938 ## Monospaced
22674
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
939 txt = cstr{j};
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
940 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
941 formatter));
23964
1a0cbb573a67 publish: Improve escaping of special characters in output (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23926
diff changeset
942 case 9
1a0cbb573a67 publish: Improve escaping of special characters in output (bug #51782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23926
diff changeset
943 ## (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
944 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
945 cstr{j} = formatter (txt(2:end-1));
22674
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
946 endswitch
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
947 endfor
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
948 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
949 endfor
22674
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
950
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
951 ## 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
952 str = formatter ("escape_special_chars", str);
22674
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
953
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
954 ## Restore placeholders
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
955 for i = plh:-1:1
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
956 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
957 placeholder_cstr{i});
22674
c024fb103114 minor improvements for publish.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22384
diff changeset
958 endfor
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
959
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
960 endfunction
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
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
963 function doc = eval_code (doc, options)
30379
363fb10055df maint: Style check m-files ahead of 7.1 release.
Rik <rik@octave.org>
parents: 30242
diff changeset
964
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
965 ## 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
966 ##
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
967 ## 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
968 ## figures.
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
969
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
970 ## 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
971 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
972
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
973 ## Remember previously opened figures
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
974 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
975 [~, 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
976 fig_num = 1;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
977 fig_list = struct ();
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
978
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
979 ## 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
980 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
981
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
982 ## 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
983 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
984 figure ();
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
985 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
986
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
987 for i = 1:numel (doc.body)
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
988 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
989 r = doc.body{i}.lines;
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
990 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
991 if (options.catchError)
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
992 try
25749
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
993 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
994 catch err
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
995 doc.body{i}.output = cellstr (["error: ", err.message, ...
23549
c8daadf7543b publish.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 23548
diff changeset
996 "\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
997 end_try_catch
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
998 else
25749
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
999 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
1000 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1001
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1002 ## 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
1003 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
1004 ## ... and save them
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
1005 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
1006 drawnow ();
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1007 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
1008 continue;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1009 endif
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
1010 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
1011 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
1012 fname = [fname ".eps"];
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1013 else
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
1014 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
1015 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1016 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
1017 fullfile(options.outputDir, fname), ...
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
1018 ["-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
1019 if (! isempty (options.maxWidth) && ! isempty (options.maxHeight))
23549
c8daadf7543b publish.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 23548
diff changeset
1020 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
1021 options.maxHeight);
c8daadf7543b publish.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 23548
diff changeset
1022 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
1023 warning (["publish: specify both options.maxWidth ", ...
23549
c8daadf7543b publish.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 23548
diff changeset
1024 "and options.maxHeight"]);
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1025 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1026 print (print_opts{:});
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1027 fig_num++;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1028 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
1029 fig_elem = cell ();
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1030 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
1031 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
1032 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
1033 endif
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
1034 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
1035 ## 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
1036 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
1037 && ! 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
1038 figure ();
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1039 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1040 endfor
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1041
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1042 ## Truncate output to desired length
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
1043 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
1044 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
1045 endif
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
1046 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
1047 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1048 endfor
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1049
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
1050 ## 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
1051 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
1052
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1053 ## Insert figures to document
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1054 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
1055 body_offset = 0;
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
1056 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
1057 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
1058 ## 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
1059 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
1060 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
1061 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
1062 endfor
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
1063
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1064 endfunction
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1065
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1066
25749
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1067 function cstr = eval_code_helper (__code__)
30379
363fb10055df maint: Style check m-files ahead of 7.1 release.
Rik <rik@octave.org>
parents: 30242
diff changeset
1068
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1069 ## 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
1070 ## 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
1071
25749
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1072 if (isempty (__code__))
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1073 return;
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1074 endif
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1075
25749
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1076 eval_context ("load");
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1077 cstr = evalc (__code__);
25750
e30a2492eb85 publish.m: Use Octave coding conventions for comments and logical negation.
Rik <rik@octave.org>
parents: 25749
diff changeset
1078 ## 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
1079 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
1080 eval_context ("save");
28945
6e460773bdda maint: Use newlines after "function" and before "endfunction" for clarity.
Rik <rik@octave.org>
parents: 28912
diff changeset
1081
22113
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1082 endfunction
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1083
b6f482e29afd New functions publish.m and grabcode.m (patch #9048).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
diff changeset
1084
25749
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1085 function cstr = eval_context (op)
30379
363fb10055df maint: Style check m-files ahead of 7.1 release.
Rik <rik@octave.org>
parents: 30242
diff changeset
1086
25749
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1087 ## 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
1088 persistent ctext
25750
e30a2492eb85 publish.m: Use Octave coding conventions for comments and logical negation.
Rik <rik@octave.org>
parents: 25749
diff changeset
1089
e30a2492eb85 publish.m: Use Octave coding conventions for comments and logical negation.
Rik <rik@octave.org>
parents: 25749
diff changeset
1090 ## 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
1091 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
1092
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1093 switch (op)
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1094 case "save"
25750
e30a2492eb85 publish.m: Use Octave coding conventions for comments and logical negation.
Rik <rik@octave.org>
parents: 25749
diff changeset
1095 ## 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
1096 ctext = containers.Map;
25750
e30a2492eb85 publish.m: Use Octave coding conventions for comments and logical negation.
Rik <rik@octave.org>
parents: 25749
diff changeset
1097 ## 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
1098 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
1099 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
1100 ## 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
1101 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
1102 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
1103 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
1104 endif
25749
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1105 endfor
25750
e30a2492eb85 publish.m: Use Octave coding conventions for comments and logical negation.
Rik <rik@octave.org>
parents: 25749
diff changeset
1106
25749
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1107 case "load"
25750
e30a2492eb85 publish.m: Use Octave coding conventions for comments and logical negation.
Rik <rik@octave.org>
parents: 25749
diff changeset
1108 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
1109 keys = ctext.keys ();
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1110 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
1111 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
1112 endfor
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1113 endif
25750
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 case "clear"
25750
e30a2492eb85 publish.m: Use Octave coding conventions for comments and logical negation.
Rik <rik@octave.org>
parents: 25749
diff changeset
1116 ## 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
1117 ctext = [];
25750
e30a2492eb85 publish.m: Use Octave coding conventions for comments and logical negation.
Rik <rik@octave.org>
parents: 25749
diff changeset
1118
25749
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1119 otherwise
25750
e30a2492eb85 publish.m: Use Octave coding conventions for comments and logical negation.
Rik <rik@octave.org>
parents: 25749
diff changeset
1120 ## Do nothing
e30a2492eb85 publish.m: Use Octave coding conventions for comments and logical negation.
Rik <rik@octave.org>
parents: 25749
diff changeset
1121
25749
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1122 endswitch
28945
6e460773bdda maint: Use newlines after "function" and before "endfunction" for clarity.
Rik <rik@octave.org>
parents: 28912
diff changeset
1123
25749
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1124 endfunction
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1125
af43eb4e6502 publish.m: Improve code evaluation and add classdef support.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 25698
diff changeset
1126
27216
823b4bcf79fc unless necessary for formatting or code, use ' instead of `
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1127 ## 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
1128
22705
e9a0aa0a49ed Overhaul publish function and it's private helper functions.
Rik <rik@octave.org>
parents: 22674
diff changeset
1129 ## 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
1130 %!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
1131 %!error publish (1)
22706
5a5d6c8647f6 publish.m: Fix some BIST tests.
Rik <rik@octave.org>
parents: 22705
diff changeset
1132 %!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
1133 %!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
1134 %!error publish ("test_script.m", "format", "html", "showCode")