[IDE-Tool]Einruecker
- vonTurnundTaxis
- Beiträge: 2130
- Registriert: 06.10.2004 20:38
- Wohnort: Bayreuth
- Kontaktdaten:
- 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
Hab nen kleinen Fehler gefunden, bei UTF-8 Dateien wird die erste Zeile ausgelassen. Habs mal korrigiert. Ist nur ein Befehl:
Also nur ReadStringFormat(0) einfügen, wie oben
Gruß
Thomas
Code: Alles auswählen
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_()
CompilerIf #TestIT
a$ = "D:\Purebasic\PureBasic4\"
CompilerElse
a$ = GetPathPart(GetEnvironmentVariable("PB_TOOL_IDE"))
CompilerEndIf
OpenPreferences(a$ + "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
End
EndIf
ReadStringFormat(0) ; BOM überspringen
Tabs = 3
Restore Tags
Gruß
Thomas
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.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
- 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
Da ich diesen Code ständig nutze, hab ichs nochmal etwas fehlerbereinigt.
Jetzt läufts unter Linux, sowie unter Windows, Datazeilen wurden
vervollständig. UTF-8 und ASCII werden jetzt auch richtig behandelt, war
noch fehlerhaft."
SetClipboardText(a$)
CompilerEndIf
EndIf
EndProcedure
Main()
End
DataSection
Tags:
;StartTags
Data.s "if"
Data.s "while"
Data.s "repeat"
Data.s "procedure"
Data.s "procedurec"
Data.s "proceduredll"
Data.s "procedurecdll"
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 "importc"
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]
Ich hoffe, ich hab keine neuen Fehler eingebaut
Jetzt läufts unter Linux, sowie unter Windows, Datazeilen wurden
vervollständig. UTF-8 und ASCII werden jetzt auch richtig behandelt, war
noch fehlerhaft.
Code: Alles auswählen
;/---------------
;| IDE-Tool
;| Einrücker
;|
;| (c)HeX0R 2006
;| Do whatever you
;| like with this
;| source
;/---------------
#TestIT = 0
Global UTF_Flag.l
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, Found.l, *index
NewList Lines.s()
NewList Tags._TAGS_()
NewList MTags._TAGS_()
CompilerIf #PB_Compiler_OS = #PB_OS_Linux
OpenPreferences(GetEnvironmentVariable("HOME") + ".purebasic/purebasic.prefs")
CompilerElse
OpenPreferences(GetPathPart(GetEnvironmentVariable("PB_TOOL_IDE")) + "purebasic.prefs")
CompilerEndIf
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
If ReadStringFormat(0) = #PB_UTF8
UTF_Flag = #PB_UTF8
Else
UTF_Flag = #PB_Ascii
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
While Eof(0) = 0
AddElement(Lines())
b$ = MyTrim(ReadString(0, UTF_Flag))
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$)
WriteStringFormat(0, UTF_Flag)
ForEach Lines()
WriteStringN(0, Lines(), UTF_Flag)
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 "procedurec"
Data.s "proceduredll"
Data.s "procedurecdll"
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 "importc"
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]
Ich hoffe, ich hab keine neuen Fehler eingebaut
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.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
- 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:
Sehr gut
Habe nur noch für die faulen Säcke, die so auf Einzeiler stehn die ganzen C-Commands-Abfragen hinzugefügt, die Globale Variable lokalisiert und die komische Test-Konstante entfernt.
Habe nur noch für die faulen Säcke, die so auf Einzeiler stehn die ganzen C-Commands-Abfragen hinzugefügt, die Globale Variable lokalisiert und die komische Test-Konstante entfernt.
Zuletzt geändert von HeX0R am 07.06.2009 23:14, insgesamt 2-mal geändert.
- 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:
Obigen Code leicht modifiziert.
Z.B. findet er jetzt die IDE-Einstellungen auch, wenn man sie in den Anwendungsdaten sitzen hat.
Ausserdem StructureUnion und EndStructureUnion hinzugefügt.
Z.B. findet er jetzt die IDE-Einstellungen auch, wenn man sie in den Anwendungsdaten sitzen hat.
Ausserdem StructureUnion und EndStructureUnion hinzugefügt.
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}
- 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
DankeHeX0R hat geschrieben:Obigen Code leicht modifiziert.
Z.B. findet er jetzt die IDE-Einstellungen auch, wenn man sie in den Anwendungsdaten sitzen hat.
Ausserdem StructureUnion und EndStructureUnion hinzugefügt.
Bin schon paarmal mit der Beta drüber gestolpert und habe keine Lust/Zeit
gehabt es zu ändern
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.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
- PureLust
- Beiträge: 1145
- Registriert: 21.07.2005 00:02
- Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
- Wohnort: am schönen Niederrhein
Sorry, bin anscheinend zu blöde das Ding ans Laufen zu bekommen.
Ich hab also den letzten Source von Hexor aus dem Forum in die IDE kopiert, daraus eine EXE gemacht und diese als Wekzeug eingebunden.
Als Argument übergebe ich: "%Tempfile"
Wenn ich es nun unter "Werkzeuge" ausrufe scheint nichts zu passieren.
Was muss ich denn sonst noch einstellen oder machen bzw. wie muss ich dass dann anwenden um einen formatierten Source zu bekommen?
ThX, PL. *schäm*
Ich hab also den letzten Source von Hexor aus dem Forum in die IDE kopiert, daraus eine EXE gemacht und diese als Wekzeug eingebunden.
Als Argument übergebe ich: "%Tempfile"
Wenn ich es nun unter "Werkzeuge" ausrufe scheint nichts zu passieren.
Was muss ich denn sonst noch einstellen oder machen bzw. wie muss ich dass dann anwenden um einen formatierten Source zu bekommen?
ThX, PL. *schäm*
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
- 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:
Im Rar-Archiv des ersten Beitrags ist ne Hilfe mit drinne.
Nur das Tool selbst ist nicht ganz up-to-date.
[Edit]
Ich hab das interessante Bild mal rausgegruschtelt :
P.S.:
Das Tool auszurufen dürfte herzlich wenig bringen
Nur das Tool selbst ist nicht ganz up-to-date.
[Edit]
Ich hab das interessante Bild mal rausgegruschtelt :
P.S.:
Das Tool auszurufen dürfte herzlich wenig bringen
Zuletzt geändert von HeX0R am 18.10.2017 21:43, insgesamt 1-mal geändert.
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}
- PureLust
- Beiträge: 1145
- Registriert: 21.07.2005 00:02
- Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
- Wohnort: am schönen Niederrhein
Au Mann bin ich Banane ... meine Nachbarn wundern sich schon wieso ich hier die ganze Zeit am Fenster stehe und komische Namen über die Straße brülle.HeX0R hat geschrieben:Das Tool auszurufen dürfte herzlich wenig bringen
Das Problem ist, dass bei mir die Felder bei "Reload Source after tool has quit" nicht aktiv sind - ich kann sie also nicht anwählen:HeX0R hat geschrieben: Ich hab das interessante Bild mal rausgegruschtelt :
Benutzte IDE: 4.10-Beta2
[Edit:]
*Aaarrrggghhhhh* .... erst mach ich mich vor meiner gesamten Nachbarschafft lächerlich und dann bin ich noch zu blöde einfach "abzuschreiben" !!! Ist heute wohl nicht mein Tag.
"%TEMPFILE" - MUSS - groß geschrieben werden, sonst bleiben die Gadgets deaktiviert.
Nun läufts aber, also: Vielen Dank ... schickes und nützliches Tool.
Zuletzt geändert von PureLust am 01.08.2007 16:41, insgesamt 2-mal geändert.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)