Makro um Wort vorwärts oder rückwärts zu schieben

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Ich komme mit einem Makro bis zur Selektion, aber weiß nicht, wie es geht, das nächste Wort zu "überspringen".


im Prinzip mit:

Code: Alles auswählen

.GotoNextWord
es kommt aber darauf an (ggf. wo der Cursor innerhalb der Selektion steht - abhängig davon wie Du es löst) und was selektiert ist, 3 Fällen treten auf:

*die Markierung umfasst am Anfang und Ende kein Leerzeichen zum 'umgebenden' Text
*die Markierung umfasst rechts ein Leerzeichen zum 'umgebenden' Text
*die Markierung umfasst links ein Leerzeichen zum 'umgebenden' Text

Etwas Probleme bereiten auch mögliche enthaltene Satzzeichen, deshalb schau mal ob das Dir schon reicht:

Code: Alles auswählen

Sub markierten_text_verschieben()
x = ThisComponent.getCurrentSelection
tmp = x(0).String
cursor = ThisComponent.Text.CreateTextCursorByRange(x(0))
v_cursor=ThisComponent.GetCurrentController.ViewCursor
If LEFT(tmp, 1) <> " " AND RIGHT(tmp, 1) <> " " Then
		cursor.goRight(1,true)
		v_cursor.gotoRange(cursor,true)
		v_cursor.String = ""
		x = ThisComponent.getCurrentSelection
		cursor = ThisComponent.Text.CreateTextCursorByRange(x(0))
		cursor.GotoEndOfWord(false)
		cursor.GoRight(1,false)
		v_cursor.gotoRange(cursor,false)
		v_cursor.String = tmp & " "
	Elseif Right(tmp, 1) = " " Then
		v_cursor.gotoRange(cursor,true)
		v_cursor.String = ""
		x = ThisComponent.getCurrentSelection
		cursor = ThisComponent.Text.CreateTextCursorByRange(x(0))
		cursor.GotoEndOfWord(false)
		cursor.GoRight(1,false)
		v_cursor.gotoRange(cursor,false)
		v_cursor.String = tmp
	Else
		v_cursor.gotoRange(cursor,true)
		v_cursor.String = ""
		x = ThisComponent.getCurrentSelection
		cursor = ThisComponent.Text.CreateTextCursorByRange(x(0))
		cursor.GotoNextWord(false)
		cursor.GotoEndOfWord(false)
		v_cursor.gotoRange(cursor,false)
		v_cursor.String = tmp
End If
End Sub

Gruß
Stephan
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Was mache ich falsch?
Naja, wie ich schrieb sind 3 Fälle zu unterscheiden:
*die Markierung umfasst am Anfang und Ende kein Leerzeichen zum 'umgebenden' Text
*die Markierung umfasst rechts ein Leerzeichen zum 'umgebenden' Text
*die Markierung umfasst links ein Leerzeichen zum 'umgebenden' Text
das hier sollte ähnlich funktionieren wie das Obenstehende, probiere es mal aus:

Code: Alles auswählen

Sub markierten_text_verschieben_2()
x = ThisComponent.getCurrentSelection
tmp = x(0).String
cursor = ThisComponent.Text.CreateTextCursorByRange(x(0))
v_cursor=ThisComponent.GetCurrentController.ViewCursor
If LEFT(tmp, 1) <> " " AND RIGHT(tmp, 1) <> " " Then
		cursor.goRight(1,true)
		v_cursor.gotoRange(cursor,true)
		v_cursor.String = ""
		x = ThisComponent.getCurrentSelection
		cursor = ThisComponent.Text.CreateTextCursorByRange(x(0))
		cursor.gotoPreviousWord(false)
		v_cursor.gotoRange(cursor,false)
		v_cursor.String = tmp & " "
	Elseif Right(tmp, 1) = " " Then
		v_cursor.gotoRange(cursor,true)
		v_cursor.String = ""
		x = ThisComponent.getCurrentSelection
		cursor = ThisComponent.Text.CreateTextCursorByRange(x(0))
		cursor.gotoPreviousWord(false)
		v_cursor.gotoRange(cursor,false)
		v_cursor.String = TRIM(tmp) & " "
	Else
		v_cursor.gotoRange(cursor,true)
		v_cursor.String = ""
		x = ThisComponent.getCurrentSelection
		cursor = ThisComponent.Text.CreateTextCursorByRange(x(0))
		cursor.GotoNextWord(false)
		cursor.gotoPreviousWord(false)
		v_cursor.gotoRange(cursor,false)
		v_cursor.String = TRIM(tmp) & " "
End If
End Sub


Gruß
Stephan
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Hallo Wolfgang ,
wäre es für dich okay, wenn ich dir dazu ein paar Fragen per Mail stelle?


Ja, kannst Du tun.


Gruß
Stephan
Antworten