plmindex
, czyli
swoją implementację programu makeindx
(wersja 2.12).
Program jest dostępny w postaci pakietu spakowanego (źródła)
programem zip
w instalacji TeX Live:
texmf-dist/doc/support/gustprog/plmindex.zipProgram 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.
Krótki opis opcji programu można uzyskać po wywołaniu
plmindex -h
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
nie wymaga modyfikacji kodu programu. Wszystkie funkcje
odpowiedzialne za operowanie na ciągach znaków (,,stringach'')
są sterowane tablicami. Są one całkowicie niezależne od
implementacji kompilatora C
. Program był
kompilowany następującymi kompilatorami:
makefile
, łatwo rozróżniane po ostatnim członie
nazwy (rozszerzeniu):
.wcc
-- Watcom,
.djg
-- GNU (MS-Dos),
.gcc
-- GNU (SunOS -- ogólnie Unix).msc
-- MSC C++ 6.0 (Windows 98).emx
-- GNU (DOS >>implementacja E.Mathesa<< lub OS)
makefile
i uruchomić program make
(lub wmake
w przypadku
pakietu Watcom i nmake w przypadku MSC) lub wywłaćZostała zdefiniowana struktura _multilanguage
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.
struct _multilanguage { p_char_u *day_name_ptr; /* tablica nazw dni tygodnia */ p_char_u *mon_name_ptr; /* tablica nazw miesięcy */ int_u *toascii_table; /* tablica konwersji znaków o kodach > 127 na kod ASCII np. ą --> a */ a_char_u *lower_table; /* tablica konwersji małych liter na duże */ a_char_u *upper_table; /* tablica konwersji dużych liter na małe */ a_char_u *char_type; /* tablica typów znaków */ int_u *order_tbl; /* tablica definiująca kolejność leksykograficzną */ word flags; /* słowo flag */ char_u *(*_special)(const long); /* adres funkcji dodatkowych */ char *id; /* identyfikator języka */ char *name; /* nazwa języka */ struct decode *decode; /* adres struktury opisującej nazwy liczb */ };
struct decode { p_char_u *jedn; /* adres tablicy nazw jednostek */ p_char_u *dies; /* adres tablicy nazw dziesiątek */ p_char_u *setki; /* adres tablicy nazw setek */ p_char_u *tys; /* adres tablicy nazw tysięcy */ p_char_u *mil; /* adres tablicy nazw milionów */ };definicje typów
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;Powyższe definicje znajdują się w zbiorze
mkind.h
.
W celu podłączenia nowego języka należy utworzyć nowy zbiór nagłówkowy zawierający opis języka w postaci tabel.
Utworzony zbiór należy dołączyć poleceniem
#include
do zbioru language.c
W zbiorze language.c
znajdują się funkcje
odpowiedzialne za operacje na ciągach znaków. Są one
sterowane zmienną Language
, będącą wskazaniem
na element tablicy multilanguage
zawierającą
struktury wszystkich zadeklarowanych języków. Początkowa wartość
zmiennej Language
określa domyślny język
Dopuszczalna wartość zmiennej jest określona przez konstrukcję
enum _language
, tak że w przypadku definiowania
nowego języka należy zdefiniować nowy element -- będzie
on identyfikatorem języka.
W zbiorze language.c
znajduje się deklaracja
tablicy struktur opisu języków. Ostatnim elementem tablicy
musi być opis zawierający w polu id
wartość
NULL
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.