mirror of
https://github.com/mpv-player/mpv
synced 2024-12-13 02:15:59 +00:00
47e11b460a
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@6549 b3059339-0415-0410-9bf9-f77b7e298cf2
1066 lines
28 KiB
HTML
1066 lines
28 KiB
HTML
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
|
|
<title>MPlayer skin format</title>
|
|
<style type="text/css">
|
|
em.note {color: green}
|
|
em.warn {color: red}
|
|
</style>
|
|
</head>
|
|
<body text="#000000" bgcolor="#FFFFFF">
|
|
|
|
<center>
|
|
<h1>
|
|
Format skór MPlayera</h1></center>
|
|
|
|
<center>
|
|
<h1>
|
|
|
|
<hr></h1></center>
|
|
|
|
<h2>
|
|
Zawartość</h2>
|
|
|
|
<ul type=disc>
|
|
<li>
|
|
<a href="#intro">1 Wstęp</a></li>
|
|
|
|
<li>
|
|
<a href="#overview">2 Omówienie</a></li>
|
|
|
|
<ul type=circle>
|
|
<li>
|
|
<a href="#dirs">2.1 Katalogi</a></li>
|
|
|
|
<li>
|
|
<a href="#images">2.2 Obrazki</a></li>
|
|
|
|
<li>
|
|
<a href="#parts">2.3 Części skóry</a></li>
|
|
|
|
<li>
|
|
<a href="#files">2.4 Pliki</a></li>
|
|
</ul>
|
|
|
|
<li>
|
|
<a href="#skin">3 Plik <tt>skin</tt></a></li>
|
|
|
|
<ul type=circle>
|
|
<li>
|
|
<a href="#mainwin">3.1 Główne okno</a></li>
|
|
|
|
<li>
|
|
<a href="#subwindow">3.2 Okno ekranu</a></li>
|
|
|
|
<li>
|
|
<a href="#skinmenu">3.3 Menu skóry</a></li>
|
|
</ul>
|
|
|
|
<li>
|
|
<a href="#fonts">4 Fonty</a></li>
|
|
|
|
<ul type=circle>
|
|
<li>
|
|
<a href="#symbols">4.1 Symbole</a></li>
|
|
</ul>
|
|
|
|
<li>
|
|
<a href="#guimsg">Dodatek A: sygnały GUI</a></li>
|
|
</ul>
|
|
|
|
<hr>
|
|
<center>Ostatnia modyfikacja: Sep 10, 2001
|
|
<br>Ostatnia modyfikacja w języku polskim: 29 marca 2002</center>
|
|
|
|
<hr>
|
|
<h2>
|
|
<a NAME="intro"></a>1 Wstęp</h2>
|
|
Celem tej dokumentacji jest opisanie formatu skór MPlayera. Informacje zawarte
|
|
w tym dokumencie mogą być błędne, ponieważ:
|
|
<br><i>a)</i> to nie ja napisałem GUI
|
|
<br><i>b)</i> Gui nie jest skończony
|
|
<br><i>c)</i> Mogę się mylić, więc nie bądź zaskoczony jeżeli coś nie będzie
|
|
działało w sposób w jaki zostało tutaj opisane.
|
|
<p>Podziękowania dla <i>Zoltán Ponekker</i> za pomoc.
|
|
<p><i>András Mohari <mayday@freemail.hu></i>
|
|
<p><i>Tłumaczenie na język polski:</i>
|
|
<br><i>CyberPe <cyberp@silesianet.pl></i>
|
|
<br>Wszystkie uwagi i pomysły dotyczące tego tłumaczenia są mile widziane.
|
|
W temacie proszę podać "Mplayer".
|
|
<h2>
|
|
<a NAME="overview"></a>2 Omówienie</h2>
|
|
To nie ma tak naprawdę żadnego związku z formatem skór, ale powinieneś
|
|
wiedzieć, że MPlayer <b>nie ma</b> wbudowanej skórki, więc <b>musisz mieć
|
|
zainstalowaną chociaż jedną skórę, aby mieć możliwość używania GUII</b>.
|
|
<h3>
|
|
<a NAME="dirs"></a>2.1 Katalogi</h3>
|
|
Katalogi przeszukiwane przez MPlayera w poszukiwaniu skór to (w kolejności
|
|
szukania):
|
|
<pre> /usr/local/share/mplayer/Skin/
|
|
~/.mplayer/Skin/</pre>
|
|
Zauważ, że pierwsza ścieżka może być zależna od tego, jak MPlayer został
|
|
skonfigurowany podczas kompilacji (zobacz argument "<tt>--datadir" skryptu
|
|
konfiguracyjnego</tt>).
|
|
<p>Każda skórka jest zainstalowana w swoim własnym katalogu znajdującym
|
|
się w jednym z folderów zwymienionych powyżej, na przykład:
|
|
<pre> /usr/local/share/mplayer/Skin/default/</pre>
|
|
|
|
<h3>
|
|
<a NAME="images"></a>2.2 Formaty plików graficznych</h3>
|
|
Obrazki muszą być w formacie truecolor (24, albo 32 bity) i mogą być zapisane
|
|
jako BMP, PNG i TGA (z tym, że obrazki zapisane jako TGA nie mogą być skompresowane).
|
|
Preferowany format to PNG, ponieważ ma on bardzo dobry współczynnik kompresji,
|
|
a co za tym idzie, obrazki zajmują mniej miejsca.
|
|
<p>W głównym oknie (zobacz niżej) możesz używać obrazków z 'przeźroczystością':
|
|
obszary wypełnione przy użyciu koloru #FF00FF (<font color="#FF00FF">magenta</font>)
|
|
są dla MPlayera w pełni przeźroczyste. Oznacza to, że możesz używać dowolnych
|
|
kształtów okna głównego (np. okrągłych), jeżeli tylko twój X serwer posiada
|
|
rozszerzenie XShape.
|
|
<h3>
|
|
<a NAME="parts"></a>2.3 Części skóry</h3>
|
|
Skórki są całkowicie konfigurowalne (w przeciwieństwie np. do skór Winampa/XMMS)
|
|
(chodzi o to, że możesz umieścić dowolny przycisk np. 'play' w dowolnym
|
|
miejscu swojej skóry, format XMMSa i Winampa ma z góry ustalone położenie
|
|
każdego elementu i nie można tego zmienić - przyp. tłumacza), więc tylko
|
|
od ciebie zależy czy stworzysz coś naprawdę fajnego.
|
|
<p>Na dzień dzisiejszy są trzy okna do skonfigurowania: <a href="#mainwin">okno
|
|
główne</a> (main window), <a href="#subwindow">okno ekranu</a> (subwindow)
|
|
oraz <a href="#skinmenu">menu skóry</a> (skin menu), które może zostać
|
|
uaktywnione poprzez naciśnięcie prawego przycisku myszy.
|
|
<ul>
|
|
<li>
|
|
<b>okno główne</b> - to okno w którym kontrolujesz MPlayera. Tło tego okna
|
|
jest obrazkiem. Wszystkie elementy muszą być umieszczone w tym oknie: przyciski
|
|
(buttons), potencjometry (albo suwaki, jeżeli bardziej ci odpowiada ta
|
|
nazwa) oraz etykiety (labels). Dla każdego elementu musisz określić jego
|
|
pozycję oraz rozmiar.</li>
|
|
|
|
<p>Każdy <b>przycisk</b> ma trzy fazy (wciśnięty, uwolniony oraz nieaktywny),
|
|
więc ich obrazki muszą być podzielone na trzy części w pionie. Zobacz sekcję
|
|
<a href="#main.button">przyciski</a>,
|
|
aby uzyskać więcej informacji.
|
|
<p><b>potencjometry </b>(zazwyczaj używane do określania pozycji filmu
|
|
(seek bar) oraz do kontroli głośności, balansu dźwięku) mogą posiadać dowolną
|
|
liczbę faz poprzez umieszczenie każdej następnej fazy pod poprzednią (w
|
|
obrazku) <font size=-1>(to nie jest za dobrze przetłumaczone-przyp. tłumacz)</font>.Zobacz
|
|
sekcję
|
|
<a href="#main.hpotmeter">hpotmeter</a> i <a href="#main.potmeter">potmeter</a>,
|
|
aby dowiedzieć się więcej na ten temat.
|
|
<p><b>Etykiety </b>są bardzo specyficzne: znaki służące do ich opisania
|
|
są brane z osobnego obrazka, a litery, które są w nim zawarte (w pliku
|
|
graficznym) są opisane przez <a href="#fonts">plik opisujący fonty</a>.
|
|
Jest to plik tekstowy, który określa pozycję x, y oraz rozmiar każdego
|
|
symbolu znajdującego się w obrazku. (a więc "plik graficzny z fontami"
|
|
i "plik opisujący fonty" tworzą razem fonty). Zobacz <a href="#main.dlabel">dlabel</a>
|
|
i <a href="#main.slabel">slabel</a>, po więcej szczegółów
|
|
<p><i><b>Uwaga:</b> wszystkie obrazki mogą posiadać przeźroczystość tak,
|
|
jak opisano to w sekcji <a href="#images">formaty plików graficznych</a>.</i>
|
|
<br>
|
|
<li>
|
|
<b>okno ekranu</b> <font size=-1>(niezbyt szczęśliwe tłumaczenie - przyp.
|
|
tłumacz)</font> - tutaj pojawia się film podczas odtwarzania. Może ono wyświetlać
|
|
określony obrazek jeżeli nie jest w danym momencie odgrywany żaden film
|
|
(to strasznie denerwujące mieć puste okno:-)) <i><b>Uwaga</b>: przeźroczystość
|
|
</i>jest tutaj <i><b>niedostępna</b>.</i></li>
|
|
|
|
<br>
|
|
<li>
|
|
<b>menu skóry</b>- to po prostu jeden ze sposobów do kontrolowania MPlayera
|
|
poprzez polecenia z menu. Wymagane są tutaj dwa obrazki: pierwszy z nich
|
|
jest podstawowym obrazkiem pokazującym menu w "normalnym" stanie, drugi
|
|
natomiast jest używany do wyświetlania wybranych elementów. Kiedy aktywujesz
|
|
menu (poprzez prawe kliknięcie myszy) pokazywany jest pierwszy obrazek.
|
|
Kiedy najeżdżasz kursorem na którąś z pozycji, jej zaznaczenie jest kopiowane
|
|
z drugiego obrazka na obszar menu znajdujący się pod wskaźnikiem myszy
|
|
(a więc drugi obrazek nigdy nie jest pokazany w całości).</li>
|
|
|
|
<br> </ul>
|
|
|
|
<ul>Obszar menu znajdujący się pod kursorem jest zdefiniowany poprzez jego
|
|
pozycję i rozmiar w obrazku (zobacz sekcję <a href="#skinmenu">menu skóry</a>
|
|
aby dowiedzieć się więcej na ten temat)</ul>
|
|
Jest jeszcze jedna ważna rzecz, która nie została jeszcze wspomniana: dla
|
|
przycisków, potencjometrów i obszarów menu, MPlayer musi wiedzieć co ma
|
|
zrobić jeżeli zostaną one kliknięte. Zajmują się tym <a href="#guimsg">sygnały</a>
|
|
(zdarzenia). Dla wszystkich tych elementów muszą być zdefiniowane sygnały,
|
|
które mają zostać wywołane po naciśnięciu przycisku myszy.
|
|
<h3>
|
|
<a NAME="files"></a><i>2.4 Pliki</i></h3>
|
|
Aby stworzyć skórę będziesz potrzebował następujących plików.
|
|
<ul>
|
|
<li>
|
|
Plik konfiguracyjny o nazwie <a href="#skin">skin</a>, który informuje
|
|
MPlayera w jaki sposób łączyć ze sobą poszczególne części skóry i co ma
|
|
zrobić kiedy klikasz gdziesz w obszarze okna.</li>
|
|
|
|
<li>
|
|
Obrazek Tła do głównego okna.</li>
|
|
|
|
<li>
|
|
Obrazki dla elementów okna głównego (włączając w to jeden, albo więcej
|
|
plików opisujących fonty potrzebnych do wyświetlania etykiet)</li>
|
|
|
|
<li>
|
|
Obrazek który ma być wyświetlony w oknie ekranu (opcjonalnie)</li>
|
|
|
|
<li>
|
|
Dwa obrazki do menu skóry (są one potrzebne tylko jeśli chcesz stworzyć
|
|
takie menu)</li>
|
|
</ul>
|
|
Poza plikiem konfiguracyjnym skóry, możesz nazwać wszystkie inne pliki
|
|
jak tylko chcesz (ale pamiętaj, że plik opisujący fonty musi mieć rozszerzenie
|
|
.fnt).
|
|
<h2>
|
|
<a NAME="skin"></a>3 The <b><tt>skin</tt></b> file</h2>
|
|
Jak wspomniano powyżej jest to plik konfigurujący skórę. Potrafi on rozpoznawać
|
|
typy wierszy: wiersze komentarza rozpoczyna średnik, czyli ';' (przed nim
|
|
mogą znajdować się tylko spacje, lub "taby")
|
|
<p>Plik podzielony jest na sekcję. Każda z nich opisuje poszczególny element
|
|
skóry dla każdej z aplikacji i ma następującą postać:
|
|
<table BORDER WIDTH="100%" >
|
|
<tr BGCOLOR="#C0C0C0">
|
|
<td>
|
|
<pre>section = section<i> name
|
|
</i>.
|
|
.
|
|
.
|
|
end</pre>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<p>Na dzień dzisiejszy istnieje tylko jedna aplikacja, więc potrzebujesz
|
|
tylko jednej sekcji: jej nazwa to <b>movieplayer</b> (odtwarzacz filmów)
|
|
<p>W tej sekcji każde z okien jest opisane poprzez dany blok w taki sposób:
|
|
<table BORDER WIDTH="100%" >
|
|
<tr BGCOLOR="#C0C0C0">
|
|
<td>
|
|
<pre>window = <i>window name
|
|
</i>.
|
|
.
|
|
.
|
|
end</pre>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
gdzie<i> window name </i>może być jednym z następujących bloków:
|
|
<ul>
|
|
<li>
|
|
<b>main</b> - dla głównego okna</li>
|
|
|
|
<li>
|
|
<b>sub</b> - dla okna ekranu</li>
|
|
|
|
<li>
|
|
<b>menu</b> - dla menu skóry.</li>
|
|
</ul>
|
|
(Blok sub i menu są opcjonalne-nie musisz tworzyć menu, ani dekorować okna
|
|
ekranu jeżeli nie chcesz.)
|
|
<p>W każdym z bloków możesz zdefiniować poszczególne elementy (items) dla
|
|
danego okna w sposób przedstawiony poniżej:
|
|
<blockquote>
|
|
<pre>item = parameter</pre>
|
|
</blockquote>
|
|
Gdzie <i>item </i>jest blokiem identyfikującym typ danego elementu GUI,
|
|
<i>parametr</i>
|
|
jest numeryczną, lub tekstową wartością (lub lstą wartości oddzieloną przecinkami).
|
|
<p>Łącząc to wszystko ze sobą, uzyskujemy plik wyglądający mniej więcej
|
|
tak:
|
|
<table BORDER WIDTH="100%" >
|
|
<tr BGCOLOR="#C0C0C0">
|
|
<td>
|
|
<pre>section = movieplayer
|
|
window = main
|
|
; ... elementy dla okna głównego ...
|
|
end
|
|
|
|
window = sub
|
|
; ... elementy dla okna ekranu ...
|
|
end
|
|
|
|
window = menu
|
|
; ... elementy dla menu skóry ...
|
|
end
|
|
end</pre>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<p>Na koniec kila słów o specyfice obrazków dla różnych elementów.
|
|
<br>Nazwa obrazk musi być podana bez żadnych głównych katalogów---obrazki
|
|
są poszukiwane w katalogu ze skórką. Możesz (ale nie musisz) podać rozszerzenie
|
|
plików. Jeżeli plik nie istnieje, MPlayer próbuje załadować plik <i><nazwa
|
|
pliku>.<rozszerzenie></i> gdzie <i>tga, TGA, bmp, BMP, png i PNG</i>
|
|
są próbowane jako <i><rozszerzenie></i> (w tej kolejności)
|
|
<br>Wykorzystany zostanie pierwszy pasujący plik.
|
|
<table BORDER CELLPADDING=5 WIDTH="100%" >
|
|
<tr BGCOLOR="#FFFFCC">
|
|
<td>Tutaj jest przykład, który powinien to wyjaśnić. Przypuśćmy, że masz
|
|
obrazek o nazwie <i>main.png</i>, który używasz do głównego okna:
|
|
<blockquote>
|
|
<pre> base = main, -1, -1</pre>
|
|
</blockquote>
|
|
MPlayer próbuje załadować <i>main, main.tga, main.TGA, main.BMP</i>, itd.,
|
|
więc <i>main.png</i> zostanie znaleziony.
|
|
<br>Jeżeli (przez przypadek) napiszesz:
|
|
<blockquote>
|
|
<pre> base = main.bmp, -1, -1</pre>
|
|
</blockquote>
|
|
wtedy <i>main.bmp</i>, <i>main.bmp.tga</i>, <i>main.bmp.TGA</i>,
|
|
<i>main.bmp.bmp</i>
|
|
będą wyszukiwane i MPlayer w końcu się podda, ponieważ nie ma pliku <b>main.bmp</b>
|
|
w katalogu, ale <i>main.png.</i></td>
|
|
</tr>
|
|
</table>
|
|
|
|
<h3>
|
|
<a NAME="mainwin"></a>3.1 Główne okno</h3>
|
|
Poniżej możesz zobaczyć listę elementów, które mogą być użyte w bloku '<tt>window
|
|
= main</tt>' . . . '<tt>end</tt>'.
|
|
<dl>
|
|
<dt>
|
|
<a NAME="main.base"></a><b>base = <i>obrazek, x, y</i></b></dt>
|
|
|
|
<dd>
|
|
Pozwala ci określić obrazek tła, który ma zostać użyty w głównym oknie.
|
|
Okno to pojawi się w określonej przez <i>x,y</i> pozycji na ekranie (0,0
|
|
to lewy górny róg). Możesz tu użyć także następujących wartości: 1-dla
|
|
wyśrodkowania, 2 dla wyrównania do prawej (dla wartości x) i do dołu (dla
|
|
wartości y). Okno to będzie rozmiarów obrazka tła.</dd>
|
|
|
|
<p><i><b>Uwaga: </b>przeźroczyste obszary w obrazku (kolor #FF00FF) pojawiają
|
|
się jako czarny kolor w X serwerach, które nie obsługują rozszerzenia XShape.</i></dl>
|
|
|
|
<dl>
|
|
<dt>
|
|
<a NAME="main.button"></a><b>button = <i>obrazek, x, y, szerokość, wysokość,
|
|
sygnał</i></b></dt>
|
|
|
|
<dd>
|
|
Umieszcza przycisk o rozmiarze <i>szerokość * wysokość</i> na pozycji <i>x,y</i>.
|
|
Określony sygnał jest generowany, kiedy przycisk zostanie kliknięty. Obrazek
|
|
określony jako <i>obrazek</i> musi być podzielony na trzy części umieszczone
|
|
jedna pod drugą (podzielony według możliwych faz przycisku), w ten sposób:</dd>
|
|
|
|
<br>
|
|
<center><table>
|
|
<tr>
|
|
<td>
|
|
<pre><font size=-1>+------------+
|
|
| wciśnięty |
|
|
+------------+
|
|
| uwolniony |
|
|
+------------+
|
|
| nieaktywny |
|
|
+------------+</font></pre>
|
|
</td>
|
|
</tr>
|
|
</table></center>
|
|
</dl>
|
|
|
|
<dl>
|
|
<dt>
|
|
<a NAME="main.decoration"></a><b>decoration = enable|disable</b></dt>
|
|
|
|
<dd>
|
|
Włącza, lub wyłącza dekoracje okna (pasek tytułowy) twojego menadżera okien.
|
|
Domyślnie jest to <b>wyłączone</b>.</dd>
|
|
</dl>
|
|
|
|
<dl>
|
|
<dt>
|
|
<a NAME="main.hpotmeter"></a><b>hpotmeter = <i>suwak, szs,ws, fazy, liczbafaz,
|
|
domyślna, x, y, sz, w, sygnał</i></b></dt>
|
|
|
|
<dd>
|
|
Umieszcza poziomo potencjometr o rozmiarach <i>sz*w</i> na pozycji <i>x,y</i>.
|
|
Obrazek może być podzielony na różne części dla różnych faz potencjometru
|
|
(np. możesz mieć potencjometr głośności, który zmienia się z zielonego
|
|
na czerwony podczas zmiany głośności z minimalnej do maksymalnej). hpotencjometr
|
|
może mieć przycisk który jest przesuwany w poziomie. Jego parametry to:</dd>
|
|
|
|
<ul>
|
|
<li>
|
|
<i>suwak</i> - obrazek który ma być użyty jako suwak (musi mieć trzy części
|
|
umieszczone jedna pod drugą, tak jak w przypadku <a href="#main.button">przycisku</a>)</li>
|
|
|
|
<li>
|
|
szs, ws - rozmiar suwaka</li>
|
|
|
|
<li>
|
|
<i>fazy</i> - obrazek który ma być użyty dla różnych faz hpotencjometru.
|
|
Obrazek musi być podzielony w pionie na <i>liczbęfaz</i> (zobacz poniżej).
|
|
Specjalna wartość <font size=-1>NULL</font> może być użyta jeżeli nie chcesz
|
|
żadnego obrazka.</li>
|
|
|
|
<li>
|
|
<i>liczbafaz</i> - liczba faz znajdująca się w obrazku z <i>fazami</i>.</li>
|
|
|
|
<li>
|
|
<i>domyślna</i> - domyślna wartość dla hpotencjometru (w przedziale od
|
|
0 do 100)</li>
|
|
|
|
<li>
|
|
<i>x</i>, <i>y</i> - pozycja hpotencjometru</li>
|
|
|
|
<li>
|
|
<i>sz, w</i> - szerokość i wysokość obszaru po którym może poruszać się
|
|
suwak.</li>
|
|
|
|
<li>
|
|
<i>sygnał</i> - sygnał który ma być wywołany, kiedy zmienia się wartość
|
|
hpotnecjometru</li>
|
|
|
|
<p>Obrazek określający poszczególne fazy musi wyglądać w ten sposób:
|
|
<br> </ul>
|
|
|
|
<center><table BORDER=0 >
|
|
<tr>
|
|
<td>
|
|
<pre><font size=-1>+------------+
|
|
| faza #1 |
|
|
+------------+
|
|
| faza #2 |
|
|
+------------+
|
|
...
|
|
+------------+
|
|
| faza #n |
|
|
+------------+</font></pre>
|
|
</td>
|
|
</tr>
|
|
</table></center>
|
|
<i><b>Uwaga: </b>w przyszłości będzie teć vpotencjometr, ale nie został
|
|
on jeszcze zaimpletowany.</i></dl>
|
|
|
|
<dl>
|
|
<dt>
|
|
<a NAME="main.potmeter"></a><b>potmeter = <i>fazy, liczbafaz, domyślna,
|
|
x, y, sz, w, sygnał</i></b></dt>
|
|
|
|
<dd>
|
|
Potencjometr bez suwaka. (Myślę, że chodzi tu o to żeby nim kręcić, ale
|
|
reaguje on tylko na poziome przesuwanie.) Aby zobaczyć opis parametrów
|
|
zobacz <a href="#main.hpotmeter">hpotmeter</a>. <i>fazy</i> mogą mieć wartość
|
|
<font size=-1>NULL</font>
|
|
(nic), ale jest to bezużyteczne, jeżeli nie możesz zobaczyć gdzie znajduje
|
|
się potencjometr.</dd>
|
|
</dl>
|
|
|
|
<dl>
|
|
<dt>
|
|
<a NAME="main.font"></a><b>font = <i>plikfontów, fontid</i></b></dt>
|
|
|
|
<dd>
|
|
Definiuje fonty. <i>plikfontów</i> jest nazwą <i>pliku opisującego fonty</i>
|
|
z rozszerzeniem .fnt (<b>nie trzeba</b> tu określać rozszerzenia). <i>fontid</i>
|
|
jest używany do odsyłania do fontów (kiepskie tłumaczenie-przyp. tłumacz)
|
|
(zobacz <a href="#main.dlabel">dlabel</a> i <a href="#main.slabel">slabel</a>).
|
|
Możesz określić ponad 25 znaków.</dd>
|
|
</dl>
|
|
|
|
<dl>
|
|
<dt>
|
|
<a NAME="main.dlabel"></a><b>dlabel = <i>x, y, długość, align, fontid,
|
|
"text"</i></b></dt>
|
|
|
|
<dd>
|
|
Umieszcza dynamiczne etykiety na pozycji x,y. Etykieta nazywana jest dynamiczną,
|
|
ponieważ tekst w niej jest regularnie odświeżany (coś jak okno z tytułem
|
|
utworu w Winampie-przyp. tłumacz). Maksymalna długość etykiety jest ustalona
|
|
przez <i>długość</i> (jej wysokość jest wysokością fontów). Jeżeli tekst
|
|
który ma być wyświetlony jest dłuższy od tej wartości, wtedy będzie on
|
|
skrolowany (przesuwany-tak jak w XMMS/Winamp-przyp.tłumacz), w innym przypadku
|
|
będzie on wyrównany do określonej przez <i>align</i> (wyrównanie) przestrzeni.0
|
|
dla wyrównania do prawej, 1 dla wyśrodkowania, 2 dla wyrównania do lewej.</dd>
|
|
|
|
<p>Tekst, który ma zostać wyświetlony jest określony przez <i>text</i>:
|
|
musi być on opisany w cudzysłowiu (") (ale " nie może być częścią tekstu).
|
|
Etykieta jest wyświetlana używając <i>fontid</i>. Możesz użyć poniższych
|
|
zmiennych w tekście:
|
|
<br>
|
|
<center><table BORDER valign="top" >
|
|
<tr ALIGN=CENTER>
|
|
<th>Zmienna</th>
|
|
|
|
<th ALIGN=LEFT>Znaczenie</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td ALIGN=CENTER><tt>$1</tt></td>
|
|
|
|
<td>odtwarza czas w formacie <i>hh:mm:ss</i></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td ALIGN=CENTER><tt>$2</tt></td>
|
|
|
|
<td>odtwarza czas w formacie <i>mmmm:ss</i></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td ALIGN=CENTER><tt>$3</tt></td>
|
|
|
|
<td>odtwarza czas w formacie <i>hh</i> (godziny)</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td ALIGN=CENTER><tt>$4</tt></td>
|
|
|
|
<td>odtwarza czas w formacie <i>mm</i> (minuty)</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td ALIGN=CENTER><tt>$5</tt></td>
|
|
|
|
<td>odtwarza czas w formacie <i>ss</i> (sekundy)</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td ALIGN=CENTER><tt>$6</tt></td>
|
|
|
|
<td>wyświetla długość filmu w formacie <i>hh:mm:ss</i></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td ALIGN=CENTER><tt>$7</tt></td>
|
|
|
|
<td>wyświetla długość filmu w formacie <i>mmmm:ss</i></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td ALIGN=CENTER><tt>$8</tt></td>
|
|
|
|
<td>odtwarza czas w formacie <i>h:mm:ss</i></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td ALIGN=CENTER><tt>$v</tt></td>
|
|
|
|
<td>głośność w formacie <i>xxx.xx%</i></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td ALIGN=CENTER><tt>$V</tt></td>
|
|
|
|
<td>głośność w formacie <i>xxx.x</i></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td ALIGN=CENTER><tt>$b</tt></td>
|
|
|
|
<td>balans w formacie <i>xxx.xx%</i></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td ALIGN=CENTER><tt>$B</tt></td>
|
|
|
|
<td>balans w formacie <i>xxx.x</i></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td ALIGN=CENTER><tt>$$</tt></td>
|
|
|
|
<td>znaczek <tt>$</tt></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td ALIGN=CENTER><tt>$a</tt></td>
|
|
|
|
<td>znak określający typ dźwięku (żaden: <tt>n</tt>, mono: <tt>m</tt>,
|
|
stereo: <tt>t</tt>)</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td ALIGN=CENTER><tt>$t</tt></td>
|
|
|
|
<td>Numer ścieżki (w playliście)</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td ALIGN=CENTER><tt>$o</tt></td>
|
|
|
|
<td>nazwa pliku</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td ALIGN=CENTER><tt>$f</tt></td>
|
|
|
|
<td>nazwa pliku małymi literami</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td ALIGN=CENTER><tt>$F</tt></td>
|
|
|
|
<td>nazwa pliku drukowanymi literami</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td ALIGN=CENTER><tt>$T</tt></td>
|
|
|
|
<td>znak określający typ strumienia (plik: <tt>f</tt>, video CD:
|
|
<tt>v</tt>,
|
|
DVD: <tt>d</tt>, URL: <tt>u</tt>) </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td ALIGN=CENTER><tt>$p</tt></td>
|
|
|
|
<td>znak "p" (jeżeli film jest odgrywany i font ma określony symbol "p") </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td ALIGN=CENTER><tt>$s</tt></td>
|
|
|
|
<td>znak "s" (jeżeli film jest zatrzymany i font ma określony symbol "s") </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td ALIGN=CENTER><tt>$e</tt></td>
|
|
|
|
<td>znak "e" (jeżeli włączona jest pauza i font ma określony symbol "e") </td>
|
|
</tr>
|
|
</table></center>
|
|
<b>Uwaga: </b>Zmienne <font size=-1>$a, $T, $p, $s i $e</font> mają znaki
|
|
które powinny być wyświetlane jako znaki specjalne (np. "e" jest symbolem
|
|
pauzy wyglądającym zazwyczaj tak <b><tt>||</tt></b> ). Powinieneś mieć
|
|
fonty dla normalnych znaczków i osobne dla znaków specjalnych. Zobacz sekcję
|
|
<a href="#symbols">symbols</a>
|
|
, aby dowiedzieć się więcej.</dl>
|
|
|
|
<dl>
|
|
<dt>
|
|
<a NAME="main.slabel"></a><b>slabel = <i>x, y, fontid, text</i></b></dt>
|
|
|
|
<dd>
|
|
Umieszcza statyczną etykietę na pozycji <i>x,y</i>. <i>text</i> jest wyświetlany
|
|
używając <i>fontid</i>. Text jest po prostu ciągiem (zmienne $x nie działają)
|
|
który musi znajdować się w cudzysłowiu (" nie może być częścią tekstu).
|
|
Etykieta jest wyświetlana używając <i>fontid</i>.</dd>
|
|
</dl>
|
|
|
|
<h3>
|
|
<a NAME="subwindow"></a>3.2 Okno ekranu</h3>
|
|
Poniżej możesz zobaczyć listę elementów, które mogą być użyte w bloku '<tt>window
|
|
= sub</tt>' . . . '<tt>end</tt>'.
|
|
<dl>
|
|
<dt>
|
|
<a NAME="sub.base"></a><b>base = <i>image, x, y, szerokość, wysokość</i></b></dt>
|
|
|
|
<dd>
|
|
Obrazek który ma być wyświetlony w tym oknie. Okno pojawi się w określonej
|
|
przez ciebie pozycji <i>x,y</i> na ekranie (0,0 umieszcza obrazek w lewym
|
|
górnym rogu). Możesz tu użyć także następujących wartości: 1-dla wyśrodkowania,
|
|
2 dla wyrównania do prawej (dla wartości x) i do dołu (dla wartości y).
|
|
Okno to będzie rozmiarów obrazka. <i>szerokość</i> i <i>wysokość</i> określa
|
|
rozmiar okna. Te zmienne są opcjonalne (jeżeli ich nie będzie, okno będzie
|
|
takich samych rozmiarów jak obrazek)</dd>
|
|
</dl>
|
|
|
|
<dl>
|
|
<dt>
|
|
<a NAME="sub.background"></a><b>background = <i>r, g, b</i></b></dt>
|
|
|
|
<dd>
|
|
Pozwala ci ustalić kolor tła. Jest to przydatne jeżeli obrazek jest mniejszy
|
|
od okna (będzie on także wyświetlany dookoła okna ekranu w trybie pełnoekranowym-przyp.
|
|
tłumacz). r, g i b określają czerwoną, zieloną i niebieską wartość koloru
|
|
(każda z nich jest określona w przedziale od 0 do 255).</dd>
|
|
</dl>
|
|
|
|
<h3>
|
|
<a NAME="skinmenu"></a>3.3 Menu Skóry</h3>
|
|
Jak wspomnianow wcześniej, menu jest wyświtlane przy użyciu dwóch obrazków.
|
|
"Normalny" stan menu jest brany z obrazka określonego jako <i>base</i>,
|
|
podczas gdy zaznaczony obszar jest brany z obrazka określonego jako <i>selected</i>.
|
|
Musisz zdefiniować pozycję i rozmiar każdego z elementów menu poprzez element
|
|
<i>menu</i>.
|
|
<p>Te elementy mogą zostać wykorzystane w bloku '<tt>window = menu</tt>'
|
|
. . . '<tt>end</tt>':
|
|
<dl>
|
|
<dt>
|
|
<a NAME="menu.base"></a><b>base = <i>obrazek</i></b></dt>
|
|
|
|
<dd>
|
|
Obrazek pokazujący normalny stan menu</dd>
|
|
</dl>
|
|
|
|
<dl>
|
|
<dt>
|
|
<a NAME="menu.selected"></a><b>selected = <i>obrazek</i></b></dt>
|
|
|
|
<dd>
|
|
Obrazek pokazujący zaznaczony stan menu.</dd>
|
|
</dl>
|
|
|
|
<dl>
|
|
<dt>
|
|
<a NAME="menu.menu"></a><b>menu = <i>x, y, szerokość, wysokość, sygnał</i></b></dt>
|
|
|
|
<dd>
|
|
Definiuje pozycję <i>x,y</i> i rozmiar poszczególnych elementów menu w
|
|
obrazku. <i>sygnał</i> jest sygnałem, który ma być uaktywniony, kiedy klikniesz
|
|
tą pozycję.</dd>
|
|
</dl>
|
|
|
|
<h2>
|
|
<a NAME="fonts"></a>4 Fonty</h2>
|
|
Tak jak wspomniano w sekcji o częściach skóry, fonty są zdefiniowane przez
|
|
obrazek i <i>plik opisujący fonty</i>. Możesz umieścić znaki w dowolnym
|
|
miejscu obrazka, ale upewnij się, że ich pozycja i rozmiar są dokładnie
|
|
określone w <i>pliku opisującym fonty</i>.
|
|
<p><i>Plik opisujący fonty</i> (z rozszerzeniem .fnt) może mieć linie komentarza
|
|
rozpoczęte średnikiem '<tt>;</tt>'. Plik musi mieć tę linię:
|
|
<blockquote>
|
|
<pre>image = <i>obrazek</i></pre>
|
|
</blockquote>
|
|
gdzie <i>obrazek</i> jest nazwą pliku w którym znajdują się fonty (nie
|
|
musisz podawać rozszerzenia). Po tej lini następuje opisanie poszczególnych
|
|
znaków:
|
|
<blockquote>
|
|
<pre>"znak" = <i>x, y, sz, w</i></pre>
|
|
</blockquote>
|
|
Tutaj x i y określają pozycję <i>znaku</i> w obrazku (0,0 to lewy górny
|
|
róg). sz i w to szerokość i wysokość znaku (oczywiście w pikselach).
|
|
<p>Poniżej możesz zobaczyć przykład definiujący znaki A, B, C znajdujące
|
|
się w pliku font.png:
|
|
<table BORDER WIDTH="100%" >
|
|
<tr BGCOLOR="#C0C0C0">
|
|
<td>
|
|
<pre>; może być "font" zamiast "font.png"
|
|
image = font.png
|
|
|
|
; Trzy znaki są wystarczające, aby zademonstrować jak to działa. :-)
|
|
"A" = 0,0, 7,13
|
|
"B" = 7,0, 7,13
|
|
"C" = 14,0, 7,13</pre>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<h3>
|
|
<a NAME="symbols"></a>4.1 Symbole</h3>
|
|
Niektóre znaki mają specjalne znaczenia kiedy są zmiennymi używanymi w
|
|
<a href="#main.dlabel">dlabel</a>;
|
|
te znaki są wyświetlane jako symbole. (np. kiedy odgrywasz strumień DVD,
|
|
możesz wyświetlić fajne logo DVD zdefiniowane pod znakiem 'd'.)
|
|
<p>Poniższa tabelka zawiera wszystkie znaki, które mogą być wykorzystane
|
|
do wyświetlania symboli (i wymagają one osobnych fontów).
|
|
<center><table>
|
|
<tr>
|
|
<th ALIGN=CENTER>Znak </th>
|
|
|
|
<th ALIGN=LEFT>Symbol</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td ALIGN=CENTER><tt>p</tt></td>
|
|
|
|
<td ALIGN=LEFT>odtwarzanie</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td ALIGN=CENTER><tt>s</tt></td>
|
|
|
|
<td ALIGN=LEFT>stop</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td ALIGN=CENTER><tt>e</tt></td>
|
|
|
|
<td ALIGN=LEFT>pauza</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td ALIGN=CENTER><tt>n</tt></td>
|
|
|
|
<td ALIGN=LEFT>bez dźwięku</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td ALIGN=CENTER><tt>m</tt></td>
|
|
|
|
<td ALIGN=LEFT>dźwięk mono</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td ALIGN=CENTER><tt>t</tt></td>
|
|
|
|
<td ALIGN=LEFT>dźwięk mono</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td ALIGN=CENTER><tt>f</tt></td>
|
|
|
|
<td ALIGN=LEFT>strumień jest plikiem</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td ALIGN=CENTER><tt>v</tt></td>
|
|
|
|
<td ALIGN=LEFT>strumień to VideoCD</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td ALIGN=CENTER><tt>d</tt></td>
|
|
|
|
<td ALIGN=LEFT>strumień to DVD</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td ALIGN=CENTER><tt>u</tt></td>
|
|
|
|
<td ALIGN=LEFT>strumień to URL</td>
|
|
</tr>
|
|
</table></center>
|
|
<b>Uwaga: </b>obecnie tylko 'p', 's', 'e', 'n', 'm' i 't' są wykorzystywane
|
|
(W chwili gdy tłumaczona jest ta dokumentacja pozostałe opcje są już dostępne-przyp.
|
|
tłumacz)
|
|
<h2>
|
|
<a NAME="guimsg"></a>Dodatek A: sygnały GUI</h2>
|
|
These are the messages that can be generated by buttons, potmeters and
|
|
menu entries.
|
|
<br>Tutaj znajdują się sygnały które mogą zostać wywołane przez przyciski,
|
|
potencjometry i elementy menu.
|
|
<p><i><b>Uwaga:</b> niektóre z sygnałów mogą działać nieprawidłowo (albo
|
|
w ogóle nie działać). Jak wiesz, GUI jest ciągle w fazie rozwoju.</i>
|
|
<p><i>Opcje odgrywania:</i>
|
|
<blockquote>
|
|
<dl>
|
|
<dt>
|
|
<b>evNext</b></dt>
|
|
|
|
<dd>
|
|
Przeskakuje do następnej ścieżki z playlisty</dd>
|
|
|
|
<dt>
|
|
<b>evPause</b></dt>
|
|
|
|
<dd>
|
|
wstrzymuje odgrywanie.</dd>
|
|
|
|
<dt>
|
|
<b>evPauseSwitchToPlay</b></dt>
|
|
|
|
<dd>
|
|
Przełącza między sobą użuwając <i>evPlaySwitchToPause </i>(to niezbyt udane
|
|
tłumaczenie-przyp. tłumacz). Może to zostać wykorzystane aby utworzyć jeden
|
|
przycisk spełniający równocześnie funkcje odgrywania i pauzy. Oba sygnały
|
|
powinny być przydzielone do przycisków wyświetlanych w tym samym miejscu
|
|
w oknie. Ten sygnał wstrzymuje odtwarzanie i wyświetlany jest obrazek dla
|
|
przycisku <i>evPlaySwitchToPause</i> (aby zaznaczyć, że ten przycisk może
|
|
być wciśnięty, aby kontynuować odgrywanie).</dd>
|
|
|
|
<dt>
|
|
<b>evPlay</b></dt>
|
|
|
|
<dd>
|
|
Rozpoczyna odgrywanie.</dd>
|
|
|
|
<dt>
|
|
<b>evPlaySwitchToPause</b></dt>
|
|
|
|
<dd>
|
|
Przeciwieństwo <i>evPauseSwitchToPlay</i>. Ten sygnał rozpoczyna odgrywanie
|
|
i wyświetlany jest obrazek dla przycisku <i>evPauseSwitchToPlay</i> (aby
|
|
zaznaczyć, że ten przycisk może być wciśnięty, aby wstrzymać odgrywanie).</dd>
|
|
|
|
<dt>
|
|
<b>evPrev</b></dt>
|
|
|
|
<dd>
|
|
Przeskakuje do poprzedniej ścieżki z playlisty.</dd>
|
|
|
|
<dt>
|
|
<b>evStop</b></dt>
|
|
|
|
<dd>
|
|
Zatrzymuje odgrywanie.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
<i>Przemieszczanie się w strumieniu:</i>
|
|
<blockquote>
|
|
<dl>
|
|
<dt>
|
|
<b>evBackward10sec</b></dt>
|
|
|
|
<dt>
|
|
<b>evBackward1min</b></dt>
|
|
|
|
<dt>
|
|
<b>evBackward10min</b></dt>
|
|
|
|
<dd>
|
|
przesuwa w tył o 10 sekund / 1 minutę / 10 minut.</dd>
|
|
|
|
<dt>
|
|
<b>evForward10sec</b></dt>
|
|
|
|
<dt>
|
|
<b>evForward1min</b></dt>
|
|
|
|
<dt>
|
|
<b>evForward10min</b></dt>
|
|
|
|
<dd>
|
|
przesuwa w przód o 10 sekund / 1 minutę / 10 minut.</dd>
|
|
|
|
<dt>
|
|
<b>evSetMoviePosition</b></dt>
|
|
|
|
<dd>
|
|
ustawia pozycję (może być zmieniane za pomocą suwaka; wykorzystywane są
|
|
relatywne (0-100%) wartości potencjometru).</dd>
|
|
</dl>
|
|
</blockquote>
|
|
<i>Kontrola obrazu:</i>
|
|
<blockquote>
|
|
<dl>
|
|
<dt>
|
|
<b>evDoubleSize</b></dt>
|
|
|
|
<dd>
|
|
Ustawia podwójny rozmiar okna z filmem.</dd>
|
|
|
|
<dt>
|
|
<b>evFullScreen</b></dt>
|
|
|
|
<dd>
|
|
Włącza/wyłącza tryb pełnoekranowy.</dd>
|
|
|
|
<dt>
|
|
<b>evNormalSize</b></dt>
|
|
|
|
<dd>
|
|
Ustawia oryginalny rozmiar okna z filmem.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
<i>Kontrola Dźwięku:</i>
|
|
<blockquote>
|
|
<dl>
|
|
<dt>
|
|
<b>evDecAudioBufDelay</b></dt>
|
|
|
|
<dd>
|
|
Zmniejsza opóźnienie buffera dźwięku.</dd>
|
|
|
|
<dt>
|
|
<b>evDecBalance</b></dt>
|
|
|
|
<dd>
|
|
zmniejsza balans.</dd>
|
|
|
|
<dt>
|
|
<b>evDecVolume</b></dt>
|
|
|
|
<dd>
|
|
zmniejsza głośność.</dd>
|
|
|
|
<dt>
|
|
<b>evIncAudioBufDelay</b></dt>
|
|
|
|
<dd>
|
|
Zmniejsza opóźnienie buffera dźwięku.</dd>
|
|
|
|
<dt>
|
|
<b>evIncBalance</b></dt>
|
|
|
|
<dd>
|
|
zwiększa balans.</dd>
|
|
|
|
<dt>
|
|
<b>evIncVolume</b></dt>
|
|
|
|
<dd>
|
|
zwiększa głośność.</dd>
|
|
|
|
<dt>
|
|
<b>evMute</b></dt>
|
|
|
|
<dd>
|
|
Wycisza/włącza dźwięk..</dd>
|
|
|
|
<dt>
|
|
<b>evSetBalance</b></dt>
|
|
|
|
<dd>
|
|
Ustawia balans (może być używane przez suwak; wykorzystywane są relatywne
|
|
(0-100%) wartości potencjometru).</dd>
|
|
|
|
<dt>
|
|
<b>evSetVolume</b></dt>
|
|
|
|
<dd>
|
|
Ustawia głośność (może być używane przez suwak; wykorzystywane są relatywne
|
|
(0-100%) wartości potencjometru).</dd>
|
|
</dl>
|
|
</blockquote>
|
|
<i>Różne:</i>
|
|
<blockquote>
|
|
<dl>
|
|
<dt>
|
|
<b>evAbout</b></dt>
|
|
|
|
<dd>
|
|
Otwiera okno "o programie".</dd>
|
|
|
|
<dt>
|
|
<b>evEqualizer</b></dt>
|
|
|
|
<dd>
|
|
włącza/wyłącza equalizer.</dd>
|
|
|
|
<dt>
|
|
<b>evExit</b></dt>
|
|
|
|
<dd>
|
|
Zamyka program.</dd>
|
|
|
|
<dt>
|
|
<b>evIconify</b></dt>
|
|
|
|
<dd>
|
|
Minimalizuje okno.</dd>
|
|
|
|
<dt>
|
|
<b>evLoad</b></dt>
|
|
|
|
<dd>
|
|
Wczytuje plik (poprzez otwarcie przeglądarki plików, w której możesz wybrać
|
|
plik).</dd>
|
|
|
|
<dt>
|
|
<b>evLoadPlay</b></dt>
|
|
|
|
<dd>
|
|
Robi dokładnie to samo co <i>evLoad</i> z tym, że po wczytaniu pliku automatycznie
|
|
rozpoczyna jego odtwarzanie.</dd>
|
|
|
|
<dt>
|
|
<b>evNone</b></dt>
|
|
|
|
<dd>
|
|
Pusty sygnał, nic nie robi. (No może nie dotyczy to wersji CVS :-))</dd>
|
|
|
|
<dt>
|
|
<b>evPlayList</b></dt>
|
|
|
|
<dd>
|
|
Otwiera/zamyka okno playlisty.</dd>
|
|
|
|
<dt>
|
|
<b>evPreferences</b></dt>
|
|
|
|
<dd>
|
|
Otwiera okno preferencji.</dd>
|
|
|
|
<dt>
|
|
<b>evSkinBrowser</b></dt>
|
|
|
|
<dd>
|
|
Otwiera okno z przeglądarką skórek..</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
</body>
|
|
</html>
|