#!perl
use
5.010001;
our
$VERBOSE
= 0;
die
if
not Getopt::Long::GetOptions(
verbose
=> \
$VERBOSE
);
my
$dsl
=
<<'=== END OF DSL ===';
:start ::= test
test ::= [\w] | [\W]
=== END OF DSL ===
my
$NEL
=
pack
(
'U'
, 0x85);
my
$input
=
"1\x{0A}2\x{0D}3\x{0D}\x{0A}4${NEL}5\x{0A}\x{0D}\x{0A}7"
. (
"\x{0A}\x{0D}"
x 4 )
. (
"\x{0D}"
x 3 )
.
"\x{85}"
. (
"\x{0A}"
x 3 )
. (
"\x{0A}\x{0D}"
x 4 )
.
'24'
;
my
$g
= Marpa::R3::Scanless::G->new({
source
=> \
$dsl
});
my
$r
= Marpa::R3::Scanless::R->new({
grammar
=>
$g
});
$r
->
read
(\
$input
, 0, 0);
my
@actual
= ();
for
my
$i
(0 ..
length
$input
) {
my
(
$line
,
$column
) =
$r
->line_column(
$i
);
if
(
$VERBOSE
) {
my
$text
=
substr
$input
,
$i
, 20;
$text
=~ s/\n/\\n/g;
$text
=~ s/\r/\\r/g;
say
join
" "
,
$line
,
$column
,
$text
;
}
push
@actual
,
join
q{ }
,
$line
,
$column
;
}
my
$actual
=
join
"\n"
,
@actual
,
q{}
;
my
$line_data
=
<<'END_OF_LINE_DATA';
1 1 1\n2\r3\r\n4�5\n\r\n7\n\r\n\r\n\r
1 2 \n2\r3\r\n4�5\n\r\n7\n\r\n\r\n\r\n
2 1 2\r3\r\n4�5\n\r\n7\n\r\n\r\n\r\n\r
2 2 \r3\r\n4�5\n\r\n7\n\r\n\r\n\r\n\r\r
3 1 3\r\n4�5\n\r\n7\n\r\n\r\n\r\n\r\r\r
3 2 \r\n4�5\n\r\n7\n\r\n\r\n\r\n\r\r\r\r
3 3 \n4�5\n\r\n7\n\r\n\r\n\r\n\r\r\r\r�
4 1 4�5\n\r\n7\n\r\n\r\n\r\n\r\r\r\r�\n
4 2 �5\n\r\n7\n\r\n\r\n\r\n\r\r\r\r�\n\n
5 1 5\n\r\n7\n\r\n\r\n\r\n\r\r\r\r�\n\n\n
5 2 \n\r\n7\n\r\n\r\n\r\n\r\r\r\r�\n\n\n\n
6 1 \r\n7\n\r\n\r\n\r\n\r\r\r\r�\n\n\n\n\r
6 2 \n7\n\r\n\r\n\r\n\r\r\r\r�\n\n\n\n\r\n
7 1 7\n\r\n\r\n\r\n\r\r\r\r�\n\n\n\n\r\n\r
7 2 \n\r\n\r\n\r\n\r\r\r\r�\n\n\n\n\r\n\r\n
8 1 \r\n\r\n\r\n\r\r\r\r�\n\n\n\n\r\n\r\n\r
8 2 \n\r\n\r\n\r\r\r\r�\n\n\n\n\r\n\r\n\r\n
9 1 \r\n\r\n\r\r\r\r�\n\n\n\n\r\n\r\n\r\n\r
9 2 \n\r\n\r\r\r\r�\n\n\n\n\r\n\r\n\r\n\r2
10 1 \r\n\r\r\r\r�\n\n\n\n\r\n\r\n\r\n\r24
10 2 \n\r\r\r\r�\n\n\n\n\r\n\r\n\r\n\r24
11 1 \r\r\r\r�\n\n\n\n\r\n\r\n\r\n\r24
12 1 \r\r\r�\n\n\n\n\r\n\r\n\r\n\r24
13 1 \r\r�\n\n\n\n\r\n\r\n\r\n\r24
14 1 \r�\n\n\n\n\r\n\r\n\r\n\r24
15 1 �\n\n\n\n\r\n\r\n\r\n\r24
16 1 \n\n\n\n\r\n\r\n\r\n\r24
17 1 \n\n\n\r\n\r\n\r\n\r24
18 1 \n\n\r\n\r\n\r\n\r24
19 1 \n\r\n\r\n\r\n\r24
20 1 \r\n\r\n\r\n\r24
20 2 \n\r\n\r\n\r24
21 1 \r\n\r\n\r24
21 2 \n\r\n\r24
22 1 \r\n\r24
22 2 \n\r24
23 1 \r24
24 1 24
24 2 4
24 3
END_OF_LINE_DATA
my
@expected
= ();
for
my
$line
(
split
$RS
,
$line_data
)
{
chomp
$line
;
$line
=~ s/\A(\d+ \s+ \d+) \s .*\z/$1/xms;
push
@expected
,
$line
;
}
my
$expected
=
join
"\n"
,
@expected
,
q{}
;
Marpa::R3::Test::is(
$actual
,
$expected
,
"Line and column test"
);