use strict; package Adapters::TMX; use XML::TMX::Reader; sub new { my $class = shift; my ($path, $src_lang, $trg_lang) = @_; my $self = { tmx_path => $path, tmx_reader => new XML::TMX::Reader($path), src_lang => $src_lang, trg_lang => $trg_lang, segs => [], current_src => undef, current_trg => undef, tu_no => -1, }; $self->{tmx_reader}->for_tu( sub { my $tu = shift; my $srcl = $self->{src_lang}; my $trgl = $self->{trg_lang}; my $src_seg = ""; my $trg_seg = ""; if(exists($tu->{$srcl}) and exists($tu->{$srcl}->{-seg})) { $src_seg = $tu->{$srcl}->{-seg}; } if(exists($tu->{$trgl}) and exists($tu->{$trgl}->{-seg})) { $trg_seg = $tu->{$trgl}->{-seg}; } push(@{$self->{segs}}, [$src_seg, $trg_seg]); } ); bless $self, $class; return $self; } sub HasNext() { my $self = shift; if($self->{tu_no} < @{$self->{segs}}) { $self->{current_src} = $self->{segs}->[$self->{tu_no}]->[0]; $self->{current_trg} = $self->{segs}->[$self->{tu_no}]->[1]; chomp($self->{current_src}, $self->{current_trg}); $self->{tu_no}++; return 1; } else { return 0; } } sub CurrentSource { my $self = shift; return $self->{current_src}; } sub CurrentTarget { my $self = shift; return $self->{current_trg}; } sub LineNo { my $self = shift; return $self->{tu_no}; } sub Reset { my $self = shift; $self->{tu_no} = -1; } 1;