@@ -266,43 +266,51 @@ for (let l in lines) {
266
266
if ( ! inCodeBlock ) {
267
267
268
268
// minor fixups to get RFC links to work properly
269
- if ( line . indexOf ( 'RFC [' ) >= 0 ) {
270
- line = line . replace ( 'RFC [' , '[RFC' ) ;
271
- }
269
+ line = line . replace ( 'RFC [' , '[RFC' ) ;
272
270
line = line . replace ( '[Authorization header as defined in ' , 'Authorization header as defined in [' ) ;
271
+ line = line . replace ( '[JSON Pointer]' , 'JSON Pointer [RFC6901]' ) ; // only in 2.0.md
272
+
273
+ //TODO: more "hidden" RFC references in older specs, for example
274
+ // [media type range](https://tools.ietf.org/html/rfc7231#appendix-D)
275
+ // [ABNF](https://tools.ietf.org/html/rfc5234)
276
+
277
+ //TODO: unconventional references to RFCs in 3.0.4 and 3.1.1, for example
278
+ // [RFC3986 §5.1.2 – 5.1.4](https://tools.ietf.org/html/rfc3986#section-5.1.2)
279
+ // RFC6570 [mentions](https://www.rfc-editor.org/rfc/rfc6570.html#section-2.4.2)
280
+ // [are not](https://datatracker.ietf.org/doc/html/rfc3986#appendix-A)
281
+ // [special behavior](https://www.rfc-editor.org/rfc/rfc1866#section-8.2.1)
282
+ // [RFC6570 considers to be _undefined_](https://datatracker.ietf.org/doc/html/rfc6570#section-2.3)
273
283
274
284
if ( line . indexOf ( '[RFC' ) >= 0 ) {
275
- line = line . replace ( / \[ R F C ? ( [ 0 - 9 ] { 1 , 5 } ) \] / g, function ( match , group1 ) {
276
- console . warn ( 'Fixing RFC reference' , match , group1 ) ;
285
+ // also detect [RFC4648 §3.2] etc. in 3.0.4.md and 3.1.1.md
286
+ line = line . replace ( / \[ R F C ? ( [ 0 - 9 ] { 1 , 5 } ) ( § [ 0 - 9 . - ] + ) ? \] / g, function ( match , group1 ) {
287
+ // console.warn('Fixing RFC reference',match,group1);
277
288
return '[[RFC' + group1 + ']]' ;
278
289
} ) ;
279
290
}
280
291
281
- line = line . replace ( 'http://tools.ietf.org' , 'https://tools.ietf.org' ) ;
282
- if ( line . indexOf ( 'xml2rfc.ietf.org' ) > 0 ) {
283
- line = line . replace ( 'https://xml2rfc.ietf.org/public/rfc/html/rfc' , 'https://tools.ietf.org/html/rfc' ) ;
284
- line = line . replace ( '.html' , '' ) ;
285
- }
292
+ //TODO: non-link mentions of RFCs in 3.0.4 and 3.1.1, for example
293
+ // RFC3986's definition of [reserved](https://datatracker.ietf.org/doc/html/rfc3986#section-2.2)
294
+
295
+ // harmonize RFC URLs
296
+ line = line . replace ( 'http://www.ietf.org/rfc/rfc2119.txt' , 'https://tools.ietf.org/html/rfc2119' ) ; // only in 2.0.md
297
+ line = line . replace ( / h t t p s : \/ \/ w w w .r f c - e d i t o r .o r g \/ r f c \/ r f c ( [ 0 - 9 ] { 1 , 5 } ) ( \. h t m l ) ? / g, 'https://tools.ietf.org/html/rfc$1' ) ;
298
+ line = line . replaceAll ( 'https://datatracker.ietf.org/doc/html/rfc' , 'https://tools.ietf.org/html/rfc' ) ;
299
+ line = line . replaceAll ( 'http://tools.ietf.org' , 'https://tools.ietf.org' ) ;
286
300
287
- //handle url fragments in RFC links and construct section titles links as well as RFC links
288
- line = line . replace ( / \] \] \( h t t p s : \/ \/ t o o l s .i e t f .o r g \/ h t m l \/ r f c ( [ 0 - 9 ] { 1 , 5 } ) ( \/ ? \# . * ? ) ? \) / g, function ( match , rfcNumber , fragment ) {
301
+ // handle url fragments in RFC links and construct section titles links as well as RFC links
302
+ line = line . replace ( / \] \] \( h t t p s : \/ \/ t o o l s .i e t f .o r g \/ h t m l \/ r f c ( [ 0 - 9 ] { 1 , 5 } ) \/ ? ( \# [ ^ ) ] * ) ? \) / g, function ( match , rfcNumber , fragment ) {
289
303
if ( fragment ) {
290
304
// Extract section title from the fragment
291
305
let sectionTitle = fragment . replace ( '#' , '' ) . replace ( / - / g, ' ' ) ;
292
306
sectionTitle = sectionTitle . charAt ( 0 ) . toUpperCase ( ) + sectionTitle . slice ( 1 ) ; // Capitalize the first letter
293
- return `]] [${ sectionTitle } ](https://tools .ietf.org/html/rfc${ rfcNumber } ${ fragment } )` ;
307
+ return `]] [${ sectionTitle } ](https://datatracker .ietf.org/doc /html/rfc${ rfcNumber } ${ fragment } )` ;
294
308
} else {
295
309
return ']]' ;
296
310
}
297
- return ']]' ;
298
311
} ) ;
299
312
}
300
313
301
- // minor fixup to get bibliography link to work
302
- //if (line.indexOf('[ABNF]')>=0) {
303
- // line = line.replace('[ABNF]','[Augmented Backus-Naur Form]');
304
- //}
305
-
306
314
if ( ! inCodeBlock && line . indexOf ( '](../' ) >= 0 ) {
307
315
const regExp = / \( ( \. \. [ ^ ) ] + ) \) / g;
308
316
line = line . replace ( regExp , function ( match , group1 ) {
@@ -315,9 +323,10 @@ for (let l in lines) {
315
323
let heading = 0 ;
316
324
while ( line [ heading ] === '#' ) heading ++ ;
317
325
let delta = heading - prevHeading ;
326
+ if ( delta > 1 ) console . warn ( delta , line ) ;
318
327
if ( delta > 0 ) delta = 1 ;
319
328
//if (delta<0) delta = -1;
320
- if ( Math . abs ( delta ) > 1 ) console . warn ( delta , line ) ;
329
+ // if (Math.abs(delta)>1) console.warn(delta,line);
321
330
let prefix = '' ;
322
331
let newSection = '<section>' ;
323
332
if ( line . includes ( '## Version ' ) ) {
0 commit comments