blob: c024010dcc77fffb86c2bd7c70f2019d533b93e9 [file] [log] [blame]
Akron4a46e6e2017-08-16 17:49:16 +02001package Krawfish::Koral::Document::Annotation;
Akrondd10fb92017-08-08 20:19:46 +02002use Krawfish::Util::String qw/squote/;
3use warnings;
4use strict;
Akron290f59f2017-08-17 21:55:07 +02005use Krawfish::Koral::Query::Term;
Akrondd10fb92017-08-08 20:19:46 +02006
Akron14ff0c42017-08-09 20:49:52 +02007# Accepts a Krawfish::Koral::Query::Term object
Akrondd10fb92017-08-08 20:19:46 +02008sub new {
9 my $class = shift;
10 bless {
11 term => shift,
12 data => [@_]
13 }, $class;
14};
15
16
17sub term {
18 $_[0]->{term};
19};
20
21
22sub data {
23 $_[0]->{data}
24};
25
26
Akron14ff0c42017-08-09 20:49:52 +020027sub foundry_id {
28 $_[0]->{foundry_id} // 0;
29};
30
31
32sub layer_id {
33 $_[0]->{layer_id} // 0;
34};
35
36
Akron31e15b82017-08-10 21:02:58 +020037sub type {
38 $_[0]->{term}->term_type;
39};
40
Akron14ff0c42017-08-09 20:49:52 +020041sub term_id {
42 $_[0]->{term_id};
43};
44
45
Akrondd10fb92017-08-08 20:19:46 +020046sub identify {
47 my ($self, $dict) = @_;
Akrondd10fb92017-08-08 20:19:46 +020048
Akron14ff0c42017-08-09 20:49:52 +020049 my $term_id;
50 my $term = $self->{term};
51 my $term_str = $term->to_term;
52
53 $term_id = $dict->term_id_by_term($term_str);
54
55 # Term id is already known!
56 if ($term_id) {
Akrondd10fb92017-08-08 20:19:46 +020057 $self->{term_id} = $term_id;
Akrond15e2bb2017-08-11 18:23:14 +020058 $self->{foundry_id} = $dict->term_id_by_term('^' . $term->foundry) if $term->foundry;
59 $self->{layer_id} = $dict->term_id_by_term('°' . $term->layer) if $term->layer;
Akron14ff0c42017-08-09 20:49:52 +020060 return $self;
Akrondd10fb92017-08-08 20:19:46 +020061 }
Akron14ff0c42017-08-09 20:49:52 +020062
63 # Term id is not yet given
Akrondd10fb92017-08-08 20:19:46 +020064 else {
Akron14ff0c42017-08-09 20:49:52 +020065 $self->{term_id} = $dict->add_term($term_str);
66 };
67
68 # Get term_id for foundry
69 if ($term->foundry) {
70 $term_id = $dict->term_id_by_term('^' . $term->foundry);
71 $self->{foundry_id} = $term_id ? $term_id :
72 $dict->add_term('^' . $term->foundry);
73 };
74
75 # Get term_id for layer
76 if ($term->layer) {
77 $term_id = $dict->term_id_by_term('°' . $term->layer);
78 $self->{layer_id} = $term_id ? $term_id :
79 $dict->add_term('°' . $term->layer);
Akrondd10fb92017-08-08 20:19:46 +020080 };
81
82 return $self;
83};
84
85
86sub to_string {
87 my $self = shift;
88 my $str = '';
89
90 if ($self->{term_id}) {
91 $str .= $self->{term_id};
92 }
93
94 else {
Akron14ff0c42017-08-09 20:49:52 +020095 $str .= squote($self->{term}->to_term);
Akrondd10fb92017-08-08 20:19:46 +020096 };
Akron14ff0c42017-08-09 20:49:52 +020097 return $str . '$' . join(',', @{$self->{data}});
Akrondd10fb92017-08-08 20:19:46 +020098};
99
1001;