Brak polskich znaków w Lazarusie

Brak polskich znaków w Lazarusie
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
0

Ostatnio zacząłem się bawić konsolą w Lazarusie.
Pierwsze, co chciałem zrobić to oczywiście możliwość wypisywania znaków diakrytycznych na standardowy output.
Zwyczajne:

Kopiuj
Writeln('Zażółć gęślą jaźń');

Wypisuje w konsoli bliżej nieokreślone znaki, więc zaglądam na Wiki Lazarusa, a tam jest przykład (http://wiki.freepascal.org/Console_Mode_Pascal#Unicode_.28UTF8.29_output):

Kopiuj
program uniconsole;
 
{$mode objfpc}{$H+}
{$APPTYPE CONSOLE}
 
uses
  {$IFDEF UNIX}
    {$IFDEF UseCThreads}
    cthreads,
    {$ENDIF}
  {Widestring manager needed for widestring support}
  cwstring,
  {$ENDIF}
  {$IFDEF WINDOWS}
  Windows, {for setconsoleoutputcp}
  {$ENDIF}
  Classes
  ;
 
var
UTF8TestString: string;
 
begin
{$IFDEF WINDOWS}
SetConsoleOutputCP(CP_UTF8);
{$ENDIF}
UTF8TestString:= 'rosé, водка and ούζο';
writeln ('plain: ' + UTF8TestString);
{Apparently we don't need UTF8ToConsole for this
UTF8ToConsole did not do anything for me in fact.}
end.

Który po skompilowaniu wypisuje mniej-więcej coś takiego:
ros ę, -| # and #
Czyli, daleko od docelowego tekstu :/

Próbowałem nawet bezpośrednio operować na funkcjach api:

Kopiuj
Var bw : DWord;
    Str: String;
Begin
 SetConsoleOutputCP(CP_UTF8);
 Str := 'Zażółć gęślą jaźń';
 WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), @Str[1], Length(Str), bw, nil);

(oczywiście przy włączonym {$H+}) i brak efektów :/

Macie więc jakiś pomysł, jaki wymusić wyświetlanie znaków diakrytycznych w konsoli (w Windowsie)?

Edit: jeżeli normalnie otworzę "cmd", to mogę wpisywać znaki diakrytyczne, a i również uruchamiałem programy konsolowe wypisujące je, więc nie jest to wina braku czcionek itp.


edytowany 1x, ostatnio: Patryk27
lukasz1235
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad 8 lat
  • Postów:1105
0

Plik źródłowy ma kodowanie UTF-8?

Patryk27
Nie wiem jak to się zmienia w Lazarusie, ale zmieniłem kodowanie EditPlus'em i bez zmian. Edit: odnalazłem też to w Lazarusie i skonwertowałem. Bez zmian.
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 9 godzin
  • Lokalizacja:Tuchów
  • Postów:12166
0

A jaką wersję FPC masz?

Ja chcąc napisać konsolówkę korzystam z zewnętrznego FPC 2.6.0 i tam nie mam problemów z kodowaniem polskich znaków, jednak uruchamiając Lazarus'a i wybierając New -> Project -> Console Application już kodowanie nie działa...


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: flowCRANE
Patryk27
FPC 2.6.0... Podobno z 2.7.1 jest tak samo (gdzieś tam wyczytałem).
flowCRANE
Nowszych wersji nie ściągam, póki stabilne nie będą; Dziwne to jest, bo razem z Lazarusem zainstalowała się ta sama wersja FPC co wcześniej osobno instalowałem, a mimo to na jednej koduje dobrze, na drugiej nie;
2

Macie więc jakiś pomysł, jaki wymusić wyświetlanie znaków diakrytycznych w konsoli (w Windowsie)?

Generalnie to powiem że w FPC jak i Lazarusie to kodowania to niezły ból głowy. Lazarus się z tym kryje, ale w FPC to widać bardzo.

Nowszych wersji nie ściągam, póki stabilne nie będą; Dziwne to jest, bo razem z Lazarusem zainstalowała się ta sama wersja FPC co wcześniej osobno instalowałem, a mimo to na jednej koduje dobrze, na drugiej nie;

Widać IDE FPC inaczej koduje pliki. W Lazarusie domyślnie jest bodaj UTF8.

FPC 2.6.0... Podobno z 2.7.1 jest tak samo (gdzieś tam wyczytałem)

Wiesz ile różnych wersji 2.7.1 jest?

uruchamiając Lazarus'a i wybierając New -> Project -> Console Application już kodowanie nie działa...

Żeby zrobić program konsolowy używaj drugiej opcji (Program). Wtedy dostajesz czysty program. Mnie nie pytaj czemu tak to jest dziwnie zrobione...

Jest parę opcji co możesz zrobić:

  1. Przerobić plik na domyślny dla konsoli (ANSI OEM 852). Lazarus będzie miał problem ze zrozumieniem tych polskich znaków jako że bodaj nie wspiera tego typu.
  2. Kodowanie w Lazarusie ustawić na UTF8 (domyślne) i używać procedury UTF8ToConsole (Wymaga LCL).
    Nie mam pojęcia dlaczego ale FPC nie wydaje się rozumieć z windowsem w sprawie kodowania UTF8. Możesz spróbować spytać na kanale developerów FPC, może ktoś będzie potrafił Ci pomóc, jeżeli coś znajdziesz to daj znać, chętnie się sam dowiem.
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
0

Wiesz ile różnych wersji 2.7.1 jest?

Nie wiem, ale skoro nie jest to wersja stabilna, to pewnie parę(dziesiąt)(set) ich jest.
Po prostu podczas szukania informacji na ten temat trafiłem na jakieś forum i jakoś nie starałem się zapamiętać numerka rewizji :P

Tak czy siak - dzięki, pokombinuję z obiema (oboma? :P) podpunktami i zobaczymy co wyniknie.


Edit: UTF8ToConsole działa, dzięki :)

edytowany 1x, ostatnio: Patryk27
flowCRANE
"obiema (oboma?)" - może być obiedwojgoma;
Patryk27
404 takie słowo nie istnieje.
flowCRANE
U mnie się kompiluje;
KA
Kompilować się może i kompiluje ale później cały mózg zawiesza używaj debuggera (ostatnio dość dobry widziałem na sjp.pl)
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 9 godzin
  • Lokalizacja:Tuchów
  • Postów:12166
0
-123oho napisał(a)

Żeby zrobić program konsolowy używaj drugiej opcji (Program). Wtedy dostajesz czysty program. Mnie nie pytaj czemu tak to jest dziwnie zrobione...

To naprawdę dziwne, że tworząc przez New -> Project -> Console Application dostaję od razu zbudowaną klasę, której kształt jest podobny do aplikacji z GUI;

Druga sprawa to tworzenie aplikacji konsolowej przez New -> Project -> Program - od razu kompilując program jest wszystko dobrze, ale jak uruchomię go to dostaję Runtime Error 103 - śmieszne to jest, że opcja -WG jest standardowo zaznaczona przy zwykłej konsolówce...

No nic, trzeba się jakoś powolutku przyzwyczajać do nowego środowiska... :]


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
0

śmieszne to jest, że opcja -WG jest standardowo zaznaczona przy zwykłej konsolówce...

U mnie nie jest, zmieniłem sobie opcje domyślne... Przydatne żeby dodać swoje biblioteki z jakichś katalogów. A konsola przy GUI też się przydaje bo czasami nawet samo LCL tam pluje błędami. Zresztą to jeszcze nic w porównaniu z hardkorowymi problemami gdy coś się zepsuje w konfiguracji... Wtedy cyrki fajne.

Druga sprawa to tworzenie aplikacji konsolowej przez New -> Project -> Program - od razu kompilując program jest wszystko dobrze, ale jak uruchomię go to dostaję Runtime Error 103

Stdout/Stdin nie otwarte.

To naprawdę dziwne, że tworząc przez New -> Project -> Console Application dostaję od razu zbudowaną klasę, której kształt jest podobny do aplikacji z GUI;

Wiem, ale nigdy tego nie używałem więc nie wiem czy to przydatne czy nie. Ograniczam się do opcji 1, 2 i 4.

No nic, trzeba się jakoś powolutku przyzwyczajać do nowego środowiska...

Ledwo poznałeś a już parę postów na forum chwalących :P . Miłość od pierwszej kompilacji?

UTF8ToConsole działa, dzięki

Jak zależność od LCL Ci nie przeszkadza to super.

flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 9 godzin
  • Lokalizacja:Tuchów
  • Postów:12166
0
-123oho napisał(a)

Stdout/Stdin nie otwarte.

Zakręciłem się podczas pisania tamtego posta i nie usunąłem tej części; Sprawdzałem w Google kto miał taki problem i jak go rozwiązać; Wszystko przez to, że opcja -WG była domyślnie włączona; Miałem też problem z tym New -> Project -> Console Application bo też coś mi się działo dziwnego, ale teraz jest już ok;

-123oho napisał(a)

U mnie nie jest, zmieniłem sobie opcje domyślne...

Owszem, próbowałem, jednak coś się dzieje niedobrego, że nie zapamiętuje tych informacji... Może ja coś źle zrobiłem, nie wiem, później spróbuję jeszcze raz;

-123oho napisał(a)

Ledwo poznałeś a już parę postów na forum chwalących :P . Miłość od pierwszej kompilacji?

Owszem, ledwo poznałem, a już czuję, że się chyba pobierzemy :]

Przede wszsytkim cieszę się z poniższych rzeczy:

  • bardzo bogata standardowa paleta komponentów,
  • grupowanie kodu i możliwość zwinięcia danego bloku,
  • szeroka gama ustawień środowiska,
  • GUI oparte na zwyczajnych okienkach (w D7 to jakieś kosmate, np. głowne menu),
  • obsługa wizualnych stylów okien w edytorze formularzy,
  • itd. itp.
    których w D7 niestety nie ma (trudno się dziwić, 10-letie oprogramowanie); Niestety czas kompilacji trochę zbyt długo trwa, ale da się do tego przyzwyczaić - po prostu trzeba rzadziej kompilować :]

Jeszcze muszę odkryć gdzie ustawić, żeby po wpisaniu . (kropki) wyświetlał się automatycznie Code Completion oraz po wybraniu z niego jakiejś metody pokazywał się pasek z listą argumentów; Wtedy będę już w pełni szczęśliwy;


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: flowCRANE
Patryk27
Ctrl+Shift po wpisaniu "." lub otwarciu nawiasu działa podobnie (z tym, że do podpowiadania parametrów lepiej skorzystać z Ctrl+Shift+Spacja), aktualnie także czytam jak zrobić to automatycznie ;) Edit: tutaj coś jest napisane: http://wiki.freepascal.org/Lazarus_IDE_Tools#Code_Completion
flowCRANE
"Ctrl + Spacja" dla "Code Completion", jednak nie jest to uruchomione automatycznie, a bardzo mi się to przydawało, bo mogłem szybko pisać kod zgodny ze stylem wielbłądzim; Dla podpowiedzi parametrów "Ctrl + Shift + Spacja", tak samo jak w D7; Chodzi mi o to żeby obydwa te okienka wyskakiwało momentalnie i automatycznie; Poczytam o tym, co podałeś;
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)