Allow special commands to be inserted anywhere in the line, except the '@{index}' one.

[GB.MARKDOWN]
* NEW: Allow special commands to be inserted anywhere in the line, except the '@{index}' one.
This commit is contained in:
gambas 2019-12-30 19:46:06 +01:00
parent 65ccb4094c
commit 1afcd229f8

View file

@ -60,7 +60,7 @@ Private Sub ConvertMarkup(aLine As String[], Optional bDoNotSetLine As Boolean)
Dim hMarkupList As MarkupList
Dim bJustList As Boolean
Dim sLink As String
Dim iPos, iPos2 As Integer
Dim iPos As Integer
Dim aList As New MarkupList[]
Dim sTable As String
Dim iIndexPos As Integer = -1
@ -73,7 +73,6 @@ Private Sub ConvertMarkup(aLine As String[], Optional bDoNotSetLine As Boolean)
Dim sList As String
Dim bSaveComment As Boolean
Dim aTemp As String[]
Dim sCommand As String
aResult = New String[]
@ -155,27 +154,14 @@ Private Sub ConvertMarkup(aLine As String[], Optional bDoNotSetLine As Boolean)
sLine = Mid$(sLine, iPos + 4)
Endif
' Special command
If sLine = "@{index}" Then
iIndexPos = aResult.Count
aResult.Add(sLine)
Continue
Endif
iPos = 0
Do
iPos = InStr(sLine, "@{", iPos + 1)
If iPos = 0 Then Break
iPos2 = InStr(sLine, "}", iPos + 2)
If iPos2 = 0 Then Break
sCommand = Mid$(sLine, iPos + 2, iPos2 - iPos - 2)
If Not sCommand Then Break
aCommand = $hMarkdown.Command(sCommand)
If iPos = 1 And If iPos2 = Len(sLine) Then
' Special command alone on its line
If Left(sLine, 2) = "@{" And If Right(sLine) = "}" Then
If sLine = "@{index}" Then
iIndexPos = aResult.Count
aResult.Add(sLine)
Else
aCommand = $hMarkdown.Command(Mid$(sLine, 3, -1))
If aCommand And If aCommand.Count Then
If $hMarkdown.Reinterpret Then
aLine.Insert(aCommand, iLine + 1)
@ -184,41 +170,9 @@ Private Sub ConvertMarkup(aLine As String[], Optional bDoNotSetLine As Boolean)
Endif
$hMarkdown.Reinterpret = True
Endif
Break
Else
If aCommand And If aCommand.Count Then
sLine = Left(sLine, iPos - 1) & aCommand[0] & Mid(sLine, iPos2 + 1)
iPos += Len(aCommand[0])
Endif
$hMarkdown.Reinterpret = True
Endif
Loop
If iPos Then Continue
' If Left(sLine, 2) = "@{" And If Right(sLine) = "}" Then
' If sLine = "@{index}" Then
' iIndexPos = aResult.Count
' aResult.Add(sLine)
' Else
' aCommand = $hMarkdown.Command(Mid$(sLine, 3, -1))
' If aCommand And If aCommand.Count Then
' If $hMarkdown.Reinterpret Then
' aLine.Insert(aCommand, iLine + 1)
' Else
' aResult.Insert(aCommand)
' Endif
' $hMarkdown.Reinterpret = True
' Endif
' Endif
' Continue
' Endif
Continue
Endif
' Blockquote
@ -671,6 +625,8 @@ Private Sub ConvertLine(sLine As String) As String
Dim bUnderline As Boolean
Dim bLimitBefore, bLimitAfter As Boolean
Dim iLen As Integer
Dim sCommand As String
Dim aCommand As String[]
iLen = String.Len(sLine)
@ -700,13 +656,11 @@ MAIN_LOOP:
If sCar = "<" Then Goto ENTER_MARKUP
'If $aMarkup.Count = 0 Then
If sCar = "&" Then Goto ENTER_AMPERSAND
If sCar = "&" Then Goto ENTER_AMPERSAND
If sCar = "[" And If String.Mid$(sLine, I + 1, 1) <> " " Then Goto ENTER_LINK
If sCar = "[" And If String.Mid$(sLine, I + 1, 1) <> " " Then Goto ENTER_LINK
'Endif
If sCar = "@" And If String.Mid$(sLine, I + 1, 1) = "{" Then Goto ENTER_COMMAND
If I = 1 Or If IsWordLimit(String.Mid$(sLine, I - 1, 1)) Then
bLimitBefore = True
@ -1027,6 +981,7 @@ ENTER_LINK:
sLink = $hLink.Link
sText = $hLink.Text
If sText Then sText = ConvertLine(sText)
sTitle = $hLink.Title
If Not sText Then sText = sLink
@ -1047,6 +1002,35 @@ ENTER_LINK:
Goto MAIN_LOOP
ENTER_COMMAND:
GoSub NEXT_CAR
sCommand = ""
Do
GoSub NEXT_CAR
If Not sCar Then
sResult &= "<div class=\"error\">Missing closing '}'</div>"
Return sResult
Endif
If sCar = "}" Then Break
sCommand &= sCar
Loop
If sCommand Then
aCommand = $hMarkdown.Command(sCommand)
If aCommand And If aCommand.Count Then
sResult &= ConvertLine(aCommand[0])
Endif
$hMarkdown.Reinterpret = True
Endif
Goto MAIN_LOOP
Catch
Return "<div><div class=\"error\"><b>" & Html$(Error.Text) & ":</b><br>" & Html$(sLine) & "</div></div>"