Tags markieren

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

Moderator: Moderatoren

Opus
Beiträge: 7
Registriert: Mo, 11.10.2004 03:17

Tags markieren

Beitrag von Opus » Fr, 01.09.2017 01:12

Hallo.
Ich erstelle in Writer mittels Makros ein XML-Dokument. Ich markiere also ein Wort, klicke auf ein Makro und das Wort wird mit Tags versehen.
Nun möchte ich das Dokument erneut aufrufen und mit einem Makroklick alle Worte, die getaggt sind, mit unterschiedlichen Farben versehen lassen.
Also z.B:
alle Inhalte mit dem Tag <xyz> sollen rot markiert, alle Inhalte des Tags <zyx> sollen grün werden usw.

Wie kann ich das machen?
Danke

Toxitom
********
Beiträge: 3439
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Tags markieren

Beitrag von Toxitom » Fr, 01.09.2017 09:04

Moin Opus,

na, das ist eine recht einfache Aufgabe: Sollen nur die Zeichen zwischen den <> markiert werden oder auch die Zeichen selbst?

Sinnvoll wäre es auff jeden Fall, sich zunächst entsprechende Formatvorlagen (Zeichen) zu erstellen. Du kannst zwar auch "hard" formatieren .. ist aber nicht so schön.

Deine Tags erhälst du als Cursorobjekt, in dem Du zunächst nach dem ersten Zeichen suchst (hier "<"), von dort aus dann nach dem Endezeichen (">") und den Cursor dazwischen ausdehnst. Nun hast Du im Cursor einen Textteil (Zeichen), den du ganz normal formatieren kannst.

Wenn ich das richtig verstehe, kannst Du sogar den Inhalt (einduetig) - dann kannst Du gleich nach dem kompletten Begriff suchen lassen - und entsprechend formatieren. also wie folgt:

Code: Alles auswählen

...
  oSuche = oDoc.createSearchDescriptor()
  REM suche über alle Elemente der gelieferten Platzhalternamen - array deiner Werte: xyz, zyx ....
  for i = 0 to uBound(aPlatzhalter())
    sSuchText = sPHS & aPlatzhalter(i) & sPHE  '  sPhS bei dir "<", sPHE ">"
    oSuche.setSearchString(sSuchText)
    oSuchErg = oDoc.findfirst(oSuche)
    Do while not isNull(oSuchErg)
      REM oSuchErg  beinhaltet nun deinen Textteil als Objekt
      REM oSuchErg.CharStyleName = "<DeineFormatvorlage>"
      REM hier musst Du natürlich für Dich noch entsprechende Weichen einbauen entsprechend deinen Platzhaltern
      REM also z.B. die Formatvorlagennamen auch in einem Array unterbringen und dann entsprechen zuweisen
      REM oSuchErg.CharStyleName = aFormateVorlage(i)
      oSuchErg = oDoc.findNext(oSuchErg.End, oSuche)
    loop
  next i


Viel Spass
Gruss
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 5- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic

Opus
Beiträge: 7
Registriert: Mo, 11.10.2004 03:17

Re: Tags markieren

Beitrag von Opus » Sa, 23.09.2017 23:34

Hallo.
Danke für den Tipp. Leider komme ich mit den Deklarationen nicht klar und muss mich damit erstmal näher beschäftigen (Ist mein erstes Makro in OO, habe vorher nur mit Visual Basic gearbeitet). Vielleicht nehme ich doch lieber einen richtigen XML-Editor?

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

Re: Tags markieren

Beitrag von Stephan » So, 24.09.2017 08:55

Leider komme ich mit den Deklarationen nicht klar und muss mich damit erstmal näher beschäftigen
??
Was ist damit gemeint, der Code enthält überhaupt keine Deklarationen.

Möglicherweise ist Du nicht klar das der Code von Thomas nur ein 'Gerüst' darstellt und Du also seine weiteren Hinweise beachten musst um zu einer fertigen Lösung zu kommen?

Das hier ist angelehnt an den Code von Thomas, formatiert aber hart und arbeitet zunächst ohne Cursor und bezieht die Tags in die Farbmarkierung mit ein:

Code: Alles auswählen

Sub Main
  aPlatzhalter = Array("abc", "def")
  
  oSuche = ThisComponent.createSearchDescriptor()

  for i = 0 to uBound(aPlatzhalter())
    sSuchText = "<" & aPlatzhalter(i) & ">" & ".*?" & "</" & aPlatzhalter(i) & ">"
    oSuche.setSearchString(sSuchText)
    oSuche.SearchRegularExpression = True
    oSuchErg = ThisComponent.findfirst(oSuche)
    Do while not isNull(oSuchErg)
      oSuchErg.CharColor = RGB(255,0,0)
      oSuchErg = ThisComponent.findNext(oSuchErg.End, oSuche)
    loop
  next i

End Sub

Gruß
Stephan

Opus
Beiträge: 7
Registriert: Mo, 11.10.2004 03:17

Re: Tags markieren

Beitrag von Opus » So, 24.09.2017 17:43

Ahhhh, ich hatte Option Explicit eingetragen, daher klappte das nicht.
Jetzt teste ich das mal und versuche die Funktion um die Formatvorlagen zu ergänzen. Bei den Tags bin ich mir noch nicht sicher, ob und wie sie formatiert werden sollten. Die Kunst wird wohl auch sein, viel Text und viele XML-Tags so zu formatieren, dass es übersichtlich bleibt.

Lässt sich mit Macros auch die Ausgabe der XML-Elemente steuern?
Ich habe hier
[url]https://xhtmlforum.de/73316-xsl-funktion-f-r-tag.html[/url]
und hier (auf englisch, aber mit 1 Antwort)
[url]https://stackoverflow.com/questions/463 ... n-lilypond[/url]
die Frage gestellt, wie ich für verschiedene Programme die XML-Ausgabe steuern kann. Also dass z.B. eine Ausgabe der XML-Datei erfolgt, in der nur die Elemente mit den Tags xyz und nicht die Elemente mit den Tags zyx zu sehen sind. Das ist mit Open Office vielleicht auch möglich oder gar einfacher?

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 10 Gäste