Markdown-Text durch Button in HTML umwandeln

A

Hallo zusammen,

folgendes Problem:

Ich möchte einen Text mit Markdown-Elementen in einem Button in HTML umwandeln und weiß nicht, wie ich es am besten mache.

Im Datenfeld selbst soll nur Text in Rohform bzw. mit jenen Markdown-Elementen enthalten sein, für den Export benötige ich dann HTML.

Beispiel:

Datenfeld "Benefits" ist ein mehrzeiliges Textfeld mit dem Inhalt: "Ich bin Text mit einem __fettgedruckten__ Wort."

Das mehrzeilige Textfeld "XML" wird automatisch mit einem Text mit Variablen befüllt.

Über einen Button sollen diese Variablen nun ersetzt werden – eine davon mit dem Inhalt des Feldes "Benefits". Dabei soll am Ende dieser Text stehen: "Ich bin Text mit einem <b>fettgedruckten</b> Wort."

Mein nicht besonders erfolgreicher Versuch sah in etwa so aus (selbst, wenn es funktioniert hätte, gäbe es noch das Problem, dass hier nicht mehrere Wörter fett sein könnten):

XML := replace(XML, "myBenefits", 'Benefits');
let my1 := index(XML, first("__"));
let my2 := index(XML, last("__"));
let myLength := my2 - my1;
XML := replace(XML, substr(XML, my1, myLength), "<b>" + substr(XML, my1, myLength) + "</b>")

 

Viele Grüße

Aaron

Ninox Profile

Hallo Aaron,

 

bin gerade auf dem Sprung, von daher erst mal kein Code sondern nur eine Idee. :-)

 

Wenn Du aus dem Text in 'Benefits' erstmal mit let myArray:=split('Benefits',"__") ein Array baust und dann in einer Schleife (for i in myArray do) den Text neu zusammenbaust. Dabei werden gerade items (einschl. 0) dem Text nur angefügt (myText := myText + item(myArray,i)) , ungerade mit den HTML-Markups umschlossen (myText := myText+"<b>"+item(myArray,i)+"</b>"). Den so gebauten Text setzt Du dann in's Zielfeld bzw. verfährst für andere Markups ähnlich.

 

Verständlich? ;-)

Ansonsten versuch ich mich nachher mal am Code, dürfte aber nicht so kompliziert sein.

 

lg, Torsten

A

Hi Torsten,

 

Danke Dir für die schnelle Antwort.

Ich habe es jetzt so gemacht wie von dir vorgeschlagen und zumindest beim ersten Test mit nur einer Fettung scheint es zu klappen.

Ich versuche mal, wie das mit mehreren Markdown-Elementen aussieht.

 

Bisheriger Code:

 

let myBenefits := split('Benefits - Text', "__");
let myNewBenefits := "";
let myCounter := 0;
for f in myBenefits do
myNewBenefits := myNewBenefits + if even(myCounter) then
text(f)
else
if odd(myCounter) then
"<b>" + text(f) + "</b>"
end
end;
myCounter := myCounter + 1
end

 

lg, Aaron

Ninox Profile

Hi Aaron,

 

ups, wollte ja abends noch Code nachschieben - voll verpeilt, sorry. Aber so in etwa hätte mein Code auch ausgesehen, denke, das sollte auch mit mehreren bold-Elementen funktionieren.

 

lg, Torsten

A

Hi Torsten,

 

hast Du auch noch eine Idee, wie ich das für Links löse? 

da muss ich ja folgenden Strukturwechsel hinbekommen, wenn ich das richtig sehe:

[Testlink](https://de.wikipedia.org/)

---->

<a href="https://de.wikipedia.org/" >Testlink</a>

Außerdem werden Listenpunkte mit + gekennzeichnet (nur eines vor dem Listenpunkt), daher funktioniert der Code oben nur, wenn man hinter den Listenpunkt ein weiteres + zur Abgrenzung setzt. Hier ne Idee, wie man dieses Abgrenzungszeichen nicht benötigt?

 

Hoffe, meine Fragen sind verständlich und Danke für Deine Hilfe.

 

lg, Aaron

 

Ninox Profile

Hi Aaron,

 

puh - für Links wäre eventuell Arbeiten mit RegEx ein Weg? Zu dem Thema muss ich allerdings passen... :-/

 

Bei den Listenpunkten könnte man nach dem Zeilenende splitten, durch die Zeilen iterieren, wenn ein "+" am Anfang steht einen Counter hochzählen (und wenn der Counter = 1 ist z.B. das <ul> setzen), wenn Counter > 0 das "<li>" davor und "</li>" danach setzen. Wenn kein "+" am Anfang und Counter > 0 dann das "</ul>" und den Counter auf 0 setzen.

 

Darf halt sonst im Text kein "+" vorkommen... :-/

 

lg, Torsten

Antworten