spacja nierozdzielająca ("twarda")

Użytkowanie edytora dokumentów
Jan_J
Posty: 4579
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: spacja nierozdzielająca ("twarda")

Post autor: Jan_J »

Rok temu, kiedy Mellonedain spolszczył Vlnkę, testowanie przebiegło pomyślnie. Od tego czasu kod się raczej nie zmienił (patrz daty).
Dziś próbując uruchomić NieDziel na OOo 3.2.1 dostaję ten sam błąd co Sei. Jest tak, jakby wywoływana funkcja nie dostawała od systemu swojego argumentu. To samo dotyczy zresztą oryginalnej czeskiej Vlnki.
Ten sam efekt widzę także na OOo 2.4.1, 3.0.1 i 3.2.1. Ciekawe, przecież w 2.x i 3.0 Python był inny.

Zresztą, nie gra tam wiele rzeczy:
* wywołuje się funkcję getAwtToolkit(), która MUSI mieć argument, by zadziałała, zaś makra Pythona MUSZĄ być w OOo bezargumentowe;
* getAwtToolkit() robi pewną pomocniczą rzecz, która zresztą nie jest nigdzie potem wykorzystywana. Na pewno nie uruchamia generatora poprawek, a zdaje mi się, że jest tylko zbędną pozostałością z kodu Danny'ego Brewera, z którego zaczerpnęli Czesi;
* tak naprawdę liczą się dwie ostatnie (zakomentowane) linie kodu. Utworzyć obiekt odpowiedniej klasy i zmusić go do działania. Tyle że ten zakomentowany kod jest przeznaczony do wywoływania spoza OpenOffice;
* ten same kod jest, przynajmniej w zamyśle, automagicznie wywoływany przez unohelper. Tylko że ja w tym momencie nie rozumiem do końca, jak to działa...

Jeśli dodać do kodu na poziomie głównym

Kod: Zaznacz cały

def niedziel():
    ctx = XSCRIPTCONTEXT.getComponentContext()
    n = NieDziel(ctx)
    n.trigger( () )
to niedziel() da się wywołać jako Makra/Python/.../niedziel.

Pozostaje pytanie, dlaczego nam to kiedyś działało? Grzegorzu, co o tym myślisz jako autor i realizator pomysłu?
Za mało wiem o unohelper, by zgadnąć od razu co się za tym kryje. Zaś unohelper jest zbyt specjalistyczny, by mnie pociągał. Może kiedyś...

Btw. Sei, kiedy robisz zrzut ekranu, nie używaj formatu jpeg. Najlepszy jest png, dopuszczalny jest gif. Spróbuj, zobaczysz różnicę.

Off: uff, ale się nam wątek rozlazł...
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Sei
Posty: 35
Rejestracja: pt sie 21, 2009 11:06 am

Re: spacja nierozdzielająca ("twarda")

Post autor: Sei »

Z tego co wiem to większość wydawnictw naukowych wymaga spacji przed stopniem. W artykułach naukowych nie spotkałem się chyba z inną pisownią. Muszę jednak przyznać, że mam głównie styczność z artykułami po angielsku, więc w polskim zasady mogą się zdarzać inne zalecenia. Też nie mam żadnego słownika pod ręką, a na stronie PWN przy °C jest tylko informacja o pisowni z wielkiej litery (http://so.pwn.pl/lista.php?co=%B0C). Skłaniałbym się jednak ku uznaniu rozporządzeniu Rady Ministrów jako oficjalnego dokumentu. Na wikipedii jest też odnośnik do zalecenia Międzynarodowego Biura Miar i Wag, które też by wskazywało na pisownię ze spacją.
Sprawdziłem kilka typowych czcionek (Arial, Times New Roman itp.) i znak u+2103 jest w nich niezdefiniowany. Po dość pobieżnym rozeznaniu sprawy "u+2103 vs. ALT+0176" zaryzykowałbym stwierdzenie, że oba są poprawne. Na pewno to nie "o" w górnym indeksie.
OpenOffice 3.2 /Windows 7
Sei
Posty: 35
Rejestracja: pt sie 21, 2009 11:06 am

Re: spacja nierozdzielająca ("twarda")

Post autor: Sei »

Jan_J pisze:(...)Jeśli dodać do kodu na poziomie głównym

Kod: Zaznacz cały

def niedziel():
    ctx = XSCRIPTCONTEXT.getComponentContext()
    n = NieDziel(ctx)
    n.trigger( () )
to niedziel() da się wywołać jako Makra/Python/.../niedziel.(...)
U mnie też teraz działa. Na pierwszy rzut oka pozmieniało się wszystko tak jak trzeba.
Jan_J pisze:(...)Btw. Sei, kiedy robisz zrzut ekranu, nie używaj formatu jpeg. Najlepszy jest png, dopuszczalny jest gif. Spróbuj, zobaczysz różnicę.(...)
Nie chciałem niepotrzebnie zajmować miejsca na serwerze, stąd jpeg o dość wysokiej kompresji. Chodziło tylko o to, żeby się dało odczytać, ale następnym razem nie ma problemu, żeby format był inny.
OpenOffice 3.2 /Windows 7
kristoferes
Posty: 11
Rejestracja: pn lis 30, 2009 10:21 am

Re: spacja nierozdzielająca ("twarda")

Post autor: kristoferes »

Witam
Jako że znalazłem się w gronie bardzo potrzebujących przed oddaniem mgr do druku i wtrakcie sprawdzania w plagiat.pl rónież dołączam się do prośby o umieszczenie poprawionego, działającego makra :), albo choć działającego i krótki help jak uruchomić makro. Wracając do wątku znalazłem w w oo 3.1 w znakach specialnych u2060 wśród innych pustych kwadracików (innych spacji?), i robię wszystkie spójniki zaimki przyimki,i tp na piechotę na zasadzie znajdź i zamień wszystko. Jeszcze raz bardzo proszę o skrypt.
Ps czemu w Open Office 3.2 word joiner ma inny kod? A może to nie Word joiner? Ale zachowuje się podobnie.
OpenOffice 3.1 na Windows Vista, windows XP, Linux
Jan_J
Posty: 4579
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: spacja nierozdzielająca ("twarda")

Post autor: Jan_J »

U+2060 == Word Joiner == ZWJ.
Innego numeru mieć nie może, bo taki ma w Unikodzie. Chyba że patrzysz na numer w postaci dziesiętnej, wtedy widzisz go jako 8288.

Znacznie lepsze od ręcznej zamiany jest użycie wyrażeń regularnych. Dla podstawowego przypadku zamieniasz
<spacja><litera><spacja> zamień na <spacja><ta sama litera><zwj><spacja>
czyli w praktyce
(<spacja>[aiouwz])<spacja> na $1<zwj><spacja>
[x] wyrażenia regularne

I tak musisz nadzorować każdą sytuację. W przypadkach, kiedy <zwj> krzaczy -- patrz opisy wyżej -- wskazany jest krok zaradczy, np. <nbsp> zamiast <zwj>. Ze stratą elastyczności.

I głosować, głosować...
http://qa.openoffice.org/issues/show_bug.cgi?id=89129 # dotyczy elastycznej nbsp
http://qa.openoffice.org/issues/show_bug.cgi?id=23333 # traktowanie różnego rodzaju spacji
http://qa.openoffice.org/issues/show_bug.cgi?id=66986 # zwj; zamknięty, ale argumentacja decyzji jest błędna

Moim zdaniem pisanie makra poprawiającego błędy w kodzie nie ma sensu. Trzeba poprawić kod breakIterator.
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Sei
Posty: 35
Rejestracja: pt sie 21, 2009 11:06 am

Re: spacja nierozdzielająca ("twarda")

Post autor: Sei »

W załączniku jest skrypt poprawiony według zaleceń Jana_J (link do postu). Licencja GNU, więc chyba zamieszczając to nic nie przeskrobałem. Trzeba pliki wypakować i przegrać do katalogu ze skryptami, np.:
C:\Program Files\OpenOffice.org 3\Basis\share\Scripts\python
Potem w OO klikamy Narzędzia => makra => wykonaj makro / w "biblioteka" => makra OpenOffice => NieDziel; potem w "nazwa" wybieramy "niedziel". Pojawia się okno dialogowe skryptu.
Z mojego doświadczenia warto potem przejrzeć poprawiony tekst, bo są tam pewne błędy (np. spacja niełamliwa zostanie wstawiona przed każdym słowem zaczynającym się od "no" np. nowoczesny, nomada itp.). Mimo wszystko bardzo ułatwia pracę (najwyżej gdzieś będzie niepotrzebna nbsp, ale nie będzie samotnego "a" na końcu linii).

EDIT: Po przejrzeniu jednego ze zgłoszeń z poprzedniego postu zastanowiło mnie czy rzeczywiście nbsp zawsze powinna być "elastyczna". Na przykład przy wstawianiu między liczbę, a jednostkę raczej nie.
Załączniki
NieDziel_poprawiony.zip
(7.88 KiB) Pobrany 353 razy
OpenOffice 3.2 /Windows 7
Jan_J
Posty: 4579
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: spacja nierozdzielająca ("twarda")

Post autor: Jan_J »

Po przejrzeniu jednego ze zgłoszeń z poprzedniego postu zastanowiło mnie czy rzeczywiście nbsp zawsze powinna być "elastyczna". Na przykład przy wstawianiu między liczbę, a jednostkę raczej nie.
Racja. Po prostu w tradycji ,,biuropisania'' nie ma miejsca na subtelności środków, w tym na subtelności w sprawie odstępów.
Ale poza tym -- jak najbardziej.
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
kristoferes
Posty: 11
Rejestracja: pn lis 30, 2009 10:21 am

Re: spacja nierozdzielająca ("twarda")

Post autor: kristoferes »

Sei, albo Jan_j twoje makro stosuje spację nierozdzielającą nieelastyczną. Próbowałem zmodyfikować linijkę odpowiadającą za zamianę:
self.replaceStrings, " ", u"\2060"," " ],
Jak zapisać word joiner-a i zwykłą spację przed znakiem "i", żeby "i cośtam" przeniosło do nowej linii?
OpenOffice 3.1 na Windows Vista, windows XP, Linux
Jan_J
Posty: 4579
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: spacja nierozdzielająca ("twarda")

Post autor: Jan_J »

Jeżeli masz problemy z formułowaniem wyrażeń regularnych, to daj se lepiej spokój.
Nie chodzi o to, żeby napisać koślawy kod makra, trudny do utrzymania, tylko o to, żeby mieć koncepcję, co jest trudne wobec błędów logicznych w kodzie Writera. I jak już będzie koncepcja, to ją dobrze zakodować.
Jest to istotne zwłaszcza wobec faktu, że ZWJ jest we Writerze źle obsługiwany.
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
kruk1410
Posty: 5
Rejestracja: czw cze 10, 2010 8:34 pm

Re: spacja nierozdzielająca ("twarda")

Post autor: kruk1410 »

Witam, jestem pod wrażeniem pracy jaka została włożona w projekt, już kiedyś w Wordzie zrobiłem prościutkie makro dodające twardą spację po pojedynczych znakach, jednak odbyło się to na zasadzie rejestracji kolejnych zamian na zasadzie [crl]+H => zamień wszystko etc... Widzę że dla OOo powstało dokładnie coś takiego co sam chciałem zrobić wcześniej.

Mam jednak problem, gdyż o ile makro doskonale działa po wywołaniu go z menu Narzędzia => Makra => Wykonaj makro to kiedy chcę dodać sobie ikonkę na pasku zadań, pod którą NieDziel się kryje, otrzymuję błąd mówiący - jeśli dobrze rozumiem - o tym że jakaś funkcja nie otrzymała argumentu... Czy ktoś domyśla się w czym jest problem? Często muszę na szybko poprawiać sprawozdania (Politechnika Łódzka) i ciągłe otwieranie menu w celu odpalenia makra jest dla mnie żmudne.

I pytanie - jeśli chciałbym dodać więcej jednostek (nm, MGy, hPa etc...) muszę je dopisać, jak rozumiem, w sekcji odpowiadającej za wyrażenia regularne:

Kod: Zaznacz cały

[ 'units', unicode( "jednostki miary (kg, cm, ...)", "utf-8" ),
					False, False,
				    unicode( "[:digit:] "+
			    	"(cl|cm|dl|dm|g|hl|sk|kg|km|ks|l|m|mg|ml|mm|t|zł|gr)", "utf-8" ),
					unicode( "Dodaje niełamliwą spację przed jednostkami miary (zł, gr, cm, kg, ...) " + "", "utf-8" ),
					self.replaceStrings, " ", u"\xa0" ],
tam gdzie są wypisane?
LibreOffice 3.4.1 pod Windows 7
Jan_J
Posty: 4579
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: spacja nierozdzielająca ("twarda")

Post autor: Jan_J »

Wywołanie makra przez Uruchom wymaga by funkcja nie miała argumentu. Przy innych sposobach wywołania mogą być inne wymagania co do argumentów. Trzeba by to uważnie posprawdzać i opakować w odpowiednie funkcje.

Co do ogromu pracy, to w głównej mierze wykonał ją Robert Vojta, autor czeskiego makra Vlnka (http://www.openoffice.cz/doplnky/prepra ... -verze-0-4), a spolszczenia dokonał mellonedain, wolontariusz polskiej społeczności OOo.

Zgrabne wykończenie całości by się przydało. Przyznam szczerze, że brakuje mi motywacji by się za to zabrać, zaś brak ten jest powodowany wspomnianym wyżej błędnym traktowaniem Word Joinera w algorytmie składu.
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
valderis
Posty: 16
Rejestracja: ndz mar 17, 2013 9:47 am

Re: spacja nierozdzielająca ("twarda")

Post autor: valderis »

Upłynęło ponad 2 lata, może zostały wprowadzone zmiany umożliwiające wprowadzenie udoskonalonego makra?
Jeśli nie, to z dotychczasowego też chętnie skorzystałbym, gdyby nie taki komunikat.
Załączniki
niedziel.PNG
niedziel.PNG (9.36 KiB) Przejrzano 6910 razy
LibreOffice 4.0.1 na Windows XP
Jan_J
Posty: 4579
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: spacja nierozdzielająca ("twarda")

Post autor: Jan_J »

Ten projekt się zatrzymał w rozwoju wskutek nieprzewidywalnego zachowania word-joinera podczas łamania akapitu na wiersze. Zgłoszenie błędu niewiele dało, bo decydentom brak przekonania, że niepożądane zachowanie nie jest skutkiem użycia znaku niezgodnie z jego przeznaczeniem.
W 2011 roku Laszlo Nemeth zgłosił plan przebudowy algorytmu łamania wierszy a LibreOffice; zdaje się brak sił dla jego realizacji.
No i w LO 4 zmieniono wersję Pythona z 2.6 ma 3.x. Te wersje nie są w 100% zgodne. Błąd którego doświadczasz jest tego skutkiem. Choć nie pamiętam, czy niedziel doczekał się stabilnej wersji pod Pythonem 2.6.
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
ODPOWIEDZ