blob: 0162ac232eaaf2d89da5a79b638dba033566fc71 [file] [log] [blame]
Akrone4c2e412016-01-28 15:10:50 +01001package KorAP::XML::Tokenizer::Span;
Nils Diewald2db9ad02013-10-29 19:26:43 +00002use strict;
3use warnings;
4use Mojo::DOM;
Akronb62d92a2020-03-01 16:32:00 +01005use Clone;
Nils Diewald2db9ad02013-10-29 19:26:43 +00006
Akronfa82f042020-08-04 12:56:29 +02007use constant {
8 O_START => 0,
9 O_END => 1,
10 P_START => 2,
11 P_END => 3,
12 ID => 4,
13 CONTENT => 5,
14 DOM => 6,
15 HASH => 7,
16 MILESTONE => 8,
17 PTI => 9
18};
19
Nils Diewald2db9ad02013-10-29 19:26:43 +000020sub new {
21 bless [], shift;
22};
23
Akrone19aa142016-02-01 14:38:40 +010024sub type {
25 'span';
26};
27
Akron72e671f2020-08-04 11:35:40 +020028sub set_o_start {
Akronfa82f042020-08-04 12:56:29 +020029 $_[0]->[O_START] = $_[1];
Akron72e671f2020-08-04 11:35:40 +020030};
31
Akronfa82f042020-08-04 12:56:29 +020032sub get_o_start {
33 $_[0]->[O_START]
Nils Diewald2db9ad02013-10-29 19:26:43 +000034};
35
Akron72e671f2020-08-04 11:35:40 +020036sub set_o_end {
Akronfa82f042020-08-04 12:56:29 +020037 $_[0]->[O_END] = $_[1];
Akron72e671f2020-08-04 11:35:40 +020038};
39
Akronfa82f042020-08-04 12:56:29 +020040sub get_o_end {
41 $_[0]->[O_END]
Nils Diewald2db9ad02013-10-29 19:26:43 +000042};
43
Akron72e671f2020-08-04 11:35:40 +020044sub set_p_start {
Akronfa82f042020-08-04 12:56:29 +020045 $_[0]->[P_START] = $_[1];
Akron72e671f2020-08-04 11:35:40 +020046};
47
Akronfa82f042020-08-04 12:56:29 +020048sub get_p_start {
49 $_[0]->[P_START]
Nils Diewald2db9ad02013-10-29 19:26:43 +000050};
51
Akron72e671f2020-08-04 11:35:40 +020052sub set_p_end {
Akronfa82f042020-08-04 12:56:29 +020053 $_[0]->[P_END] = $_[1];
Akron72e671f2020-08-04 11:35:40 +020054};
55
Akronfa82f042020-08-04 12:56:29 +020056sub get_p_end {
57 $_[0]->[P_END];
Nils Diewald2db9ad02013-10-29 19:26:43 +000058};
59
Akronfa82f042020-08-04 12:56:29 +020060sub set_id {
61 $_[0]->[ID] = $_[1];
62};
63
64sub get_id {
65 $_[0]->[ID];
66};
67
68sub set_content {
69 $_[0]->[CONTENT] = $_[1];
70};
71
72sub get_content {
73 $_[0]->[CONTENT];
Nils Diewald2db9ad02013-10-29 19:26:43 +000074};
75
Nils Diewald7364d1f2013-11-05 19:26:35 +000076sub dom {
Akronfa82f042020-08-04 12:56:29 +020077 if ($_[0]->[DOM]) {
78 return $_[0]->[DOM];
Nils Diewald7364d1f2013-11-05 19:26:35 +000079 }
80 else {
Akronfa82f042020-08-04 12:56:29 +020081 my $c = Mojo::DOM->new($_[0]->[CONTENT]);
Nils Diewald7364d1f2013-11-05 19:26:35 +000082 $c->xml(1);
Akronfa82f042020-08-04 12:56:29 +020083 return $_[0]->[DOM] = $c;
Nils Diewald2db9ad02013-10-29 19:26:43 +000084 };
Nils Diewald7364d1f2013-11-05 19:26:35 +000085};
86
Akronfa82f042020-08-04 12:56:29 +020087sub set_hash {
88 $_[0]->[HASH] = $_[1];
Nils Diewald2db9ad02013-10-29 19:26:43 +000089};
90
Akronfa82f042020-08-04 12:56:29 +020091sub get_hash {
92 return $_[0]->[HASH];
Akron1622dd92015-12-09 22:34:26 +010093};
94
Akronfa82f042020-08-04 12:56:29 +020095sub set_milestone {
96 $_[0]->[MILESTONE] = 1;
Akron1622dd92015-12-09 22:34:26 +010097};
98
Akronfa82f042020-08-04 12:56:29 +020099sub get_milestone {
100 $_[0]->[MILESTONE] ? 1 : 0;
101};
102
103sub set_pti {
104 $_[0]->[PTI] = $_[1];
105};
106
107sub get_pti {
108 $_[0]->[PTI];
109};
Akron1622dd92015-12-09 22:34:26 +0100110
Nils Diewald7b847222014-04-23 11:14:00 +0000111sub to_string {
112 my $v = shift;
113 {
114 no warnings;
Akronfa82f042020-08-04 12:56:29 +0200115 return '[(' . $v->[O_START] . ':' . $v->[O_END] . '|' .
116 $v->[P_START] . ':' . $v->[P_END] . ')' .
117 $v->[ID] . '-' .$v->[CONTENT] . ']';
Nils Diewald7b847222014-04-23 11:14:00 +0000118 };
119};
120
Akronb62d92a2020-03-01 16:32:00 +0100121# Clone the span
122sub clone {
Akronfa82f042020-08-04 12:56:29 +0200123 # TODO:
124 # Optionally clone without DOM and treat hash specially
Akronb62d92a2020-03-01 16:32:00 +0100125 return Clone::clone(shift);
126};
127
128
Nils Diewald2db9ad02013-10-29 19:26:43 +00001291;