flnews_post_proc 1.61 → 1.70

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6c60c975baf641f5c274cff05a5ecdff1094e998f4eb2d0c7bfe63eceeac557a
4
- data.tar.gz: 6067e8967e3a53695042fb02d734a48caed986051d4018b130309b1fd118bad3
3
+ metadata.gz: 1154fced020bd8562041d85157d723b91cd81466678718cd4ea92f4f04a9b286
4
+ data.tar.gz: de908508f8abeb90fea5d4ce2a656085db492688fd43dcb6dfb63d24c625ef8b
5
5
  SHA512:
6
- metadata.gz: 45e83b86f0a72db2207b32039eabfedc188fff497be932f61dd2a48c9e8a3014e7da176ba0f08fb1705ae40a9aeb2263bd91ebbf2958c142501ede3545a06786
7
- data.tar.gz: 9dd48b6f5cbd5f940c39a537a00dc7576f85702fefce4859ac6e4020f8e7e7db9856b371db54174f20455c6f68798d8950d9d4b36a8e1530efc5786de2d68817
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
data/bin/flnews_post_proc CHANGED
@@ -71,13 +71,21 @@ if (!STDIN.tty?)
71
71
  mime = FileMagic.mime.buffer artext
72
72
  debug('mime is ' << mime.split(';')[0])
73
73
  if (['news', 'rfc822'].none? {|m| mime.start_with?('message/' << m) } )
74
- # not a pure news message
74
+ # Not a pure news message
75
+ # Add more reactions, as you stumble upon them ...
75
76
  warn ("Input is of wrong mime-type " << mime.split(';')[0])
77
+
78
+ # Javascript okay
76
79
  if (['javascript'].any? {|m| mime.start_with?('application/' << m)} )
77
- warn 'Input contains java-script code! Continuing anyway'
80
+ warn 'Input contains java-script code!'
81
+ # C okay
82
+ elsif(['x-c'].any? {|m| mime.start_with?('text/' << m)} )
83
+ warn 'Input contains C- or C++ code!'
84
+ # Ruby okay
85
+ elsif(['x-ruby'].any? {|m| mime.start_with?('text/' << m) })
86
+ warn 'Input contains Ruby-code!'
78
87
  else
79
- warn 'Cannot continue, aporting!'
80
- exit false;
88
+ warn 'Input contains other things than plain-text, but I cannot say, what.'
81
89
  end
82
90
  end
83
91
  #----------->
@@ -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.61"
17
+ PROGVERSION = "1.70"
18
18
  AUTHORS = "Michael Uplawski"
19
19
  EMAIL = "michael.uplawski@uplawski.eu"
20
20
  YEARS = "2023 - 2024"
21
- SUMMARY = "attenuated reaction to mime-type check: Accept JavaScript code"
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.61'
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-05 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: 'attenuated reaction to mime-type check: Accept JavaScript code'
108
+ summary: Read random signature from file
109
109
  test_files: []