@@ -2,31 +2,26 @@ extern crate regex;
2
2
3
3
use regex:: Regex ;
4
4
5
- use std:: env;
6
5
use std:: fs:: File ;
7
6
use std:: io:: prelude:: * ;
8
- use std:: io:: { BufReader , BufWriter } ;
9
- use std:: path:: Path ;
7
+ use std:: io:: { BufRead , BufWriter } ;
10
8
11
9
// Generate character mapping tables directly from the specification.
12
10
fn main ( ) {
13
11
// Input from the RFC.
14
- let in_file = File :: open ( "rfc3454.txt" ) . unwrap ( ) ;
15
- let mut reader = BufReader :: new ( in_file) ;
12
+ let reader = include_bytes ! ( "rfc3454.txt" ) ;
16
13
17
14
// Output to a Rust source file.
18
- let out_dir = env:: var ( "OUT_DIR" ) . unwrap ( ) ;
19
- let dest_path = Path :: new ( & out_dir) . join ( "rfc3454.rs" ) ;
20
- let out_file = File :: create ( & dest_path) . unwrap ( ) ;
15
+ let out_file = File :: create ( "../src/rfc3454.rs" ) . unwrap ( ) ;
21
16
let mut writer = BufWriter :: new ( out_file) ;
22
17
23
18
// Generate tables.
24
- include_table ( & mut writer, & mut reader, "A.1" ) ;
25
- include_table ( & mut writer, & mut reader, "B.2" ) ;
19
+ include_table ( & mut writer, & mut & reader[ .. ] , "A.1" ) ;
20
+ include_table ( & mut writer, & mut & reader[ .. ] , "B.2" ) ;
26
21
}
27
22
28
23
// Generate code for the named mapping table.
29
- fn include_table < R : Read , W : Write > ( writer : & mut BufWriter < W > , reader : & mut BufReader < R > , tablename : & str ) {
24
+ fn include_table < R : BufRead , W : Write > ( writer : & mut W , reader : & mut R , tablename : & str ) {
30
25
// Scan to start of table.
31
26
loop {
32
27
let mut line = String :: new ( ) ;
@@ -37,7 +32,7 @@ fn include_table<R: Read, W: Write>(writer: &mut BufWriter<W>, reader: &mut BufR
37
32
}
38
33
39
34
// Output table declaration.
40
- write ! ( writer, "pub const RFC3454_ {}: &[(char, Option<char>, Option<&str>)] = &[\n " , tablename. replace( "." , "_" ) ) . unwrap ( ) ;
35
+ write ! ( writer, "pub const {}: &[(char, Option<char>, Option<&str>)] = &[\n " , tablename. replace( "." , "_" ) ) . unwrap ( ) ;
41
36
42
37
// For each line:
43
38
let target_re = Regex :: new ( r"([0-9A-F]+)(-([0-9A-F]+))?(; ([0-9A-F]+)( ([0-9A-F]+))?( ([0-9A-F]+))?( ([0-9A-F]+))?;)?" ) . unwrap ( ) ;
0 commit comments