flnews_post_proc 1.40

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.
@@ -0,0 +1,654 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+ <head>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6
+ <meta name="generator" content="Docutils 0.20.1: https://docutils.sourceforge.io/" />
7
+ <title>Flnews_post_proc</title>
8
+ <style type="text/css">
9
+
10
+ /*
11
+ :Author: David Goodger (goodger@python.org)
12
+ :Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
13
+ :Copyright: This stylesheet has been placed in the public domain.
14
+
15
+ Default cascading style sheet for the HTML output of Docutils.
16
+
17
+ See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
18
+ customize this style sheet.
19
+ */
20
+
21
+ /* used to remove borders from tables and images */
22
+ .borderless, table.borderless td, table.borderless th {
23
+ border: 0 }
24
+
25
+ table.borderless td, table.borderless th {
26
+ /* Override padding for "table.docutils td" with "! important".
27
+ The right padding separates the table cells. */
28
+ padding: 0 0.5em 0 0 ! important }
29
+
30
+ .first {
31
+ /* Override more specific margin styles with "! important". */
32
+ margin-top: 0 ! important }
33
+
34
+ .last, .with-subtitle {
35
+ margin-bottom: 0 ! important }
36
+
37
+ .hidden {
38
+ display: none }
39
+
40
+ .subscript {
41
+ vertical-align: sub;
42
+ font-size: smaller }
43
+
44
+ .superscript {
45
+ vertical-align: super;
46
+ font-size: smaller }
47
+
48
+ a.toc-backref {
49
+ text-decoration: none ;
50
+ color: black }
51
+
52
+ blockquote.epigraph {
53
+ margin: 2em 5em ; }
54
+
55
+ dl.docutils dd {
56
+ margin-bottom: 0.5em }
57
+
58
+ object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
59
+ overflow: hidden;
60
+ }
61
+
62
+ /* Uncomment (and remove this text!) to get bold-faced definition list terms
63
+ dl.docutils dt {
64
+ font-weight: bold }
65
+ */
66
+
67
+ div.abstract {
68
+ margin: 2em 5em }
69
+
70
+ div.abstract p.topic-title {
71
+ font-weight: bold ;
72
+ text-align: center }
73
+
74
+ div.admonition, div.attention, div.caution, div.danger, div.error,
75
+ div.hint, div.important, div.note, div.tip, div.warning {
76
+ margin: 2em ;
77
+ border: medium outset ;
78
+ padding: 1em }
79
+
80
+ div.admonition p.admonition-title, div.hint p.admonition-title,
81
+ div.important p.admonition-title, div.note p.admonition-title,
82
+ div.tip p.admonition-title {
83
+ font-weight: bold ;
84
+ font-family: sans-serif }
85
+
86
+ div.attention p.admonition-title, div.caution p.admonition-title,
87
+ div.danger p.admonition-title, div.error p.admonition-title,
88
+ div.warning p.admonition-title, .code .error {
89
+ color: red ;
90
+ font-weight: bold ;
91
+ font-family: sans-serif }
92
+
93
+ /* Uncomment (and remove this text!) to get reduced vertical space in
94
+ compound paragraphs.
95
+ div.compound .compound-first, div.compound .compound-middle {
96
+ margin-bottom: 0.5em }
97
+
98
+ div.compound .compound-last, div.compound .compound-middle {
99
+ margin-top: 0.5em }
100
+ */
101
+
102
+ div.dedication {
103
+ margin: 2em 5em ;
104
+ text-align: center ;
105
+ font-style: italic }
106
+
107
+ div.dedication p.topic-title {
108
+ font-weight: bold ;
109
+ font-style: normal }
110
+
111
+ div.figure {
112
+ margin-left: 2em ;
113
+ margin-right: 2em }
114
+
115
+ div.footer, div.header {
116
+ clear: both;
117
+ font-size: smaller }
118
+
119
+ div.line-block {
120
+ display: block ;
121
+ margin-top: 1em ;
122
+ margin-bottom: 1em }
123
+
124
+ div.line-block div.line-block {
125
+ margin-top: 0 ;
126
+ margin-bottom: 0 ;
127
+ margin-left: 1.5em }
128
+
129
+ div.sidebar {
130
+ margin: 0 0 0.5em 1em ;
131
+ border: medium outset ;
132
+ padding: 1em ;
133
+ background-color: #ffffee ;
134
+ width: 40% ;
135
+ float: right ;
136
+ clear: right }
137
+
138
+ div.sidebar p.rubric {
139
+ font-family: sans-serif ;
140
+ font-size: medium }
141
+
142
+ div.system-messages {
143
+ margin: 5em }
144
+
145
+ div.system-messages h1 {
146
+ color: red }
147
+
148
+ div.system-message {
149
+ border: medium outset ;
150
+ padding: 1em }
151
+
152
+ div.system-message p.system-message-title {
153
+ color: red ;
154
+ font-weight: bold }
155
+
156
+ div.topic {
157
+ margin: 2em }
158
+
159
+ h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
160
+ h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
161
+ margin-top: 0.4em }
162
+
163
+ h1.title {
164
+ text-align: center }
165
+
166
+ h2.subtitle {
167
+ text-align: center }
168
+
169
+ hr.docutils {
170
+ width: 75% }
171
+
172
+ img.align-left, .figure.align-left, object.align-left, table.align-left {
173
+ clear: left ;
174
+ float: left ;
175
+ margin-right: 1em }
176
+
177
+ img.align-right, .figure.align-right, object.align-right, table.align-right {
178
+ clear: right ;
179
+ float: right ;
180
+ margin-left: 1em }
181
+
182
+ img.align-center, .figure.align-center, object.align-center {
183
+ display: block;
184
+ margin-left: auto;
185
+ margin-right: auto;
186
+ }
187
+
188
+ table.align-center {
189
+ margin-left: auto;
190
+ margin-right: auto;
191
+ }
192
+
193
+ .align-left {
194
+ text-align: left }
195
+
196
+ .align-center {
197
+ clear: both ;
198
+ text-align: center }
199
+
200
+ .align-right {
201
+ text-align: right }
202
+
203
+ /* reset inner alignment in figures */
204
+ div.align-right {
205
+ text-align: inherit }
206
+
207
+ /* div.align-center * { */
208
+ /* text-align: left } */
209
+
210
+ .align-top {
211
+ vertical-align: top }
212
+
213
+ .align-middle {
214
+ vertical-align: middle }
215
+
216
+ .align-bottom {
217
+ vertical-align: bottom }
218
+
219
+ ol.simple, ul.simple {
220
+ margin-bottom: 1em }
221
+
222
+ ol.arabic {
223
+ list-style: decimal }
224
+
225
+ ol.loweralpha {
226
+ list-style: lower-alpha }
227
+
228
+ ol.upperalpha {
229
+ list-style: upper-alpha }
230
+
231
+ ol.lowerroman {
232
+ list-style: lower-roman }
233
+
234
+ ol.upperroman {
235
+ list-style: upper-roman }
236
+
237
+ p.attribution {
238
+ text-align: right ;
239
+ margin-left: 50% }
240
+
241
+ p.caption {
242
+ font-style: italic }
243
+
244
+ p.credits {
245
+ font-style: italic ;
246
+ font-size: smaller }
247
+
248
+ p.label {
249
+ white-space: nowrap }
250
+
251
+ p.rubric {
252
+ font-weight: bold ;
253
+ font-size: larger ;
254
+ color: maroon ;
255
+ text-align: center }
256
+
257
+ p.sidebar-title {
258
+ font-family: sans-serif ;
259
+ font-weight: bold ;
260
+ font-size: larger }
261
+
262
+ p.sidebar-subtitle {
263
+ font-family: sans-serif ;
264
+ font-weight: bold }
265
+
266
+ p.topic-title {
267
+ font-weight: bold }
268
+
269
+ pre.address {
270
+ margin-bottom: 0 ;
271
+ margin-top: 0 ;
272
+ font: inherit }
273
+
274
+ pre.literal-block, pre.doctest-block, pre.math, pre.code {
275
+ margin-left: 2em ;
276
+ margin-right: 2em }
277
+
278
+ pre.code .ln { color: grey; } /* line numbers */
279
+ pre.code, code { background-color: #eeeeee }
280
+ pre.code .comment, code .comment { color: #5C6576 }
281
+ pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
282
+ pre.code .literal.string, code .literal.string { color: #0C5404 }
283
+ pre.code .name.builtin, code .name.builtin { color: #352B84 }
284
+ pre.code .deleted, code .deleted { background-color: #DEB0A1}
285
+ pre.code .inserted, code .inserted { background-color: #A3D289}
286
+
287
+ span.classifier {
288
+ font-family: sans-serif ;
289
+ font-style: oblique }
290
+
291
+ span.classifier-delimiter {
292
+ font-family: sans-serif ;
293
+ font-weight: bold }
294
+
295
+ span.interpreted {
296
+ font-family: sans-serif }
297
+
298
+ span.option {
299
+ white-space: nowrap }
300
+
301
+ span.pre {
302
+ white-space: pre }
303
+
304
+ span.problematic {
305
+ color: red }
306
+
307
+ span.section-subtitle {
308
+ /* font-size relative to parent (h1..h6 element) */
309
+ font-size: 80% }
310
+
311
+ table.citation {
312
+ border-left: solid 1px gray;
313
+ margin-left: 1px }
314
+
315
+ table.docinfo {
316
+ margin: 2em 4em }
317
+
318
+ table.docutils {
319
+ margin-top: 0.5em ;
320
+ margin-bottom: 0.5em }
321
+
322
+ table.footnote {
323
+ border-left: solid 1px black;
324
+ margin-left: 1px }
325
+
326
+ table.docutils td, table.docutils th,
327
+ table.docinfo td, table.docinfo th {
328
+ padding-left: 0.5em ;
329
+ padding-right: 0.5em ;
330
+ vertical-align: top }
331
+
332
+ table.docutils th.field-name, table.docinfo th.docinfo-name {
333
+ font-weight: bold ;
334
+ text-align: left ;
335
+ white-space: nowrap ;
336
+ padding-left: 0 }
337
+
338
+ /* "booktabs" style (no vertical lines) */
339
+ table.docutils.booktabs {
340
+ border: 0px;
341
+ border-top: 2px solid;
342
+ border-bottom: 2px solid;
343
+ border-collapse: collapse;
344
+ }
345
+ table.docutils.booktabs * {
346
+ border: 0px;
347
+ }
348
+ table.docutils.booktabs th {
349
+ border-bottom: thin solid;
350
+ text-align: left;
351
+ }
352
+
353
+ h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
354
+ h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
355
+ font-size: 100% }
356
+
357
+ ul.auto-toc {
358
+ list-style-type: none }
359
+
360
+ </style>
361
+ </head>
362
+ <body>
363
+ <div class="document" id="flnews-post-proc">
364
+ <h1 class="title">flnews_post_proc</h1>
365
+ <h2 class="subtitle" id="post-processor-for-the-flnews-newsreader">Post-Processor for the flnews newsreader</h2>
366
+
367
+ <div class="section" id="synopsis">
368
+ <h1>SYNOPSIS</h1>
369
+ <p>An article is piped-in to the post-processor. This is normally done
370
+ automatically as soon as the variable “post_proc“ in the flnews configuration
371
+ file is set to the flnews_post_proc.</p>
372
+ <p>Locally stored articles can be piped in to the post-processor, as needed
373
+ for testing purposes, with a command-line like the following:</p>
374
+ <p><strong>flnews_post_proc &lt; article</strong></p>
375
+ </div>
376
+ <div class="section" id="description">
377
+ <h1>DESCRIPTION</h1>
378
+ <p>The flnews newsreader is sufficient for Usenet access, i.e. to receive and read
379
+ articles from -, as well as to write and post articles to newsgroups.</p>
380
+ <p>When you compare news-clients, you will always notice the differences and
381
+ choose the software that you prefer. Flnews however, has the charm that you can
382
+ influence how the program itself works but also modify posts that flnews
383
+ produces, just before the program will transmit them to the chosen nntp-server.</p>
384
+ <p>The flnews_post_proc can add and change details of a post, in ways that are
385
+ currently not possible with flnews alone. As the program is configurable, it
386
+ can probably respond to the needs of some Usenet users. You should, however,
387
+ rather take it as an example for what can be done and an inspiration for your
388
+ own creations.</p>
389
+ <div class="section" id="the-limits-of-a-basic-newsreader-what-the-program-can-do">
390
+ <h2>The limits of a basic newsreader — what the program can do</h2>
391
+ <p>While the articles that flnews creates, are complete and ready to be posted,
392
+ some users may not always agree with the result and for arbitrary reasons:</p>
393
+ <ul>
394
+ <li><p class="first">There may be inconveniences when you post to different newsgroups in
395
+ different languages, as an introductory line which refers to a previous
396
+ post can only be set once in the flnews-configuration. The consequence
397
+ can be that your post to a french newsgroup begins with an introduction
398
+ in English.
399
+ My post-processor program can set an introductory line specifically
400
+ chosen for one or several newsgroups.</p>
401
+ </li>
402
+ <li><p class="first">The same conflict arises, when you have set a standard signature-text and
403
+ would like to replace it against another, based on the newsgroup you are
404
+ about to post to.
405
+ The post-processor program sets specific signatures as configured for one
406
+ or several newsgroups.</p>
407
+ </li>
408
+ <li><p class="first">Some custom headers may serve to convey additional information to
409
+ interested readers of your post, like GnuPG key IDs, your language skills
410
+ or the like. The signature may be a better choice than custom headers.
411
+ You are free. I just mention face and x-face but prefer that you do not
412
+ remember I did.
413
+ Custom-headers may be defined in the configuration file for the program
414
+ and will then be added to each outgoing post.</p>
415
+ </li>
416
+ <li><p class="first">The X-No-Archive header is sometimes set to avoid that an article be
417
+ saved and stays available to search-engines (Google, notably). Test-
418
+ postings, for example, do probably not justify at all that they would be
419
+ referenced in search-results.
420
+ The post-processor program can impose the X-No-Archive header for all
421
+ posts to certain newsgroups.</p>
422
+ <p><strong>ATTN</strong> Since 2024, this header might no longer serve any purpose.</p>
423
+ </li>
424
+ <li><p class="first">If a news post contains many references to either other posts or Web
425
+ pages, the text can be cluttered with URLs.
426
+ The post-processor can identify marked text fragments and transform them
427
+ into footnotes, which will be attached as a list at the bottom of the
428
+ post.
429
+ This works almost like the &lt;ref/&gt; link in Wikipedia, but the delimiter
430
+ can be determined in the configuration file.
431
+ Example (with %=):
432
+ This is an object %=and this becomes the footnote, describing the object
433
+ further=%</p>
434
+ </li>
435
+ </ul>
436
+ </div>
437
+ <div class="section" id="dialog-to-override-settings">
438
+ <h2>Dialog to override settings</h2>
439
+ <p>You can have a dialog displayed just before the post-processor is invoked, to
440
+ <strong>disable</strong> some configuration options. Provided that either YAD, Zenity,
441
+ Whiptail or only xterm are available on your computer, you can choose from
442
+ the following options. You <strong>cannot</strong> use the dialog to enable options which
443
+ have not yet been set in the configuration.</p>
444
+ <ul class="simple">
445
+ <li>Signatures, as set in the configuration <strong>can be ignored</strong>. Either
446
+ a default signature will appear as set in flnews or none.</li>
447
+ <li>Custom Headers, if configured, can be <strong>omitted</strong>.</li>
448
+ <li>The X-No-Archive header, if set for the current newsgroup, <strong>can be
449
+ ignored</strong>.</li>
450
+ <li>Logging can be <strong>switched off</strong>, if set.</li>
451
+ </ul>
452
+ <p>Pushing Esc or the cancle-button of the dialog interrupts the process, flnews
453
+ will not post the article.</p>
454
+ <p>You can disable the dialog, which ensures that all configured options will be
455
+ applied, without the need for further interaction (see below, option
456
+ OVERRIDE_CONFIG).</p>
457
+ </div>
458
+ </div>
459
+ <div class="section" id="configuration">
460
+ <h1>CONFIGURATION</h1>
461
+ <p>On first execution of the program, a copy of the original configuration file is
462
+ created in <em>/home/[user]/.flnews_post_proc.conf</em>
463
+ It is this file which is used from then on. If you delete it, it will be
464
+ recreated, on the next occasion, but your own changes will be lost.</p>
465
+ <p>The configuration file is in YAML syntax and full of explanations. The
466
+ variables defined in this file can be classified as belonging to one of two
467
+ categories:</p>
468
+ <ul class="simple">
469
+ <li>Variables describing values originally set by flnews, which should be used or
470
+ replaced. The important elements are usually matched in a capture group.</li>
471
+ <li>Variables defining the new or altered content.</li>
472
+ </ul>
473
+ <dl class="docutils">
474
+ <dt><strong>FUP_NAME</strong></dt>
475
+ <dd><p class="first">A Regular Expression, describing the string which contains the name of
476
+ previous poster who is the author of a quoted post. This string is
477
+ recognized in the original article and may be used with the fitting element
478
+ from <em>GROUP_INTRO</em>, below. The Regexp-format is that of the Regexp class in
479
+ Ruby, noted as a String. Beware to mask a backslash '\' by another one,
480
+ like in the example. A capture-group '()' serves to extract the name from the
481
+ match result.</p>
482
+ <p>Leave this field empty to keep the default from the FLNews configuration
483
+ intact.</p>
484
+ <p>CONTENT: A String equivalent of a regular expression.</p>
485
+ <p>DEFAULT: EMPTY</p>
486
+ <p>EXAMPLE1: &quot;On \\d+.\\d+.\\d{2,4} at \\d+:\\d+ <strong>(.*)</strong> wrote:&quot;</p>
487
+ <p class="last">EXAMPLE2: &quot;<strong>(.*)</strong> wrote:&quot;</p>
488
+ </dd>
489
+ <dt><strong>FUP_GROUP</strong></dt>
490
+ <dd><p class="first">A Regular Expression, describing the string which contains the newsgroup
491
+ where the previous post, that you are referring to in the followup, had been
492
+ published.</p>
493
+ <p>Leave this field empty to ignore the precise group.</p>
494
+ <p>CONTENT: A String equivalent of a regular expression.</p>
495
+ <p>DEFAULT: EMPTY</p>
496
+ <p class="last">EXAMPLE: &quot;wrote in <strong>(.*)</strong>:&quot;</p>
497
+ </dd>
498
+ <dt><strong>GROUP_INTROS</strong></dt>
499
+ <dd><p class="first">Introductory strings, referring to the previous poster who is the author of a
500
+ quoted post. If you match the newsgroup of the post (see FUP_GROUP), you can
501
+ use these variables in the result.
502
+ Currently only %fup_name% and %fup_group% are reproduced in the resulting
503
+ introductory string.</p>
504
+ <p>CONTENT: A newsgroup or regexp per line, followed by a colon, a space and a String</p>
505
+ <p>DEFAULT: As configured in FLNews</p>
506
+ <p class="last">EXAMPLE: alt.test: &quot;Thus spoke %fup_name% on that baleful %fup_date%:&quot;</p>
507
+ </dd>
508
+ <dt><strong>GROUP_SIGS</strong></dt>
509
+ <dd><p class="first">A signature line per Newsgroup.
510
+ ATTN! In multi line signatures, you have to use \r\n for line breaks.</p>
511
+ <p>CONTENT: A newsgroup or regexp per line, followed by a colon, a space and a String.</p>
512
+ <p>DEFAULT: As configured in flnews</p>
513
+ <p class="last">EXAMPLE: alt.test: &quot;Signature for alt.test\r\nsecond line&quot;</p>
514
+ </dd>
515
+ <dt><strong>CUSTOM_HEADERS</strong></dt>
516
+ <dd><p class="first">Additional headers for the outgoing article</p>
517
+ <p>CONTENT: 1 line per header : a dash and space, then a String, comprising the
518
+ name of the header, ending in a colon and the value of the header.</p>
519
+ <p>DEFAULT: undefined</p>
520
+ <div class="last line-block">
521
+ <div class="line">EXAMPLE (2 headers):</div>
522
+ <div class="line">- 'X-My-Header: nothing fancy'</div>
523
+ <div class="line">- 'X-Another-Header: care not!'</div>
524
+ </div>
525
+ </dd>
526
+ <dt><strong>XNAY_GROUPS</strong></dt>
527
+ <dd><p class="first">The newsgroups, where a header X-No-Archive: YES shall be set.
528
+ <strong>ATTN</strong> Since 2024, this header might no longer serve any purpose.</p>
529
+ <p>CONTENT: a dash and space, then a String, containing the name of the group or a regexp.</p>
530
+ <p>DEFAULT: empty</p>
531
+ <div class="last line-block">
532
+ <div class="line">EXAMPLE (1 group, 1 hierarchy):</div>
533
+ <div class="line">- &quot;alt.test&quot;</div>
534
+ <div class="line">- &quot;^news.*&quot;</div>
535
+ </div>
536
+ </dd>
537
+ <dt><strong>DEBUG_LOG</strong></dt>
538
+ <dd><p class="first">The name of a file, where debug messages are written. Setting this
539
+ variable will enable the log. Leave empty to disable logging.</p>
540
+ <p>CONTENT: The name of a writable file, which will be created if inexistent
541
+ and overwritten if need be.</p>
542
+ <p>DEFAULT: empty</p>
543
+ <p class="last">EXAMPLE: '/tmp/a_log-file.txt'</p>
544
+ </dd>
545
+ <dt><strong>LOG LEVEL</strong></dt>
546
+ <dd>One of debug, fatal, error, info, warn</dd>
547
+ <dt><strong>REFERENCES_SEPARATOR</strong></dt>
548
+ <dd><p class="first">A symbol or sequence of symbols marking the end of the message-body and the
549
+ beginning of a list of “references” or “footnotes”. It will only appear, if
550
+ the original message-body contains text marked for use as such a footnote.
551
+ See <em>REFERENCES_DELIMITER</em>.</p>
552
+ <p>If the option is not defined or empty, the list of footnotes will appear
553
+ below the last line of the message body and no separator will be inserted.</p>
554
+ <p>CONTENT: A quoted symbol or sequence of symbols.</p>
555
+ <p>DEFAULT: empty</p>
556
+ <p class="last">EXAMPLE: '---------'</p>
557
+ </dd>
558
+ <dt><strong>REFERENCES_DELIMITER</strong></dt>
559
+ <dd><p class="first">A sequence of at least two symbols marking the beginning of a text which will
560
+ serve as footnote (or reference). The <strong>reversed sequence</strong> musst be used to
561
+ mark the end of the text. The presence of this sequence or symbol in the
562
+ original message body will cause the enclosed text to be moved below the
563
+ message body. The <em>REFERENCES_SEPARATOR</em>, if defined, will separate the
564
+ message from the list of footnotes.
565
+ If this option is not defined or empty, footnotes are not created.</p>
566
+ <p>CONTENT a quoted symbol or sequence of symbols.</p>
567
+ <p>DEFAULT: none/empty</p>
568
+ <p class="last">EXAMPLE: '%?'</p>
569
+ </dd>
570
+ <dt><strong>REFERENCE_FORMAT</strong></dt>
571
+ <dd><p class="first">A format-string, using %s for a number, replacing the reference-
572
+ text in the message body.</p>
573
+ <p>DEFAULT: &quot; %s)&quot; -&gt; becomes 1) ... 2) ... 3)</p>
574
+ <p class="last">EXAMPLE: &quot;(%s)&quot; -&gt; becomes (1) ... (2) ... (3)</p>
575
+ </dd>
576
+ <dt><strong>VFY_URLS</strong></dt>
577
+ <dd><p class="first">A Boolean constant. It determines if the program shall verify and possibly
578
+ try to correct URLs. Even if URLs are identified as such, only a few
579
+ manipulations are attempted :
580
+ * Angular brackets '&lt;' and '&gt;' are added, if missing
581
+ * Article-references are prepended with &quot;news:&quot;, if missing
582
+ * Slashes are added, if they are found missing after &quot;http(s):&quot;</p>
583
+ <p>ATTN! The program is unable to discern &quot;mailto:&quot; and &quot;news:&quot; references. If
584
+ neither is given, but '&#64;' is present, &quot;news:&quot; is automatically prepended.</p>
585
+ <p>If the variable is not set, a value 'yes' is assumed.</p>
586
+ <p>CONTENT: One of YES, yes, NO, no, and other variations of case.</p>
587
+ <p>DEFAULT: yes</p>
588
+ <p class="last">Example: ... I let you guess.</p>
589
+ </dd>
590
+ <dt><strong>OVERRIDE_CONFIG</strong></dt>
591
+ <dd><p class="first">A Boolean constant. You can choose to override the following
592
+ configuration options before an article is posted:
593
+ GROUP_SIGS, XNAY_GROUPS, CUSTOM_HEADERS and DEBUG_LOG.
594
+ A dialog may be displayed which allows you to disable any of these
595
+ four options, so that the defaults from flnews prevail.</p>
596
+ <p>ATTN! Canceling the dialog or pushing the Esc-key does interrupt
597
+ the process. Flnews will not post the article.</p>
598
+ <p>Set this option to no, NO or similar to disable the dialog.</p>
599
+ <p>DEFAULT: yes</p>
600
+ <p class="last">EXAMPLE: No</p>
601
+ </dd>
602
+ </dl>
603
+ </div>
604
+ <div class="section" id="other-information">
605
+ <h1>Other Information</h1>
606
+ <div class="section" id="testing">
607
+ <h2>Testing</h2>
608
+ <p>The effects that the execution of the program will have on a posting can be
609
+ verified in two ways:</p>
610
+ <ol class="arabic">
611
+ <li><p class="first">By piping-in a post that had previously been saved to a file:</p>
612
+ <p><strong>:~$ /usr/local/bin/[post-processor] &lt; [test-article]</strong></p>
613
+ <p>This will show the resulting new version of the article on screen, but you
614
+ can also pipe the output into another file. This is a great way to test a
615
+ program during development or to test your own configuration of the program.</p>
616
+ </li>
617
+ <li><p class="first">By posting directly into a test-newsgroup (like alt.test or similar). This
618
+ is mandatory before you really post to thematic newsgroups and when the
619
+ settings of the post-processor will affect the article.</p>
620
+ </li>
621
+ </ol>
622
+ </div>
623
+ <div class="section" id="source-code">
624
+ <h2>Source-Code</h2>
625
+ <p>The gem-file that you get with the gem-utility or from rubygems.org contains
626
+ all the code of the program and some documentation (this page notably). To read
627
+ its content, you must</p>
628
+ <ol class="arabic simple">
629
+ <li>untar the gem-file with tar -xf flnews_post_proc-0.1.gem</li>
630
+ <li>uncompress the data.gz archive: gunzip data.gz</li>
631
+ <li>untar the resultig data.tar archive: tar -xf data.tar</li>
632
+ </ol>
633
+ <p>This creates the directories bin, doc and lib.</p>
634
+ </div>
635
+ <div class="section" id="license">
636
+ <h2>License</h2>
637
+ <p>flnews_post_proc is distributed under the conditions of the WTFPL-2.0 or later
638
+ License (see <a class="reference external" href="http://www.wtfpl.net/txt/copying/">http://www.wtfpl.net/txt/copying/</a> or license-text in the doc
639
+ directory of the gem-file).</p>
640
+ </div>
641
+ <div class="section" id="author">
642
+ <h2>Author</h2>
643
+ <div class="line-block">
644
+ <div class="line">flnews_post_proc has been developed by</div>
645
+ <div class="line">Michael Uplawski &lt;<a class="reference external" href="mailto:michael.uplawski&#64;uplawski.eu">michael.uplawski&#64;uplawski.eu</a>&gt;</div>
646
+ </div>
647
+ </div>
648
+ </div>
649
+ <div class="section" id="section-1">
650
+ <h1>Ω</h1>
651
+ </div>
652
+ </div>
653
+ </body>
654
+ </html>