@@ -20,7 +20,6 @@ const VOID_ELEMENTS: [&str; 14] = [
20
20
/// html (str): The HTML string to transform. Can be a fragment or full document.
21
21
/// root_attributes (List[str]): List of attribute names to add to root elements only.
22
22
/// all_attributes (List[str]): List of attribute names to add to all elements.
23
- /// expand_empty_elements (bool, optional): Whether to expand self-closing tags into open/close pairs. Defaults to true.
24
23
/// check_end_names (bool, optional): Whether to validate matching of end tags. Defaults to false.
25
24
/// watch_on_attribute (str, optional): If set, captures which attributes were added to elements with this attribute.
26
25
///
@@ -40,21 +39,19 @@ const VOID_ELEMENTS: [&str; 14] = [
40
39
/// ValueError: If the HTML is malformed or cannot be parsed.
41
40
#[ pyfunction]
42
41
#[ pyo3(
43
- text_signature = "(html, root_attributes, all_attributes, *, expand_empty_elements=True, check_end_names=False, watch_on_attribute=None)"
42
+ text_signature = "(html, root_attributes, all_attributes, *, check_end_names=False, watch_on_attribute=None)"
44
43
) ]
45
44
pub fn transform_html (
46
45
py : Python ,
47
46
html : & str ,
48
47
root_attributes : Vec < String > ,
49
48
all_attributes : Vec < String > ,
50
- expand_empty_elements : Option < bool > ,
51
49
check_end_names : Option < bool > ,
52
50
watch_on_attribute : Option < String > ,
53
51
) -> PyResult < PyObject > {
54
52
let config = HtmlTransformerConfig :: new (
55
53
root_attributes,
56
54
all_attributes,
57
- expand_empty_elements. unwrap_or ( true ) ,
58
55
check_end_names. unwrap_or ( false ) ,
59
56
watch_on_attribute,
60
57
) ;
@@ -79,7 +76,6 @@ pub struct HtmlTransformerConfig {
79
76
root_attributes : Vec < String > ,
80
77
all_attributes : Vec < String > ,
81
78
void_elements : HashSet < String > ,
82
- expand_empty_elements : bool ,
83
79
check_end_names : bool ,
84
80
watch_on_attribute : Option < String > ,
85
81
}
@@ -88,7 +84,6 @@ impl HtmlTransformerConfig {
88
84
pub fn new (
89
85
root_attributes : Vec < String > ,
90
86
all_attributes : Vec < String > ,
91
- expand_empty_elements : bool ,
92
87
check_end_names : bool ,
93
88
watch_on_attribute : Option < String > ,
94
89
) -> Self {
@@ -98,7 +93,6 @@ impl HtmlTransformerConfig {
98
93
root_attributes,
99
94
all_attributes,
100
95
void_elements,
101
- expand_empty_elements,
102
96
check_end_names,
103
97
watch_on_attribute,
104
98
}
@@ -154,7 +148,6 @@ pub fn transform(
154
148
) -> Result < ( String , Vec < ( String , Vec < String > ) > ) , Box < dyn std:: error:: Error > > {
155
149
let mut reader = Reader :: from_str ( html) ;
156
150
let reader_config = reader. config_mut ( ) ;
157
- reader_config. expand_empty_elements = config. expand_empty_elements ;
158
151
reader_config. check_end_names = config. check_end_names ;
159
152
160
153
// We transform the HTML by reading it and writing it simultaneously
@@ -226,7 +219,6 @@ mod tests {
226
219
let config = HtmlTransformerConfig :: new (
227
220
vec ! [ "data-root" . to_string( ) ] ,
228
221
vec ! [ "data-all" . to_string( ) ] ,
229
- true ,
230
222
false ,
231
223
None ,
232
224
) ;
@@ -243,7 +235,6 @@ mod tests {
243
235
let config = HtmlTransformerConfig :: new (
244
236
vec ! [ "data-root" . to_string( ) ] ,
245
237
vec ! [ "data-all" . to_string( ) ] ,
246
- true ,
247
238
false ,
248
239
None ,
249
240
) ;
@@ -262,7 +253,6 @@ mod tests {
262
253
let config = HtmlTransformerConfig :: new (
263
254
vec ! [ "data-root" . to_string( ) ] ,
264
255
vec ! [ "data-all" . to_string( ) , "data-v-123" . to_string( ) ] ,
265
- true ,
266
256
false ,
267
257
None ,
268
258
) ;
@@ -315,7 +305,6 @@ mod tests {
315
305
let config = HtmlTransformerConfig :: new (
316
306
vec ! [ "data-root" . to_string( ) ] ,
317
307
vec ! [ "data-v-123" . to_string( ) ] ,
318
- true ,
319
308
false ,
320
309
None ,
321
310
) ;
@@ -369,7 +358,6 @@ mod tests {
369
358
let config = HtmlTransformerConfig :: new (
370
359
vec ! [ "data-root" . to_string( ) ] ,
371
360
vec ! [ "data-v-123" . to_string( ) ] ,
372
- true ,
373
361
false ,
374
362
None ,
375
363
) ;
@@ -395,75 +383,12 @@ mod tests {
395
383
assert ! ( result. contains( "/>" ) ) ;
396
384
}
397
385
398
- #[ test]
399
- fn test_config_expand_empty_elements ( ) {
400
- // Test with expand_empty_elements = false
401
- let config = HtmlTransformerConfig :: new (
402
- vec ! [ "data-root" . to_string( ) ] ,
403
- vec ! [ "data-v-123" . to_string( ) ] ,
404
- false , // Don't expand empty elements
405
- false ,
406
- None ,
407
- ) ;
408
-
409
- let test_cases = [
410
- // Non-void elements should stay self-closing when expand_empty_elements is false
411
- (
412
- "<div/>" ,
413
- "<div data-root=\" \" data-v-123=\" \" />"
414
- ) ,
415
- (
416
- "<p/>" ,
417
- "<p data-root=\" \" data-v-123=\" \" />"
418
- ) ,
419
- (
420
- "<div><span/></div>" ,
421
- "<div data-root=\" \" data-v-123=\" \" ><span data-v-123=\" \" /></div>"
422
- ) ,
423
- // Void elements should always be self-closing regardless of config
424
- (
425
- "<div><img/><br/></div>" ,
426
- "<div data-root=\" \" data-v-123=\" \" ><img data-v-123=\" \" /><br data-v-123=\" \" /></div>"
427
- ) ,
428
- ] ;
429
-
430
- for ( input, expected) in test_cases {
431
- let ( result, _) = transform ( & config, input) . unwrap ( ) ;
432
- assert_eq ! ( result, expected) ;
433
- }
434
-
435
- // Compare with expand_empty_elements = true
436
- let config = HtmlTransformerConfig :: new (
437
- vec ! [ "data-root" . to_string( ) ] ,
438
- vec ! [ "data-v-123" . to_string( ) ] ,
439
- true , // Expand empty elements
440
- false ,
441
- None ,
442
- ) ;
443
-
444
- let expanded_cases = [
445
- ( "<div/>" , "<div data-root=\" \" data-v-123=\" \" ></div>" ) ,
446
- ( "<p/>" , "<p data-root=\" \" data-v-123=\" \" ></p>" ) ,
447
- // Void elements should still be self-closing
448
- (
449
- "<div><img/></div>" ,
450
- "<div data-root=\" \" data-v-123=\" \" ><img data-v-123=\" \" /></div>" ,
451
- ) ,
452
- ] ;
453
-
454
- for ( input, expected) in expanded_cases {
455
- let ( result, _) = transform ( & config, input) . unwrap ( ) ;
456
- assert_eq ! ( result, expected) ;
457
- }
458
- }
459
-
460
386
#[ test]
461
387
fn test_config_check_end_names ( ) {
462
388
// Test with check_end_names = false (lenient mode)
463
389
let config = HtmlTransformerConfig :: new (
464
390
vec ! [ "data-root" . to_string( ) ] ,
465
391
vec ! [ "data-v-123" . to_string( ) ] ,
466
- true ,
467
392
false , // Don't check end names
468
393
None ,
469
394
) ;
@@ -483,7 +408,6 @@ mod tests {
483
408
let config = HtmlTransformerConfig :: new (
484
409
vec ! [ "data-root" . to_string( ) ] ,
485
410
vec ! [ "data-v-123" . to_string( ) ] ,
486
- true ,
487
411
true , // Check end names
488
412
None ,
489
413
) ;
@@ -503,7 +427,6 @@ mod tests {
503
427
let config = HtmlTransformerConfig :: new (
504
428
vec ! [ "data-root" . to_string( ) ] ,
505
429
vec ! [ "data-v-123" . to_string( ) ] ,
506
- true ,
507
430
false ,
508
431
Some ( "data-id" . to_string ( ) ) ,
509
432
) ;
0 commit comments