Jeden zo spôsobov riešenia problému „nepružnej“ nezalomiteľnej medzery je ten, že ju nebudeme vkladať automaticky v celom dokumente, ale iba na konci riadkov. Z tohto dôvodu si dnes uvedieme funkcie, pomocou ktorých dokážeme vyhľadať zalomiteľné medzery na konci riadku a zameniť ich za nezalomiteľnú medzeru. Okrem toho si uvedieme funkciu pre vyhľadanie nesprávne zalomených znakov Word Joiner a ich zámenu za obyčajnú nezalomiteľnú medzeru.
Pretože takéto hľadanie môže trvať dosť dlhú dobu, budeme zobrazovať jeho priebeh, aby sme sa v prípade dlhšieho času mohli venovať niečom inému.

REM Procedúra hľadá nesprávne zalomenia WJ na konci riadku
REM a nahradí ich znakom NBSP
function WJ_2_NBSP as long
dim NBSP, WJ as string
dim Kurzor, Povodny, Tabulka as object
dim Koniec as boolean
dim pom as string
dim kolko, absolutne, znakov as long
dim dlgc, oUkazujPriebeh as object
znakov=ThisComponent.CurrentController.LineCount
DialogLibraries.LoadLibrary("JP_typografia") ' Otvorenie knižnice
dlgc=CreateUnoDialog(DialogLibraries.JP_typografia.Dialog_Cakaj)
nazov=inicializacny_subor("JP_Cakaj_"+Jazyk_OOo) ' Súbor s jazykovou lokalizáciou
Set_jazyk_dialogu(dlgc, nazov, "Dialog_Cakaj") ' Nastavenie jazyka dialógu
oUkazujPriebeh=dlgc.getModel().getByName("UkazujPriebeh")
oUkazujPriebeh.setPropertyValue("ProgressValueMin", 0)
oUkazujPriebeh.setPropertyValue("ProgressValueMax", znakov)
kolko=0
absolutne=0
if oDlgm.model.Vymeny.State=1 then
dlgc.setVisible(true)
else
dlgc.setVisible(false)
endif
NBSP=chr$(&HA0)
WJ=chr$(&H2060)
kurzor= ThisComponent.currentcontroller.getViewCursor() ' viditeľný kurzor
kurzor.collapseToEnd() ' ak je niečo označené, tak zrušíme výber
Povodny=kurzor.getstart() ' Odpamätanie aktuálnej pozície
kurzor.gotoStart(false) ' Skočíme na začiatok dokumentu
do
absolutne=absolutne+1
oUkazujPriebeh.setPropertyValue( "ProgressValue",absolutne)
if kurzor.ParaLineNumberCount then
' Ak nie sme v tabuľke
' Označíme si tri znaky na konci riadku a ak posledné dva sú WJ+medzera, tak je nesprávne zalomenie
Kurzor.gotoEndOfLine(true) ' skočíme na koniec riadku a označíme ho
' Zmena má zmysel iba vtedy, ak má riadok aspoň tri znaky
' Inak by sme značili aj znaky z predchádzajúceho riadku, čo by bola chyba
' a pri tabuľkách to vedie k zacykleniu, ak je za ňou riadok s menej ako tromi znakmi
pom=right(kurzor.getstring(),3) ' získame posledné tri znaky riadku
kurzor.collapseToEnd() ' Zrušíme označenie
if len(pom)>2 then
' Ak je riadok dlhý spoň tri znaky
kurzor.goLeft(3, false) ' Presunieme sa o tri znaky doľava
Kurzor.goRight(3, true) ' zvýraznenie posledných znakov, aby sa nahradili
if right(pom,2)=WJ+" " then
' Je to nesprávne zalomenie
pom=left(pom,1)+NBSP ' písmeno+NBSP
Kurzor.setstring(pom) ' Vlastná zámena
kolko=kolko+1
endif
Kurzor.collapseToEnd() ' Zrušíme označený vymenený text
endif
endif
Koniec=not(kurzor.goRight(1,false)) ' a presunieme sa na ďalší riadok
loop until Koniec
dlgc.dispose()
on error resume next
kurzor.gotoRange(Povodny,false)
WJ_2_NBSP=kolko
end function
REM Procedúra hľadá jednoznakové predložky na konci riadku
REM a nahradí medzeru za nimi znakom WJ
function SP_2_WJ as long
dim WJ as string
dim Kurzor, Povodny, Tabulka as object
dim Koniec as boolean
dim pom as string
dim kolko, pomkolko, absolutne, znakov as long
dim dlgc, oUkazujPriebeh as object
znakov=ThisComponent.CurrentController.LineCount
DialogLibraries.LoadLibrary("JP_typografia") ' Otvorenie knižnice
dlgc=CreateUnoDialog(DialogLibraries.JP_typografia.Dialog_Cakaj)
nazov=inicializacny_subor("JP_Cakaj_"+Jazyk_OOo) ' Súbor s jazykovou lokalizáciou
Set_jazyk_dialogu(dlgc, nazov, "Dialog_Cakaj") ' Nastavenie jazyka dialógu
oUkazujPriebeh=dlgc.getModel().getByName("UkazujPriebeh")
oUkazujPriebeh.setPropertyValue("ProgressValueMin", 0)
oUkazujPriebeh.setPropertyValue("ProgressValueMax", znakov)
kolko=0
if oDlgm.model.Vymeny.State=1 then
dlgc.setVisible(true)
else
dlgc.setVisible(false)
endif
WJ=chr$(&H2060)
kurzor= ThisComponent.currentcontroller.getViewCursor() ' viditeľný kurzor
kurzor.collapseToEnd() ' ak je niečo označené, tak zrušíme výber
Povodny=kurzor.getstart() ' Odpamätanie aktuálnej pozície
kurzor.gotoStart(false) ' Skočíme na začiatok dokumentu
do
pomkolko=0
absolutne=0
do
absolutne=absolutne+1
oUkazujPriebeh.setPropertyValue( "ProgressValue",absolutne)
if kurzor.ParaLineNumberCount then
' Ak nie sme v tabuľke
' Označíme si tri znaky na konci riadku a ak je to medzera+znak+medzera, tak je nesprávne zalomenie
Kurzor.gotoEndOfLine(true) ' skočíme na koniec riadku a označíme ho
' Zmena má zmysel iba vtedy, ak má riadok aspoň tri znaky
' Inak by sme značili aj znaky z predchádzajúceho riadku, čo by bola chyba
' a pri tabuľkách to vedie k zacykleniu, ak je za ňou riadok s menej ako tromi znakmi
pom=right(kurzor.getstring(),3) ' získame posledné tri znaky riadku
kurzor.collapseToEnd() ' Zrušíme označenie
if len(pom)>2 then
' Ak je riadok dlhý spoň tri znaky
kurzor.goLeft(3, false) ' Presunieme sa o tri znaky doľava
Kurzor.goRight(3, true) ' zvýraznenie posledných znakov, aby sa nahradili
if (left(pom,1)=" ") and instr(rozne.JednoznakovePredlozky,mid(pom,2,1))<>0 and right(pom,1)=" " then
' Je to nesprávne zalomenie
pom=left(pom,2)+WJ+" " ' písmeno+WJ+" "
Kurzor.setstring(pom) ' Vlastná zámena
pomkolko=pomkolko+1
endif
Kurzor.collapseToEnd() ' Zrušíme označený vymenený text
endif
endif
Koniec=not(kurzor.goRight(1,false)) ' a presunieme sa na ďalší riadok
loop until Koniec
kurzor.gotoStart(false)
kolko=kolko+pomkolko
loop until pomkolko=0
dlgc.dispose()
on error resume next
kurzor.gotoRange(Povodny,false)
SP_2_WJ=kolko
end function
REM Procedúra hľadá jednoznakové predložky na konci riadku
REM a nahradí medzeru za nimi znakom NBSP
function SP_2_NBSP as long
dim NBSP as string
dim Kurzor, Povodny, Tabulka as object
dim Koniec as boolean
dim pom as string
dim kolko, pomkolko, absolutne, znakov as long
dim dlgc, oUkazujPriebeh as object
znakov=ThisComponent.CurrentController.LineCount
DialogLibraries.LoadLibrary("JP_typografia") ' Otvorenie knižnice
dlgc=CreateUnoDialog(DialogLibraries.JP_typografia.Dialog_Cakaj)
nazov=inicializacny_subor("JP_Cakaj_"+Jazyk_OOo) ' Súbor s jazykovou lokalizáciou
Set_jazyk_dialogu(dlgc, nazov, "Dialog_Cakaj") ' Nastavenie jazyka dialógu
oUkazujPriebeh=dlgc.getModel().getByName("UkazujPriebeh")
oUkazujPriebeh.setPropertyValue("ProgressValueMin", 0)
oUkazujPriebeh.setPropertyValue("ProgressValueMax", znakov)
kolko=0
if oDlgm.model.Vymeny.State=1 then
dlgc.setVisible(true)
else
dlgc.setVisible(false)
endif
NBSP=chr$(&HA0)
kurzor= ThisComponent.currentcontroller.getViewCursor() ' viditeľný kurzor
kurzor.collapseToEnd() ' ak je niečo označené, tak zrušíme výber
Povodny=kurzor.getstart() ' Odpamätanie aktuálnej pozície
kurzor.gotoStart(false) ' Skočíme na začiatok dokumentu
do
pomkolko=0
absolutne=0
do
absolutne=absolutne+1
oUkazujPriebeh.setPropertyValue( "ProgressValue",absolutne)
if kurzor.ParaLineNumberCount then
' Ak nie sme v tabuľke
' Označíme si tri znaky na konci riadku a ak je to medzera+znak+medzera, tak je nesprávne zalomenie
Kurzor.gotoEndOfLine(true) ' skočíme na koniec riadku a označíme ho
' Zmena má zmysel iba vtedy, ak má riadok aspoň tri znaky
' Inak by sme značili aj znaky z predchádzajúceho riadku, čo by bola chyba
' a pri tabuľkách to vedie k zacykleniu, ak je za ňou riadok s menej ako tromi znakmi
pom=right(kurzor.getstring(),3) ' získame posledné tri znaky riadku
kurzor.collapseToEnd() ' Zrušíme označenie
if len(pom)>2 then
' Ak je riadok dlhý spoň tri znaky
kurzor.goLeft(3, false) ' Presunieme sa o tri znaky doľava
Kurzor.goRight(3, true) ' zvýraznenie posledných znakov, aby sa nahradili
if (left(pom,1)=" ") and instr(rozne.JednoznakovePredlozky,mid(pom,2,1))<>0 and right(pom,1)=" " then
' Je to nesprávne zalomenie
pom=left(pom,2)+NBSP ' písmeno+NBSP
Kurzor.setstring(pom) ' Vlastná zámena
pomkolko=pomkolko+1
endif
Kurzor.collapseToEnd() ' Zrušíme označený vymenený text
endif
endif
Koniec=not(kurzor.goRight(1,false)) ' a presunieme sa na ďalší riadok
loop until Koniec
kurzor.gotoStart(false)
kolko=kolko+pomkolko
loop until pomkolko=0
on error resume next
dlgc.dispose()
kurzor.gotoRange(Povodny,false)
SP_2_NBSP=kolko
end function