flnews_post_proc 1.62 → 1.70

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 06e2f2f46c1d30f65062366e6b02d4e3b84eb21f6e65d1e746ab54b5d964e13a
4
- data.tar.gz: 6ab18c57da83155d698b57f0544063e12d1a218eb4da89ac816cc70dcb980da6
3
+ metadata.gz: 1154fced020bd8562041d85157d723b91cd81466678718cd4ea92f4f04a9b286
4
+ data.tar.gz: de908508f8abeb90fea5d4ce2a656085db492688fd43dcb6dfb63d24c625ef8b
5
5
  SHA512:
6
- metadata.gz: 8a5e692db21786d8689c8b4f2d90a7f7997acc8b1e0561265d36ff46e69bb0ae38ae63cdea1dafebeb09c881aa760c34cec758af9b243b54f483361236ebcbe6
7
- data.tar.gz: 2526a34226e03405cd773599964e762437bbc07210b2aa5cdba760001fa0cccef58f2c16e4e8e9d4c0741d1da290a4416a1850249b0768e4bd6844d62279cbfd
6
+ metadata.gz: 88b0acd2b3587720ec3850039a23df22d81b572aa3abfc18ed61e63ed42c89166be41b5ae4b5b194bd2a773b684ed73ab4afd3cd30d85483db4444e6bbc2e3e9
7
+ data.tar.gz: 3555138eb59e5d59e2fffbd3bf5c9459d7b80cc7c039379b461e1ee6edda7618203f6b80c47661a12ae6eb0fc7f84a74640cb36a19045ef3e554265998522d8d
data/README.md CHANGED
@@ -83,7 +83,8 @@ some users may not always agree with the result and for arbitrary reasons:
83
83
  would like to replace it against another, based on the newsgroup you are
84
84
  about to post to.
85
85
  The post-processor program sets specific signatures as configured for one
86
- or several newsgroups.
86
+ or several newsgroups. You can even define a list of signatures and have
87
+ the program pick one from the list.
87
88
 
88
89
  * Some custom headers may serve to convey additional information to
89
90
  interested readers of your post, like GnuPG key IDs, your language skills
@@ -210,6 +211,9 @@ intact.
210
211
 
211
212
  **GROUP_SIGS**
212
213
  A signature line per Newsgroup.
214
+ If a file is named instead, the program will pick randomly one signature from
215
+ that file. The file should contain signatures, separated by 1 empty line.
216
+
213
217
  ATTN! In multi line signatures, you have to use \r\n for line breaks.
214
218
 
215
219
  CONTENT: A newsgroup or regexp per line, followed by a colon, a space and a String.
@@ -217,6 +221,7 @@ intact.
217
221
  DEFAULT: As configured in flnews
218
222
 
219
223
  EXAMPLE: alt.test: _"Signature for alt.test\\\\r\\\\nsecond line"_
224
+ EXAMPLE: comp.*: /home/user/.my_sigs
220
225
 
221
226
  **CUSTOM_HEADERS**
222
227
  Additional headers for the outgoing article
@@ -3,360 +3,47 @@
3
3
  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
4
  <head>
5
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>
6
+ <meta name="generator" content="Docutils 0.21.2: https://docutils.sourceforge.io/" />
7
+ <title>flnews_post_proc</title>
8
8
  <style type="text/css">
9
9
 
10
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.
11
+ :Author: Michael Uplawski
12
+ :Contact: michael.uplawski@uplawski.eu
13
+ :License: WTFPL 2.0, see http://www.wtfpl.net/about/
14
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.
15
+ Stylesheet for use with Docutils.
19
16
  */
20
17
 
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 }
18
+ /* The defaults for docutils */
19
+ @import url(html4css1.css);
57
20
 
58
- object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
59
- overflow: hidden;
21
+ body {
22
+ background-color:#e0f0a0;
23
+ font-family: Verdana,Helvetica,Univers;
60
24
  }
61
25
 
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 }
26
+ h1 {color:darkblue;font-size:1.5em;}
27
+ h1.title {color:#a0a0f0;font-size:2em;}
106
28
 
107
- div.dedication p.topic-title {
108
- font-weight: bold ;
109
- font-style: normal }
29
+ p, ul.simple, ol.simple, dt {margin-left:2em;}
30
+ dd {margin-left:4em;}
110
31
 
111
- div.figure {
112
- margin-left: 2em ;
113
- margin-right: 2em }
32
+ /* correct left margin of nested block tags*/
33
+ dd p, li p {margin-left:0;}
34
+ dd * ul {margin-left:0 ! important; }
35
+ dd ul {margin-left:0 ! important; }
36
+ dd dl dt, dd dl dd {margin-left:0 ! important;}
114
37
 
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;
38
+ em {color:#000080;
39
+ background-color:#ffffa0;
191
40
  }
192
41
 
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;
42
+ blockquote {background-color:#ffc090;
43
+ padding:0.5em;
44
+ border-radius:0.5em;
351
45
  }
352
46
 
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
47
  </style>
361
48
  </head>
362
49
  <body>
@@ -411,7 +98,9 @@ spécifiques, à chaque fois pour une ou plusieurs newsgroups.</p>
411
98
  la remplacer contre une autre, selon le groupe dans lequel vous êtes en train
412
99
  de poster.</p>
413
100
  <p>flnews_post_proc peut faire exactement ça, quand vous avez configuré quel
414
- signature doit apparaître dans quel newsgroup ou liste de newsgroups.</p>
101
+ signature doit apparaître dans quel newsgroup ou liste de newsgroups. Le
102
+ logiciel peut même choisir par hazard une signature, si un fichier, qui en
103
+ contient plusieurs, est noté dans la configuration.</p>
415
104
  </li>
416
105
  <li><p class="first">Quelques entêtes supplémentaires peuvent servir à transmettre des informations
417
106
  aux lecteurs intéressés, comme l'ID de votre clé GnuPG, vos connaissances en
@@ -534,13 +223,15 @@ dans l'introduction resultant.</p>
534
223
  </div>
535
224
  </dd>
536
225
  <dt><strong>GROUP_SIGS</strong></dt>
537
- <dd><p class="first">Une signature par newsgroup ou expression.
538
- ATTN! Vous devez noter \r\n pour les sautes de lignes, si une signature
226
+ <dd><p class="first">Une signature par newsgroup ou expression ou le chemin d'accès d'un fichier,
227
+ contenant plusieurs signatures, séparé par une ligne vide.</p>
228
+ <p>ATTN! Vous devez noter \r\n pour les sautes de lignes, si une signature
539
229
  s'étend sur plusieurs lignes.</p>
540
230
  <p>CONTENU : un newsgroup ou expression par ligne, suivi de deux poins, un espace
541
231
  et une chaîne de caractères.</p>
542
232
  <p>PAR DÉFAUT : Comme configuré dans flnews.</p>
543
- <p class="last">EXEMPLE : fr.test: &quot;Signature pour alt.test\r\nseconde ligne&quot;</p>
233
+ <p>EXEMPLE : fr.test: &quot;Signature pour alt.test\r\nseconde ligne&quot;</p>
234
+ <p class="last">EXEMPLE : alt.fr.test: /home/[utilisateur]/.signatures</p>
544
235
  </dd>
545
236
  <dt><strong>CUSTOM_HEADERS</strong></dt>
546
237
  <dd><p class="first">Entêtes supplémentaires pour l'article sortant.</p>
Binary file
Binary file
@@ -62,7 +62,9 @@ et ce pour des raisons arbitraires :
62
62
  de poster.
63
63
 
64
64
  flnews_post_proc peut faire exactement ça, quand vous avez configuré quel
65
- signature doit apparaître dans quel newsgroup ou liste de newsgroups.
65
+ signature doit apparaître dans quel newsgroup ou liste de newsgroups. Le
66
+ logiciel peut même choisir par hazard une signature, si un fichier, qui en
67
+ contient plusieurs, est noté dans la configuration.
66
68
 
67
69
  * Quelques entêtes supplémentaires peuvent servir à transmettre des informations
68
70
  aux lecteurs intéressés, comme l'ID de votre clé GnuPG, vos connaissances en
@@ -198,7 +200,9 @@ variables définis dans ce fichier peuvent être classées en deux catégories :
198
200
  | fr\\.*: "C'était dans %fup_group%, que %fup_name% c'est exprimé ainsi"
199
201
 
200
202
  **GROUP_SIGS**
201
- Une signature par newsgroup ou expression.
203
+ Une signature par newsgroup ou expression ou le chemin d'accès d'un fichier,
204
+ contenant plusieurs signatures, séparé par une ligne vide.
205
+
202
206
  ATTN! Vous devez noter \\r\\n pour les sautes de lignes, si une signature
203
207
  s'étend sur plusieurs lignes.
204
208
 
@@ -209,6 +213,8 @@ variables définis dans ce fichier peuvent être classées en deux catégories :
209
213
 
210
214
  EXEMPLE : fr.test: "Signature pour alt.test\\r\\nseconde ligne"
211
215
 
216
+ EXEMPLE : alt.fr.test: /home/[utilisateur]/.signatures
217
+
212
218
  **CUSTOM_HEADERS**
213
219
  Entêtes supplémentaires pour l'article sortant.
214
220
 
@@ -3,360 +3,47 @@
3
3
  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
4
  <head>
5
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>
6
+ <meta name="generator" content="Docutils 0.21.2: https://docutils.sourceforge.io/" />
7
+ <title>flnews_post_proc</title>
8
8
  <style type="text/css">
9
9
 
10
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.
11
+ :Author: Michael Uplawski
12
+ :Contact: michael.uplawski@uplawski.eu
13
+ :License: WTFPL 2.0, see http://www.wtfpl.net/about/
14
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.
15
+ Stylesheet for use with Docutils.
19
16
  */
20
17
 
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 }
18
+ /* The defaults for docutils */
19
+ @import url(html4css1.css);
57
20
 
58
- object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
59
- overflow: hidden;
21
+ body {
22
+ background-color:#e0f0a0;
23
+ font-family: Verdana,Helvetica,Univers;
60
24
  }
61
25
 
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 }
26
+ h1 {color:darkblue;font-size:1.5em;}
27
+ h1.title {color:#a0a0f0;font-size:2em;}
106
28
 
107
- div.dedication p.topic-title {
108
- font-weight: bold ;
109
- font-style: normal }
29
+ p, ul.simple, ol.simple, dt {margin-left:2em;}
30
+ dd {margin-left:4em;}
110
31
 
111
- div.figure {
112
- margin-left: 2em ;
113
- margin-right: 2em }
32
+ /* correct left margin of nested block tags*/
33
+ dd p, li p {margin-left:0;}
34
+ dd * ul {margin-left:0 ! important; }
35
+ dd ul {margin-left:0 ! important; }
36
+ dd dl dt, dd dl dd {margin-left:0 ! important;}
114
37
 
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;
38
+ em {color:#000080;
39
+ background-color:#ffffa0;
191
40
  }
192
41
 
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;
42
+ blockquote {background-color:#ffc090;
43
+ padding:0.5em;
44
+ border-radius:0.5em;
351
45
  }
352
46
 
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
47
  </style>
361
48
  </head>
362
49
  <body>
@@ -403,7 +90,8 @@ chosen for one or several newsgroups.</p>
403
90
  would like to replace it against another, based on the newsgroup you are
404
91
  about to post to.
405
92
  The post-processor program sets specific signatures as configured for one
406
- or several newsgroups.</p>
93
+ or several newsgroups. You can even specify that a signature should be
94
+ picked randomly from a file, containing several signatures.</p>
407
95
  </li>
408
96
  <li><p class="first">Some custom headers may serve to convey additional information to
409
97
  interested readers of your post, like GnuPG key IDs, your language skills
@@ -507,11 +195,14 @@ introductory string.</p>
507
195
  <p class="last">EXAMPLE: alt.test: &quot;Thus spoke %fup_name% on that baleful %fup_date%:&quot;</p>
508
196
  </dd>
509
197
  <dt><strong>GROUP_SIGS</strong></dt>
510
- <dd><p class="first">A signature line per Newsgroup.
511
- ATTN! In multi line signatures, you have to use \r\n for line breaks.</p>
198
+ <dd><p class="first">A signature line per Newsgroup or a file path. The file should contain signatures,
199
+ already formatted and separated by 1 empty line. The program will randomly pick
200
+ one signature from the list.</p>
201
+ <p>ATTN! In multi line signatures, you have to use \r\n for line breaks.</p>
512
202
  <p>CONTENT: A newsgroup or regexp per line, followed by a colon, a space and a String.</p>
513
203
  <p>DEFAULT: As configured in flnews</p>
514
- <p class="last">EXAMPLE: alt.test: &quot;Signature for alt.test\r\nsecond line&quot;</p>
204
+ <p>EXAMPLE: alt.test: &quot;Signature for alt.test\r\nsecond line&quot;</p>
205
+ <p class="last">EXAMPLE: comp.*: /home/[user]/.my_sigs</p>
515
206
  </dd>
516
207
  <dt><strong>CUSTOM_HEADERS</strong></dt>
517
208
  <dd><p class="first">Additional headers for the outgoing article</p>
Binary file
Binary file
@@ -50,7 +50,8 @@ some users may not always agree with the result and for arbitrary reasons:
50
50
  would like to replace it against another, based on the newsgroup you are
51
51
  about to post to.
52
52
  The post-processor program sets specific signatures as configured for one
53
- or several newsgroups.
53
+ or several newsgroups. You can even specify that a signature should be
54
+ picked randomly from a file, containing several signatures.
54
55
 
55
56
  * Some custom headers may serve to convey additional information to
56
57
  interested readers of your post, like GnuPG key IDs, your language skills
@@ -167,7 +168,10 @@ categories:
167
168
  EXAMPLE: alt.test: "Thus spoke %fup_name% on that baleful %fup_date%:"
168
169
 
169
170
  **GROUP_SIGS**
170
- A signature line per Newsgroup.
171
+ A signature line per Newsgroup or a file path. The file should contain signatures,
172
+ already formatted and separated by 1 empty line. The program will randomly pick
173
+ one signature from the list.
174
+
171
175
  ATTN! In multi line signatures, you have to use \\r\\n for line breaks.
172
176
 
173
177
  CONTENT: A newsgroup or regexp per line, followed by a colon, a space and a String.
@@ -175,6 +179,8 @@ categories:
175
179
  DEFAULT: As configured in flnews
176
180
 
177
181
  EXAMPLE: alt.test: "Signature for alt.test\\r\\nsecond line"
182
+
183
+ EXAMPLE: comp.*: /home/[user]/.my_sigs
178
184
 
179
185
  **CUSTOM_HEADERS**
180
186
  Additional headers for the outgoing article
data/lib/newsgroups.rb CHANGED
@@ -75,6 +75,7 @@ class Newsgroups
75
75
 
76
76
  # replace all \n by \r\n
77
77
  def correct_linebreaks(text)
78
+ debug 'correcting linebreaks in ' << text
78
79
  warned = false
79
80
  # find all lonely \n
80
81
  while text.match(/([^\r])\n/) do
@@ -82,6 +83,7 @@ class Newsgroups
82
83
  warned ||= true
83
84
  # ... and silently marry them to \r
84
85
  text.gsub!($~[0],$~[1] + "\r\n")
86
+ text.gsub!("\n ", "\n")
85
87
  # Luxury you can afford.
86
88
  end # \n
87
89
  text
@@ -93,27 +95,31 @@ class Newsgroups
93
95
  # 1 group
94
96
  group = @groups[0]
95
97
  gsigs = @config.GROUP_SIGS
98
+ tsig = nil
96
99
 
97
100
  if gsigs && gsigs.respond_to?(:to_hash)
98
101
  # find the signature for the group
99
102
  # either by name
100
103
  if gsigs.keys.include?(group)
101
- @signature = gsigs[group]
102
- debug('signature is ' << @signature ) if @signature
104
+ tsig = gsigs[group]
105
+ debug('signature is ' << tsig ) if tsig
103
106
  # .., or by applying a regexp.
104
107
  else
105
108
  gsigs.each do |g, s|
106
- unless @signature
109
+ unless tsig
107
110
  rg = Regexp.new(g)
108
111
  sm = group.match(rg)
109
112
  debug('signature for group(s) ' << g << ': ' << s) if sm
110
113
  if sm
111
- @signature = correct_linebreaks(s)
112
- @signature.gsub!("\n ", "\n")
114
+ tsig = s
113
115
  end # if sm
114
116
  end # if no signature
115
117
  end # gsigs.each
116
118
  end # gsigs for group?
119
+ if tsig && tsig.start_with?('/')
120
+ tsig = pick_sig(tsig)
121
+ end
122
+ @signature = correct_linebreaks(tsig) if tsig
117
123
  else # gsigs and is hash?
118
124
  msg = "Cannot read the signatures from the configuration."
119
125
  msg << "\nPlease verify that GROUP_SIGS is set."
@@ -121,6 +127,20 @@ class Newsgroups
121
127
  end
122
128
  end
123
129
 
130
+ # pick a random signature
131
+ def pick_sig(sigfile)
132
+ debug 'picking signature from ' << sigfile.to_s
133
+ if sigfile && !sigfile.empty? && File.exist?(sigfile) && File.readable?(sigfile)
134
+ allSigs = File::read(sigfile).split("\n\n")
135
+ numSigs = allSigs.length
136
+ srand(Time.now.nsec)
137
+ allSigs[rand(numSigs)]
138
+ else
139
+ error 'Cannot read signature from file ' << sigfile
140
+ nil
141
+ end
142
+ end
143
+
124
144
  # define the no_archive header.
125
145
  def set_no_archive
126
146
  @no_archive = nil
data/lib/version.rb CHANGED
@@ -14,9 +14,9 @@
14
14
  =end
15
15
 
16
16
  PROGNAME = 'flnews_post_proc'
17
- PROGVERSION = "1.62"
17
+ PROGVERSION = "1.70"
18
18
  AUTHORS = "Michael Uplawski"
19
19
  EMAIL = "michael.uplawski@uplawski.eu"
20
20
  YEARS = "2023 - 2024"
21
- SUMMARY = "Further attenuated reaction to mime-type, accepting all."
21
+ SUMMARY = "Read random signature from file"
22
22
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flnews_post_proc
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.62'
4
+ version: '1.70'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Uplawski
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-09-06 00:00:00.000000000 Z
11
+ date: 2025-01-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: diffy
@@ -105,5 +105,5 @@ requirements: []
105
105
  rubygems_version: 3.5.3
106
106
  signing_key:
107
107
  specification_version: 4
108
- summary: Further attenuated reaction to mime-type, accepting all.
108
+ summary: Read random signature from file
109
109
  test_files: []