177
+ − 1
package XML::SAX::Base;
+ − 2
+ − 3
# version 0.10 - Kip Hampton <khampton@totalcinema.com>
+ − 4
# version 0.13 - Robin Berjon <robin@knowscape.com>
+ − 5
# version 0.15 - Kip Hampton <khampton@totalcinema.com>
+ − 6
# version 0.17 - Kip Hampton <khampton@totalcinema.com>
+ − 7
# version 0.19 - Kip Hampton <khampton@totalcinema.com>
+ − 8
# version 0.21 - Kip Hampton <khampton@totalcinema.com>
+ − 9
# version 0.22 - Robin Berjon <robin@knowscape.com>
+ − 10
# version 0.23 - Matt Sergeant <matt@sergeant.org>
+ − 11
# version 0.24 - Robin Berjon <robin@knowscape.com>
+ − 12
# version 0.25 - Kip Hampton <khampton@totalcinema.com>
+ − 13
# version 1.00 - Kip Hampton <khampton@totalcinema.com>
+ − 14
# version 1.01 - Kip Hampton <khampton@totalcinema.com>
+ − 15
# version 1.02 - Robin Berjon <robin@knowscape.com>
+ − 16
# version 1.03 - Matt Sergeant <matt@sergeant.org>
+ − 17
# version 1.04 - Kip Hampton <khampton@totalcinema.com>
+ − 18
+ − 19
#-----------------------------------------------------#
+ − 20
# STOP!!!!!
+ − 21
#
+ − 22
# This file is generated by the 'Makefile.PL' file
+ − 23
# that ships with the XML::SAX distribution.
+ − 24
# If you need to make changes, patch that file NOT
+ − 25
# this one.
+ − 26
#-----------------------------------------------------#
+ − 27
+ − 28
use strict;
+ − 29
use vars qw($VERSION);
+ − 30
use XML::SAX::Exception qw();
+ − 31
+ − 32
$VERSION = '1.04';
+ − 33
+ − 34
sub notation_decl {
+ − 35
my $self = shift;
+ − 36
if (defined $self->{Methods}->{'notation_decl'}) {
+ − 37
$self->{Methods}->{'notation_decl'}->(@_);
+ − 38
}
+ − 39
else {
+ − 40
my $method;
+ − 41
my $callbacks;
+ − 42
if (exists $self->{ParseOptions}) {
+ − 43
$callbacks = $self->{ParseOptions};
+ − 44
}
+ − 45
else {
+ − 46
$callbacks = $self;
+ − 47
}
+ − 48
if (0) { # dummy to make elsif's below compile
+ − 49
}
+ − 50
elsif (defined $callbacks->{'DTDHandler'} and $method = $callbacks->{'DTDHandler'}->can('notation_decl') ) {
+ − 51
my $handler = $callbacks->{'DTDHandler'};
+ − 52
$self->{Methods}->{'notation_decl'} = sub { $method->($handler, @_) };
+ − 53
return $method->($handler, @_);
+ − 54
}
+ − 55
elsif (defined $callbacks->{'Handler'} and $method = $callbacks->{'Handler'}->can('notation_decl') ) {
+ − 56
my $handler = $callbacks->{'Handler'};
+ − 57
$self->{Methods}->{'notation_decl'} = sub { $method->($handler, @_) };
+ − 58
return $method->($handler, @_);
+ − 59
}
+ − 60
elsif (defined $callbacks->{'DTDHandler'}
+ − 61
and $callbacks->{'DTDHandler'}->can('AUTOLOAD')
+ − 62
and $callbacks->{'DTDHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 63
)
+ − 64
{
+ − 65
my $res = eval { $callbacks->{'DTDHandler'}->notation_decl(@_) };
+ − 66
if ($@) {
+ − 67
die $@;
+ − 68
}
+ − 69
else {
+ − 70
# I think there's a buggette here...
+ − 71
# if the first call throws an exception, we don't set it up right.
+ − 72
# Not fatal, but we might want to address it.
+ − 73
my $handler = $callbacks->{'DTDHandler'};
+ − 74
$self->{Methods}->{'notation_decl'} = sub { $handler->notation_decl(@_) };
+ − 75
}
+ − 76
return $res;
+ − 77
}
+ − 78
elsif (defined $callbacks->{'Handler'}
+ − 79
and $callbacks->{'Handler'}->can('AUTOLOAD')
+ − 80
and $callbacks->{'Handler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 81
)
+ − 82
{
+ − 83
my $res = eval { $callbacks->{'Handler'}->notation_decl(@_) };
+ − 84
if ($@) {
+ − 85
die $@;
+ − 86
}
+ − 87
else {
+ − 88
# I think there's a buggette here...
+ − 89
# if the first call throws an exception, we don't set it up right.
+ − 90
# Not fatal, but we might want to address it.
+ − 91
my $handler = $callbacks->{'Handler'};
+ − 92
$self->{Methods}->{'notation_decl'} = sub { $handler->notation_decl(@_) };
+ − 93
}
+ − 94
return $res;
+ − 95
}
+ − 96
else {
+ − 97
$self->{Methods}->{'notation_decl'} = sub { };
+ − 98
}
+ − 99
}
+ − 100
+ − 101
}
+ − 102
+ − 103
sub resolve_entity {
+ − 104
my $self = shift;
+ − 105
if (defined $self->{Methods}->{'resolve_entity'}) {
+ − 106
$self->{Methods}->{'resolve_entity'}->(@_);
+ − 107
}
+ − 108
else {
+ − 109
my $method;
+ − 110
my $callbacks;
+ − 111
if (exists $self->{ParseOptions}) {
+ − 112
$callbacks = $self->{ParseOptions};
+ − 113
}
+ − 114
else {
+ − 115
$callbacks = $self;
+ − 116
}
+ − 117
if (0) { # dummy to make elsif's below compile
+ − 118
}
+ − 119
elsif (defined $callbacks->{'EntityResolver'} and $method = $callbacks->{'EntityResolver'}->can('resolve_entity') ) {
+ − 120
my $handler = $callbacks->{'EntityResolver'};
+ − 121
$self->{Methods}->{'resolve_entity'} = sub { $method->($handler, @_) };
+ − 122
return $method->($handler, @_);
+ − 123
}
+ − 124
elsif (defined $callbacks->{'Handler'} and $method = $callbacks->{'Handler'}->can('resolve_entity') ) {
+ − 125
my $handler = $callbacks->{'Handler'};
+ − 126
$self->{Methods}->{'resolve_entity'} = sub { $method->($handler, @_) };
+ − 127
return $method->($handler, @_);
+ − 128
}
+ − 129
elsif (defined $callbacks->{'EntityResolver'}
+ − 130
and $callbacks->{'EntityResolver'}->can('AUTOLOAD')
+ − 131
and $callbacks->{'EntityResolver'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 132
)
+ − 133
{
+ − 134
my $res = eval { $callbacks->{'EntityResolver'}->resolve_entity(@_) };
+ − 135
if ($@) {
+ − 136
die $@;
+ − 137
}
+ − 138
else {
+ − 139
# I think there's a buggette here...
+ − 140
# if the first call throws an exception, we don't set it up right.
+ − 141
# Not fatal, but we might want to address it.
+ − 142
my $handler = $callbacks->{'EntityResolver'};
+ − 143
$self->{Methods}->{'resolve_entity'} = sub { $handler->resolve_entity(@_) };
+ − 144
}
+ − 145
return $res;
+ − 146
}
+ − 147
elsif (defined $callbacks->{'Handler'}
+ − 148
and $callbacks->{'Handler'}->can('AUTOLOAD')
+ − 149
and $callbacks->{'Handler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 150
)
+ − 151
{
+ − 152
my $res = eval { $callbacks->{'Handler'}->resolve_entity(@_) };
+ − 153
if ($@) {
+ − 154
die $@;
+ − 155
}
+ − 156
else {
+ − 157
# I think there's a buggette here...
+ − 158
# if the first call throws an exception, we don't set it up right.
+ − 159
# Not fatal, but we might want to address it.
+ − 160
my $handler = $callbacks->{'Handler'};
+ − 161
$self->{Methods}->{'resolve_entity'} = sub { $handler->resolve_entity(@_) };
+ − 162
}
+ − 163
return $res;
+ − 164
}
+ − 165
else {
+ − 166
$self->{Methods}->{'resolve_entity'} = sub { };
+ − 167
}
+ − 168
}
+ − 169
+ − 170
}
+ − 171
+ − 172
sub start_cdata {
+ − 173
my $self = shift;
+ − 174
if (defined $self->{Methods}->{'start_cdata'}) {
+ − 175
$self->{Methods}->{'start_cdata'}->(@_);
+ − 176
}
+ − 177
else {
+ − 178
my $method;
+ − 179
my $callbacks;
+ − 180
if (exists $self->{ParseOptions}) {
+ − 181
$callbacks = $self->{ParseOptions};
+ − 182
}
+ − 183
else {
+ − 184
$callbacks = $self;
+ − 185
}
+ − 186
if (0) { # dummy to make elsif's below compile
+ − 187
}
+ − 188
elsif (defined $callbacks->{'DocumentHandler'} and $method = $callbacks->{'DocumentHandler'}->can('start_cdata') ) {
+ − 189
my $handler = $callbacks->{'DocumentHandler'};
+ − 190
$self->{Methods}->{'start_cdata'} = sub { $method->($handler, @_) };
+ − 191
return $method->($handler, @_);
+ − 192
}
+ − 193
elsif (defined $callbacks->{'LexicalHandler'} and $method = $callbacks->{'LexicalHandler'}->can('start_cdata') ) {
+ − 194
my $handler = $callbacks->{'LexicalHandler'};
+ − 195
$self->{Methods}->{'start_cdata'} = sub { $method->($handler, @_) };
+ − 196
return $method->($handler, @_);
+ − 197
}
+ − 198
elsif (defined $callbacks->{'Handler'} and $method = $callbacks->{'Handler'}->can('start_cdata') ) {
+ − 199
my $handler = $callbacks->{'Handler'};
+ − 200
$self->{Methods}->{'start_cdata'} = sub { $method->($handler, @_) };
+ − 201
return $method->($handler, @_);
+ − 202
}
+ − 203
elsif (defined $callbacks->{'DocumentHandler'}
+ − 204
and $callbacks->{'DocumentHandler'}->can('AUTOLOAD')
+ − 205
and $callbacks->{'DocumentHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 206
)
+ − 207
{
+ − 208
my $res = eval { $callbacks->{'DocumentHandler'}->start_cdata(@_) };
+ − 209
if ($@) {
+ − 210
die $@;
+ − 211
}
+ − 212
else {
+ − 213
# I think there's a buggette here...
+ − 214
# if the first call throws an exception, we don't set it up right.
+ − 215
# Not fatal, but we might want to address it.
+ − 216
my $handler = $callbacks->{'DocumentHandler'};
+ − 217
$self->{Methods}->{'start_cdata'} = sub { $handler->start_cdata(@_) };
+ − 218
}
+ − 219
return $res;
+ − 220
}
+ − 221
elsif (defined $callbacks->{'LexicalHandler'}
+ − 222
and $callbacks->{'LexicalHandler'}->can('AUTOLOAD')
+ − 223
and $callbacks->{'LexicalHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 224
)
+ − 225
{
+ − 226
my $res = eval { $callbacks->{'LexicalHandler'}->start_cdata(@_) };
+ − 227
if ($@) {
+ − 228
die $@;
+ − 229
}
+ − 230
else {
+ − 231
# I think there's a buggette here...
+ − 232
# if the first call throws an exception, we don't set it up right.
+ − 233
# Not fatal, but we might want to address it.
+ − 234
my $handler = $callbacks->{'LexicalHandler'};
+ − 235
$self->{Methods}->{'start_cdata'} = sub { $handler->start_cdata(@_) };
+ − 236
}
+ − 237
return $res;
+ − 238
}
+ − 239
elsif (defined $callbacks->{'Handler'}
+ − 240
and $callbacks->{'Handler'}->can('AUTOLOAD')
+ − 241
and $callbacks->{'Handler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 242
)
+ − 243
{
+ − 244
my $res = eval { $callbacks->{'Handler'}->start_cdata(@_) };
+ − 245
if ($@) {
+ − 246
die $@;
+ − 247
}
+ − 248
else {
+ − 249
# I think there's a buggette here...
+ − 250
# if the first call throws an exception, we don't set it up right.
+ − 251
# Not fatal, but we might want to address it.
+ − 252
my $handler = $callbacks->{'Handler'};
+ − 253
$self->{Methods}->{'start_cdata'} = sub { $handler->start_cdata(@_) };
+ − 254
}
+ − 255
return $res;
+ − 256
}
+ − 257
else {
+ − 258
$self->{Methods}->{'start_cdata'} = sub { };
+ − 259
}
+ − 260
}
+ − 261
+ − 262
}
+ − 263
+ − 264
sub set_document_locator {
+ − 265
my $self = shift;
+ − 266
if (defined $self->{Methods}->{'set_document_locator'}) {
+ − 267
$self->{Methods}->{'set_document_locator'}->(@_);
+ − 268
}
+ − 269
else {
+ − 270
my $method;
+ − 271
my $callbacks;
+ − 272
if (exists $self->{ParseOptions}) {
+ − 273
$callbacks = $self->{ParseOptions};
+ − 274
}
+ − 275
else {
+ − 276
$callbacks = $self;
+ − 277
}
+ − 278
if (0) { # dummy to make elsif's below compile
+ − 279
}
+ − 280
elsif (defined $callbacks->{'ContentHandler'} and $method = $callbacks->{'ContentHandler'}->can('set_document_locator') ) {
+ − 281
my $handler = $callbacks->{'ContentHandler'};
+ − 282
$self->{Methods}->{'set_document_locator'} = sub { $method->($handler, @_) };
+ − 283
return $method->($handler, @_);
+ − 284
}
+ − 285
elsif (defined $callbacks->{'DocumentHandler'} and $method = $callbacks->{'DocumentHandler'}->can('set_document_locator') ) {
+ − 286
my $handler = $callbacks->{'DocumentHandler'};
+ − 287
$self->{Methods}->{'set_document_locator'} = sub { $method->($handler, @_) };
+ − 288
return $method->($handler, @_);
+ − 289
}
+ − 290
elsif (defined $callbacks->{'Handler'} and $method = $callbacks->{'Handler'}->can('set_document_locator') ) {
+ − 291
my $handler = $callbacks->{'Handler'};
+ − 292
$self->{Methods}->{'set_document_locator'} = sub { $method->($handler, @_) };
+ − 293
return $method->($handler, @_);
+ − 294
}
+ − 295
elsif (defined $callbacks->{'ContentHandler'}
+ − 296
and $callbacks->{'ContentHandler'}->can('AUTOLOAD')
+ − 297
and $callbacks->{'ContentHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 298
)
+ − 299
{
+ − 300
my $res = eval { $callbacks->{'ContentHandler'}->set_document_locator(@_) };
+ − 301
if ($@) {
+ − 302
die $@;
+ − 303
}
+ − 304
else {
+ − 305
# I think there's a buggette here...
+ − 306
# if the first call throws an exception, we don't set it up right.
+ − 307
# Not fatal, but we might want to address it.
+ − 308
my $handler = $callbacks->{'ContentHandler'};
+ − 309
$self->{Methods}->{'set_document_locator'} = sub { $handler->set_document_locator(@_) };
+ − 310
}
+ − 311
return $res;
+ − 312
}
+ − 313
elsif (defined $callbacks->{'DocumentHandler'}
+ − 314
and $callbacks->{'DocumentHandler'}->can('AUTOLOAD')
+ − 315
and $callbacks->{'DocumentHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 316
)
+ − 317
{
+ − 318
my $res = eval { $callbacks->{'DocumentHandler'}->set_document_locator(@_) };
+ − 319
if ($@) {
+ − 320
die $@;
+ − 321
}
+ − 322
else {
+ − 323
# I think there's a buggette here...
+ − 324
# if the first call throws an exception, we don't set it up right.
+ − 325
# Not fatal, but we might want to address it.
+ − 326
my $handler = $callbacks->{'DocumentHandler'};
+ − 327
$self->{Methods}->{'set_document_locator'} = sub { $handler->set_document_locator(@_) };
+ − 328
}
+ − 329
return $res;
+ − 330
}
+ − 331
elsif (defined $callbacks->{'Handler'}
+ − 332
and $callbacks->{'Handler'}->can('AUTOLOAD')
+ − 333
and $callbacks->{'Handler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 334
)
+ − 335
{
+ − 336
my $res = eval { $callbacks->{'Handler'}->set_document_locator(@_) };
+ − 337
if ($@) {
+ − 338
die $@;
+ − 339
}
+ − 340
else {
+ − 341
# I think there's a buggette here...
+ − 342
# if the first call throws an exception, we don't set it up right.
+ − 343
# Not fatal, but we might want to address it.
+ − 344
my $handler = $callbacks->{'Handler'};
+ − 345
$self->{Methods}->{'set_document_locator'} = sub { $handler->set_document_locator(@_) };
+ − 346
}
+ − 347
return $res;
+ − 348
}
+ − 349
else {
+ − 350
$self->{Methods}->{'set_document_locator'} = sub { };
+ − 351
}
+ − 352
}
+ − 353
+ − 354
}
+ − 355
+ − 356
sub xml_decl {
+ − 357
my $self = shift;
+ − 358
if (defined $self->{Methods}->{'xml_decl'}) {
+ − 359
$self->{Methods}->{'xml_decl'}->(@_);
+ − 360
}
+ − 361
else {
+ − 362
my $method;
+ − 363
my $callbacks;
+ − 364
if (exists $self->{ParseOptions}) {
+ − 365
$callbacks = $self->{ParseOptions};
+ − 366
}
+ − 367
else {
+ − 368
$callbacks = $self;
+ − 369
}
+ − 370
if (0) { # dummy to make elsif's below compile
+ − 371
}
+ − 372
elsif (defined $callbacks->{'DTDHandler'} and $method = $callbacks->{'DTDHandler'}->can('xml_decl') ) {
+ − 373
my $handler = $callbacks->{'DTDHandler'};
+ − 374
$self->{Methods}->{'xml_decl'} = sub { $method->($handler, @_) };
+ − 375
return $method->($handler, @_);
+ − 376
}
+ − 377
elsif (defined $callbacks->{'Handler'} and $method = $callbacks->{'Handler'}->can('xml_decl') ) {
+ − 378
my $handler = $callbacks->{'Handler'};
+ − 379
$self->{Methods}->{'xml_decl'} = sub { $method->($handler, @_) };
+ − 380
return $method->($handler, @_);
+ − 381
}
+ − 382
elsif (defined $callbacks->{'DTDHandler'}
+ − 383
and $callbacks->{'DTDHandler'}->can('AUTOLOAD')
+ − 384
and $callbacks->{'DTDHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 385
)
+ − 386
{
+ − 387
my $res = eval { $callbacks->{'DTDHandler'}->xml_decl(@_) };
+ − 388
if ($@) {
+ − 389
die $@;
+ − 390
}
+ − 391
else {
+ − 392
# I think there's a buggette here...
+ − 393
# if the first call throws an exception, we don't set it up right.
+ − 394
# Not fatal, but we might want to address it.
+ − 395
my $handler = $callbacks->{'DTDHandler'};
+ − 396
$self->{Methods}->{'xml_decl'} = sub { $handler->xml_decl(@_) };
+ − 397
}
+ − 398
return $res;
+ − 399
}
+ − 400
elsif (defined $callbacks->{'Handler'}
+ − 401
and $callbacks->{'Handler'}->can('AUTOLOAD')
+ − 402
and $callbacks->{'Handler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 403
)
+ − 404
{
+ − 405
my $res = eval { $callbacks->{'Handler'}->xml_decl(@_) };
+ − 406
if ($@) {
+ − 407
die $@;
+ − 408
}
+ − 409
else {
+ − 410
# I think there's a buggette here...
+ − 411
# if the first call throws an exception, we don't set it up right.
+ − 412
# Not fatal, but we might want to address it.
+ − 413
my $handler = $callbacks->{'Handler'};
+ − 414
$self->{Methods}->{'xml_decl'} = sub { $handler->xml_decl(@_) };
+ − 415
}
+ − 416
return $res;
+ − 417
}
+ − 418
else {
+ − 419
$self->{Methods}->{'xml_decl'} = sub { };
+ − 420
}
+ − 421
}
+ − 422
+ − 423
}
+ − 424
+ − 425
sub processing_instruction {
+ − 426
my $self = shift;
+ − 427
if (defined $self->{Methods}->{'processing_instruction'}) {
+ − 428
$self->{Methods}->{'processing_instruction'}->(@_);
+ − 429
}
+ − 430
else {
+ − 431
my $method;
+ − 432
my $callbacks;
+ − 433
if (exists $self->{ParseOptions}) {
+ − 434
$callbacks = $self->{ParseOptions};
+ − 435
}
+ − 436
else {
+ − 437
$callbacks = $self;
+ − 438
}
+ − 439
if (0) { # dummy to make elsif's below compile
+ − 440
}
+ − 441
elsif (defined $callbacks->{'ContentHandler'} and $method = $callbacks->{'ContentHandler'}->can('processing_instruction') ) {
+ − 442
my $handler = $callbacks->{'ContentHandler'};
+ − 443
$self->{Methods}->{'processing_instruction'} = sub { $method->($handler, @_) };
+ − 444
return $method->($handler, @_);
+ − 445
}
+ − 446
elsif (defined $callbacks->{'DocumentHandler'} and $method = $callbacks->{'DocumentHandler'}->can('processing_instruction') ) {
+ − 447
my $handler = $callbacks->{'DocumentHandler'};
+ − 448
$self->{Methods}->{'processing_instruction'} = sub { $method->($handler, @_) };
+ − 449
return $method->($handler, @_);
+ − 450
}
+ − 451
elsif (defined $callbacks->{'Handler'} and $method = $callbacks->{'Handler'}->can('processing_instruction') ) {
+ − 452
my $handler = $callbacks->{'Handler'};
+ − 453
$self->{Methods}->{'processing_instruction'} = sub { $method->($handler, @_) };
+ − 454
return $method->($handler, @_);
+ − 455
}
+ − 456
elsif (defined $callbacks->{'ContentHandler'}
+ − 457
and $callbacks->{'ContentHandler'}->can('AUTOLOAD')
+ − 458
and $callbacks->{'ContentHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 459
)
+ − 460
{
+ − 461
my $res = eval { $callbacks->{'ContentHandler'}->processing_instruction(@_) };
+ − 462
if ($@) {
+ − 463
die $@;
+ − 464
}
+ − 465
else {
+ − 466
# I think there's a buggette here...
+ − 467
# if the first call throws an exception, we don't set it up right.
+ − 468
# Not fatal, but we might want to address it.
+ − 469
my $handler = $callbacks->{'ContentHandler'};
+ − 470
$self->{Methods}->{'processing_instruction'} = sub { $handler->processing_instruction(@_) };
+ − 471
}
+ − 472
return $res;
+ − 473
}
+ − 474
elsif (defined $callbacks->{'DocumentHandler'}
+ − 475
and $callbacks->{'DocumentHandler'}->can('AUTOLOAD')
+ − 476
and $callbacks->{'DocumentHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 477
)
+ − 478
{
+ − 479
my $res = eval { $callbacks->{'DocumentHandler'}->processing_instruction(@_) };
+ − 480
if ($@) {
+ − 481
die $@;
+ − 482
}
+ − 483
else {
+ − 484
# I think there's a buggette here...
+ − 485
# if the first call throws an exception, we don't set it up right.
+ − 486
# Not fatal, but we might want to address it.
+ − 487
my $handler = $callbacks->{'DocumentHandler'};
+ − 488
$self->{Methods}->{'processing_instruction'} = sub { $handler->processing_instruction(@_) };
+ − 489
}
+ − 490
return $res;
+ − 491
}
+ − 492
elsif (defined $callbacks->{'Handler'}
+ − 493
and $callbacks->{'Handler'}->can('AUTOLOAD')
+ − 494
and $callbacks->{'Handler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 495
)
+ − 496
{
+ − 497
my $res = eval { $callbacks->{'Handler'}->processing_instruction(@_) };
+ − 498
if ($@) {
+ − 499
die $@;
+ − 500
}
+ − 501
else {
+ − 502
# I think there's a buggette here...
+ − 503
# if the first call throws an exception, we don't set it up right.
+ − 504
# Not fatal, but we might want to address it.
+ − 505
my $handler = $callbacks->{'Handler'};
+ − 506
$self->{Methods}->{'processing_instruction'} = sub { $handler->processing_instruction(@_) };
+ − 507
}
+ − 508
return $res;
+ − 509
}
+ − 510
else {
+ − 511
$self->{Methods}->{'processing_instruction'} = sub { };
+ − 512
}
+ − 513
}
+ − 514
+ − 515
}
+ − 516
+ − 517
sub start_prefix_mapping {
+ − 518
my $self = shift;
+ − 519
if (defined $self->{Methods}->{'start_prefix_mapping'}) {
+ − 520
$self->{Methods}->{'start_prefix_mapping'}->(@_);
+ − 521
}
+ − 522
else {
+ − 523
my $method;
+ − 524
my $callbacks;
+ − 525
if (exists $self->{ParseOptions}) {
+ − 526
$callbacks = $self->{ParseOptions};
+ − 527
}
+ − 528
else {
+ − 529
$callbacks = $self;
+ − 530
}
+ − 531
if (0) { # dummy to make elsif's below compile
+ − 532
}
+ − 533
elsif (defined $callbacks->{'ContentHandler'} and $method = $callbacks->{'ContentHandler'}->can('start_prefix_mapping') ) {
+ − 534
my $handler = $callbacks->{'ContentHandler'};
+ − 535
$self->{Methods}->{'start_prefix_mapping'} = sub { $method->($handler, @_) };
+ − 536
return $method->($handler, @_);
+ − 537
}
+ − 538
elsif (defined $callbacks->{'Handler'} and $method = $callbacks->{'Handler'}->can('start_prefix_mapping') ) {
+ − 539
my $handler = $callbacks->{'Handler'};
+ − 540
$self->{Methods}->{'start_prefix_mapping'} = sub { $method->($handler, @_) };
+ − 541
return $method->($handler, @_);
+ − 542
}
+ − 543
elsif (defined $callbacks->{'ContentHandler'}
+ − 544
and $callbacks->{'ContentHandler'}->can('AUTOLOAD')
+ − 545
and $callbacks->{'ContentHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 546
)
+ − 547
{
+ − 548
my $res = eval { $callbacks->{'ContentHandler'}->start_prefix_mapping(@_) };
+ − 549
if ($@) {
+ − 550
die $@;
+ − 551
}
+ − 552
else {
+ − 553
# I think there's a buggette here...
+ − 554
# if the first call throws an exception, we don't set it up right.
+ − 555
# Not fatal, but we might want to address it.
+ − 556
my $handler = $callbacks->{'ContentHandler'};
+ − 557
$self->{Methods}->{'start_prefix_mapping'} = sub { $handler->start_prefix_mapping(@_) };
+ − 558
}
+ − 559
return $res;
+ − 560
}
+ − 561
elsif (defined $callbacks->{'Handler'}
+ − 562
and $callbacks->{'Handler'}->can('AUTOLOAD')
+ − 563
and $callbacks->{'Handler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 564
)
+ − 565
{
+ − 566
my $res = eval { $callbacks->{'Handler'}->start_prefix_mapping(@_) };
+ − 567
if ($@) {
+ − 568
die $@;
+ − 569
}
+ − 570
else {
+ − 571
# I think there's a buggette here...
+ − 572
# if the first call throws an exception, we don't set it up right.
+ − 573
# Not fatal, but we might want to address it.
+ − 574
my $handler = $callbacks->{'Handler'};
+ − 575
$self->{Methods}->{'start_prefix_mapping'} = sub { $handler->start_prefix_mapping(@_) };
+ − 576
}
+ − 577
return $res;
+ − 578
}
+ − 579
else {
+ − 580
$self->{Methods}->{'start_prefix_mapping'} = sub { };
+ − 581
}
+ − 582
}
+ − 583
+ − 584
}
+ − 585
+ − 586
sub entity_reference {
+ − 587
my $self = shift;
+ − 588
if (defined $self->{Methods}->{'entity_reference'}) {
+ − 589
$self->{Methods}->{'entity_reference'}->(@_);
+ − 590
}
+ − 591
else {
+ − 592
my $method;
+ − 593
my $callbacks;
+ − 594
if (exists $self->{ParseOptions}) {
+ − 595
$callbacks = $self->{ParseOptions};
+ − 596
}
+ − 597
else {
+ − 598
$callbacks = $self;
+ − 599
}
+ − 600
if (0) { # dummy to make elsif's below compile
+ − 601
}
+ − 602
elsif (defined $callbacks->{'DocumentHandler'} and $method = $callbacks->{'DocumentHandler'}->can('entity_reference') ) {
+ − 603
my $handler = $callbacks->{'DocumentHandler'};
+ − 604
$self->{Methods}->{'entity_reference'} = sub { $method->($handler, @_) };
+ − 605
return $method->($handler, @_);
+ − 606
}
+ − 607
elsif (defined $callbacks->{'Handler'} and $method = $callbacks->{'Handler'}->can('entity_reference') ) {
+ − 608
my $handler = $callbacks->{'Handler'};
+ − 609
$self->{Methods}->{'entity_reference'} = sub { $method->($handler, @_) };
+ − 610
return $method->($handler, @_);
+ − 611
}
+ − 612
elsif (defined $callbacks->{'DocumentHandler'}
+ − 613
and $callbacks->{'DocumentHandler'}->can('AUTOLOAD')
+ − 614
and $callbacks->{'DocumentHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 615
)
+ − 616
{
+ − 617
my $res = eval { $callbacks->{'DocumentHandler'}->entity_reference(@_) };
+ − 618
if ($@) {
+ − 619
die $@;
+ − 620
}
+ − 621
else {
+ − 622
# I think there's a buggette here...
+ − 623
# if the first call throws an exception, we don't set it up right.
+ − 624
# Not fatal, but we might want to address it.
+ − 625
my $handler = $callbacks->{'DocumentHandler'};
+ − 626
$self->{Methods}->{'entity_reference'} = sub { $handler->entity_reference(@_) };
+ − 627
}
+ − 628
return $res;
+ − 629
}
+ − 630
elsif (defined $callbacks->{'Handler'}
+ − 631
and $callbacks->{'Handler'}->can('AUTOLOAD')
+ − 632
and $callbacks->{'Handler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 633
)
+ − 634
{
+ − 635
my $res = eval { $callbacks->{'Handler'}->entity_reference(@_) };
+ − 636
if ($@) {
+ − 637
die $@;
+ − 638
}
+ − 639
else {
+ − 640
# I think there's a buggette here...
+ − 641
# if the first call throws an exception, we don't set it up right.
+ − 642
# Not fatal, but we might want to address it.
+ − 643
my $handler = $callbacks->{'Handler'};
+ − 644
$self->{Methods}->{'entity_reference'} = sub { $handler->entity_reference(@_) };
+ − 645
}
+ − 646
return $res;
+ − 647
}
+ − 648
else {
+ − 649
$self->{Methods}->{'entity_reference'} = sub { };
+ − 650
}
+ − 651
}
+ − 652
+ − 653
}
+ − 654
+ − 655
sub attlist_decl {
+ − 656
my $self = shift;
+ − 657
if (defined $self->{Methods}->{'attlist_decl'}) {
+ − 658
$self->{Methods}->{'attlist_decl'}->(@_);
+ − 659
}
+ − 660
else {
+ − 661
my $method;
+ − 662
my $callbacks;
+ − 663
if (exists $self->{ParseOptions}) {
+ − 664
$callbacks = $self->{ParseOptions};
+ − 665
}
+ − 666
else {
+ − 667
$callbacks = $self;
+ − 668
}
+ − 669
if (0) { # dummy to make elsif's below compile
+ − 670
}
+ − 671
elsif (defined $callbacks->{'DTDHandler'} and $method = $callbacks->{'DTDHandler'}->can('attlist_decl') ) {
+ − 672
my $handler = $callbacks->{'DTDHandler'};
+ − 673
$self->{Methods}->{'attlist_decl'} = sub { $method->($handler, @_) };
+ − 674
return $method->($handler, @_);
+ − 675
}
+ − 676
elsif (defined $callbacks->{'Handler'} and $method = $callbacks->{'Handler'}->can('attlist_decl') ) {
+ − 677
my $handler = $callbacks->{'Handler'};
+ − 678
$self->{Methods}->{'attlist_decl'} = sub { $method->($handler, @_) };
+ − 679
return $method->($handler, @_);
+ − 680
}
+ − 681
elsif (defined $callbacks->{'DTDHandler'}
+ − 682
and $callbacks->{'DTDHandler'}->can('AUTOLOAD')
+ − 683
and $callbacks->{'DTDHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 684
)
+ − 685
{
+ − 686
my $res = eval { $callbacks->{'DTDHandler'}->attlist_decl(@_) };
+ − 687
if ($@) {
+ − 688
die $@;
+ − 689
}
+ − 690
else {
+ − 691
# I think there's a buggette here...
+ − 692
# if the first call throws an exception, we don't set it up right.
+ − 693
# Not fatal, but we might want to address it.
+ − 694
my $handler = $callbacks->{'DTDHandler'};
+ − 695
$self->{Methods}->{'attlist_decl'} = sub { $handler->attlist_decl(@_) };
+ − 696
}
+ − 697
return $res;
+ − 698
}
+ − 699
elsif (defined $callbacks->{'Handler'}
+ − 700
and $callbacks->{'Handler'}->can('AUTOLOAD')
+ − 701
and $callbacks->{'Handler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 702
)
+ − 703
{
+ − 704
my $res = eval { $callbacks->{'Handler'}->attlist_decl(@_) };
+ − 705
if ($@) {
+ − 706
die $@;
+ − 707
}
+ − 708
else {
+ − 709
# I think there's a buggette here...
+ − 710
# if the first call throws an exception, we don't set it up right.
+ − 711
# Not fatal, but we might want to address it.
+ − 712
my $handler = $callbacks->{'Handler'};
+ − 713
$self->{Methods}->{'attlist_decl'} = sub { $handler->attlist_decl(@_) };
+ − 714
}
+ − 715
return $res;
+ − 716
}
+ − 717
else {
+ − 718
$self->{Methods}->{'attlist_decl'} = sub { };
+ − 719
}
+ − 720
}
+ − 721
+ − 722
}
+ − 723
+ − 724
sub error {
+ − 725
my $self = shift;
+ − 726
if (defined $self->{Methods}->{'error'}) {
+ − 727
$self->{Methods}->{'error'}->(@_);
+ − 728
}
+ − 729
else {
+ − 730
my $method;
+ − 731
my $callbacks;
+ − 732
if (exists $self->{ParseOptions}) {
+ − 733
$callbacks = $self->{ParseOptions};
+ − 734
}
+ − 735
else {
+ − 736
$callbacks = $self;
+ − 737
}
+ − 738
if (0) { # dummy to make elsif's below compile
+ − 739
}
+ − 740
elsif (defined $callbacks->{'ErrorHandler'} and $method = $callbacks->{'ErrorHandler'}->can('error') ) {
+ − 741
my $handler = $callbacks->{'ErrorHandler'};
+ − 742
$self->{Methods}->{'error'} = sub { $method->($handler, @_) };
+ − 743
return $method->($handler, @_);
+ − 744
}
+ − 745
elsif (defined $callbacks->{'Handler'} and $method = $callbacks->{'Handler'}->can('error') ) {
+ − 746
my $handler = $callbacks->{'Handler'};
+ − 747
$self->{Methods}->{'error'} = sub { $method->($handler, @_) };
+ − 748
return $method->($handler, @_);
+ − 749
}
+ − 750
elsif (defined $callbacks->{'ErrorHandler'}
+ − 751
and $callbacks->{'ErrorHandler'}->can('AUTOLOAD')
+ − 752
and $callbacks->{'ErrorHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 753
)
+ − 754
{
+ − 755
my $res = eval { $callbacks->{'ErrorHandler'}->error(@_) };
+ − 756
if ($@) {
+ − 757
die $@;
+ − 758
}
+ − 759
else {
+ − 760
# I think there's a buggette here...
+ − 761
# if the first call throws an exception, we don't set it up right.
+ − 762
# Not fatal, but we might want to address it.
+ − 763
my $handler = $callbacks->{'ErrorHandler'};
+ − 764
$self->{Methods}->{'error'} = sub { $handler->error(@_) };
+ − 765
}
+ − 766
return $res;
+ − 767
}
+ − 768
elsif (defined $callbacks->{'Handler'}
+ − 769
and $callbacks->{'Handler'}->can('AUTOLOAD')
+ − 770
and $callbacks->{'Handler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 771
)
+ − 772
{
+ − 773
my $res = eval { $callbacks->{'Handler'}->error(@_) };
+ − 774
if ($@) {
+ − 775
die $@;
+ − 776
}
+ − 777
else {
+ − 778
# I think there's a buggette here...
+ − 779
# if the first call throws an exception, we don't set it up right.
+ − 780
# Not fatal, but we might want to address it.
+ − 781
my $handler = $callbacks->{'Handler'};
+ − 782
$self->{Methods}->{'error'} = sub { $handler->error(@_) };
+ − 783
}
+ − 784
return $res;
+ − 785
}
+ − 786
else {
+ − 787
$self->{Methods}->{'error'} = sub { };
+ − 788
}
+ − 789
}
+ − 790
+ − 791
}
+ − 792
+ − 793
sub unparsed_entity_decl {
+ − 794
my $self = shift;
+ − 795
if (defined $self->{Methods}->{'unparsed_entity_decl'}) {
+ − 796
$self->{Methods}->{'unparsed_entity_decl'}->(@_);
+ − 797
}
+ − 798
else {
+ − 799
my $method;
+ − 800
my $callbacks;
+ − 801
if (exists $self->{ParseOptions}) {
+ − 802
$callbacks = $self->{ParseOptions};
+ − 803
}
+ − 804
else {
+ − 805
$callbacks = $self;
+ − 806
}
+ − 807
if (0) { # dummy to make elsif's below compile
+ − 808
}
+ − 809
elsif (defined $callbacks->{'DTDHandler'} and $method = $callbacks->{'DTDHandler'}->can('unparsed_entity_decl') ) {
+ − 810
my $handler = $callbacks->{'DTDHandler'};
+ − 811
$self->{Methods}->{'unparsed_entity_decl'} = sub { $method->($handler, @_) };
+ − 812
return $method->($handler, @_);
+ − 813
}
+ − 814
elsif (defined $callbacks->{'Handler'} and $method = $callbacks->{'Handler'}->can('unparsed_entity_decl') ) {
+ − 815
my $handler = $callbacks->{'Handler'};
+ − 816
$self->{Methods}->{'unparsed_entity_decl'} = sub { $method->($handler, @_) };
+ − 817
return $method->($handler, @_);
+ − 818
}
+ − 819
elsif (defined $callbacks->{'DTDHandler'}
+ − 820
and $callbacks->{'DTDHandler'}->can('AUTOLOAD')
+ − 821
and $callbacks->{'DTDHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 822
)
+ − 823
{
+ − 824
my $res = eval { $callbacks->{'DTDHandler'}->unparsed_entity_decl(@_) };
+ − 825
if ($@) {
+ − 826
die $@;
+ − 827
}
+ − 828
else {
+ − 829
# I think there's a buggette here...
+ − 830
# if the first call throws an exception, we don't set it up right.
+ − 831
# Not fatal, but we might want to address it.
+ − 832
my $handler = $callbacks->{'DTDHandler'};
+ − 833
$self->{Methods}->{'unparsed_entity_decl'} = sub { $handler->unparsed_entity_decl(@_) };
+ − 834
}
+ − 835
return $res;
+ − 836
}
+ − 837
elsif (defined $callbacks->{'Handler'}
+ − 838
and $callbacks->{'Handler'}->can('AUTOLOAD')
+ − 839
and $callbacks->{'Handler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 840
)
+ − 841
{
+ − 842
my $res = eval { $callbacks->{'Handler'}->unparsed_entity_decl(@_) };
+ − 843
if ($@) {
+ − 844
die $@;
+ − 845
}
+ − 846
else {
+ − 847
# I think there's a buggette here...
+ − 848
# if the first call throws an exception, we don't set it up right.
+ − 849
# Not fatal, but we might want to address it.
+ − 850
my $handler = $callbacks->{'Handler'};
+ − 851
$self->{Methods}->{'unparsed_entity_decl'} = sub { $handler->unparsed_entity_decl(@_) };
+ − 852
}
+ − 853
return $res;
+ − 854
}
+ − 855
else {
+ − 856
$self->{Methods}->{'unparsed_entity_decl'} = sub { };
+ − 857
}
+ − 858
}
+ − 859
+ − 860
}
+ − 861
+ − 862
sub end_entity {
+ − 863
my $self = shift;
+ − 864
if (defined $self->{Methods}->{'end_entity'}) {
+ − 865
$self->{Methods}->{'end_entity'}->(@_);
+ − 866
}
+ − 867
else {
+ − 868
my $method;
+ − 869
my $callbacks;
+ − 870
if (exists $self->{ParseOptions}) {
+ − 871
$callbacks = $self->{ParseOptions};
+ − 872
}
+ − 873
else {
+ − 874
$callbacks = $self;
+ − 875
}
+ − 876
if (0) { # dummy to make elsif's below compile
+ − 877
}
+ − 878
elsif (defined $callbacks->{'LexicalHandler'} and $method = $callbacks->{'LexicalHandler'}->can('end_entity') ) {
+ − 879
my $handler = $callbacks->{'LexicalHandler'};
+ − 880
$self->{Methods}->{'end_entity'} = sub { $method->($handler, @_) };
+ − 881
return $method->($handler, @_);
+ − 882
}
+ − 883
elsif (defined $callbacks->{'Handler'} and $method = $callbacks->{'Handler'}->can('end_entity') ) {
+ − 884
my $handler = $callbacks->{'Handler'};
+ − 885
$self->{Methods}->{'end_entity'} = sub { $method->($handler, @_) };
+ − 886
return $method->($handler, @_);
+ − 887
}
+ − 888
elsif (defined $callbacks->{'LexicalHandler'}
+ − 889
and $callbacks->{'LexicalHandler'}->can('AUTOLOAD')
+ − 890
and $callbacks->{'LexicalHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 891
)
+ − 892
{
+ − 893
my $res = eval { $callbacks->{'LexicalHandler'}->end_entity(@_) };
+ − 894
if ($@) {
+ − 895
die $@;
+ − 896
}
+ − 897
else {
+ − 898
# I think there's a buggette here...
+ − 899
# if the first call throws an exception, we don't set it up right.
+ − 900
# Not fatal, but we might want to address it.
+ − 901
my $handler = $callbacks->{'LexicalHandler'};
+ − 902
$self->{Methods}->{'end_entity'} = sub { $handler->end_entity(@_) };
+ − 903
}
+ − 904
return $res;
+ − 905
}
+ − 906
elsif (defined $callbacks->{'Handler'}
+ − 907
and $callbacks->{'Handler'}->can('AUTOLOAD')
+ − 908
and $callbacks->{'Handler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 909
)
+ − 910
{
+ − 911
my $res = eval { $callbacks->{'Handler'}->end_entity(@_) };
+ − 912
if ($@) {
+ − 913
die $@;
+ − 914
}
+ − 915
else {
+ − 916
# I think there's a buggette here...
+ − 917
# if the first call throws an exception, we don't set it up right.
+ − 918
# Not fatal, but we might want to address it.
+ − 919
my $handler = $callbacks->{'Handler'};
+ − 920
$self->{Methods}->{'end_entity'} = sub { $handler->end_entity(@_) };
+ − 921
}
+ − 922
return $res;
+ − 923
}
+ − 924
else {
+ − 925
$self->{Methods}->{'end_entity'} = sub { };
+ − 926
}
+ − 927
}
+ − 928
+ − 929
}
+ − 930
+ − 931
sub end_element {
+ − 932
my $self = shift;
+ − 933
if (defined $self->{Methods}->{'end_element'}) {
+ − 934
$self->{Methods}->{'end_element'}->(@_);
+ − 935
}
+ − 936
else {
+ − 937
my $method;
+ − 938
my $callbacks;
+ − 939
if (exists $self->{ParseOptions}) {
+ − 940
$callbacks = $self->{ParseOptions};
+ − 941
}
+ − 942
else {
+ − 943
$callbacks = $self;
+ − 944
}
+ − 945
if (0) { # dummy to make elsif's below compile
+ − 946
}
+ − 947
elsif (defined $callbacks->{'ContentHandler'} and $method = $callbacks->{'ContentHandler'}->can('end_element') ) {
+ − 948
my $handler = $callbacks->{'ContentHandler'};
+ − 949
$self->{Methods}->{'end_element'} = sub { $method->($handler, @_) };
+ − 950
return $method->($handler, @_);
+ − 951
}
+ − 952
elsif (defined $callbacks->{'DocumentHandler'} and $method = $callbacks->{'DocumentHandler'}->can('end_element') ) {
+ − 953
my $handler = $callbacks->{'DocumentHandler'};
+ − 954
$self->{Methods}->{'end_element'} = sub { $method->($handler, @_) };
+ − 955
return $method->($handler, @_);
+ − 956
}
+ − 957
elsif (defined $callbacks->{'Handler'} and $method = $callbacks->{'Handler'}->can('end_element') ) {
+ − 958
my $handler = $callbacks->{'Handler'};
+ − 959
$self->{Methods}->{'end_element'} = sub { $method->($handler, @_) };
+ − 960
return $method->($handler, @_);
+ − 961
}
+ − 962
elsif (defined $callbacks->{'ContentHandler'}
+ − 963
and $callbacks->{'ContentHandler'}->can('AUTOLOAD')
+ − 964
and $callbacks->{'ContentHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 965
)
+ − 966
{
+ − 967
my $res = eval { $callbacks->{'ContentHandler'}->end_element(@_) };
+ − 968
if ($@) {
+ − 969
die $@;
+ − 970
}
+ − 971
else {
+ − 972
# I think there's a buggette here...
+ − 973
# if the first call throws an exception, we don't set it up right.
+ − 974
# Not fatal, but we might want to address it.
+ − 975
my $handler = $callbacks->{'ContentHandler'};
+ − 976
$self->{Methods}->{'end_element'} = sub { $handler->end_element(@_) };
+ − 977
}
+ − 978
return $res;
+ − 979
}
+ − 980
elsif (defined $callbacks->{'DocumentHandler'}
+ − 981
and $callbacks->{'DocumentHandler'}->can('AUTOLOAD')
+ − 982
and $callbacks->{'DocumentHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 983
)
+ − 984
{
+ − 985
my $res = eval { $callbacks->{'DocumentHandler'}->end_element(@_) };
+ − 986
if ($@) {
+ − 987
die $@;
+ − 988
}
+ − 989
else {
+ − 990
# I think there's a buggette here...
+ − 991
# if the first call throws an exception, we don't set it up right.
+ − 992
# Not fatal, but we might want to address it.
+ − 993
my $handler = $callbacks->{'DocumentHandler'};
+ − 994
$self->{Methods}->{'end_element'} = sub { $handler->end_element(@_) };
+ − 995
}
+ − 996
return $res;
+ − 997
}
+ − 998
elsif (defined $callbacks->{'Handler'}
+ − 999
and $callbacks->{'Handler'}->can('AUTOLOAD')
+ − 1000
and $callbacks->{'Handler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 1001
)
+ − 1002
{
+ − 1003
my $res = eval { $callbacks->{'Handler'}->end_element(@_) };
+ − 1004
if ($@) {
+ − 1005
die $@;
+ − 1006
}
+ − 1007
else {
+ − 1008
# I think there's a buggette here...
+ − 1009
# if the first call throws an exception, we don't set it up right.
+ − 1010
# Not fatal, but we might want to address it.
+ − 1011
my $handler = $callbacks->{'Handler'};
+ − 1012
$self->{Methods}->{'end_element'} = sub { $handler->end_element(@_) };
+ − 1013
}
+ − 1014
return $res;
+ − 1015
}
+ − 1016
else {
+ − 1017
$self->{Methods}->{'end_element'} = sub { };
+ − 1018
}
+ − 1019
}
+ − 1020
+ − 1021
}
+ − 1022
+ − 1023
sub comment {
+ − 1024
my $self = shift;
+ − 1025
if (defined $self->{Methods}->{'comment'}) {
+ − 1026
$self->{Methods}->{'comment'}->(@_);
+ − 1027
}
+ − 1028
else {
+ − 1029
my $method;
+ − 1030
my $callbacks;
+ − 1031
if (exists $self->{ParseOptions}) {
+ − 1032
$callbacks = $self->{ParseOptions};
+ − 1033
}
+ − 1034
else {
+ − 1035
$callbacks = $self;
+ − 1036
}
+ − 1037
if (0) { # dummy to make elsif's below compile
+ − 1038
}
+ − 1039
elsif (defined $callbacks->{'DocumentHandler'} and $method = $callbacks->{'DocumentHandler'}->can('comment') ) {
+ − 1040
my $handler = $callbacks->{'DocumentHandler'};
+ − 1041
$self->{Methods}->{'comment'} = sub { $method->($handler, @_) };
+ − 1042
return $method->($handler, @_);
+ − 1043
}
+ − 1044
elsif (defined $callbacks->{'LexicalHandler'} and $method = $callbacks->{'LexicalHandler'}->can('comment') ) {
+ − 1045
my $handler = $callbacks->{'LexicalHandler'};
+ − 1046
$self->{Methods}->{'comment'} = sub { $method->($handler, @_) };
+ − 1047
return $method->($handler, @_);
+ − 1048
}
+ − 1049
elsif (defined $callbacks->{'Handler'} and $method = $callbacks->{'Handler'}->can('comment') ) {
+ − 1050
my $handler = $callbacks->{'Handler'};
+ − 1051
$self->{Methods}->{'comment'} = sub { $method->($handler, @_) };
+ − 1052
return $method->($handler, @_);
+ − 1053
}
+ − 1054
elsif (defined $callbacks->{'DocumentHandler'}
+ − 1055
and $callbacks->{'DocumentHandler'}->can('AUTOLOAD')
+ − 1056
and $callbacks->{'DocumentHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 1057
)
+ − 1058
{
+ − 1059
my $res = eval { $callbacks->{'DocumentHandler'}->comment(@_) };
+ − 1060
if ($@) {
+ − 1061
die $@;
+ − 1062
}
+ − 1063
else {
+ − 1064
# I think there's a buggette here...
+ − 1065
# if the first call throws an exception, we don't set it up right.
+ − 1066
# Not fatal, but we might want to address it.
+ − 1067
my $handler = $callbacks->{'DocumentHandler'};
+ − 1068
$self->{Methods}->{'comment'} = sub { $handler->comment(@_) };
+ − 1069
}
+ − 1070
return $res;
+ − 1071
}
+ − 1072
elsif (defined $callbacks->{'LexicalHandler'}
+ − 1073
and $callbacks->{'LexicalHandler'}->can('AUTOLOAD')
+ − 1074
and $callbacks->{'LexicalHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 1075
)
+ − 1076
{
+ − 1077
my $res = eval { $callbacks->{'LexicalHandler'}->comment(@_) };
+ − 1078
if ($@) {
+ − 1079
die $@;
+ − 1080
}
+ − 1081
else {
+ − 1082
# I think there's a buggette here...
+ − 1083
# if the first call throws an exception, we don't set it up right.
+ − 1084
# Not fatal, but we might want to address it.
+ − 1085
my $handler = $callbacks->{'LexicalHandler'};
+ − 1086
$self->{Methods}->{'comment'} = sub { $handler->comment(@_) };
+ − 1087
}
+ − 1088
return $res;
+ − 1089
}
+ − 1090
elsif (defined $callbacks->{'Handler'}
+ − 1091
and $callbacks->{'Handler'}->can('AUTOLOAD')
+ − 1092
and $callbacks->{'Handler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 1093
)
+ − 1094
{
+ − 1095
my $res = eval { $callbacks->{'Handler'}->comment(@_) };
+ − 1096
if ($@) {
+ − 1097
die $@;
+ − 1098
}
+ − 1099
else {
+ − 1100
# I think there's a buggette here...
+ − 1101
# if the first call throws an exception, we don't set it up right.
+ − 1102
# Not fatal, but we might want to address it.
+ − 1103
my $handler = $callbacks->{'Handler'};
+ − 1104
$self->{Methods}->{'comment'} = sub { $handler->comment(@_) };
+ − 1105
}
+ − 1106
return $res;
+ − 1107
}
+ − 1108
else {
+ − 1109
$self->{Methods}->{'comment'} = sub { };
+ − 1110
}
+ − 1111
}
+ − 1112
+ − 1113
}
+ − 1114
+ − 1115
sub element_decl {
+ − 1116
my $self = shift;
+ − 1117
if (defined $self->{Methods}->{'element_decl'}) {
+ − 1118
$self->{Methods}->{'element_decl'}->(@_);
+ − 1119
}
+ − 1120
else {
+ − 1121
my $method;
+ − 1122
my $callbacks;
+ − 1123
if (exists $self->{ParseOptions}) {
+ − 1124
$callbacks = $self->{ParseOptions};
+ − 1125
}
+ − 1126
else {
+ − 1127
$callbacks = $self;
+ − 1128
}
+ − 1129
if (0) { # dummy to make elsif's below compile
+ − 1130
}
+ − 1131
elsif (defined $callbacks->{'DeclHandler'} and $method = $callbacks->{'DeclHandler'}->can('element_decl') ) {
+ − 1132
my $handler = $callbacks->{'DeclHandler'};
+ − 1133
$self->{Methods}->{'element_decl'} = sub { $method->($handler, @_) };
+ − 1134
return $method->($handler, @_);
+ − 1135
}
+ − 1136
elsif (defined $callbacks->{'Handler'} and $method = $callbacks->{'Handler'}->can('element_decl') ) {
+ − 1137
my $handler = $callbacks->{'Handler'};
+ − 1138
$self->{Methods}->{'element_decl'} = sub { $method->($handler, @_) };
+ − 1139
return $method->($handler, @_);
+ − 1140
}
+ − 1141
elsif (defined $callbacks->{'DeclHandler'}
+ − 1142
and $callbacks->{'DeclHandler'}->can('AUTOLOAD')
+ − 1143
and $callbacks->{'DeclHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 1144
)
+ − 1145
{
+ − 1146
my $res = eval { $callbacks->{'DeclHandler'}->element_decl(@_) };
+ − 1147
if ($@) {
+ − 1148
die $@;
+ − 1149
}
+ − 1150
else {
+ − 1151
# I think there's a buggette here...
+ − 1152
# if the first call throws an exception, we don't set it up right.
+ − 1153
# Not fatal, but we might want to address it.
+ − 1154
my $handler = $callbacks->{'DeclHandler'};
+ − 1155
$self->{Methods}->{'element_decl'} = sub { $handler->element_decl(@_) };
+ − 1156
}
+ − 1157
return $res;
+ − 1158
}
+ − 1159
elsif (defined $callbacks->{'Handler'}
+ − 1160
and $callbacks->{'Handler'}->can('AUTOLOAD')
+ − 1161
and $callbacks->{'Handler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 1162
)
+ − 1163
{
+ − 1164
my $res = eval { $callbacks->{'Handler'}->element_decl(@_) };
+ − 1165
if ($@) {
+ − 1166
die $@;
+ − 1167
}
+ − 1168
else {
+ − 1169
# I think there's a buggette here...
+ − 1170
# if the first call throws an exception, we don't set it up right.
+ − 1171
# Not fatal, but we might want to address it.
+ − 1172
my $handler = $callbacks->{'Handler'};
+ − 1173
$self->{Methods}->{'element_decl'} = sub { $handler->element_decl(@_) };
+ − 1174
}
+ − 1175
return $res;
+ − 1176
}
+ − 1177
else {
+ − 1178
$self->{Methods}->{'element_decl'} = sub { };
+ − 1179
}
+ − 1180
}
+ − 1181
+ − 1182
}
+ − 1183
+ − 1184
sub attribute_decl {
+ − 1185
my $self = shift;
+ − 1186
if (defined $self->{Methods}->{'attribute_decl'}) {
+ − 1187
$self->{Methods}->{'attribute_decl'}->(@_);
+ − 1188
}
+ − 1189
else {
+ − 1190
my $method;
+ − 1191
my $callbacks;
+ − 1192
if (exists $self->{ParseOptions}) {
+ − 1193
$callbacks = $self->{ParseOptions};
+ − 1194
}
+ − 1195
else {
+ − 1196
$callbacks = $self;
+ − 1197
}
+ − 1198
if (0) { # dummy to make elsif's below compile
+ − 1199
}
+ − 1200
elsif (defined $callbacks->{'DeclHandler'} and $method = $callbacks->{'DeclHandler'}->can('attribute_decl') ) {
+ − 1201
my $handler = $callbacks->{'DeclHandler'};
+ − 1202
$self->{Methods}->{'attribute_decl'} = sub { $method->($handler, @_) };
+ − 1203
return $method->($handler, @_);
+ − 1204
}
+ − 1205
elsif (defined $callbacks->{'Handler'} and $method = $callbacks->{'Handler'}->can('attribute_decl') ) {
+ − 1206
my $handler = $callbacks->{'Handler'};
+ − 1207
$self->{Methods}->{'attribute_decl'} = sub { $method->($handler, @_) };
+ − 1208
return $method->($handler, @_);
+ − 1209
}
+ − 1210
elsif (defined $callbacks->{'DeclHandler'}
+ − 1211
and $callbacks->{'DeclHandler'}->can('AUTOLOAD')
+ − 1212
and $callbacks->{'DeclHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 1213
)
+ − 1214
{
+ − 1215
my $res = eval { $callbacks->{'DeclHandler'}->attribute_decl(@_) };
+ − 1216
if ($@) {
+ − 1217
die $@;
+ − 1218
}
+ − 1219
else {
+ − 1220
# I think there's a buggette here...
+ − 1221
# if the first call throws an exception, we don't set it up right.
+ − 1222
# Not fatal, but we might want to address it.
+ − 1223
my $handler = $callbacks->{'DeclHandler'};
+ − 1224
$self->{Methods}->{'attribute_decl'} = sub { $handler->attribute_decl(@_) };
+ − 1225
}
+ − 1226
return $res;
+ − 1227
}
+ − 1228
elsif (defined $callbacks->{'Handler'}
+ − 1229
and $callbacks->{'Handler'}->can('AUTOLOAD')
+ − 1230
and $callbacks->{'Handler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 1231
)
+ − 1232
{
+ − 1233
my $res = eval { $callbacks->{'Handler'}->attribute_decl(@_) };
+ − 1234
if ($@) {
+ − 1235
die $@;
+ − 1236
}
+ − 1237
else {
+ − 1238
# I think there's a buggette here...
+ − 1239
# if the first call throws an exception, we don't set it up right.
+ − 1240
# Not fatal, but we might want to address it.
+ − 1241
my $handler = $callbacks->{'Handler'};
+ − 1242
$self->{Methods}->{'attribute_decl'} = sub { $handler->attribute_decl(@_) };
+ − 1243
}
+ − 1244
return $res;
+ − 1245
}
+ − 1246
else {
+ − 1247
$self->{Methods}->{'attribute_decl'} = sub { };
+ − 1248
}
+ − 1249
}
+ − 1250
+ − 1251
}
+ − 1252
+ − 1253
sub fatal_error {
+ − 1254
my $self = shift;
+ − 1255
if (defined $self->{Methods}->{'fatal_error'}) {
+ − 1256
$self->{Methods}->{'fatal_error'}->(@_);
+ − 1257
}
+ − 1258
else {
+ − 1259
my $method;
+ − 1260
my $callbacks;
+ − 1261
if (exists $self->{ParseOptions}) {
+ − 1262
$callbacks = $self->{ParseOptions};
+ − 1263
}
+ − 1264
else {
+ − 1265
$callbacks = $self;
+ − 1266
}
+ − 1267
if (0) { # dummy to make elsif's below compile
+ − 1268
}
+ − 1269
elsif (defined $callbacks->{'ErrorHandler'} and $method = $callbacks->{'ErrorHandler'}->can('fatal_error') ) {
+ − 1270
my $handler = $callbacks->{'ErrorHandler'};
+ − 1271
$self->{Methods}->{'fatal_error'} = sub { $method->($handler, @_) };
+ − 1272
return $method->($handler, @_);
+ − 1273
}
+ − 1274
elsif (defined $callbacks->{'Handler'} and $method = $callbacks->{'Handler'}->can('fatal_error') ) {
+ − 1275
my $handler = $callbacks->{'Handler'};
+ − 1276
$self->{Methods}->{'fatal_error'} = sub { $method->($handler, @_) };
+ − 1277
return $method->($handler, @_);
+ − 1278
}
+ − 1279
elsif (defined $callbacks->{'ErrorHandler'}
+ − 1280
and $callbacks->{'ErrorHandler'}->can('AUTOLOAD')
+ − 1281
and $callbacks->{'ErrorHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 1282
)
+ − 1283
{
+ − 1284
my $res = eval { $callbacks->{'ErrorHandler'}->fatal_error(@_) };
+ − 1285
if ($@) {
+ − 1286
die $@;
+ − 1287
}
+ − 1288
else {
+ − 1289
# I think there's a buggette here...
+ − 1290
# if the first call throws an exception, we don't set it up right.
+ − 1291
# Not fatal, but we might want to address it.
+ − 1292
my $handler = $callbacks->{'ErrorHandler'};
+ − 1293
$self->{Methods}->{'fatal_error'} = sub { $handler->fatal_error(@_) };
+ − 1294
}
+ − 1295
return $res;
+ − 1296
}
+ − 1297
elsif (defined $callbacks->{'Handler'}
+ − 1298
and $callbacks->{'Handler'}->can('AUTOLOAD')
+ − 1299
and $callbacks->{'Handler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 1300
)
+ − 1301
{
+ − 1302
my $res = eval { $callbacks->{'Handler'}->fatal_error(@_) };
+ − 1303
if ($@) {
+ − 1304
die $@;
+ − 1305
}
+ − 1306
else {
+ − 1307
# I think there's a buggette here...
+ − 1308
# if the first call throws an exception, we don't set it up right.
+ − 1309
# Not fatal, but we might want to address it.
+ − 1310
my $handler = $callbacks->{'Handler'};
+ − 1311
$self->{Methods}->{'fatal_error'} = sub { $handler->fatal_error(@_) };
+ − 1312
}
+ − 1313
return $res;
+ − 1314
}
+ − 1315
else {
+ − 1316
$self->{Methods}->{'fatal_error'} = sub { };
+ − 1317
}
+ − 1318
}
+ − 1319
+ − 1320
}
+ − 1321
+ − 1322
sub start_document {
+ − 1323
my $self = shift;
+ − 1324
if (defined $self->{Methods}->{'start_document'}) {
+ − 1325
$self->{Methods}->{'start_document'}->(@_);
+ − 1326
}
+ − 1327
else {
+ − 1328
my $method;
+ − 1329
my $callbacks;
+ − 1330
if (exists $self->{ParseOptions}) {
+ − 1331
$callbacks = $self->{ParseOptions};
+ − 1332
}
+ − 1333
else {
+ − 1334
$callbacks = $self;
+ − 1335
}
+ − 1336
if (0) { # dummy to make elsif's below compile
+ − 1337
}
+ − 1338
elsif (defined $callbacks->{'ContentHandler'} and $method = $callbacks->{'ContentHandler'}->can('start_document') ) {
+ − 1339
my $handler = $callbacks->{'ContentHandler'};
+ − 1340
$self->{Methods}->{'start_document'} = sub { $method->($handler, @_) };
+ − 1341
return $method->($handler, @_);
+ − 1342
}
+ − 1343
elsif (defined $callbacks->{'DocumentHandler'} and $method = $callbacks->{'DocumentHandler'}->can('start_document') ) {
+ − 1344
my $handler = $callbacks->{'DocumentHandler'};
+ − 1345
$self->{Methods}->{'start_document'} = sub { $method->($handler, @_) };
+ − 1346
return $method->($handler, @_);
+ − 1347
}
+ − 1348
elsif (defined $callbacks->{'Handler'} and $method = $callbacks->{'Handler'}->can('start_document') ) {
+ − 1349
my $handler = $callbacks->{'Handler'};
+ − 1350
$self->{Methods}->{'start_document'} = sub { $method->($handler, @_) };
+ − 1351
return $method->($handler, @_);
+ − 1352
}
+ − 1353
elsif (defined $callbacks->{'ContentHandler'}
+ − 1354
and $callbacks->{'ContentHandler'}->can('AUTOLOAD')
+ − 1355
and $callbacks->{'ContentHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 1356
)
+ − 1357
{
+ − 1358
my $res = eval { $callbacks->{'ContentHandler'}->start_document(@_) };
+ − 1359
if ($@) {
+ − 1360
die $@;
+ − 1361
}
+ − 1362
else {
+ − 1363
# I think there's a buggette here...
+ − 1364
# if the first call throws an exception, we don't set it up right.
+ − 1365
# Not fatal, but we might want to address it.
+ − 1366
my $handler = $callbacks->{'ContentHandler'};
+ − 1367
$self->{Methods}->{'start_document'} = sub { $handler->start_document(@_) };
+ − 1368
}
+ − 1369
return $res;
+ − 1370
}
+ − 1371
elsif (defined $callbacks->{'DocumentHandler'}
+ − 1372
and $callbacks->{'DocumentHandler'}->can('AUTOLOAD')
+ − 1373
and $callbacks->{'DocumentHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 1374
)
+ − 1375
{
+ − 1376
my $res = eval { $callbacks->{'DocumentHandler'}->start_document(@_) };
+ − 1377
if ($@) {
+ − 1378
die $@;
+ − 1379
}
+ − 1380
else {
+ − 1381
# I think there's a buggette here...
+ − 1382
# if the first call throws an exception, we don't set it up right.
+ − 1383
# Not fatal, but we might want to address it.
+ − 1384
my $handler = $callbacks->{'DocumentHandler'};
+ − 1385
$self->{Methods}->{'start_document'} = sub { $handler->start_document(@_) };
+ − 1386
}
+ − 1387
return $res;
+ − 1388
}
+ − 1389
elsif (defined $callbacks->{'Handler'}
+ − 1390
and $callbacks->{'Handler'}->can('AUTOLOAD')
+ − 1391
and $callbacks->{'Handler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 1392
)
+ − 1393
{
+ − 1394
my $res = eval { $callbacks->{'Handler'}->start_document(@_) };
+ − 1395
if ($@) {
+ − 1396
die $@;
+ − 1397
}
+ − 1398
else {
+ − 1399
# I think there's a buggette here...
+ − 1400
# if the first call throws an exception, we don't set it up right.
+ − 1401
# Not fatal, but we might want to address it.
+ − 1402
my $handler = $callbacks->{'Handler'};
+ − 1403
$self->{Methods}->{'start_document'} = sub { $handler->start_document(@_) };
+ − 1404
}
+ − 1405
return $res;
+ − 1406
}
+ − 1407
else {
+ − 1408
$self->{Methods}->{'start_document'} = sub { };
+ − 1409
}
+ − 1410
}
+ − 1411
+ − 1412
}
+ − 1413
+ − 1414
sub external_entity_decl {
+ − 1415
my $self = shift;
+ − 1416
if (defined $self->{Methods}->{'external_entity_decl'}) {
+ − 1417
$self->{Methods}->{'external_entity_decl'}->(@_);
+ − 1418
}
+ − 1419
else {
+ − 1420
my $method;
+ − 1421
my $callbacks;
+ − 1422
if (exists $self->{ParseOptions}) {
+ − 1423
$callbacks = $self->{ParseOptions};
+ − 1424
}
+ − 1425
else {
+ − 1426
$callbacks = $self;
+ − 1427
}
+ − 1428
if (0) { # dummy to make elsif's below compile
+ − 1429
}
+ − 1430
elsif (defined $callbacks->{'DeclHandler'} and $method = $callbacks->{'DeclHandler'}->can('external_entity_decl') ) {
+ − 1431
my $handler = $callbacks->{'DeclHandler'};
+ − 1432
$self->{Methods}->{'external_entity_decl'} = sub { $method->($handler, @_) };
+ − 1433
return $method->($handler, @_);
+ − 1434
}
+ − 1435
elsif (defined $callbacks->{'Handler'} and $method = $callbacks->{'Handler'}->can('external_entity_decl') ) {
+ − 1436
my $handler = $callbacks->{'Handler'};
+ − 1437
$self->{Methods}->{'external_entity_decl'} = sub { $method->($handler, @_) };
+ − 1438
return $method->($handler, @_);
+ − 1439
}
+ − 1440
elsif (defined $callbacks->{'DeclHandler'}
+ − 1441
and $callbacks->{'DeclHandler'}->can('AUTOLOAD')
+ − 1442
and $callbacks->{'DeclHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 1443
)
+ − 1444
{
+ − 1445
my $res = eval { $callbacks->{'DeclHandler'}->external_entity_decl(@_) };
+ − 1446
if ($@) {
+ − 1447
die $@;
+ − 1448
}
+ − 1449
else {
+ − 1450
# I think there's a buggette here...
+ − 1451
# if the first call throws an exception, we don't set it up right.
+ − 1452
# Not fatal, but we might want to address it.
+ − 1453
my $handler = $callbacks->{'DeclHandler'};
+ − 1454
$self->{Methods}->{'external_entity_decl'} = sub { $handler->external_entity_decl(@_) };
+ − 1455
}
+ − 1456
return $res;
+ − 1457
}
+ − 1458
elsif (defined $callbacks->{'Handler'}
+ − 1459
and $callbacks->{'Handler'}->can('AUTOLOAD')
+ − 1460
and $callbacks->{'Handler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 1461
)
+ − 1462
{
+ − 1463
my $res = eval { $callbacks->{'Handler'}->external_entity_decl(@_) };
+ − 1464
if ($@) {
+ − 1465
die $@;
+ − 1466
}
+ − 1467
else {
+ − 1468
# I think there's a buggette here...
+ − 1469
# if the first call throws an exception, we don't set it up right.
+ − 1470
# Not fatal, but we might want to address it.
+ − 1471
my $handler = $callbacks->{'Handler'};
+ − 1472
$self->{Methods}->{'external_entity_decl'} = sub { $handler->external_entity_decl(@_) };
+ − 1473
}
+ − 1474
return $res;
+ − 1475
}
+ − 1476
else {
+ − 1477
$self->{Methods}->{'external_entity_decl'} = sub { };
+ − 1478
}
+ − 1479
}
+ − 1480
+ − 1481
}
+ − 1482
+ − 1483
sub warning {
+ − 1484
my $self = shift;
+ − 1485
if (defined $self->{Methods}->{'warning'}) {
+ − 1486
$self->{Methods}->{'warning'}->(@_);
+ − 1487
}
+ − 1488
else {
+ − 1489
my $method;
+ − 1490
my $callbacks;
+ − 1491
if (exists $self->{ParseOptions}) {
+ − 1492
$callbacks = $self->{ParseOptions};
+ − 1493
}
+ − 1494
else {
+ − 1495
$callbacks = $self;
+ − 1496
}
+ − 1497
if (0) { # dummy to make elsif's below compile
+ − 1498
}
+ − 1499
elsif (defined $callbacks->{'ErrorHandler'} and $method = $callbacks->{'ErrorHandler'}->can('warning') ) {
+ − 1500
my $handler = $callbacks->{'ErrorHandler'};
+ − 1501
$self->{Methods}->{'warning'} = sub { $method->($handler, @_) };
+ − 1502
return $method->($handler, @_);
+ − 1503
}
+ − 1504
elsif (defined $callbacks->{'Handler'} and $method = $callbacks->{'Handler'}->can('warning') ) {
+ − 1505
my $handler = $callbacks->{'Handler'};
+ − 1506
$self->{Methods}->{'warning'} = sub { $method->($handler, @_) };
+ − 1507
return $method->($handler, @_);
+ − 1508
}
+ − 1509
elsif (defined $callbacks->{'ErrorHandler'}
+ − 1510
and $callbacks->{'ErrorHandler'}->can('AUTOLOAD')
+ − 1511
and $callbacks->{'ErrorHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 1512
)
+ − 1513
{
+ − 1514
my $res = eval { $callbacks->{'ErrorHandler'}->warning(@_) };
+ − 1515
if ($@) {
+ − 1516
die $@;
+ − 1517
}
+ − 1518
else {
+ − 1519
# I think there's a buggette here...
+ − 1520
# if the first call throws an exception, we don't set it up right.
+ − 1521
# Not fatal, but we might want to address it.
+ − 1522
my $handler = $callbacks->{'ErrorHandler'};
+ − 1523
$self->{Methods}->{'warning'} = sub { $handler->warning(@_) };
+ − 1524
}
+ − 1525
return $res;
+ − 1526
}
+ − 1527
elsif (defined $callbacks->{'Handler'}
+ − 1528
and $callbacks->{'Handler'}->can('AUTOLOAD')
+ − 1529
and $callbacks->{'Handler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 1530
)
+ − 1531
{
+ − 1532
my $res = eval { $callbacks->{'Handler'}->warning(@_) };
+ − 1533
if ($@) {
+ − 1534
die $@;
+ − 1535
}
+ − 1536
else {
+ − 1537
# I think there's a buggette here...
+ − 1538
# if the first call throws an exception, we don't set it up right.
+ − 1539
# Not fatal, but we might want to address it.
+ − 1540
my $handler = $callbacks->{'Handler'};
+ − 1541
$self->{Methods}->{'warning'} = sub { $handler->warning(@_) };
+ − 1542
}
+ − 1543
return $res;
+ − 1544
}
+ − 1545
else {
+ − 1546
$self->{Methods}->{'warning'} = sub { };
+ − 1547
}
+ − 1548
}
+ − 1549
+ − 1550
}
+ − 1551
+ − 1552
sub doctype_decl {
+ − 1553
my $self = shift;
+ − 1554
if (defined $self->{Methods}->{'doctype_decl'}) {
+ − 1555
$self->{Methods}->{'doctype_decl'}->(@_);
+ − 1556
}
+ − 1557
else {
+ − 1558
my $method;
+ − 1559
my $callbacks;
+ − 1560
if (exists $self->{ParseOptions}) {
+ − 1561
$callbacks = $self->{ParseOptions};
+ − 1562
}
+ − 1563
else {
+ − 1564
$callbacks = $self;
+ − 1565
}
+ − 1566
if (0) { # dummy to make elsif's below compile
+ − 1567
}
+ − 1568
elsif (defined $callbacks->{'DTDHandler'} and $method = $callbacks->{'DTDHandler'}->can('doctype_decl') ) {
+ − 1569
my $handler = $callbacks->{'DTDHandler'};
+ − 1570
$self->{Methods}->{'doctype_decl'} = sub { $method->($handler, @_) };
+ − 1571
return $method->($handler, @_);
+ − 1572
}
+ − 1573
elsif (defined $callbacks->{'Handler'} and $method = $callbacks->{'Handler'}->can('doctype_decl') ) {
+ − 1574
my $handler = $callbacks->{'Handler'};
+ − 1575
$self->{Methods}->{'doctype_decl'} = sub { $method->($handler, @_) };
+ − 1576
return $method->($handler, @_);
+ − 1577
}
+ − 1578
elsif (defined $callbacks->{'DTDHandler'}
+ − 1579
and $callbacks->{'DTDHandler'}->can('AUTOLOAD')
+ − 1580
and $callbacks->{'DTDHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 1581
)
+ − 1582
{
+ − 1583
my $res = eval { $callbacks->{'DTDHandler'}->doctype_decl(@_) };
+ − 1584
if ($@) {
+ − 1585
die $@;
+ − 1586
}
+ − 1587
else {
+ − 1588
# I think there's a buggette here...
+ − 1589
# if the first call throws an exception, we don't set it up right.
+ − 1590
# Not fatal, but we might want to address it.
+ − 1591
my $handler = $callbacks->{'DTDHandler'};
+ − 1592
$self->{Methods}->{'doctype_decl'} = sub { $handler->doctype_decl(@_) };
+ − 1593
}
+ − 1594
return $res;
+ − 1595
}
+ − 1596
elsif (defined $callbacks->{'Handler'}
+ − 1597
and $callbacks->{'Handler'}->can('AUTOLOAD')
+ − 1598
and $callbacks->{'Handler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 1599
)
+ − 1600
{
+ − 1601
my $res = eval { $callbacks->{'Handler'}->doctype_decl(@_) };
+ − 1602
if ($@) {
+ − 1603
die $@;
+ − 1604
}
+ − 1605
else {
+ − 1606
# I think there's a buggette here...
+ − 1607
# if the first call throws an exception, we don't set it up right.
+ − 1608
# Not fatal, but we might want to address it.
+ − 1609
my $handler = $callbacks->{'Handler'};
+ − 1610
$self->{Methods}->{'doctype_decl'} = sub { $handler->doctype_decl(@_) };
+ − 1611
}
+ − 1612
return $res;
+ − 1613
}
+ − 1614
else {
+ − 1615
$self->{Methods}->{'doctype_decl'} = sub { };
+ − 1616
}
+ − 1617
}
+ − 1618
+ − 1619
}
+ − 1620
+ − 1621
sub entity_decl {
+ − 1622
my $self = shift;
+ − 1623
if (defined $self->{Methods}->{'entity_decl'}) {
+ − 1624
$self->{Methods}->{'entity_decl'}->(@_);
+ − 1625
}
+ − 1626
else {
+ − 1627
my $method;
+ − 1628
my $callbacks;
+ − 1629
if (exists $self->{ParseOptions}) {
+ − 1630
$callbacks = $self->{ParseOptions};
+ − 1631
}
+ − 1632
else {
+ − 1633
$callbacks = $self;
+ − 1634
}
+ − 1635
if (0) { # dummy to make elsif's below compile
+ − 1636
}
+ − 1637
elsif (defined $callbacks->{'DTDHandler'} and $method = $callbacks->{'DTDHandler'}->can('entity_decl') ) {
+ − 1638
my $handler = $callbacks->{'DTDHandler'};
+ − 1639
$self->{Methods}->{'entity_decl'} = sub { $method->($handler, @_) };
+ − 1640
return $method->($handler, @_);
+ − 1641
}
+ − 1642
elsif (defined $callbacks->{'Handler'} and $method = $callbacks->{'Handler'}->can('entity_decl') ) {
+ − 1643
my $handler = $callbacks->{'Handler'};
+ − 1644
$self->{Methods}->{'entity_decl'} = sub { $method->($handler, @_) };
+ − 1645
return $method->($handler, @_);
+ − 1646
}
+ − 1647
elsif (defined $callbacks->{'DTDHandler'}
+ − 1648
and $callbacks->{'DTDHandler'}->can('AUTOLOAD')
+ − 1649
and $callbacks->{'DTDHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 1650
)
+ − 1651
{
+ − 1652
my $res = eval { $callbacks->{'DTDHandler'}->entity_decl(@_) };
+ − 1653
if ($@) {
+ − 1654
die $@;
+ − 1655
}
+ − 1656
else {
+ − 1657
# I think there's a buggette here...
+ − 1658
# if the first call throws an exception, we don't set it up right.
+ − 1659
# Not fatal, but we might want to address it.
+ − 1660
my $handler = $callbacks->{'DTDHandler'};
+ − 1661
$self->{Methods}->{'entity_decl'} = sub { $handler->entity_decl(@_) };
+ − 1662
}
+ − 1663
return $res;
+ − 1664
}
+ − 1665
elsif (defined $callbacks->{'Handler'}
+ − 1666
and $callbacks->{'Handler'}->can('AUTOLOAD')
+ − 1667
and $callbacks->{'Handler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 1668
)
+ − 1669
{
+ − 1670
my $res = eval { $callbacks->{'Handler'}->entity_decl(@_) };
+ − 1671
if ($@) {
+ − 1672
die $@;
+ − 1673
}
+ − 1674
else {
+ − 1675
# I think there's a buggette here...
+ − 1676
# if the first call throws an exception, we don't set it up right.
+ − 1677
# Not fatal, but we might want to address it.
+ − 1678
my $handler = $callbacks->{'Handler'};
+ − 1679
$self->{Methods}->{'entity_decl'} = sub { $handler->entity_decl(@_) };
+ − 1680
}
+ − 1681
return $res;
+ − 1682
}
+ − 1683
else {
+ − 1684
$self->{Methods}->{'entity_decl'} = sub { };
+ − 1685
}
+ − 1686
}
+ − 1687
+ − 1688
}
+ − 1689
+ − 1690
sub end_document {
+ − 1691
my $self = shift;
+ − 1692
if (defined $self->{Methods}->{'end_document'}) {
+ − 1693
$self->{Methods}->{'end_document'}->(@_);
+ − 1694
}
+ − 1695
else {
+ − 1696
my $method;
+ − 1697
my $callbacks;
+ − 1698
if (exists $self->{ParseOptions}) {
+ − 1699
$callbacks = $self->{ParseOptions};
+ − 1700
}
+ − 1701
else {
+ − 1702
$callbacks = $self;
+ − 1703
}
+ − 1704
if (0) { # dummy to make elsif's below compile
+ − 1705
}
+ − 1706
elsif (defined $callbacks->{'ContentHandler'} and $method = $callbacks->{'ContentHandler'}->can('end_document') ) {
+ − 1707
my $handler = $callbacks->{'ContentHandler'};
+ − 1708
$self->{Methods}->{'end_document'} = sub { $method->($handler, @_) };
+ − 1709
return $method->($handler, @_);
+ − 1710
}
+ − 1711
elsif (defined $callbacks->{'DocumentHandler'} and $method = $callbacks->{'DocumentHandler'}->can('end_document') ) {
+ − 1712
my $handler = $callbacks->{'DocumentHandler'};
+ − 1713
$self->{Methods}->{'end_document'} = sub { $method->($handler, @_) };
+ − 1714
return $method->($handler, @_);
+ − 1715
}
+ − 1716
elsif (defined $callbacks->{'Handler'} and $method = $callbacks->{'Handler'}->can('end_document') ) {
+ − 1717
my $handler = $callbacks->{'Handler'};
+ − 1718
$self->{Methods}->{'end_document'} = sub { $method->($handler, @_) };
+ − 1719
return $method->($handler, @_);
+ − 1720
}
+ − 1721
elsif (defined $callbacks->{'ContentHandler'}
+ − 1722
and $callbacks->{'ContentHandler'}->can('AUTOLOAD')
+ − 1723
and $callbacks->{'ContentHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 1724
)
+ − 1725
{
+ − 1726
my $res = eval { $callbacks->{'ContentHandler'}->end_document(@_) };
+ − 1727
if ($@) {
+ − 1728
die $@;
+ − 1729
}
+ − 1730
else {
+ − 1731
# I think there's a buggette here...
+ − 1732
# if the first call throws an exception, we don't set it up right.
+ − 1733
# Not fatal, but we might want to address it.
+ − 1734
my $handler = $callbacks->{'ContentHandler'};
+ − 1735
$self->{Methods}->{'end_document'} = sub { $handler->end_document(@_) };
+ − 1736
}
+ − 1737
return $res;
+ − 1738
}
+ − 1739
elsif (defined $callbacks->{'DocumentHandler'}
+ − 1740
and $callbacks->{'DocumentHandler'}->can('AUTOLOAD')
+ − 1741
and $callbacks->{'DocumentHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 1742
)
+ − 1743
{
+ − 1744
my $res = eval { $callbacks->{'DocumentHandler'}->end_document(@_) };
+ − 1745
if ($@) {
+ − 1746
die $@;
+ − 1747
}
+ − 1748
else {
+ − 1749
# I think there's a buggette here...
+ − 1750
# if the first call throws an exception, we don't set it up right.
+ − 1751
# Not fatal, but we might want to address it.
+ − 1752
my $handler = $callbacks->{'DocumentHandler'};
+ − 1753
$self->{Methods}->{'end_document'} = sub { $handler->end_document(@_) };
+ − 1754
}
+ − 1755
return $res;
+ − 1756
}
+ − 1757
elsif (defined $callbacks->{'Handler'}
+ − 1758
and $callbacks->{'Handler'}->can('AUTOLOAD')
+ − 1759
and $callbacks->{'Handler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 1760
)
+ − 1761
{
+ − 1762
my $res = eval { $callbacks->{'Handler'}->end_document(@_) };
+ − 1763
if ($@) {
+ − 1764
die $@;
+ − 1765
}
+ − 1766
else {
+ − 1767
# I think there's a buggette here...
+ − 1768
# if the first call throws an exception, we don't set it up right.
+ − 1769
# Not fatal, but we might want to address it.
+ − 1770
my $handler = $callbacks->{'Handler'};
+ − 1771
$self->{Methods}->{'end_document'} = sub { $handler->end_document(@_) };
+ − 1772
}
+ − 1773
return $res;
+ − 1774
}
+ − 1775
else {
+ − 1776
$self->{Methods}->{'end_document'} = sub { };
+ − 1777
}
+ − 1778
}
+ − 1779
+ − 1780
}
+ − 1781
+ − 1782
sub start_element {
+ − 1783
my $self = shift;
+ − 1784
if (defined $self->{Methods}->{'start_element'}) {
+ − 1785
$self->{Methods}->{'start_element'}->(@_);
+ − 1786
}
+ − 1787
else {
+ − 1788
my $method;
+ − 1789
my $callbacks;
+ − 1790
if (exists $self->{ParseOptions}) {
+ − 1791
$callbacks = $self->{ParseOptions};
+ − 1792
}
+ − 1793
else {
+ − 1794
$callbacks = $self;
+ − 1795
}
+ − 1796
if (0) { # dummy to make elsif's below compile
+ − 1797
}
+ − 1798
elsif (defined $callbacks->{'ContentHandler'} and $method = $callbacks->{'ContentHandler'}->can('start_element') ) {
+ − 1799
my $handler = $callbacks->{'ContentHandler'};
+ − 1800
$self->{Methods}->{'start_element'} = sub { $method->($handler, @_) };
+ − 1801
return $method->($handler, @_);
+ − 1802
}
+ − 1803
elsif (defined $callbacks->{'DocumentHandler'} and $method = $callbacks->{'DocumentHandler'}->can('start_element') ) {
+ − 1804
my $handler = $callbacks->{'DocumentHandler'};
+ − 1805
$self->{Methods}->{'start_element'} = sub { $method->($handler, @_) };
+ − 1806
return $method->($handler, @_);
+ − 1807
}
+ − 1808
elsif (defined $callbacks->{'Handler'} and $method = $callbacks->{'Handler'}->can('start_element') ) {
+ − 1809
my $handler = $callbacks->{'Handler'};
+ − 1810
$self->{Methods}->{'start_element'} = sub { $method->($handler, @_) };
+ − 1811
return $method->($handler, @_);
+ − 1812
}
+ − 1813
elsif (defined $callbacks->{'ContentHandler'}
+ − 1814
and $callbacks->{'ContentHandler'}->can('AUTOLOAD')
+ − 1815
and $callbacks->{'ContentHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 1816
)
+ − 1817
{
+ − 1818
my $res = eval { $callbacks->{'ContentHandler'}->start_element(@_) };
+ − 1819
if ($@) {
+ − 1820
die $@;
+ − 1821
}
+ − 1822
else {
+ − 1823
# I think there's a buggette here...
+ − 1824
# if the first call throws an exception, we don't set it up right.
+ − 1825
# Not fatal, but we might want to address it.
+ − 1826
my $handler = $callbacks->{'ContentHandler'};
+ − 1827
$self->{Methods}->{'start_element'} = sub { $handler->start_element(@_) };
+ − 1828
}
+ − 1829
return $res;
+ − 1830
}
+ − 1831
elsif (defined $callbacks->{'DocumentHandler'}
+ − 1832
and $callbacks->{'DocumentHandler'}->can('AUTOLOAD')
+ − 1833
and $callbacks->{'DocumentHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 1834
)
+ − 1835
{
+ − 1836
my $res = eval { $callbacks->{'DocumentHandler'}->start_element(@_) };
+ − 1837
if ($@) {
+ − 1838
die $@;
+ − 1839
}
+ − 1840
else {
+ − 1841
# I think there's a buggette here...
+ − 1842
# if the first call throws an exception, we don't set it up right.
+ − 1843
# Not fatal, but we might want to address it.
+ − 1844
my $handler = $callbacks->{'DocumentHandler'};
+ − 1845
$self->{Methods}->{'start_element'} = sub { $handler->start_element(@_) };
+ − 1846
}
+ − 1847
return $res;
+ − 1848
}
+ − 1849
elsif (defined $callbacks->{'Handler'}
+ − 1850
and $callbacks->{'Handler'}->can('AUTOLOAD')
+ − 1851
and $callbacks->{'Handler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 1852
)
+ − 1853
{
+ − 1854
my $res = eval { $callbacks->{'Handler'}->start_element(@_) };
+ − 1855
if ($@) {
+ − 1856
die $@;
+ − 1857
}
+ − 1858
else {
+ − 1859
# I think there's a buggette here...
+ − 1860
# if the first call throws an exception, we don't set it up right.
+ − 1861
# Not fatal, but we might want to address it.
+ − 1862
my $handler = $callbacks->{'Handler'};
+ − 1863
$self->{Methods}->{'start_element'} = sub { $handler->start_element(@_) };
+ − 1864
}
+ − 1865
return $res;
+ − 1866
}
+ − 1867
else {
+ − 1868
$self->{Methods}->{'start_element'} = sub { };
+ − 1869
}
+ − 1870
}
+ − 1871
+ − 1872
}
+ − 1873
+ − 1874
sub start_dtd {
+ − 1875
my $self = shift;
+ − 1876
if (defined $self->{Methods}->{'start_dtd'}) {
+ − 1877
$self->{Methods}->{'start_dtd'}->(@_);
+ − 1878
}
+ − 1879
else {
+ − 1880
my $method;
+ − 1881
my $callbacks;
+ − 1882
if (exists $self->{ParseOptions}) {
+ − 1883
$callbacks = $self->{ParseOptions};
+ − 1884
}
+ − 1885
else {
+ − 1886
$callbacks = $self;
+ − 1887
}
+ − 1888
if (0) { # dummy to make elsif's below compile
+ − 1889
}
+ − 1890
elsif (defined $callbacks->{'LexicalHandler'} and $method = $callbacks->{'LexicalHandler'}->can('start_dtd') ) {
+ − 1891
my $handler = $callbacks->{'LexicalHandler'};
+ − 1892
$self->{Methods}->{'start_dtd'} = sub { $method->($handler, @_) };
+ − 1893
return $method->($handler, @_);
+ − 1894
}
+ − 1895
elsif (defined $callbacks->{'Handler'} and $method = $callbacks->{'Handler'}->can('start_dtd') ) {
+ − 1896
my $handler = $callbacks->{'Handler'};
+ − 1897
$self->{Methods}->{'start_dtd'} = sub { $method->($handler, @_) };
+ − 1898
return $method->($handler, @_);
+ − 1899
}
+ − 1900
elsif (defined $callbacks->{'LexicalHandler'}
+ − 1901
and $callbacks->{'LexicalHandler'}->can('AUTOLOAD')
+ − 1902
and $callbacks->{'LexicalHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 1903
)
+ − 1904
{
+ − 1905
my $res = eval { $callbacks->{'LexicalHandler'}->start_dtd(@_) };
+ − 1906
if ($@) {
+ − 1907
die $@;
+ − 1908
}
+ − 1909
else {
+ − 1910
# I think there's a buggette here...
+ − 1911
# if the first call throws an exception, we don't set it up right.
+ − 1912
# Not fatal, but we might want to address it.
+ − 1913
my $handler = $callbacks->{'LexicalHandler'};
+ − 1914
$self->{Methods}->{'start_dtd'} = sub { $handler->start_dtd(@_) };
+ − 1915
}
+ − 1916
return $res;
+ − 1917
}
+ − 1918
elsif (defined $callbacks->{'Handler'}
+ − 1919
and $callbacks->{'Handler'}->can('AUTOLOAD')
+ − 1920
and $callbacks->{'Handler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 1921
)
+ − 1922
{
+ − 1923
my $res = eval { $callbacks->{'Handler'}->start_dtd(@_) };
+ − 1924
if ($@) {
+ − 1925
die $@;
+ − 1926
}
+ − 1927
else {
+ − 1928
# I think there's a buggette here...
+ − 1929
# if the first call throws an exception, we don't set it up right.
+ − 1930
# Not fatal, but we might want to address it.
+ − 1931
my $handler = $callbacks->{'Handler'};
+ − 1932
$self->{Methods}->{'start_dtd'} = sub { $handler->start_dtd(@_) };
+ − 1933
}
+ − 1934
return $res;
+ − 1935
}
+ − 1936
else {
+ − 1937
$self->{Methods}->{'start_dtd'} = sub { };
+ − 1938
}
+ − 1939
}
+ − 1940
+ − 1941
}
+ − 1942
+ − 1943
sub end_prefix_mapping {
+ − 1944
my $self = shift;
+ − 1945
if (defined $self->{Methods}->{'end_prefix_mapping'}) {
+ − 1946
$self->{Methods}->{'end_prefix_mapping'}->(@_);
+ − 1947
}
+ − 1948
else {
+ − 1949
my $method;
+ − 1950
my $callbacks;
+ − 1951
if (exists $self->{ParseOptions}) {
+ − 1952
$callbacks = $self->{ParseOptions};
+ − 1953
}
+ − 1954
else {
+ − 1955
$callbacks = $self;
+ − 1956
}
+ − 1957
if (0) { # dummy to make elsif's below compile
+ − 1958
}
+ − 1959
elsif (defined $callbacks->{'ContentHandler'} and $method = $callbacks->{'ContentHandler'}->can('end_prefix_mapping') ) {
+ − 1960
my $handler = $callbacks->{'ContentHandler'};
+ − 1961
$self->{Methods}->{'end_prefix_mapping'} = sub { $method->($handler, @_) };
+ − 1962
return $method->($handler, @_);
+ − 1963
}
+ − 1964
elsif (defined $callbacks->{'Handler'} and $method = $callbacks->{'Handler'}->can('end_prefix_mapping') ) {
+ − 1965
my $handler = $callbacks->{'Handler'};
+ − 1966
$self->{Methods}->{'end_prefix_mapping'} = sub { $method->($handler, @_) };
+ − 1967
return $method->($handler, @_);
+ − 1968
}
+ − 1969
elsif (defined $callbacks->{'ContentHandler'}
+ − 1970
and $callbacks->{'ContentHandler'}->can('AUTOLOAD')
+ − 1971
and $callbacks->{'ContentHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 1972
)
+ − 1973
{
+ − 1974
my $res = eval { $callbacks->{'ContentHandler'}->end_prefix_mapping(@_) };
+ − 1975
if ($@) {
+ − 1976
die $@;
+ − 1977
}
+ − 1978
else {
+ − 1979
# I think there's a buggette here...
+ − 1980
# if the first call throws an exception, we don't set it up right.
+ − 1981
# Not fatal, but we might want to address it.
+ − 1982
my $handler = $callbacks->{'ContentHandler'};
+ − 1983
$self->{Methods}->{'end_prefix_mapping'} = sub { $handler->end_prefix_mapping(@_) };
+ − 1984
}
+ − 1985
return $res;
+ − 1986
}
+ − 1987
elsif (defined $callbacks->{'Handler'}
+ − 1988
and $callbacks->{'Handler'}->can('AUTOLOAD')
+ − 1989
and $callbacks->{'Handler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 1990
)
+ − 1991
{
+ − 1992
my $res = eval { $callbacks->{'Handler'}->end_prefix_mapping(@_) };
+ − 1993
if ($@) {
+ − 1994
die $@;
+ − 1995
}
+ − 1996
else {
+ − 1997
# I think there's a buggette here...
+ − 1998
# if the first call throws an exception, we don't set it up right.
+ − 1999
# Not fatal, but we might want to address it.
+ − 2000
my $handler = $callbacks->{'Handler'};
+ − 2001
$self->{Methods}->{'end_prefix_mapping'} = sub { $handler->end_prefix_mapping(@_) };
+ − 2002
}
+ − 2003
return $res;
+ − 2004
}
+ − 2005
else {
+ − 2006
$self->{Methods}->{'end_prefix_mapping'} = sub { };
+ − 2007
}
+ − 2008
}
+ − 2009
+ − 2010
}
+ − 2011
+ − 2012
sub end_dtd {
+ − 2013
my $self = shift;
+ − 2014
if (defined $self->{Methods}->{'end_dtd'}) {
+ − 2015
$self->{Methods}->{'end_dtd'}->(@_);
+ − 2016
}
+ − 2017
else {
+ − 2018
my $method;
+ − 2019
my $callbacks;
+ − 2020
if (exists $self->{ParseOptions}) {
+ − 2021
$callbacks = $self->{ParseOptions};
+ − 2022
}
+ − 2023
else {
+ − 2024
$callbacks = $self;
+ − 2025
}
+ − 2026
if (0) { # dummy to make elsif's below compile
+ − 2027
}
+ − 2028
elsif (defined $callbacks->{'LexicalHandler'} and $method = $callbacks->{'LexicalHandler'}->can('end_dtd') ) {
+ − 2029
my $handler = $callbacks->{'LexicalHandler'};
+ − 2030
$self->{Methods}->{'end_dtd'} = sub { $method->($handler, @_) };
+ − 2031
return $method->($handler, @_);
+ − 2032
}
+ − 2033
elsif (defined $callbacks->{'Handler'} and $method = $callbacks->{'Handler'}->can('end_dtd') ) {
+ − 2034
my $handler = $callbacks->{'Handler'};
+ − 2035
$self->{Methods}->{'end_dtd'} = sub { $method->($handler, @_) };
+ − 2036
return $method->($handler, @_);
+ − 2037
}
+ − 2038
elsif (defined $callbacks->{'LexicalHandler'}
+ − 2039
and $callbacks->{'LexicalHandler'}->can('AUTOLOAD')
+ − 2040
and $callbacks->{'LexicalHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 2041
)
+ − 2042
{
+ − 2043
my $res = eval { $callbacks->{'LexicalHandler'}->end_dtd(@_) };
+ − 2044
if ($@) {
+ − 2045
die $@;
+ − 2046
}
+ − 2047
else {
+ − 2048
# I think there's a buggette here...
+ − 2049
# if the first call throws an exception, we don't set it up right.
+ − 2050
# Not fatal, but we might want to address it.
+ − 2051
my $handler = $callbacks->{'LexicalHandler'};
+ − 2052
$self->{Methods}->{'end_dtd'} = sub { $handler->end_dtd(@_) };
+ − 2053
}
+ − 2054
return $res;
+ − 2055
}
+ − 2056
elsif (defined $callbacks->{'Handler'}
+ − 2057
and $callbacks->{'Handler'}->can('AUTOLOAD')
+ − 2058
and $callbacks->{'Handler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 2059
)
+ − 2060
{
+ − 2061
my $res = eval { $callbacks->{'Handler'}->end_dtd(@_) };
+ − 2062
if ($@) {
+ − 2063
die $@;
+ − 2064
}
+ − 2065
else {
+ − 2066
# I think there's a buggette here...
+ − 2067
# if the first call throws an exception, we don't set it up right.
+ − 2068
# Not fatal, but we might want to address it.
+ − 2069
my $handler = $callbacks->{'Handler'};
+ − 2070
$self->{Methods}->{'end_dtd'} = sub { $handler->end_dtd(@_) };
+ − 2071
}
+ − 2072
return $res;
+ − 2073
}
+ − 2074
else {
+ − 2075
$self->{Methods}->{'end_dtd'} = sub { };
+ − 2076
}
+ − 2077
}
+ − 2078
+ − 2079
}
+ − 2080
+ − 2081
sub characters {
+ − 2082
my $self = shift;
+ − 2083
if (defined $self->{Methods}->{'characters'}) {
+ − 2084
$self->{Methods}->{'characters'}->(@_);
+ − 2085
}
+ − 2086
else {
+ − 2087
my $method;
+ − 2088
my $callbacks;
+ − 2089
if (exists $self->{ParseOptions}) {
+ − 2090
$callbacks = $self->{ParseOptions};
+ − 2091
}
+ − 2092
else {
+ − 2093
$callbacks = $self;
+ − 2094
}
+ − 2095
if (0) { # dummy to make elsif's below compile
+ − 2096
}
+ − 2097
elsif (defined $callbacks->{'ContentHandler'} and $method = $callbacks->{'ContentHandler'}->can('characters') ) {
+ − 2098
my $handler = $callbacks->{'ContentHandler'};
+ − 2099
$self->{Methods}->{'characters'} = sub { $method->($handler, @_) };
+ − 2100
return $method->($handler, @_);
+ − 2101
}
+ − 2102
elsif (defined $callbacks->{'DocumentHandler'} and $method = $callbacks->{'DocumentHandler'}->can('characters') ) {
+ − 2103
my $handler = $callbacks->{'DocumentHandler'};
+ − 2104
$self->{Methods}->{'characters'} = sub { $method->($handler, @_) };
+ − 2105
return $method->($handler, @_);
+ − 2106
}
+ − 2107
elsif (defined $callbacks->{'Handler'} and $method = $callbacks->{'Handler'}->can('characters') ) {
+ − 2108
my $handler = $callbacks->{'Handler'};
+ − 2109
$self->{Methods}->{'characters'} = sub { $method->($handler, @_) };
+ − 2110
return $method->($handler, @_);
+ − 2111
}
+ − 2112
elsif (defined $callbacks->{'ContentHandler'}
+ − 2113
and $callbacks->{'ContentHandler'}->can('AUTOLOAD')
+ − 2114
and $callbacks->{'ContentHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 2115
)
+ − 2116
{
+ − 2117
my $res = eval { $callbacks->{'ContentHandler'}->characters(@_) };
+ − 2118
if ($@) {
+ − 2119
die $@;
+ − 2120
}
+ − 2121
else {
+ − 2122
# I think there's a buggette here...
+ − 2123
# if the first call throws an exception, we don't set it up right.
+ − 2124
# Not fatal, but we might want to address it.
+ − 2125
my $handler = $callbacks->{'ContentHandler'};
+ − 2126
$self->{Methods}->{'characters'} = sub { $handler->characters(@_) };
+ − 2127
}
+ − 2128
return $res;
+ − 2129
}
+ − 2130
elsif (defined $callbacks->{'DocumentHandler'}
+ − 2131
and $callbacks->{'DocumentHandler'}->can('AUTOLOAD')
+ − 2132
and $callbacks->{'DocumentHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 2133
)
+ − 2134
{
+ − 2135
my $res = eval { $callbacks->{'DocumentHandler'}->characters(@_) };
+ − 2136
if ($@) {
+ − 2137
die $@;
+ − 2138
}
+ − 2139
else {
+ − 2140
# I think there's a buggette here...
+ − 2141
# if the first call throws an exception, we don't set it up right.
+ − 2142
# Not fatal, but we might want to address it.
+ − 2143
my $handler = $callbacks->{'DocumentHandler'};
+ − 2144
$self->{Methods}->{'characters'} = sub { $handler->characters(@_) };
+ − 2145
}
+ − 2146
return $res;
+ − 2147
}
+ − 2148
elsif (defined $callbacks->{'Handler'}
+ − 2149
and $callbacks->{'Handler'}->can('AUTOLOAD')
+ − 2150
and $callbacks->{'Handler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 2151
)
+ − 2152
{
+ − 2153
my $res = eval { $callbacks->{'Handler'}->characters(@_) };
+ − 2154
if ($@) {
+ − 2155
die $@;
+ − 2156
}
+ − 2157
else {
+ − 2158
# I think there's a buggette here...
+ − 2159
# if the first call throws an exception, we don't set it up right.
+ − 2160
# Not fatal, but we might want to address it.
+ − 2161
my $handler = $callbacks->{'Handler'};
+ − 2162
$self->{Methods}->{'characters'} = sub { $handler->characters(@_) };
+ − 2163
}
+ − 2164
return $res;
+ − 2165
}
+ − 2166
else {
+ − 2167
$self->{Methods}->{'characters'} = sub { };
+ − 2168
}
+ − 2169
}
+ − 2170
+ − 2171
}
+ − 2172
+ − 2173
sub end_cdata {
+ − 2174
my $self = shift;
+ − 2175
if (defined $self->{Methods}->{'end_cdata'}) {
+ − 2176
$self->{Methods}->{'end_cdata'}->(@_);
+ − 2177
}
+ − 2178
else {
+ − 2179
my $method;
+ − 2180
my $callbacks;
+ − 2181
if (exists $self->{ParseOptions}) {
+ − 2182
$callbacks = $self->{ParseOptions};
+ − 2183
}
+ − 2184
else {
+ − 2185
$callbacks = $self;
+ − 2186
}
+ − 2187
if (0) { # dummy to make elsif's below compile
+ − 2188
}
+ − 2189
elsif (defined $callbacks->{'DocumentHandler'} and $method = $callbacks->{'DocumentHandler'}->can('end_cdata') ) {
+ − 2190
my $handler = $callbacks->{'DocumentHandler'};
+ − 2191
$self->{Methods}->{'end_cdata'} = sub { $method->($handler, @_) };
+ − 2192
return $method->($handler, @_);
+ − 2193
}
+ − 2194
elsif (defined $callbacks->{'LexicalHandler'} and $method = $callbacks->{'LexicalHandler'}->can('end_cdata') ) {
+ − 2195
my $handler = $callbacks->{'LexicalHandler'};
+ − 2196
$self->{Methods}->{'end_cdata'} = sub { $method->($handler, @_) };
+ − 2197
return $method->($handler, @_);
+ − 2198
}
+ − 2199
elsif (defined $callbacks->{'Handler'} and $method = $callbacks->{'Handler'}->can('end_cdata') ) {
+ − 2200
my $handler = $callbacks->{'Handler'};
+ − 2201
$self->{Methods}->{'end_cdata'} = sub { $method->($handler, @_) };
+ − 2202
return $method->($handler, @_);
+ − 2203
}
+ − 2204
elsif (defined $callbacks->{'DocumentHandler'}
+ − 2205
and $callbacks->{'DocumentHandler'}->can('AUTOLOAD')
+ − 2206
and $callbacks->{'DocumentHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 2207
)
+ − 2208
{
+ − 2209
my $res = eval { $callbacks->{'DocumentHandler'}->end_cdata(@_) };
+ − 2210
if ($@) {
+ − 2211
die $@;
+ − 2212
}
+ − 2213
else {
+ − 2214
# I think there's a buggette here...
+ − 2215
# if the first call throws an exception, we don't set it up right.
+ − 2216
# Not fatal, but we might want to address it.
+ − 2217
my $handler = $callbacks->{'DocumentHandler'};
+ − 2218
$self->{Methods}->{'end_cdata'} = sub { $handler->end_cdata(@_) };
+ − 2219
}
+ − 2220
return $res;
+ − 2221
}
+ − 2222
elsif (defined $callbacks->{'LexicalHandler'}
+ − 2223
and $callbacks->{'LexicalHandler'}->can('AUTOLOAD')
+ − 2224
and $callbacks->{'LexicalHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 2225
)
+ − 2226
{
+ − 2227
my $res = eval { $callbacks->{'LexicalHandler'}->end_cdata(@_) };
+ − 2228
if ($@) {
+ − 2229
die $@;
+ − 2230
}
+ − 2231
else {
+ − 2232
# I think there's a buggette here...
+ − 2233
# if the first call throws an exception, we don't set it up right.
+ − 2234
# Not fatal, but we might want to address it.
+ − 2235
my $handler = $callbacks->{'LexicalHandler'};
+ − 2236
$self->{Methods}->{'end_cdata'} = sub { $handler->end_cdata(@_) };
+ − 2237
}
+ − 2238
return $res;
+ − 2239
}
+ − 2240
elsif (defined $callbacks->{'Handler'}
+ − 2241
and $callbacks->{'Handler'}->can('AUTOLOAD')
+ − 2242
and $callbacks->{'Handler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 2243
)
+ − 2244
{
+ − 2245
my $res = eval { $callbacks->{'Handler'}->end_cdata(@_) };
+ − 2246
if ($@) {
+ − 2247
die $@;
+ − 2248
}
+ − 2249
else {
+ − 2250
# I think there's a buggette here...
+ − 2251
# if the first call throws an exception, we don't set it up right.
+ − 2252
# Not fatal, but we might want to address it.
+ − 2253
my $handler = $callbacks->{'Handler'};
+ − 2254
$self->{Methods}->{'end_cdata'} = sub { $handler->end_cdata(@_) };
+ − 2255
}
+ − 2256
return $res;
+ − 2257
}
+ − 2258
else {
+ − 2259
$self->{Methods}->{'end_cdata'} = sub { };
+ − 2260
}
+ − 2261
}
+ − 2262
+ − 2263
}
+ − 2264
+ − 2265
sub skipped_entity {
+ − 2266
my $self = shift;
+ − 2267
if (defined $self->{Methods}->{'skipped_entity'}) {
+ − 2268
$self->{Methods}->{'skipped_entity'}->(@_);
+ − 2269
}
+ − 2270
else {
+ − 2271
my $method;
+ − 2272
my $callbacks;
+ − 2273
if (exists $self->{ParseOptions}) {
+ − 2274
$callbacks = $self->{ParseOptions};
+ − 2275
}
+ − 2276
else {
+ − 2277
$callbacks = $self;
+ − 2278
}
+ − 2279
if (0) { # dummy to make elsif's below compile
+ − 2280
}
+ − 2281
elsif (defined $callbacks->{'ContentHandler'} and $method = $callbacks->{'ContentHandler'}->can('skipped_entity') ) {
+ − 2282
my $handler = $callbacks->{'ContentHandler'};
+ − 2283
$self->{Methods}->{'skipped_entity'} = sub { $method->($handler, @_) };
+ − 2284
return $method->($handler, @_);
+ − 2285
}
+ − 2286
elsif (defined $callbacks->{'Handler'} and $method = $callbacks->{'Handler'}->can('skipped_entity') ) {
+ − 2287
my $handler = $callbacks->{'Handler'};
+ − 2288
$self->{Methods}->{'skipped_entity'} = sub { $method->($handler, @_) };
+ − 2289
return $method->($handler, @_);
+ − 2290
}
+ − 2291
elsif (defined $callbacks->{'ContentHandler'}
+ − 2292
and $callbacks->{'ContentHandler'}->can('AUTOLOAD')
+ − 2293
and $callbacks->{'ContentHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 2294
)
+ − 2295
{
+ − 2296
my $res = eval { $callbacks->{'ContentHandler'}->skipped_entity(@_) };
+ − 2297
if ($@) {
+ − 2298
die $@;
+ − 2299
}
+ − 2300
else {
+ − 2301
# I think there's a buggette here...
+ − 2302
# if the first call throws an exception, we don't set it up right.
+ − 2303
# Not fatal, but we might want to address it.
+ − 2304
my $handler = $callbacks->{'ContentHandler'};
+ − 2305
$self->{Methods}->{'skipped_entity'} = sub { $handler->skipped_entity(@_) };
+ − 2306
}
+ − 2307
return $res;
+ − 2308
}
+ − 2309
elsif (defined $callbacks->{'Handler'}
+ − 2310
and $callbacks->{'Handler'}->can('AUTOLOAD')
+ − 2311
and $callbacks->{'Handler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 2312
)
+ − 2313
{
+ − 2314
my $res = eval { $callbacks->{'Handler'}->skipped_entity(@_) };
+ − 2315
if ($@) {
+ − 2316
die $@;
+ − 2317
}
+ − 2318
else {
+ − 2319
# I think there's a buggette here...
+ − 2320
# if the first call throws an exception, we don't set it up right.
+ − 2321
# Not fatal, but we might want to address it.
+ − 2322
my $handler = $callbacks->{'Handler'};
+ − 2323
$self->{Methods}->{'skipped_entity'} = sub { $handler->skipped_entity(@_) };
+ − 2324
}
+ − 2325
return $res;
+ − 2326
}
+ − 2327
else {
+ − 2328
$self->{Methods}->{'skipped_entity'} = sub { };
+ − 2329
}
+ − 2330
}
+ − 2331
+ − 2332
}
+ − 2333
+ − 2334
sub ignorable_whitespace {
+ − 2335
my $self = shift;
+ − 2336
if (defined $self->{Methods}->{'ignorable_whitespace'}) {
+ − 2337
$self->{Methods}->{'ignorable_whitespace'}->(@_);
+ − 2338
}
+ − 2339
else {
+ − 2340
my $method;
+ − 2341
my $callbacks;
+ − 2342
if (exists $self->{ParseOptions}) {
+ − 2343
$callbacks = $self->{ParseOptions};
+ − 2344
}
+ − 2345
else {
+ − 2346
$callbacks = $self;
+ − 2347
}
+ − 2348
if (0) { # dummy to make elsif's below compile
+ − 2349
}
+ − 2350
elsif (defined $callbacks->{'ContentHandler'} and $method = $callbacks->{'ContentHandler'}->can('ignorable_whitespace') ) {
+ − 2351
my $handler = $callbacks->{'ContentHandler'};
+ − 2352
$self->{Methods}->{'ignorable_whitespace'} = sub { $method->($handler, @_) };
+ − 2353
return $method->($handler, @_);
+ − 2354
}
+ − 2355
elsif (defined $callbacks->{'DocumentHandler'} and $method = $callbacks->{'DocumentHandler'}->can('ignorable_whitespace') ) {
+ − 2356
my $handler = $callbacks->{'DocumentHandler'};
+ − 2357
$self->{Methods}->{'ignorable_whitespace'} = sub { $method->($handler, @_) };
+ − 2358
return $method->($handler, @_);
+ − 2359
}
+ − 2360
elsif (defined $callbacks->{'Handler'} and $method = $callbacks->{'Handler'}->can('ignorable_whitespace') ) {
+ − 2361
my $handler = $callbacks->{'Handler'};
+ − 2362
$self->{Methods}->{'ignorable_whitespace'} = sub { $method->($handler, @_) };
+ − 2363
return $method->($handler, @_);
+ − 2364
}
+ − 2365
elsif (defined $callbacks->{'ContentHandler'}
+ − 2366
and $callbacks->{'ContentHandler'}->can('AUTOLOAD')
+ − 2367
and $callbacks->{'ContentHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 2368
)
+ − 2369
{
+ − 2370
my $res = eval { $callbacks->{'ContentHandler'}->ignorable_whitespace(@_) };
+ − 2371
if ($@) {
+ − 2372
die $@;
+ − 2373
}
+ − 2374
else {
+ − 2375
# I think there's a buggette here...
+ − 2376
# if the first call throws an exception, we don't set it up right.
+ − 2377
# Not fatal, but we might want to address it.
+ − 2378
my $handler = $callbacks->{'ContentHandler'};
+ − 2379
$self->{Methods}->{'ignorable_whitespace'} = sub { $handler->ignorable_whitespace(@_) };
+ − 2380
}
+ − 2381
return $res;
+ − 2382
}
+ − 2383
elsif (defined $callbacks->{'DocumentHandler'}
+ − 2384
and $callbacks->{'DocumentHandler'}->can('AUTOLOAD')
+ − 2385
and $callbacks->{'DocumentHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 2386
)
+ − 2387
{
+ − 2388
my $res = eval { $callbacks->{'DocumentHandler'}->ignorable_whitespace(@_) };
+ − 2389
if ($@) {
+ − 2390
die $@;
+ − 2391
}
+ − 2392
else {
+ − 2393
# I think there's a buggette here...
+ − 2394
# if the first call throws an exception, we don't set it up right.
+ − 2395
# Not fatal, but we might want to address it.
+ − 2396
my $handler = $callbacks->{'DocumentHandler'};
+ − 2397
$self->{Methods}->{'ignorable_whitespace'} = sub { $handler->ignorable_whitespace(@_) };
+ − 2398
}
+ − 2399
return $res;
+ − 2400
}
+ − 2401
elsif (defined $callbacks->{'Handler'}
+ − 2402
and $callbacks->{'Handler'}->can('AUTOLOAD')
+ − 2403
and $callbacks->{'Handler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 2404
)
+ − 2405
{
+ − 2406
my $res = eval { $callbacks->{'Handler'}->ignorable_whitespace(@_) };
+ − 2407
if ($@) {
+ − 2408
die $@;
+ − 2409
}
+ − 2410
else {
+ − 2411
# I think there's a buggette here...
+ − 2412
# if the first call throws an exception, we don't set it up right.
+ − 2413
# Not fatal, but we might want to address it.
+ − 2414
my $handler = $callbacks->{'Handler'};
+ − 2415
$self->{Methods}->{'ignorable_whitespace'} = sub { $handler->ignorable_whitespace(@_) };
+ − 2416
}
+ − 2417
return $res;
+ − 2418
}
+ − 2419
else {
+ − 2420
$self->{Methods}->{'ignorable_whitespace'} = sub { };
+ − 2421
}
+ − 2422
}
+ − 2423
+ − 2424
}
+ − 2425
+ − 2426
sub internal_entity_decl {
+ − 2427
my $self = shift;
+ − 2428
if (defined $self->{Methods}->{'internal_entity_decl'}) {
+ − 2429
$self->{Methods}->{'internal_entity_decl'}->(@_);
+ − 2430
}
+ − 2431
else {
+ − 2432
my $method;
+ − 2433
my $callbacks;
+ − 2434
if (exists $self->{ParseOptions}) {
+ − 2435
$callbacks = $self->{ParseOptions};
+ − 2436
}
+ − 2437
else {
+ − 2438
$callbacks = $self;
+ − 2439
}
+ − 2440
if (0) { # dummy to make elsif's below compile
+ − 2441
}
+ − 2442
elsif (defined $callbacks->{'DeclHandler'} and $method = $callbacks->{'DeclHandler'}->can('internal_entity_decl') ) {
+ − 2443
my $handler = $callbacks->{'DeclHandler'};
+ − 2444
$self->{Methods}->{'internal_entity_decl'} = sub { $method->($handler, @_) };
+ − 2445
return $method->($handler, @_);
+ − 2446
}
+ − 2447
elsif (defined $callbacks->{'Handler'} and $method = $callbacks->{'Handler'}->can('internal_entity_decl') ) {
+ − 2448
my $handler = $callbacks->{'Handler'};
+ − 2449
$self->{Methods}->{'internal_entity_decl'} = sub { $method->($handler, @_) };
+ − 2450
return $method->($handler, @_);
+ − 2451
}
+ − 2452
elsif (defined $callbacks->{'DeclHandler'}
+ − 2453
and $callbacks->{'DeclHandler'}->can('AUTOLOAD')
+ − 2454
and $callbacks->{'DeclHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 2455
)
+ − 2456
{
+ − 2457
my $res = eval { $callbacks->{'DeclHandler'}->internal_entity_decl(@_) };
+ − 2458
if ($@) {
+ − 2459
die $@;
+ − 2460
}
+ − 2461
else {
+ − 2462
# I think there's a buggette here...
+ − 2463
# if the first call throws an exception, we don't set it up right.
+ − 2464
# Not fatal, but we might want to address it.
+ − 2465
my $handler = $callbacks->{'DeclHandler'};
+ − 2466
$self->{Methods}->{'internal_entity_decl'} = sub { $handler->internal_entity_decl(@_) };
+ − 2467
}
+ − 2468
return $res;
+ − 2469
}
+ − 2470
elsif (defined $callbacks->{'Handler'}
+ − 2471
and $callbacks->{'Handler'}->can('AUTOLOAD')
+ − 2472
and $callbacks->{'Handler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 2473
)
+ − 2474
{
+ − 2475
my $res = eval { $callbacks->{'Handler'}->internal_entity_decl(@_) };
+ − 2476
if ($@) {
+ − 2477
die $@;
+ − 2478
}
+ − 2479
else {
+ − 2480
# I think there's a buggette here...
+ − 2481
# if the first call throws an exception, we don't set it up right.
+ − 2482
# Not fatal, but we might want to address it.
+ − 2483
my $handler = $callbacks->{'Handler'};
+ − 2484
$self->{Methods}->{'internal_entity_decl'} = sub { $handler->internal_entity_decl(@_) };
+ − 2485
}
+ − 2486
return $res;
+ − 2487
}
+ − 2488
else {
+ − 2489
$self->{Methods}->{'internal_entity_decl'} = sub { };
+ − 2490
}
+ − 2491
}
+ − 2492
+ − 2493
}
+ − 2494
+ − 2495
sub start_entity {
+ − 2496
my $self = shift;
+ − 2497
if (defined $self->{Methods}->{'start_entity'}) {
+ − 2498
$self->{Methods}->{'start_entity'}->(@_);
+ − 2499
}
+ − 2500
else {
+ − 2501
my $method;
+ − 2502
my $callbacks;
+ − 2503
if (exists $self->{ParseOptions}) {
+ − 2504
$callbacks = $self->{ParseOptions};
+ − 2505
}
+ − 2506
else {
+ − 2507
$callbacks = $self;
+ − 2508
}
+ − 2509
if (0) { # dummy to make elsif's below compile
+ − 2510
}
+ − 2511
elsif (defined $callbacks->{'LexicalHandler'} and $method = $callbacks->{'LexicalHandler'}->can('start_entity') ) {
+ − 2512
my $handler = $callbacks->{'LexicalHandler'};
+ − 2513
$self->{Methods}->{'start_entity'} = sub { $method->($handler, @_) };
+ − 2514
return $method->($handler, @_);
+ − 2515
}
+ − 2516
elsif (defined $callbacks->{'Handler'} and $method = $callbacks->{'Handler'}->can('start_entity') ) {
+ − 2517
my $handler = $callbacks->{'Handler'};
+ − 2518
$self->{Methods}->{'start_entity'} = sub { $method->($handler, @_) };
+ − 2519
return $method->($handler, @_);
+ − 2520
}
+ − 2521
elsif (defined $callbacks->{'LexicalHandler'}
+ − 2522
and $callbacks->{'LexicalHandler'}->can('AUTOLOAD')
+ − 2523
and $callbacks->{'LexicalHandler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 2524
)
+ − 2525
{
+ − 2526
my $res = eval { $callbacks->{'LexicalHandler'}->start_entity(@_) };
+ − 2527
if ($@) {
+ − 2528
die $@;
+ − 2529
}
+ − 2530
else {
+ − 2531
# I think there's a buggette here...
+ − 2532
# if the first call throws an exception, we don't set it up right.
+ − 2533
# Not fatal, but we might want to address it.
+ − 2534
my $handler = $callbacks->{'LexicalHandler'};
+ − 2535
$self->{Methods}->{'start_entity'} = sub { $handler->start_entity(@_) };
+ − 2536
}
+ − 2537
return $res;
+ − 2538
}
+ − 2539
elsif (defined $callbacks->{'Handler'}
+ − 2540
and $callbacks->{'Handler'}->can('AUTOLOAD')
+ − 2541
and $callbacks->{'Handler'}->can('AUTOLOAD') ne (UNIVERSAL->can('AUTOLOAD') || '')
+ − 2542
)
+ − 2543
{
+ − 2544
my $res = eval { $callbacks->{'Handler'}->start_entity(@_) };
+ − 2545
if ($@) {
+ − 2546
die $@;
+ − 2547
}
+ − 2548
else {
+ − 2549
# I think there's a buggette here...
+ − 2550
# if the first call throws an exception, we don't set it up right.
+ − 2551
# Not fatal, but we might want to address it.
+ − 2552
my $handler = $callbacks->{'Handler'};
+ − 2553
$self->{Methods}->{'start_entity'} = sub { $handler->start_entity(@_) };
+ − 2554
}
+ − 2555
return $res;
+ − 2556
}
+ − 2557
else {
+ − 2558
$self->{Methods}->{'start_entity'} = sub { };
+ − 2559
}
+ − 2560
}
+ − 2561
+ − 2562
}
+ − 2563
+ − 2564
#-------------------------------------------------------------------#
+ − 2565
# Class->new(%options)
+ − 2566
#-------------------------------------------------------------------#
+ − 2567
sub new {
+ − 2568
my $proto = shift;
+ − 2569
my $class = ref($proto) || $proto;
+ − 2570
my $options = ($#_ == 0) ? shift : { @_ };
+ − 2571
+ − 2572
unless ( defined( $options->{Handler} ) or
+ − 2573
defined( $options->{ContentHandler} ) or
+ − 2574
defined( $options->{DTDHandler} ) or
+ − 2575
defined( $options->{DocumentHandler} ) or
+ − 2576
defined( $options->{LexicalHandler} ) or
+ − 2577
defined( $options->{ErrorHandler} ) or
+ − 2578
defined( $options->{DeclHandler} ) ) {
+ − 2579
+ − 2580
$options->{Handler} = XML::SAX::Base::NoHandler->new;
+ − 2581
}
+ − 2582
+ − 2583
my $self = bless $options, $class;
+ − 2584
# turn NS processing on by default
+ − 2585
$self->set_feature('http://xml.org/sax/features/namespaces', 1);
+ − 2586
return $self;
+ − 2587
}
+ − 2588
#-------------------------------------------------------------------#
+ − 2589
+ − 2590
#-------------------------------------------------------------------#
+ − 2591
# $p->parse(%options)
+ − 2592
#-------------------------------------------------------------------#
+ − 2593
sub parse {
+ − 2594
my $self = shift;
+ − 2595
my $parse_options = $self->get_options(@_);
+ − 2596
local $self->{ParseOptions} = $parse_options;
+ − 2597
if ($self->{Parent}) { # calling parse on a filter for some reason
+ − 2598
return $self->{Parent}->parse($parse_options);
+ − 2599
}
+ − 2600
else {
+ − 2601
my $method;
+ − 2602
if (defined $parse_options->{Source}{CharacterStream} and $method = $self->can('_parse_characterstream')) {
+ − 2603
warn("parse charstream???\n");
+ − 2604
return $method->($self, $parse_options->{Source}{CharacterStream});
+ − 2605
}
+ − 2606
elsif (defined $parse_options->{Source}{ByteStream} and $method = $self->can('_parse_bytestream')) {
+ − 2607
return $method->($self, $parse_options->{Source}{ByteStream});
+ − 2608
}
+ − 2609
elsif (defined $parse_options->{Source}{String} and $method = $self->can('_parse_string')) {
+ − 2610
return $method->($self, $parse_options->{Source}{String});
+ − 2611
}
+ − 2612
elsif (defined $parse_options->{Source}{SystemId} and $method = $self->can('_parse_systemid')) {
+ − 2613
return $method->($self, $parse_options->{Source}{SystemId});
+ − 2614
}
+ − 2615
else {
+ − 2616
die "No _parse_* routine defined on this driver (If it is a filter, remember to set the Parent property. If you call the parse() method, make sure to set a Source. You may want to call parse_uri, parse_string or parse_file instead.) [$self]";
+ − 2617
}
+ − 2618
}
+ − 2619
}
+ − 2620
#-------------------------------------------------------------------#
+ − 2621
+ − 2622
#-------------------------------------------------------------------#
+ − 2623
# $p->parse_file(%options)
+ − 2624
#-------------------------------------------------------------------#
+ − 2625
sub parse_file {
+ − 2626
my $self = shift;
+ − 2627
my $file = shift;
+ − 2628
return $self->parse_uri($file, @_) if ref(\$file) eq 'SCALAR';
+ − 2629
my $parse_options = $self->get_options(@_);
+ − 2630
$parse_options->{Source}{ByteStream} = $file;
+ − 2631
return $self->parse($parse_options);
+ − 2632
}
+ − 2633
#-------------------------------------------------------------------#
+ − 2634
+ − 2635
#-------------------------------------------------------------------#
+ − 2636
# $p->parse_uri(%options)
+ − 2637
#-------------------------------------------------------------------#
+ − 2638
sub parse_uri {
+ − 2639
my $self = shift;
+ − 2640
my $file = shift;
+ − 2641
my $parse_options = $self->get_options(@_);
+ − 2642
$parse_options->{Source}{SystemId} = $file;
+ − 2643
return $self->parse($parse_options);
+ − 2644
}
+ − 2645
#-------------------------------------------------------------------#
+ − 2646
+ − 2647
#-------------------------------------------------------------------#
+ − 2648
# $p->parse_string(%options)
+ − 2649
#-------------------------------------------------------------------#
+ − 2650
sub parse_string {
+ − 2651
my $self = shift;
+ − 2652
my $string = shift;
+ − 2653
my $parse_options = $self->get_options(@_);
+ − 2654
$parse_options->{Source}{String} = $string;
+ − 2655
return $self->parse($parse_options);
+ − 2656
}
+ − 2657
#-------------------------------------------------------------------#
+ − 2658
+ − 2659
#-------------------------------------------------------------------#
+ − 2660
# get_options
+ − 2661
#-------------------------------------------------------------------#
+ − 2662
sub get_options {
+ − 2663
my $self = shift;
+ − 2664
+ − 2665
if (@_ == 1) {
+ − 2666
return { %$self, %{$_[0]} };
+ − 2667
} else {
+ − 2668
return { %$self, @_ };
+ − 2669
}
+ − 2670
}
+ − 2671
#-------------------------------------------------------------------#
+ − 2672
+ − 2673
#-------------------------------------------------------------------#
+ − 2674
# get_features
+ − 2675
#-------------------------------------------------------------------#
+ − 2676
sub get_features {
+ − 2677
return (
+ − 2678
'http://xml.org/sax/features/external-general-entities' => undef,
+ − 2679
'http://xml.org/sax/features/external-parameter-entities' => undef,
+ − 2680
'http://xml.org/sax/features/is-standalone' => undef,
+ − 2681
'http://xml.org/sax/features/lexical-handler' => undef,
+ − 2682
'http://xml.org/sax/features/parameter-entities' => undef,
+ − 2683
'http://xml.org/sax/features/namespaces' => 1,
+ − 2684
'http://xml.org/sax/features/namespace-prefixes' => 0,
+ − 2685
'http://xml.org/sax/features/string-interning' => undef,
+ − 2686
'http://xml.org/sax/features/use-attributes2' => undef,
+ − 2687
'http://xml.org/sax/features/use-locator2' => undef,
+ − 2688
'http://xml.org/sax/features/validation' => undef,
+ − 2689
+ − 2690
'http://xml.org/sax/properties/dom-node' => undef,
+ − 2691
'http://xml.org/sax/properties/xml-string' => undef,
+ − 2692
);
+ − 2693
}
+ − 2694
#-------------------------------------------------------------------#
+ − 2695
+ − 2696
#-------------------------------------------------------------------#
+ − 2697
# get_feature
+ − 2698
#-------------------------------------------------------------------#
+ − 2699
sub get_feature {
+ − 2700
my $self = shift;
+ − 2701
my $feat = shift;
+ − 2702
+ − 2703
# check %FEATURES to see if it's there, and return it if so
+ − 2704
# throw XML::SAX::Exception::NotRecognized if it's not there
+ − 2705
# throw XML::SAX::Exception::NotSupported if it's there but we
+ − 2706
# don't support it
+ − 2707
+ − 2708
my %features = $self->get_features();
+ − 2709
if (exists $features{$feat}) {
+ − 2710
my %supported = map { $_ => 1 } $self->supported_features();
+ − 2711
if ($supported{$feat}) {
+ − 2712
return $self->{__PACKAGE__ . "::Features"}{$feat};
+ − 2713
}
+ − 2714
throw XML::SAX::Exception::NotSupported(
+ − 2715
Message => "The feature '$feat' is not supported by " . ref($self),
+ − 2716
Exception => undef,
+ − 2717
);
+ − 2718
}
+ − 2719
throw XML::SAX::Exception::NotRecognized(
+ − 2720
Message => "The feature '$feat' is not recognized by " . ref($self),
+ − 2721
Exception => undef,
+ − 2722
);
+ − 2723
}
+ − 2724
#-------------------------------------------------------------------#
+ − 2725
+ − 2726
#-------------------------------------------------------------------#
+ − 2727
# set_feature
+ − 2728
#-------------------------------------------------------------------#
+ − 2729
sub set_feature {
+ − 2730
my $self = shift;
+ − 2731
my $feat = shift;
+ − 2732
my $value = shift;
+ − 2733
# check %FEATURES to see if it's there, and set it if so
+ − 2734
# throw XML::SAX::Exception::NotRecognized if it's not there
+ − 2735
# throw XML::SAX::Exception::NotSupported if it's there but we
+ − 2736
# don't support it
+ − 2737
+ − 2738
my %features = $self->get_features();
+ − 2739
if (exists $features{$feat}) {
+ − 2740
my %supported = map { $_ => 1 } $self->supported_features();
+ − 2741
if ($supported{$feat}) {
+ − 2742
return $self->{__PACKAGE__ . "::Features"}{$feat} = $value;
+ − 2743
}
+ − 2744
throw XML::SAX::Exception::NotSupported(
+ − 2745
Message => "The feature '$feat' is not supported by " . ref($self),
+ − 2746
Exception => undef,
+ − 2747
);
+ − 2748
}
+ − 2749
throw XML::SAX::Exception::NotRecognized(
+ − 2750
Message => "The feature '$feat' is not recognized by " . ref($self),
+ − 2751
Exception => undef,
+ − 2752
);
+ − 2753
}
+ − 2754
#-------------------------------------------------------------------#
+ − 2755
+ − 2756
#-------------------------------------------------------------------#
+ − 2757
# get_handler and friends
+ − 2758
#-------------------------------------------------------------------#
+ − 2759
sub get_handler {
+ − 2760
my $self = shift;
+ − 2761
my $handler_type = shift;
+ − 2762
$handler_type ||= 'Handler';
+ − 2763
return defined( $self->{$handler_type} ) ? $self->{$handler_type} : undef;
+ − 2764
}
+ − 2765
+ − 2766
sub get_document_handler {
+ − 2767
my $self = shift;
+ − 2768
return $self->get_handler('DocumentHandler', @_);
+ − 2769
}
+ − 2770
+ − 2771
sub get_content_handler {
+ − 2772
my $self = shift;
+ − 2773
return $self->get_handler('ContentHandler', @_);
+ − 2774
}
+ − 2775
+ − 2776
sub get_dtd_handler {
+ − 2777
my $self = shift;
+ − 2778
return $self->get_handler('DTDHandler', @_);
+ − 2779
}
+ − 2780
+ − 2781
sub get_lexical_handler {
+ − 2782
my $self = shift;
+ − 2783
return $self->get_handler('LexicalHandler', @_);
+ − 2784
}
+ − 2785
+ − 2786
sub get_decl_handler {
+ − 2787
my $self = shift;
+ − 2788
return $self->get_handler('DeclHandler', @_);
+ − 2789
}
+ − 2790
+ − 2791
sub get_error_handler {
+ − 2792
my $self = shift;
+ − 2793
return $self->get_handler('ErrorHandler', @_);
+ − 2794
}
+ − 2795
+ − 2796
sub get_entity_resolver {
+ − 2797
my $self = shift;
+ − 2798
return $self->get_handler('EntityResolver', @_);
+ − 2799
}
+ − 2800
#-------------------------------------------------------------------#
+ − 2801
+ − 2802
#-------------------------------------------------------------------#
+ − 2803
# set_handler and friends
+ − 2804
#-------------------------------------------------------------------#
+ − 2805
sub set_handler {
+ − 2806
my $self = shift;
+ − 2807
my ($new_handler, $handler_type) = reverse @_;
+ − 2808
$handler_type ||= 'Handler';
+ − 2809
$self->{Methods} = {} if $self->{Methods};
+ − 2810
$self->{$handler_type} = $new_handler;
+ − 2811
$self->{ParseOptions}->{$handler_type} = $new_handler;
+ − 2812
return 1;
+ − 2813
}
+ − 2814
+ − 2815
sub set_document_handler {
+ − 2816
my $self = shift;
+ − 2817
return $self->set_handler('DocumentHandler', @_);
+ − 2818
}
+ − 2819
+ − 2820
sub set_content_handler {
+ − 2821
my $self = shift;
+ − 2822
return $self->set_handler('ContentHandler', @_);
+ − 2823
}
+ − 2824
sub set_dtd_handler {
+ − 2825
my $self = shift;
+ − 2826
return $self->set_handler('DTDHandler', @_);
+ − 2827
}
+ − 2828
sub set_lexical_handler {
+ − 2829
my $self = shift;
+ − 2830
return $self->set_handler('LexicalHandler', @_);
+ − 2831
}
+ − 2832
sub set_decl_handler {
+ − 2833
my $self = shift;
+ − 2834
return $self->set_handler('DeclHandler', @_);
+ − 2835
}
+ − 2836
sub set_error_handler {
+ − 2837
my $self = shift;
+ − 2838
return $self->set_handler('ErrorHandler', @_);
+ − 2839
}
+ − 2840
sub set_entity_resolver {
+ − 2841
my $self = shift;
+ − 2842
return $self->set_handler('EntityResolver', @_);
+ − 2843
}
+ − 2844
+ − 2845
#-------------------------------------------------------------------#
+ − 2846
+ − 2847
#-------------------------------------------------------------------#
+ − 2848
# supported_features
+ − 2849
#-------------------------------------------------------------------#
+ − 2850
sub supported_features {
+ − 2851
my $self = shift;
+ − 2852
# Only namespaces are required by all parsers
+ − 2853
return (
+ − 2854
'http://xml.org/sax/features/namespaces',
+ − 2855
);
+ − 2856
}
+ − 2857
#-------------------------------------------------------------------#
+ − 2858
+ − 2859
sub no_op {
+ − 2860
# this space intentionally blank
+ − 2861
}
+ − 2862
+ − 2863
+ − 2864
package XML::SAX::Base::NoHandler;
+ − 2865
+ − 2866
# we need a fake handler that doesn't implement anything, this
+ − 2867
# simplifies the code a lot (though given the recent changes,
+ − 2868
# it may be better to do without)
+ − 2869
sub new {
+ − 2870
#warn "no handler called\n";
+ − 2871
return bless {};
+ − 2872
}
+ − 2873
+ − 2874
1;
+ − 2875
+ − 2876
__END__
+ − 2877
+ − 2878
=head1 NAME
+ − 2879
+ − 2880
XML::SAX::Base - Base class SAX Drivers and Filters
+ − 2881
+ − 2882
=head1 SYNOPSIS
+ − 2883
+ − 2884
package MyFilter;
+ − 2885
use XML::SAX::Base;
+ − 2886
@ISA = ('XML::SAX::Base');
+ − 2887
+ − 2888
=head1 DESCRIPTION
+ − 2889
+ − 2890
This module has a very simple task - to be a base class for PerlSAX
+ − 2891
drivers and filters. It's default behaviour is to pass the input directly
+ − 2892
to the output unchanged. It can be useful to use this module as a base class
+ − 2893
so you don't have to, for example, implement the characters() callback.
+ − 2894
+ − 2895
The main advantages that it provides are easy dispatching of events the right
+ − 2896
way (ie it takes care for you of checking that the handler has implemented
+ − 2897
that method, or has defined an AUTOLOAD), and the guarantee that filters
+ − 2898
will pass along events that they aren't implementing to handlers downstream
+ − 2899
that might nevertheless be interested in them.
+ − 2900
+ − 2901
=head1 WRITING SAX DRIVERS AND FILTERS
+ − 2902
+ − 2903
Writing SAX Filters is tremendously easy: all you need to do is
+ − 2904
inherit from this module, and define the events you want to handle. A
+ − 2905
more detailed explanation can be found at
+ − 2906
http://www.xml.com/pub/a/2001/10/10/sax-filters.html.
+ − 2907
+ − 2908
Writing Drivers is equally simple. The one thing you need to pay
+ − 2909
attention to is B<NOT> to call events yourself (this applies to Filters
+ − 2910
as well). For instance:
+ − 2911
+ − 2912
package MyFilter;
+ − 2913
use base qw(XML::SAX::Base);
+ − 2914
+ − 2915
sub start_element {
+ − 2916
my $self = shift;
+ − 2917
my $data = shift;
+ − 2918
# do something
+ − 2919
$self->{Handler}->start_element($data); # BAD
+ − 2920
}
+ − 2921
+ − 2922
The above example works well as precisely that: an example. But it has
+ − 2923
several faults: 1) it doesn't test to see whether the handler defines
+ − 2924
start_element. Perhaps it doesn't want to see that event, in which
+ − 2925
case you shouldn't throw it (otherwise it'll die). 2) it doesn't check
+ − 2926
ContentHandler and then Handler (ie it doesn't look to see that the
+ − 2927
user hasn't requested events on a specific handler, and if not on the
+ − 2928
default one), 3) if it did check all that, not only would the code be
+ − 2929
cumbersome (see this module's source to get an idea) but it would also
+ − 2930
probably have to check for a DocumentHandler (in case this were SAX1)
+ − 2931
and for AUTOLOADs potentially defined in all these packages. As you can
+ − 2932
tell, that would be fairly painful. Instead of going through that,
+ − 2933
simply remember to use code similar to the following instead:
+ − 2934
+ − 2935
package MyFilter;
+ − 2936
use base qw(XML::SAX::Base);
+ − 2937
+ − 2938
sub start_element {
+ − 2939
my $self = shift;
+ − 2940
my $data = shift;
+ − 2941
# do something to filter
+ − 2942
$self->SUPER::start_element($data); # GOOD (and easy) !
+ − 2943
}
+ − 2944
+ − 2945
This way, once you've done your job you hand the ball back to
+ − 2946
XML::SAX::Base and it takes care of all those problems for you!
+ − 2947
+ − 2948
Note that the above example doesn't apply to filters only, drivers
+ − 2949
will benefit from the exact same feature.
+ − 2950
+ − 2951
=head1 METHODS
+ − 2952
+ − 2953
A number of methods are defined within this class for the purpose of
+ − 2954
inheritance. Some probably don't need to be overridden (eg parse_file)
+ − 2955
but some clearly should be (eg parse). Options for these methods are
+ − 2956
described in the PerlSAX2 specification available from
+ − 2957
http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/~checkout~/perl-xml/libxml-perl/doc/sax-2.0.html?rev=HEAD&content-type=text/html.
+ − 2958
+ − 2959
=over 4
+ − 2960
+ − 2961
=item * parse
+ − 2962
+ − 2963
The parse method is the main entry point to parsing documents. Internally
+ − 2964
the parse method will detect what type of "thing" you are parsing, and
+ − 2965
call the appropriate method in your implementation class. Here is the
+ − 2966
mapping table of what is in the Source options (see the Perl SAX 2.0
+ − 2967
specification for the meaning of these values):
+ − 2968
+ − 2969
Source Contains parse() calls
+ − 2970
=============== =============
+ − 2971
CharacterStream (*) _parse_characterstream($stream, $options)
+ − 2972
ByteStream _parse_bytestream($stream, $options)
+ − 2973
String _parse_string($string, $options)
+ − 2974
SystemId _parse_systemid($string, $options)
+ − 2975
+ − 2976
However note that these methods may not be sensible if your driver class
+ − 2977
is not for parsing XML. An example might be a DBI driver that generates
+ − 2978
XML/SAX from a database table. If that is the case, you likely want to
+ − 2979
write your own parse() method.
+ − 2980
+ − 2981
Also note that the Source may contain both a PublicId entry, and an
+ − 2982
Encoding entry. To get at these, examine $options->{Source} as passed
+ − 2983
to your method.
+ − 2984
+ − 2985
(*) A CharacterStream is a filehandle that does not need any encoding
+ − 2986
translation done on it. This is implemented as a regular filehandle
+ − 2987
and only works under Perl 5.7.2 or higher using PerlIO. To get a single
+ − 2988
character, or number of characters from it, use the perl core read()
+ − 2989
function. To get a single byte from it (or number of bytes), you can
+ − 2990
use sysread(). The encoding of the stream should be in the Encoding
+ − 2991
entry for the Source.
+ − 2992
+ − 2993
=item * parse_file, parse_uri, parse_string
+ − 2994
+ − 2995
These are all convenience variations on parse(), and in fact simply
+ − 2996
set up the options before calling it. You probably don't need to
+ − 2997
override these.
+ − 2998
+ − 2999
=item * get_options
+ − 3000
+ − 3001
This is a convenience method to get options in SAX2 style, or more
+ − 3002
generically either as hashes or as hashrefs (it returns a hashref).
+ − 3003
You will probably want to use this method in your own implementations
+ − 3004
of parse() and of new().
+ − 3005
+ − 3006
=item * get_feature, set_feature
+ − 3007
+ − 3008
These simply get and set features, and throw the
+ − 3009
appropriate exceptions defined in the specification if need be.
+ − 3010
+ − 3011
If your subclass defines features not defined in this one,
+ − 3012
then you should override these methods in such a way that they check for
+ − 3013
your features first, and then call the base class's methods
+ − 3014
for features not defined by your class. An example would be:
+ − 3015
+ − 3016
sub get_feature {
+ − 3017
my $self = shift;
+ − 3018
my $feat = shift;
+ − 3019
if (exists $MY_FEATURES{$feat}) {
+ − 3020
# handle the feature in various ways
+ − 3021
}
+ − 3022
else {
+ − 3023
return $self->SUPER::get_feature($feat);
+ − 3024
}
+ − 3025
}
+ − 3026
+ − 3027
Currently this part is unimplemented.
+ − 3028
+ − 3029
+ − 3030
=item * set_handler
+ − 3031
+ − 3032
This method takes a handler type (Handler, ContentHandler, etc.) and a
+ − 3033
handler object as arguments, and changes the current handler for that
+ − 3034
handler type, while taking care of resetting the internal state that
+ − 3035
needs to be reset. This allows one to change a handler during parse
+ − 3036
without running into problems (changing it on the parser object
+ − 3037
directly will most likely cause trouble).
+ − 3038
+ − 3039
=item * set_document_handler, set_content_handler, set_dtd_handler, set_lexical_handler, set_decl_handler, set_error_handler, set_entity_resolver
+ − 3040
+ − 3041
These are just simple wrappers around the former method, and take a
+ − 3042
handler object as their argument. Internally they simply call
+ − 3043
set_handler with the correct arguments.
+ − 3044
+ − 3045
=item * get_handler
+ − 3046
+ − 3047
The inverse of set_handler, this method takes a an optional string containing a handler type (DTDHandler,
+ − 3048
ContentHandler, etc. 'Handler' is used if no type is passed). It returns a reference to the object that implements
+ − 3049
that that class, or undef if that handler type is not set for the current driver/filter.
+ − 3050
+ − 3051
=item * get_document_handler, get_content_handler, get_dtd_handler, get_lexical_handler, get_decl_handler,
+ − 3052
get_error_handler, get_entity_resolver
+ − 3053
+ − 3054
These are just simple wrappers around the get_handler() method, and take no arguments. Internally
+ − 3055
they simply call get_handler with the correct handler type name.
+ − 3056
+ − 3057
=back
+ − 3058
+ − 3059
It would be rather useless to describe all the methods that this
+ − 3060
module implements here. They are all the methods supported in SAX1 and
+ − 3061
SAX2. In case your memory is a little short, here is a list. The
+ − 3062
apparent duplicates are there so that both versions of SAX can be
+ − 3063
supported.
+ − 3064
+ − 3065
=over 4
+ − 3066
+ − 3067
=item * start_document
+ − 3068
+ − 3069
=item * end_document
+ − 3070
+ − 3071
=item * start_element
+ − 3072
+ − 3073
=item * start_document
+ − 3074
+ − 3075
=item * end_document
+ − 3076
+ − 3077
=item * start_element
+ − 3078
+ − 3079
=item * end_element
+ − 3080
+ − 3081
=item * characters
+ − 3082
+ − 3083
=item * processing_instruction
+ − 3084
+ − 3085
=item * ignorable_whitespace
+ − 3086
+ − 3087
=item * set_document_locator
+ − 3088
+ − 3089
=item * start_prefix_mapping
+ − 3090
+ − 3091
=item * end_prefix_mapping
+ − 3092
+ − 3093
=item * skipped_entity
+ − 3094
+ − 3095
=item * start_cdata
+ − 3096
+ − 3097
=item * end_cdata
+ − 3098
+ − 3099
=item * comment
+ − 3100
+ − 3101
=item * entity_reference
+ − 3102
+ − 3103
=item * notation_decl
+ − 3104
+ − 3105
=item * unparsed_entity_decl
+ − 3106
+ − 3107
=item * element_decl
+ − 3108
+ − 3109
=item * attlist_decl
+ − 3110
+ − 3111
=item * doctype_decl
+ − 3112
+ − 3113
=item * xml_decl
+ − 3114
+ − 3115
=item * entity_decl
+ − 3116
+ − 3117
=item * attribute_decl
+ − 3118
+ − 3119
=item * internal_entity_decl
+ − 3120
+ − 3121
=item * external_entity_decl
+ − 3122
+ − 3123
=item * resolve_entity
+ − 3124
+ − 3125
=item * start_dtd
+ − 3126
+ − 3127
=item * end_dtd
+ − 3128
+ − 3129
=item * start_entity
+ − 3130
+ − 3131
=item * end_entity
+ − 3132
+ − 3133
=item * warning
+ − 3134
+ − 3135
=item * error
+ − 3136
+ − 3137
=item * fatal_error
+ − 3138
+ − 3139
=back
+ − 3140
+ − 3141
=head1 TODO
+ − 3142
+ − 3143
- more tests
+ − 3144
- conform to the "SAX Filters" and "Java and DOM compatibility"
+ − 3145
sections of the SAX2 document.
+ − 3146
+ − 3147
=head1 AUTHOR
+ − 3148
+ − 3149
Kip Hampton (khampton@totalcinema.com) did most of the work, after porting
+ − 3150
it from XML::Filter::Base.
+ − 3151
+ − 3152
Robin Berjon (robin@knowscape.com) pitched in with patches to make it
+ − 3153
usable as a base for drivers as well as filters, along with other patches.
+ − 3154
+ − 3155
Matt Sergeant (matt@sergeant.org) wrote the original XML::Filter::Base,
+ − 3156
and patched a few things here and there, and imported it into
+ − 3157
the XML::SAX distribution.
+ − 3158
+ − 3159
=head1 SEE ALSO
+ − 3160
+ − 3161
L<XML::SAX>
+ − 3162
+ − 3163
=cut
+ − 3164