flnews_post_proc 1.96.1 → 2.0

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.
@@ -1,34 +1,39 @@
1
+
1
2
  ===========================
2
3
  flnews_post_proc
3
4
  ===========================
4
5
 
5
6
  .. |program| replace:: **flnews_post_proc**
6
7
 
7
- .. _flnews: https://micha.freeshell.org/flnews/
8
+ .. _flnews: https://micha.freeshell.org/flnews
9
+ .. _WTFPL-2.0: https://www.wtfpl.net/about/
10
+ .. _CC By-ND 4.0: https://creativecommons.org/licenses/by-nd/4.0/
11
+ .. _rubygems.org: https://rubygems.org/gems/flnews_post_proc
12
+ .. _en Français: https://www.uplawski.eu/div/flnews/gem_doc/fr
13
+
8
14
 
9
15
  ------------------------------------------
10
16
  Post-Processor for the flnews_ Newsreader
11
17
  ------------------------------------------
12
-
13
18
  .. contents::
14
- :local:
15
- :backlinks: none
16
- :depth: 3
19
+ :local:
20
+ :backlinks: none
21
+ :depth: 3
17
22
 
18
23
  .. _SYNOPSIS:
19
24
 
20
25
  SYNOPSIS
21
26
  ===========================
22
- The post-processor is invoked by piping an article into it. This typically
23
- occurs automatically when the "post_proc" variable is set to |program|
24
- in the flnews configuration file.
27
+ The post-processor is invoked by piping an article into it. This typically
28
+ occurs automatically when the "post_proc" variable is set to |program|
29
+ in the flnews configuration file.
25
30
 
26
- For testing purposes, you can also pipe locally stored articles into the
27
- post-processor using a command like:
31
+ For testing purposes, you can also pipe locally stored articles into the
32
+ post-processor using a command like:
28
33
 
29
34
  |program| < article
30
35
 
31
- .or:
36
+ .or:
32
37
 
33
38
  cat article.txt | |program|
34
39
 
@@ -37,286 +42,288 @@ post-processor using a command like:
37
42
  DESCRIPTION
38
43
  ===========================
39
44
 
40
- The flnews newsreader fully supports Usenet access, enabling the reception and
41
- reading of articles from newsgroups, as well as composing and posting them.
45
+ The flnews newsreader fully supports Usenet access, enabling the reception and
46
+ reading of articles from newsgroups, as well as composing and posting them.
42
47
 
43
- When comparing various news clients, differences will often influence your
44
- choice of preferred client. Flnews distinguishes itself by not only offering
45
- control over its internal behavior, but also by allowing you to modify outgoing
46
- posts just before they are sent to the configured NNTP server.
48
+ When comparing various news clients, differences will often influence your
49
+ choice of preferred client. Flnews distinguishes itself by not only offering
50
+ control over its internal behavior, but also by allowing you to modify outgoing
51
+ posts just before they are sent to the configured NNTP server.
47
52
 
48
- The |program| program can be used to modify and enhance a post in ways
49
- that flnews alone cannot. It is configurable and may meet the needs of some
50
- Usenet users, though it is primarily intended as a starting point for creating
51
- your own custom solutions.
53
+ The |program| program can be used to modify and enhance a post in ways
54
+ that flnews alone cannot. It is configurable and may meet the needs of some
55
+ Usenet users, though it is primarily intended as a starting point for creating
56
+ your own custom solutions.
52
57
 
53
58
  .. _Limitations of Basic Newsreaders:
54
59
 
55
60
  Limitations of Basic Newsreaders
56
61
  --------------------------------------------------------
57
- While flnews creates posts that are generally complete and ready for
58
- submission, there are instances where users might find the output
59
- unsatisfactory for arbitrary reasons:
60
-
61
- * If you're posting to different newsgroups in multiple languages, the
62
- introductory line referencing a prior post can only be set once in the flnews
63
- configuration file. As a result, posts to a French newsgroup, for example,
64
- may start with an introduction in English. The post-processor can address
65
- this by setting specific introductory lines for each newsgroup.
66
-
67
- * Similar issues arise when you set a standard signature and want it to vary
68
- based on the newsgroup. The post-processor allows different signatures to be
69
- used for different newsgroups, and you can even randomize the selection from
70
- a list of signatures stored in a file.
71
-
72
- * Custom headers, such as GnuPG key IDs or your language proficiency, can also
73
- be added to posts, though signatures may be a better alternative. Custom
74
- headers can be defined in the configuration file and will be added to
75
- outgoing posts.
76
-
77
- * Headers like "Archive" and "X-No-Archive" are sometimes set to prevent an
78
- article from being indexed by search engines (e.g., Google). For example,
79
- test posts likely don't need to be included in search results. The
80
- post-processor can apply both headers to all posts sent to certain
81
- newsgroups.
62
+ While flnews creates posts that are generally complete and ready for
63
+ submission, there are instances where users might find the output
64
+ unsatisfactory for arbitrary reasons:
65
+
66
+ * If you're posting to different newsgroups in multiple languages, the
67
+ introductory line referencing a prior post can only be set once in the flnews
68
+ configuration file. As a result, posts to a French newsgroup, for example,
69
+ may start with an introduction in English. The post-processor can address
70
+ this by setting specific introductory lines for each newsgroup.
71
+
72
+ * Similar issues arise when you set a standard signature and want it to vary
73
+ based on the newsgroup. The post-processor allows different signatures to be
74
+ used for different newsgroups, and you can even randomize the selection from
75
+ a list of signatures stored in a file.
76
+
77
+ * Custom headers, such as GnuPG key IDs or your language proficiency, can also
78
+ be added to posts, though signatures may be a better alternative. Custom
79
+ headers can be defined in the configuration file and will be added to
80
+ outgoing posts.
81
+
82
+ * Headers like "Archive" and "X-No-Archive" are sometimes set to prevent an
83
+ article from being indexed by search engines (e.g., Google). For example,
84
+ test posts likely don't need to be included in search results. The
85
+ post-processor can apply both headers to all posts sent to certain
86
+ newsgroups.
82
87
 
83
88
  **NOTE**: As of 2024, the "X-No-Archive" header has limited effectiveness,
84
89
  and it is up to server operators whether or not to honor it.
85
90
 
86
- * Posts that include many references to other posts or URLs can become
87
- cluttered. The post-processor can convert marked text into footnotes, similar
88
- to the <ref/> link format used in Wikipedia, with the delimiter configurable
89
- in the configuration file.
90
- Example (using %=): "This is an object %=and this becomes the footnote,
91
- describing the object further=%". See also the hints under
92
- `EDITING FOOTNOTES`_, below.
91
+ * Posts that include many references to other posts or URLs can become
92
+ cluttered. The post-processor can convert marked text into footnotes, similar
93
+ to the <ref/> link format used in Wikipedia, with the delimiter configurable
94
+ in the configuration file.
95
+ Example (using %=): "This is an object %=and this becomes the footnote,
96
+ describing the object further=%". See also the hints under
97
+ `EDITING FOOTNOTES`_, below.
93
98
 
94
99
  .. _Dialog for Overriding Settings:
95
100
 
96
101
  Dialog for Overriding Settings
97
102
  ------------------------------
98
- **IMPORTANT**: As of version 1.72, YAD or Zenity cannot be used for the dialog
99
- interface.
103
+ **IMPORTANT**: As of version 1.72, YAD or Zenity cannot be used for the dialog
104
+ interface.
105
+
106
+ Before the post-processor runs, a dialog can be displayed to allow users to
107
+ **disable** certain `CONFIGURATION`_ options. If Whiptail or xterm are available,
108
+ you can choose to disable the following options. You **cannot** enable options
109
+ that haven't already been set in the configuration.
110
+
111
+ * Signatures (if set in the `CONFIGURATION`_) can be **ignored**. A default signature will be used, or no signature at all.
112
+
113
+ * Custom headers can be **omitted**.
100
114
 
101
- Before the post-processor runs, a dialog can be displayed to allow users to
102
- **disable** certain `CONFIGURATION`_ options. If Whiptail or xterm are available,
103
- you can choose to disable the following options. You **cannot** enable options
104
- that haven't already been set in the configuration.
115
+ * The "Archive" and "X-No-Archive" headers can be **ignored** if set for the current newsgroup.
105
116
 
106
- * Signatures (if set in the `CONFIGURATION`_) can be **ignored**. A default
107
- signature will be used, or no signature at all.
108
- * Custom headers can be **omitted**.
109
- * The "Archive" and "X-No-Archive" headers can be **ignored** if set for the
110
- current newsgroup.
111
- * Logging can be **disabled**, if enabled.
117
+ * Logging can be **disabled**, if enabled.
112
118
 
113
- Pressing Esc or the Cancel button on the dialog will interrupt the process, and
114
- flnews will not post the article.
119
+ Pressing Esc or the Cancel button on the dialog will interrupt the process, and
120
+ flnews will not post the article.
115
121
 
116
- To disable the dialog entirely (and apply all configured options without
117
- further interaction), set the **OVERRIDE_CONFIG** option.
122
+ To disable the dialog entirely (and apply all configured options without
123
+ further interaction), set the **OVERRIDE_CONFIG** option.
118
124
 
119
125
  .. _CONFIGURATION:
120
126
 
121
127
  CONFIGURATION
122
128
  ===============
123
- Upon first execution of the program, a copy of the original configuration file
124
- is created in */home/[user]/.flnews_post_proc.conf*. This file is used
125
- thereafter. Deleting it will cause the file to be recreated, but any custom
126
- changes will be lost.
127
129
 
128
- The configuration file uses YAML syntax and includes detailed explanations. The
129
- variables within it fall into two categories:
130
+ Upon first execution of the program, a copy of the original configuration file
131
+ is created in */home/[user]/.flnews_post_proc.conf*. This file is used
132
+ thereafter. Deleting it will cause the file to be recreated, but any custom
133
+ changes will be lost.
130
134
 
131
- 1. Variables that represent values originally set by flnews, which can be used
132
- or replaced. These elements are typically captured using regular
133
- expressions.
135
+ The configuration file uses YAML syntax and includes detailed explanations. The
136
+ variables within it fall into two categories:
134
137
 
135
- 2. Variables that define new or modified content.
138
+ 1. Two variables that represent values originally set by flnews, which can be
139
+ used or replaced. These elements are typically captured using regular
140
+ expressions.
141
+
142
+ 2. Most variables define new or modified content.
136
143
 
137
144
  Configuration Options
138
145
  -------------------------------
139
-
140
146
  .. empty lines in the following definition list are in reality '\ '
141
147
 
142
148
  **FUP_NAME**
143
149
 
144
- A regular expression that matches the name of the previous poster in a
145
- quoted post. This string is recognized in the original article and used
146
- with the matching element from `GROUP_INTROS`_.
147
-
148
- Leave this field empty to retain the default value from the FLNews
149
- configuration.
150
-
151
- CONTENT: A string representing a regular expression.
152
-
153
- DEFAULT: EMPTY
154
-
155
- EXAMPLE1: "On \\\\d+.\\\\d+.\\\\d{2,4} at \\\\d+:\\\\d+ **(.*)** wrote:"
156
-
157
- EXAMPLE2: "**(.*)** wrote:"
158
-
159
- .. _FUP_GROUP:
150
+ A regular expression that matches the name of the previous poster in a
151
+ quoted post. This string is recognized in the original article and used
152
+ with the matching element from `GROUP_INTROS`_.
153
+
154
+ Leave this field empty to retain the default value from the FLNews
155
+ configuration.
156
+
157
+ CONTENT: A string representing a regular expression.
158
+
159
+ DEFAULT: EMPTY
160
+
161
+ EXAMPLE1: "On \\\\d+.\\\\d+.\\\\d{2,4} at \\\\d+:\\\\d+ **(.*)** wrote:"
162
+
163
+ EXAMPLE2: "**(.*)** wrote:"
164
+
165
+ .. _FUP_GROUP:
160
166
 
161
167
  **FUP_GROUP**
162
168
 
163
- A regular expression that matches the newsgroup where the quoted post was
164
- published.
165
-
166
- Leave this field empty to ignore the exact group.
167
-
168
- CONTENT: A string representing a regular expression.
169
-
170
- DEFAULT: EMPTY
171
-
172
- EXAMPLE: "wrote in **(.*)**:"
169
+ A regular expression that matches the newsgroup where the quoted post was
170
+ published.
173
171
 
174
- .. _GROUP_INTROS:
172
+ Leave this field empty to ignore the exact group.
173
+
174
+ CONTENT: A string representing a regular expression.
175
+
176
+ DEFAULT: EMPTY
177
+
178
+ EXAMPLE: "wrote in **(.*)**:"
179
+
180
+ .. _GROUP_INTROS:
175
181
 
176
182
  **GROUP_INTROS**
177
183
 
178
- Introductory strings referring to the previous poster in a quoted post.
179
- When the newsgroup matches `FUP_GROUP`_, these variables are used in the
180
- resulting introduction.
181
-
182
- CONTENT: A newsgroup or regular expression per line, followed by a colon,
183
- space, and string.
184
-
185
- DEFAULT: As configured in FLNews.
186
-
187
- EXAMPLE: alt.test: "Thus spoke %fup_name% on that baleful %fup_date%:"
184
+ Introductory strings referring to the previous poster in a quoted post.
185
+ When the newsgroup matches `FUP_GROUP`_, these variables are used in the
186
+ resulting introduction.
187
+
188
+ CONTENT: A newsgroup or regular expression per line, followed by a colon,
189
+ space, and string.
190
+
191
+ DEFAULT: As configured in FLNews.
192
+
193
+ EXAMPLE: alt.test: "Thus spoke %fup_name% on that baleful %fup_date%:"
188
194
 
189
195
  **GROUP_SIGS**
190
196
 
191
- Signature lines for each newsgroup or a path to a file containing
192
- signatures, which should be formatted and separated by one empty line. A
193
- random signature is picked from the file for each newsgroup. You can also
194
- source another file within the signature file by starting a line with
195
- ". /path/to/other/file".
196
-
197
- CONTENT: A newsgroup or regular expression per line, followed by a colon,
198
- \ \ \ \ space, and string.
199
-
200
- DEFAULT: As configured in flnews.
197
+ Signature lines for each newsgroup or a path to a file containing
198
+ signatures, which should be formatted and separated by one empty line. A
199
+ random signature is picked from the file for each newsgroup. You can also
200
+ source another file within the signature file by starting a line with
201
+ ". /path/to/other/file".
201
202
 
202
- EXAMPLE::
203
+ CONTENT: A newsgroup or regular expression per line, followed by a colon,
204
+ \ \ \ \ space, and string.
203
205
 
204
- alt.test: "Signature for alt.test\\r\\nsecond line"
205
- comp.*: /home/[user]/.my_sigs
206
+ DEFAULT: As configured in flnews.
207
+
208
+ EXAMPLE::
209
+
210
+ alt.test: "Signature for alt.test\\r\\nsecond line"
211
+ comp.*: /home/[user]/.my_sigs
206
212
 
207
213
  **CUSTOM_HEADERS**
208
214
 
209
- Additional custom headers to be added to outgoing articles.
210
-
211
- CONTENT: One line per header, starting with a dash and space, followed by
212
- the header name and value.
213
-
214
- DEFAULT: Undefined
215
-
216
- EXAMPLE::
215
+ Additional custom headers to be added to outgoing articles.
216
+
217
+ CONTENT: One line per header, starting with a dash and space, followed by
218
+ the header name and value.
217
219
 
218
- - 'X-My-Header: nothing fancy'
219
- - 'X-Another-Header: care not!'
220
+ DEFAULT: Undefined
221
+
222
+ EXAMPLE::
223
+
224
+ - 'X-My-Header: nothing fancy'
225
+ - 'X-Another-Header: care not!'
220
226
 
221
227
  **NO_ARCHIVE_GROUPS**
222
228
 
223
229
  Newsgroups where the "Archive: no" and "X-No-Archive: YES" headers should
224
230
  be set.
225
-
231
+
226
232
  CONTENT: A line with a dash and space, followed by the group name or a
227
233
  regular expression.
228
-
234
+
229
235
  DEFAULT: Empty
230
-
236
+
231
237
  EXAMPLE::
232
238
 
233
- - "alt.test"
234
- - "^news.*"
239
+ - "alt.test"
240
+ - "^news.*"
235
241
 
236
242
  **DEBUG_LOG**
237
243
 
238
- The name of the file where debug messages are logged. If specified, logging
239
- will be enabled. If empty, logging is disabled.
240
-
241
- CONTENT: The name of a writable file, which will be created if it doesn't
242
- exist and overwritten if necessary.
243
-
244
- DEFAULT: Empty
245
-
246
- EXAMPLE: "/tmp/a_log-file.txt"
244
+ The name of the file where debug messages are logged. If specified, logging
245
+ will be enabled. If empty, logging is disabled.
246
+
247
+ CONTENT: The name of a writable file, which will be created if it doesn't
248
+ exist and overwritten if necessary.
249
+
250
+ DEFAULT: Empty
251
+
252
+ EXAMPLE: "/tmp/a_log-file.txt"
247
253
 
248
254
  **LOG LEVEL**
249
255
 
250
- One of: debug, fatal, error, info, warn.
256
+ One of: debug, fatal, error, info, warn.
251
257
 
252
258
  **REFERENCES_SEPARATOR**
253
259
 
254
- A symbol or sequence marking the end of the message body and the beginning
255
- of a footnote list. If not defined, footnotes are appended directly after
256
- the message body.
257
-
258
- CONTENT: A quoted symbol or sequence.
259
-
260
- DEFAULT: Empty
261
-
262
- EXAMPLE: "---------"
260
+ A symbol or sequence marking the end of the message body and the beginning
261
+ of a footnote list. If not defined, footnotes are appended directly after
262
+ the message body.
263
+
264
+ CONTENT: A quoted symbol or sequence.
265
+
266
+ DEFAULT: Empty
267
+
268
+ EXAMPLE: "---------"
263
269
 
264
270
  **REFERENCES_DELIMITER**
265
271
 
266
- A sequence marking the beginning and end of text to be used as a footnote
267
- or reference. The reversed sequence is used to mark the end.
268
-
269
- CONTENT: A quoted symbol or sequence.
270
-
271
- DEFAULT: None (empty)
272
-
273
- EXAMPLE: "%?"
272
+ A sequence marking the beginning and end of text to be used as a footnote
273
+ or reference. The reversed sequence is used to mark the end.
274
+
275
+ CONTENT: A quoted symbol or sequence.
276
+
277
+ DEFAULT: None (empty)
278
+
279
+ EXAMPLE: "%?"
274
280
 
275
281
  .. _REFERENCE_FORMAT:
276
282
 
277
283
  **REFERENCE_FORMAT**
278
284
 
279
- A format string using `%s` for a number to replace the reference text in
280
- the body.
281
-
282
- DEFAULT: " %s)" → becomes 1) ... 2) ... 3)
283
-
284
- EXAMPLE: "(%s)" → becomes (1) ... (2) ... (3)
285
+ A format string using `%s` for a number to replace the reference text in
286
+ the body.
287
+
288
+ DEFAULT: " %s)" → becomes 1) ... 2) ... 3)
289
+
290
+ EXAMPLE: "(%s)" → becomes (1) ... (2) ... (3)
285
291
 
286
292
  **VFY_URLS**
287
293
 
288
- A boolean constant determining whether URLs should be verified and
289
- corrected if necessary. URL manipulations include adding angular brackets
290
- ('<', '>') and slashes after "http(s):".
291
-
292
- CONTENT: One of YES, yes, NO, no (case insensitive).
293
-
294
- DEFAULT: yes
295
-
296
- EXAMPLE: ... I leave this to your discretion.
297
-
294
+ A boolean constant determining whether URLs should be verified and
295
+ corrected if necessary. URL manipulations include adding angular brackets
296
+ ('<', '>') and slashes after "http(s):".
297
+
298
+ CONTENT: One of YES, yes, NO, no (case insensitive).
299
+
300
+ DEFAULT: yes
301
+
302
+ EXAMPLE: ... I leave this to your discretion.
303
+
298
304
  .. _override dialog:
299
305
 
300
306
  **OVERRIDE_CONFIG**
301
307
 
302
- A boolean constant that controls whether configuration options can be
303
- overridden before posting.
304
-
305
- Set this to "no" to disable the dialog.
306
-
307
- DEFAULT: yes
308
-
309
- EXAMPLE: No
308
+ A boolean constant that controls whether configuration options can be
309
+ overridden before posting.
310
+
311
+ Set this to "no" to disable the dialog.
312
+
313
+ DEFAULT: yes
314
+
315
+ EXAMPLE: No
310
316
 
311
317
  **USE_OLD**
312
- A boolean constant that controls whether |program| handles subject changes.
313
- See `Subject changes`_ for the details.
314
318
 
315
- Set to "false" or leave empty to ignore subject changes.
319
+ A boolean constant that controls whether |program| handles subject changes.
320
+ See `Subject changes`_ for the details.
321
+
322
+ Set to "false" or leave empty to ignore subject changes.
316
323
 
317
- DEFAULT: false
324
+ DEFAULT: false
318
325
 
319
- EXAMPLE: yes
326
+ EXAMPLE: yes
320
327
 
321
328
  .. _Other Information:
322
329
 
@@ -327,113 +334,120 @@ Other Information
327
334
 
328
335
  Subject changes:
329
336
  ----------------
337
+ |program| can handle subject changes, provided the configuration option **USE_OLD**
338
+ is set to **true**. In this case, additional prefixes are recognized (flnews
339
+ handles "Was:" on its own). The additional prefixes are case insensitive
340
+ variations of the German "*War:*" and a french "*Était:*", with or without
341
+ Accent. The french prefix can also contain 1 space before the colon.
330
342
 
331
- |program| can handle subject changes, provided the configuration option **USE_OLD**
332
- is set to **true**. In this case, additional prefixes are recognized (flnews
333
- handles "Was:" on its own). The additional prefixes are case insensitive
334
- variations of the German "*War:*" and a french "*Était:*", with or without
335
- Accent. The french prefix can also contain 1 space before the colon.
343
+ When you write a follow-up to an Article with
344
+ *Subject: This topic (Was: old topic)*
345
+ |program| will remove the part in parenthesis, also (War: old topic) and
346
+ (était : old topic).
336
347
 
337
- When you write a follow-up to an Article with
338
- *Subject: This topic (Was: old topic)*
339
- |program| will remove the part in parenthesis, also (War: old topic) and
340
- (était : old topic).
348
+ This necessitates that **your own subject changes must not use one of those
349
+ prefixes**. Instead, use *(Old: ...)* like in
350
+ *Subject: new topic (Old: previous topic)*
341
351
 
342
- This necessitates that **your own subject changes must not use one of those
343
- prefixes**. Instead, use *(Old: ...)* like in
344
- *Subject: new topic (Old: previous topic)*
352
+ |program| will replace Old: by Was: in the posted article.
345
353
 
346
- |program| will replace Old: by Was: in the posted article.
354
+ **Important**: When *USE_OLD* is true, none of the recognized prefixes will
355
+ survive. If you forget to use *Old* instead, the subject change will not be
356
+ recognizable as such, your article will only carry the new subject.
347
357
 
348
- Leave the option USE_OLD untouched or set it to **false** to ignore subject
349
- changes.
358
+ Leave the option USE_OLD untouched or set it to **false** to ignore subject
359
+ changes.
350
360
 
351
- **NOTE** that Flnews may continue to remove the part of the subject line that
352
- is prefixed with *(Was:*.
361
+ **NOTE** that Flnews may continue to remove the part of the subject line that
362
+ is prefixed with *(Was:* or *(was:*.
353
363
 
354
364
  .. _EDITING FOOTNOTES:
355
365
 
356
366
  Editing footnotes
357
367
  -----------------
358
- Writing footnote text (or URL references) inline while composing an article may
359
- be tempting, but it will likely break your line formatting. It's difficult to
360
- predict line lengths after footnotes are automatically moved to the end.
361
- Instead, write your complete article first, then add footnotes just before
362
- posting.
363
- This lets you anticipate how the final article will look after footnote markers
364
- replace the inline text (see REFERENCE_FORMAT_, above).
368
+ Writing footnote text (or URL references) inline while composing an article may
369
+ be tempting, but it will likely break your line formatting. It's difficult to
370
+ predict line lengths after footnotes are automatically moved to the end.
371
+ Instead, write your complete article first, then add footnotes just before
372
+ posting.
373
+ This lets you anticipate how the final article will look after footnote markers
374
+ replace the inline text (see REFERENCE_FORMAT_, above).
365
375
 
366
376
  .. _Signatures in Supersedes:
367
377
 
368
378
  Signatures in Supersedes
369
379
  ------------------------
370
- When superseding an existing post, the post-processor will NOT automatically add a signature.
371
- This preserves the original post content as much as possible.
380
+ When superseding an existing post, the post-processor will NOT automatically add a signature.
381
+ This preserves the original post content as much as possible.
372
382
 
373
- To retain the signature from the original post:
383
+ To retain the signature from the original post:
374
384
 
375
- 1. In flnews, select the entire article body with the mouse—from the first line
376
- (including any introductions) down to the last line of the signature.
385
+ 1. In flnews, select the entire article body with the mouse—from the first line (including any introductions) down to the last line of the signature.
377
386
 
378
- 2. From the Article menu, select **Supersede**.
387
+ 2. From the Article menu, select **Supersede**.
379
388
 
380
- 3. Edit the article text as needed. The signature will be included in te
381
- editable text (normally, flnews strips signatures before opening the editor).
389
+ 3. Edit the article text as needed. The signature will be included in te editable text (normally, flnews strips signatures before opening the editor).
382
390
 
383
- 4. Send the article.
391
+ 4. Send the article.
384
392
 
385
- **Note:** The `override dialog`_ (see above) does not affect signatures in superseding posts.
393
+ **Note:** The `override dialog`_ (see above) does not affect signatures in superseding posts.
386
394
 
387
395
  .. _Testing:
388
396
 
389
397
  Testing
390
398
  -------
391
- You can verify the post-processor’s effect by using one of two methods:
399
+ You can verify the post-processor’s effect by using one of two methods:
392
400
 
393
- 1. Pipe a saved post into the program:
401
+ 1. Pipe a saved post into the program:
394
402
 
395
- **:~$ /usr/local/bin/[post-processor] < [test-article]**
403
+ **:~$ /usr/local/bin/[post-processor] < [test-article]**
396
404
 
397
- This will show the modified article, and you can pipe it into another file
398
- for further testing.
405
+ This will show the modified article, and you can pipe it into another file
406
+ for further testing.
399
407
 
400
- 2. Post directly to a test newsgroup (e.g., alt.test). This is essential before
401
- posting to real newsgroups, especially when the post-processor will alter
402
- the article.
408
+ 2. Post directly to a test newsgroup (e.g., alt.test). This is essential before posting to real newsgroups,
409
+ especially when the post-processor will alter the article.
403
410
 
404
411
  .. _Source Code:
405
412
 
413
+
406
414
  Source Code
407
415
  -----------
416
+ The gem file for the program, available via the gem utility or `rubygems.org`_,
417
+ contains all the source code and documentation (this page included). To extract
418
+ it, do the following:
408
419
 
409
- .. _rubygems.org: https://rubygems.org/gems/flnews_post_proc
420
+ 1. Extract the gem file: `tar -xf flnews_post_proc-0.1.gem`
410
421
 
411
- The gem file for the program, available via the gem utility or `rubygems.org`_,
412
- contains all the source code and documentation (this page included). To extract
413
- it, do the following:
422
+ 2. Uncompress the data archive: `gunzip data.gz`
414
423
 
415
- 1. Extract the gem file: `tar -xf flnews_post_proc-0.1.gem`
416
- 2. Uncompress the data archive: `gunzip data.gz`
417
- 3. Extract the data archive: `tar -xf data.tar`
424
+ 3. Extract the data archive: `tar -xf data.tar`
418
425
 
419
- This will create the directories `bin`, `doc`, and `lib`.
426
+ This will create the directories `bin`, `doc`, and `lib`.
420
427
 
421
428
  .. _License:
422
429
 
423
430
  License
424
431
  -------
425
-
426
- .. _WTFPL-2.0: https://www.wtfpl.net/about/
427
-
428
- The |program| is distributed under the `WTFPL-2.0`_ or later License. For
429
- the complete license text, visit http://www.wtfpl.net/txt/copying/ or refer to
430
- the license file in the documentation directory of the gem.
432
+ The |program| is distributed under the `WTFPL-2.0`_ or later License. For
433
+ the complete license text, visit http://www.wtfpl.net/txt/copying/ or refer to
434
+ the license file in the documentation directory of the gem.
431
435
 
432
436
  .. _Author:
433
437
 
434
438
  Author
435
439
  ------
436
- |program| has been developed by
437
- Michael Uplawski <michael.uplawski@uplawski.eu>
440
+ |program| has been developed by Michael Uplawski <michael.uplawski@uplawski.eu>
441
+
442
+ .. |date| date::
443
+
444
+ This document
445
+ -------------
446
+ ©Michael Uplawski <michael.uplawski@uplawski.eu>
447
+
448
+ License: `CC BY-ND 4.0`_
449
+
450
+ Date: |date|
438
451
 
452
+ **Ω**
439
453