Seite 1 von 6

Automatische Einrücküberarbeitung

Verfasst: 05.07.2007 18:55
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)

Verfasst: 05.07.2007 19:05
von ts-soft
http://www.purebasic.fr/german/viewtopi ... 577#118577
Irgendwelche Unterschiede?

Gruß
Thomas

Verfasst: 05.07.2007 19:07
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

Verfasst: 05.07.2007 19:10
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

Verfasst: 05.07.2007 19:34
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

Verfasst: 05.07.2007 19:38
von X0r
Unpraktisch.

Verfasst: 05.07.2007 19:51
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

Re: Automatische Einrücküberarbeitung

Verfasst: 08.07.2007 11:46
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 ?

Verfasst: 08.07.2007 12:53
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

Verfasst: 08.07.2007 14:21
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.