~ubuntu-branches/ubuntu/dapper/sgmltexi/dapper

« back to all changes in this revision

Viewing changes to bin/sgmltexi

  • Committer: Bazaar Package Importer
  • Author(s): Gaetano Paolone (bigpaul)
  • Date: 2004-01-05 20:04:06 UTC
  • Revision ID: james.westby@ubuntu.com-20040105200406-qt6ax0cotplbpded
Tags: 2003.00.00-2
* Description improved
  (closes: #209695)
* closing NMU: (closes: #148141)
  (closes: #144278)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/perl
 
2
#=======================================================================
 
3
# Copyright (C) 2000-2003 Daniele Giacomini <daniele@swlibero.org>
 
4
#
 
5
# This program is free software; you can redistribute it and/or modify
 
6
# it under the terms of the GNU General Public License as published by
 
7
# the Free Software Foundation; either version 2 of the License, or
 
8
# (at your option) any later version.
 
9
#
 
10
# This program is distributed in the hope that it will be useful, but
 
11
# WITHOUT ANY WARRANTY; without even the implied warranty of
 
12
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 
13
# General Public License for more details.
 
14
#
 
15
# You should have received a copy of the GNU General Public License
 
16
# along with this program; if not, write to the Free Software
 
17
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
18
#
 
19
# Written by Daniele Giacomini <daniele@swlibero.org>
 
20
#=======================================================================
 
21
# sgmltexi OPTION... SGML_SOURCE
 
22
#
 
23
# Front-end for the SGML to Texinfo system.
 
24
#=======================================================================
 
25
 
 
26
use POSIX;
 
27
use Locale::gettext;
 
28
setlocale (LC_MESSAGES, "");
 
29
textdomain ("sgmltexi");
 
30
 
 
31
#sub gettext
 
32
#{
 
33
#    return $_[0];
 
34
#}
 
35
 
 
36
# Program version.
 
37
$VERSION = "2003.00.00";
 
38
 
 
39
# Configuration files.
 
40
$CATALOG = "/usr/share/sgml/sgmltexi/sgmltexi.cat";
 
41
 
 
42
#=======================================================================
 
43
# Global variables that should not be modified by hand.
 
44
#=======================================================================
 
45
 
 
46
# Program name.
 
47
$program_canonical_name = "Sgmltexi";
 
48
 
 
49
# Program executable without path.
 
50
$program_executable = $0;
 
51
$program_executable =~ m{([^/]*)$};
 
52
$program_executable = $1;
 
53
 
 
54
# List of other temporary files that must be deleted at the end of
 
55
# elaboration.
 
56
$temp_files_list = "";
 
57
 
 
58
#=======================================================================
 
59
# Functions.
 
60
#=======================================================================
 
61
 
 
62
#-----------------------------------------------------------------------
 
63
# Show the right syntax for the use of this program.
 
64
#
 
65
# &help_syntax ()
 
66
#
 
67
sub help_syntax
 
68
{
 
69
    print STDOUT (sprintf (gettext
 
70
        ( "Usage: %s OPTIONS... SGML_SOURCE\n"
 
71
        . "       %s --help\n"
 
72
        . "       %s --version\n"
 
73
        . "\n"
 
74
        . "Front-end for the SGML to Texinfo system.\n"
 
75
        . "\n"
 
76
        . "Options:\n"
 
77
        . "--help        display this help and exit.\n"
 
78
        . "--version     display version information and exit.\n"
 
79
        . "--force       force things.\n"
 
80
        . "--number-sections\n"
 
81
        . "              add sections numbering when usually disabled.\n"
 
82
        . "--clean       remove stale files associated with the source name.\n"
 
83
        . "--verbose     show more messages.\n"
 
84
        . "--input-encoding=ENCODING\n"
 
85
        . "              input encoding ISO-8859-n.\n"
 
86
        . "--sgml-include=PARAMETER_ENTITY\n"
 
87
        . "--include=PARAMETER_ENTITY\n"
 
88
        . "              assign \"INCLUDE\" to an SGML parameter entity.\n"
 
89
        . "--paper=PAPER\n"
 
90
        . "              define the paper format: \"letter\", \"a4\",\n"
 
91
        . "                \"a4latex\", \"a4wide\", \"a5\", \"small\".\n"
 
92
        . "--setchapternewpage={on|off|odd}\n"
 
93
        . "              define the chapter paper feed, overriding the tag\n"
 
94
        . "                <setchapternewpage content=\"...\"> inside the source.\n"
 
95
        . "--footnotestyle={end|separate}\n"
 
96
        . "              define the footnote location, overriding the tag\n"
 
97
        . "                <footnotestyle content=\"...\"> inside the source.\n"
 
98
        . "--headings={on|off|single|double|singleafter|doubleafter}\n"
 
99
        . "              turn page headings on or off, and/or specify single-sided\n"
 
100
        . "              or double-sided page headings for printing. It overrides the"
 
101
        . "                tag <headings content=\"...\"> inside the source.\n"
 
102
        . "--sgml-syntax, --sgml-check\n"
 
103
        . "              check SGML syntax and report errors.\n"
 
104
        . "--sp          SP output for debugging purpose.\n"
 
105
        . "--texi, --texinfo\n"
 
106
        . "              generate a Texinfo source output.\n"
 
107
        . "--dvi         generate a DVI output.\n"
 
108
        . "--ps, --postscript\n"
 
109
        . "              generate a PostScript output.\n"
 
110
        . "--pdf         generate a PDF output.\n"
 
111
        . "--info        generate an Info output.\n"
 
112
        . "--text        generate a text output.\n"
 
113
        . "--html        generate an HTML output.\n"
 
114
        . "--xml         generate an XML Texinfo output.\n"
 
115
        . "--docbook     generate an XML Docbook output.\n"
 
116
        . "\n"
 
117
        . "Arguments:\n"
 
118
        . "SGML_SOURCE   the SGML input file.\n"
 
119
        . "\n"
 
120
        . "Report bugs to <daniele\@swlibero.org>\n"),
 
121
        $program_executable, $program_executable, $program_executable));
 
122
}
 
123
 
 
124
#-----------------------------------------------------------------------
 
125
# Show version information.
 
126
#
 
127
# &version_info ()
 
128
#
 
129
sub version_info
 
130
{
 
131
    print STDOUT (sprintf (gettext
 
132
        ( "%s %s\n"
 
133
        . "\n"
 
134
        . "Copyright (C) Daniele Giacomini <daniele\@swlibero.org>\n"
 
135
        . "This is free software; see the source for copying conditions.\n"
 
136
        . "There is NO warranty; not even for MERCHANTABILITY or FITNESS\n"
 
137
        . "FOR A PARTICULAR PURPOSE.\n"
 
138
        . "\n"
 
139
        . "Written by Daniele Giacomini <daniele\@swlibero.org>\n" ),
 
140
        $program_canonical_name, $VERSION));
 
141
}
 
142
 
 
143
#-----------------------------------------------------------------------
 
144
# Define a temporary file.
 
145
#
 
146
# &temporary_file ()
 
147
#
 
148
sub temporary_file
 
149
{
 
150
    local( $temp_dir ) = "";
 
151
    local( $random_number ) = 0;
 
152
    local( $random_file_name ) = "";
 
153
 
 
154
    # Check for temp dir.
 
155
    if (-d $ENV{TEMPDIR}
 
156
        && -r $ENV{TEMPDIR}
 
157
        && -w $ENV{TEMPDIR}
 
158
        && -x $ENV{TEMPDIR})
 
159
      {
 
160
        # This directory is good.
 
161
        $temp_dir = $ENV{TEMPDIR};
 
162
      }
 
163
    elsif (-d "/tmp" && -r "/tmp" && -w "/tmp" && -x "/tmp")
 
164
      {
 
165
        # This other directory is good.
 
166
        $temp_dir = "/tmp";
 
167
      }
 
168
    elsif (-r "." && -w "." && -x ".")
 
169
      {
 
170
        # Current directory is good.
 
171
        $temp_dir = ".";
 
172
      }
 
173
    else
 
174
      {
 
175
        # We cannot use any temporary file!
 
176
        printf STDERR (gettext ("%s: cannot create any temporary file!\n"),
 
177
                       $program_executable);
 
178
        exit 1;
 
179
      }
 
180
 
 
181
    # If we are here, we have a valid temporary directory.
 
182
    # We try to find a good name for the file.
 
183
    while (1)
 
184
      {
 
185
        # Define the random number (six digits).
 
186
        $random_number = int ((rand) * 1000000);
 
187
        # Define the random file name: TF...tmp.
 
188
        $random_file_name = "$temp_dir/TF$random_number.tmp";
 
189
        # Check if it is new.
 
190
        if (-e $random_file_name)
 
191
          {
 
192
            # The file exists already.
 
193
            next;
 
194
          }
 
195
        else
 
196
          {
 
197
            if (open (TEMP_FILE, "> $random_file_name"))
 
198
              {
 
199
                # It works.
 
200
                close( TEMP_FILE );
 
201
                last;
 
202
              }
 
203
            else
 
204
              {
 
205
                # Don't know what to do.
 
206
                printf STDERR
 
207
                  (gettext ("%s: cannot create the temporary file %s\n"),
 
208
                   $program_executable, $random_file_name);
 
209
                next;
 
210
              }
 
211
 
 
212
            # This point cannot be reached.
 
213
            printf STDERR
 
214
              (gettext ("%s: function %s unknown error 1\n"),
 
215
               $program_executable, "&temporary_file()");
 
216
          }
 
217
 
 
218
        # This point cannot be reached.
 
219
        printf STDERR
 
220
          (gettext ("%s: function %s unknown error 2\n"),
 
221
           $program_executable, "&temporary_file()");
 
222
      }         
 
223
 
 
224
    # Return the file name.
 
225
    return ("$random_file_name");
 
226
}
 
227
 
 
228
#-----------------------------------------------------------------------
 
229
# Determinate the file name without extention.
 
230
#
 
231
# &root_name (FILE_NAME, EXTENTION)
 
232
#
 
233
sub root_name
 
234
{
 
235
    local( $file_name ) = $_[0];
 
236
    local( $extention_name ) = $_[1];
 
237
    local( $root_name ) = "";
 
238
    
 
239
    $file_name =~ m/^(.*)$extention_name$/;
 
240
    $root_name = $1;
 
241
    if ($root_name eq "")
 
242
      {
 
243
        # The extention is not the same.
 
244
        $root_name = $file_name;
 
245
      }
 
246
    return ("$root_name");
 
247
} # &root_name
 
248
 
 
249
#-----------------------------------------------------------------------
 
250
# Translate a positive integer into an alphabet sequence:
 
251
# from A to CZ.
 
252
#
 
253
# &integer_to_alphabet (INTEGER)
 
254
#
 
255
sub integer_to_alphabet
 
256
{
 
257
    local ($n) = $_[0];
 
258
 
 
259
    #-------------------------------------------------------------------
 
260
    # Generate an alphabet digit.
 
261
    # 1 -> A, 2 -> B,... 26 -> Z
 
262
    #
 
263
    # &alphabet_digit (1-26)
 
264
    #
 
265
    sub alphabet_digit
 
266
    {
 
267
        local ($digit) = $_[0];
 
268
 
 
269
        if ($digit == 0)
 
270
          {
 
271
            return ("");
 
272
          }
 
273
        elsif ($digit == 1){
 
274
            return ("A");
 
275
          }
 
276
        elsif ($digit == 2)
 
277
          {
 
278
            return ("B");
 
279
          }
 
280
        elsif ($digit == 3)
 
281
          {
 
282
            return ("C");
 
283
          }
 
284
        elsif ($digit == 4)
 
285
          {
 
286
            return ("D");
 
287
          }
 
288
        elsif ($digit == 5)
 
289
          {
 
290
            return ("E");
 
291
          }
 
292
        elsif ($digit == 6)
 
293
          {
 
294
            return ("F");
 
295
          }
 
296
        elsif ($digit == 7)
 
297
          {
 
298
            return ("G");
 
299
          }
 
300
        elsif ($digit == 8)
 
301
          {
 
302
            return ("H");
 
303
          }
 
304
        elsif ($digit == 9)
 
305
          {
 
306
            return ("I");
 
307
          }
 
308
        elsif ($digit == 10)
 
309
          {
 
310
            return ("J");
 
311
          }
 
312
        elsif ($digit == 11)
 
313
          {
 
314
            return ("K");
 
315
          }
 
316
        elsif ($digit == 12)
 
317
          {
 
318
            return ("L");
 
319
          }
 
320
        elsif ($digit == 13)
 
321
          {
 
322
            return ("M");
 
323
          }
 
324
        elsif ($digit == 14)
 
325
          {
 
326
            return ("N");
 
327
          }
 
328
        elsif ($digit == 15)
 
329
          {
 
330
            return ("O");
 
331
          }
 
332
        elsif ($digit == 16)
 
333
          {
 
334
            return ("P");
 
335
          }
 
336
        elsif ($digit == 17)
 
337
          {
 
338
            return ("Q");
 
339
          }
 
340
        elsif ($digit == 18)
 
341
          {
 
342
            return ("R");
 
343
          }
 
344
        elsif ($digit == 19)
 
345
          {
 
346
            return ("S");
 
347
          }
 
348
        elsif ($digit == 20)
 
349
          {
 
350
            return ("T");
 
351
          }
 
352
        elsif ($digit == 21)
 
353
          {
 
354
            return ("U");
 
355
          }
 
356
        elsif ($digit == 22)
 
357
          {
 
358
            return ("V");
 
359
          }
 
360
        elsif ($digit == 23)
 
361
          {
 
362
            return ("W");
 
363
          }
 
364
        elsif ($digit == 24)
 
365
          {
 
366
            return ("X");
 
367
          }
 
368
        elsif ($digit == 25)
 
369
          {
 
370
            return ("Y");
 
371
          }
 
372
        elsif ($digit == 26)
 
373
          {
 
374
            return ("Z");
 
375
          }
 
376
    }
 
377
 
 
378
    # Analyze the number.
 
379
    if ($n <= 0)
 
380
      {
 
381
        # We cannot translate zero or negative numbers.
 
382
        $return = "##<A##";
 
383
      }
 
384
    elsif ($n <= 26)
 
385
      {
 
386
        # We have only one letter.
 
387
        $return = &alphabet_digit($n);
 
388
      }
 
389
    elsif ($n <= 52)
 
390
      {
 
391
        # We have two letters: Ax.
 
392
        $n = $n - 26;
 
393
        $return = "A" . &alphabet_digit($n);
 
394
      }
 
395
    elsif ($n <= 78)
 
396
      {
 
397
        # We have two letters: Bx.
 
398
        $n = $n - 52;
 
399
        $return = "B" . &alphabet_digit($n);
 
400
 
 
401
      }
 
402
    elsif ($n <= 104)
 
403
      {
 
404
        # We have two letters: Cx.
 
405
        $n = $n - 78;
 
406
        $return = "C" . &alphabet_digit($n);
 
407
      }
 
408
    else
 
409
      {
 
410
        # The number is too big.
 
411
        $return = "##>CZ##";
 
412
      }
 
413
} # &integer_to_alphabet
 
414
 
 
415
#-----------------------------------------------------------------------
 
416
# Translate a positive integer into a roman string.
 
417
#
 
418
# &integer_to_roman (INTEGER)
 
419
#
 
420
sub integer_to_roman
 
421
{
 
422
    local ( $n ) = $_[0];
 
423
    local ( $digit_1 ) = 0;
 
424
    local ( $digit_2 ) = 0;
 
425
    local ( $digit_3 ) = 0;
 
426
    local ( $digit_4 ) = 0;
 
427
 
 
428
    #-------------------------------------------------------------------
 
429
    # First digit into roman: 1-9
 
430
    #
 
431
    sub digit_1_to_roman
 
432
    {
 
433
        local ( $digit ) = $_[0];
 
434
 
 
435
        if ($digit == 0)
 
436
          {
 
437
            return ("");
 
438
          }
 
439
        elsif ($digit == 1)
 
440
          {
 
441
            return ("I");
 
442
          }
 
443
        elsif ($digit == 2)
 
444
          {
 
445
            return ("II");
 
446
          }
 
447
        elsif ($digit == 3)
 
448
          {
 
449
            return ("III");
 
450
          }
 
451
        elsif ($digit == 4)
 
452
          {
 
453
            return ("IV");
 
454
          }
 
455
        elsif ($digit == 5)
 
456
          {
 
457
            return ("V");
 
458
          }
 
459
        elsif ($digit == 6)
 
460
          {
 
461
            return ("VI");
 
462
          }
 
463
        elsif ($digit == 7)
 
464
          {
 
465
            return ("VII");
 
466
          }
 
467
        elsif ($digit == 8)
 
468
          {
 
469
            return ("VIII");
 
470
          }
 
471
        elsif ($digit == 9)
 
472
          {
 
473
            return ("IX");
 
474
          }
 
475
    }
 
476
 
 
477
    #-------------------------------------------------------------------
 
478
    # Second digit into roman: 10-90
 
479
    #
 
480
    sub digit_2_to_roman
 
481
    {
 
482
        local ($digit) = $_[0];
 
483
 
 
484
        if ($digit == 0)
 
485
          {
 
486
            return ("");
 
487
          }
 
488
        elsif ($digit == 1)
 
489
          {
 
490
            return ("X");
 
491
          }
 
492
        elsif ($digit == 2)
 
493
          {
 
494
            return ("XX");
 
495
          }
 
496
        elsif ($digit == 3)
 
497
          {
 
498
            return ("XXX");
 
499
          }
 
500
        elsif ($digit == 4)
 
501
          {
 
502
            return ("XL");
 
503
          }
 
504
        elsif ($digit == 5)
 
505
          {
 
506
            return ("L");
 
507
          }
 
508
        elsif ($digit == 6)
 
509
          {
 
510
            return ("LX");
 
511
          }
 
512
        elsif ($digit == 7)
 
513
          {
 
514
            return ("LXX");
 
515
          }
 
516
        elsif ($digit == 8)
 
517
          {
 
518
            return ("LXXX");
 
519
          }
 
520
        elsif ($digit == 9)
 
521
          {
 
522
            return ("XC");
 
523
          }
 
524
    }
 
525
 
 
526
    #-------------------------------------------------------------------
 
527
    # Third digit into roman: 100-900
 
528
    #
 
529
    sub digit_3_to_roman
 
530
    {
 
531
        local ($digit) = $_[0];
 
532
 
 
533
        if ($digit == 0)
 
534
          {
 
535
            return ("");
 
536
          }
 
537
        elsif ($digit == 1)
 
538
          {
 
539
            return ("C");
 
540
          }
 
541
        elsif ($digit == 2)
 
542
          {
 
543
            return ("CC");
 
544
          }
 
545
        elsif ($digit == 3)
 
546
          {
 
547
            return ("CCC");
 
548
          }
 
549
        elsif ($digit == 4)
 
550
          {
 
551
            return ("CD");
 
552
          }
 
553
        elsif ($digit == 5)
 
554
          {
 
555
            return ("D");
 
556
          }
 
557
        elsif ($digit == 6)
 
558
          {
 
559
            return ("DC");
 
560
          }
 
561
        elsif ($digit == 7)
 
562
          {
 
563
            return ("DCC");
 
564
          }
 
565
        elsif ($digit == 8)
 
566
          {
 
567
            return ("DCCC");
 
568
          }
 
569
        elsif ($digit == 9)
 
570
          {
 
571
            return ("CM");
 
572
          }
 
573
    }
 
574
 
 
575
    #-------------------------------------------------------------------
 
576
    # Fourth digit into roman: 1000-9000
 
577
    #
 
578
    sub digit_4_to_roman
 
579
    {
 
580
        local ($digit) = $_[0];
 
581
 
 
582
        if ($digit == 0)
 
583
          {
 
584
            return ("");
 
585
          }
 
586
        elsif ($digit == 1)
 
587
          {
 
588
            return ("M");
 
589
          }
 
590
        elsif ($digit == 2)
 
591
          {
 
592
            return ("MM");
 
593
          }
 
594
        elsif ($digit == 3)
 
595
          {
 
596
            return ("MMM");
 
597
          }
 
598
        elsif ($digit == 4)
 
599
          {
 
600
            return ("MMMM");
 
601
          }
 
602
        elsif ($digit == 5)
 
603
          {
 
604
            return ("MMMMM");
 
605
          }
 
606
        elsif ($digit == 6)
 
607
          {
 
608
            return ("MMMMMM");
 
609
          }
 
610
        elsif ($digit == 7)
 
611
          {
 
612
            return ("MMMMMMM");
 
613
          }
 
614
        elsif ($digit == 8)
 
615
          {
 
616
            return ("MMMMMMMM");
 
617
          }
 
618
        elsif ($digit == 9)
 
619
          {
 
620
            return ("MMMMMMMMM");
 
621
          }
 
622
    }
 
623
 
 
624
    # Start the work.
 
625
    $digit_4 = int( $n / 1000 );
 
626
    $n = ($n - $digit_4*1000);
 
627
    $digit_3 = int( $n / 100 );
 
628
    $n = ($n - $digit_3*100);
 
629
    $digit_2 = int( $n / 10 );
 
630
    $n = ($n - $digit_2*10);
 
631
    $digit_1 = $n;
 
632
 
 
633
    return (&digit_4_to_roman($digit_4)
 
634
            . &digit_3_to_roman($digit_3)
 
635
            . &digit_2_to_roman($digit_2)
 
636
            . &digit_1_to_roman($digit_1));
 
637
} # &integer_to_roman
 
638
 
 
639
#-----------------------------------------------------------------------
 
640
# Minimal conversion into SP SDATA entities.
 
641
#
 
642
# &minimal_sp_text_to_sdata (TEXT)
 
643
#-----------------------------------------------------------------------
 
644
sub minimal_sp_text_to_sdata
 
645
{
 
646
    local ($line) = $_[0];
 
647
 
 
648
    # US-ASCII special characters for Texinfo.
 
649
    $line =~ s/\@/\\\|\[commat\]\\\|/g; # ISOnum : commercial at
 
650
    $line =~ s/\{/\\\|\[lcub  \]\\\|/g; # ISOnum : left curly bracket
 
651
    $line =~ s/\}/\\\|\[rcub  \]\\\|/g; # ISOnum : right curly bracket
 
652
 
 
653
    return ($line);
 
654
}
 
655
 
 
656
#-----------------------------------------------------------------------
 
657
# ISO 8859-1 into SP SDATA entities.
 
658
#
 
659
# &iso_8859_1_sp_text_to_sdata (TEXT)
 
660
#-----------------------------------------------------------------------
 
661
sub iso_8859_1_sp_text_to_sdata
 
662
{
 
663
    local ($line) = $_[0];
 
664
 
 
665
    $line =~ s/\xA1/\\\|\[iexcl \]\\\|/g;       # ISOnum : INVERTED EXCLAMATION MARK
 
666
    $line =~ s/\xA2/\\\|\[cent  \]\\\|/g;       # ISOnum : CENT SIGN
 
667
    $line =~ s/\xA3/\\\|\[pound \]\\\|/g;       # ISOnum : POUND SIGN
 
668
    $line =~ s/\xA4/\\\|\[curren\]\\\|/g;       # ISOnum : CURRENCY SIGN
 
669
    $line =~ s/\xA5/\\\|\[yen   \]\\\|/g;       # ISOnum : YEN SIGN
 
670
    $line =~ s/\xA6/\\\|\[brvbar\]\\\|/g;       # ISOnum : BROKEN BAR
 
671
    $line =~ s/\xA7/\\\|\[sect  \]\\\|/g;       # ISOnum : SECTION SIGN
 
672
    $line =~ s/\xA8/\\\|\[die   \]\\\|/g;       # ISOdia : DIERESIS
 
673
    $line =~ s/\xA9/\\\|\[copy  \]\\\|/g;       # ISOnum : COPYRIGHT SIGN
 
674
    $line =~ s/\xAA/\\\|\[ordf  \]\\\|/g;       # ISOnum : FEMININE ORDINAL INDICATOR
 
675
    $line =~ s/\xAB/\\\|\[laquo \]\\\|/g;       # ISOnum : LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
 
676
    $line =~ s/\xAC/\\\|\[not   \]\\\|/g;       # ISOnum : NOT SIGN
 
677
    $line =~ s/\xAD/\\\|\[shy   \]\\\|/g;       # ISOnum : SOFT HYPHEN
 
678
    $line =~ s/\xAE/\\\|\[reg   \]\\\|/g;       # ISOnum : REGISTERED SIGN
 
679
    $line =~ s/\xAF/\\\|\[macr  \]\\\|/g;       # ISOdia : OVERLINE (MACRON)
 
680
    $line =~ s/\xB0/\\\|\[deg   \]\\\|/g;       # ISOnum : DEGREE SIGN
 
681
    $line =~ s/\xB1/\\\|\[plusmn\]\\\|/g;       # ISOnum : PLUS-MINUS SIGN
 
682
    $line =~ s/\xB2/\\\|\[sup2  \]\\\|/g;       # ISOnum : SUPERSCRIPT TWO
 
683
    $line =~ s/\xB3/\\\|\[sup3  \]\\\|/g;       # ISOnum : SUPERSCRIPT THREE
 
684
    $line =~ s/\xB4/\\\|\[acute \]\\\|/g;       # ISOdia : ACUTE ACCENT
 
685
    $line =~ s/\xB5/\\\|\[micro \]\\\|/g;       # ISOnum : MICRO SIGN
 
686
    $line =~ s/\xB6/\\\|\[para  \]\\\|/g;       # ISOnum : PILCROW SIGN
 
687
    $line =~ s/\xB7/\\\|\[middot\]\\\|/g;       # ISOnum : MIDDLE DOT
 
688
    $line =~ s/\xB8/\\\|\[cedil \]\\\|/g;       # ISOdia : CEDILLA
 
689
    $line =~ s/\xB9/\\\|\[sup1  \]\\\|/g;       # ISOnum : SUPERSCRIPT ONE
 
690
    $line =~ s/\xBA/\\\|\[ordm  \]\\\|/g;       # ISOnum : MASCULINE ORDINAL INDICATOR
 
691
    $line =~ s/\xBB/\\\|\[raquo \]\\\|/g;       # ISOnum : RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
 
692
    $line =~ s/\xBC/\\\|\[frac14\]\\\|/g;       # ISOnum : VULGAR FRACTION ONE QUARTER
 
693
    $line =~ s/\xBD/\\\|\[frac12\]\\\|/g;       # ISOnum : VULGAR FRACTION ONE HALF
 
694
    $line =~ s/\xBE/\\\|\[frac34\]\\\|/g;       # ISOnum : VULGAR FRACTION THREE QUARTERS
 
695
    $line =~ s/\xBF/\\\|\[iquest\]\\\|/g;       # ISOnum : INVERTED QUESTION MARK
 
696
    $line =~ s/\xC0/\\\|\[Agrave\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER A WITH GRAVE
 
697
    $line =~ s/\xC1/\\\|\[Aacute\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER A WITH ACUTE
 
698
    $line =~ s/\xC2/\\\|\[Acirc \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER A WITH CIRCUMFLEX
 
699
    $line =~ s/\xC3/\\\|\[Atilde\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER A WITH TILDE
 
700
    $line =~ s/\xC4/\\\|\[Auml  \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER A WITH DIERESIS
 
701
    $line =~ s/\xC5/\\\|\[Aring \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER A WITH RING ABOVE
 
702
    $line =~ s/\xC6/\\\|\[AElig \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER AE
 
703
    $line =~ s/\xC7/\\\|\[Ccedil\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER C WITH CEDILLA
 
704
    $line =~ s/\xC8/\\\|\[Egrave\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER E WITH GRAVE
 
705
    $line =~ s/\xC9/\\\|\[Eacute\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER E WITH ACUTE
 
706
    $line =~ s/\xCA/\\\|\[Ecirc \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER E WITH CIRCUMFLEX
 
707
    $line =~ s/\xCB/\\\|\[Euml  \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER E WITH DIERESIS
 
708
    $line =~ s/\xCC/\\\|\[Igrave\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER I WITH GRAVE
 
709
    $line =~ s/\xCD/\\\|\[Iacute\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER I WITH ACUTE
 
710
    $line =~ s/\xCE/\\\|\[Icirc \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER I WITH CIRCUMFLEX
 
711
    $line =~ s/\xCF/\\\|\[Iuml  \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER I WITH DIERESIS
 
712
    $line =~ s/\xD0/\\\|\[ETH   \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER ETH (Icelandic)
 
713
    $line =~ s/\xD1/\\\|\[Ntilde\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER N WITH TILDE
 
714
    $line =~ s/\xD2/\\\|\[Ograve\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER O WITH GRAVE
 
715
    $line =~ s/\xD3/\\\|\[Oacute\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER O WITH ACUTE
 
716
    $line =~ s/\xD4/\\\|\[Ocirc \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER O WITH CIRCUMFLEX
 
717
    $line =~ s/\xD5/\\\|\[Otilde\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER O WITH TILDE
 
718
    $line =~ s/\xD6/\\\|\[Ouml  \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER O WITH DIERESIS
 
719
    $line =~ s/\xD7/\\\|\[times \]\\\|/g;       # ISOnum : MULTIPLICATION SIGN
 
720
    $line =~ s/\xD8/\\\|\[Oslash\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER O WITH STROKE
 
721
    $line =~ s/\xD9/\\\|\[Ugrave\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER U WITH GRAVE
 
722
    $line =~ s/\xDA/\\\|\[Uacute\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER U WITH ACUTE
 
723
    $line =~ s/\xDB/\\\|\[Ucirc \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER U WITH CIRCUMFLEX
 
724
    $line =~ s/\xDC/\\\|\[Uuml  \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER U WITH DIERESIS
 
725
    $line =~ s/\xDD/\\\|\[Yacute\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER Y WITH ACUTE
 
726
    $line =~ s/\xDE/\\\|\[THORN \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER THORN (Icelandic)
 
727
    $line =~ s/\xDF/\\\|\[szlig \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER SHARP S (German)
 
728
    $line =~ s/\xE0/\\\|\[agrave\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER A WITH GRAVE
 
729
    $line =~ s/\xE1/\\\|\[aacute\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER A WITH ACUTE
 
730
    $line =~ s/\xE2/\\\|\[acirc \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER A WITH CIRCUMFLEX
 
731
    $line =~ s/\xE3/\\\|\[atilde\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER A WITH TILDE
 
732
    $line =~ s/\xE4/\\\|\[auml  \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER A WITH DIERESIS
 
733
    $line =~ s/\xE5/\\\|\[aring \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER A WITH RING ABOVE
 
734
    $line =~ s/\xE6/\\\|\[aelig \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER AE
 
735
    $line =~ s/\xE7/\\\|\[ccedil\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER C WITH CEDILLA
 
736
    $line =~ s/\xE8/\\\|\[egrave\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER E WITH GRAVE
 
737
    $line =~ s/\xE9/\\\|\[eacute\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER E WITH ACUTE
 
738
    $line =~ s/\xEA/\\\|\[ecirc \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER E WITH CIRCUMFLEX
 
739
    $line =~ s/\xEB/\\\|\[euml  \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER E WITH DIERESIS
 
740
    $line =~ s/\xEC/\\\|\[igrave\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER I WITH GRAVE
 
741
    $line =~ s/\xED/\\\|\[iacute\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER I WITH ACUTE
 
742
    $line =~ s/\xEE/\\\|\[icirc \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER I WITH CIRCUMFLEX
 
743
    $line =~ s/\xEF/\\\|\[iuml  \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER I WITH DIERESIS
 
744
    $line =~ s/\xF0/\\\|\[eth   \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER ETH (Icelandic)
 
745
    $line =~ s/\xF1/\\\|\[ntilde\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER N WITH TILDE
 
746
    $line =~ s/\xF2/\\\|\[ograve\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER O WITH GRAVE
 
747
    $line =~ s/\xF3/\\\|\[oacute\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER O WITH ACUTE
 
748
    $line =~ s/\xF4/\\\|\[ocirc \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER O WITH CIRCUMFLEX
 
749
    $line =~ s/\xF5/\\\|\[otilde\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER O WITH TILDE
 
750
    $line =~ s/\xF6/\\\|\[ouml  \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER O WITH DIERESIS
 
751
    $line =~ s/\xF7/\\\|\[divide\]\\\|/g;       # ISOnum : DIVISION SIGN
 
752
    $line =~ s/\xF8/\\\|\[oslash\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER O WITH STROKE
 
753
    $line =~ s/\xF9/\\\|\[ugrave\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER U WITH GRAVE
 
754
    $line =~ s/\xFA/\\\|\[uacute\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER U WITH ACUTE
 
755
    $line =~ s/\xFB/\\\|\[ucirc \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER U WITH CIRCUMFLEX
 
756
    $line =~ s/\xFC/\\\|\[uuml  \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER U WITH DIERESIS
 
757
    $line =~ s/\xFD/\\\|\[yacute\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER Y WITH ACUTE
 
758
    $line =~ s/\xFE/\\\|\[thorn \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER THORN (Icelandic)
 
759
    $line =~ s/\xFF/\\\|\[yuml  \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER Y WITH DIERESIS
 
760
 
 
761
    return ($line);
 
762
}
 
763
 
 
764
 
 
765
#-----------------------------------------------------------------------
 
766
# ISO 8859-2 into SP SDATA entities.
 
767
#
 
768
# &iso_8859_2_sp_text_to_sdata (TEXT)
 
769
#-----------------------------------------------------------------------
 
770
sub iso_8859_2_sp_text_to_sdata
 
771
{
 
772
    local ($line) = $_[0];
 
773
 
 
774
    $line =~ s/\xA1/\\\|\[Aogon \]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER A WITH OGONEK
 
775
    $line =~ s/\xA2/\\\|\[breve \]\\\|/g;       # ISOdia : BREVE
 
776
    $line =~ s/\xA3/\\\|\[Lstrok\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER L WITH STROKE
 
777
    $line =~ s/\xA4/\\\|\[curren\]\\\|/g;       # ISOnum : CURRENCY SIGN
 
778
    $line =~ s/\xA5/\\\|\[Lcaron\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER L WITH CARON
 
779
    $line =~ s/\xA6/\\\|\[Sacute\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER S WITH ACUTE
 
780
    $line =~ s/\xA7/\\\|\[sect  \]\\\|/g;       # ISOnum : SECTION SIGN
 
781
    $line =~ s/\xA8/\\\|\[die   \]\\\|/g;       # ISOdia : DIERESIS
 
782
    $line =~ s/\xA9/\\\|\[Scaron\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER S WITH CARON
 
783
    $line =~ s/\xAA/\\\|\[Scedil\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER S WITH CEDILLA
 
784
    $line =~ s/\xAB/\\\|\[Tcaron\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER T WITH CARON
 
785
    $line =~ s/\xAC/\\\|\[Zacute\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER Z WITH ACUTE
 
786
    $line =~ s/\xAD/\\\|\[shy   \]\\\|/g;       # ISOnum : SOFT HYPHEN
 
787
    $line =~ s/\xAE/\\\|\[Zcaron\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER Z WITH CARON
 
788
    $line =~ s/\xAF/\\\|\[Zdot  \]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER Z WITH DOT ABOVE
 
789
    $line =~ s/\xB0/\\\|\[deg   \]\\\|/g;       # ISOnum : DEGREE SIGN
 
790
    $line =~ s/\xB1/\\\|\[aogon \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER A WITH OGONEK
 
791
    $line =~ s/\xB2/\\\|\[ogon  \]\\\|/g;       # ISOdia : OGONEK
 
792
    $line =~ s/\xB3/\\\|\[lstrok\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER L WITH STROKE
 
793
    $line =~ s/\xB4/\\\|\[acute \]\\\|/g;       # ISOdia : ACUTE ACCENT
 
794
    $line =~ s/\xB5/\\\|\[lcaron\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER L WITH CARON
 
795
    $line =~ s/\xB6/\\\|\[sacute\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER S WITH ACUTE
 
796
    $line =~ s/\xB7/\\\|\[caron \]\\\|/g;       # ISOdia : CARON
 
797
    $line =~ s/\xB8/\\\|\[cedil \]\\\|/g;       # ISOdia : CEDILLA
 
798
    $line =~ s/\xB9/\\\|\[scaron\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER S WITH CARON
 
799
    $line =~ s/\xBA/\\\|\[scedil\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER S WITH CEDILLA
 
800
    $line =~ s/\xBB/\\\|\[tcaron\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER T WITH CARON
 
801
    $line =~ s/\xBC/\\\|\[zacute\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER Z WITH ACUTE
 
802
    $line =~ s/\xBD/\\\|\[dblac \]\\\|/g;       # ISOdia : DOUBLE ACUTE ACCENT
 
803
    $line =~ s/\xBE/\\\|\[zcaron\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER Z WITH CARON
 
804
    $line =~ s/\xBF/\\\|\[zdot  \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER Z WITH DOT ABOVE
 
805
    $line =~ s/\xC0/\\\|\[Racute\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER R WITH ACUTE
 
806
    $line =~ s/\xC1/\\\|\[Aacute\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER A WITH ACUTE
 
807
    $line =~ s/\xC2/\\\|\[Acirc \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER A WITH CIRCUMFLEX
 
808
    $line =~ s/\xC3/\\\|\[Abreve\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER A WITH BREVE
 
809
    $line =~ s/\xC4/\\\|\[Auml  \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER A WITH DIERESIS
 
810
    $line =~ s/\xC5/\\\|\[Lacute\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER L WITH ACUTE
 
811
    $line =~ s/\xC6/\\\|\[Cacute\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER C WITH ACUTE
 
812
    $line =~ s/\xC7/\\\|\[Ccedil\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER C WITH CEDILLA
 
813
    $line =~ s/\xC8/\\\|\[Ccaron\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER C WITH CARON
 
814
    $line =~ s/\xC9/\\\|\[Eacute\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER E WITH ACUTE
 
815
    $line =~ s/\xCA/\\\|\[Eogon \]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER E WITH OGONEK
 
816
    $line =~ s/\xCB/\\\|\[Euml  \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER E WITH DIERESIS
 
817
    $line =~ s/\xCC/\\\|\[Ecaron\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER E WITH CARON
 
818
    $line =~ s/\xCD/\\\|\[Iacute\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER I WITH ACUTE
 
819
    $line =~ s/\xCE/\\\|\[Icirc \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER I WITH CIRCUMFLEX
 
820
    $line =~ s/\xCF/\\\|\[Dcaron\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER D WITH CARON
 
821
    $line =~ s/\xD0/\\\|\[Dstrok\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER D WITH STROKE
 
822
    $line =~ s/\xD1/\\\|\[Nacute\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER N WITH ACUTE
 
823
    $line =~ s/\xD2/\\\|\[Ncaron\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER N WITH CARON
 
824
    $line =~ s/\xD3/\\\|\[Oacute\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER O WITH ACUTE
 
825
    $line =~ s/\xD4/\\\|\[Ocirc \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER O WITH CIRCUMFLEX
 
826
    $line =~ s/\xD5/\\\|\[Odblac\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
 
827
    $line =~ s/\xD6/\\\|\[Ouml  \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER O WITH DIERESIS
 
828
    $line =~ s/\xD7/\\\|\[times \]\\\|/g;       # ISOnum : MULTIPLICATION SIGN
 
829
    $line =~ s/\xD8/\\\|\[Rcaron\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER R WITH CARON
 
830
    $line =~ s/\xD9/\\\|\[Uring \]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER U WITH RING ABOVE
 
831
    $line =~ s/\xDA/\\\|\[Uacute\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER U WITH ACUTE
 
832
    $line =~ s/\xDB/\\\|\[Udblac\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
 
833
    $line =~ s/\xDC/\\\|\[Uuml  \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER U WITH DIERESIS
 
834
    $line =~ s/\xDD/\\\|\[Yacute\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER Y WITH ACUTE
 
835
    $line =~ s/\xDE/\\\|\[Tcedil\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER T WITH CEDILLA
 
836
    $line =~ s/\xDF/\\\|\[szlig \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER SHARP S (German)
 
837
    $line =~ s/\xE0/\\\|\[racute\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER R WITH ACUTE
 
838
    $line =~ s/\xE1/\\\|\[aacute\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER A WITH ACUTE
 
839
    $line =~ s/\xE2/\\\|\[acirc \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER A WITH CIRCUMFLEX
 
840
    $line =~ s/\xE3/\\\|\[abreve\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER A WITH BREVE
 
841
    $line =~ s/\xE4/\\\|\[auml  \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER A WITH DIERESIS
 
842
    $line =~ s/\xE5/\\\|\[lacute\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER L WITH ACUTE
 
843
    $line =~ s/\xE6/\\\|\[cacute\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER C WITH ACUTE
 
844
    $line =~ s/\xE7/\\\|\[ccedil\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER C WITH CEDILLA
 
845
    $line =~ s/\xE8/\\\|\[ccaron\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER C WITH CARON
 
846
    $line =~ s/\xE9/\\\|\[eacute\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER E WITH ACUTE
 
847
    $line =~ s/\xEA/\\\|\[eogon \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER E WITH OGONEK
 
848
    $line =~ s/\xEB/\\\|\[euml  \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER E WITH DIERESIS
 
849
    $line =~ s/\xEC/\\\|\[ecaron\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER E WITH CARON
 
850
    $line =~ s/\xED/\\\|\[iacute\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER I WITH ACUTE
 
851
    $line =~ s/\xEE/\\\|\[icirc \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER I WITH CIRCUMFLEX
 
852
    $line =~ s/\xEF/\\\|\[dcaron\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER D WITH CARON
 
853
    $line =~ s/\xF0/\\\|\[dstrok\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER D WITH STROKE
 
854
    $line =~ s/\xF1/\\\|\[nacute\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER N WITH ACUTE
 
855
    $line =~ s/\xF2/\\\|\[ncaron\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER N WITH CARON
 
856
    $line =~ s/\xF3/\\\|\[oacute\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER O WITH ACUTE
 
857
    $line =~ s/\xF4/\\\|\[ocirc \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER O WITH CIRCUMFLEX
 
858
    $line =~ s/\xF5/\\\|\[odblac\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER O WITH DOUBLE ACUTE
 
859
    $line =~ s/\xF6/\\\|\[ouml  \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER O WITH DIERESIS
 
860
    $line =~ s/\xF7/\\\|\[divide\]\\\|/g;       # ISOnum : DIVISION SIGN
 
861
    $line =~ s/\xF8/\\\|\[rcaron\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER R WITH CARON
 
862
    $line =~ s/\xF9/\\\|\[uring \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER U WITH RING ABOVE
 
863
    $line =~ s/\xFA/\\\|\[uacute\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER U WITH ACUTE
 
864
    $line =~ s/\xFB/\\\|\[udblac\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER U WITH DOUBLE ACUTE
 
865
    $line =~ s/\xFC/\\\|\[uuml  \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER U WITH DIERESIS
 
866
    $line =~ s/\xFD/\\\|\[yacute\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER Y WITH ACUTE
 
867
    $line =~ s/\xFE/\\\|\[tcedil\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER T WITH CEDILLA
 
868
    $line =~ s/\xFF/\\\|\[dot   \]\\\|/g;       # ISOdia : DOT ABOVE
 
869
 
 
870
    return ($line);
 
871
}
 
872
 
 
873
 
 
874
#-----------------------------------------------------------------------
 
875
# ISO 8859-3 into SP SDATA entities.
 
876
#
 
877
# &iso_8859_3_sp_text_to_sdata (TEXT)
 
878
#-----------------------------------------------------------------------
 
879
sub iso_8859_3_sp_text_to_sdata
 
880
{
 
881
    local ($line) = $_[0];
 
882
 
 
883
    $line =~ s/\xA1/\\\|\[Hstrok\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER H WITH STROKE
 
884
    $line =~ s/\xA2/\\\|\[breve \]\\\|/g;       # ISOdia : BREVE
 
885
    $line =~ s/\xA3/\\\|\[pound \]\\\|/g;       # ISOnum : POUND SIGN
 
886
    $line =~ s/\xA4/\\\|\[curren\]\\\|/g;       # ISOnum : CURRENCY SIGN
 
887
    $line =~ s/\xA6/\\\|\[Hcirc \]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER H WITH CIRCUMFLEX
 
888
    $line =~ s/\xA7/\\\|\[sect  \]\\\|/g;       # ISOnum : SECTION SIGN
 
889
    $line =~ s/\xA8/\\\|\[die   \]\\\|/g;       # ISOdia : DIERESIS
 
890
    $line =~ s/\xA9/\\\|\[Idot  \]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER I WITH DOT ABOVE
 
891
    $line =~ s/\xAA/\\\|\[Scedil\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER S WITH CEDILLA
 
892
    $line =~ s/\xAB/\\\|\[Gbreve\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER G WITH BREVE
 
893
    $line =~ s/\xAC/\\\|\[Jcirc \]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER J WITH CIRCUMFLEX
 
894
    $line =~ s/\xAD/\\\|\[shy   \]\\\|/g;       # ISOnum : SOFT HYPHEN
 
895
    $line =~ s/\xAF/\\\|\[Zdot  \]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER Z WITH DOT ABOVE
 
896
    $line =~ s/\xB0/\\\|\[deg   \]\\\|/g;       # ISOnum : DEGREE SIGN
 
897
    $line =~ s/\xB1/\\\|\[hstrok\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER H WITH STROKE
 
898
    $line =~ s/\xB2/\\\|\[sup2  \]\\\|/g;       # ISOnum : SUPERSCRIPT TWO
 
899
    $line =~ s/\xB3/\\\|\[sup3  \]\\\|/g;       # ISOnum : SUPERSCRIPT THREE
 
900
    $line =~ s/\xB4/\\\|\[acute \]\\\|/g;       # ISOdia : ACUTE ACCENT
 
901
    $line =~ s/\xB5/\\\|\[micro \]\\\|/g;       # ISOnum : MICRO SIGN
 
902
    $line =~ s/\xB6/\\\|\[hcirc \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER H WITH CIRCUMFLEX
 
903
    $line =~ s/\xB7/\\\|\[middot\]\\\|/g;       # ISOnum : MIDDLE DOT
 
904
    $line =~ s/\xB8/\\\|\[cedil \]\\\|/g;       # ISOdia : CEDILLA
 
905
    $line =~ s/\xB9/\\\|\[inodot\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER I DOT LESS
 
906
    $line =~ s/\xBA/\\\|\[scedil\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER S WITH CEDILLA
 
907
    $line =~ s/\xBB/\\\|\[gbreve\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER G WITH BREVE
 
908
    $line =~ s/\xBC/\\\|\[jcirc \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER J WITH CIRCUMFLEX
 
909
    $line =~ s/\xBD/\\\|\[frac12\]\\\|/g;       # ISOnum : VULGAR FRACTION ONE HALF
 
910
    $line =~ s/\xBF/\\\|\[zdot  \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER Z WITH DOT ABOVE
 
911
    $line =~ s/\xC0/\\\|\[Agrave\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER A WITH GRAVE
 
912
    $line =~ s/\xC1/\\\|\[Aacute\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER A WITH ACUTE
 
913
    $line =~ s/\xC2/\\\|\[Acirc \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER A WITH CIRCUMFLEX
 
914
    $line =~ s/\xC4/\\\|\[Auml  \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER A WITH DIERESIS
 
915
    $line =~ s/\xC5/\\\|\[Cdot  \]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER C WITH DOT ABOVE
 
916
    $line =~ s/\xC6/\\\|\[Ccirc \]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER C WITH CIRCUMFLEX
 
917
    $line =~ s/\xC7/\\\|\[Ccedil\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER C WITH CEDILLA
 
918
    $line =~ s/\xC8/\\\|\[Egrave\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER E WITH GRAVE
 
919
    $line =~ s/\xC9/\\\|\[Eacute\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER E WITH ACUTE
 
920
    $line =~ s/\xCA/\\\|\[Ecirc \]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER E WITH CIRCUMFLEX
 
921
    $line =~ s/\xCB/\\\|\[Euml  \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER E WITH DIERESIS
 
922
    $line =~ s/\xCC/\\\|\[Igrave\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER I WITH GRAVE
 
923
    $line =~ s/\xCD/\\\|\[Iacute\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER I WITH ACUTE
 
924
    $line =~ s/\xCE/\\\|\[Icirc \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER I WITH CIRCUMFLEX
 
925
    $line =~ s/\xCF/\\\|\[Iuml  \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER I WITH DIERESIS
 
926
    $line =~ s/\xD1/\\\|\[Ntilde\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER N WITH TILDE
 
927
    $line =~ s/\xD2/\\\|\[Ograve\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER O WITH GRAVE
 
928
    $line =~ s/\xD3/\\\|\[Oacute\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER O WITH ACUTE
 
929
    $line =~ s/\xD4/\\\|\[Ocirc \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER O WITH CIRCUMFLEX
 
930
    $line =~ s/\xD5/\\\|\[Gdot  \]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER G WITH DOT ABOVE
 
931
    $line =~ s/\xD6/\\\|\[Ouml  \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER O WITH DIERESIS
 
932
    $line =~ s/\xD7/\\\|\[times \]\\\|/g;       # ISOnum : MULTIPLICATION SIGN
 
933
    $line =~ s/\xD8/\\\|\[Gcirc \]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER G WITH CIRCUMFLEX
 
934
    $line =~ s/\xD9/\\\|\[Ugrave\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER U WITH GRAVE ABOVE
 
935
    $line =~ s/\xDA/\\\|\[Uacute\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER U WITH ACUTE
 
936
    $line =~ s/\xDB/\\\|\[Ucirc \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER U WITH CIRCUMFLEX
 
937
    $line =~ s/\xDC/\\\|\[Uuml  \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER U WITH DIERESIS
 
938
    $line =~ s/\xDD/\\\|\[Ubreve\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER U WITH BREVE
 
939
    $line =~ s/\xDE/\\\|\[Scirc \]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER S WITH CIRCUMFLEX
 
940
    $line =~ s/\xDF/\\\|\[szlig \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER SHARP S (German)
 
941
    $line =~ s/\xE0/\\\|\[agrave\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER A WITH GRAVE
 
942
    $line =~ s/\xE1/\\\|\[aacute\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER A WITH ACUTE
 
943
    $line =~ s/\xE2/\\\|\[acirc \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER A WITH CIRCUMFLEX
 
944
    $line =~ s/\xE4/\\\|\[auml  \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER A WITH DIERESIS
 
945
    $line =~ s/\xE5/\\\|\[cdot  \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER C WITH DOT ABOVE
 
946
    $line =~ s/\xE6/\\\|\[ccirce\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER C WITH CIRCUMFLEX
 
947
    $line =~ s/\xE7/\\\|\[ccedil\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER C WITH CEDILLA
 
948
    $line =~ s/\xE8/\\\|\[egrave\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER E WITH GRAVE
 
949
    $line =~ s/\xE9/\\\|\[eacute\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER E WITH ACUTE
 
950
    $line =~ s/\xEA/\\\|\[ecirc \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER E WITH CIRCUMFLEX
 
951
    $line =~ s/\xEB/\\\|\[euml  \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER E WITH DIERESIS
 
952
    $line =~ s/\xEC/\\\|\[igrave\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER I WITH GRAVE
 
953
    $line =~ s/\xED/\\\|\[iacute\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER I WITH ACUTE
 
954
    $line =~ s/\xEE/\\\|\[icirc \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER I WITH CIRCUMFLEX
 
955
    $line =~ s/\xEF/\\\|\[iuml  \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER I WITH DIERESIS
 
956
    $line =~ s/\xF1/\\\|\[ntilde\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER N WITH TILDE
 
957
    $line =~ s/\xF2/\\\|\[ograve\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER O WITH GRAVE
 
958
    $line =~ s/\xF3/\\\|\[oacute\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER O WITH ACUTE
 
959
    $line =~ s/\xF4/\\\|\[ocirc \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER O WITH CIRCUMFLEX
 
960
    $line =~ s/\xF5/\\\|\[gdot  \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER G WITH DOT ABOVE
 
961
    $line =~ s/\xF6/\\\|\[ouml  \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER O WITH DIERESIS
 
962
    $line =~ s/\xF7/\\\|\[divide\]\\\|/g;       # ISOnum : DIVISION SIGN
 
963
    $line =~ s/\xF8/\\\|\[gcirc \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER G WITH CIRCUMFLEX
 
964
    $line =~ s/\xF9/\\\|\[ugrave\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER U WITH GRAVE
 
965
    $line =~ s/\xFA/\\\|\[uacute\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER U WITH ACUTE
 
966
    $line =~ s/\xFB/\\\|\[ucirc \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER U WITH CIRCUMFLEX
 
967
    $line =~ s/\xFC/\\\|\[uuml  \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER U WITH DIERESIS
 
968
    $line =~ s/\xFD/\\\|\[ubreve\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER U WITH BREVE
 
969
    $line =~ s/\xFE/\\\|\[scirc \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER S WITH CIRCUMFLEX
 
970
    $line =~ s/\xFF/\\\|\[dot   \]\\\|/g;       # ISOdia : DOT ABOVE
 
971
 
 
972
    return ($line);
 
973
}
 
974
 
 
975
#-----------------------------------------------------------------------
 
976
# ISO 8859-4 into SP SDATA entities.
 
977
#
 
978
# &iso_8859_4_sp_text_to_sdata (TEXT)
 
979
#-----------------------------------------------------------------------
 
980
sub iso_8859_4_sp_text_to_sdata
 
981
{
 
982
    local ($line) = $_[0];
 
983
 
 
984
    $line =~ s/\xA1/\\\|\[Aogon \]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER A WITH OGONEK
 
985
    $line =~ s/\xA2/\\\|\[kgreen\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER KRA (Greenlandic)
 
986
    $line =~ s/\xA3/\\\|\[Rcedil\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER R WITH CEDILLA
 
987
    $line =~ s/\xA4/\\\|\[curren\]\\\|/g;       # ISOnum : CURRENCY SIGN
 
988
    $line =~ s/\xA5/\\\|\[Itilde\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER I WITH TILDE
 
989
    $line =~ s/\xA6/\\\|\[Lcedil\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER L WITH CEDILLA
 
990
    $line =~ s/\xA7/\\\|\[sect  \]\\\|/g;       # ISOnum : SECTION SIGN
 
991
    $line =~ s/\xA8/\\\|\[die   \]\\\|/g;       # ISOdia : DIERESIS
 
992
    $line =~ s/\xA9/\\\|\[Scaron\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER S WITH CARON
 
993
    $line =~ s/\xAA/\\\|\[Emacr \]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER E WITH MACRON
 
994
    $line =~ s/\xAB/\\\|\[Gcedil\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER G WITH CEDILLA
 
995
    $line =~ s/\xAC/\\\|\[Tstrok\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER T WITH STROKE
 
996
    $line =~ s/\xAD/\\\|\[shy   \]\\\|/g;       # ISOnum : SOFT HYPHEN
 
997
    $line =~ s/\xAE/\\\|\[Zcaron\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER Z WITH CARON
 
998
    $line =~ s/\xAF/\\\|\[macr  \]\\\|/g;       # ISOdia : MACRON
 
999
    $line =~ s/\xB0/\\\|\[deg   \]\\\|/g;       # ISOnum : DEGREE SIGN
 
1000
    $line =~ s/\xB1/\\\|\[aogon \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER A WITH OGONEK
 
1001
    $line =~ s/\xB2/\\\|\[ogon  \]\\\|/g;       # ISOdia : OGONEK
 
1002
    $line =~ s/\xB3/\\\|\[rcedil\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER R WITH CEDILLA
 
1003
    $line =~ s/\xB4/\\\|\[acute \]\\\|/g;       # ISOdia : ACUTE ACCENT
 
1004
    $line =~ s/\xB5/\\\|\[itilde\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER I WITH TILDE
 
1005
    $line =~ s/\xB6/\\\|\[lcedil\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER L WITH CEDILLA
 
1006
    $line =~ s/\xB7/\\\|\[caron \]\\\|/g;       # ISOdia : CARON
 
1007
    $line =~ s/\xB8/\\\|\[cedil \]\\\|/g;       # ISOdia : CEDILLA
 
1008
    $line =~ s/\xB9/\\\|\[scaron\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER S WITH CARON
 
1009
    $line =~ s/\xBA/\\\|\[emacr \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER E WITH MACRON
 
1010
    $line =~ s/\xBB/\\\|\[gcedil\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER G WITH CEDILLA
 
1011
    $line =~ s/\xBC/\\\|\[tstrok\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER J WITH STROKE
 
1012
    $line =~ s/\xBD/\\\|\[ENG   \]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER ENG (Lappish)
 
1013
    $line =~ s/\xBE/\\\|\[zcaron\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER Z WITH CARON
 
1014
    $line =~ s/\xBF/\\\|\[eng   \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER ENG (Lappish)
 
1015
    $line =~ s/\xC0/\\\|\[Amacr \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER A WITH MACRON
 
1016
    $line =~ s/\xC1/\\\|\[Aacute\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER A WITH ACUTE
 
1017
    $line =~ s/\xC2/\\\|\[Acirc \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER A WITH CIRCUMFLEX
 
1018
    $line =~ s/\xC3/\\\|\[Atilde\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER A WITH TILDE
 
1019
    $line =~ s/\xC4/\\\|\[Auml  \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER A WITH DIERESIS
 
1020
    $line =~ s/\xC5/\\\|\[Aring \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER A WITH RING ABOVE
 
1021
    $line =~ s/\xC6/\\\|\[AElig \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER AE
 
1022
    $line =~ s/\xC7/\\\|\[Iogon \]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER I WITH OGONEK
 
1023
    $line =~ s/\xC8/\\\|\[Ccaron\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER C WITH CARON
 
1024
    $line =~ s/\xC9/\\\|\[Eacute\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER E WITH ACUTE
 
1025
    $line =~ s/\xCA/\\\|\[Eogon \]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER E WITH OGONEK
 
1026
    $line =~ s/\xCB/\\\|\[Euml  \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER E WITH DIERESIS
 
1027
    $line =~ s/\xCC/\\\|\[Edot  \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER E WITH DOT ABOVE
 
1028
    $line =~ s/\xCD/\\\|\[Iacute\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER I WITH ACUTE
 
1029
    $line =~ s/\xCE/\\\|\[Icirc \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER I WITH CIRCUMFLEX
 
1030
    $line =~ s/\xCF/\\\|\[Imacr \]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER I WITH MACRON
 
1031
    $line =~ s/\xD0/\\\|\[Dstrok\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER D WITH STROKE
 
1032
    $line =~ s/\xD1/\\\|\[Ncedil\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER N WITH CEDILLA
 
1033
    $line =~ s/\xD2/\\\|\[Omacr \]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER O WITH MACRON
 
1034
    $line =~ s/\xD3/\\\|\[Kcedil\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER K WITH CEDILLA
 
1035
    $line =~ s/\xD4/\\\|\[Ocirc \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER O WITH CIRCUMFLEX
 
1036
    $line =~ s/\xD5/\\\|\[Otilde\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER O WITH TILDE
 
1037
    $line =~ s/\xD6/\\\|\[Ouml  \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER O WITH DIERESIS
 
1038
    $line =~ s/\xD7/\\\|\[times \]\\\|/g;       # ISOnum : MULTIPLICATION SIGN
 
1039
    $line =~ s/\xD8/\\\|\[Oslash\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER O WITH STROKE
 
1040
    $line =~ s/\xD9/\\\|\[Uogon \]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER U WITH OGONEK
 
1041
    $line =~ s/\xDA/\\\|\[Uacute\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER U WITH ACUTE
 
1042
    $line =~ s/\xDB/\\\|\[Ucirc \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER U WITH CIRCUMFLEX
 
1043
    $line =~ s/\xDC/\\\|\[Uuml  \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER U WITH DIERESIS
 
1044
    $line =~ s/\xDD/\\\|\[Utilde\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER U WITH TILDE
 
1045
    $line =~ s/\xDE/\\\|\[Umacr \]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER U WITH MACRON
 
1046
    $line =~ s/\xDF/\\\|\[szlig \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER SHARP S (German)
 
1047
    $line =~ s/\xE0/\\\|\[amacr \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER A WITH MACRON
 
1048
    $line =~ s/\xE1/\\\|\[aacute\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER A WITH ACUTE
 
1049
    $line =~ s/\xE2/\\\|\[acirc \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER A WITH CIRCUMFLEX
 
1050
    $line =~ s/\xE3/\\\|\[atilde\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER A WITH TILDE
 
1051
    $line =~ s/\xE4/\\\|\[auml  \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER A WITH DIERESIS
 
1052
    $line =~ s/\xE5/\\\|\[aring \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER A WITH RING ABOVE
 
1053
    $line =~ s/\xE6/\\\|\[aelig \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER AE
 
1054
    $line =~ s/\xE7/\\\|\[iogon \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER I WITH OGONEK
 
1055
    $line =~ s/\xE8/\\\|\[ccaron\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER C WITH CARON
 
1056
    $line =~ s/\xE9/\\\|\[eacute\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER E WITH ACUTE
 
1057
    $line =~ s/\xEA/\\\|\[eogon \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER E WITH OGONEK
 
1058
    $line =~ s/\xEB/\\\|\[euml  \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER E WITH DIERESIS
 
1059
    $line =~ s/\xEC/\\\|\[edot  \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER E WITH DOT ABOVE
 
1060
    $line =~ s/\xED/\\\|\[iacute\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER I WITH ACUTE
 
1061
    $line =~ s/\xEE/\\\|\[icirc \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER I WITH CIRCUMFLEX
 
1062
    $line =~ s/\xEF/\\\|\[imacr \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER I WITH MACRON
 
1063
    $line =~ s/\xF0/\\\|\[dstrok\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER D WITH STROKE
 
1064
    $line =~ s/\xF1/\\\|\[ncedil\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER N WITH CEDILLA
 
1065
    $line =~ s/\xF2/\\\|\[omacr \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER O WITH MACRON
 
1066
    $line =~ s/\xF3/\\\|\[kcedil\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER K WITH CEDILLA
 
1067
    $line =~ s/\xF4/\\\|\[ocirc \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER O WITH CIRCUMFLEX
 
1068
    $line =~ s/\xF5/\\\|\[otilde\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER O WITH TILDE
 
1069
    $line =~ s/\xF6/\\\|\[ouml  \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER O WITH DIERESIS
 
1070
    $line =~ s/\xF7/\\\|\[divide\]\\\|/g;       # ISOnum : DIVISION SIGN
 
1071
    $line =~ s/\xF8/\\\|\[oslash\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER O WITH STROKE
 
1072
    $line =~ s/\xF9/\\\|\[uogon \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER U WITH OGONEK
 
1073
    $line =~ s/\xFA/\\\|\[uacute\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER U WITH ACUTE
 
1074
    $line =~ s/\xFB/\\\|\[ucirc \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER U WITH CIRCUMFLEX
 
1075
    $line =~ s/\xFC/\\\|\[uuml  \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER U WITH DIERESIS
 
1076
    $line =~ s/\xFD/\\\|\[utilde\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER U WITH TILDE
 
1077
    $line =~ s/\xFE/\\\|\[umacr \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER U WITH MACRON
 
1078
    $line =~ s/\xFF/\\\|\[dot   \]\\\|/g;       # ISOdia : DOT ABOVE
 
1079
 
 
1080
    return ($line);
 
1081
}
 
1082
 
 
1083
 
 
1084
#-----------------------------------------------------------------------
 
1085
# ISO 8859-5 into SP SDATA entities.
 
1086
#
 
1087
# &iso_8859_5_sp_text_to_sdata (TEXT)
 
1088
#-----------------------------------------------------------------------
 
1089
sub iso_8859_5_sp_text_to_sdata
 
1090
{
 
1091
    local ($line) = $_[0];
 
1092
 
 
1093
    $line =~ s/\xA1/\\\|\[IOcy  \]\\\|/g;       # ISOcyr1: CYRILLIC CAPITAL LETTER IO
 
1094
    $line =~ s/\xA2/\\\|\[DJcy  \]\\\|/g;       # ISOcyr2: CYRILLIC CAPITAL LETTER DJE (Serbocroatian)
 
1095
    $line =~ s/\xA3/\\\|\[GJcy  \]\\\|/g;       # ISOcyr2: CYRILLIC CAPITAL LETTER GJE (Macedonian)
 
1096
    $line =~ s/\xA4/\\\|\[IEcy  \]\\\|/g;       # ISOcyr1: CYRILLIC CAPITAL LETTER UKRAINIAN IE
 
1097
    $line =~ s/\xA5/\\\|\[DScy  \]\\\|/g;       # ISOcyr2: CYRILLIC CAPITAL LETTER DZE (Macedonian)
 
1098
    $line =~ s/\xA6/\\\|\[Iukcy \]\\\|/g;       # ISOcyr2: CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
 
1099
    $line =~ s/\xA7/\\\|\[YIcy  \]\\\|/g;       # ISOcyr2: CYRILLIC CAPITAL LETTER YI (Ukrainian)
 
1100
    $line =~ s/\xA8/\\\|\[Jukcy \]\\\|/g;       # ISOcyr2: CYRILLIC CAPITAL LETTER JE
 
1101
    $line =~ s/\xA9/\\\|\[LJcy  \]\\\|/g;       # ISOcyr2: CYRILLIC CAPITAL LETTER LJE
 
1102
    $line =~ s/\xAA/\\\|\[NJcy  \]\\\|/g;       # ISOcyr2: CYRILLIC CAPITAL LETTER NJE
 
1103
    $line =~ s/\xAB/\\\|\[TSHcy \]\\\|/g;       # ISOcyr2: CYRILLIC CAPITAL LETTER TSHE (Serbocroatian)
 
1104
    $line =~ s/\xAC/\\\|\[KJcy  \]\\\|/g;       # ISOcyr2: CYRILLIC CAPITAL LETTER KJE (Macedonian)
 
1105
    $line =~ s/\xAD/\\\|\[shy   \]\\\|/g;       # ISOnum : SOFT HYPHEN
 
1106
    $line =~ s/\xAE/\\\|\[Ubrcy \]\\\|/g;       # ISOcyr2: CYRILLIC CAPITAL LETTER SHORT U (Byelorussian)
 
1107
    $line =~ s/\xAF/\\\|\[DZcy  \]\\\|/g;       # ISOcyr2: CYRILLIC CAPITAL LETTER DZHE
 
1108
    $line =~ s/\xB0/\\\|\[Acy   \]\\\|/g;       # ISOcyr1: CYRILLIC CAPITAL LETTER A
 
1109
    $line =~ s/\xB1/\\\|\[Bcy   \]\\\|/g;       # ISOcyr1: CYRILLIC CAPITAL LETTER BE
 
1110
    $line =~ s/\xB2/\\\|\[Vcy   \]\\\|/g;       # ISOcyr1: CYRILLIC CAPITAL LETTER VE
 
1111
    $line =~ s/\xB3/\\\|\[Gcy   \]\\\|/g;       # ISOcyr1: CYRILLIC CAPITAL LETTER GHE
 
1112
    $line =~ s/\xB4/\\\|\[Dcy   \]\\\|/g;       # ISOcyr1: CYRILLIC CAPITAL LETTER DE
 
1113
    $line =~ s/\xB5/\\\|\[IEcy  \]\\\|/g;       # ISOcyr1: CYRILLIC CAPITAL LETTER IE
 
1114
    $line =~ s/\xB6/\\\|\[ZHcy  \]\\\|/g;       # ISOcyr1: CYRILLIC CAPITAL LETTER ZHE
 
1115
    $line =~ s/\xB7/\\\|\[Zcy   \]\\\|/g;       # ISOcyr1: CYRILLIC CAPITAL LETTER ZE
 
1116
    $line =~ s/\xB8/\\\|\[Icy   \]\\\|/g;       # ISOcyr1: CYRILLIC CAPITAL LETTER I
 
1117
    $line =~ s/\xB9/\\\|\[Jcy   \]\\\|/g;       # ISOcyr1: CYRILLIC CAPITAL LETTER SHORT I
 
1118
    $line =~ s/\xBA/\\\|\[Kcy   \]\\\|/g;       # ISOcyr1: CYRILLIC CAPITAL LETTER KA
 
1119
    $line =~ s/\xBB/\\\|\[Lcy   \]\\\|/g;       # ISOcyr1: CYRILLIC CAPITAL LETTER EL
 
1120
    $line =~ s/\xBC/\\\|\[Mcy   \]\\\|/g;       # ISOcyr1: CYRILLIC CAPITAL LETTER EM
 
1121
    $line =~ s/\xBD/\\\|\[Ncy   \]\\\|/g;       # ISOcyr1: CYRILLIC CAPITAL LETTER EN
 
1122
    $line =~ s/\xBE/\\\|\[Ocy   \]\\\|/g;       # ISOcyr1: CYRILLIC CAPITAL LETTER O
 
1123
    $line =~ s/\xBF/\\\|\[Pcy   \]\\\|/g;       # ISOcyr1: CYRILLIC CAPITAL LETTER PE
 
1124
    $line =~ s/\xC0/\\\|\[Rcy   \]\\\|/g;       # ISOcyr1: CYRILLIC CAPITAL LETTER ER
 
1125
    $line =~ s/\xC1/\\\|\[Scy   \]\\\|/g;       # ISOcyr1: CYRILLIC CAPITAL LETTER ES
 
1126
    $line =~ s/\xC2/\\\|\[Tcy   \]\\\|/g;       # ISOcyr1: CYRILLIC CAPITAL LETTER TE
 
1127
    $line =~ s/\xC3/\\\|\[Ucy   \]\\\|/g;       # ISOcyr1: CYRILLIC CAPITAL LETTER U
 
1128
    $line =~ s/\xC4/\\\|\[Fcy   \]\\\|/g;       # ISOcyr1: CYRILLIC CAPITAL LETTER EF
 
1129
    $line =~ s/\xC5/\\\|\[KHcy  \]\\\|/g;       # ISOcyr1: CYRILLIC CAPITAL LETTER HA
 
1130
    $line =~ s/\xC6/\\\|\[TScy  \]\\\|/g;       # ISOcyr1: CYRILLIC CAPITAL LETTER TSE
 
1131
    $line =~ s/\xC7/\\\|\[CHcy  \]\\\|/g;       # ISOcyr1: CYRILLIC CAPITAL LETTER CHE
 
1132
    $line =~ s/\xC8/\\\|\[SHcy  \]\\\|/g;       # ISOcyr1: CYRILLIC CAPITAL LETTER SHA
 
1133
    $line =~ s/\xC9/\\\|\[SHCHcy\]\\\|/g;       # ISOcyr1: CYRILLIC CAPITAL LETTER SHCHA
 
1134
    $line =~ s/\xCA/\\\|\[HARDcy\]\\\|/g;       # ISOcyr1: CYRILLIC CAPITAL LETTER HARD SIGN
 
1135
    $line =~ s/\xCB/\\\|\[Ycy   \]\\\|/g;       # ISOcyr1: CYRILLIC CAPITAL LETTER YERU
 
1136
    $line =~ s/\xCC/\\\|\[SOFTcy\]\\\|/g;       # ISOcyr1: CYRILLIC CAPITAL LETTER SOFT SIGN
 
1137
    $line =~ s/\xCD/\\\|\[Ecy   \]\\\|/g;       # ISOcyr1: CYRILLIC CAPITAL LETTER E
 
1138
    $line =~ s/\xCE/\\\|\[YUcy  \]\\\|/g;       # ISOcyr1: CYRILLIC CAPITAL LETTER YU
 
1139
    $line =~ s/\xCF/\\\|\[YAcy  \]\\\|/g;       # ISOcyr1: CYRILLIC CAPITAL LETTER YA
 
1140
    $line =~ s/\xD0/\\\|\[acy   \]\\\|/g;       # ISOcyr1: CYRILLIC SMALL LETTER A
 
1141
    $line =~ s/\xD1/\\\|\[bcy   \]\\\|/g;       # ISOcyr1: CYRILLIC SMALL LETTER BE
 
1142
    $line =~ s/\xD2/\\\|\[vcy   \]\\\|/g;       # ISOcyr1: CYRILLIC SMALL LETTER VE
 
1143
    $line =~ s/\xD3/\\\|\[gcy   \]\\\|/g;       # ISOcyr1: CYRILLIC SMALL LETTER GHE
 
1144
    $line =~ s/\xD4/\\\|\[dcy   \]\\\|/g;       # ISOcyr1: CYRILLIC SMALL LETTER DE
 
1145
    $line =~ s/\xD5/\\\|\[iecy  \]\\\|/g;       # ISOcyr1: CYRILLIC SMALL LETTER IE
 
1146
    $line =~ s/\xD6/\\\|\[zhcy  \]\\\|/g;       # ISOcyr1: CYRILLIC SMALL LETTER ZHE
 
1147
    $line =~ s/\xD7/\\\|\[zcy   \]\\\|/g;       # ISOcyr1: CYRILLIC SMALL LETTER ZE
 
1148
    $line =~ s/\xD8/\\\|\[icy   \]\\\|/g;       # ISOcyr1: CYRILLIC SMALL LETTER I
 
1149
    $line =~ s/\xD9/\\\|\[jcy   \]\\\|/g;       # ISOcyr1: CYRILLIC SMALL LETTER SHORT I
 
1150
    $line =~ s/\xDA/\\\|\[kcy   \]\\\|/g;       # ISOcyr1: CYRILLIC SMALL LETTER KA
 
1151
    $line =~ s/\xDB/\\\|\[lcy   \]\\\|/g;       # ISOcyr1: CYRILLIC SMALL LETTER EL
 
1152
    $line =~ s/\xDC/\\\|\[mcy   \]\\\|/g;       # ISOcyr1: CYRILLIC SMALL LETTER EM
 
1153
    $line =~ s/\xDD/\\\|\[ncy   \]\\\|/g;       # ISOcyr1: CYRILLIC SMALL LETTER EN
 
1154
    $line =~ s/\xDE/\\\|\[ocy   \]\\\|/g;       # ISOcyr1: CYRILLIC SMALL LETTER O
 
1155
    $line =~ s/\xDF/\\\|\[pcy   \]\\\|/g;       # ISOcyr1: CYRILLIC SMALL LETTER PE
 
1156
    $line =~ s/\xE0/\\\|\[rcy   \]\\\|/g;       # ISOcyr1: CYRILLIC SMALL LETTER ER
 
1157
    $line =~ s/\xE1/\\\|\[scy   \]\\\|/g;       # ISOcyr1: CYRILLIC SMALL LETTER ES
 
1158
    $line =~ s/\xE2/\\\|\[tcy   \]\\\|/g;       # ISOcyr1: CYRILLIC SMALL LETTER TE
 
1159
    $line =~ s/\xE3/\\\|\[ucy   \]\\\|/g;       # ISOcyr1: CYRILLIC SMALL LETTER U
 
1160
    $line =~ s/\xE4/\\\|\[fcy   \]\\\|/g;       # ISOcyr1: CYRILLIC SMALL LETTER EF
 
1161
    $line =~ s/\xE5/\\\|\[khcy  \]\\\|/g;       # ISOcyr1: CYRILLIC SMALL LETTER HA
 
1162
    $line =~ s/\xE6/\\\|\[tscy  \]\\\|/g;       # ISOcyr1: CYRILLIC SMALL LETTER TSE
 
1163
    $line =~ s/\xE7/\\\|\[chcy  \]\\\|/g;       # ISOcyr1: CYRILLIC SMALL LETTER CHE
 
1164
    $line =~ s/\xE8/\\\|\[shcy  \]\\\|/g;       # ISOcyr1: CYRILLIC SMALL LETTER SHA
 
1165
    $line =~ s/\xE9/\\\|\[shchcy\]\\\|/g;       # ISOcyr1: CYRILLIC SMALL LETTER SHCHA
 
1166
    $line =~ s/\xEA/\\\|\[hardcy\]\\\|/g;       # ISOcyr1: CYRILLIC SMALL LETTER HARD SIGN
 
1167
    $line =~ s/\xEB/\\\|\[ycy   \]\\\|/g;       # ISOcyr1: CYRILLIC SMALL LETTER YERU
 
1168
    $line =~ s/\xEC/\\\|\[softcy\]\\\|/g;       # ISOcyr1: CYRILLIC SMALL LETTER SOFT SIGN
 
1169
    $line =~ s/\xED/\\\|\[ecy   \]\\\|/g;       # ISOcyr1: CYRILLIC SMALL LETTER E
 
1170
    $line =~ s/\xEE/\\\|\[yucy  \]\\\|/g;       # ISOcyr1: CYRILLIC SMALL LETTER YU
 
1171
    $line =~ s/\xEF/\\\|\[yacy  \]\\\|/g;       # ISOcyr1: CYRILLIC SMALL LETTER YA
 
1172
    $line =~ s/\xF0/\\\|\[numero\]\\\|/g;       # ISOcyr1: NUMERO SIGN
 
1173
    $line =~ s/\xF1/\\\|\[iocy  \]\\\|/g;       # ISOcyr1: CYRILLIC SMALL LETTER IO
 
1174
    $line =~ s/\xF2/\\\|\[djcy  \]\\\|/g;       # ISOcyr2: CYRILLIC SMALL LETTER DJE (Serbocroatian)
 
1175
    $line =~ s/\xF3/\\\|\[gjcy  \]\\\|/g;       # ISOcyr2: CYRILLIC SMALL LETTER GJE (Macedonian)
 
1176
    $line =~ s/\xF4/\\\|\[iecy  \]\\\|/g;       # ISOcyr1: CYRILLIC SMALL LETTER UKRAINIAN IE
 
1177
    $line =~ s/\xF5/\\\|\[dscy  \]\\\|/g;       # ISOcyr2: CYRILLIC SMALL LETTER DZE (Macedonian)
 
1178
    $line =~ s/\xF6/\\\|\[iukcy \]\\\|/g;       # ISOcyr2: CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
 
1179
    $line =~ s/\xF7/\\\|\[yicy  \]\\\|/g;       # ISOcyr2: CYRILLIC SMALL LETTER YI (Ukrainian)
 
1180
    $line =~ s/\xF8/\\\|\[jsercy\]\\\|/g;       # ISOcyr2: CYRILLIC SMALL LETTER JE
 
1181
    $line =~ s/\xF9/\\\|\[ljcy  \]\\\|/g;       # ISOcyr2: CYRILLIC SMALL LETTER LJE
 
1182
    $line =~ s/\xFA/\\\|\[njcy  \]\\\|/g;       # ISOcyr2: CYRILLIC SMALL LETTER NJE
 
1183
    $line =~ s/\xFB/\\\|\[tshcy \]\\\|/g;       # ISOcyr2: CYRILLIC SMALL LETTER TSHE (Serbocroatian)
 
1184
    $line =~ s/\xFC/\\\|\[kjcy  \]\\\|/g;       # ISOcyr2: CYRILLIC SMALL LETTER KJE (Macedonian)
 
1185
    $line =~ s/\xFD/\\\|\[sect  \]\\\|/g;       # ISOnum : SECTION SIGN
 
1186
    $line =~ s/\xFE/\\\|\[ubrcy \]\\\|/g;       # ISOcyr2: CYRILLIC SMALL LETTER SHORT U (Byelorussian)
 
1187
    $line =~ s/\xFF/\\\|\[dzcy  \]\\\|/g;       # ISOcyr2: CYRILLIC SMALL LETTER DZHE
 
1188
 
 
1189
    return ($line);
 
1190
}
 
1191
 
 
1192
#-----------------------------------------------------------------------
 
1193
# ISO 8859-6 into SP SDATA entities.
 
1194
#
 
1195
# There is no ISO entities for arabic characters.
 
1196
#
 
1197
# &iso_8859_6_sp_text_to_sdata (TEXT)
 
1198
#-----------------------------------------------------------------------
 
1199
sub iso_8859_6_sp_text_to_sdata
 
1200
{
 
1201
    local ($line) = $_[0];
 
1202
 
 
1203
    $line =~ s/\xA4/\\\|\[curren\]\\\|/g;       # ISOnum : CURRENCY SIGN
 
1204
    $line =~ s/\xAD/\\\|\[shy   \]\\\|/g;       # ISOnum : SOFT HYPHEN
 
1205
 
 
1206
    return ($line);
 
1207
}
 
1208
 
 
1209
#-----------------------------------------------------------------------
 
1210
# ISO 8859-7 into SP SDATA entities.
 
1211
#
 
1212
# &iso_8859_7_sp_text_to_sdata (TEXT)
 
1213
#-----------------------------------------------------------------------
 
1214
sub iso_8859_7_sp_text_to_sdata
 
1215
{
 
1216
    local ($line) = $_[0];
 
1217
 
 
1218
    $line =~ s/\xA1/\\\|\[lsquo \]\\\|/g;       # ISOnum : SINGLE HIGH-REVERSED-9 QUOTATION MARK
 
1219
    $line =~ s/\xA2/\\\|\[rsquo \]\\\|/g;       # ISOnum : RIGHT SINGLE QUOTATION MARK
 
1220
    $line =~ s/\xA3/\\\|\[pound \]\\\|/g;       # ISOnum : POUND SIGN
 
1221
    $line =~ s/\xA6/\\\|\[brvbar\]\\\|/g;       # ISOnum : BROKEN BAR
 
1222
    $line =~ s/\xA7/\\\|\[sect  \]\\\|/g;       # ISOnum : SECTION SIGN
 
1223
    $line =~ s/\xA8/\\\|\[die   \]\\\|/g;       # ISOdia : DIERESIS
 
1224
    $line =~ s/\xA9/\\\|\[copy  \]\\\|/g;       # ISOnum : COPYRIGHT SIGN
 
1225
    $line =~ s/\xAB/\\\|\[laquo \]\\\|/g;       # ISOnum : LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
 
1226
    $line =~ s/\xAC/\\\|\[not   \]\\\|/g;       # ISOnum : NOT SIGN
 
1227
    $line =~ s/\xAD/\\\|\[shy   \]\\\|/g;       # ISOnum : SOFT HYPHEN
 
1228
    $line =~ s/\xAF/\\\|\[mdash \]\\\|/g;       # ISOpub : EM DASH
 
1229
    $line =~ s/\xB0/\\\|\[deg   \]\\\|/g;       # ISOnum : DEGREE SIGN
 
1230
    $line =~ s/\xB1/\\\|\[plusmn\]\\\|/g;       # ISOnum : PLUS-MINUS SIGN
 
1231
    $line =~ s/\xB2/\\\|\[sup2  \]\\\|/g;       # ISOnum : SUPERSCRIPT TWO
 
1232
    $line =~ s/\xB3/\\\|\[sup3  \]\\\|/g;       # ISOnum : SUPERSCRIPT THREE
 
1233
    $line =~ s/\xB4/\\\|\[acute \]\\\|/g;       # ISOdia : ACUTE ACCENT
 
1234
    $line =~ s/\xB5/\\\|\[diagr \]\\\|/g;       # ISOgrk?: ACUTE ACCENT AND DIERESIS (Tonos and Dialytika)
 
1235
    $line =~ s/\xB6/\\\|\[Aacgr \]\\\|/g;       # ISOgrk2: GREEK CAPITAL LETTER ALPHA WITH ACUTE
 
1236
    $line =~ s/\xB7/\\\|\[middot\]\\\|/g;       # ISOnum : MIDDLE DOT
 
1237
    $line =~ s/\xB8/\\\|\[Eacgr \]\\\|/g;       # ISOgrk2: GREEK CAPITAL LETTER EPSILON WITH ACUTE
 
1238
    $line =~ s/\xB9/\\\|\[EEacgr\]\\\|/g;       # ISOgrk2: GREEK CAPITAL LETTER ETA WITH ACUTE
 
1239
    $line =~ s/\xBA/\\\|\[Iacgr \]\\\|/g;       # ISOgrk2: GREEK CAPITAL LETTER IOTA WITH ACUTE
 
1240
    $line =~ s/\xBB/\\\|\[raquo \]\\\|/g;       # ISOnum : RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
 
1241
    $line =~ s/\xBC/\\\|\[Oacgr \]\\\|/g;       # ISOgrk2: GREEK CAPITAL LETTER OMICRON WITH ACUTE
 
1242
    $line =~ s/\xBD/\\\|\[frac12\]\\\|/g;       # ISOnum : VULGAR FRACTION ONE HALF
 
1243
    $line =~ s/\xBE/\\\|\[Uacgr \]\\\|/g;       # ISOgrk2: GREEK CAPITAL LETTER UPSILON WITH ACUTE
 
1244
    $line =~ s/\xBF/\\\|\[OHacgr\]\\\|/g;       # ISOgrk2: GREEK CAPITAL LETTER OMEGA WITH ACUTE
 
1245
    $line =~ s/\xC0/\\\|\[idiagr\]\\\|/g;       # ISOgrk2: GREEK SMALL LETTER IOTA WITH ACUTE AND DIERESIS
 
1246
    $line =~ s/\xC1/\\\|\[Agr   \]\\\|/g;       # ISOgrk1: GREEK CAPITAL LETTER ALPHA
 
1247
    $line =~ s/\xC2/\\\|\[Bgr   \]\\\|/g;       # ISOgrk1: GREEK CAPITAL LETTER BETA
 
1248
    $line =~ s/\xC3/\\\|\[Ggr   \]\\\|/g;       # ISOgrk1: GREEK CAPITAL LETTER GAMMA
 
1249
    $line =~ s/\xC4/\\\|\[Dgr   \]\\\|/g;       # ISOgrk1: GREEK CAPITAL LETTER DELTA
 
1250
    $line =~ s/\xC5/\\\|\[Egr   \]\\\|/g;       # ISOgrk1: GREEK CAPITAL LETTER EPSILON
 
1251
    $line =~ s/\xC6/\\\|\[Zgr   \]\\\|/g;       # ISOgrk1: GREEK CAPITAL LETTER ZETA
 
1252
    $line =~ s/\xC7/\\\|\[EEgr  \]\\\|/g;       # ISOgrk1: GREEK CAPITAL LETTER ETA
 
1253
    $line =~ s/\xC8/\\\|\[THgr  \]\\\|/g;       # ISOgrk1: GREEK CAPITAL LETTER THETA
 
1254
    $line =~ s/\xC9/\\\|\[Igr   \]\\\|/g;       # ISOgrk1: GREEK CAPITAL LETTER IOTA
 
1255
    $line =~ s/\xCA/\\\|\[Kgr   \]\\\|/g;       # ISOgrk1: GREEK CAPITAL LETTER KAPPA
 
1256
    $line =~ s/\xCB/\\\|\[Lgr   \]\\\|/g;       # ISOgrk1: GREEK CAPITAL LETTER LAMBDA
 
1257
    $line =~ s/\xCC/\\\|\[Mgr   \]\\\|/g;       # ISOgrk1: GREEK CAPITAL LETTER MU
 
1258
    $line =~ s/\xCD/\\\|\[Ngr   \]\\\|/g;       # ISOgrk1: GREEK CAPITAL LETTER NU
 
1259
    $line =~ s/\xCE/\\\|\[Xgr   \]\\\|/g;       # ISOgrk1: GREEK CAPITAL LETTER XI
 
1260
    $line =~ s/\xCF/\\\|\[Ogr   \]\\\|/g;       # ISOgrk1: GREEK CAPITAL LETTER OMICRON
 
1261
    $line =~ s/\xD0/\\\|\[Pgr   \]\\\|/g;       # ISOgrk1: GREEK CAPITAL LETTER PI
 
1262
    $line =~ s/\xD1/\\\|\[Rgr   \]\\\|/g;       # ISOgrk1: GREEK CAPITAL LETTER RHO
 
1263
    $line =~ s/\xD3/\\\|\[Sgr   \]\\\|/g;       # ISOgrk1: GREEK CAPITAL LETTER SIGMA
 
1264
    $line =~ s/\xD4/\\\|\[Tgr   \]\\\|/g;       # ISOgrk1: GREEK CAPITAL LETTER TAU
 
1265
    $line =~ s/\xD5/\\\|\[Ugr   \]\\\|/g;       # ISOgrk1: GREEK CAPITAL LETTER UPSILON
 
1266
    $line =~ s/\xD6/\\\|\[PHgr  \]\\\|/g;       # ISOgrk1: GREEK CAPITAL LETTER PHI
 
1267
    $line =~ s/\xD7/\\\|\[KHgr  \]\\\|/g;       # ISOgrk1: GREEK CAPITAL LETTER CHI
 
1268
    $line =~ s/\xD8/\\\|\[PSgr  \]\\\|/g;       # ISOgrk1: GREEK CAPITAL LETTER PSI
 
1269
    $line =~ s/\xD9/\\\|\[OHgr  \]\\\|/g;       # ISOgrk1: GREEK CAPITAL LETTER OMEGA
 
1270
    $line =~ s/\xDA/\\\|\[Idigr \]\\\|/g;       # ISOgrk2: GREEK CAPITAL LETTER IOTA WITH DIERESIS
 
1271
    $line =~ s/\xDB/\\\|\[Udigr \]\\\|/g;       # ISOgrk2: GREEK CAPITAL LETTER UPSILON WITH DIERESIS
 
1272
    $line =~ s/\xDC/\\\|\[aacgr \]\\\|/g;       # ISOgrk2: GREEK SMALL LETTER ALPHA WITH ACUTE
 
1273
    $line =~ s/\xDD/\\\|\[eacgr \]\\\|/g;       # ISOgrk2: GREEK SMALL LETTER EPSILON WITH ACUTE
 
1274
    $line =~ s/\xDE/\\\|\[eeacgr\]\\\|/g;       # ISOgrk2: GREEK SMALL LETTER ETA WITH ACUTE
 
1275
    $line =~ s/\xDF/\\\|\[iacgr \]\\\|/g;       # ISOgrk2: GREEK SMALL LETTER IOTA WITH ACUTE
 
1276
    $line =~ s/\xE0/\\\|\[udiagr\]\\\|/g;       # ISOgrk2: GREEK SMALL LETTER UPSILON WITH ACUTE AND DIERESIS
 
1277
    $line =~ s/\xE1/\\\|\[agr   \]\\\|/g;       # ISOgrk1: GREEK SMALL LETTER ALPHA
 
1278
    $line =~ s/\xE2/\\\|\[bgr   \]\\\|/g;       # ISOgrk1: GREEK SMALL LETTER BETA
 
1279
    $line =~ s/\xE3/\\\|\[ggr   \]\\\|/g;       # ISOgrk1: GREEK SMALL LETTER GAMMA
 
1280
    $line =~ s/\xE4/\\\|\[dgr   \]\\\|/g;       # ISOgrk1: GREEK SMALL LETTER DELTA
 
1281
    $line =~ s/\xE5/\\\|\[egr   \]\\\|/g;       # ISOgrk1: GREEK SMALL LETTER EPSILON
 
1282
    $line =~ s/\xE6/\\\|\[zgr   \]\\\|/g;       # ISOgrk1: GREEK SMALL LETTER ZETA
 
1283
    $line =~ s/\xE7/\\\|\[eegr  \]\\\|/g;       # ISOgrk1: GREEK SMALL LETTER ETA
 
1284
    $line =~ s/\xE8/\\\|\[thgr  \]\\\|/g;       # ISOgrk1: GREEK SMALL LETTER THETA
 
1285
    $line =~ s/\xE9/\\\|\[igr   \]\\\|/g;       # ISOgrk1: GREEK SMALL LETTER IOTA
 
1286
    $line =~ s/\xEA/\\\|\[kgr   \]\\\|/g;       # ISOgrk1: GREEK SMALL LETTER KAPPA
 
1287
    $line =~ s/\xEB/\\\|\[lgr   \]\\\|/g;       # ISOgrk1: GREEK SMALL LETTER LAMBDA
 
1288
    $line =~ s/\xEC/\\\|\[mgr   \]\\\|/g;       # ISOgrk1: GREEK SMALL LETTER MU
 
1289
    $line =~ s/\xED/\\\|\[ngr   \]\\\|/g;       # ISOgrk1: GREEK SMALL LETTER NU
 
1290
    $line =~ s/\xEE/\\\|\[xgr   \]\\\|/g;       # ISOgrk1: GREEK SMALL LETTER XI
 
1291
    $line =~ s/\xEF/\\\|\[ogr   \]\\\|/g;       # ISOgrk1: GREEK SMALL LETTER OMICRON
 
1292
    $line =~ s/\xF0/\\\|\[pgr   \]\\\|/g;       # ISOgrk1: GREEK SMALL LETTER PI
 
1293
    $line =~ s/\xF1/\\\|\[rgr   \]\\\|/g;       # ISOgrk1: GREEK SMALL LETTER RHO
 
1294
    $line =~ s/\xF2/\\\|\[sfgr  \]\\\|/g;       # ISOgrk1: GREEK SMALL LETTER FINAL SIGMA
 
1295
    $line =~ s/\xF3/\\\|\[sgr   \]\\\|/g;       # ISOgrk1: GREEK SMALL LETTER SIGMA
 
1296
    $line =~ s/\xF4/\\\|\[tgr   \]\\\|/g;       # ISOgrk1: GREEK SMALL LETTER TAU
 
1297
    $line =~ s/\xF5/\\\|\[ugr   \]\\\|/g;       # ISOgrk1: GREEK SMALL LETTER UPSILON
 
1298
    $line =~ s/\xF6/\\\|\[phgr  \]\\\|/g;       # ISOgrk1: GREEK SMALL LETTER PHI
 
1299
    $line =~ s/\xF7/\\\|\[khgr  \]\\\|/g;       # ISOgrk1: GREEK SMALL LETTER CHI
 
1300
    $line =~ s/\xF8/\\\|\[psgr  \]\\\|/g;       # ISOgrk1: GREEK SMALL LETTER PSI
 
1301
    $line =~ s/\xF9/\\\|\[ohgr  \]\\\|/g;       # ISOgrk1: GREEK SMALL LETTER OMEGA
 
1302
    $line =~ s/\xFA/\\\|\[idigr \]\\\|/g;       # ISOgrk2: GREEK SMALL LETTER IOTA WITH DIERESIS
 
1303
    $line =~ s/\xFB/\\\|\[udigr \]\\\|/g;       # ISOgrk2: GREEK SMALL LETTER UPSILON WITH DIERESIS
 
1304
    $line =~ s/\xFC/\\\|\[oacgr \]\\\|/g;       # ISOgrk2: GREEK SMALL LETTER OMICRON WITH ACUTE
 
1305
    $line =~ s/\xFD/\\\|\[uacgr \]\\\|/g;       # ISOgrk2: GREEK SMALL LETTER UPSILON WITH ACUTE
 
1306
    $line =~ s/\xFE/\\\|\[ohacgr\]\\\|/g;       # ISOgrk2: GREEK SMALL LETTER OMEGA WITH ACUTE
 
1307
 
 
1308
    return ($line);
 
1309
}
 
1310
 
 
1311
#-----------------------------------------------------------------------
 
1312
# ISO 8859-8 into SP SDATA entities.
 
1313
#
 
1314
# There is no ISO entities for hebrew characters.
 
1315
#
 
1316
# &iso_8859_8_sp_text_to_sdata (TEXT)
 
1317
#-----------------------------------------------------------------------
 
1318
sub iso_8859_8_sp_text_to_sdata
 
1319
{
 
1320
    local ($line) = $_[0];
 
1321
 
 
1322
    $line =~ s/\xA2/\\\|\[cent  \]\\\|/g;       # ISOnum : CENT SIGN
 
1323
    $line =~ s/\xA3/\\\|\[pound \]\\\|/g;       # ISOnum : POUND SIGN
 
1324
    $line =~ s/\xA4/\\\|\[curren\]\\\|/g;       # ISOnum : CURRENCY SIGN
 
1325
    $line =~ s/\xA5/\\\|\[yen   \]\\\|/g;       # ISOnum : YEN SIGN
 
1326
    $line =~ s/\xA6/\\\|\[brvbar\]\\\|/g;       # ISOnum : BROKEN BAR
 
1327
    $line =~ s/\xA7/\\\|\[sect  \]\\\|/g;       # ISOnum : SECTION SIGN
 
1328
    $line =~ s/\xA8/\\\|\[die   \]\\\|/g;       # ISOdia : DIERESIS
 
1329
    $line =~ s/\xA9/\\\|\[copy  \]\\\|/g;       # ISOnum : COPYRIGHT SIGN
 
1330
    $line =~ s/\xAA/\\\|\[times \]\\\|/g;       # ISOnum : MULTIPLICATION SIGN
 
1331
    $line =~ s/\xAB/\\\|\[laquo \]\\\|/g;       # ISOnum : LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
 
1332
    $line =~ s/\xAC/\\\|\[not   \]\\\|/g;       # ISOnum : NOT SIGN
 
1333
    $line =~ s/\xAD/\\\|\[shy   \]\\\|/g;       # ISOnum : SOFT HYPHEN
 
1334
    $line =~ s/\xAE/\\\|\[reg   \]\\\|/g;       # ISOnum : REGISTERED SIGN
 
1335
    $line =~ s/\xAF/\\\|\[macr  \]\\\|/g;       # ISOdia : OVERLINE (MACRON)
 
1336
    $line =~ s/\xB0/\\\|\[deg   \]\\\|/g;       # ISOnum : DEGREE SIGN
 
1337
    $line =~ s/\xB1/\\\|\[plusmn\]\\\|/g;       # ISOnum : PLUS-MINUS SIGN
 
1338
    $line =~ s/\xB2/\\\|\[sup2  \]\\\|/g;       # ISOnum : SUPERSCRIPT TWO
 
1339
    $line =~ s/\xB3/\\\|\[sup3  \]\\\|/g;       # ISOnum : SUPERSCRIPT THREE
 
1340
    $line =~ s/\xB4/\\\|\[acute \]\\\|/g;       # ISOdia : ACUTE ACCENT
 
1341
    $line =~ s/\xB5/\\\|\[micro \]\\\|/g;       # ISOnum : MICRO SIGN
 
1342
    $line =~ s/\xB6/\\\|\[para  \]\\\|/g;       # ISOnum : PILCROW SIGN
 
1343
    $line =~ s/\xB7/\\\|\[middot\]\\\|/g;       # ISOnum : MIDDLE DOT
 
1344
    $line =~ s/\xB8/\\\|\[cedil \]\\\|/g;       # ISOdia : CEDILLA
 
1345
    $line =~ s/\xB9/\\\|\[sup1  \]\\\|/g;       # ISOnum : SUPERSCRIPT ONE
 
1346
    $line =~ s/\xBA/\\\|\[divide\]\\\|/g;       # ISOlat1: DIVISION SIGN
 
1347
    $line =~ s/\xBB/\\\|\[raquo \]\\\|/g;       # ISOnum : RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
 
1348
    $line =~ s/\xBC/\\\|\[frac14\]\\\|/g;       # ISOnum : VULGAR FRACTION ONE QUARTER
 
1349
    $line =~ s/\xBD/\\\|\[frac12\]\\\|/g;       # ISOnum : VULGAR FRACTION ONE HALF
 
1350
    $line =~ s/\xBE/\\\|\[frac34\]\\\|/g;       # ISOnum : VULGAR FRACTION THREE QUARTERS
 
1351
 
 
1352
    return ($line);
 
1353
}
 
1354
 
 
1355
 
 
1356
#-----------------------------------------------------------------------
 
1357
# ISO 8859-9 into SP SDATA entities.
 
1358
#
 
1359
# &iso_8859_9_sp_text_to_sdata (TEXT)
 
1360
#-----------------------------------------------------------------------
 
1361
sub iso_8859_9_sp_text_to_sdata
 
1362
{
 
1363
    local ($line) = $_[0];
 
1364
 
 
1365
    $line =~ s/\xA1/\\\|\[iexcl \]\\\|/g;       # ISOnum : INVERTED EXCLAMATION MARK
 
1366
    $line =~ s/\xA2/\\\|\[cent  \]\\\|/g;       # ISOnum : CENT SIGN
 
1367
    $line =~ s/\xA3/\\\|\[pound \]\\\|/g;       # ISOnum : POUND SIGN
 
1368
    $line =~ s/\xA4/\\\|\[curren\]\\\|/g;       # ISOnum : CURRENCY SIGN
 
1369
    $line =~ s/\xA5/\\\|\[yen   \]\\\|/g;       # ISOnum : YEN SIGN
 
1370
    $line =~ s/\xA6/\\\|\[brvbar\]\\\|/g;       # ISOnum : BROKEN BAR
 
1371
    $line =~ s/\xA7/\\\|\[sect  \]\\\|/g;       # ISOnum : SECTION SIGN
 
1372
    $line =~ s/\xA8/\\\|\[die   \]\\\|/g;       # ISOdia : DIERESIS
 
1373
    $line =~ s/\xA9/\\\|\[copy  \]\\\|/g;       # ISOnum : COPYRIGHT SIGN
 
1374
    $line =~ s/\xAA/\\\|\[ordf  \]\\\|/g;       # ISOnum : FEMININE ORDINAL INDICATOR
 
1375
    $line =~ s/\xAB/\\\|\[laquo \]\\\|/g;       # ISOnum : LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
 
1376
    $line =~ s/\xAC/\\\|\[not   \]\\\|/g;       # ISOnum : NOT SIGN
 
1377
    $line =~ s/\xAD/\\\|\[shy   \]\\\|/g;       # ISOnum : SOFT HYPHEN
 
1378
    $line =~ s/\xAE/\\\|\[reg   \]\\\|/g;       # ISOnum : REGISTERED SIGN
 
1379
    $line =~ s/\xAF/\\\|\[macr  \]\\\|/g;       # ISOdia : OVERLINE (MACRON)
 
1380
    $line =~ s/\xB0/\\\|\[deg   \]\\\|/g;       # ISOnum : DEGREE SIGN
 
1381
    $line =~ s/\xB1/\\\|\[plusmn\]\\\|/g;       # ISOnum : PLUS-MINUS SIGN
 
1382
    $line =~ s/\xB2/\\\|\[sup2  \]\\\|/g;       # ISOnum : SUPERSCRIPT TWO
 
1383
    $line =~ s/\xB3/\\\|\[sup3  \]\\\|/g;       # ISOnum : SUPERSCRIPT THREE
 
1384
    $line =~ s/\xB4/\\\|\[acute \]\\\|/g;       # ISOdia : ACUTE ACCENT
 
1385
    $line =~ s/\xB5/\\\|\[micro \]\\\|/g;       # ISOnum : MICRO SIGN
 
1386
    $line =~ s/\xB6/\\\|\[para  \]\\\|/g;       # ISOnum : PILCROW SIGN
 
1387
    $line =~ s/\xB7/\\\|\[middot\]\\\|/g;       # ISOnum : MIDDLE DOT
 
1388
    $line =~ s/\xB8/\\\|\[cedil \]\\\|/g;       # ISOdia : CEDILLA
 
1389
    $line =~ s/\xB9/\\\|\[sup1  \]\\\|/g;       # ISOnum : SUPERSCRIPT ONE
 
1390
    $line =~ s/\xBA/\\\|\[ordm  \]\\\|/g;       # ISOnum : MASCULINE ORDINAL INDICATOR
 
1391
    $line =~ s/\xBB/\\\|\[raquo \]\\\|/g;       # ISOnum : RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
 
1392
    $line =~ s/\xBC/\\\|\[frac14\]\\\|/g;       # ISOnum : VULGAR FRACTION ONE QUARTER
 
1393
    $line =~ s/\xBD/\\\|\[frac12\]\\\|/g;       # ISOnum : VULGAR FRACTION ONE HALF
 
1394
    $line =~ s/\xBE/\\\|\[frac34\]\\\|/g;       # ISOnum : VULGAR FRACTION THREE QUARTERS
 
1395
    $line =~ s/\xBF/\\\|\[iquest\]\\\|/g;       # ISOnum : INVERTED QUESTION MARK
 
1396
    $line =~ s/\xC0/\\\|\[Agrave\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER A WITH GRAVE
 
1397
    $line =~ s/\xC1/\\\|\[Aacute\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER A WITH ACUTE
 
1398
    $line =~ s/\xC2/\\\|\[Acirc \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER A WITH CIRCUMFLEX
 
1399
    $line =~ s/\xC3/\\\|\[Atilde\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER A WITH TILDE
 
1400
    $line =~ s/\xC4/\\\|\[Auml  \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER A WITH DIERESIS
 
1401
    $line =~ s/\xC5/\\\|\[Aring \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER A WITH RING ABOVE
 
1402
    $line =~ s/\xC6/\\\|\[AElig \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER AE
 
1403
    $line =~ s/\xC7/\\\|\[Ccedil\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER C WITH CEDILLA
 
1404
    $line =~ s/\xC8/\\\|\[Egrave\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER E WITH GRAVE
 
1405
    $line =~ s/\xC9/\\\|\[Eacute\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER E WITH ACUTE
 
1406
    $line =~ s/\xCA/\\\|\[Ecirc \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER E WITH CIRCUMFLEX
 
1407
    $line =~ s/\xCB/\\\|\[Euml  \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER E WITH DIERESIS
 
1408
    $line =~ s/\xCC/\\\|\[Igrave\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER I WITH GRAVE
 
1409
    $line =~ s/\xCD/\\\|\[Iacute\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER I WITH ACUTE
 
1410
    $line =~ s/\xCE/\\\|\[Icirc \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER I WITH CIRCUMFLEX
 
1411
    $line =~ s/\xCF/\\\|\[Iuml  \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER I WITH DIERESIS
 
1412
    $line =~ s/\xD0/\\\|\[Gbreve\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER G WITH BREVE
 
1413
    $line =~ s/\xD1/\\\|\[Ntilde\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER N WITH TILDE
 
1414
    $line =~ s/\xD2/\\\|\[Ograve\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER O WITH GRAVE
 
1415
    $line =~ s/\xD3/\\\|\[Oacute\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER O WITH ACUTE
 
1416
    $line =~ s/\xD4/\\\|\[Ocirc \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER O WITH CIRCUMFLEX
 
1417
    $line =~ s/\xD5/\\\|\[Otilde\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER O WITH TILDE
 
1418
    $line =~ s/\xD6/\\\|\[Ouml  \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER O WITH DIERESIS
 
1419
    $line =~ s/\xD7/\\\|\[times \]\\\|/g;       # ISOnum : MULTIPLICATION SIGN
 
1420
    $line =~ s/\xD8/\\\|\[Oslash\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER O WITH STROKE
 
1421
    $line =~ s/\xD9/\\\|\[Ugrave\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER U WITH GRAVE
 
1422
    $line =~ s/\xDA/\\\|\[Uacute\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER U WITH ACUTE
 
1423
    $line =~ s/\xDB/\\\|\[Ucirc \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER U WITH CIRCUMFLEX
 
1424
    $line =~ s/\xDC/\\\|\[Uuml  \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER U WITH DIERESIS
 
1425
    $line =~ s/\xDD/\\\|\[Idot  \]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER I WITH DOT ABOVE
 
1426
    $line =~ s/\xDE/\\\|\[Scedil\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER S WITH CEDILLA
 
1427
    $line =~ s/\xDF/\\\|\[szlig \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER SHARP S (German)
 
1428
    $line =~ s/\xE0/\\\|\[agrave\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER A WITH GRAVE
 
1429
    $line =~ s/\xE1/\\\|\[aacute\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER A WITH ACUTE
 
1430
    $line =~ s/\xE2/\\\|\[acirc \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER A WITH CIRCUMFLEX
 
1431
    $line =~ s/\xE3/\\\|\[atilde\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER A WITH TILDE
 
1432
    $line =~ s/\xE4/\\\|\[auml  \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER A WITH DIERESIS
 
1433
    $line =~ s/\xE5/\\\|\[aring \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER A WITH RING ABOVE
 
1434
    $line =~ s/\xE6/\\\|\[aelig \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER AE
 
1435
    $line =~ s/\xE7/\\\|\[ccedil\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER C WITH CEDILLA
 
1436
    $line =~ s/\xE8/\\\|\[egrave\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER E WITH GRAVE
 
1437
    $line =~ s/\xE9/\\\|\[eacute\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER E WITH ACUTE
 
1438
    $line =~ s/\xEA/\\\|\[eogon \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER E WITH OGONEK
 
1439
    $line =~ s/\xEB/\\\|\[euml  \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER E WITH DIERESIS
 
1440
    $line =~ s/\xEC/\\\|\[edot  \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER E WITH DOT ABOVE
 
1441
    $line =~ s/\xED/\\\|\[iacute\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER I WITH ACUTE
 
1442
    $line =~ s/\xEE/\\\|\[icirc \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER I WITH CIRCUMFLEX
 
1443
    $line =~ s/\xEF/\\\|\[imacr \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER I WITH MACRON
 
1444
    $line =~ s/\xF0/\\\|\[gbreve\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER G WITH BREVE
 
1445
    $line =~ s/\xF1/\\\|\[ntilde\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER N WITH TILDE
 
1446
    $line =~ s/\xF2/\\\|\[ograve\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER O WITH GRAVE
 
1447
    $line =~ s/\xF3/\\\|\[oacute\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER O WITH ACUTE
 
1448
    $line =~ s/\xF4/\\\|\[ocirc \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER O WITH CIRCUMFLEX
 
1449
    $line =~ s/\xF5/\\\|\[otilde\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER O WITH TILDE
 
1450
    $line =~ s/\xF6/\\\|\[ouml  \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER O WITH DIERESIS
 
1451
    $line =~ s/\xF7/\\\|\[divide\]\\\|/g;       # ISOlat1: DIVISION SIGN
 
1452
    $line =~ s/\xF8/\\\|\[oslash\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER O WITH STROKE
 
1453
    $line =~ s/\xF9/\\\|\[ugrave\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER U WITH GRAVE
 
1454
    $line =~ s/\xFA/\\\|\[uacute\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER U WITH ACUTE
 
1455
    $line =~ s/\xFB/\\\|\[ucirc \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER U WITH CIRCUMFLEX
 
1456
    $line =~ s/\xFC/\\\|\[uuml  \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER U WITH DIERESIS
 
1457
    $line =~ s/\xFD/\\\|\[inodot\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER I DOTLESS
 
1458
    $line =~ s/\xFE/\\\|\[scedil\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER S WITH CEDILLA
 
1459
    $line =~ s/\xFF/\\\|\[yuml  \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER Y WITH DIERESIS
 
1460
 
 
1461
    return ($line);
 
1462
}
 
1463
 
 
1464
 
 
1465
#-----------------------------------------------------------------------
 
1466
# ISO 8859-10 into SP SDATA entities.
 
1467
#
 
1468
# &iso_8859_10_sp_text_to_sdata (TEXT)
 
1469
#-----------------------------------------------------------------------
 
1470
sub iso_8859_10_sp_text_to_sdata
 
1471
{
 
1472
    local ($line) = $_[0];
 
1473
 
 
1474
    $line =~ s/\xA1/\\\|\[Aogon \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER A WITH OGONEK
 
1475
    $line =~ s/\xA2/\\\|\[Emacr \]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER E WITH MACRON
 
1476
    $line =~ s/\xA3/\\\|\[Gcedil\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER G WITH CEDILLA
 
1477
    $line =~ s/\xA4/\\\|\[Imacr \]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER I WITH MACRON
 
1478
    $line =~ s/\xA5/\\\|\[Itilde\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER I WITH TILDE
 
1479
    $line =~ s/\xA6/\\\|\[Kcedil\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER K WITH CEDILLA
 
1480
    $line =~ s/\xA7/\\\|\[Lcedil\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER L WITH CEDILLA
 
1481
    $line =~ s/\xA8/\\\|\[Nacute\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER N WITH ACUTE
 
1482
    $line =~ s/\xA9/\\\|\[Rcedil\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER R WITH CEDILLA
 
1483
    $line =~ s/\xAA/\\\|\[Scaron\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER S WITH CARON
 
1484
    $line =~ s/\xAB/\\\|\[Tstrok\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER T WITH STROKE
 
1485
    $line =~ s/\xAC/\\\|\[Zcaron\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER Z WITH CARON
 
1486
    $line =~ s/\xAD/\\\|\[shy   \]\\\|/g;       # ISOnum : SOFT HYPHEN
 
1487
    $line =~ s/\xAE/\\\|\[kgreen\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER KRA (Greenlandic)
 
1488
    $line =~ s/\xAF/\\\|\[end   \]\\\|/g;       # ISOlat?: LATIN SMALL LETTER END (Lappish)
 
1489
    $line =~ s/\xB0/\\\|\[dstrok\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER d WITH STROKE
 
1490
    $line =~ s/\xB1/\\\|\[aogon \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER a WITH OGONEK
 
1491
    $line =~ s/\xB2/\\\|\[emacr \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER e WITH MACRON
 
1492
    $line =~ s/\xB3/\\\|\[gcedil\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER g WITH CEDILLA
 
1493
    $line =~ s/\xB4/\\\|\[imacr \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER i WITH MACRON
 
1494
    $line =~ s/\xB5/\\\|\[itilde\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER i WITH TILDE
 
1495
    $line =~ s/\xB6/\\\|\[kcedil\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER k WITH CEDILLA
 
1496
    $line =~ s/\xB7/\\\|\[lcedil\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER l WITH CEDILLA
 
1497
    $line =~ s/\xB8/\\\|\[nacute\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER n WITH ACUTE
 
1498
    $line =~ s/\xB9/\\\|\[rcedil\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER r WITH CEDILLA
 
1499
    $line =~ s/\xBA/\\\|\[scaron\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER s WITH CARON
 
1500
    $line =~ s/\xBB/\\\|\[tstrok\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER t WITH STROKE
 
1501
    $line =~ s/\xBC/\\\|\[zcaron\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER z WITH CARON
 
1502
    $line =~ s/\xBD/\\\|\[sect  \]\\\|/g;       # ISOnum : SECTION SIGN
 
1503
    $line =~ s/\xBE/\\\|\[szlig \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER SHARP s (German)
 
1504
    $line =~ s/\xBF/\\\|\[eng   \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER ENG (Lappish)
 
1505
    $line =~ s/\xC0/\\\|\[Amacr \]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER A WITH MACRON
 
1506
    $line =~ s/\xC1/\\\|\[Aacute\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER A WITH ACUTE
 
1507
    $line =~ s/\xC2/\\\|\[Acirc \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER A WITH CIRCUMFLEX
 
1508
    $line =~ s/\xC3/\\\|\[Atilde\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER A WITH TILDE
 
1509
    $line =~ s/\xC4/\\\|\[Auml  \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER A WITH DIERESIS
 
1510
    $line =~ s/\xC5/\\\|\[Aring \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER A WITH RING ABOVE
 
1511
    $line =~ s/\xC6/\\\|\[AElig \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER AE
 
1512
    $line =~ s/\xC7/\\\|\[Iogon \]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER I WITH OGONEK
 
1513
    $line =~ s/\xC8/\\\|\[Ccaron\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER C WITH CARON
 
1514
    $line =~ s/\xC9/\\\|\[Eacute\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER E WITH ACUTE
 
1515
    $line =~ s/\xCA/\\\|\[Eogon \]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER E WITH OGONEK
 
1516
    $line =~ s/\xCB/\\\|\[Euml  \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER E WITH DIERESIS
 
1517
    $line =~ s/\xCC/\\\|\[Edot  \]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER E WITH DOT ABOVE
 
1518
    $line =~ s/\xCD/\\\|\[Iacute\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER I WITH ACUTE
 
1519
    $line =~ s/\xCE/\\\|\[Icirc \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER I WITH CIRCUMFLEX
 
1520
    $line =~ s/\xCF/\\\|\[Iuml  \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER I WITH DIERESIS
 
1521
    $line =~ s/\xD0/\\\|\[Dstrok\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER D WITH STROKE
 
1522
    $line =~ s/\xD1/\\\|\[Ncedil\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER N WITH CEDILLA
 
1523
    $line =~ s/\xD2/\\\|\[Omacr \]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER O WITH MACRON
 
1524
    $line =~ s/\xD3/\\\|\[Oacute\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER O WITH ACUTE
 
1525
    $line =~ s/\xD4/\\\|\[Ocirc \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER O WITH CIRCUMFLEX
 
1526
    $line =~ s/\xD5/\\\|\[Otilde\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER O WITH TILDE
 
1527
    $line =~ s/\xD6/\\\|\[Ouml  \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER O WITH DIERESIS
 
1528
    $line =~ s/\xD7/\\\|\[Utilde\]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER U WITH TILDE
 
1529
    $line =~ s/\xD8/\\\|\[Oslash\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER O WITH STROKE
 
1530
    $line =~ s/\xD9/\\\|\[Uogon \]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER U WITH OGONEK
 
1531
    $line =~ s/\xDA/\\\|\[Uacute\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER U WITH ACUTE
 
1532
    $line =~ s/\xDB/\\\|\[Ucirc \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER U WITH CIRCUMFLEX
 
1533
    $line =~ s/\xDC/\\\|\[Uuml  \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER U WITH DIERESIS
 
1534
    $line =~ s/\xDD/\\\|\[Yacute\]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER Y WITH ACUTE
 
1535
    $line =~ s/\xDE/\\\|\[THORN \]\\\|/g;       # ISOlat1: LATIN CAPITAL LETTER THORN (Icelandic)
 
1536
    $line =~ s/\xDF/\\\|\[Umacr \]\\\|/g;       # ISOlat2: LATIN CAPITAL LETTER U WITH MACRON
 
1537
    $line =~ s/\xE0/\\\|\[amacr \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER a WITH MACRON
 
1538
    $line =~ s/\xE1/\\\|\[aacute\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER a WITH ACUTE
 
1539
    $line =~ s/\xE2/\\\|\[acirc \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER a WITH CIRCUMFLEX
 
1540
    $line =~ s/\xE3/\\\|\[atilde\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER a WITH TILDE
 
1541
    $line =~ s/\xE4/\\\|\[auml  \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER a WITH DIERESIS
 
1542
    $line =~ s/\xE5/\\\|\[aring \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER a WITH RING ABOVE
 
1543
    $line =~ s/\xE6/\\\|\[aelig \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER ae
 
1544
    $line =~ s/\xE7/\\\|\[iogon \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER i WITH OGONEK
 
1545
    $line =~ s/\xE8/\\\|\[ccaron\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER c WITH CARON
 
1546
    $line =~ s/\xE9/\\\|\[eacute\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER e WITH ACUTE
 
1547
    $line =~ s/\xEA/\\\|\[eogon \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER e WITH OGONEK
 
1548
    $line =~ s/\xEB/\\\|\[euml  \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER e WITH DIERESIS
 
1549
    $line =~ s/\xEC/\\\|\[edot  \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER e WITH DOT ABOVE
 
1550
    $line =~ s/\xED/\\\|\[iacute\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER i WITH ACUTE
 
1551
    $line =~ s/\xEE/\\\|\[icirc \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER i WITH CIRCUMFLEX
 
1552
    $line =~ s/\xEF/\\\|\[iuml  \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER i WITH DIERESIS
 
1553
    $line =~ s/\xF0/\\\|\[eth   \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER ETH (Icelandic)
 
1554
    $line =~ s/\xF1/\\\|\[ncedil\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER n WITH CEDILLA
 
1555
    $line =~ s/\xF2/\\\|\[omacr \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER o WITH MACRON
 
1556
    $line =~ s/\xF3/\\\|\[oacute\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER o WITH ACUTE
 
1557
    $line =~ s/\xF4/\\\|\[ocirc \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER o WITH CIRCUMFLEX
 
1558
    $line =~ s/\xF5/\\\|\[otilde\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER o WITH TILDE
 
1559
    $line =~ s/\xF6/\\\|\[ouml  \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER o WITH DIERESIS
 
1560
    $line =~ s/\xF7/\\\|\[utilde\]\\\|/g;       # ISOlat2: LATIN SMALL LETTER u WITH TILDE
 
1561
    $line =~ s/\xF8/\\\|\[oslash\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER o WITH STROKE
 
1562
    $line =~ s/\xF9/\\\|\[uogon \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER u WITH OGONEK
 
1563
    $line =~ s/\xFA/\\\|\[uacute\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER u WITH ACUTE
 
1564
    $line =~ s/\xFB/\\\|\[ucirc \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER u WITH CIRCUMFLEX
 
1565
    $line =~ s/\xFC/\\\|\[uuml  \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER u WITH DIERESIS
 
1566
    $line =~ s/\xFD/\\\|\[yacute\]\\\|/g;       # ISOlat1: LATIN SMALL LETTER y WITH ACUTE
 
1567
    $line =~ s/\xFE/\\\|\[thorn \]\\\|/g;       # ISOlat1: LATIN SMALL LETTER THORN (Icelandic)
 
1568
    $line =~ s/\xFF/\\\|\[umacr \]\\\|/g;       # ISOlat2: LATIN SMALL LETTER u WITH MACRON
 
1569
 
 
1570
    return ($line);
 
1571
}
 
1572
 
 
1573
 
 
1574
#-----------------------------------------------------------------------
 
1575
# Convert an SP SDATA string into Texinfo back-end code.
 
1576
#
 
1577
# &sp_sdata_text_to_sp_texinfo (TEXT)
 
1578
#-----------------------------------------------------------------------
 
1579
sub sp_sdata_text_to_sp_texinfo
 
1580
{
 
1581
    local ($line) = $_[0];
 
1582
 
 
1583
    #ISOpub
 
1584
    $line =~ s/\\\|\[emsp  \]\\\|/\@ /g;                # em space
 
1585
    $line =~ s/\\\|\[ensp  \]\\\|/\[ensp  \]/g;         # en space (1/2-em)
 
1586
    $line =~ s/\\\|\[emsp3 \]\\\|/\[emsp3 \]/g;         # 1/3-em space
 
1587
    $line =~ s/\\\|\[emsp4 \]\\\|/\[emsp4 \]/g;         # 1/4-em space
 
1588
    $line =~ s/\\\|\[numsp \]\\\|/\[numsp \]/g;         # digit space (width of a number)
 
1589
    $line =~ s/\\\|\[puncsp\]\\\|/\[puncsp\]/g;         # punctuation space (width of comma)
 
1590
    $line =~ s/\\\|\[thinsp\]\\\|/\[thinsp\]/g;         # thin space (1/6-em)
 
1591
    $line =~ s/\\\|\[hairsp\]\\\|/\[hairsp\]/g;         # hair space
 
1592
    $line =~ s/\\\|\[mdash \]\\\|/\[mdash \]/g;         # em dash
 
1593
    $line =~ s/\\\|\[ndash \]\\\|/\[ndash \]/g;         # en dash
 
1594
    $line =~ s/\\\|\[dash  \]\\\|/\[dash  \]/g;         # hyphen (true graphic)
 
1595
    $line =~ s/\\\|\[blank \]\\\|/\[blank \]/g;         # significant blank symbol
 
1596
    $line =~ s/\\\|\[hellip\]\\\|/\[hellip\]/g;         # ellipsis (horizontal)
 
1597
    $line =~ s/\\\|\[nldr  \]\\\|/\[nldr  \]/g;         # double baseline dot (en leader)
 
1598
    $line =~ s/\\\|\[frac13\]\\\|/1\/3/g;               # fraction one-third
 
1599
    $line =~ s/\\\|\[frac23\]\\\|/2\/3/g;               # fraction two-thirds
 
1600
    $line =~ s/\\\|\[frac15\]\\\|/1\/5/g;               # fraction one-fifth
 
1601
    $line =~ s/\\\|\[frac25\]\\\|/2\/5/g;               # fraction two-fifths
 
1602
    $line =~ s/\\\|\[frac35\]\\\|/3\/5/g;               # fraction three-fifths
 
1603
    $line =~ s/\\\|\[frac45\]\\\|/4\/5/g;               # fraction four-fifths
 
1604
    $line =~ s/\\\|\[frac16\]\\\|/1\/6/g;               # fraction one-sixth
 
1605
    $line =~ s/\\\|\[frac56\]\\\|/5\/6/g;               # fraction five-sixths
 
1606
    $line =~ s/\\\|\[incare\]\\\|/\[incare\]/g;         # in-care-of symbol
 
1607
    $line =~ s/\\\|\[block \]\\\|/\[block \]/g;         # full block
 
1608
    $line =~ s/\\\|\[uhblk \]\\\|/\[uhblk \]/g;         # upper half block
 
1609
    $line =~ s/\\\|\[lhblk \]\\\|/\[lhblk \]/g;         # lower half block
 
1610
    $line =~ s/\\\|\[blk14 \]\\\|/\[blk14 \]/g;         # 25% shaded block
 
1611
    $line =~ s/\\\|\[blk12 \]\\\|/\[blk12 \]/g;         # 50% shaded block
 
1612
    $line =~ s/\\\|\[blk34 \]\\\|/\[blk34 \]/g;         # 75% shaded block
 
1613
    $line =~ s/\\\|\[marker\]\\\|/\[marker\]/g;         # histogram marker
 
1614
    $line =~ s/\\\|\[cir   \]\\\|/\[cir   \]/g;         # circle, open
 
1615
    $line =~ s/\\\|\[squ   \]\\\|/\[squ   \]/g;         # square, open
 
1616
    $line =~ s/\\\|\[rect  \]\\\|/\[rect  \]/g;         # rectangle, open
 
1617
    $line =~ s/\\\|\[utri  \]\\\|/\[utri  \]/g;         # up triangle, open
 
1618
    $line =~ s/\\\|\[dtri  \]\\\|/\[dtri  \]/g;         # down triangle, open
 
1619
    $line =~ s/\\\|\[star  \]\\\|/\[star  \]/g;         # star, open
 
1620
    $line =~ s/\\\|\[bull  \]\\\|/\@bullet\{\}/g;       # round bullet, filled
 
1621
    $line =~ s/\\\|\[squf  \]\\\|/\[squf  \]/g;         # sq bullet, filled
 
1622
    $line =~ s/\\\|\[utrif \]\\\|/\[utrif \]/g;         # up tri, filled
 
1623
    $line =~ s/\\\|\[dtrif \]\\\|/\[dtrif \]/g;         # dn tri, filled
 
1624
    $line =~ s/\\\|\[ltrif \]\\\|/\[ltrif \]/g;         # l tri, filled
 
1625
    $line =~ s/\\\|\[rtrif \]\\\|/\[rtrif \]/g;         # r tri, filled
 
1626
    $line =~ s/\\\|\[clubs \]\\\|/\[clubs \]/g;         # club suit symbol
 
1627
    $line =~ s/\\\|\[diams \]\\\|/\[diams \]/g;         # diamond suit symbol
 
1628
    $line =~ s/\\\|\[hearts\]\\\|/\[hearts\]/g;         # heart suit symbol
 
1629
    $line =~ s/\\\|\[spades\]\\\|/\[spades\]/g;         # spades suit symbol
 
1630
    $line =~ s/\\\|\[malt  \]\\\|/\[malt  \]/g;         # maltese cross
 
1631
    $line =~ s/\\\|\[dagger\]\\\|/\[dagger\]/g;         # dagger
 
1632
    $line =~ s/\\\|\[Dagger\]\\\|/\[Dagger\]/g;         # double dagger
 
1633
    $line =~ s/\\\|\[check \]\\\|/\[check \]/g;         # tick, check mark
 
1634
    $line =~ s/\\\|\[ballot\]\\\|/\[ballot\]/g;         # ballot cross
 
1635
    $line =~ s/\\\|\[sharp \]\\\|/\[sharp \]/g;         # musical sharp
 
1636
    $line =~ s/\\\|\[flat  \]\\\|/\[flat  \]/g;         # musical flat
 
1637
    $line =~ s/\\\|\[male  \]\\\|/\[male  \]/g;         # male symbol
 
1638
    $line =~ s/\\\|\[female\]\\\|/\[female\]/g;         # female symbol
 
1639
    $line =~ s/\\\|\[phone \]\\\|/\[phone \]/g;         # telephone symbol
 
1640
    $line =~ s/\\\|\[telrec\]\\\|/\[telrec\]/g;         # telephone recorder symbol
 
1641
    $line =~ s/\\\|\[copysr\]\\\|/\[copysr\]/g;         # sound recording copyright sign
 
1642
    $line =~ s/\\\|\[caret \]\\\|/\[caret \]/g;         # caret (insertion mark)
 
1643
    $line =~ s/\\\|\[lsquor\]\\\|/\[lsquor\]/g;         # rising single quote, left (low)
 
1644
    $line =~ s/\\\|\[ldquor\]\\\|/\[ldquor\]/g;         # rising dbl quote, left (low)
 
1645
 
 
1646
    $line =~ s/\\\|\[fflig \]\\\|/\[fflig \]/g;         # small ff ligature
 
1647
    $line =~ s/\\\|\[filig \]\\\|/\[filig \]/g;         # small fi ligature
 
1648
    $line =~ s/\\\|\[fjlig \]\\\|/\[fjlig \]/g;         # small fj ligature
 
1649
    $line =~ s/\\\|\[ffilig\]\\\|/\[ffilig\]/g;         # small ffi ligature
 
1650
    $line =~ s/\\\|\[ffllig\]\\\|/\[ffllig\]/g;         # small ffl ligature
 
1651
    $line =~ s/\\\|\[fllig \]\\\|/\[fllig \]/g;         # small fl ligature
 
1652
 
 
1653
    $line =~ s/\\\|\[mldr  \]\\\|/\[mldr  \]/g;         # em leader
 
1654
    $line =~ s/\\\|\[rdquor\]\\\|/\[rdquor\]/g;         # rising dbl quote, right (high)
 
1655
    $line =~ s/\\\|\[rsquor\]\\\|/\[rsquor\]/g;         # rising single quote, right (high)
 
1656
    $line =~ s/\\\|\[vellip\]\\\|/\[vellip\]/g;         # vertical ellipsis
 
1657
 
 
1658
    $line =~ s/\\\|\[hybull\]\\\|/\[hybull\]/g;         # rectangle, filled (hyphen bullet)
 
1659
    $line =~ s/\\\|\[loz   \]\\\|/\[loz   \]/g;         # lozenge or total mark
 
1660
    $line =~ s/\\\|\[lozf  \]\\\|/\[lozf  \]/g;         # lozenge, filled
 
1661
    $line =~ s/\\\|\[ltri  \]\\\|/\[ltri  \]/g;         # l triangle, open
 
1662
    $line =~ s/\\\|\[rtri  \]\\\|/\[rtri  \]/g;         # r triangle, open
 
1663
    $line =~ s/\\\|\[starf \]\\\|/\[starf \]/g;         # star, filled
 
1664
 
 
1665
    $line =~ s/\\\|\[natur \]\\\|/\[natur \]/g;         # music natural
 
1666
    $line =~ s/\\\|\[rx    \]\\\|/\[rx    \]/g;         # pharmaceutical prescription (Rx)
 
1667
    $line =~ s/\\\|\[sext  \]\\\|/\[sext  \]/g;         # sextile (6-pointed star)
 
1668
 
 
1669
    $line =~ s/\\\|\[target\]\\\|/\[target\]/g;         # register mark or target
 
1670
    $line =~ s/\\\|\[dlcrop\]\\\|/\[dlcrop\]/g;         # downward left crop mark 
 
1671
    $line =~ s/\\\|\[drcrop\]\\\|/\[drcrop\]/g;         # downward right crop mark 
 
1672
    $line =~ s/\\\|\[ulcrop\]\\\|/\[ulcrop\]/g;         # upward left crop mark 
 
1673
    $line =~ s/\\\|\[urcrop\]\\\|/\[urcrop\]/g;         # upward right crop mark 
 
1674
 
 
1675
 
 
1676
    # ISOnum
 
1677
    $line =~ s/\\\|\[half  \]\\\|/1\/2/g;               # fraction one-half
 
1678
    $line =~ s/\\\|\[frac12\]\\\|/1\/2/g;               # fraction one-half
 
1679
    $line =~ s/\\\|\[frac14\]\\\|/1\/4/g;               # fraction one-quarter
 
1680
    $line =~ s/\\\|\[frac34\]\\\|/3\/4/g;               # fraction three-quarters
 
1681
    $line =~ s/\\\|\[frac18\]\\\|/1\/8/g;               # fraction one-eighth
 
1682
    $line =~ s/\\\|\[frac38\]\\\|/3\/8/g;               # fraction three-eighths
 
1683
    $line =~ s/\\\|\[frac58\]\\\|/5\/8/g;               # fraction five-eighths
 
1684
    $line =~ s/\\\|\[frac78\]\\\|/7\/8/g;               # fraction seven-eighths
 
1685
 
 
1686
    $line =~ s/\\\|\[sup1  \]\\\|/\[sup1  \]/g;         # superscript one
 
1687
    $line =~ s/\\\|\[sup2  \]\\\|/\[sup2  \]/g;         # superscript two
 
1688
    $line =~ s/\\\|\[sup3  \]\\\|/\[sup3  \]/g;         # superscript three
 
1689
 
 
1690
    $line =~ s/\\\|\[plus  \]\\\|/+/g;                  # plus sign
 
1691
    $line =~ s/\\\|\[plusmn\]\\\|/+\/\@minus{}/g;       # plus-or-minus sign
 
1692
    $line =~ s/\\\|\[lt    \]\\\|/</g;                  # less-than sign
 
1693
    $line =~ s/\\\|\[equals\]\\\|/=/g;                  # equals sign
 
1694
    $line =~ s/\\\|\[gt    \]\\\|/>/g;                  # greater-than sign
 
1695
    $line =~ s/\\\|\[divide\]\\\|/\[divide\]/g;         # divide sign
 
1696
    $line =~ s/\\\|\[times \]\\\|/\[times \]/g;         # multiply sign
 
1697
 
 
1698
    $line =~ s/\\\|\[curren\]\\\|/\[curren\]/g;         # general currency sign
 
1699
    $line =~ s/\\\|\[pound \]\\\|/\@pounds\{\}/g;       # pound sign
 
1700
    $line =~ s/\\\|\[dollar\]\\\|/\$/g;                 # dollar sign
 
1701
    $line =~ s/\\\|\[cent  \]\\\|/\[cent  \]/g;         # cent sign
 
1702
    $line =~ s/\\\|\[yen   \]\\\|/\[yen   \]/g;         # yen sign
 
1703
 
 
1704
    $line =~ s/\\\|\[num   \]\\\|/\#/g;                 # number sign
 
1705
    $line =~ s/\\\|\[percnt\]\\\|/%/g;                  # percent sign
 
1706
    $line =~ s/\\\|\[amp   \]\\\|/&/g;                  # ampersand
 
1707
    $line =~ s/\\\|\[ast   \]\\\|/*/g;                  # asterisk
 
1708
    $line =~ s/\\\|\[commat\]\\\|/\@@/g;                # commercial at
 
1709
    $line =~ s/\\\|\[lsqb  \]\\\|/\[/g;                 # left square bracket
 
1710
    $line =~ s/\\\|\[bsol  \]\\\|/\\/g;                 # reverse solidus
 
1711
    $line =~ s/\\\|\[rsqb  \]\\\|/\]/g;                 # right square bracket
 
1712
    $line =~ s/\\\|\[lcub  \]\\\|/\@\{/g;               # left curly bracket
 
1713
    $line =~ s/\\\|\[horbar\]\\\|/\[horbar\]/g;         # horizontal bar
 
1714
    $line =~ s/\\\|\[verbar\]\\\|/\|/g;                 # vertical bar
 
1715
    $line =~ s/\\\|\[rcub  \]\\\|/\@\}/g;               # right curly bracket
 
1716
    $line =~ s/\\\|\[micro \]\\\|/\[micro \]/g;         # micro sign
 
1717
    $line =~ s/\\\|\[ohm   \]\\\|/\[ohm   \]/g;         # ohm sign
 
1718
    $line =~ s/\\\|\[deg   \]\\\|/\[deg   \]/g;         # degree sign
 
1719
    $line =~ s/\\\|\[ordm  \]\\\|/\[ordm  \]/g;         # ordinal indicator, masculine
 
1720
    $line =~ s/\\\|\[ordf  \]\\\|/\[ordf  \]/g;         # ordinal indicator, feminine
 
1721
    $line =~ s/\\\|\[sect  \]\\\|/\[sect  \]/g;         # section sign
 
1722
    $line =~ s/\\\|\[para  \]\\\|/\[para  \]/g;         # pilcrow (paragraph sign)
 
1723
    $line =~ s/\\\|\[middot\]\\\|/\@bullet\{\}/g;       # middle dot
 
1724
    $line =~ s/\\\|\[larr  \]\\\|/\[larr  \]/g;         # leftward arrow
 
1725
    $line =~ s/\\\|\[rarr  \]\\\|/\[rarr  \]/g;         # rightward arrow
 
1726
    $line =~ s/\\\|\[uarr  \]\\\|/\[uarr  \]/g;         # upward arrow
 
1727
    $line =~ s/\\\|\[darr  \]\\\|/\[darr  \]/g;         # downward arrow
 
1728
    $line =~ s/\\\|\[copy  \]\\\|/\@copyright\{\}/g;    # copyright sign
 
1729
    $line =~ s/\\\|\[reg   \]\\\|/\[reg   \]/g;         # registered sign
 
1730
    $line =~ s/\\\|\[trade \]\\\|/\[trade \]/g;         # trade mark sign
 
1731
    $line =~ s/\\\|\[brvbar\]\\\|/\[brvbar\]/g;         # broken (vertical) bar
 
1732
    $line =~ s/\\\|\[not   \]\\\|/\[not   \]/g;         # not sign
 
1733
    $line =~ s/\\\|\[sung  \]\\\|/\[sung  \]/g;         # music note (sung text sign)
 
1734
 
 
1735
    $line =~ s/\\\|\[excl  \]\\\|/!/g;                  # exclamation mark
 
1736
    $line =~ s/\\\|\[iexcl \]\\\|/\@exclamdown\{\}/g;   # inverted exclamation mark
 
1737
    $line =~ s/\\\|\[quot  \]\\\|/"/g;                  # quotation mark
 
1738
    $line =~ s/\\\|\[apos  \]\\\|/'/g;                  # apostrophe
 
1739
    $line =~ s/\\\|\[lpar  \]\\\|/\(/g;                 # left parenthesis
 
1740
    $line =~ s/\\\|\[rpar  \]\\\|/\)/g;                 # right parenthesis
 
1741
    $line =~ s/\\\|\[comma \]\\\|/,/g;                  # comma
 
1742
    $line =~ s/\\\|\[lowbar\]\\\|/\_/g;                 # low line
 
1743
    $line =~ s/\\\|\[hyphen\]\\\|/-/g;                  # hyphen
 
1744
    $line =~ s/\\\|\[period\]\\\|/\./g;                 # full stop, period
 
1745
    $line =~ s/\\\|\[sol   \]\\\|/\//g;                 # solidus
 
1746
    $line =~ s/\\\|\[colon \]\\\|/:/g;                  # colon
 
1747
    $line =~ s/\\\|\[semi  \]\\\|/;/g;                  # semicolon
 
1748
    $line =~ s/\\\|\[quest \]\\\|/\?/g;                 # question mark
 
1749
    $line =~ s/\\\|\[iquest\]\\\|/\@questiondown\{\}/g; # inverted question mark
 
1750
    $line =~ s/\\\|\[laquo \]\\\|/\[laquo \]/g;         # angle quotation mark, left
 
1751
    $line =~ s/\\\|\[raquo \]\\\|/\[raquo \]/g;         # angle quotation mark, right
 
1752
    $line =~ s/\\\|\[lsquo \]\\\|/\[lsquo \]/g;         # single quotation mark, left
 
1753
    $line =~ s/\\\|\[rsquo \]\\\|/\[rsquo \]/g;         # single quotation mark, right
 
1754
    $line =~ s/\\\|\[ldquo \]\\\|/\[ldquo \]/g;         # double quotation mark, left
 
1755
    $line =~ s/\\\|\[rdquo \]\\\|/\[rdquo \]/g;         # double quotation mark, right
 
1756
    $line =~ s/\\\|\[nbsp  \]\\\|/\@tie\{\}/g;          # no break (required) space
 
1757
    $line =~ s/\\\|\[shy   \]\\\|/\[shy   \]/g;         # soft hyphen
 
1758
 
 
1759
 
 
1760
    # ISOtech
 
1761
    $line =~ s/\\\|\[aleph \]\\\|/\[aleph \]/g;         # aleph, Hebrew
 
1762
    $line =~ s/\\\|\[and   \]\\\|/\[and   \]/g;         # logical and
 
1763
    $line =~ s/\\\|\[ang90 \]\\\|/\[ang90 \]/g;         # right (90 degree) angle
 
1764
    $line =~ s/\\\|\[angsph\]\\\|/\[angsph\]/g;         # angle-spherical
 
1765
    $line =~ s/\\\|\[ap    \]\\\|/\[ap    \]/g;         # approximate
 
1766
    $line =~ s/\\\|\[becaus\]\\\|/\[becaus\]/g;         # because
 
1767
    $line =~ s/\\\|\[bottom\]\\\|/\[bottom\]/g;         # perpendicular
 
1768
    $line =~ s/\\\|\[cap   \]\\\|/\[cap   \]/g;         # intersection
 
1769
    $line =~ s/\\\|\[cong  \]\\\|/\[cong  \]/g;         # congruent with
 
1770
    $line =~ s/\\\|\[conint\]\\\|/\[conint\]/g;         # contour integral operator
 
1771
    $line =~ s/\\\|\[cup   \]\\\|/\[cup   \]/g;         # union or logical sum
 
1772
    $line =~ s/\\\|\[equiv \]\\\|/\@equiv\{\}/g;        # identical with
 
1773
    $line =~ s/\\\|\[exist \]\\\|/\[exist \]/g;         # at least one exists
 
1774
    $line =~ s/\\\|\[forall\]\\\|/\[forall\]/g;         # for all
 
1775
    $line =~ s/\\\|\[fnof  \]\\\|/\[fnof  \]/g;         # function of (italic small f)
 
1776
    $line =~ s/\\\|\[ge    \]\\\|/\[ge    \]/g;         # greater-than-or-equal
 
1777
    $line =~ s/\\\|\[iff   \]\\\|/\[iff   \]/g;         # if and only if
 
1778
    $line =~ s/\\\|\[infin \]\\\|/\[infin \]/g;         # infinity
 
1779
    $line =~ s/\\\|\[int   \]\\\|/\[int   \]/g;         # integral operator
 
1780
    $line =~ s/\\\|\[isin  \]\\\|/\[isin  \]/g;         # set membership
 
1781
    $line =~ s/\\\|\[lang  \]\\\|/\[lang  \]/g;         # left angle bracket
 
1782
    $line =~ s/\\\|\[lArr  \]\\\|/\[lArr  \]/g;         # is implied by
 
1783
    $line =~ s/\\\|\[le    \]\\\|/\[le    \]/g;         # less-than-or-equal
 
1784
    $line =~ s/\\\|\[minus \]\\\|/\@minus\{\}/g;        # minus sign
 
1785
    $line =~ s/\\\|\[mnplus\]\\\|/\[mnplus\]/g;         # minus-or-plus sign
 
1786
    $line =~ s/\\\|\[nabla \]\\\|/\[nabla \]/g;         # del, Hamilton operator
 
1787
    $line =~ s/\\\|\[ne    \]\\\|/\[ne    \]/g;         # not equal
 
1788
    $line =~ s/\\\|\[ni    \]\\\|/\[ni    \]/g;         # contains
 
1789
    $line =~ s/\\\|\[or    \]\\\|/\[or    \]/g;         # logical or
 
1790
    $line =~ s/\\\|\[par   \]\\\|/\[par   \]/g;         # parallel
 
1791
    $line =~ s/\\\|\[part  \]\\\|/\[part  \]/g;         # partial differential
 
1792
    $line =~ s/\\\|\[permil\]\\\|/\[permil\]/g;         # per thousand
 
1793
    $line =~ s/\\\|\[perp  \]\\\|/\[perp  \]/g;         # perpendicular
 
1794
    $line =~ s/\\\|\[prime \]\\\|/\[prime \]/g;         # prime or minute
 
1795
    $line =~ s/\\\|\[Prime \]\\\|/\[Prime \]/g;         # double prime or second
 
1796
    $line =~ s/\\\|\[prop  \]\\\|/\[prop  \]/g;         # is proportional to
 
1797
    $line =~ s/\\\|\[radic \]\\\|/\[radic \]/g;         # radical
 
1798
    $line =~ s/\\\|\[rang  \]\\\|/\[rang  \]/g;         # right angle bracket
 
1799
    $line =~ s/\\\|\[rArr  \]\\\|/\[rArr  \]/g;         # implies
 
1800
    $line =~ s/\\\|\[sim   \]\\\|/\[sim   \]/g;         # similar
 
1801
    $line =~ s/\\\|\[sime  \]\\\|/\[sime  \]/g;         # similar, equals
 
1802
    $line =~ s/\\\|\[square\]\\\|/\[square\]/g;         # square
 
1803
    $line =~ s/\\\|\[sub   \]\\\|/\[sub   \]/g;         # subset or is implied by
 
1804
    $line =~ s/\\\|\[sube  \]\\\|/\[sube  \]/g;         # subset, equals
 
1805
    $line =~ s/\\\|\[sup   \]\\\|/\[sup   \]/g;         # superset or implies
 
1806
    $line =~ s/\\\|\[supe  \]\\\|/\[supe  \]/g;         # superset, equals
 
1807
    $line =~ s/\\\|\[there4\]\\\|/\[there4\]/g;         # therefore
 
1808
    $line =~ s/\\\|\[Verbar\]\\\|/\[Verbar\]/g;         # dbl vertical bar
 
1809
 
 
1810
    $line =~ s/\\\|\[angst \]\\\|/\[angst \]/g;         # capital A, ring
 
1811
    $line =~ s/\\\|\[bernou\]\\\|/\[bernou\]/g;         # Bernoulli function (script capital B)
 
1812
    $line =~ s/\\\|\[compfn\]\\\|/\[compfn\]/g;         # composite function (small circle)
 
1813
    $line =~ s/\\\|\[Dot   \]\\\|/\[Dot   \]/g;         # dieresis or umlaut mark
 
1814
    $line =~ s/\\\|\[DotDot\]\\\|/\[DotDot\]/g;         # four dots above
 
1815
    $line =~ s/\\\|\[hamilt\]\\\|/\[hamilt\]/g;         # Hamiltonian (script capital H)
 
1816
    $line =~ s/\\\|\[lagran\]\\\|/\[lagran\]/g;         # Lagrangian (script capital L)
 
1817
    $line =~ s/\\\|\[lowast\]\\\|/\[lowast\]/g;         # low asterisk
 
1818
    $line =~ s/\\\|\[notin \]\\\|/\[notin \]/g;         # negated set membership
 
1819
    $line =~ s/\\\|\[order \]\\\|/\[order \]/g;         # order of (script small o)
 
1820
    $line =~ s/\\\|\[phmmat\]\\\|/\[phmmat\]/g;         # physics M-matrix (script capital M)
 
1821
    $line =~ s/\\\|\[tdot  \]\\\|/\[tdot  \]/g;         # three dots above
 
1822
    $line =~ s/\\\|\[tprime\]\\\|/\[tprime\]/g;         # triple prime
 
1823
    $line =~ s/\\\|\[wedgeq\]\\\|/\[wedgeq\]/g;         # corresponds to (wedge, equals)
 
1824
 
 
1825
 
 
1826
    # ISOlat1
 
1827
    $line =~ s/\\\|\[aacute\]\\\|/\@\'a/g;              # small a, acute accent
 
1828
    $line =~ s/\\\|\[Aacute\]\\\|/\@\'A/g;              # capital A, acute accent
 
1829
    $line =~ s/\\\|\[acirc \]\\\|/\@\^a/g;              # small a, circumflex accent
 
1830
    $line =~ s/\\\|\[Acirc \]\\\|/\@\^A/g;              # capital A, circumflex accent
 
1831
    $line =~ s/\\\|\[agrave\]\\\|/\@\`a/g;              # small a, grave accent
 
1832
    $line =~ s/\\\|\[Agrave\]\\\|/\@\`A/g;              # capital A, grave accent
 
1833
    $line =~ s/\\\|\[aring \]\\\|/\@ringaccent\{a\}/g;  # small a, ring
 
1834
    $line =~ s/\\\|\[Aring \]\\\|/\@ringaccent\{A\}/g;  # capital A, ring
 
1835
    $line =~ s/\\\|\[atilde\]\\\|/\@\~a/g;              # small a, tilde
 
1836
    $line =~ s/\\\|\[Atilde\]\\\|/\@\~A/g;              # capital A, tilde
 
1837
    $line =~ s/\\\|\[auml  \]\\\|/\@\"a/g;              # small a, dieresis or umlaut mark
 
1838
    $line =~ s/\\\|\[Auml  \]\\\|/\@\"A/g;              # capital A, dieresis or umlaut mark
 
1839
    $line =~ s/\\\|\[aelig \]\\\|/\@ae\{\}/g;           # small ae diphthong (ligature)
 
1840
    $line =~ s/\\\|\[AElig \]\\\|/\@AE\{\}/g;           # capital AE diphthong (ligature)
 
1841
    $line =~ s/\\\|\[ccedil\]\\\|/\@,\{c\}/g;           # small c, cedilla
 
1842
    $line =~ s/\\\|\[Ccedil\]\\\|/\@,\{C\}/g;           # capital C, cedilla
 
1843
    $line =~ s/\\\|\[eth   \]\\\|/\[eth   \]/g;         # small eth, Icelandic
 
1844
    $line =~ s/\\\|\[ETH   \]\\\|/\[ETH   \]/g;         # capital Eth, Icelandic
 
1845
    $line =~ s/\\\|\[eacute\]\\\|/\@\'e/g;              # small e, acute accent
 
1846
    $line =~ s/\\\|\[Eacute\]\\\|/\@\'E/g;              # capital E, acute accent
 
1847
    $line =~ s/\\\|\[ecirc \]\\\|/\@\^e/g;              # small e, circumflex accent
 
1848
    $line =~ s/\\\|\[Ecirc \]\\\|/\@\^E/g;              # capital E, circumflex accent
 
1849
    $line =~ s/\\\|\[egrave\]\\\|/\@\`e/g;              # small e, grave accent
 
1850
    $line =~ s/\\\|\[Egrave\]\\\|/\@\`E/g;              # capital E, grave accent
 
1851
    $line =~ s/\\\|\[euml  \]\\\|/\@\"e/g;              # small e, dieresis or umlaut mark
 
1852
    $line =~ s/\\\|\[Euml  \]\\\|/\@\"E/g;              # capital E, dieresis or umlaut mark
 
1853
    $line =~ s/\\\|\[iacute\]\\\|/\@\'i/g;              # small i, acute accent
 
1854
    $line =~ s/\\\|\[Iacute\]\\\|/\@\'I/g;              # capital I, acute accent
 
1855
    $line =~ s/\\\|\[icirc \]\\\|/\@\^i/g;              # small i, circumflex accent
 
1856
    $line =~ s/\\\|\[Icirc \]\\\|/\@\^I/g;              # capital I, circumflex accent
 
1857
    $line =~ s/\\\|\[igrave\]\\\|/\@\`i/g;              # small i, grave accent
 
1858
    $line =~ s/\\\|\[Igrave\]\\\|/\@\`I/g;              # capital I, grave accent
 
1859
    $line =~ s/\\\|\[iuml  \]\\\|/\@\"i/g;              # small i, dieresis or umlaut mark
 
1860
    $line =~ s/\\\|\[Iuml  \]\\\|/\@\"I/g;              # capital I, dieresis or umlaut mark
 
1861
    $line =~ s/\\\|\[ntilde\]\\\|/\@\~n/g;              # small n, tilde
 
1862
    $line =~ s/\\\|\[Ntilde\]\\\|/\@\~N/g;              # capital N, tilde
 
1863
    $line =~ s/\\\|\[oacute\]\\\|/\@\'o/g;              # small o, acute accent
 
1864
    $line =~ s/\\\|\[Oacute\]\\\|/\@\'O/g;              # capital O, acute accent
 
1865
    $line =~ s/\\\|\[ocirc \]\\\|/\@\^o/g;              # small o, circumflex accent
 
1866
    $line =~ s/\\\|\[Ocirc \]\\\|/\@\^O/g;              # capital O, circumflex accent
 
1867
    $line =~ s/\\\|\[ograve\]\\\|/\@\`o/g;              # small o, grave accent
 
1868
    $line =~ s/\\\|\[Ograve\]\\\|/\@\`O/g;              # capital O, grave accent
 
1869
    $line =~ s/\\\|\[oslash\]\\\|/\@o\{\}/g;            # small o, slash
 
1870
    $line =~ s/\\\|\[Oslash\]\\\|/\@O\{\}/g;            # capital O, slash
 
1871
    $line =~ s/\\\|\[otilde\]\\\|/\@\~o/g;              # small o, tilde
 
1872
    $line =~ s/\\\|\[Otilde\]\\\|/\@\~O/g;              # capital O, tilde
 
1873
    $line =~ s/\\\|\[ouml  \]\\\|/\@\"o/g;              # small o, dieresis or umlaut mark
 
1874
    $line =~ s/\\\|\[Ouml  \]\\\|/\@\"O/g;              # capital O, dieresis or umlaut mark
 
1875
    $line =~ s/\\\|\[szlig \]\\\|/\@ss\{\}/g;           # small sharp s, German (sz ligature)
 
1876
    $line =~ s/\\\|\[thorn \]\\\|/\[thorn \]/g;         # small thorn, Icelandic
 
1877
    $line =~ s/\\\|\[THORN \]\\\|/\[THORN \]/g;         # capital THORN, Icelandic
 
1878
    $line =~ s/\\\|\[uacute\]\\\|/\@\'u/g;              # small u, acute accent
 
1879
    $line =~ s/\\\|\[Uacute\]\\\|/\@\'U/g;              # capital U, acute accent
 
1880
    $line =~ s/\\\|\[ucirc \]\\\|/\@\^u/g;              # small u, circumflex accent
 
1881
    $line =~ s/\\\|\[Ucirc \]\\\|/\@\^U/g;              # capital U, circumflex accent
 
1882
    $line =~ s/\\\|\[ugrave\]\\\|/\@\`u/g;              # small u, grave accent
 
1883
    $line =~ s/\\\|\[Ugrave\]\\\|/\@\`U/g;              # capital U, grave accent
 
1884
    $line =~ s/\\\|\[uuml  \]\\\|/\@\"u/g;              # small u, dieresis or umlaut mark
 
1885
    $line =~ s/\\\|\[Uuml  \]\\\|/\@\"U/g;              # capital U, dieresis or umlaut mark
 
1886
    $line =~ s/\\\|\[yacute\]\\\|/\@\'y/g;              # small y, acute accent
 
1887
    $line =~ s/\\\|\[Yacute\]\\\|/\@\'Y/g;              # capital Y, acute accent
 
1888
    $line =~ s/\\\|\[yuml  \]\\\|/\@\"y/g;              # small y, dieresis or umlaut mark
 
1889
 
 
1890
    # ISOlat2
 
1891
    $line =~ s/\\\|\[abreve\]\\\|/\[abreve\]/g;         # small a, breve
 
1892
    $line =~ s/\\\|\[Abreve\]\\\|/\[Abreve\]/g;         # capital A, breve
 
1893
    $line =~ s/\\\|\[amacr \]\\\|/\[amacr \]/g;         # small a, macron
 
1894
    $line =~ s/\\\|\[Amacr \]\\\|/\[Amacr \]/g;         # capital A, macron
 
1895
    $line =~ s/\\\|\[aogon \]\\\|/\[aogon \]/g;         # small a, ogonek
 
1896
    $line =~ s/\\\|\[Aogon \]\\\|/\[Aogon \]/g;         # capital A, ogonek
 
1897
    $line =~ s/\\\|\[cacute\]\\\|/\@\'c/g;              # small c, acute accent
 
1898
    $line =~ s/\\\|\[Cacute\]\\\|/\@\'C/g;              # capital C, acute accent
 
1899
    $line =~ s/\\\|\[ccaron\]\\\|/\[ccaron\]/g;         # small c, caron
 
1900
    $line =~ s/\\\|\[Ccaron\]\\\|/\[Ccaron\]/g;         # capital C, caron
 
1901
    $line =~ s/\\\|\[ccirc \]\\\|/\@\^c/g;              # small c, circumflex accent
 
1902
    $line =~ s/\\\|\[Ccirc \]\\\|/\@\^C/g;              # capital C, circumflex accent
 
1903
    $line =~ s/\\\|\[cdot  \]\\\|/\@dotaccent\{c\}/g;   # small c, dot above
 
1904
    $line =~ s/\\\|\[Cdot  \]\\\|/\@dotaccent\{C\}/g;   # capital C, dot above
 
1905
    $line =~ s/\\\|\[dcaron\]\\\|/\[dcaron\]/g;         # small d, caron
 
1906
    $line =~ s/\\\|\[Dcaron\]\\\|/\[Dcaron\]/g;         # capital D, caron
 
1907
    $line =~ s/\\\|\[dstrok\]\\\|/\@d\{\}/g;            # small d, stroke
 
1908
    $line =~ s/\\\|\[Dstrok\]\\\|/\[Dstrok\]/g;         # capital D, stroke
 
1909
    $line =~ s/\\\|\[ecaron\]\\\|/\[ecaron\]/g;         # small e, caron
 
1910
    $line =~ s/\\\|\[Ecaron\]\\\|/\[Ecaron\]/g;         # capital E, caron
 
1911
    $line =~ s/\\\|\[edot  \]\\\|/\@dotaccent\{e\}/g;   # small e, dot above
 
1912
    $line =~ s/\\\|\[Edot  \]\\\|/\@dotaccent\{E\}/g;   # capital E, dot above
 
1913
    $line =~ s/\\\|\[emacr \]\\\|/\[emacr \]/g;         # small e, macron
 
1914
    $line =~ s/\\\|\[Emacr \]\\\|/\[Emacr \]/g;         # capital E, macron
 
1915
    $line =~ s/\\\|\[eogon \]\\\|/\[eogon \]/g;         # small e, ogonek
 
1916
    $line =~ s/\\\|\[Eogon \]\\\|/\[Eogon \]/g;         # capital E, ogonek
 
1917
    $line =~ s/\\\|\[gacute\]\\\|/\@\'g/g;              # small g, acute accent
 
1918
    $line =~ s/\\\|\[gbreve\]\\\|/\[gbreve\]/g;         # small g, breve
 
1919
    $line =~ s/\\\|\[Gbreve\]\\\|/\[Gbreve\]/g;         # capital G, breve
 
1920
    $line =~ s/\\\|\[Gcedil\]\\\|/\@\,\{G\}/g;          # capital G, cedilla
 
1921
    $line =~ s/\\\|\[gcirc \]\\\|/\@\^g/g;              # small g, circumflex accent
 
1922
    $line =~ s/\\\|\[Gcirc \]\\\|/\@\^G/g;              # capital G, circumflex accent
 
1923
    $line =~ s/\\\|\[gdot  \]\\\|/\@dotaccent\{g\}/g;   # small g, dot above
 
1924
    $line =~ s/\\\|\[Gdot  \]\\\|/\@dotaccent\{G\}/g;   # capital G, dot above
 
1925
    $line =~ s/\\\|\[hcirc \]\\\|/\@\^h/g;              # small h, circumflex accent
 
1926
    $line =~ s/\\\|\[Hcirc \]\\\|/\@\^H/g;              # capital H, circumflex accent
 
1927
    $line =~ s/\\\|\[hstrok\]\\\|/\[hstrok\]/g;         # small h, stroke
 
1928
    $line =~ s/\\\|\[Hstrok\]\\\|/\@H\{\}/g;            # capital H, stroke
 
1929
    $line =~ s/\\\|\[Idot  \]\\\|/\@dotaccent\{I\}/g;   # capital I, dot above
 
1930
    $line =~ s/\\\|\[Imacr \]\\\|/\[Imacr \]/g;         # capital I, macron
 
1931
    $line =~ s/\\\|\[imacr \]\\\|/\[imacr \]/g;         # small i, macron
 
1932
    $line =~ s/\\\|\[ijlig \]\\\|/\[ijlig \]/g;         # small ij ligature
 
1933
    $line =~ s/\\\|\[IJlig \]\\\|/\[IJlig \]/g;         # capital IJ ligature
 
1934
    $line =~ s/\\\|\[inodot\]\\\|/\[inodot\]/g;         # small i without dot
 
1935
    $line =~ s/\\\|\[iogon \]\\\|/\[iogon \]/g;         # small i, ogonek
 
1936
    $line =~ s/\\\|\[Iogon \]\\\|/\[Iogon \]/g;         # capital I, ogonek
 
1937
    $line =~ s/\\\|\[itilde\]\\\|/\@\~i/g;              # small i, tilde
 
1938
    $line =~ s/\\\|\[Itilde\]\\\|/\@\~I/g;              # capital I, tilde
 
1939
    $line =~ s/\\\|\[jcirc \]\\\|/\@\^j/g;              # small j, circumflex accent
 
1940
    $line =~ s/\\\|\[Jcirc \]\\\|/\@\^J/g;              # capital J, circumflex accent
 
1941
    $line =~ s/\\\|\[kcedil\]\\\|/\@\,\{k\}/g;          # small k, cedilla
 
1942
    $line =~ s/\\\|\[Kcedil\]\\\|/\@\,\{K\}/g;          # capital K, cedilla
 
1943
    $line =~ s/\\\|\[kgreen\]\\\|/\[kgreen\]/g;         # small k, Greenlandic
 
1944
    $line =~ s/\\\|\[lacute\]\\\|/\@\'l/g;              # small l, acute accent
 
1945
    $line =~ s/\\\|\[Lacute\]\\\|/\@\'L/g;              # capital L, acute accent
 
1946
    $line =~ s/\\\|\[lcaron\]\\\|/\[lcaron\]/g;         # small l, caron
 
1947
    $line =~ s/\\\|\[Lcaron\]\\\|/\[Lcaron\]/g;         # capital L, caron
 
1948
    $line =~ s/\\\|\[lcedil\]\\\|/\@\,\{l\}/g;          # small l, cedilla
 
1949
    $line =~ s/\\\|\[Lcedil\]\\\|/\@\,\{L\}/g;          # capital L, cedilla
 
1950
    $line =~ s/\\\|\[lmidot\]\\\|/\[lmidot\]/g;         # small l, middle dot
 
1951
    $line =~ s/\\\|\[Lmidot\]\\\|/\[Lmidot\]/g;         # capital L, middle dot
 
1952
    $line =~ s/\\\|\[lstrok\]\\\|/\@l\{\}/g;            # small l, stroke
 
1953
    $line =~ s/\\\|\[Lstrok\]\\\|/\@L\{\}/g;            # capital L, stroke
 
1954
    $line =~ s/\\\|\[nacute\]\\\|/\@\'n/g;              # small n, acute accent
 
1955
    $line =~ s/\\\|\[Nacute\]\\\|/\@\'N/g;              # capital N, acute accent
 
1956
    $line =~ s/\\\|\[eng   \]\\\|/\[eng   \]/g;         # small eng, Lapp
 
1957
    $line =~ s/\\\|\[ENG   \]\\\|/\[ENG   \]/g;         # capital ENG, Lapp
 
1958
    $line =~ s/\\\|\[napos \]\\\|/\[napos \]/g;         # small n, apostrophe
 
1959
    $line =~ s/\\\|\[ncaron\]\\\|/\[ncaron\]/g;         # small n, caron
 
1960
    $line =~ s/\\\|\[Ncaron\]\\\|/\[Ncaron\]/g;         # capital N, caron
 
1961
    $line =~ s/\\\|\[ncedil\]\\\|/\@\,\{n\}/g;          # small n, cedilla
 
1962
    $line =~ s/\\\|\[Ncedil\]\\\|/\@\,\{N\}/g;          # capital N, cedilla
 
1963
    $line =~ s/\\\|\[odblac\]\\\|/\@H\{o\}/g;           # small o, double acute accent
 
1964
    $line =~ s/\\\|\[Odblac\]\\\|/\@H\{O\}/g;           # capital O, double acute accent
 
1965
    $line =~ s/\\\|\[Omacr \]\\\|/\[Omacr \]/g;         # capital O, macron
 
1966
    $line =~ s/\\\|\[omacr \]\\\|/\[omacr \]/g;         # small o, macron
 
1967
    $line =~ s/\\\|\[oelig \]\\\|/\@oe\{\}/g;           # small oe ligature
 
1968
    $line =~ s/\\\|\[OElig \]\\\|/\@OE\{\}/g;           # capital OE ligature
 
1969
    $line =~ s/\\\|\[racute\]\\\|/\@\'r/g;              # small r, acute accent
 
1970
    $line =~ s/\\\|\[Racute\]\\\|/\@\'R/g;              # capital R, acute accent
 
1971
    $line =~ s/\\\|\[rcaron\]\\\|/\[rcaron\]/g;         # small r, caron
 
1972
    $line =~ s/\\\|\[Rcaron\]\\\|/\[Rcaron\]/g;         # capital R, caron
 
1973
    $line =~ s/\\\|\[rcedil\]\\\|/\@\,\{r\}/g;          # small r, cedilla
 
1974
    $line =~ s/\\\|\[Rcedil\]\\\|/\@\,\{R\}/g;          # capital R, cedilla
 
1975
    $line =~ s/\\\|\[sacute\]\\\|/\@\'s/g;              # small s, acute accent
 
1976
    $line =~ s/\\\|\[Sacute\]\\\|/\@\'S/g;              # capital S, acute accent
 
1977
    $line =~ s/\\\|\[scaron\]\\\|/\[scaron\]/g;         # small s, caron
 
1978
    $line =~ s/\\\|\[Scaron\]\\\|/\[Scaron\]/g;         # capital S, caron
 
1979
    $line =~ s/\\\|\[scedil\]\\\|/\@\,\{s\}/g;          # small s, cedilla
 
1980
    $line =~ s/\\\|\[Scedil\]\\\|/\@\,\{S\}/g;          # capital S, cedilla
 
1981
    $line =~ s/\\\|\[scirc \]\\\|/\@\^s/g;              # small s, circumflex accent
 
1982
    $line =~ s/\\\|\[Scirc \]\\\|/\@\^S/g;              # capital S, circumflex accent
 
1983
    $line =~ s/\\\|\[tcaron\]\\\|/\[tcaron\]/g;         # small t, caron
 
1984
    $line =~ s/\\\|\[Tcaron\]\\\|/\[Tcaron\]/g;         # capital T, caron
 
1985
    $line =~ s/\\\|\[tcedil\]\\\|/\@\,\{t\}/g;          # small t, cedilla
 
1986
    $line =~ s/\\\|\[Tcedil\]\\\|/\@\,\{T\}/g;          # capital T, cedilla
 
1987
    $line =~ s/\\\|\[tstrok\]\\\|/\@t\{\}/g;            # small t, stroke
 
1988
    $line =~ s/\\\|\[Tstrok\]\\\|/\[Tstrok\]/g;         # capital T, stroke
 
1989
    $line =~ s/\\\|\[ubreve\]\\\|/\[ubreve\]/g;         # small u, breve
 
1990
    $line =~ s/\\\|\[Ubreve\]\\\|/\[Ubreve\]/g;         # capital U, breve
 
1991
    $line =~ s/\\\|\[udblac\]\\\|/\@H\{u\}/g;           # small u, double acute accent
 
1992
    $line =~ s/\\\|\[Udblac\]\\\|/\@H\{U\}/g;           # capital U, double acute accent
 
1993
    $line =~ s/\\\|\[umacr \]\\\|/\[umacr \]/g;         # small u, macron
 
1994
    $line =~ s/\\\|\[Umacr \]\\\|/\[Umacr \]/g;         # capital U, macron
 
1995
    $line =~ s/\\\|\[uogon \]\\\|/\[uogon \]/g;         # small u, ogonek
 
1996
    $line =~ s/\\\|\[Uogon \]\\\|/\[Uogon \]/g;         # capital U, ogonek
 
1997
    $line =~ s/\\\|\[uring \]\\\|/\@ringaccent\{u\}/g;  # small u, ring
 
1998
    $line =~ s/\\\|\[Uring \]\\\|/\@ringaccent\{U\}/g;  # capital U, ring
 
1999
    $line =~ s/\\\|\[utilde\]\\\|/\@\~u/g;              # small u, tilde
 
2000
    $line =~ s/\\\|\[Utilde\]\\\|/\@\~U/g;              # capital U, tilde
 
2001
    $line =~ s/\\\|\[wcirc \]\\\|/\@\^w/g;              # small w, circumflex accent
 
2002
    $line =~ s/\\\|\[Wcirc \]\\\|/\@\^W/g;              # capital W, circumflex accent
 
2003
    $line =~ s/\\\|\[ycirc \]\\\|/\@\^y/g;              # small y, circumflex accent
 
2004
    $line =~ s/\\\|\[Ycirc \]\\\|/\@\^Y/g;              # capital Y, circumflex accent
 
2005
    $line =~ s/\\\|\[Yuml  \]\\\|/\@"Y/g;               # capital Y, dieresis or umlaut mark
 
2006
    $line =~ s/\\\|\[zacute\]\\\|/\@\'z/g;              # small z, acute accent
 
2007
    $line =~ s/\\\|\[Zacute\]\\\|/\@\'Z/g;              # capital Z, acute accent
 
2008
    $line =~ s/\\\|\[zcaron\]\\\|/\[zcaron\]/g;         # small z, caron
 
2009
    $line =~ s/\\\|\[Zcaron\]\\\|/\[Zcaron\]/g;         # capital Z, caron
 
2010
    $line =~ s/\\\|\[zdot  \]\\\|/\@dotaccent\{z\}/g;   # small z, dot above
 
2011
    $line =~ s/\\\|\[Zdot  \]\\\|/\@dotaccent\{Z\}/g;   # capital Z, dot above
 
2012
 
 
2013
 
 
2014
    # Sgmltexi added entities for Texinfo compatibility.
 
2015
    $line =~ s/\\\|\[3dots \]\\\|/\@dots\{\}/g;         # three dots
 
2016
    $line =~ s/\\\|\[4dots \]\\\|/\@enddots\{\}/g;      # four dots
 
2017
    $line =~ s/\\\|\[TeX   \]\\\|/\@TeX\{\}/g;          # TeX
 
2018
    $line =~ s/\\\|\[result\]\\\|/\@result\{\}/g;       #
 
2019
    $line =~ s/\\\|\[expans\]\\\|/\@expansion\{\}/g;    #
 
2020
    $line =~ s/\\\|\[print \]\\\|/\@print\{\}/g;        #
 
2021
    $line =~ s/\\\|\[error \]\\\|/\@error\{\}/g;        #
 
2022
    $line =~ s/\\\|\[point \]\\\|/\@point\{\}/g;        #
 
2023
    $line =~ s/\\\|\[today \]\\\|/\@today\{\}/g;        #
 
2024
    $line =~ s/\\\|\[esexcl\]\\\|/\@\!/g;               # end of sentence exclamation mark
 
2025
    $line =~ s/\\\|\[esperi\]\\\|/\@\./g;               # end of sentence period
 
2026
    $line =~ s/\\\|\[nes   \]\\\|/\@\:/g;               # not ending sentence
 
2027
    $line =~ s/\\\|\[esques\]\\\|/\@\?/g;               # end of sentence question mark
 
2028
 
 
2029
    return ($line);
 
2030
}
 
2031
 
 
2032
#-----------------------------------------------------------------------
 
2033
# Jump a %block; element that starts on its own line, and that
 
2034
# terminates on a line by itself.
 
2035
# This %block; element is meant in the way that it cannot contain
 
2036
# itself recursively.
 
2037
#
 
2038
sub jump_block
 
2039
{
 
2040
    local ($input_stream)   = $_[0];
 
2041
    local ($output_stream)  = $_[1];
 
2042
    local ($line)           = $_[2];
 
2043
    local ($termination_re) = $_[3];
 
2044
 
 
2045
    # Try to jump the block.
 
2046
    while ($line !~ m/$termination_re/i)
 
2047
      {
 
2048
        # Print the line and read the next.
 
2049
        print $output_stream "$line";
 
2050
        $line = <$input_stream>;
 
2051
      }
 
2052
    # Print the last line.
 
2053
    print $output_stream "$line";
 
2054
}    
 
2055
 
 
2056
#-----------------------------------------------------------------------
 
2057
# Diagnostic output; it depends on the following global variables:
 
2058
#   $verbose
 
2059
#   $root_file_name
 
2060
#
 
2061
sub diag_output
 
2062
{
 
2063
    local ($string)    = $_[0];
 
2064
 
 
2065
    # Append to the diagnostic file.
 
2066
    open (DIAG, ">> $root_file_name.diag");
 
2067
    
 
2068
    if ($verbose)
 
2069
      {
 
2070
        print STDOUT ($string);
 
2071
      }
 
2072
    # In any case, print it on the DIAG file
 
2073
    print DIAG ($string);
 
2074
 
 
2075
    # Close the file.
 
2076
    close (DIAG);
 
2077
 
 
2078
}
 
2079
 
 
2080
#-----------------------------------------------------------------------
 
2081
# Post SP filter.
 
2082
#
 
2083
# Transform SP output for some special character, depending on the
 
2084
# back-end system limitations.
 
2085
#
 
2086
# &sp_filter (INPUT_FILE, TYPESETTING,
 
2087
#             ORIGINAL_FILE_NAME) --> OUTPUT_FILE
 
2088
#
 
2089
sub sp_filter
 
2090
{
 
2091
    local ($input_file) = $_[0];
 
2092
    local ($typesetting) = $_[1];
 
2093
    local ($original_file_name) = $_[2];
 
2094
    local ($output_file) = &temporary_file;
 
2095
    chomp ($output_file);
 
2096
    local ($line) = "";
 
2097
 
 
2098
    local ($line_prefix) = "";
 
2099
    local ($line_content) = "";
 
2100
 
 
2101
    # Tell what we are doing.
 
2102
    &diag_output (sprintf (gettext ("%s:%s: post-SP re-elaborations\n"),
 
2103
                  $program_executable, $original_file_name));
 
2104
 
 
2105
    # Here there is no need to use references for file handler names,
 
2106
    # but this way we use uniform code.
 
2107
    local ($input_stream) = "$input_file";
 
2108
    local ($output_stream) = "$output_file";
 
2109
 
 
2110
 
 
2111
    #-------------------------------------------------------------------
 
2112
    # Jump_sp_element.
 
2113
    #
 
2114
    # &jump_sp_element (INPUT_STREAM, OUTPUT_STREAM, LINE,
 
2115
    #                   CONCLUSION_STRING)
 
2116
    #
 
2117
    sub jump_sp_element
 
2118
    {
 
2119
        local ($input_stream) = $_[0];
 
2120
        local ($output_stream) = $_[1];
 
2121
        local ($line) = $_[2];
 
2122
        local ($conclusion) = $_[3];
 
2123
 
 
2124
        # Try to jump.
 
2125
        while ($line !~ m/^$conclusion$/i)
 
2126
          {
 
2127
            # Transfer the line, read the next and increase the counter.
 
2128
            print $output_stream ("$line");
 
2129
            $line = <$input_stream>;
 
2130
          }
 
2131
 
 
2132
        # Last line (the one with the end string) must be transfered.
 
2133
        print $output_stream ("$line");
 
2134
 
 
2135
    } # jump_sp_element
 
2136
 
 
2137
    #-------------------------------------------------------------------
 
2138
    # Start of &sp_filter()
 
2139
    #-------------------------------------------------------------------
 
2140
 
 
2141
    # Open input and output files.
 
2142
    open ($input_stream, "< $input_file");
 
2143
    open ($output_stream, "> $output_file");
 
2144
 
 
2145
    # Do what is required
 
2146
    while ($line = <$input_stream>)
 
2147
      {
 
2148
        # Literal text is jumped.
 
2149
        if ($line =~ m/^\(TEXINFO$/i)
 
2150
          {
 
2151
            &jump_sp_element ($input_stream, $output_stream, $line,
 
2152
                              "\\)TEXINFO\$");
 
2153
          }
 
2154
        elsif ($line =~ m/^\(TEX$/i)
 
2155
          {
 
2156
            &jump_sp_element ($input_stream, $output_stream, $line,
 
2157
                              "\\)TEX\$");
 
2158
          }
 
2159
        elsif ($line =~ m/^\(HTML$/i)
 
2160
          {
 
2161
            &jump_sp_element ($input_stream, $output_stream, $line,
 
2162
                              "\\)HTML\$");
 
2163
          }
 
2164
        elsif ($line =~ m/^\(VERB$/i)
 
2165
          {
 
2166
            &jump_sp_element ($input_stream, $output_stream, $line,
 
2167
                              "\\)VERB\$");
 
2168
          }
 
2169
        elsif ($line =~ m/^\(VERBATIMPRE$/i)
 
2170
          {
 
2171
            &jump_sp_element ($input_stream, $output_stream, $line,
 
2172
                              "\\)VERBATIMPRE\$");
 
2173
          }
 
2174
        elsif ($line =~ m/^(-)(.*)$/)
 
2175
          {
 
2176
            # This is a text line, because it starts with a "-".
 
2177
            # Must be re-elaborated.
 
2178
            
 
2179
            $line_prefix = $1;
 
2180
            $line_content = $2;
 
2181
 
 
2182
            #-----------------------------------------------------------
 
2183
            # Start converting special character into SDATA entities.
 
2184
            #-----------------------------------------------------------
 
2185
 
 
2186
            $line_content = &minimal_sp_text_to_sdata ($line_content);
 
2187
 
 
2188
            if ($input_encoding eq "ISO-8859-1")
 
2189
              {
 
2190
                $line_content = &iso_8859_1_sp_text_to_sdata ($line_content);
 
2191
              }
 
2192
            elsif ($input_encoding eq "ISO-8859-2")
 
2193
              {
 
2194
                $line_content = &iso_8859_2_sp_text_to_sdata ($line_content);
 
2195
              }
 
2196
            elsif ($input_encoding eq "ISO-8859-3")
 
2197
              {
 
2198
                $line_content = &iso_8859_3_sp_text_to_sdata ($line_content);
 
2199
              }
 
2200
            elsif ($input_encoding eq "ISO-8859-4")
 
2201
              {
 
2202
                $line_content = &iso_8859_4_sp_text_to_sdata ($line_content);
 
2203
              }
 
2204
            elsif ($input_encoding eq "ISO-8859-5")
 
2205
              {
 
2206
                $line_content = &iso_8859_5_sp_text_to_sdata ($line_content);
 
2207
              }
 
2208
            elsif ($input_encoding eq "ISO-8859-6")
 
2209
              {
 
2210
                $line_content = &iso_8859_6_sp_text_to_sdata ($line_content);
 
2211
              }
 
2212
            elsif ($input_encoding eq "ISO-8859-7")
 
2213
              {
 
2214
                $line_content = &iso_8859_7_sp_text_to_sdata ($line_content);
 
2215
              }
 
2216
            elsif ($input_encoding eq "ISO-8859-8")
 
2217
              {
 
2218
                $line_content = &iso_8859_8_sp_text_to_sdata ($line_content);
 
2219
              }
 
2220
            elsif ($input_encoding eq "ISO-8859-9")
 
2221
              {
 
2222
                $line_content = &iso_8859_9_sp_text_to_sdata ($line_content);
 
2223
              }
 
2224
            elsif ($input_encoding eq "ISO-8859-10")
 
2225
              {
 
2226
                $line_content = &iso_8859_10_sp_text_to_sdata ($line_content);
 
2227
              }
 
2228
 
 
2229
            #-----------------------------------------------------------
 
2230
            # Some special symbols for this transformation
 
2231
            # are declared as SDATA entities, with the
 
2232
            # form "[name  ]".
 
2233
            # When SP insert these SDATA entities, they became
 
2234
            # "\|[name  ]\|".
 
2235
            # This ensure that the substitution mechanism
 
2236
            # doesn't do mistakes.
 
2237
            # Some special characters must be transformed
 
2238
            # before into "\|[name  ]\|", then they are
 
2239
            # translated back into the right way.
 
2240
            # This way, characters that require a special
 
2241
            # form when use with some programs, may be
 
2242
            # inserted literally, as long that this
 
2243
            # can be done for SGML, and also as SGML entities.
 
2244
            #-----------------------------------------------------------
 
2245
 
 
2246
            $line_content = &sp_sdata_text_to_sp_texinfo ($line_content);
 
2247
              
 
2248
            # Rejoin the line.  
 
2249
            $line = $line_prefix . $line_content . "\n";
 
2250
            # The line is transfered.
 
2251
            print $output_stream ($line);
 
2252
          }
 
2253
        elsif ($line =~ m/^(A.*?CDATA)(.*)$/ )
 
2254
          {
 
2255
            # This is a CDATA attribute, because it starts with a "A..CDATA".
 
2256
            # Must be re-elaborated.
 
2257
            
 
2258
            $line_prefix = $1;
 
2259
            $line_content = $2;
 
2260
 
 
2261
            #-----------------------------------------------------------
 
2262
            # Start converting special character into SDATA entities.
 
2263
            #-----------------------------------------------------------
 
2264
 
 
2265
            $line_content = &minimal_sp_text_to_sdata ($line_content);
 
2266
 
 
2267
            if ($input_encoding eq "ISO-8859-1")
 
2268
              {
 
2269
                $line_content = &iso_8859_1_sp_text_to_sdata ($line_content);
 
2270
              }
 
2271
            elsif ($input_encoding eq "ISO-8859-2")
 
2272
              {
 
2273
                $line_content = &iso_8859_2_sp_text_to_sdata ($line_content);
 
2274
              }
 
2275
            elsif ($input_encoding eq "ISO-8859-3")
 
2276
              {
 
2277
                $line_content = &iso_8859_3_sp_text_to_sdata ($line_content);
 
2278
              }
 
2279
            elsif ($input_encoding eq "ISO-8859-4")
 
2280
              {
 
2281
                $line_content = &iso_8859_4_sp_text_to_sdata ($line_content);
 
2282
              }
 
2283
            elsif ($input_encoding eq "ISO-8859-5")
 
2284
              {
 
2285
                $line_content = &iso_8859_5_sp_text_to_sdata ($line_content);
 
2286
              }
 
2287
            elsif ($input_encoding eq "ISO-8859-6")
 
2288
              {
 
2289
                $line_content = &iso_8859_6_sp_text_to_sdata ($line_content);
 
2290
              }
 
2291
            elsif ($input_encoding eq "ISO-8859-7")
 
2292
              {
 
2293
                $line_content = &iso_8859_7_sp_text_to_sdata ($line_content);
 
2294
              }
 
2295
            elsif ($input_encoding eq "ISO-8859-8")
 
2296
              {
 
2297
                $line_content = &iso_8859_8_sp_text_to_sdata ($line_content);
 
2298
              }
 
2299
            elsif ($input_encoding eq "ISO-8859-9")
 
2300
              {
 
2301
                $line_content = &iso_8859_9_sp_text_to_sdata ($line_content);
 
2302
              }
 
2303
            elsif ($input_encoding eq "ISO-8859-10")
 
2304
              {
 
2305
                $line_content = &iso_8859_10_sp_text_to_sdata ($line_content);
 
2306
              }
 
2307
 
 
2308
            #-----------------------------------------------------------
 
2309
            # Start converting SDATA into back-end code.
 
2310
            #-----------------------------------------------------------
 
2311
 
 
2312
            $line_content = &sp_sdata_text_to_sp_texinfo ($line_content);
 
2313
              
 
2314
            # Rejoin the line.  
 
2315
            $line = $line_prefix . $line_content . "\n";
 
2316
            # The line is transfered.
 
2317
            print $output_stream ($line);
 
2318
          }
 
2319
        else
 
2320
          {
 
2321
            # The line is transfered.
 
2322
            print $output_stream ($line);
 
2323
          }
 
2324
      }
 
2325
 
 
2326
    # Close files.
 
2327
    close ($input_stream);
 
2328
    close ($output_stream);
 
2329
 
 
2330
    # Return the temporary file name.
 
2331
    return ($output_file);
 
2332
 
 
2333
} # sp_filter
 
2334
 
 
2335
#======================================================================
 
2336
# Start of program.
 
2337
#----------------------------------------------------------------------
 
2338
 
 
2339
local ($source_file_name) = "";
 
2340
local ($input_encoding) = "";
 
2341
local ($output_encoding) = "";
 
2342
local ($action) = "";
 
2343
local ($force) = 0;
 
2344
local ($number_sections) = 0;
 
2345
local ($paper) = "";
 
2346
local ($setchapternewpage) = "";
 
2347
local ($footnotestyle) = "";
 
2348
local ($headings) = "";
 
2349
local ($sgml_include) = ();
 
2350
local ($nsgmls_include_options) = "";
 
2351
local ($end_of_options) = 0;
 
2352
local ($n) = 0;
 
2353
local ($typesetting) = "TEXINFO";
 
2354
local ($makeinfo_options) = "";
 
2355
 
 
2356
# used to tell what kind of target is the post-SP elaboration for.
 
2357
local ($sgml_target) = $typesetting;
 
2358
 
 
2359
local ($root_file_name) = "";
 
2360
local ($post_sp_temp_file) = &temporary_file;
 
2361
local ($post_sp_filter_temp_file) = "";
 
2362
 
 
2363
local ($verbose) = 0;
 
2364
 
 
2365
 
 
2366
# Scan arguments.
 
2367
for ($n = 0; $n <= $#ARGV; $n++)
 
2368
  {
 
2369
    # Analyze argument $n.
 
2370
    if ($ARGV[$n] !~ m/^-/)
 
2371
     {
 
2372
        # Options are terminated as this argument has no minus at the
 
2373
        # beginning. This must be a file name.
 
2374
        if ($end_of_options)
 
2375
          {
 
2376
            # As options are already terminated, this is an extra
 
2377
            # argument: a mistake.
 
2378
            print STDERR (sprintf (gettext ("%s: no more arguments allowed after the file name: %s\n"),
 
2379
                                   $program_executable, $ARGV[$n]));
 
2380
            exit 1;
 
2381
          }
 
2382
        else
 
2383
          {
 
2384
            # This is the first time that we encounter an argument
 
2385
            # without "-". Must be the source file.
 
2386
            $end_of_options = 1;
 
2387
            $source_file_name = $ARGV[$n];
 
2388
         }
 
2389
        
 
2390
      }
 
2391
    elsif ($ARGV[$n] eq "--help")
 
2392
      {
 
2393
        # The user is asking for help.
 
2394
        &help_syntax;
 
2395
        exit 0;
 
2396
      }
 
2397
    elsif ($ARGV[$n] eq "--version")
 
2398
      {
 
2399
        # The user wants to know the program version.
 
2400
        &version_info;
 
2401
        exit 0;
 
2402
 
 
2403
      }
 
2404
    elsif ($ARGV[$n] eq "--force")
 
2405
      {
 
2406
        # The user wants to get the output even with errors.
 
2407
        $force = 1;
 
2408
      }
 
2409
    elsif ($ARGV[$n] eq "--number-sections")
 
2410
      {
 
2411
        # The user wants to get numbers on sections also with makeinfo.
 
2412
        $number_sections = 1;
 
2413
      }
 
2414
    elsif ($ARGV[$n] eq "--sgml-syntax"
 
2415
           || $ARGV[$n] eq "--sgml-check")
 
2416
      {
 
2417
        # The user wants to check the SGML source.
 
2418
        # We need to verify that the action wasn't already defined.
 
2419
        if ($action eq "")
 
2420
          {
 
2421
            $action = "sgml-check";
 
2422
          }
 
2423
        else
 
2424
          {
 
2425
            print STDERR (sprintf (gettext ("%s: only one action option is allowed: %s\n"),
 
2426
                                   $program_executable, $ARGV[$n]));
 
2427
            exit 1;
 
2428
          }
 
2429
      }
 
2430
    elsif ($ARGV[$n] eq "--sgml-syntax-hard"
 
2431
           || $ARGV[$n] eq "--sgml-check-hard")
 
2432
      {
 
2433
        # The user wants to check all SGML aspects.
 
2434
        # We need to verify that the action wasn't already defined.
 
2435
        if ($action eq "")
 
2436
          {
 
2437
            $action = "sgml-check-hard";
 
2438
          }
 
2439
        else
 
2440
          {
 
2441
            print STDERR (sprintf (gettext ("%s: only one action option is allowed: %s\n"),
 
2442
                                   $program_executable, $ARGV[$n]));
 
2443
            exit 1;
 
2444
          }
 
2445
      }
 
2446
    elsif ($ARGV[$n] =~ m/^--input-encoding=(.*)$/)
 
2447
      {
 
2448
        # The user tells the input encoding.
 
2449
        # We need to verify that the encoding wasn't already defined.
 
2450
        if ($input_encoding eq "")
 
2451
          {
 
2452
            $input_encoding = $1;
 
2453
            $output_encoding = "ISO-646";
 
2454
          }
 
2455
        else
 
2456
          {
 
2457
            print STDERR (sprintf (gettext ("%s: only one option is allowed: %s\n"),
 
2458
                                   $program_executable, $ARGV[$n]));
 
2459
            exit 1;
 
2460
          }
 
2461
      }
 
2462
    elsif ($ARGV[$n] =~ m/^--sgml-include=(.*)$/
 
2463
           || $ARGV[$n] =~ m/^--include=(.*)$/)
 
2464
      {
 
2465
        # The user tells the name of an SGML parameter entity
 
2466
        # that should be assigned with the word "INCLUDE". That
 
2467
        # is, we want:
 
2468
        #
 
2469
        # <!ENTITY % name "INCLUDE">
 
2470
        #
 
2471
        # This option is cumulative; this way, we add to an array.
 
2472
        $sgml_include[$#sgml_include+1] = $1;
 
2473
      }
 
2474
    elsif ( $ARGV[$n] =~ m/^--paper=(.+)$/ )
 
2475
      {
 
2476
        # The user tells what page size.
 
2477
        # We need to verify that the dimensions weren't already defined.
 
2478
        if ($paper eq "")
 
2479
          {
 
2480
            $paper = lc $1;
 
2481
            if ($paper eq ""
 
2482
                || $paper eq "a4"
 
2483
                || $paper eq "a4latex"
 
2484
                || $paper eq "a4wide"
 
2485
                || $paper eq "a5"
 
2486
                || $paper eq "letter"
 
2487
                || $paper eq "small")
 
2488
              {
 
2489
                # The paper formats are ok.
 
2490
                ;
 
2491
              }
 
2492
            else
 
2493
              {
 
2494
                print STDERR (sprintf (gettext ("%s: paper size unknown %s\n"),
 
2495
                              $program_executable, $ARGV[$n]));
 
2496
                exit 1;
 
2497
              }
 
2498
            
 
2499
          }
 
2500
        else
 
2501
          {
 
2502
            print STDERR (sprintf (gettext ("%s: only one paper size option is allowed %s\n"),
 
2503
                                   $program_executable, $ARGV[$n]));
 
2504
            exit 1;
 
2505
          }
 
2506
      }
 
2507
    elsif ( $ARGV[$n] =~ m/^--setchapternewpage=(.+)$/ )
 
2508
      {
 
2509
        # The user tells to override the <setchapternewpage> tag.
 
2510
        # We need to verify that it wasn't already defined.
 
2511
        if ($setchapternewpage eq "")
 
2512
          {
 
2513
            $setchapternewpage = lc $1;
 
2514
            if ($setchapternewpage eq ""
 
2515
                || $setchapternewpage eq "on"
 
2516
                || $setchapternewpage eq "off"
 
2517
                || $setchapternewpage eq "odd")
 
2518
              {
 
2519
                # The setchapternewpage attribute is ok.
 
2520
                ;
 
2521
              }
 
2522
            else
 
2523
              {
 
2524
                print STDERR (sprintf (gettext ("%s: setchapternewpage attribute unknown %s\n"),
 
2525
                                       $program_executable, $ARGV[$n]));
 
2526
                exit 1;
 
2527
              }
 
2528
          }
 
2529
        else
 
2530
          {
 
2531
            print STDERR (sprintf (gettext ("%s: only one setchapternewpage option is allowed %s\n"),
 
2532
                                   $program_executable, $ARGV[$n]));
 
2533
            exit 1;
 
2534
          }
 
2535
      }
 
2536
    elsif ( $ARGV[$n] =~ m/^--footnotestyle=(.+)$/ )
 
2537
      {
 
2538
        # The user tells to override the <footnotestyle> tag.
 
2539
        # We need to verify that it wasn't already defined.
 
2540
        if ($footnotestyle eq "")
 
2541
          {
 
2542
            $footnotestyle = lc $1;
 
2543
            if ($footnotestyle eq ""
 
2544
                || $footnotestyle eq "end"
 
2545
                || $footnotestyle eq "separate")
 
2546
              {
 
2547
                # The footnotestyle attribute is ok.
 
2548
                ;
 
2549
              }
 
2550
            else
 
2551
              {
 
2552
                print STDERR (sprintf (gettext ("%s: footnotestyle attribute unknown %s\n"),
 
2553
                                       $program_executable, $ARGV[$n]));
 
2554
                exit 1;
 
2555
              }
 
2556
          }
 
2557
        else
 
2558
          {
 
2559
            print STDERR (sprintf (gettext ("%s: only one footnotestyle option is allowed %s\n"),
 
2560
                                   $program_executable, $ARGV[$n]));
 
2561
            exit 1;
 
2562
          }
 
2563
      }
 
2564
    elsif ( $ARGV[$n] =~ m/^--headings=(.+)$/ )
 
2565
      {
 
2566
        # The user tells to override the <headings> tag.
 
2567
        # We need to verify that it wasn't already defined.
 
2568
        if ($headings eq "")
 
2569
          {
 
2570
            $headings = lc $1;
 
2571
            if ($headings eq ""
 
2572
                || $headings eq "on"
 
2573
                || $headings eq "off"
 
2574
                || $headings eq "single"
 
2575
                || $headings eq "double"
 
2576
                || $headings eq "singleafter"
 
2577
                || $headings eq "doubleafter")
 
2578
              {
 
2579
                # The headings attribute is ok.
 
2580
                ;
 
2581
              }
 
2582
            else
 
2583
              {
 
2584
                print STDERR (sprintf (gettext ("%s: headings attribute unknown %s\n"),
 
2585
                                       $program_executable, $ARGV[$n]));
 
2586
                exit 1;
 
2587
              }
 
2588
          }
 
2589
        else
 
2590
          {
 
2591
            print STDERR (sprintf (gettext ("%s: only one headings option is allowed %s\n"),
 
2592
                                   $program_executable, $ARGV[$n]));
 
2593
            exit 1;
 
2594
          }
 
2595
      }
 
2596
    elsif ($ARGV[$n] eq "--texi"
 
2597
        || $ARGV[$n] eq "--texinfo")
 
2598
      {
 
2599
        # The user wants to generate a Texinfo source.
 
2600
        # We need to verify that the action wasn't already defined.
 
2601
        if ($action eq "")
 
2602
          {
 
2603
            $action = "texinfo";
 
2604
          }
 
2605
        else
 
2606
          {
 
2607
            print STDERR (sprintf (gettext ("%s: only one action option is allowed: %s\n"),
 
2608
                                   $program_executable, $ARGV[$n]));
 
2609
            exit 1;
 
2610
          }
 
2611
      }
 
2612
    elsif ( $ARGV[$n] eq "--dvi" )
 
2613
      {
 
2614
        # The user wants to generate a DVI output.
 
2615
        # We need to verify that the action wasn't already defined.
 
2616
        if ($action eq "")
 
2617
          {
 
2618
            $action = "dvi";
 
2619
          }
 
2620
        else
 
2621
          {
 
2622
            print STDERR (sprintf (gettext ("%s: only one action option is allowed: %s\n"),
 
2623
                                   $program_executable, $ARGV[$n]));
 
2624
            exit 1;
 
2625
          }
 
2626
      }
 
2627
    elsif ( $ARGV[$n] eq "--sp" )
 
2628
      {
 
2629
        # The user wants to generate a SP output for debugging.
 
2630
        # We need to verify that the action wasn't already defined.
 
2631
        if ($action eq "")
 
2632
          {
 
2633
            $action = "sp";
 
2634
          }
 
2635
        else
 
2636
          {
 
2637
            print STDERR (sprintf (gettext ("%s: only one action option is allowed: %s\n"),
 
2638
                                   $program_executable, $ARGV[$n]));
 
2639
            exit 1;
 
2640
          }
 
2641
      }
 
2642
    elsif ($ARGV[$n] eq "--ps"
 
2643
           || $ARGV[$n] eq "--postscript")
 
2644
      {
 
2645
        # The user wants to generate a PostScript output.
 
2646
        # We need to verify that the action wasn't already defined.
 
2647
        if ($action eq "")
 
2648
          {
 
2649
            $action = "ps";
 
2650
          }
 
2651
        else
 
2652
          {
 
2653
            print STDERR (sprintf (gettext ("%s: only one action option is allowed: %s\n"),
 
2654
                                   $program_executable, $ARGV[$n]));
 
2655
            exit 1;
 
2656
          }
 
2657
      }
 
2658
    elsif ($ARGV[$n] eq "--info")
 
2659
      {
 
2660
        # The user wants to generate an Info output.
 
2661
        # We need to verify that the action wasn't already defined.
 
2662
        if ($action eq "")
 
2663
          {
 
2664
            $action = "info";
 
2665
          }
 
2666
        else
 
2667
          {
 
2668
            print STDERR (sprintf (gettext ("%s: only one action option is allowed: %s\n"),
 
2669
                                   $program_executable, $ARGV[$n]));
 
2670
            exit 1;
 
2671
          }
 
2672
      }
 
2673
    elsif ($ARGV[$n] eq "--text")
 
2674
      {
 
2675
        # The user wants to generate a pure text output.
 
2676
        # We need to verify that the action wasn't already defined.
 
2677
        if ($action eq "")
 
2678
          {
 
2679
            $action = "text";
 
2680
          }
 
2681
        else
 
2682
          {
 
2683
            print STDERR (sprintf (gettext ("%s: only one action option is allowed: %s\n"),
 
2684
                                   $program_executable, $ARGV[$n]));
 
2685
            exit 1;
 
2686
          }
 
2687
      }
 
2688
    elsif ($ARGV[$n] eq "--pdf")
 
2689
      {
 
2690
        # The user wants to generate a PDF output.
 
2691
        # We need to verify that the action wasn't already defined.
 
2692
        if ($action eq "")
 
2693
          {
 
2694
            $action = "pdf";
 
2695
          }
 
2696
        else
 
2697
          {
 
2698
            print STDERR (sprintf (gettext ("%s: only one action option is allowed: %s\n"),
 
2699
                                   $program_executable, $ARGV[$n]));
 
2700
            exit 1;
 
2701
          }
 
2702
      }
 
2703
    elsif ($ARGV[$n] eq "--html")
 
2704
      {
 
2705
        # The user wants to generate a HTML output.
 
2706
        # We need to verify that the action wasn't already defined.
 
2707
        if ($action eq "")
 
2708
          {
 
2709
            $action = "html";
 
2710
          }
 
2711
        else
 
2712
          {
 
2713
            print STDERR (sprintf (gettext ("%s: only one action option is allowed: %s\n"),
 
2714
                                   $program_executable, $ARGV[$n]));
 
2715
            exit 1;
 
2716
          }
 
2717
      }
 
2718
    elsif ($ARGV[$n] eq "--xml")
 
2719
      {
 
2720
        # The user wants to generate a XML output.
 
2721
        # We need to verify that the action wasn't already defined.
 
2722
        if ($action eq "")
 
2723
          {
 
2724
            $action = "xml";
 
2725
          }
 
2726
        else
 
2727
          {
 
2728
            print STDERR (sprintf (gettext ("%s: only one action option is allowed: %s\n"),
 
2729
                                   $program_executable, $ARGV[$n]));
 
2730
            exit 1;
 
2731
          }
 
2732
      }
 
2733
    elsif ($ARGV[$n] eq "--docbook")
 
2734
      {
 
2735
        # The user wants to generate a XML Docbook output.
 
2736
        # We need to verify that the action wasn't already defined.
 
2737
        if ($action eq "")
 
2738
          {
 
2739
            $action = "docbook";
 
2740
          }
 
2741
        else
 
2742
          {
 
2743
            print STDERR (sprintf (gettext ("%s: only one action option is allowed: %s\n"),
 
2744
                                   $program_executable, $ARGV[$n]));
 
2745
            exit 1;
 
2746
          }
 
2747
      }
 
2748
    elsif ($ARGV[$n] eq "--verbose")
 
2749
      {
 
2750
        # Verbose mode was required.
 
2751
        $verbose = 1;
 
2752
      }
 
2753
    elsif ($ARGV[$n] eq "--clean")
 
2754
      {
 
2755
        # The user wants to generate a DVI output.
 
2756
        # We need to verify that the action wasn't already defined.
 
2757
        if ($action eq "")
 
2758
          {
 
2759
            $action = "clean";
 
2760
          }
 
2761
        else
 
2762
          {
 
2763
            print STDERR (sprintf (gettext ("%s: only one action option is allowed: %s\n"),
 
2764
                                   $program_executable, $ARGV[$n]));
 
2765
            exit 1;
 
2766
          }
 
2767
      }
 
2768
    else
 
2769
      {
 
2770
        # Must be an unknown option.
 
2771
        print STDERR (sprintf (gettext ("%s: unknown option: %s\n"),
 
2772
                      $program_executable, $ARGV[$n]));
 
2773
        exit 1;
 
2774
      }
 
2775
 
 
2776
  }
 
2777
 
 
2778
# Are arguments logical?
 
2779
# Define default values an prepare some values.
 
2780
 
 
2781
if ($input_encoding eq ""
 
2782
    || $input_encoding eq "ISO-8859-1"
 
2783
    || $input_encoding eq "ISO-8859-2"
 
2784
    || $input_encoding eq "ISO-8859-3"
 
2785
    || $input_encoding eq "ISO-8859-4"
 
2786
    || $input_encoding eq "ISO-8859-5"
 
2787
    || $input_encoding eq "ISO-8859-6"
 
2788
    || $input_encoding eq "ISO-8859-7"
 
2789
    || $input_encoding eq "ISO-8859-8"
 
2790
    || $input_encoding eq "ISO-8859-9"
 
2791
    || $input_encoding eq "ISO-8859-10")
 
2792
  {
 
2793
    # OK
 
2794
    ;
 
2795
  }
 
2796
else
 
2797
  {
 
2798
    print STDERR (sprintf (gettext ("%s: unsupported input encoding: %s\n"),
 
2799
                           $program_executable, $input_encoding));
 
2800
    exit 1;
 
2801
  }
 
2802
 
 
2803
if ($action eq "")
 
2804
  {
 
2805
    $action = "texinfo";
 
2806
  }
 
2807
 
 
2808
for ($n = 0 ; $n <= $#sgml_include ; $n++)
 
2809
  {
 
2810
    $nsgmls_include_options
 
2811
      = $nsgmls_include_options . " -i" . $sgml_include[$n];
 
2812
  }
 
2813
 
 
2814
#----------------------------------------------------------------------
 
2815
# We assume that if we are here, all arguments are ok.
 
2816
# If we are here, there is something to do.
 
2817
#----------------------------------------------------------------------
 
2818
 
 
2819
# Define the root file name.
 
2820
$root_file_name = &root_name ("$source_file_name", ".sgml");
 
2821
 
 
2822
# Prepare the diagnostic messages file. It will be reopened when
 
2823
# necessary.
 
2824
open (DIAG, "> $root_file_name.diag");
 
2825
close (DIAG);
 
2826
 
 
2827
# If we have to clean from stale files; we do here:
 
2828
if ($action eq "clean")
 
2829
 {
 
2830
    system( "mv $root_file_name.ps $root_file_name.ps1  > /dev/null 2>&1" );
 
2831
 
 
2832
    # This deletes also PostScript files.
 
2833
    system( "rm $root_file_name.??  > /dev/null 2>&1" );
 
2834
    system( "mv $root_file_name.ps1 $root_file_name.ps  > /dev/null 2>&1" );
 
2835
 
 
2836
    system( "rm $root_file_name.??s > /dev/null 2>&1" );
 
2837
    system( "rm $root_file_name.??x > /dev/null 2>&1" );
 
2838
    system( "rm $root_file_name.log > /dev/null 2>&1" );
 
2839
    system( "rm $root_file_name.toc > /dev/null 2>&1" );
 
2840
    system( "rm $root_file_name.diag > /dev/null 2>&1" );
 
2841
    system( "rm $root_file_name.*.bak > /dev/null 2>&1" );
 
2842
 
 
2843
    exit 0;
 
2844
  }
 
2845
 
 
2846
# First step filter.
 
2847
# There isn't any more.
 
2848
 
 
2849
# Second step filter.
 
2850
# There isn't any more.
 
2851
 
 
2852
# Now we call nsgmls from the SP package and do what it is required.
 
2853
if ($action eq "sgml-check")
 
2854
  {
 
2855
    # We just check the SGML. The output is controlled by less, so
 
2856
    # we can read it well.
 
2857
    system
 
2858
      ("cat $source_file_name | nsgmls $nsgmls_include_options -s -c $CATALOG 2>&1 | less");
 
2859
  }
 
2860
elsif ($action eq "sgml-check-hard")
 
2861
  {
 
2862
    # We just check the SGML in an hard way.
 
2863
    # The output is controlled by less, so
 
2864
    # we can read it well.
 
2865
    system
 
2866
      ("cat $source_file_name | nsgmls $nsgmls_include_options -wall -s -c $CATALOG 2>&1 | less");
 
2867
  }
 
2868
else
 
2869
  {
 
2870
    # Tell what we are doing.
 
2871
    &diag_output (sprintf (gettext ("%s:%s: SGML parse\n"),
 
2872
                   $program_executable, $source_file_name));
 
2873
 
 
2874
    # We obtain a first pass SP output.
 
2875
    system
 
2876
      ("cat $source_file_name | nsgmls $nsgmls_include_options -c $CATALOG > $post_sp_temp_file");
 
2877
 
 
2878
    # Now we have to modify the SP output.
 
2879
    $post_sp_filter_temp_file = &sp_filter ($post_sp_temp_file,
 
2880
                                            $typesetting, $source_file_name);
 
2881
 
 
2882
    if ($action eq "sp")
 
2883
      {
 
2884
        # All done. The SP output is ready.
 
2885
        # We just copy the temporary file into an appropriate name.
 
2886
        system ("cp $post_sp_filter_temp_file $root_file_name.sp");
 
2887
 
 
2888
      }
 
2889
    else
 
2890
      {
 
2891
        # We have to elaborate the post-SP output 
 
2892
        # This elaboration will generate the file $root_file_name.texinfo
 
2893
        #
 
2894
        # We just need to call:
 
2895
        #&sgml_post_sp_elab ($post_sp_filter_temp_file,
 
2896
        #                    $sgml_target,
 
2897
        #                    $source_file_name,
 
2898
        #                    $root_file_name,
 
2899
        #                    $paper,
 
2900
        #                    $setchapternewpage,
 
2901
        #                    $footnotestyle,
 
2902
        #                    $headings,
 
2903
        #                    $output_encoding);
 
2904
        #
 
2905
        # But we cannot, as this will take away all resources and
 
2906
        # the system() function will not work well for further
 
2907
        # elaborations (makeinfo and texi2dvi).
 
2908
        #
 
2909
        # So this function is inside a specific Perl program:
 
2910
        # sgmltexi-sp2texi.
 
2911
        #
 
2912
        # Notice that arguments must be enclosed with double quotes
 
2913
        # because these arguments may be empty.
 
2914
        #
 
2915
        # Last argument, $verbose, is meant to be like a global variable.
 
2916
        #
 
2917
        system ("sgmltexi-sp2texi \"$post_sp_filter_temp_file\" \"$sgml_target\" \"$source_file_name\" \"$root_file_name\" \"$paper\" \"$setchapternewpage\" \"$footnotestyle\" \"$headings\" \"$output_encoding\" \"$verbose\"");
 
2918
 
 
2919
        if ($action eq "texinfo"
 
2920
            || $action eq "texi")
 
2921
          {
 
2922
            # All done. The Texinfo source is ready.
 
2923
            ;   
 
2924
          }
 
2925
        elsif ($action eq "info")
 
2926
          {
 
2927
            if ($force)
 
2928
              {
 
2929
                $makeinfo_options
 
2930
                  = $makeinfo_options . "--force ";
 
2931
              }
 
2932
            if ($number_sections)
 
2933
              {
 
2934
                $makeinfo_options
 
2935
                  = $makeinfo_options . "--number-sections ";
 
2936
              }
 
2937
            # Run makeinfo.
 
2938
            system ("makeinfo $makeinfo_options $root_file_name.texinfo");
 
2939
          }
 
2940
        elsif ($action eq "text")
 
2941
          {
 
2942
            if ($force)
 
2943
              {
 
2944
                $makeinfo_options
 
2945
                  = $makeinfo_options . "--force ";
 
2946
              }
 
2947
            if ($number_sections)
 
2948
              {
 
2949
                $makeinfo_options
 
2950
                  = $makeinfo_options . "--number-sections ";
 
2951
              }
 
2952
            # Run makeinfo.
 
2953
            system ("makeinfo --no-headers --no-split $makeinfo_options --output=$root_file_name.txt $root_file_name.texinfo");
 
2954
          }
 
2955
        elsif ($action eq "html")
 
2956
          {
 
2957
            if ($force)
 
2958
              {
 
2959
                $makeinfo_options
 
2960
                  = $makeinfo_options . "--force ";
 
2961
              }
 
2962
            if ($number_sections)
 
2963
              {
 
2964
                $makeinfo_options
 
2965
                  = $makeinfo_options . "--number-sections ";
 
2966
              }
 
2967
            # Run makeinfo.
 
2968
            system ("makeinfo --html $makeinfo_options $root_file_name.texinfo");
 
2969
          }
 
2970
        elsif ($action eq "xml")
 
2971
          {
 
2972
            if ($force)
 
2973
              {
 
2974
                $makeinfo_options
 
2975
                  = $makeinfo_options . "--force ";
 
2976
              }
 
2977
            if ($number_sections)
 
2978
              {
 
2979
                $makeinfo_options
 
2980
                  = $makeinfo_options . "--number-sections ";
 
2981
              }
 
2982
            # Run makeinfo.
 
2983
            system ("makeinfo --xml $makeinfo_options $root_file_name.texinfo");
 
2984
          }
 
2985
        elsif ($action eq "docbook")
 
2986
          {
 
2987
            if ($force)
 
2988
              {
 
2989
                $makeinfo_options
 
2990
                  = $makeinfo_options . "--force ";
 
2991
              }
 
2992
            if ($number_sections)
 
2993
              {
 
2994
                $makeinfo_options
 
2995
                  = $makeinfo_options . "--number-sections ";
 
2996
              }
 
2997
            # Run makeinfo.
 
2998
            system ("makeinfo --docbook $makeinfo_options $root_file_name.texinfo");
 
2999
          }
 
3000
        elsif ($action eq "dvi")
 
3001
          {
 
3002
            system ("texi2dvi $root_file_name.texinfo");
 
3003
            # It seems that it is better to do it twice.
 
3004
            system ("texi2dvi $root_file_name.texinfo");
 
3005
          }
 
3006
        elsif ($action eq "ps")
 
3007
          {
 
3008
            system ("texi2dvi $root_file_name.texinfo");
 
3009
            # It seems that it is better to do it twice.
 
3010
            system ("texi2dvi $root_file_name.texinfo");
 
3011
            if ($paper eq "a4")
 
3012
              {
 
3013
                system ("dvips -K -t a4 -o $root_file_name.ps $root_file_name.dvi");
 
3014
              }
 
3015
            elsif ($paper eq "letter")
 
3016
              {
 
3017
                system ("dvips -K -t letter -o $root_file_name.ps $root_file_name.dvi");
 
3018
              }
 
3019
            else
 
3020
              {
 
3021
                system ("dvips -K -o $root_file_name.ps $root_file_name.dvi");
 
3022
              }
 
3023
          }
 
3024
        elsif ($action eq "pdf")
 
3025
          {
 
3026
            system ("texi2dvi --pdf $root_file_name.texinfo");
 
3027
            # It seems that it is better to do it twice.
 
3028
            system ("texi2dvi --pdf $root_file_name.texinfo");
 
3029
          }
 
3030
      }
 
3031
}
 
3032
 
 
3033
# Delete temporary files.
 
3034
# It is strange, but sometimes, unlink() doesn't work as expected.
 
3035
# This is because we use "rm" instead.
 
3036
unlink ($post_sp_temp_file);
 
3037
system ("rm -f $post_sp_temp_file");
 
3038
unlink ($post_sp_filter_temp_file);
 
3039
system ("rm -f $temp_files_list");
 
3040
 
 
3041
#======================================================================
 
3042