@@ -69,6 +69,27 @@ book!(
69
69
RustdocBook , "src/doc/rustdoc" , "rustdoc" , RustbookVersion :: MdBook1 ;
70
70
) ;
71
71
72
+ fn generate_jump_version_js ( p : & Path ) -> String {
73
+ let content = fs:: read ( p) . expect ( "file not found" ) ;
74
+ let s = String :: from_utf8_lossy ( & content) ;
75
+ let version_parts = crate :: channel:: CFG_RELEASE_NUM . split ( "." ) . collect :: < Vec < _ > > ( ) ;
76
+ let mut versions = vec ! [ "\" nightly\" " . to_owned( ) ,
77
+ "\" beta\" " . to_owned( ) ,
78
+ "\" stable\" " . to_owned( ) ] ;
79
+ let mut middle_version = i32:: from_str_radix ( version_parts[ 1 ] , 10 ) . expect ( "unknown number" ) ;
80
+
81
+ while middle_version >= 0 {
82
+ versions. push ( format ! ( "\" 1.{}.0\" " , middle_version) ) ;
83
+ middle_version -= 1 ;
84
+ }
85
+ s. replace ( "var VERSIONS = [];" , & format ! ( "var VERSIONS = [{}];" , versions. join( "," ) ) )
86
+ }
87
+
88
+ fn generate_jump_version_css ( p : & Path ) -> String {
89
+ let content = fs:: read ( p) . expect ( "file not found" ) ;
90
+ String :: from_utf8 ( content) . expect ( "invalid UTF8" )
91
+ }
92
+
72
93
#[ derive( Debug , Copy , Clone , Hash , PartialEq , Eq ) ]
73
94
enum RustbookVersion {
74
95
MdBook1 ,
@@ -329,21 +350,23 @@ fn invoke_rustdoc(builder: &Builder, compiler: Compiler, target: Interned<String
329
350
let favicon = builder. src . join ( "src/doc/favicon.inc" ) ;
330
351
let footer = builder. src . join ( "src/doc/footer.inc" ) ;
331
352
let version_info = out. join ( "version_info.html" ) ;
353
+ let jump_version_js = builder. src . join ( "src/doc/jump-version.js" ) ;
354
+ let jump_version_css = builder. src . join ( "src/doc/jump-version.css" ) ;
332
355
333
356
let mut cmd = builder. rustdoc_cmd ( compiler. host ) ;
334
357
335
358
let out = out. join ( "book" ) ;
336
359
337
360
cmd. arg ( "--html-after-content" ) . arg ( & footer)
338
- . arg ( "--html-before-content" ) . arg ( & version_info)
339
- . arg ( "--html-in-header" ) . arg ( & favicon)
340
- . arg ( "--markdown-no-toc" )
341
- . arg ( "--markdown-playground-url" )
342
- . arg ( "https://play.rust-lang.org/ " )
343
- . arg ( "-o " ) . arg ( & out )
344
- . arg ( & path )
345
- . arg ( "--markdown-css" )
346
- . arg ( "../rust.css" ) ;
361
+ . arg ( "--html-before-content" ) . arg ( & version_info)
362
+ . arg ( "--html-in-header" ) . arg ( & favicon)
363
+ . arg ( "--raw-js-in-header" ) . arg ( & generate_jump_version_js ( & jump_version_js ) )
364
+ . arg ( "--raw-css-in-header" ) . arg ( & generate_jump_version_css ( & jump_version_css ) )
365
+ . arg ( "--markdown-no-toc " )
366
+ . arg ( "--markdown-playground-url " ) . arg ( "https://play.rust-lang.org/" )
367
+ . arg ( "-o" ) . arg ( & out )
368
+ . arg ( "--markdown-css" ) . arg ( "../rust. css")
369
+ . arg ( & path ) ;
347
370
348
371
builder. run ( & mut cmd) ;
349
372
}
@@ -388,6 +411,8 @@ impl Step for Standalone {
388
411
let favicon = builder. src . join ( "src/doc/favicon.inc" ) ;
389
412
let footer = builder. src . join ( "src/doc/footer.inc" ) ;
390
413
let full_toc = builder. src . join ( "src/doc/full-toc.inc" ) ;
414
+ let jump_version_js = builder. src . join ( "src/doc/jump-version.js" ) ;
415
+ let jump_version_css = builder. src . join ( "src/doc/jump-version.css" ) ;
391
416
t ! ( fs:: copy( builder. src. join( "src/doc/rust.css" ) , out. join( "rust.css" ) ) ) ;
392
417
393
418
let version_input = builder. src . join ( "src/doc/version_info.html.template" ) ;
@@ -424,10 +449,13 @@ impl Step for Standalone {
424
449
cmd. arg ( "--html-after-content" ) . arg ( & footer)
425
450
. arg ( "--html-before-content" ) . arg ( & version_info)
426
451
. arg ( "--html-in-header" ) . arg ( & favicon)
452
+ . arg ( "--raw-js-in-header" )
453
+ . arg ( & generate_jump_version_js ( & jump_version_js) )
454
+ . arg ( "--raw-css-in-header" )
455
+ . arg ( & generate_jump_version_css ( & jump_version_css) )
427
456
. arg ( "--markdown-no-toc" )
428
457
. arg ( "--index-page" ) . arg ( & builder. src . join ( "src/doc/index.md" ) )
429
- . arg ( "--markdown-playground-url" )
430
- . arg ( "https://play.rust-lang.org/" )
458
+ . arg ( "--markdown-playground-url" ) . arg ( "https://play.rust-lang.org/" )
431
459
. arg ( "-o" ) . arg ( & out)
432
460
. arg ( & path) ;
433
461
@@ -506,6 +534,10 @@ impl Step for Std {
506
534
let mut cargo = builder. cargo ( compiler, Mode :: Std , target, "rustdoc" ) ;
507
535
compile:: std_cargo ( builder, & compiler, target, & mut cargo) ;
508
536
537
+
538
+ let jump_version_js = builder. src . join ( "src/doc/jump-version.js" ) ;
539
+ let jump_version_css = builder. src . join ( "src/doc/jump-version.css" ) ;
540
+
509
541
// Keep a whitelist so we do not build internal stdlib crates, these will be
510
542
// build by the rustc step later if enabled.
511
543
cargo. arg ( "-Z" ) . arg ( "unstable-options" )
@@ -518,6 +550,10 @@ impl Step for Std {
518
550
. arg ( "--markdown-css" ) . arg ( "rust.css" )
519
551
. arg ( "--markdown-no-toc" )
520
552
. arg ( "--generate-redirect-pages" )
553
+ . arg ( "--raw-js-in-header" )
554
+ . arg ( & generate_jump_version_js ( & jump_version_js) )
555
+ . arg ( "--raw-css-in-header" )
556
+ . arg ( & generate_jump_version_css ( & jump_version_css) )
521
557
. arg ( "--index-page" ) . arg ( & builder. src . join ( "src/doc/index.md" ) ) ;
522
558
523
559
builder. run ( & mut cargo) ;
0 commit comments