October 28, 2020, 06:16:15 AM

Author Topic: [bb] TextArea Html Formatting by Todd [ 1+ years ago ]  (Read 1277 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bb] TextArea Html Formatting by Todd [ 1+ years ago ]
« on: June 29, 2017, 12:28:43 AM »
Title : TextArea Html Formatting
Author : Todd
Posted : 1+ years ago

Description : Basically all this is, is an easier way to format a TextArea gadget with color, bold, etc. There is just one command: FormatTextArea(). This will do all of the formatting for you! The tags that are supported right now are:
Code: [Select]
<b>Bold</b> <i>Italic</i> and [c:HEXCOLOR]Color[/c:000000]. They can be combinded for more than one style, they work just like html tags. Here's a little example to get you started:

Code: [Select]
Include "TextAreaTags.bb"

MainWnd=CreateWindow("TextArea Formatting",0,0,500,350)
WndW=ClientWidth(MainWnd)
WndH=ClientHeight(MainWnd)
SetMinWindowSize MainWnd

TextArea=CreateTextArea(4,4,WndW-8,WndH-8,MainWnd)
SetGadgetFont TextArea,LoadFont("Verdana",15)
SetGadgetLayout TextArea,1,1,1,1

FormatTextArea(TextArea,"Examples: ",TxAppendText)
FormatTextArea(TextArea,"<b>Bold</b>, ",TxAppendText)
FormatTextArea(TextArea,"<i>Italic</i>, ",TxAppendText)
FormatTextArea(TextArea,"<i><b>Bold & Italic</b></i>, ",TxAppendText)
FormatTextArea(TextArea,"[c:0000FF]<b>Color!</b>[/c:0000FF]",TxAppendText)

While WaitEvent() <> $803
Wend


(TextAreaTags.bb): [/i]

Code :
Code: BlitzBasic
  1. ;TextArea Html-Style Tags
  2. ;Written by Todd Yandell
  3.  
  4. Type TxTag
  5.         Field Flags,Val$
  6.         Field Red,Grn,Blu
  7.         Field Pos,Size
  8. End Type
  9.  
  10. Const TxFormatOnly=0
  11. Const TxSetText=1
  12. Const TxAppendText=2
  13.  
  14. Global StTags$[16],TagDef$[16],TgClose$="/"
  15. Global TagOpen$="[",TagClose$="]"
  16. Global MaxTags=3,DefTextRed,DefTextGrn,DefTextBlu
  17.  
  18. StTags[1]="b":TagDef[1]="Bold"
  19. StTags[2]="i":TagDef[2]="Italic"
  20. StTags[3]="c:%%%%%%":TagDef[3]="Color"
  21.  
  22. Function FormatTextArea(TextArea,StText$,TextMode=0)
  23.         LockTextArea TextArea
  24.         If StText$ <> ""
  25.                 Local Buffer$,TagMode,Char$,Ch,CharA$,CharB$,CloseMode
  26.                 Local NewTag$,ChTag$,Match,Tag,Pos,TextFlags,NewLine$
  27.                 Local TextRed,TextGrn,TextBlu,NewTagMode,NewCol$,StartPos
  28.                 Nt.TxTag=New TxTag
  29.                 NtPos=0
  30.                 If TextMode=2
  31.                         NtPos=TextAreaLen(TextArea,1)
  32.                         StartPos=NtPos
  33.                 EndIf
  34.                 For Ch=1 To Len(StText$)
  35.                         Char$=Mid(StText$,Ch,1)
  36.                         If Char=TagOpen
  37.                                 If TagMode=False
  38.                                         TagMode=True
  39.                                         Buffer=""
  40.                                 EndIf
  41.                         ElseIf Char=TagClose
  42.                                 If TagMode=True
  43.                                         TagMode=False
  44.                                         NewTag=Replace(Buffer,TgClose,"")
  45.                                         CloseMode=False
  46.                                         If NewTag <> Buffer
  47.                                                 CloseMode=True
  48.                                         EndIf
  49.                                         Match=False
  50.                                         For Tag=1 To MaxTags
  51.                                                 ChTag=StTags[Tag]
  52.                                                 If Len(ChTag)=Len(NewTag)
  53.                                                         For Pos=1 To Len(ChTag)
  54.                                                                 CharA=Mid(ChTag,Pos,1)
  55.                                                                 CharB=Mid(NewTag,Pos,1)
  56.                                                                 If CharA <> "%"
  57.                                                                         If CharA <> CharB
  58.                                                                                 Exit
  59.                                                                         EndIf
  60.                                                                 EndIf
  61.                                                         Next
  62.                                                         If Pos=Len(ChTag)+1
  63.                                                                 Match=True
  64.                                                                 Exit
  65.                                                         Else
  66.                                                                 Match=False
  67.                                                         EndIf
  68.                                                 EndIf
  69.                                         Next
  70.                                         If Match=True
  71.                                                 Select TagDef[Tag]
  72.                                                 Case "Bold"
  73.                                                         If Not CloseMode
  74.                                                                 TextFlags=TextFlags Or 1
  75.                                                         Else
  76.                                                                 TextFlags=TextFlags Xor 1
  77.                                                         EndIf
  78.                                                 Case "Italic"
  79.                                                         If Not CloseMode
  80.                                                                 TextFlags=TextFlags Or 2
  81.                                                         Else
  82.                                                                 TextFlags=TextFlags Xor 2
  83.                                                         EndIf
  84.                                                 Case "Color"
  85.                                                         If Not CloseMode
  86.                                                                 If Instr(NewTag,":")
  87.                                                                         ClPos=Instr(NewTag,":")
  88.                                                                         NewCol=Right(NewTag,Len(NewTag)-ClPos)
  89.                                                                         TextRed=Hex2Int(Mid(NewCol,1,2))
  90.                                                                         TextGrn=Hex2Int(Mid(NewCol,3,2))
  91.                                                                         TextBlu=Hex2Int(Mid(NewCol,5,2))
  92.                                                                 EndIf
  93.                                                         Else
  94.                                                                 TextRed=DefTextRed
  95.                                                                 TextGrn=DefTextGrn
  96.                                                                 TextBlu=DefTextBlu
  97.                                                         EndIf
  98.                                                 End Select
  99.                                                 Nt=New TxTag
  100.                                                 NtPos=StartPos+Ch2
  101.                                                 NtFlags=TextFlags
  102.                                                 NtRed=TextRed
  103.                                                 NtGrn=TextGrn
  104.                                                 NtBlu=TextBlu
  105.                                         EndIf
  106.                                         Buffer=""
  107.                                 EndIf
  108.                         Else
  109.                                 Buffer=Buffer+Char
  110.                                 If Not TagMode
  111.                                         Ch2=Ch2+1
  112.                                         NtSize=NtSize+1
  113.                                         NtVal=Buffer
  114.                                 EndIf
  115.                         EndIf
  116.                 Next
  117.                 For Nt.TxTag=Each TxTag
  118.                         If NtVal=""
  119.                                 Delete Nt
  120.                         EndIf
  121.                 Next
  122.                 Select TextMode
  123.                 Case 1
  124.                         SetTextAreaText TextArea,""
  125.                         For Nt.TxTag=Each TxTag
  126.                                 AddTextAreaText TextArea,NtVal
  127.                         Next
  128.                 Case 2
  129.                         For Nt.TxTag=Each TxTag
  130.                                 AddTextAreaText TextArea,NtVal
  131.                         Next
  132.                 End Select
  133.                 For Nt.TxTag=Each TxTag
  134.                         FormatTextAreaText(TextArea,NtRed,NtGrn,NtBlu,NtFlags,NtPos,NtSize)
  135.                 Next
  136.                 Delete Each TxTag
  137.         EndIf
  138.         UnlockTextArea TextArea
  139. End Function
  140.  
  141. Function Hex2Int(val$)
  142.         For x=0 To Len(val$)-1
  143.                 ch$=Mid(val,x+1,1)
  144.                 Select Upper(ch)
  145.                 Case 0,1,2,3,4,5,6,7,8,9
  146.                         chn=Int(ch)
  147.                 Case "A"
  148.                         chn=10
  149.                 Case "B"
  150.                         chn=11
  151.                 Case "C"
  152.                         chn=12
  153.                 Case "D"
  154.                         chn=13
  155.                 Case "E"
  156.                         chn=14
  157.                 Case "F"
  158.                         chn=15
  159.                 Default
  160.                         Return -1
  161.                 End Select
  162.                 vv=vv+(chn*(16^(Len(val$)-(x+1))))
  163.         Next
  164.         Return vv
  165. End Function


Comments : none...

 

SimplePortal 2.3.6 © 2008-2014, SimplePortal