@@ -68,6 +68,7 @@ struct Column<'a> {
68
68
hide : bool ,
69
69
include : Option < Regex > ,
70
70
exclude : Option < Regex > ,
71
+ trim : bool ,
71
72
convert : Option < & ' a str > ,
72
73
find : Option < & ' a str > ,
73
74
replace : Option < & ' a str > ,
@@ -200,6 +201,7 @@ fn add_table<'a>(rowpath: &str, outfile: Option<&str>, filemode: &str, skip: Opt
200
201
let hide = col[ "hide" ] . as_bool ( ) . unwrap_or ( false ) ;
201
202
let include: Option < Regex > = col[ "incl" ] . as_str ( ) . map ( |str| Regex :: new ( str) . unwrap_or_else ( |err| fatalerr ! ( "Error: invalid regex in 'incl' entry in configuration file: {}" , err) ) ) ;
202
203
let exclude: Option < Regex > = col[ "excl" ] . as_str ( ) . map ( |str| Regex :: new ( str) . unwrap_or_else ( |err| fatalerr ! ( "Error: invalid regex in 'excl' entry in configuration file: {}" , err) ) ) ;
204
+ let trim = col[ "trim" ] . as_bool ( ) . unwrap_or ( false ) ;
203
205
let attr = col[ "attr" ] . as_str ( ) ;
204
206
let convert = col[ "conv" ] . as_str ( ) ;
205
207
let find = col[ "find" ] . as_str ( ) ;
@@ -231,7 +233,7 @@ fn add_table<'a>(rowpath: &str, outfile: Option<&str>, filemode: &str, skip: Opt
231
233
eprintln ! ( "Warning: the bbox option has no function without conversion type 'gml-to-ekwb'" ) ;
232
234
}
233
235
234
- let column = Column { name : name. to_string ( ) , path, value : RefCell :: new ( String :: new ( ) ) , attr, hide, include, exclude, convert, find, replace, consol, subtable, bbox, multitype } ;
236
+ let column = Column { name : name. to_string ( ) , path, value : RefCell :: new ( String :: new ( ) ) , attr, hide, include, exclude, trim , convert, find, replace, consol, subtable, bbox, multitype } ;
235
237
table. columns . push ( column) ;
236
238
}
237
239
table
@@ -285,6 +287,7 @@ fn main() {
285
287
let mut gmltoewkb = false ;
286
288
let mut gmlpos = false ;
287
289
let mut gmlcoll: Vec < Geometry > = vec ! [ ] ;
290
+ let trimre = Regex :: new ( "[ \n \r \t ]*\n [ \n \r \t ]*" ) . unwrap ( ) ;
288
291
289
292
let start = Instant :: now ( ) ;
290
293
loop {
@@ -452,7 +455,13 @@ fn main() {
452
455
}
453
456
let unescaped = e. unescaped ( ) . unwrap_or_else ( |err| fatalerr ! ( "Error: failed to unescape XML text node '{}': {}" , String :: from_utf8_lossy( e) , err) ) ;
454
457
let decoded = reader. decode ( & unescaped) . unwrap_or_else ( |err| fatalerr ! ( "Error: failed to decode XML text node '{}': {}" , String :: from_utf8_lossy( e) , err) ) ;
455
- table. columns [ i] . value . borrow_mut ( ) . push_str ( & decoded. cow_replace ( "\\ " , "\\ \\ " ) . cow_replace ( "\r " , "\\ r" ) . cow_replace ( "\n " , "\\ n" ) . cow_replace ( "\t " , "\\ t" ) ) ;
458
+ if table. columns [ i] . trim {
459
+ let trimmed = trimre. replace_all ( decoded, " " ) ;
460
+ table. columns [ i] . value . borrow_mut ( ) . push_str ( & trimmed. cow_replace ( "\\ " , "\\ \\ " ) . cow_replace ( "\t " , "\\ t" ) ) ;
461
+ }
462
+ else {
463
+ table. columns [ i] . value . borrow_mut ( ) . push_str ( & decoded. cow_replace ( "\\ " , "\\ \\ " ) . cow_replace ( "\r " , "\\ r" ) . cow_replace ( "\n " , "\\ n" ) . cow_replace ( "\t " , "\\ t" ) ) ;
464
+ }
456
465
if let Some ( re) = & table. columns [ i] . include {
457
466
if !re. is_match ( & table. columns [ i] . value . borrow ( ) ) {
458
467
filtered = true ;
0 commit comments