Недокументированный компонент document в ScriptUI

  • Автор темы Автор темы SlavaBuck
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

SlavaBuck

Участник
Топикстартер
Сообщения
75
Реакции
30
Пытаясь найти ответ на вопрос @teatral http://forum.rudtp.ru/threads/kak-nastroit-target-application-v-estk-pri-zapuske.57271/ полез в папку Required установленного ExtendScript Toolkit CS6, очевидного решения не увидел, вместо этого в файле 80document-2.jsx (создание которого датировано аж 2009 годом) обнаружил ресурсную строку окна, в которой заметил компонент Document:
Код:
document        : Document
                    {
                        maximumSize    : [10000,10000],
                        preferredSize  : [390, 460],
                        alignment      : ['fill', 'fill' ],
                    }
Решил проверить:
Код:
var w = new Window("palette { myDoc:Document { } }");
И таки да, увидел новый компонент myDoc! При первом приближении в нём обнаружились следующие свойства (также с их значениями по умолчанию):
Код:
Type: Document
toString: [object Document]
valueOf: [object Document]
    text [String] = <![CDATA[]]>
    textselection [String] = <![CDATA[]]>
    wordLeft [String] = <![CDATA[]]>
    wordRight [String] = <![CDATA[]]>
    firstVisibleLine [Number] = 0
    lines [Lines] = [object Lines]
    tabs [Number] = 4
    convertTabs [Boolean] = false
    tabGuides [Boolean] = false
    readonly [Boolean] = false
    wrap [Boolean] = false
    lineNumbers [Boolean] = false
    bpMargin [Boolean] = false
    profiling [Number] = 0
    folding [Number] = 3
    lineEndings [String] = Windows
    showLineEndings [Boolean] = false
    bookmarks [Array] = <![CDATA[]]>
    activeStyle [Boolean] = false
    currentStyle [Number] = 0
    autoIndent [Number] = 2
    master [Null] = Null
    caretBackground [Boolean] = true
    __version__ [String] = Scintilla
    active [Boolean] = false
    shortcutKey [Undefined] = Undefined
    graphics [ScriptUIGraphics] = [object ScriptUIGraphics]
    visible [Boolean] = true
    bounds [5,18] = 15,15,115,186
    location [] = 15,15
    maximumSize [] = 1630,960
    minimumSize [] = 0,0
    preferredSize [] = 100,171
    size [] = 100,171
    windowBounds [5,18] = 15,15,115,186
    alignment [Undefined] = Undefined
    children [] = <![CDATA[]]>
    properties [Undefined] = Undefined
    enabled [Boolean] = true
    helpTip [String] = <![CDATA[]]>
    indent [Undefined] = Undefined
    parent [Window] = [object Window]
    textDirection [Number] = 1
    window [Window] = [object Window]
    type [String] = document
    lineNumber [Boolean] = true
К сожалению, сразу же выяснилось что использовать его полноценно можно только под ESTK и попытка запуска скрипта под специфический таргет, например #target indesign приводит превращает его в другой объект:
Код:
Type: Document
toString: [object Document]
valueOf: [object Document]
    BEFORE_PRINT [String] = beforePrint
    AFTER_PRINT [String] = afterPrint
    AFTER_NEW [String] = afterNew
    AFTER_OPEN [String] = afterOpen
    BEFORE_SAVE [String] = beforeSave
    AFTER_SAVE [String] = afterSave
    BEFORE_SAVE_AS [String] = beforeSaveAs
    AFTER_SAVE_AS [String] = afterSaveAs
    AFTER_LINKS_CHANGED [String] = afterLinksChanged
    BEFORE_SAVE_A_COPY [String] = beforeSaveACopy
    AFTER_SAVE_A_COPY [String] = afterSaveACopy
    BEFORE_REVERT [String] = beforeRevert
    AFTER_REVERT [String] = afterRevert
    BEFORE_CLOSE [String] = beforeClose
    BEFORE_EXPORT [String] = beforeExport
    AFTER_EXPORT [String] = afterExport
    BEFORE_IMPORT [String] = beforeImport
    AFTER_IMPORT [String] = afterImport
    FAILED_EXPORT [String] = failedExport
    BEFORE_DEACTIVATE [String] = beforeDeactivate
    AFTER_ACTIVATE [String] = afterActivate
    caretBackground [Boolean] = true
    lineNumber [Boolean] = true
    textDirection [Number] = 1
Это приводи к тому, что код под Indesign, как в этом примере:
Код:
var w = new Window("dialog { myDoc:Document{ text:'Text', alignment:['fill', 'fill'] }, preferredSize:[450,300], properties:{resizeable: true } }");
w.onResizing = w.onResize = function() { w.layout.resize(); }
w.show();
..отображает пустое окно Dialog, а под ESTK в нём уже содержится рабочий компонент.
Вот такая находка... Кто-то что-то знает про него?
 
Последнее редактирование модератором:
свойства похожи на настройки текстового редактора.

а под #target indesign Document - это индизайновский документ
 
Очень похоже. Похоже, что где то внутри Document, обработчики делают вызовы в стиле this[AFTER_SAVE](); А в текстовых AFTER_SAVE хранятся текстовые имена самих методов.
Учитывая дату исходника, компонент давно живёт в ESTK. Вопрос в том, что теперь с ним можно делать, и не пропал ли он в редакции CC?
П.С.
Ничего вменяемого более в файлах ESTK на эту тему не нашёл. Похоже что объект Document работает как указатель между двумя разными имплементациями, и как такового generic UI Document нет, а переключение происходит динамически в зависимости от carrent target...
 
Последнее редактирование:
Второе приближение дало следующую информацию:
Под ESTK объект Documen обладает следующими методами (информация получена с помощью ReflectInfo интерфейса самого объекта):
Код:
  addBookmark();
  addEventListener();
  append(text);
  canPaste();
  canRedo();
  canUndo();
  clearProfileData();
  clearStyles(name, size, fore, back, bold);
  clearUndo();
  comment();
  cut(copy);
  dispatchEvent();
  find(what);
  getBreakpoint(line);
  getBreakpoints(visible);
  getLogicalPos();
  getSelection();
  getWordAt(position);
  hide();
  insert(position);
  isModified();
  nextBookmark(forward);
  notify(event);
  paste();
  print();
  redo();
  removeAllBookmarks();
  removeBookmark();
  removeBreakpoint(line);
  removeEventListener();
  replace(what, with);
  scrollSelection();
  selectBraces();
  selectMatchingBrace();
  setBreakpoint(line, state, hits);
  setCurrentLine(line);
  setLexer(lexer, keywords);
  setLineBackground(line);
  setLogicalPos(number);
  setProfileData(line, hitcount);
  setSavePoint();
  setSelection(line1, arg2, line2, col2);
  setStyle(index, name, size, fore, back, bold);
  show();
  showAutoCompletion(autostrings);
  toSource();
  toggleBookmark();
  toggleFoldingAll();
  undo();
  update();
Под InDesign - ...reflect.methods ничего не возвращает, а под Illustarotor или Photoshop создать окно с компонентом Document вообще нельзя.
 
Под InDesign - ...reflect.methods ничего не возвращает, а под Illustarotor или Photoshop создать окно с компонентом Document вообще нельзя.
Это явно настройки документа в редакторе ESTK. Сам по себе редактор страшненький.
 
Статус
Закрыто для дальнейших ответов.