ďťż
 
comapi oraz polskie znaki ďťż
 
comapi oraz polskie znaki
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

comapi oraz polskie znaki



Jabba - 23-11-2006 00:40
comapi oraz polskie znaki
  Witam,

Ponieważ do funkcji comapi (javax.comm...)
porty.getOutputStream().write() mozna podać tylko ciąg znaków w
postaci tablicy byte[] pojawił się problem z wysyłaniem polskich
krzaczków. Przypisanie do tablicy byte[] znaku powyżej 127 powoduje
jego zmiane np na: -128. Drukarka fiskalna głupieje.

Poradźcie co tu wykombinować. czy pozostaje jedynie zmiana polskich
znaków na ascii ?

Z góry wielkie dzięki za każdą sugestie.

Pozdrowienia,





oczek - 23-11-2006 00:43

  On 11/3/2006 1:18 PM, Jabba wrote:
> Witam,
>
> Ponieważ do funkcji comapi (javax.comm...)
> porty.getOutputStream().write() mozna podać tylko ciąg znaków w
> postaci tablicy byte[] pojawił się problem z wysyłaniem polskich
> krzaczków. Przypisanie do tablicy byte[] znaku powyżej 127 powoduje
> jego zmiane np na: -128. Drukarka fiskalna głupieje.
>
dowiedz sie jakiego kodowania uzywa drukarka i uzyj go do
konwersji stringa na bajty metoda:
public byte[] getBytes(String charsetName)

--
oczek




Jabba - 23-11-2006 01:16

 
oczek napisał(a):
> On 11/3/2006 1:18 PM, Jabba wrote:
> > Witam,
> >
> > Ponieważ do funkcji comapi (javax.comm...)
> > porty.getOutputStream().write() mozna podać tylko ciąg znaków w
> > postaci tablicy byte[] pojawił się problem z wysyłaniem polskich
> > krzaczków. Przypisanie do tablicy byte[] znaku powyżej 127 powoduje
> > jego zmiane np na: -128. Drukarka fiskalna głupieje.
> >
> dowiedz sie jakiego kodowania uzywa drukarka i uzyj go do
> konwersji stringa na bajty metoda:
> public byte[] getBytes(String charsetName)
>
> --
> oczek

Nieszczęsna mazovia ...




oczek - 23-11-2006 01:16

  On 11/8/2006 2:49 PM, Jabba wrote:
>
> Nieszczęsna mazovia ...
>

uuuuuuuuuuuuuuuuuuuuu...
moze znajdziesz jakies gotowe klasy ale na to bym za bardzo
nie liczyl raczej trzeba bedzie npisac wlasny charset z
odpowiednim encodingiem tabele znakow sa latwo dostepne.

--
pozdrawiam
oczek





wklaczynski - 23-11-2006 01:16

  oczek napisał(a):
> On 11/8/2006 2:49 PM, Jabba wrote:
>>
>> Nieszczęsna mazovia ...
>>
>
> uuuuuuuuuuuuuuuuuuuuu...
> moze znajdziesz jakies gotowe klasy ale na to bym za bardzo nie liczyl
> raczej trzeba bedzie npisac wlasny charset z odpowiednim encodingiem
> tabele znakow sa latwo dostepne.
>

Napisałem kiedyś taki, jak chcesz to możesz skorzystać!

import java.nio.charset.Charset;
import java.nio.charset.spi.CharsetProvider;
import java.util.Iterator;
import java.util.Vector;

/**
*
* @author Waldek
*/
public class DOSCharsetProvider extends CharsetProvider {

public static final String MAZOVIA_CHARSET_NAME = "CP-896";
public static final String LATIN_2_CHARSET_NAME = "CP-852";
// public static final String MAZOVIA_CHARSET_NAME = "Mazovia";
// public static final String LATIN_2_CHARSET_NAME = "IBM Latin 2";

private static Vector charsets;

public Iterator charsets() {
if (charsets == null || charsets.size() == 0) {
charsets = new Vector();
charsets.add(new MazoviaCharset(MAZOVIA_CHARSET_NAME, null));
charsets.add(new IBMLatinCharset(LATIN_2_CHARSET_NAME, null));
}

return charsets.iterator();
}

public Charset charsetForName(String charsetName) {
if (charsetName.trim().equalsIgnoreCase(MAZOVIA_CHARS ET_NAME)){
return new MazoviaCharset(MAZOVIA_CHARSET_NAME, null);
} else if
(charsetName.trim().equalsIgnoreCase(LATIN_2_CHARS ET_NAME)){
return new IBMLatinCharset(LATIN_2_CHARSET_NAME, null);
} else {
return null;
}
}

}

import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CoderResult;

/**
*
* @author Waldek
*/
public class MazoviaCharset extends Charset {

private static char[][] convertChars = new char[][] {
{'\u0104', 143}//Ą
, {'\u0105', 134}//ą
, {'\u0106', 149}//Ć
, {'\u0107', 141}//ć
, {'\u0118', 144}//Ę
, {'\u0119', 145}//ę
, {'\u0141', 156}//Ł
, {'\u0142', 146}//ł
, {'\u0143', 165}//Ń
, {'\u0144', 164}//ń
, {'\u00D3', 163}//Ó
, {'\u00F3', 162}//ó
, {'\u015A', 152}//Ś
, {'\u015B', 158}//ś
, {'\u0179', 160}//Ź
, {'\u017A', 166}//ź
, {'\u017B', 161}//Ż
, {'\u017C', 167}//ż
};

public MazoviaCharset(String canonicalName, String[] aliases) {
super(canonicalName, aliases);
}

public boolean contains(Charset cs) {
if (cs.equals(this)) {
return true;
}

return false;
}

public CharsetDecoder newDecoder() {
return new PrivCharsetDecoder(this, 1, 1);
}

public CharsetEncoder newEncoder() {
return new PrivCharsetEncoder(this, 1, 1);
}

public class PrivCharsetEncoder extends CharsetEncoder {
public PrivCharsetEncoder(Charset cs, float averageBytesPerChar,
float maxBytesPerChar, byte[] replacement) {
super(cs, averageBytesPerChar, maxBytesPerChar, replacement);
}

public PrivCharsetEncoder(Charset cs, float averageBytesPerChar,
float maxBytesPerChar) {
super(cs, averageBytesPerChar, maxBytesPerChar);
}

protected CoderResult encodeLoop(CharBuffer in, ByteBuffer out) {
while (in.hasRemaining()) {
char inputChar = in.get();

for (int i = 0; i < convertChars.length; i++) {
if (inputChar == convertChars[i][0]) {
inputChar = convertChars[i][1];
}
}

out.put((byte)(inputChar & 0xFF));
}
return CoderResult.UNDERFLOW;
}
}

public class PrivCharsetDecoder extends CharsetDecoder {
public PrivCharsetDecoder(Charset cs, float averageCharsPerByte,
float maxCharsPerByte) {
super(cs, averageCharsPerByte, maxCharsPerByte);
}

protected CoderResult decodeLoop(ByteBuffer in, CharBuffer out) {
while (in.hasRemaining()) {
char inputChar = (char)(in.get() & 0x00FF);

for (int i = 0; i < convertChars.length; i++) {
if (inputChar == convertChars[i][1]) {
inputChar = convertChars[i][0];
}
}
out.put(inputChar);
}

return CoderResult.UNDERFLOW;
}
}

}

import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CoderResult;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;

public class IBMLatinCharset extends Charset {

private static char[][] convertChars = new char[][] {
{'\u0104', 164}//Ą
, {'\u0105', 165}//ą
, {'\u0106', 143}//Ć
, {'\u0107', 134}//ć
, {'\u0118', 168}//Ę
, {'\u0119', 169}//ę
, {'\u0141', 157}//Ł
, {'\u0142', 136}//ł
, {'\u0143', 227}//Ń
, {'\u0144', 228}//ń
, {'\u00D3', 224}//Ó
, {'\u00F3', 162}//ó
, {'\u015A', 151}//Ś
, {'\u015B', 152}//ś
, {'\u0179', 141}//Ź
, {'\u017A', 171}//ź
, {'\u017B', 189}//Ż
, {'\u017C', 190}//ż
};

public IBMLatinCharset(String canonicalName, String[] aliases) {
super(canonicalName, aliases);
}

public boolean contains(Charset cs) {
if (cs.equals(this)) {
return true;
}

return false;
}

public CharsetDecoder newDecoder() {
return new PrivCharsetDecoder(this, 1, 1);
}

public CharsetEncoder newEncoder() {
return new PrivCharsetEncoder(this, 1, 1);
}

public class PrivCharsetEncoder extends CharsetEncoder {
public PrivCharsetEncoder(Charset cs, float averageBytesPerChar,
float maxBytesPerChar, byte[] replacement) {
super(cs, averageBytesPerChar, maxBytesPerChar, replacement);
}

public PrivCharsetEncoder(Charset cs, float averageBytesPerChar,
float maxBytesPerChar) {
super(cs, averageBytesPerChar, maxBytesPerChar);
}

protected CoderResult encodeLoop(CharBuffer in, ByteBuffer out) {
while (in.hasRemaining()) {
char inputChar = in.get();

for (int i = 0; i < convertChars.length; i++) {
if (inputChar == convertChars[i][0]) {
inputChar = convertChars[i][1];
}
}

out.put((byte)(inputChar & 0xFF));
}
return CoderResult.UNDERFLOW;
}
}

public class PrivCharsetDecoder extends CharsetDecoder {
public PrivCharsetDecoder(Charset cs, float averageCharsPerByte,
float maxCharsPerByte) {
super(cs, averageCharsPerByte, maxCharsPerByte);
}

protected CoderResult decodeLoop(ByteBuffer in, CharBuffer out) {
while (in.hasRemaining()) {
char inputChar = (char)(in.get() & 0x00FF);

for (int i = 0; i < convertChars.length; i++) {
if (inputChar == convertChars[i][1]) {
inputChar = convertChars[i][0];
}
}
out.put(inputChar);
}

return CoderResult.UNDERFLOW;
}
}

}

do katalogu META-INF/services dodaj plik
java.nio.charset.spi.CharsetProvider

zawierający class providera

com.utils.DOSCharsetProvider




Jabba - 23-11-2006 01:17

 
wklaczynski napisał(a):
> oczek napisał(a):
> > On 11/8/2006 2:49 PM, Jabba wrote:
> >>
> >> Nieszczęsna mazovia ...
> >>
> >
> > uuuuuuuuuuuuuuuuuuuuu...
> > moze znajdziesz jakies gotowe klasy ale na to bym za bardzo nie liczyl
> > raczej trzeba bedzie npisac wlasny charset z odpowiednim encodingiem
> > tabele znakow sa latwo dostepne.
> >
>
> Napisałem kiedyś taki, jak chcesz to możesz skorzystać!
>
> import java.nio.charset.Charset;
> import java.nio.charset.spi.CharsetProvider;
> import java.util.Iterator;
> import java.util.Vector;
>
> /**
> *
> * @author Waldek
> */
> public class DOSCharsetProvider extends CharsetProvider {
>
> public static final String MAZOVIA_CHARSET_NAME = "CP-896";
> public static final String LATIN_2_CHARSET_NAME = "CP-852";
> // public static final String MAZOVIA_CHARSET_NAME = "Mazovia";
> // public static final String LATIN_2_CHARSET_NAME = "IBM Latin 2";
>
> private static Vector charsets;
>
> public Iterator charsets() {
> if (charsets == null || charsets.size() == 0) {
> charsets = new Vector();
> charsets.add(new MazoviaCharset(MAZOVIA_CHARSET_NAME, null));
> charsets.add(new IBMLatinCharset(LATIN_2_CHARSET_NAME, null));
> }
>
> return charsets.iterator();
> }
>
> public Charset charsetForName(String charsetName) {
> if (charsetName.trim().equalsIgnoreCase(MAZOVIA_CHARS ET_NAME)){
> return new MazoviaCharset(MAZOVIA_CHARSET_NAME, null);
> } else if
> (charsetName.trim().equalsIgnoreCase(LATIN_2_CHARS ET_NAME)){
> return new IBMLatinCharset(LATIN_2_CHARSET_NAME, null);
> } else {
> return null;
> }
> }
>
>
>
> }
>
> import java.nio.ByteBuffer;
> import java.nio.CharBuffer;
> import java.nio.charset.Charset;
> import java.nio.charset.CharsetDecoder;
> import java.nio.charset.CharsetEncoder;
> import java.nio.charset.CoderResult;
>
>
> /**
> *
> * @author Waldek
> */
> public class MazoviaCharset extends Charset {
>
> private static char[][] convertChars = new char[][] {
> {'\u0104', 143}//Ą
> , {'\u0105', 134}//ą
> , {'\u0106', 149}//Ć
> , {'\u0107', 141}//ć
> , {'\u0118', 144}//Ę
> , {'\u0119', 145}//ę
> , {'\u0141', 156}//Ł
> , {'\u0142', 146}//ł
> , {'\u0143', 165}//Ń
> , {'\u0144', 164}//ń
> , {'\u00D3', 163}//Ó
> , {'\u00F3', 162}//ó
> , {'\u015A', 152}//Ś
> , {'\u015B', 158}//ś
> , {'\u0179', 160}//Ź
> , {'\u017A', 166}//ź
> , {'\u017B', 161}//Ż
> , {'\u017C', 167}//ż
> };
>
>
> public MazoviaCharset(String canonicalName, String[] aliases) {
> super(canonicalName, aliases);
> }
>
> public boolean contains(Charset cs) {
> if (cs.equals(this)) {
> return true;
> }
>
> return false;
> }
>
> public CharsetDecoder newDecoder() {
> return new PrivCharsetDecoder(this, 1, 1);
> }
>
> public CharsetEncoder newEncoder() {
> return new PrivCharsetEncoder(this, 1, 1);
> }
>
> public class PrivCharsetEncoder extends CharsetEncoder {
> public PrivCharsetEncoder(Charset cs, float averageBytesPerChar,
> float maxBytesPerChar, byte[] replacement) {
> super(cs, averageBytesPerChar, maxBytesPerChar, replacement);
> }
>
> public PrivCharsetEncoder(Charset cs, float averageBytesPerChar,
> float maxBytesPerChar) {
> super(cs, averageBytesPerChar, maxBytesPerChar);
> }
>
> protected CoderResult encodeLoop(CharBuffer in, ByteBuffer out) {
> while (in.hasRemaining()) {
> char inputChar = in.get();
>
> for (int i = 0; i < convertChars.length; i++) {
> if (inputChar == convertChars[i][0]) {
> inputChar = convertChars[i][1];
> }
> }
>
> out.put((byte)(inputChar & 0xFF));
> }
> return CoderResult.UNDERFLOW;
> }
> }
>
> public class PrivCharsetDecoder extends CharsetDecoder {
> public PrivCharsetDecoder(Charset cs, float averageCharsPerByte,
> float maxCharsPerByte) {
> super(cs, averageCharsPerByte, maxCharsPerByte);
> }
>
> protected CoderResult decodeLoop(ByteBuffer in, CharBuffer out) {
> while (in.hasRemaining()) {
> char inputChar = (char)(in.get() & 0x00FF);
>
> for (int i = 0; i < convertChars.length; i++) {
> if (inputChar == convertChars[i][1]) {
> inputChar = convertChars[i][0];
> }
> }
> out.put(inputChar);
> }
>
> return CoderResult.UNDERFLOW;
> }
> }
>
> }
>
>
> import java.nio.charset.Charset;
> import java.nio.charset.CharsetDecoder;
> import java.nio.charset.CharsetEncoder;
> import java.nio.charset.CoderResult;
> import java.nio.ByteBuffer;
> import java.nio.CharBuffer;
>
> public class IBMLatinCharset extends Charset {
>
> private static char[][] convertChars = new char[][] {
> {'\u0104', 164}//Ą
> , {'\u0105', 165}//ą
> , {'\u0106', 143}//Ć
> , {'\u0107', 134}//ć
> , {'\u0118', 168}//Ę
> , {'\u0119', 169}//ę
> , {'\u0141', 157}//Ł
> , {'\u0142', 136}//ł
> , {'\u0143', 227}//Ń
> , {'\u0144', 228}//ń
> , {'\u00D3', 224}//Ó
> , {'\u00F3', 162}//ó
> , {'\u015A', 151}//Ś
> , {'\u015B', 152}//ś
> , {'\u0179', 141}//Ź
> , {'\u017A', 171}//ź
> , {'\u017B', 189}//Ż
> , {'\u017C', 190}//ż
> };
>
>
> public IBMLatinCharset(String canonicalName, String[] aliases) {
> super(canonicalName, aliases);
> }
>
> public boolean contains(Charset cs) {
> if (cs.equals(this)) {
> return true;
> }
>
> return false;
> }
>
> public CharsetDecoder newDecoder() {
> return new PrivCharsetDecoder(this, 1, 1);
> }
>
> public CharsetEncoder newEncoder() {
> return new PrivCharsetEncoder(this, 1, 1);
> }
>
> public class PrivCharsetEncoder extends CharsetEncoder {
> public PrivCharsetEncoder(Charset cs, float averageBytesPerChar,
> float maxBytesPerChar, byte[] replacement) {
> super(cs, averageBytesPerChar, maxBytesPerChar, replacement);
> }
>
> public PrivCharsetEncoder(Charset cs, float averageBytesPerChar,
> float maxBytesPerChar) {
> super(cs, averageBytesPerChar, maxBytesPerChar);
> }
>
> protected CoderResult encodeLoop(CharBuffer in, ByteBuffer out) {
> while (in.hasRemaining()) {
> char inputChar = in.get();
>
> for (int i = 0; i < convertChars.length; i++) {
> if (inputChar == convertChars[i][0]) {
> inputChar = convertChars[i][1];
> }
> }
>
> out.put((byte)(inputChar & 0xFF));
> }
> return CoderResult.UNDERFLOW;
> }
> }
>
> public class PrivCharsetDecoder extends CharsetDecoder {
> public PrivCharsetDecoder(Charset cs, float averageCharsPerByte,
> float maxCharsPerByte) {
> super(cs, averageCharsPerByte, maxCharsPerByte);
> }
>
> protected CoderResult decodeLoop(ByteBuffer in, CharBuffer out) {
> while (in.hasRemaining()) {
> char inputChar = (char)(in.get() & 0x00FF);
>
> for (int i = 0; i < convertChars.length; i++) {
> if (inputChar == convertChars[i][1]) {
> inputChar = convertChars[i][0];
> }
> }
> out.put(inputChar);
> }
>
> return CoderResult.UNDERFLOW;
> }
> }
>
> }
>
>
> do katalogu META-INF/services dodaj plik
> java.nio.charset.spi.CharsetProvider
>
> zawierający class providera
>
> com.utils.DOSCharsetProvider

Wielkie dzięki,




oczek - 23-11-2006 01:17

  On 11/8/2006 3:54 PM, wklaczynski wrote:
> oczek napisał(a):
>
>> On 11/8/2006 2:49 PM, Jabba wrote:
>>
>>>
>>> Nieszczęsna mazovia ...
>>>
>>
>> uuuuuuuuuuuuuuuuuuuuu...
>> moze znajdziesz jakies gotowe klasy ale na to bym za bardzo nie liczyl
>> raczej trzeba bedzie npisac wlasny charset z odpowiednim encodingiem
>> tabele znakow sa latwo dostepne.
>>
>
> Napisałem kiedyś taki, jak chcesz to możesz skorzystać!
>

moze doloczysz to do
http://www.freeutils.net/source/jcharset/

juz chcialem sam im cos takiego napisac ale skoro juz masz...

--
oczek




Damian - 23-11-2006 01:17

  "Jabba" <jabba_pl@gazeta.pl> wrote in
news:1163056854.100614.150040@k70g2000cwa.googlegr oups.com:

[ciach]
>
>
> Wielkie dzięki,

A teraz napisz 100 razy:

"Będę ciął cytaty"

--
Damian




Jabba - 23-11-2006 01:17

 
Damian napisał(a):
> A teraz napisz 100 razy:
>
> "Będę ciął cytaty"
Przepraszam, będę pamiętał. Byłem trochę zajęty i pisałem tego
posta szybko.

Jeszcze raz dzięki Oczek za ten Charset, chodzi w porządku.
Dużo mi pomógł ale nie rozwiązałem problemu z drukarką fiskalną
do końca.

Drukarka przymuje tablice byte[] kodowaną na mazowię. więc robię:
byte[] tab1 = str.getBytes("CP-896")
wszystko pieknie w tablicy lądują znaki przekodowane w tym ten który
mnie interesuje
na pozycji [8] o wartosc= - 89 (mała literka "ż")

na koniec instrukcji muszę jeszcze umieścić sumę kontrolną:
zrobiłem procedurkę:

public byte[] Check(byte[] tab1) {
int tym = 255;
for(int a = 2; a <= tab1.length-5; a++) {
tym = tym^tab1[a];
}
String s = Integer.toHexString(tym);
if (s.length() == 1) s = '0' + s;
tab1[tab1.length-4] = (byte) s.charAt(0);
tab1[tab1.length-3] = (byte) s.charAt(1);
return tab1;
}

Niestety o otrzymaniu ciągu rozkazów drukarka wywala błąd sumy
kontrolnej.
Jeżeli w ciągu nie pojawi się znak "ż"(polski krzaczek - zakodowany
jako liczba ujemna) wszystko jest w porządku.

Macie jakieś pomysły ?

Pozdrawiam,




oczek - 23-11-2006 01:17

  On 11/9/2006 1:29 PM, Jabba wrote:

> Damian napisał(a):
>
>
> Jeszcze raz dzięki Oczek za ten Charset, chodzi w porządku.

chyba nie mnie sie naleza podziekowania

> int tym = 255;

tu zmieniasz precyzje obliczen

> Niestety o otrzymaniu ciągu rozkazów drukarka wywala błąd sumy
> kontrolnej.
przelicz to sobie na papierze a potem sprawdz w debugerze,
na moje oko zmiana precyzji obliczen z 8b na 32 powoduje
bledy, musisz zastosowac odpowiednio maske by poruszac sie w
sferze 8b

> Jeżeli w ciągu nie pojawi się znak "ż"(polski krzaczek - zakodowany
> jako liczba ujemna) wszystko jest w porządku.
polski krzaczek ma wysoka wartosc i po pierwsze bedzie
interpretowany jako liczba ujemna a po drugie bardziej
prawdopodobne jest wystapienie przepelnienia ponad 8b co
trzeba odpowiednio obsluzyc

--
oczek




Jabba - 23-11-2006 01:17

 
oczek napisał(a):
> chyba nie mnie sie naleza podziekowania

Masz racje, sorry,
Oczywiście wielkie podziękowania dla usera wklaczynski.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Import za =?ISO-8859-2?Q?pomoc=B1_EMS_Data_Import_for_?==?ISO-8859-2?Q?MySQL_-_polskie_litery=2E?= xHarbour/CLipper/Linuks - brak polskich =?ISO-8859-2?Q?znak=F3w_?==?ISO-8859-2?Q?w_GET?= =?ISO-8859-2?Q?[psql]_Polskie_t=B3umaczenie_?= =?ISO-8859-2?Q?licencji_BSD_dla_PostgreSQL=3F?= polski nowy klip. realizacja Fotki i montaż: Rymek Błaszczak. animki fx i CC: mariusz mario zdanowski VFP 8 i problem z polskimi znakami przy otwieraniu dbf-a z dosowego Fox-a =?ISO-8859-2?Q?[firebird]_gdzie_si=EA_podzia=B3y_polskie_literki?= =?iso-8859-2?q?mysql_+_polskie_znaczki_+_brak_pomys=B3=F3w?= Zapis polskich literek w bazie danych US7ASCII z bazy EE8ISO8859P2 hurtowa zmiana polskich liter w nazwach =?ISO-8859-2?Q?plik=F3w_?= [MySQL] - konwersja polskich znaków i jeszcze małe "conieco"
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • marcelq.xlx.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com