Automatische Einrücküberarbeitung

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Automatische Einrücküberarbeitung

Beitrag von STARGÅTE »

Der Titel klingt etwas komisch, aber ich hatte halt keine andere Idee ^^

Tachchen,

da ich schon wieder gesehen habe das manche (ich auch) nicht richtig Einrücken können/wollen, habe ich mal ein Code geschrieben der aus einer *.pb eine *.pb.pb macht in welcher dann Alles richtig Eingerückt ist.

- Ich habe auch darauf geachtet, dass mache Leute (*mich an anguck*) gerne alles in eine Zeile quetschen. Das Programm erkennt das aber und macht damit kein Einrücken.

- Auch wenn einer ein String hat : "Das ist hier ein If und das ein Repeat", so macht das Programm hier auch nix, weil es String genauso wie Kommentare einfach Ignoriert.


Ich habe es bei meinem 10.000 Zeiler getestet und kein Bug (Fehleinrückung) gefunden.

Es fehlt noch ein paar Schlüsselwörter und ich würde auch gerne Procedurenen wie Start3D oder StartDrawing2D() einrücken lassen, aber das kommt dann später...

Wer einen Bug entdeckt, bitte mal den Codeausschnitt schicken, damit ich weiß was schief lief.

(Link veraltet)
Zuletzt geändert von STARGÅTE am 27.08.2010 01:10, insgesamt 2-mal geändert.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
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 »

http://www.purebasic.fr/german/viewtopi ... 577#118577
Irgendwelche Unterschiede?

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.
Bild
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag von a14xerus »

Bei mir klapps, aber ich benutze schon jaPBe...
Für alle die die Standard IDE benutzen sollte das ein gutes Tool sein.

Aber der Link hat ein "/" zuviel :wink: // erledigt
Zuletzt geändert von a14xerus am 05.07.2007 19:12, insgesamt 1-mal geändert.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

ts-soft hat geschrieben:http://www.purebasic.fr/german/viewtopi ... 577#118577
Irgendwelche Unterschiede?

Gruß
Thomas
Ubs habe ich nicht gesehen, naja ^^ doppelt hält besser :-P
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
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 »

Naja, ein paar Infos wären ja trotzdem nett.
Unterstützt Plain-Text und UTF-8?, was wird alles eingerückt usw.

Wenn schon doppelt, solltest Du vielleicht versuchen besser zu sein :wink:
MultiOS fehlt in jedem fall :mrgreen:

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.
Bild
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

Beitrag von X0r »

Unpraktisch.
Benutzeravatar
D@nte
Beiträge: 324
Registriert: 24.04.2007 15:33
Wohnort: Berlin

Beitrag von D@nte »

Ich find's super bin ja eh Fan einer PBCC (PureBasic Code Convention)

Aber was mir aufgefallen ist, meine PureBasic.prefs sagt TabLength = 2 dein Prog macht aber nur TabLength = 1, außerdem fehlt mir persönlich noch die Formatierung von "Vergleichen"

Code: Alles auswählen

If a=0
  For i=0 To 10
find ich grässlich imo hat das so auszusehen:

Code: Alles auswählen

If a = 0
  For i = 0 To 10
>Unpraktisch.
Nicht hilfreich
Benutzeravatar
michel51
Beiträge: 84
Registriert: 01.11.2005 20:00
Wohnort: Dornhan-Weiden

Re: Automatische Einrücküberarbeitung

Beitrag von michel51 »

STARGÅTE hat geschrieben: Spacer.exe
Hallo STARGÅTE
(das mit dem "Å" hab ich nun auch raus :mrgreen: )

kannst du bitte den Code posten oder mir schicken, denn mit der ".exe" kann ich auf dem Mac nichts anfangen.
Oder ist dein Code so "API"-verseucht :) :) :) , dass ein Portieren auf den Mac zu schwierig ist ?
michel51

Mac OS X Snow Leopard (10.6.8 ) Intel
PureBasic V 5.11(X64), V 5.21(x64)

Zum Lernen ist niemand zu alt.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

Mein Code ist 3.3 Versäucht ^^, aber da er sehr klein ist bekommst du das hin :

2 mal ist API drin, (bei den DesktopProceduren), aber das kannst du ja mit 4.0 ersetzten ;-)

Code: Alles auswählen

Global Only, Space

Procedure Aus(String$)
 Restore Aus
 Read Str$
 While Str$
  If FindString(String$, Str$, 1)
   Gefunden = 1
   If Str$ = " EndSelect " And Only 
    Only - 1
   EndIf
  EndIf
  Read Str$
 Wend
 ProcedureReturn Gefunden 
EndProcedure

Procedure Ein(String$)
 Restore Ein
 Read Str$
 While Str$
  If FindString(String$, Str$, 1) 
   Gefunden = 1
   If Str$ = " Select " And Only 
    Only + 1
   EndIf
  EndIf
  Read Str$
 Wend
 ProcedureReturn Gefunden 
EndProcedure

Procedure Mitte(String$)
 Restore Mitte
 Read Str$
 While Str$
  If FindString(String$, Str$, 1) 
   Gefunden = 1
  EndIf
  Read Str$
 Wend
 ProcedureReturn Gefunden 
EndProcedure

Procedure Only(String$)
 Restore Only
 Read Str$
 While Str$
  If FindString(String$, Str$, 1) 
   Gefunden = 1
  EndIf
  Read Str$
 Wend
 ProcedureReturn Gefunden 
EndProcedure

Procedure DesktopX()
 ProcedureReturn GetSystemMetrics_(0)
EndProcedure
Procedure DesktopY()
 ProcedureReturn GetSystemMetrics_(1)
EndProcedure

OpenWindow(1, DesktopX()/2-200, DesktopY()/2-50, 400, 60, #PB_Window_SystemMenu, "Automatische Einrücküberarbeitung")
 SetGadgetFont(LoadFont(1,"Arial Fett",8)) 
 CreateGadgetList(WindowID(1))
  TextGadget(1, 5, 9, 50, 20, "Datei:", #PB_Text_Right)
  StringGadget(2, 60, 5, 300, 20, "")
  ButtonGadget(3, 365, 5, 30, 20, "...")
  ProgressBarGadget(4, 5, 35, 290, 20, 0, 290, #PB_ProgressBar_Smooth) 
  ButtonGadget(5, 300, 35, 95, 20, "Start")
  DisableGadget(5,1)  
  
Repeat
 Event = WaitWindowEvent()
 Select Event
  Case #PB_EventCloseWindow
   End
  Case #PB_EventGadget
   Select EventGadgetID()
    Case 2
     FileName$ = GetGadgetText(2)
     If FileName$
      DisableGadget(5,0)
     Else
      DisableGadget(5,1)     
     EndIf
    Case 3
     FileName$ = OpenFileRequester("", "*.*", "*.pb", 0)
     SetGadgetText(2, FileName$)  
     If FileName$
      DisableGadget(5,0)
     Else
      DisableGadget(5,1)     
     EndIf
    Case 5
     DisableGadget(5,1)
     DisableGadget(3,1)
     DisableGadget(2,1)
     If FileName$
      FakeEndSelect  
      Gosub Umschreiben
     EndIf
     DisableGadget(3,0)
     DisableGadget(2,0)
     SetGadgetState(4, 0)
   EndSelect
 EndSelect
ForEver



Umschreiben:
 Space = 0
 Only = 0
 If ReadFile(1, FileName$)
  If CreateFile(2, FileName$+".pb")
   Repeat
    UseFile(1)
    If Random(10) :
     Loc = Int(Loc()/Lof()*290)
     SetGadgetState(4, Loc)
     WindowEvent()
    EndIf
    StringEcht$ = Trim(ReadString())
    ;Kommentare
    Pos = FindString(StringEcht$, ";", 1)
    If Pos  
     String$ = Mid(StringEcht$,1, Pos-1)
    Else
     String$ = StringEcht$
    EndIf
    ;String
    x = 1 : k = 0 :
    Repeat
     x = FindString(String$, Chr(34), x)
     If x
      If k
       String$ = Mid(String$, 1, xSave-1)+Mid(String$, x+1, Len(String$))
       x + 1
      Else
       xSave = x
       x + 1
      EndIf
      k = 1-k
     EndIf
    Until x = 0
    String$ = " "+String$+" "
    ;Bearbeitung I
    If Aus(String$) :
     Space - 1
     If Ein(String$) :
      Space + 1
     EndIf
    Else
     If Mitte(String$) :
      Space - 1
     EndIf
    EndIf
    If Only(String$) And Only :
     Only - 1
    EndIf
    ;Einbauen
    UseFile(2)
    WriteStringN(Space(Space)+Space(Only)+StringEcht$)
    ;Bearbeitung II
    If Ein(String$) :
     Space + 1
     If Aus(String$) :
      Space - 1
     EndIf
    Else
     If Mitte(String$) :
      Space + 1
     EndIf
    EndIf
    If Only(String$) :
     Only + 1
    EndIf
   Until Eof(1)
   CloseFile(2)
   F = MessageRequester("Info", "Datei wurde erfolgreich bearbeitet."+Chr(10)+"Datei jetzt öffnen ?", #PB_MessageRequester_YesNo) 
   If F = 6
    RunProgram(FileName$+".pb", "", 0)
   EndIf
  EndIf 
  CloseFile(1)
 Else
  MessageRequester("Fehler", "Datei konnte nicht geöffnet werden!", 0) 
 EndIf
Return



DataSection
 Aus:
  Data.s " EndIf ", " CompilerEndIf ", " Wend ", " Until ", " ForEver ", " Next ", " EndSelect ", " EndStructure ", " EndProcedure ", ""
 Ein:
  Data.s " If ", " CompilerIf ", " While ", " Repeat ", " For ", " Select ", " Structure ", " Procedure ", " Procedure.", ""
 Mitte:
  Data.s " Else ", " ElseIf ", ""
 Only:
  Data.s " Case ", " Default ", ""
EndDataSection
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Der Code den ts-soft verlinkt hat ist bereits auf Linux lauffähig und liegt auch als PB4.x-Source vor, vielleicht solltest du den eher Mac-Fit machen.
Antworten