Scripts discussion (2)

Discuss and announce AkelPad plugins
Locked
  • Author
  • Message
Offline
Site Admin
Posts: 6411
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Lenchik
Если только так:
- включить цветовую тему для CodePoster.js - Call("Coder::Settings", 5, "COLORTHEME")
- запустить CodePoster.js
- вернуть обратно цветовую тему.

Offline
Posts: 366
Joined: Mon Jan 10, 2011 5:28 pm
Contact:

Post by Lenchik »

Раз другого выхода нет, то пусть так. Как будет выглядеть состыкованная строчка, которую можно вписать в меню?

Offline
Posts: 88
Joined: Sun Jun 03, 2012 8:15 am

Post by Visitor7 »

KDJ
Спасибо, ваш ответ и пример скрипта очень помогли. Я полный ноль в программировании, сам только и могу копировать как обезьяна или перебирать возможные варианты методом научного тыка)))

Вот такой симпатичный скрипт получился(с поддержкой menubar):

Code: Select all

// BarSwitch.js 	ver.1.2 	2012-06-13
// Циклично переключает состояния менюбара, тулбара, статусбара и таббара по заданным параметрам.
// ОСТОРОЖНО, СДЕЛАНО ЛАМЕРОМ
// Вызов: Call("Scripts::Main", 1, "BarSwitch.js", "m s1 [s2 s3 s4 ...]")
//    где m - маска баров, целое от 1 до 15:
//      0x0001 (1)  -  обрабатывать менюбар
//      0x0010 (2)  -  обрабатывать тулбар	(необходим плагин toolbar.dll)
//      0x0100 (4)  -  обрабатывать таббар
//      0x1000 (8)  -  обрабатывать статусбар
//    s1 [s2 s3 s4 ...] - состоянния, целое от 0 до 31, не должны повторяться:
//      0x00001 (1)  -  состоянние менюбара 	(0 - выключен, 1 - включен)
//      0x00010 (2)  -  состоянние тулбара	(0 - выключен, 1 - включен)
//      0x00100 (4)  -  состоянние таббара	(0 - выключен, 1 - включен)
//      0x01000 (8)  -  состоянние статусбара	(0 - выключен, 1 - включен)
//      0x01000 (16)  -  положение таббара 	(0 - сверху, 1 - снизу)
// Примеры: 
//    Call("Scripts::Main", 1, "BarSwitch.js", "4 4 0")
//       Включает/выключает таббар(сверху).
//    Call("Scripts::Main", 1, "BarSwitch.js", "1 1 0")
//       Включает/выключает менюбар.
//    Call("Scripts::Main", 1, "BarSwitch.js", "14 14 0")
//       Включает/выключает таббар(сверху), тулбар и статусбар.
//    Call("Scripts::Main", 1, "BarSwitch.js", "4 4 20 0")
//       1. Включает таббар сверху; 2. переключает таббар вниз; 3. выключает таббар... далее сначала.
//    Call("Scripts::Main", 1, "BarSwitch.js", "11 1 9 10")
//       1. Выключает тулбар и статусбар, включает менюбар; 2. включает статусбар; 3. включает тулбар и отключает менюбар... далее с начала.

// Variables			 ///////////////////////////////
var hMainWnd=AkelPad.GetMainWnd();
var xState=0;
var i;
var bMask = WScript.Arguments(0);

// Calculate current state 	///////////////////////////////
if ((bMask & 8) || (bMask & 4)) 	    					///tab or status
   var tState = AkelPad.SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 157 /*MI_TABOPTIONSMDI*/, 0);
if (!(tState & 1) && (bMask & 4)) 	    	  			///tabbar
  {                                              	//  if (tState & 1) TAB_VIEW_NONE           
   xState += 4;                                  	//  if (tState & 2) TAB_VIEW_TOP              
   if (tState & 4)                        		//  if (tState & 4) TAB_VIEW_BOTTOM      
       xState += 16;
  }
if (bMask & 8) 									///statusbar
 {
  var sState = AkelPad.SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 142 /*MI_STATUSBAR*/, 0);
  if (sState)
      xState += 8;
  }
if (bMask & 2) 									///toolbar
 {
  var ptState = AkelPad.IsPluginRunning("ToolBar::Main"); 	
  if (ptState)
      xState += 2;
  }
if (bMask & 1)									///menubar
  {
   var pmState = AkelPad.IsPluginRunning("ContextMenu::Main");
   var hMainMenu = AkelPad.SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 21 /*MI_MENUMAIN*/, 0);
   var oSys  = AkelPad.SystemFunction();
   var mState  = oSys.Call("User32::GetMenu", hMainWnd);
   if (mState)
        xState += 1;
  }

//Search next state in list		///////////////////////////////
  for (i=1; i < WScript.Arguments.Length; ++i)
  {
    if (WScript.Arguments(i) == xState)
      break;
  }
  if (++i >= WScript.Arguments.Length) i=1;
  var nState = (WScript.Arguments(i) & (16 | bMask));

//Set next state			///////////////////////////////
if (((nState & 4) != (xState & 4)) || ((nState & 16) != (xState & 16)))  	///tabbar
  {
  if (!(nState & 4))
     AkelPad.Command(4303 /*IDM_WINDOW_TABVIEW_NONE*/);
  if ((nState & 4) && (nState & 16))
     AkelPad.Command(4302 /*IDM_WINDOW_TABVIEW_BOTTOM*/);
  if ((nState & 4) && !(nState & 16))
     AkelPad.Command(4301 /*IDM_WINDOW_TABVIEW_TOP*/);
  }
if ((nState & 8) != (xState & 8)) 						///statusbar
   {
   AkelPad.Command(4211 /*IDM_VIEW_SHOW_STATUSBAR*/);  
       if (((tState & 4) && !(nState & 16) && (nState & 8)) || ((nState & 16) && (nState & 8))) 	// Баг включения статусбара если таббар уже включен внизу.
          {												// Требуется как-то перерисовать окно.??
           AkelPad.Command(4331 /*IDM_WINDOW_CHANGESIZE*/);
           AkelPad.Command(4331 /*IDM_WINDOW_CHANGESIZE*/);
          }  
   }
if ((nState & 2) != (xState & 2)) 						///toolbar
   AkelPad.Call("ToolBar::Main");
if ((nState & 1) != (xState & 1)) 						///menubar
  {
     if (!mState)
       {
        oSys.Call("User32::SetMenu", hMainWnd, hMainMenu);
        if (pmState)   // Пункты contextMenu.dll не появляются при включении меню, перезапуск плагина.
           {
            AkelPad.Call("ContextMenu::Main", 10); // Если не переоткрывается, подобрать паузу между.	
            AkelPad.Call("ContextMenu::Main", 10); // WScript.Sleep(50);  
           }
      }
    else
         oSys.Call("User32::SetMenu", hMainWnd, 0);
  }

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

Visitor7
Place your script in Scripts collection.

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

ChooseFont_function.js
Added function: ConvertFontFormat().

Offline
Posts: 3243
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Visitor7
Всё-таки список для цикличности лучше хранить в ini или param-файле, а в аргументы передавать жёстко устанавливаемый шрифт (не циклично). Получается гибко, универсально и обе возможности поддерживаются (жёстко задавать и циклично менять).

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

I noticed strange behavior. After executing following script, CodeFold disappears:

Code: Select all

if (AkelPad.IsPluginRunning("Coder::CodeFold"))
  AkelPad.Call("Coder::CodeFold");
if (AkelPad.IsPluginRunning("LineBoard::Main"))
  AkelPad.Call("LineBoard::Main");

WScript.Sleep(1000);
AkelPad.Call("Coder::CodeFold");
WScript.Sleep(1000);
AkelPad.Call("LineBoard::Main", 1);
WScript.Echo("The End");

Offline
Posts: 3243
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

FeyFre
XMLValidator.js кажет такое:
Validation error(125,3):
Элемент ''document'' используется, но не был объявлен в DTD/Schema.
На самом деле document в схеме определён, видимо проверка происходит по какой-то внутренней схеме, вне зависимости от того, что указано:

Code: Select all

<!DOCTYPE document SYSTEM 'xmlschemas/domino_8_5_3.dtd'>
<document xmlns='http://www.lotus.com/dxl' ... >
Вопрос: можно ли как-то передать валидатору либо URL либо путь к файлу на диске, по которому находится схема, чтобы он её использовал? Если можно, то надо бы допилить скрипт.

Offline
Posts: 2248
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

VladSh, попытаюсь разобраться.
Мне не помешал бы пример.
Что сразу могу сказать, возможно ссылки с относительными путями(на разное) будут совсем не доступны, ибо валидация выполняется из памяти, и относительно чего разрешать ссылки нету.
1. Попробуйте на строке 33 поставить xml.resolveExternals = true; - свойство касается в том числе и ссылок на DTD.
2. На строке 47 вместо xml.loadXML(text) поставить xml.load(GetEditFile(0))
(т.е. парсер сам читает файл, и имеет откуда разрешать относительные пути). - у себя пробовал на .fb2 файле

Code: Select all

<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE FictionBook SYSTEM 'fb2.dtd'>
<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink">
пропускает, но теперь матерится на само "<!DOCTYPE FictionBook SYSTEM 'fb2.dtd'>" "External ID is invalid." Тут честно так на ходу и не знаю чего думать. Гугл советует тем у кого такое выскакивает не использовать DOCTYPE вообще, но то крайние случаи. Так сходу ничего не скажу.

Offline
Posts: 3243
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

FeyFre

Code: Select all

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE document SYSTEM 'xmlschemas/domino_8_5_3.dtd'>
<document xmlns='http://www.lotus.com/dxl' version='8.5' maintenanceversion='3.0' replicaid='C22576BE0030F7DE' form='DocSZ'>
   <noteinfo noteid='1486e' unid='C8FD07DC011A5C0FC2257951007898E2' sequence='2'>
      <created>
         <datetime>20111123T235714,58+02</datetime>
      </created>
      <modified>
         <datetime>20111125T174051,88+02</datetime>
      </modified>
      <revised>
         <datetime>20111123T235836,20+02</datetime>
      </revised>
      <lastaccessed>
         <datetime>20111125T174051,87+02</datetime>
      </lastaccessed>
      <addedtofile>
         <datetime>20111123T235832,58+02</datetime>
      </addedtofile>
   </noteinfo>
   <item name='AuthorDuty'><text>биг босс</text></item>
   <item name='AuthorRang'><text>1</text></item>
   <item name='AuthorFIO'><text>Авторов А.Л.</text></item>
   <item name='TypeCode'><text/></item>
   <item name='TypeMode'><text>1</text></item>
   <item name='AcsARoles' authors='true' names='true'><textlist><text>[Office]</text><text>[FullView]</text></textlist></item>
   <item name='AcsRRoles' names='true' readers='true'><textlist><text>[Office]</text><text>[FullView]</text></textlist></item>
   <item name='OutNumber0'><text>7/DEV</text></item>
   <item name='$WebFlags'><text>V</text></item>
   <item name='Text'>
      <richtext>
         <pardef id='2' leftmargin='0' firstlineleftmargin='0.3938in' keepwithnext='true' keeptogether='true'/>
            <par def='2'>аввв</par>
            <par def='2'>
               <attachmentref name='Вступ.doc' displayname='Вступ.doc'>
                  <picture height='34px' width='64px'>
                     <notesbitmap>
                        lQAmAAAAAAAAAAAAAAABAAAAAAAAAEAAIgAIAAEACAABAHwAAgCWABAEAAAAAAAAAAAAACIA/gNA
                     </notesbitmap>
                     <caption>Вступ.doc</caption>
                  </picture>
               </attachmentref>
            </par>
         <par def='2'>читайте, науй</par>
      </richtext>
   </item>
   <item name='FormN'><text>Служебная записка</text></item>
   <item name='Subject'><text>методика, вступление</text></item>
   <item name='$FILE' summary='true' sign='true' seal='true'>
      <object>
         <file hosttype='msdos' compression='none' flags='storedindoc' encoding='none' name='Вступ.doc' size='24576' storagesize='8592' desiredcompression='huffman'>
            <created>
               <datetime>20111123T140133,39+02</datetime>
            </created>
            <modified>
               <datetime>20111123T140133,72+02</datetime>
            </modified>
            <filedata>
               0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAAKwAAAAAAAAAA
            </filedata>
         </file>
      </object>
   </item>
</document>


Смотрел файл domino_8_5_3.dtd у себя на компе, так именно в нём нету определения document'а, но есть в файле domino_8_5_3.xsd, может в этом трабл?
Для интереса в xml'ине заменил dtd на xsd, но это никак не повлияло.

Код заменил, теперь выдаёт:
XMLValidator.js wrote:Validation error(57,2):
Системе не удается найти указанный путь.
Ошибка при обработке ресурса ''xmlschemas/domino_8_5_3.dtd''.
Сегодня тестил xslt стандартным tranfrormer'ом Java, он тоже ругался, что что-то в document'е не то, методом тыка определил, что почему-то не воспринимается xmlns='http://www.lotus.com/dxl', убирал здесь, но не помогло, видимо зависит от конкретного xslt-парсера.
Last edited by VladSh on Wed Jun 20, 2012 6:05 am, edited 1 time in total.

Offline
Posts: 88
Joined: Sun Jun 03, 2012 8:15 am

Post by Visitor7 »

VladSh wrote:Всё-таки список для цикличности лучше хранить в ini или param-файле, а в аргументы передавать жёстко устанавливаемый шрифт (не циклично).
Зачем скрипту передавать жестко установленный шрифт(не циклично), если для этого проще использовать стандартную команду контекстменю/хоткей - Font(Name, Type, Size)?
VladSh wrote:Получается гибко, универсально и обе возможности поддерживаются (жёстко задавать и циклично менять).
Гибкость токо теряется. Я тогда не смогу на одну кнопку назначить один цикл переключения, на другую - другой, на третью просто переключение нескольких размеров, на четвертую болд/нормал и т.п. в зависимости от задач. Или мне нужно будет плодить копии этого скрипта. А такое построение позволяет всё что хочешь и сразу, на одной копии, разделяй и властвуй.

Offline
Posts: 3243
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Visitor7
Согласен, первый вопрос снимается.
Можно хранить группы параметров в ini и аргументом передавать имя группы, но это и правда не сильно удобно.

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

ScreenView.js
Added:
- Font (required to include ChooseFont_function.js),
- SpecialChar,
- TabBar,
- Plugins settings.

Offline
Posts: 3243
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Откорретированы:
selCompleteLine.js: исправлена ошибка в left, добавлена функция separateRow (спасибо Infocatcher'у);
XMLStructure.js: согласно вышеуказанным изменениям.

Offline
Posts: 88
Joined: Sun Jun 03, 2012 8:15 am

Post by Visitor7 »

KDJ wrote:I noticed strange behavior. After executing following script, CodeFold disappears:
Не воспроизводится. Я даже паузы убирал, CodeFold либо включается либо остается. Единственное что заметил - он типа умный и на текстовых файлах не отображается, только на файлах с расширением js, h, с и т.п.
Возможно, вы не увидели его потому, что у вас была открыта вкладка с иным расширением?
Locked