diff --git a/components/wiki/lazwiki/wiki2xhtmlconvert.pas b/components/wiki/lazwiki/wiki2xhtmlconvert.pas index 4eb2f088ba..4583610af2 100644 --- a/components/wiki/lazwiki/wiki2xhtmlconvert.pas +++ b/components/wiki/lazwiki/wiki2xhtmlconvert.pas @@ -823,55 +823,62 @@ begin doc:=Page.XHTML; CurName:=lowercase(copy(W.Src,Token.NameStartPos,Token.NameEndPos-Token.NameStartPos)); CurValue:=copy(W.Src,Token.ValueStartPos,Token.ValueEndPos-Token.ValueStartPos); - CodeNode:=doc.CreateElement('pre'); - if (CurName='pascal') - or (CurName='delphi') - or (CurName='code') - or (CurName='syntaxhighlight') - or (CurName='source') - or (CurName='fpc') - then - CurName:='pascal'; - if CurName<>'' then - CodeNode.SetAttribute('class',CurName); - Page.CurDOMNode.AppendChild(CodeNode); - if CurValue<>'' then begin - if (CurName='pascal') then begin - p:=PChar(CurValue); - AtomStart:=p; - LastToken:=pNone; - LastRangeStart:=p; - repeat - // skip space - while p^ in [#1..#31,' '] do inc(p); - // read token - if (p^='{') or ((p^='/') and (p[1]='/')) or ((p^='(') and (p[1]='*')) - then begin - // comment - AddSpan(pComment,p); - p:=FindCommentEnd(p,false); - end else begin - ReadRawNextPascalAtom(p,AtomStart); - if AtomStart^=#0 then break; - case AtomStart^ of - '''','#': - AddSpan(pString,AtomStart); - '0'..'9','%','$','&': - AddSpan(pNumber,AtomStart); - 'a'..'z','A'..'Z','_': - if WordIsKeyWord.DoIdentifier(AtomStart) then - AddSpan(pKey,AtomStart) + + if CurName = 'code' then begin + CodeNode := doc.CreateElement('code'); + Page.CurDomNode.AppendChild(CodeNode); + CodeNode.AppendChild(doc.CreateTextNode(CurValue)); + end else + begin + CodeNode:=doc.CreateElement('pre'); + if (CurName='pascal') + or (CurName='delphi') + or (CurName='syntaxhighlight') + or (CurName='source') + or (CurName='fpc') + then + CurName:='pascal'; + if CurName<>'' then + CodeNode.SetAttribute('class',CurName); + Page.CurDOMNode.AppendChild(CodeNode); + if CurValue<>'' then begin + if (CurName='pascal') then begin + p:=PChar(CurValue); + AtomStart:=p; + LastToken:=pNone; + LastRangeStart:=p; + repeat + // skip space + while p^ in [#1..#31,' '] do inc(p); + // read token + if (p^='{') or ((p^='/') and (p[1]='/')) or ((p^='(') and (p[1]='*')) + then begin + // comment + AddSpan(pComment,p); + p:=FindCommentEnd(p,false); + end else begin + ReadRawNextPascalAtom(p,AtomStart); + if AtomStart^=#0 then break; + case AtomStart^ of + '''','#': + AddSpan(pString,AtomStart); + '0'..'9','%','$','&': + AddSpan(pNumber,AtomStart); + 'a'..'z','A'..'Z','_': + if WordIsKeyWord.DoIdentifier(AtomStart) then + AddSpan(pKey,AtomStart) + else + AddSpan(pNone,AtomStart); else - AddSpan(pNone,AtomStart); - else - AddSpan(pSymbol,AtomStart); + AddSpan(pSymbol,AtomStart); + end; end; - end; - until false; - Flush(p); - end else begin - // default: add as text - CodeNode.AppendChild(doc.CreateTextNode(CurValue)); + until false; + Flush(p); + end else begin + // default: add as text + CodeNode.AppendChild(doc.CreateTextNode(CurValue)); + end; end; end; end;