| | 18 | # TODO more from libswish3.h |
|---|
| | 19 | # constants |
|---|
| | 20 | BOOT: |
|---|
| | 21 | { |
|---|
| | 22 | HV *stash; |
|---|
| | 23 | |
|---|
| | 24 | stash = gv_stashpv("SWISH::3", TRUE); |
|---|
| | 25 | newCONSTSUB(stash, "SWISH_PROP", newSVpv(SWISH_PROP, 0)); |
|---|
| | 26 | newCONSTSUB(stash, "SWISH_PROP_MAX", newSVpv(SWISH_PROP_MAX, 0)); |
|---|
| | 27 | newCONSTSUB(stash, "SWISH_PROP_SORT", newSVpv(SWISH_PROP_SORT, 0)); |
|---|
| | 28 | newCONSTSUB(stash, "SWISH_META", newSVpv(SWISH_META, 0)); |
|---|
| | 29 | newCONSTSUB(stash, "SWISH_MIME", newSVpv(SWISH_MIME, 0)); |
|---|
| | 30 | newCONSTSUB(stash, "SWISH_PARSERS", newSVpv(SWISH_PARSERS, 0)); |
|---|
| | 31 | newCONSTSUB(stash, "SWISH_INDEX", newSVpv(SWISH_INDEX, 0)); |
|---|
| | 32 | newCONSTSUB(stash, "SWISH_ALIAS", newSVpv(SWISH_ALIAS, 0)); |
|---|
| | 33 | newCONSTSUB(stash, "SWISH_WORDS", newSVpv(SWISH_WORDS, 0)); |
|---|
| | 34 | newCONSTSUB(stash, "SWISH_PROP_RECCNT", newSVpv(SWISH_PROP_RECCNT, 0)); |
|---|
| | 35 | newCONSTSUB(stash, "SWISH_PROP_RANK", newSVpv(SWISH_PROP_RANK, 0)); |
|---|
| | 36 | newCONSTSUB(stash, "SWISH_PROP_DOCID", newSVpv(SWISH_PROP_DOCID, 0)); |
|---|
| | 37 | newCONSTSUB(stash, "SWISH_PROP_DOCPATH", newSVpv(SWISH_PROP_DOCPATH, 0)); |
|---|
| | 38 | newCONSTSUB(stash, "SWISH_PROP_DBFILE", newSVpv(SWISH_PROP_DBFILE, 0)); |
|---|
| | 39 | newCONSTSUB(stash, "SWISH_PROP_TITLE", newSVpv(SWISH_PROP_TITLE, 0)); |
|---|
| | 40 | newCONSTSUB(stash, "SWISH_PROP_SIZE", newSVpv(SWISH_PROP_SIZE, 0)); |
|---|
| | 41 | newCONSTSUB(stash, "SWISH_PROP_MTIME", newSVpv(SWISH_PROP_MTIME, 0)); |
|---|
| | 42 | newCONSTSUB(stash, "SWISH_PROP_DESCRIPTION",newSVpv(SWISH_PROP_DESCRIPTION, 0)); |
|---|
| | 43 | newCONSTSUB(stash, "SWISH_PROP_CONNECTOR", newSVpv(SWISH_PROP_CONNECTOR, 0)); |
|---|
| | 44 | newCONSTSUB(stash, "SWISH_PROP_STRING", newSViv(SWISH_PROP_STRING)); |
|---|
| | 45 | newCONSTSUB(stash, "SWISH_PROP_DATE", newSViv(SWISH_PROP_DATE)); |
|---|
| | 46 | newCONSTSUB(stash, "SWISH_PROP_INT", newSViv(SWISH_PROP_INT)); |
|---|
| | 47 | } |
|---|
| | 48 | |
|---|
| | 49 | |
|---|
| 282 | | |
|---|
| 283 | | |
|---|
| 284 | | ########################################################################################## |
|---|
| 285 | | |
|---|
| 286 | | MODULE = SWISH::3 PACKAGE = SWISH::3::Constants |
|---|
| 287 | | |
|---|
| 288 | | PROTOTYPES: enable |
|---|
| 289 | | |
|---|
| 290 | | # TODO more from libswish3.h |
|---|
| 291 | | # constants |
|---|
| 292 | | BOOT: |
|---|
| 293 | | { |
|---|
| 294 | | HV *stash; |
|---|
| 295 | | |
|---|
| 296 | | stash = gv_stashpv("SWISH::3::Constants", TRUE); |
|---|
| 297 | | newCONSTSUB(stash, "SWISH_PROP", newSVpv(SWISH_PROP, 0)); |
|---|
| 298 | | newCONSTSUB(stash, "SWISH_PROP_MAX", newSVpv(SWISH_PROP_MAX, 0)); |
|---|
| 299 | | newCONSTSUB(stash, "SWISH_PROP_SORT", newSVpv(SWISH_PROP_SORT, 0)); |
|---|
| 300 | | newCONSTSUB(stash, "SWISH_META", newSVpv(SWISH_META, 0)); |
|---|
| 301 | | newCONSTSUB(stash, "SWISH_MIME", newSVpv(SWISH_MIME, 0)); |
|---|
| 302 | | newCONSTSUB(stash, "SWISH_PARSERS", newSVpv(SWISH_PARSERS, 0)); |
|---|
| 303 | | newCONSTSUB(stash, "SWISH_INDEX", newSVpv(SWISH_INDEX, 0)); |
|---|
| 304 | | newCONSTSUB(stash, "SWISH_ALIAS", newSVpv(SWISH_ALIAS, 0)); |
|---|
| 305 | | newCONSTSUB(stash, "SWISH_WORDS", newSVpv(SWISH_WORDS, 0)); |
|---|
| 306 | | newCONSTSUB(stash, "SWISH_PROP_RECCNT", newSVpv(SWISH_PROP_RECCNT, 0)); |
|---|
| 307 | | newCONSTSUB(stash, "SWISH_PROP_RANK", newSVpv(SWISH_PROP_RANK, 0)); |
|---|
| 308 | | newCONSTSUB(stash, "SWISH_PROP_DOCID", newSVpv(SWISH_PROP_DOCID, 0)); |
|---|
| 309 | | newCONSTSUB(stash, "SWISH_PROP_DOCPATH", newSVpv(SWISH_PROP_DOCPATH, 0)); |
|---|
| 310 | | newCONSTSUB(stash, "SWISH_PROP_DBFILE", newSVpv(SWISH_PROP_DBFILE, 0)); |
|---|
| 311 | | newCONSTSUB(stash, "SWISH_PROP_TITLE", newSVpv(SWISH_PROP_TITLE, 0)); |
|---|
| 312 | | newCONSTSUB(stash, "SWISH_PROP_SIZE", newSVpv(SWISH_PROP_SIZE, 0)); |
|---|
| 313 | | newCONSTSUB(stash, "SWISH_PROP_MTIME", newSVpv(SWISH_PROP_MTIME, 0)); |
|---|
| 314 | | newCONSTSUB(stash, "SWISH_PROP_DESCRIPTION",newSVpv(SWISH_PROP_DESCRIPTION, 0)); |
|---|
| 315 | | newCONSTSUB(stash, "SWISH_PROP_CONNECTOR", newSVpv(SWISH_PROP_CONNECTOR, 0)); |
|---|
| 316 | | newCONSTSUB(stash, "SWISH_PROP_STRING", newSViv(SWISH_PROP_STRING)); |
|---|
| 317 | | newCONSTSUB(stash, "SWISH_PROP_DATE", newSViv(SWISH_PROP_DATE)); |
|---|
| 318 | | newCONSTSUB(stash, "SWISH_PROP_INT", newSViv(SWISH_PROP_INT)); |
|---|
| 319 | | } |
|---|
| 320 | | |
|---|
| 321 | | |
|---|
| 322 | | # *************************************************************************************/ |
|---|
| 323 | | |
|---|
| 324 | | MODULE = SWISH::3 PACKAGE = SWISH::3::Config |
|---|
| 325 | | |
|---|
| 326 | | PROTOTYPES: enable |
|---|
| 327 | | |
|---|
| 328 | | AV* |
|---|
| 329 | | keys(self) |
|---|
| 330 | | swish_Config* self |
|---|
| 331 | | |
|---|
| 332 | | CODE: |
|---|
| 333 | | RETVAL = sp_get_xml2_hash_keys(self->conf); |
|---|
| 334 | | |
|---|
| 335 | | OUTPUT: |
|---|
| 336 | | RETVAL |
|---|
| 337 | | |
|---|
| 338 | | |
|---|
| 339 | | # translate xml2 hashes into Perl hashes -- NOTE these are effectively read-only hashes |
|---|
| 340 | | # you must use add() and delete() to actually write to the active config in memory |
|---|
| 341 | | HV* |
|---|
| 342 | | subconfig(self,key) |
|---|
| 343 | | swish_Config* self |
|---|
| 344 | | char* key |
|---|
| 345 | | |
|---|
| 346 | | PREINIT: |
|---|
| 347 | | xmlHashTablePtr sc; |
|---|
| 348 | | |
|---|
| 349 | | CODE: |
|---|
| 350 | | sc = swish_subconfig_hash(self, (xmlChar*)key); |
|---|
| 351 | | RETVAL = sp_xml2_hash_to_perl_hash(sc); |
|---|
| 352 | | |
|---|
| 353 | | OUTPUT: |
|---|
| 354 | | RETVAL |
|---|
| 355 | | |
|---|
| 356 | | |
|---|
| 357 | | |
|---|
| 358 | | int |
|---|
| 359 | | debug(self) |
|---|
| 360 | | swish_Config* self |
|---|
| 361 | | |
|---|
| 362 | | CODE: |
|---|
| 363 | | RETVAL = swish_debug_config(self); |
|---|
| 364 | | |
|---|
| 365 | | OUTPUT: |
|---|
| 366 | | RETVAL |
|---|
| 367 | | |
|---|
| 368 | | |
|---|
| 369 | | swish_Config * |
|---|
| 370 | | new(CLASS) |
|---|
| 371 | | char* CLASS; |
|---|
| 372 | | |
|---|
| 373 | | PREINIT: |
|---|
| 374 | | HV* stash; |
|---|
| 375 | | |
|---|
| 376 | | CODE: |
|---|
| 377 | | RETVAL = swish_init_config(); |
|---|
| 378 | | RETVAL->ref_cnt++; |
|---|
| 379 | | stash = newHV(); |
|---|
| 380 | | RETVAL->stash = newRV_inc((SV*)stash); |
|---|
| 381 | | |
|---|
| 382 | | OUTPUT: |
|---|
| 383 | | RETVAL |
|---|
| 384 | | |
|---|
| 385 | | |
|---|
| 386 | | |
|---|
| 387 | | void |
|---|
| 388 | | add(self, conf_file) |
|---|
| 389 | | swish_Config* self |
|---|
| 390 | | char * conf_file |
|---|
| 391 | | |
|---|
| 392 | | CODE: |
|---|
| 393 | | swish_add_config((xmlChar*)conf_file, self); |
|---|
| 394 | | |
|---|
| 395 | | |
|---|
| 396 | | void |
|---|
| 397 | | delete(self, key) |
|---|
| 398 | | swish_Config* self |
|---|
| 399 | | char* key |
|---|
| 400 | | |
|---|
| 401 | | CODE: |
|---|
| 402 | | warn("delete() not yet implemented\n"); |
|---|
| 403 | | |
|---|
| 404 | | void |
|---|
| 405 | | subconfig_delete(self, key, subconf) |
|---|
| 406 | | swish_Config* self |
|---|
| 407 | | char* key |
|---|
| 408 | | xmlHashTablePtr subconf |
|---|
| 409 | | |
|---|
| 410 | | CODE: |
|---|
| 411 | | warn("subconfig_delete() not yet implemented\n"); |
|---|
| 412 | | |
|---|
| 413 | | void |
|---|
| 414 | | DESTROY(self) |
|---|
| 415 | | swish_Config* self |
|---|
| 416 | | |
|---|
| 417 | | CODE: |
|---|
| 418 | | if (SWISH_DEBUG) { |
|---|
| 419 | | warn("DESTROYing swish_Config object %s [%d] [ref_cnt = %d]", |
|---|
| 420 | | SvPV(ST(0), PL_na), self, self->ref_cnt); |
|---|
| 421 | | } |
|---|
| 422 | | |
|---|
| 423 | | int |
|---|
| 424 | | refcount(obj) |
|---|
| 425 | | SV* obj; |
|---|
| 426 | | |
|---|
| 427 | | CODE: |
|---|
| 428 | | RETVAL = SvREFCNT((SV*)SvRV(obj)); |
|---|
| 429 | | |
|---|
| 430 | | OUTPUT: |
|---|
| 431 | | RETVAL |
|---|
| 432 | | |
|---|
| 433 | | |
|---|
| 434 | | # ******************************************************************************* |
|---|
| 435 | | |
|---|
| 436 | | MODULE = SWISH::3 PACKAGE = SWISH::3::Analyzer |
|---|
| 437 | | |
|---|
| 438 | | PROTOTYPES: enable |
|---|
| 439 | | |
|---|
| 440 | | |
|---|
| 441 | | swish_Analyzer * |
|---|
| 442 | | new(CLASS, config) |
|---|
| 443 | | char* CLASS; |
|---|
| 444 | | swish_Config* config; |
|---|
| 445 | | |
|---|
| 446 | | PREINIT: |
|---|
| 447 | | HV* stash; |
|---|
| 448 | | |
|---|
| 449 | | CODE: |
|---|
| 450 | | //RETVAL = swish_init_analyzer((swish_Config*)sp_ptr_from_object( (SV*)config )); |
|---|
| 451 | | RETVAL = swish_init_analyzer(config); |
|---|
| 452 | | RETVAL->ref_cnt = 1; |
|---|
| 453 | | stash = newHV(); |
|---|
| 454 | | RETVAL->stash = newRV_inc((SV*)stash); |
|---|
| 455 | | |
|---|
| 456 | | OUTPUT: |
|---|
| 457 | | RETVAL |
|---|
| 458 | | |
|---|
| 459 | | |
|---|
| 460 | | # accessors/mutators |
|---|
| 461 | | void |
|---|
| 462 | | _set_or_get(self, ...) |
|---|
| 463 | | swish_Analyzer* self; |
|---|
| 464 | | ALIAS: |
|---|
| 465 | | set_regex = 1 |
|---|
| 466 | | get_regex = 2 |
|---|
| 467 | | set_token_handler = 3 |
|---|
| 468 | | get_token_handler = 4 |
|---|
| 469 | | PREINIT: |
|---|
| 470 | | SV* stash; |
|---|
| 471 | | SV* RETVAL; |
|---|
| 472 | | PPCODE: |
|---|
| 473 | | { |
|---|
| 474 | | |
|---|
| 475 | | //warn("number of items %d for ix %d", items, ix); |
|---|
| 476 | | |
|---|
| 477 | | START_SET_OR_GET_SWITCH |
|---|
| 478 | | |
|---|
| 479 | | // set_regex |
|---|
| 480 | | case 1: self->regex = ST(1); |
|---|
| 481 | | break; |
|---|
| 482 | | |
|---|
| 483 | | // TODO test refcnt |
|---|
| 484 | | // get_regex |
|---|
| 485 | | case 2: RETVAL = SvREFCNT_inc( self->regex ); |
|---|
| 486 | | break; |
|---|
| 487 | | |
|---|
| 488 | | // TODO set token_handler |
|---|
| 489 | | |
|---|
| 490 | | END_SET_OR_GET_SWITCH |
|---|
| 491 | | } |
|---|
| 492 | | |
|---|
| 493 | | |
|---|
| 494 | | void |
|---|
| 495 | | DESTROY(self) |
|---|
| 496 | | swish_Analyzer* self |
|---|
| 497 | | |
|---|
| 498 | | CODE: |
|---|
| 499 | | if (SWISH_DEBUG) { |
|---|
| 500 | | warn("DESTROYing swish_Analyzer object %s [%d] [ref_cnt = %d]", |
|---|
| 501 | | SvPV(ST(0), PL_na), self, self->ref_cnt); |
|---|
| 502 | | } |
|---|
| 503 | | |
|---|
| 504 | | |
|---|
| 505 | | |
|---|
| 506 | | |
|---|
| 507 | | # tokenize() from Perl space uses same C func as tokenizer callback |
|---|
| 508 | | swish_WordList * |
|---|
| 509 | | tokenize(self, str, ...) |
|---|
| 510 | | SV* self; |
|---|
| 511 | | SV* str; |
|---|
| 512 | | |
|---|
| 513 | | PREINIT: |
|---|
| 514 | | char* CLASS; |
|---|
| 515 | | xmlChar* metaname; |
|---|
| 516 | | xmlChar* context; |
|---|
| 517 | | unsigned int word_pos; |
|---|
| 518 | | unsigned int offset; |
|---|
| 519 | | xmlChar* buf; |
|---|
| 520 | | |
|---|
| 521 | | CODE: |
|---|
| 522 | | CLASS = WORDLIST_CLASS; |
|---|
| 523 | | metaname = (xmlChar*)SWISH_DEFAULT_METANAME; |
|---|
| 524 | | context = (xmlChar*)SWISH_DEFAULT_METANAME; |
|---|
| 525 | | word_pos = 0; |
|---|
| 526 | | offset = 0; |
|---|
| 527 | | buf = (xmlChar*)SvPV(str, PL_na); |
|---|
| 528 | | |
|---|
| 529 | | // TODO reimplement as hashref arg |
|---|
| 530 | | |
|---|
| 531 | | if (!SvUTF8(str)) |
|---|
| 532 | | { |
|---|
| 533 | | if (swish_is_ascii(buf)) |
|---|
| 534 | | SvUTF8_on(str); /* flags original SV ?? */ |
|---|
| 535 | | else |
|---|
| 536 | | croak("%s is not flagged as a UTF-8 string and is not ASCII", buf); |
|---|
| 537 | | } |
|---|
| 538 | | |
|---|
| 539 | | if ( items > 2 ) |
|---|
| 540 | | { |
|---|
| 541 | | word_pos = (int)SvIV(ST(2)); |
|---|
| 542 | | |
|---|
| 543 | | if ( items > 3 ) |
|---|
| 544 | | offset = (int)SvIV(ST(3)); |
|---|
| 545 | | |
|---|
| 546 | | if ( items > 4 ) |
|---|
| 547 | | metaname = (xmlChar*)SvPV(ST(4), PL_na); |
|---|
| 548 | | |
|---|
| 549 | | if ( items > 5 ) |
|---|
| 550 | | context = (xmlChar*)SvPV(ST(5), PL_na); |
|---|
| 551 | | |
|---|
| 552 | | //warn ("word_pos %d offset %d metaname %s context %s\n", word_pos, offset, metaname, context ); |
|---|
| 553 | | |
|---|
| 554 | | } |
|---|
| 555 | | |
|---|
| 556 | | RETVAL = sp_tokenize( |
|---|
| 557 | | (swish_Analyzer*)sp_ptr_from_object(self), |
|---|
| 558 | | buf, |
|---|
| 559 | | word_pos, |
|---|
| 560 | | offset, |
|---|
| 561 | | metaname, |
|---|
| 562 | | context |
|---|
| 563 | | ); |
|---|
| 564 | | |
|---|
| 565 | | RETVAL->ref_cnt++; |
|---|
| 566 | | |
|---|
| 567 | | /* TODO do we need to worry about free()ing metaname and context ?? */ |
|---|
| 568 | | |
|---|
| 569 | | OUTPUT: |
|---|
| 570 | | RETVAL |
|---|
| 571 | | |
|---|
| 572 | | |
|---|
| 573 | | |
|---|
| 574 | | # tokenize_isw() uses native libswish3 tokenizer |
|---|
| 575 | | swish_WordList * |
|---|
| 576 | | tokenize_isw(self, str, ...) |
|---|
| 577 | | SV* self; |
|---|
| 578 | | SV* str; |
|---|
| 579 | | |
|---|
| 580 | | PREINIT: |
|---|
| 581 | | char* CLASS; |
|---|
| 582 | | xmlChar* metaname = (xmlChar*)SWISH_DEFAULT_METANAME; |
|---|
| 583 | | xmlChar* context = (xmlChar*)SWISH_DEFAULT_METANAME; |
|---|
| 584 | | unsigned int word_pos = 0; |
|---|
| 585 | | unsigned int offset = 0; |
|---|
| 586 | | xmlChar* buf = (xmlChar*)SvPV(str, PL_na); |
|---|
| 587 | | |
|---|
| 588 | | CODE: |
|---|
| 589 | | CLASS = WORDLIST_CLASS; |
|---|
| 590 | | |
|---|
| 591 | | if (!SvUTF8(str)) |
|---|
| 592 | | { |
|---|
| 593 | | if (swish_is_ascii(buf)) |
|---|
| 594 | | SvUTF8_on(str); /* flags original SV ?? */ |
|---|
| 595 | | else |
|---|
| 596 | | croak("%s is not flagged as a UTF-8 string and is not ASCII", buf); |
|---|
| 597 | | } |
|---|
| 598 | | |
|---|
| 599 | | if ( items > 2 ) |
|---|
| 600 | | { |
|---|
| 601 | | word_pos = (int)SvIV(ST(2)); |
|---|
| 602 | | |
|---|
| 603 | | if ( items > 3 ) |
|---|
| 604 | | offset = (int)SvIV(ST(3)); |
|---|
| 605 | | |
|---|
| 606 | | if ( items > 4 ) |
|---|
| 607 | | metaname = (xmlChar*)SvPV(ST(4), PL_na); |
|---|
| 608 | | |
|---|
| 609 | | if ( items > 5 ) |
|---|
| 610 | | context = (xmlChar*)SvPV(ST(5), PL_na); |
|---|
| 611 | | |
|---|
| 612 | | } |
|---|
| 613 | | |
|---|
| 614 | | swish_init_words(); /* in case it wasn't initialized elsewhere... */ |
|---|
| 615 | | RETVAL = swish_tokenize( |
|---|
| 616 | | (swish_Analyzer*)sp_ptr_from_object(self), |
|---|
| 617 | | buf, |
|---|
| 618 | | word_pos, |
|---|
| 619 | | offset, |
|---|
| 620 | | metaname, |
|---|
| 621 | | context |
|---|
| 622 | | ); |
|---|
| 623 | | |
|---|
| 624 | | RETVAL->ref_cnt++; |
|---|
| 625 | | |
|---|
| 626 | | /* TODO do we need to worry about free()ing metaname and context ?? */ |
|---|
| 627 | | |
|---|
| 628 | | OUTPUT: |
|---|
| 629 | | RETVAL |
|---|
| 630 | | |
|---|
| 631 | | int |
|---|
| 632 | | refcount(obj) |
|---|
| 633 | | SV* obj; |
|---|
| 634 | | |
|---|
| 635 | | CODE: |
|---|
| 636 | | RETVAL = SvREFCNT((SV*)SvRV(obj)); |
|---|
| 637 | | |
|---|
| 638 | | OUTPUT: |
|---|
| 639 | | RETVAL |
|---|
| 640 | | |
|---|
| 641 | | |
|---|
| 642 | | # ******************************************************************************* |
|---|
| 643 | | |
|---|
| 644 | | MODULE = SWISH::3 PACKAGE = SWISH::3::WordList |
|---|
| 645 | | |
|---|
| 646 | | PROTOTYPES: enable |
|---|
| 647 | | |
|---|
| 648 | | swish_Word * |
|---|
| 649 | | next(self) |
|---|
| 650 | | swish_WordList* self |
|---|
| 651 | | |
|---|
| 652 | | PREINIT: |
|---|
| 653 | | char* CLASS; |
|---|
| 654 | | |
|---|
| 655 | | CODE: |
|---|
| 656 | | CLASS = WORD_CLASS; |
|---|
| 657 | | |
|---|
| 658 | | if (self->current == NULL) { |
|---|
| 659 | | self->current = self->head; |
|---|
| 660 | | } |
|---|
| 661 | | else { |
|---|
| 662 | | self->current = self->current->next; |
|---|
| 663 | | } |
|---|
| 664 | | RETVAL = self->current; |
|---|
| 665 | | |
|---|
| 666 | | OUTPUT: |
|---|
| 667 | | RETVAL |
|---|
| 668 | | |
|---|
| 669 | | |
|---|
| 670 | | SV* |
|---|
| 671 | | nwords(self) |
|---|
| 672 | | swish_WordList* self; |
|---|
| 673 | | |
|---|
| 674 | | CODE: |
|---|
| 675 | | RETVAL = newSViv( self->nwords ); |
|---|
| 676 | | |
|---|
| 677 | | OUTPUT: |
|---|
| 678 | | RETVAL |
|---|
| 679 | | |
|---|
| 680 | | |
|---|
| 681 | | void |
|---|
| 682 | | debug(self) |
|---|
| 683 | | swish_WordList* self; |
|---|
| 684 | | |
|---|
| 685 | | CODE: |
|---|
| 686 | | swish_debug_wordlist( self ); |
|---|
| 687 | | |
|---|
| 688 | | |
|---|
| 689 | | |
|---|
| 690 | | void |
|---|
| 691 | | DESTROY(self) |
|---|
| 692 | | swish_WordList* self |
|---|
| 693 | | |
|---|
| 694 | | CODE: |
|---|
| 695 | | self->ref_cnt--; |
|---|
| 696 | | if (self->ref_cnt < 1) { |
|---|
| 697 | | swish_free_wordlist(self); |
|---|
| 698 | | } |
|---|
| 699 | | |
|---|
| 700 | | int |
|---|
| 701 | | refcount(obj) |
|---|
| 702 | | SV* obj; |
|---|
| 703 | | |
|---|
| 704 | | CODE: |
|---|
| 705 | | RETVAL = SvREFCNT((SV*)SvRV(obj)); |
|---|
| 706 | | |
|---|
| 707 | | OUTPUT: |
|---|
| 708 | | RETVAL |
|---|
| 709 | | |
|---|
| 710 | | |
|---|
| 711 | | # ******************************************************************************* |
|---|
| 712 | | |
|---|
| 713 | | MODULE = SWISH::3 PACKAGE = SWISH::3::Word |
|---|
| 714 | | |
|---|
| 715 | | PROTOTYPES: enable |
|---|
| 716 | | |
|---|
| 717 | | SV* |
|---|
| 718 | | word (self) |
|---|
| 719 | | swish_Word * self; |
|---|
| 720 | | CODE: |
|---|
| 721 | | RETVAL = newSVpvn( (char*)self->word, strlen((char*)self->word) ); |
|---|
| 722 | | |
|---|
| 723 | | OUTPUT: |
|---|
| 724 | | RETVAL |
|---|
| 725 | | |
|---|
| 726 | | |
|---|
| 727 | | SV* |
|---|
| 728 | | metaname (self) |
|---|
| 729 | | swish_Word * self; |
|---|
| 730 | | CODE: |
|---|
| 731 | | RETVAL = newSVpvn( (char*)self->metaname, strlen((char*)self->metaname) ); |
|---|
| 732 | | |
|---|
| 733 | | OUTPUT: |
|---|
| 734 | | RETVAL |
|---|
| 735 | | |
|---|
| 736 | | SV* |
|---|
| 737 | | context (self) |
|---|
| 738 | | swish_Word * self; |
|---|
| 739 | | CODE: |
|---|
| 740 | | RETVAL = newSVpvn( (char*)self->context, strlen((char*)self->context) ); |
|---|
| 741 | | |
|---|
| 742 | | OUTPUT: |
|---|
| 743 | | RETVAL |
|---|
| 744 | | |
|---|
| 745 | | |
|---|
| 746 | | SV* |
|---|
| 747 | | position (self) |
|---|
| 748 | | swish_Word * self; |
|---|
| 749 | | CODE: |
|---|
| 750 | | RETVAL = newSViv( self->position ); |
|---|
| 751 | | |
|---|
| 752 | | OUTPUT: |
|---|
| 753 | | RETVAL |
|---|
| 754 | | |
|---|
| 755 | | SV* |
|---|
| 756 | | start_offset(self) |
|---|
| 757 | | swish_Word * self; |
|---|
| 758 | | CODE: |
|---|
| 759 | | RETVAL = newSViv( self->start_offset ); |
|---|
| 760 | | |
|---|
| 761 | | OUTPUT: |
|---|
| 762 | | RETVAL |
|---|
| 763 | | |
|---|
| 764 | | SV* |
|---|
| 765 | | end_offset(self) |
|---|
| 766 | | swish_Word * self; |
|---|
| 767 | | CODE: |
|---|
| 768 | | RETVAL = newSViv( self->end_offset ); |
|---|
| 769 | | |
|---|
| 770 | | OUTPUT: |
|---|
| 771 | | RETVAL |
|---|
| 772 | | |
|---|
| 773 | | |
|---|
| 774 | | int |
|---|
| 775 | | refcount(obj) |
|---|
| 776 | | SV* obj; |
|---|
| 777 | | |
|---|
| 778 | | CODE: |
|---|
| 779 | | RETVAL = SvREFCNT((SV*)SvRV(obj)); |
|---|
| 780 | | |
|---|
| 781 | | OUTPUT: |
|---|
| 782 | | RETVAL |
|---|
| 783 | | |
|---|
| 784 | | |
|---|
| 785 | | # ******************************************************************************* |
|---|
| 786 | | |
|---|
| 787 | | MODULE = SWISH::3 PACKAGE = SWISH::3::Doc |
|---|
| 788 | | |
|---|
| 789 | | PROTOTYPES: enable |
|---|
| 790 | | |
|---|
| 791 | | SV* |
|---|
| 792 | | mtime(self) |
|---|
| 793 | | swish_DocInfo* self; |
|---|
| 794 | | |
|---|
| 795 | | CODE: |
|---|
| 796 | | RETVAL = newSViv( self->mtime ); |
|---|
| 797 | | |
|---|
| 798 | | OUTPUT: |
|---|
| 799 | | RETVAL |
|---|
| 800 | | |
|---|
| 801 | | SV* |
|---|
| 802 | | size(self) |
|---|
| 803 | | swish_DocInfo* self; |
|---|
| 804 | | |
|---|
| 805 | | CODE: |
|---|
| 806 | | RETVAL = newSViv( self->size ); |
|---|
| 807 | | |
|---|
| 808 | | OUTPUT: |
|---|
| 809 | | RETVAL |
|---|
| 810 | | |
|---|
| 811 | | SV* |
|---|
| 812 | | nwords(self) |
|---|
| 813 | | swish_DocInfo* self; |
|---|
| 814 | | |
|---|
| 815 | | CODE: |
|---|
| 816 | | RETVAL = newSViv( self->nwords ); |
|---|
| 817 | | |
|---|
| 818 | | OUTPUT: |
|---|
| 819 | | RETVAL |
|---|
| 820 | | |
|---|
| 821 | | |
|---|
| 822 | | SV* |
|---|
| 823 | | encoding(self) |
|---|
| 824 | | swish_DocInfo * self; |
|---|
| 825 | | CODE: |
|---|
| 826 | | RETVAL = newSVpvn( (char*)self->encoding, strlen((char*)self->encoding) ); |
|---|
| 827 | | |
|---|
| 828 | | OUTPUT: |
|---|
| 829 | | RETVAL |
|---|
| 830 | | |
|---|
| 831 | | SV* |
|---|
| 832 | | uri(self) |
|---|
| 833 | | swish_DocInfo * self; |
|---|
| 834 | | CODE: |
|---|
| 835 | | RETVAL = newSVpvn( (char*)self->uri, strlen((char*)self->uri) ); |
|---|
| 836 | | |
|---|
| 837 | | OUTPUT: |
|---|
| 838 | | RETVAL |
|---|
| 839 | | |
|---|
| 840 | | SV* |
|---|
| 841 | | ext(self) |
|---|
| 842 | | swish_DocInfo * self; |
|---|
| 843 | | CODE: |
|---|
| 844 | | RETVAL = newSVpvn( (char*)self->ext, strlen((char*)self->ext) ); |
|---|
| 845 | | |
|---|
| 846 | | OUTPUT: |
|---|
| 847 | | RETVAL |
|---|
| 848 | | |
|---|
| 849 | | SV* |
|---|
| 850 | | mime(self) |
|---|
| 851 | | swish_DocInfo * self; |
|---|
| 852 | | CODE: |
|---|
| 853 | | RETVAL = newSVpvn( (char*)self->mime, strlen((char*)self->mime) ); |
|---|
| 854 | | |
|---|
| 855 | | OUTPUT: |
|---|
| 856 | | RETVAL |
|---|
| 857 | | |
|---|
| 858 | | |
|---|
| 859 | | SV* |
|---|
| 860 | | parser(self) |
|---|
| 861 | | swish_DocInfo * self; |
|---|
| 862 | | CODE: |
|---|
| 863 | | RETVAL = newSVpvn( (char*)self->parser, strlen((char*)self->parser) ); |
|---|
| 864 | | |
|---|
| 865 | | OUTPUT: |
|---|
| 866 | | RETVAL |
|---|
| 867 | | |
|---|
| 868 | | int |
|---|
| 869 | | refcount(obj) |
|---|
| 870 | | SV* obj; |
|---|
| 871 | | |
|---|
| 872 | | CODE: |
|---|
| 873 | | RETVAL = SvREFCNT((SV*)SvRV(obj)); |
|---|
| 874 | | |
|---|
| 875 | | OUTPUT: |
|---|
| 876 | | RETVAL |
|---|
| 877 | | |
|---|
| 878 | | |
|---|
| 879 | | # ******************************************************************************* |
|---|
| 880 | | |
|---|
| 881 | | MODULE = SWISH::3 PACKAGE = SWISH::3::Data |
|---|
| 882 | | |
|---|
| 883 | | PROTOTYPES: enable |
|---|
| 884 | | |
|---|
| 885 | | |
|---|
| 886 | | swish_3* |
|---|
| 887 | | s3(self) |
|---|
| 888 | | swish_ParseData* self |
|---|
| 889 | | |
|---|
| 890 | | PREINIT: |
|---|
| 891 | | char* CLASS; |
|---|
| 892 | | |
|---|
| 893 | | CODE: |
|---|
| 894 | | CLASS = sp_get_objects_class((SV*)self->s3); |
|---|
| 895 | | RETVAL = self->s3; |
|---|
| 896 | | |
|---|
| 897 | | OUTPUT: |
|---|
| 898 | | RETVAL |
|---|
| 899 | | |
|---|
| 900 | | CLEANUP: |
|---|
| 901 | | SvREFCNT_inc(RETVAL); |
|---|
| 902 | | |
|---|
| 903 | | |
|---|
| 904 | | swish_Config* |
|---|
| 905 | | config(self) |
|---|
| 906 | | swish_ParseData* self |
|---|
| 907 | | |
|---|
| 908 | | PREINIT: |
|---|
| 909 | | char* CLASS; |
|---|
| 910 | | |
|---|
| 911 | | CODE: |
|---|
| 912 | | CLASS = sp_hvref_fetch_as_char(self->s3->stash, CONFIG_CLASS_KEY); |
|---|
| 913 | | RETVAL = self->s3->config; |
|---|
| 914 | | RETVAL->ref_cnt++; |
|---|
| 915 | | |
|---|
| 916 | | OUTPUT: |
|---|
| 917 | | RETVAL |
|---|
| 918 | | |
|---|
| 919 | | |
|---|
| 920 | | SV* |
|---|
| 921 | | property(self, p) |
|---|
| 922 | | swish_ParseData* self; |
|---|
| 923 | | xmlChar* p; |
|---|
| 924 | | |
|---|
| 925 | | PREINIT: |
|---|
| 926 | | xmlBufferPtr buf; |
|---|
| 927 | | |
|---|
| 928 | | CODE: |
|---|
| 929 | | buf = xmlHashLookup(self->properties->hash, p); |
|---|
| 930 | | RETVAL = newSVpvn((char*)xmlBufferContent(buf), xmlBufferLength(buf)); |
|---|
| 931 | | |
|---|
| 932 | | OUTPUT: |
|---|
| 933 | | RETVAL |
|---|
| 934 | | |
|---|
| 935 | | HV* |
|---|
| 936 | | properties(self) |
|---|
| 937 | | swish_ParseData* self |
|---|
| 938 | | |
|---|
| 939 | | CODE: |
|---|
| 940 | | RETVAL = sp_nb_to_hash( self->properties ); |
|---|
| 941 | | |
|---|
| 942 | | OUTPUT: |
|---|
| 943 | | RETVAL |
|---|
| 944 | | |
|---|
| 945 | | |
|---|
| 946 | | HV* |
|---|
| 947 | | metanames(self) |
|---|
| 948 | | swish_ParseData* self |
|---|
| 949 | | |
|---|
| 950 | | CODE: |
|---|
| 951 | | RETVAL = sp_nb_to_hash( self->metanames ); |
|---|
| 952 | | |
|---|
| 953 | | OUTPUT: |
|---|
| 954 | | RETVAL |
|---|
| 955 | | |
|---|
| 956 | | |
|---|
| 957 | | |
|---|
| 958 | | swish_DocInfo * |
|---|
| 959 | | doc(self) |
|---|
| 960 | | swish_ParseData* self |
|---|
| 961 | | |
|---|
| 962 | | PREINIT: |
|---|
| 963 | | char* CLASS; |
|---|
| 964 | | |
|---|
| 965 | | CODE: |
|---|
| 966 | | CLASS = "SWISH::3::Doc"; |
|---|
| 967 | | RETVAL = self->docinfo; |
|---|
| 968 | | |
|---|
| 969 | | OUTPUT: |
|---|
| 970 | | RETVAL |
|---|
| 971 | | |
|---|
| 972 | | |
|---|
| 973 | | swish_WordList * |
|---|
| 974 | | wordlist(self) |
|---|
| 975 | | swish_ParseData* self |
|---|
| 976 | | |
|---|
| 977 | | PREINIT: |
|---|
| 978 | | char* CLASS; |
|---|
| 979 | | |
|---|
| 980 | | CODE: |
|---|
| 981 | | CLASS = WORDLIST_CLASS; |
|---|
| 982 | | |
|---|
| 983 | | # MUST increment refcnt 2x so that SWISH::3::Parser::WordList::DESTROY |
|---|
| 984 | | # does not free it. |
|---|
| 985 | | self->wordlist->ref_cnt += 2; |
|---|
| 986 | | RETVAL = self->wordlist; |
|---|
| 987 | | |
|---|
| 988 | | OUTPUT: |
|---|
| 989 | | RETVAL |
|---|
| 990 | | |
|---|
| 991 | | |
|---|
| 992 | | # must decrement refcount for stashed SWISH::3::Parser object |
|---|
| 993 | | # since we increment it in parse_buf() and parse_file() |
|---|
| 994 | | # TODO: this way of doing it doesn't work. |
|---|
| 995 | | # but isn't it a potential mem leak to just _inc in parse_*() without |
|---|
| 996 | | # _dec somewhere else? just means that the SWISH::3::Parser object |
|---|
| 997 | | # may never get garbage collected. |
|---|
| 998 | | #void |
|---|
| 999 | | #DESTROY(self) |
|---|
| 1000 | | # swish_ParseData* self; |
|---|
| 1001 | | # |
|---|
| 1002 | | # CODE: |
|---|
| 1003 | | # SvREFCNT_dec( self->user_data ); |
|---|
| 1004 | | |
|---|
| 1005 | | int |
|---|
| 1006 | | refcount(obj) |
|---|
| 1007 | | SV* obj; |
|---|
| 1008 | | |
|---|
| 1009 | | CODE: |
|---|
| 1010 | | RETVAL = SvREFCNT((SV*)SvRV(obj)); |
|---|
| 1011 | | |
|---|
| 1012 | | OUTPUT: |
|---|
| 1013 | | RETVAL |
|---|
| 1014 | | |
|---|
| 1015 | | |
|---|
| | 322 | |
|---|
| | 323 | |
|---|
| | 324 | |
|---|
| | 325 | # include the other .xs files |
|---|
| | 326 | INCLUDE: XS/Config.xs |
|---|
| | 327 | INCLUDE: XS/Analyzer.xs |
|---|
| | 328 | INCLUDE: XS/WordList.xs |
|---|
| | 329 | INCLUDE: XS/Word.xs |
|---|
| | 330 | INCLUDE: XS/Doc.xs |
|---|
| | 331 | INCLUDE: XS/Data.xs |
|---|
| | 332 | |
|---|