@@ -1427,7 +1427,7 @@ func (p *parser) scanCapname() string {
1427
1427
return string (p .pattern [startpos :p .textpos ()])
1428
1428
}
1429
1429
1430
- //Scans contents of [] (not including []'s), and converts to a set.
1430
+ // Scans contents of [] (not including []'s), and converts to a set.
1431
1431
func (p * parser ) scanCharSet (caseInsensitive , scanOnly bool ) (* CharSet , error ) {
1432
1432
ch := '\x00'
1433
1433
chPrev := '\x00'
@@ -1467,7 +1467,11 @@ func (p *parser) scanCharSet(caseInsensitive, scanOnly bool) (*CharSet, error) {
1467
1467
case 'D' , 'd' :
1468
1468
if ! scanOnly {
1469
1469
if inRange {
1470
- return nil , p .getErr (ErrBadClassInCharRange , ch )
1470
+ if ! p .useOptionE () {
1471
+ return nil , p .getErr (ErrBadClassInCharRange , ch )
1472
+ }
1473
+ cc .addChar ('-' )
1474
+ cc .addChar (chPrev )
1471
1475
}
1472
1476
cc .addDigit (p .useOptionE () || p .useRE2 (), ch == 'D' , p .patternRaw )
1473
1477
}
@@ -1476,7 +1480,11 @@ func (p *parser) scanCharSet(caseInsensitive, scanOnly bool) (*CharSet, error) {
1476
1480
case 'S' , 's' :
1477
1481
if ! scanOnly {
1478
1482
if inRange {
1479
- return nil , p .getErr (ErrBadClassInCharRange , ch )
1483
+ if ! p .useOptionE () {
1484
+ return nil , p .getErr (ErrBadClassInCharRange , ch )
1485
+ }
1486
+ cc .addChar ('-' )
1487
+ cc .addChar (chPrev )
1480
1488
}
1481
1489
cc .addSpace (p .useOptionE (), p .useRE2 (), ch == 'S' )
1482
1490
}
@@ -1485,7 +1493,11 @@ func (p *parser) scanCharSet(caseInsensitive, scanOnly bool) (*CharSet, error) {
1485
1493
case 'W' , 'w' :
1486
1494
if ! scanOnly {
1487
1495
if inRange {
1488
- return nil , p .getErr (ErrBadClassInCharRange , ch )
1496
+ if ! p .useOptionE () {
1497
+ return nil , p .getErr (ErrBadClassInCharRange , ch )
1498
+ }
1499
+ cc .addChar ('-' )
1500
+ cc .addChar (chPrev )
1489
1501
}
1490
1502
1491
1503
cc .addWord (p .useOptionE () || p .useRE2 (), ch == 'W' )
@@ -1495,22 +1507,29 @@ func (p *parser) scanCharSet(caseInsensitive, scanOnly bool) (*CharSet, error) {
1495
1507
case 'p' , 'P' :
1496
1508
if ! scanOnly {
1497
1509
if inRange {
1498
- return nil , p .getErr (ErrBadClassInCharRange , ch )
1510
+ if ! p .useOptionE () {
1511
+ return nil , p .getErr (ErrBadClassInCharRange , ch )
1512
+ }
1513
+ cc .addChar ('-' )
1514
+ cc .addChar (chPrev )
1499
1515
}
1500
1516
prop , err := p .parseProperty ()
1501
1517
if err != nil {
1502
1518
return nil , err
1503
1519
}
1504
1520
cc .addCategory (prop , (ch != 'p' ), caseInsensitive , p .patternRaw )
1505
1521
} else {
1506
- p .parseProperty ()
1522
+ _ , err := p .parseProperty ()
1523
+ if err != nil {
1524
+ return nil , err
1525
+ }
1507
1526
}
1508
1527
1509
1528
continue
1510
1529
1511
1530
case '-' :
1512
1531
if ! scanOnly {
1513
- cc .addRange ( ch , ch )
1532
+ cc .addChar ( ch )
1514
1533
}
1515
1534
continue
1516
1535
0 commit comments