Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Структурирование файла главного меню Total Commandera

 
Post new topic   Reply to topic    Total Commander Forum Index -> Секреты и советы printer-friendly view
View previous topic :: View next topic  
Author Message
Andrey_A



Joined: 10 Apr 2009
Posts: 394
Location: Сочи

Post (Separately) Posted: Sun Sep 19, 2010 20:37    Post subject: Структурирование файла главного меню Total Commandera Reply with quote

Тут, намедни, смотрел, разбирал файлы Wcmd_*.mnu разных языков и сборок... и пришла идея о создании скрипта по структурированию файла. В большинстве того, что я видел структура была либо по первому столбцу, либо как попало. Да и свой файл, в котором 3300 строк руки не добирались всё расставить на свои места. А после использования этого скрипта смотреть такие файлы стало намного веселее и приятнее. Испытывал примерно на 40 разных файлах, всё работает, но если будут какие-то дополнения со стороны профессионалов, я всегда за!
Code:
'===============================================================
' Структурирование файла Wcmd_*.MNU главного меню Total Commandera
' В параметрах вызова из TC должен быть прописано путь к файлу:
' "%%COMMANDER_PATH%%\Language\Wcmd_Rus.mnu"
' или открывать его подкурсором %P%N
' Автор Аверин Андрей 2010
'===============================================================
Option Explicit
Dim FSO, ListFile, SetList, Text, MyFile, i,k,sym,FF,F,P,L,ContrStr,Stroka,Probel,Space
Set FSO = CreateObject("Scripting.FileSystemObject")
     With WScript
         FF   = .Arguments(0)
      End With
         F = FSO.GetAbsolutePathName(CreateObject("WScript.Shell").ExpandEnvironmentStrings(FF))
         Set ListFile = FSO.OpenTextFile(F, 1)
  Text =  ""
  ContrStr = 0
  Space = 7           'изменить если нужен отступ больше или меньше
  P = 0                   
  Do While Not ListFile.AtEndOfStream
     SetList = ListFile.ReadLine
       Stroka = ""
       Probel = ""
       
       For i = 1 To Len(SetList)
                 sym = mid(SetList,i,1)
                      If sym = "P" or sym = "M" or sym = "E" or sym = "S" or sym = "H"or sym = ";" Then
                           If   sym = ";" Then
                                    L = 0
                           End If
                             k = i
                             i = Len(SetList)                       
                      End If
      Next
   If  SetList <> "" Then
       For i = k To Len(SetList)
                 sym = mid(SetList,i,1)
                 Stroka = Stroka & sym                       
      Next
   End If   
                      If P < 0 Then P = 0
                     
                      If  mid(Stroka ,1,1) = "P" Then
                                If  ContrStr = 1 Then
                                       P = P + Space
                                End If
                          L = P
                          ContrStr = 1
                      End If
                     
                      If  mid(Stroka ,1,1) = "M" Then
                                If  ContrStr = 2 Then
                                       P = P - Space
                                       ContrStr = 1
                                End If                     
                             L = P + Space
                      End If

                      If  Stroka = "MENUITEM SEPARATOR" Then
                                If  ContrStr = 2 Then
                                       P = P - Space
                                       ContrStr = 1
                                End If                     
                             L = P + Space*2
                      End If

                      If  mid(Stroka ,1,1) = "E" Then
                                If  ContrStr = 2 Then
                                       P = P - Space
                                End If
                          L = P
                          ContrStr = 2
                      End If                     

          For i = 1 To L
                Probel = Probel & " "   
          Next
             Text = Text & Probel & Stroka & vbNewLine
             L = 0
Loop

  FSO.CopyFile F, F & ".bak" ' За\Рас комментируйте если нужна копия файла
  Set MyFile= fso.CreateTextFile(F, True)
   MyFile.Write(Text)

   ListFile.Close
   Set ListFile = Nothing
   Set FSO = Nothing
   WScript.Quit


Last edited by Andrey_A on Sun Sep 19, 2010 21:05; edited 1 time in total
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 8504
Location: Россия, Саратов

Post (Separately) Posted: Sun Sep 19, 2010 20:57    Post subject: Reply with quote

Andrey_A
Не понял саму постановку проблемы. Что означает "по первой строке либо как попало", что конкретно предлагается взамен и что вообще понимается здесь под структурированием? Желательно уяснить это не из созерцания скрипта, а из удобопонятного комментария к оному.
Кстати, в конце скрипта, наверное "копия файлов"?
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
Andrey_A



Joined: 10 Apr 2009
Posts: 394
Location: Сочи

Post (Separately) Posted: Sun Sep 19, 2010 21:22    Post subject: Reply with quote

Поправил "по первому столбцу".
Дополняю. Вот я просматриваю файл меню и смотрю, а в нём команды записаны таким вот образом - без отступов на разных уровнях:
Code:
POPUP ""
MENUITEM ""
POPUP ""
MENUITEM ""
POPUP ""
MENUITEM ""
END_POPUP ""
MENUITEM ""
END_POPUP ""
MENUITEM SEPARATOR
MENUITEM ""
END_POPUP ""

Меню само работает, всё хорошо, но разобраться в нём не всегда легко, а если меню несколько листов, а если есть несколько уровней вложенности, а если не дай бог какая-то ошибка, то теряешь кучу времени на то, чтобы разобраться...
Скрипт преобразует тоже меню следующим образом, что гораздо удобнее в работе и приятнее глазу
Code:
POPUP ""
     MENUITEM ""
          POPUP ""
               MENUITEM ""
                    POPUP ""
                         MENUITEM ""
                    END_POPUP ""
               MENUITEM ""
         END_POPUP ""
            MENUITEM SEPARATOR
     MENUITEM ""
END_POPUP ""

К примеру, тот же самый скрипт я бы выложил без пробелов, без отступов...
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 8504
Location: Россия, Саратов

Post (Separately) Posted: Sun Sep 19, 2010 21:34    Post subject: Reply with quote

Andrey_A
Угу, теперь стало несколько понятнее. Хотя, скажем, в нашей русификации для меню отступы используются и принцип "чем глубже — тем правее" вроде бы никогда не нарушался. А для разбирательства с меню лично я предпочитаю Main Menu Editor, где вся эта структура отображается в виде дерева и отступов не быть просто не может. Впрочем, это дело вкуса, конечно.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 11588
Location: Москва

Post (Separately) Posted: Sun Sep 19, 2010 22:33    Post subject: Reply with quote

Avada wrote:
А для разбирательства с меню лично я предпочитаю Main Menu Editor
В котором до сих пор не решена проблема с юникодностью mnu.

Поэтому отдаю дань уважения проделанной работе Андрея. Молодец!
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 8504
Location: Россия, Саратов

Post (Separately) Posted: Sun Sep 19, 2010 22:53    Post subject: Reply with quote

Flasher wrote:
В котором до сих пор не решена проблема с юникодностью mnu.

Для начала его надо убедить, что это в самом деле проблема, требующая безусловного решения... Впрочем, поскольку начался очередной этап моего общения с автором по поводу новой версии пакета, мы к этому вопросу ещё вернёмся. Но не здесь и не сейчас.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Секреты и советы All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group