[IDE-Tool]Einruecker

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
HeX0R
Beiträge: 2954
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

[IDE-Tool]Einruecker

Beitrag von HeX0R »

Moin,

ich hab mich schon länger über so manche völlig unstrukturierten Beiträge hier im Board geärgert und daher mal g'schwind ein Auto-Einrück-Tool für die PB-IDE gebastelt.
O.k. ganz uneigennützig war das Ganze natürlich auch nicht:
Da ich sehr viele ältere PB-Projekte betreue und es früher mit der PB-IDE nicht möglich war Real-Tabs zu verwenden, hab ich nun meistens ein Gemisch aus Tabs und Spaces in meinen Source-Codes.
Das nervt mich einfach nur...

Das Tool schaut in eure IDE-Einstellungen (also ob Tabs, oder nicht Tabs) und setzt die Whitespaces entsprechend.

Blabla... peng ... blubberlutsch...
Wer immernoch nicht versteht, was dieses Tool macht, es macht aus dem hier:

Code: Alles auswählen

Procedure Aha(Ameisenbaer,Affe,Hosenscheisser)
	Protected i,jaaa,keeeeee

 i=12
jaaa=222
	   keeeeee=3333

     ProcedureReturn jaaaa
   EndProcedure


Aha(0,0,0)
das hier:

Code: Alles auswählen

Procedure Aha(Ameisenbaer, Affe, Hosenscheisser)
	Protected i, jaaa, keeeeee

	i       = 12
	jaaa    = 222
	keeeeee = 3333

	ProcedureReturn jaaaa
EndProcedure


Aha(0, 0, 0)
//Edit:
Download entfernt, ->hier<- der Quelltext


Hier kann man die IDE-Einstellungen noch sehen.
Zuletzt geändert von HeX0R am 06.07.2023 21:01, insgesamt 23-mal geändert.
Benutzeravatar
Karl
Beiträge: 520
Registriert: 21.07.2005 13:57
Wohnort: zu Hause

Beitrag von Karl »

Ja, cool so ´n Quellcodeformatierer.

Ist der Quellcode öffentlich, falls man eigene Formatierungsvorlagen hat?

Gruß Karl
The Kopyright Liberation Front also known as the justified ancients of Mumu!
PB 5.X
Benutzeravatar
HeX0R
Beiträge: 2954
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Beitrag von HeX0R »

Wenn erwünscht klar.
Dann werde ich noch ein oder zwei Kommentare einfügen.
(Bin extrem Kommentarfaul)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag von NicTheQuick »

Das ist nur für die IDE, oder? Weil bei jaPBe gibt es schon zwei Methoden, die
automatisch einrücken. Ihren Unterschied hab ich aber bis heute noch nicht
erkannt.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

für fremdcode ist das sehr praktisch :allright:

...für eigenen brauch ich sowas nicht... ;)
ich würd nen knoten im kopp kriegen, wenn ich unstrukturiert proggen wollte...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

NicTheQuick hat geschrieben:Das ist nur für die IDE, oder? Weil bei jaPBe gibt es schon zwei Methoden, die
automatisch einrücken. Ihren Unterschied hab ich aber bis heute noch nicht
erkannt.
Ausgangscode:

Code: Alles auswählen

Enumeration
#lala = 1
#lululululululu = 2
EndEnumeration
Methode 1 (Ctrl + Tab):

Code: Alles auswählen

Enumeration
  #lala = 1
  #lululululululu = 2
EndEnumeration
Methode 2 (Ctrl + Shift + Tab):

Code: Alles auswählen

Enumeration
  #lala           = 1
  #lululululululu = 2
EndEnumeration
Grüße ... Kiffi
Hygge
Benutzeravatar
HeX0R
Beiträge: 2954
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Beitrag von HeX0R »

Jau, das ist nur für die PB-IDE, weil irgendjemand mal irgendwo sagte, JaPBe bringt das bereits mit.
Zuletzt geändert von HeX0R am 07.06.2009 23:14, insgesamt 1-mal geändert.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

:allright:
Ich wahr es schon leid immer jaPBe aufzurufen um die Forumspostings
lesbar zu machen :mrgreen:

Spart mir viel Zeit :D
(werde unformatierten Code jedoch trotztem weitgehend übersehen)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
vonTurnundTaxis
Beiträge: 2130
Registriert: 06.10.2004 20:38
Wohnort: Bayreuth
Kontaktdaten:

Beitrag von vonTurnundTaxis »

Klasse! :allright:
Ich habe es mal für die PB4-Linux-IDE angepasst (es sind nur ein paar Zeilen, aber für die Faulen nochmal komplett):

Code: Alles auswählen

 ;/--------------- 
 ;| IDE-Tool 
 ;| Einrücker 
 ;| 
 ;| (c)HeX0R 2006 
 ;| Do whatever you 
 ;| like with this 
 ;| source 
 ;/--------------- 
 
 #TestIT = 0 
 
 Structure _TAGS_ 
    Name.s 
    Tabs.l 
 EndStructure 
 
 Procedure.s AddTabs(Tabs.l, Tab.s) 
    Protected i.l, Result.s 
 
    For i = 1 To Tabs 
       Result + Tab 
    Next i 
 
    ProcedureReturn Result 
 EndProcedure 
 
 Procedure.s MyTrim(Line.s) 
    ;Normal Trim() doesn't handle Tabs correctly, so i had to write my own 
     
    Protected *B.BYTE, Start.l = 1, Ende.l, Result.s 
 
    If Line = "" 
       ProcedureReturn "" 
    EndIf 
 
    *B = @Line 
    Repeat 
       If *B\b <> 32 And *B\b <> 9 And *B\b <> 0 
          Break 
       EndIf 
       Start + 1 
       *B + 1 
    ForEver 
    Ende = Len(Line) 
    *B = @Line + Ende - 1 
    Ende - Start 
    Repeat 
       If *B\b <> 32 And *B\b <> 9 And *B\b <> 0 
          Break 
       EndIf 
       Ende - 1 
       *B - 1 
    ForEver 
    Result = Mid(Line, Start, Ende + 1) 
 
    ProcedureReturn Result 
 EndProcedure 
 
 Procedure.s FindCommand(Line.s, Index.l) 
    ;Find next Command in this Line 
    ;When User wrote more then 
    ;just one Command in one Line via ':' 
    ;For Example 
    ;While WindowEvent() : Wend 
     
    Protected i.l, DQ.l, *B.CHARACTER, Result.s 
 
    If Line = "" 
       ProcedureReturn "" 
    EndIf 
 
    i  = 1 
    *B = @Line 
    While *B\c <> 0 
       If *B\c = 34 
          DQ ! 1 
       EndIf 
       If *B\c = ':' And DQ = 0 
          If i = Index 
             Break 
          Else 
             i + 1 
          EndIf 
       ElseIf i = Index 
          Result + Chr(*B\c) 
       EndIf 
       *B + 1 
    Wend 
 
    ProcedureReturn MyTrim(Result) 
 
 EndProcedure 
 
 Procedure.l CheckForEndTag(b$, Tag.s) 
    ;Checks, whether the Start and End-Tag is in one line 
    ;For Example 
    ;While WindowEvent() : Wend 
    Protected a$, Result.l = #True, i.l = 2 
 
    a$ = FindCommand(b$, i) 
    While a$ <> "" 
       Select StringField(LCase(a$), 1, " ") 
          Case "endif" 
             If Tag = "if" 
                Result = #False 
                Break 
             EndIf 
          Case "endselect" 
             If Tag = "select" 
                Result = #False 
                Break 
             EndIf 
          Case "until" 
             If Tag = "repeat" 
                Result = #False 
                Break 
             EndIf 
          Case "forever" 
             If Tag = "repeat" 
                Result = #False 
                Break 
             EndIf 
          Case "next" 
             If Tag = "for" Or Tag = "foreach" 
                Result = #False 
                Break 
             EndIf 
          Case "wend" 
             If Tag = "while" 
                Result = #False 
                Break 
             EndIf 
          Case "enddatasection" 
             If Tag = "datasection" 
                Result = #False 
                Break 
             EndIf 
          Case "endprocedure" 
             If Tag = "procedure" 
                Result = #False 
                Break 
             EndIf 
          Case "endstructure" 
             If Tag = "structure" 
                Result = #False 
                Break 
             EndIf 
          Case "endinterface" 
             If Tag = "interface" 
                Result = #False 
                Break 
             EndIf 
          Case "endenumeration" 
             If Tag = "enumeration" 
                Result = #False 
                Break 
             EndIf 
          Case "endwith" 
             If Tag = "with" 
                Result = #False 
                Break 
             EndIf 
          Case "endimport" 
             If Tag = "import" 
                Result = #False 
                Break 
             EndIf 
          Case "endmacro" 
             If Tag = "macro" 
                Result = #False 
                Break 
             EndIf 
       EndSelect 
       i + 1 
       a$ = FindCommand(b$, i) 
    Wend 
 
    ProcedureReturn Result 
 EndProcedure 
 
 Procedure Main() 
    Protected MyTab.s, a$, b$, Tabs.l, i.l, UTF_Start.l, Found.l, *index 
 
    NewList Lines.s() 
    NewList Tags._TAGS_() 
    NewList MTags._TAGS_() 
 
    OpenPreferences(GetEnvironmentVariable("HOME") + ".purebasic/purebasic.prefs")
    PreferenceGroup("Global") 
    If ReadPreferenceLong("RealTab", 0) 
       MyTab = #TAB$ 
    Else 
       MyTab = Space(ReadPreferenceLong("TabLength", 2)) 
    EndIf 
    ClosePreferences() 
 
    a$ = ProgramParameter() 
    If a$ = "" Or ReadFile(0, a$) = 0 
    MessageRequester("nixgefunden", a$)
       End 
    EndIf 
 
    Tabs = 3 
    Restore Tags 
    Repeat 
       Read b$ 
       If b$ = "" 
          Tabs - 1 
          If Tabs = 0 
             Break 
          EndIf 
       Else 
          AddElement(Tags()) 
          Tags()\Tabs = Tabs 
          Tags()\Name = b$ 
       EndIf 
    ForEver 
 
    UTF_Start = #False 
    i         = 0 
 
    While Eof(0) = 0 
       AddElement(Lines()) 
       b$ = MyTrim(ReadString(0)) 
       If i = 0 
          If Asc(Mid(b$, 1, 1)) = 239 And Asc(Mid(b$, 2, 1)) = 187 And Asc(Mid(b$, 3, 1)) = 191 
             ;UTF-Header 
             UTF_Start = #True 
             b$ = Right(b$, Len(b$) - 3) 
          EndIf 
       EndIf 
       Lines() = b$ 
       i + 1 
    Wend 
    CloseFile(0) 
    Tabs = 0 
    ForEach Lines() 
       b$ = LCase(StringField(StringField(Lines(), 1, " "), 1, ".")) 
       Found = #False 
       ForEach Tags() 
          If b$ = Tags()\Name 
             Found = #True 
             Select Tags()\Tabs 
                Case 3 
                   ;StartTag 
                   Lines() = AddTabs(Tabs, MyTab) + Lines() 
                   If CheckForEndTag(Lines(), b$) 
                      If b$ = "if" Or b$ = "select" 
                         ;They have middletags! 
                         LastElement(MTags()) 
                         AddElement(MTags()) 
                         MTags()\Name = b$ 
                         MTags()\Tabs = Tabs 
                      EndIf 
                      Tabs + 1 
                   EndIf 
                Case 2 
                   ;MiddleTags need special treetment 
                   If LastElement(MTags()) 
                      If MTags()\Name = "if" 
                         Tabs = MTags()\Tabs 
                      ElseIf MTags()\Name = "select" 
                         Tabs = MTags()\Tabs + 1 
                      EndIf 
                   EndIf 
                   Lines() = AddTabs(Tabs, MyTab) + Lines() 
                   Tabs + 1 
                Case 1 
                   ;EndTag 
                   Tabs - 1 
                   ;Check for MiddleTags 
                   If b$ = "endif" And LastElement(MTags()) And MTags()\Name = "if" 
                      DeleteElement(MTags()) 
                   ElseIf b$ = "endselect" And LastElement(MTags()) And MTags()\Name = "select" 
                      Tabs - 1 
                      DeleteElement(MTags()) 
                   EndIf 
                   Lines() = AddTabs(Tabs, MyTab) + Lines() 
             EndSelect 
             Break 
          EndIf 
       Next 
       If Found = #False 
          If Lines() 
             Lines() = AddTabs(Tabs, MyTab) + Lines() 
          EndIf 
       EndIf 
    Next 
 
    Found = #PB_MessageRequester_Yes 
    If Tabs <> 0 
       ;Something wrong with the code... 
       Found = MessageRequester("Error!", "Something wrong with your Code!" + #LF$ + "Would you like to parse it anyway ?", #PB_MessageRequester_YesNo) 
    EndIf 
    If Found = #PB_MessageRequester_Yes 
 
       CompilerIf #TestIt = 0 
 
       If CreateFile(0, a$) 
          ForEach Lines() 
             If UTF_Start 
                WriteByte(0, 239) 
                WriteByte(0, 187) 
                WriteByte(0, 191) 
                UTF_Start = #False 
             EndIf 
             WriteStringN(0, Lines()) 
          Next 
          CloseFile(0) 
       EndIf 
 
       CompilerElse 
 
       a$ = "[code]" + #CRLF$ 
       If LastElement(Lines()) 
          While Left(MyTrim(Lines()), 1) = ";" 
             *index = @Lines() 
             If PreviousElement(Lines()) = 0 
                Break 
             EndIf 
          Wend 
       EndIf 
       ForEach Lines() 
          If @Lines() = *index 
             Break 
          EndIf 
          a$ + Lines() + #CRLF$ 
       Next 
       a$ + "
"
SetClipboardText(a$)

CompilerEndIf

EndIf
EndProcedure

Main()
End

DataSection
Tags:
;StartTags
Data.s "if"
Data.s "while"
Data.s "repeat"
Data.s "procedure"
Data.s "proceduredll"
Data.s "enumeration"
Data.s "structure"
Data.s "interface"
Data.s "for"
Data.s "foreach"
Data.s "select"
Data.s "datasection"
Data.s "with"
Data.s "import"
Data.s "macro"
Data.s ""
;MiddleTags
Data.s "else"
Data.s "elseif"
Data.s "case"
Data.s "default"
Data.s ""
;EndTags
Data.s "endif"
Data.s "wend"
Data.s "until"
Data.s "forever"
Data.s "endprocedure"
Data.s "endstructure"
Data.s "endinterface"
Data.s "endenumeration"
Data.s "next"
Data.s "endselect"
Data.s "enddatasection"
Data.s "endwith"
Data.s "endimport"
Data.s "endmacro"
Data.s ""
EndDataSection
[/code]
Gibt es eine Möglichkeit, das Tool auch funktionieren zu lassen, wenn der Code noch nicht gespeichert ist?
Nicht durch Zorn, sondern durch Lachen tötet man
ClipGrab | Pastor - jetzt mit kurzen URLs!
Benutzeravatar
HeX0R
Beiträge: 2954
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Beitrag von HeX0R »

Da ich %TEMPFILE übergeben lasse, sollte es eigentlich auch mit ungespeichertem Code funktionieren.
Zumindest bei mir hier unter Win tut es das, unter Linux etwa nicht ?
Antworten