| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
package Kephra::File::IO; |
|
2
|
|
|
|
|
|
|
our $VERSION = '0.20'; |
|
3
|
|
|
|
|
|
|
|
|
4
|
1
|
|
|
1
|
|
1241
|
use strict; |
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
35
|
|
|
5
|
1
|
|
|
1
|
|
6
|
use warnings; |
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
720
|
|
|
6
|
|
|
|
|
|
|
|
|
7
|
|
|
|
|
|
|
# read a file into a scintilla buffer, is much faster then open_buffer |
|
8
|
|
|
|
|
|
|
sub open_buffer { |
|
9
|
0
|
|
|
0
|
0
|
|
my $doc_nr = shift; |
|
10
|
0
|
|
0
|
|
|
|
my $file = shift || Kephra::Document::Data::get_file_path($doc_nr); |
|
11
|
0
|
|
0
|
|
|
|
my $ep = shift || Kephra::Document::Data::_ep($doc_nr); |
|
12
|
0
|
|
|
|
|
|
my $err_txt= Kephra::API::localisation->{dialog}{error}; |
|
13
|
0
|
|
|
|
|
|
my $input; |
|
14
|
0
|
0
|
|
|
|
|
unless ($file) { |
|
15
|
0
|
|
|
|
|
|
Kephra::Dialog::warning_box("file_read " . $err_txt->{no_param}, $err_txt->{general} ); |
|
16
|
|
|
|
|
|
|
} else { |
|
17
|
0
|
0
|
|
|
|
|
unless ( -r $file ) { |
|
18
|
0
|
|
|
|
|
|
Kephra::Dialog::warning_box( $err_txt->{file_read} . " " . $file, $err_txt->{file} ); |
|
19
|
|
|
|
|
|
|
} else { |
|
20
|
0
|
|
|
|
|
|
my $did_open = open my $FH,'<', $file; |
|
21
|
0
|
0
|
|
|
|
|
unless ($did_open){ |
|
22
|
0
|
|
|
|
|
|
Kephra::Dialog::warning_box($err_txt->{file_read} . " $file", $err_txt->{file}); |
|
23
|
0
|
|
|
|
|
|
return 0; |
|
24
|
|
|
|
|
|
|
} |
|
25
|
0
|
|
|
|
|
|
my $codepage = Kephra::Document::Data::get_attribute('codepage', $doc_nr); |
|
26
|
0
|
0
|
|
|
|
|
if ($codepage eq 'auto'){ |
|
27
|
0
|
|
|
|
|
|
binmode $FH; |
|
28
|
0
|
|
|
|
|
|
read $FH, my $probe, 20000; |
|
29
|
0
|
0
|
|
|
|
|
if ($probe){ |
|
30
|
0
|
|
|
|
|
|
my $enc = Encode::Guess::guess_encoding( $probe, 'latin1' ); |
|
31
|
0
|
|
|
|
|
|
seek $FH, 0, 0; |
|
32
|
0
|
0
|
|
|
|
|
$codepage = $enc =~ /utf8/ ? 'utf8' : '8bit'; |
|
33
|
0
|
|
|
|
|
|
Kephra::Document::Data::set_attribute('codepage', $codepage, $doc_nr); |
|
34
|
|
|
|
|
|
|
} else { |
|
35
|
0
|
|
|
|
|
|
$codepage = Kephra::File::_config->{defaultsettings}{new}{codepage}; |
|
36
|
|
|
|
|
|
|
} |
|
37
|
0
|
|
|
|
|
|
Kephra::Document::Data::set_attribute('codepage', $codepage, $doc_nr); |
|
38
|
|
|
|
|
|
|
} |
|
39
|
0
|
0
|
|
|
|
|
binmode $FH, $codepage eq 'utf8' ? ":utf8" : ":raw"; # ":encoding(utf8)" |
|
40
|
0
|
|
|
|
|
|
Kephra::EventTable::freeze('document.text.change'); |
|
41
|
0
|
|
|
|
|
|
my $content = do { local $/; <$FH> }; |
|
|
0
|
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
|
|
42
|
0
|
0
|
|
|
|
|
$ep->AddText( $content ) if defined $content; |
|
43
|
0
|
|
|
|
|
|
Kephra::EventTable::thaw('document.text.change'); |
|
44
|
0
|
|
|
|
|
|
return 1; |
|
45
|
|
|
|
|
|
|
} |
|
46
|
|
|
|
|
|
|
} |
|
47
|
0
|
|
|
|
|
|
return 0; |
|
48
|
|
|
|
|
|
|
} |
|
49
|
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
|
# wite into file from buffer variable |
|
51
|
|
|
|
|
|
|
sub write_buffer { |
|
52
|
0
|
|
0
|
0
|
0
|
|
my $doc_nr = shift || Kephra::Document::Data::current_nr(); |
|
53
|
0
|
|
0
|
|
|
|
my $file = shift || Kephra::Document::Data::get_file_path($doc_nr); |
|
54
|
0
|
|
0
|
|
|
|
my $ep = shift || Kephra::Document::Data::_ep($doc_nr); |
|
55
|
0
|
|
|
|
|
|
my $err_txt = Kephra::API::localisation->{dialog}{error}; |
|
56
|
|
|
|
|
|
|
# check if there is a name or if file that you overwrite is locked |
|
57
|
0
|
0
|
0
|
|
|
|
if ( not $file or (-e $file and not -w $file) ) { |
|
|
|
|
0
|
|
|
|
|
|
58
|
0
|
|
|
|
|
|
Kephra::Dialog::warning_box |
|
59
|
|
|
|
|
|
|
("file_write " . $err_txt->{'no_param'}, $err_txt->{general} ); |
|
60
|
|
|
|
|
|
|
} else { |
|
61
|
0
|
|
|
|
|
|
my $codepage = Kephra::Document::Data::get_attribute('codepage', $doc_nr); |
|
62
|
0
|
|
|
|
|
|
my $did_open = open my $FH, '>', $file; |
|
63
|
0
|
0
|
|
|
|
|
unless ($did_open){ |
|
64
|
0
|
|
|
|
|
|
Kephra::Dialog::warning_box($err_txt->{file_write} . " $file", $err_txt->{file} ); |
|
65
|
0
|
|
|
|
|
|
return 0; |
|
66
|
|
|
|
|
|
|
} |
|
67
|
0
|
0
|
|
|
|
|
binmode $FH, $codepage eq 'utf8' ? ":utf8" : ":raw"; # ":encoding(utf8)" |
|
68
|
0
|
|
|
|
|
|
print $FH $ep->GetText(); |
|
69
|
|
|
|
|
|
|
} |
|
70
|
|
|
|
|
|
|
} |
|
71
|
|
|
|
|
|
|
|
|
72
|
|
|
|
|
|
|
|
|
73
|
|
|
|
|
|
|
sub get_age { |
|
74
|
0
|
|
|
0
|
0
|
|
my $file = shift; |
|
75
|
0
|
0
|
|
|
|
|
return (stat $file)[9] if -e $file; |
|
76
|
|
|
|
|
|
|
} |
|
77
|
|
|
|
|
|
|
|
|
78
|
|
|
|
|
|
|
1; |