summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/generic/tex-virtual-academy-pl/idx/plmindex.html
blob: 0e32695caeb0d335b5ad907a3da30628b4f6470b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-2">
<meta http-equiv="Content-language" content="pl">
<meta name="Author" content="W³odzimierz Macewicz">
<title> Program plmindex </title>
</head>
<body bgcolor=#F0F0A0>
Przedstawiam Pañstwu program <code>plmindex</code>, czyli
swoj± implementacjê programu <code>makeindx</code> (wersja 2.12).
Program jest dostêpny w postaci pakietu spakowanego (¼ród³a)
programem <code>zip</code>
w instalacji TeX Live: 
<!-- <a href="ftp://ftp.elka.pw.edu.pl/pub/unix/DTP/plmindex.zip"> -->
<a href="../../../support/gustprog/plmindex.zip">texmf-dist/doc/support/gustprog/plmindex.zip</a><br>
<!-- i binaria dla dos'a (djgpp) i Windowsów -- domy¶lna strona kodowa Mazowia<br>
<a href="ftp://ftp.elka.pw.edu.pl/pub/unix/DTP/djgpp.zip">djgpp.zip</a><br>
oraz dla Windowsów (MS C++) -- domy¶lna strona kodowa cp1250<br>
<a href="ftp://ftp.elka.pw.edu.pl/pub/unix/DTP/msc.zip">msc.zip</a><br> -->
Pakiety s± tak¿e dostêpne w archiwum GUST, pod adresem:<br>
<a href=ftp://ftp.gust.org.pl/TeX/GUST/contrib/GUSTPROG/plmindex.zip>plmindex.zip</a> oraz na CTAN-ach
w katalogu <tt>..../language/polish</tt>


<p>Program ten s³u¿y do sortowania i grupowania skorowidzów
utworzonych pakietem LaTeX. Po przetworzeniu zbioru mo¿e on
byæ do³±czony do tekstu jako gotowy skorowidz.

<p>Krótki opis opcji programu mo¿na uzyskaæ po wywo³aniu<br>
plmindex -h

<p>
Zmiany w programie polegaj± na dostosowaniu go do pracy
z dowolnym o¶mio-bitowym alfabetem (sposobem kodowania).
Prezentowana wersja pozwala na opracowanie skorowidzów 
w jêzyku polskim (kod Mazowii, cp1250, cp852 i ISO-8859-2) oraz angielskim.
Zdefiniowanie nowego jêzyka polega na zbudowaniu kilku
tablic okre¶laj±cych: porz±dek leksykograficzny,
kategorie znaków, odpowiedniki liter ma³e-du¿e i
<b>nie wymaga modyfikacji kodu</b> programu. Wszystkie funkcje 
odpowiedzialne za operowanie na ci±gach znaków (,,stringach'')
s± sterowane tablicami. S± one ca³kowicie niezale¿ne od 
implementacji kompilatora <code>C</code>. Program by³
kompilowany nastêpuj±cymi kompilatorami:
<ul>
<li> Borland C++ v 4.51 -- po dodaniu kolejnych tablic wielko¶æ programu
    przeros³a mo¿liwo¶ci ¶rodowiska 16-bitowego
<li> Watcom C++ v 10.0a
<li> GNU C++ v 2.8.1 (System MS-DOS) -- uwaga na wersjê 2.8.0, czasami 
	¼le obs³uguje
     przesy³anie parametrów do funkcji o niezananej liczbie parametrów
<li> GNU C++ v 2.8.1 (SunOS 6.5 i Linux)
<li> MSC C++ 6.0 (Windows 98)
</ul>
dla ka¿dego kompilatora zosta³y napisane odpowiednie
<code>makefile</code>, ³atwo rozró¿niane po ostatnim cz³onie
nazwy (rozszerzeniu): 
<dl>
<dd><code>.wcc</code> -- Watcom,
<dd><code>.djg</code> -- GNU (MS-Dos), 
<dd><code>.gcc</code> -- GNU (SunOS -- ogólnie Unix)<br>
<dd><code>.msc</code> -- MSC C++ 6.0 (Windows 98)<br>
<dd><code>.emx</code> -- GNU (DOS >>implementacja E.Mathesa<< lub OS)
</dl>
odpowiedniemu zbiorowi nale¿y zmieniæ nazwê na <code>makefile</code>
i uruchomiæ program <code>make</code> (lub <code>wmake</code> w przypadku
pakietu Watcom i nmake w przypadku MSC) lub wyw³aæ<br>
<tt>
[n|w]make -f makefile.<i>xxx</i>
</tt>

<hr>
<center> <h2>Opis tablic i struktur</h2> </center>


<p>Zosta³a zdefiniowana struktura <code>_multilanguage</code>
zawieraj±ca tablice opisuj±ce cechy jêzyka.  Odsy³acze przyporz±dkowane
nazwom pól wskazuj± na zbiory zawieraj±ce przyk³adowe
definicje dla kodu Mazowii. Nazwa przyk³adowej tablicy
zawiera prefix okre¶laj±cy definiowany jêzyk.
<pre>
struct _multilanguage
   { 
            p_char_u  <a href=day.html>*day_name_ptr</a>;		/* tablica nazw dni tygodnia  */
            p_char_u  <a href=mon.html>*mon_name_ptr</a>;		/* tablica nazw miesiêcy      */
            int_u     <a href=toascii.html>*toascii_table</a>;		/* tablica konwersji znaków
	                                           o kodach &gt; 127 na
						   kod ASCII np. ± --&gt; a   */
            a_char_u  <a href=lower.html>*lower_table</a>;		/* tablica konwersji ma³ych
	                                           liter na du¿e              */
            a_char_u  <a href=upper.html>*upper_table</a>;		/* tablica konwersji du¿ych
	                                           liter na ma³e              */
            a_char_u  <a href=typy.html>*char_type</a>;               /* tablica typów znaków       */
            int_u     <a href=order.html>*order_tbl</a>;               /* tablica definiuj±ca
	                                           kolejno¶æ leksykograficzn± */
            word      <a href=flags.html>flags</a>;                    /* s³owo flag                 */
            char_u    <a href=spec.html>*(*_special)(const long)</a>; /* adres funkcji dodatkowych  */
            char      <a href=id.html>*id</a>;                      /* identyfikator jêzyka       */
            char      <a href="name.html">*name</a>;                    /* nazwa jêzyka               */
     struct decode    <a href=decode.html>*decode</a>;                  /* adres struktury opisuj±cej
                                                   nazwy liczb                */
};
</pre>
<pre>
struct decode
   {
    p_char_u *<a href=jedn.html>jedn</a>;			/* adres tablicy nazw jednostek */
    p_char_u *<a href=dies.html>dies</a>;			/* adres tablicy nazw dziesi±tek */
    p_char_u *<a href=setki.html>setki</a>;			/* adres tablicy nazw setek */
    p_char_u *<a href=tys.html>tys</a>;			/* adres tablicy nazw tysiêcy */
    p_char_u *<a href=mil.html>mil</a>;			/* adres tablicy nazw milionów */
   };
</pre>

definicje typów
<pre>
typedef unsigned char char_u;

typedef const unsigned char *p_char_u[];

typedef const    unsigned char a_char_u[];
typedef const    int      int_u[];
typedef unsigned int      word;
</pre>

Powy¿sze definicje znajduj± siê w zbiorze <code>mkind.h</code>.

<p>W celu pod³±czenia nowego jêzyka nale¿y utworzyæ nowy zbiór
nag³ówkowy zawieraj±cy opis jêzyka w postaci tabel.

<p>Utworzony zbiór nale¿y do³±czyæ poleceniem
<code>#include</code> do zbioru <code>language.c</code>
W zbiorze <code>language.c</code> znajduj± siê funkcje
odpowiedzialne za operacje na ci±gach znaków. S± one
sterowane zmienn± <code>Language</code>, bêd±c± wskazaniem
na element tablicy <a href=lang.html><code>multilanguage</code></a> zawieraj±c±
struktury wszystkich zadeklarowanych jêzyków. Pocz±tkowa warto¶æ
zmiennej <code>Language</code> okre¶la domy¶lny jêzyk
Dopuszczalna warto¶æ zmiennej jest okre¶lona przez konstrukcjê
<code>enum _language</code>, tak ¿e w przypadku definiowania
nowego jêzyka nale¿y zdefiniowaæ nowy element -- bêdzie
on identyfikatorem jêzyka.


<p>W zbiorze <code>language.c</code> znajduje siê deklaracja
tablicy struktur opisu jêzyków. Ostatnim elementem tablicy
musi byæ opis zawieraj±cy w polu <code>id</code> warto¶æ
<code>NULL</code>

<hr>
<em>W³odzimierz Macewicz</em>
</body>
</html>