flnews_post_proc 1.72 → 1.74

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Binary file
Binary file
@@ -1,338 +1,275 @@
1
- =======================
2
- flnews_post_proc
3
- =======================
1
+ ===========================
2
+ flnews_post_proc
3
+ ===========================
4
4
  ------------------------------------------
5
- Post-Processor for the flnews newsreader
5
+ Post-Processor for the flnews Newsreader
6
6
  ------------------------------------------
7
7
 
8
8
  SYNOPSIS
9
- =======================
9
+ ===========================
10
+ The post-processor is invoked by piping an article into it. This typically occurs
11
+ automatically when the "post_proc" variable is set to `flnews_post_proc` in the
12
+ flnews configuration file.
10
13
 
11
- An article is piped-in to the post-processor. This is normally done
12
- automatically as soon as the variable “post_proc“ in the flnews configuration
13
- file is set to the flnews_post_proc.
14
-
15
- Locally stored articles can be piped in to the post-processor, as needed
16
- for testing purposes, with a command-line like the following:
14
+ For testing purposes, you can also pipe locally stored articles into the post-processor
15
+ using a command like:
17
16
 
18
17
  **flnews_post_proc < article**
19
18
 
20
19
  DESCRIPTION
21
- =======================
22
- The flnews newsreader is sufficient for Usenet access, i.e. to receive and read
23
- articles from -, as well as to write and post articles to newsgroups.
24
-
25
- When you compare news-clients, you will always notice the differences and
26
- choose the software that you prefer. Flnews however, has the charm that you can
27
- influence how the program itself works but also modify posts that flnews
28
- produces, just before the program will transmit them to the chosen nntp-server.
29
-
30
- The flnews_post_proc can add and change details of a post, in ways that are
31
- currently not possible with flnews alone. As the program is configurable, it
32
- can probably respond to the needs of some Usenet users. You should, however,
33
- rather take it as an example for what can be done and an inspiration for your
34
- own creations.
35
-
36
- The limits of a basic newsreader what the program can do
37
- ----------------------------------------------------------
38
- While the articles that flnews creates, are complete and ready to be posted,
39
- some users may not always agree with the result and for arbitrary reasons:
40
-
41
- * There may be inconveniences when you post to different newsgroups in
42
- different languages, as an introductory line which refers to a previous
43
- post can only be set once in the flnews-configuration. The consequence
44
- can be that your post to a french newsgroup begins with an introduction
45
- in English.
46
- My post-processor program can set an introductory line specifically
47
- chosen for one or several newsgroups.
48
-
49
- * The same conflict arises, when you have set a standard signature-text and
50
- would like to replace it against another, based on the newsgroup you are
51
- about to post to.
52
- The post-processor program sets specific signatures as configured for one
53
- or several newsgroups. You can even specify that a signature should be
54
- picked randomly from a file, containing several signatures.
55
-
56
- * Some custom headers may serve to convey additional information to
57
- interested readers of your post, like GnuPG key IDs, your language skills
58
- or the like. The signature may be a better choice than custom headers.
59
- You are free. I just mention face and x-face but prefer that you do not
60
- remember I did.
61
- Custom-headers may be defined in the configuration file for the program
62
- and will then be added to each outgoing post.
63
-
64
- * The Archive- and the X-No-Archive header are sometimes set to avoid that an
65
- article be saved and stays available to search-engines (Google, notably).
66
- Test- postings, for example, do probably not justify at all that they would
67
- be referenced in search-results.
68
- The post-processor program can impose both headers for all posts to certain
69
- newsgroups.
70
-
71
- **ATTN** As of 2024, the header “X-No-Archive“ has lost most of its utility
72
- and it is the decision of server operators to honor it or not.
73
-
74
- * If a news post contains many references to either other posts or Web
75
- pages, the text can be cluttered with URLs.
76
- The post-processor can identify marked text fragments and transform them
77
- into footnotes, which will be attached as a list at the bottom of the
78
- post.
79
- This works almost like the <ref/> link in Wikipedia, but the delimiter
80
- can be determined in the configuration file.
81
- Example (with %=):
82
- This is an object %=and this becomes the footnote, describing the object
83
- further=%
84
-
85
- Dialog to override settings
86
- ---------------------------
87
- ATTN! As of version 1.72, YAD or Zenity cannot be used for the dialog.
88
-
89
- You can have a dialog displayed just before the post-processor is invoked, to
90
- **disable** some configuration options. Provided that Whiptail or only xterm
91
- are available on your computer, you can choose from the following options. You
92
- **cannot** use the dialog to enable options which have not yet been set in the
93
- configuration.
94
-
95
- * Signatures, as set in the configuration **can be ignored**. Either
96
- a default signature will appear as set in flnews or none.
97
- * Custom Headers, if configured, can be **omitted**.
98
- * The Archive- and X-No-Archive headers, if set for the current newsgroup,
99
- **can be ignored**.
100
- * Logging can be **switched off**, if set.
101
-
102
- Pushing Esc or the cancle-button of the dialog interrupts the process, flnews
20
+ ===========================
21
+ The flnews newsreader fully supports Usenet access, enabling the reception and reading
22
+ of articles from newsgroups, as well as composing and posting them.
23
+
24
+ When comparing various news clients, differences will often influence your choice of
25
+ preferred client. Flnews distinguishes itself by not only offering control over its
26
+ internal behavior, but also by allowing you to modify outgoing posts just before they
27
+ are sent to the configured NNTP server.
28
+
29
+ The `flnews_post_proc` program can be used to modify and enhance a post in ways that
30
+ flnews alone cannot. It is configurable and may meet the needs of some Usenet users,
31
+ though it is primarily intended as a starting point for creating your own custom solutions.
32
+
33
+ Limitations of Basic Newsreaders
34
+ --------------------------------------------------------
35
+ While flnews creates posts that are generally complete and ready for submission, there are
36
+ instances where users might find the output unsatisfactory for arbitrary reasons:
37
+
38
+ * If you're posting to different newsgroups in multiple languages, the introductory line
39
+ referencing a prior post can only be set once in the flnews configuration file. As a
40
+ result, posts to a French newsgroup, for example, may start with an introduction in
41
+ English. The post-processor can address this by setting specific introductory lines
42
+ for each newsgroup.
43
+
44
+ * Similar issues arise when you set a standard signature and want it to vary based on
45
+ the newsgroup. The post-processor allows different signatures to be used for different
46
+ newsgroups, and you can even randomize the selection from a list of signatures stored
47
+ in a file.
48
+
49
+ * Custom headers, such as GnuPG key IDs or your language proficiency, can also be added
50
+ to posts, though signatures may be a better alternative. Custom headers can be defined
51
+ in the configuration file and will be added to outgoing posts.
52
+
53
+ * Headers like "Archive" and "X-No-Archive" are sometimes set to prevent an article from
54
+ being indexed by search engines (e.g., Google). For example, test posts likely don't need
55
+ to be included in search results. The post-processor can apply both headers to all posts
56
+ sent to certain newsgroups.
57
+
58
+ **NOTE**: As of 2024, the "X-No-Archive" header has limited effectiveness, and it is
59
+ up to server operators whether or not to honor it.
60
+
61
+ * Posts that include many references to other posts or URLs can become cluttered. The
62
+ post-processor can convert marked text into footnotes, similar to the <ref/> link format
63
+ used in Wikipedia, with the delimiter configurable in the configuration file.
64
+ Example (using %=):
65
+ "This is an object %=and this becomes the footnote, describing the object further=%"
66
+
67
+ Dialog for Overriding Settings
68
+ ------------------------------
69
+ **IMPORTANT**: As of version 1.72, YAD or Zenity cannot be used for the dialog interface.
70
+
71
+ Before the post-processor runs, a dialog can be displayed to allow users to **disable**
72
+ certain configuration options. If Whiptail or xterm are available, you can choose to
73
+ disable the following options. You **cannot** enable options that haven't already been set
74
+ in the configuration.
75
+
76
+ * Signatures (if set in the configuration) can be **ignored**. A default signature will
77
+ be used, or no signature at all.
78
+ * Custom headers can be **omitted**.
79
+ * The "Archive" and "X-No-Archive" headers can be **ignored** if set for the current
80
+ newsgroup.
81
+ * Logging can be **disabled**, if enabled.
82
+
83
+ Pressing Esc or the Cancel button on the dialog will interrupt the process, and flnews
103
84
  will not post the article.
104
85
 
105
- You can disable the dialog, which ensures that all configured options will be
106
- applied, without the need for further interaction (see below, option
107
- OVERRIDE_CONFIG).
86
+ To disable the dialog entirely (and apply all configured options without further interaction),
87
+ set the **OVERRIDE_CONFIG** option.
108
88
 
109
89
  CONFIGURATION
110
90
  ===============
111
- On first execution of the program, a copy of the original configuration file is
112
- created in */home/[user]/.flnews_post_proc.conf*
113
- It is this file which is used from then on. If you delete it, it will be
114
- recreated, on the next occasion, but your own changes will be lost.
91
+ Upon first execution of the program, a copy of the original configuration file is created
92
+ in */home/[user]/.flnews_post_proc.conf*. This file is used thereafter. Deleting it will
93
+ cause the file to be recreated, but any custom changes will be lost.
115
94
 
116
- The configuration file is in YAML syntax and full of explanations. The
117
- variables defined in this file can be classified as belonging to one of two
118
- categories:
95
+ The configuration file uses YAML syntax and includes detailed explanations. The variables
96
+ within it fall into two categories:
119
97
 
120
- * Variables describing values originally set by flnews, which should be used or
121
- replaced. The important elements are usually matched in a capture group.
98
+ 1. Variables that represent values originally set by flnews, which can be used or replaced.
99
+ These elements are typically captured using regular expressions.
100
+ 2. Variables that define new or modified content.
122
101
 
123
- * Variables defining the new or altered content.
102
+ Example Configuration Variables
103
+ -------------------------------
124
104
 
125
105
  **FUP_NAME**
126
- A Regular Expression, describing the string which contains the name of
127
- previous poster who is the author of a quoted post. This string is
128
- recognized in the original article and may be used with the fitting element
129
- from *GROUP_INTRO*, below. The Regexp-format is that of the Regexp class in
130
- Ruby, noted as a String. Beware to mask a backslash '\\' by another one,
131
- like in the example. A capture-group '()' serves to extract the name from the
132
- match result.
133
-
134
- Leave this field empty to keep the default from the FLNews configuration
135
- intact.
106
+ A regular expression that matches the name of the previous poster in a quoted post. This
107
+ string is recognized in the original article and used with the matching element from
108
+ *GROUP_INTRO*.
136
109
 
137
- CONTENT: A String equivalent of a regular expression.
110
+ Leave this field empty to retain the default value from the FLNews configuration.
138
111
 
139
- DEFAULT: EMPTY
112
+ CONTENT: A string representing a regular expression.
140
113
 
141
- EXAMPLE1: "On \\\\d+.\\\\d+.\\\\d{2,4} at \\\\d+:\\\\d+ **(.*)** wrote:"
114
+ DEFAULT: EMPTY
142
115
 
143
- EXAMPLE2: "**(.*)** wrote:"
116
+ EXAMPLE1: "On \\\\d+.\\\\d+.\\\\d{2,4} at \\\\d+:\\\\d+ **(.*)** wrote:"
144
117
 
118
+ EXAMPLE2: "**(.*)** wrote:"
145
119
 
146
120
  **FUP_GROUP**
147
- A Regular Expression, describing the string which contains the newsgroup
148
- where the previous post, that you are referring to in the followup, had been
149
- published.
121
+ A regular expression that matches the newsgroup where the quoted post was published.
150
122
 
151
- Leave this field empty to ignore the precise group.
123
+ Leave this field empty to ignore the exact group.
152
124
 
153
- CONTENT: A String equivalent of a regular expression.
125
+ CONTENT: A string representing a regular expression.
154
126
 
155
- DEFAULT: EMPTY
127
+ DEFAULT: EMPTY
156
128
 
157
- EXAMPLE: "wrote in **(.*)**:"
129
+ EXAMPLE: "wrote in **(.*)**:"
158
130
 
159
131
  **GROUP_INTROS**
160
- Introductory strings, referring to the previous poster who is the author of a
161
- quoted post. If you match the newsgroup of the post (see FUP_GROUP), you can
162
- use these variables in the result.
163
- Currently only %fup_name% and %fup_group% are reproduced in the resulting
164
- introductory string.
132
+ Introductory strings referring to the previous poster in a quoted post. When the newsgroup
133
+ matches *FUP_GROUP*, these variables are used in the resulting introduction.
165
134
 
166
- CONTENT: A newsgroup or regexp per line, followed by a colon, a space and a String
135
+ CONTENT: A newsgroup or regular expression per line, followed by a colon, space, and string.
167
136
 
168
- DEFAULT: As configured in FLNews
169
-
170
- EXAMPLE: alt.test: "Thus spoke %fup_name% on that baleful %fup_date%:"
137
+ DEFAULT: As configured in FLNews.
171
138
 
172
- **GROUP_SIGS**
173
- A signature line per Newsgroup or a file path. The file should contain signatures,
174
- already formatted and separated by 1 empty line. The program will randomly pick
175
- one signature from the list.
139
+ EXAMPLE: alt.test: "Thus spoke %fup_name% on that baleful %fup_date%:"
176
140
 
177
- ATTN! In multi line signatures, you have to use \\r\\n for line breaks.
141
+ **GROUP_SIGS**
142
+ Signature lines for each newsgroup or a path to a file containing signatures, which should be
143
+ formatted and separated by one empty line. A random signature is picked from the file for each
144
+ newsgroup. You can also source another file within the signature file by starting a line with
145
+ ". /path/to/other/file".
178
146
 
179
- CONTENT: A newsgroup or regexp per line, followed by a colon, a space and a String.
147
+ CONTENT: A newsgroup or regular expression per line, followed by a colon, space, and string.
180
148
 
181
- DEFAULT: As configured in flnews
149
+ DEFAULT: As configured in flnews.
182
150
 
183
- EXAMPLE: alt.test: "Signature for alt.test\\r\\nsecond line"
184
-
185
- EXAMPLE: comp.*: /home/[user]/.my_sigs
151
+ EXAMPLE: alt.test: "Signature for alt.test\\r\\nsecond line"
152
+ EXAMPLE: comp.*: /home/[user]/.my_sigs
186
153
 
187
154
  **CUSTOM_HEADERS**
188
- Additional headers for the outgoing article
189
-
190
- CONTENT: 1 line per header : a dash and space, then a String, comprising the
191
- name of the header, ending in a colon and the value of the header.
155
+ Additional custom headers to be added to outgoing articles.
192
156
 
193
- DEFAULT: undefined
157
+ CONTENT: One line per header, starting with a dash and space, followed by the header name and value.
194
158
 
195
- | EXAMPLE (2 headers):
196
- | - 'X-My-Header: nothing fancy'
197
- | - 'X-Another-Header: care not!'
159
+ DEFAULT: Undefined
198
160
 
199
- **NO_ARCHIVE_GROUPS**
200
- The newsgroups, where the headers “Archive: no” and “X-No-Archive: YES” shall
201
- be set.
161
+ EXAMPLE:
162
+ - 'X-My-Header: nothing fancy'
163
+ - 'X-Another-Header: care not!'
202
164
 
203
- CONTENT: a dash and space, then a String, containing the name of the group or a regexp.
165
+ **NO_ARCHIVE_GROUPS**
166
+ Newsgroups where the "Archive: no" and "X-No-Archive: YES" headers should be set.
204
167
 
205
- DEFAULT: empty
168
+ CONTENT: A line with a dash and space, followed by the group name or a regular expression.
206
169
 
207
- | EXAMPLE (1 group, 1 hierarchy):
208
- | - "alt.test"
209
- | - "^news.*"
170
+ DEFAULT: Empty
210
171
 
172
+ EXAMPLE:
173
+ - "alt.test"
174
+ - "^news.*"
211
175
 
212
176
  **DEBUG_LOG**
213
- The name of a file, where debug messages are written. Setting this
214
- variable will enable the log. Leave empty to disable logging.
177
+ The name of the file where debug messages are logged. If specified, logging will be enabled.
178
+ If empty, logging is disabled.
215
179
 
216
- CONTENT: The name of a writable file, which will be created if inexistent
217
- and overwritten if need be.
180
+ CONTENT: The name of a writable file, which will be created if it doesn't exist and overwritten if necessary.
218
181
 
219
- DEFAULT: empty
182
+ DEFAULT: Empty
220
183
 
221
- EXAMPLE: '/tmp/a_log-file.txt'
184
+ EXAMPLE: '/tmp/a_log-file.txt'
222
185
 
223
186
  **LOG LEVEL**
224
- One of debug, fatal, error, info, warn
187
+ One of: debug, fatal, error, info, warn.
225
188
 
226
189
  **REFERENCES_SEPARATOR**
227
- A symbol or sequence of symbols marking the end of the message-body and the
228
- beginning of a list of “references” or “footnotes”. It will only appear, if
229
- the original message-body contains text marked for use as such a footnote.
230
- See *REFERENCES_DELIMITER*.
190
+ A symbol or sequence marking the end of the message body and the beginning of a footnote list.
191
+ If not defined, footnotes are appended directly after the message body.
231
192
 
232
- If the option is not defined or empty, the list of footnotes will appear
233
- below the last line of the message body and no separator will be inserted.
193
+ CONTENT: A quoted symbol or sequence.
234
194
 
235
- CONTENT: A quoted symbol or sequence of symbols.
195
+ DEFAULT: Empty
236
196
 
237
- DEFAULT: empty
238
-
239
- EXAMPLE: '---------'
197
+ EXAMPLE: '---------'
240
198
 
241
199
  **REFERENCES_DELIMITER**
242
- A sequence of at least two symbols marking the beginning of a text which will
243
- serve as footnote (or reference). The **reversed sequence** musst be used to
244
- mark the end of the text. The presence of this sequence or symbol in the
245
- original message body will cause the enclosed text to be moved below the
246
- message body. The *REFERENCES_SEPARATOR*, if defined, will separate the
247
- message from the list of footnotes.
248
- If this option is not defined or empty, footnotes are not created.
200
+ A sequence marking the beginning and end of text to be used as a footnote or reference. The reversed
201
+ sequence is used to mark the end.
249
202
 
250
- CONTENT a quoted symbol or sequence of symbols.
203
+ CONTENT: A quoted symbol or sequence.
251
204
 
252
- DEFAULT: none/empty
205
+ DEFAULT: None (empty)
253
206
 
254
- EXAMPLE: '%?'
207
+ EXAMPLE: '%?'
255
208
 
256
209
  **REFERENCE_FORMAT**
257
- A format-string, using %s for a number, replacing the reference-
258
- text in the message body.
259
-
260
- DEFAULT: " %s)" -> becomes 1) ... 2) ... 3)
210
+ A format string using `%s` for a number to replace the reference text in the body.
261
211
 
262
- EXAMPLE: "(%s)" -> becomes (1) ... (2) ... (3)
212
+ DEFAULT: " %s)" becomes 1) ... 2) ... 3)
263
213
 
264
- **VFY_URLS**
265
- A Boolean constant. It determines if the program shall verify and possibly
266
- try to correct URLs. Even if URLs are identified as such, only a few
267
- manipulations are attempted :
268
- * Angular brackets '<' and '>' are added, if missing
269
- * Slashes are added, if they are found missing after "http(s):"
214
+ EXAMPLE: "(%s)" → becomes (1) ... (2) ... (3)
270
215
 
271
- If the variable is not set, a value 'yes' is assumed.
216
+ **VFY_URLS**
217
+ A boolean constant determining whether URLs should be verified and corrected if necessary.
218
+ URL manipulations include adding angular brackets ('<', '>') and slashes after "http(s):".
272
219
 
273
- CONTENT: One of YES, yes, NO, no, and other variations of case.
220
+ CONTENT: One of YES, yes, NO, no (case insensitive).
274
221
 
275
- DEFAULT: yes
222
+ DEFAULT: yes
276
223
 
277
- Example: ... I let you guess.
224
+ EXAMPLE: ... I leave this to your discretion.
278
225
 
279
226
  **OVERRIDE_CONFIG**
280
- A Boolean constant. You can choose to override the following configuration
281
- options before an article is posted: GROUP_SIGS, XNAY_GROUPS, CUSTOM_HEADERS,
282
- DEBUG_LOG and VFY_URLS. A dialog may be displayed which allows you to disable
283
- any of these five options, so that the defaults from flnews prevail.
227
+ A boolean constant that controls whether configuration options can be overridden before posting.
284
228
 
285
- ATTN! Canceling the dialog or pushing the Esc-key does interrupt the process.
286
- Flnews will not post the article.
229
+ Set this to "no" to disable the dialog.
287
230
 
288
- Set this option to no, NO or similar to disable the dialog.
231
+ DEFAULT: yes
289
232
 
290
- DEFAULT: yes
291
-
292
- EXAMPLE: No
233
+ EXAMPLE: No
293
234
 
294
235
  Other Information
295
- =================
236
+ ========================
296
237
 
297
238
  Testing
298
239
  -------
299
- The effects that the execution of the program will have on a posting can be
300
- verified in two ways:
240
+ You can verify the post-processor’s effect by using one of two methods:
301
241
 
302
- 1. By piping-in a post that had previously been saved to a file:
242
+ 1. Pipe a saved post into the program:
303
243
 
304
244
  **:~$ /usr/local/bin/[post-processor] < [test-article]**
305
245
 
306
- This will show the resulting new version of the article on screen, but you
307
- can also pipe the output into another file. This is a great way to test a
308
- program during development or to test your own configuration of the program.
309
- 2. By posting directly into a test-newsgroup (like alt.test or similar). This
310
- is mandatory before you really post to thematic newsgroups and when the
311
- settings of the post-processor will affect the article.
246
+ This will show the modified article, and you can pipe it into another file for further testing.
312
247
 
248
+ 2. Post directly to a test newsgroup (e.g., alt.test). This is essential before posting to
249
+ real newsgroups, especially when the post-processor will alter the article.
313
250
 
314
- Source-Code
251
+ Source Code
315
252
  -----------
316
- The gem-file that you get with the gem-utility or from rubygems.org contains
317
- all the code of the program and some documentation (this page notably). To read
318
- its content, you must
253
+ The gem file for the program, available via the gem utility or rubygems.org, contains all
254
+ the source code and documentation (this page included). To extract it, do the following:
319
255
 
320
- 1. untar the gem-file with tar -xf flnews_post_proc-0.1.gem
321
- 2. uncompress the data.gz archive: gunzip data.gz
322
- 3. untar the resultig data.tar archive: tar -xf data.tar
256
+ 1. Extract the gem file: `tar -xf flnews_post_proc-0.1.gem`
257
+ 2. Uncompress the data archive: `gunzip data.gz`
258
+ 3. Extract the data archive: `tar -xf data.tar`
323
259
 
324
- This creates the directories bin, doc and lib.
260
+ This will create the directories `bin`, `doc`, and `lib`.
325
261
 
326
262
  License
327
263
  -------
328
- flnews_post_proc is distributed under the conditions of the WTFPL-2.0 or later
329
- License (see http://www.wtfpl.net/txt/copying/ or license-text in the doc
330
- directory of the gem-file).
264
+ The flnews_post_proc is distributed under the WTFPL-2.0 or later License.
265
+ For more details, visit http://www.wtfpl.net/txt/copying/ or refer to the license file in the
266
+ documentation directory of the gem.
331
267
 
332
268
  Author
333
269
  ------
334
- | flnews_post_proc has been developed by
335
- | Michael Uplawski <michael.uplawski@uplawski.eu>
270
+ flnews_post_proc has been developed by
271
+ Michael Uplawski <michael.uplawski@uplawski.eu>
336
272
 
337
273
  Ω
338
274
  ==
275
+
data/lib/basic_logging.rb CHANGED
@@ -2,7 +2,7 @@
2
2
  #encoding: UTF-8
3
3
  =begin
4
4
  /***************************************************************************
5
- * 2023-2024, Michael Uplawski <michael.uplawski@uplawski.eu> *
5
+ * 2023-2025, Michael Uplawski <michael.uplawski@uplawski.eu> *
6
6
  * This program is free software; you can redistribute it and/or modify *
7
7
  * it under the terms of the WTFPL 2.0 or later, see *
8
8
  * http://www.wtfpl.net/about/ *
data/lib/body.rb CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  =begin
4
4
  /***************************************************************************
5
- * 2023-2024, Michael Uplawski <michael.uplawski@uplawski.eu> *
5
+ * 2023-2025, Michael Uplawski <michael.uplawski@uplawski.eu> *
6
6
  * This program is free software; you can redistribute it and/or modify *
7
7
  * it under the terms of the WTFPL 2.0 or later, see *
8
8
  * http://www.wtfpl.net/about/ *
@@ -15,7 +15,7 @@
15
15
  =end
16
16
 
17
17
  require_relative 'basic_logging'
18
- require_relative 'configuration'
18
+ require_relative 'configuration'
19
19
 
20
20
  WRAP_LENGTH = 65
21
21
  # Endow the String class with a wrap function.
data/lib/configuration.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  #encoding: UTF-8
2
2
  =begin
3
3
  /***************************************************************************
4
- * 2023-2024, Michael Uplawski <michael.uplawski@uplawski.eu> *
4
+ * 2023-2025, Michael Uplawski <michael.uplawski@uplawski.eu> *
5
5
  * This program is free software; you can redistribute it and/or modify *
6
6
  * it under the terms of the WTFPL 2.0 or later, see *
7
7
  * http://www.wtfpl.net/about/ *
@@ -1,5 +1,5 @@
1
1
  #/***************************************************************************
2
- # * 2023-2024, Michael Uplawski <michael.uplawski@uplawski.eu> *
2
+ # * 2023-2025, Michael Uplawski <michael.uplawski@uplawski.eu> *
3
3
  # * *
4
4
  # * This program is free software; you can redistribute it and/or modify *
5
5
  # * it under the terms of the DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE *
@@ -123,7 +123,7 @@ REFERENCES_SEPARATOR: "──────────────────"
123
123
  # REFERENCE_DELIMITER
124
124
  # A symbol or sequence of symbols marking the beginning of a text which will
125
125
  # serve as footnote (or reference). The reversed sequence musst be used to mark
126
- # the end of the text. The presence of this sequence or symbol in the origimal
126
+ # the end of the text. The presence of this sequence or symbol in the original
127
127
  # message body will cause the enclosed text to be moved below the message body.
128
128
  # The REFERENCES_SEPARATOR, if defined, will separate the message from the list
129
129
  # of footnotes.
@@ -136,7 +136,7 @@ REFERENCES_DELIMITER: "%="
136
136
  # REFERENCE_FORMAT
137
137
  # A format-string, using %s for a number, replacing the reference-
138
138
  # text in the message body.
139
- # DEFAULT: " %s]" -> becomes 1) ... 2) ... 3)
139
+ # DEFAULT: " %s)" -> becomes 1) ... 2) ... 3)
140
140
  # EXAMPLE: "(%s)" -> becomes (1) ... (2) ... (3)
141
141
  REFERENCE_FORMAT: " ➤%s"
142
142
 
@@ -1,7 +1,7 @@
1
1
  #encoding: UTF-8
2
2
  =begin
3
3
  /***************************************************************************
4
- * 2023-2024, Michael Uplawski <michael.uplawski@uplawski.eu> *
4
+ * 2023-2025, Michael Uplawski <michael.uplawski@uplawski.eu> *
5
5
  * This program is free software; you can redistribute it and/or modify *
6
6
  * it under the terms of the WTFPL 2.0 or later, see *
7
7
  * http://www.wtfpl.net/about/ *