It3-FolioViews-HitpMcs
senso-concept-Mcs

Mcsh-creation:: {2025-09-15}

overview of It3

description::
it.nfo is part of it.nfo.

name::
* McsEngl.it.nfo,

FvMcs.Cmrpgm.DEVICE-DRIVER

name::
* McsEngl.conceptIt429,
* McsEngl.Cmrpgm.DEVICE-DRIVER@cptIt,
* McsEngl.FvMcs.Cmrpgm.DEVICE-DRIVER@cptIt,
* McsEngl.device-driver-program@cptIt429, {2012-05-28}
* McsEngl.program.DeviceDriver@cptIt429,
* McsEngl.program.system.devicedriver@cptIt429,

DEFINITION

Function 444-6

It is <system program> that directly control peripheral hardware.

GENERIC

_GENERIC:
* PROGRAM#cptIt59#

SPECIFIC

Specific_concepts (level 3) =


emm386.exe#cptIt606: attSpe#
himem.sys#cptIt636: attSpe#
lemm#cptIt673: attSpe#
mciaap.drv#cptIt690: attSpe#
microsoft mouse#cptIt709: attSpe#
speaker.drv#cptIt817: attSpe#

FvMcs.Cmrpgm.CODE-EDITOR (pmce)

name::
* McsEngl.conceptIt991,
* McsEngl.Cmrpgm.CODE-EDITOR (pmce)@cptIt,
* McsEngl.FvMcs.Cmrpgm.CODE-EDITOR (pmce)@cptIt,
* McsEngl.code-editor@cptIt,
* McsEngl.editor@cptIt,
* McsEngl.editor-program@cptIt991,
* McsEngl.editor.text@cptIt991,
* McsEngl.program.editor@cptIt991,
* McsEngl.program.code-editor@cptIt991,
* McsEngl.program.source-code-editor@cptIt991,
* McsEngl.source-code-editor@cptIt991,
* McsEngl.text-editor@cptIt,
* McsEngl.pgmSce@cptIt, {2016-08-30}
* McsEngl.pmce@cptIt, {2016-08-25}
* McsEngl.pgmEdr@cptIt,
====== lagoGreek:
* McsElln.ΔΙΟΡΘΩΤΗΣ-ΚΕΙΜΕΝΟΥ@cptIt,
* McsElln.κειμενογράφος-απλού-κειμένου@cptIt,
* McsElln.ΣΥΝΤΑΚΤΗΣ@cptIt,

ΣΥΝΤΑΚΤΗΣ είναι το όνομα από το βιβλίο "Ανάπτυξη εφαρμογών..." Γ' λυκείου, Βακάλη κα, 1999

ΔΙΟΡΘΩΤΗΣ ΚΕΙΜΕΝΟΥ:
* Αντωνάκος κα, "Ανάπτυξη εφαρμογών..." Γ' Λυκείου, 1999 α' έκδοση

DEFINITION

EDITOR is a program for writting PLAIN text.
[nikos 1997dec19]

pmce'GENERIC

_GENERIC:
* DOCUMENT MANAGEMENT PROGRAM#cptIt426#
* PROGRAM#cptItsoft59#

pmce'Programing-language

name::
* McsEngl.pmce'Programing-language@cptIt,

pmce'Archetype

name::
* McsEngl.pmce'Archetype@cptIt,

_DESCRIPTION:
Code-documents.
[hmnSngo.2016-08-25]

pmce'Model (algorithm)

name::
* McsEngl.pmce'Model (algorithm)@cptIt,

pmcealgo'Command (cmd)

name::
* McsEngl.pmcealgo'Command (cmd)@cptIt,

BOOKMARK SETTING

EDDITING

FILE MANAGEMENT

HELP

INDEXING

PRINTING

SPELLING

pmcealgo'Configuring (cfg)

name::
* McsEngl.pmcealgo'Configuring (cfg)@cptIt,

pmcealgo'User-interface (uri)

name::
* McsEngl.pmcealgo'User-interface (uri)@cptIt,

pmcealgo'code'file#cptIt354#

name::
* McsEngl.pmcealgo'code'file@cptIt,

pmce'doing#cptCore475#

name::
* McsEngl.pmce'doing@cptIt,

PROGRAM USE

pmce'installing#cptIt162#

name::
* McsEngl.pmce'installing@cptIt,

SPECIFIC

pmce.specific,

_SPECIFIC:
* Ed#cptItsoft604#
* Emacs#cptItsoft605#
* JEdit#cptItsoft1207#
* Jext#cptItsoft1206#
* nodepad++#ql:npp@cptIt#
* PFE (ZD3)
* TextPad (ZD3)
* UltraEdit
* unipad: unicode-editor (www.unipad.org)
* Ve#cptItsoft853#
* Vedit#cptItsoft854#

_SPECIFIC:
* html-editor
* markdown-editor
* java-editor
* js-editor

pmce.ATOM (pae)

name::
* McsEngl.pmce.ATOM (pae)@cptIt,
* McsEngl.atom-editor@cptIt,

* McsEngl.editor.Atom@cptIt,
* McsEngl.pgmCmrAtom@cptIt,

* McsEngl.pae@cptIt,
* McsEngl.ame@cptIt,
* McsEngl.atmedr@cptIt,
* McsEngl.pgmAtm@cptIt,

_ADDRESS.WPG:
* https://atom.io//

_DESCRIPTION:
Atom is a desktop application built with HTML, JavaScript, CSS, and Node.js integration. It runs on Electron, a framework for building cross platform apps using web technologies.
[https://atom.io/]

pgmAtom'INSTALLING

name::
* McsEngl.pgmAtom'INSTALLING@cptIt,

_DESCRIPTION:
Atom is available with a Windows installer that can be downloaded from https://atom.io or from Atom Releases named AtomSetup.exe . This setup program will install Atom, add the atom and apm commands to your PATH , create shortcuts on the desktop and in the start menu, add an "Open with Atom" context menu in the Explorer and make Atom available for association with files using "Open with...".
[http://flight-manual.atom.io/getting-started/sections/installing-atom/]

_ADDRESS.WPG:
* http://tipsonubuntu.com/2016/08/05/install-atom-text-editor-ubuntu-16-04//

pgmAtom'Programing-language

name::
* McsEngl.pgmAtom'Programing-language@cptIt,

_DESCRIPTION:
Is coffeescript required for developing plug-ins?
JavaScript and JSON can be used in Atom packages, there is no requirement to write a single line of CoffeeScript or CSON to make an Atom package.

In Atom any .coffee/.cson/.less files can always be .js/.json/.css files instead.

So you can have ~/.atom/config.json instead of ~/.atom/config.cson if you prefer a JSON config file and Atom will write your settings back out to JSON when you change them in the Settings view (cmd-,).
[https://discuss.atom.io/t/is-coffeescript-required-for-developing-plug-ins/65/4]
===
Atom is written using web technologies.
[https://github.com/blog/2231-building-your-first-atom-plugin]

_SPECIFIC:
* HML,
* CSS, LESS,
* ljs (javascript),
* ljn (Node.js),
===
* JSON,
* CSON,

pgmAtom'Archetype

name::
* McsEngl.pgmAtom'Archetype@cptIt,

pgmAtom'Model (algorithm)

name::
* McsEngl.pgmAtom'Model (algorithm)@cptIt,

pgmAtom'Ui-cmd

name::
* McsEngl.pgmAtom'Ui-cmd@cptIt,

paecmd'Add

name::
* McsEngl.paecmd'Add@cptIt,

_DESCRIPTION:
You can add the following code to your init.coffee file:
atom.commands.add 'atom-text-editor', 'custom:cut-line', ->
editor = atom.workspace.getActiveTextEditor()
editor.selectLinesContainingCursors()
editor.cutSelectedText()

You can get the code to execute from the source by searching for strings in the command palette. And once you have a command created, you can map a key to it by editing your keymap.cson file:
'atom-text-editor':
'alt-cmd-z': 'custom:cut-line'
[http://stackoverflow.com/a/24456996]

paecmd'Shortcut (paeshc)

name::
* McsEngl.paecmd'Shortcut (paeshc)@cptIt,
* McsEngl.pae'shortcut@cptIt,
* McsEngl.pae'keybinding@cptIt,
* McsEngl.pae'keymap@cptIt,

_NOTATION:
C=Ctrl
S=Shift
A=Alt

paeshc.A, paeshc.MenubarToggle:
* toggle menubar

paeshc.A_L, paeshc.Character_table:
* search by: unicode name, hex number, vim shortcuts,

paeshc.C_backslash, paeshc.Tree_view:
toggle tree-view of files.

paeshc.C_comma, paeshc.Settings_menu:
* open settings menu

paeshc.CS_P, paeshc.Command_Palette:
In that welcome screen, we are introduced to probably the most important command in Atom, the Command Palette. If you press Ctrl+Shift+P while focused in an editor pane, the command palette will pop up.
This search-driven menu can do just about any major task that is possible in Atom. Instead of clicking around all the application menus to look for something, you can press Ctrl+Shift+P and search for the command.
[http://flight-manual.atom.io/getting-started/sections/atom-basics/#command-palette]

1.Keystroke 2.Command 3.Source 4.Selector

Keystroke  Command  Source  Selector
paeshc.a  tree-view:add-file  Tree View  .tree-view
paeshc.alt_1  pane:show-item-1  Core  body
paeshc.alt_2  pane:show-item-2  Core  body
paeshc.alt_3  pane:show-item-3  Core  body
paeshc.alt_4  pane:show-item-4  Core  body
paeshc.alt_5  pane:show-item-5  Core  body
paeshc.alt_6  pane:show-item-6  Core  body
paeshc.alt_7  pane:show-item-7  Core  body
paeshc.alt_8  pane:show-item-8  Core  body
paeshc.alt_9  pane:show-item-9  Core  body
paeshc.alt_\  tree-view:toggle-focus  Tree View  .platform-win32, .platform-linux
paeshc.alt_b  editor:move-to-beginning-of-word  Core  atom-text-editor
paeshc.alt_backspace  editor:delete-to-beginning-of-subword  Core  atom-workspace atom-text-editor
paeshc.alt_cmd_t  notifications:trigger-error  Notifications  atom-workspace
paeshc.alt_d  editor:delete-to-end-of-word  Core  atom-text-editor
paeshc.alt_delete  editor:delete-to-end-of-subword  Core  atom-workspace atom-text-editor
paeshc.alt_down  native!  Core  body .native-key-bindings
paeshc.alt_enter  find-and-replace:find-all  Find And Replace  .platform-win32 .find-and-replace, .platform-linux .find-and-replace
paeshc.alt_f  editor:move-to-end-of-word  Core  atom-text-editor
paeshc.alt_f3  find-and-replace:select-all  Find And Replace  .platform-win32 atom-text-editor, .platform-linux atom-text-editor
paeshc.alt_g.b  open-on-github:blame  Open On GitHub  atom-workspace
paeshc.alt_g.c  open-on-github:copy-url  Open On GitHub  atom-workspace
paeshc.alt_g.d  git-diff:toggle-diff-list  Git Diff  atom-text-editor
paeshc.alt_g.down  git-diff:move-to-next-diff  Git Diff  atom-text-editor
paeshc.alt_g.g  open-on-github:repository  Open On GitHub  atom-workspace
paeshc.alt_g.h  open-on-github:history  Open On GitHub  atom-workspace
paeshc.alt_g.i  open-on-github:issues  Open On GitHub  atom-workspace
paeshc.alt_g.o  open-on-github:file  Open On GitHub  atom-workspace
paeshc.alt_g.r  open-on-github:branch-compare  Open On GitHub  atom-workspace
paeshc.alt_g.up  git-diff:move-to-previous-diff  Git Diff  atom-text-editor
paeshc.alt_h  editor:delete-to-beginning-of-word  Core  atom-text-editor
paeshc.alt_l  character-table:toggle  Character Table  atom-workspace
paeshc.alt_left  native!  Core  body .native-key-bindings
paeshc.alt_left  editor:move-to-previous-subword-boundary  Core  atom-workspace atom-text-editor
paeshc.alt_left  tree-view:recursive-collapse-directory  Tree View  .tree-view
paeshc.alt_right  native!  Core  body .native-key-bindings
paeshc.alt_right  editor:move-to-next-subword-boundary  Core  atom-workspace atom-text-editor
paeshc.alt_right  tree-view:recursive-expand-directory  Tree View  .tree-view
paeshc.alt_shift_B  editor:select-to-beginning-of-word  Core  atom-text-editor
paeshc.alt_shift_F  editor:select-to-end-of-word  Core  atom-text-editor
paeshc.alt_shift_S  snippets:available  Snippets  atom-text-editor:not([mini])
paeshc.alt_shift_S  snippets:available  Snippets  .available-snippets atom-text-editor[mini]
paeshc.alt_shift_down  native!  Core  body .native-key-bindings
paeshc.alt_shift_left  native!  Core  body .native-key-bindings
paeshc.alt_shift_left  editor:move-selection-left  Core  body
paeshc.alt_shift_left  editor:select-to-previous-subword-boundary  Core  atom-workspace atom-text-editor
paeshc.alt_shift_right  native!  Core  body .native-key-bindings
paeshc.alt_shift_right  editor:move-selection-right  Core  body
paeshc.alt_shift_right  editor:select-to-next-subword-boundary  Core  atom-workspace atom-text-editor
paeshc.alt_shift_up  native!  Core  body .native-key-bindings
paeshc.alt_up  native!  Core  body .native-key-bindings
paeshc.backspace  native!  Core  body .native-key-bindings
paeshc.backspace  core:backspace  Core  body
paeshc.backspace  tree-view:remove  Tree View  .tree-view
paeshc.cmd_down  native!  Core  body .native-key-bindings
paeshc.cmd_left  native!  Core  body .native-key-bindings
paeshc.cmd_right  native!  Core  body .native-key-bindings
paeshc.cmd_up  native!  Core  body .native-key-bindings
paeshc.ctrl_+  window:increase-font-size  Core  body
paeshc.ctrl_+  image-view:zoom-in  Image View  .platform-win32 .image-view
paeshc.ctrl_+  markdown-preview:zoom-in  Markdown Preview  .platform-win32 .markdown-preview, .platform-linux .markdown-preview
paeshc.ctrl_,  application:show-settings  Core  body
paeshc.ctrl_,  settings-view:open  Settings View  .platform-win32, .platform-linux
paeshc.ctrl_-  window:decrease-font-size  Core  body
paeshc.ctrl_-  image-view:zoom-out  Image View  .platform-win32 .image-view
paeshc.ctrl_-  markdown-preview:zoom-out  Markdown Preview  .platform-win32 .markdown-preview, .platform-linux .markdown-preview
paeshc.ctrl_.  key-binding-resolver:toggle  Keybinding Resolver  .platform-win32
paeshc.ctrl_/  editor:toggle-line-comments  Core  atom-workspace atom-text-editor:not([mini])
paeshc.ctrl_0  window:reset-font-size  Core  body
paeshc.ctrl_0  image-view:reset-zoom  Image View  .platform-win32 .image-view
paeshc.ctrl_0  markdown-preview:reset-zoom  Markdown Preview  .platform-win32 .markdown-preview, .platform-linux .markdown-preview
paeshc.ctrl_1  tree-view:open-selected-entry-in-pane-1  Tree View  .platform-win32 .tree-view, .platform-linux .tree-view
paeshc.ctrl_2  tree-view:open-selected-entry-in-pane-2  Tree View  .platform-win32 .tree-view, .platform-linux .tree-view
paeshc.ctrl_3  tree-view:open-selected-entry-in-pane-3  Tree View  .platform-win32 .tree-view, .platform-linux .tree-view
paeshc.ctrl_4  tree-view:open-selected-entry-in-pane-4  Tree View  .platform-win32 .tree-view, .platform-linux .tree-view
paeshc.ctrl_5  tree-view:open-selected-entry-in-pane-5  Tree View  .platform-win32 .tree-view, .platform-linux .tree-view
paeshc.ctrl_6  tree-view:open-selected-entry-in-pane-6  Tree View  .platform-win32 .tree-view, .platform-linux .tree-view
paeshc.ctrl_7  tree-view:open-selected-entry-in-pane-7  Tree View  .platform-win32 .tree-view, .platform-linux .tree-view
paeshc.ctrl_8  tree-view:open-selected-entry-in-pane-8  Tree View  .platform-win32 .tree-view, .platform-linux .tree-view
paeshc.ctrl_9  image-view:zoom-to-fit  Image View  .platform-win32 .image-view
paeshc.ctrl_9  tree-view:open-selected-entry-in-pane-9  Tree View  .platform-win32 .tree-view, .platform-linux .tree-view
paeshc.ctrl_:  spell-check:correct-misspelling  Spell Check  .platform-win32 atom-text-editor
paeshc.ctrl_:  core:cancel  Spell Check  .platform-win32 .corrections atom-text-editor
paeshc.ctrl_<  editor:scroll-to-cursor  Core  atom-workspace atom-text-editor:not([mini])
paeshc.ctrl_=  window:increase-font-size  Core  body
paeshc.ctrl_=  image-view:zoom-in  Image View  .platform-win32 .image-view
paeshc.ctrl_=  markdown-preview:zoom-in  Markdown Preview  .platform-win32 .markdown-preview, .platform-linux .markdown-preview
paeshc.ctrl_[  editor:outdent-selected-rows  Core  atom-workspace atom-text-editor:not([mini])
paeshc.ctrl_[  tree-view:collapse-directory  Tree View  .tree-view
paeshc.ctrl_\  tree-view:toggle  Tree View  .platform-win32, .platform-linux
paeshc.ctrl_]  editor:indent-selected-rows  Core  atom-workspace atom-text-editor:not([mini])
paeshc.ctrl_]  bracket-matcher:remove-brackets-from-selection  Bracket Matcher  atom-text-editor
paeshc.ctrl_]  tree-view:expand-item  Tree View  .tree-view
paeshc.ctrl__  window:decrease-font-size  Core  body
paeshc.ctrl__  image-view:zoom-out  Image View  .platform-win32 .image-view
paeshc.ctrl__  markdown-preview:zoom-out  Markdown Preview  .platform-win32 .markdown-preview, .platform-linux .markdown-preview
paeshc.ctrl_a  core:select-all  Core  atom-workspace atom-text-editor
paeshc.ctrl_alt_-  pane:decrease-size  Core  atom-workspace atom-pane
paeshc.ctrl_alt_.  bracket-matcher:close-tag  Bracket Matcher  .platform-win32 atom-text-editor
paeshc.ctrl_alt_/  find-and-replace:toggle-regex-option  Find And Replace  .platform-win32 .find-and-replace, .platform-linux .find-and-replace
paeshc.ctrl_alt_/  project-find:toggle-regex-option  Find And Replace  .platform-win32 .project-find, .platform-linux .project-find
paeshc.ctrl_alt_=  pane:increase-size  Core  atom-workspace atom-pane
paeshc.ctrl_alt_[  editor:fold-current-row  Core  atom-workspace atom-text-editor:not([mini])
paeshc.ctrl_alt_[  tree-view:recursive-collapse-directory  Tree View  .tree-view
paeshc.ctrl_alt_]  editor:unfold-current-row  Core  atom-workspace atom-text-editor:not([mini])
paeshc.ctrl_alt_]  tree-view:recursive-expand-directory  Tree View  .tree-view
paeshc.ctrl_alt_b  editor:move-to-previous-subword-boundary  Core  atom-text-editor
paeshc.ctrl_alt_backspace  bracket-matcher:remove-matching-brackets  Bracket Matcher  .platform-win32 atom-text-editor
paeshc.ctrl_alt_c  find-and-replace:toggle-case-option  Find And Replace  .platform-win32 .find-and-replace, .platform-linux .find-and-replace
paeshc.ctrl_alt_c  project-find:toggle-case-option  Find And Replace  .platform-win32 .project-find, .platform-linux .project-find
paeshc.ctrl_alt_d  editor:delete-to-end-of-subword  Core  atom-text-editor
paeshc.ctrl_alt_down  editor:add-selection-below  Core  body
paeshc.ctrl_alt_f  editor:move-to-next-subword-boundary  Core  atom-text-editor
paeshc.ctrl_alt_f  editor:fold-selection  Core  atom-workspace atom-text-editor:not([mini])
paeshc.ctrl_alt_f  find-and-replace:show-replace  Find And Replace  .platform-win32, .platform-linux
paeshc.ctrl_alt_f2  bookmarks:toggle-bookmark  Bookmarks  .platform-win32 atom-text-editor
paeshc.ctrl_alt_h  editor:delete-to-beginning-of-subword  Core  atom-text-editor
paeshc.ctrl_alt_i  window:toggle-dev-tools  Core  body
paeshc.ctrl_alt_m  bracket-matcher:select-inside-brackets  Bracket Matcher  .platform-win32 atom-text-editor
paeshc.ctrl_alt_o  application:add-project-folder  Core  body
paeshc.ctrl_alt_p  window:run-package-specs  Core  body
paeshc.ctrl_alt_q  autoflow:reflow-selection  Autoflow  .platform-win32 atom-text-editor, .platform-linux atom-text-editor
paeshc.ctrl_alt_r  window:reload  Core  body
paeshc.ctrl_alt_s  find-and-replace:toggle-selection-option  Find And Replace  .platform-win32 .find-and-replace, .platform-linux .find-and-replace
paeshc.ctrl_alt_shift_B  editor:select-to-previous-subword-boundary  Core  atom-text-editor
paeshc.ctrl_alt_shift_F  editor:select-to-next-subword-boundary  Core  atom-text-editor
paeshc.ctrl_alt_shift_P  editor:log-cursor-scope  Core  atom-workspace atom-text-editor
paeshc.ctrl_alt_shift_R  dev-live-reload:reload-all  Dev Live Reload  .platform-win32
paeshc.ctrl_alt_up  editor:add-selection-above  Core  body
paeshc.ctrl_alt_w  find-and-replace:toggle-whole-word-option  Find And Replace  .platform-win32 .find-and-replace, .platform-linux .find-and-replace
paeshc.ctrl_alt_w  project-find:toggle-whole-word-option  Find And Replace  .platform-win32 .project-find, .platform-linux .project-find
paeshc.ctrl_alt_z  editor:checkout-head-revision  Core  atom-workspace atom-text-editor:not([mini])
paeshc.ctrl_alt_{  editor:fold-all  Core  atom-workspace atom-text-editor:not([mini])
paeshc.ctrl_alt_}  editor:unfold-all  Core  atom-workspace atom-text-editor:not([mini])
paeshc.ctrl_b  native!  Core  body .native-key-bindings
paeshc.ctrl_b  fuzzy-finder:toggle-buffer-finder  Fuzzy Finder  .platform-win32
paeshc.ctrl_backspace  editor:delete-to-beginning-of-word  Core  atom-workspace atom-text-editor
paeshc.ctrl_c  core:copy  Core  body
paeshc.ctrl_c  native!  Core  body .native-key-bindings
paeshc.ctrl_c  tree-view:copy  Tree View  .platform-win32 .tree-view, .platform-linux .tree-view
paeshc.ctrl_d  native!  Core  body .native-key-bindings
paeshc.ctrl_d  find-and-replace:select-next  Find And Replace  .platform-win32 atom-text-editor, .platform-linux atom-text-editor
paeshc.ctrl_delete  editor:delete-to-end-of-word  Core  atom-workspace atom-text-editor
paeshc.ctrl_down  native!  Core  body .native-key-bindings
paeshc.ctrl_down  core:move-down  Core  body
paeshc.ctrl_down  editor:move-line-down  Core  atom-workspace atom-text-editor:not([mini])
paeshc.ctrl_e  find-and-replace:use-selection-as-find-pattern  Find And Replace  .platform-win32 atom-text-editor, .platform-linux atom-text-editor
paeshc.ctrl_end  core:move-to-bottom  Core  atom-workspace atom-text-editor
paeshc.ctrl_enter  editor:newline-below  Core  atom-workspace atom-text-editor:not([mini])
paeshc.ctrl_enter  find-and-replace:confirm  Find And Replace  .platform-win32 .find-and-replace, .platform-linux .find-and-replace
paeshc.ctrl_enter  project-find:confirm  Find And Replace  .platform-win32 .project-find, .platform-linux .project-find
paeshc.ctrl_enter  find-and-replace:replace-all  Find And Replace  .platform-win32 .find-and-replace .replace-container atom-text-editor
paeshc.ctrl_enter  project-find:replace-all  Find And Replace  .platform-win32 .project-find .replace-container atom-text-editor
paeshc.ctrl_f  native!  Core  body .native-key-bindings
paeshc.ctrl_f  find-and-replace:show  Find And Replace  .platform-win32, .platform-linux
paeshc.ctrl_f2  bookmarks:view-all  Bookmarks  atom-text-editor
paeshc.ctrl_f3  find-and-replace:find-next-selected  Find And Replace  .platform-win32 atom-text-editor, .platform-linux atom-text-editor
paeshc.ctrl_f4  core:close  Core  body
paeshc.ctrl_g  go-to-line:toggle  Go To Line  .platform-darwin, .platform-win32, .platform-linux
paeshc.ctrl_h  native!  Core  body .native-key-bindings
paeshc.ctrl_home  core:move-to-top  Core  atom-workspace atom-text-editor
paeshc.ctrl_insert  core:copy  Core  body
paeshc.ctrl_j  editor:join-lines  Core  atom-workspace atom-text-editor:not([mini])
paeshc.ctrl_k.ctrl_0  editor:unfold-all  Core  atom-workspace atom-text-editor:not([mini])
paeshc.ctrl_k.ctrl_1  editor:fold-at-indent-level-1  Core  atom-workspace atom-text-editor:not([mini])
paeshc.ctrl_k.ctrl_2  editor:fold-at-indent-level-2  Core  atom-workspace atom-text-editor:not([mini])
paeshc.ctrl_k.ctrl_3  editor:fold-at-indent-level-3  Core  atom-workspace atom-text-editor:not([mini])
paeshc.ctrl_k.ctrl_4  editor:fold-at-indent-level-4  Core  atom-workspace atom-text-editor:not([mini])
paeshc.ctrl_k.ctrl_5  editor:fold-at-indent-level-5  Core  atom-workspace atom-text-editor:not([mini])
paeshc.ctrl_k.ctrl_6  editor:fold-at-indent-level-6  Core  atom-workspace atom-text-editor:not([mini])
paeshc.ctrl_k.ctrl_7  editor:fold-at-indent-level-7  Core  atom-workspace atom-text-editor:not([mini])
paeshc.ctrl_k.ctrl_8  editor:fold-at-indent-level-8  Core  atom-workspace atom-text-editor:not([mini])
paeshc.ctrl_k.ctrl_9  editor:fold-at-indent-level-9  Core  atom-workspace atom-text-editor:not([mini])
paeshc.ctrl_k.ctrl_alt_w  pane:close-other-items  Core  body
paeshc.ctrl_k.ctrl_b  tree-view:toggle  Tree View  .platform-win32, .platform-linux
paeshc.ctrl_k.ctrl_d  find-and-replace:select-skip  Find And Replace  .platform-win32 atom-text-editor, .platform-linux atom-text-editor
paeshc.ctrl_k.ctrl_down  window:focus-pane-below  Core  body
paeshc.ctrl_k.ctrl_l  editor:lower-case  Core  atom-workspace atom-text-editor
paeshc.ctrl_k.ctrl_left  window:focus-pane-on-left  Core  body
paeshc.ctrl_k.ctrl_n  window:focus-next-pane  Core  body
paeshc.ctrl_k.ctrl_p  window:focus-previous-pane  Core  body
paeshc.ctrl_k.ctrl_right  window:focus-pane-on-right  Core  body
paeshc.ctrl_k.ctrl_u  editor:upper-case  Core  atom-workspace atom-text-editor
paeshc.ctrl_k.ctrl_up  window:focus-pane-above  Core  body
paeshc.ctrl_k.ctrl_w  pane:close  Core  body
paeshc.ctrl_k.down  pane:split-down-and-copy-active-item  Core  body
paeshc.ctrl_k.down  tree-view:open-selected-entry-down  Tree View  .platform-win32 .tree-view, .platform-linux .tree-view
paeshc.ctrl_k.h  tree-view:open-selected-entry-left  Tree View  .platform-win32 .tree-view, .platform-linux .tree-view
paeshc.ctrl_k.j  tree-view:open-selected-entry-down  Tree View  .platform-win32 .tree-view, .platform-linux .tree-view
paeshc.ctrl_k.k  tree-view:open-selected-entry-up  Tree View  .platform-win32 .tree-view, .platform-linux .tree-view
paeshc.ctrl_k.l  tree-view:open-selected-entry-right  Tree View  .platform-win32 .tree-view, .platform-linux .tree-view
paeshc.ctrl_k.left  pane:split-left-and-copy-active-item  Core  body
paeshc.ctrl_k.left  tree-view:open-selected-entry-left  Tree View  .platform-win32 .tree-view, .platform-linux .tree-view
paeshc.ctrl_k.right  pane:split-right-and-copy-active-item  Core  body
paeshc.ctrl_k.right  tree-view:open-selected-entry-right  Tree View  .platform-win32 .tree-view, .platform-linux .tree-view
paeshc.ctrl_k.up  pane:split-up-and-copy-active-item  Core  body
paeshc.ctrl_k.up  tree-view:open-selected-entry-up  Tree View  .platform-win32 .tree-view, .platform-linux .tree-view
paeshc.ctrl_l  editor:select-line  Core  atom-workspace atom-text-editor
paeshc.ctrl_left  native!  Core  body .native-key-bindings
paeshc.ctrl_left  editor:move-to-beginning-of-word  Core  atom-workspace atom-text-editor
paeshc.ctrl_m  bracket-matcher:go-to-matching-bracket  Bracket Matcher  atom-text-editor
paeshc.ctrl_n  application:new-file  Core  body
paeshc.ctrl_o  application:open-file  Core  body
paeshc.ctrl_p  fuzzy-finder:toggle-file-finder  Fuzzy Finder  .platform-win32
paeshc.ctrl_pagedown  pane:show-next-item  Core  body
paeshc.ctrl_pageup  pane:show-previous-item  Core  body
paeshc.ctrl_r  symbols-view:toggle-file-symbols  Symbols View  .platform-win32 atom-text-editor
paeshc.ctrl_right  native!  Core  body .native-key-bindings
paeshc.ctrl_right  editor:move-to-end-of-word  Core  atom-workspace atom-text-editor
paeshc.ctrl_s  core:save  Core  body
paeshc.ctrl_shift_B  native!  Core  body .native-key-bindings
paeshc.ctrl_shift_B  fuzzy-finder:toggle-git-status-finder  Fuzzy Finder  .platform-win32
paeshc.ctrl_shift_C  editor:copy-path  Core  atom-text-editor:not([mini])
paeshc.ctrl_shift_C  tree-view:copy-full-path  Tree View  .tree-view
paeshc.ctrl_shift_D  editor:duplicate-lines  Core  atom-workspace atom-text-editor:not([mini])
paeshc.ctrl_shift_F  native!  Core  body .native-key-bindings
paeshc.ctrl_shift_F  project-find:show  Find And Replace  .platform-win32, .platform-linux
paeshc.ctrl_shift_G  styleguide:show  Styleguide  .platform-win32, .platform-linux
paeshc.ctrl_shift_K  editor:delete-line  Core  atom-text-editor:not([mini])
paeshc.ctrl_shift_L  grammar-selector:show  Grammar Selector  .platform-win32 atom-text-editor
paeshc.ctrl_shift_M  markdown-preview:toggle  Markdown Preview  atom-workspace, atom-workspace atom-text-editor
paeshc.ctrl_shift_N  application:new-window  Core  body
paeshc.ctrl_shift_O  application:open-folder  Core  body
paeshc.ctrl_shift_P  command-palette:toggle  Command Palette  .platform-win32, .platform-win32 .command-palette atom-text-editor
paeshc.ctrl_shift_R  symbols-view:toggle-project-symbols  Symbols View  .platform-win32, .platform-linux
paeshc.ctrl_shift_S  core:save-as  Core  body
paeshc.ctrl_shift_T  pane:reopen-closed-item  Core  body
paeshc.ctrl_shift_U  encoding-selector:show  Encoding Selector  .platform-win32 atom-text-editor
paeshc.ctrl_shift_W  window:close  Core  body
paeshc.ctrl_shift_Z  core:redo  Core  body
paeshc.ctrl_shift_Z  native!  Core  body .native-key-bindings
paeshc.ctrl_shift_down  native!  Core  body .native-key-bindings
paeshc.ctrl_shift_down  core:move-down  Core  body
paeshc.ctrl_shift_end  core:select-to-bottom  Core  atom-workspace atom-text-editor
paeshc.ctrl_shift_enter  editor:newline-above  Core  atom-workspace atom-text-editor:not([mini])
paeshc.ctrl_shift_f2  bookmarks:clear-bookmarks  Bookmarks  .platform-win32 atom-text-editor
paeshc.ctrl_shift_f3  find-and-replace:find-previous-selected  Find And Replace  .platform-win32 atom-text-editor, .platform-linux atom-text-editor
paeshc.ctrl_shift_home  core:select-to-top  Core  atom-workspace atom-text-editor
paeshc.ctrl_shift_left  native!  Core  body .native-key-bindings
paeshc.ctrl_shift_left  pane:move-item-left  Core  body
paeshc.ctrl_shift_left  editor:select-to-beginning-of-word  Core  atom-workspace atom-text-editor
paeshc.ctrl_shift_right  native!  Core  body .native-key-bindings
paeshc.ctrl_shift_right  pane:move-item-right  Core  body
paeshc.ctrl_shift_right  editor:select-to-end-of-word  Core  atom-workspace atom-text-editor
paeshc.ctrl_shift_tab  pane:show-previous-recently-used-item  Core  body
paeshc.ctrl_shift_tab ^ctrl  pane:move-active-item-to-top-of-stack  Core  body
paeshc.ctrl_shift_up  native!  Core  body .native-key-bindings
paeshc.ctrl_shift_up  core:move-up  Core  body
paeshc.ctrl_space  autocomplete-plus:activate  Autocomplete Plus  atom-text-editor
paeshc.ctrl_t  fuzzy-finder:toggle-file-finder  Fuzzy Finder  .platform-win32
paeshc.ctrl_tab  pane:show-next-recently-used-item  Core  body
paeshc.ctrl_tab ^ctrl  pane:move-active-item-to-top-of-stack  Core  body
paeshc.ctrl_u  find-and-replace:select-undo  Find And Replace  .platform-win32 atom-text-editor, .platform-linux atom-text-editor
paeshc.ctrl_up  native!  Core  body .native-key-bindings
paeshc.ctrl_up  core:move-up  Core  body
paeshc.ctrl_up  editor:move-line-up  Core  atom-workspace atom-text-editor:not([mini])
paeshc.ctrl_v  core:paste  Core  body
paeshc.ctrl_v  native!  Core  body .native-key-bindings
paeshc.ctrl_v  tree-view:paste  Tree View  .platform-win32 .tree-view, .platform-linux .tree-view
paeshc.ctrl_w  core:close  Core  body
paeshc.ctrl_w  core:cancel  Go To Line  .platform-win32 .go-to-line atom-text-editor[mini]
paeshc.ctrl_x  core:cut  Core  body
paeshc.ctrl_x  native!  Core  body .native-key-bindings
paeshc.ctrl_x  tree-view:cut  Tree View  .platform-win32 .tree-view, .platform-linux .tree-view
paeshc.ctrl_y  core:redo  Core  body
paeshc.ctrl_z  core:undo  Core  body
paeshc.ctrl_z  native!  Core  body .native-key-bindings
paeshc.ctrl_|  tree-view:reveal-active-file  Tree View  .platform-win32, .platform-linux
paeshc.d  tree-view:duplicate  Tree View  .tree-view
paeshc.delete  native!  Core  body .native-key-bindings
paeshc.delete  core:delete  Core  body
paeshc.delete  tree-view:remove  Tree View  .tree-view
paeshc.down  native!  Core  body .native-key-bindings
paeshc.down  core:move-down  Core  body
paeshc.end  editor:move-to-end-of-screen-line  Core  atom-text-editor
paeshc.end  core:move-to-bottom  Tree View  .tree-view
paeshc.enter  editor:newline  Core  atom-text-editor:not([mini])
paeshc.enter  core:confirm  Core  .select-list atom-text-editor[mini]
paeshc.enter  native!  Core  body .native-key-bindings
paeshc.enter  core:confirm  Core  body
paeshc.enter  core:confirm  Go To Line  .go-to-line atom-text-editor[mini]
paeshc.enter  core:confirm  Spell Check  .corrections atom-text-editor[mini]
paeshc.enter  tree-view:open-selected-entry  Tree View  .tree-view
paeshc.enter  core:confirm  Tree View  .tree-view-dialog atom-text-editor[mini]
paeshc.escape  tool-panel:unfocus  Core  .tool-panel.panel-left, .tool-panel.panel-right
paeshc.escape  editor:consolidate-selections  Core  atom-text-editor , atom-text-editor[mini]
paeshc.escape  core:cancel  Core  body
paeshc.escape  autocomplete-plus:cancel  Autocomplete Plus  atom-text-editor.autocomplete-active
paeshc.escape  core:cancel  Go To Line  .go-to-line atom-text-editor[mini]
paeshc.escape  core:cancel  Tree View  .tree-view-dialog atom-text-editor[mini]
paeshc.f11  window:toggle-full-screen  Core  body
paeshc.f2  bookmarks:jump-to-next-bookmark  Bookmarks  atom-text-editor
paeshc.f2  tree-view:move  Tree View  .tree-view
paeshc.f3  find-and-replace:find-next  Find And Replace  .platform-win32 atom-text-editor, .platform-linux atom-text-editor
paeshc.h  tree-view:collapse-directory  Tree View  .tree-view
paeshc.home  editor:move-to-first-character-of-line  Core  atom-text-editor
paeshc.home  core:move-to-top  Tree View  .tree-view
paeshc.i  tree-view:toggle-vcs-ignored-files  Tree View  .tree-view
paeshc.j  core:move-down  Archive View  .archive-editor
paeshc.j  core:move-down  Tree View  .tree-view
paeshc.k  core:move-up  Archive View  .archive-editor
paeshc.k  core:move-up  Tree View  .tree-view
paeshc.l  tree-view:expand-item  Tree View  .tree-view
paeshc.left  native!  Core  body .native-key-bindings
paeshc.left  core:move-left  Core  body
paeshc.left  tree-view:collapse-directory  Tree View  .tree-view
paeshc.m  tree-view:move  Tree View  .tree-view
paeshc.pagedown  core:page-down  Core  body
paeshc.pageup  core:page-up  Core  body
paeshc.right  native!  Core  body .native-key-bindings
paeshc.right  core:move-right  Core  body
paeshc.right  tree-view:expand-item  Tree View  .tree-view
paeshc.shift_A  tree-view:add-folder  Tree View  .tree-view
paeshc.shift_backspace  native!  Core  body .native-key-bindings
paeshc.shift_backspace  core:backspace  Core  body
paeshc.shift_cmd_down  native!  Core  body .native-key-bindings
paeshc.shift_cmd_left  native!  Core  body .native-key-bindings
paeshc.shift_cmd_right  native!  Core  body .native-key-bindings
paeshc.shift_cmd_up  native!  Core  body .native-key-bindings
paeshc.shift_delete  core:cut  Core  body
paeshc.shift_down  native!  Core  body .native-key-bindings
paeshc.shift_down  core:select-down  Core  body
paeshc.shift_end  editor:select-to-end-of-line  Core  atom-text-editor
paeshc.shift_enter  fuzzy-finder:invert-confirm  Fuzzy Finder  .fuzzy-finder atom-text-editor[mini]
paeshc.shift_enter  find-and-replace:show-previous  Find And Replace  .platform-win32 .find-and-replace, .platform-linux .find-and-replace
paeshc.shift_f2  bookmarks:jump-to-previous-bookmark  Bookmarks  atom-text-editor
paeshc.shift_f3  find-and-replace:find-previous  Find And Replace  .platform-win32 atom-text-editor, .platform-linux atom-text-editor
paeshc.shift_home  editor:select-to-first-character-of-line  Core  atom-text-editor
paeshc.shift_insert  core:paste  Core  body
paeshc.shift_left  native!  Core  body .native-key-bindings
paeshc.shift_left  core:select-left  Core  body
paeshc.shift_pagedown  core:select-page-down  Core  body
paeshc.shift_pageup  core:select-page-up  Core  body
paeshc.shift_right  native!  Core  body .native-key-bindings
paeshc.shift_right  core:select-right  Core  body
paeshc.shift_tab  editor:outdent-selected-rows  Core  atom-text-editor:not([mini])
paeshc.shift_tab  core:focus-previous  Core  body .native-key-bindings
paeshc.shift_tab  find-and-replace:focus-previous  Find And Replace  .find-and-replace, .project-find, .project-find .results-view
paeshc.shift_tab  snippets:previous-tab-stop  Snippets  atom-text-editor:not([mini])
paeshc.shift_up  native!  Core  body .native-key-bindings
paeshc.shift_up  core:select-up  Core  body
paeshc.tab  editor:indent  Core  atom-text-editor:not([mini])
paeshc.tab  core:focus-next  Core  body .native-key-bindings
paeshc.tab  find-and-replace:focus-next  Find And Replace  .find-and-replace, .project-find, .project-find .results-view
paeshc.tab  snippets:expand  Snippets  atom-text-editor:not([mini])
paeshc.tab  snippets:next-tab-stop  Snippets  atom-text-editor:not([mini])
paeshc.tab  core:confirm  Spell Check  .corrections atom-text-editor[mini]
paeshc.up  native!  Core  body .native-key-bindings
paeshc.up  core:move-up  Core  body

paealgo'CONFIGURING (paecfg)

name::
* McsEngl.paealgo'CONFIGURING (paecfg)@cptIt,
* McsEngl.amecfg@cptIt,

paecfg'LOCAL

name::
* McsEngl.paecfg'LOCAL@cptIt,

_DESCRIPTION:
local configuration files config.cson , keymap.cson , snippets.cson , styles.less and init.coffee to customize Atom?
[https://github.com/atom/atom/blob/master/CONTRIBUTING.md#how-do-i-submit-a-good-bug-report]

paecfg'ATOM-HOME

name::
* McsEngl.paecfg'ATOM-HOME@cptIt,

The root path for all configuration files and folders.
Defaults to `~/.atom`.

paecfg'soft-tab

name::
* McsEngl.paecfg'soft-tab@cptIt,

_DESCRIPTION:
Enabling "Soft Tabs" will insert spaces instead of actual tab characters when you press the Tab key and the "Tab Length" setting specifies how many spaces to insert when you do so, or how many spaces are used to represent a tab if "Soft Tabs" is disabled.
[http://flight-manual.atom.io/getting-started/sections/atom-basics/#soft-wrap]

paealgo'USER-INTERFACE (paeuri)

name::
* McsEngl.paealgo'USER-INTERFACE (paeuri)@cptIt,
* McsEngl.ame'user-interface@cptIt,
* McsEngl.ameuri@cptIt,

paeuri'Theme

name::
* McsEngl.paeuri'Theme@cptIt,
* McsEngl.ame'theme@cptIt,

paealgo'CODE (paecod)

name::
* McsEngl.paealgo'CODE (paecod)@cptIt,
* McsEngl.pae'code@cptIt,
* McsEngl.pae'repo-of-code@cptIt,
* McsEngl.pae'source@cptIt,

_DESCRIPTION:
Atom is a large open source project—it's made up of over 200 repositories.
...
Here's a list of the big ones:
•atom/atom - Atom Core! The core editor component is responsible for basic text editing (e.g. cursors, selections, scrolling), text indentation, wrapping, and folding, text rendering, editor rendering, file system operations (e.g. saving), and installation and auto-updating. You should also use this repository for feedback related to the core API and for large, overarching design proposals.
•tree-view - file and directory listing on the left of the UI.
•fuzzy-finder - the quick file opener.
•find-and-replace - all search and replace functionality.
•tabs - the tabs for open editors at the top of the UI.
•status-bar - the status bar at the bottom of the UI.
•markdown-preview - the rendered markdown pane item.
•settings-view - the settings UI pane item.
•autocomplete-plus - autocompletions shown while typing. Some languages have additional packages for autocompletion functionality, such as autocomplete-html.
•git-diff - Git change indicators shown in the editor's gutter.
•language-javascript - all bundled languages are packages too, and each one has a separate package language-[name] . Use these for feedback on syntax highlighting issues that only appear for a specific language.
•one-dark-ui - the default UI styling for anything but the text editor. UI theme packages (i.e. packages with a -ui suffix) provide only styling and it's possible that a bundled package is responsible for a UI issue. There are other other bundled UI themes, such as one-light-ui.
•one-dark-syntax - the default syntax highlighting styles applied for all languages. There are other other bundled syntax themes, such as solarized-dark-syntax. You should use these packages for reporting issues that appear in many languages, but disappear if you change to another syntax theme.
•apm - the apm command line tool (Atom Package Manager). You should use this repository for any contributions related to the apm tool and to publishing packages.
•atom.io - the repository for feedback on the Atom.io website and the Atom.io package API used by apm.
[https://github.com/atom/atom/blob/master/CONTRIBUTING.md#atom-and-packages]

SPECIFIC#ql:pae'programing-language#

paecod.FILE

name::
* McsEngl.paecod.FILE@cptIt,

pae'app.asar:
They [core packages] are packed inside the app.asar file.
win: \Users\synagonism\AppData\Local\atom\app-1.9.9\resources
This file is generated by this build script.
[http://stackoverflow.com/a/31444675]

paecod.LOCAL

name::
* McsEngl.paecod.LOCAL@cptIt,

_DIR:
* \Users\synagonism\AppData\Local\atom\app-1.9.9\
* \Users\synagonism\.atom\

paealgo'code'API (paeapi)

name::
* McsEngl.paealgo'code'API (paeapi)@cptIt,
* McsEngl.paeapi@cptIt,

_DESCRIPTION:
The Atom API reference documentation is automatically generated from the Atom source code. Go here to see what tools you can use to build your own plugins.
[https://atom.io/docs]

_ADDRESS.WPG:
* https://atom.io/docs/api/v1.9.9/AtomEnvironment,

paeapi.TextEditor

name::
* McsEngl.paeapi.TextEditor@cptIt,
* McsEngl.pae'TextEditor@cptIt,

_DESCRIPTION:
This class represents all essential editing state for a single TextBuffer, including cursor and selection positions, folds, and soft wraps. If you're manipulating the state of an editor, use this class. If you're interested in the visual appearance of editors, use TextEditorElement instead.

A single TextBuffer can belong to multiple editors. For example, if the same file is open in two different panes, Atom creates a separate editor for each pane. If the buffer is manipulated the changes are reflected in both editors, but each maintains its own cursor position, folded lines, etc.
[https://atom.io/docs/api/v1.9.9/TextEditor]

paealgo'code'Package (paepkg)

name::
* McsEngl.paealgo'code'Package (paepkg)@cptIt,
* McsEngl.paepkg@cptIt,

_DESCRIPTION:
An Atom plugin.
[http://flight-manual.atom.io/resources/sections/glossary/#package]

_DESCRIPTION:
Many of its core features are actually just packages implemented the same way you would implement any other functionality. This means that if you don't like the Tree View for example, you could write your own implementation of that functionality and replace it entirely.
[http://flight-manual.atom.io/getting-started/sections/atom-basics/#opening-directories]

paepkg'apm

name::
* McsEngl.paepkg'apm@cptIt,
* McsEngl.atom-package-manager@cptIt,
* McsEngl.apm@cptIt,

_DESCRIPTION:
apm is bundled and installed automatically with Atom.
[https://github.com/atom/apm]

apm'install

name::
* McsEngl.apm'install@cptIt,

_DESCRIPTION:
apm is bundled and installed automatically with Atom.
[https://github.com/atom/apm]
===
You can also install packages by using the apm install command:
• apm install <package_name> to install the latest version.
• apm install <package_name>@<package_version> to install a specific version.
For example apm install emmet@0.1.5 installs the 0.1.5 release of the Emmet package.
[http://flight-manual.atom.io/using-atom/sections/atom-packages/]

apm'search

name::
* McsEngl.apm'search@cptIt,

_DESCRIPTION:
You can also use apm to find new packages to install. If you run apm search , you can search the package registry for a search term.
[http://flight-manual.atom.io/using-atom/sections/atom-packages/]

apm'view

name::
* McsEngl.apm'view@cptIt,

_DESCRIPTION:
You can use apm view to see more information about a specific package.
[http://flight-manual.atom.io/using-atom/sections/atom-packages/]

paepkg'Installing

name::
* McsEngl.paepkg'Installing@cptIt,

_DESCRIPTION:
> File/Settings/Install
Packages are published to atom.io and are installed to \Users\synagonism\.atom\packages
===
After installing 'Window:Reload CA_R' IF not seen.
===
• apm install <package_name> to install the latest version.
• apm install <package_name>@<package_version> to install a specific version.
to \Users\synagonism\.atom\packages

paepkg'File

name::
* McsEngl.paepkg'File@cptIt,

paepkg'File.MAIN

name::
* McsEngl.paepkg'File.MAIN@cptIt,
* McsEngl.paepkg'main-file@cptIt,

_DESCRIPTION:
The main file is the entry-point to an Atom package. Atom knows where to find the main file from an entry in package.json:
"main": "./lib/sourcefetch",

paepkg'package.json

name::
* McsEngl.paepkg'package.json@cptIt,

_activation_commands:
To improve performance, Atom packages can be lazy loading. We can tell Atom to load our package only when certain commands are run by the user. These commands are called activation commands and are defined in package.json:

"activationCommands": {
"atom-workspace": "sourcefetch:toggle"
},
[https://github.com/blog/2231-building-your-first-atom-plugin]

paepkg'Repo

name::
* McsEngl.paepkg'Repo@cptIt,

_ADDRESS.WPG:
* http://atom.io/packages,

paepkg'Resource

name::
* McsEngl.paepkg'Resource@cptIt,

_ADDRESS.WPG:
* https://blog.eleven-labs.com/en/create-atom-package/,
* https://github.com/blog/2231-building-your-first-atom-plugin,

SPECIFIC

paepkg.CORE

name::
* McsEngl.paepkg.CORE@cptIt,

_DESCRIPTION:
Packages that are bundled with Atom are referred to as Core packages. Ones that aren't bundled with Atom are referred to as Community packages.
[http://flight-manual.atom.io/getting-started/sections/atom-basics/#opening-directories]

paepkg.core.about

name::
* McsEngl.paepkg.core.about@cptIt,
* McsEngl.paepkg.@cptIt,
* McsEngl.pae'@cptIt,

_DESCRIPTION:
View useful information about your Atom installation.
[https://github.com/atom/about]

_REPO:
* https://github.com/atom/about,

paepkg.core.Command-Palette

name::
* McsEngl.paepkg.core.Command-Palette@cptIt,
* McsEngl.paepkg.Command-Palette@cptIt,
* McsEngl.pae'Command-Palette@cptIt,

_DESCRIPTION:
The Command Palette lets you find and run package commands using fuzzy search. This is a convenient way to run commands without navigating menus or remembering shortcuts.
[https://github.com/blog/2231-building-your-first-atom-plugin]

paepkg.CORE.NO

name::
* McsEngl.paepkg.CORE.NO@cptIt,

_DESCRIPTION:
Packages that are bundled with Atom are referred to as Core packages. Ones that aren't bundled with Atom are referred to as Community packages.
[http://flight-manual.atom.io/getting-started/sections/atom-basics/#opening-directories]

_SPECIFIC:
* atom-keyboard-macros
keyboard macro extension for Atom.
* atom-macros
Quickly define commands to extend atom dynamically
* js-func-viewer
A function structure viewer for Javascript file

paepkg.atom-keyboard-macros

name::
* McsEngl.paepkg.atom-keyboard-macros@cptIt,
* McsEngl.paepkg.akm@cptIt,
* McsEngl.paeakm@cptIt,

_DESCRIPTION:
atom-keyboard-macros package
Keyboard macro extension for Atom.

_DESCRIPTION:
atom-keyboard-macros package
Keyboard macro extension for Atom.

New Features
In version 0.6.0 or later, it also records the operation of the search & replace view.

Shortcuts
ctrl-x ( start recording
ctrl-x ) stop recording
ctrl-x e execute macro
ctrl-x ctrl-e execute macro N times
ctrl-x b execute macro to the end of file
ctrl-x ctrl-b execute macro from the beginning to the end of file

Other Methods
•atom-keyboard-macros:name_last_kbd_macro Give a command name to the most recently defined keyboard macro. You can execute it, in command palette, use 'atom-keyboard-macros:{a-command-name}'.

•atom-keyboard-macros:execute_named_macro Execute a named keyboard macro(see atom-keyboard-macros:name_last_kbd_macro).

•atom-keyboard-macros:save Save all named macros

•atom-keyboard-macros:quick_save Quick save all named macros

•atom-keyboard-macros:load Load saved macros

•atom-keyboard-macros:quick_load Load quick_saved macros
[https://atom.io/packages/atom-keyboard-macros]
===
USAGE: load one macro (quick or saved) and then execute.
CHANGES:
I changed keymap to ctrl-q, because ctrl-x denotes 'cut'.
[hmnSngo.2016-08-26]

_COMMAND:
*D
:core:cut
*D
:core:paste

*D:
editor:move-to-end-of-word
*D:
editor:move-to-beginning-of-word

*I
:<a class="clsPreview" href="">
//INSERTS

paepkg.charcode-display

name::
* McsEngl.paepkg.charcode-display@cptIt,

_DESCRIPTION:
charcode-display
Display the code of the character under the current cursor position in the status bar.
[https://atom.io/packages/charcode-display]

\Users\synagonism\.atom\packages\charcode-display\lib\charcode-display-view.coffee:
getUnicodeCodePoint
FROM: return 'U+' + rtn
TO: return code
===
@tooltip =
FROM: "Char: '#{@character}', Charcode:#{@charcode}, Codepoint:#{@codepoint}")
TO: "Char: '#{@character}', Charcode:#{@charcode}, Decimal:#{@codepoint}")

paepkg.js-func-viewer

name::
* McsEngl.paepkg.js-func-viewer@cptIt,

_DESCRIPTION:
js-func-viewer
A function structure viewer for Javascript file
[https://atom.io/packages/js-func-viewer]

paealgo'code'CoffeScript

name::
* McsEngl.paealgo'code'CoffeScript@cptIt,

_ADDRESS.WPG:
* https://github.com/atom/atom/blob/master/CONTRIBUTING.md#coffeescript-styleguide,

pgmAtom'Licence

name::
* McsEngl.pgmAtom'Licence@cptIt,

Is Atom open source?
Yes. Atom is MIT licensed and the source is freely available from the atom/atom repository.
All core Atom packages provided by GitHub are also available under the MIT license.
[https://atom.io/faq]

pgmAtom'Resource

name::
* McsEngl.pgmAtom'Resource@cptIt,

_ADDRESS.WPG:
* https://twitter.com/atomeditor,
* FORUM: http://discuss.atom.io//
* http://blog.atom.io//
* https://twitter.com/atomeditor,

_TUTORIAL:
* http://flight-manual.atom.io//

pgmAtom'Doing

name::
* McsEngl.pgmAtom'Doing@cptIt,

pgmAtom'doing.BUILDING

name::
* McsEngl.pgmAtom'doing.BUILDING@cptIt,

_ADDRESS.WPG:
* https://github.com/atom/atom/tree/master/docs/build-instructions,

pgmAtom'doing.CONTRIBUTING

name::
* McsEngl.pgmAtom'doing.CONTRIBUTING@cptIt,

_ADDRESS.WPG:
* https://github.com/atom/atom/blob/master/CONTRIBUTING.md,

pgmAtom'doing.UPDATING

name::
* McsEngl.pgmAtom'doing.UPDATING@cptIt,

_osUbuntu:
Once Atom is installed and a new release is out in future, you can simply upgrade the editor by running regular system updates via Software Updater utility.
And the PPA can be remove via Software & Updates utility under Other Software tab.
[http://tipsonubuntu.com/2016/08/05/install-atom-text-editor-ubuntu-16-04/]

pgmAtom'doing.REMOVING

name::
* McsEngl.pgmAtom'doing.REMOVING@cptIt,

_osUbuntu:
To remove the software, use Synaptic Package Manager or just run apt command with remove flag:
> sudo apt remove --purge atom
And the PPA can be remove via Software & Updates utility under Other Software tab.
[http://tipsonubuntu.com/2016/08/05/install-atom-text-editor-ubuntu-16-04/]

pmce.BLUEFISH

name::
* McsEngl.bluefish-editor,

_ADDRESS.WPG:
* http://bluefish.openoffice.nl/index.html,

_DESCRIPTION:
Bluefish is a free and open source advanced text editor with a variety of tools for programming in general and the development of dynamic websites. Bluefish supports development in (among others) HTML, XHTML, CSS, XML, PHP, C, C++, JavaScript, Java, Google Go, Vala, Ada, D, SQL, Perl, ColdFusion, JSP, Python, Ruby and shell.[1] Bluefish is available for many platforms, including Linux, Solaris and Mac OS X, and Windows.[2] Bluefish is developed in C/GTK+ and can be used integrated in GNOME or run independently. Bluefish fills the niche market between the plain text editors and the full swing IDE: Bluefish is relatively lightweight and easy to learn, while still providing many features of an integrated development environment to support both programming and the development of websites.
Bluefish uses GTK+ for its GUI widgets.
[http://en.wikipedia.org/wiki/Bluefish_(text_editor)]

pmce.BROWSER

_ADDRESS.WPG:
* https://tomassetti.me/writing-a-browser-based-editor-using-monaco-and-antlr/

pmce.jEdit

_CREATED: {2003-02-05}

name::
* McsEngl.conceptItsoft1207,
* McsEngl.jedit,
* McsEngl.jEdit-pgm,
* McsEngl.pgmCmr.JEdit,
* McsEngl.pgmJEdit,

jedit'GENERIC

_GENERIC:
* editor#ql:[Level CONCEPT:rl? conceptIt991]##cptIt991#
* java-program#cptItsoft1200#
* open-source

jedit'abbreviation

name::
* McsEngl.jedit'abbreviation@cptIt,
* McsEngl.jedit'code-completion@cptIt,
* McsEngl.jedit'code-recomender@cptIt,
* McsEngl.jedit'expansion@cptIt,

_ACTIVATION:
1) write 'abbreviation'
2) hit space.

_POSITIONAL_PARAMETER:
Expanding F#j#array.length# will insert the following text into the buffer:
for(int j = 0; j < array.length; j++)
Expansions can contain up to nine positional parameters. Note that a trailing hash character (“#”) must be entered when expanding an abbreviation with parameters.
If you do not specify the correct number of positional parameters when expanding an abbreviation, any missing parameters will be blank in the expansion, and extra parameters will be ignored. A status bar message will be shown stating the required number of parameters.

jedit'code

name::
* McsEngl.jedit'code@cptIt,

jedit'code'compilation

name::
* McsEngl.jedit'code'compilation@cptIt,

> If you want to tell me (from basics) how to construct an environment that will > build jEdit I'm willing to give it a go, but I'd have thought the snapshot > would be easier.
Install jEdit binary distribution, install AntFarm plugin (there is a 4.2-compatible version on the community site), add jEdit source build.xml to the list of build files, run the 'dist' target. You'll be left with a new jedit.jar in the jEdit source directory.

jedit'INSTALLATION

name::
* McsEngl.jedit'INSTALLATION@cptIt,

_WIN:
* double click on jar file.

Personally I just use a batch file, you can associate files to that. Something like this in a file called jedit.bat would do it:
REM Launcher for jedit
start javaw -jar "\progra~1\jEdit4.2\jedit.jar" -reuseview %*
===
java -Xmx1024M -jar jedit.jar
of course you can tune and use some other value than 1024M.

_LINUX:
java -Djava.compiler=none -jar filename.jar

jedit'code.CLASS

name::
* McsEngl.jedit'code.CLASS@cptIt,

jedit'Buffer (org.gjt.sp.jedit.Buffer)

name::
* McsEngl.jedit'Buffer (org.gjt.sp.jedit.Buffer)@cptIt,

public class Buffer
extends JEditBuffer

A Buffer represents the contents of an open text file as it is maintained in the computer's memory (as opposed to how it may be stored on a disk).

In a BeanShell script, you can obtain the current buffer instance from the buffer variable.

This class does not have a public constructor. Buffers can be opened and closed using methods in the jEdit class.

This class is partially thread-safe, however you must pay attention to two very important guidelines:
* Changes to a buffer can only be made from the AWT thread.
* When accessing the buffer from another thread, you must grab a read lock if you plan on performing more than one call, to ensure that the buffer contents are not changed by the AWT thread for the duration of the lock. Only methods whose descriptions specify thread safety can be invoked from other threads.

jedit'EditBus (org.gjt.sp.jedit)

name::
* McsEngl.jedit'EditBus (org.gjt.sp.jedit)@cptIt,

_DEFINITION:
* The EditBus is jEdit's global event notification mechanism. A number of messages are sent by jEdit; they are all instances of the classes found in the org.gjt.sp.jedit.msg package. Plugins can also send their own messages.

SINCE:
jEdit 2.2pre6

jedit'EditPane (org.gjt.sp.jedit)

name::
* McsEngl.jedit'EditPane (org.gjt.sp.jedit)@cptIt,

extends javax.swing.JPanel
implements EBComponent, BufferSetListener

A panel containing a text area.

In a BeanShell script, you can obtain the current edit pane from the editPane variable.

Each View can have multiple editPanes, one is active at a time. Each EditPane has a single JEditTextArea, and is operating on single buffer. The EditPane also can switch buffers.
This is the "controller" between a JEditTextArea (view) and a buffer (model).
This class does not have a public constructor. Edit panes can be created and destroyed using methods in the View class.

jedit'FileCellRenderer (org.gjt.sp.jedit.browser)

name::
* McsEngl.jedit'FileCellRenderer (org.gjt.sp.jedit.browser)@cptIt,

IMPORT:
import org.gjt.sp.jedit.io.VFSManager;
import org.gjt.sp.jedit.gui.ErrorListDialog;
import org.gjt.sp.jedit.msg.VFSUpdate;
import org.gjt.sp.jedit.*;
import org.gjt.sp.util.Log;
import org.gjt.sp.util.WorkThreadPool;
import org.gjt.sp.util.StandardUtilities;

jedit'InputHandler (extended by org.gjt.sp.jedit.gui)

name::
* McsEngl.jedit'InputHandler (extended by org.gjt.sp.jedit.gui)@cptIt,

public abstract class InputHandler
extends AbstractInputHandler<EditAction>

An input handler converts the user's key strokes into concrete actions. It also takes care of macro recording and action repetition.

This class provides all the necessary support code for an input handler, but doesn't actually do any key binding logic. It is up to the implementations of this class to do so.

Direct Known Subclasses:
DefaultInputHandler

jedit'jEditBuffer (org.gjt.sp.jedit.buffer)

name::
* McsEngl.jedit'jEditBuffer (org.gjt.sp.jedit.buffer)@cptIt,

public class JEditBuffer
extends java.lang.Object

A JEditBuffer represents the contents of an open text file as it is maintained in the computer's memory (as opposed to how it may be stored on a disk).

This class is partially thread-safe, however you must pay attention to two very important guidelines:
* Changes to a buffer can only be made from the AWT thread.
* When accessing the buffer from another thread, you must grab a read lock if you plan on performing more than one call, to ensure that the buffer contents are not changed by the AWT thread for the duration of the lock. Only methods whose descriptions specify thread safety can be invoked from other threads.

Since:
jEdit 4.3pre3

jedit'MiscUtilities (org.gjt.sp.jedit)

name::
* McsEngl.jedit'MiscUtilities (org.gjt.sp.jedit)@cptIt,

public class MiscUtilities
extends java.lang.Object

Path name manipulation, string manipulation, and more.

The most frequently used members of this class are:

Some path name methods:
* getFileName(String)
* getParentOfPath(String)
* constructPath(String,String)

IMPORT:
import org.gjt.sp.jedit.io.*;
import org.gjt.sp.util.Log;
import org.gjt.sp.util.ProgressObserver;
import org.gjt.sp.util.StandardUtilities;
import org.gjt.sp.util.IOUtilities;
import org.gjt.sp.util.XMLUtilities;
import org.gjt.sp.jedit.menu.MenuItemTextComparator;
import org.gjt.sp.jedit.buffer.JEditBuffer;

HELP:
MiscUtilities.isURL(iconName))
MiscUtilities.constructPath(
MiscUtilities.getFileName(
MiscUtilities.isURL(url))
MiscUtilities.getParentOfPath(path));

jedit'View

name::
* McsEngl.jedit'View@cptIt,

A View is jEdit's top-level frame window.

In a BeanShell script, you can obtain the current view instance from the view variable.

The largest component it contains is an EditPane that in turn contains a JEditTextArea that displays a Buffer. A view can have more than one edit pane in a split window configuration. A view also contains a menu bar, an optional toolbar and other window decorations, as well as docked windows.

The View class performs two important operations dealing with plugins: creating plugin menu items, and managing dockable windows.

* When a view is being created, its initialization routine iterates through the collection of loaded plugins and constructs the Plugins menu using the properties as specified in the EditPlugin class.
* The view also creates and initializes a DockableWindowManager object. This object is responsible for creating, closing and managing dockable windows.

This class does not have a public constructor. Views can be opened and closed using methods in the jEdit class.

jedit'code.package (482 items)

name::
* McsEngl.jedit'code.package (482 items)@cptIt,

jEdit
org.gjt.sp.jedit  This package contains jEdit's core classes.
org.gjt.sp.jedit.browser  jEdit's file system browser.
org.gjt.sp.jedit.bsh  
org.gjt.sp.jedit.bsh.classpath  
org.gjt.sp.jedit.bsh.collection  
org.gjt.sp.jedit.bsh.commands  
org.gjt.sp.jedit.bsh.org.objectweb.asm  
org.gjt.sp.jedit.bsh.reflect  
org.gjt.sp.jedit.buffer  Buffer event listeners, and classes used to implement jEdit's document model.
org.gjt.sp.jedit.bufferio  
org.gjt.sp.jedit.bufferset  
org.gjt.sp.jedit.gui  Various GUI controls and dialog boxes.
org.gjt.sp.jedit.gui.statusbar  
org.gjt.sp.jedit.help  The jEdit help viewer.
org.gjt.sp.jedit.indent  
org.gjt.sp.jedit.input  
org.gjt.sp.jedit.io  Virtual file system and multi-threaded I/O.
org.gjt.sp.jedit.menu  
org.gjt.sp.jedit.msg  EditBus messages.
org.gjt.sp.jedit.options  Global Options dialog box panes.
org.gjt.sp.jedit.pluginmgr  The plugin manager.
org.gjt.sp.jedit.print  Printing.
org.gjt.sp.jedit.proto.jeditresource  jeditresource: URL protocol handler, used to load resources from plugin JAR files.
org.gjt.sp.jedit.search  Search and replace classes.
org.gjt.sp.jedit.syntax  The jEdit syntax highlighting engine.
org.gjt.sp.jedit.textarea  Since jEdit 4.2, many TextArea classes have been split into a base and derived class.
org.gjt.sp.jedit.visitors  
org.gjt.sp.util  Utility classes used by jEdit but that do not depend on jEdit itself.


Microstar XML Parser
com.microstar.xml  An obsolete and deprecated XML parser.

jedit'browser-package (org.gjt.sp.jedit)

name::
* McsEngl.jedit'browser-package (org.gjt.sp.jedit)@cptIt,

11 items

jedit'bsh-package (org.gjt.sp.jedit)

name::
* McsEngl.jedit'bsh-package (org.gjt.sp.jedit)@cptIt,

97 items

jedit'buffer-package (org.gjt.sp.jedit)

name::
* McsEngl.jedit'buffer-package (org.gjt.sp.jedit)@cptIt,

19 items

jedit'bufferio-package (org.gjt.sp.jedit)

name::
* McsEngl.jedit'bufferio-package (org.gjt.sp.jedit)@cptIt,

6 items

jedit'bufferset-package (org.gjt.sp.jedit)

name::
* McsEngl.jedit'bufferset-package (org.gjt.sp.jedit)@cptIt,

4 items

jedit'gui-package (org.gjt.sp.jedit)

name::
* McsEngl.jedit'gui-package (org.gjt.sp.jedit)@cptIt,

72 items

jedit'help-package (org.gjt.sp.jedit)

name::
* McsEngl.jedit'help-package (org.gjt.sp.jedit)@cptIt,

9 items

jedit'indent-package (org.gjt.sp.jedit)

name::
* McsEngl.jedit'indent-package (org.gjt.sp.jedit)@cptIt,

9 items

jedit'input-package (org.gjt.sp.jedit)

name::
* McsEngl.jedit'input-package (org.gjt.sp.jedit)@cptIt,

4 items

jedit'io-package (org.gjt.sp.jedit)

name::
* McsEngl.jedit'io-package (org.gjt.sp.jedit)@cptIt,

19 items

jedit'jedit-package (org.gjt.sp)

name::
* McsEngl.jedit'jedit-package (org.gjt.sp)@cptIt,

70 items

jedit'menu-package (org.gjt.sp.jedit)

name::
* McsEngl.jedit'menu-package (org.gjt.sp.jedit)@cptIt,

13 items

jedit'msg-package (org.gjt.sp.jedit)

name::
* McsEngl.jedit'msg-package (org.gjt.sp.jedit)@cptIt,

18 items

jedit'options-package (org.gjt.sp.jedit)

name::
* McsEngl.jedit'options-package (org.gjt.sp.jedit)@cptIt,

27 items

jedit'pluginmgr-package (org.gjt.sp.jedit)

name::
* McsEngl.jedit'pluginmgr-package (org.gjt.sp.jedit)@cptIt,

12 items

jedit'print-package (org.gjt.sp.jedit)

name::
* McsEngl.jedit'print-package (org.gjt.sp.jedit)@cptIt,

4 items

jedit'proto-package (org.gjt.sp.jedit)

name::
* McsEngl.jedit'proto-package (org.gjt.sp.jedit)@cptIt,

1 items

jedit'search-package (org.gjt.sp.jedit)

name::
* McsEngl.jedit'search-package (org.gjt.sp.jedit)@cptIt,

20 items

jedit'syntax-package (org.gjt.sp.jedit)

name::
* McsEngl.jedit'syntax-package (org.gjt.sp.jedit)@cptIt,

16 items

Token same with bsh

jedit'textarea-package (org.gjt.sp.jedit)

name::
* McsEngl.jedit'textarea-package (org.gjt.sp.jedit)@cptIt,

40 items

jedit'visitors-package (org.gjt.sp.jedit)

name::
* McsEngl.jedit'visitors-package (org.gjt.sp.jedit)@cptIt,

3 items

jedit'util-package (org.gjt.sp

name::
* McsEngl.jedit'util-package (org.gjt.sp@cptIt,

items

SyntaxUtilities same with org.gjt.sp.jedit.syntax

jedit'EVOLUTION#cptCore546.171#

name::
* McsEngl.jedit'EVOLUTION@cptIt,

jedit'doing.COMMAND-LINE

name::
* McsEngl.jedit'doing.COMMAND-LINE@cptIt,
* McsEngl.jedit'command-line@cptIt,

> jedit file +line:22#pl:jedit \public_html\WebsiteSgm\index.html +line:22#
open the file and goes to that line
[http://www.jedit.org/users-guide/cli-usage.html]

jedit'doing.SEARCHING

name::
* McsEngl.jedit'doing.SEARCHING@cptIt,

jedit'Filter-patern

name::
* McsEngl.jedit'Filter-patern@cptIt,

Here are some examples of glob patterns:

* - all files.

*.java - all files whose names end with “.java”.

*.[ch] - all files whose names end with either “.c” or “.h”.

*.{c,cpp,h,hpp,cxx,hxx} - all C or C++ files.

[^#]* - all files whose names do not start with “#”.
[http://jedit.org/users-guide/globs.html]

γ λ σ Ε λ α ' ([^~:]*)~
searches everything EXCEPT ~: and stops when it finds ~.

jedit'REGULAR'EXPRESSION

name::
* McsEngl.jedit'REGULAR'EXPRESSION@cptIt,

\n  match newline

\*  match asterisk needs \

.*  match any character

_subexpression:
search: mp(\d\d)
replace: mp0$1

- <dd>\* <a href="(.*)">Komo-

jedit'GIT

name::
* McsEngl.jedit'GIT@cptIt,

git clone ssh://USERNAME@jedit.git.sourceforge.net/gitroot/jedit/jEdit

jedit'KEYSTROKES

name::
* McsEngl.jedit'KEYSTROKES@cptIt,
* McsEngl.jedit'shortcut@cptIt,

Ctrl+] ==> go to matching bracket.

To switch back to the most recently edited buffer, just use Ctrl+` (that's a back quote; on same key as tilde).
Note that you can configure this shortcut to anything in Global Preferences -> jEdit -> Shortcuts -> Go to Previous Buffer.
I have Previous Buffer and Next Buffer defined as CS-Tab and C-Tab.

jedit'macro (jem)

name::
* McsEngl.jedit'macro (jem)@cptIt,
* McsEngl.jedit'macro@cptIt,
* McsEngl.jem@cptIt,

_FixIt:
1) After SearchAndReplace:
SearchAndReplace.find(view);
textArea.goToNextCharacter(false);

2) Go start|end of line:
textArea.goToStartOfLine(false);
textArea.goToEndOfLine(false);

3) Fix Text to Insert:
textArea.setSelectedText("<a name=\"h6.\">");

textArea.goToNextLine(false);

search-3-chars:
idL([a-z]{3})verb

TEMPORARY_MACRO:
Is a macro in an ALWAYS open file.

On Friday, April 11, 2003, at 12:21 PM, John Gellene wrote:
> Something like this will act as a toggle: > > size = "20"; // this is your large size; adjust as necessary > prop = "view.fontsize"; > if(jEdit.getProperty(prop).equals(size)) > size = "12"; // this is your normal size > jEdit.setProperty(prop, size); > jEdit.propertiesChanged(); // this redraws the view area > > John > > -----Original Message----- > From: jedit-users-admin@lists.sourceforge.net > [mailto:jedit-users-admin@lists.sourceforge.net] On Behalf Of Eric > Knapp > Sent: Friday, April 11, 2003 12:43 PM > To: jEdit-users@lists.sourceforge.net > Subject: [ jEdit-users ] Macro to switch font size?
> > Hi all,
> > I teach various programming languages using jEdit. I use my laptop with
> a data projector during classes. Due to small screens in most
> classrooms I am constantly having to switch the size of the font in the
> main editing window. Could this switch be done with a macro? Does one
> exist already or could someone help me out here.
> > Thanks, > > -Eric >

jedit.macro'Location

name::
* McsEngl.jedit.macro'Location@cptIt,

LOCATION:
* \Users\synagonism\AppData\Roaming\jEdit\macros,
* \Program Files\jEdit\macros,

jedit.macro.SEARCH

name::
* McsEngl.jedit.macro.SEARCH@cptIt,
* McsEngl.jem.search-1207i@cptIt,

jem.Search.RegExp.Forward:
SearchAndReplace.setSearchString("\\nΜΕΡΟΣ");
SearchAndReplace.setAutoWrapAround(false);
SearchAndReplace.setReverseSearch(false);
SearchAndReplace.setIgnoreCase(false);
SearchAndReplace.setRegexp(true);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.find(view);

range (324.5):
SearchAndReplace.setSearchString("<JL:Jump,\"([0-9.]+)\",\"EPISTEM.NFO\">");
SearchAndReplace.setReplaceString("<JL:Jump,\"epistem$1\">");

instead of \\ ==> .
SearchAndReplace.setSearchString("<JL:Jump,\"([0-9.]+)\",\"G:.FILE1.FolioViews411.epistem.nfo\">");

jedit.macro.buffer

name::
* McsEngl.jedit.macro.buffer@cptIt,

buffer.getPath();

buffer.getName();

jedit'macro.DIALOG

name::
* McsEngl.jedit'macro.DIALOG@cptIt,

Macros.message(view,"tracing");

Macros.error(view, "Goodbye, cruel world!");

String result = Macros.input(view, "Type something here.");

String result = Macros.input(view, "When were you born?",
"I don't remember, I was very young at the time");

int result = Macros.confirm("Do you really want to learn"
+ " about BeanShell?",JOptionPane.YES_NO_OPTION);

jedit'macro.For

name::
* McsEngl.jedit'macro.For@cptIt,

selectedLines = textArea.getSelectedLines();
for(i = 0; i < selectedLines.length; ++i)
{
offsetBOL = textArea.getLineStartOffset(
selectedLines[i]);
textArea.setCaretPosition(offsetBOL);
textArea.goToStartOfWhiteSpace(false);
textArea.goToEndOfWhiteSpace(true);
text = textArea.getSelectedText();
if(text == null) text = "";
textArea.setSelectedText(prefix + text + suffix);
}

jedit'macro.textArea

name::
* McsEngl.jedit'macro.textArea@cptIt,

jem.GoLine:
textArea.goToStartOfLine(false);
textArea.goToEndOfLine(false);

textArea.goToPrevLine(false);
textArea.goToNextLine(false);

jem.GoChar:
textArea.goToPrevCharacter(false);

jem.GoWord:
textArea.goToNextWord(true,false); //goes to the end of word AND selects it.

textArea.goToNextWord(false,false); //whithout selecting it.

jem.GoWhiteSpace:
textArea.goToEndOfWhiteSpace(false);
textArea.goToStartOfWhiteSpace(false);

jem.Delete:
textArea.delete(); //deletes NEXT char
textArea.backspace(); //deletes previous char

textArea.deleteLine(); //deletes line

jem.Write:
textArea.setSelectedText("#cfr2007t");
textArea.setSelectedText("xxxx"); //writes the text xxxx
textArea.setSelectedText("console.log('");

textArea.insertEnterAndIndent();

jem.Copy:
textArea.getSelectedText();
Registers.copy(textArea,'$');

jem.Paste:
Registers.paste(textArea,'$',false);

textArea:
* String text = textArea.getSelectedText();
* caret = textArea.getCaretPosition();
textArea.setCaretPosition(caret + tag.length() + 2);

textArea.getCaretPosition();

xsearch.SearchSettings.push();
xsearch.SearchSettings.resetSettings();
xsearch.SearchAndReplace.setSearchString("<RD>TITLE ");
xsearch.SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
xsearch.SearchAndReplace.setFindAll(true);
xsearch.SearchAndReplace.find(view);
xsearch.SearchSettings.pop();

SearchAndReplace.setSearchString("\\nΜΕΡΟΣ");
SearchAndReplace.setAutoWrapAround(false);
SearchAndReplace.setReverseSearch(false);
SearchAndReplace.setIgnoreCase(false);
SearchAndReplace.setRegexp(true);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.find(view);
textArea.goToPrevCharacter(false);
textArea.insertEnterAndIndent();
textArea.setSelectedText(" </section>");
textArea.insertEnterAndIndent();
textArea.setSelectedText("</section>");
textArea.insertEnterAndIndent();
textArea.insertEnterAndIndent();
textArea.setSelectedText("<section id=\"idn2010-3852m\">");
textArea.insertEnterAndIndent();
textArea.setSelectedText(" <h1 id=\"idn2010-3852m\">");
textArea.delete();
textArea.goToNextWord(false,false);
textArea.goToNextWord(false,false);
textArea.goToNextWord(false,false);
textArea.goToNextWord(false,false);
textArea.setSelectedText(" -");
textArea.goToPrevWord(false,false);
textArea.goToPrevWord(false,false);
textArea.goToPrevWord(false,false);
textArea.goToPrevWord(false,false);
textArea.goToPrevWord(false,false);
textArea.goToPrevWord(false,false);
textArea.goToPrevWord(false,false);

jedit'macro.VARIABLE

name::
* McsEngl.jedit'macro.VARIABLE@cptIt,

BeanShell syntax does not require that variables be declared or defined with their type, and that variables that are not typed when first used can have values of differing types assigned to them.
...
Without an explicit type declaration like String result, BeanShell variables can change their type at runtime depending on the object or data assigned to it.

The following variables are always available for use in BeanShell scripts:

buffer - a Buffer object represents the contents of the currently visible open text file.

view - A View represents the current top-level editor window, extending Java's JFrame class, that contains the various visible components of the program, including the text area, menu bar, toolbar, and any docked windows.
This variable has the same value as the return value of:
jEdit.getActiveView()

editPane - an EditPane object contains a text area and buffer switcher. A view can be split to display edit panes. Among other things, the EditPane class contains methods for selecting the buffer to edit.
Most of the time your macros will manipulate the buffer or the textArea. Sometimes you will need to use view as a parameter in a method call. You will probably only need to use editPane if your macros work with split views.
This variable has the same value as the return value of:
view.getEditPane()

textArea - a JEditTextArea is the visible component that displays the current buffer.
This variable has the same value as the return value of:
editPane.getTextArea()

wm - a DockableWindowManager is the visible component that manages dockable windows in the current view. This class is discussed in detail in Part IV, “Writing Plugins”. This object is useful for writing macros that interface with, open, or close plugin windows.
This variable has the same value the return value of:
view.getDockableWindowManager()

scriptPath - set to the full path of the script currently being executed.

scriptPath - set to the full path of the script currently being executed.

VARIABLES:
The following script illustrates the use of these keywords:
a = "top\n";
foo() {
a = "middle\n";
bar() {
a = "bottom\n";
textArea.setSelectedText(global.a);
textArea.setSelectedText(super.a);
// equivalent to textArea.setSelectedText(this.a):
textArea.setSelectedText(a);
}

bar();
}
foo();
When the script is run, the following text is inserted in the current buffer:
top
middle
bottom

jedit'macro.INCREASE-A-NUMBER

name::
* McsEngl.jedit'macro.INCREASE-A-NUMBER@cptIt,

 int hd = Integer.parseInt(textArea.getSelectedText());
 hd++;
 StringBuffer sb = new StringBuffer();
 sb.append(hd);

 SearchAndReplace.setSearchString("<h");
 SearchAndReplace.setAutoWrapAround(false);
 SearchAndReplace.setReverseSearch(false);
 SearchAndReplace.setIgnoreCase(false);
 SearchAndReplace.setRegexp(false);
 SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
 SearchAndReplace.find(view);
 textArea.goToNextCharacter(false);
 textArea.goToNextWord(true,false);
 textArea.delete();

 textArea.setSelectedText(sb.toString());

jedit'macro.SELECT-TEXT

name::
* McsEngl.jedit'macro.SELECT-TEXT@cptIt,

1) Hold <shift> and go next word

2) Use regular-expressions to search backward|forward for the text you want.

jedit'HELP

name::
* McsEngl.jedit'HELP@cptIt,

jedit'HelpViewer:
* import org.gjt.sp.jedit.EBComponent; INTERFACE
* import org.gjt.sp.jedit.EBMessage;
* import org.gjt.sp.jedit.EditBus;
* import org.gjt.sp.jedit.GUIUtilities;
* import org.gjt.sp.jedit.jEdit;
import org.gjt.sp.jedit.MiscUtilities#ql:jedit'miscutilities#;
import org.gjt.sp.jedit.msg.PluginUpdate;
import org.gjt.sp.jedit.msg.PropertiesChanged;
* import org.gjt.sp.util.Log;

jedit'HelpTOCPanel:
* import org.gjt.sp.jedit.browser.FileCellRenderer; // for icons
import org.gjt.sp.jedit.*;
* import org.gjt.sp.util.Log;
* import org.gjt.sp.util.StandardUtilities;
* import org.gjt.sp.util.XMLUtilities;

jedit'HelpSearchPanel:
import org.gjt.sp.jedit.gui.*;
import org.gjt.sp.jedit.io.VFSManager;
import org.gjt.sp.jedit.*;
import org.gjt.sp.util.Log;

jedit'HelpHistoryModel:

* jedit'HelpHistoryButton:
import org.gjt.sp.jedit.*;
* import org.gjt.sp.jedit.gui.RolloverButton;

* jedit'HelpIndex:

jedit'HelpHistoryModelListener (INTERFACE)

jedit'HelpViewerInterface:

jedit.jEDit:
* ActionContext
- View
jEdit.getActionContext(),name);
jEdit.getActiveView()
jEdit.getBooleanProperty(
jEdit.getColorProperty
jEdit.getFontProperty
jEdit.getProperty
jEdit._getBuffer(path)
jEdit.getJEditHome();

jedit.GUIUtilities:
GUIUtilities.loadIcon
GUIUtilities.error
GUIUtilities.getEditorIcon());
GUIUtilities.loadGeometry(
GUIUtilities.addSizeSaver(
GUIUtilities.initContinuousLayout(spli

jedit.VFS:

jedit.VFSManager:
VFSManager.getVFSForPath(parent);
VFSManager.getVFSForProtocol(protocol);

jedit'UrlVFS:

ActionContext extends JEditActionContext<EditAction, ActionSet>

jedit'PLUGIN

name::
* McsEngl.jedit'PLUGIN@cptIt,

SOURCE:
* http://plugins.jedit.org/

jedit'plugin'STRUCTURE:
* CORE-CLASS,
* WINDOW CLASSES,
* OPTION-PANE CLASS,
* RESOURCES,
* The plugin implements the necessary elements of the jEdit plugin API that were outlined in the last chapter: a plugin core class, perhaps a number of plugin window classes, maybe a plugin option pane class, and a set of required plugin resources.
Not every plugin has configurable options; some do not have a visible window. However, all will need a plugin core class and a minimum set of other resources.

jedit'plugin'ACTIONS:
Plugins may (and typically do) define actions that jEdit will perform on behalf of the plugin upon user request. Actions are small blocks of BeanShell code that provide the " glue " between user input and specific plugin routines. By convention, plugins display their available actions in submenus of jEdit's Plugins menu; each menu item corresponds to an action. The user can also assign actions to keyboard shortcuts, toolbar buttons or entries in the text area's right-click menu.

jedit'plugin'OPTIONS:
Plugins may provide a range of options that the user can modify to alter its configuration. If a plugin provides configuration options in accordance with the plugin API, jEdit will make them available in the Global Options dialog. Each plugin with options is listed in the tree view in that dialog under Plugin Options. Clicking on the tree node for a plugin causes the corresponding set of options to be displayed.

jedit'plugin'CORE'CLASS:
* Once all JAR files have been examined for the above resources, jEdit initializes all class files whose names end in Plugin.class, as identified in the first pass through the JAR archive. We will call these classes plugin core classes.

jedit'plugin.SpellCheck

name::
* McsEngl.jedit'plugin.SpellCheck@cptIt,

user-dictionary:
\Users\synagonism\AppData\Roaming\jEdit\plugins\cswilly.jeditPlugins.spell.SpellCheckPlugin

jedit'plugin.TextAutocomplete

_CREATED: {2014-01-26}

name::
* McsEngl.jedit'plugin.TextAutocomplete@cptIt,
* McsEngl.jedit'autocompeting@cptIt,
* McsEngl.jedit'TextAutocomplete-plugin@cptIt,

_DESCRIPTION:
TextAutocomplete collects "words" in the current buffer and those that you type and offers you automatically a list of possible completions. It's pretty similar to the jEdit's function "Complete Word" but it's automatic, you don't need to press any key to invoke the list of completions. Contrary to "Complete Word" it doesn't search the buffer every time for possible completions. Instead of that it keeps a list of remembered words (i.e. possible completions) that is created by parsing the buffer at startup and is updated with new words that you type.
You can export (save), import and modify the list of remembered words. It's also possible to import a default list of words for new buffers, see below. The plugin was inspired by a similar functionality in OpenOffice.org.
The plugin is configurable, you can define what is a "word", what words (not) to remember etc. - see below. It's also possible to modify manually the list of remembered words.
You must enable the autocompletion manually for every buffer where you want it (Plugins - TextAutocomplete - Start for buffer). Alternatively, you can enable the autocompletion for all buffers (Plugins - TextAutocomplete - Start for all buffers) or set the plugin to start automatically for every new buffer that you open (Plugins - Plugin Options... - TextAutocomplete - check "Start autom. for new buffers").
[help]

jedit'pta'key

name::
* McsEngl.jedit'pta'key@cptIt,

Control keys of the completions pop-up window
By default, the following keys may be used to control the completion pop-up window:
Escape - Cancel (dispose) the window.
Enter, Tab - Accept and insert the selected completion.
Up arrow - Select the completion above the currently selected one. It cycles through the list, so pressing Up on the first entry gets you to the last one.
Down arrow - Select the completion below the currently selected one. It cycles through the list.
Numbers 0-9 - Accept and insert the completion with the given number. You may disable it if you want numbers to be treated as regular characters or you may set it so that <a modifier key> + number inserts a completion while number without the modifier is just appended to the current word.

jedit'pta'list-of-remembered-words

name::
* McsEngl.jedit'pta'list-of-remembered-words@cptIt,
* McsEngl.jedit'pta'autocompleteDefaultWordList@cptIt,

_DESCRIPTION:
You can create a list of words that will be loaded by default for any buffer or for any buffer with a particular extension provided that TextAutocomplete is enabled for that buffer.
Every line of the file is taken as a 'word' - but see notes on the import word list function above. Currently this isn't yet configurable but it's planned for the future.

jedit'pta'BUFFER.ANNY

name::
* McsEngl.jedit'pta'BUFFER.ANNY@cptIt,

_DESCRIPTION:
If you want some words to be readily available in any buffer using the TextAutocomplete plugin then store them into the file named autocompleteDefaultWordList under the-jEdit-settings-directory#ql:jedit'settings_directory# (see Utilities - Settings Directory; for me it's /home/jholy/.jedit).

jedit'pta'BUFFER.EDIT-MODE

name::
* McsEngl.jedit'pta'BUFFER.EDIT-MODE@cptIt,

Keywords from buffer's syntax highlighting mode as completions
Since: 0.9.9
In jEdit each buffer has a particular edit mode, which may define special keywords that should be highlighted in a special way such as programming language's reserved words or function names. To help people using Text Autocomplete when writing code, it does load the list of keywords from the buffer's edit mode and adds it to the list of completions. In addition to that it also takes into account what characters are considered to be part of words by the edit mode (such as '@' in PHP).
Beware that some edit modes may define a large number of keywords (e.g. over 25.000 for PHP) and thus you may need to adjust the max. words to remember. With multiple buffers open this can also consume considerable memory.
By default this functionality is off and must be enabled in Options.

jedit'pta'BUFFER.EXTENSION

name::
* McsEngl.jedit'pta'BUFFER.EXTENSION@cptIt,

_DESCRIPTION:
If you want some words to be loaded only for a buffer (file) with a particular extension then store them into a file with the name autocompleteDefaultWordList and the appropriate extension under the settings directory. So to load some words by default only for PHP files, create the file autocompleteDefaultWordList.php. The word list file's extension must be in lower-case (i.e. not Php). If there is an extension-specific word list file then the common word list described above is not loaded.

jedit'pta'menu

name::
* McsEngl.jedit'pta'menu@cptIt,

Menu

jedit'pta'Start_for_buffer:
Enable autocompletion for the current buffer. The buffer is parsed to collect the words that already exist in it.

jedit'pta'Stop_for_buffer:
Disable autocompletion for the current buffer and forget all remembered words.

jedit'pta'Parse_buffer (collect words):
Scan the current buffer for words to remember and add them to the list of remembered words. You will rarely need this as buffer is scanned automatically upon start.

jedit'pta'Forget_all_remembered_words:
Forget all words in the completions list including those from scanning the buffer and those from other sources such as the default word list.

jedit'pta'Show_remembered_words:
Display the list of remember words that you can edit:
Add a word typed in the text field; the string is remembered as is, even if normally it wouldn't be considered to be a word - but it should start as a word, see the explanation above.
Delete selected - forgets the words you've selected in the list. To select multiple entries use Control+click.
Delete all - forget all remembered words. You can Parse buffer to get them back.
Additionally, you can:
Import words - read a file with previously saved words and add them to the list. One line is considered as one word and is added to the list "as is" even if it wouldn't normally be considered as a word - but it should start as a word, see the explanation above.
Export words - save the remembered words into a file, one per line.

jedit'pta'Start_for_all_buffers
Enable autocompletion for all currently opened buffers. (To detach from all buffers, open the Plugin Manager and under Manage uncheck and re-check the TextAutocomplete plugin.)

jedit'pta'Stop_for_all_buffers
Disable autocompletion for all buffers that have it enabled and forget all remembered words.

jedit'pta'options

name::
* McsEngl.jedit'pta'options@cptIt,

Options
It's possible to set some options that will apply to autocompletion in all buffers.
When you put the mouse pointer above some of the text field on the option page and wait for a while, a tool tip with more detailed description will show up.
Start autom. for new buffers
Enable autocompletion for every new buffer that you will open from that moment on. Default: Off
Filename filters
Specify filename glob patterns to be included or excluded from autocompletion. Default: Include all files
The following options influence words and completions.
Remember at max. words
The maximal number of words that should be remembered as potential completions. Notice, that completions are only offered based on the list of remembered words. Default: 1000
Minimal prefix length
Don't offer possible completions until at least the given number of characters have been typed.
Default: 2.
Remember words long at least
Don't remember words shorter than the given value.
Default: 5.
Complete keywords defined by syntax highlighting rules
Add keywords and characters that aren't considered as word separators from the buffer's syntax highlighting rules (defined by its edit mode such as 'php') to the completions list upon start. Warning: this can easily lead to reaching the limit of remembered words per buffer. If new word's aren't remembered, check the Utilities | Troubleshooting | Activity log for a line like TextAutocompletePlugin: AutoComplete.rememberWord: the max. number of remembered words(1000) has just been reached.
Default: false.
Consider only keywords from the main edit mode
When "Complete keywords defined by syntax highlighting rules" is enabled, check this to load keywords and no word separators only from the main edit mode. For example the edit mode for PHP has a number of "sub-modes" with additional keywords, over 25.450 in total. With this option you can save memory and the max. words limit while still getting completion of the most important keywords. (Unfortunately e.g. for PHP this doesn't help since its main mode contains no keywords.)
Value of the following properties is a beanshell expression that evaluates to either true or false. It can make use of special variables - see below. If the code isn't correct, BeanShell will throw an exception when it is first executed so you should make sure that it is all right; than it reverts to the default setting to prevent repetitions of the same error. The description of such an exception will mention either PreferencesManager.precompileCode or PreferencesManager.executeCachedCode and either the method accept (for "Belongs to word?") or isWordToRemember. The expression must be valid Java expression, so it should end with a semicolon.
Is word to remember? [code]
Return true if the word that has just been typed should be remembered. In addition to that, the word must also be at least as long as required by "Remember words long at least". The variable word (String) holds the word in question.
Example: ! word.startsWith("X");
Default: always true
Belongs to word? [code]
Return true when the insertion (the typed character) doesn't end the word being typed, in other words, it must return false for word separators. The available variables are prefix (String; the word that has been typed so far), insertion (char; the newly typed character), and noWordSeparators (String; characters that should not end a word, extracted e.g. from the buffer's edit mode; example: "@-_" in PHP). This determines what is considered as a word while the previous option determines whether something, that is already considered to be a word, should be remembered or not.
Example: Character.isLetterOrDigit(insertion) || insertion == '_' || (prefix.startsWith("<") && prefix.indexOf(">") == -1); // alphanumeric string or anything between < and >
Default: Character.isLetterOrDigit( insertion ) || noWordSeparators.indexOf( insertion ) >= 0;
Use the following properties to change the default control keys (see above). All of them take a list of keys separated by a single space or by a comma. A key is represented by the name of one of the constants of the class java.awt.event.KeyEvent that start with the prefix "VK_". You can only use special keys, that means keys that don't produce a character. It includes VK_ENTER, VK_ESCAPE, VK_BACK_SPACE, VK_DELETE, VK_F1 etc., VK_TAB, VK_UP, VK_DOWN and others.
Accept with key
Accept and insert the currently selected completion.
Default: VK_ENTER,VK_TAB
Dispose with key
Hide the window with completions.
Default: VK_ESCAPE
Up in completions key
Select the completion above.
Default: VK_UP
Down in completions key
Select the completion below.
Default: VK_DOWN
Select compl. by number
If checked, pressing a number inserts the completion with that index. If unchecked, the number is just inserted as an ordinary character. Default: Checked (i.e. enabled)
Select by number modifier
If you press the selected modifier key + a number, the completion with that index is inserted. If you press only the number, it's inserted into the buffer. Note: Some of the modifiers may not work for you. There are reports of problems with AltGr. Default: None (no modifier key, pressing the number inserts the completion)
The button Reset options resets them to the default values.

jedit'pta'version

name::
* McsEngl.jedit'pta'version@cptIt,

Version: 1.0.0
Author: Jakub Holy
It's pretty similar to the jEdit's function "Complete Word" but it's automatic, you don't need to press any key to invoke the list of completions.

jedit'plugin.CONSOLE

name::
* McsEngl.jedit'plugin.CONSOLE@cptIt,
* McsEngl.jedit'console-plugin@cptIt,

_DEFINITION:
The Console plugin has four main functions:
* Running external programs and commands.
* Parsing the output of external programs for errors in a variety of formats, and reporting those errors using the ErrorList plugin.
* The Commando feature provides graphical front-ends, specified using an XML file, to command-line tools.
* Providing an extensible framework for other plugins that need to display streamed output.

COMMANDS OF SYSTEM SHELL:
* CA+c  = shows the console window.
* javac Euro.java + second icon  - executes the command and shows its output in a buffer.
* $d  - goes to directory of current buffer.
* cd ..  - goes to previous directory
* cd -  - goes to the directory you were before.
* dir /o  - list the contents of current directory.
* ls  - list the contents of current directory.
* pwd  - shows current directory.

_ENCODING:
* IBM737, in plugin options.

jedit'Resource

name::
* McsEngl.jedit'Resource@cptIt,

_SPECIFIC:
* http://jedit.org/users-guide/index.html,
* http://jedit.uservoice.com/forums/96611-general

jedit'SETTINGS

name::
* McsEngl.jedit'SETTINGS@cptIt,

_DIRECTORY:
* \\Users\\synag\\AppData\\Roaming\\jEdit, Win11
* \Documents and Settings\HoKoNoUmo\Application Data\jEdit,
* OLD < version5: \Documents and Settings\HoKoNoUmo\.jedit,

jedit'properties_file:
/.jedit/properties:
contains the most of the settings.

jedit'settings-directory

name::
* McsEngl.jedit'settings-directory@cptIt,

jedit'directory.settings:
* \Documents and Settings\HoKoNoUmo\Application Data\jEdit\

The location of the settings directory is system-specific; it is printed to the activity log (Utilities>Troubleshooting>Activity Log).
For example:
[message] jEdit: Settings directory is /home/slava/.jedit
[message] jEdit: Settings directory is \Documents and Settings\nikkas\.jedit

jedit'TEXT'AREA

name::
* McsEngl.jedit'TEXT'AREA@cptIt,

FONT: courier new 16 plain.

ANCIENT-GREEK:
* I have set the "PALATINO LINOTYPE 16 plain" font and I 've added the polytoniki keyboard and that's it.

pmce.NOTEPAD++

name::
* McsEngl.pmce.NOTEPAD++@cptIt,
* McsEngl.nodepad-plus-plus@cptIt,
* McsEngl.npp@cptIt,

_ADDRESS.WPG:
* http://notepad-plus-plus.org//

pmce.LIGHT-TABLE

_CREATED: {2014-02-04}

name::
* McsEngl.pmce.LIGHT-TABLE@cptIt,
* McsEngl.light-table-editor@cptIt,

_ADDRESS.WPG:
* http://www.lighttable.com//

_DESCRIPTION:
Light Table is an integrated development environment for software engineering developed by Chris Granger and Robert Attorri. It features real-time feedback allowing instant execution, debugging and access to documentation.[5] The instant feedback provides an unusual execution environment intended to help developing abstractions.[6]
The development team attempted to create a program which shows the programmer what the effects of their additions are in real-time, rather than requiring them to work out the effects as they write the code.[7] Though the program began by only supporting Clojure, it has since aimed to support Python and JavaScript due to their popularity.[6] The developers claim that the software can reduce programming time by up to 20%.[6]
It was financed by a Kickstarter fundraising campaign and subsequently backed by Y Combinator.[8] The Kickstarter campaign aimed to raise $200,000 USD and finished with $316,720 USD.[7]
[http://en.wikipedia.org/wiki/Light_Table_(software)]

pmce.SUBLIME-TEXT (pst)

_CREATED: {2014-02-04}

name::
* McsEngl.pmce.SUBLIME-TEXT (pst)@cptIt,
* McsEngl.pgm.sublime-text@cptIt,
* McsEngl.pgmSmt@cptIt,
* McsEngl.pgm.sublime-text@cptIt,
* McsEngl.sublime-text@cptIt,
* McsEngl.sublime-editor@cptIt,

* McsEngl.pgmSmt@cptIt,

_DESCRIPTION:
Sublime Text is a sophisticated text editor for code, markup and prose.
You'll love the slick user interface, extraordinary features and amazing performance.
[http://www.sublimetext.com/]

pgmSmt'command

name::
* McsEngl.pgmSmt'command@cptIt,
* McsEngl.pgmSmtcmd@cptIt,
* McsEngl.smtcmd@cptIt,

_ADDRESS.WPG:
* http://docs.sublimetext.info/en/latest/reference/commands.html,

smtcmd.cut:
{"command": "cut", "args": null},

smtcmd.insert:
{"command": "insert", "args": {"characters": " \n <a class=\"clsPreview\" >"}},

smtcmd.move:
// moves cursor one line UP.
{"command": "move", "args":  {"by": "lines", "forward": false}},
// moves forward end of word.
{"command": "move", "args":  {"by": "word_ends", "forward": true}},

smtcmd.move_to:
{"command": "move_to", "args": {"to": "hardeol"}},

smtcmd.paste:
{"command": "paste", "args": null},

pgmSmt'command-line

name::
* McsEngl.pgmSmt'command-line@cptIt,

"\program files\sublime text 2\sublime_text.exe" \public_html\pgmHtml\js\pgmHtml.js:59:9
===
opens sublime with that file at 59 line at 9 column.

pgmSmt'configuring

name::
* McsEngl.pgmSmt'configuring@cptIt,

pgmSmt'key-binding

name::
* McsEngl.pgmSmt'key-binding@cptIt,

FOLDING:
Ctrl+K, Ctrl+1|2|3

_macro:
* preferences/key-binding-user:
{
"keys": ["f10"],
"command": "run_macro_file",
"args": {"file": "Packages/User/console.sublime-macro"}
},

pgmSmt'macro

name::
* McsEngl.pgmSmt'macro@cptIt,
* McsEngl.smtm@cptIt,

_DESCRIPTION:
Macro files are JSON files with the extension .sublime-macro.
As an alternative to recording a macro, you can edit it by hand. Just save a new file with the .sublime-macro extension under Packages/User and add commands to it. Macro files have this format:
[
{"command": "move_to", "args": {"to": "hardeol"}},
{"command": "insert", "args": {"characters": "\n"}}
]
[http://docs.sublimetext.info/en/latest/extensibility/macros.html]

smtm'directory

name::
* McsEngl.smtm'directory@cptIt,

\Users\synagonism\AppData\Roaming\Sublime Text 2\Packages\User

smtm'key-binding#ql:pgmsmt'key-binding#

name::
* McsEngl.smtm'key-binding@cptIt,

smtm'name

name::
* McsEngl.smtm'name@cptIt,

name.sublime-macro

pgmSmt'resource

name::
* McsEngl.pgmSmt'resource@cptIt,

_ADDRESS.WPG:
* http://www.sublimetext.com/2,
* http://sublime-text-unofficial-documentation.readthedocs.org/en/sublime-text-2/index.html,
* autocompete: https://github.com/SublimeCodeIntel/SublimeCodeIntel,

pmce.VISUAL-STUDIO-CODE (vsce)

name::
* McsEngl.pmce.VISUAL-STUDIO-CODE (vsce)@cptIt,
* McsEngl.pmce.VSC@cptIt,
* McsEngl.visual-studio-code-editor@cptIt,
* McsEngl.vsc-editor@cptIt,
* McsEngl.vsce@cptIt,

_DESCRIPTION:
Visual Studio Code is a lightweight but powerful source code editor which runs on your desktop and is available for Windows, OS X and Linux. It comes with built-in support for JavaScript, TypeScript and Node.js and has a rich ecosystem of extensions for other languages (such as C++, C#, Python, PHP) and runtimes. Begin your journey with VS Code with these introductory videos.
[https://code.visualstudio.com/docs?start=true]

vsce'resource

name::
* McsEngl.vsce'resource@cptIt,

_ADDRESS.WPG::
* https://code.visualstudio.com/docs/languages/cpp,

FvMcs.Cmrpgm.editor.CKEditor (cke)

_CREATED: {2011-02-20}

name::
* McsEngl.conceptIt583,
* McsEngl.Cmrpgm.editor.CKEditor (cke)@cptIt,
* McsEngl.FvMcs.Cmrpgm.editor.CKEditor (cke)@cptIt,
* McsEngl.CKEditor@cptIt583,
* McsEngl.CKEditor-browser-based-editor@cptIt583,
* McsEngl.cke@cptIt583,
* McsEngl.pgmCKEditor@cptIt,

DEFINITION

CKEditor is an open-source javascript wysiwyg html editor.

cke'GENERIC

_GENERIC:
* editor html javascript wysiwyg opensource,

cke'ATTRIBUTE

name::
* McsEngl.cke'ATTRIBUTE@cptIt,
* McsEngl.cke'Feature@cptIt,

cke'Link

name::
* McsEngl.cke'Link@cptIt,

When editing a document with links, CKEditor deliberately disables these links to allow proper editing of them. Some users would still like the ability to follow links in edit mode, as in Word.
A custom hotfix would be to include this in your config-File (jQuery required):
CKEDITOR.on('instanceReady', function(ev) {            
 //catch ctrl+clicks on <a>'s in edit mode to open hrefs in new tab/window
 $('iframe').contents().click(function(e) {    
   if(typeof e.target.href != 'undefined' && e.ctrlKey == true) {      
     window.open(e.target.href, 'new' + e.screenX);
   }
 });  
});
[http://dev.ckeditor.com/ticket/7145]

cke'TableOfContents

name::
* McsEngl.cke'TableOfContents@cptIt,

Add Table of Contents (TOC) plugin
[http://dev.ckeditor.com/ticket/2748]

cke'code

name::
* McsEngl.cke'code@cptIt,

cke'code'line

name::
* McsEngl.cke'code'line@cptIt,

141 166
LINES OF CODE
[http://ckeditor.com/demo] 2013-10-01

cke'code.API

name::
* McsEngl.cke'code.API@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/#!/api,

cke'accessibility

name::
* McsEngl.cke'accessibility@cptIt,
* McsEngl.cke'key@cptIt,
* McsEngl.cke'keyboard@cptIt,

The best on Accessibility

CKEditor offers the best accessibility features available on browser based editors. It introduced several innovations that are now becoming market standards, in respect with the WAI-ARIA and Section 508 requirements.

Try out the following keyboard features inside the editor:

ALT+0: Shows the accessibility help, which is available for users with screen-readers to learn how to use the editor.
ALT+F10: Moves the keyboard focus to the toolbar. When in the toolbar:
 ARROW-RIGHT and ARROW-LEFT: Move inside a toolbar group.
 TAB: Move to the next toolbar group. With SHIFT, moves back.
 ENTER or SPACE: Activate the selected item.
 ESC: Return to the editing area.
ALT+F11: Moves the keyboard focus to the elements path. The navigation on it is similar to the above described to the toolbar.
[http://ckeditor.com/demo#a11y]

cke'key.alt_0:
* cke'key.accessibility_help:
Accessibility Help
Press ALT+0

cke'key.alt_f10:
* cke'key.toolbar:
Editor Toolbar
Press ALT+F10 to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.

cke'key.ctrl_b:
* cke'key.bold_command:
Bold command
Press CTRL+B

cke'key.ctrl_z:
* cke'key.undo_command:
Undo command
Press CTRL+Z

cke'key.ctrl_i:
* cke'key.italic_command:
Italic command
Press CTRL+I

cke'key.ctrl_u:
Underline command
Press CTRL+U

cke'key.ctrl_l:
Link command
Press CTRL+L

cke'key.ctrl_alt_dash:
Toolbar Collapse command
Press ALT+DASH

cke'key.shift_ctrl_closebraket:
Access next focus space command
Press SHIFT+CTRL+CLOSE BRAKET to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.

cke'key.shift_ctrl_f10:
SHIFT+CTRL+F10 or APPLICATION KEY to open context-menu

cke'key.shift_ctrl_openbracket:
Access previous focus space command
Press SHIFT+CTRL+OPEN BRACKET to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.

cke'key.shift_ctrl_z:
* cke'key.redo:
Redo command
Press SHIFT+CTRL+Z

cke'enter-key-behavior

name::
* McsEngl.cke'enter-key-behavior@cptIt,

cke'key.enter:

cke'tab-key-navigation

name::
* McsEngl.cke'tab-key-navigation@cptIt,

cke'key.tab:
TAB key navigation through CKEditor

CKEditor participates on the page TAB order and behavior just like any other for field.

Hit TAB and SHIFT+TAB in the following form to try it out.

cke'base-url

name::
* McsEngl.cke'base-url@cptIt,

_CODE.CKE:
The base href URL used to resolve relative and absolute URLs in the editor content.

config.baseHref = 'http://www.example.com/path/';
Defaults to: ''
[http://docs.ckeditor.com/#!/api/CKEDITOR.config]

cke'character-managing

name::
* McsEngl.cke'character-managing@cptIt,

_CODE.CKE:
entities_processNumerical : Boolean/String
Whether to convert all remaining characters not included in the ASCII character table to their relative decimal numeric representation of HTML entity. When set to force, it will convert all entities into this format.

For example the phrase 'This is Chinese: ??.' is output as 'This is Chinese: 汉语.'

config.entities_processNumerical = true;
config.entities_processNumerical = 'force'; // Converts from ' ' into ' ';
Defaults to: false
[http://docs.ckeditor.com/#!/api/CKEDITOR.config]

cke'caret

name::
* McsEngl.cke'caret@cptIt,

cke'Magic_line:
This example is focused on demonstrating the Magic Line feature.

In some contexts, it is very difficult to position the caret for typing on specific places, like the start of the document when it starts with a table, or between a table and a rule.

Move the mouse on some of this hard to focus places and see the magic-line appearing. Then, just click on its button.
[]

cke'command

name::
* McsEngl.cke'command@cptIt,

_DESCRIPTION:
Creating an Editor Command

It is customary for CKEditor plugins to define an editor command that performs an action associated with them. The command should be defined inside the init function in order to be created upon the initialization of a CKEditor instance.

In this case we are going to use the CKEDITOR.editor.addCommand function to define an insertTimestamp command that will insert the current date and time into CKEditor:

editor.addCommand( 'insertTimestamp', {
exec: function( editor ) {
var now = new Date();
editor.insertHtml( 'The current date and time is: <em>' + now.toString() + '</em>' );
}
});
The exec method defines a function that will be fired when the insertTimestamp command is executed.

The most important part is to insert the HTML code into the document. To do this, we will use the insertHtml function. This function can be used to insert arbitrary HTML code into the document, so with a bit of tweaking you can customize the timestamp plugin code to add other HTML elements into the CKEditor editing area.
[http://docs.ckeditor.com/#!/guide/plugin_sdk_intro]

cke'command.DIALOG

name::
* McsEngl.cke'command.DIALOG@cptIt,

We want our plugin to have a dialog window, so we need to define an editor command that opens a new dialog window. To do this, we will need to use the editor.addCommand function to register the abbrDialog command.

editor.addCommand( 'abbrDialog', new CKEDITOR.dialogCommand( 'abbrDialog' ) );
That command opens the abbrDialog dialog that we are going to define in a moment by using the CKEDITOR.dialogCommand class.
[http://docs.ckeditor.com/#!/guide/plugin_sdk_sample_1]

cke'content-filtering

name::
* McsEngl.cke'content-filtering@cptIt,
* McsEngl.cke'ACF@cptIt,
* McsEngl.cke'Advanced-Content-Filter@cptIt,

ACF is a highly configurable CKEditor core feature available since CKEditor 4.1. It limits and adapts input data (HTML code added in source mode or by the editor.setData method, pasted HTML code, etc.) so it matches the editor configuration in the best possible way. It may also deactivate features which generate HTML code that is not allowed by the configuration.

Advanced Content Filter works in two modes:

automatic – the filter is configured by editor features (like plugins, buttons, and commands) that are enabled with configuration options such as CKEDITOR.config.plugins, CKEDITOR.config.extraPlugins, and CKEDITOR.config.toolbar,
custom – the filter is configured by the CKEDITOR.config.allowedContent option and only features that match this setting are activated.
In both modes it is possible to extend the filter configuration by using the CKEDITOR.config.extraAllowedContent setting.
[http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter]

cke'allowedContent_config, cke'config.allowedContent:
* allowedContent:
         'h1 h2 h3 p blockquote strong em;' +
         'a[!href];' +
         'img(left,right)[!src,alt,width,height];' +
         'table tr th td caption;' +
         'span{!font-family};' +
         'span{!color};' +
         'span(!marker);' +
         'del ins'
===
Please note that since CKEditor 4.1 all editor plugins that create content should be integrated with Advanced Content Filter (ACF).
To follow this guide and at the same time comply with the new CKEditor 4.1 requirements you need to either set
* config.allowedContent = true
in order to disable content filtering or integrate your plugin with ACF. For more information, please refer to the official Advanced Content Filter integration guide.
[http://docs.ckeditor.com/#!/guide/plugin_sdk_sample_1]

cke'dialog

name::
* McsEngl.cke'dialog@cptIt,
* McsEngl.cke'dialog-window@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/#!/api/CKEDITOR.dialog,

_DESCRIPTION:
This is the base class for runtime dialog objects. An instance of this class represents a single named dialog for a single editor instance.
var dialogObj = new CKEDITOR.dialog( editor, 'smiley' );
[http://docs.ckeditor.com/#!/api/CKEDITOR.dialog]

dialog
CKEDITOR.dialog
CKEDITOR.dialog.definition
CKEDITOR.dialog.definition.button
CKEDITOR.dialog.definition.checkbox
CKEDITOR.dialog.definition.content
CKEDITOR.dialog.definition.file
CKEDITOR.dialog.definition.fileButton
CKEDITOR.dialog.definition.hbox
CKEDITOR.dialog.definition.html
CKEDITOR.dialog.definition.labeledElement
CKEDITOR.dialog.definition.radio
CKEDITOR.dialog.definition.select
CKEDITOR.dialog.definition.textInput
CKEDITOR.dialog.definition.textarea
CKEDITOR.dialog.definition.uiElement
CKEDITOR.dialog.definition.vbox
[http://docs.ckeditor.com/#!/api]

cke'dialog'doing

name::
* McsEngl.cke'dialog'doing@cptIt,
* McsEngl.cke'dialog'behavior@cptIt,

_CODE.CKE:
   // This method is invoked once a user clicks the OK button, confirming the dialog.
   onOk: function() {

     // The context of this function is the dialog object itself.
     // http://docs.ckeditor.com/#!/api/CKEDITOR.dialog
     var dialog = this;

     // Creates a new <abbr> element.
     var abbr = editor.document.createElement( 'abbr' );

     // Set element attribute and text, by getting the defined field values.
     abbr.setAttribute( 'title', dialog.getValueOf( 'tab-basic', 'title' ) );
     abbr.setText( dialog.getValueOf( 'tab-basic', 'abbr' ) );

     // Now get yet another field value, from the advanced tab.
     var id = dialog.getValueOf( 'tab-adv', 'id' );
     if ( id )
       abbr.setAttribute( 'id', id );

     // Finally, inserts the element at the editor caret position.
     editor.insertElement( abbr );
   }
[http://docs.ckeditor.com/#!/guide/plugin_sdk_sample_1]

cke'dialog'minHeight

name::
* McsEngl.cke'dialog'minHeight@cptIt,

minHeight: 200,
[http://docs.ckeditor.com/#!/guide/plugin_sdk_sample_1]

cke'dialog'minWidth

name::
* McsEngl.cke'dialog'minWidth@cptIt,

minWidth: 400,
minHeight: 200,
[http://docs.ckeditor.com/#!/guide/plugin_sdk_sample_1]

cke'dialog'onOk-function

name::
* McsEngl.cke'dialog'onOk-function@cptIt,
* McsEngl.cke'onOk-dialog-function@cptIt,

_CODE.CKE:
// This method is invoked once a user clicks the OK button, confirming the dialog.
onOk: function() {

// The context of this function is the dialog object itself.
// http://docs.ckeditor.com/#!/api/CKEDITOR.dialog
var dialog = this;

// Creates a new <abbr> element.
var abbr = this.element;

// Invoke the commit methods of all dialog elements, so the <abbr> element gets modified.
this.commitContent( abbr );

// Finally, in if insert mode, inserts the element at the editor caret position.
if ( this.insertMode )
editor.insertElement( abbr );
}
[\File1a\ckeditor-dev\plugins\abbr\dialogs\abbr.js]

cke'dialog'onShow-function

name::
* McsEngl.cke'dialog'onShow-function@cptIt,
* McsEngl.cke'onShow-dialog-function@cptIt,

_CODE.CKE:
// Invoked when the dialog is loaded.
onShow: function() {

// Get the selection in the editor.
var selection = editor.getSelection();

// Get the element at the start of the selection.
var element = selection.getStartElement();

// Get the <abbr> element closest to the selection, if any.
if ( element )
element = element.getAscendant( 'abbr', true );

// Create a new <abbr> element if it does not exist.
if ( !element || element.getName() != 'abbr' ) {
element = editor.document.createElement( 'abbr' );

// Flag the insertion mode for later use.
this.insertMode = true;
}
else
this.insertMode = false;

// Store the reference to the <abbr> element in an internal property, for later use.
this.element = element;

// Invoke the setup methods of all dialog elements, so they can load the element attributes.
if ( !this.insertMode )
this.setupContent( this.element );
},
[\File1a\ckeditor-dev\plugins\abbr\dialogs\abbr.js]

cke'dialog'registering

name::
* McsEngl.cke'dialog'registering@cptIt,

// Register our dialog file. this.path is the plugin folder path.
 CKEDITOR.dialog.add( 'abbrDialog', this.path + 'dialogs/abbr.js' );
[http://docs.ckeditor.com/#!/guide/plugin_sdk_sample_1]

cke'dialog'tab

name::
* McsEngl.cke'dialog'tab@cptIt,

contents: [
{
id: 'tab-basic',
label: 'Basic Settings',
elements: [
// UI elements of the first tab will be defined here
]
},
{
id: 'tab-adv',
label: 'Advanced Settings',
elements: [
// UI elements of the second tab will be defined here
]
}
]
[http://docs.ckeditor.com/#!/guide/plugin_sdk_sample_1]

Dialog Window Tabs Elements
User interface elements that can be added to a dialog window tab are defined in the elements parameter, which is an array of CKEDITOR.dialog.definition.uiElement objects.

The Basic Settings tab will contain two mandatory text fields (type: 'text') with the abbreviation and its explanation. Since both fields are obligatory, it is useful to add a simple validation mechanism in order to ensure that the user fills them.

The Advanced Settings tab will contain a single optional text field that allows the user to assign an id to the abbreviation element.

The code snippet presented below shows a full definition of the contents of both plugin tabs.

contents: [
{
id: 'tab-basic',
label: 'Basic Settings',
elements: [
{
type: 'text',
id: 'abbr',
label: 'Abbreviation',
validate: CKEDITOR.dialog.validate.notEmpty( "Abbreviation field cannot be empty" )
},
{
type: 'text',
id: 'title',
label: 'Explanation',
validate: CKEDITOR.dialog.validate.notEmpty( "Explanation field cannot be empty" )
}
]
},
{
id: 'tab-adv',
label: 'Advanced Settings',
elements: [
{
type: 'text',
id: 'id',
label: 'Id'
}
]
}
]
[http://docs.ckeditor.com/#!/guide/plugin_sdk_sample_1]

cke'dialog'title

name::
* McsEngl.cke'dialog'title@cptIt,

title: 'Abbreviation Properties',
[http://docs.ckeditor.com/#!/guide/plugin_sdk_sample_1]

cke'plugin.dialog (33)

name::
* McsEngl.cke'plugin.dialog (33)@cptIt,
* McsEngl.cke'dialog-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin33.html,

_DESCRIPTION:
The floating dialog plugin.

cke'dom

name::
* McsEngl.cke'dom@cptIt,

dom
CKEDITOR.dom.comment
CKEDITOR.dom.document
CKEDITOR.dom.documentFragment
CKEDITOR.dom.domObject
CKEDITOR.dom.element
CKEDITOR.dom.elementPath
CKEDITOR.dom.event
CKEDITOR.dom.iterator
CKEDITOR.dom.node
CKEDITOR.dom.nodeList
CKEDITOR.dom.range
CKEDITOR.dom.rangeList
CKEDITOR.dom.rangeListIterator
CKEDITOR.dom.selection
CKEDITOR.dom.text
CKEDITOR.dom.walker
CKEDITOR.dom.window
[http://docs.ckeditor.com/#!/api]

cke'editing.FULL-PAGE

name::
* McsEngl.cke'editing.FULL-PAGE@cptIt,
* McsEngl.cke'full-page-editing@cptIt,

_CODE.CKE:
fullPage : Boolean
Indicates whether the contents to be edited are being input as a full HTML page. A full page includes the <html>, <head>, and <body> elements. The final output will also reflect this setting, including the <body> contents only if this setting is disabled.

config.fullPage = true;
Defaults to: false

Available since: 3.1
[http://docs.ckeditor.com/#!/api/CKEDITOR.config]

cke'editing.INLINE

name::
* McsEngl.cke'editing.INLINE@cptIt,
* McsEngl.cke'inline-editing@cptIt,

cke'execute-command

name::
* McsEngl.cke'execute-command@cptIt,

_CODE.CKE:
// Get the editor instance that we want to interact with.
 var oEditor = CKEDITOR.instances.editor1;

 // Check the active editing mode.
 if ( oEditor.mode == 'wysiwyg' )
 {
   // Execute the command.
   // http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#execCommand
   oEditor.execCommand( commandName );
 }
 else
   alert( 'You must be in WYSIWYG mode!' );

cke'filter

name::
* McsEngl.cke'filter@cptIt,

filter
CKEDITOR.filter
CKEDITOR.filter.allowedContentRules
CKEDITOR.filter.contentRule
CKEDITOR.filter.transformationsTools
[http://docs.ckeditor.com/#!/api]

cke'focus

name::
* McsEngl.cke'focus@cptIt,

_CODE.CKE:
startupFocus : Boolean
Sets whether the editable should have the focus when editor is loading for the first time.

config.startupFocus = true;
Defaults to: false
[http://docs.ckeditor.com/#!/api/CKEDITOR.config]
===
//on page config:
startupFocus : true,

cke'get-editor

name::
* McsEngl.cke'get-editor@cptIt,

_CODE.CKE:
// Get the editor instance that we want to interact with.
 var oEditor = CKEDITOR.instances.editor1;

cke'html-element

name::
* McsEngl.cke'html-element@cptIt,
* McsEngl.cke'dom-element@cptIt,
* McsEngl.cke'helm@cptIt,

cke'helm'attribute

name::
* McsEngl.cke'helm'attribute@cptIt,

// Set element attribute and text, by getting the defined field values.
 abbr.setAttribute( 'title', dialog.getValueOf( 'tab-basic', 'title' ) );
 abbr.setText( dialog.getValueOf( 'tab-basic', 'abbr' ) );
[\File1a\ckeditor-dev\plugins\abbr\dialogs\abbr.js]

cke'helm'content

name::
* McsEngl.cke'helm'content@cptIt,

// Set element attribute and text, by getting the defined field values.
 abbr.setAttribute( 'title', dialog.getValueOf( 'tab-basic', 'title' ) );
 abbr.setText( dialog.getValueOf( 'tab-basic', 'abbr' ) );
[\File1a\ckeditor-dev\plugins\abbr\dialogs\abbr.js]

cke'helm'creation

name::
* McsEngl.cke'helm'creation@cptIt,

// Creates a new <abbr> element.
 var abbr = editor.document.createElement( 'abbr' );
[\File1a\ckeditor-dev\plugins\abbr\dialogs\abbr.js]

cke'helm'doing

name::
* McsEngl.cke'helm'doing@cptIt,

_CODE.CKE:
if ( element.getAscendant( 'abbr', true ) ) {
//check if parent is 'abbr'
[http://docs.ckeditor.com/#!/guide/plugin_sdk_sample_2]

cke'helm'inserting-into-editor

name::
* McsEngl.cke'helm'inserting-into-editor@cptIt,

_CODE.CKE:
* editor.insertElement( abbr );
Please note that another way to insert HTML code into CKEditor is using the insertHtml function that adds HTML code at the location of the cursor in the document:
* editor.insertHtml( '<h2>This is a sample header</h2><p>This is a sample paragraph.</p>' );
[http://docs.ckeditor.com/#!/guide/plugin_sdk_sample_1]

cke'htmlParser

name::
* McsEngl.cke'htmlParser@cptIt,

htmlParser
CKEDITOR.htmlParser
CKEDITOR.htmlParser.basicWriter
CKEDITOR.htmlParser.cdata
CKEDITOR.htmlParser.comment
CKEDITOR.htmlParser.cssStyle
CKEDITOR.htmlParser.element
CKEDITOR.htmlParser.filter
CKEDITOR.htmlParser.fragment
CKEDITOR.htmlParser.node
CKEDITOR.htmlParser.text
[http://docs.ckeditor.com/#!/api]

cke'markup

name::
* McsEngl.cke'markup@cptIt,

Data Processing is a powerful feature of CKEditor. By creating plugins, it is possible to make CKEditor handle different data formats transparently, like BBCode, Wiki format, Markdown, etc.
[http://ckeditor.com/demo#bbcode]

cke'BBCode

name::
* McsEngl.cke'BBCode@cptIt,

cke'Markdown

name::
* McsEngl.cke'Markdown@cptIt,

cke'XHTML

name::
* McsEngl.cke'XHTML@cptIt,

cke'Wiki-format

name::
* McsEngl.cke'Wiki-format@cptIt,

cke'maximize-screen

name::
* McsEngl.cke'maximize-screen@cptIt,

_CODE.CKE:
var editor = CKEDITOR.replace( 'editor1', {
fullPage : true,
startupFocus : true,
toolbarCanCollapse : true, //set a button for this
filebrowserBrowseUrl : 'http://localhost/elfinder/elfinder.html',
});

editor.on( 'instanceReady', function(event){
event.editor.execCommand( 'maximize');
});

cke'new-page

name::
* McsEngl.cke'new-page@cptIt,

_CODE.CKE:
newpage_html : String
The HTML to load in the editor when the "new page" command is executed.

config.newpage_html = '<p>Type your text here.</p>';
Defaults to: ''
[http://docs.ckeditor.com/#!/api/CKEDITOR.config]

cke'save-to-database

name::
* McsEngl.cke'save-to-database@cptIt,

_ADDRESS.WPG:
* http://ckeditor.com/forums/Support/Save-HTML-Page-server,

cke'spell-checking

name::
* McsEngl.cke'spell-checking@cptIt,

_CODE.CKE:
disableNativeSpellChecker : Boolean
Disables the built-in words spell checker if browser provides one.

Note: Although word suggestions provided by browsers (natively) will not appear in CKEditor's default context menu, users can always reach the native context menu by holding the Ctrl key when right-clicking if browserContextMenuOnCtrl is enabled or you're simply not using the context menu plugin.

config.disableNativeSpellChecker = false;
Defaults to: true
[http://docs.ckeditor.com/#!/api/CKEDITOR.config]

cke'template

name::
* McsEngl.cke'template@cptIt,

_CODE.CKE:
templates : String
The templates definition set to use. It accepts a list of names separated by comma. It must match definitions loaded with the templates_files setting.

config.templates = 'my_templates';
Defaults to: 'default'
[http://docs.ckeditor.com/#!/api/CKEDITOR.config]
===

templates_files : Object
The list of templates definition files to load.

config.templates_files = [
'/editor_templates/site_default.js',
'http://www.example.com/user_templates.js
];
[http://docs.ckeditor.com/#!/api/CKEDITOR.config]
===

templates_replaceContent : Boolean
Whether the "Replace actual contents" checkbox is checked by default in the Templates dialog.

config.templates_replaceContent = false;
Defaults to: true
[http://docs.ckeditor.com/#!/api/CKEDITOR.config]

cke'toolbar

name::
* McsEngl.cke'toolbar@cptIt,

_CODE.CKE:
toolbar : Array/String
The toolbox (alias toolbar) definition. It is a toolbar name or an array of toolbars (strips), each one being also an array, containing a list of UI items.

If set to null, generate toolbar automatically using all available buttons and toolbarGroups as a toolbar groups layout.

// Defines a toolbar with only one strip containing the "Source" button, a
// separator and the "Bold" and "Italic" buttons.
config.toolbar = [
[ 'Source', '-', 'Bold', 'Italic' ]
];

// Similar to example the above, defines a "Basic" toolbar with only one strip containing three buttons.
// Note that this setting is composed by "toolbar_" added by the toolbar name, which in this case is called "Basic".
// This second part of the setting name can be anything. You must use this name in the CKEDITOR.config.toolbar setting,
// so you instruct the editor which toolbar_(name) setting to use.
config.toolbar_Basic = [
[ 'Source', '-', 'Bold', 'Italic' ]
];
// Load toolbar_Name where Name = Basic.
config.toolbar = 'Basic';
Defaults to: null
[http://docs.ckeditor.com/#!/api/CKEDITOR.config]
===

toolbarCanCollapse : Boolean
Whether the toolbar can be collapsed by the user. If disabled, the collapser button will not be displayed.

config.toolbarCanCollapse = true;
Defaults to: false
[http://docs.ckeditor.com/#!/api/CKEDITOR.config]
===
 toolbarCanCollapse : true,


===

cke'toolbar'button

name::
* McsEngl.cke'toolbar'button@cptIt,

Creating the Toolbar Button

The simplified timestamp plugin should work through a toolbar button. To this end, inside the init function we need to define a button that will be associated with the insertTimestamp command:

editor.ui.addButton( 'Timestamp', {
label: 'Insert Timestamp',
command: 'insertTimestamp',
toolbar: 'insert'
});
The above CKEDITOR.ui.addButton function call created a button name 'Timestamp' with the following properties;

label: the textual part of the button (if visible) and its tooltip.
command: the command to be executed once the button is activated. This is the command we created in the previews step.
toolbar: the toolbar group into which position the button.
[http://docs.ckeditor.com/#!/guide/plugin_sdk_intro]

cke'toolbar'configuration

name::
* McsEngl.cke'toolbar'configuration@cptIt,
* McsEngl.cke'toolbar'customization@cptIt,

cke'removeButtons_config, cke'config.removeButtons:
* List of toolbar button names that must not be rendered. This will work as
* well for non-button toolbar items, like the Font combos.
*
*    config.removeButtons = 'Underline,JustifyCenter';

cke'toolbar_config, cke'config.toolbar:
* Complete List of Toolbar Items for CKEditor

items:
"Source"
"Save"
"NewPage"
"DocProps"
"Preview"
"Print"
"Templates"
"document"

items:
"Cut"
"Copy"
"Paste"
"PasteText"
"PasteFromWord"
"Undo"
"Redo"

items:
"Find"
"Replace"
"SelectAll"
"Scayt"

items:
"Form"
"Checkbox"
"Radio"
"TextField"
"Textarea"
"Select"
"Button"
"ImageButton"
"HiddenField"

items:
"Bold"
"Italic"
"Underline"
"Strike"
"Subscript"
"Superscript"
"RemoveFormat"

items:
"NumberedList"
"BulletedList"
"Outdent"
"Indent"
"Blockquote"
"CreateDiv"
"JustifyLeft"
"JustifyCenter"
"JustifyRight"
"JustifyBlock"
"BidiLtr"
"BidiRtl"

items:
"Link"
"Unlink"
"Anchor"

items:
"CreatePlaceholder"
"Image"
"Flash"
"Table"
"HorizontalRule"
"Smiley"
"SpecialChar"
"PageBreak"
"Iframe"
"InsertPre"

items:
"Styles"
"Format"
"Font"
"FontSize"

items:
"TextColor"
"BGColor"

items:
"UIColor"
"Maximize"
"ShowBlocks"

items:
"button1"
"button2"
"button3"
"oembed"
"MediaEmbed"

items:
"About"

cke'toolbar'group

name::
* McsEngl.cke'toolbar'group@cptIt,

cke'toolbarGroups, cke'config.toolbarGroups:
toolbarGroups : [
{ name: 'mode' },
{ name: 'newpage' },
{ name: 'document', groups: [ 'document', 'doctools' ] },
{ name: 'clipboard', groups: [ 'clipboard', 'undo' ] },
{ name: 'editing', groups: [ 'find', 'selection', 'spellchecker' ] },
{ name: 'forms' },
'/',
{ name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] },
{ name: 'paragraph', groups: [ 'list', 'indent', 'blocks', 'align' ] },
{ name: 'links' },
{ name: 'insert' },
'/',
{ name: 'styles' },
{ name: 'colors' },
{ name: 'tools' },
{ name: 'others' },
{ name: 'about' }
],

cke'toolbarLocation, cke'config.toolbarLocation:
toolbarLocation : String
The "UI space" to which rendering the toolbar. For the default editor implementation, the recommended options are 'top' and 'bottom'.
config.toolbarLocation = 'bottom';
Defaults to: 'top'
[http://docs.ckeditor.com/#!/api/CKEDITOR.config]

cke'ui

name::
* McsEngl.cke'ui@cptIt,

ui
CKEDITOR.ui
CKEDITOR.ui.button
CKEDITOR.ui.button.handler
CKEDITOR.ui.dialog.button
CKEDITOR.ui.dialog.checkbox
CKEDITOR.ui.dialog.fieldset
CKEDITOR.ui.dialog.file
CKEDITOR.ui.dialog.fileButton
CKEDITOR.ui.dialog.hbox
CKEDITOR.ui.dialog.html
CKEDITOR.ui.dialog.iframeElement
CKEDITOR.ui.dialog.labeledElement
CKEDITOR.ui.dialog.radio
CKEDITOR.ui.dialog.select
CKEDITOR.ui.dialog.textInput
CKEDITOR.ui.dialog.textarea
CKEDITOR.ui.dialog.uiElement
CKEDITOR.ui.dialog.vbox
CKEDITOR.ui.floatPanel
CKEDITOR.ui.handlerDefinition
CKEDITOR.ui.menuButton
CKEDITOR.ui.panel
CKEDITOR.ui.panel.block
CKEDITOR.ui.panel.handler
CKEDITOR.ui.panelButton
CKEDITOR.ui.richCombo
CKEDITOR.ui.richCombo.handler
[http://docs.ckeditor.com/#!/api]

cke'CKSource

name::
* McsEngl.cke'CKSource@cptIt,
* McsEngl.CKSource@cptIt,

CKSource took its first steps in 2003 when Frederico Caldeira Knabben accepted the challenge of giving the online community a WYSIWYG text editor. The initial project carried his initials, later renamed CKEditor. Since then, CKEditor acquired an important role in the web applications universe, becoming the most used browser-based text editor on the globe, achieving over 7 million downloads.
[http://cksource.com/about]

cke'Configuring

name::
* McsEngl.cke'Configuring@cptIt,

_ADDRESS.WPG:
* all congig options: http://docs.ckeditor.com/#!/api/CKEDITOR.config,

_DESCRIPTION:
CKEditor comes with a rich set of configuration options that make it possible to customize its appearance, features, and behavior. The main configuration file is named config.js. This file can be found in the root of the CKEditor installation folder.
[http://docs.ckeditor.com/#!/guide/dev_configuration]

_CODE.CKE:
CKEDITOR.config.skin = '...';

cke'configuring'method

name::
* McsEngl.cke'configuring'method@cptIt,

_SPECIFIC:
* in-page,
* config.js-file,
* custom,

cke'configuring'order

name::
* McsEngl.cke'configuring'order@cptIt,

Configuration Loading Order

You are not required to only use one of the above configuration options. The methods described above can be mixed and the configuration will be loaded properly. The following list presents the configuration loading order used when creating an editor instance:

An editor instance is created. At this point all its default configuration options are set.
If the customConfig setting has been set "in-page", that file is loaded, otherwise the default config.js file is loaded. All settings in the custom configuration file override current instance settings.
If the settings loaded in step 2 also define a new customConfig value, another custom configuration file is loaded and its settings override current instance settings. This happens recursively for all files until no customConfig is defined.
Finally the settings defined "in-page" override current instance settings (except customConfig, which has been used in step 1).
[http://docs.ckeditor.com/#!/guide/dev_configuration]

cke'configuring'option

name::
* McsEngl.cke'configuring'option@cptIt,
* McsEngl.cke'config-option@cptIt,
* McsEngl.cke'configuration-option@cptIt,
* McsEngl.cke'option-of-configuration@cptIt,

cke'baseHref_config, cke'config.baseHref:
* The base href URL used to resolve relative and absolute URLs in the
* editor content.
*
*    config.baseHref = 'http://www.example.com/path/';

cke'contentsLanguage_config, cke'config.contentsLanguage:
* Language code of the writting language which is used to author the editor
* contents.
*
*    config.contentsLanguage = 'fr';

cke'contentsCss_config, cke'config.contentsCss:
* contentsCss: 'assets/outputxhtml/outputxhtml.css',

cke'disableNativeTableHandles_config, cke'config.disableNativeTableHandles:
* Disables the "table tools" offered natively by the browser (currently
* Firefox only) to make quick table editing operations, like adding or
* deleting rows and columns.
*
*    config.disableNativeTableHandles = false;

cke'disableObjectResizing_config, cke'config.disableObjectResizing:
* Disables the ability of resize objects (image and tables) in the editing area.
*    config.disableObjectResizing = true;

cke'enterMode_config, cke'config.enterMode:
CKEDITOR.ENTER_DIV
ENTER_P – new <p> paragraphs are created;
ENTER_BR – lines are broken with <br> elements;
ENTER_DIV – new <div> blocks are created.

cke'indentOffset_config, cke'config.indentOffset:
* Size of each indentation step.
*
*    config.indentOffset = 4;

cke'language_config, cke'config.language:
* 'de' //german

cke'newpage_html_config, cke'config.newpage_html:
* The HTML to load in the editor when the "new page" command is executed.
*
*    config.newpage_html = '<p>Type your text here.</p>';

cke'removeDialogTabs_config, cke'config.removeDialogTabs:
* removeDialogTabs = 'image:advanced;link:advanced;flash:advanced;creatediv:advanced;editdiv:advanced';

cke'resize_minWidth_config, cke'config.resize_minWidth:
* The minimum editor width, in pixels, when resizing the editor interface by using the resize handle.
* Note: It falls back to editor's actual width if it is smaller than the default value.
*
*    config.resize_minWidth = 500;

cke'clipboard_defaultContentType_config, cke'config.clipboard_defaultContentType:
* The default content type is used when pasted data cannot be clearly recognized as HTML or text.
*
* For example: `'foo'` may come from a plain text editor or a website. It isn't possible to recognize content
* type in this case, so default will be used. However, it's clear that `'<b>example</b> text'` is an HTML
* and its origin is webpage, email or other rich text editor.
*
* **Note:** If content type is text, then styles of context of paste are preserved.
*
*    CKEDITOR.config.clipboard_defaultContentType = 'text';
*
* @since 4.0
* @cfg {'html'/'text'} [clipboard_defaultContentType='html']

cke'_config, cke'config.:
*

cke'_config, cke'config.:
*

cke'_config, cke'config.:
*

cke'_config, cke'config.:
*

cke'configuring.In-Page

name::
* McsEngl.cke'configuring.In-Page@cptIt,
* McsEngl.cke'configuration-method.in-page@cptIt,

Defining Configuration In-Page

The best way to set the CKEditor configuration is in-page, when creating editor instances. This method lets you avoid modifying the original distribution files in the CKEditor installation folder, making the upgrade task easier.

In-page settings can be passed to any of the editor instance creation functions, namely CKEDITOR.replace and CKEDITOR.appendTo. For example:

CKEDITOR.replace( 'editor1', {
toolbar: 'Basic',
uiColor: '#9AB8F3'
});
Note that the configuration options are passed through a literal object definition (starting with a "{" symbol and ending with a "}" symbol). Because of this the proper syntax for each option is (''configuration name'') : (''configuration value''). Be sure to not use the "equal" character (=) in place of the colon character (:).
[http://docs.ckeditor.com/#!/guide/dev_configuration]

CKEDITOR.replace( 'textarea_id', {
   enterMode : CKEDITOR.ENTER_DIV
   // Load the German interface.
   language : 'de'
 });

cke'congiguring.config.js-file

name::
* McsEngl.cke'congiguring.config.js-file@cptIt,
* McsEngl.cke'configuration-method.config.js@cptIt,

CKEditor settings can also be configured by using the config.js#ql:cke'file.config.js_at_root# file. By default this file is mostly empty. To change CKEditor configuration, add the settings that you want to modify to the config.js file. For example:

CKEDITOR.editorConfig = function( config ) {
config.language = 'fr';
config.uiColor = '#AADC6E';
};
In order to apply the configuration settings, the CKEDITOR.editorConfig function must always be defined. The config.js file will be executed in the scope of your page, so you can also make references to variables defined in-page or even in other JavaScript files.
[http://docs.ckeditor.com/#!/guide/dev_configuration]

_PageEdit:
CKEDITOR.editorConfig = function(config) {
 config.toolbar_CustomFull = [ [ 'Source', '-', 'Save', 'NewPage', 'Preview', '-', 'Templates' /*],
     [ 'Cut', 'Copy' ,'Paste','PasteText','PasteFromWord' , '-'*/, 'Print', /* 'SpellChecker', 'Scayt' */],
     [ 'Undo', 'Redo', '-', 'Find', 'Replace', '-', 'SelectAll', 'RemoveFormat' ],
     [ 'Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton', 'HiddenField' ],
     [ 'Image', 'Flash', 'Table', 'HorizontalRule', 'Smiley', 'SpecialChar', 'PageBreak' ], '/',
     [ 'Bold', 'Italic', 'Underline', 'Strike', '-', 'Subscript', 'Superscript' ],
     [ 'NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', 'Blockquote' ],
     [ 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock' ], [ 'Link', 'Unlink', 'Anchor' ],
     [ 'Styles', 'Format', 'Font', 'FontSize' ], [ 'TextColor', 'BGColor' ], [ /* 'Maximize', */'ShowBlocks'/* ,'-','About' */] ];

 config.toolbar_CustomBasic = [ [ 'Source', '-', 'Save', 'NewPage', 'Preview', '-', 'Templates' ],
       [ 'Bold', 'Italic', 'Underline', 'Strike', '-', 'Subscript', 'Superscript' ],
       [ 'NumberedList', 'BulletedList'],
       [ 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock' ], [ 'Link', 'Unlink', 'Anchor' ],
       [ 'Styles', 'Format', 'Font', 'FontSize' ], [ 'TextColor', 'BGColor' ], [ /* 'Maximize', */'ShowBlocks'/* ,'-','About' */] ];

 config.fullPage = true;
 config.startupFocus = true;
 CKEDITOR.config.extraPlugins = "codemirrorarea,tableresize";
};

cke'congiguring.CUSTOM-FILE

name::
* McsEngl.cke'congiguring.CUSTOM-FILE@cptIt,
* McsEngl.cke'configuration-method.custom-file@cptIt,

_CODE.CKE:
Using a Custom Configuration File

Using a custom configuration file is another recommended method of setting CKEditor configuration. Instead of using the default config.js file, you can create a copy of that file anywhere in your website and simply point the editor instances to load it. The advantage of this approach is that in this way you can avoid changing the original file, which makes it easier to upgrade CKEditor later by simply overwriting all files.

Suppose you copied the config.js file to a folder named custom in the root of your website. You also renamed the file to ckeditor_config.js. At that point it is enough to only set the customConfig configuration option when creating the editor instances to use the customized settings defined in the file. For example:

CKEDITOR.replace( 'editor1', {
customConfig: '/custom/ckeditor_config.js'
});
The custom configuration file must look just like the default config.js file.
[http://docs.ckeditor.com/#!/guide/dev_configuration]
===

customConfig : String
The URL path for the custom configuration file to be loaded. If not overloaded with inline configuration, it defaults to the config.js file present in the root of the CKEditor installation directory.

CKEditor will recursively load custom configuration files defined inside other custom configuration files.

// Load a specific configuration file.
CKEDITOR.replace( 'myfield', { customConfig: '/myconfig.js' } );

// Do not load any custom configuration file.
CKEDITOR.replace( 'myfield', { customConfig: '' } );
Defaults to: "<CKEditor folder>/config.js"
[http://docs.ckeditor.com/#!/api/CKEDITOR.config]

cke'DEV

name::
* McsEngl.cke'DEV@cptIt,

_ADDRESS.WPG:
* searche: https://dev.ckeditor.com/search,
* https://github.com/ckeditor/ckeditor-dev,
* http://docs.ckeditor.com/#!/guide/dev_source,
* http://ckeditor.com/forums,
* http://docs.cksource.com/CKEditor_3.x/Howto,
* http://cksource.com/search/results,

cke'building

name::
* McsEngl.cke'building@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/#!/guide/dev_build,

cke'CKBuilder

name::
* McsEngl.cke'CKBuilder@cptIt,
* McsEngl.CKBuilder@cptIt,

ckbuilder'RUN:
java -jar ckbuilder/1.6.1/ckbuilder.jar --build ../../ release --version="4.1.2 DEV" --build-config build-config.js --overwrite "release"

ckbuilder'option:
--build ../../ release //the dir for output in relation to jar file.
--version="4.1.2 DEV"
--build-config build-config.js
--overwrite "release"

\File1a\ckeditor-dev-master\dev\builder\build-config.js:
which plugins to include

cke'nightly-build

name::
* McsEngl.cke'nightly-build@cptIt,

_ADDRESS.WPG:
* http://nightly.ckeditor.com//
- check these demo, before ISSUING.

cke'source-code

name::
* McsEngl.cke'source-code@cptIt,

_ADDRESS.WPG:
* https://github.com/ckeditor/ckeditor-dev,

cke'source-doc

name::
* McsEngl.cke'source-doc@cptIt,

cke'cfg_source_doc:
* @cfg {Boolean} [startupOutlineBlocks=false]

cke'fileOverview_source_doc:
* @fileOverview The "wysiwygarea" plugin. It registers the "wysiwyg" editing

cke'license_source_doc:
* @license Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.

cke'member_source_doc:
* @member CKEDITOR.config

cke'Directory (root)

name::
* McsEngl.cke'Directory (root)@cptIt,
* McsEngl.cke'dir@cptIt,
* McsEngl.cke'root-dir@cptIt,

_LIST:
_samples — this directory contains CKEditor samples. Using the sample files is the easiest way to verify whether your setup works properly. If CKEditor works correctly, you can safely remove the whole _ samples folder.

_source — this directory contains CKEditor source code. It is needed only if you intend to use the ckeditor_source.js script and load CKEditor from source files.

adapters — this directory contains CKEditor adapters. It may be removed if you do not use any adapters, like the jQuery one.

images — this directory contains CKEditor graphics files. It is necessary for CKEditor to work.

lang — this directory contains CKEditor language files. It is necessary for CKEditor to work, although you can remove the unused language files if you force the CKEditor interface language using the CKEDITOR.config.language property set in the config.js file.

plugins — this directory contains the plugin files and is necessary for CKEditor to work. Due to the modular construction of the editor some core functionality was delegated to plugins. You can remove some unused plugins that are not packed in ckeditor.js (and thus listed in the ckeditor.pack file) and are only loaded on demand through the CKEDITOR.config.extraPlugins property.

skins — this directory contains CKEditor skin files along with toolbar buttons and stylesheet definitions and is necessary for CKEditor to work. You can however remove unused skins and their files.

themes — is necessary for CKEditor to work.

cke'core-dir

name::
* McsEngl.cke'core-dir@cptIt,
* McsEngl.cke'core.skins@cptIt,

cke'lang-dir

name::
* McsEngl.cke'lang-dir@cptIt,
* McsEngl.cke'lang.skins@cptIt,

cke'plugins-dir

name::
* McsEngl.cke'plugins-dir@cptIt,
* McsEngl.cke'plugins.skins@cptIt,

cke'samples-dir

name::
* McsEngl.cke'samples-dir@cptIt,
* McsEngl.cke'samples.skins@cptIt,

cke'skins-dir

name::
* McsEngl.cke'skins-dir@cptIt,
* McsEngl.cke'dir.skins@cptIt,

cke'File

name::
* McsEngl.cke'File@cptIt,

From the CKEditor root directory you can safely remove the following files:
CHANGES.html
All .asp files (if you do not use ASP integration)
All .php files (if you do not use PHP integration)
ckeditor.pack
ckeditor_basic.js and ckeditor_basic_source.js files (if you do not use this method for loading CKEditor)
ckeditor_source.js (if you do not use this method for loading CKEditor)
INSTALL.html

cke'file.alphabetically:
cke'file.af.js_at_root.lang
cke'file.ar.js_at_root.lang
cke'file.basicwriter.js_at_root.core.htmlparser
cke'file.bg.js_at_root.lang
cke'file.bn.js_at_root.lang
cke'file.bootstrap.js_at_root.core
cke'file.bs.js_at_root.lang
cke'file.ca.js_at_root.lang
cke'file.cdata.js_at_root.core.htmlparser
cke'file.ckeditor.js_at_root.core
cke'file.ckeditor_base.js_at_root.core
cke'file.ckeditor_basic.js_at_root.core
cke'file.command.js_at_root.core
cke'file.commanddefinition.js_at_root.core
cke'file.comment.js_at_root.core.dom
cke'file.comment.js_at_root.core.htmlparser
cke'file.config.js_at_root.core
cke'file.cs.js_at_root.lang
cke'file.cy.js_at_root.lang
cke'file.da.js_at_root.lang
cke'file.dataprocessor.js_at_root.core
cke'file.de.js_at_root.lang
cke'file.document.js_at_root.core.dom
cke'file.documentfragment.js_at_root.core.dom
cke'file.dom.js_at_root.core
cke'file.domobject.js_at_root.core.dom
cke'file.dtd.js_at_root.core
cke'file.editable.js_at_root.core
cke'file.editor.js_at_root.core
cke'file.editor_basic.js_at_root.core
cke'file.el.js_at_root.lang
cke'file.element.js_at_root.core.dom
cke'file.element.js_at_root.core.htmlparser
cke'file.elementpath.js_at_root.core.dom
cke'file.en-au.js_at_root.lang
cke'file.en-ca.js_at_root.lang
cke'file.en-gb.js_at_root.lang
cke'file.en.js_at_root.lang
cke'file.env.js_at_root.core
cke'file.eo.js_at_root.lang
cke'file.es.js_at_root.lang
cke'file.et.js_at_root.lang
cke'file.eu.js_at_root.lang
cke'file.event.js_at_root.core
cke'file.event.js_at_root.core.dom
cke'file.eventInfo.js_at_root.core
cke'file.fa.js_at_root.lang
cke'file.fi.js_at_root.lang
cke'file.filter.js_at_root.core
cke'file.filter.js_at_root.core.htmlparser
cke'file.fo.js_at_root.lang
cke'file.focusmanager.js_at_root.core
cke'file.fr-ca.js_at_root.lang
cke'file.fr.js_at_root.lang
cke'file.fragment.js_at_root.core.htmlparser
cke'file.gl.js_at_root.lang
cke'file.gu.js_at_root.lang
cke'file.he.js_at_root.lang
cke'file.hi.js_at_root.lang
cke'file.hr.js_at_root.lang
cke'file.htmldataprocessor.js_at_root.core
cke'file.htmlparser.js_at_root.core
cke'file.hu.js_at_root.lang
cke'file.inline.js_at_root.core.creators
cke'file.is.js_at_root.lang
cke'file.it.js_at_root.lang
cke'file.iterator.js_at_root.core.dom
cke'file.ja.js_at_root.lang
cke'file.ka.js_at_root.lang
cke'file.keystrokehandler.js_at_root.core
cke'file.km.js_at_root.lang
cke'file.ko.js_at_root.lang
cke'file.ku.js_at_root.lang
cke'file.lang.js_at_root.core
cke'file.loader.js_at_root.core
cke'file.lt.js_at_root.lang
cke'file.lv.js_at_root.lang
cke'file.mk.js_at_root.lang
cke'file.mn.js_at_root.lang
cke'file.ms.js_at_root.lang
cke'file.nb.js_at_root.lang
cke'file.nl.js_at_root.lang
cke'file.no.js_at_root.lang
cke'file.node.js_at_root.core.dom
cke'file.node.js_at_root.core.htmlparser
cke'file.nodelist.js_at_root.core.dom
cke'file.pl.js_at_root.lang
cke'file.plugindefinition.js_at_root.core
cke'file.plugins.js_at_root.core
cke'file.pt-br.js_at_root.lang
cke'file.pt.js_at_root.lang
cke'file.range.js_at_root.core.dom
cke'file.rangelist.js_at_root.core.dom
cke'file.resourcemanager.js_at_root.core
cke'file.ro.js_at_root.lang
cke'file.ru.js_at_root.lang
cke'file.scriptloader.js_at_root.core
cke'file.selection.js_at_root.core
cke'file.sk.js_at_root.lang
cke'file.skin.js_at_root.core
cke'file.sl.js_at_root.lang
cke'file.sq.js_at_root.lang
cke'file.sr-latn.js_at_root.lang
cke'file.sr.js_at_root.lang
cke'file.style.js_at_root.core
cke'file.sv.js_at_root.lang
cke'file.template.js_at_root.core
cke'file.text.js_at_root.core.dom
cke'file.text.js_at_root.core.htmlparser
cke'file.th.js_at_root.lang
cke'file.themedui.js_at_root.core.creators
cke'file.tools.js_at_root.core
cke'file.tr.js_at_root.lang
cke'file.translationstatus.txt_at_root.lang
cke'file.ug.js_at_root.lang
cke'file.ui.js_at_root.core
cke'file.uk.js_at_root.lang
cke'file.vi.js_at_root.lang
cke'file.walker.js_at_root.core.dom
cke'file.window.js_at_root.core.dom
cke'file.zh-cn.js_at_root.lang
cke'file.zh.js_at_root.lang,

'ckeditor_basic.js',
'_source/core/ckeditor_base.js',
'_source/core/event.js',
'_source/core/editor_basic.js',
'_source/core/env.js',
'_source/core/ckeditor_basic.js'

'ckeditor.js',
'_source/core/ckeditor_base.js',
'_source/core/event.js',
'_source/core/editor_basic.js',
'_source/core/env.js',
'_source/core/ckeditor_basic.js',
'_source/core/dom.js',
'_source/core/tools.js',
'_source/core/dtd.js',
'_source/core/dom/event.js',
'_source/core/dom/domobject.js',
'_source/core/dom/window.js',
'_source/core/dom/document.js',
'_source/core/dom/node.js',
'_source/core/dom/nodelist.js',
'_source/core/dom/element.js',
'_source/core/command.js',
'_source/core/config.js',
'_source/core/focusmanager.js',
'_source/core/lang.js',
'_source/core/scriptloader.js',
'_source/core/resourcemanager.js',
'_source/core/plugins.js',
'_source/core/skins.js',
'_source/core/themes.js',
'_source/core/ui.js',
'_source/core/editor.js',
'_source/core/htmlparser.js',
'_source/core/htmlparser/comment.js',
'_source/core/htmlparser/text.js',
'_source/core/htmlparser/cdata.js',
'_source/core/htmlparser/fragment.js',
'_source/core/htmlparser/element.js',
'_source/core/htmlparser/filter.js',
'_source/core/htmlparser/basicwriter.js',
'_source/core/ckeditor.js',
'_source/core/dom/comment.js',
'_source/core/dom/elementpath.js',
'_source/core/dom/text.js',
'_source/core/dom/documentfragment.js',
'_source/core/dom/walker.js',
'_source/core/dom/range.js',
'_source/core/dom/rangelist.js',
'_source/core/_bootstrap.js',
'_source/skins/kama/skin.js',
//'_source/lang/en.js',
'_source/plugins/about/plugin.js',
'_source/plugins/a11yhelp/plugin.js',
'_source/plugins/basicstyles/plugin.js',
'_source/plugins/bidi/plugin.js',
'_source/plugins/blockquote/plugin.js',
'_source/plugins/button/plugin.js',
'_source/plugins/clipboard/plugin.js',
'_source/plugins/colorbutton/plugin.js',
'_source/plugins/colordialog/plugin.js',
'_source/plugins/contextmenu/plugin.js',
'_source/plugins/dialogadvtab/plugin.js',
'_source/plugins/div/plugin.js',
'_source/plugins/elementspath/plugin.js',
'_source/plugins/enterkey/plugin.js',
'_source/plugins/entities/plugin.js',
'_source/plugins/filebrowser/plugin.js',
'_source/plugins/find/plugin.js',
'_source/plugins/flash/plugin.js',
'_source/plugins/font/plugin.js',
'_source/plugins/format/plugin.js',
'_source/plugins/forms/plugin.js',
'_source/plugins/horizontalrule/plugin.js',
'_source/plugins/htmldataprocessor/plugin.js',
'_source/plugins/iframe/plugin.js',
'_source/plugins/image/plugin.js',
'_source/plugins/indent/plugin.js',
'_source/plugins/justify/plugin.js',
'_source/plugins/keystrokes/plugin.js',
'_source/plugins/link/plugin.js',
'_source/plugins/list/plugin.js',
'_source/plugins/liststyle/plugin.js',
'_source/plugins/maximize/plugin.js',
'_source/plugins/newpage/plugin.js',
'_source/plugins/pagebreak/plugin.js',
'_source/plugins/pastefromword/plugin.js',
'_source/plugins/pastetext/plugin.js',
'_source/plugins/popup/plugin.js',
'_source/plugins/preview/plugin.js',
'_source/plugins/print/plugin.js',
'_source/plugins/removeformat/plugin.js',
'_source/plugins/resize/plugin.js',
'_source/plugins/save/plugin.js',
'_source/plugins/scayt/plugin.js',
'_source/plugins/smiley/plugin.js',
'_source/plugins/showblocks/plugin.js',
'_source/plugins/showborders/plugin.js',
'_source/plugins/sourcearea/plugin.js',
'_source/plugins/stylescombo/plugin.js',
'_source/plugins/table/plugin.js',
'_source/plugins/tabletools/plugin.js',
'_source/plugins/specialchar/plugin.js',
'_source/plugins/tab/plugin.js',
'_source/plugins/templates/plugin.js',
'_source/plugins/toolbar/plugin.js',
'_source/plugins/undo/plugin.js',
'_source/plugins/wysiwygarea/plugin.js',
'_source/plugins/wsc/plugin.js',
'_source/plugins/dialog/plugin.js',
'_source/plugins/styles/plugin.js',
'_source/plugins/domiterator/plugin.js',
'_source/plugins/panelbutton/plugin.js',
'_source/plugins/floatpanel/plugin.js',
'_source/plugins/menu/plugin.js',
'_source/plugins/editingblock/plugin.js',
'_source/plugins/selection/plugin.js',
'_source/plugins/fakeobjects/plugin.js',
'_source/plugins/richcombo/plugin.js',
'_source/plugins/htmlwriter/plugin.js',
'_source/plugins/menubutton/plugin.js',
'_source/plugins/dialogui/plugin.js',
'_source/plugins/panel/plugin.js',
'_source/plugins/listblock/plugin.js',
'_source/themes/default/theme.js'

cke'file.ckeditor.js-at-root

name::
* McsEngl.cke'file.ckeditor.js-at-root@cptIt,
* McsEngl.cke'ckeditor.js-file@cptIt,

_DIR:
* root,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/ckeditor.html,

cke'file.ckeditor-base.js-at-root.core

name::
* McsEngl.cke'file.ckeditor-base.js-at-root.core@cptIt,
* McsEngl.cke'ckeditor-base.js-file@cptIt,

_DIR:
* root.core,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/ckeditor_base.html,

_DESCRIPTION:
Contains the FIRST and essential part of the CKEDITOR object definition.
This is the API entry point. The entire CKEditor code runs under this object.

cke'file.command.js-at-root.core

name::
* McsEngl.cke'file.command.js-at-root.core@cptIt,
* McsEngl.cke'command.js-file@cptIt,

_DIR:
* root.core,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/command.html,

_DESCRIPTION:
Represents a command that can be executed on an editor instance.

cke'file.config.js-at-root

name::
* McsEngl.cke'file.config.js-at-root@cptIt,
* McsEngl.cke'config.js-file@cptIt,

_DIR:
* root,

_LOCAL:
* jedit \File1a\WebsiteSngm\program\ckeditor411\config.js,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/config.html,
* http://docs.ckeditor.com/#!/api/CKEDITOR.config,

_DESCRIPTION:
CKEditor comes with a rich set of configuration options that make it possible to customize its appearance, features, and behavior. The main configuration file is named config.js. This file can be found in the root of the CKEditor installation folder.
[http://docs.ckeditor.com/#!/guide/dev_configuration]

cke'file.htmlparser.js-at-root.core

name::
* McsEngl.cke'file.htmlparser.js-at-root.core@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/htmlparser.html,

cke'file.resourcemanager-at-root.core

name::
* McsEngl.cke'file.resourcemanager-at-root.core@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/resourcemanager.html,

_DESCRIPTION:
Defines the CKEDITOR.resourceManager class, which is the base for resource managers, like plugins.

cke'file.themedui.js-at-root.core.creators

name::
* McsEngl.cke'file.themedui.js-at-root.core.creators@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/themedui.html,

_DESCRIPTION:

cke'file-manager

name::
* McsEngl.cke'file-manager@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/#!/guide/dev_file_browse_upload,
* http://docs.ckeditor.com/#!/guide/dev_file_browser_api,
* http://docs.cksource.com/CKEditor_3.x/Developers_Guide/File_Browser_(Uploader)/Custom_File_Browser,

_CODE.CKE:
//integrate file-manager
CKEDITOR.replace( 'editor1', {
 filebrowserBrowseUrl : 'http://localhost/elfinder/elfinder.html',
filebrowserWindowWidth : '640',
filebrowserWindowHeight : '480'
});
===
CKEDITOR.replace( 'editor2',
{
filebrowserBrowseUrl : '/browser/browse.php?type=Images',
filebrowserUploadUrl : '/uploader/upload.php?type=Files'
});
[http://docs.cksource.com/CKEditor_3.x/Developers_Guide/File_Browser_(Uploader)/Custom_File_Browser]
===

The location of an external file browser that should be launched when the Browse Server button is pressed. If configured, the Browse Server button will appear in the Link, Image, and Flash dialog windows.

See the File Browser/Uploader documentation.

config.filebrowserBrowseUrl = '/browser/browse.php';
Defaults to: '' (empty string = disabled)

Available since: 3.0
[http://docs.ckeditor.com/#!/api/CKEDITOR.config]
===

filebrowserImageBrowseLinkUrl : String
The location of an external file browser that should be launched when the Browse Server button is pressed in the Link...

filebrowserImageBrowseUrl : String
The location of an external file browser that should be launched when the Browse Server button is pressed in the Imag...

filebrowserImageUploadUrl : String
The location of the script that handles file uploads in the Image dialog window. ...
[http://docs.ckeditor.com/#!/api/CKEDITOR.config]
===

filebrowserUploadUrl : String
The location of the script that handles file uploads. If set, the Upload tab will appear in the Link, Image, and Flash dialog windows.

See the File Browser/Uploader documentation.

config.filebrowserUploadUrl = '/uploader/upload.php';
Defaults to: '' (empty string = disabled)

Available since: 3.0
[http://docs.ckeditor.com/#!/api/CKEDITOR.config]
===

filebrowserWindowFeatures : String
The features to use in the file browser popup window. ...

filebrowserWindowHeight : Number/String
The height of the file browser popup window. ...

filebrowserWindowWidth : Number/String
The width of the file browser popup window. ...
[http://docs.ckeditor.com/#!/api/CKEDITOR.config]

cke'eXtplorer

name::
* McsEngl.cke'eXtplorer@cptIt,

var editor = CKEDITOR.replace( 'editor1', {
filebrowserBrowseUrl : 'http://synagonism.net/program/extplorer/',

cke'filebrowser-plugin (50)

name::
* McsEngl.cke'filebrowser-plugin (50)@cptIt,
* McsEngl.cke'plugin.filebrowser@cptIt,

_DESCRIPTION:
File Browser
This plugin is to integrate the editor with external file browse/upload application, it defines the protocol to associate with any dialog field that has a filebrowser property in dialog definition, to any file manager application.
[http://ckeditor.com/addon/filebrowser]

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin50.html,
* http://ckeditor.com/addon/filebrowser,

cke'elFinder

name::
* McsEngl.cke'elFinder@cptIt,

_ADDRESS.WPG:
* http://stackoverflow.com/questions/12985676/need-to-integrate-elfinder-file-manager-with-ckeditor,
* http://stackoverflow.com/questions/16466706/ckeditor-and-elfinder-in-modal-dialog,
* http://stackoverflow.com/questions/16732766/integrating-ckeditor-into-elfinder?rq=1,
* http://stackoverflow.com/questions/16466706/ckeditor-and-elfinder-in-modal-dialog?rq=1,
* http://elrte.org/redmine/attachments/409/elfinder.html,

var editor = CKEDITOR.replace( 'editor1', {
filebrowserBrowseUrl : 'http://localhost/elfinder/elfinder.html',
filebrowserUploadUrl : 'http://localhost/elfinder/elfinder.html', //problematic
});

cke'FCKeditor

name::
* McsEngl.cke'FCKeditor@cptIt,
* McsEngl.FCKeditor@cptIt,

_ADDRESS.WPG:
* http://docs.cksource.com/FCKeditor_2.x/Developers_Guide,
* http://java.fckeditor.net//

cke'human

name::
* McsEngl.cke'human@cptIt,
* McsEngl.cke'people@cptIt,

Frederico Caldeira Knabben
[http://cksource.com/team]

cke'Installation

name::
* McsEngl.cke'Installation@cptIt,
* McsEngl.cke'integration@cptIt,

_ADDRESS.WPG:
* development: https://github.com/ckeditor/ckeditor-dev,
* http://docs.ckeditor.com/#!/guide/dev_installation,

_INSTALLATION:
* download: http://ckeditor.com//
* uncompress to a folder local, web,
* check: /path/ckeditor/samples/index.html

cke'callby-class

name::
* McsEngl.cke'callby-class@cptIt,

_EXAMPLE:
<!DOCTYPE html>
<html>
<head>
 <title>Replace Textarea by Code — CKEditor Sample</title>
 <meta charset="utf-8">
 <script src="../ckeditor.js"></script>
</head>
<body>
 <h1>CKEditor Sample: call by CLASS</h1>
 <textarea class="ckeditor" id="editor1"></textarea>
</body>
</html>

cke'callby-javascript

name::
* McsEngl.cke'callby-javascript@cptIt,

_EXAMPLE:
<!DOCTYPE html>
<html>
<head>
 <title>Replace Textarea by Code — CKEditor Sample</title>
 <meta charset="utf-8">
 <script src="../ckeditor.js"></script>
</head>
<body>
 <h1>CKEditor Samples: Replace Textarea Using JavaScript</h1>
 <textarea id="editor1"></textarea>

 <script>
   // This call can be placed at any point AFTER the
   // <textarea>, or inside a <head><script> in a
   // window.onload event handler.
   // Replace the <textarea id="editor"> with an CKEditor
   // instance, using default configurations.
   CKEDITOR.replace( 'editor1' );
 </script>
</body>
</html>

cke'integration

name::
* McsEngl.cke'integration@cptIt,
* McsEngl.cke'calling@cptIt,

_SPECIFIC:
* by javascript code,

cke'Upgrade

name::
* McsEngl.cke'Upgrade@cptIt,

To upgrade an existing CKEditor installation, proceed in the following way:

Rename your old editor folder to a backup folder, for example ckeditor_old.
Download the latest version from the CKEditor website: http://ckeditor.com/download
Extract (decompress) the downloaded archive to the original editor directory, for example ckeditor.
Copy all configuration files that you have changed from the backup directory to their corresponding position in the new directory. These could include (but not limited to) the following files:
- config.js
- contents.css
- styles.js
[http://docs.ckeditor.com/#!/guide/dev_installation]

cke'Key-shortcut

name::
* McsEngl.cke'Key-shortcut@cptIt,
* McsEngl.cke'Keyboard-Shortcut@cptIt,

Many functions in CKEditor have their equivalent keyboard shortcuts. This is one of the reasons why working with the editor is simple and efficient.

The list below contains available keyboard shortcuts grouped by problem areas.
Working with a Document

* Esc – closes a CKEditor dialog window, drop-down list, or context menu. Also moves from the context menu submenu to the parent option.
* Enter – selects a CKEditor function from the toolbar, drop-down list, or context menu. Equivalent to the OK button in a dialog window.
* Shift+F10, Menu/Application key – opens the element's context menu.

Navigation

* Home – jumps to the beginning of the line.
* Ctrl+Home – jumps to the beginning of the document.
* End – jumps to the end of the line.
* Ctrl+End – jumps to the end of the document.
* PgDn – scrolls down the document, approximately by the length of the editing area.
* PgUp – scrolls up the document, approximately by the length of the editing area.

Writing

* Enter (Return) – ends a paragraph and starts a new one.
* Shift+Enter – adds a line break.
* Backspace, Del – deletes a character.
* Ctrl+Backspace, Ctrl+Del – deletes a word.

Undo and Redo

* Ctrl+Z – performs the undo operation.
* Ctrl+Y – performs the redo operation.

Cut, Copy and Paste

* Ctrl+X, Shift+Del – cuts a text fragment to clipboard.
* Ctrl+C – copies a text fragment to clipboard.
* Ctrl+V, Shift+Insert – pastes a text fragment from clipboard.

Text Selection

* Ctrl+A – selects all document contents.
* Shift+Arrow – selects a text fragment by letters.
* Ctrl+Shift+Arrow – selects a text fragment by words.
* Shift+Home – selects a text fragment from the cursor to the beginning of the line.
* Shift+End – selects a text fragment from the cursor to the end of the line.
* Ctrl+Shift+Home – selects a text fragment from the cursor to the beginning of the document.
* Ctrl+Shift+End – selects a text fragment from the cursor to the end of the document.
* Shift+PgDn – selects a text fragment of approximately the length of the editing area starting from the cursor and going down.
* Shift+PgUp – selects a text fragment of approximately the length of the editing area starting from the cursor and going up.

Text Styling

* Ctrl+B – applies bold formatting to a text fragment.
* Ctrl+I – applies italics formatting to a text fragment.
* Ctrl+U – applies underline formatting to a text fragment.

Rich Text

* Ctrl+L – opens the Link dialog window.

Accessibility

* Alt+0 – opens Help.
* Alt+- (minus) – collapses and restores the toolbar.
* Alt+F10 – enters the toolbar or the tab list of the currently open dialog window.
* Alt+F11 – enters the elements path.
* Tab or Right Arrow – moves to the next toolbar button, context menu suboption, elements path element, dialog window element, or dialog window tab while in the tab list.
* Tab or Down Arrow – moves to the next drop-down list or context menu option.
* Shift+Tab or Left Arrow – moves to the previous toolbar button, context menu parent option, elements path element, dialog window element, or dialog window tab while in the tab list.
* Shift+Tab or Up Arrow – moves to the previous drop-down list or context menu option.
* Space or Enter – activates a toolbar button, a context menu option, a drop-down list option, an elements path element, or a dialog window tab once selected. Also enters a context menu submenu, if it is available.

Editing Area

Page Up and Page Down let you jump up and down the text.

Home and End keys can be used to go to the beginning and end of line, respectively, or combined with the

Ctrl key + Home | End— to the beginning and end of the document. You can also move inside the text using the Arrow keys.

cke'license

name::
* McsEngl.cke'license@cptIt,

CKEditor is distributed under the GPL, LGPL, and MPL Open Source licenses.
* http://ckeditor.com/license,

What are the Open Source requirements when using CKEditor?

Generally speaking, you must keep the copyright notices in each file intact and not delete the LICENSE.html file located in the CKEditor installation folder.

For more information on Open Source licenses go to http://opensource.org/
[http://ckeditor.com/support/faq/open%20source#question3]

cke'PageEdit-chrome-extention

name::
* McsEngl.cke'PageEdit-chrome-extention@cptIt,

Gildas Lormeau
Email: gildas.lormeau <at> gmail.com
Location: France, Rennes

_ADDRESS.WPG:
* https://chrome.google.com/extensions/detail/ebkclgoaabaibghklgknnjdemknjaeic

cke'plugin

name::
* McsEngl.cke'plugin@cptIt,

_ADDRESS.WPG:
* http://ckeditor.com/addons/plugins/all,
* http://docs.ckeditor.com/#!/guide/plugin_sdk_intro,

_DESCRIPTION:
CKEditor is totally based on plugins. In fact, the editor core is an empty box, which is them filled with features provided by plugins. Even the editor interface, like toolbars, buttons and the editing area are plugins.
The default installation of CKEditor, that you probably are using now, comes with a set of plugins present on it. You can add plugins into your editor, bring nice and useful features for your users.
[http://docs.ckeditor.com/#!/guide/dev_plugins]

cke'plugin'afterInit-function

name::
* McsEngl.cke'plugin'afterInit-function@cptIt,

cke'plugin'availableLangs-object

name::
* McsEngl.cke'plugin'availableLangs-object@cptIt,

cke'plugin'commandName-string

name::
* McsEngl.cke'plugin'commandName-string@cptIt,

cke'plugin'file

name::
* McsEngl.cke'plugin'file@cptIt,

_FOLDER:
folder.plugins
 folder.plugin_code_name
   folder.icons
     file.plugin_code_name.png
   file.plugin.js

_CODE.CKE:
CKEDITOR.plugins.add( 'timestamp', {
icons: 'timestamp',
init: function( editor ) {
//Plugin logic goes here.
}
});
All CKEditor plugins are created by using the CKEDITOR.plugins.add function. This function should contain the plugin name - 'timestamp' - and the plugin logic placed inside the init function that is called upon the initialization of the editor instance.
[http://docs.ckeditor.com/#!/guide/plugin_sdk_intro]

cke'plugin'file.plugin.js

name::
* McsEngl.cke'plugin'file.plugin.js@cptIt,

plugin.js file that will contain the plugin logic.
[http://docs.ckeditor.com/#!/guide/plugin_sdk_intro]

cke'plugin'file.plugindefinition.js-at-root.core

name::
* McsEngl.cke'plugin'file.plugindefinition.js-at-root.core@cptIt,
* McsEngl.cke'file.plugindefinition.js-at-root.core@cptIt,

_DESCRIPTION:
Virtual class which just illustrates the features of plugin objects to be passed to the CKEDITOR.plugins.add method.
This class is not really part of the API, so don't call its constructor.
[http://docs.ckeditor.com/#!/api/CKEDITOR.pluginDefinition]

cke'plugin'folder

name::
* McsEngl.cke'plugin'folder@cptIt,

Remember that for CKEditor the name of the plugin folder is important and has to be the same as the name of the plugin, otherwise the editor will not be able to recognize it.
[http://docs.ckeditor.com/#!/guide/plugin_sdk_sample_1]

_FOLDER:
folder.plugins
 folder.plugin_code_name
   folder.icons
     file.plugin_code_name.png
   file.plugin.js

cke'plugin'icons-string

name::
* McsEngl.cke'plugin'icons-string@cptIt,

// Register the icons. They must match command names.
 icons: 'timestamp',

_FOLDER:
folder.plugins
 folder.plugin_code_name
   folder.icons
     file.plugin_code_name.png
   file.plugin.js

cke'plugin'init-function

name::
* McsEngl.cke'plugin'init-function@cptIt,

init( editor )
Function called on initialization of every editor instance created in the page.

CKEDITOR.plugins.add( 'sample', {
init: function( editor ) {
alert( 'Editor "' + editor.name + '" is being initialized!' );
}
} );
Parameters
editor : CKEDITOR.editor
The editor instance being initialized.
[http://docs.ckeditor.com/#!/api/CKEDITOR.pluginDefinition-method-init]

cke'plugin'installation

name::
* McsEngl.cke'plugin'installation@cptIt,
* McsEngl.cke'plugin'initialization@cptIt,
* McsEngl.cke'plugin'loading@cptIt,

_CODE.CKE:
Installing Plugins Manually

If you prefer not to use CKBuilder, if you have plugins developer by yourself of by third parties or if you just want to test plugins before going through the CKBuilder process, you can also add plugins to your local installation, by following a few steps:

Extracting the zip file: Plugins are usually available as zip files. So, to start, be sure to have the zip extracted into a folder.
Copying the files into CKEditor: The easiest way to install the files is by simply copying them into the plugins folder of your CKEditor installation. They must be placed into a sub-folder that matches the "technical" name of the plugin. For example, the Magic Line plugin would be installed into this folder: <CKEditor folder>/plugins/magicline.
Enabling the plugin: Now it is time to tell CKEditor that you have a new plugin for it. For that, you simply use the extraPlugins configuration option:

* cke'extraPlugins, cke'config.extraPlugins:
config.extraPlugins = 'magicline';

That's all. Your plugin will be now enabled in CKEditor.
[http://docs.ckeditor.com/#!/guide/dev_plugins]
===

extraPlugins : String
A list of additional plugins to be loaded. This setting makes it easier to add new plugins without having to touch plugins setting.

config.extraPlugins = 'myplugin,anotherplugin';
Defaults to: ''
[http://docs.ckeditor.com/#!/api/CKEDITOR.config]

cke'plugin'lang-string

name::
* McsEngl.cke'plugin'lang-string@cptIt,

cke'plugin'name

name::
* McsEngl.cke'plugin'name@cptIt,

_CODE_NAME:
* small leters only
* example: timestamp, filebrowser, ...

cke'plugin'onLoad-function

name::
* McsEngl.cke'plugin'onLoad-function@cptIt,

cke'plugin'pluginName-string

name::
* McsEngl.cke'plugin'pluginName-string@cptIt,

cke'plugin'remove

name::
* McsEngl.cke'plugin'remove@cptIt,

_CODE.CKE:
* cke'removePlugins_config, cke'config.removePlugins:

// Remove one plugin.
config.removePlugins = 'elementspath';

// Remove multiple plugins.
config.removePlugins = 'elementspath,save,font';
[http://docs.ckeditor.com/#!/guide/dev_howtos_basic_configuration]

cke'plugin'requires-string

name::
* McsEngl.cke'plugin'requires-string@cptIt,

SPECIFIC

name::
* McsEngl.cke'plugin.specific@cptIt,

_PLUGIN:
* a11yhelp,
* about,
* ajax#ql:cke'plugin.ajax#,
* autosave,
* basicstyles,
* blockquote,
* button,
* clipboard,
* contextmenu,
* dialog,
* dialogui,
* docprops,
* elementspath,
* entities,
* fakeobjects,
* filebrowser,
* find,
* floatingspace,
* floatpanel,
* format,
* horizontalrule,
* htmlwriter,
* image,
* indent,
* link,
* list,
* listblock,
* magicline,
* mathedit,
* maximize,
* menu,
* menubutton,
* pastefromword,
* pastetext,
* popup,
* preview,
* removeformat,
* resize,
* richcombo,
* save,
* scayt,
* showblocks,
* sourcearea,
* specialchar,
* stat,
* stylescombo,
* symbol,
* tab,
* table,
* tabletools,
* toolbar,
* undo,
* wordcount,
* wsc,
* wysiwygarea,
* xml,

cke'plugin.AutoSave

name::
* McsEngl.cke'plugin.AutoSave@cptIt,

_ADDRESS.WPG:
* https://github.com/w8tcha/CKEditor-AutoSave-Plugin,

AutoSave Plugin

Auto Save Plugin for the CKEditor which automatically saves the content (via HTML5 LocalStorage) temporarly (for example when a login session times out). And after the content is saved it can be restored when the editor is reloaded.

Installation

Extract the contents of the file into the "plugins" folder of CKEditor.
In the CKEditor configuration file (config.js) add the following code:
config.extraPlugins = 'autosave';


How the Plugin works

The Plugin saves the content every 25 seconds (can be defined in the Config - autosave_delay), but only when the content has changed.

And when the Editor Page is reloaded and auto saved content is found and its different from the content loaded with the editor the user will be asked if the auto saved content should be loaded instead.
[http://ckeditor.com/addon/autosave]

cke'plugin.specialchar (3)

name::
* McsEngl.cke'plugin.specialchar (3)@cptIt,
* McsEngl.cke'specialchar-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin3.html,

_DESCRIPTION:
Special Character plugin

cke'plugin.dialogui (6)

name::
* McsEngl.cke'plugin.dialogui (6)@cptIt,
* McsEngl.cke'dialogui-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin6.html,

_DESCRIPTION:

cke'plugin.a11yhelp (7)

name::
* McsEngl.cke'plugin.a11yhelp (7)@cptIt,
* McsEngl.cke'-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin7.html,

_DESCRIPTION:
* Plugin definition for the a11yhelp, which provides a dialog with accessibility related help.

cke'plugin.htmlwriter (8)

name::
* McsEngl.cke'plugin.htmlwriter (8)@cptIt,
* McsEngl.cke'htmlwriter-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin8.html,

_DESCRIPTION:

cke'plugin.panel (11)

name::
* McsEngl.cke'plugin.panel (11)@cptIt,
* McsEngl.cke'panel-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin11.html,

_DESCRIPTION:
This plugin used along with the floatpanel plugin is to provide the basis of all editor UI panels - dropdown, menus, etc.
[http://ckeditor.com/addon/panel]

cke'plugin.stylescombo (12)

name::
* McsEngl.cke'plugin.stylescombo (12)@cptIt,
* McsEngl.cke'stylescombo-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin12.html,

_DESCRIPTION:
Styles Combo
This plugin provides a rich combo on toolbar that opens with a list of styles defined in the styles.js file contains various formatting options that apply to block, inline and object elements, and it can be customized.
[http://ckeditor.com/addon/stylescombo]

cke'plugin.smiley (13)

name::
* McsEngl.cke'plugin.smiley (13)@cptIt,
* McsEngl.cke'13-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin13.html,

_DESCRIPTION:

cke'plugin.uicolor (14)

name::
* McsEngl.cke'plugin.uicolor (14)@cptIt,
* McsEngl.cke'uicolor-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin14.html,

_DESCRIPTION:

cke'plugin.docprops (16)

name::
* McsEngl.cke'plugin.docprops (16)@cptIt,
* McsEngl.cke'docprops-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin16.html,

_DESCRIPTION:

cke'plugin.floatpanel (17)

name::
* McsEngl.cke'plugin.floatpanel (17)@cptIt,
* McsEngl.cke'floatpanel-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin17.html,

_DESCRIPTION:

cke'plugin.colordialog (18)

name::
* McsEngl.cke'plugin.colordialog (18)@cptIt,
* McsEngl.cke'colordialog-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin18.html,

_DESCRIPTION:

cke'plugin.image (19)

name::
* McsEngl.cke'plugin.image (19)@cptIt,
* McsEngl.cke'image-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin19.html,

_DESCRIPTION:

cke'plugin.horizontalrule (20)

name::
* McsEngl.cke'plugin.horizontalrule (20)@cptIt,
* McsEngl.cke'horizontalrule-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin20.html,

_DESCRIPTION:

cke'plugin.preview (21)

name::
* McsEngl.cke'plugin.preview (21)@cptIt,
* McsEngl.cke'preview-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin21.html,

_DESCRIPTION:

cke'plugin.about (22)

name::
* McsEngl.cke'plugin.about (22)@cptIt,
* McsEngl.cke'about-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin22.html

_DESCRIPTION:

cke'plugin.wysiwygarea (23)

name::
* McsEngl.cke'plugin.wysiwygarea (23)@cptIt,
* McsEngl.cke'wysiwygarea-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin23.html,

_DESCRIPTION:
The "wysiwygarea" plugin. It registers the "wysiwyg" editing mode, which handles the main editing area space.

cke'plugin.enterkey (24)

name::
* McsEngl.cke'plugin.enterkey (24)@cptIt,
* McsEngl.cke'enterkey-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin24.html,

_DESCRIPTION:

cke'plugin.basicstyles (25)

name::
* McsEngl.cke'plugin.basicstyles (25)@cptIt,
* McsEngl.cke'basicstyles-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin25.html,

_DESCRIPTION:

cke'plugin.format (26)

name::
* McsEngl.cke'plugin.format (26)@cptIt,
* McsEngl.cke'format-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin26.html,

_DESCRIPTION:

cke'plugin.pagebreak (27)

name::
* McsEngl.cke'plugin.pagebreak (27)@cptIt,
* McsEngl.cke'pagebreak-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin27.html,

_DESCRIPTION:
Horizontal Page Break

cke'plugin.indent (28)

name::
* McsEngl.cke'plugin.indent (28)@cptIt,
* McsEngl.cke'indent-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin28.html,

_DESCRIPTION:
Increse and decrease indent commands.

cke'plugin.flash (29)

name::
* McsEngl.cke'plugin.flash (29)@cptIt,
* McsEngl.cke'flash-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin29.html,

_DESCRIPTION:

cke'plugin.table (30)

name::
* McsEngl.cke'plugin.table (30)@cptIt,
* McsEngl.cke'table-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin30.html,

_DESCRIPTION:

cke'plugin.newpage (31)

name::
* McsEngl.cke'plugin.newpage (31)@cptIt,
* McsEngl.cke'newpage-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin31.html,

_DESCRIPTION:

cke'plugin.menubutton (32)

name::
* McsEngl.cke'plugin.menubutton (32)@cptIt,
* McsEngl.cke'menubutton-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin32.html,

_DESCRIPTION:

cke'plugin.toolbar (34)

name::
* McsEngl.cke'plugin.toolbar (34)@cptIt,
* McsEngl.cke'toolbar-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin34.html,

_DESCRIPTION:
The "toolbar" plugin. Renders the default toolbar interface in the editor.

cke'plugin.bbcode (35)

name::
* McsEngl.cke'plugin.bbcode (35)@cptIt,
* McsEngl.cke'bbcode-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin35.html,

_DESCRIPTION:

cke'plugin.button (37)

name::
* McsEngl.cke'plugin.button (37)@cptIt,
* McsEngl.cke'button-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin37.html,

_DESCRIPTION:

cke'plugin.divarea (38)

name::
* McsEngl.cke'plugin.divarea (38)@cptIt,
* McsEngl.cke'divarea-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin38.html,

_DESCRIPTION:
The "divarea" plugin. It registers the "wysiwyg" editing mode using a DIV element.

cke'plugin.resize (39)

name::
* McsEngl.cke'plugin.resize (39)@cptIt,
* McsEngl.cke'resize-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin39.html,

_DESCRIPTION:

cke'plugin.sharedspace (40)

name::
* McsEngl.cke'plugin.sharedspace (40)@cptIt,
* McsEngl.cke'sharedspace-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin40.html,

_DESCRIPTION:

cke'plugin.magicline (41)

name::
* McsEngl.cke'plugin.magicline (41)@cptIt,
* McsEngl.cke'magicline-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin41.html,

_DESCRIPTION:
Allows accessing difficult focus spaces.

cke'plugin.dialogadvtab (42)

name::
* McsEngl.cke'plugin.dialogadvtab (42)@cptIt,
* McsEngl.cke'dialogadvtab-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin42.html,

_DESCRIPTION:

cke'plugin.removeformat (43)

name::
* McsEngl.cke'plugin.removeformat (43)@cptIt,
* McsEngl.cke'removeformat-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin43.html,

_DESCRIPTION:

cke'plugin.clipboard (44)

name::
* McsEngl.cke'plugin.clipboard (44)@cptIt,
* McsEngl.cke'clipboard-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin44.html,

_DESCRIPTION:

cke'plugin.blockquote (45)

name::
* McsEngl.cke'plugin.blockquote (45)@cptIt,
* McsEngl.cke'blockquote-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin45.html,

_DESCRIPTION:

cke'plugin.fakeobjects (46)

name::
* McsEngl.cke'plugin.fakeobjects (46)@cptIt,
* McsEngl.cke'fakeobjects-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin46.html,

_DESCRIPTION:

cke'plugin.popup (47)

name::
* McsEngl.cke'plugin.popup (47)@cptIt,
* McsEngl.cke'popup-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin47.html,

_DESCRIPTION:

cke'plugin.entities (48)

name::
* McsEngl.cke'plugin.entities (48)@cptIt,
* McsEngl.cke'entities-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin48.html,

_DESCRIPTION:

cke'plugin.listblock (49)

name::
* McsEngl.cke'plugin.listblock (49)@cptIt,
* McsEngl.cke'listblock-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin49.html,

_DESCRIPTION:

cke'plugin.floatingspace (51)

name::
* McsEngl.cke'plugin.floatingspace (51)@cptIt,
* McsEngl.cke'floatingspace-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin51.html,

_DESCRIPTION:

cke'plugin.devtools (52)

name::
* McsEngl.cke'plugin.devtools (52)@cptIt,
* McsEngl.cke'devtools-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin52.html,

_DESCRIPTION:

cke'plugin.liststyle (53)

name::
* McsEngl.cke'plugin.liststyle (53)@cptIt,
* McsEngl.cke'liststyle-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin53.html,

_DESCRIPTION:

cke'plugin.placeholder (54)

name::
* McsEngl.cke'plugin.placeholder (54)@cptIt,
* McsEngl.cke'placeholder-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin54.html,

_DESCRIPTION:

cke'plugin.tab (55)

name::
* McsEngl.cke'plugin.tab (55)@cptIt,
* McsEngl.cke'tab-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin55.html,

_DESCRIPTION:

cke'plugin.pastetext (56)

name::
* McsEngl.cke'plugin.pastetext (56)@cptIt,
* McsEngl.cke'pastetext-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin56.html,

_DESCRIPTION:

cke'plugin.font (57)

name::
* McsEngl.cke'plugin.font (57)@cptIt,
* McsEngl.cke'font-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin57.html,

_DESCRIPTION:

cke'plugin.forms (58)

name::
* McsEngl.cke'plugin.forms (58)@cptIt,
* McsEngl.cke'forms-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin58.html,

_DESCRIPTION:

cke'plugin.panelbutton (59)

name::
* McsEngl.cke'plugin.panelbutton (59)@cptIt,
* McsEngl.cke'panelbutton-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin59.html,

_DESCRIPTION:

cke'plugin.list (60)

name::
* McsEngl.cke'plugin.list (60)@cptIt,
* McsEngl.cke'list-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin60.html,

_DESCRIPTION:
Insert and remove numbered and bulleted lists.

cke'plugin.sourcearea (61)

name::
* McsEngl.cke'plugin.sourcearea (61)@cptIt,
* McsEngl.cke'sourcearea-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin61.html,

_DESCRIPTION:
The "sourcearea" plugin. It registers the "source" editing mode, which displays the raw data being edited in the editor.

cke'plugin.sourcedialog (62)

name::
* McsEngl.cke'plugin.sourcedialog (62)@cptIt,
* McsEngl.cke'sourcedialog-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin62.html,

_DESCRIPTION:

cke'plugin.find (63)

name::
* McsEngl.cke'plugin.find (63)@cptIt,
* McsEngl.cke'find-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin63.html,

_DESCRIPTION:

cke'plugin.save (64)

name::
* McsEngl.cke'plugin.save (64)@cptIt,
* McsEngl.cke'save-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin64.html,

_DESCRIPTION:
When CKEditor is placed inside an HTML form this plugin saves the contents of CKEditor and submits it to the server. Also, it adds save toolbar button which submits form in which editor is placed.
[http://ckeditor.com/addon/save]

cke'plugin.showborders (65)

name::
* McsEngl.cke'plugin.showborders (65)@cptIt,
* McsEngl.cke'showborders-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin65.html,

_DESCRIPTION:
The "show border" plugin. The command display visible outline border line around all table elements if table doesn't have a none-zero 'border' attribute specified.

cke'plugin.richcombo (66)

name::
* McsEngl.cke'plugin.richcombo (66)@cptIt,
* McsEngl.cke'richcombo-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin66.html,

_DESCRIPTION:

cke'plugin.autogrow (67)

name::
* McsEngl.cke'plugin.autogrow (67)@cptIt,
* McsEngl.cke'autogrow-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin67.html,

_DESCRIPTION:

cke'plugin.tableresize (68)

name::
* McsEngl.cke'plugin.tableresize (68)@cptIt,
* McsEngl.cke'tableresize-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin68.html,

_DESCRIPTION:

cke'plugin.tabletools (69)

name::
* McsEngl.cke'plugin.tabletools (69)@cptIt,
* McsEngl.cke'tabletools-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin69.html,

_DESCRIPTION:

cke'plugin.iframe (70)

name::
* McsEngl.cke'plugin.iframe (70)@cptIt,
* McsEngl.cke'iframe-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin70.html,

_DESCRIPTION:

cke'plugin.maximize (71)

name::
* McsEngl.cke'plugin.maximize (71)@cptIt,
* McsEngl.cke'maximize-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin71.html,

_DESCRIPTION:

cke'plugin.bidi (72)

name::
* McsEngl.cke'plugin.bidi (72)@cptIt,
* McsEngl.cke'bidi-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin72.html,

_DESCRIPTION:

cke'plugin.div (73)

name::
* McsEngl.cke'plugin.div (73)@cptIt,
* McsEngl.cke'div-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin73.html,

_DESCRIPTION:
The "div" plugin. It wraps the selected block level elements with a 'div' element with specified styles and attributes.

cke'plugin.ajax (74)

name::
* McsEngl.cke'plugin.ajax (74)@cptIt,
* McsEngl.cke'ajax-object@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/#!/api/CKEDITOR.ajax,
* http://docs.ckeditor.com/source/plugin74.html,

cke'plugin.selectall (75)

name::
* McsEngl.cke'plugin.selectall (75)@cptIt,
* McsEngl.cke'selectall-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin75.html,

_DESCRIPTION:
The "selectall" plugin provides an editor command that allows selecting the entire content of editable area. This plugin also enables a toolbar button for the feature.

cke'plugin.adobeair (76)

name::
* McsEngl.cke'plugin.adobeair (76)@cptIt,
* McsEngl.cke'adobeair-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin76.html,

_DESCRIPTION:

cke'plugin.colorbutton (77)

name::
* McsEngl.cke'plugin.colorbutton (77)@cptIt,
* McsEngl.cke'colorbutton-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin77.html,

_DESCRIPTION:

cke'plugin.xml (78)

name::
* McsEngl.cke'plugin.xml (78)@cptIt,
* McsEngl.cke'xml-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin78.html,

_DESCRIPTION:

cke'plugin.elementspath (79)

name::
* McsEngl.cke'plugin.elementspath (79)@cptIt,
* McsEngl.cke'elementspath-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin79.html,

_DESCRIPTION:

cke'plugin.undo (80)

name::
* McsEngl.cke'plugin.undo (80)@cptIt,
* McsEngl.cke'undo-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin80.html,

_DESCRIPTION:

cke'plugin.pastefromword (81)

name::
* McsEngl.cke'plugin.pastefromword (81)@cptIt,
* McsEngl.cke'pastefromword-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin81.html,

_DESCRIPTION:

cke'plugin.menu (82)

name::
* McsEngl.cke'plugin.menu (82)@cptIt,
* McsEngl.cke'menu-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin82.html,

_DESCRIPTION:

cke'plugin.justify (83)

name::
* McsEngl.cke'plugin.justify (83)@cptIt,
* McsEngl.cke'justify-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin83.html,

_DESCRIPTION:

cke'plugin.link (84)

name::
* McsEngl.cke'plugin.link (84)@cptIt,
* McsEngl.cke'link-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin84.html,

_DESCRIPTION:

===

cke'plugin.abbr

name::
* McsEngl.cke'plugin.abbr@cptIt,
* McsEngl.cke'abbr-plugin@cptIt,
* McsEngl.cke'abbreviation-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/#!/guide/plugin_sdk_sample_1,

_DESCRIPTION:
We are going to develop an abbreviation plugin that lets the user insert abbreviations into their documents. The abbreviations will be using the <abbr> HTML element and will be added through a dialog window that is opened after clicking a dedicated toolbar button.
[http://docs.ckeditor.com/#!/guide/plugin_sdk_sample_1]

cke'plugin.contentxmenu

name::
* McsEngl.cke'plugin.contentxmenu@cptIt,
* McsEngl.cke'contextmenu-plugin@cptIt,

_ADDRESS.WPG:
* http://ckeditor.com/addon/contextmenu,

_DESCRIPTION:
Context Menu

The plugin provides the editor's context menu to use instead of the browser's native
menu in place.

It also provides the API to manage menu item and group.

With the presence of this plugin, the native context menu will still be available when Ctrl key is pressed when opening the menu which can be configured as well.
[http://ckeditor.com/addon/contextmenu]

cke'browserContextMenuOnCtrl_config, cke'config.browserContextMenuOnCtrl:
browserContextMenuOnCtrl : Boolean
Whether to show the browser native context menu when the Ctrl or Meta (Mac) key is pressed on opening the context menu with the right mouse button click or the Menu key.

config.browserContextMenuOnCtrl = false;
Defaults to: true

Available since: 3.0.2

cke'plugin.timestamp

name::
* McsEngl.cke'plugin.timestamp@cptIt,
* McsEngl.cke'timestamp-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/#!/guide/plugin_sdk_intro,

_DESCRIPTION:
A very simple plugin that inserts data into html-element-content.

cke'Resource

name::
* McsEngl.cke'Resource@cptIt,

_ADDRESS.WPG:
* http://ckeditor.com//
* http://cksource.com/forums//

* http://cksource.com//
CKSource took its first steps in the far 2003, under the name "FredCK.com", when Frederico Caldeira Knabben took the challenge to start a new and creative project. That project carried his initials and got named FCKeditor.
Following the incredible success of our products, a new strategy started to be designed in 2007, to bring up to date, innovative and topnotch solutions to our customers and our community. This strategy involved the complete rewrite of FCKeditor, renaming it to CKEditor, and creating a fresh company image, now CKSource. Our team worked hard for almost two years to bring it to this amazing reality you're enjoying today.

_DEVELOPMENT:
* http://dev.ckeditor.com//
* http://groups.google.com/group/ckeditor-tickets?pli=1

_ADDRESS:
CKSource - Frederico Knabben

Mailing address:
ul. Boguslawskiego 19/319
01-923 Warszawa, Poland

e-mail: info@cksource.com

cke'DOCUMENTATION

name::
* McsEngl.cke'DOCUMENTATION@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/#!/guide,

cke'API:
* CODE-INDEX: http://docs.cksource.com/ckeditor_api/index.html
* File-Index: http://docs.cksource.com/ckeditor_api/files.html
* Namespace CKEDITOR.config
http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html
Holds the default configuration settings. Changes to this object are reflected in all editor instances, if not specificaly specified for those instances.
Defined in: core/config.js.

CKEditor 3.x Developer's Guide:
* http://docs.cksource.com/CKEditor_3.x/Developers_Guide

CKEditor 3.x User's Guide:
* http://docs.cksource.com/CKEditor_3.x/Users_Guide

CKSource Docs - The Official Documentation Site
* http://docs.cksource.com//

cke'style-of-html-element

name::
* McsEngl.cke'style-of-html-element@cptIt,
* McsEngl.cke'style@cptIt,

_CODE.CKE:
format_h1 : Object
The style definition to be used to apply the `'Heading 1' format.

config.format_h1 = { element: 'h1', attributes: { 'class': 'contentTitle1' } };
Defaults to: { element: 'h1' }
[http://docs.ckeditor.com/#!/api/CKEDITOR.config]

cke'template

name::
* McsEngl.cke'template@cptIt,

_GENERIC:
* cke-attribute,

cke'templates_config, cke'config.templates:
The templates definition set to use. It accepts a list of names separated by
* comma. It must match definitions loaded with the {@link#templates_files} setting.
*
*    config.templates = 'my_templates';

cke'plugin.templates (36)

name::
* McsEngl.cke'plugin.templates (36)@cptIt,
* McsEngl.cke'templates-plugin@cptIt,

_ADDRESS.WPG:
* http://docs.ckeditor.com/source/plugin36.html,

_DESCRIPTION:

cke'version

name::
* McsEngl.cke'version@cptIt,

_ADDRESS.WPG:
* http://ckeditor.com/download,

4.2.1:
10 Sep 2013

4.2:
18 Jul 2013

4.1.1:
Released 23 Apr 2013

4.0.0:
CKEditor 4.0 ( 2012-11-27)

3.6.2:
released on 13 September 2011

3.5.2:
2011-02-16

FvMcs.Cmrpgm.editor.nicEdit

_CREATED: {2012-02-21}

name::
* McsEngl.conceptIt561,
* McsEngl.Cmrpgm.editor.nicEdit@cptIt,
* McsEngl.FvMcs.Cmrpgm.editor.nicEdit@cptIt,
* McsEngl.nicEdit@cptIt561,

DEFINITION

NicEdit is a Lightweight, Cross Platform, Inline Content Editor to allow easy editing of web site content on the fly in the browser.
NicEdit Javascript integrates into any site in seconds to make any element/div editable or convert standard textareas to rich text editing.
[http://nicedit.com/]

nicedit'GENERIC

_GENERIC:
* js-program#ql:js'program#

nicedit.SPECIFIC

name::
* McsEngl.nicedit.SPECIFIC@cptIt,

_SPECIFIC:#ql:_GENERIC cptIt561#

nicedit'Code

name::
* McsEngl.nicedit'Code@cptIt,

_PART:
* file,
* object#ql:nicedit'object#

_Variable:
var nicBBCode = bkClass.extend({
var nicButtonTips = bkClass.extend({
var nicCodeButton = nicEditorAdvancedButton.extend({
var nicCodeOptions = {
var nicColorOptions = {
var nicEditor = bkClass.extend({
var nicEditorAdvancedButton = nicEditorButton.extend({
var nicEditorBgColorButton = nicEditorColorButton.extend({
var nicEditorButton = bkClass.extend({
var nicEditorColorButton = nicEditorAdvancedButton.extend({
var nicEditorConfig = bkClass.extend({
var nicEditorFontFamilySelect = nicEditorSelect.extend({
var nicEditorFontFormatSelect = nicEditorSelect.extend({
var nicEditorFontSizeSelect = nicEditorSelect.extend({
var nicEditorIFrameInstance = nicEditorInstance.extend({
var nicEditorInstance = bkClass.extend({
var nicEditorPane = bkClass.extend({
var nicEditorPanel = bkClass.extend({
var nicEditorSaveButton = nicEditorButton.extend({
var nicEditorSelect = bkClass.extend({
var nicEditors = {
var nicImageButton = nicEditorAdvancedButton.extend({
var nicImageOptions = {
var nicLinkButton = nicEditorAdvancedButton.extend({
var nicLinkOptions = {
var nicPaneOptions = { };
var nicPlugin = bkClass.extend({
var nicSaveOptions = {
var nicSelectOptions = {
var nicUploadButton = nicEditorAdvancedButton.extend({
var nicUploadOptions = {
var nicXHTML = bkClass.extend({

nicedit'File

name::
* McsEngl.nicedit'File@cptIt,

_SPECIFIC:
nicCore/bkLib.js
nicCore/nicConfig.js
nicCore/nicCore.js
nicCore/nicInstance.js
nicCore/nicIFrameInstance.js
nicCore/nicPanel.js
nicCore/nicButton.js
nicCore/nicPlugin.js

nicPane/nicPane.js
nicSelect/nicSelect.js
nicButtonTips/nicButtonTips.js
nicAdvancedButton/nicAdvancedButton.js

nicLink/nicLink.js
nicImage/nicImage.js
nicCode/nicCode.js
nicColors/nicColors.js

nicXHTML/nicXHTML.js
nicBBCode/nicBBCode.js

nicedit'Order-of-execution

name::
* McsEngl.nicedit'Order-of-execution@cptIt,

order:
bkLib,
nicConfig,
nicCore,
nicInstance,
nicIFrameInstance,
nicPanel,
nicButton,
nicPlugin

nicedit'Human

name::
* McsEngl.nicedit'Human@cptIt,

Kirchoff.Brian:
NicEdit is a Brian Kirchoff Production ? 2007-2008

nicedit'Installation

name::
* McsEngl.nicedit'Installation@cptIt,
* McsEngl.nicedit'config@cptIt,

_ADDRESS.WPG:
* http://wiki.nicedit.com/w/page/515/Configuration%20Options,

Include The following script anywhere on your page:
<script src="http://js.nicedit.com/nicEdit-latest.js" type="text/javascript"></script>
<script type="text/javascript">bkLib.onDomLoaded(nicEditors.allTextAreas);</script>
Thats It!
All textareas on the page will be converted to nicEditors.

<script type="text/javascript">
bkLib.onDomLoaded(function() {
 new nicEditor().panelInstance('area1');
 new nicEditor({fullPanel : true}).panelInstance('area2');
 new nicEditor({iconsPath : '../nicEditorIcons.gif'}).panelInstance('area3');
 new nicEditor({buttonList : ['fontSize','bold','italic','underline','strikeThrough','subscript', 'superscript','html','image']}).panelInstance('area4');
 new nicEditor({maxHeight : 100}).panelInstance('area5');
});
</script>

bkLib.onDomLoaded(function(){
var myEditor = new nicEditor({fullPanel : true }).panelInstance('myArea2');
myEditor.addEvent('add', function() {
alert( myEditor.instanceById('myArea2').getContent() );
});
});

Save-button:
 bkLib.onDomLoaded(function(){
   new nicEditor({fullPanel : true, onSave : function(content, id, instance) {
       alert('save button clicked for element '+id+' = '+content);
     }
   }).panelInstance('area1');
 });

_xhtml:
For now the nicXHTML plugin is very experimental and does not solve this issue completely. To try it out configure you download with nicXHTML and then add {xhtml : true} to your options.
[http://wiki.nicedit.com/w/page/527/XHTML%20Compliant%20Output]

nicedit'License

name::
* McsEngl.nicedit'License@cptIt,

The Project is freely distributed under the terms of the MIT License.
[http://nicedit.com/]

nicedit'Object

name::
* McsEngl.nicedit'Object@cptIt,

_GENERIC:
* js-object#ql:js'object#

_WHOLE:
* nicedit-code#ql:nicedit'code#

_SPECIFIC:
* nicEditor,
* nicInstance,

nicedit'bkElement-object

name::
* McsEngl.nicedit'bkElement-object@cptIt,

_Method:
* construct(elm, d)
* addClass(cls)
* addEvent(type, fn)
* appendBefore(elm): insert this before elm
* appendTo(elm): this to elm
* hasClass(cls)
* getStyle():
* noSelect()
* parentTag(tag):
* pos()
* remove(): this from parent
* setAttributes(array)
* setContent(content)
* setStyle(stl)

nicedit'nicEditor-object

name::
* McsEngl.nicedit'nicEditor-object@cptIt,

Class nicEditor
The nicEditor class is a container for a number of nicEditor instances and 1 nicPanel.
Because of this you can use nicEditor in 2 ways:
Create a single control panel with setPanel() then use addInstance multiple times to create as many editable areas on the page you need that are controlled from a single control panel.
Use the panelInstance() to create a combined content area/panel editor. If you use this option and want multiple editors you should create multiple nicEditor instances.

var myNicEditor = new nicEditor()  Creates a new nicedit object. A single instance of nicEditor contains:
1 or more editor instances (nicInstance/nicIFrameInstance)
1 nicPanel
myNicEditor.addInstance('someElementsID')  Adds a nicedit instance to allow inline editing of the given elements ID
myNicEditor.removeInstance('someElementID')  Removes the nicedit instance with the given ID, returning it to the orginal element with the content within the element.
myNicEditor.setPanel('someElementID')  Append an editor control panel at the end of the given ID. Normally the element is blank and with a fixed CSS width you would like the panel set.
myNicEditor.panelInstance('someElementID')  Creates an inline content editor with attached control panel on top of the element.
myNicEditor.instanceById('someElementID')  Find a nicInstance object by ID that was added to this nicEditor
myNicEditor.floatingPanel()  Activate a floating panel. First add editor instances to this editor with addInstance() then call floatingPanel(). When a instance is selected, a floating panel will appear above/below it. * Requires nicFloating plugin
[http://wiki.nicedit.com/w/page/521/Javascript%20API]

nicedit'nicEditors-object

name::
* McsEngl.nicedit'nicEditors-object@cptIt,

Class nicEditors
The nicEditors class provides convience methods to add NicEditor to the page or get a reference to a editor by ID

nicEditors.allTextAreas
Converts all the textareas on the page info NicEditor instances. Returns a reference to the array of all NicEdit instances on the page.
nicEditors.findEditor
Finds a specific editor by ID if created using allTextAreas explitly

For example to get the nicedit instance for
<textarea id="myArea2"></textarea>
use:
nicEditors.findEditor('myArea2');

The method returns a nicedit instance that you call the functions below on.

Warning:
In order to use this and other API methods, the editor must be finshed loading. To see an example of how you can use addEvent to have your code run after editor load see Editor Events
nicEditors.editors[]  The raw array of all the NicEdit instances on the page
[http://wiki.nicedit.com/w/page/521/Javascript%20API]

nicedit'nicEditorPane

name::
* McsEngl.nicedit'nicEditorPane@cptIt,

Create div elements on which to display button actions.

nicedit'nicInstance-object

name::
* McsEngl.nicedit'nicInstance-object@cptIt,

Class nicInstance
The nicEditor instance class creates the editable area for a single element and provides a number of useful methods to developers. You can get a reference to a specific nicInstance object using
nicEditors.findEditor



[nicInstance].getContent()

Returns the current HTML of the nicInstance
For example:
nicEditors.findEditor('myArea2').getContent();
returns the HTML in the content editor that replaced the element on the page with ID 'myArea2'.


[nicInstance].setContent(HTML)

Set the current HTML in the editor instance
For example:
nicEditors.findEditor('myArea2').setContent('<strong>Some HTML</strong> here');


[nicInstance].saveContent()
Only for nicInstances that are replacing a <textarea>
this method syncs the content of the editor with the textarea value.
This is done automatically if the form with the orginal
<textarea> is submitted.
However, you may want to explitly do the syncing yourself.
[http://wiki.nicedit.com/w/page/521/Javascript%20API]

nicedit'Plugin

name::
* McsEngl.nicedit'Plugin@cptIt,

_ADDRESS.WPG:
* http://wiki.nicedit.com/w/page/516/Creating%20a%20Plugin,

Adding a plugin/buttons to nicedit isn't difficult. First make sure you have setup your your development environment then follow these steps:

Create a new folder for your plugin in src/, for this example i used nicExample
Make a file with the same name inside the folder src/nicExample/nicExample.js
You can use the below code as a starting point for your plugin

/**
* nicExample
* @description: An example button plugin for nicEdit
* @requires: nicCore, nicPane, nicAdvancedButton
* @author: Brian Kirchoff
* @version: 0.9.0
*/

/* START CONFIG */
var nicExampleOptions = {
buttons : {
'example' : {name : __('Some alt text for the button'), type : 'nicEditorExampleButton'}
}/* NICEDIT_REMOVE_START */,iconFiles : {'example' : 'src/nicExample/icons/save.gif'}/* NICEDIT_REMOVE_END */
};
/* END CONFIG */

var nicEditorExampleButton = nicEditorButton.extend({
mouseClick : function() {
alert('The example save button icon has been clicked!');
}
});

nicEditors.registerPlugin(nicPlugin,nicExampleOptions);
[http://wiki.nicedit.com/w/page/516/Creating%20a%20Plugin]

nicedit'Resource

name::
* McsEngl.nicedit'Resource@cptIt,

_SPECIFIC:
* http://nicedit.com//
* http://wiki.nicedit.com/w/page/519/FrontPage,
* http://wiki.nicedit.com/w/page/517/Developing%20with%20NicEdit,

nicedit'Version

name::
* McsEngl.nicedit'Version@cptIt,

0.9 r23 - January 4th, 2009

FvMcs.Cmrpgm.editor.pgmWpg (pwp.0-90)

_CREATED: {2014-11-01}

name::
* McsEngl.conceptIt589,
* McsEngl.Cmrpgm.editor.pgmWpg (pwp.0-90)@cptIt,
* McsEngl.FvMcs.Cmrpgm.editor.pgmWpg (pwp.0-90)@cptIt,
* McsEngl.pgmWpg@cptIt,
* McsEngl.pgmWebpage@cptIt,
* McsEngl.programWebpage@cptIt, {2016-04-14}
* McsEngl.pwp!=program.webpage@cptIt,
* McsEngl.PgmHml@old, {2015-11-19}
* McsEngl.phtml@old,
* McsEngl.phl@old, {2015-04-14}
* McsEngl.ph@old, {2014-12-08}

pwp'Description

_DESCRIPTION:
PgmHml started as a fork of TinyMCE#ql:tinymce@cptIt581#, which uses valuenames and pure javascript.
[hmnSngo.2014-11-01]
===
PgmWpg innovates in 3 areas:
1) uses valuenames.
2) does not uses constructors. All custom objects are created literally or from object-factory-functions.
3) its documentation presents explicitly the-whole-part and the-generic-specific structures of the-js-objects used in the-program.
[hmnSngo.2016-01-04]

pwp'Name

name::
* McsEngl.pwp'Name@cptIt,
* McsEngl.programWebpage@cptIt,
* McsEngl.pgmWpg@cptIt,
* McsEngl.pgmWebpage@cptIt,
* McsEngl.programWebpage@cptIt, {2016-04-14}
=== ABBREVIATION:
* McsEngl.pwp@cptIt,
=== _OLD:
* McsEngl.PgmHml@old, {2015-11-19}
* McsEngl.pgmHml@old,
* McsEngl.phtml@old,
* McsEngl.phl@old, {2015-04-14}
* McsEngl.ph@old, {2014-12-08}

pwp'Generic

name::
* McsEngl.pwp'Generic@cptIt,

_GENERIC:
* webbrowser-editor##
* pgmWbe#ql:pgmwbe@cptIt#
* html-editor#ql:html_editor@cptIt#

pwp'Whole

name::
* McsEngl.pwp'Whole@cptIt,

_WHOLE:
* www.synagonism.net/dPgm/dPgmWpg/#ql:synagonism.net@cptIt#

pwp'Archetype

name::
* McsEngl.pwp'Archetype@cptIt,

_DESCRIPTION:
A-document creation process => to be a-webpage creation procees (content processing)
Syntax-tree: whole-part-tree of titles and paragraphs.
Images, videos, audios.
Lists, Tables, Trees.
Code html, css, js editing => to be a-webpage creation procees (code processing)
[2016-05-28]

pwp'Model (algorithm)

name::
* McsEngl.pwp'Model (algorithm)@cptIt,
* McsEngl.pwpalgo@cptIt,

_GENERIC:
* http://synagonism.net/dMiw/dTchInf/lngJs.html#idLjsalg,
* lcp-algo#cptItsoft548#

_DESCRIPTION:
Algorithm is the information processing system (structure and doing) of the-program.
[hknm.2016-04-27]
===
Algorithm is the-information AND the-processing of this information of a-program.
[hmnSngo.2015-04-29]

pwpalgo'bookmark

name::
* McsEngl.pwpalgo'bookmark@cptIt,
* McsEngl.pwpbookmark@cptIt,

_CODE.PWP:
oNodeIn.nodeType == 1 && oNodeIn.getAttribute('data-pwp-type') == 'bookmark';

pwpalgo'color

name::
* McsEngl.pwpalgo'color@cptIt,

pwpcode.COLOR

name::
* McsEngl.pwpcode.COLOR@cptIt,
* McsEngl.pwp'color@cptIt,

toHex(rgbVal)

fDUtlColorRgbToHex

_DESCRIPTION:
public function toHex(rgbVal:String):String
Parses the specified RGB color value and returns a hex version of that color.
Params
Name  Type  Description
rgbVal   String  RGB string value like rgb(1,2,3)
Returns
String Hex version of that RGB value like#FF00FF.
[http://www.tinymce.com/wiki.php/api4:method.tinymce.dom.DOMUtils.toHex]

pwpalgo'CONTENT-MANAGING

name::
* McsEngl.pwpalgo'CONTENT-MANAGING@cptIt,
* McsEngl.phcontent@cptIt,
* McsEngl.pwpcontent@cptIt,
* McsEngl.pwp'content@cptIt,

_DESCRIPTION:
Management of the information stored by a user of the program.
[hmnSngo.2015-04-17]

pwpSetting.protect:
This configuration option enables you to control what contents should be protected from editing while it gets passed into the editor. This could for example be control codes in the HTML. It's recommended not to use inline control contents since it breaks the wisiwyg editing concept but sometimes they can't be avoided.

The option takes an array of regexps that it will match the contents against and these will be invisible while editing.

Example of usage:
oPgmHml.fMedInit({
protect: [
/\<\/?(if|endif)\>/g, // Protect <if> & </endif>
/\<xsl\:[^>]+\>/g, // Protect <xsl:...>
/<\?php.*?\?>/g // Protect php code
]
});
[http://www.tinymce.com/wiki.php/Configuration:protect]

pwp'content.EDITING

name::
* McsEngl.pwp'content.EDITING@cptIt,
* McsEngl.pwp'editing-content@cptIt,

_TOOLBAR_ITEM.TMCE:
cut copy paste undo redo

pwp'content.GETTING

name::
* McsEngl.pwp'content.GETTING@cptIt,

_ADDRESS.WPG:
* http://fiddle.tinymce.com/e5caab,

pwp'content.INSERTING

name::
* McsEngl.pwp'content.INSERTING@cptIt,
* McsEngl.pwp'content.inserting@cptIt,
* McsEngl.pwp'inserting-content-code@cptIt,

_CODE.PWP:
editor.execCommand('mceInsertContent', false, '<hr />');
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\plugins\hr\plugin.js +line:22]
===
setup: function (ed) {
// make sure the instance of the TinyMCE editor has been fully loaded
ed.on('init', function (args) {
// find the iframe which relates to this instance of the editor
var iframe = $("#" + args.target.id + "_ifr");
// get the head element of the iframe's document and inject the javascript
$(iframe[0].contentWindow.document).children('html')
.children('body').append('TEXT');
});
},
[http://stackoverflow.com/questions/3033206/inject-javascript-into-iframe-generated-by-tinymce-yui/18588469#18588469]

_SPECIFIC:
* hr##
* image##
* link##

pwpcode.INSERT-NONBREAKING-SPACE

name::
* McsEngl.pwpcode.INSERT-NONBREAKING-SPACE@cptIt,
* McsEngl.pwp'insert-nonbreaking-space@cptIt,

_MENUBAR.TMCE:
* insert/Nonbreaking space

_MENUITEM.TMCE:
* nonbreaking

_TOOLITEM.TMCE:
* nonbreaking

pwppgn.nonbreaking

name::
* McsEngl.pwppgn.nonbreaking@cptIt,
* McsEngl.pwp'nonbreaking-plugin@cptIt,

_DESCRIPTION:
This plugin adds a button for inserting nonbreaking space entities   at the current caret location.

Plugin options
Name  Summary
[pwpSetting.nonbreaking_force_tab]  This enables you to force TinyMCE to insert three   entities when the user presses the tab key.

Initialization Example
oPgmHml.fMedInit({
plugins: "nonbreaking",
toolbar: "nonbreaking",
nonbreaking_force_tab: true
});
[http://www.tinymce.com/wiki.php/Plugin:nonbreaking]

pwp'content.HR

name::
* McsEngl.pwp'content.HR@cptIt,
* McsEngl.pwp'horizontal-ruler@cptIt,
* McsEngl.pwp'hr-code@cptIt,

_DESCRIPTION:
inserts the html-element '<hr />' at cursor.
===
This plugin adds a menu item and button control that allows you to insert a horizontal ruler on page.

Initialization Example
oPgmHml.fMedInit({
plugins: "hr"
});
[http://www.tinymce.com/wiki.php/Plugin:hr]

_MENUBAR_ITEM:
* pwp'control.hr.mentubar (hr_plugin):

_TOOLBAR_ITEM:
* pwp'control.hr.toolbar (hr_plugin):

_PLUGIN:
* pwp'plugin.hr:
* \PgmWEB\tinyMCE\tinymceDev\js\tinymce\plugins\hr\plugin.js,

pwp'content.IMAGE

name::
* McsEngl.pwp'content.IMAGE@cptIt,
* McsEngl.pwp'image-code@cptIt,

pwp'content.LINK

name::
* McsEngl.pwp'content.LINK@cptIt,
* McsEngl.pwp'link-code@cptIt,

pwp'content.URL

name::
* McsEngl.pwp'content.URL@cptIt,
* McsEngl.pwp'url@cptIt,

_OPTION.TINYMCE:
* pwpSetting.relative_urls
* pwpSetting.remove_script_host
* pwpSetting.document_base_url

_DESCRIPTION:
Q: How do I convert my URLs to relative, absolute, or absolute with domain?

Relative URLs

This will convert all URLs within the same domain to relative URLs. The URLs will be relative from the document_base_url.

relative_urls : true,
document_base_url : "http://www.site.com/path1/"
Example: http://www.site.com/path1/path2/file.htm >> path2/file.htm

Absolute URLs

This will convert all relative URLs to absolute URLs. The URLs will be absolute based on the document_base_url.

relative_urls : false,
remove_script_host : true,
document_base_url : "http://www.site.com/path1/"
Example: path2/file.htm >> /path1/path2/file.htm

Domain Absolute URLs

This will convert all relative URLs to absolute URLs. The URLs will be absolute based on the document_base_url with domain.

relative_urls : false,
remove_script_host : false,
document_base_url : "http://www.site.com/path1/"
Example: path2/file.htm >> http://www.site.com/path1/path2/file.htm
[http://www.tinymce.com/wiki.php/FAQ]

pwp'content.LIST

name::
* McsEngl.pwp'content.LIST@cptIt,
* McsEngl.pwp'list@cptIt,

_TOOLBAR_ITEM:
bullist numlist

pwp'content.OUTPUTING

name::
* McsEngl.pwp'content.OUTPUTING@cptIt,
* McsEngl.pwp'content.outputing@cptIt,

_OPTION:
* pwpSetting.schema:
* pwp'schema_option:
* html5
* html5-strict
* html4
===
The schema option enables you to switch between the HTML4 and HTML5 schema. This controls the valid elements and attributes that can be placed in the HTML. This value can either be the default html5, html4 or html5-strict.

Example of usage
oPgmHml.fMedInit({
...
schema: "html5"
});
[http://www.tinymce.com/wiki.php/Configuration:schema]
===
* pwpSetting.element_format:
* pwp'element_format:
This option enables control if elements should be in html or xhtml mode. xhtml is the default state for this option. This means that for example <br /> will be <br> if you set this option to "html".

// Output elements in HTML style
oPgmHml.fMedInit({
...
element_format : "html"
});
[http://www.tinymce.com/wiki.php/Configuration:element_format]

===
* pwpSetting.entities:
* pwp'entities_option:
This option contains a comma separated list of entity names that is used instead of characters. Odd items are the character code and even items are the name of the character code. Part of the default value of this option is placed in the example below.

The base entities < > & ' and " will always be entity encoded into their named equivalents. Though ' and " will only be encoded within attribute values and < > will only be encoded within text nodes. This is correct according too the HTML and XML specs.

Example of usage of the entities option / default value:

tinyMCE.init({
...
entities : "160,nbsp,38,amp,34,quot,162,cent,8364,euro,163,pound,165,yen,169,copy,174,reg,8482,trade,8240,permil,60,lt,62,gt,8804,le,8805,ge,176,deg,8722,minus"
});
[http://www.tinymce.com/wiki.php/Configuration3x:entities]

===
* pwpSetting.entity_encoding:
* pwp'entity_encoding:
This option controls how entities/characters get processed by TinyMCE. The value can be set as shown in Encoding Types below. You can also mix named and numeric by setting this to "named+numeric" this way it will produce entity names of the ones found in the configured entities and numeric entities for other entities.
The base entities < > & ' and " will always be entity encoded into their named equivalents. Though ' and " will only be encoded within attribute values and < > will only be encoded within text nodes. This is correct according too the HTML and XML specs.

Encoding Types
Name  Summary
* named  Characters will be converted into named entities based on the entities option. For example, a non-breaking space could be encoded as  .
* numeric  Characters will be converted into numeric entities. For example, a non-breaking space would be encoded as  .
* raw  All characters will be stored in non-entity form except these XML default entities: & < > "
oPgmHml.fMedInit({
...
entity_encoding : "raw"
});
[http://www.tinymce.com/wiki.php/Configuration:entity_encoding]

pwp'content.SPELLING

name::
* McsEngl.pwp'content.SPELLING@cptIt,
* McsEngl.pwp'spelling@cptIt,

* pwpSetting.browser_spellcheck
This is a true/false value if the usage of the browsers internal spellchecker should be used.

oPgmHml.fMedInit({
...
browser_spellcheck : true
});
Default value is false.
[http://www.tinymce.com/wiki.php/Configuration:browser_spellcheck]

pwpplugin.spellchecker-php

name::
* McsEngl.pwpplugin.spellchecker-php@cptIt,
* McsEngl.phpgn.spellchecker-php@cptIt,
* McsEngl.pwp'spellchecer-php-plugin@cptIt,

_ADDRESS.WPG:
* https://github.com/tinymce/tinymce_spellchecker_php//

pwp'content.STYLING

name::
* McsEngl.pwp'content.STYLING@cptIt,
* McsEngl.pwp'content.styling@cptIt,
* McsEngl.pwp'format-code@cptIt,
* McsEngl.pwp'styling-code@cptIt,

_TOOLBAR_ITEM.TMCE:
bold italic underline strikethrough subscript superscript
alignleft aligncenter alignright alignjustify
styleselect formatselect fontselect fontsizeselect
outdent indent
blockquote removeformat

pwp'blockquote-htmlelement

name::
* McsEngl.pwp'blockquote-htmlelement@cptIt,

pwp'content.TABLE

name::
* McsEngl.pwp'content.TABLE@cptIt,
* McsEngl.pwp'table-code@cptIt,

pwpSetting.visual:
This true/false option gives you the ability to turn on/off the visual aid for borderless tables. If the border of a table is set to "0", then TinyMCE adds a dotted line around the table by default.

Example of usage of the visual option:

oPgmHml.fMedInit({
...
visual: false
});
[http://www.tinymce.com/wiki.php/Configuration:visual]

pwp'content.VALIDATING

name::
* McsEngl.pwp'content.VALIDATING@cptIt,
* McsEngl.pwp'content.validating@cptIt,
* McsEngl.pwp'validating-code@cptIt,

_OPTION:
* pwpSetting.valid_children:
The valid_children enables you to control what child elements can exists within what parent elements. TinyMCE will remove/split any non HTML transitional contents by default. So for example a P can't be a child of another P element.

The syntax for this option is a comma separated list of parents with elements that should be added/removed as valid children for that element. So for example "+body[style]" would add style as a valid child of body.

Control characters:

Name  Summary
+  Adds children to the list of valid elements for the specified parent.
-  Removes children from the list of valid children for the specified parent.
This example shows you how to add style as a valid child of body and remove div as a valid child. It also forces only strong and a and text contents to be valid children of P.

oPgmHml.fMedInit({
...
valid_children : "+body[style],-body[div],p[strong|a|#text]"
});
This is an option you shouldn't have to fiddle with, the default ruleset for this follows the HTML5 specification.
[http://www.tinymce.com/wiki.php/Configuration:valid_children]

pwpSetting.valid_elements:
The valid_elements option defines which elements will remain in the edited text when the editor saves. You can use this to limit the returned HTML to a subset.

This option contains a comma separated list of element conversion chunks. Each chunk contains information about how one element and its attributes should be treated. The default rule set for this option is specified below.

If you just want to add or change some behaviour for a few items, use the extended_valid_elements option
[http://www.tinymce.com/wiki.php/Configuration:valid_elements]

pwpSetting.valid_styles:
This option enables you specify the available styles for each element. This means you can force ordering and only specific styles to be valid within style attribute values. Specify the element name, then it's styles or * for all elements.

Example of usage of the auto_focus option:

oPgmHml.fMedInit({
...
valid_styles: {
"*": "border,font-size",
"div": "width,height"
}
});
[http://www.tinymce.com/wiki.php/Configuration:valid_styles]

pwp'content.VIDEO

name::
* McsEngl.pwp'content.VIDEO@cptIt,

pwpalgo'FILE-MANAGING

name::
* McsEngl.pwpalgo'FILE-MANAGING@cptIt,
* McsEngl.pwp'file-browser@cptIt,

_ADDRESS.WPG:
* http://www.whiletrue.it/how-to-implement-a-custom-file-manager-in-tinymce-4/
* http://www.tinymce.com/wiki.php/TinyMCE3x:How-to_ implement_a_custom_file_browser,
* Replacement for tinyMCEPopup in 4.0b1?
- http://www.tinymce.com/forum/viewtopic.php?pid=107526,
* http://stackoverflow.com/questions/19244558/ajaxfilemanager-for-tinymce-4-x?rq=1,

phSETTING.Edr:
* pwpfEdrFilebrowser,
* pwpSetting.file_browser_callback,
* pwp'file_browser_callback:
This option enables you to add your own file browser/image browser to TinyMCE. If this option is set with a value a browse button will appear in different dialogues such as "insert/edit link" or "insert/edit image". If this option hasn't got a value set (or equals to false or null) the dialogues in question won't show any browse button.

This function is executed each time a user clicks on the "browse" buttons in various dialogues. The format of this callback function is: fileBrowser(field_name, url, type, win) where field_name is the id/name of the form element that the browser should insert its URL into. The url parameter contains the URL value that is currently inside the field. The type parameter contains what type of browser to present; this value can be file, image or flash depending on what dialogue is calling the function. The win parameter contains a reference to the dialog/window that executes the function.

Example of usage of the file_browser_callback option:

oPgmHml.fMedInit({
...
file_browser_callback: function(field_name, url, type, win) {
win.document.getElementById(field_name).value = 'my browser value';
}
});
[http://www.tinymce.com/wiki.php/Configuration:file_browser_callback]

pwp'elFinder

name::
* McsEngl.pwp'elFinder@cptIt,
* McsEngl.pwp'integrating.elFinder@cptIt,

_ADDRESS.WPG:
- http://www.tinymce.com/wiki.php/Tutorials:Creating_custom_dialogs,
- http://www.tinymce.com/forum/viewtopic.php?pid=108477#p108477,
* https://github.com/Studio-42/elFinder/wiki/Integration-with-TinyMCE-4.x,
* http://stackoverflow.com/questions/16016870/tinymce-4-with-elfinder,
* http://www.tinymce.com/forum/viewtopic.php?id=31053,
* http://www.tinymce.com/forum/viewtopic.php?id=26653,
* https://github.com/Studio-42/elFinder/issues/378,
* https://github.com/Studio-42/elFinder/wiki/Integration-with-TinyMCE-3.x,
* http://elrte.org/redmine/boards/2/topics/3335,

pwp'elFinder-dialog

name::
* McsEngl.pwp'elFinder-dialog@cptIt,

_DESCRIPTION:
Open a dialog with elfinder, when want to find an address.

oPgmHml.fMedInit()
file_browser_callback: function (field_name, url, type, win) {
tinymce.activeEditor.windowManager.open({
url: 'http://localhost/efr/efrTmce/elfinder.tmce.html',// use an absolute path!
title: 'elFinder 2.x',
width: 900,
height: 450,
resizable: 'yes'
}, {
oninsert: function(url) {
win.document.getElementById(field_name).value = url;
}
});
return false;
}
[]

pwp'elFinder-plugin

name::
* McsEngl.pwp'elFinder-plugin@cptIt,
* McsEngl.pwp'plugin.elfinder@cptIt,

plugin.js:
tinymce.PluginManager.add('elfinder', function(editor) {

function showDialog() {
 var url = "http://synagonism.net/program/elfinderEl/elfndrEl.html";
var frame = editor.windowManager.open({
title: 'elFinder 2.0.2',
url: url,
height:600,
width:900,
onclose: function(){
var parentWin = (!window.frameElement && window.dialogArguments) || opener || parent || top;
var parentEditor = parentWin.my_namespace_activeEditor;
parentEditor.execCommand('mceInsertRawHTML', false, 'Lorem Ipsum');
}
});

window.my_namespace_activeEditor = editor;
window.my_namespace_activeFrame = frame;
}

editor.addButton('elfinder', {
icon: 'browse',
tooltip: 'elFinder',
onclick: showDialog
});

editor.settings.file_browser_callback = function (field_name, url, type, win) {
 var url = "http://synagonism.net/program/elfinderEl/elfndrEl.html";
var frame = editor.windowManager.open({
title: 'My-File-Manager.elFinder',
url: url,
height:600,
width:900,
onclose: function(){
// Whatever you want
}
 });

window.my_namespace_activeEditor = editor;
window.my_namespace_activeFrame = frame;
window.my_namespace_activeInput = field_name;

return false;
}

function buttonClick() {
var parentWin = (!window.frameElement && window.dialogArguments) || opener || parent || top;
var parentEditor = parentWin.my_namespace_activeEditor;
parentEditor.execCommand('mceInsertRawHTML', false, 'Lorem Ipsum');
}

});

pwp'FileManager4TinyMCE

name::
* McsEngl.pwp'FileManager4TinyMCE@cptIt,

_ADDRESS.WPG:
* https://github.com/2b3ez/FileManager4TinyMCE,
- http://test.albertoperipolli.com/filemanager4tinymce//

_problem: does not show the files. (I renamed to fm, now does not work)

Installation
1. Upload each folder plugins (image, link, media and filemanager) to tinymce plugins folder (lang file is optional)
2. open filemanager/config.php and set your configurations like base_url, upload_dir, type extensions allowed , max file size, permits… and other specifications. save file.
3. create folder where upload files and give write permits.
4. your work is finish!!! settings of tinymce should be like : (remember to add filemanager in plugins list)

pwp'Mad-File-Manager for TinyMCE Alpha

name::
* McsEngl.pwp'Mad-File-Manager for TinyMCE Alpha@cptIt,

_ADDRESS.WPG:
* http://sourceforge.net/projects/tinyfilemanager//

pwp'MCFileManager

name::
* McsEngl.pwp'MCFileManager@cptIt,
* McsEngl.Moxiecode-FileManager@cptIt,

_ADDRESS.WPG:
* http://www.tinymce.com/wiki.php/MCFileManager,

_DESCRIPTION:
The MCFileManager is a online file management utility, available as PHP and .NET, that is seamlessly integrated with TinyMCE or other similar editors. This utility can also be used standalone and it's easy to integrate with your backend system. MCFileManager also integrates nicely with MCImageManager forming a complete set of file and image management functionality.
[http://www.tinymce.com/wiki.php/MCFileManager]

pwpalgo'programing-style

name::
* McsEngl.pwpalgo'programing-style@cptIt,
* McsEngl.pwpprograming-style@cptIt,
* McsEngl.pwpstyle.programing@cptIt,

_DESCRIPTION:
PgmWpg INNOVATES in programming style|paradigm with:
1) value-names
2) no use of construction-functions
3) a clear conceptual-model for its algorithm.
[hmnSngo.2015-11-25]

pwpalgo'range-object

name::
* McsEngl.pwpalgo'range-object@cptIt,
* McsEngl.pwprange@cptIt,

_CODE.PWP:
// Return new range like object
return {
startContainer: startContainer,
startOffset: startOffset,
endContainer: endContainer,
endOffset: endOffset
};

pwpalgo'SPECIAL-CHARACTER

name::
* McsEngl.pwpalgo'SPECIAL-CHARACTER@cptIt,
* McsEngl.pwpcode.SPECIAL-CHARACTERm@cptIt,
* McsEngl.pwp'special-character@cptIt,

_MENUBAR.TINYMCE:
* Insert/Special character

_MENUITEM.TINYMCE:
* plugins: charmap

_TOOLITEM.TINYMCE:
* toolbar: charmap

pwpalgo'COMMAND

name::
* McsEngl.pwpalgo'COMMAND@cptIt,
* McsEngl.pwpcmd@cptIt,
* McsEngl.phlcmd@cptIt,
* McsEngl.pwp'command@cptIt,
* McsEngl.pwpalgo'command@cptIt,
* McsEngl.pwpcmd@cptIt,
* McsEngl.pwpcommand@cptIt,
* McsEngl.pwpcmd@cptIt,

_DESCRIPTION:
1) store
oPgmWpg.o1Cmd.fCmdStore('CmdFilPrint', function() {
oPgmWpg.o1Cnt.fCntWinRo().print();
});
2) add shortcut
oPgmWpg.o1Shortcut.fSctStore('Ctrl+P', 'shortcut.CmdFilPrint', 'CmdFilPrint');
3) add it on menuitem
oPgmWpg.f1MenitmStore('CmdFilPrint', {
asICrlTxt: 'CFile-Print',
sICrlCmd: 'CmdFilPrint',
sICrlIcn: 'IcnPrint',
sICrlSct: 'Ctrl+P',
});
4) add it on toolitem
oPgmWpg.f1TolitmStore('CmdFilPrint', {
sICrlTitle: 'CFile-Print',
sICrlCmd: 'CmdFilPrint'
});
5) call it from program
oPgmWpg.o1Cmd.fCmdCallRb(sCmdIn, bCmdUiIn, xCmdValueIn, oCmdArgsIn)
A-pwp-command is a-function which you can ADD from anywhere you have access to oEditor and CALL it from oEditor.fEdrCmdCall or oEditorIn.fEdrToolitemAdd or oEditorIn.fEdrMenuitemAdd.
[hmnSngo.2015-05-13]
===
// Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample');
 editor.addCommand('mceAutoResize', resize);
[\PgmWEB\tinyMCE\tinymce401Dev\js\tinymce\plugins\autoresize\plugin.js]

pwpcmd'calling

name::
* McsEngl.pwpcmd'calling@cptIt,
* McsEngl.pwpcmd'access@cptIt,
* McsEngl.pwpcmd'executing@cptIt,
* McsEngl.pwpcmd'invoking@cptIt,
* McsEngl.pwpcmd'running@cptIt,

_DESCRIPTION:
1) oPgmWpg.f1CmdCallRb#ql:phlf1cmdcallrb#
2) oPgmWpg.f1MenuitmAdd('toolitemName', {
sICrlCmd: 'cmdHorizontal_lineInsert'
3) oPgmWpg.f1ToolitmAdd('toolitem', {
sICrlCmd: 'cmdHorizontal_lineInsert',

_CODE.PWP:
/ Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample');

pwpcmd'creating

name::
* McsEngl.pwpcmd'creating@cptIt,
* McsEngl.pwp'addCommand@cptIt,
* McsEngl.pwp'cmd'registering@cptIt,
* McsEngl.pwpcmd'adding@cptIt,
* McsEngl.pwpcmd'registering@cptIt,

_CODE.PWP:
oEditorIn.fEdrCmdExecAdd('cmdHorizontal_lineInsert', function() {
oEditorIn.fEdrCmdCall('fCmdContentInsert', false, '<hr />');
});
===
editor.addCommand('InsertHorizontalRule', function() {
 editor.execCommand('mceInsertContent', false, '<hr />');
});
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\plugins\hr\plugin.js]
===
 editor.addCommand('mceFullPageProperties', showDialog);

pwpcmd'f1CmdAdd

name::
* McsEngl.pwpcmd'f1CmdAdd@cptIt,

pwpcmd'name

name::
* McsEngl.pwpcmd'name@cptIt,

_DESCRIPTION:
We have 3 names:
1) the user name: CWord-word.
2) the registration name: CmdName.
3) the function name: fCmdName.

pwpcmd'function

name::
* McsEngl.pwpcmd'function@cptIt,

_SPECIFIC:
* f1CmdCallRb,
* f1CmdRo,
* f1CmdStore

oPgmWpg.f1CmdCallRb

name::
* McsEngl.oPgmWpg.f1CmdCallRb@cptIt,
* McsEngl.pwpf1CmdCallRb@cptIt,

_CODE.PWP:
// Runs a-command
> oPgmWpg.f1CmdCallRb('CmdFilCntDocNew',false)
===
oPgmWpg.f1CmdCall('CmdIstDate');
===
f1CmdCall(sCmdIn, bCmdUiIn, xCmdValueIn, oCmdArgsIn)

oPgmWpg.f1CmdRo

name::
* McsEngl.oPgmWpg.f1CmdRo@cptIt,
* McsEngl.pwpf1CmdRo@cptIt,
* McsEngl.pwpf1CmdFtr@cptIt,
* McsEngl.pwpo1Edrcmd@cptIt,
* McsEngl.phEditorcmd@cptIt,
* McsEngl.pwpfEditor-commands@cptIt,
* McsEngl.pwp'EditorCommands@cptIt,
* McsEngl.pwp'fEditor-commands@cptIt,
* McsEngl.pwp'Ecd@cptIt,

_DESCRIPTION:
This class enables you to add custom editor commands and it contains overrides for native browser commands to address various bugs and issues.
[http://www.tinymce.com/wiki.php/api4:class.tinymce.EditorCommands]

pwpoEditocmd.MEMBER:
> Object.getOwnPropertyNames(oPgmHml.oMEdrEditorActive.oEdrEditorcommands).sort()
["addCommands", "execCommand", "queryCommandState", "queryCommandValue"]
> Object.getOwnPropertyNames(oPgmHml.oMEdrEditorActive.oEdrEditorcommands.__proto__).sort() ["constructor"]Object.getOwnPropertyNames(oPgmHtml.oMEdrEditorActive.oEdrEditorcommands.__proto__.__proto__).sort()["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
===
> Object.getOwnPropertyNames(tinymce.EditorCommands).sort()
["arguments", "caller", "length", "name", "prototype"]
===
Object.getOwnPropertyNames(tinymce.EditorCommands.prototype).sort()
["constructor"]

oCommands = {state: {}, exec: {}, value: {}},

oPgmWpg.f1CmdStore

name::
* McsEngl.oPgmWpg.f1CmdStore@cptIt,
* McsEngl.pwpf1CmdStore@cptIt,

oPgmWpg.o1Cmd.fCmdExecCallRb

name::
* McsEngl.oPgmWpg.o1Cmd.fCmdExecCallRb@cptIt,

oPgmWpg.o1Cmd.fCmdQStateCallRbn

name::
* McsEngl.oPgmWpg.o1Cmd.fCmdQStateCallRbn@cptIt,

oPgmWpg.o1Cmd.fCmdQValueCallRx

name::
* McsEngl.oPgmWpg.o1Cmd.fCmdQValueCallRx@cptIt,

pwpcmd'icon

name::
* McsEngl.pwpcmd'icon@cptIt,
* McsEngl.pwpicn@cptIt,
* McsEngl.pwpicon@cptIt,
* McsEngl.pwp'icon@cptIt,

_DESCRIPTION:
Menubtn-controls get an <i> element with clsIcn and clsIcnName (sICrlIcn) which display 'before' the-icon.
css-rule displays the-icon.
[hmnSngo.2015-12-10]

_CODE.PWP:
o1Edr.fEdrMenuitemAdd('newdocument', {
saICrlText: 'New document',
sICrlSct: 'Ctrl+N',
sICrlIcn: 'IcnDocNew',
sICrlCmd: 'fCmdDocumentNew'
});
===
//\public_html\drPgmWpg\pgm\drPgm\drSkin\skinLightgray\fonts\icomoon.dev.svg
<glyph unicode="" d="M 451.716,380.285l-71.432,71.431C 364.728,467.272, 334,480, 312,480L 72,480 C 50,480, 32,462, 32,440l0-432 c0-22, 18-40, 40-40l 368,0 c 22,0, 40,18, 40,40
 L 480,312 C 480,334, 467.272,364.729, 451.716,380.285z M 429.089,357.657c 1.565-1.565, 3.125-3.487, 4.64-5.657L 352,352 L 352,433.728
 c 2.17-1.515, 4.092-3.075, 5.657-4.64L 429.089,357.657z M 448,8c0-4.336-3.664-8-8-8L 72,0 c-4.336,0-8,3.664-8,8L 64,440 c0,4.336, 3.664,8, 8,8
 l 240,0 c 2.416,0, 5.127-0.305, 8-0.852L 320,320 l 127.148,0 c 0.547-2.873, 0.852-5.583, 0.852-8L 448,8 z" data-tags="IcnDocNew" />
===
//\public_html\drPgmWpg\pgm\drPgm\drSkin\skinLightgray\skin.css
.clsI-IcnDocNew:before {
content: "\e001";
}

_ADDRESS.WPG:
* http://www.tinymce.com/forum/viewtopic.php?id=31060,
* http://icomoon.io/app//
* http://iconlibrary.iconshock.com/icons/100-free-web-elements-sets//

_SPECIFIC:
* pwpicn.specific:
* pwpicn.aligncenter
* pwpicn.alignjustify
* pwpicn.alignleft
* pwpicn.alignright
* pwpicn.anchor
* pwpicn.blockquote
* pwpicn.bold0
* pwpicn.btnBullist
* pwpicn.btnNumlist
* pwpicn.charmap
* pwpicn.code
* pwpicn.copy
* pwpicn.cut
* pwpicn.emoticons
* pwpicn.forecolor
* pwpicn.fullscreen
* pwpicn.help
* pwpicn.hr
* pwpicn.IcnDocNew
* pwpicn.icnWheel
* pwpicn.image
* pwpicn.indent
* pwpicn.inserttime
* pwpicn.italic
* pwpicn.link
* pwpicn.ltr
* pwpicn.media
* pwpicn.nonbreaking
* pwpicn.outdent
* pwpicn.pagebreak
* pwpicn.paste
* pwpicn.pastetext
* pwpicn.preview
* pwpicn.print
* pwpicn.redo
* pwpicn.removeformat
* pwpicn.resize, dots
* pwpicn.restoredraft
* pwpicn.rtl
* pwpicn.save
* pwpicn.searchreplace
* pwpicn.spellchecker
* pwpicn.strikethrough
* pwpicn.sub
* pwpicn.sup
* pwpicn.table
* pwpicn.template
* pwpicn.underline
* pwpicn.undo
* pwpicn.unlink
* pwpicn.visualchars

icomoon.dev.svg

name::
* McsEngl.icomoon.dev.svg@cptIt,

_DESCRIPTION:
\public-html\PgmHtml\pgm\js\skins\lightgray\fonts\icomoon.dev.svg
The icon of css-content has the same value with 'unicode' in svg file.

.clsi-visualchars:before {
content: "\e02e";
}

<glyph unicode="" d="M 192,448 L 448,448 L 448,384 L 384,384 L 384,0 L 320,0 L 320,384 L 256,384 L 256,0 L 192,0 L 192,224 C 130.144,224 80,274.144 80,336 C 80,397.856 130.144,448 192,448 Z" data-tags="visualchars" />

pwpcmd'menuitem

name::
* McsEngl.pwpcmd'menuitem@cptIt,

_CODE.PWP:
//theme.js
var oMenubarDefault = {
oMenuFile: {sICrlTitle: 'File', aICrlItems: 'save sCmdDocNew'},
oMenuEdit: {sICrlTitle: 'Edit', aICrlItems: 'undo redo | cut copy paste pastetext | selectall'},
oMenuInsert: {sICrlTitle: 'Insert', aICrlItems: '|'},
oMenuView: {sICrlTitle: 'View', aICrlItems: 'visualaid |'},
oMenuFormat: {sICrlTitle: 'Format', aICrlItems: 'bold italic underline strikethrough superscript subscript | formats | removeformat'},
oMenuTable: {sICrlTitle: 'Table'},
oMenuTools: {sICrlTitle: 'Tools'},
oMenuHelp: {sICrlTitle: 'Help', aICrlItems: 'sCmdDocNew'},
};

pwpcmd'object

name::
* McsEngl.pwpcmd'object@cptIt,

_SPECIFIC:
* oPgmWpg.o1Cmd##
* oPgmWpg.o1Cmd.oCmdTypStore##
* oPgmWpg.o1Store.oStoreCmd#ql:phlostorecmd#

oPgmWpg.o1Cmd

name::
* McsEngl.oPgmWpg.o1Cmd@cptIt,
* McsEngl.pwpo1Cmd@cptIt,
=== _OLD:
* McsEngl.pwpoEditorcmd@old,

_DESCRIPTION:
o1Cmd is-created inside fCntBodyInit.

pwpo1Cmd.MEMBER:
> 2016-04-18 Object.getOwnPropertyNames(oPgmWpg.o1Cmd).sort()
["fCmdCallRb", "fCmdStore", "fCmdStoreMisc"]
===
// 2016-04-05
> Object.getOwnPropertyNames(oPgmWpg.o1Cmd).sort()
["fCmdExecCallRb", "fCmdQStateCallRbn", "fCmdQValueCallRx", "oCmdTypStore"]
===
* pwp'fEcdCommandExecute (pwp'execCommand)

* pwp'fEcdCommandQueryState (pwp'queryCommandState)

* pwp'fEcdCommandQueryValue (pwp'queryCommandValue)

* pwp'fEcdCommandsAdd (pwp'addCommands)

pwpcmd'storage

name::
* McsEngl.pwpcmd'storage@cptIt,
* McsEngl.pwpcmd'registration@cptIt,

_DESCRIPTION:

oPgmWpg.o1Store.oStoreCmd

name::
* McsEngl.oPgmWpg.o1Store.oStoreCmd@cptIt,
* McsEngl.cmd.phloStoreCmd@cptIt,
* McsEngl.pwpoStoreCmd@cptIt,

PgmWpg.o1Store.oStoreCmd:
* pwpCmdEdtFindReplace
* pwpCmdFilCntDocProp
* pwpCmdFilPrint
* pwpCmdFilSave
* pwpCmdFilSaveCancel
* pwpCmdFmtIndentList
* pwpCmdFmtOutdentList
* pwpCmdHlpDoc
* pwpCmdIstClipboard
* pwpCmdIstDate
* pwpCmdIstHr
* pwpCmdIstListOL
* pwpCmdIstListUL
* pwpCmdIstNbsp
* pwpCmdIstPagebreak
* pwpCmdIstTemplate
* pwpCmdIstTime
* pwpCmdTblCellProps
* pwpCmdTblCopyRow
* pwpCmdTblCutRow
* pwpCmdTblDelete
* pwpCmdTblDeleteCol
* pwpCmdTblDeleteRow
* pwpCmdTblInsert
* pwpCmdTblInsertColAfter
* pwpCmdTblInsertColBefore
* pwpCmdTblInsertRowAfter
* pwpCmdTblInsertRowBefore
* pwpCmdTblMergeCells
* pwpCmdTblPasteRowAfter
* pwpCmdTblPasteRowBefore
* pwpCmdTblRowProps
* pwpCmdTblSplitCells
* pwpCmdTlsCode
* pwpCmdViwBlocks
* pwpCmdViwCharInv
* pwpCmdViwDirectionLTR
* pwpCmdViwDirectionRTL
* pwpCmdViwPreview

pwpcmd'string

name::
* McsEngl.pwpcmd'string@cptIt,

_SPECIFIC:
* sICrlCmd
* sICrlCmdFmt
* sICrlCmdSelect
* sICrlIcn

pwpsICrlCmd

_DESCRIPTION:
With this variable the-program calls the-command with the-onclick function:
f1MenuitmAdd definition:
oICrlCfgIn.onclick = function() {
oPgmWpg.f1CmdCallRb(oICrlCfgIn.sICrlCmd);
};
===
2) oPgmWpg.f1MenuitmAdd('toolitemName', {
sICrlCmd: 'cmdHorizontal_lineInsert'
3) oPgmWpg.f1ToolitmAdd('toolitem', {
sICrlCmd: 'cmdHorizontal_lineInsert',

pwpsICrlCmdSelect

pwpcmd'plugin#ql:phlpgn@cptIt#

name::
* McsEngl.pwpcmd'plugin@cptIt,

pwpcmd'shortcut (sct)

name::
* McsEngl.pwpcmd'shortcut (sct)@cptIt,
* McsEngl.pwpshortcut@cptIt,
* McsEngl.pwpalgo'keyboard-interaction@cptIt,
* McsEngl.pwpcode.KEYBORD@cptIt,
* McsEngl.pwp'key@cptIt,
* McsEngl.pwp'shortcut@cptIt,

* McsEngl.pwpsct@cptIt,

_DESCRIPTION:
fSctStore, stores shortcuts and their oStoreCmd -commands.
An-event-listener in o1Shortcut connects the-keys with these commands.
[hmnSngo.2016-03-25]

pwpsct'function

name::
* McsEngl.pwpsct'function@cptIt,

oPgmWpg.o1Shortcut.fSctStore

name::
* McsEngl.oPgmWpg.o1Shortcut.fSctStore@cptIt,
* McsEngl.pwpfSctStore@cptIt,

_DESCRIPTION:
Stores the-shortcusts

_CODE.PWP:
//CmdFilPrint is a oPgmWpg.f1CmdStore('CmdFilPrint', function() {
oPgmWpg.o1Shortcut.fSctStore('Ctrl+P', 'shortcut.CmdFilPrint', 'CmdFilPrint');

oPgmWpg.f1FormatterRo.fShortcutAdd

name::
* McsEngl.oPgmWpg.f1FormatterRo.fShortcutAdd@cptIt,

pwpfShortcutAdd:
Private-function of f1FormaterRo that adds shortcuts of format-commands.
[hmnSngo.2016-04-16]

pwpsct'object

name::
* McsEngl.pwpsct'object@cptIt,

oPgmWpg.o1Shortcut

name::
* McsEngl.oPgmWpg.o1Shortcut@cptIt,

oPgmWpg.o1Store.oStoreShortcut

name::
* McsEngl.oPgmWpg.o1Store.oStoreShortcut@cptIt,
* McsEngl.pwpoStoreShortcut@cptIt,

_DESCRIPTION:
oStoreShortcut contains oShortcuts.

pwpoShortcut: {
bAlt: false,
bCtrl: false,
bShift: false,
fSctcmd: fSctcmd,
nKeycode: null,
oScope: oScopeIn || o1Doc,
sChar: null,
sDesc: oPgmWpg.f1TranslateFrmVarRs(sDescIn),
};

_PATTERN:
* Alt+F9
* Alt+F10
* Alt+F11
* Ctrl+1
* Ctrl+2
* Ctrl+3
* Ctrl+4
* Ctrl+5
* Ctrl+6
* Ctrl+7
* Ctrl+8
* Ctrl+9
* Ctrl+B
* Ctrl+F
* Ctrl+I
* Ctrl+K
* Ctrl+P
* Ctrl+S
* Ctrl+Shift+Z
* Ctrl+U
* Ctrl+Y
* Ctrl+Z

pwpsct'string

name::
* McsEngl.pwpsct'string@cptIt,

pwpsct'clsMenuShortcut

name::
* McsEngl.pwpsct'clsMenuShortcut@cptIt,

pwpsct's1Shortcut

name::
* McsEngl.pwpsct's1Shortcut@cptIt,
* McsEngl.pwps1Shortcut@cptIt,

_MEMBEROF:
* oPgmWpg#linkidPwpoPgmWpg#ql:idpwpopgmwpg##

_DESCRIPTION:
Stores the-shortcuts pressed, until it finds a-multikey-shortcut stored in o1Store.oStoreShortcut.

pwpsct'sICrlSct

name::
* McsEngl.pwpsct'sICrlSct@cptIt,

pwpsICrlSct:
A-member of menuitem to show the-shortcut next to command.
===
(oICrlCfg.sICrlShortcut ? '<div id="' + sICrlId + '-shortcut" class="clsMenuShortcut">' + oICrlCfg.sICrlShortcut + '</div>'
: '') +

_CODE.PWP:
o1Edr.fEdrMenuitemAdd('newdocument', {
saICrlText: 'New document',
sICrlSct: 'Ctrl+N',
sICrlIcon: 'newdocument',
sICrlCmd: 'fCmdDocumentNew'
});
===
(oICrlCfg.sICrlSct ? '<div id="' + sICrlId + '-shortcut" class="clsMenuShortcut">' +
oICrlCfg.sICrlSct + '</div>' : '') +

SPECIFIC

name::
* McsEngl.pwpsct.specific@cptIt,

pwpsct.ctrl_a:
* pwpsct.select_all:
- browser shortcut,

pwpsct.ctrl_c:
* pwpsct.copy:
-

pwpsct.ctrl_d:
* pwpsct.copy:

pwpsct.ctrl_f:
* pwpsct.find:
* find and replace

pwpsct.ctrl_k:
* pwpsct.link:
- insert link,

pwpsct.ctrl_p:
* pwpsct.print:

pwpsct.ctrl_x:
* pwpsct.cut:
-

pwpsct.ctrl_y:
* pwpsct.redo:
-

pwpsct.ctrl_z:
* pwpsct.undo,
* pwp'shortcut.undo,

pwpsct.ctrl_alt_f:
* pwpsct.fullscreen:
* pwp'shortcut.fullscreen

pwpsct.ctrl_shift_z:
* pwpsct.redo:

pwpsct.FORMAT

name::
* McsEngl.pwpsct.FORMAT@cptIt,

pwpsct.ctrl_m_b:
* pwpsct.bold:
- strong html elm.

pwpsct.ctrl_m_i:
* pwpsct.italic:
- em html elm.

pwpsct.ctrl_m_s_a:
* pwpsct.superscript:

pwpsct.ctrl_m_s_d:
* pwpsct.subscript:

SPECIFIC

name::
* McsEngl.pwpcmd.specific@cptIt,

* pwpBold

* pwpCopy

* pwpCut

* pwpCmdCntCode

* pwpCmdCntDocProp

* pwpCmdCodeMagic

* pwpCmdListOrdered:

* pwpCmdListUnordered

* pwpCmdTemplate

* pwpCmdSave:

* pwpCmdSaveCancel:

cmdDateInsert:
cmdDirectionLTR:
cmdDirectionRTL:
cmdHorizontal_lineInsert:
cmdInsertClipboardContent:
cmdPagebreak:
cmdPreview:
cmdPrint:
cmdSearchReplace:
cmdTableCellProps:
cmdTableCopyRow:
cmdTableCutRow:
cmdTableDelete:
cmdTableDeleteCol:
cmdTableDeleteRow:
cmdTableInsert:
cmdTableInsertColAfter:
cmdTableInsertColBefore:
cmdTableInsertRowAfter:
cmdTableInsertRowBefore:
cmdTableMergeCells:
cmdTablePasteRowAfter:
cmdTablePasteRowBefore:
cmdTableRowProps:
cmdTableSplitCells:
cmdTimeInsert:

* pwpfCmdBlockquote (pwpmceBlockQuote),
* pwpfCmdCleanup (pwpmceCleanup),
* pwpfCmdContentInsert (pwpmceInsertContent):
* pwpfCmdContentReplace (pwpmceReplaceContent):
* pwpfCmdDocumentNew (pwpmceNewDocument):
* pwpfCmdFormatToggle (mceToggleFormat)
* pwpfCmdFullscreen,
* pwpfCmdHtmlRawInsert (pwpmceInsertRawHTML)
* pwpfCmdLinkInsert (pwpmceInsertLink):
* pwpfCmdNodeDepthSelect (pwpmceSelectNodeDepth)
* pwpfCmdNodeSelect (pwpmceSelectNode)
* pwpfCmdNodeRemove (pwpmceRemoveNode)
* pwpfCmdRuleHorizontalInsert
* pwpfCmdSelectAll (pwpselectAll):
* pwpfCmdVisualaidToggle (pwpmceToggleVisualAid)

* pwpFontName
* pwpFontSize
* pwpForeColor
* pwpFormatBlock

* pwpHiliteColor

* pwpIndent
* pwpInsertHorizontalRule
* pwpInsertOrderedList
* pwpInsertOrderedList
* pwpInsertUnorderedList
* pwpInsertUnorderedList
* pwpItalic

* pwpJustifyCenter
* pwpJustifyFull
* pwpJustifyLeft
* pwpJustifyRight

* pwpmceAddUndoLevel

* pwpmceBeginUndoLevel

* pwpmceEndUndoLevel

* pwpmceRepaint

* pwpmceResetDesignMode

* pwpmceSetContent

* pwpmceAddEditor:
tinymce.execCommand('mceAddEditor', false, 'elm1')
tinymce.execCommand('mceAddEditor', false, 'idEditor');

* pwpmcePreview:

* pwpOutdent

* pwpRedo:

* pwpPaste

* pwpRemoveFormat

* pwpStrikethrough
* pwpSubscript
* pwpSuperscript

* pwpUnderline

* pwpUndo:

* pwpunlink

pwpCmdHtmlRawInsert:
Not called

pwpCmdNodeRemove:
Not called

pwpCmdNodeSelectDepth:
Not called

pwpCmdNodeSelect:
Not called

pwpCmdRepaint:

_SPECIFIC:
2015-05-17
oPgmHtml.oMedEditorActive.oEdrStoreCmdExec
Indent
 
 Object { oCmdscope={...}, fCmdfunction=function()}
Outdent
 
 Object { oCmdscope={...}, fCmdfunction=function()}
cmdCancelSave
 
 Object { oCmdscope={...}, fCmdfunction=cancel()}
cmdDateInsert
 
 Object { oCmdscope={...}, fCmdfunction=function()}
cmdDirectionLTR
 
 Object { oCmdscope={...}, fCmdfunction=function()}
cmdDirectionRTL
 
 Object { oCmdscope={...}, fCmdfunction=function()}
cmdEditorCode
 
 Object { oCmdscope={...}, fCmdfunction=fShowDialog()}
cmdFullpage_properties
 
 Object { oCmdscope={...}, fCmdfunction=fShowDialog()}
cmdFullscreen
 
 Object { oCmdscope={...}, fCmdfunction=fToggleFullscreen()}
cmdHorizontal_lineInsert
 
 Object { oCmdscope={...}, fCmdfunction=function()}
cmdInsertClipboardContent
 
 Object { oCmdscope={...}, fCmdfunction=function()}
cmdInsertListOrdered
 
 Object { oCmdscope={...}, fCmdfunction=function()}
cmdInsertListUnordered
 
 Object { oCmdscope={...}, fCmdfunction=function()}
cmdInsertTemplate
 
 Object { oCmdscope={...}, fCmdfunction=fInsertTemplate()}
cmdNonbreakingspace
 
 Object { oCmdscope={...}, fCmdfunction=function()}
cmdPagebreak
 
 Object { oCmdscope={...}, fCmdfunction=function()}
cmdPreview
 
 Object { oCmdscope={...}, fCmdfunction=function()}
cmdPrint
 
 Object { oCmdscope={...}, fCmdfunction=function()}
cmdSave
 
 Object { oCmdscope={...}, fCmdfunction=save()}
cmdSearchReplace
 
 Object { oCmdscope={...}, fCmdfunction=fShowDialog()}
cmdTableCellProps
 
 Object { oCmdscope={...}, fCmdfunction=function()}
cmdTableCopyRow
 
 Object { oCmdscope={...}, fCmdfunction=function()}
cmdTableCutRow
 
 Object { oCmdscope={...}, fCmdfunction=function()}
cmdTableDelete
 
 Object { oCmdscope={...}, fCmdfunction=function()}
cmdTableDeleteCol
 
 Object { oCmdscope={...}, fCmdfunction=function()}
cmdTableDeleteRow
 
 Object { oCmdscope={...}, fCmdfunction=function()}
cmdTableInsert
 
 Object { oCmdscope={...}, fCmdfunction=function()}
cmdTableInsertColAfter
 
 Object { oCmdscope={...}, fCmdfunction=function()}
cmdTableInsertColBefore
 
 Object { oCmdscope={...}, fCmdfunction=function()}
cmdTableInsertRowAfter
 
 Object { oCmdscope={...}, fCmdfunction=function()}
cmdTableInsertRowBefore
 
 Object { oCmdscope={...}, fCmdfunction=function()}
cmdTableMergeCells
 
 Object { oCmdscope={...}, fCmdfunction=function()}
cmdTablePasteRowAfter
 
 Object { oCmdscope={...}, fCmdfunction=function()}
cmdTablePasteRowBefore
 
 Object { oCmdscope={...}, fCmdfunction=function()}
cmdTableRowProps
 
 Object { oCmdscope={...}, fCmdfunction=function()}
cmdTableSplitCells
 
 Object { oCmdscope={...}, fCmdfunction=function()}
cmdTimeInsert
 
 Object { oCmdscope={...}, fCmdfunction=function()}
cmdVisual_blocks
 
 Object { oCmdscope={...}, fCmdfunction=function()}
cmdVisual_chars
 
 Object { oCmdscope={...}, fCmdfunction=fToggleVisualchars()}

pwpcmd.SPECIFIC-DIVISION.doing

name::
* McsEngl.pwpcmd.SPECIFIC-DIVISION.doing@cptIt,

_SPECIFIC:
* file-cmd##
* edit-cmd##
* view-cmd##
* format-cmd##
* table-cmd##
* tools-cmd##
* help-cmd##

pwpcmd.SPECIFIC-DIVISION.caling

name::
* McsEngl.pwpcmd.SPECIFIC-DIVISION.caling@cptIt,

_SPECIFIC:
* event-cmd##
* menubar-cmd##
* shortcut-cmd##
* toolbar-cmd##

pwpcmd.SPECIFIC-DIVISION.user

name::
* McsEngl.pwpcmd.SPECIFIC-DIVISION.user@cptIt,

_SPECIFIC:
* user-cmd##
* userNo-cmd##

pwpcmd.BROWSER

name::
* McsEngl.pwpcmd.BROWSER@cptIt,
* McsEngl.pwpcmd.customNo@cptIt,
* McsEngl.pwpcmd.native@cptIt,

_SPECIFIC:
* linkL#ql:jscmdntv.*#

pwpcmd.BROWSER.NO

name::
* McsEngl.pwpcmd.BROWSER.NO@cptIt,
* McsEngl.pwpcmd.custom@cptIt,
* McsEngl.pwpcmd.nativeNo@cptIt,

pwpcmd.GENERIC

name::
* McsEngl.pwpcmd.GENERIC@cptIt,
* McsEngl.pwpcmd.menu@cptIt,
* McsEngl.pwpmenu@cptIt,

_DESCRIPTION:
A-generic-command is a-container of individual-commands.

_SPECIFIC:

pwpcmd.GENERIC.NO

name::
* McsEngl.pwpcmd.GENERIC.NO@cptIt,
* McsEngl.pwpcmd.individual@cptIt,
* McsEngl.pwpcmd.instance@cptIt,
* McsEngl.pwpcmd.menuNo@cptIt,

_DESCRIPTION:
MenuNo is an-individual command.
[hmnSngo.2016-04-29]

pwpcmd.doing.FILE

name::
* McsEngl.pwpcmd.doing.FILE@cptIt,
* McsEngl.pwpCmdFil@cptIt,
* McsEngl.pwpcmd.file@cptIt,

pwpcmd.file.MenuFILE (Barmenu)

name::
* McsEngl.pwpcmd.file.MenuFILE (Barmenu)@cptIt,
* McsEngl.pwpCmdFilMen@cptIt,
* McsEngl.pwpcmd.user.CMFile-(Barmenu)@cptIt,
* McsEngl.pwpCMFile@cptIt,

_WHOLE:
* BarMenu,

pwpfil.ThmModern.js:
oMbmenFile: {sICrlTitle: 'CMFile', sICrlItems: 'CmdFilCntDocNew CmdFilCntDocProp CmdFilPrint CmdFilRestoredraft'},

pwpcmd.file.DOCUMENT-PROPERTIES

name::
* McsEngl.pwpcmd.file.DOCUMENT-PROPERTIES@cptIt,
* McsEngl.pwpCmdFilCntDocProp@cptIt,
* McsEngl.pwpcmd.CFile-Doc-properties@cptIt,
* McsEngl.pwpcmd.Document-properties@cptIt,

pwpfil.PgnFilCntDocProp.js:
oPgmWpg.o1Cmd.fCmdStore('CmdFilCntDocProp', fCmdFilCntDocProp);

oPgmWpg.f1StoreTolitm('CmdFilCntDocProp', {
sICrlTitle: 'CFile-Doc-properties',
sICrlIcn: 'IcnProperties',
sICrlCmd: 'CmdFilCntDocProp'
});

oPgmWpg.f1StoreMenitm('CmdFilCntDocProp', {
asICrlTxt: 'CFile-Doc-properties',
sICrlIcn: 'IcnProperties',
sICrlCmd: 'CmdFilCntDocProp',
});

oPgmWpg.o1Evt.fEvtStoreEvtCmd('EvtCntSetBfr', fEvtCntSet);
oPgmWpg.o1Evt.fEvtStoreEvtCmd('EvtCntGet', fEvtCntGet);
});

PgnCntDocProp#ql:phlpgn.pgncntdocprop#

pwpcmd.file.NEW-DOCUMENT

name::
* McsEngl.pwpcmd.file.NEW-DOCUMENT@cptIt,
* McsEngl.pwpCmdFilCntDocNew@cptIt,
* McsEngl.pwpcmd.user.CFile-New-document@cptIt,
* McsEngl.pwpcmd.CFile-New-document@cptIt,
* McsEngl.pwpcmd.new-document@cptIt,
* McsEngl.pwpcmd.FilCntDocNew@cptIt,

pwpfil.PgnFilCntDocNew.js:
oPgmWpg.o1Cmd.fCmdStore('CmdFilCntDocNew', function() {
o1CntIn.fCntSetRs('');
});
//oPgmWpg.o1Shortcut.fSctStore('Ctrl+P', 'shortcut.CmdFilPrint', 'CmdFilPrint');

oPgmWpg.f1StoreMenitm('CmdFilCntDocNew', {
asICrlTxt: 'CFile-New-document',
sICrlIcn: 'IcnDocNew',
sICrlCmd: 'CmdFilCntDocNew',
});

oPgmWpg.f1StoreTolitm('CmdFilCntDocNew', {
sICrlTooltip: 'CFile-New-document',
sICrlIcn: 'IcnDocNew',
sICrlCmd: 'CmdFilCntDocNew'
});

pwpcmd.file.PRINT

name::
* McsEngl.pwpcmd.file.PRINT@cptIt,
* McsEngl.pwpCmdFilPrint@cptIt,
* McsEngl.pwpcmd.user.CFile-Print@cptIt,
* McsEngl.pwpcmd.CFile-Print@cptIt,
* McsEngl.pwpcmd.Print@cptIt,

pwpfil.PgnFilPrint.js:
oPgmWpg.o1Cmd.fCmdStore('CmdFilPrint', function() {
oPgmWpg.o1Cnt.fCntWinRo().print();
});
oPgmWpg.o1Shortcut.fSctStore('Ctrl+P', 'shortcut.CmdFilPrint', 'CmdFilPrint');

oPgmWpg.f1StoreMenitm('CmdFilPrint', {
asICrlTxt: 'CFile-Print',
sICrlCmd: 'CmdFilPrint',
sICrlIcn: 'IcnPrint',
sICrlSct: 'Ctrl+P',
});

oPgmWpg.f1StoreTolitm('CmdFilPrint', {
sICrlTitle: 'CFile-Print',
sICrlCmd: 'CmdFilPrint'
});

pwpcmd.file.RESTORE-DRAFT

name::
* McsEngl.pwpcmd.file.RESTORE-DRAFT@cptIt,
* McsEngl.pwpCmdFilRestoredraft@cptIt,
* McsEngl.pwpcmd.user.CFile-Restore-last-draft@cptIt,
* McsEngl.pwpCRestore-last-draft@cptIt,

pwpfil.PgmWpg.js:
oPgmWpg.f1StoreTolitm('CmdFilRestoredraft', {
sICrlTitle: 'CFile-Restore-last-draft',
sICrlIcn: 'IcnRestoredraft',
onclick: fDraftLastRestore,
onCmdEvtPostrender: fRenderPost
});

oPgmWpg.f1StoreMenitm('CmdFilRestoredraft', {
asICrlTxt: 'CFile-Restore-last-draft',
sICrlIcn: 'IcnRestoredraft',
onclick: fDraftLastRestore,
onCmdEvtPostrender: fRenderPost,
});

pwpcmd.doing.EDIT

name::
* McsEngl.pwpcmd.doing.EDIT@cptIt,
* McsEngl.pwpCmdEdt@cptIt,
* McsEngl.pwpcmd.edit@cptIt,

pwpcmd.edit.GncEdit (Barmenu)

name::
* McsEngl.pwpcmd.edit.GncEdit (Barmenu)@cptIt,
* McsEngl.pwpCmdEdtGnc@cptIt,
* McsEngl.pwpcmd.user.CMEdit@cptIt,
* McsEngl.pwpCEdit@cptIt,
* McsEngl.pwpEdit@cptIt,

_CODE.PWP:
oMenbaritmEdit: {sICrlTitle: 'CEdit', aICrlItems: 'CmdUndo CmdRedo | CmdCut CmdCopy CmdPaste CmdPastetext | CmdSelectall'},

pwpcmd.edit.COPY

name::
* McsEngl.pwpcmd.edit.COPY@cptIt,
* McsEngl.pwpCmdEdtCopy@cptIt,
* McsEngl.pwpcmd.copy@cptIt,
* McsEngl.pwpcmd.user.CEdit-Copy@cptIt,
* McsEngl.pwpCCopy@cptIt,
* McsEngl.pwpCopy@cptIt,

pwpfil.PgmWpg.js:
'CmdEdtNtvCut,CmdEdtNtvCopy,CmdEdtNtvPaste': function(sCmdIn) {
var oCntDoc = o1Cnt.fCntDocRo(), bFailed;

sCmdIn = sCmdIn.substring(9);
// Try executing the native command
try {
fCmdNtvCntCallRb(sCmdIn);
} catch (ex) {
// Command failed
bFailed = true;
}

// Present alert message about clipboard access not being available
if (bFailed || !oCntDoc.queryCommandSupported(sCmdIn)) {
oPgmWpg.o1MgrWin.fMwnAlert(
"Your browser doesn't support direct access to the clipboard. " +
"Please use the Ctrl+X/C/V keyboard shortcuts instead."
);
}
},

pwpcmd.edit.CUT

name::
* McsEngl.pwpcmd.edit.CUT@cptIt,
* McsEngl.pwpCmdEdtCut@cptIt,
* McsEngl.pwpcmd.cut@cptIt,
* McsEngl.pwpcmd.user.CEdit-Cut@cptIt,
* McsEngl.pwpCCut@cptIt,
* McsEngl.pwpCut@cptIt,

pwpcmd.edit.FIND-REPLACE

name::
* McsEngl.pwpcmd.edit.FIND-REPLACE@cptIt,
* McsEngl.pwpCmdEdtFindReplace@cptIt,
* McsEngl.pwpcmd.FindReplace@cptIt,
* McsEngl.pwpcmd.user.CEdit-Find-and-replace@cptIt,
* McsEngl.pwpCFind-and-replace@cptIt,
* McsEngl.pwpCFindReplace@cptIt,

pwpfil.PgnEdtFindReplace.js:
oPgmWpg.o1Cmd.fCmdStore('CmdEdtFindReplace', fCmdEdtFindReplace);
oPgmWpg.o1Shortcut.fSctStore('Ctrl+F', 'shortcut.CmdEdtFindReplace', fCmdEdtFindReplace);

oPgmWpg.f1StoreMenitm('CmdEdtFindReplace', {
asICrlTxt: 'CEdit-Find-and-replace',
sICrlIcn: 'IcnSearch',
sICrlSct: 'Ctrl+F',
sICrlCmd: 'CmdEdtFindReplace'
});

oPgmWpg.f1StoreTolitm('CmdEdtFindReplace', {
sICrlTooltip: 'CEdit-Find-and-replace',
sICrlIcn: 'IcnSearch',
sICrlCmd: 'CmdEdtFindReplace'
});

pwpcmd.edit.PASTE

name::
* McsEngl.pwpcmd.edit.PASTE@cptIt,
* McsEngl.pwpCmdEdtPaste@cptIt,
* McsEngl.pwpcmd.user.CEdit-Paste@cptIt,
* McsEngl.pwpcmd.paste@cptIt,
* McsEngl.pwpCPaste@cptIt,

pwpcmd.edit.PASTE-TEXT

name::
* McsEngl.pwpcmd.edit.PASTE-TEXT@cptIt,
* McsEngl.pwpCmdEdtPastetxt@cptIt,
* McsEngl.cptcmd.Pastetxt@cptIt,
* McsEngl.pwpcmd.user.CEdit-Paste-as-text@cptIt,
* McsEngl.pwpCmdPastetext@cptIt,
* McsEngl.pwpCPaste-as-text@cptIt,

pwpfil.PgnEdtPastetxt.js:
oPgmWpg.f1StoreTolitm('CmdEdtPastetxt', {
sICrlTooltip: 'CEdit-Paste-as-text',
sICrlIcn: 'IcnPastetext',
onclick: fCmdEdtPastetxt,
bICrlActive: self.clipboard.pasteFormat == "text"
});

oPgmWpg.f1StoreMenitm('CmdEdtPastetxt', {
asICrlTxt: 'CEdit-Paste-as-text',
sICrlIcn: 'IcnPastetext',
bICrlSelectable: true,
bICrlActive: clipboard.pasteFormat,
onclick: fCmdEdtPastetxt
});

pwpcmd.edit.REDO

name::
* McsEngl.pwpcmd.edit.REDO@cptIt,
* McsEngl.pwpCmdEdtRedo@cptIt,
* McsEngl.pwpcmd.Redo@cptIt,
* McsEngl.pwpcmd.user.CEdit-Redo@cptIt,
* McsEngl.pwpCRedo@cptIt,

pwpfil.PgmWpg.js:
CmdEdtRedo: function() {
oPgmWpg.o1MgrUndo.fMudRedoRo();
},

pwpcmd.edit.SELECT-ALL

name::
* McsEngl.pwpcmd.edit.SELECT-ALL@cptIt,
* McsEngl.pwpCmdEdtSelectall@cptIt,
* McsEngl.pwpcmd.Selectall@cptIt,
* McsEngl.pwpcmd.user.CEdit-Select-all@cptIt,
* McsEngl.pwpCSelect-all@cptIt,

pwpfil.PgmWpg.js:
CmdEdtSelectall: ['CEdit-Select-all', 'CmdEdtNtvSelectAll', 'IcnSelectall', 'Ctrl+A'],

pwpcmd.edit.UNDO

name::
* McsEngl.pwpcmd.edit.UNDO@cptIt,
* McsEngl.pwpCmdEdtUndo@cptIt,
* McsEngl.pwpcmd.Undo@cptIt,
* McsEngl.pwpcmd.user.CEdit-Undo@cptIt,
* McsEngl.pwpCUndo@cptIt,

pwpcmd.doing.INSERT

name::
* McsEngl.pwpcmd.doing.INSERT@cptIt,
* McsEngl.pwpCmdIst@cptIt,
* McsEngl.pwpcmd.insert@cptIt,

_DESCRIPTION:
Inserts content into the-webpage.
[hmnSngo.2016-04-29]

_SPECIFIC:
* gncInsert##
* gncTable
* gncTime
* daytime
* date
*

pwpcmd.insert.GncEMOTICONS

name::
* McsEngl.pwpcmd.insert.GncEMOTICONS@cptIt,
* McsEngl.pwpCmdIstGncEmoticons@cptIt,
* McsEngl.pwpcmd.IstGncEmoticons@cptIt,
* McsEngl.pwpcmd.Emoticons@cptIt,
* McsEngl.pwpcmd.user.InsertEmoticons@cptIt,
* McsEngl.pwpCmdIstGncEmoticons@cptIt,

pwpfil.PgnIstEmoticons.js:
oPgmWpg.f1StoreTolitm('CmdIstGncEmoticons', {
sIType: 'fICHBPanelbtnRo',
sICrlTooltip: 'CIstGen-Emoticons',
sICrlAlignPopover: 'bc-tl',
oICrlPanel: oICrlPnl,
sICrlIcn: 'IcnEmoticons'
});

pwpcmd.insert.GncINSERT (BarMenu)

name::
* McsEngl.pwpcmd.insert.GncINSERT (BarMenu)@cptIt,
* McsEngl.pwpcmd.user.CMInsert-(Barmenu)@cptIt,
* McsEngl.pwpCInsert@cptIt,

_DESCRIPTION:
CmdMenuInsert contains commands that insert content.

File.theme.js:
oMbmenInsert: {sICrlTitle: 'CMInsert',
sICrlItems: 'CmdIstLink CmdIstImage CmdIstVideo | CmdIstChar CmdIstMenTime CmdIstHr CmdIstNbsp CmdIstPagebreak '
+ '| CmdIstTemplate'},

pwpcmd.insert.GncTABLE

name::
* McsEngl.pwpcmd.insert.GncTABLE@cptIt,
* McsEngl.pwpCmdIstMenTable@cptIt,

pwpfil.ThmModern.js:
oMbmenInsert: {sICrlTitle: 'CMInsert',
sICrlItems: 'CmdIstMenTable | CmdIstLink CmdIstImage CmdIstVideo | CmdIstChar CmdIstMenTime CmdIstHr CmdIstNbsp CmdIstPagebreak '
+ '| CmdIstTemplate'},

pwpcmd.insert.GncTIME

name::
* McsEngl.pwpcmd.insert.GncTIME@cptIt,
* McsEngl.pwpCmdIstMenTime@cptIt,
* McsEngl.pwpcmd.user.CIstMenu-Time@cptIt,
* McsEngl.pwpCmdIstMenTime@cptIt,
* McsEngl.pwpCInsert-date-time@cptIt,
* McsEngl.pwpCIstDatetime@cptIt,

File.PgnCmdIstTime/plugin.js:
oPgmWpg.f1StoreMenitm('CmdIstMenTime', {
asICrlTxt: 'CIstMenu-Time',
sICrlIcn: 'IcnTime',
aoICrlMen: aICrlMenuIstTime,
});
===
oPgmWpg.f1StoreTolitm('CmdIstMenTime', {
sIType: 'fICHBMSplitbtnRo',
sICrlTitle: 'CIstMenu-Time',
sICrlIcn: 'IcnTime',
aoICrlMen: aICrlMenuIstTime,
onclick: function() {
fCmdIstTime(sDatefmtLast || " %H:%M:%S ");
},
});

File.index.html:
sCfgPlugins: 'PgnFilPrint,PgnFilSave,PgnFilSaveAuto,PgnIstAnchor,PgnIstChar,PgnFmtColor,PgnContextmenu,PgnIstTime,pgnEmoticons,PgnFilCntDocProp,PgnHlpDoc,PgnIstHr,PgnIstImage,PgnIstLink,pgnListAdv,PgnIstNbsp,PgnIstVideo,PgnIstPagebreak,PgnViwPreview,PgnEdtFindReplace,pgnTable,PgnIstTemplate,PgnViwBlocks,PgnViwCharInv,PgnViwDirection,PgnTlsCode,pgnWordcount,autolink,lists,paste',

sCfgToolbar1: 'CmdFilSave CmdEdtUndo CmdEdtRedo | CmdFmtMenGroup CmdFmtFontfamily CmdFmtFontsizes | CmdFmtBold CmdFmtItalic CmdFmtUnderline | CmdFmtAlignLeft CmdFmtAlignCenter CmdFmtAlignRight CmdFmtAlignJustify | CmdFmtMenListUL CmdFmtMenListOL | eqneditor CmdFmtMenColorFore CmdFmtMenColorBack | CmdFmtNtvIndent CmdFmtNtvOutdent CmdIstMenTime CmdIstLink CmdIstLinkRmv CmdIstImage CmdIstMenEmoticons | CmdViwPreview CmdTableTool',

pwpcmd.insert.ANCHOR

name::
* McsEngl.pwpcmd.insert.ANCHOR@cptIt,
* McsEngl.pwpCInsert-anchor@cptIt,
* McsEngl.pwpCmdIstAnchor@cptIt,
* McsEngl.pwpcmd.user.CIst-anchor@cptIt,

_DESCRIPTION:
Not used, because attribute 'id' has the-same role.

pwpcmd.insert.CHAR

name::
* McsEngl.pwpcmd.insert.CHAR@cptIt,
* McsEngl.pwpCmdIstChar@cptIt,

pwpfil.PgnIstChar.js:
oPgmWpg.f1StoreTolitm('CmdIstChar', {
sICrlTooltip: 'CIst-Special-char',
sICrlIcn: 'IcnCharmap',
onclick: fCmdIstChar
});

oPgmWpg.f1StoreMenitm('CmdIstChar', {
asICrlTxt: 'CIst-Special-char',
sICrlIcn: 'IcnCharmap',
onclick: fCmdIstChar,
});

pwpcmd.insert.DAYTIME

name::
* McsEngl.pwpcmd.insert.DAYTIME@cptIt,
* McsEngl.pwpCmdIstDaytime@cptIt,

_DESCRIPTION:
Not used.

File.PgnIstTime.js:
oPgmWpg.o1Cmd.fCmdStore('CmdIstDaytime', function() {
fInsertDateTime(oPgmWpg.f1CfgvalRx('sCfgPgnIstTimeDaytime', oPgmWpg.f1TranslateFrmVarRs('%H:%M:%S')));
});

pwpcmd.insert.DATE

name::
* McsEngl.pwpcmd.insert.DATE@cptIt,
* McsEngl.pwpCmdIstDate@cptIt,

_DESCRIPTION:
Not used.

File.PgnIstTime.js:
oPgmWpg.o1Cmd.fCmdStore('CmdIstDate', function() {
fInsertDateTime(oPgmWpg.f1CfgvalRx('sCfgPgnIstTimeDate', oPgmWpg.f1TranslateFrmVarRs("%Y-%m-%d")));
});

pwpcmd.insert.HORIZONTAL-LINE

name::
* McsEngl.pwpcmd.insert.HORIZONTAL-LINE@cptIt,
* McsEngl.pwpCmdIstHr@cptIt,
* McsEngl.pwpCInsert-horizontal-line@cptIt,
* McsEngl.pwpcmd.Horizontal-line@cptIt,
* McsEngl.pwpcmd.CIst-Horizontal-line@cptIt,
* McsEngl.pwpcmd.user.CIst-Horizontal-line@cptIt,
* McsEngl.pwpCmdIstHr@cptIt,

pwpfil.ThmModern.js:
oMbmenInsert: {sICrlTitle: 'CMInsert',
sICrlItems: 'CmdIstMenTable | CmdIstLink CmdIstImage CmdIstVideo | CmdIstChar CmdIstMenTime CmdIstHr CmdIstNbsp CmdIstPagebreak '
+ '| CmdIstTemplate'},

pwpfil.PgnIstHr:
oPgmWpg.o1Cmd.fCmdStore('CmdIstHr', function() {
oPgmWpg.o1Cmd.fCmdCallRb('CmdEdtCntInsert', false, '<hr />');
});

oPgmWpg.f1StoreTolitm('CmdIstHr', {
sICrlTooltip: 'CIst-Horizontal-line',
sICrlIcn: 'IcnHr',
sICrlCmd: 'CmdIstHr'
});

oPgmWpg.f1StoreMenitm('CmdIstHr', {
asICrlTxt: 'CIst-Horizontal-line',
sICrlIcn: 'IcnHr',
sICrlCmd: 'CmdIstHr',
});

pwpfil.PgmWpg.js:
CmdIstHr: function() {
oPgmWpg.o1Cmd.fCmdCallRb('CmdEdtCntInsert', false, '<hr />');
},

pwpcmd.insert.IMAGE

name::
* McsEngl.pwpcmd.insert.IMAGE@cptIt,
* McsEngl.pwpCmdIstImg@cptIt,
* McsEngl.pwpcmd.user.CIst-link@cptIt,
* McsEngl.pwpCInsert-link@cptIt,

pwpcmd.insert.LINK

name::
* McsEngl.pwpcmd.insert.LINK@cptIt,
* McsEngl.pwpcmd.user.CIst-link@cptIt,
* McsEngl.pwpCInsert-link@cptIt,

pwpfil.PgmWpg.js:
CmdIstLink: function(sCmdIn, bCmdUiIn, oValueIn) {
var oEltA;

if (typeof(oValueIn) == 'string') {
oValueIn = {href: oValueIn};
}

oEltA = oCntDMngr.fDMgrNodeAncestorRlo(o1DSelection.fDSlnEltRo(), 'a');

// Spaces are never valid in URLs and it's a very common mistake for people to make so we fix it here.
oValueIn.href = oValueIn.href.replace(' ', '%20');

// Remove existing links if there could be child links or that the href isn't specified
if (!oEltA || !oValueIn.href) {
o1CmdFormatter.fCFmrRemove('link');
}

// Apply new link to selection
if (oValueIn.href) {
o1CmdFormatter.fCFmrApply('link', oValueIn, oEltA);
}
},

pwpcmd.insert.LINK.REMOVE

name::
* McsEngl.pwpcmd.insert.LINK.REMOVE@cptIt,
* McsEngl.pwpCmdIstLinkRmv@cptIt,
* McsEngl.pwpcmd.user.CIst-Link-Remove@cptIt,
* McsEngl.pwpCRmvLink@cptIt,
* McsEngl.pwpCRemove-link@cptIt,

pwpfil.PgnIstLink.js:
 oPgmWpg.o1Shortcut.fSctStore('Ctrl+K+L', 'shortcut.linkRemove', 'CmdIstLinkRmv');
===
 oPgmWpg.f1StoreMenitm('CmdIstLinkRmv', {
   asICrlTxt: 'CIst-LinkRemove',
   sICrlIcn: 'IcnRmvLink',
   sICrlSct: 'Ctrl+K+L',
   sICrlCmd: 'CmdIstLinkRmv',
   sICrlCssslrActive: 'a[href]'
 });

pwpfil.PgmWpg.js:
CmdIstLinkRmv: function(sCmdIn) {
if (o1DSelection.fDSlnCollapsedRb()) {
o1DSelection.fDSlnEltSelectRo(o1DSelection.fDSlnEltRo());
}

fCmdNtvCntCallRb('unlink');
o1DSelection.fDSlnCollapse(false);
},

pwpfil.ThmModern.js:
oMbmenInsert: {sICrlTitle: 'CMInsert',
sICrlItems: 'CmdIstMenTable | CmdIstLink CmdIstLinkRmv CmdIstImage CmdIstVideo | CmdIstChar CmdIstMenTime CmdIstHr CmdIstNbsp CmdIstPagebreak '
+ '| CmdIstTemplate'},

pwpcmd.insert.NONBREAKING-SPACE

name::
* McsEngl.pwpcmd.insert.NONBREAKING-SPACE@cptIt,
* McsEngl.pwpcmd.user.CIst-nonbreaking-space@cptIt,
* McsEngl.pwpCInsert-nonbreaking-space@cptIt,
* McsEngl.pwpCmdIstNbsp@cptIt,

pwpfil.PgnIstNbsp.js:
oPgmWpg.o1Cmd.fCmdStore('CmdIstNbsp', function() {
oPgmWpg.o1Cnt.fCntInsert(
(oPgmWpg.o1Store.oStorePlugin.PgnViwCharInv && oPgmWpg.o1Store.oStorePlugin.PgnViwCharInv.state) ?
'<span data-pwp-bogus="1" class="clsNbsp"> </span>' : ' '
);
});

oPgmWpg.f1StoreTolitm('CmdIstNbsp', {
sICrlTitle: 'Insert nonbreaking space',
sICrlIcn: 'IcnNbsp',
sICrlCmd: 'CmdIstNbsp'
});

oPgmWpg.f1StoreMenitm('CmdIstNbsp', {
asICrlTxt: 'CIst-Nonbreaking-space',
sICrlIcn: 'IcnNbsp',
sICrlCmd: 'CmdIstNbsp',
});

pwpfil.ThmModern.js:
oMbmenInsert: {sICrlTitle: 'CMInsert',
sICrlItems: 'CmdIstMenTable | CmdIstLink CmdIstLinkRmv CmdIstImage CmdIstVideo | CmdIstChar CmdIstMenTime CmdIstHr CmdIstNbsp CmdIstPagebreak '
+ '| CmdIstTemplate'},

pwpcmd.insert.PAGEBREAK

name::
* McsEngl.pwpcmd.insert.PAGEBREAK@cptIt,
* McsEngl.pwpCmdIstPagebreak@cptIt,
* McsEngl.pwpcmd.user.CIst-Pagebreak@cptIt,
* McsEngl.pwpCInsert-Pagebreak@cptIt,

pwpfil.PgnIstPagebreak.js:
  sEltImg = '<img src="' + oPgmWpg.o1Env.sImgTransparentSrc + '" class="clsPagebreak data-pwp-resize="false" />';

 // Register commands
 oPgmWpg.o1Cmd.fCmdStore('CmdIstPagebreak', function() {
   oPgmWpg.o1Cmd.fCmdCallRb('CmdIstCnt', 0, sEltImg);
 });

 // Register buttons
 oPgmWpg.f1StoreTolitm('CmdIstPagebreak', {
   sICrlTitle: 'CIst-Page-break',
   sICrlIcn: 'IcnPagebreak',
   sICrlCmd: 'CmdIstPagebreak'
 });

 oPgmWpg.f1StoreMenitm('CmdIstPagebreak', {
   asICrlTxt: 'CIst-Page-break',
   sICrlIcn: 'IcnPagebreak',
   sICrlCmd: 'CmdIstPagebreak',
 });

pwpcmd.insert.TEMPLATE

name::
* McsEngl.pwpcmd.insert.TEMPLATE@cptIt,
* McsEngl.pwpCmdIstTemplate@cptIt,
* McsEngl.pwpcmd.user.CIst-Template@cptIt,
* McsEngl.pwpCInsert-Template@cptIt,

pwpfil.PgnIstTemplate.js:
oPgmWpg.f1StoreTolitm('CmdIstTemplate', {
sICrlTitle: 'CIst-Template',
sICrlIcn: 'IcnTemplate',
onclick: fCmdIstTemplate
});

oPgmWpg.f1StoreMenitm('CmdIstTemplate', {
asICrlTxt: 'CIst-Template',
sICrlIcn: 'IcnTemplate',
sICrlSeparator: 'before',
onclick: fCmdIstTemplate
});

pwpcmd.insert.VIDEO

name::
* McsEngl.pwpcmd.insert.VIDEO@cptIt,
* McsEngl.pwpCmdIstVid@cptIt,
* McsEngl.pwpcmd.user.CIst-video@cptIt,
* McsEngl.pwpCInsert-video@cptIt,

pwpfil.PgnIstVid.js:
oPgmWpg.f1StoreTolitm('CmdIstVid', {
sICrlTooltip: 'CIst-Video',
onclick: fCmdIstVid,
sICrlCssslrActive: 'img[data-pwp-object=video]'
});

oPgmWpg.f1StoreMenitm('CmdIstVid', {
sICrlIcn: 'IcnMedia',
asICrlTxt: 'CIst-Video',
bICrlPrepend_to_context: true,
onclick: fCmdIstVid,
});

pwpfil.ThemModern.js:
oMbmenInsert: {sICrlTitle: 'CMInsert',
sICrlItems: 'CmdIstMenTable | CmdIstLink CmdIstLinkRmv CmdIstImage CmdIstVid ' +
'| CmdIstChar CmdIstMenTime CmdIstHr CmdIstNbsp CmdIstPagebreak ' +
'| CmdIstTemplate'},

pwpcmd.doing.VIEW

name::
* McsEngl.pwpcmd.doing.VIEW@cptIt,
* McsEngl.pwpCmdViw@cptIt,
* McsEngl.pwpcmd.view@cptIt,

pwpcmd.view.MenuVIEW (Barmenu)

name::
* McsEngl.pwpcmd.view.MenuVIEW (Barmenu)@cptIt,
* McsEngl.pwpcmd.MenuView@cptIt,
* McsEngl.pwpcmd.user.CMView-(Barmenu)@cptIt,
* McsEngl.pwpCView@cptIt,

pwpfil.ThmModern.js:
oMbmenView: {sICrlTitle: 'CMView',
sICrlItems: 'CmdViwVisualaid CmdViwBlocks CmdViwCharInv | CmdViwPreview'},

pwpcmd.view.BLOCKS

name::
* McsEngl.pwpcmd.view.BLOCKS@cptIt,
* McsEngl.pwpCmdViwBlocks@cptIt,
* McsEngl.pwpcmd.view-blocks@cptIt,
* McsEngl.pwpCmdViwBlocks@cptIt,
* McsEngl.pwpcmd.user.CView-blocks@cptIt,
* McsEngl.pwpCView-blocks@cptIt,
* McsEngl.pwpCmdViewBlocks@cptIt,

pwpfil.PgnViwBlocks.js:
 oPgmWpg.o1Cmd.fCmdStore('CmdViwBlocks', function() {
 });

 // Needs an-icon
 oPgmWpg.f1StoreTolitm('CmdViwBlocks', {
   sICrlTitle: 'CView-Blocks',
   sICrlCmd: 'CmdViwBlocks',
   onpostrender: fToggleActivestate
 });

 oPgmWpg.f1StoreMenitm('CmdViwBlocks', {
   asICrlTxt: 'CView-Blocks',
   sICrlCmd: 'CmdViwBlocks',
   bICrlSelectable: true,
   bICrlPrepend_to_context: true,
   onpostrender: fToggleActivestate,
 });

pwpfil.ThmModern.js:
oMbmenView: {sICrlTitle: 'CMView',
sICrlItems: 'CmdViwVisualaid CmdViwBlocks CmdViwCharInv | CmdViwPreview'},

pwpcmd.view.INVISIBLE-CHARS

name::
* McsEngl.pwpcmd.view.INVISIBLE-CHARS@cptIt,
* McsEngl.pwpCmdViwCharInv@cptIt,
* McsEngl.pwpcmd.invisible-chars@cptIt,
* McsEngl.pwpcmd.user.CView-invisible-chars@cptIt,
* McsEngl.pwpCView-invisible-chars@cptIt,
* McsEngl.pwpCmdViewCharInv@cptIt,

pwpfil.PgnViwCharInv.js:
oPgmWpg.o1Cmd.fCmdStore('CmdViwCharInv', fCmdViwCharInv);

// needs icon
oPgmWpg.f1StoreTolitm('CmdViwCharInv', {
sICrlTitle: 'CView-Invisible-chars',
sICrlCmd: 'CmdViwCharInv',
onpostrender: fToggleActivestate
});

oPgmWpg.f1StoreMenitm('CmdViwCharInv', {
asICrlTxt: 'CView-Invisible-chars',
sICrlCmd: 'CmdViwCharInv',
bICrlSelectable: true,
bICrlPrepend_to_context: true,
onpostrender: fToggleActivestate,
});

pwpfil.ThmModern.js:
oMbmenView: {sICrlTitle: 'CMView',
sICrlItems: 'CmdViwVisualaid CmdViwBlocks CmdViwCharInv | CmdViwPreview'},

pwpcmd.view.PREVIW

name::
* McsEngl.pwpcmd.view.PREVIW@cptIt,
* McsEngl.pwpCmdViwPreview@cptIt,
* McsEngl.pwpcmd.preview@cptIt,
* McsEngl.pwpcmd.user.CView-preview@cptIt,
* McsEngl.pwpCView-preview@cptIt,
* McsEngl.pwpCmdViewPreview@cptIt,

pwpfil.PgnViwPreviw:
oPgmWpg.o1Cmd.fCmdStore('CmdViwPreview', function() {
oPgmWpg.o1MgrWin.fMwnOpen({
sICrlTitle: 'CView-Preview',
width: parseInt(oPgmWpg.f1CfgvalRx('plugin_preview_width', "450"), 10),
height: parseInt(oPgmWpg.f1CfgvalRx('plugin_preview_height', "300"), 10),
fsICrlHtml: '<iframe src="javascript:\'\'" frameborder="0"></iframe>',
aoICrlBtnsStatusbar: {
asICrlTxt: 'Close',
onclick: function() {
this.fICrlParentRo().fICrlParentRo().fIccpFltClose();
}
},
onpostrender: function() {
var document = this.fICrlEltRo('body').firstChild.contentWindow.document,
sHmlPreview, sHmlHead = '';

oPgmWpg.o2Util.oUCore.fUCorEachRb(oPgmWpg.o1Cnt.aCntCssurls, function(sUrlIn) {
sHmlHead += '<link type="text/css" rel="stylesheet" href="' + sUrlIn + '">';
});

var sCntBodyId = 'idCntBody';

var bodyClass = o1Cfg.sCfgCntBodyClass || '';

sHmlPreview = (
'<!DOCTYPE html>' +
'<html>' +
'<head>' +
sHmlHead +
'</head>' +
'<body id="' + sCntBodyId + '" class="clsCntBody ' + bodyClass + '">' +
oPgmWpg.o1Cnt.fCntRs() +
'</body>' +
'</html>'
);

document.open();
document.write(sHmlPreview);
document.close();
}
});
});

oPgmWpg.f1StoreTolitm('CmdViwPreview', {
sICrlTitle: 'CView-Preview',
sICrlIcn: 'IcnPreview',
sICrlCmd: 'CmdViwPreview'
});

oPgmWpg.f1StoreMenitm('CmdViwPreview', {
asICrlTxt: 'CView-Preview',
sICrlIcn: 'IcnPreview',
sICrlCmd: 'CmdViwPreview',
});

pwpfil.ThmModern.js:
oMbmenView: {sICrlTitle: 'CMView',
sICrlItems: 'CmdViwVisualaid CmdViwBlocks CmdViwCharInv | CmdViwPreview'},

pwpcmd.user.CView-visual-aid

name::
* McsEngl.pwpcmd.user.CView-visual-aid@cptIt,
* McsEngl.pwpCView-visual-aid@cptIt,
* McsEngl.pwpCmdViewVisualaid@cptIt,

_CODE.PWP:
oPgmWpg.f1MenuitmAdd('CmdViewVisualaid', {
asICrlTxt: 'CView-visual-aid',
bICrlSelectable: true,
sICrlCmd: 'CmdViewVisualaid',
onpostrender: toggleVisualAidState,
});

pwpfil.ThmModern.js:
oMbmenView: {sICrlTitle: 'CMView',
sICrlItems: 'CmdViwVisualaid CmdViwBlocks CmdViwCharInv | CmdViwPreview'},

pwpcmd.doing.FORMAT

name::
* McsEngl.pwpcmd.doing.FORMAT@cptIt,
* McsEngl.pwpCmdFmt@cptIt,
* McsEngl.pwpcmd.format@cptIt,

pwpcmdFmt'oFmt

name::
* McsEngl.pwpcmdFmt'oFmt@cptIt,
* McsEngl.pwpoFormat@cptIt,
* McsEngl.pwpoFmt@cptIt,

_DESCRIPTION:
oFmt contains information on the-format (styles, atts) of a-node.
[hmnSngo.2016-04-26]
===
A-pwpfmt is stored as an array of format-objects. oFmrStore = {aFmt1: [{oFmt1a},{oFmt1b}]}
[hmnSngo.2016-01-08]
===
A pwp-format is a-jso or a-jsa with oFormats.
[hmnSngo.2015-04-30]

_MEMBER:
* pwpoFmt.aFtClasses,  pwpoFormat.classes

* pwpoFmt.bFtCollapsed,  pwpoFormat.collapsed  boolean,
* pwpoFmt.bFtDeep,    pwpoFormat.deep    boolean,
* pwpoFmt.bFtExact,    pwpoFormat.exact    boolean,
* pwpoFmt.bFtExpand,  pwpoFormat.expand  boolean,
* pwpoFmt.bFtExpandBlock, pwpoFormat.block_expand boolean,
* pwpoFmt.bFtMixed,  pwpoFormat.mixed,
* pwpoFmt.bFtSplit,    pwpoFormat.split    boolean,
* pwpoFmt.bFtWraplinks,  pwpoFormat.wrap_links  boolean,
* pwpoFmt.bFtWrapper,  pwpoFormat.wrapper  boolean,

* pwpoFmt.onformat,    pwpoFormat.onformat  function,
* pwpoFmt.onmatch,    pwpoFormat.onmatch  function,

* pwpoFmt.oFtAtts,    pwpoFormat.attributes  object {'class': '%value'}, array,
* pwpoFmt.oFtStyles,  pwpoFormat.styles  object,

* pwpoFmt.sFtBlock,    pwpoFormat.block    string,
* pwpoFmt.sFtBlockDflt,  pwpoFormat.defaultBlock  string,
* pwpoFmt.sFtInline,    pwpoFormat.inline  string,
* pwpoFmt.sFtRemove,  pwpoFormat.remove  string,
* pwpoFmt.sFtSelector,  pwpoFormat.selector  string,
===
* pwpoFmt.list_block, pwpoFormat.list_block,
* name
* title

name::
* McsEngl.sFormat@cptIt,

_STORE:
* oPgmWpg.o1Formatter.oFmrStore
* oFormatsStore

_SPECIFIC:
address: Array[1]
aligncenter: Array[3]
alignjustify: Array[1]
alignleft: Array[2]
alignright: Array[2]
blockquote: Array[1]
bold: Array[3]
code: Array[1]
dd: Array[1]
div: Array[1]
dt: Array[1]
fontname: Array[1]
fontsize: Array[1]
fontsize_class: Array[1]
forecolor: Array[1]
h1: Array[1]
h2: Array[1]
h3: Array[1]
h4: Array[1]
h5: Array[1]
h6: Array[1]
hilitecolor: Array[1]
italic: Array[3]
link: Array[1]
p: Array[1]
pre: Array[1]
removeformat: Array[3]
samp: Array[1]
strikethrough: Array[2]
subscript: Array[1]
superscript: Array[1]
underline: Array[2]

pwpfmt.address: Array[1]
0: Object
block: "address"
deep: true
remove: "all"
split: true
__proto__: Object
length: 1
__proto__: Array[0]
aligncenter: Array[3]
alignjustify: Array[1]
alignleft: Array[2]

pwpfmt.alignright: Array[2]
0: Object
deep: false
defaultBlock: "div"
fFmrRemove: "none"
selector: "figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li"
split: undefined
styles: Object
textAlign: "right"
__proto__: Object
__proto__: Object
1: Object
collapsed: false
deep: false
fFmrRemove: "none"
selector: "img,table"
split: undefined
styles: Object
float: "right"
__proto__: Object
__proto__: Object
length: 2
__proto__: Array[0]

pwpfmt.blockquote: Array[1]
0: Object
block: "blockquote"
deep: true
remove: "all"
split: true
wrapper: 1
__proto__: Object
length: 1
__proto__: Array[0]

pwpfmt.code: Array[1]
0: Object
deep: true
inline: "code"
split: true
__proto__: Object
length: 1
__proto__: Array[0]

pwpfmt.dd: Array[1]
0: Object
block: "dd"
deep: true
remove: "all"
split: true
__proto__: Object
length: 1
__proto__: Array[0]

pwpfmt.div: Array[1]
0: Object
block: "div"
deep: true
remove: "all"
split: true
__proto__: Object
length: 1
__proto__: Array[0]

pwpfmt.dt: Array[1]
0: Object
block: "dt"
deep: true
remove: "all"
split: true
__proto__: Object
length: 1
__proto__: Array[0]

pwpfmt.fontname: Array[1]
0: Object
deep: true
inline: "span"
split: true
styles: Object
fontFamily: "%value"
__proto__: Object
__proto__: Object
length: 1
__proto__: Array[0]

pwpfmt.fontsize: Array[1]
0: Object
deep: true
inline: "span"
split: true
styles: Object
fontSize: "%value"
__proto__: Object
__proto__: Object
length: 1
__proto__: Array[0]

pwpfmt.fontsize_class: Array[1]
0: Object
attributes: Object
class: "%value"
__proto__: Object
deep: true
inline: "span"
split: true
__proto__: Object
length: 1
__proto__: Array[0]

pwpfmt.forecolor: Array[1]
0: Object
deep: true
inline: "span"
split: true
styles: Object
color: "%value"
__proto__: Object
wrap_links: false
__proto__: Object
length: 1
__proto__: Array[0]

pwpfmt.h1: Array[1]
h2: Array[1]
h3: Array[1]
h4: Array[1]
h5: Array[1]

pwpfmt.h6: Array[1]
0: Object
block: "h6"
deep: true
remove: "all"
split: true
__proto__: Object
length: 1
__proto__: Array[0]

pwpfmt.hilitecolor: Array[1]
0: Object
deep: true
inline: "span"
split: true
styles: Object
backgroundColor: "%value"
__proto__: Object
wrap_links: false
__proto__: Object
length: 1
__proto__: Array[0]

pwpfmt.italic: Array[3]
0: Object
deep: true
inline: "em"
remove: "all"
split: true
__proto__: Object
1: Object
deep: true
inline: "span"
split: true
styles: Object
fontStyle: "italic"
__proto__: Object
__proto__: Object
2: Object
deep: true
inline: "i"
remove: "all"
split: true
__proto__: Object
length: 3
__proto__: Array[0]

pwpfmt.link: Array[1]
0: Object
block_expand: true
deep: true
inline: "a"
mixed: true
onformat: (oEltIn, fmt, vars)
onmatch: ()
remove: "all"
selector: "a"
split: true
__proto__: Object
length: 1
__proto__: Array[0]

pwpfmt.p: Array[1]
0: Object
block: "p"
deep: true
remove: "all"
split: true
__proto__: Object
length: 1
__proto__: Array[0]

pwpfmt.pre: Array[1]
0: Object
block: "pre"
deep: true
remove: "all"
split: true
__proto__: Object
length: 1
__proto__: Array[0]

pwpfmt.removeformat: Array[3]
0: Object
block_expand: true
deep: true
expand: false
fFmrRemove: "none"
remove: "all"
selector: "b,strong,em,i,font,u,strike,sub,sup"
split: true
__proto__: Object
1: Object
attributes: Array[2]
deep: true
expand: false
fFmrRemove: "none"
remove: "empty"
selector: "span"
split: true
__proto__: Object
2: Object
attributes: Array[2]
deep: true
expand: false
fFmrRemove: "none"
selector: "*"
split: false
__proto__: Object
length: 3
__proto__: Array[0]

pwpfmt.samp: Array[1]
0: Object
block: "samp"
deep: true
remove: "all"
split: true
__proto__: Object
length: 1
__proto__: Array[0]

pwpfmt.strikethrough: Array[2]
0: Object
deep: true
exact: true
inline: "span"
split: true
styles: Object
textDecoration: "line-through"
__proto__: Object
__proto__: Object
1: Object
deep: true
inline: "strike"
remove: "all"
split: true
__proto__: Object
length: 2
__proto__: Array[0]

pwpfmt.subscript: Array[1]
0: Object
deep: true
inline: "sub"
split: true
__proto__: Object
length: 1
__proto__: Array[0]

pwpfmt.superscript: Array[1]
0: Object
deep: true
inline: "sup"
split: true
__proto__: Object
length: 1
__proto__: Array[0]

pwpfmt.underline: Array[2]
0: Object
deep: true
exact: true
inline: "span"
split: true
styles: Object
===
1: Object
deep: true
inline: "u"
remove: "all"
split: true

pwpaFtClasses

_DESCRIPTION:
array with the-classes of the-element.

pwpbFtCollapsed

_DESCRIPTION:
selection state. collapsed means start=end.

pwpbFtDeep

_DESCRIPTION:
* Set deep to false by default on selector formats this to avoid removing alignment on images inside paragraphs when alignment is changed on paragraphs

pwpbFtExact

_DESCRIPTION:

pwpbFtExpand

_DESCRIPTION:

pwpbFtExpandBlock

_DESCRIPTION:
* false: Stop expanding on block oElts

pwpbFtMixed

_DESCRIPTION:

pwpbFtSplit

_DESCRIPTION:

pwpbFtWraplinks

_DESCRIPTION:

pwpbFtWrapper

_DESCRIPTION:

pwponformat

_DESCRIPTION:

pwponmatch

_DESCRIPTION:

pwpoFtAtts

_DESCRIPTION:
oFtAtts: {'style':null, 'class':null}
oFtAtts: {'class': '%vrble'}

pwpoFtStyles

_DESCRIPTION:
oFtStyles: {fontWeight: 'bold'}
oFtStyles: {fontStyle: 'italic'}
oFtStyles: {textDecoration: 'underline'}
oFtStyles: {fontFamily: '%vrble'}

pwpsFtBlock

_DESCRIPTION:
default block-formats
CmdFmtP,CmdFmtH1,CmdFmtH2,CmdFmtH3,CmdFmtH4,CmdFmtH5,CmdFmtH6,CmdFmtDiv,CmdFmtAddress,CmdFmtPre,CmdFmtDt,CmdFmtDd,CmdFmtSamp,

pwpsFtBlockDflt

_DESCRIPTION:

pwpsFtInline

_DESCRIPTION:

pwpsFtRemove

_DESCRIPTION:
What to do when removing elements with the-format.
VALUES: all, none, empty,
* all: Should we compare with format attribs and styles
* none: Remove the inline child if it's empty for example <b> or <span>

pwpsFtSelector

_DESCRIPTION:

pwpcmdFmt'oStoreCmdFmt

name::
* McsEngl.pwpcmdFmt'oStoreCmdFmt@cptIt,
* McsEngl.pwpoStoreCmdFmt@cptIt,
* McsEngl.pwpoStoreFormat@cptIt,
* McsEngl.pwpo1Store.oStoreFormat@cptIt,

SPECIFIC

* pwpcmdFmt.specific,

_SPECIFIC:
* CmdFmtAddress: Array[1]
* CmdFmtAlignCenter: Array[3]
* CmdFmtAlignJustify: Array[1]
* CmdFmtAlignLeft: Array[2]
* CmdFmtAlignRight: Array[2]
* CmdFmtBlockquote: Array[1]
* CmdFmtBold: Array[3]
* CmdFmtCode: Array[1]
* CmdFmtColorBack: Array[1]
* CmdFmtColorFore: Array[1]
* CmdFmtDd: Array[1]
* CmdFmtDiv: Array[1]
* CmdFmtDt: Array[1]
* CmdFmtFontfamily: Array[1]
* CmdFmtFontsize_class: Array[1]
* CmdFmtFontsizes: Array[1]
* CmdFmtH1: Array[1]
* CmdFmtH2: Array[1]
* CmdFmtH3: Array[1]
* CmdFmtH4: Array[1]
* CmdFmtH5: Array[1]
* CmdFmtH6: Array[1]
* CmdFmtItalic: Array[3]
* CmdFmtLink: Array[1]
* CmdFmtP: Array[1]
* CmdFmtPre: Array[1]
* CmdFmtRemove: Array[3]
* CmdFmtSamp: Array[1]
* CmdFmtStrikethrough: Array[2]
* CmdFmtSubscript: Array[1]
* CmdFmtSuperscript: Array[1]
* CmdFmtUnderline: Array[2]
{2016-04-26}
===
* CmdFmtAlignCenter:Array[3]
* CmdFmtAlignJustify: Array[1]
* CmdFmtAlignLeft: Array[2]
* CmdFmtAlignRight: Array[2]
* CmdFmtBlockquote: Array[1]
* CmdFmtBold: Array[3]
* CmdFmtCode: Array[1]
* CmdFmtColorBack: Array[1]
* CmdFmtColorFore: Array[1]
* CmdFmtFontfamily: Array[1]
* CmdFmtFontsize_class: Array[1]
* CmdFmtFontsizes: Array[1]
* CmdFmtItalic: Array[3]
* CmdFmtRemove: Array[3]
* CmdFmtStrikethrough: Array[2]
* CmdFmtSubscript: Array[1]
* CmdFmtSuperscript: Array[1]
* CmdFmtUnderline: Array[2]
* address: Array[1]
* dd: Array[1]
* div: Array[1]
* dt: Array[1]
* h1: Array[1]
* h2: Array[1]
* h3: Array[1]
* h4: Array[1]
* h5: Array[1]
* h6: Array[1]
* link: Array[1]
* p: Array[1]
* pre: Array[1]
* samp: Array[1]
===
address: Array[1]
aligncenter: Array[3]
alignjustify: Array[1]
alignleft: Array[2]
alignright: Array[2]
blockquote: Array[1]
bold: Array[3]
code: Array[1]
dd: Array[1]
div: Array[1]
dt: Array[1]
fontname: Array[1]
fontsize: Array[1]
fontsize_class: Array[1]
forecolor: Array[1]
h1: Array[1]
h2: Array[1]
h3: Array[1]
h4: Array[1]
h5: Array[1]
h6: Array[1]
hilitecolor: Array[1]
italic: Array[3]
link: Array[1]
p: Array[1]
pre: Array[1]
removeformat: Array[3]
samp: Array[1]
strikethrough: Array[2]
subscript: Array[1]
superscript: Array[1]
underline: Array[2]

pwpcmdFmt.GncCOLOR

name::
* McsEngl.pwpcmdFmt.GncCOLOR@cptIt,
* McsEngl.pwpCmdFmtGncColor@cptIt,
* McsEngl.pwpcmd.FmtGncColor@cptIt,
* McsEngl.pwpcmd.Color@cptIt,
* McsEngl.pwpcmd.user.FormatColor@cptIt,
* McsEngl.pwpCmdFmtGncColor@cptIt,

pwpcmdFmt.GncFORMAT (Barmenu)

name::
* McsEngl.pwpcmdFmt.GncFORMAT (Barmenu)@cptIt,
* McsEngl.pwpcmd.user.CMFormat-(Barmenu)@cptIt,
* McsEngl.pwpcmd.format@cptIt,
* McsEngl.pwpCFormat@cptIt,
* McsEngl.pwpalgo'format@cptIt,
* McsEngl.pwpformat@cptIt,
* McsEngl.pwpoFormat@cptIt,

* McsEngl.pwpcmdFmt@cptIt,
* McsEngl.pwpfmt@cptIt,

_DESCRIPTION:
Formats are commands which have variants and applyed and removed.
[hkmn-2016-04-19]

pwpcmdFmt.GncGROUP

name::
* McsEngl.pwpcmdFmt.GncGROUP@cptIt,
* McsEngl.pwpCmdFmt.GncGroup@cptIt,
* McsEngl.pwpcmdFmt.CFmtMenu-Group@cptIt,
* McsEngl.pwpcmdFmt.group@cptIt,
* McsEngl.pwpCmdFmtGroup@cptIt,

_MEMBER:
* Menu-Align##
* Menu-Blocks##
* Menu-Headers##
* Menu-Inline##

pwpfil.PgmWpg.js:
oPgmWpg.f1StoreTolitm('CmdFmt.GncGroup', {
sIType: 'fICHBMenubtnRo',
asICrlTxt: 'CFmtMenu-Group',
aoICrlMen: oICrlMenuFmtGroup
});

oPgmWpg.f1StoreMenitm('CmdFmt.GncGroup', {
asICrlTxt: 'CFmtMenu-Group',
aoICrlMen: oICrlMenuFmtGroup
});

pwpcmdFmt.GncALIGN

name::
* McsEngl.pwpcmdFmt.GncALIGN@cptIt,
* McsEngl.pwpcmdFmt.CFmtMenu-Alignment@cptIt,
* McsEngl.pwpcmdFmt.Alignment@cptIt,
* McsEngl.pwpCmdFmtGroup@cptIt,

{sICrlTitle: 'CFmtMenu-Alignment', aICrlItems: [
{sICrlTitle: 'CFmt-Align-Left', sICrlIcn: 'IcnFmtAlignLeft', sICrlCmdFmt: 'CmdFmtAlignLeft'},
{sICrlTitle: 'CFmt-Align-Center', sICrlIcn: 'IcnFmtAlignCenter', sICrlCmdFmt: 'CmdFmtAlignCenter'},
{sICrlTitle: 'CFmt-Align-Right', sICrlIcn: 'IcnFmtAlignRight', sICrlCmdFmt: 'CmdFmtAlignRight'},
{sICrlTitle: 'CFmt-Align-Justify', sICrlIcn: 'IcnFmtAlignJustify', sICrlCmdFmt: 'CmdFmtAlignJustify'}
]}

pwpcmdFmt.GncBLOCK

name::
* McsEngl.pwpcmdFmt.GncBLOCK@cptIt,
* McsEngl.pwpcmdFmt.CFmtMenu-BLOCK@cptIt,
* McsEngl.pwpcmdFmt.group@cptIt,
* McsEngl.pwpCmdFmtGroup@cptIt,

_MEMBER:
* CmdFmtBlockquote##
* CmdFmtDiv##
* CmdFmtParagraph##
* CmdFmtPre##

pwpcmdFmt.GncHEADER

name::
* McsEngl.pwpcmdFmt.GncHEADER@cptIt,
* McsEngl.pwpcmdFmt.CFmtMenu-HEADERS@cptIt,
* McsEngl.pwpcmdFmt.group@cptIt,
* McsEngl.pwpCmdFmtGroup@cptIt,

pwpfil.PgmWpg.js:
{sICrlTitle: 'CFmtMenu-Headers', aICrlItems: [
{sICrlTitle: 'CFmt-Header-1', sICrlCmdFmt: 'CmdFmtH1'},
{sICrlTitle: 'CFmt-Header-2', sICrlCmdFmt: 'CmdFmtH2'},
{sICrlTitle: 'CFmt-Header-3', sICrlCmdFmt: 'CmdFmtH3'},
{sICrlTitle: 'CFmt-Header-4', sICrlCmdFmt: 'CmdFmtH4'},
{sICrlTitle: 'CFmt-Header-5', sICrlCmdFmt: 'CmdFmtH5'},
{sICrlTitle: 'CFmt-Header-6', sICrlCmdFmt: 'CmdFmtH6'},
//{sICrlTitle: 'CFmt-Header-7', sICrlCmdFmt: 'CmdFmtH7'} nnnMenu
]},

pwpcmdFmt.GncINLINE

name::
* McsEngl.pwpcmdFmt.GncINLINE@cptIt,
* McsEngl.pwpCmdFmt.GncInline@cptIt,
* McsEngl.pwpcmdFmt.CFmtMenu-INLINE@cptIt,
* McsEngl.pwpcmdFmt.inline@cptIt,
* McsEngl.pwpCmdFmt.GncInline@cptIt,

pwpcmdFmt.GncMISC

name::
* McsEngl.pwpcmdFmt.GncMISC@cptIt,
* McsEngl.pwpCmdFmt.GncMisc@cptIt,
* McsEngl.pwpcmdFmt.CFmtMenu-Misc@cptIt,
* McsEngl.pwpcmdFmt.misc@cptIt,
* McsEngl.pwpCmdFmt.GncMisc@cptIt,

pwpfil.PgmWpg.js:
oPgmWpg.f1StoreMenitm('CmdFmt.GncMisc', {
asICrlTxt: 'CFmtMenu-Misc',
aoICrlMen: [
{asICrlTxt: 'CFmt-Indent-increase', sICrlIcn: 'IcnIndent', onclick: function(){oPgmWpg.o1Cmd.fCmdCallRb('CmdFmtNtvIndent');}},
{asICrlTxt: 'CFmt-Indent-decrease', sICrlIcn: 'IcnOutdent', onclick: function(){oPgmWpg.o1Cmd.fCmdCallRb('CmdFmtNtvOutdent');}},
{asICrlTxt: 'CFmtMen-List', aoICrlMen: [
{
asICrlTxt: 'CFmtMenu-List-Bullet',
sICrlIcn: 'IcnListBullet',
aoICrlMen: oPgmWpg.o1Store.oStorePlugin.pgnListAdv.aMenuitemsUl,
onselect: function(oEvtIn){oPgmWpg.o1Store.oStorePlugin.pgnListAdv.fApplyListformat('UL', oEvtIn.oICrl.oICrlCfg.oICrlData);}
},
{
asICrlTxt: 'CFmtMenu-List-Numbered',
sICrlIcn: 'IcnListNum',
aoICrlMen: oPgmWpg.o1Store.oStorePlugin.pgnListAdv.aMenuitemsOl,
onselect: function(oEvtIn){oPgmWpg.o1Store.oStorePlugin.pgnListAdv.fApplyListformat('OL', oEvtIn.oICrl.oICrlCfg.oICrlData);}
},
]}
]
});

pwpcmdFmt.AlignLEFT

name::
* McsEngl.pwpcmdFmt.AlignLEFT@cptIt,
* McsEngl.pwpCmdFmtAlignLeft@cptIt,
* McsEngl.pwpcmdFmt.CFmt-Align-Left@cptIt,
* McsEngl.pwpcmdFmt.AlignLeft@cptIt,
* McsEngl.pwpCmdFmtAlignLeft@cptIt,

_DESCRIPTION:
<p style="text-align: left;">Content here from CntInit...</p>

_GENERIC:
* GncAlign##

pwpfil.PgmWpg.js:
// Override justify commands to use the text formatter engine
'CmdFmtAlignLeft,CmdFmtAlignCenter,CmdFmtAlignRight,CmdFmtAlignJustify': function(sCmdIn) {
var sAlign = sCmdIn.substring(11);

// Remove all other alignments first
fUCorEachRb('Left,Center,Right,Justify'.split(','), function(sNamIn) {
if (sAlign != sNamIn) {
o1CmdFormatter.fCFmrRemove('CmdFmtAlign' + sNamIn);
}
});

fFormatToggle('CmdFmtAlign' + sAlign);
oPgmWpg.o1Cmd.fCmdCallRb('CmdFmtRepaint');
},
===
_oFmts:
CmdFmtAlignLeft: [
{sFtSelector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li', oFtStyles: {textAlign: 'left'}, sFtBlockDflt: 'div'},
{sFtSelector: 'img,table', bFtCollapsed: false, oFtStyles: {'float': 'left'}}
],
===
_aICrlItems:
{sICrlTitle: 'CFmt-Align-Left', sICrlIcn: 'IcnFmtAlignLeft', sICrlCmdFmt: 'CmdFmtAlignLeft'},

pwpfil.index.html:
sCfgToolbar1: 'CmdFilSave CmdEdtUndo CmdEdtRedo | CmdFmt.GncGroup CmdFmtFontfamily CmdFmtFontsizes | CmdFmtBold CmdFmtItalic CmdFmtUnderline | CmdFmtAlignLeft CmdFmtAlignCenter CmdFmtAlignRight CmdFmtAlignJustify | CmdFmt.GncListUL CmdFmt.GncListOL | eqneditor CmdFmt.GncColorFore CmdFmt.GncColorBack | CmdFmtNtvIndent CmdFmtNtvOutdent | CmdIstMenTime CmdIstLink CmdIstLinkRmv CmdIstImage CmdIstMenEmoticons | CmdViwPreview CmdIstMenTable',

pwpcmdFmt.AlignCENTER

name::
* McsEngl.pwpcmdFmt.AlignCENTER@cptIt,
* McsEngl.pwpCmdFmtAlignCenter@cptIt,
* McsEngl.pwpcmdFmt.CFmt-Align-Center@cptIt,
* McsEngl.pwpcmdFmt.AlignCenter@cptIt,
* McsEngl.pwpCmdFmtAlignCenter@cptIt,

pwpcmdFmt.AlignRIGHT

name::
* McsEngl.pwpcmdFmt.AlignRIGHT@cptIt,
* McsEngl.pwpCmdFmtAlignRight@cptIt,
* McsEngl.pwpcmdFmt.CFmt-Align-Right@cptIt,
* McsEngl.pwpcmdFmt.AlignRight@cptIt,
* McsEngl.pwpCmdFmtAlignRight@cptIt,

pwpcmdFmt.AlignJUSTIFY

name::
* McsEngl.pwpcmdFmt.AlignJUSTIFY@cptIt,
* McsEngl.pwpCmdFmtAlignJustify@cptIt,
* McsEngl.pwpcmdFmt.CFmt-Align-Justify@cptIt,
* McsEngl.pwpcmdFmt.AlignJustify@cptIt,
* McsEngl.pwpCmdFmtAlignJustify@cptIt,

pwpfile.index.html:
sCfgToolbar1:

pwpcmdFmt.BLOCKQUOTE

name::
* McsEngl.pwpcmdFmt.BLOCKQUOTE@cptIt,
* McsEngl.pwpCmdFmtBlockquote@cptIt,
* McsEngl.pwpcmd.Blockquote@cptIt,
* McsEngl.pwpcmdFmt.CFmt-Blockquote@cptIt,
* McsEngl.pwpCmdFmtBlockquote@cptIt,

_DESCRIPTION:
1) Sets <blockquote><p>Content here from CntInit...</p></blockquote>
2) Shortcut: Ctrl+M+Q

_GENERIC:
* CmdGncFmtBlock#linkidPwpCmdFmtGncBlock#ql:idPwpCmdFmtGncBlock##

pwpcmdFmt.BOLD

name::
* McsEngl.pwpcmdFmt.BOLD@cptIt,
* McsEngl.pwpCmdFmtBold@cptIt,
* McsEngl.pwpcmdFmt.CFmt-Bold@cptIt,
* McsEngl.pwpcmd.bold@cptIt,
* McsEngl.pwpCFormat-Bold@cptIt,
* McsEngl.pwpCmdFmtBold@cptIt,

_DESCRIPTION:
Sets <strong>Content</strong>

_GENERIC:
* CmdFmtGncInline#linkidPwpCmdFmtGncInline#ql:idPwpCmdFmtGncInline##

pwpThmModern.js:
oMbmenFormat: {sICrlTitle: 'CMFormat',
sICrlItems: 'CmdFmtBold CmdFmtItalic CmdFmtUnderline CmdFmtStrikethrough CmdFmtSuperscript CmdFmtSubscript '
+ '| CmdFmtRemove | CmdFmt.GncGroup | CmdFmt.GncMisc'},
===
var sToolbarDflt = "CmdEdtUndo CmdEdtRedo | CmdFmt.GncGroup | CmdFmtBold CmdFmtItalic CmdFmtUnderline | CmdFmtAlignLeft CmdFmtAlignCenter CmdFmtAlignRight CmdFmtAlignJustify | " +
"CmdFmt.GncListUL CmdFmt.GncListOL CmdFmtNtvOutdent CmdFmtNtvIndent | CmdIstLink CmdIstImage";

pwpfil.PgmWpg.js:
'CmdFmtBold,CmdFmtItalic,CmdFmtUnderline,CmdFmtStrikethrough,CmdFmtSuperscript,CmdFmtSubscript': function(sCmdIn) {
fFormatToggle(sCmdIn);
},
===
CmdFmtBold: [
{sFtInline: 'strong', sFtRemove: 'all'},
{sFtInline: 'span', oFtStyles: {fontWeight: 'bold'}},
{sFtInline: 'b', sFtRemove: 'all'}
],
===
oPgmWpg.o1Shortcut.fSctStore('Ctrl+B', 'shortcut.bold', 'CmdFmtBold');
===
{sICrlTitle: 'CFmtMenu-Inline', aICrlItems: [
{sICrlTitle: 'CFmt-Bold', sICrlIcn: 'IcnFmtBold', sICrlCmdFmt: 'CmdFmtBold'},
===
CmdFmtBold: 'CFmt-Bold',
CmdFmtItalic: 'CFmt-Italic',
CmdFmtUnderline: 'CFmt-Underline',
CmdFmtStrikethrough: 'CFmt-Strikethrough',
CmdFmtSubscript: 'CFmt-Subscript',
CmdFmtSuperscript: 'CFmt-Superscript'
}, function(sValIn, sFmtnamIn) {
oPgmWpg.f1StoreTolitm(sFmtnamIn, {
===
CmdFmtBold: ['CFmt-Bold', 'CmdFmtBold', 'IcnFmtBold', 'Ctrl+B'],
CmdFmtItalic: ['CFmt-Italic', 'CmdFmtItalic', 'IcnFmtItalic', 'Ctrl+I'],
CmdFmtUnderline: ['CFmt-Underline', 'CmdFmtUnderline', 'IcnFmtUnderline'],
CmdFmtStrikethrough: ['CFmt-Strikethrough', 'CmdFmtStrikethrough', 'IcnFmtStrikethrough'],
CmdFmtSubscript: ['CFmt-Subscript', 'CmdFmtSubscript', 'IcnFmtSubscript'],
CmdFmtSuperscript: ['CFmt-Superscript', 'CmdFmtSuperscript', 'IcnFmtSuperscript'],
CmdFmtRemove: ['CFmt-Remove', 'CmdFmtRemove', 'IcnFmtRemove']
}, function(aValIn, sCmdnamIn) {
oPgmWpg.f1StoreMenitm(sCmdnamIn, {

pwpcmdFmt.DIV

name::
* McsEngl.pwpcmdFmt.DIV@cptIt,
* McsEngl.pwpCmdFmtDiv@cptIt,
* McsEngl.pwpcmd.DIV@cptIt,
* McsEngl.pwpcmdFmt.CFmt-Div@cptIt,
* McsEngl.pwpCmdFmtDiv@cptIt,

_DESCRIPTION:
1) Sets <div>text<div>
2) Shortcut: Ctrl+M+D

_GENERIC:
* CmdGncFmtBlock#linkidPwpCmdFmtGncBlock#ql:idPwpCmdFmtGncBlock##

pwpcmdFmt.INDENT.DECREASE

name::
* McsEngl.pwpcmdFmt.INDENT.DECREASE@cptIt,
* McsEngl.pwpCmdFmtNtvOutdent@cptIt,
* McsEngl.pwpcmd.IndentDecrease@cptIt,
* McsEngl.pwpcmdFmt.CFormat-Indent-decrease@cptIt,
* McsEngl.pwpfmt.Indent-decrease@cptIt,
* McsEngl.pwpCmdFmtNtvOutdent@cptIt,

pwpfil.PgmWpg.js:
'CmdFmtNtvIndent,CmdFmtNtvOutdent': function(sCmdIn) {
var nCfgIndentation, aIndentUnit, nIndent, sIndent;

// Setup indent level
aIndentUnit = /[a-z%]+$/i.exec(o1Cfg.sCfgIndentation); // '30px' => ['px']
nCfgIndentation = parseInt(o1Cfg.sCfgIndentation, 10); // 30

if (!oPgmWpg.o1Cmd.fCmdCallRb('CmdFmtListULRb') && !oPgmWpg.o1Cmd.fCmdCallRb('CmdFmtListOLRb')) {
// If forced_root_blocks is set to false we don't have a block to indent so lets create a oEltDiv
if (!o1Cfg.sCfgForced_root_block && !oCntDMngr.fDMgrNodeAncestorRlo(o1DSelection.fDSlnEltRo(), oCntDMngr.fDMgrEltBlockRb)) {
o1CmdFormatter.fCFmrApply('div');
}

fUCorEachRb(o1DSelection.fDSlnBlocksSelectedRa(), function(oEltIn) {
var sStylenamIndent;

if (oEltIn.nodeName != "LI") {
sStylenamIndent = oCntDMngr.fDMgrStyleRs(oEltIn, 'direction', true) == 'rtl' ? 'paddingRight' : 'paddingLeft';

if (sCmdIn == 'CmdFmtNtvOutdent') {
nIndent = Math.max(0, parseInt(oEltIn.style[sStylenamIndent] || 0, 10) - nCfgIndentation);
oCntDMngr.fDMgrStyleSet(oEltIn, sStylenamIndent, nIndent ? nIndent + aIndentUnit[0] : '');
} else {
sIndent = (parseInt(oEltIn.style[sStylenamIndent] || 0, 10) + nCfgIndentation) + aIndentUnit[0];
oCntDMngr.fDMgrStyleSet(oEltIn, sStylenamIndent, sIndent);
}
}
});
} else {
fCmdNtvCntCallRb(sCmdIn.substring(9));
}
},
===
oPgmWpg.f1StoreMenitm('CmdFmt.GncMisc', {
asICrlTxt: 'CFmtMenu-Misc',
aoICrlMen: [
{asICrlTxt: 'CFmt-Indent-increase', sICrlIcn: 'IcnIndent', onclick: function(){oPgmWpg.o1Cmd.fCmdCallRb('CmdFmtNtvIndent');}},
{asICrlTxt: 'CFmt-Indent-decrease', sICrlIcn: 'IcnOutdent', onclick: function(){oPgmWpg.o1Cmd.fCmdCallRb('CmdFmtNtvOutdent');}},
{asICrlTxt: 'CFmtMen-List', aoICrlMen: [

pwpcmdFmt.INDENT.INCREASE

name::
* McsEngl.pwpcmdFmt.INDENT.INCREASE@cptIt,
* McsEngl.pwpCmdFmtNtvIndent@cptIt,
* McsEngl.pwpcmd.IndentIncrease@cptIt,
* McsEngl.pwpcmdFmt.CFormat-Indent-increase@cptIt,
* McsEngl.pwpfmt.Indent-increase@cptIt,
* McsEngl.pwpCmdFmtNtvIndent@cptIt,

pwpfil.PgmWpg.js:
oPgmWpg.f1StoreMenitm('CmdFmt.GncMisc', {
asICrlTxt: 'CFmtMenu-Misc',
aoICrlMen: [
{asICrlTxt: 'CFmt-Indent-increase', sICrlIcn: 'IcnIndent', onclick: function(){oPgmWpg.o1Cmd.fCmdCallRb('CmdFmtNtvIndent');}},
{asICrlTxt: 'CFmt-Indent-decrease', sICrlIcn: 'IcnOutdent', onclick: function(){oPgmWpg.o1Cmd.fCmdCallRb('CmdFmtNtvOutdent');}},
{asICrlTxt: 'CFmtMen-List', aoICrlMen: [

pwpcmdFmt.ITALIC

name::
* McsEngl.pwpcmdFmt.ITALIC@cptIt,
* McsEngl.pwpCmdFmtItalic@cptIt,
* McsEngl.pwpcmdFmt.CFmt-Italic@cptIt,
* McsEngl.pwpcmd.Italic@cptIt,
* McsEngl.pwpCFormat-Italic@cptIt,
* McsEngl.pwpCmdFmtItalic@cptIt,

_DESCRIPTION:
1) Sets <em>from</em>
2) Shortcut: Ctrl+M+I

_GENERIC:
* CmdFmtGncInline#linkidPwpCmdFmtGncInline#ql:idPwpCmdFmtGncInline##

pwpfil.PgmWpg.js:
// Override commands to use the-text-formatter-engine
'CmdFmtBold,CmdFmtItalic,CmdFmtUnderline,CmdFmtStrike,CmdFmtSup,CmdFmtSub': function(sCmdIn) {
fFormatToggle(sCmdIn);
},

pwpcmdFmt.PARAGRAPH

name::
* McsEngl.pwpcmdFmt.PARAGRAPH@cptIt,
* McsEngl.pwpCmdFmtP@cptIt,
* McsEngl.pwpcmd.P@cptIt,
* McsEngl.pwpcmdFmt.CFmt-Paragraph@cptIt,
* McsEngl.pwpCmdFmtP@cptIt,

_DESCRIPTION:
Sets <p>text</p>

_GENERIC:
* CmdGncFmtBlock#linkidPwpCmdFmtGncBlock#ql:idPwpCmdFmtGncBlock##

pwpfil.PgmWpg.js:
{sICrlTitle: 'CFmtMenu-Blocks', aICrlItems: [
{sICrlTitle: 'CFmt-Paragraph', sICrlCmdFmt: 'CmdFmtP', sICrlSct: 'Ctrl+M+P'},
{sICrlTitle: 'CFmt-Blockquote', sICrlCmdFmt: 'CmdFmtBlockquote', sICrlSct: 'Ctrl+M+Q'},
{sICrlTitle: 'CFmt-Div', sICrlCmdFmt: 'CmdFmtDiv', sICrlSct: 'Ctrl+M+D'},
{sICrlTitle: 'CFmt-Pre', sICrlCmdFmt: 'CmdFmtPre', sICrlSct: 'Ctrl+M+P'}
]},
===
// Register default block formats
fUCorEachRb('CmdFmtP,CmdFmtH1,CmdFmtH2,CmdFmtH3,CmdFmtH4,CmdFmtH5,CmdFmtH6,CmdFmtDiv,CmdFmtAddress,CmdFmtPre,CmdFmtDt,CmdFmtDd,CmdFmtSamp'.split(','), function(sFmtIn) {
fCFmrStore(sFmtIn, {sFtBlock: sFmtIn.substring(6).toLowerCase(), sFtRemove: 'all'});
});
===
oPgmWpg.o1Shortcut.fSctStore('Ctrl+M+P', 'shortcut.p', ['CmdFmtBlock', false, 'CmdFmtP']);

pwpcmdFmt.PRE

name::
* McsEngl.pwpcmdFmt.PRE@cptIt,
* McsEngl.pwpCmdFmtPre@cptIt,
* McsEngl.pwpcmd.Pre@cptIt,
* McsEngl.pwpCmdFmtPre@cptIt,

_DESCRIPTION:
Sets <pre>Content here from CntInit...</pre>
Identifies text that has already been formatted (preformatted) by some other system and must be displayed as is.

_GENERIC:
* CmdGncFmtBlock#linkidPwpCmdFmtGncBlock#ql:idPwpCmdFmtGncBlock##

pwpfil.PgmWpg.js: fUCorEachRb('CmdFmtP,CmdFmtH1,CmdFmtH2,CmdFmtH3,CmdFmtH4,CmdFmtH5,CmdFmtH6,CmdFmtDiv,CmdFmtAddress,CmdFmtPre,CmdFmtDt,CmdFmtDd,CmdFmtSamp'.split(','), function(sFmtIn) {
fCFmrStore(sFmtIn, {sFtBlock: sFmtIn.substring(6).toLowerCase(), sFtRemove: 'all'});
});
===
{sICrlTitle: 'CFmt-Pre', sICrlCmdFmt: 'CmdFmtPre', sICrlSct: 'Ctrl+M+P'}

pwpcmdFmt.REMOVE

name::
* McsEngl.pwpcmdFmt.REMOVE@cptIt,
* McsEngl.pwpCmdFmtRemove@cptIt,
* McsEngl.pwpcmd.FmtRemove@cptIt,
* McsEngl.pwpCmdFmtRemove@cptIt,

pwpfil.PgmWpg.js:
CmdFmtRemove: function(sCmdIn) {
o1CmdFormatter.fCFmrRemove(sCmdIn);
},
===
// format-object
CmdFmtRemove: [
{
sFtSelector: 'b,strong,em,i,font,u,strike,sub,sup',
sFtRemove: 'all',
bFtSplit: true,
bFtExpand: false,
bFtExpandBlock: true,
bFtDeep: true
},
{sFtSelector: 'span', oFtAtts: {'style':null, 'class':null}, sFtRemove: 'empty', bFtSplit: true, bFtExpand: false, bFtDeep: true},
{sFtSelector: '*', oFtAtts: {'style':null, 'class':null}, bFtSplit: false, bFtExpand: false, bFtDeep: true}
]
===
CmdFmtRemove: ['CFmt-Remove', 'CmdFmtRemove', 'IcnFmtRemove', 'Ctrl+M+R']
}, function(aValIn, sCmdnamIn) {
oPgmWpg.f1StoreMenitm(sCmdnamIn, {
asICrlTxt: aValIn[0],
sICrlIcn: aValIn[2],
sICrlSct: aValIn[3],
sICrlCmd: aValIn[1]
});
===
oPgmWpg.o1Shortcut.fSctStore('Ctrl+M+R', 'shortcut.FmtRemove', 'CmdFmtRemove');

pwpcmdFmt.STRIKETHROUGH

name::
* McsEngl.pwpcmdFmt.STRIKETHROUGH@cptIt,
* McsEngl.pwpCmdFmtStrike@cptIt,
* McsEngl.pwpcmdFmt.CFmt-Strikethrough@cptIt,
* McsEngl.pwpcmd.Strikethrough@cptIt,
* McsEngl.pwpCFormat-Strikethrough@cptIt,
* McsEngl.pwpCmdFmtStrike@cptIt,

_DESCRIPTION:
Sets <span style="text-decoration: line-through;">from</span>

_GENERIC:
* CmdFmtGncInline#linkidPwpCmdFmtGncInline#ql:idPwpCmdFmtGncInline##

pwpfil.PgmWpg.js:
// object
CmdFmtStrikethrough: [
{sFtInline: 'span', oFtStyles: {textDecoration: 'line-through'}, bFtExact: true},
{sFtInline: 'strike', sFtRemove: 'all'}
],

pwpcmdFmt.SUBSCRIPT

name::
* McsEngl.pwpcmdFmt.SUBSCRIPT@cptIt,
* McsEngl.pwpCmdFmtSubscript@cptIt,
* McsEngl.pwpcmdFmt.CFmt-Subscript@cptIt,
* McsEngl.pwpcmd.Subscript@cptIt,
* McsEngl.pwpCFormat-Subscript@cptIt,
* McsEngl.pwpCmdFmtSubscript@cptIt,

_DESCRIPTION:
Sets <sub>here</sub>

_GENERIC:
* CmdFmtGncInline#linkidPwpCmdFmtGncInline#ql:idPwpCmdFmtGncInline##

pwpfil.ThmModern.js:
oMbmenFormat: {sICrlTitle: 'CMForMat',
sICrlItems: 'CmdFmtBold CmdFmtItalic CmdFmtUnderline CmdFmtStrikethrough CmdFmtSup CmdFmtSub ' +
'| CmdFmtRemove | CmdFmt.GncGroup | CmdFmt.GncMisc'},

pwpfil.PgmWpg.js:
// Override commands to use the-text-formatter-engine
'CmdFmtBold,CmdFmtItalic,CmdFmtUnderline,CmdFmtStrikethrough,CmdFmtSup,CmdFmtSub': function(sCmdIn) {
fFormatToggle(sCmdIn);
},
===
CmdFmtSub: {sFtInline: 'sub'},
===
oPgmWpg.o1Shortcut.fSctStore('Ctrl+M+S+D', 'shortcut.subscript', 'CmdFmtSub');
===
{sICrlTitle: 'CFmtMenu-Inline', aICrlItems: [
{sICrlTitle: 'CFmt-Bold', sICrlIcn: 'IcnFmtBold', sICrlCmdFmt: 'CmdFmtBold', sICrlSct: 'Ctrl+M+B'},
{sICrlTitle: 'CFmt-Italic', sICrlIcn: 'IcnFmtItalic', sICrlCmdFmt: 'CmdFmtItalic', sICrlSct: 'Ctrl+M+I'},
{sICrlTitle: 'CFmt-Underline', sICrlIcn: 'IcnFmtUnderline', sICrlCmdFmt: 'CmdFmtUnderline', sICrlSct: 'Ctrl+M+U'},
{sICrlTitle: 'CFmt-Strikethrough', sICrlIcn: 'IcnFmtStrikethrough', sICrlCmdFmt: 'CmdFmtStrikethrough', sICrlSct: 'Ctrl+M+K'},
{sICrlTitle: 'CFmt-Superscript', sICrlIcn: 'IcnFmtSuperscript', sICrlCmdFmt: 'CmdFmtSup', sICrlSct: 'Ctrl+M+S+A'},
{sICrlTitle: 'CFmt-Subscript', sICrlIcn: 'IcnFmtSubscript', sICrlCmdFmt: 'CmdFmtSub', sICrlSct: 'Ctrl+M+S+D'},
{sICrlTitle: 'CFmt-Code', sICrlIcn: 'IcnCode', sICrlCmdFmt: 'CmdFmtCode', sICrlSct: 'Ctrl+M+C'}
]},
===
CmdFmtSub: 'CFmt-Subscript',
CmdFmtSup: 'CFmt-Superscript'
}, function(sValIn, sFmtnamIn) {
oPgmWpg.f1StoreTolitm(sFmtnamIn, {
sICrlTooltip: sValIn,
sICrlIcn: 'Icn' + sFmtnamIn.substring(3),
onpostrender: function() {
var oICrlThis = this;

oPgmWpg.o1Evt.fEvtStoreEvtCmd('EvtPwpInit', function() {
oPgmWpg.o1CmdFormatter.fCFmrFormatChanged(sFmtnamIn, function(state) {
oICrlThis.fICrlActiveRbo(state);
});
});
},
onclick: function() {
oPgmWpg.o1Cmd.fCmdCallRb('CmdFmtToggle', false, sFmtnamIn);
}
});
});
===
CmdFmtSub: ['CFmt-Subscript', 'CmdFmtSub', 'IcnFmtSubscript', 'Ctrl+M+S+D'],
CmdFmtSup: ['CFmt-Superscript', 'CmdFmtSup', 'IcnFmtSuperscript', 'Ctrl+M+S+A'],
CmdFmtRemove: ['CFmt-Remove', 'CmdFmtRemove', 'IcnFmtRemove', 'Ctrl+M+R']
}, function(aValIn, sCmdnamIn) {
oPgmWpg.f1StoreMenitm(sCmdnamIn, {
asICrlTxt: aValIn[0],
sICrlIcn: aValIn[2],
sICrlSct: aValIn[3],
sICrlCmd: aValIn[1]
});
});

pwpcmdFmt.SUPERSCRIPT

name::
* McsEngl.pwpcmdFmt.SUPERSCRIPT@cptIt,
* McsEngl.pwpCmdFmtSuperscript@cptIt,
* McsEngl.pwpcmdFmt.CFmt-Superscript@cptIt,
* McsEngl.pwpcmd.Superscript@cptIt,
* McsEngl.pwpCFormat-Superscript@cptIt,
* McsEngl.pwpCmdFmtSuperscript@cptIt,

_DESCRIPTION:
Sets <sup>here</sup>

_GENERIC:
* CmdFmtGncInline#linkidPwpCmdFmtGncInline#ql:idPwpCmdFmtGncInline##

pwpcmdFmt.UNDERLINE

name::
* McsEngl.pwpcmdFmt.UNDERLINE@cptIt,
* McsEngl.pwpCmdFmtUnderline@cptIt,
* McsEngl.pwpcmdFmt.CFmt-Underline@cptIt,
* McsEngl.pwpcmd.Underline@cptIt,
* McsEngl.pwpCFormat-Underline@cptIt,
* McsEngl.pwpCmdFmtUnderline@cptIt,

_DESCRIPTION:
Sets <span style="text-decoration: underline;">from </span>

_GENERIC:
* CmdFmtGncInline#linkidPwpCmdFmtGncInline#ql:idPwpCmdFmtGncInline##

pwpfil.PgmWpg.js:
// Override commands to use the-text-formatter-engine
'CmdFmtBold,CmdFmtItalic,CmdFmtUnderline,CmdFmtStrike,CmdFmtSup,CmdFmtSub': function(sCmdIn) {
fFormatToggle(sCmdIn);
},
===
CmdFmtUnderline: [
{sFtInline: 'span', oFtStyles: {textDecoration: 'underline'}, bFtExact: true},
{sFtInline: 'u', sFtRemove: 'all'}
],

pwpcmd.doing.HELP

name::
* McsEngl.pwpcmd.doing.HELP@cptIt,
* McsEngl.pwpCmdHlp@cptIt,
* McsEngl.pwpcmd.help@cptIt,

pwpcmd.doing.MISC

name::
* McsEngl.pwpcmd.doing.MISC@cptIt,
* McsEngl.pwpCmdMsc@cptIt,
* McsEngl.pwpcmd.misc@cptIt,

pwpcmd.USER

name::
* McsEngl.pwpcmd.USER@cptIt,
* McsEngl.pwpcmd.programerNo@cptIt,

_DESCRIPTION:
A-command a-user can use from menubar, toolbar, shortcut or from an-event.
[hmnSngo.2016-02-01]

pwpcmd.user.SPECIFIC-DIVISION.call

name::
* McsEngl.pwpcmd.user.SPECIFIC-DIVISION.call@cptIt,

_SPECIFIC:
* menu-cmd#ql:pwpcmd.menu#
* tool-cmd#ql:pwpcmd.tool#
* event-cmd#ql:pwpcmd.event#
* keyboard-cmd#linkL#

pwpcmd.user.SPECIFIC-DIVISION.doing

name::
* McsEngl.pwpcmd.user.SPECIFIC-DIVISION.doing@cptIt,

_SPECIFIC:
* edit-cmd
* file-cmd
* format-cmd
* help-cmd
* insert-cmd
* table-cmd
* view-cmd

pwpcmd.user.call.BARMENU-CLICK

name::
* McsEngl.pwpcmd.user.call.BARMENU-CLICK@cptIt,
* McsEngl.pwpCmdBarMenu@cptIt,
* McsEngl.pwpcmd.menu@cptIt,
* McsEngl.pwpcmd.menuitem@cptIt,

* McsEngl.pwpcmdMen@cptIt,

_DESCRIPTION:
A-command on menubar.

pwpcmdMen'CREATING

name::
* McsEngl.pwpcmdMen'CREATING@cptIt,

_CREATING:
1) creates a-cmd-function:
- in a-plugin
- inside main code.
2) Stores the-oICrlCfg with f1MenuitmStore
===
1) oPgmWpg.o1Cmd.fCmdStoreExc('CmdFilPrint', function() {
oPgmWpg.o1Cnt.fCntWinRo().print();
});
2) oPgmWpg.o1Shortcut.fSctStore('Ctrl+P', 'shortcut.CmdFilPrint', 'CmdFilPrint');
3) oPgmWpg.f1MenuitmAdd('CmdFilPrint', {
asICrlTxt: 'CFile-Print',
sICrlCmd: 'CmdFilPrint',
sICrlIcn: 'IcnPrint',
sICrlSct: 'Ctrl+P',
sICrlMenbaritm: 'oMenbaritmFile'
});
4) oPgmWpg.f1ToolitmAdd('CmdFilPrint', {
sICrlTitle: 'CFile-Print',
sICrlCmd: 'CmdFilPrint'
});

===
// with 'onclick' only
oPgmWpg.f1MenitmStore('CmdIstVideo', {
sICrlIcn: 'IcnMedia',
asICrlTxt: 'CInsert-Video',
sICrlMnbitm: 'oMnbitmInsert',
bICrlPrepend_to_context: true,
onclick: fEvtClickCmdIstVideo,
});

pwpcmdMen'f1StoreMenitm

name::
* McsEngl.pwpcmdMen'f1StoreMenitm@cptIt,
* McsEngl.pwpf1StoreMenitm@cptIt,
=== _OLD:
* McsEngl.pwpf1MenitmStore@old,
* McsEngl.pwpf1MenuitmAdd@old,
* McsEngl.f1MenuitmAdd@old,

_DESCRIPTION:
Stores the-cfg-object of a-menu-cmd. Then the-theme-obt creates the-ICrl.
[hmnSngo.2016-04-12]

_CODE.PWP:
oPgmWpg.f1MenuitmAdd('CmdCode', {
asICrlTxt:
aoICrlMenu: //menu contained in menuitem
bICrlSelectable: true, //CmdVisualaid
sICrlIcn: 'IcnRedo',
sICrlCmd: 'redo',
sICrlMnbitm: 'oMenuTools',  //the-menubar-command that contains this-cmd.
sICrlSeparator == 'after'|'before'
onclick:
onpostrender: toggleRedoState,
});

pwpcmdMen'oMenubarDflt

name::
* McsEngl.pwpcmdMen'oMenubarDflt@cptIt,
* McsEngl.pwpoMenubarDflt@cptIt,

_DESCRIPTION:
Sets the-order of menuitems.

pwpcmdMen'oStoreMenuitm

name::
* McsEngl.pwpcmdMen'oStoreMenuitm@cptIt,
* McsEngl.pwpoStoreMenuitm@cptIt,

_DESCRIPTION:
Stores the-cfg-obt of f1MenuitmStore.

pwpcmdMen'oICrlCfg

name::
* McsEngl.pwpcmdMen'oICrlCfg@cptIt,

_MEMBER:
* bICrlPrepend_to_context: true  //CInsertImage
* bICrlSelectable: true    //CViewVisualaid
* aoICrlMenu: Object    //CFormatGroup, CInsertDate
 aICrlItems: Array[4]
 oICrlItemDefaults: Object
 onpostrender: (oEvtIn)
 sIType: "fICCPFMenucnrRo"
* asICrlTxt: "CFile-New-document",
* sICrlCmd: "CmdFilCntDocNew"
* sICrlIcn: "IcnDocNew",
* sICrlMnbitm: "oMnbitmView"
* sICrlSelectorState : "a[href]"  //CInsertLink
* sICrlSeparator: "after"
* sICrlSct: "Ctrl+Z"
* onclick: function ()
* onpostrender: function toggleUndoState()

pwpcmd.user.call.BARTOOL-CLICK

name::
* McsEngl.pwpcmd.user.call.BARTOOL-CLICK@cptIt,
* McsEngl.pwpcmd.tool@cptIt,
* McsEngl.pwpcmd.menuitem@cptIt,
* McsEngl.pwpcmdTol@cptIt,

_DESCRIPTION:
A-command on toolbar.

pwpcmd'toolbar#ql:phlbartool#

name::
* McsEngl.pwpcmd'toolbar@cptIt,

pwpcmd'toolitem

name::
* McsEngl.pwpcmd'toolitem@cptIt,

pwpcmd.user.call.EVENT#ql:pwpevt'command#

name::
* McsEngl.pwpcmd.user.call.EVENT@cptIt,

pwpcmd.user.call.KEYBORD-SHORTCUT

name::
* McsEngl.pwpcmd.user.call.KEYBORD-SHORTCUT@cptIt,
* McsEngl.pwpcmd.keybord@cptIt,
* McsEngl.pwpcmd.shortcut@cptIt,

pwpcmd.user.CMTools (Barmenu)

name::
* McsEngl.pwpcmd.user.CMTools (Barmenu)@cptIt,
* McsEngl.pwpCTools@cptIt,

_CODE.PWP:
oMenbaritmTools: {sICrlTitle: 'CTools'},

pwpcmd.user.CTools-Source-code

name::
* McsEngl.pwpcmd.user.CTools-Source-code@cptIt,
* McsEngl.pwpCTools-Source-code@cptIt,

_PLUGIN:
* PgnCntCode,

oPgmWpg.f1CmdAdd('CmdCntCode', fShowDialog);

oPgmWpg.f1ToolitemAdd('CmdCntCode', {
sICrlIcn: 'IcnCode',
sICrlTooltip: 'Source code',
onclick: fShowDialog
});

oPgmWpg.f1MenuitemAdd('CmdCntCode', {
sICrlIcn: 'IcnCode',
saICrlText: 'Source code',
sICrlMenubaritem: 'oMenuTools',
onclick: fShowDialog
});

pwpcmd.user.CMHelp (Barmenu)

name::
* McsEngl.pwpcmd.user.CMHelp (Barmenu)@cptIt,
* McsEngl.pwpcmdHlp@cptIt,
* McsEngl.pwpCMHelp@cptIt,

pwpcmd.user.CHelp-Documentation

name::
* McsEngl.pwpcmd.user.CHelp-Documentation@cptIt,
* McsEngl.pwpcmdHlpDoc@cptIt,
* McsEngl.pwpCHelp-Documentation@cptIt,
* McsEngl.pwpcmd.CHelp-Documentation@cptIt,

_DESCRIPTION:
Shows the-documentation of the-program.

_PLUGIN:
* PgnHlpDoc,

oPgmWpg.o1Cmd.fCmdStore('CmdHlpDoc', function() {
window.open('dDoc/', '_blank');
});

oPgmWpg.f1MenitmStore('CmdHlpDoc', {
asICrlTxt: 'CHelp-Documentation',
sICrlCmd: 'CmdHlpDoc',
sICrlIcn: 'IcnHelp',
});

pwpcmd.USER.NO

name::
* McsEngl.pwpcmd.USER.NO@cptIt,
* McsEngl.pwpcmd.programer@cptIt,
* McsEngl.pwpcmd.pwp@cptIt,

_DESCRIPTION:
A-command only the-programer can use.
[hmnSngo.2016-02-01]

pwpalgo'CONFIGURING (pwpcfg)

name::
* McsEngl.pwpalgo'CONFIGURING (pwpcfg)@cptIt,
* McsEngl.pwpcfg@cptIt,

_DESCRIPTION:
The-user of the-program can configure it on many parameters.
The-file 'index.html' contains all these parameters.
Configuration-parameters (variables) are named 'xCfgName'.

pwpcfg'index.html

name::
* McsEngl.pwpcfg'index.html@cptIt,

pwpcfg'f1CfgfcnCallRx

name::
* McsEngl.pwpcfg'f1CfgfcnCallRx@cptIt,
* McsEngl.pwpf1CfgfcnCallRx@cptIt,

_DESCRIPTION:
Executes a-callback-function in o1Cfg.

pwpcfg'o1Cfg

name::
* McsEngl.pwpcfg'o1Cfg@cptIt,
* McsEngl.pwpo1Cfg@cptIt,
* McsEngl.pwpo1Edr'setting@cptIt,
* McsEngl.pwpoEdrConfigs@cptIt, {2015-11-12}
* McsEngl.pwpSetting@cptIt, {2015-10-08}
* McsEngl.pwpoEdrSettings:@cptIt,
* McsEngl.oEdrSettings:@cptIt,
* McsEngl.pwpConfig@cptIt,
* McsEngl.pwpOEdrSettings:@cptIt,
* McsEngl.pwpoEdrSettings@cptIt,
* McsEngl.pwp'configuration@cptIt,
* McsEngl.pwp'configuration-variable@cptIt,
* McsEngl.pwp'option@cptIt,
* McsEngl.pwp'preference@cptIt,
* McsEngl.pwp'settings.core@cptIt,
* McsEngl.pwpcode.OPTION@cptIt,

* McsEngl.pwpCfg@cptIt,

_DESCRIPTION:
This object contains the-config-variables the-user defines in index.html.
===
frx1Cfgval
===
Cfg-variables are founded in o1Cfg and f1Cfgval().
[hmnSngo.2016-01-06]
===
In file 'pgmHtml.html' we can configure program's configuration-variables as the-members of the-object-parameter of the-function: oPgmHtml.fMedInit({})
[hmnSngo.2015-10-09]
===
All configuration is stored in oEdrSettings, from which it is accessed.

_SPECIFIC:
* pwpaCfgProtectRegExp, pwpaCfgProtectRegExp (tmce'protect) //<!--pwp:protected ' + escape(str) + '-->'
===
* pwpbCfgAdd_unload_trigger,
* pwpbCfgBarStatus
* pwpbCfgBr_in_pre
* pwpbCfgBrowser_spellcheck, pwpbCfgBrowser_spellcheck
* pwpbCfgEnd_container_on_empty_block
* pwpbCfgForce_p_newlines
* pwpbCfgLanguage, pwpbCfgLanguage
* pwpbCfgNodechangeDisable
* pwpbCfgNowrap, pwpbCfgNowrap (tmce'nowrap)
* pwpbCfgObject_resizing, pwpbCfgObject_resizing
* pwpbCfgPadd_empty_editor, pwpbCfgPadd_empty_editor
* pwpbCfgPgnSaveEnable_when_dirty
* pwpbCfgRender_ui, pwpbCfgRender_ui
* pwpbCfgUrlsConvert, pwpbCfgUrlsConvert
* pwpbCfgUrlsConvert_to_relative, pwpbCfgUrlsConvert_to_relative
* pwpbCfgVisualaid, pwpbCfgVisual
===
* pwpfCfgFilebrowser, pwpfCfgFilebrowser,
* pwpfCfgUrlconverter
===
* pwpnCfgToolitem_size
===
* pwpoCfgCodemirror
* pwpoCfgFormats
* pwpoCfgPluginExternal
* pwpoCfgCntWindow (tmce'content_window)
===
* pwpsCfgBarMenu
* pwpsCfgCntBodyClass, pwpsCfgCntBodyClass (tmce'body_class)
* pwpsCfgCntCss_urls, pwpsCfgCntCss_urls (tmce'content_css)
* pwpsCfgCntCssrule, pwpsCfgCntCssrule (tmce'content_style)
* pwpsCfgDirectionality, pwpsCfgDirectionality (tmce'directionality) //ltr, rtl
* pwpsCfgEncoding
* pwpsCfgFont_size_classes
* pwpsCfgFontSizes, pwpsCfgFontSizes
* pwpsCfgFontSizesPoints
* pwpsCfgForced_root_block, pwpsCfgForced_root_block
* pwpsCfgIndentation, pwpsCfgIndentation
* pwpsCfgLanguage, pwpsCfgLanguage
* pwpsCfgLanguage_urlpwpsCfgLanguage_url
* pwpsCfgPlugins, pwpsCfgPlugins
* pwpsCfgSkin
* pwpsCfgSkinUrl
* pwpsCfgStylesPreview
* pwpsCfgTheme, pwpsCfgTheme (tmce'fsCfgTheme)
* pwpsCfgThemeUrl
* pwpsCfgToolbar
* pwpsCfgUrlPgm, pwpsCfgUrlProgram,

_SPECIFIC: PLUGIN:
* pwpnCfgPgnAutoresize_min_height
===
* pwpbCfgPgnAutosaveRestore_when_empty
===
* pwpnCfgPgnColorCols: 8
* pwpaCfgPgnColorMap
* pwpnCfgPgnColorRows //5
===
* pwpbCfgPgnDatetimeElement
* pwpaCfgPgnDatetimeFormats
===
* pwpbCfgPgnImageAdvtab
* pwpasCfgPgnImageList
===
* pwprsCfgPgnImportcssFilterFile
* pwprsCfgPgnImportcssFilterSelector
* pwpbCfgPgnImportcssMerge_classes
===
* pwpaCfgPgnLinkRels, pwpaCfgPgnLinkRels
* pwpaCfgPgnLinkTargets, pwpaCfgPgnLinkTargets
* pwpaCfgPgnLinkUrls, pwpaCfgPgnLinkUrls
===
* pwpfCfgPgnMediaTemplateAudio
* pwpfCfgPgnMediaTemplateVideo
===
* pwpsCfgPgnMenuContext
===
* pwpbCfgPgnPasteAs_text
* pwpbCfgPgnPasteData_imgs //remove on false and undefined
* pwpbCfgPgnPasteRemove_styles
* pwpbCfgPgnPasteRemove_styles_if_webkit
===
* pwpsCfgPgnSaveAutoInterval //'30s'
* pwpsCfgPgnSaveAutoRetention //'30m'
===
* pwpaCfgPgnTemplate

o1Cfg:
//2016-03-03
aCfgPgnIstTemplate: Array[2]
aCfgPgnLinkRels: Array[1]
aCfgPgnLinkUrls: Array[2]
bCfgBrowser_spellcheck: true
bCfgConvert_fonts_to_spans: true
bCfgObject_resizing: true
bCfgPadd_empty_editor: true
bCfgPgnSaveEnable_when_dirty: false
bCfgUrlsConvert: true
bCfgUrlsConvert_to_relative: true
bCfgValidate: true
bCfgVisualaid: true
bHTdnRemove_trailing_br: true
bHTdnValidate: true
fCfgFilebrowser: (field_name, url, type, win)
fCfgInit: ()
fCfgPgnSaveLocally: ()
fCfgSetup: ()
sCfgCharref_encoding: "named"
sCfgCodemirror: Object
sCfgFontsizesNam: "xx-small,x-small,small,medium,large,x-large,xx-large"
sCfgFontsizesNamLegacy: "xx-small,small,medium,large,x-large,xx-large,300%"
sCfgForced_root_block: "p"
sCfgHSchema: "HScm5"
sCfgHTdnRoot_name: "body"
sCfgIndentation: "30px"
sCfgPgnFilSaveAutoInterval: 30000
sCfgPgnFilSaveAutoRetention: 1200000
sCfgPlugins: "PgnIstAnchor,PgnIstChar,pgnCode,PgnFmtColor,pgnContextmenu,PgnIstDatetime,pgnEmoticons,PgnFilCntDocProp,PgnHlpDoc,PgnIstHr,PgnIstImage,pgnLink,pgnListAdv,PgnIstNbsp,PgnIstVideo,PgnIstPagebreak,PgnViwPreview,PgnFilPrint,PgnFilSave,PgnFilSaveAuto,PgnEdtFindReplace,pgnTable,PgnIstTemplate,PgnViwBlocks,PgnViwCharInv,PgnViwDirection,pgnWordcount,autolink,lists,paste"
sCfgTheme: "ThmModern"
sCfgToolbar1: "CmdFilSave CmdEdtUndo CmdEdtRedo | CmdFmtGroup CmdFmtFontfamily CmdFmtFontsizes | CmdFmtBold CmdFmtItalic CmdFmtUnderline | CmdFmtAlignLeft CmdFmtAlignCenter CmdFmtAlignRight CmdFmtAlignJustify | CmdFmtListUL CmdFmtListOL | eqneditor CmdFmtColorFore CmdFmtColorBack | CmdLink CmdIstLinkRmv CmdIstImage CmdViwPreview CmdEmoticons CmdTableTool"

pwpalgo'EVENT

name::
* McsEngl.pwpalgo'EVENT@cptIt,
* McsEngl.pwpevent@cptIt,
* McsEngl.pwp'event@cptIt,
* McsEngl.pwpalgo'event@cptIt,
* McsEngl.pwpevent@cptIt,

* McsEngl.pwpevt@cptIt,

_DESCRIPTION:
Events are processes in the program (like mouse movements, loading, resizing, ...) that trigger (call) functions which are connected (binded) with entities in the program (= targets of events).
[hmnSngo.2015-05-05]

_DESCRIPTION:
Subclasses  ContentEvent CommandEvent ProgressStateEvent FocusEvent ResizeEvent
This is the base class for all TinyMCE events.

Properties
Property  Defined By
type
The event type name for example "click"
tinymce.Event

Methods
Method  Defined By
isDefaultPrevented
Returns true/false if the default action is to be prevented or not

isImmediatePropagationStopped
Returns true/false if the event immediate propagation is stopped or not

isPropagationStopped
Returns true/false if the event propagation is stopped or not

preventDefault
Prevents the default action of an event to be executed

stopImmediatePropagation
Prevents the event from propagating to listeners on the same object

stopPropagation
Stops the event from propagating up to listeners on parent objects
[http://www.tinymce.com/wiki.php/api4:class.tinymce.Event]

pwpevt'boolean

name::
* McsEngl.pwpevt'boolean@cptIt,

_SPECIFIC:
* oPgmWpg.o1Evt.bEvtDomLoaded

pwpevt'name

name::
* McsEngl.pwpevt'name@cptIt,

pwpevt'function

name::
* McsEngl.pwpevt'function@cptIt,

_SPECIFIC:
* addEventListener##
* removeEventListener

* oPgmWpg.o1Evt.fEvtAddEvtLnr,
* oPgmWpg.o1Evt.fEvtAddTgtEvtLnr,
* oPgmWpg.o1Evt.fEvtDispatchRo,
* oPgmWpg.o1Evt.fEvtDispatchTarget,
* oPgmWpg.o1Evt.fEvtHasListenerRb,
* oPgmWpg.o1Evt.fEvtNodeChangedDispatch,
* oPgmWpg.o1Evt.fEvtRemoveListener,

* oPgmWpg.o2I.fICrlRo.fICrlEvtAddListenerRo,
* oPgmWpg.o2I.fICrlRo.fICrlEvtDispatchRo,
* oPgmWpg.o2I.fICrlRo.fICrlEvtRemoveListenerRo,
* oPgmWpg.o2I.fICrlRo.fICrlEvtsPendingAddListener,

pwpevt'command (listener)

name::
* McsEngl.pwpevt'command (listener)@cptIt,
* McsEngl.pwpcmd.event@cptIt,
* McsEngl.pwpcmdEvt@cptIt,
* McsEngl.pwpcmd.event@cptIt,
* McsEngl.pwpevtCmd@cptIt,
* McsEngl.pwpEvtfunction@cptIt,
* McsEngl.pwpevt'handler@cptIt,

pwpevtCmd'add

name::
* McsEngl.pwpevtCmd'add@cptIt,

_DESCRIPTION:
Adds an-event-function to a-target.

_LISTENER:
* oPgmWpg.f1EvtAddListener: function(sEvtsIn, fEvtlistenerIn)
* o1Evt.fEvtAddListener: function (oEvt_targetIn, sEvtsIn, fEvtlistenerIn, oEvt_scopeIn)
* oICrl.fICrlEvtAddListenerRo: function(sEvtsIn, fsEvtlistenerIn)
===
* froICrlEvtAddListener
* fru1EvtAddListener
* fDUtlEvtAddListener
===
* fDEvtListenerAdd = function (oEvt_targetIn, sEvtsIn, fEvt_listenerIn, oEvt_scopeIn)
* fDUtlEvt_listenerAdd: function (oEvt_targetIn, sEvtsIn, fEvt_listenerIn, oEvt_scopeIn)
* fICrlEvt_listenerAdd: function(sEvtsIn, fsEvt_listenerIn)
* fUObvEvt_listenerAdd: function(sEvtsIn, fEvt_listenerIn)
===
* fDUetEvtfunctionAdd
* fDUtlEvtfunctionAdd
* fICrlEvtfunctionAdd
* fUObvEvtfunctionAdd

* fDUtlEvtfunctionAdd
[object Window], readyp
[object Window], beforeunload
[object HTMLDivElement], sEvent
[object HTMLDivElement], click
[object HTMLDivElement], mouseleave
[object HTMLDivElement], mouseover
[object HTMLDivElement], keydown
[object HTMLDivElement], focusin
[object HTMLDivElement], sEvent
[object HTMLDivElement], click
[object HTMLDivElement], sEvent
[object HTMLDivElement], click
[object HTMLDivElement], keydown
[object HTMLDivElement], mousedown
[object HTMLBodyElement], dragend
[object HTMLBodyElement], focusout
[object HTMLDocument], focusin
[object HTMLDocument], mousedown
[object HTMLBodyElement], keydown
[object HTMLBodyElement], keypress
[object HTMLBodyElement], keyup
[object HTMLDocument], mousedown
[object HTMLDocument], contextmenu
[object HTMLDocument], click
[object HTMLBodyElement], paste
[object HTMLDocument], mouseup
[object HTMLBodyElement], focusin
[object Window], resize

pwpevtCmd'args

name::
* McsEngl.pwpevtCmd'args@cptIt,

pwpevtCmd'call

name::
* McsEngl.pwpevtCmd'call@cptIt,

_DESCRIPTION:
The function that calls the-event-function has arguments a) string: the name of the event and b) object: the arguments of the-event-function.
[hmnSngo.2015-05-04]

_FUNCTION:
* fDUetEvtfunctionCall (oEvttargetIn, sEvtnamesIn, oEvtargsIn)
* fDUtlEvtfunctionCall (oEvttargetIn, sEvtnamesIn, oEvtfcnargsIn)
* fICrlEvtfunctionCall (sEvtnameIn, oEvtCntrlArgsIn, bBubbleIn) //after edr-init
* fUObvEvtfunctionCall (sEvtnameIn, oEvtfcnargsIn, bEvtbubbleIn) //before edr-render

pwpevtCmd'remove

name::
* McsEngl.pwpevtCmd'remove@cptIt,

_FUNCTION:
* fDUetEvtfunctionRemove
* fDUtlEvtfunctionRemove
* fICrlEvtfunctionRemove
* fUObvEvtfunctionRemove

pwpevt'object

name::
* McsEngl.pwpevt'object@cptIt,

_SPECIFIC:
* oEventlike##
* o1Evt#ql:idpwpo1evt#
* oEvtStoreEvts##
* oStoreEvtListener##
* oStoreEvtNative##

* oICrlEvtsNative,
* oICrlEvtstore,

pwpevt'object.o1Evt

name::
* McsEngl.pwpevt'object.o1Evt@cptIt,
* McsEngl.pwpo1Evt@cptIt, {2015-11-30}
* McsEngl.pwpo1Evt@cptIt,
* McsEngl.pwpo1EvtPhl@cptIt, {2015-11-23}
* McsEngl.pwpfDEvent@cptIt, {2015-10-19}
* McsEngl.pwpfDUtilEvent@cptIt,
* McsEngl.pwpfDomUtlsEvent@cptIt,
* McsEngl.tinymce.dom.EventUtils@cptIt,
* McsEngl.pwp'EventUtils@cptIt,
* McsEngl.pwp'fDomUtlsEvent@cptIt,
* McsEngl.pwpoDEvent@cptIt,
* McsEngl.pwpoDUtilEvent@cptIt,
* McsEngl.pwpoDomUtlsEvent@cptIt,
* McsEngl.pwp'oDomUtlsEvent@cptIt,

* McsEngl.phDuet@cptIt,
* McsEngl.pwp'DUE@cptIt,
* McsEngl.phDue@cptIt,

_DESCRIPTION:
oDom.oDomUtlsEvent = new oDom.fDomUtlsEvent(); 578
===
function EventUtils() {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\dom\EventUtils.js +line:188]

o1Evt'member

name::
* McsEngl.o1Evt'member@cptIt,

pwpo1Evt.member:
> {2016-04-27} Object.getOwnPropertyNames(oPgmWpg.o1Evt).sort()
["fEvtDispatchNodeChanged", "fEvtDispatchRo", "fEvtDispatchTarget", "fEvtHasCmdRb", "fEvtRemoveListener", "fEvtStoreEvtCmd", "fEvtStoreTgtidEvt", "oEvtStoreTgtidEvt"]
===
> {2016-04-02} Object.getOwnPropertyNames(oPgmWpg.o1Evt).sort()
["fEvtAddEvtLnr", "fEvtAddTgtEvtLnr", "fEvtDispatchRo", "fEvtDispatchTarget", "fEvtHasListenerRb", "fEvtNodeChangedDispatch", "fEvtRemoveListener", "oEvtStoreTgtEvtLnr"]
===
//2016-03-21
> Object.getOwnPropertyNames(oPgmWpg.o1Evt).sort()
["bEvtDomLoaded", "fEvtAddListener", "fEvtDispatch", "fEvtRemoveListener", "oEvtStoreEvents"]
//2015-11-23
> Object.getOwnPropertyNames(oPgmWpg.o1EvtPhl).sort()
["bEvpDomLoaded", "fEvpDispatch", "fEvpListenerAdd", "fEvpListenerRemove", "oEvpStore"]
===
//2015-11-22
> Object.getOwnPropertyNames(new oPgmWpg.o2Dom.fDEvent()).sort()
["bDEvtDomLoaded", "fDEvtDispatch", "fDEvtListenerAdd", "fDEvtListenerRemove", "oDEvtStore"]
===
* pwpbDUEDomLoaded (pwp'loaded)
* pwpfDUEEventAdd (pwp'bind)
* pwpfDUEEventClean (pwp'clean)
* pwpfDUEEventInvoke (pwp'fire)
* pwpfDUEEventRemove (pwp'unbind)
* pwpfDUECancel (pwp'cancel)
* pwpfDUEDestroy (pwp'destroy)
===
> Object.getOwnPropertyNames(oPgmHtml.oDom.oDomUtlsEvent).sort()
["bind", "cancel", "clean", "destroy", "domLoaded", "events", "fDUEEventFire", "unbind"]
> Object.getOwnPropertyNames(new tinymce.dom.EventUtils).sort()
["bind", "cancel", "clean", "destroy", "domLoaded", "events", "fire", "unbind"]

o1Evt.fEvtHasListenerRb

name::
* McsEngl.o1Evt.fEvtHasListenerRb@cptIt,
* McsEngl.oPgmHtml.fUObvBEventhandlerHas@cptIt,
* McsEngl.pwpfUObvBEventhandlerHas@cptIt,
* McsEngl.pwp'fObslBHas-envent-listeners@cptIt,
* McsEngl.pwp'hasEventListeners@cptIt,

_DEFINITION:
tinymce.hasEventListeners
function (name) {
     var bindings = this[bindingsName];

     name = name.toLowerCase();

     return !(!bindings || !bindings[name] || bindings[name].length === 0);
   } Observable.js:233
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Observable.js +line:233]

o1Evt'fEvtDispatchRo

name::
* McsEngl.o1Evt'fEvtDispatchRo@cptIt,
* McsEngl.oPgmHtml.fUObvEventInvoke@cptIt,
* McsEngl.fUObvEventInvoke@cptIt,
* McsEngl.pwpfObslEventInvoke@cptIt,
* McsEngl.pwp'fire@cptIt,
* McsEngl.pwp'fObslEventFire@cptIt,

_DEFINITION:
    * Fires the specified event by name.
    *
    * @method fire
    * @param {String} name Name of the event to fire.
    * @param {tinymce.Event/Object?} args Event arguments.
    * @param {Boolean?} bubble True/false if the event is to be bubbled.
    * @return {tinymce.Event} Event instance passed in converted into tinymce.Event instance.
    * @example
    * instance.fire('event', {...});
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Observable.js +line:45]
===
self.fObslEventFire('NodeChange', {element: oNode, parents: aParents});

o1Evt.f1EvtListenerAdd

name::
* McsEngl.o1Evt.f1EvtListenerAdd@cptIt,
* McsEngl.oPgmHtml.fUObvEventhandlerAdd@cptIt,
* McsEngl.pwpfUObvEventhandlerAdd@cptIt,
* McsEngl.pwpfObslEventLnrAdd@cptIt,
* McsEngl.pwp'fObslEventOn@cptIt,
* McsEngl.pwp'on@cptIt,

_DEFINITION:
    * Binds an event listener to a specific event by name.
    *
    * @method on
    * @param {String} name Event name or space separated list of events to bind.
    * @param {callback} callback Callback to be executed when the event occurs.
    * @return {Object} Current class instance.
    * @example
    * instance.on('event', function(e) {
    * // Callback logic
    * });
    */
   on: function(name, callback) {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Observable.js +line:127]

o1Evt.f1EvtListenerRemove

name::
* McsEngl.o1Evt.f1EvtListenerRemove@cptIt,
* McsEngl.oPgmHtml.fUObvEventhandlerRemove@cptIt,
* McsEngl.pwpfUObvEventhandlerRemove@cptIt,
* McsEngl.pwpfObslEventLnrRemove@cptIt,
* McsEngl.pwp'off@cptIt,
* McsEngl.pwp'fObslEventOff@cptIt,

_DEFINITION:
    * Unbinds an event listener to a specific event by name.
    *
    * @method off
    * @param {String?} name Name of the event to unbind.
    * @param {callback?} callback Callback to unbind.
    * @return {Object} Current class instance.
    * @example
    * // Unbind specific callback
    * instance.off('event', handler);
    *
    * // Unbind all listeners by name
    * instance.off('event');
    *
    * // Unbind all events
    * instance.off();
    */
   off: function(name, callback) {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Observable.js +line:179]

o1Evt.oEvtStoreEvts#ql:phloevtstoreevts#

name::
* McsEngl.o1Evt.oEvtStoreEvts@cptIt,

pwpevt'object.oEvt

name::
* McsEngl.pwpevt'object.oEvt@cptIt,

_DESCRIPTION:
* pwpoEventlike,

_GENERIC:
* oEvent#ql:jsoevent@cptIt#

_DESCRIPTION:
WE use it, as an-input to listeners.
[hmnSngo.2016-03-28]

pwpevt'member

name::
* McsEngl.pwpevt'member@cptIt,

_MEMBER:
* oEvtIn.aParents,
* oEvtIn.bCfgVisualaid);
* oEvtIn.bCntSelection) {
* oEvtIn.bSource_view) {
* oEvtIn.bState);
* oEvtIn.button != 2) {
* oEvtIn.cancelBubble = true; // IE
* oEvtIn.charCode == shortcut.charCode)) {
* oEvtIn.clientX;
* oEvtIn.clientY;
* oEvtIn.clipboardData;


* oEvtIn.ctrlKey ||
* oEvtIn.currentTarget;
* oEvtIn.data {data: author: ""description: ""docencoding: ""keywords: ""robots: ""title: "title"}
* oEvtIn.data.code);
* oEvtIn.data.guiTbxAnchorClass
* oEvtIn.data.guiTbxAnchorName,

* oEvtIn.dataTransfer;

* oEvtIn.deltaX =
* oEvtIn.deltaY = - 1/40 *
* oEvtIn.draft) {
* oEvtIn.index]);
* oEvtIn.isDefaultPrevented()) {
* oEvtIn.isImmediatePropagationStopped()) {
* oEvtIn.isPropagationStopped());
* oEvtIn.keyboard) {
===
* oEvtIn.altKey;
* oEvtIn.keyCode == 9) {
* oEvtIn.metaKey :
* oEvtIn.shiftKey;
===
* oEvtIn.node), function(oNodeIn) {
* oEvtIn.nodeName === 'TABLE') {
* oEvtIn.nTime);
* oEvtIn.nWidth,
* oEvtIn.oElt.nodeName == 'IMG');
* oEvtIn.oEvt_targetIn = current;
* oEvtIn.oICrlLast && altCtrl.fICrlSetGetXValue() ==
* oEvtIn.oICrlLast = oICrlLast;
* oEvtIn.oICrlLast.fICrlSetGetSAText())) {
* oEvtIn.oNode), function(argsIn) {
* oEvtIn.oRelatedTarget;
* oEvtIn.preventDefault();
* oEvtIn.preventDefault) {
* oEvtIn.returnValue = false; // IE
* oEvtIn.save) {
* oEvtIn.sCnt = fHToSHtmlDNodeFtr({}, schema).fHThdSerialize(oDNodeRoot);
* oEvtIn.sCntFormat != 'raw' && !
* oEvtIn.sCntFormat == 'raw' && sHead) {
* oEvtIn.sCommand;
* oEvtIn.selection) {
* oEvtIn.srcElement;

=== FUNCTION
* oEvtIn.stopImmediatePropagation();
* oEvtIn.stopPropagation();

=== NUMBER

* oEvtIn.pageX === undefined &&
* oEvtIn.pageY};
* oEvtIn.screenX;
* oEvtIn.screenY - nStartY;

=== OBJECT
* oEvtIn.oICrl.fIcCnrControlset().fICrlRemove();
* oEvtIn.control == oICCPFloatcnrThis) {
===
* oEvtIn.lastControl.fICrlSetGetSAText())) {
---
* oEvtIn.oTarget.nodeName != 'TABLE') {
* oEvtIn.target.parentNode;
=== STRING
* oEvtIn.sName = 'pagebreak';
===
* oEvtIn.type == 'keydown') {
* oEvtIn.type == 'mousedown' ?
* oEvtIn.type == 'mouseenter') {
* oEvtIn.type == 'show');
* oEvtIn.type === 'click') {
* oEvtIn.type === 'focus' ? 'focusin' : 'focusout';
* oEvtIn.type === 'mouseout' ? 'mouseleave' : 'mouseenter';
* oEvtIn.wheelDelta;
* oEvtIn.wheelDeltaX;
* oEvtIn.which == 41) {
* oEvtIn.wordContent = true; // Mark it for other processors

pwpevt.bEvtDefaultPrevented

name::
* McsEngl.pwpevt.bEvtDefaultPrevented@cptIt,

pwpevt.bEvtPropagationImmediateStopped

name::
* McsEngl.pwpevt.bEvtPropagationImmediateStopped@cptIt,

pwpevt.bEvtPropagationStopped

name::
* McsEngl.pwpevt.bEvtPropagationStopped@cptIt,

pwpevt'scope

name::
* McsEngl.pwpevt'scope@cptIt,

pwpevt'store

name::
* McsEngl.pwpevt'store@cptIt,

oPgmWpg.o1Evt.oEvtStoreTgtEvtLnr

name::
* McsEngl.oPgmWpg.o1Evt.oEvtStoreTgtEvtLnr@cptIt,
* McsEngl.pwpoEvtStoreTgtEvtLnr@cptIt,

_DESCRIPTION:
oEvtStoreEvts = {},
//{ id: {sEvt: [{fEvtlistener:..., oEvtscope:...}].bCapture/bsEventnameFake/f_EvtNative_listener } }

oPgmWpg.o1Store.oStoreCmdEvt

name::
* McsEngl.oPgmWpg.o1Store.oStoreCmdEvt@cptIt,
* McsEngl.oPgmWpg.o1Store.oStoreEvtListener@cptIt,
* McsEngl.pwpoStoreCmdEvt@cptIt,
* McsEngl.pwpoStoreEvtListener@cptIt,

oStoreCmdEvt:
* EvtCmdCall: Array[1]
* EvtCmdCallBefore: Array[1]
* EvtCntGet: Array[1]
* EvtCntGetBfr: Array[2]
* EvtCntSave: Array[1]
* EvtCntSet: Array[1]
* EvtCntSetBfr: Array[2]
* EvtEdrContentSave: Array[1]
* EvtNodeChange: Array[8]
* EvtObjectResizeStart: Array[1]
* EvtObjectResized: Array[2]
* EvtObjectSelected: Array[1]
* EvtPhlAddControls: Array[1]
* EvtPhlInit: Array[37]
* EvtPhlInitPre: Array[2]
* EvtPhlResize: Array[1]
* EvtProcessPost: Array[1]
* EvtProcessPre: Array[1]
* EvtProgress_state: Array[1]
* EvtRedo: Array[3]
* EvtResoleveName: Array[2]
* EvtUndo: Array[3]
* EvtUndoAdd: Array[3]
* EvtUndoTyping: Array[2]
* EvtUndosClear: Array[1]
* click: Array[2]
* keydown: Array[7]
* keypress: Array[1]
* keyup: Array[4]
* mousedown: Array[4]
* mouseup: Array[3]
* reset: Array[1]

oPgmWpg.o1Store.oStoreEvtListener:
EvtCmdCall: Array[1]
EvtCmdCallBefore: Array[1]
EvtCntGet: Array[1]
EvtCntGetBfr: Array[2]
EvtCntSave: Array[1]
EvtCntSet: Array[1]
EvtCntSetBfr: Array[2]
EvtEditorAdd: Array[1]
EvtEdrContentSave: Array[1]
EvtNodeChange: Array[8]
EvtProcessPost: Array[1]
EvtProgress_state: Array[1]
EvtRedo: Array[3]
EvtUndo: Array[3]
EvtUndosClear: Array[1]
click: Array[2]
evtEditorResize: Array[1] => EvtPhlResize
evtEdrInit: Array[37] => EvtPhlInit
evtEdrInitPre: Array[2]
evtEdrObjectResizeStart: Array[1]
evtEdrObjectResized: Array[1]
evtEdrObjectSelected: Array[1] => EvtObjectSelected
evtEdrProcessPre: Array[1] => EvtProcessPre
evtEdrResoleveName: Array[2] => EvtResoleveName
evtEdrUndoAdd: Array[3] => EvtUndoAdd
evtEdrUndoTyping: Array[2]
keydown: Array[7]
keypress: Array[2]
keyup: Array[5]
mousedown: Array[4]
mouseup: Array[3]
objectResized: Array[1]
reset: Array[1]

oPgmWpg.o1Store.oStoreEvtNative

name::
* McsEngl.oPgmWpg.o1Store.oStoreEvtNative@cptIt,
* McsEngl.pwpoStoreEvtNative@cptIt,

oStoreEvtNative:
beforepaste: Object
click: Object
contextmenu: Object
copy: Object
cut: Object
dblclick: Object
drag: Object
dragdrop: Object
dragend: Object
draggesture: Object
dragover: Object
drop: Object
focusin: Object
focusout: Object
keydown: Object
keypress: Object
keyup: Object
mousedown: Object
mouseenter: Object
mouseleave: Object
mousemove: Object
mouseout: Object
mouseover: Object
mouseup: Object
paste: Object
selectionchange: Object

pwpevt'target

name::
* McsEngl.pwpevt'target@cptIt,

_DESCRIPTION:
Events are processes in the program (like mouse movements, loading, resizing, ...) that trigger (call) functions which are connected (binded) with entities in the program (= targets of events).
[hmnSngo.2015-05-05]

SPECIFIC

* pwpevt.specific, pwpevt.specific

_SPECIFIC:
//name, target|nonadded, {oEvtfcnargsIn} (old name)

=== Crl:
* pwpEvtCrlAction (pwpevt.action)
* pwpEvtCrlAutohide, nonadded {target: e.target} (pwpevt.autohide)
* pwpEvtCrlHide (pwpevt.hide)
* pwpEvtCrlMenuCreate, nonadded, (pwpevt.createmenu)
* pwpEvtCrlRepaint (pwpevt.repaint)
* pwpevt.showtab
* pwpevt.PostRender

=== Edr:
* pwpEvtEdrActivate, nonadded, pwpevt.activate: Fires when the focus is moved from one editor to another editor
* pwpEvtEdrActivateOff, nonadded, pwpevt.deactivate: Fires when the focus is moved from one editor to another editor

* pwpEvtEdrChange {level, lastLevel} (pwpevt.change: Fires when contents is modified in the editor, there is and a-control-change)

* pwpEvtEdrCmdCall {sCommand, ui, value} (* pwp'ExecCommand: Fires after a execCommand call has been made)
* pwpEvtEdrCmdCallBefore {sCommand, ui, value}: (pwp'BeforeExecCommand: Fires before a execCommand call is made)

* pwpEvtEdrContentGet (pwp'GetContent: Fires after contents has been extracted from the editor)
* pwpEvtEdrContentGetBefore {format, draft} (pwpevt.BeforeGetContent)
* pwpEvtEdrContentSet
* pwpEvtEdrContentSetBefore {content} (pwpevt.BeforeSetContent: Fires before contents is inserted into the editor)
* pwpEvtEdrContentLoad (pwpevt.LoadContent: Fires after contents has been loaded into the editor)
* pwpEvtEdrContentSave, noncalled, (pwpevt.SaveContent: Fires after contents has been saved/extracted from the editor)

* pwpEvtEdrDraftRemove
* pwpEvtEdrDraftRestore
* pwpEvtEdrDraftStore

* pwpEvtEdrFullscreen_state_changed, nonadded (pwpevt.FullscreenStateChanged)

* pwpEvtEdrInit, noncalled (pwpevt.init: Fires after the editor has been initialized)
* pwpEvtEdrInitPre (pwpevt.PreInit: Fires before the editor has been initialized)

* pwpEvtEdrObjectResized (pwpevt.ObjectResized: Fires after an object like an image is resized)
* pwpEvtEdrObjectResizeStart (pwpevt.ObjectResizeStart: Fires when a resize of an object like an image is about to start)
* pwpEvtEdrObjectSelected (pwpevt.ObjectSelected: Fires when an object is selected such as an image)

* pwpEvtEdrProcessPre {oNode} (pwpevt.PreProcess: Fires before the contents is processed)
* pwpEvtEdrProcessPrePastepgn (pwpevt.PastePreProcess)
* pwpEvtEdrProcessPostPastepgn (pwpevt.PastePostProcess)
* pwpEvtEdrProcessPost {content} (pwpevt.PostProcess: Fires after the contents has been processed)

* pwpEvtProgress_state {bState, nTime}: shows throber. (pwpevt.ProgressState: Fires when a progress event is made)

* pwpevt'evtEdrRemove (pwpevt.remove: Fires when the editor instance is removed)
* pwpEvtEdrRenderPost,
* pwpEvtEdrRenderUIBefore, (oEditor, nonadded) pwpevt.BeforeRenderUI: Fires before the UI gets rendered.

* pwpEvtEdrSetup, nonadded, (pwpevt.SetupEditor: added on compat3x plugin)

* pwpEvtEdrVisualblocks (pwpevt.VisualBlocks)

* pwpEvtEdrVisual_chars (pwpevt.VisualChars)

* pwpEvtEdrUndoAdd (pwpevt.AddUndo: Fires after an undo level has been added to the editor)
* pwpEvtEdrUndoAddBefore (pwpevt.BeforeAddUndo: Fires before an undo level is added to the editor)
* pwpEvtEdrUndosClear (pwpevt.ClearUndos)
* pwpEvtEdrUndoTyping (pwpevt.TypingUndo)
* pwpEvtEdrUndo (pwpevt.undo: Fires when an undo operation is executed)
* pwpEvtEdrRedo (pwpevt.redo: Fires when an redo operation is executed)

* pwpEvtEdrUnloadBefore (pwpevt.BeforeUnload)

* pwpEvtEditorAdd

* pwpEvtEditorResize

* pwpEvtNodeChange (pwpevt.oEventNodeChange: Fires when the selection is moved to a new location or is the DOM is updated by some command)

* pwpEvtVisualaid (pwpevt.VisualAid) {element, hasVisual}
- shows|hides the-icon in command.
===
* pwpEvtReady

pwpevt.SPECIFIC-DIVISION.doing

name::
* McsEngl.pwpevt.SPECIFIC-DIVISION.doing@cptIt,

_SPECIFIC:

pwpevt.SPECIFIC-DIVISION.native

name::
* McsEngl.pwpevt.SPECIFIC-DIVISION.native@cptIt,

_SPECIFIC:

pwpevt.SPECIFIC-DIVISION.target

name::
* McsEngl.pwpevt.SPECIFIC-DIVISION.target@cptIt,

_SPECIFIC:

pwpevt.SPECIFIC-DIVISION.added

name::
* McsEngl.pwpevt.SPECIFIC-DIVISION.added@cptIt,

_SPECIFIC:
* added-event##
* addedNo-event##

pwpevt.NONADDED

name::
* McsEngl.pwpevt.NONADDED@cptIt,

_DESCRIPTION:
It is an-event dispatched, but never added!!

pwpevt.SPECIFIC-DIVISION.called

name::
* McsEngl.pwpevt.SPECIFIC-DIVISION.called@cptIt,

_SPECIFIC:
* called-event##
* calledNo-event##

pwpevt.NONCALLED

name::
* McsEngl.pwpevt.NONCALLED@cptIt,

pwpevt.NATIVE

name::
* McsEngl.pwpevt.NATIVE@cptIt,

_EVENT:
* pwpevt.click,
* pwpevt.contextmenu,
* pwpevt.dblclick,
* pwpevt.focusin,
* pwpevt.focusout,
* pwpevt.keydown,
* pwpevt.keypress,
* pwpevt.keyup,
* pwpevt.mousedown,
* pwpevt.mouseenter,
* pwpevt.mouseleave,
* pwpevt.mousemove,
* pwpevt.mouseout,
* pwpevt.mouseover,
* pwpevt.mouseup,
* pwpevt.scroll,
* pwpevt.wheel,
===
var oEventsNative = fTlsObtMake(
"focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste" +
" paste cut copy selectionchange mouseout mouseenter mouseleave keydown keypress" +
" keyup contextmenu dragend dragover draggesture dragdrop drop drag", ' '
);
[\public_html\pgmHtml\js\pgmHtml.js:24940]

* pwpevt.blur: Fires when the editor is blurred
* pwpevt.cancel
* pwpevt.close
* pwpevt.focus: Fires when the editor gets focused
* pwpevt.click
* pwpevt.mouseenter
* pwpevt.mouseleave
* pwpevt.move
* pwpevt.reset: Fires when the form containing the editor is resetted
* pwpevt.resize
* pwpevt.onResize
* pwpevt.onResizeStart
* pwpevt.ResizeEnd
* pwpevt.ResizeStart
* pwpevt.select
* pwpevt.show: Fires when the editor is shown
* pwpevt.submit: Fires when the form containing the editor is submitted
* pwpevt.wheel

oPgmWpg.a1EvtNativePending

name::
* McsEngl.oPgmWpg.a1EvtNativePending@cptIt,
* McsEngl.pwpa1EvtNativePending@cptIt,

pwpevt.NATIVE.NO

name::
* McsEngl.pwpevt.NATIVE.NO@cptIt,

pwpevt.doing.ContentEvent

name::
* McsEngl.pwpevt.doing.ContentEvent@cptIt,
* McsEngl.pwp'ContentEvent@cptIt,

_DESCRIPTION:

pwpevt.doing.CommandEvent

name::
* McsEngl.pwpevt.doing.CommandEvent@cptIt,
* McsEngl.pwp'CommandEvent@cptIt,

_DESCRIPTION:

pwpevt.doing.ProgressStateEvent

name::
* McsEngl.pwpevt.doing.ProgressStateEvent@cptIt,
* McsEngl.pwp'ProgressStateEvent-class@cptIt,

_DESCRIPTION:

pwpevt.doing.FocusEvent

name::
* McsEngl.pwpevt.doing.FocusEvent@cptIt,
* McsEngl.pwp'FocusEvent-class@cptIt,

_DESCRIPTION:

pwpevt.doing.ResizeEvent

name::
* McsEngl.pwpevt.doing.ResizeEvent@cptIt,
* McsEngl.pwp'ResizeEvent-class@cptIt,

_DESCRIPTION:

pwpevt.target.o1Doc

name::
* McsEngl.pwpevt.target.o1Doc@cptIt,

_SPECIFIC:
* pwpEvtAttChange (pwpEvtEdrAttributeSet, nonadded, (pwpevt.SetAttrib: Fires when attributes are updated on DOM elements))
* pwpEvtCntGet: Array[1]
* pwpEvtCntGetBefore: Array[2]
* pwpEvtCntSave: Array[1] //noncalled
* pwpEvtCntSet: Array[3]
* pwpEvtCntSetBefore: Array[2]
* pwpEvtEdrAdd: Array[2]
* pwpEvtEdrCmdCall: Array[1]
* pwpEvtEdrCmdCallBefore: Array[1]
* pwpEvtEdrInit: Array[36]
* pwpEvtEdrInitPre: Array[3]
* pwpEvtEdrObtResizeStart: Array[1]
* pwpEvtEdrObtResized: Array[1]
* pwpEvtEdrObtSelected: Array[1]
* pwpEvtEdrProcessPost: Array[1]
* pwpEvtEdrProcessPre: Array[2]
* pwpEvtEdrProcessPrePastepgn: Array[1]
* pwpEvtEdrProgress_state: Array[1]
* pwpEvtEdrRedo: Array[5] //noncalled
* pwpEvtEdrRemove: Array[3]
* pwpEvtEdrResize: Array[1]
* pwpEvtEdrResoleveName: Array[2]
* pwpEvtEdrUndo: Array[5]
* pwpEvtEdrUndoAdd: Array[5]
* pwpEvtEdrUndoAddBefore: Array[1]
* pwpEvtEdrUndoTyping: Array[4]
* pwpEvtEdrUndosClear: Array[1]
* pwpEvtEdrUnloadBefore: Array[1] //noncalled
* pwpEvtEdrVisualaid: Array[1]
* pwpEvtEdrVisualchars: Array[1]
* pwpEvtEdrVisualblocks: Array[1]
* pwpEvtNodeChange: Array[8]
click: Array[2]
contextmenu: Array[1]
keydown: Array[8]
keypress: Array[2]
keyup: Array[6]
mousedown: Array[3]
mouseup: Array[3]
objectResized: Array[1]

pwpevt.target.oCntDoc

name::
* McsEngl.pwpevt.target.oCntDoc@cptIt,

pwpevt.target.oIControl

name::
* McsEngl.pwpevt.target.oIControl@cptIt,

pwpoICrlEvtstore

_DESCRIPTION:
Every control, has an object to store the events:
{evt1name: [aevt1functions], evt2name: [aevt2functions], }

pwpevt.target.oPgmWpg

name::
* McsEngl.pwpevt.target.oPgmWpg@cptIt,
* McsEngl.pwpevt.oPgmWpg@cptIt,

_DESCRIPTION:
oPgmWpg.o1Evt.fEvtAddEvtLnr()
stores events and its listeners, which executed as: fEvtlnr.call(oPgmWpg, oEvtlike)

_SPECIFIC:
click,
contextmenu,
DblClick,
drag,
dragdrop,
dragend,
draggesture,
dragover,
drop,
focusout,
keydown,
keypress,
keyup,
load,
mousedown,
mouseup,
paste,
reset,
* pwpEvtCmdCall,
* pwpEvtCmdCallBfr,
* pwpEvtCntGet,
* pwpEvtCntGetBfr,
* pwpEvtCntSave, // not dispatced
* pwpEvtCntSet,
* pwpEvtCntSetBfr,
* pwpEvtDraftRemove,
* pwpEvtDraftRestore,
* pwpEvtDraftStore,
* pwpEvtEdrContentSave,
* pwpEvtFormatsPreview,
* pwpEvtFormatsPreviewAfter,
* pwpEvtMenuitmFormatsRender,
* pwpEvtNodeChange,
* pwpEvtObjectResized,
* pwpEvtObjectResizeStart,
* pwpEvtObjectSelected,
* pwpEvtPgnPasteProcessPost,
* pwpEvtPgnPasteProcessPre,
* pwpEvtPgnViwBlocks,
* pwpEvtPgnViwCharInv,
* pwpEvtPhlAddControls,
* pwpEvtPhlChange,
* pwpEvtPhlInit,
* pwpEvtPhlInitBfr,
* pwpEvtPhlResize,
* pwpEvtProcessPost,
* pwpEvtProcessPre,
* pwpEvtRedo,
* pwpEvtResoleveName,
* pwpEvtUndo,
* pwpEvtUndoAdd,
* pwpEvtUndoAddBefore,
* pwpEvtUndosClear,
* pwpEvtUndoTyping,
* pwpEvtVisualaid,

oPgmWpg.fro1EvtDispatch()
- target oPgmWpg if NOT specified in argsIn.

pwpEvtEdrAdd:

EvtFormatsPreview

pwpEvtFormatsPreviewAfter

pwpEvtMenuitmFormatsRender:
* Listener: PgnImportcss

pwpEvtObjectResize

pwpEvtObjectResizeStart

pwpEvtPgnViwCharInv

pwpEvtPhlAddControls:

pwpEvtPhlInitBfr:
* executed BEFORE b1Initialized=true.

pwpalgo'PLUGIN

name::
* McsEngl.pwpalgo'PLUGIN@cptIt,
* McsEngl.pwp'plugin@cptIt,
* McsEngl.pwpalgo'PLUGIN@cptIt,
* McsEngl.pwpplugin@cptIt,
* McsEngl.phplugin@cptIt,
* McsEngl.pwp'plugin@cptIt,

* McsEngl.pwppgn@cptIt,
* McsEngl.phpgn@cptIt,

_GENERIC:
* pwpaddon#linkL#

_ADDRESS.WPG:
* http://www.tinymce.com/wiki.php/Plugins,
* http://www.tinymce.com/wiki.php/Tutorials:Creating_a_plugin,

_DESCRIPTION:
Plugins are CODE to add functionality to the-program, without changing the-program.
[hmnSngo.2015-05-10]
===
Plugins are a-method to add functionality in the program, without changing the program.
[hmnSngo.2015-05-10]

pwppgn'configuring

name::
* McsEngl.pwppgn'configuring@cptIt,
* McsEngl.pwpsCfgPlugins@cptIt,
* McsEngl.pwp'plugin'loading@cptIt,
* McsEngl.pwp'plugin'option@cptIt,
* McsEngl.pwpSetting.plugins@cptIt,

pwp'sCfgPlugins at oPgmWpg.f1Init1Cfg({}):
'PgnIstAnchor,PgnIstChar,pgnCode,PgnFmtColor,pgnContextmenu,PgnIstDatetime,pgnEmoticons,PgnFilCntDocProp,PgnHlpDoc,PgnIstHr,PgnIstImage,pgnLink,pgnListAdv,PgnIstNbsp,PgnIstVideo,PgnIstPagebreak,PgnViwPreview,PgnFilPrint,PgnFilSave,PgnFilSaveAuto,PgnEdtFindReplace,pgnTable,PgnIstTemplate,PgnViwBlocks,PgnViwCharInv,PgnViwDirection,pgnWordcount,autolink,lists,paste'
===
[
 ["advlist autolink link image lists charmap print preview hr anchor pagebreak spellchecker"],
 ["searchreplace wordcount visualblocks visualchars code fullscreen insertdatetime media nonbreaking"],
 ["save table contextmenu directionality emoticons template paste"]
],
===
plugins: [
"advlist autolink link image lists charmap print preview hr anchor pagebreak spellchecker",
"searchreplace wordcount visualblocks visualchars code fullscreen insertdatetime media nonbreaking",
"save table contextmenu directionality emoticons template paste textcolor"
],

_LOAD_FROM_ANY_LOCATION:
//at script before init()
//also add name at plugins_option:
tinymce.PluginManager.load('elfinder', '/D:/File1a/tinyMCE401Dev/js/tinymce/plugins/elfinder/plugin.min.js');

* pwpSetting.external_plugins
This option enables you to specify URLs to plugins outside the tinymce plugins directory. This option is useful when loading TinyMCE from a CDN or when you want to have the TinyMCE directory separate from your custom plugins.

Example

oPgmHtml.fMedInit({
...
plugins: "image link",
external_plugins: {
"myplugin": "/myplugins/myplugin.js"
}
});
[http://www.tinymce.com/wiki.php/Configuration:external_plugins]
===
external_plugins: {
"htmlp": "/D:/File1a/tinymcePlugin/htmlp/plugin.js"
},
[\PgmWEB\tinyMCE\tinymceDev\tinymce.dev.html]

pwppgn'creating

name::
* McsEngl.pwppgn'creating@cptIt,

tinymce.oManagerPlugin.add('print', function(editor) {
//create a command
editor.addCommand('fCmdPrint', function() {
editor.getWin().print();
});

//add a toolbar button
editor.fEdrAddButton('print', {
title: 'Print',
cmd: 'fCmdPrint'
});

//create a shortct for the command
editor.addShortcut('Ctrl+P', '', 'fCmdPrint');

//add a menuitem
editor.addMenuItem('print', {
text: 'Print',
cmd: 'fCmdPrint',
icon: 'print',
shortcut: 'Ctrl+P',
context: 'file'
});
});

pwppgn'error

name::
* McsEngl.pwppgn'error@cptIt,
* McsEngl.pwppgnerr@cptIt,
* McsEngl.pwp'error.plugin@cptIt,

eqneditor:
* destroys the saveAs command.

pwppgnerr.Failed_to_load: http://tinymce.cachefly.net/4.0/plugins/elfinder/plugin.min.js:
the plugin does not exist.

pwppgnerr.Failed_to_load_resource_file:
Failed to load resource file:///D:/File1a/tinyMCE401Dev/js/tinymce/plugins/mfm/plugin.js
Failed to load: file:///D:/File1a/tinyMCE401Dev/js/tinymce/plugins/mfm/plugin.js ScriptLoader.js:81
===>
plugin 'mfm' does not exists.

pwppgn'f-PluginInit

name::
* McsEngl.pwppgn'f-PluginInit@cptIt,

_DESCRIPTION:
It is a member of fEdrInit. Creates an oPlugin and adds it on oEdrPluginStore.

pwppgn'file-structure

name::
* McsEngl.pwppgn'file-structure@cptIt,

/tinymceroot/
* /js/
 * /tinymce/
   * /classes/
     * /dom/
     * /html/
     * /ui/
     * /util/
   * /langs/
   * /plugins/
     * /pluginfolder1/
       - plugin.js
       - plugin.min.js
     * /pluginfolder2/
   * /skins/
     * /lightgrey/
   * /themes/
     * /modern/
   - tinymce.js
   - tinymce.min.js
===
IF editor uses min.js THEN and the plugin uses the min.js file.

pwppgn'directory

name::
* McsEngl.pwppgn'directory@cptIt,
* McsEngl.pwp'directory.plugin@cptIt,
* McsEngl.pwp'plugin'file-location@cptIt,

1) in tinymceroot/js/tinymce/plugins/here/

2) anywhere, but add in editor.html:
You can also have the plugin in any location you want by loading the plugin.js/plugin.min.js files directrly after the tinymce.js/tinymce.min.js.
Example of loading the plugin from another url
<script src="/tinymce/js/tinymce.min.js"></script>
<script src="/scripts/my.tinymce.plugin.js"></script>
===
1) on editor.html:
- <script src="c:/public_html/tmceexample/plugin.js"></script>
- plugins: ["tmceexample"]
2) on plugin.js
- tinymce.PluginManager.add('tmceexample', function(editor, url) {

pwppgn'file.PLUGIN.JS

name::
* McsEngl.pwppgn'file.PLUGIN.JS@cptIt,
* McsEngl.pwp'plugin.js@cptIt,

_DESCRIPTION:
To create a plugin you need to create a directory in the tinymce plugins directory. TinyMCE will load the plugin.js file if you use the tinymce.js file in your page. If you use the tinymce.min.js file it will load the plugin.min.js file. It's recommended to use the tinymce.js file while developing then have a build script minifying the plugin.js into plugin.min.js for production usage.
[http://www.tinymce.com/wiki.php/Tutorials:Creating_a_plugin]

pwppgn'file.PLUGIN.MIN.JS

name::
* McsEngl.pwppgn'file.PLUGIN.MIN.JS@cptIt,
* McsEngl.pwp'plugin.min.js@cptIt,

_DESCRIPTION:
IF editor uses min.js THEN and the plugin uses the min.js file.

pwppgn'function

name::
* McsEngl.pwppgn'function@cptIt,
* McsEngl.pwpPluginfcn@cptIt,

_DESCRIPTION:
When we add a-plugin to plugin-manager, we add its name and its function:
oPgmHtml.oMgrAddonPlugin.fMdnAdd('pgnCharmap', function(oEditorIn) {
[hmnSngo.2015-04-27]

pwppgn'parameter

name::
* McsEngl.pwppgn'parameter@cptIt,

tinymce.oManagerPlugin.add('visualblocks', function(editor, url) {}):
* editor: is the tinymce.oEditorActive
* url: is the directory the plugin resides.

pwppgn'url

name::
* McsEngl.pwppgn'url@cptIt,

pwppgn'manager

name::
* McsEngl.pwppgn'manager@cptIt,
* McsEngl.pwpPluginmanager@cptIt,
* McsEngl.pwppgn'oMgrAddonPlugin@cptIt,

_DESCRIPTION:
oPgmHtml.oMgrAddonPlugin = new oPgmHtml.fMgrAddon();

pwppgn'name

name::
* McsEngl.pwppgn'name@cptIt,
* McsEngl.pwpPluginname@cptIt,

_DESCRIPTION:
PgnName, CmdName, IcnName will be the same.
[hmnSngo.2015-12-23]
===
The name must be the same with the directory in which resides:
js/tinymce/plugins/name/

file:plugin.js:
tinymce.PluginManager.add('NAME', function(editor, url) {

oPgmHtml.fMedInit():
plugins: [ ["NAME advlist anchor autolink charmap code contextmenu directionality "]],
toolbar2: "NAME code | emoticons",

pwppgn'renaming

name::
* McsEngl.pwppgn'renaming@cptIt,

_DESCRIPTION:
1) rename the directory of plugin:
js/plugins/charmap/ => js/plugins/pgnCharmap
2) rename its name IN its file:
oPgmHtml.oMgrAddonPlugin.fMdnAdd('pgnCharmap', function(oEditorIn) {
3) rename on pgmHtml initialization:
oPgmHtml.fMedInit({
sEdrPlugins: 'advlist,anchor,autolink,autosave,pgnCharmap,code,...

pwppgn'object

name::
* McsEngl.pwppgn'object@cptIt,
* McsEngl.pwpoPlugin@cptIt,

_SPECIFIC:
* oPgmWpg.o1MgrAddonPgn.fMdnAdd('PgnFilPrint', function(o1CntIn) {
});

pwppgn'object-of-plugin

name::
* McsEngl.pwppgn'object-of-plugin@cptIt,
* McsEngl.pwpoPlugin@cptIt,

_DESCRIPTION:
oPlugin is an object created by a-pluginfunction.
f_PluginInit, member of fEdrInit, creates an oPlugin and adds it on oEdrPluginStore.

pwppgn'store

name::
* McsEngl.pwppgn'store@cptIt,

oPgmWpg.o1Store.oStorePlugin

name::
* McsEngl.oPgmWpg.o1Store.oStorePlugin@cptIt,
* McsEngl.pwpoStorePlugin@cptIt,

_DESCRIPTION:
Stores sPlugin/oPlugin pairs.
[hmnSngo.2015-04-13]
===
* // Execute a method inside a plugin directly
* oPgmHtml.oMedEditorActive.oEdrPluginStore.sPlugin.fSome();

oStorePlugin:
* PgnEdtFindReplace
* PgnFilCntDocProp
* PgnFilPrint
* PgnFilSave
* PgnFilSaveAuto
* PgnFmtColor
* PgnHlpDoc
* PgnIstAnchor
* PgnIstChar
* PgnIstDatetime
* PgnIstHr
* PgnIstImage
* PgnIstNbsp
* PgnIstPagebreak
* PgnIstTemplate
* PgnIstVideo
* PgnViwBlocks
* PgnViwCharInv
* PgnViwDirection
* PgnViwPreview
* autolink
* lists
* paste
* pgnCode
* pgnEmoticons
* pgnLink
* pgnListAdv
* pgnTable
* pgnWordcount

SPECIFIC

name::
* McsEngl.pwp'plugin.specific@cptIt,

_SPECIFIC:
* advlist
* anchor
* autolink
* autoresize
* autosave
* bbcode
* charmap
* code
* compat3x
* contextmenu
* directionality
* emoticons
* filemanager
* fullpage
* fullscreen
* hr
* image
* insertdatetime
* layer
* legacyoutput
* link
* lists
* media
* nonbreaking
* noneditable
* pagebreak
* paste
* preview
* print
* save
* searchreplace
* spellchecker
* tabfocus
* table
* template
* textcolor
* visualblocks
* visualchars
* wordcount

pwppgn.advlist

name::
* McsEngl.pwppgn.advlist@cptIt,
* McsEngl.advancedlist-plugin@cptIt,
* McsEngl.pwp'advlist-plugin@cptIt,

_DESCRIPTION:
Creates the bullet and number list BUTTONS.
===
This plugin adds more advanced options to the ordered and unordered list buttons.
[http://www.tinymce.com/wiki.php/Plugin:advlist]

pwppgn.anchor

name::
* McsEngl.pwppgn.anchor@cptIt,
* McsEngl.pwp'anchor-plugin@cptIt,

_DESCRIPTION:
Inserts <a id="name" class="class-name"></a> on carret, NOT AT BLANK LINE.
<p><a id="idAnchorP" class="class"></a>Your content here.</p>

pwppgn.autolink

name::
* McsEngl.pwppgn.autolink@cptIt,
* McsEngl.pwp'autolink-plugin@cptIt,

_DESCRIPTION:
Creates links automatically when we type 'www.xxx.com'
[http://www.tinymce.com/wiki.php/plugin:autolink]

pwppgn.autoresize

name::
* McsEngl.pwppgn.autoresize@cptIt,
* McsEngl.pwp'autoresize-plugin@cptIt,

_DESCRIPTION:
* This plugin automatically resizes the content area to fit its content height.
* It will retain a minimum height, which is the height of the content area when
* it's initialized.

pwppgn.autosave

name::
* McsEngl.pwppgn.autosave@cptIt,
* McsEngl.pwp'autosave-plugin@cptIt,

_DESCRIPTION:
Add on file-menu, 'restore last draft' menuitem.

pwppgn.4.0

name::
* McsEngl.pwppgn.4.0@cptIt,

_SPECIFIC:
Removed plugins
These plugins where removed in 4.0: advhr, advimage, advlink, iespell, inlinepopups, style, emotions and xhtmlxtras.

New plugins
These are the new plugins in 4.0: anchor, charmap, compat3x, hr, image, link, emoticons, code and textcolor.
[http://www.tinymce.com/wiki.php/Tutorial:Migration_guide_from_3.x]

pwppgn.bbcode

name::
* McsEngl.pwppgn.bbcode@cptIt,
* McsEngl.pwp'bbcode-plugin@cptIt,

_DESCRIPTION:
holds the source in bbcode format.

pwppgn.charmap

name::
* McsEngl.pwppgn.charmap@cptIt,
* McsEngl.pwp'charmap-plugin@cptIt,

_DESCRIPTION:
Inserts special-characters.

pwppgn.code

name::
* McsEngl.pwppgn.code@cptIt,
* McsEngl.pwp'code-plugin@cptIt,

_DESCRIPTION:
displays the source html code.

pwppgn.codemagic

name::
* McsEngl.pwppgn.codemagic@cptIt,

_ADDRESS.WPG:
* https://github.com/tinymce-plugins/codemagic,
* http://tinymcesupport.com/premium-plugins/code-magic,

pwppgn.codemirror

name::
* McsEngl.pwppgn.codemirror@cptIt,

_ADDRESS.WPG:
* http://www.avoid.org/codemirror-for-tinymce4//

_DESCRIPTION:
Needs chrome to run on 'chrome.exe --allow-file-access-from-files'

pwppgn.improvedcode

name::
* McsEngl.pwppgn.improvedcode@cptIt,

_ADDRESS.WPG:
* https://github.com/aguvillalba/improvedcode,

pwppgn.emoticons

name::
* McsEngl.pwppgn.emoticons@cptIt,
* McsEngl.pwp'emoticons-plugin@cptIt,

_DESCRIPTION:
inserts emotions.

pwppgn.EQUATION-EDITOR

name::
* McsEngl.pwppgn.EQUATION-EDITOR@cptIt,
* McsEngl.pwp'eqneditor-plugin@cptIt,
* McsEngl.pwp'plugin.eqneditor@cptIt,

_ADDRESS.WPG:
* http://www.codecogs.com/latex/integration/tinymce_v4/install.php,

_DESCRIPTION:
Inserts equations as ONLINE images from codecogs.

_PROBELM.TMCE:
I increased timeout from 111 to 555 in order to work.

pwppgn.PgnCntDocProp

name::
* McsEngl.pwppgn.PgnCntDocProp@cptIt,
* McsEngl.pwppgn.fullpage@cptIt,
* McsEngl.pwp'fullpage-plugin@cptIt,

_DESCRIPTION:
This plugin adds fullpage editing support. This enables you to edit whole documents with both head and body.
[http://www.tinymce.com/wiki.php/Plugin:fullpage]
===
* support full page html and not for one element in it.

_USAGE:
oPgmHtml.fMedInit({
plugins: "fullpage",
toolbar: "fullpage"
});

_OPTION:
Plugin options
Name  Summary
[pwp'fullpage_default_doctype]  This option enables you to specify the default doctype for the output HTML.
[pwp'fullpage_default_encoding]  This option enables you to specify the default encoding for the output HTML.
[pwp'fullpage_default_title]  This option enables you to specify the default title for the output HTML.
[pwp'fullpage_default_font_size]  This option enables you to specify the default font size for body element.
[pwp'fullpage_default_font_family]  This option enables you to specify the default font family for body element.
[pwp'fullpage_default_text_color]  This option enables you to specify the default text color for body element.
[pwp'fullpage_default_langcode]  This option enables you to specify the default langcode for the output HTML.
[pwp'fullpage_default_xml_pi]  This option enables you to specify if a XML declaration should be added or not true/false option.
pwp'fullpage_hide_in_source_view  Hides the non body content from source view.

oData:
* active_color: ""// alink att
* author: "",
* description: "",
* docencoding: "",
* doctype: "<!DOCTYPE html>"
* fontface: ""
* fontsize: ""
* keywords: "",
* langcode: "" //lang , xml:lang
* langdir: ""
* link_color: "" // link att
* robots: "",
* style: ""
* title: "title"}
* visited_color: "" // vlink att

pwppgn.fullscreen

name::
* McsEngl.pwppgn.fullscreen@cptIt,
* McsEngl.pwp'fullscreen@cptIt,
* McsEngl.pwp'fullscreen-plugin@cptIt,
* McsEngl.pwp'code.fullscreen@cptIt,

_CODE.PWP:
int():
init_instance_callback: function (editor) {
setTimeout("tinymce.activeEditor.execCommand('mceFullScreen')", 100);
}
[stackoverflow]

pwppgn.GENERIC

name::
* McsEngl.pwppgn.GENERIC@cptIt,

pwppgn.generic.CONTENT.HTML

name::
* McsEngl.pwppgn.generic.CONTENT.HTML@cptIt,

_SPECIFIC:
* legacyoutput, outputs font, b, ##

pwppgn.generic.CONTENT.INSERT

name::
* McsEngl.pwppgn.generic.CONTENT.INSERT@cptIt,
* McsEngl.pwp'insert-content-plugin@cptIt,

_SPECIFIC:
* charmap, inserts special characters##
* emoticons,##
* example, inserts a paragraph with 'Title: ' prefix##
* hr,##
* image,##
* insertdatetime##
* link##
* pagebreak, inserts paragraph##

pwppgn.generic.CONTENT.STYLE

name::
* McsEngl.pwppgn.generic.CONTENT.STYLE@cptIt,

_SPECIFIC:

pwppgn.generic.USER-INTERFACE

name::
* McsEngl.pwppgn.generic.USER-INTERFACE@cptIt,

_SPECIFIC:
* visualblocks, shows blocks##

pwppgn.image

name::
* McsEngl.pwppgn.image@cptIt,
* McsEngl.pwp'image-plugin@cptIt,

_DESCRIPTION:
This plugin adds a insert image button and menu item.

Initialization Example
oPgmHtml.fMedInit({
plugins: "image",
image_list: [
{title: 'My image 1', value: 'http://www.tinymce.com/my1.gif'},
{title: 'My image 2', value: 'http://www.moxiecode.com/my2.gif'}
]
});

Plugin options
Name  Summary
pwp'image_list  Array with items to add to a list with images. Each item having "title" and "value".
pwp'image_advtab  True/false option if the advanced tab should be displayed or not.
[http://www.tinymce.com/wiki.php/Plugin:image]

pwppgn.PgnIstTime

name::
* McsEngl.pwppgn.PgnIstTime@cptIt,
* McsEngl.pwp'insertdatetime-plugin@cptIt,
* McsEngl.pwp'date@cptIt,
* McsEngl.pwp'time@cptIt,

_DESCRIPTION:
* I customized the code to insert "2013-06-28".

insertdatetimeEdit wiki pagePage revisionsPrint
Initialization Example

oPgmHtml.fMedInit({
plugins: "insertdatetime",
toolbar: "insertdate inserttime",
plugin_insertdate_dateFormat: "%Y-%m-%d",
plugin_insertdate_timeFormat: "%H:%M:%S"
});


Plugin options
Name  Summary
pwp'plugin_insertdate_dateFormat  Format that the date is output as. Defaults to: "%Y-%m-%d".
pwp'plugin_insertdate_timeFormat  Format that the time is output as. Defaults to: "%H:%M:%S".

Replacement variables
Name  Summary
%D  mm/dd/yy (same as %m/%d/%y)
%r  12-hour clock time hh:mm:ss with AM or PM (same as %I:%M:%S %p)
%y  year as a decimal number without a century (range 00 to 99)
%Y  year as a decimal number including the century
%m  month as a decimal number (range 01 to 12)
%B  full localised month name (e.g. "January")
%b  abbreviated localised month name (e.g. "Jan")
%d  day of the month as a decimal number (range 01 to 31)
%A  full localised weekday name (e.g. "Monday")
%a  abbreviated localised weekday name (e.g. "Mon")
%H  hour as a decimal number using a 24-hour clock (range 00 to 23)
%I  hour as a decimal number using a 12-hour clock (range 01 to 12)
%M  minute as a decimal number (range 00-59)
%S  second as a decimal number (range 00-59)
%p  either "am" or "pm" according to the given time value
%%  a literal "%" character
[http://www.tinymce.com/wiki.php/Plugin:insertdatetime]

pwppgn.link

name::
* McsEngl.pwppgn.link@cptIt,
* McsEngl.pwp'link-plugin@cptIt,

This plugin adds a menu item and button that enables you to insert links to text and images.

Initialization Example

oPgmHtml.fMedInit({
plugins: "link",
link_list: [
{title: 'My page 1', value: 'http://www.tinymce.com'},
{title: 'My page 2', value: 'http://www.moxiecode.com'}
]
});
Plugin options

Name  Summary
link_list  Array with items to add to a list with links. Each item having "title" and "value".
target_list  Array with items to add to a list with targets. Each item having "title" and "value".
rel_list  Array with items to add to a list with rel options. Each item having "title" and "value".
[http://www.tinymce.com/wiki.php/Plugin:link]

pwppgn.lists

name::
* McsEngl.pwppgn.lists@cptIt,
* McsEngl.pwp'lists-plugin@cptIt,

_DESCRIPTION:
ol, ul, management. Add commands insert list ...

pwppgn.media

name::
* McsEngl.pwppgn.media@cptIt,
* McsEngl.pwp'media-plugin@cptIt,

_DESCRIPTION:
'insert video' menuitem.

pwppgn.pagebreak

name::
* McsEngl.pwppgn.pagebreak@cptIt,
* McsEngl.pwp'pagebreak-plugin@cptIt,

_DESCRIPTION:
Adds pagebreak support, some CMS systems uses a special separator to break the contents into pages. This plugin enables you to insert such page breaks in the editor.

Initialization Example
oPgmHtml.fMedInit({
plugins: "pagebreak",
pagebreak_separator: "<!-- my page break -->"
});
[pagebreak_separator]  Enables you to specify how the page break should be generated in the HTML source code.
[http://www.tinymce.com/wiki.php/Plugin:pagebreak]

_OPTION:
* pwpSetting.pagebreak_separator
[pagebreak_separator]  Enables you to specify how the page break should be generated in the HTML source code.
===
inserts a p-element with content the value of this variable.
[hmnSngo.2013-10-05]

_FILE:
* \PgmWEB\tinyMCE\tinymce407Dev\js\tinymce\plugins\pagebreak\plugin.js,

pwppgn.preview

name::
* McsEngl.pwppgn.preview@cptIt,
* McsEngl.pwp'preview-plugin@cptIt,

_DESCRIPTION:
Opens a non editable window with the content of the page.

pwppgn.save

name::
* McsEngl.pwppgn.save@cptIt,
* McsEngl.pwp'save-plugin@cptIt,

_ADDRESS.WPG:
* http://www.tinymce.com/forum/viewtopic.php?id=11281,
* http://stackoverflow.com/questions/13660978/saving-tinymce-textarea-content-to-file,
* http://stackoverflow.com/questions/15772441/tinymce-implementation-with-php?rq=1,
* http://stackoverflow.com/questions/5430543/trying-to-get-the-text-written-inside-a-tinymce-textarea?rq=1,
* http://stackoverflow.com/questions/4022002/saving-tinymce-contect-via-ajax-as-part-of-a-larger-form,

_DESCRIPTION:
This plugin adds a save button to TinyMCE this save button will submit the form that the editor is within.
[http://www.tinymce.com/wiki.php/Plugin:save]

_OPTION:
[pwp'save_enablewhendirty]  If you set this option to true, the edit button will be disabled/dimmed until modifications are made. This is disabled by default.
[pwp'save_onsavecallback]  This option enables you to add a custom function to be called when the save button/command is invoked. This is not used by default.
[pwp'save_oncancelcallback]  This option enabled you to add a custom function to be called when the cancel button/command is invoked. This is not used by default.

_USAGE:
oPgmHtml.fMedInit({
plugins: "save",
toolbar: "save",
save_enablewhendirty: true,
save_onsavecallback: function() {console.log("Save");}
});

pwppgn.searchreplace

name::
* McsEngl.pwppgn.searchreplace@cptIt,
* McsEngl.pwp'searchreplace-plugin@cptIt,

pwppgn.spellchecker

name::
* McsEngl.pwppgn.spellchecker@cptIt,
* McsEngl.pwp'spellchecker-plugin@cptIt,

_ADDRESS.WPG:
* http://www.tinymce.com/wiki.php/plugin:spellchecker,

nanospell

//spellchecker_rpc_url: "http://localhost/nanospell/server/ajax/php/tinyspell.php",
//external_plugins: {"nanospell": "http://localhost/nanospell/plugin.js"},
//nanospell_server: 'php', // choose "php" "asp" "asp.net"
//nanospell_dictionary: 'en', // download 23 more at http://tinymcespellcheck.com/dictionaries
//nanospell_ignore_words_with_numerals: true,
//nanospell_autostart: true,
//nanospell_ignore_block_caps: false,
//nanospell_compact_menu: false,

pwppgn.template

name::
* McsEngl.pwppgn.template@cptIt,
* McsEngl.pwp'template-plugin@cptIt,

_ADDRESS.WPG:
* https://github.com/Xesenix/tinymce-advanced-template-example,

_DESCRIPTION:
This plugin adds support for custom templates. There are two types of files this plugin supports: templates and snippets.

Plugin options
Name  Summary
templates  Array with template items each having a title, description and content.
template_cdate_classes  A list of class names separated by spaces. Any template element with one of the classes will have its content replaced by the 'creation' date, formatted according to the 'template_cdate_format' option. A creation date is one that is set if no previous date existed within the element. Once set the original date is stored inside the element in a HTML comment and is designed not to change even with a template change.
template_mdate_classes  A list of class names separated by spaces. Any template element with one of the classes will have its content replaced by the 'modified' date, formatted according to the 'template_mdate_format' option. A modified date is one that is updated with each edit.
template_cdate_format  A date format string for the creation date see below for options.
template_mdate_format  A date format string for the modified date see below for options.
template_selected_content_classes  A list of class names separated by spaces. Any template element with one of the classes will have its content replaced by the selected editor content when first inserted.
template_replace_values  This is an array of items that control content replacement in the inserted templates. The array keys equal the classnames used in the template. If a template element has a classname matching any in this array its contents will be replaced by the array value. See examples below.
template_popup_width  Template dialog width, defaults to 700.
template_popup_height  Template dialog height, defaults to 600.

Replace values example
Class names are used for templates and variable names are used for snippets.

template_replace_values : {
className : "Replace with this content",
anotherClassName: "Replacement content"
}
Replace values (functions) example

Replace content array values can also be functions. If a template element has a classname matching and the value is a fuction the function is called and the element passed as an argument.

template_replace_values : {
className : function(element) {
// do something and then:
// element.innerHTML = something
}
}
Templates example

template_templates : [
{
title : "Editor Details",
src : "editor_details.htm",
description : "Adds Editors Name and Staff ID"
}
]
Example of an external list

This is the contents your backend page should return if you specify a URL using the template_external_list_url option. A simple array containing each template to present. This URL can be a backend page, for example a PHP file.

var tinyMCETemplateList = [
// Name, URL, Description
["Simple snippet", "templates/snippet1.htm", "Simple HTML snippet."],
["Layout", "templates/layout1.htm", "HTML Layout."]
];
Making Snippets

Snippets are HTML code chunks that can be inserted. Replace variables will only be executed upon insert, without being wrapped in a template DIV element. So if you define somevar1 in template_replace_values array it will be replaced on preview and insert.

This is a simple <strong>snippet</strong>. Will be replaced: {$somevar1}.
Making Templates

A template is a file with DIV containing the template data. All HTML outside the DIV will simply be presented to the user in the preview frame. A template has more capabilities than a simple snippet, a template can have dynamic content/smart content that gets updated by functions located in the template_replace_values. These functions will continue to be executed each time a cleanup procedure is performed.

Each template needs to use the following base HTML:

<!-- This will not be inserted -->
<div class="mceTmpl">
<table width="98%%" border="0" cellspacing="0" cellpadding="0">
<tr>
<th scope="col"> </th>
<th scope="col"> </th>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
</table></div>
Initialization Example

oPgmHtml.fMedInit({
plugins: "template",
toolbar: "template",

template_cdate_classes: "cdate creationdate",
template_mdate_classes: "mdate modifieddate",
template_selected_content_classes: "selcontent",
template_cdate_format: "%m/%d/%Y : %H:%M:%S",
template_mdate_format: "%m/%d/%Y : %H:%M:%S",
template_replace_values: {
username : "Jack Black",
staffid : "991234"
},
templates : [
{
title: "Editor Details",
url: "editor_details.htm",
description: "Adds Editor Name and Staff ID"
},
{
title: "Timestamp",
url: "time.htm",
description: "Adds an editing timestamp."
}
]
});
[http://www.tinymce.com/wiki.php/Plugin:template]

pwppgn.textcolor

name::
* McsEngl.pwppgn.textcolor@cptIt,
* McsEngl.pwp'textcolor-plugin@cptIt,

_DESCRIPTION:
Defines the buttons forecolor and backcolor.

pwppgn.visualblocks

name::
* McsEngl.pwppgn.visualblocks@cptIt,
* McsEngl.pwp'visualblocks-plugin@cptIt,

_DESCRIPTION:
* command: view/show blocks

pwppgn.visualchars

name::
* McsEngl.pwppgn.visualchars@cptIt,
* McsEngl.pwp'visualchars-plugin@cptIt,

_DESCRIPTION:
This plugin adds the possibility to see invisible characters like  . Installation
Initialization Example
oPgmHtml.fMedInit({
plugins: "visualchars",
toolbar: "visualchars"
});
[http://www.tinymce.com/wiki.php/Plugin:visualchars]

pwpalgo'USER-INTERFACE

name::
* McsEngl.pwpalgo'USER-INTERFACE@cptIt,
* McsEngl.pwpalgo'USER-INTERFACE@cptIt,
* McsEngl.pwpalgo.user-interface@cptIt,
* McsEngl.pwpUi@cptIt,
* McsEngl.phUi@cptIt,
* McsEngl.pwp'ui-code@cptIt,
* McsEngl.pwp'user-interface@cptIt,

_DESCRIPTION:
Ui is all the-entities the-program uses to interact with the-user.
[hmnSngo.2016-04-14]
===
The ui of the program is composed of 4 bars.
1) barMenu
2) barTool
3) barContent
4) barStatus
[hmnSngo.2015-05-22]

pwp'program-container

name::
* McsEngl.pwp'program-container@cptIt,

_DESCRIPTION:
The-program has a-container which is divided into 4 parts (bars):
* menubar
* toolbar
* contentbar
* statusbar#ql:phlstatusbar#

pwp'barMenu

name::
* McsEngl.pwp'barMenu@cptIt,
* McsEngl.pwpbarMenu@cptIt,
* McsEngl.phMenubar@cptIt,
* McsEngl.pwp'menu'menubar@cptIt,

_DESCRIPTION:
The menubar contains menubaritems which contain menuitems.
[hmnSngo.2015-05-10]
===
It is the bar that contains the menu: file, edit, ...

pwpSetting.menubar:
This option allows you to configure the menus you want to appear in the menu bar.

// Disable all menus
oPgmHtml.fMedInit({
bEdrBarMenu: false
});

// Configure different order
oPgmHtml.fMedInit({
sEdrBarMenu: "tools table format view insert edit"
});
[http://www.tinymce.com/wiki.php/Configuration:menubar]

pwp'oEdrMenuitemobtStore

name::
* McsEngl.pwp'oEdrMenuitemobtStore@cptIt,

{ miName1:{}, miName2:{}}

oPgmHtml.oMedEditorActive.oEdrStoreMenuitem
Object {newdocument: Object, undo: Object, redo: Object, visualaid: Object, cut: Object…}
bold: Object onclick: () {sICrlCmd: "Bold"sICrlIcon: "bold"sICrlSct: "ctrl+B"sICrlText: "Bold"__proto__: Object cell: Object charmap: Object code: Object column: Object copy: Object cut: Object deletetable: Object example: Object formats: Object fullpage: Object hr: Object image: Object insertdatetime: Object inserttable: Object italic: Object link: Object media: Object mimAnchor: Object newdocument: Object nonbreaking: Object pagebreak: Object paste: Object pastetext: Object preview: Object print: Object redo: Object removeformat: Object restoredraft: Object row: Object searchreplace: Object selectall: Object strikethrough: Object subscript: Object superscript: Object tableprops: Object template: Object underline: Object undo: Object visualaid: Object visualblocks: Object visualchars: Object__proto__: ObjectpgmHtml.js:7336 id111

pwp'menubaritem

name::
* McsEngl.pwp'menubaritem@cptIt,

_DESCRIPTION:
Configure what items should appear in the menu this option overrides the whole menu so you need to configure all the items back in. Check the controls list for all available items.

Example
oPgmHtml.fMedInit({
menu: {
file: {title: 'File', items: 'newdocument'},
edit: {title: 'Edit', items: 'undo redo | cut copy paste | selectall'},
insert: {title: 'Insert', items: '|'},
view: {title: 'View', items: 'visualaid'},
format: {title: 'Format', items: 'bold italic underline strikethrough superscript subscript | formats | removeformat'},
table: {title: 'Table'},
tools: {title: 'Tools'}
}
});
[http://www.tinymce.com/wiki.php/Configuration:menu]

pwp'menu'items:
format: {title: 'Format', items: 'bold italic underline strikethrough superscript subscript | formats | removeformat'},
file: {title: 'File', items: 'newdocument'},

pwp'menu'title:
file: {title: 'File', items: 'newdocument'},

_SPECIFIC:
* file, edit, insert, view, format, table, tools,

pwp'menuitem

name::
* McsEngl.pwp'menuitem@cptIt,
* McsEngl.pwpsubmenu@cptIt,
* McsEngl.pwp'menubar-control@cptIt,
* McsEngl.pwp'menubar-item@cptIt,
* McsEngl.pwp'menuitem@cptIt,
* McsEngl.pwp'mnitem@cptIt,

* McsEngl.pwpmni@cptIt, {2015-10-08}
* McsEngl.pwpmim@cptIt,

_DESCRIPTION:
Menuitem is a-menu INSIDE another one.
[hmnSngo.2015-03-10]

_MEMBER:
aoICrlMenu
onhide
selectable
separator,
sICrlSelectorState

pwpmni'adding

name::
* McsEngl.pwpmni'adding@cptIt,
* McsEngl.pwp'fEdrAddMenuitem@cptIt,
* McsEngl.pwp'addMenuItem@cptIt,
* McsEngl.pwp'menuitem'creating@cptIt,

_CODE.PWP:
oEditor.fEdrAddMenuitem('newdocument', {
text: 'New document',
shortcut: 'Ctrl+N',
icon: 'newdocument',
cmd: 'mceNewDocument'
});
===
 editor.addMenuItem('pluginname', {
   text: 'Document properties',
   cmd : 'mceFullPageProperties',
   context: 'file' //the menu to appean
 });

pwp'menuitem'context:
_DESCRIPTION:
The menubar-item on which it is part.
===
context: 'file' //the menu to appean

pwpmni'aoICrlMenu

name::
* McsEngl.pwpmni'aoICrlMenu@cptIt,

pwpmni'bICrlActive

name::
* McsEngl.pwpmni'bICrlActive@cptIt,

pwpmni'bICrlPrepend-to-context

name::
* McsEngl.pwpmni'bICrlPrepend-to-context@cptIt,

pwpmni'bICrlSelectable

name::
* McsEngl.pwpmni'bICrlSelectable@cptIt,

mimBlocksShow

pwpmni'onclick

name::
* McsEngl.pwpmni'onclick@cptIt,

pwp'menuitem'onclick:
onclick: fShowDialog,

pwpmni'onhide

name::
* McsEngl.pwpmni'onhide@cptIt,

pwpmni'onpostrender

name::
* McsEngl.pwpmni'onpostrender@cptIt,

pwpmni'sICrlCmd

name::
* McsEngl.pwpmni'sICrlCmd@cptIt,

pwp'menuitem'cmd:
cmd : 'mceFullPageProperties',

pwpmni'sICrlIcon

name::
* McsEngl.pwpmni'sICrlIcon@cptIt,

pwp'menuitem'icon:

pwpmni'sICrlMenubaritem

name::
* McsEngl.pwpmni'sICrlMenubaritem@cptIt,

pwpmni'sICrlSelectorState

name::
* McsEngl.pwpmni'sICrlSelectorState@cptIt,

mimLink

pwpmni'sICrlSeparator

name::
* McsEngl.pwpmni'sICrlSeparator@cptIt,

pwpmni'sICrlShortcut

name::
* McsEngl.pwpmni'sICrlShortcut@cptIt,

pwp'menuitem'shortcut:
shortcut: 'Ctrl+N',

pwpmni'sICrlText

name::
* McsEngl.pwpmni'sICrlText@cptIt,

pwp'menuitem'text:

_DESCRIPTION:
Contains the-text displayed in the-menuitem.

pwpmni'sICrlType

name::
* McsEngl.pwpmni'sICrlType@cptIt,

_SPECIFIC:
* fccwmenuitem: mimLink, mimRow

SPECIFIC

* pwpmni.specific, pwpmenuitem.specific,

_SPECIFIC:
* pwpmni.anchor (anchor_plugin):
* pwpmni.bold (core):
* pwpmni.cell.toolbar (table_plugin):
* pwpmni.charmap (charmap_plugin):
* pwpmni.code (code_plugin):
* pwpmni.column.toolbar (table_plugin):
* pwpmni.copy (core):
* pwpmni.cut (core):
* pwpmni.deletetable.toolbar (table_plugin):
* pwpmni.formats (core):
* pwpmni.fullscreen (fullscreen_plugin):
* hr (hr_plugin):
* pwpmni.image (image_plugin):
* pwpmni.insertdatetime (insertdatetime_plugin):
* pwpmni.inserttable.toolbar (table_plugin):
* pwpmni.italic (core):
* pwpmni.link (link_plugin):
* pwpmni.media (media_plugin):
* pwpmni.newdocument (core):
* pwpmni.nonbreaking (nonbreaking_plugin):
* pwpmni.pagebreak (pagebreak_plugin):
* pwpmni.paste (pastetext_plugin):
* pwpmni.paste (core):
* pwpmni.preview (preview_plugin):
* pwpmni.print (print_plugin):
* pwpmni.redo (core):
* pwpmni.removeformat (core):
* pwpmni.row.toolbar (table_plugin):
* pwpmni.searchreplace (searchreplace_plugin):
* pwpmni.selectall (core):
* pwpmni.spellchecker (spellchecker_plugin):
* pwpmni.strikethrough (core):
* pwpmni.subscript (core):
* pwpmni.superscript (core):
* pwpmni.tableprops.toolbar (table_plugin):
* pwpmni.underline (core):
* pwpmni.undo (core):
* pwpmni.visualaid (core):
* pwpmni.visualblocks (visualblocks_plugin):
* pwpmni.visualchars (visualchars_plugin):

pwp'barTool

name::
* McsEngl.pwp'barTool@cptIt,
* McsEngl.pwpbarTool@cptIt,
* McsEngl.pwptoolbar@cptIt,

_DESCRIPTION:
It is

_CODE.PWP:
//\public_html\drPgmWpg\pgm\index.html
sCfgToolbar1: 'save undo redo | eqneditor forecolor backcolor | styleselect fontselect fontsizeselect | bold italic underline | alignleft aligncenter alignright alignjustify | timListBullet btnNumlist | link image preview emoticons',

pwp'oEdrStoreToolitem

name::
* McsEngl.pwp'oEdrStoreToolitem@cptIt,
* McsEngl.pwp'oEdrToolitemStore@cptIt,
* McsEngl.oPgmWpg.o1Edr.oEdrStoreToolitem@cptIt,

_CODE.PWP:
> oPgmHtml.oMedEditorActive.oEdrToolitemStore
aligncenter: Object
alignjustify: Object
alignleft: Object
alignright: Object
backcolor: Object
blockquote: Object
bold: Object
btnNumlist: Object
cancel: Object
charmap: Object
code: Object
copy: Object
cut: Object
emoticons: Object
fontselect: ()
fontsizeselect: ()
forecolor: Object
formatselect: ()
fullpage: Object
help: Object
hr: Object
image: Object
indent: Object
inserttime: Object
italic: Object
link: Object
ltr: Object
media: Object
nonbreaking: Object
outdent: Object
pagebreak: Object
paste: Object
pastetext: Object
preview: Object
print: Object
redo: Object
removeformat: Object
restoredraft: Object
rtl: Object
sCmdDocNew: Object
save: Object
searchreplace: Object
selectall: Object
strikethrough: Object
styleselect: Object
subscript: Object
superscript: Object
table: Object
template: Object
timAnchor: Object
timListBullet: Object
underline: Object
undo: Object
unlink: Object
visualaid: Object
visualblocks: Object
visualchars: Object
__proto__: Object

pwp'toolitem

name::
* McsEngl.pwp'toolitem@cptIt,
* McsEngl.pwp'control.toolbar@cptIt,
* McsEngl.pwp'tlitem@cptIt,
* McsEngl.pwp'toolbar-control@cptIt,
* McsEngl.pwp'toolbar-item@cptIt,
* McsEngl.pwp'toolbar-button@cptIt,
* McsEngl.pwp'toolitem@cptIt,
* McsEngl.pwptoolitem@cptIt,

* McsEngl.pwptli@cptIt,
* McsEngl.pwpTim@cptIt,

pwptli'adding

name::
* McsEngl.pwptli'adding@cptIt,
* McsEngl.pwp'fEdrAddButton@cptIt,
* McsEngl.pwp'addButton@cptIt,
* McsEngl.pwp'toolitem'creating@cptIt,

_CODE.PWP:
oEditorIn.fEdrToolitemAdd('timAnchor', {
sICrlIcon: 'anchor',
sICrlTooltip: 'Anchor',
onclick: fShowDialog,
sICrlSelectorState: 'a:not([href])'
});
===
 editor.addButton('hr', {
   icon: 'hr',
   tooltip: 'Horizontal line',
   cmd: 'InsertHorizontal_line'
 });
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\plugins\hr\plugin.js]

pwp'toolitem'cmd:

pwp'toolitem'icon:

pwp'toolitem'onPostRender:
onPostRender: fCreateHandlerChange(items, 'fontsize'),

pwp'toolitem'tooltip:

pwptli'aICrlItems

name::
* McsEngl.pwptli'aICrlItems@cptIt,

_DESCRIPTION:
IF type fccwbmenu, THEN this member contains the-submenuitems, ex. timFormats.

pwptli'aoICrlMenu

name::
* McsEngl.pwptli'aoICrlMenu@cptIt,

timTable

pwptli'bICrlActive

name::
* McsEngl.pwptli'bICrlActive@cptIt,

timPasttext

pwptli'name

name::
* McsEngl.pwptli'name@cptIt,

_CODE.PWP:
oEditor.fEdrToolitemAdd('timListBullet', {

pwptli'oICrlItemDefaults

name::
* McsEngl.pwptli'oICrlItemDefaults@cptIt,

timFormats.

pwptli'oICrlPanel

name::
* McsEngl.pwptli'oICrlPanel@cptIt,

timEmoticons

_CODE.PWP:
   panel: {
     autohide: true,
     html: getHtml,
     onclick: function(e) {
       var linkElm = editor.dom.getParent(e.target, 'a');

       if (linkElm) {
         editor.insertContent('<img src="' + linkElm.getAttribute('data-mce-url') + '" />');
         this.hide();
       }
     }
   },
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\plugins\emoticons\plugin.js]

pwptli'onclick

name::
* McsEngl.pwptli'onclick@cptIt,

pwptli'onpostrender

name::
* McsEngl.pwptli'onpostrender@cptIt,

pwptli'onselect

name::
* McsEngl.pwptli'onselect@cptIt,

pwptli'onshow

name::
* McsEngl.pwptli'onshow@cptIt,

pwptli'sICrlAlignPopover

name::
* McsEngl.pwptli'sICrlAlignPopover@cptIt,

timBackcolor

pwptli'sICrlCmd

name::
* McsEngl.pwptli'sICrlCmd@cptIt,

pwptli'sICrlCmdSelect

name::
* McsEngl.pwptli'sICrlCmdSelect@cptIt,

timBackcolor, timForecolor

pwptli'sICrlIcon

name::
* McsEngl.pwptli'sICrlIcon@cptIt,

\public_html\PgmHtml\pgm\js\skins\lightgray\skin.css
.clsI-timListBullet:before {
content: "\e00a";
}

\public_html\PgmHtml\pgm\js\skins\lightgray\fonts\icomoon.dev.svg
<glyph unicode="" d="M 192,448l 320,0 l0-64 L 192,384 L 192,448 z M 192,256l 320,0 l0-64 L 192,192 L 192,256 z M 192,64l 320,0 l0-64 L 192,0 L 192,64 zM0,416A64,64 1980 1 0 128,416A64,64 1980 1 0 0,416zM0,224A64,64 1980 1 0 128,224A64,64 1980 1 0 0,224zM0,32A64,64 1980 1 0 128,32A64,64 1980 1 0 0,32z" data-tags="timListBullet" />

pwptli'sICrlSelectorState

name::
* McsEngl.pwptli'sICrlSelectorState@cptIt,

_DESCRIPTION:
sICrlSelectorState: "a:not([href])", timAnchor.

pwptli'sICrlText

name::
* McsEngl.pwptli'sICrlText@cptIt,

_DESCRIPTION:
On timFormats contains the-text displayed on it.

pwptli'sICrlTooltip

name::
* McsEngl.pwptli'sICrlTooltip@cptIt,

pwptli'sICrlType

name::
* McsEngl.pwptli'sICrlType@cptIt,

_SPECIFIC:
* fCCWButton: timBold,
* fccwbmenu: timFormats
* fCCWBMSplit: timNumlist, timBullist
* fCCWBPColor: timBackcolor

pwptli'toolbar

name::
* McsEngl.pwptli'toolbar@cptIt,

\public_html\pgmHtml\pgm\pgmHtml.html:
sEdrToolbar1: 'save undo redo | eqneditor forecolor backcolor | styleselect fontselect fontsizeselect | bold italic underline | alignleft aligncenter alignright alignjustify | timListBullet btnNumlist | link image preview emoticons',

SPECIFIC

* pwptli.specific, pwp'toolitem.specific,

_SPECIFIC:
* pwptli.aligncenter (core):
* pwptli.alignjustify (core):
* pwptli.alignleft (core):
* pwptli.alignright (core):
* pwptli.anchor (anchor_plugin):
* pwptli.backcolor (forecolor_plugin):
* pwptli.blockquote (core):
* pwptli.bold (core):
* pwptli.bullist (core):
* pwptli.cancel (save_plugin):
* pwptli.charmap (charmap_plugin):
* pwptli.code (code_plugin):
* pwptli.copy (core):
* pwptli.cut (core):
* pwptli.emoticons (emoticons_plugin):
* pwptli.fontselect (core):
* pwptli.fontsizeselect (core):
* pwptli.formatselect (core):
* pwptli.fullscreen (fullscreen_plugin):
* hr (hr_plugin):
* pwptli.image (image_plugin):
* pwptli.indent (core):
* pwptli.inserttime (insertdatetime_plugin):
* pwptli.italic (core):
* pwptli.link (link unlink_plugin):
* pwptli.ltr (directionality_plugin):
* pwptli.media (media_plugin):
* pwptli.newdocument (core):
* pwptli.nonbreaking (nonbreaking_plugin):
* pwptli.numlist (core):
* pwptli.outdent (core):
* pwptli.pagebreak (pagebreak_plugin):
* pwptli.paste (core):
* pwptli.preview (preview_plugin):
* pwptli.print (print_plugin):
* pwptli.redo (core):
* pwptli.removeformat (core):
* pwptli.rtl (directionality_plugin):
* pwptli.save (save_plugin):
* pwptli.searchreplace (searchreplace_plugin):
* pwptli.spellchecker (spellchecker_plugin):
* pwptli.strikethrough (core):
* pwptli.styleselect (core):
* pwptli.subscript (core):
* pwptli.superscript (core):
* pwptli.table (table_plugin):
* pwptli.template (template_plugin):
* pwptli.textcolor (forecolor_plugin):
* pwptli.underline (core):
* pwptli.undo (core):
* pwptli.visualblocks (visualblocks_plugin):
* pwptli.visualchars (visualchars_plugin):

pwp'barContent

name::
* McsEngl.pwp'barContent@cptIt,
* McsEngl.pwpbarContent@cptIt,
* McsEngl.pwp'contentbar@cptIt,

pwp'barStatus

name::
* McsEngl.pwp'barStatus@cptIt,
* McsEngl.pwpbarStatus@cptIt,
* McsEngl.pwpstatusbar@cptIt,
* McsEngl.pwp'code.statusbar@cptIt,

_DESCRIPTION:
It is the last bar of the ui.

_CODE.PWP:
//from theme.js
oICCPanel.fIcCnrAdd({type: 'fCCCPanel', sICrlName: 'nameStatusbar', sICrlClasses: 'clsBarStatus',
sICrlLayout: 'filflow', nsICrlBorder: '1 0 0 0', aoICrlItems: [
{type: 'fICPElement'},
oICWResizehandler
]
});

* pwpSetting.statusbar:
Boolean, show or hide the statusbar.
statusbar : false
[http://www.tinymce.com/wiki.php/Configuration:statusbar]

pwp'guiitem (menuitem; toolitem)#ql:tmce'control#

name::
* McsEngl.pwp'guiitem (menuitem; toolitem)@cptIt,
* McsEngl.pwpguielement@cptIt,
* McsEngl.pwpguiitem@cptIt,
* McsEngl.pwp'control-gui@cptIt,
* McsEngl.pwpgim@cptIt,

_SPECIFIC:
* barMenu
* barTool
* barContent
* barStatus
* menuitem
* toolitem

pwpgim'size

name::
* McsEngl.pwpgim'size@cptIt,

_ISSUE.TMCE:
* pwp'issue.button_size:
Q: Why do Buttons/selectboxes have incorrect size?
You are probably using an old DOCTYPE as of TinyMCE 4 a proper HTML5 doctype is required. All web developers should use a standards rendering mode on their web pages. So use a HTML5 doctype like <!DOCTYPE html> to properly render the page and the TinyMCE UI.
[http://www.tinymce.com/wiki.php/FAQ]

pwp'dialog-window

name::
* McsEngl.pwp'dialog-window@cptIt,
* McsEngl.pwp'code.dialog-window@cptIt,
* McsEngl.pwp'custom-dialog@cptIt,

_DESCRIPTION:
Dialogs as HTML pages

In TinyMCE 3.x all dialogs where HTML pages that got loaded into a iframe or window. This was changed in TinyMCE 4 to make it easier to make plugins and fully support CDN:s. But you can still load HTML based pages into TinyMCE dialogs by using the WindowManager.

// Opens a HTML page inside a TinyMCE dialog
editor.windowManager.open({
title: "My html dialog",
url: 'mydialog.html',
width: 700,
height: 600
});
You can also pass in parameters to the dialog just as you could in 3.x by using the second parameter of the WindowManager.open.

// Opens a HTML page inside a TinyMCE dialog and pass in two parameters
editor.windowManager.open({
title: "My html dialog",
url: 'mydialog.html',
width: 700,
height: 600
}, {
arg1: 42,
arg2: "Hello world"
});
You can access these parameters from your mydialog.html page by using this code:

// Get the parameters passed into the window from the top frame
var args = top.tinymce.activeEditor.windowManager.getParams();
console.log(args.arg1, args.arg2);
You can also close the current window by calling:

// Close the front most window (mydialog.html)
top.tinymce.activeEditor.windowManager.close();
[http://www.tinymce.com/wiki.php/Tutorials:Creating_custom_dialogs]

_CODE.PWP:
     // Open window with a specific url
     editor.windowManager.open({
       title: 'my site',
       url: 'http://synagonism.net',
       width: 800,
       height: 400,
       buttons: [{
         text: 'Close',
         onclick: 'close'
       }]
     });
[\PgmWEB\tinyMCE\tinymce406Dev\js\tinymce\plugins\example\plugin.js]

pwp'dialog'body

name::
* McsEngl.pwp'dialog'body@cptIt,

_CODE.PWP:
     body: {type: 'textbox', name: 'name', size: 40, label: 'Name', value: selectedNode.name || selectedNode.id},
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\plugins\anchor\plugin.js]
===
body: [
 {type: 'textbox', name: 'name', size: 40, label: 'Name', value: selectedNode.name || selectedNode.id},
 {type: 'textbox', name: 'class', size: 40, label: 'Class', value: selectedNode.name || selectedNode.id}
],

pwp'dialog'buttons

name::
* McsEngl.pwp'dialog'buttons@cptIt,

_CODE.PWP:
       buttons: [{
         text: 'Close',
         onclick: 'close'
       }]
     });
[\PgmWEB\tinyMCE\tinymce406Dev\js\tinymce\plugins\example\plugin.js]

pwp'dialog'height

name::
* McsEngl.pwp'dialog'height@cptIt,

pwp'dialog'onsubmit-function

name::
* McsEngl.pwp'dialog'onsubmit-function@cptIt,

_CODE.PWP:
     onsubmit: function(e) {
       editor.execCommand('mceInsertContent', false, editor.dom.createHTML('a', {
         id: e.data.name,
         class: e.data.class
       }));
     }
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\plugins\anchor\plugin.js]

pwp'dialog'title

name::
* McsEngl.pwp'dialog'title@cptIt,

pwp'dialog'url

name::
* McsEngl.pwp'dialog'url@cptIt,

pwp'dialog'width

name::
* McsEngl.pwp'dialog'width@cptIt,

pwp'language

name::
* McsEngl.pwp'language@cptIt,
* McsEngl.pwpanguage@cptIt,
* McsEngl.pwpang@cptIt,

_DESCRIPTION:
Sets the ui language.

pwpang'changing

name::
* McsEngl.pwpang'changing@cptIt,

_FILE:
You need the file '/js/langs/lang.js' with the translated strings en:lang.
TinyMCE uses a translation service to create these lang files.

_SETTINGS:
* on pgmHtml.html:
sEdrLanguage: 'lagEl',

pwpang'oUI18n

name::
* McsEngl.pwpang'oUI18n@cptIt,

pwp'rectangleGui

name::
* McsEngl.pwp'rectangleGui@cptIt,
* McsEngl.pwprect@cptIt,

oPgmHtml.oPhlStoreIdControlobt.id151.fICrlLayrect()
Object {x: 360.5, y: 21.5, w: 443, h: 255, deltaW: 2…}
bICrlAutoresize: true
contentH: 164
contentW: 441
deltaH: 91
deltaW: 2h: 255
headerH: 39
headerW: 193
innerH: 164
innerW: 441
maxH: 65535
maxW: 65535
minH: 255
minW: 443
scrollW: 0
startMinHeight: 0
startMinWidth: 0
w: 443
x: 360.5
y: 21.5

pwpalgo'viewport-object

name::
* McsEngl.pwpalgo'viewport-object@cptIt,
* McsEngl.pwpviewport@cptIt,

* McsEngl.pwpvpt@cptIt,

_CODE.PWP:
// Returns viewport size excluding scrollbars
return {
x: oWindow.pageXOffset || oHTMLElementRoot.scrollLeft,
y: oWindow.pageYOffset || oHTMLElementRoot.scrollTop,
w: oWindow.innerWidth || oHTMLElementRoot.clientWidth,
h: oWindow.innerHeight || oHTMLElementRoot.clientHeight
};

pwp'skin

name::
* McsEngl.pwp'skin@cptIt,

_ADDRESS.WPG:
* http://skin.tinymce.com// skin creator.

pwp'theme

name::
* McsEngl.pwp'theme@cptIt,

pwpSetting.theme:
* pwp'theme_option:
* pwp'theme: "modern",
* pwpThm,
===
Removed themes
The "simple" and "advanced" themes where removed in 4.0.

New themes
The new "modern" theme was introduced in 4.0. More themes will be added in the future.
[http://www.tinymce.com/wiki.php/Tutorial:Migration_guide_from_3.x]

pwp'wrap

name::
* McsEngl.pwp'wrap@cptIt,

* pwpSetting.nowrap:
This option will make the editable are behave like very much like a <pre> tag, and add a scroll instead of wrapping text.

oPgmHtml.fMedInit({
...
nowrap : true
});
Boolean value, default false.
[http://www.tinymce.com/wiki.php/Configuration:nowrap]

pwpalgo'Code

name::
* McsEngl.pwpalgo'Code@cptIt,
* McsEngl.pwpcod@cptIt,
* McsEngl.pwpalgo.code@cptIt,
* McsEngl.pwpcode@cptIt,
* McsEngl.pwp'code.SOURCE-CODE@cptIt,
* McsEngl.pwp'source-code@cptIt,

_DESCRIPTION:
We use GitHub as a source repository for TinyMCE, if you wish to contribute, go to GitHub and fork the project then send a pull request when you have fixed it.
[http://www.tinymce.com/develop/source.php]

_MENUBAR.TINYMCE:
* Tools/Source code

_MENUITEM.TINYMCE:
* plugins: code

_TOOLITEM.TINYMCE:
* toolbar: code

pwpcod'directory

name::
* McsEngl.pwpcod'directory@cptIt,
* McsEngl.pwp'directory@cptIt,
* McsEngl.pwp'folder@cptIt,
* McsEngl.pwpcod'folder@cptIt,

\xampp\htdocs\dWstSgm\dPgm\dPgmWpg:
working primary

\xampp\htdocs\dPgmWpg:
working secondary (test, misc)

\dAWORK\dPgmWpg:
main store

\dBWORK\dPgmWpg:
backup

pwpcod'file

name::
* McsEngl.pwpcod'file@cptIt,
* McsEngl.pwpfil@cptIt,
* McsEngl.pwpfile@cptIt,
* McsEngl.pwp'file@cptIt,
* McsEngl.pwp'file-of-code@cptIt,

_DESCRIPTION:
* what are the files of the project.

_FILE_STRUCTURE:
/root/
* /js/
 * /tinymce/
   * /classes/
     * /dom/
     * /html/
     * /ui/
     * /util/
     - AddOnManager.js, Compat.js, Editor.js, EditorCommands.js
     - EditorManager.js, EnterKey.js, Env.js, FocusManager.js
     - ForceBlocks.js, Formatter.js, jquery.tinymce.js, LegacyInput.js
     - Shortcuts.js, UndoManager.js, WindowManager.js
   * /langs/
   * /plugins/
     * /pluginfolder1/
       - plugin.js
       - plugin.min.js
     * /pluginfolder2/
   * /skins/
     * /lightgrey/
   * /themes/
     * /modern/
   - tinymce.js
   - tinymce.min.js

FILE STRUCTURE
We have changed the file structure to match more common js project structures.
The number of files has also been dramatically reduced.
BASIC STRUCTURE

js/tinymce/tinymce.min.js
js/tinymce/plugins/table/plugin.min.js
js/tinymce/themes/modern/theme.min.js
js/tinymce/skins/lightgrey/skin.min.css

pwpfil.html

name::
* McsEngl.pwpfil.html@cptIt,

pwpfil.index.html

name::
* McsEngl.pwpfil.index.html@cptIt,
* McsEngl.pwpindex.html@cptIt, {2015-12-01}
* McsEngl.pwp'editor.html@cptIt,
* McsEngl.pwp'tinymce.html@cptIt,

_DESCRIPTION:
* It is the html-file that contains the code to START the tmce-editor.
[\File1a\tinymce406Dev\tinymce.dev.html]

pwpfil.less

name::
* McsEngl.pwpfil.less@cptIt,

pwpfil.js

name::
* McsEngl.pwpfil.js@cptIt,

pwpcod'doing

name::
* McsEngl.pwpcod'doing@cptIt,

pwpcod'doing.configuring

name::
* McsEngl.pwpcod'doing.configuring@cptIt,

oEdrSettings on fMedInit in pgmHtml.html#ql:phloeditor'settings#

pwpcod'doing.executing

name::
* McsEngl.pwpcod'doing.executing@cptIt,

pwpexe, pwpexecuting, pwprunning, pwploading:
===
o) pwpexe.index.html: open the \public_html\PgmHtml\pgm\pgmHtml.html which starts the program:
- loads js/pgmHtml.js
-- pwpexe.o1Env,
-- pwpexe.oUCore,
-- pwpexe.oHChar
-- pwpexe.o1Evt
-- pwpexe.o1MgrAddon
-- pwpexe.o1MgrWin,
-- pwpexe.o1MgrUndo,
-- pwpexe.o1Scriptloader,
-- pwpexe.o1Shortcut,
-- pwpexe.o1DMgr
-- pwpexe.PgmWpg.js loaded
-- id0-id27
- loads js/plugins/save/FileSaver.js

o) pwpexe.f1Init1Cfg, from index.html:
- pwpexe.s1Suffix
- pwpexe.o1Cfg

-- pwpexe3 fDUtlEvtfunctionAdd(window, 'ready', f_EventReady_function) which adds event 'load' with f_EventReady_function, which calls the editor with the settings from html-file.
o) fEditor
o) fEdrSetup

o) pwpexe.f1Init2Render    PgmWpg.js:1340
-- id28-id59 from loadScripts
-- loads theme, plugins
http://localhost/pgmHtml/pgm/js/themes/themeModern/theme.js http://localhost/pgmHtml/pgm/js/plugins/advlist/plugin.js http://localhost/pgmHtml/pgm/js/plugins/anchor/plugin.js http://localhost/pgmHtml/pgm/js/plugins/autolink/plugin.js http://localhost/pgmHtml/pgm/js/plugins/autosave/plugin.js http://localhost/pgmHtml/pgm/js/plugins/pgnCharmap/plugin.js http://localhost/pgmHtml/pgm/js/plugins/code/plugin.js http://localhost/pgmHtml/pgm/js/plugins/contextmenu/plugin.js http://localhost/pgmHtml/pgm/js/plugins/directionality/plugin.js http://localhost/pgmHtml/pgm/js/plugins/emoticons/plugin.js http://localhost/pgmHtml/pgm/js/plugins/example/plugin.js http://localhost/pgmHtml/pgm/js/plugins/fullpage/plugin.js http://localhost/pgmHtml/pgm/js/plugins/fullscreen/plugin.js http://localhost/pgmHtml/pgm/js/plugins/hr/plugin.js http://localhost/pgmHtml/pgm/js/plugins/image/plugin.js http://localhost/pgmHtml/pgm/js/plugins/insertdatetime/plugin.js http://localhost/pgmHtml/pgm/js/plugins/link/plugin.js http://localhost/pgmHtml/pgm/js/plugins/lists/plugin.js http://localhost/pgmHtml/pgm/js/plugins/media/plugin.js http://localhost/pgmHtml/pgm/js/plugins/nonbreaking/plugin.js http://localhost/pgmHtml/pgm/js/plugins/pagebreak/plugin.js http://localhost/pgmHtml/pgm/js/plugins/paste/plugin.js http://localhost/pgmHtml/pgm/js/plugins/print/plugin.js http://localhost/pgmHtml/pgm/js/plugins/preview/plugin.js http://localhost/pgmHtml/pgm/js/plugins/save/plugin.js http://localhost/pgmHtml/pgm/js/plugins/searchreplace/plugin.js http://localhost/pgmHtml/pgm/js/plugins/table/plugin.js http://localhost/pgmHtml/pgm/js/plugins/template/plugin.js http://localhost/pgmHtml/pgm/js/plugins/textcolor/plugin.js http://localhost/pgmHtml/pgm/js/plugins/visualblocks/plugin.js http://localhost/pgmHtml/pgm/js/plugins/visualchars/plugin.js http://localhost/pgmHtml/pgm/js/plugins/wordcount/plugin.js

o) pwpexe.f1Init3Addons    PgmWpg.js:1459
- pwpexe.o1Cnr

-- fMedEditorAdd
-- create oEdrTheme
-- create plugin objects: oPlugin = new fPluginfcn(oEditorThis, sPluginUrl);
-- id60-id103 icontrols

o) pwpexe.fCntBodyInit    PgmWpg.js:1891
- pwpexe.o1HSchema
- pwpexe.oCntDMngr
- pwpexe.o1HToDNod
- pwpexe.o1DSelection
- pwpexe.o1Formatter
- pwpexe.o1Cmd
- pwpexe.f1Force_block
- pwpexe.f1Enterkey
- pwpexe.EvtPhlInitBfr
- pwpexe.b1Initialized


-- oEditorThis.oEdrHSchema = new oHtml.fHSchema(oEdrSettings)
-- oEditorThis.oEdrDUtil = new oDom.fDUtil(oEdrCntHTMLDocument
-- oEditorThis.oEdrHToDNode = new oHtml.fHToDNode(oEdrSettings, oEdrHSchema);
-- oEditorThis.oEdrHToStringEdr = new oHtml.fHToStringEdr(oEdrSettings, oEditorThis);
-- oEditorThis.oEdrDSelection = new oDom.fDSelection(oEdrDUtil, fEdrCntWindow(),... );
-- oEditorThis.oEdrFormatter = new oPgmHtml.fFormatter(oEditorThis);
-- oEditorThis.oEdrMgrUndo = new oPgmHtml.fMgrUndo(oEditorThis);
-- oEditorThis.oEdrEditorcmd = new oPgmHtml.fEditorcmd(oEditorThis);
-- oPgmHtml.fForce_block(oEditorThis); Adds the evtNodeChange if sEdrForced_root_block.
-- oPgmHtml.fEnterkey(oEditorThis);
-- oEditorThis.fUObvEvtfunctionCall('evtEdrInitPre');
-- oEditorThis.fEdrLoad_from_target({initial: true, sHTseSrlzFormat: 'html'});
-- oEditorThis.fUObvEvtfunctionCall('evtEdrInit');

pwpcod'developing

name::
* McsEngl.pwpcod'developing@cptIt,

_package.json:
{
"name": "tinymce",
"version": "4.0.0",
"description": "TinyMCE rich text editor",
"author": "Johan S?rlin <spocke@moxiecode.com>",
"bugs": { "url" : "http://www.tinymce.com/develop/bugtracker.php" },
"engines": {
"node" : ">=0.8.0"
},
"dependencies": {
"amdlc": ">= 0.0.2",
"jshint": ">= 0.9.1",
"uglify-js": ">= 2.0.0",
"glob": ">= 3.1.12",
"moxie-zip": ">= 0.0.1",
"less": ">= 1.3.1",
"coverjs": ">= 0.0.14"
}
}

pwpcod'building

name::
* McsEngl.pwpcod'building@cptIt,
* McsEngl.pwp'building@cptIt,
* McsEngl.pwp'jake@cptIt,

_DESCRIPTION:
Building TinyMCE
(0. download from github)
1. Install Node.js
2. Open a console and go to the project directory
3. Write "npm install" to install all Node.js modules needed
4. Build TinyMCE by writing "jake"
[https://github.com/tinymce/tinymce]

_BUILD_TASK:
`jake`
Runs the minifyjs, less, jshint build tasks.

`jake -T`
List all build tasks.

`jake minify`
Compiles the core classes, plugins and themes into minified versions.

`jake less`
Compiles all LESS based skins into css files that can be included in the browser.

`jake jshint`
Runs all js code though jshint.

`jake release`
Builds release packages with the version specified in changelog.txt.

`jake bundle[themes:*]`
Bundles all themes into the tinymce core js files.

`jake bundle[plugins:*]`
Bundles all plugins into the tinymce core js files.

`jake minify bundle[themes:modern,plugins:table,paste]`
Minifies the core, adds the modern theme and adds the table and paste plugin into tinymce.min.js.

pwpcod'contributing

name::
* McsEngl.pwpcod'contributing@cptIt,

_ADDRESS.WPG:
* http://www.tinymce.com/develop/contributing.php,

_DESCRIPTION:
Since TinyMCE is an Open Source Software project we encourage developers to contribute patches and code for us to include in the main package of TinyMCE. However there are a few rules and limitations when doing so and this page list them.

Contributed code will be licensed under the LGPL license but not limited to LGPL.
Copyright notices will be changed to Moxiecode Systems AB. But contributors will get credit for their work.
All third party code will be reviewed, tested and possible modified before being released.
These basic rules makes it possible for us to earn a living of the TinyMCE project but it also ensures that the code remains Open Source and under the LGPL license. All contributions will be added to the changelog and on the TinyMCE website.
[http://www.tinymce.com/develop/contributing.php]

pwpcod'installing

name::
* McsEngl.pwpcod'installing@cptIt,
* McsEngl.pwp'installing@cptIt,

_DESCRIPTION:
TinyMCE - Quick install
<html>
<head><!-- CDN hosted by Cachefly -->
<script src="http://tinymce.cachefly.net/4.0/tinymce.min.js"></script>
<script>
oPgmHtml.fMedInit({selector:'textarea'});
</script>
</head>
<body>
<textarea>Your content here.</textarea>
</body>
</html>

pwp'configuring#ql:tmce'option#

name::
* McsEngl.pwp'configuring@cptIt,

pwpcod'localization

name::
* McsEngl.pwpcod'localization@cptIt,
* McsEngl.pwp'languages@cptIt,
* McsEngl.pwp'localization@cptIt,

_ADDRESS.WPG:
* https://www.transifex.com/projects/p/tinymce//
* http://www.tinymce.com/i18n//

_DESCRIPTION:

pwpSetting.language_url:
A simple URL to where the language file to use.
We recommend using a site absolute URL, for example:

language_url : '/languages/fi.js'

pwpSetting.language:
Installing a language pack

Download one or more languages here.
Unpack files into your tinymce/langs folder
In your oPgmHtml.fMedInit({...}) config, set the language option to whatever language you want, example:
language : 'sv_SE',
And you are done, load up TinyMCE and check the new language.
[http://www.tinymce.com/wiki.php/Configuration:language]

pwpcod'style-of-coding

name::
* McsEngl.pwpcod'style-of-coding@cptIt,
* McsEngl.phcoding-style@cptIt,
* McsEngl.pwp'coding-style@cptIt,

_GENERIC:
* js-coding-style#ql:js'coding_style#

_URL:
* end in '/' IF it is a-directory:
- oPgmHtml.sUrlJs "http://localhost/pgmHtml/pgm/js/"

SPECIFIC

name::
* McsEngl.pwp'code.specific@cptIt,

_SPECIFIC:
* css##
* html#ql:phlhtml@cptIt#
* js
===
* plugin##

pwpcod.ADD-CLASS-TO-ELEMENT

name::
* McsEngl.pwpcod.ADD-CLASS-TO-ELEMENT@cptIt,

_CODE.PWP:
// Add a class to an element by id in the page
oPgmHtml.oDom.fDUtlClassAdd
tinymce.DOM.addClass('someid', 'someclass');

// Add a class to an element by id inside the editor
tinymce.activeEditor.dom.addClass('someid', 'someclass');
[http://www.tinymce.com/wiki.php/api4:class.tinymce.dom.DOMUtils]

pwpcod.ISSUE

name::
* McsEngl.pwpcod.ISSUE@cptIt,
* McsEngl.phissue@cptIt,
* McsEngl.pwp'bugtracker@cptIt,
* McsEngl.pwp'issue@cptIt,
* McsEngl.pwp'tracker@cptIt,

_SPECIFIC:
* feature
* problem

pwpcod.BUG (problem)

name::
* McsEngl.pwpcod.BUG (problem)@cptIt,
* McsEngl.pwp'problem@cptIt,
* McsEngl.pwpbug@cptIt,
* McsEngl.pwp'bug@cptIt,
* McsEngl.pwp'code.bug@cptIt,
* McsEngl.pwp'problem@cptIt,
* McsEngl.pwppbm@cptIt,

_ADDRESS.WPG:
* http://www.tinymce.com/develop/bugtracker_bugs.php,

froIAlcFilter(':frboICrlVisible')
replacing with froIAlcFilter(':visible')
=> destroys 'CmdInsertChar'

pwpbug.ALIGN:
=== 2015-10-05
- does not work
- version which works is: ph20150305

pwpbug.ICON:
IcnSelected does not exist is FntPgmWpgSmall
[2015-12-10]

pwpbug.TABLE:
=== 2015-06-26
The-selection remains.

pwpbug.fCCCPTab:
===
does not work

pwpbug.fCCCFormitem:
=== 2015-06-21
removes labels from formitems

pwpbug.fCCCButtoncnr:
=== 2015-06-21
no toolbar items.

pwpbug.fCCWCheckbox
===
on search checked both checkboxes on click.

pwpbug.fCCWMenuitem:
=== 2015-06-18
Menuitems do not work.

pwpbug.fCCWCbFilepicker:
=== 2015-06-16
looses focus of first

pwpbug.xICrlValue
=== 2015-06-11
on listbox when selected gets the control not xICrlValue of the selected aICrlValues

pwpbug.fIClnFilter:
=== 2015-06-08
fIClnFilter(':fICrlVisible')
this 'must' be ':visible'. Changing destroys the windows 'fullpage', 'code'.

pwpbug.sHTseSrlzFormat:
=== 2015-05-28
sHTseSrlzFormat: 'raw'
IF set to 'html' the pgnAchor class attribute is wrong

pwpbug.oICCPElement:
=== 2015-05-25
> Cannot read property '0' of undefined(anonymous function) pgmHtml.js:29139
oICPathThis.fIcPathData()
===
clicking on a pathitem, must select it.
Now aIcPthData is empty.

pwpbug.ICON:
* do not work on firefox. 2015-05-17

pwpbug.fCCCForm,'fCCCFormitem'
If make it small, does not work on text-input-boxes.

pwpbug.fCCWBMenu:
If make it small, does not work of hover.

pwpbug.SELECTION:
* IF selection is exactly a-word, no whitespace, and you want to set a-link, throws Range error.
{2016-04-30}

pwpbug.shortcut:
* do not fire a shortcut command in the middle of typing
{2016-04-28}
- solved:
I added s1Shortcut to check to fire the-command
if (oEvtIn.keyCode !== 16 && oEvtIn.keyCode !== 17 && oEvtIn.keyCode !== 18 && oPgmWpg.s1Shortcut === '') {
oPgmWpg.s1Shortcut = String.fromCharCode(oEvtIn.keyCode);
oEvtIn.preventDefault();
} else if (oEvtIn.keyCode !== 16 && oEvtIn.keyCode !== 17 && oEvtIn.keyCode !== 18 && oPgmWpg.s1Shortcut !== '') {
oPgmWpg.s1Shortcut = oPgmWpg.s1Shortcut + '+' + String.fromCharCode(oEvtIn.keyCode);
oEvtIn.preventDefault();
}

fUCorEachRb(o1Store.oStoreShortcut, function(oShortcutIn) {
if (oPgmWpg.s1Shortcut === oShortcutIn.sChar) {
{2016-04-28}
===
* Ctrl+N does not work.
- it is a native one.

pwpbug.ZOOM:
* doc properties problem.
* 2015-04-14: needs 'clsContainer-body'.
* 2015-03-21: removing 'clsContainerBody' doc-properties fixed!!!

FORMATS:
- work. 2015-03-13
- commands does NOT work. {2015-02-25}

FONT_FAMILY:
- work. 2015-03-13
- changing it, complains.

_SPECIFIC:
* closed##
* open##
* verified##

https://github.com/tinymce/tinymce/blob/master/js/tinymce/classes/ui/Container.js
449
_lastRect
===
https://github.com/tinymce/tinymce/blob/master/js/tinymce/classes/ui/Control.js:
341
self._lastLayoutRect = {};

https://github.com/tinymce/tinymce/blob/master/js/tinymce/classes/ui/Control.js: 1145:
tinymce.ui.Control.postRender:
if (this.settings.border)
===
if (settings.border)

pwpissue.ERROR

name::
* McsEngl.pwpissue.ERROR@cptIt,
* McsEngl.pwperror@cptIt,
* McsEngl.pwp'error@cptIt,

pwp'error.button_different_size:
solution: <!DOCTYPE html> was missing!!!

pwp'error.Cannot_read_property 'buttons' of undefined
solution: needs on 'init':
self._oProto(settings);
settings = self.settings;

pwp'error.uncaught_syntaxerror_unexpected_token:
Uncaught SyntaxError: Unexpected token ( test-dev.html:30

pwp'error.uncaught_typeerror_cannot_call_method_X_of_null:
Uncaught TypeError: Cannot call method 'execCommand' of null

pwperror.XXX_is_not_a_function:
This function was defined NEXT in the-code.
[hmnSngo.2015-11-26]

pwpcod.FEATURE

name::
* McsEngl.pwpcod.FEATURE@cptIt,
* McsEngl.pwp'feature-request@cptIt,
* McsEngl.pwp'code.feature@cptIt,
* McsEngl.pwpcod.TODO@cptIt,
* McsEngl.pwptodo@cptIt,

Names (pwpname):
* class =>    clsName,
* command =>  cmdName,
* icon =>    icnName,
* id =>    idName,
* menuitem =>  mimName,
* plugin =>  pgnName,
* role =>    rolName,
* sICrlName =>  guiName,
* toolitem =>  timName,
[hmnSngo.2015-06-01]
* event =>    evtName

sICrlIcon:
name => icnName, {2015-05-31}

pwpcod.PULL-REQUEST

name::
* McsEngl.pwpcod.PULL-REQUEST@cptIt,
* McsEngl.pwp'pull-request@cptIt,

_ADDRESS.WPG:
* https://github.com/tinymce/tinymce/pulls,
* https://github.com/tinymce/tinymce/pull/250,

_MERGE:
You can merge this Pull Request by running
git pull https://github.com/qnub/tinymce patch-1

pwpcod.DIFF

name::
* McsEngl.pwpcod.DIFF@cptIt,

_ADDRESS.WPG:
* https://github.com/tinymce/tinymce/pull/250.diff,

pwpcod.PATCH

name::
* McsEngl.pwpcod.PATCH@cptIt,

_ADDRESS.WPG:
* https://github.com/tinymce/tinymce/pull/250.patch,

pwpalgo'code'HTML

name::
* McsEngl.pwpalgo'code'HTML@cptIt,
* McsEngl.pwpcode.HTML@cptIt,
* McsEngl.pwp'html-code@cptIt,
* McsEngl.pwphtml@cptIt,

pwphml'html5-output

name::
* McsEngl.pwphml'html5-output@cptIt,
* McsEngl.pwp'html5-output@cptIt,

TinyMCE produces HTML5 loose output as of 4.0.
This means it can handle all new HTML5 elements and also allow the deprecated HTML4 attributes and elements.
If you want to use html4 or html5-strict output check the schema option for details.
[http://www.tinymce.com/wiki.php/Tutorial:Migration_guide_from_3.x]

pwptml.HTML-DOC

name::
* McsEngl.pwptml.HTML-DOC@cptIt,
* McsEngl.pwp'html-doc@cptIt,

_FILE:
* PgmWpg.html

pwpdocument:
<!DOCTYPE html>
<html class="cls-fullscreen">
<head>
<title>pgmHtml 0.0.1</title>
<script src="js/tinymce/pgmHtml.js"></script>
<script src="js/tinymce/plugins/save/FileSaver.js"></script>
<script>
tinymce.fInit({
selector: 'textarea',
theme: "themeModern",
schema: "html5",
plugins: [
["advlist anchor autolink autosave charmap code contextmenu directionality "],
["emoticons example fullpage fullscreen hr image insertdatetime link lists media nonbreaking"],
["pagebreak paste print preview save searchreplace "],
["table template textcolor"],
["visualblocks visualchars wordcount "],
["codeimproved codemirror"]
],
toolbar1: "save undo redo | eqneditor forecolor backcolor | styleselect fontselect fontsizeselect | bold italic underline | alignleft aligncenter alignright alignjustify | btnBullist btnNumlist | link image preview ",
//fullscreen
init_instance_callback: function (editor) {
setTimeout("tinymce.oEditorActive.execCommand('cmdFullscreen')", 777);
},
//saveas
save_enablewhendirty: false,
save_onsavecallback: function() {
fSaveAs(
new Blob(
[tinymce.oEditorActive.startContent],
{type: "text/plain;charset=" + document.characterSet}
),
"name.html"
);
},
browser_spellcheck: true,
template_popup_height: 100,
template_popup_width: 200,
templates: [
{title: 'My name', description: 'Inserts my name', content: 'Kaseluris.Nikos.1959<br />'},
{title: 'table', description: 'Inserts table', url: 'template1.html'}
],
codemirror: {},


});

//tinymce.oUtil.oXHR.send({
//url: 'template1.html',
//content_type: 'text/plain;charset=utf-8',
//success: function(text) {
//console.log(text);
//},
//error: function( type, req, o ){
//console.log("XHRError: " + type + " HTTP Status: " + req.status);
//}
//});

//var oXhr;
//oXhr = new XMLHttpRequest();
//oXhr.onreadystatechange = function() {
//if (oXhr.readyState==4 && oXhr.status==200) {
//console.log(oXhr.responseText);
//}
//else {
//console.log("error loading: " + oXhr.status);
//}
//}
//oXhr.open("GET", "template1.html", true);
//oXhr.send();
</script>
<link rel="stylesheet" href="http://localhost/pgmHtml/js/tinymce/skins/lightgray/skin.css">
</head>

<body class="cls-fullscreen">

<div id="mce_65" class="cls-tinymce cls-container cls-panel" hidefocus="1" tabindex="-1" style="visibility: hidden; border-width: 1px;">

<div id="mce_65-body" class="cls-container-body cls-stack-layout cls-fullscreen">

//menubar
<div id="mce_66" class="cls-container cls-menubar cls-toolbar cls-first cls-stack-layout-item" role="menubar" style="border-width: 0px 0px 1px;">
<div id="mce_66-body" class="cls-container-body cls-flow-layout">
<div id="mce_67" class="cls-widget cls-btn cls-menubtn cls-first cls-flow-layout-item" tabindex="-1" role="menuitem" aria-haspopup="true"><button id="mce_67-open" role="presentation" type="button" tabindex="-1"><span>File</span> <i class="cls-caret"></i></button>
</div>
<div id="mce_68" class="cls-widget cls-btn cls-menubtn cls-flow-layout-item" tabindex="-1" role="menuitem" aria-haspopup="true"><button id="mce_68-open" role="presentation" type="button" tabindex="-1"><span>Edit</span> <i class="cls-caret"></i></button>
</div>
<div id="mce_69" class="cls-widget cls-btn cls-menubtn cls-flow-layout-item" tabindex="-1" role="menuitem" aria-haspopup="true"><button id="mce_69-open" role="presentation" type="button" tabindex="-1"><span>Insert</span> <i class="cls-caret"></i></button>
</div>
<div id="mce_70" class="cls-widget cls-btn cls-menubtn cls-flow-layout-item" tabindex="-1" role="menuitem" aria-haspopup="true"><button id="mce_70-open" role="presentation" type="button" tabindex="-1"><span>View</span> <i class="cls-caret"></i></button>
</div>
<div id="mce_71" class="cls-widget cls-btn cls-menubtn cls-flow-layout-item" tabindex="-1" role="menuitem" aria-haspopup="true"><button id="mce_71-open" role="presentation" type="button" tabindex="-1"><span>Format</span> <i class="cls-caret"></i></button>
</div>
<div id="mce_72" class="cls-widget cls-btn cls-menubtn cls-flow-layout-item" tabindex="-1" role="menuitem" aria-haspopup="true"><button id="mce_72-open" role="presentation" type="button" tabindex="-1"><span>Table</span> <i class="cls-caret"></i></button>
</div>
<div id="mce_73" class="cls-widget cls-btn cls-menubtn cls-last cls-flow-layout-item" tabindex="-1" role="menuitem" aria-haspopup="true">
<button id="mce_73-open" role="presentation" type="button" tabindex="-1"><span>Tools</span> <i class="cls-caret"></i></button>
</div>
</div>
</div>

//toolbar
<div id="mce_74" class="cls-container cls-panel cls-stack-layout-item" hidefocus="1" tabindex="-1">
<div id="mce_74-body" class="cls-container-body cls-stack-layout">
<div id="mce_75" class="cls-container cls-toolbar cls-first cls-last cls-stack-layout-item" role="toolbar">
<div id="mce_75-body" class="cls-container-body cls-flow-layout">
<div id="mce_76" class="cls-container cls-first cls-flow-layout-item cls-btngroup" role="toolbar">
<div id="mce_76-body">
<div id="mce_45" class="cls-widget cls-btn cls-first" tabindex="-1" role="button" aria-disabled="false"><button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-save"></i> Save</button>
</div>
<div id="mce_46" class="cls-widget cls-btn cls-disabled" tabindex="-1" role="button" aria-labeledby="mce_46" aria-label="Undo" aria-disabled="true"><button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-undo"></i></button>
</div>
<div id="mce_47" class="cls-widget cls-btn cls-last cls-disabled" tabindex="-1" role="button" aria-labeledby="mce_47" aria-label="Redo" aria-disabled="true"><button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-redo"></i></button>
</div>
</div>
</div>
<div id="mce_77" class="cls-container cls-flow-layout-item cls-btngroup" role="toolbar">
<div id="mce_77-body">
<div id="mce_48" class="cls-widget cls-btn cls-colorbutton cls-first" role="button" aria-labeledby="mce_48" aria-label="Text color"><button role="presentation" hidefocus="" type="button" tabindex="-1"><i class="cls-ico cls-i-forecolor"></i><span id="mce_48-preview" class="cls-preview"></span></button><button type="button" class="cls-open" hidefocus="" tabindex="-1"> <i class="cls-caret"></i></button>
</div>
<div id="mce_49" class="cls-widget cls-btn cls-colorbutton cls-last" role="button" aria-labeledby="mce_49" aria-label="Background color"><button role="presentation" hidefocus="" type="button" tabindex="-1"><i class="cls-ico cls-i-backcolor"></i><span id="mce_49-preview" class="cls-preview"></span></button><button type="button" class="cls-open" hidefocus="" tabindex="-1"> <i class="cls-caret"></i></button>
</div>
</div>
</div>
<div id="mce_78" class="cls-container cls-flow-layout-item cls-btngroup" role="toolbar">
<div id="mce_78-body">
<div id="mce_50" class="cls-widget cls-btn cls-menubtn cls-first" tabindex="-1" role="button" aria-haspopup="true"><button id="mce_50-open" role="presentation" type="button" tabindex="-1"><span>Formats</span> <i class="cls-caret"></i></button>
</div>
<div id="mce_51" class="cls-widget cls-btn cls-menubtn cls-fixed-width cls-listbox" tabindex="-1" role="button" aria-haspopup="true"><button id="mce_51-open" role="presentation" type="button" tabindex="-1"><span>Font Family</span> <i class="cls-caret"></i></button>
</div>
<div id="mce_52" class="cls-widget cls-btn cls-menubtn cls-fixed-width cls-listbox cls-last" tabindex="-1" role="button" aria-haspopup="true"><button id="mce_52-open" role="presentation" type="button" tabindex="-1"><span>Font Sizes</span> <i class="cls-caret"></i></button>
</div>
</div>
</div>
<div id="mce_79" class="cls-container cls-flow-layout-item cls-btngroup" role="toolbar">
<div id="mce_79-body">
<div id="mce_53" class="cls-widget cls-btn cls-first" tabindex="-1" role="button" aria-labeledby="mce_53" aria-label="Bold"><button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-bold"></i></button>
</div>
<div id="mce_54" class="cls-widget cls-btn" tabindex="-1" role="button" aria-labeledby="mce_54" aria-label="Italic"><button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-italic"></i></button>
</div>
<div id="mce_55" class="cls-widget cls-btn cls-last" tabindex="-1" role="button" aria-labeledby="mce_55" aria-label="Underline"><button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-underline"></i></button>
</div>
</div>
</div>
<div id="mce_80" class="cls-container cls-flow-layout-item cls-btngroup" role="toolbar">
<div id="mce_80-body">
<div id="mce_56" class="cls-widget cls-btn cls-first" tabindex="-1" role="button" aria-labeledby="mce_56" aria-label="Align left"><button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-alignleft"></i></button>
</div>
<div id="mce_57" class="cls-widget cls-btn" tabindex="-1" role="button" aria-labeledby="mce_57" aria-label="Align center"><button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-aligncenter"></i></button>
</div>
<div id="mce_58" class="cls-widget cls-btn" tabindex="-1" role="button" aria-labeledby="mce_58" aria-label="Align right"><button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-alignright"></i></button>
</div>
<div id="mce_59" class="cls-widget cls-btn cls-last" tabindex="-1" role="button" aria-labeledby="mce_59" aria-label="Justify"><button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-alignjustify"></i></button>
</div>
</div>
</div>
<div id="mce_81" class="cls-container cls-flow-layout-item cls-btngroup" role="toolbar">
<div id="mce_81-body">
<div id="mce_60" class="cls-widget cls-btn cls-splitbtn cls-menubtn cls-first" role="splitbutton" aria-labeledby="mce_60" aria-label="Bullet list" aria-haspopup="true"><button type="button" hidefocus="" tabindex="-1"><i class="cls-ico cls-i-btnBullist"></i></button><button type="button" class="cls-open" hidefocus="" tabindex="-1"> <i class="cls-caret"></i></button>
</div>
<div id="mce_61" class="cls-widget cls-btn cls-splitbtn cls-menubtn cls-last" role="splitbutton" aria-labeledby="mce_61" aria-label="Numbered list" aria-haspopup="true"><button type="button" hidefocus="" tabindex="-1"><i class="cls-ico cls-i-btnNumlist"></i></button><button type="button" class="cls-open" hidefocus="" tabindex="-1"> <i class="cls-caret"></i></button>
</div>
</div>
</div>
<div id="mce_82" class="cls-container cls-last cls-flow-layout-item cls-btngroup" role="toolbar">
<div id="mce_82-body">
<div id="mce_62" class="cls-widget cls-btn cls-first" tabindex="-1" role="button" aria-labeledby="mce_62" aria-label="Insert/edit link"><button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-link"></i></button>
</div>
<div id="mce_63" class="cls-widget cls-btn" tabindex="-1" role="button" aria-labeledby="mce_63" aria-label="Insert/edit image"><button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-image"></i></button>
</div>
<div id="mce_64" class="cls-widget cls-btn cls-last" tabindex="-1" role="button" aria-labeledby="mce_64" aria-label="Preview"><button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-preview"></i></button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

//edit-area
<div id="mce_83" class="cls-edit-area cls-container cls-panel cls-stack-layout-item" hidefocus="1" tabindex="-1" style="border-width: 1px 0px 0px;">
<iframe id="mce_9_ifr" src='javascript:""' frameborder="0" allowtransparency="true" title="Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help" style="width: 100%; height: 231px; display: block;">
<!DOCTYPE html>
<html>
<head>
<style id="mceDefaultStyles" type="text/css">
.cls-content-body div.cls-resizehandle {position: absolute;border: 1px solid black;background:#FFF;width: 5px;height: 5px;z-index: 10000}
.cls-content-body .cls-resizehandle:hover {background:#000}.cls-content-body img[data-mce-selected], hr[data-mce-selected] {outline: 1px solid black;resize: none}
.cls-content-body .cls-clonedresizable {position: absolute;outline: 1px dashed black;opacity: .5;filter: alpha(opacity=50);z-index: 10000}
</style>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link type="text/css" rel="stylesheet" href="http://localhost/pgmHtml/js/tinymce/skins/lightgray/content.css">
</head>
<body id="tinymce" class="cls-content-body " onload="window.parent.tinymce.fGetEditor('mce_9').fEventFire('load');" contenteditable="true">
<p>Your content here.</p>
</body>
</html>
</iframe>
</div>

//statusbar
<div id="mce_84" class="cls-statusbar cls-container cls-panel cls-last cls-stack-layout-item" hidefocus="1" tabindex="-1" style="border-width: 1px 0px 0px;">
<div id="mce_84-body" class="cls-container-body cls-flow-layout">
<div id="mce_85" class="cls-path cls-flow-layout-item cls-first">
<div role="button" class="cls-path-item cls-last" data-index="0" tabindex="-1" id="mce_85-0">p
</div>
</div><label id="mce_86" class="cls-wordcount cls-widget cls-label cls-flow-layout-item" "=">Words: 3</label>
<div id="mce_8" class="cls-flow-layout-item cls-resizehandle cls-last"><i class="cls-ico cls-i-resize"></i>
</div>
</div>
</div>

</div>
</div>

<textarea id="mce_9" style="display: none;" aria-hidden="true">Your content here.</textarea>
<p id="idLoad"></p>

<div id="mce_87" class="cls-widget cls-tooltip cls-tooltip-n" role="presentation" style="left: -65535px; top: 67px; z-index: 131070; display: none;">
<div class="clsTooltipArrow"></div>
<div class="clsTooltipInner">Background color</div>
</div>
</body>
</html>

pwptml.ATTRIBUTE

name::
* McsEngl.pwptml.ATTRIBUTE@cptIt,

pwptml.ARIA

name::
* McsEngl.pwptml.ARIA@cptIt,
* McsEngl.pwparia@cptIt,
* McsEngl.pwparia-html-attribute@cptIt,

aria-sicrlrole:
toolbar: toolbar-parts
button: toolbar-button

aria-expanded:
* true: toolitem formats expand

aria-haspopup:
* true: formats-toolitem

pwptml.CLASS

name::
* McsEngl.pwptml.CLASS@cptIt,
* McsEngl.pwpclass@cptIt,
* McsEngl.pwpclass-html-attribute@cptIt,

* McsEngl.pwpcls@cptIt,

_SPECIFIC:
fDUtlClassvalueRemove
fICrlClassAdd
fICrlClassRemove
fICrlClassToggle
sICrlClasses
sICrlClsContainer
sICrlSubtype
sILytClsContainer: 'abs-layout',
sILytClsControl: 'clsLayoutAbsItem',
sILytClsFirst: 'clsFirst',
sILytClsLast: 'clsLast'
===
pwpclsArrow
pwpclsBarContent
pwpclsBarStatusPnl: the statusbar panel.
pwpclsBottom
pwpclsBtn
pwpclsBtnColor: fore and back color buttons
pwpclsCheckbox
pwpclsChecked
pwpclsClose: close button of a window
pwpclsCnrButton
pwpclsContainer
pwpclsContainerBody: the body of a container. NOT used
pwpclsDisabled
pwpclsDrag: the drag portion of the title of a window
pwpclsEdit-focus
pwpclsEnd: nonused
pwpclsFade
pwpclsFirst: first toolbaritem in a group
pwpclsFixed
pwpclsFixed-width
pwpclsFloatpanel
pwpclsFlow-layout
pwpclsFlow-layout-item
pwpclsFoot: the foot of a window.
pwpclsFormitem: nocss
pwpclsGrid
pwpclsI-
pwpclsIn:
pwpclsItem-anchor
pwpclsItem-table
pwpclsLabel
pwpclsLabelDisabled: nocss
pwpclsLast: last toolbaritem in a group
pwpclsLayoutAbs
pwpclsLayoutAbsItem
pwpclsLayoutAbsEnd: nonused
pwpclsListbox
pwpclsMenu
pwpclsMenu-sub
pwpclsMenuAlign
pwpclsMenubar
pwpclsMenubtn
pwpclsMenuShortcut:
pwpclsOpenHas:
pwpclsPanel
pwpclsPath
pwpclsPgmHtml
pwpclsPopover
pwpclsPrimary
pwpclsResizehandle
pwpclsSelected
pwpclsSpacer
pwpclsSplitbtn
pwpclsStack-layout-item
pwpclsStart: nonused
pwpclsReset: at <div id="idModalblock", nonused.
pwpclsToolbar
pwpclsTooltip-n
pwpclsTooltip
pwpclsWidget
pwpclsWindow
pwpclsWinHead: the head of a window
pwpclsWindowMove: nonused.
pwpclsWinTitle: window title
pwpclsWordcount: container in statusbar with number of words of content.

pwpclsclonedresizable
pwpclscontent-body
pwpclsdivider
pwpclsfieldset
pwpclsfit
pwpclsmatch-marker
pwpclsnbsp
pwpclsobject
pwpclspreview
pwpclsspellchecker-word
pwpclsthrobber
pwpclstxt
pwpclsup

pwptml.ID

name::
* McsEngl.pwptml.ID@cptIt,
* McsEngl.pwpid@cptIt,
* McsEngl.pwpid-html-attribute@cptIt,

fICrlEltGet(idsuffix):
Finds the-html-element tha corresponds to control with the same id.

_SPECIFIC:
* idModalblock
* idN:    all ids have a naumber
* idN-action:  on button
* idN-body:  a body of a container
* idN-drag:    on window head
* idN-head:  the head of a window
* idN-inp:    input
* idN-open:
* idN-preview:  on span elt.
* idN-scroll:
* idN-shortcut:
* idN-tN:    tab
* idN-text:
* idN-title:

pwptml.ROLE

name::
* McsEngl.pwptml.ROLE@cptIt,
* McsEngl.pwprole@cptIt,
* McsEngl.pwprole-html-attribute@cptIt,
* McsEngl.pwp'helt'attribute.ROLE@cptIt,

SPECIFIC:
* fRoleGet()
* fRoleParentGet()
* sICrlRole
===
* roleMenu
===
role="button"
role="menuitem"
role="option"
role="presentation"
role="separator"

pwptml.TABINDEX

name::
* McsEngl.pwptml.TABINDEX@cptIt,

tabindex="-1"

pwptml.ELEMENT

name::
* McsEngl.pwptml.ELEMENT@cptIt,
* McsEngl.pwp'element.html@cptIt,
* McsEngl.pwp'helt@cptIt, {2013-11-10}
* McsEngl.pwp'html-element@cptIt,
* McsEngl.pwp'helt@cptIt,
* McsEngl.pwp'htmlelt@cptIt,

* McsEngl.pwphelt@cptIt,

pwphelt'creating

name::
* McsEngl.pwphelt'creating@cptIt,
* McsEngl.pwp'createHTML@cptIt,

_DESCRIPTION:
public function createHTML(name:String, attrs:Object, html:String):String
Creates HTML string for element. The element will be closed unless an empty inner HTML string is passed in.
Examples

// Creates a html chunk and inserts it at the current selection/caret location
tinymce.activeEditor.selection.setContent(tinymce.activeEditor.dom.createHTML('a', {href: 'test.html'}, 'some line'));
Params

Name  Type  Description
name   String  Name of new element.
attrs   Object  Optional object name/value collection with element attributes.
html   String  Optional HTML string to set as inner HTML of the element.
Returns

String String with new HTML element, for example: <a href="#">test</a>.
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\EnterKey.js]

_CODE.PWP:
editor.dom.createHTML('a', {
         id: e.data.name,
         class: e.data.class
       });
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\plugins\anchor\plugin.js]

pwphelt'converting

name::
* McsEngl.pwphelt'converting@cptIt,
* McsEngl.pwp'converting-elements@cptIt,
* McsEngl.pwp'substituting-elements@cptIt,

_CODE:
//converts b-elt to strong-elt,
tinyMCE.init({
...
valid_elements : "strong/b"
});

pwphelt'inserting#ql:tmce'content.inserting#

name::
* McsEngl.pwphelt'inserting@cptIt,

pwphelt'validating

name::
* McsEngl.pwphelt'validating@cptIt,

_OPTION.TMCE:
* pwpSetting.invalid_elements:
* pwp'invalid_elements:
===
This option should contain a comma separated list of element names to exclude from the content.

Elements in this list will be removed when TinyMCE executes a cleanup.

oPgmHtml.fMedInit({
...
invalid_elements : "strong,em"
});
Caution: This option doesn't accept attributes in the list, only elements

Also see valid_elements and extended_valid_elements for more configuration options.
[http://www.tinymce.com/wiki.php/Configuration:invalid_elements]

_OPTION.TMCE:
* pwpSetting.valid_elements:
* pwp'valid_elements:
===
valid_elementsEdit wiki pagePage revisionsPrint
The valid_elements option defines which elements will remain in the edited text when the editor saves. You can use this to limit the returned HTML to a subset.

This option contains a comma separated list of element conversion chunks. Each chunk contains information about how one element and its attributes should be treated. The default rule set for this option is specified below.

If you just want to add or change some behaviour for a few items, use the extended_valid_elements option

Control characters:

Name  Summary
@  
Rules with this name will be applied to all elements defined after this rule. So @[attr1|attr2] will enable attr1 and attr2 for all elements, but element1,@[attr1|attr2],element2,element3 will enable attr1 and attr2 only for element2 and element3.

If applied in extended_valid_elements, it is only effective for the elements in the extended_valid_elements list.

,  Separates element chunk definitions.
/  Separates element synonymous. The first element is the one that will be output.
|  Separates attribute definitions.
[  Starts a new attribute list for an element definition.
]  Ends an attribute list for an element definition.
!  Makes attributes required. If none of the required attributes are set, the element will be removed. For example, "!href".
=  Makes the attribute default to the specified value. For example, "target=_blank"
:  Forces the attribute to the specified value. For example, "border:0"
<  Verifies the value of an attribute (only the listed values are allowed). For example, "target<_blank?_self"
?  Separates attribute verification values. See above.
+  Makes the element open if no child nodes exists. For example, "+a".
-  Enables removal of empty elements such as <strong />. For example, "-strong".
#  Enables padding of empty elements. This will pad with   if they are empty. For example, "#p".
Wildcards such as *,+,? may be used in element or attribute name matching.

Special variables:

Name  Summary
{$uid}  Results in a unique ID. For example, "p[id:{$uid}]".
Use *[*] to include all elements and all attributes. This can be very useful when used with the invalid_elements option. Example of usage of the valid_elements option:

This example string tells TinyMCE to remove all elements that are not a "a, strong, div or br" element, convert "b" elements to "strong" elements, default "target" to "_blank" and keep the "href", "target" and "align" attributes of the elements.

tinyMCE.init({
...
valid_elements : "a[href|target=_blank],strong/b,div[align],br"
});
Duplicate Attribute Warning

Be careful not to duplicate attributes in the definitions as this may cause tinyMCE to render duplicate attributes in the output. For example, if you have

... //bad code: dir and style listed twice
"blockquote[dir|style|cite|class|dir<ltr?rtl|id|lang|onclick|ondblclick"
+"|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout"
+"|onmouseover|onmouseup|style|title]"
...
then if you happen to have a <blockquote> element in your code with style= or dir= attributes, the editor will cause each of those attributes to be duplicated in the output, which will result in invalid XHTML.
[http://www.tinymce.com/wiki.php/Configuration:valid_elements]

_OPTION.TMCE:
* pwpSetting.extended_valid_elements:
* pwp'extended_valid_elements:
This option is very similar to valid_elements. The only difference between this option and valid_elements is that this one gets added to the existing rule set. This can be very useful if the existing rule set is fine but you want to add some specific elements that also should be valid.

When adding a new attribute by specifying an existing element rule (e.g. img), the entire rule for that element is over-ridden so be sure to include all valid attributes not just the one you wish to add. See valid_elements for default rules.

The below example replaces the current img rule (including the global element rules)

oPgmHtml.fMedInit({
...
extended_valid_elements: "img[class|src|border=0|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name]"
});
Also see valid_elements and invalid_elements for more configuration options.
[http://www.tinymce.com/wiki.php/Configuration:extended_valid_elements]

SPECIFIC

pwptml.elt.DIV

name::
* McsEngl.pwptml.elt.DIV@cptIt,
* McsEngl.pwpdiv@cptIt,

_DESCRIPTION:
Most of interface is presented with div elements.

_CODE.PWP:
//the-shortcut of a-menuitem
<div id="id126-shortcut" class="clsMenuShortcut">Ctrl+B</div>

pwptml.elt.I

name::
* McsEngl.pwptml.elt.I@cptIt,
* McsEngl.pwpi@cptIt,

_CODE.PWP:
//represents the-triagle in menuitem or toolitem
<i class="clsCaret"></i>

===
//the-icon of a-menuitem
<i class="clsIco clsI-bold"></i>

pwptml.elt.SPAN

name::
* McsEngl.pwptml.elt.SPAN@cptIt,
* McsEngl.pwpspan@cptIt,

_CODE.PWP:
<span>File</span>
Menubar's menuitem

<span id="id67-preview" class="clsPreview"></span>
to represent the color tool-buttons.

<span id="id127-text" class="clsText">Italic</span>
menuitem.

pwptml.elt.textarea

name::
* McsEngl.pwptml.elt.textarea@cptIt,
* McsEngl.pwpi@cptIt,

_CODE.PHL.HTML:
//pgnCode:
<textarea id="id110" class="clsTextbox clsMultiline clsFirst clsLast clsLayoutAbsItem" hidefocus="true" style="left: 20px; top: 20px; width: 592px; height: 82px;"><!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>Your content here.</p>
</body>
</html></textarea>

pwpalgo'code'CSS

name::
* McsEngl.pwpalgo'code'CSS@cptIt,
* McsEngl.pwpcss@cptIt,
* McsEngl.pwpcod.CSS@cptIt,
* McsEngl.pwpcss@cptIt,

_OPTION:
* pwpSetting.content_css:
* pwp'content_css: "css/development.css",
===
content_css: "http://synagonism.net/hitp/hitp.css",

pwpcss.FILE

name::
* McsEngl.pwpcss.FILE@cptIt,

_SPECIFIC:
\public_html\PgmHtml\pgm\js\skins\lightgray\content.css
\public_html\PgmHtml\pgm\js\skins\lightgray\skin.css

pwpalgo'code'JavaScript

name::
* McsEngl.pwpalgo'code'JavaScript@cptIt,
* McsEngl.pwpjs@cptIt,

pwp'getContent

name::
* McsEngl.pwp'getContent@cptIt,

   <a href="javascript:;" onmousedown="alert(tinymce.get('elm1').getContent());">[Get contents]</a>
   <a href="javascript:;" onmousedown="alert(tinymce.get('elm1').getContent({format:'raw'}));">[Get raw]</a>
   <a href="javascript:;" onmousedown="alert(tinymce.get('elm1').selection.getContent());">[Get selected HTML]</a>
   <a href="javascript:;" onmousedown="alert(tinymce.get('elm1').selection.getContent({format : 'text'}));">[Get selected text]</a>

pwp'selection

name::
* McsEngl.pwp'selection@cptIt,

   <a href="javascript:;" onmousedown="alert(tinymce.get('elm1').selection.getContent());">[Get selected HTML]</a>
   <a href="javascript:;" onmousedown="alert(tinymce.get('elm1').selection.getContent({format : 'text'}));">[Get selected text]</a>
   <a href="javascript:;" onmousedown="alert(tinymce.get('elm1').selection.getNode().nodeName);">[Get selected element]</a>

pwp'codeSrc.MODEL.CONCEPT.JS (API)

name::
* McsEngl.pwp'codeSrc.MODEL.CONCEPT.JS (API)@cptIt,
* McsEngl.pwp'API@cptIt,
* McsEngl.pwp'modelConceptJs@cptIt,
* McsEngl.pwpAPI@cptIt,
* McsEngl.pwpconceptual-model-of-codeSource@cptIt,

_DESCRIPTION:
The same objects are organized into 2 different tree-structures.
[hmnSngo.2015-12-02]
===
js-conceptual-model is organized into 2 different TREES:
- a-whole-part with most whole, the window > oPgmHtml and
- a-generic-specific with most generic, the Object.prototype.
[hmnSngo.2015-11-25]

pwpalgo'code'js.API.WHOLE-PART-TREE (window whl oPgmWpg)

name::
* McsEngl.pwpalgo'code'js.API.WHOLE-PART-TREE (window whl oPgmWpg)@cptIt,

_DESCRIPTION:
The most whole object of pwp is the-oPgmWpg which is part of the-global-object of the-browser, the-window.

oPgmWpg

name::
* McsEngl.oPgmWpg@cptIt,
* McsEngl.pwp'code.js.MOST-WHOLE-OBJECT@cptIt,
* McsEngl.pwpApiWp@cptIt,
* McsEngl.phAPI@cptIt,
* McsEngl.phcode.API@cptIt,
* McsEngl.pwpo@cptIt,
* McsEngl.pwpoPgmWpg@cptIt,
* McsEngl.pwp'api@cptIt,
* McsEngl.pwp'code.API@cptIt,
* McsEngl.pwp'oPgmHtml@cptIt,
* McsEngl.oPgmWpg@cptIt,

_DESCRIPTION:
oPgmHtml is http://synagonism.net/dMiw/dTchInf/lngJs.html#idLjbo that contains ALL the-functionality of the-program.
[hmnSngo.2015-10-08]

_DEFINITION:
oPgmHtml is the-jso that contains ALL the-functionality of the-program.
[hmnSngo.2015-10-08]
===
Root level namespace this contains classes directly releated to the TinyMCE editor.
[http://www.tinymce.com/wiki.php/api4:namespace.tinymce]

_GENERIC:
> Object.prototype.isPrototypeOf(oPgmWpg)
true

oPgmWpg'FILE:
* \PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\Compat.js,
* \PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\EditorManager.js,
window.tinymce = window.tinyMCE = EditorManager;
* \PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\util\Tools.js,
trim: isArray: is: toArray: makeMap: each: map: grep: inArray: extend: create: walk: createNS: resolve: explode:

oPgmWpg'member

name::
* McsEngl.oPgmWpg'member@cptIt,
* McsEngl.pwpmember@cptIt,
* McsEngl.oPgmWpg.MEMBER@cptIt,

//2016-02-02
Object.getOwnPropertyNames(oPgmWpg).sort()
["a1Cssrules", "a1EvtNativePending", "b1DirtyNo", "b1Initialized", "b1Visualaid", "f1BDirty", "f1CfgfcnCall", "f1Cfgval", "f1CmdAdd", "f1CmdCall", "f1Cnr", "f1Enterkey", "f1EvtAddListener", "f1EvtBHas", "f1EvtDispatch", "f1EvtNativeAdd", "f1EvtNativeRemove", "f1EvtNodeChanged", "f1EvtProgress_stateDispatch", "f1EvtRemoveListener", "f1Focus", "f1Force_block", "f1Init1Cfg", "f1Init2Render", "f1Init3Addons", "f1MenuitmAdd", "f1ToolitmAdd", "f1Translate", "f1TranslateFrmVar", "f1TranslateToVar", "f1UrlConvert", "f1VisualaidAdd", "fro1Cmd", "fro1Formatter", "o1Cfg", "o1Cmd", "o1Cnr", "o1Cnt", "o1DSelection", "o1DUtil", "o1Doc", "o1Env", "o1Evt", "o1Formatter", "o1HSchema", "o1HToDNod", "o1HToHmlFrmNod", "o1MgrAddon", "o1MgrAddonPgn", "o1MgrAddonThm", "o1MgrUndo", "o1MgrWin", "o1Scriptloader", "o1Shortcut", "o1Store", "o1Theme", "o1UUrlJs", "o1UUrlPgm", "o1Version", "o1Win", "o2Dom", "o2Hml", "o2I", "o2Util", "s1Id", "s1Suffix", "s1UrlJs", "s1UrlPgm"]

//2016-01-31
Object.getOwnPropertyNames(oPgmWpg).sort()
["a1Cssrules", "a1EvtNativePending", "b1DirtyNo", "b1Initialized", "b1Visualaid", "f1BDirty", "f1CfgfcnCall", "f1Cfgval", "f1CmdAdd", "f1CmdCall", "f1CmdFtr", "f1Cnr", "f1Enterkey", "f1EvtAddListener", "f1EvtBHas", "f1EvtDispatch", "f1EvtNativeAdd", "f1EvtNativeRemove", "f1EvtNodeChanged", "f1EvtProgress_stateDispatch", "f1EvtRemoveListener", "f1Focus", "f1Force_block", "f1FormatterFtr", "f1Init1Cfg", "f1Init2Render", "f1Init3Addons", "f1MenuitmAdd", "f1ToolitmAdd", "f1Translate", "f1TranslateFrmVar", "f1TranslateToVar", "f1UrlConvert", "f1VisualaidAdd", "o1Cfg", "o1Cmd", "o1Cnr", "o1Cnt", "o1DSelection", "o1DUtil", "o1Doc", "o1Env", "o1Evt", "o1Formatter", "o1HSchema", "o1HToDNod", "o1HToHmlFrmNod", "o1MgrAddon", "o1MgrAddonPgn", "o1MgrAddonThm", "o1MgrUndo", "o1MgrWin", "o1Scriptloader", "o1Shortcut", "o1Store", "o1Theme", "o1UUrlJs", "o1UUrlPgm", "o1Version", "o1Win", "o2Dom", "o2Hml", "o2I", "o2Util", "s1Id", "s1Suffix", "s1UrlJs", "s1UrlPgm"]
===
//2015-12-30
* pwpa1Cssrules: Array[1]
* pwpa1EvtNativePending: Array[7]
* pwpb1DirtyNo: true
* pwpb1Initialized: true
* pwpb1Visualaid: true
* pwpf1BDirty: ()
* pwpf1CfgfcnCall: (sFCfgIn)
* pwpf1Cfgval: (sVarIn, sValIn, sTypeIn)
* pwpf1CmdAdd: (sCmdIn, fCmdIn, oCmdscopeIn)
* pwpf1CmdCall: (sCmdIn, bCmdUiIn, xCmdValueIn, oCmdArgsIn)
* pwpf1CmdFtr: ()
* pwpf1Cnr: ()
* pwpf1Edr: f1Edr(oCfgIn)
* pwpf1Enterkey: ()
* pwpf1EvtAddListener: (sEvtsIn, fEvtlistenerIn)
* pwpf1EvtBHas: (sEvtIn)
* pwpf1EvtDispatch: (sEvtIn, oEvtIn, bEvtbubbleIn)
* pwpf1EvtNativeAdd: (sEvtIn)
* pwpf1EvtNodeChanged: ()
* pwpf1EvtProgress_stateDispatch: (bStateIn, nTimeIn)
* pwpf1EvtRemoveListener: (sEvtsIn, fEvtlistenerIn)
* pwpf1Focus: ()
* pwpf1Force_block: ()
* pwpf1FormatterFtr: ()
* pwpf1Init1Cfg: (oCfgIn)
* pwpf1MenuitmAdd: (sMenuitemnameIn, oICrlCfgIn)
* pwpf1ToolitemAdd: (sToolitemIn, oICrlCfgIn)
* pwpf1Translate: (aosTextIn)
* pwpf1TranslateFrmVar: (sTextIn)
* pwpf1TranslateToVar: (sTextIn, sDefaultvalue)
* pwpf1UrlConvert: (sUrl, sAttribute, soElt)
* pwpf1VisualaidAdd: (oEltIn)
* pwpo1Cfg: Object
* pwpo1Cmd: Object
* pwpo1Cnr: div#id356.clsPgmWpg.clsContainer.clsCnrPanel
* pwpo1Cnt: Object
* pwpo1DUtil: Object
* pwpo1Doc: document
* pwpo1Dselection: Object
* pwpo1Edr: f1Edr
* pwpo1Env: Object
* pwpo1Evt: Object
* pwpo1Formatter: Object
* pwpo1HSchema: Object
* pwpo1HToDNod: Object
* pwpo1HToHmlFrmNod: Object
* pwpo1MgrAddon: Object
* pwpo1MgrAddonPgn: Object
* pwpo1MgrAddonThm: Object
* pwpo1MgrUndo: Object
* pwpo1MgrWin: Object
* pwpo1Scriptloader: Object
* pwpo1Shortcut: Object
* pwpo1Store: Object
* pwpo1StoreIdCrlobt: Object
* pwpo1Theme: Object
* pwpo1UUrlJs: Object
* pwpo1UUrlPgm: Object
* pwpo1Version: Object
* pwpo1Win: Window
* pwpo2Dom: Object
* pwpo2Hml: Object
* pwpo2I: Object
* pwpo2Util: Object
* pwps1Id: "idPhl"
* pwps1Suffix: ""
* pwps1UrlJs: "http://localhost/dPgmWpg/dPgm/dJs/"
* pwps1UrlPgm: "http://localhost/dPgmWpg/dPgm/"
===
The-core-members will begin with xC... from 'core', instead-of 'xPhl'. Then we have the-members:
- xCore
- xDom
- xHtml
- xInterface
- xUtil
[hmnSngo.2015-10-09]
===
>> 2015-10-08:
Object.getOwnPropertyNames(oPgmHtml).sort()[
"aMedStoreEditor",

"fEditor", "fEditorcmd", "fEnterkey", "fForce_block", "fFormatter", "fMedEditorAdd", "fMedEditorGet", "fMedEvtUnloadBefore_function", "fMedInit", "fMedSetup", "fMedTriggerSave", "fMgrAddon", "fMgrFocus", "fMgrUndo", "fMgrWindow", "fPhlAddI18n", "fPhlShortcut", "fPhlTranslate", "fUObvBEventfunctionHas", "fUObvEvtfunctionAdd", "fUObvEvtfunctionCall", "fUObvEvtfunctionRemove",

"oDScriptloader", "oDUtil", "oDUtilEvent", "oDom", "oHtml", "oI", "oMedEditorActive", "oMgrAddonPlugin", "oMgrAddonTheme", "oMgrEditor", "oPhlEnv", "oPhlHTMLDocument", "oPhlStoreCssselector", "oPhlStoreIGui", "oPhlStoreIdControlobt", "oPhlStoreIdEltobt", "oPhlUI18n", "oPhlWindow", "oUObvEvtfunctionStore", "oUtil",
"pasteplugin",

"sMedSuffix", "sPhlUrlJs", "sPhlUrlProgram", "sPhlVersionDate", "sPhlVersionMajor", "sPhlVersionMinor"]

===
>> 2015-04-11:
Object.getOwnPropertyNames(oPgmHtml).sort()
[bNamespaceUiInit,
fEditor, fEditor_command, fEnterkey, fForce_block, fFormatter, fShortcut, fMgrAddon, fMgrFocus, fMgrUndo, fMgrWindow,
oCacheIdControl, oCacheIdElement, oCacheSelector, oDScriptloader, oDUtil, oDom, oEnv, oHTMLDocumentBsr, oI, oMgrAddonPlugin, oMgrAddonTheme, oMgrEditor, oMgrFocus, oShtml, oUObvEventbindings, oUitypes, oUtil, oWindowBsr, pasteplugin,
sDateRelease, sVersionMajor, sVersionMinor,

aMedEditors,
fMedAddI18n, fMedBefore_unload_delegate, fMedEditorAdd, fMedEditorGet, fMedExeccommand, fMedInit, fMedSetup, fMedTranslate, fMedTriggerSave,
oMedEditorActive, oMedURIScript, oMedUtlI18n,
sMedSuffix, sMedURLScript, sMedUrlProgram,

fTolArrayCreate, fTolArrayIndex, fTolBArray, fTolBType, fTolEach, fTolGrep, fTolObtExtend, fTolObtMake, fTolResolve, fTolStringSplit, fTolToArray, fTolTrim, fTolWalk,

fUObvBEventhandlerHas, fUObvEventInvoke, fUObvEventhandlerAdd, fUObvEventhandlerRemove,
]
===
>> 2015-02-19:
> Object.getOwnPropertyNames(oPgmHtml).sort()
["aMedrEditors", "bNamespaceUiInit", "fEditor", "fEditor_commands", "fEnterkey", "fForce_blocks", "fFormatter", "fMedrAddI18n", "fMedrBefore_unload_delegate", "fMedrEditorAdd", "fMedrEditorGet", "fMedrExeccommand", "fMedrInit", "fMedrSetup", "fMedrTranslate", "fMedrTriggerSave", "fMngrAddon", "fMngrFocus", "fMngrUndo", "fMngrWindow", "fShortcuts", "fTlsArrayCreate", "fTlsArrayIndex", "fTlsBArray", "fTlsBType", "fTlsEach", "fTlsGrep", "fTlsObtExtend", "fTlsObtMake", "fTlsResolve", "fTlsStringSplit", "fTlsToArray", "fTlsTrim", "fTlsWalk", "fUobBHasEventlisteners", "fUobEventInvoke", "fUobEventLnrAdd", "fUobEventLnrRemove", "oBindings", "oCachIdControl", "oCachIdElement", "oCacheSelector", "oDom", "oDomScriptloader", "oDomUtils", "oEnv", "oHtml", "oI", "oMedrEditorActive", "oMedrURIScript", "oMedrUtlI18n", "oMngrAddonPlugin", "oMngrAddonTheme", "oMngrEditor", "oMngrFocus", "oUitypes", "oUtil", "pasteplugin", "sMedrDateRelease", "sMedrSuffix", "sMedrURLDocument", "sMedrURLScript", "sMedrVersionMajor", "sMedrVersionMinor"]
===
> Object.getOwnPropertyNames(oPgmHtml).sort()
* oPgmWpg'_bindings,
* oPgmWpg'aMEdrEditors,
* oPgmWpg'bGecko,
* oPgmWpg'bIE,
* oPgmWpg'bMac,
* oPgmWpg'bNamespaceUiInit,
* oPgmWpg'bOpera,
* oPgmWpg'bWebKit,
* oPgmWpg'fEditor,
* oPgmWpg'fEditor_commands,
* oPgmWpg'fEnterkey,
* oPgmWpg'fForce_blocks,
* oPgmWpg'fFormatter,
* oPgmWpg'fManagerAddon,
* oPgmWpg'fManagerFocus,
* oPgmWpg'fManagerUndo,
* oPgmWpg'fManagerWindow,
* oPgmWpg'fMEdrAddI18n,
* oPgmWpg'fMEdrBefore_unload_delegate,
* oPgmWpg'fMEdrEditorAdd,
* oPgmWpg'fMEdrEditorGet,
* oPgmWpg'fMEdrExeccommand,
* oPgmWpg'fMEdrInit,
* oPgmWpg'fMEdrSetup,
* oPgmWpg'fMEdrTranslate,
* oPgmWpg'fMEdrTriggerSave,
* oPgmWpg'fObslEventFire,
* oPgmWpg'fObslEventOff,
* oPgmWpg'fObslEventOn,
* oPgmWpg'fObslBHas_event_listeners,
* oPgmWpg'fShortcuts,
* oPgmWpg'fTlsArrayCreate,
* oPgmWpg'fTlsArrayIndex,
* oPgmWpg'fTlsBArray,
* oPgmWpg'fTlsBType,
* oPgmWpg'fTlsEach,
* oPgmWpg'fTlsGrep,
* oPgmWpg'fTlsObtExtend,
* oPgmWpg'fTlsObtMake,
* oPgmWpg'fTlsResolve,
* oPgmWpg'fTlsStringSplit,
* oPgmWpg'fTlsToArray,
* oPgmWpg'fTlsTrim,
* oPgmWpg'fTlsWalk,
* oPgmWpg'oBaseURI,
* oPgmWpg'oCachIdControl,
* oPgmWpg'oCachIdElement,
* oPgmWpg'oCacheSelector,
* oPgmWpg'oDom,
* oPgmWpg'oEnv,
* oPgmWpg'oLoaderScript,
* oPgmWpg'oManagerEditor,
* oPgmWpg'oManagerFocus,
* oPgmWpg'oManagerPlugin,
* oPgmWpg'oManagerTheme,
* oPgmWpg'oMEdrEditorActive,
* oPgmWpg'oMEdrUtlI18n,
* oPgmWpg'oUi,
* oPgmWpg'oUitypes,
* oPgmWpg'oUtil,
* oPgmWpg'oUtilsDom,
* oPgmWpg'pasteplugin,
* oPgmWpg'sMEdrDateRelease,
* oPgmWpg'sMEdrVersionMajor,
* oPgmWpg'sMEdrVersionMinor,
* oPgmWpg'sSuffix,
* oPgmWpg'sURLDocument,
* oPgmWpg'sURLScript,

oPgmWpg.a1CntCssrules

name::
* McsEngl.oPgmWpg.a1CntCssrules@cptIt,
* McsEngl.pwpa1CntCssrules@cptIt,

oPgmWpg.a1CntCssrules
[".clsCntBody div.clsResizehandle {
position: absolute;border: 1px solid black;background:#FFF;width: 5px;height: 5px;z-index: 10000
}
.clsCntBody .clsResizehandle:hover {
background:#000
}
.clsCntBody img[data-pwp-selected], hr[data-pwp-selected] {
outline: 1px solid black;resize: none
}
.clsCntBody .clsclonedresizable {
position: absolute;outline: 1px dashed black;opacity: .5;filter: alpha(opacity=50);z-index: 10000
}"]

oPgmWpg.a1EvtNtvPending

name::
* McsEngl.oPgmWpg.a1EvtNtvPending@cptIt,
* McsEngl.pwpa1EvtNtvPending@cptIt,

oPgmWpg.a1EvtNtvPending
["keydown", "click", "contextmenu", "keypress", "keyup", "mousedown", "mouseup"]

oPgmWpg.b1CntModifiedNo

name::
* McsEngl.oPgmWpg.b1CntModifiedNo@cptIt,

oPgmWpg.b1Initialized

name::
* McsEngl.oPgmWpg.b1Initialized@cptIt,

oPgmWpg.b1Visualaid

name::
* McsEngl.oPgmWpg.b1Visualaid@cptIt,

oPgmWpg.f1CfgfcnCallRx

name::
* McsEngl.oPgmWpg.f1CfgfcnCallRx@cptIt,

oPgmWpg.f1CfgvalRx

name::
* McsEngl.oPgmWpg.f1CfgvalRx@cptIt,
* McsEngl.pwpf1CfgvalRx@cptIt,
* McsEngl.f1Cfgvalue@cptIt,
* McsEngl.pwpf1Cfgvalue@cptIt,

oPgmWpg.f1CmdRo (Cmd)#ql:phlf1cmdro#

name::
* McsEngl.oPgmWpg.f1CmdRo (Cmd)@cptIt,

oPgmWpg.f1CmdFormatterRo (Fmr)

name::
* McsEngl.oPgmWpg.f1CmdFormatterRo (Fmr)@cptIt,
* McsEngl.pwpf1CmdFormatter@cptIt,
* McsEngl.pwpfFormatter@cptIt,
* McsEngl.pwp'fFormatter@cptIt,
* McsEngl.pwp'Formatter@cptIt,
* McsEngl.pwp'fmr@cptIt,
* McsEngl.phFmr@cptIt,

_DESCRIPTION:
* Text formatter engine class. This class is used to apply formats like bold, italic, font size
* etc to the current selection or specific nodes. This engine was build to replace the browsers
* default formatting logic for execCommand due to it's inconsistent and buggy behavior.
*
* @class tinymce.Formatter
* @example
* tinymce.activeEditor.formatter.register('mycustomformat', {
* inline: 'span',
* styles: {color: '#ff0000'}
* });
*
* tinymce.activeEditor.formatter.apply('mycustomformat');

pwpoFormatter

* pwpfFmrApply (pwp'apply)

* pwpfFmrBMatch (pwp'match)

* pwpfFmrBMatchNode (pwp'matchNode)

* pwpfFmrFormatChanged (pwp'formatChanged)

* pwpfFmrGet (pwp'get)

* pwpfFmrRegister (pwp'register)

* pwpfFmrRemove (pwp'remove)

* pwpfFmrToggle (pwp'toggle)

pwpoFormatter.MEMBER:
>> 2015-04-12:
> Object.getOwnPropertyNames(oPgmHtml.oMgrEditor.oMedEditorActive.oEdrFormatter).sort()
["fFmrApply", "fFmrBApply", "fFmrBMatch", "fFmrBMatchNode", "fFmrFormatChanged", "fFmrGet", "fFmrMatchAll", "fFmrRegister", "fFmrRemove", "fFmrToggle"]
Object.getOwnPropertyNames(oPgmHtml.oMgrEditor.oMedEditorActive.oEdrFormatter.__proto__).sort()["constructor"]
===
> oPgmHtml.oMEdrEditorActive.oEdrFormatter.fFmrGet()
Object {alignleft: Array[2], aligncenter: Array[3], alignright: Array[2], alignjustify: Array[1], bold: Array[3]…}
address: Array[1]
aligncenter: Array[3]
alignjustify: Array[1]
alignleft: Array[2]
alignright: Array[2]blockquote: Array[1]bold: Array[3]code: Array[1]dd: Array[1]div: Array[1]dt: Array[1]fontname: Array[1]fontsize: Array[1]fontsize_class: Array[1]forecolor: Array[1]h1: Array[1]h2: Array[1]h3: Array[1]h4: Array[1]h5: Array[1]h6: Array[1]hilitecolor: Array[1]italic: Array[3]link: Array[1]p: Array[1]pre: Array[1]removeformat: Array[3]samp: Array[1]strikethrough: Array[2]subscript: Array[1]superscript: Array[1]underline: Array[2]__proto__: Object
===
aligncenter: [
alignjustify: [
alignright: [
attributes: {'class': '%value'},
backgrouNdcolor: '%value',
block: 'blockquote',
blockquote: {
bold: [
code: {
collapsed: false,
color: '%value',
defAultblock: 'div',
display: 'block',
exact: true,
foNtfamily: '%value'},
fontname: {
foNtsize: '%value'},
fontsize: {
fontsize_class: {
foNtstyle: 'italic'},
foNtweight: 'bold'},
forecolor: {
hilitecolor: {
inline: 'b',
inline: 'code',
inline: 'em',
inline: 'i',
inline: 'span',
inline: 'strike',
inline: 'strong',
inline: 'sub',
inline: 'sup',
inline: 'u',
italic: [
margInleft: 'auto',
remove: 'all',
selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',
selector: 'img',
selector: 'img,table',
selector: 'img,table',
selector: 'table',
strikethrough: [
styles: {'float': 'left'}
styles: {'float': 'right'}
subscript: {
superscript: {
teXtalign: 'center',
teXtalign: 'justify',
teXtalign: 'left',
teXtalign: 'right',
teXtdecoration: 'line-through',
teXtdecoration: 'underline',
underline: [
wrap_links: false,
wrap_links: false,
wrapper: 1,

oPgmWpg.f1EncodeRs

name::
* McsEngl.oPgmWpg.f1EncodeRs@cptIt,
* McsEngl.pwpf1EncodeRs@cptIt,

oPgmWpg.f1Enterkey

name::
* McsEngl.oPgmWpg.f1Enterkey@cptIt,
* McsEngl.pwpfEnterkey@cptIt,
* McsEngl.pwp'fEnterkey@cptIt,
* McsEngl.pwp'EnterKey@cptIt,

_DESCRIPTION:
It is NOT an object-constructor. It is called from fEdrInitBody.
[hmnSngo.2014-12-09]

oPgmWpg.f1EltCnrPwpRo

name::
* McsEngl.oPgmWpg.f1EltCnrPwpRo@cptIt,
* McsEngl.pwpf1EltCnrPwpRo@cptIt,

oPgmWpg.f1Forceblock

name::
* McsEngl.oPgmWpg.f1Forceblock@cptIt,
* McsEngl.pwpfForceblock@cptIt,
* McsEngl.pwpfForce-block@cptIt,
* McsEngl.pwp'fForce-blocks@cptIt,
* McsEngl.pwp'ForceBlocks@cptIt,

_DESCRIPTION:
It is NOT an object-constructor. It is called from fEdrInitBody.
[hmnSngo.2014-12-09]

oPgmWpg.f1Init1Cfg

name::
* McsEngl.oPgmWpg.f1Init1Cfg@cptIt,
* McsEngl.pwpf1Init1Cfg@cptIt,
* McsEngl.pwpf1Init@cptIt,

_DEFINITION:

oPgmWpg.f1Init2Render

name::
* McsEngl.oPgmWpg.f1Init2Render@cptIt,
* McsEngl.pwpf1Init2Render@cptIt,

oPgmWpg.f1Init3Addons

name::
* McsEngl.oPgmWpg.f1Init3Addons@cptIt,
* McsEngl.pwpf1Init3Addons@cptIt,

oPgmWpg.f1StoreMenitm#ql:phlf1menitmstore#

name::
* McsEngl.oPgmWpg.f1StoreMenitm@cptIt,

oPgmWpg.f1StoreTolitm

name::
* McsEngl.oPgmWpg.f1StoreTolitm@cptIt,

oPgmWpg.f1Translate

name::
* McsEngl.oPgmWpg.f1Translate@cptIt,
* McsEngl.pwpfCTranslate@cptIt,

oPgmWpg.o1Cfg

name::
* McsEngl.oPgmWpg.o1Cfg@cptIt,

oPgmWpg.o1Cmd#ql:pwpo1cmd#

name::
* McsEngl.oPgmWpg.o1Cmd@cptIt,

oPgmWpg.o1CmdFormatter

name::
* McsEngl.oPgmWpg.o1CmdFormatter@cptIt,

oPgmWpg.o1Env

name::
* McsEngl.oPgmWpg.o1Env@cptIt,
* McsEngl.pwpoCEnv@cptIt,
* McsEngl.oPgmHtml.oPhlEnv@cptIt,
* McsEngl.pwpoPhlEnv@cptIt,
* McsEngl.pwpoEnv@cptIt,
* McsEngl.pwp'Env@cptIt,
* McsEngl.pwp'oEnv@cptIt,

_DESCRIPTION:
This class contains various environment constants like browser versions etc.
Normally you don't want to sniff specific browser versions but sometimes you have to when it's impossible to feature detect.
So use this with care.
[http://www.tinymce.com/wiki.php/api4:class.tinymce.Env]

_FILE:
* \PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\Env.js,

pwpoEnv.MEMBER:
> 2015-11-13:
Object.getOwnPropertyNames(oPgmHtml.o1Env).sort()
["bContentEditable", "bGecko", "bIeCaretAfter", "bMac", "bOpera", "bRange", "bWebkit", "biOS", "nDocument_mode", "sImgTransparentSrc", "xIe"]
===
> Object.getOwnPropertyNames(tinymce.Env).sort()
["caretAfter", "contentEditable", "documentMode", "gecko", "iOS", "ie", "mac", "opera", "range", "transparentSrc", "webkit"]
===
* pwp'bIeCaretAfter (pwp'caretAfter, pwp'noCaretAfter) static
Returns true/false if the browser can or can't place the caret after a inline block like an image

* pwp'bContentEditable (pwp'contentEditable)
contentEditable static
Constant that is true if the browser supports editing

* pwp'bGecko (pwp'gecko)
gecko static
Constant that is true if the browser is Gecko

* pwp'biOS (pwp'iOS) static
Constant that is true if the os is iOS

* pwp'bOpera (pwp'opera) static
Constant that is true if the browser is Opera

* pwp'xIe (pwp'ie) static
Constant that is more than zero if the browser is IE

* pwp'bMac (pwp'mac) static
Constant that is true if the os is Mac OS

* pwp'bRange (pwp'range)
Constant that is true if the browser supports native DOM Ranges

* pwp'bWebkit (pwp'webKit) static
Constant that is true if the browser is WebKit (Safari/Chrome)

* pwp'nDocument_mode (pwp'documentMode)
Returns the IE document mode for non IE browsers this will fake IE 10

* pwp'sImgTransparentSrc (pwp'transparentSrc) static
Transparent image data url

oPgmWpg.bGecko IE Mac Opera WebKit boolean

name::
* McsEngl.oPgmWpg.bGecko IE Mac Opera WebKit boolean@cptIt,
* McsEngl.pwpbGecko@cptIt,
* McsEngl.pwp'bGecko@cptIt,

_GENERIC:
> typeof tinymce.isGecko
"boolean"

_DEFINITION:
 Tools.each('isOpera isWebKit isIE isGecko isMac'.split(' '), function(name) {
   tinymce[name] = Env[name.substr(2).toLowerCase()];
 });
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\Compat.js +line:47]

oPgmWpg.o1Evt > Object.prototype

name::
* McsEngl.oPgmWpg.o1Evt > Object.prototype@cptIt,

oPgmWpg.o1Doc > HTMLDocument.prototype

name::
* McsEngl.oPgmWpg.o1Doc > HTMLDocument.prototype@cptIt,

oPgmWpg.o1DSelection

name::
* McsEngl.oPgmWpg.o1DSelection@cptIt,

oPgmWpg.o1DUtil#ql:phfdomutils#

name::
* McsEngl.oPgmWpg.o1DUtil@cptIt,

_CODE.PWP:
oPgmHtml.oDUtil = new oDom.fDUtil(document);
oDUtil = oPgmHtml.oDUtil;

oPgmWpg.o1EltCnrPwp

name::
* McsEngl.oPgmWpg.o1EltCnrPwp@cptIt,
* McsEngl.pwpo1EltCnrPwp@cptIt,

oPgmWpg.o1HSchema

name::
* McsEngl.oPgmWpg.o1HSchema@cptIt,
* McsEngl.pwpo1HSchema@cptIt,

_DEFINITION:
o1HSchema = oPgmWpg.o1HSchema = o2Hml.froHSchema(o1Cfg);

oPgmWpg.o1HToDNode

name::
* McsEngl.oPgmWpg.o1HToDNode@cptIt,
* McsEngl.pwpo1HToDNode@cptIt,

_DESCRIPTION:
o1HToDNode = oPgmWpg.o1HToDNode = o2Hml.fHToDNodeFtr(o1Cfg, o1HSchema);

oPgmWpg.o1MgrAddonPlugin#ql:phlomgraddonplugin#

name::
* McsEngl.oPgmWpg.o1MgrAddonPlugin@cptIt,

oPgmWpg.o1MgrAddonTheme#ql:phlomgraddontheme#

name::
* McsEngl.oPgmWpg.o1MgrAddonTheme@cptIt,

oPgmWpg.o1MgrAddon (Mdn)

name::
* McsEngl.oPgmWpg.o1MgrAddon (Mdn)@cptIt,
* McsEngl.pwpo1MgrAddon@cptIt,
* McsEngl.pwpf1MgrAddon@cptIt,
* McsEngl.pwpfMgrAddon@cptIt,
* McsEngl.pwpfMngrAddon@cptIt,
* McsEngl.pwpfManagerAddon@cptIt,
* McsEngl.pwp'AddOnManager@cptIt,
* McsEngl.pwp'fManagerAddon@cptIt,

* McsEngl.phMdn@cptIt,
* McsEngl.phMadn@cptIt,

AddOnManager'GENERIC:
typeof tinymce.AddOnManager
"function"

AddOnManager'DESCRIPTION:
This class handles the loading of themes/plugins or other add-ons and their language packs.

Methods
Method  Defined By
* pwp'add
Adds a instance of the add-on by it's short name
tinymce.AddOnManager

* pwp'addComponents
Add a set of components that will make up the add-on
tinymce.AddOnManager

* pwp'get
Returns the specified add on by the short name
tinymce.AddOnManager

* pwp'load
Loads an add-on from a specific url
tinymce.AddOnManager

* pwp'requireLangPack
Loads a language pack for the specified add-on
tinymce.AddOnManager
[http://www.tinymce.com/wiki.php/api4:class.tinymce.AddOnManager]

AddOnManager'PROPERTY:
> Object.getOwnPropertyNames(tinymce.AddOnManager).sort()
["PluginManager", "ThemeManager", "arguments", "baseURL", "caller", "language", "languageLoad", "length", "name", "prototype"]

===
Object.getOwnPropertyNames(tinymce.fManagerAddon).sort()
["arguments", "caller", "language", "languageLoad", "length", "name", "prototype", "sBaseURL"]

_FILE:
* \PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\AddOnManager.js,

pwpoMgrAddon.MEMBER:
>> 2015-04-12:
Object.getOwnPropertyNames(new oPgmHtml.fMgrAddon()).sort()
["aMdnFunctions", "fMdnAdd", "fMdnComponentsAdd", "fMdnDependencies", "fMdnGet", "fMdnLangpackRequire", "fMdnLoad", "fMdnOUrlCreate", "oMdnLookup", "oMdnUrls"]
===
>> 2015-04-11:
Object.getOwnPropertyNames(new oPgmHtml.fMgrAddon()).sort()
["aMdnItems", "addComponents", "createUrl", "dependencies", "fMdnAdd", "get", "load", "oMdnLookup", "oMdnUrls", "requireLangPack"]
> Object.getOwnPropertyNames(new oPgmHtml.fMgrAddon().__proto__).sort()
["constructor"]
> Object.getOwnPropertyNames(new oPgmHtml.fMgrAddon().__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
===
> Object.getOwnPropertyNames((new tinymce.AddOnManager)).sort()
["items", "lookup", "urls"]
Object.getOwnPropertyNames((new tinymce.AddOnManager).__proto__).sort()
["add", "addComponents", "createUrl", "dependencies", "get", "load", "requireLangPack"]
Object.getOwnPropertyNames((new tinymce.AddOnManager).__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
===

> Object.getOwnPropertyNames(new tinymce.fManagerAddon()).sort()
["add", "addComponents", "createUrl", "dependencies", "get", "items", "load", "oLookup", "requireLangPack", "urls"]
Object.getOwnPropertyNames((new tinymce.fManagerAddon()).__proto__).sort()
["constructor"]
Object.getOwnPropertyNames((new tinymce.fManagerAddon()).__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

oPgmWpg.oMgrAddonPlugin

name::
* McsEngl.oPgmWpg.oMgrAddonPlugin@cptIt,
* McsEngl.pwpoMgrAddonPlugin@cptIt,
* McsEngl.pwpooManagerAddonPlugin@cptIt,
* McsEngl.pwp'PluginManager@cptIt,
* McsEngl.pwp'oManagerPlugin@cptIt,

_GENERIC:
> tinyMCE.PluginManager instanceof tinyMCE.AddOnManager
true
===
> typeof tinymce.PluginManager
"object"
===
AddOnManager.PluginManager = new AddOnManager();
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\AddOnManager.js]

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.PluginManager).sort()
["items", "lookup", "urls"]
> Object.getOwnPropertyNames(tinymce.PluginManager.__proto__).sort()
["add", "addComponents", "createUrl", "dependencies", "get", "load", "requireLangPack"]
> Object.getOwnPropertyNames(tinymce.AddOnManager.prototype).sort()
["add", "addComponents", "createUrl", "dependencies", "get", "load", "requireLangPack"]

oPgmWpg.oMgrAddonTheme

name::
* McsEngl.oPgmWpg.oMgrAddonTheme@cptIt,
* McsEngl.pwpoMgrAddonTheme@cptIt,
* McsEngl.pwpoManagerAddonTheme@cptIt,
* McsEngl.pwp'oManagerTheme@cptIt,
* McsEngl.pwp'ThemeManager@cptIt,
* McsEngl.oTmce.oManagerTheme@cptIt,

_DEFINITION:
> tinymce.ThemeManager instanceof tinymce.AddOnManager#ql:tmce'addonmanager#
true
AddOnManager.ThemeManager = new AddOnManager();
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\AddOnManager.js]
===
tinymce.ThemeManager = AddOnManager.ThemeManager;
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\Compat.js]

_DESCRIPTION:
TinyMCE theme class.
Methods
Method  Defined By
* pwp'renderUI
This method is responsible for rendering/generating the overall user interface with toolbars, button
[http://www.tinymce.com/wiki.php/api4:class.tinymce.Theme]

_FILE:
* no exclusive file.
* \PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\AddOnManager.js
* \PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\Compat.js

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.ThemeManager).sort()
["items", "lookup", "urls"]
> Object.getOwnPropertyNames(tinymce.ThemeManager.__proto__).sort()
["add", "addComponents", "createUrl", "dependencies", "get", "load", "requireLangPack"]
> Object.getOwnPropertyNames(tinymce.AddOnManager.prototype ).sort()
["add", "addComponents", "createUrl", "dependencies", "get", "load", "requireLangPack"]
> Object.getOwnPropertyNames(tinymce.AddOnManager.prototype.__proto__ ).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

oPgmWpg.o1MgrUndo (Mud)

name::
* McsEngl.oPgmWpg.o1MgrUndo (Mud)@cptIt,
* McsEngl.pwpo1MgrUndo@cptIt,
* McsEngl.pwpfMngrUndo@cptIt,
* McsEngl.pwp'fManagerUndo@cptIt,
* McsEngl.pwp'UndoManager@cptIt,

* McsEngl.phMud@cptIt,
* McsEngl.phMund@cptIt,

_DESCRIPTION:

oPgmWpg.o1MgrWin (Mwn)

name::
* McsEngl.oPgmWpg.o1MgrWin (Mwn)@cptIt,
* McsEngl.pwpo1MgrWin@cptIt,
* McsEngl.pwpfMgrWindow@cptIt,
* McsEngl.pwpfMngrWindow@cptIt,
* McsEngl.pwp'fManagerWindow@cptIt,
* McsEngl.pwp'WindowManager-class@cptIt,

* McsEngl.phMwn@cptIt,
* McsEngl.phMwin@cptIt,

_DESCRIPTION:
Creates one object, member of oEditor.
[hmnSngo.2014-11-08]
* http://www.tinymce.com/wiki.php/api4:class.tinymce.WindowManager,
* \PgmWEB\tinyMCE\tinymce406Dev\js\tinymce\classes\WindowManager.js,
- tinymce.WindowManager:
- This class handles the creation of native windows and dialogs,

pwpoMngrWindow'MEMBER:
* phaMwinWindows (pwp'windows)

* pwpfMwinAlert (pwp'alert)
* pwpfMwinConfirm (pwp'confirm)
* pwpfMwinParams (pwp'getParams)
* pwpfMwinParamsSet (pwp'setParams)
===
> Object.getOwnPropertyNames(oPgmHtml.oMEdrEditorActive.oEdrManagerWindow).sort()
["alert", "close", "confirm", "getParams", "open", "setParams", "windows"]
> Object.getOwnPropertyNames(oPgmHtml.oMEdrEditorActive.oEdrManagerWindow.__proto__).sort() ["constructor"]
tinymce.WindowManager.alert
Creates a alert dialog

tinymce.WindowManager.close
Closes the top most window

tinymce.WindowManager.confirm
Creates a confirm dialog

tinymce.WindowManager.getParams
Returns the params of the last window open call

tinymce.WindowManager.open
Opens a new window

tinymce.WindowManager.setParams
Sets the params of the last opened window
[http://www.tinymce.com/wiki.php/api4:class.tinymce.WindowManager]

oPgmWpg.o1Scriptloader (Slr)

name::
* McsEngl.oPgmWpg.o1Scriptloader (Slr)@cptIt,
* McsEngl.pwpo1Scriptloader@cptIt,
* McsEngl.pwpfDomScriptloader@cptIt,
* McsEngl.pwp'fDomScriptloader@cptIt,
* McsEngl.pwp'Dsl@cptIt,
* McsEngl.tinymce.dom.ScriptLoader@cptIt,
* McsEngl.pwp'ScriptLoader@cptIt,

* McsEngl.phDslr@cptIt,

_DEFINITION:
This object handles asynchronous/synchronous loading of JavaScript files it will execute callbacks when various items gets loaded. This is useful to load external JavaScript files.

pwpo1Scriptloader.MEMBER:
//2015-11-25
> Object.getOwnPropertyNames(oPgmWpg.o1Scriptloader).sort()
["pwpfSlrAdd", "pwpfSlrBLoaded", "pwpfSlrLoadQueue", "pwpfSlrLoadScripts", "pwpfSlrMarkLoaded"]
===
> Object.getOwnPropertyNames(new tinymce.dom.ScriptLoader).sort()
["add", "isDone", "load", "loadQueue", "loadScripts", "markDone"]
===
* pwpfDslAdd (pwp'add)
* pwpfDslBLoaded (pwp'isDone)
* pwpfDslLoadQueue (pwp'loadQueue)
* pwpfDslLoadScripts (pwp'loadScripts)
* pwpfDslMarkLoaded (pwp'markDone)

oPgmWpg.o1Shortcut (Sct)

name::
* McsEngl.oPgmWpg.o1Shortcut (Sct)@cptIt,
* McsEngl.pwpo1Shortcut@cptIt,
* McsEngl.pwpfPhlShortcut@cptIt,
* McsEngl.pwpfShortcut@cptIt,
* McsEngl.pwp'fShortcuts@cptIt,
* McsEngl.pwp'Shortcuts@cptIt,

* McsEngl.phSct@cptIt,

pwpo1Shortcut.member:
* fSctAddRb
* oSctStore
//2016-03-25
> Object.getOwnPropertyNames(oPgmWpg.o1Shortcut).sort()
["fSctAddRb", "oSctStore"]
//2015-11-26
> Object.getOwnPropertyNames(oPgmWpg.o1Shortcut).sort()
["fSctAdd", "oSctStore"]

oPgmWpg.o1Store

name::
* McsEngl.oPgmWpg.o1Store@cptIt,

oPgmWpg.o1Store.MEMBER:
oStoreCmd: Object
oStoreCss_urlLoaded: Object
oStoreEvtListener: Object
oStoreEvtNative: Object
oStoreMenuitem: Object
oStorePlugin: Object
oStoreToolitem: Object

oPgmWpg.o1Store.oStoreIdOCrl

name::
* McsEngl.oPgmWpg.o1Store.oStoreIdOCrl@cptIt,

oPgmHtml.oCStoreId_Eltobt
deleted 2015-10-15

pwpoCStoreId_Crlobj:
id100
 
 div#id100.clsContainer.clsLayoutFlowItem.clsCnrButton
id101
 
 div#id101.clsContainer.clsLayoutFlowItem.clsCnrButton
id102
 
 div#id102.clsContainer.clsLayoutFlowItem.clsCnrButton
id103
 
 div#id103.clsContainer.clsLayoutFlowItem.clsCnrButton
id104
 
 div#id104.clsContainer.clsLast.clsLayoutFlowItem.clsCnrButton
id105
 
 div#id105.clsBarContent.clsContainer.clsCnrPanel.clsLayoutStackItem
id106
 
 div#id106.clsBarStatusPnl.clsContainer.clsCnrPanel.clsLast.clsLayoutStackItem
id106-body
 
 div#id106-body.clsLayoutFlow
id107
 
 div#id107.clsPath.clsLayoutFlowItem.clsFirst
id108
 
 div#id108.clsLayoutFlowItem.clsResizehandle.clsLast
id111
 
 label#id111.clsWordcount.clsWidget.clsLabel.clsLayoutFlowItem
id112
 
 div#id112.clsWidget.clsTooltip.clsTooltipN
id113
 
 div#id113.clsWidget.clsTooltip.clsTooltipN
id114
 
 div#id114.clsWidget.clsTooltip.clsTooltipN
id115
 
 div#id115.clsWidget.clsTooltip.clsTooltipN
id116
 
 div#id116.clsWidget.clsTooltip.clsTooltipN
id117
 
 div#id117.clsWidget.clsTooltip.clsTooltipN
id15
 
 null
id16
 
 null
id17
 
 null
id18
 
 null
id19
 
 null
id22
 
 null
id23
 
 null
id24
 
 null
id25
 
 null
id26
 
 null
id27
 
 null
id28
 
 null
id29
 
 null
id30
 
 null
id31
 
 null
id32
 
 null
id4
 
 null
id65
 
 div#id65.clsWidget.clsBtn.clsFirst
id66
 
 div#id66.clsWidget.clsBtn.clsDisabled
id67
 
 div#id67.clsWidget.clsBtn.clsLast.clsDisabled
id68
 
 div#id68.clsWidget.clsBtn.clsBtnColor.clsFirst
id69
 
 div#id69.clsWidget.clsBtn.clsBtnColor.clsLast
id70
 
 div#id70.clsWidget.clsBtn.clsMenubtn.clsFirst
id71
 
 div#id71.clsWidget.clsBtn.clsMenubtn.clsFixed-width.clsListbox
id71-open
 
 button#id71-open
id72
 
 div#id72.clsWidget.clsBtn.clsMenubtn.clsFixed-width.clsListbox.clsLast
id72-open
 
 button#id72-open
id73
 
 div#id73.clsWidget.clsBtn.clsFirst
id74
 
 div#id74.clsWidget.clsBtn
id75
 
 div#id75.clsWidget.clsBtn.clsLast
id76
 
 div#id76.clsWidget.clsBtn.clsFirst
id77
 
 div#id77.clsWidget.clsBtn
id78
 
 div#id78.clsWidget.clsBtn
id79
 
 div#id79.clsWidget.clsBtn.clsLast
id80
 
 div#id80.clsWidget.clsBtn.clsSplitbtn.clsMenubtn.clsFirst
id81
 
 div#id81.clsWidget.clsBtn.clsSplitbtn.clsMenubtn.clsLast
id82
 
 div#id82.clsWidget.clsBtn.clsFirst
id83
 
 div#id83.clsWidget.clsBtn
id84
 
 div#id84.clsWidget.clsBtn
id85
 
 div#id85.clsWidget.clsBtn.clsLast
id86
 
 div#id86.clsPgmHtml.clsContainer.clsCnrPanel
id87
 
 div#id87.clsContainer.clsMenubar.clsToolbar.clsFirst.clsLayoutStackItem
id88
 
 div#id88.clsWidget.clsBtn.clsMenubtn.clsFirst.clsLayoutFlowItem
id89
 
 div#id89.clsWidget.clsBtn.clsMenubtn.clsLayoutFlowItem
id90
 
 div#id90.clsWidget.clsBtn.clsMenubtn.clsLayoutFlowItem
id91
 
 div#id91.clsWidget.clsBtn.clsMenubtn.clsLayoutFlowItem
id92
 
 div#id92.clsWidget.clsBtn.clsMenubtn.clsLayoutFlowItem
id93
 
 div#id93.clsWidget.clsBtn.clsMenubtn.clsLayoutFlowItem
id94
 
 div#id94.clsWidget.clsBtn.clsMenubtn.clsLayoutFlowItem
id95
 
 div#id95.clsWidget.clsBtn.clsMenubtn.clsLast.clsLayoutFlowItem
id96
 
 div#id96.clsContainer.clsCnrPanel.clsLayoutStackItem
id97
 
 div#id97.clsContainer.clsToolbar.clsFirst.clsLast.clsLayoutStackItem
id98
 
 div#id98.clsContainer.clsFirst.clsLayoutFlowItem.clsCnrButton
id99
 
 div#id99.clsContainer.clsLayoutFlowItem.clsCnrButton
===
Object {id4: null, id15: null, id16: null, id17: null, id18: null…}
id4: null, id15: null, id16: null, id17: null, id18: null, id19: null, id22: null, id23: null, id24: null, id25: null, id26: null, id27: null, id28: null, id29: null, id30: null, id31: null, id32: null, id65: div#, id65.clsWidget.clsBtn.clsFirst, id66: div#id66.clsWidget.clsBtn.clsDisabled, id67: div#id67.clsWidget.clsBtn.clsLast.clsDisabled, id68: div#id68.clsWidget.clsBtn.clsBtnColor.clsFirst, id69: div#id69.clsWidget.clsBtn.clsBtnColor.clsLastid70: div#id70.clsWidget.clsBtn.clsMenubtn.clsFirstid71: div#id71.clsWidget.clsBtn.clsMenubtn.clsFixed-width.clsListboxid71-open: button#id71-openid72: div#id72.clsWidget.clsBtn.clsMenubtn.clsFixed-width.clsListbox.clsLastid72-open: button#id72-openid73: div#id73.clsWidget.clsBtn.clsFirstid74: div#id74.clsWidget.clsBtnid75: div#id75.clsWidget.clsBtn.clsLastid76: div#id76.clsWidget.clsBtn.clsFirstid77: div#id77.clsWidget.clsBtnid78: div#id78.clsWidget.clsBtnid79: div#id79.clsWidget.clsBtn.clsLastid80: div#id80.clsWidget.clsBtn.clsSplitbtn.clsMenubtn.clsFirstid81: div#id81.clsWidget.clsBtn.clsSplitbtn.clsMenubtn.clsLastid82: div#id82.clsWidget.clsBtn.clsFirstid83: div#id83.clsWidget.clsBtnid84: div#id84.clsWidget.clsBtnid85: div#id85.clsWidget.clsBtn.clsLastid86: div#id86.clsPgmHtml.clsContainer.clsCnrPanelid87: div#id87.clsContainer.clsMenubar.clsToolbar.clsFirst.clsLayoutStackItemid88: div#id88.clsWidget.clsBtn.clsMenubtn.clsFirst.clsLayoutFlowItemid89: div#id89.clsWidget.clsBtn.clsMenubtn.clsLayoutFlowItemid90: div#id90.clsWidget.clsBtn.clsMenubtn.clsLayoutFlowItemid91: div#id91.clsWidget.clsBtn.clsMenubtn.clsLayoutFlowItemid92: div#id92.clsWidget.clsBtn.clsMenubtn.clsLayoutFlowItemid93: div#id93.clsWidget.clsBtn.clsMenubtn.clsLayoutFlowItemid94: div#id94.clsWidget.clsBtn.clsMenubtn.clsLayoutFlowItemid95: div#id95.clsWidget.clsBtn.clsMenubtn.clsLast.clsLayoutFlowItemid96: div#id96.clsContainer.clsCnrPanel.clsLayoutStackItemid97: div#id97.clsContainer.clsToolbar.clsFirst.clsLast.clsLayoutStackItemid98: div#id98.clsContainer.clsFirst.clsLayoutFlowItem.clsCnrButtonid99: div#id99.clsContainer.clsLayoutFlowItem.clsCnrButtonid100: div#id100.clsContainer.clsLayoutFlowItem.clsCnrButtonid101: div#id101.clsContainer.clsLayoutFlowItem.clsCnrButtonid102: div#id102.clsContainer.clsLayoutFlowItem.clsCnrButtonid103: div#id103.clsContainer.clsLayoutFlowItem.clsCnrButtonid104: div#id104.clsContainer.clsLast.clsLayoutFlowItem.clsCnrButtonid105: div#id105.clsBarContent.clsContainer.clsCnrPanel.clsLayoutStackItemid106: div#id106.clsBarStatusPnl.clsContainer.clsCnrPanel.clsLast.clsLayoutStackItemid106-body: div#id106-body.clsLayoutFlowid107: div#id107.clsPath.clsLayoutFlowItem.clsFirstid108: div#id108.clsLayoutFlowItem.clsResizehandle.clsLastid111: label#id111.clsWordcount.clsWidget.clsLabel.clsLayoutFlowItemid112: div#id112.clsWidget.clsTooltip.clsTooltipNid113: div#id113.clsWidget.clsTooltip.clsTooltipN__proto__: Object

oPgmWpg.o1Theme

name::
* McsEngl.oPgmWpg.o1Theme@cptIt,

oPgmWpg.o1Version

name::
* McsEngl.oPgmWpg.o1Version@cptIt,

oPgmWpg.sVrnDate

_CREATED: {2015-05-02}

name::
* McsEngl.oPgmWpg.sVrnDate@cptIt,
* McsEngl.pwpsVrnDate@cptIt,
* McsEngl.pwpsCVersionDate@cptIt,
* McsEngl.pwpsPhlVersionDate@cptIt,

oPgmWpg.sVrnMajor

name::
* McsEngl.oPgmWpg.sVrnMajor@cptIt,
* McsEngl.pwpsVrnMajor@cptIt,
* McsEngl.pwpsCVersionMajor@cptIt,
* McsEngl.pwpsPhlVersionMajor@cptIt,

oPgmWpg.sVrnMinor

name::
* McsEngl.oPgmWpg.sVrnMinor@cptIt,
* McsEngl.pwpsVrnMinor@cptIt,
* McsEngl.pwpsCVersionMinor@cptIt,
* McsEngl.pwpsPhlVersionMinor@cptIt,

oPgmWpg.o1Win

name::
* McsEngl.oPgmWpg.o1Win@cptIt,

oPgmWpg.o2Dom

name::
* McsEngl.oPgmWpg.o2Dom@cptIt,
* McsEngl.pwpo2Dom@cptIt,

_DESCRIPTION:

pwpo2Dom.MEMBER:
> 2016-05-05: Object.getOwnPropertyNames(oPgmWpg.o2Dom).sort()
["fDCssslr", "fDMngrRo", "fDNodeRo", "fDSelectionCrlRo", "fDSelectionRo"]
===
> 2015-04-01:
Object.getOwnPropertyNames(oPgmHtml.oDom).sort()
["fDPnode", "fDScriptloader", "fDSelection", "fDSelectionControl", "fDSelectionTrident", "fDSizzle", "fDUtil", "fDUtilEvent", "fDUtilRange", "fDWalker", "oDUtilEvent"]
===
> Object.getOwnPropertyNames(oPgmHtml.oDom).sort()
["fDomPnode", "fDomScriptloader", "fDomSelection", "fDomSelectionControl", "fDomSelectionTrident", "fDomSizzle", "fDomUtils", "fDomUtlsEvent", "fDomUtlsRange", "fDomWalker", "oDomUtlsEvent"]
===
> Object.getOwnPropertyNames(oPgmHtml.oDom).sort()
["fDomNode", "fDomParser", "fDomParserSax", "fDomSchema", "fDomScriptloader", "fDomSelection", "fDomSelectionControl", "fDomSelectionTrident", "fDomSerializer", "fDomSerializerHtml", "fDomSizzle", "fDomStyles", "fDomTreewalker", "fDomUtils", "fDomUtlsEvent", "fDomUtlsRange", "oDomEntities", "oDomUtlsEvent", "oDomWriter"]

oPgmWpg.o2Dom.fDNodeRo (DNod)

name::
* McsEngl.oPgmWpg.o2Dom.fDNodeRo (DNod)@cptIt,
* McsEngl.pwpfDNodeFtr@cptIt,
* McsEngl.pwpfDNode@cptIt, {2015-04-01}
* McsEngl.pwp'fDomPnode@cptIt,
* McsEngl.tinymce.html.Node@cptIt,
* McsEngl.pwp'fDomNode@cptIt,
* McsEngl.pwp'Node@cptIt,

* McsEngl.phDNod@cptIt,
* McsEngl.phDpnd@cptIt,
* McsEngl.pwp'Dnd@cptIt,
* McsEngl.pwp'Dpn@cptIt,

_DEFINITION:
Pnode = PgmHtml-Node.
[hmnSngo.2014-12-07]
===
function Node(name, type) {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\html\Node.js]

_DESCRIPTION:
This class is a minimalistic implementation of a DOM like node used by the DomParser class.

Examples
var node = new tinymce.html.Node('strong', 1);
someRoot.append(node);

Method  Defined By
create static
Creates a node of a specific type
[http://www.tinymce.com/wiki.php/api4:class.tinymce.html.Node]

oDNode > Object.prototype

name::
* McsEngl.oDNode > Object.prototype@cptIt,
* McsEngl.pwpoDNode'member@cptIt,
* McsEngl.pwpoDNode@cptIt,
* McsEngl.pwpoDomPnode@cptIt,

pwpoDNode.member:
// 2016-04-07
> Object.getOwnPropertyNames(oPgmWpg.o2Dom.fDNodeRo('span')).sort()
["aDNodAtts", "bDNodFixed", "fDNodAppendRo", "fDNodChildofRb", "fDNodCloneRo", "fDNodEmptyRb", "fDNodEmptyRo", "fDNodGetAllRa", "fDNodInsertRo", "fDNodRemoveRo", "fDNodReplaceRo", "fDNodUnwrap", "fDNodWalkRlo", "fDNodWrapRo", "frsouDNodAttr", "oDNodNext", "oDNodPartFirst", "oDNodPartLast", "oDNodPrev", "oDNodWhole", "sDNodName", "sDNodType", "sDNodValue"]
===
//2015-11-30
> Object.getOwnPropertyNames(oPgmWpg.o2Dom.fDNodeFtr()).sort()
[pwpaDNodAtts, pwpbDNodFixed,
pwpfDNodAppend, pwpfDNodAttr, pwpfDNodBChildof, pwpfDNodBEmpty, pwpfDNodClone, pwpfDNodEmpty, pwpfDNodGetAll, pwpfDNodInsert, pwpfDNodRemove, pwpfDNodReplace, pwpfDNodUnwrap, pwpfDNodWalk, pwpfDNodWrap,
pwpoDNodChildFirst, pwpoDNodChildLast, pwpoDNodNext, pwpoDNodPrev,
pwpsDNodName, pwpsDNodType, pwpsDNodValue"]
===
> Object.getOwnPropertyNames(oPgmWpg.o2Dom.fDNode.prototype).sort()
["pwpfDNodAppend", "pwpfDNodAttr", "pwpfDNodBEmpty", "pwpfDNodClone", "pwpfDNodEmpty", "pwpfDNodGetAll", "pwpfDNodInsert", "pwpfDNodRemove", "pwpfDNodReplace", "pwpfDNodUnwrap", "pwpfDNodWalk", "pwpfDNodWrap"]
===
> Object.getOwnPropertyNames(new oPgmWpg.o2Dom.fDNode('link', 1)).sort()
["aDNodAtts", "name", "sDNodType"]
===
* pwpoDNode.firstChild, (pwp'firstChild Node.firstChild),
* fixed
* pwpoDNode.lastChild, (pwp'lastChild Node.lastChild),
* pwpoDNode.name, (pwp'name Node.nodeName), //#comment,#text, IMG, SPAN,...
* pwpoDNode.next, (pwp'next Node.nextSibling),
* pwpoDNode.prev, (pwp'prev Node.prevSibling),
* pwpoDNode.value, (pwp'value Node.nodeValue),

* pwpaDNodAtts, pwpoDNode.attributes (pwp'attributes Node.attributes),
* pwpbDNodShortEnded, (pwp'shortEnded),
* pwpbDNodRaw, pwpoDNode.raw, (pwp'raw)
* pwpoDNodParent, pwpoDNode.parent (pwp'parent Node.parentNode),
* pwpsDNodType, (pwp'type Node.nodeType),

> oDNode.prototype
* pwpfDNodAppend (pwp'append),
* pwpfDNodAttr (pwp'attr),
* pwpfDNodClone (pwp'clone),
* pwpfDNodEmpty (pwp'empty),
* pwpfDNodGetAll (pwp'getAll),
* pwpfDNodInsert (pwp'insert),
* pwpfDNodBEmpty (pwp'isEmpty)
* pwpfDNodRemove (pwp'remove),
* pwpfDNodReplace (pwp'replace),
* pwpfDNodUnwrap (pwp'unwrap),
* pwpfDNodWalk (pwp'walk): to prev|next node.
===
* pwpoDNode.fDNodAppend (pwp'append): Appends a new node as a child of the current node.
* pwpoDNode.fDNodAttr (pwp'attr): Gets/sets or removes an attribute by name.
* pwpoDNode.fDNodBEmpty (pwp'isEmpty): Returns true/false if the node is empty or not.
* pwpoDNode.fDNodClone (pwp'clone): Does a shallow clones the node into a new node.
* pwpoDNode.fDNodEmpty (pwp'empty): Removes all children of the current node.
* pwpoDNode.fDNodGetAll (pwp'getAll): Get all children by name.
* pwpoDNode.fDNodInsert (pwp'insert): Inserts a node at a specific position as a child of the current node.
* pwpoDNode.fDNodRemove (pwp'remove): Removes the node from it's parent.
* pwpoDNode.fDNodReplace (pwp'replace): Replaces the current node with the specified one.
* pwpoDNode.fDNodUnwrap (pwp'unwrap): Unwraps the node in other words it removes the node but keeps the children.
* pwpoDNode.fDNodWalk (pwp'walk): to prev|next node. Walks to the next or previous node and returns that node or null if it wasn't found.
* pwpoDNode.fDNodWrap (pwp'wrap): Wraps the node in in another node.
- pwpfDNodWrap (pwp'wrap),
===
> Object.getOwnPropertyNames(new tinymce.html.Node()).sort()
["name", "type"]
> Object.getOwnPropertyNames(tinymce.html.Node.prototype).sort()
["append", "attr", "clone", "empty", "getAll", "insert", "isEmpty", "remove", "replace", "unwrap", "walk", "wrap"]
> Object.getOwnPropertyNames((new tinymce.oDom.fNode()).__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

pwpoDNode.sDNodType:
01. oHTMLElement
02. oAttr
03. oText, '#text'
04. oCDATASection, '#cdata'
05. ENTITY_REFERENCE_NODE
06. ENTITY_NODE
07. oProcessingInstruction, '#pi'
08. oComment, '#comment'
09. oHTMLDocument
10. oDocumentType, '#doctype'
11. oDocumentFragment, '#document-fragment'
12. NOTATION_NODE
16. DOCUMENT_POSITION_CONTAINED_BY
32. DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC

oPgmWpg.o2Dom.fDSelectionRo (DSln)

name::
* McsEngl.oPgmWpg.o2Dom.fDSelectionRo (DSln)@cptIt,
* McsEngl.pwpfDSelectionRo@cptIt,
* McsEngl.pwpfroDSelection@cptIt,
* McsEngl.pwpfDSelection@cptIt,
* McsEngl.pwpfDomSelection@cptIt,
* McsEngl.pwp'fDomSelection@cptIt,
* McsEngl.tinymce.dom.Selection@cptIt,
* McsEngl.pwp'Selection@cptIt,

* McsEngl.pwpDSln@cptIt,

_DEFINITION:
  * Constructs a new selection instance.
  *
  * @constructor
  * @method Selection
  * @param {tinymce.dom.DOMUtils} dom DOMUtils object reference.
  * @param {Window} win Window to bind the selection object to.
  * @param {tinymce.dom.Serializer} serializer DOM serialization class to use for getContent.
  */
 function Selection(dom, win, serializer, editor) {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\dom\Selection.js]

pwp'o1DSelection

name::
* McsEngl.pwp'o1DSelection@cptIt,
* McsEngl.pwpo1DSelection@cptIt,

pwpo1DSelection:
// 2016-04-17
Object.getOwnPropertyNames(oPgmWpg.o1DSelection).sort()
["explicitRange", "fDSlnBlocksSelectedRa", "fDSlnCollapse", "fDSlnCollapsedRb", "fDSlnContentRs", "fDSlnContentSet", "fDSlnCursor_locationSet", "fDSlnDestroy", "fDSlnEltEndRo", "fDSlnEltRo", "fDSlnEltSelectRo", "fDSlnEltSetRo", "fDSlnEltStartRo", "fDSlnIsForwardRb", "fDSlnNormalize", "fDSlnOBookmarkMovetoRb", "fDSlnOBookmarkRo", "fDSlnRangeRo", "fDSlnRangeSet", "fDSlnScrollIntoview", "fDSlnScrollcontainerRo", "fDSlnSelectionRo", "fDSlnSelectorChanged", "oDSlnDMngr", "oDSlnDSelectionCrl", "oDSlnHToHmlFrmNod", "oDSlnRangeBmkFocusLast", "oDSlnWindow", "oSelectorDataChanged", "selectedRange"]
===
* pwpfDSlnBCollapsed (pwp'isCollapsed)
* pwpfDSlnCollapse (pwp'collapse)
* pwpfDSlnContent (pwp'getContent)
* pwpfDSlnDestroy (pwp'destroy)
* pwpfDSlnEltEnd (pwp'getEnd)
* pwpfDSlnEltSelect (pwp'select)
* pwpfDSlnEltSet (pwp'setNode)
* pwpfDSlnEltStart (pwp'getStart)
* pwpfDSlnNormalize (pwp'normalize)
* pwpfDSlnScrollcontainer (pwp'getScrollContainer)
* pwpfDSlnScrollIntoview (pwp'scrollIntoView)
* pwpfDSlnSetCursor_location (pwp'setCursorLocation)
* pwpfDSlnSelection (pwp'getSel)
===
* pwpoDSlnDSelectionControl (pwp'selectionControl)
* pwpoDSlnDSelectionTrident (pwp'tridentSel)
* pwpoDSlnDUtil
* pwpoDSlnEditor (pwp'editor)
* pwpoDSlnToStringEdr (pwp'selection)
* pwpoDSlnWindow (pwp'win)
===
> Object.getOwnPropertyNames(tinymce.dom.Selection.prototype).sort()
["collapse", "destroy", "getBookmark", "getContent", "getEnd", "getNode", "getRng", "getScrollContainer", "getSel", "getSelectedBlocks", "getStart", "isCollapsed", "isForward", "moveToBookmark", "normalize", "scrollIntoView", "select", "selectorChanged", "setContent", "setCursorLocation", "setNode", "setRng"]

pwpfDSlnCntRs

oPgmWpg.o1DSelection.fDSlnCnt()
<em>here</em>

pwpfDSlnEltRo

oPgmWpg.o1DSelection.fDSlnEltRo()
<em>here</em>

pwpoBookmark

oBookmark.member:
name
index
nBmkKeep
oBmkEnd
oBmkStart
oRange
sBmkId

oPgmWpg.o2Dom.fDSelectionCrlFtr (DScl)

name::
* McsEngl.oPgmWpg.o2Dom.fDSelectionCrlFtr (DScl)@cptIt,
* McsEngl.pwpfDSelectionControl@cptIt,
* McsEngl.tinymce.dom.ControlSelection@cptIt,
* McsEngl.pwp'ControlSelection@cptIt,

* McsEngl.phDScl@cptIt,
* McsEngl.phDscl@cptIt,
* McsEngl.pwp'Dsc@cptIt,

_DEFINITION:
* This class handles control selection of elements. Controls are elements
* that can be resized and needs to be selected as a whole. It adds custom resize handles
* to all browser engines that support properly disabling the built in resize logic.
return function(selection, editor) {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\dom\ControlSelection.js]

_INSTANCE:
Object.getOwnPropertyNames((new tinymce.dom.ControlSelection(null,tinymce.activeEditor))).sort()
["controlSelect", "destroy"]
Object.getOwnPropertyNames((new tinymce.dom.ControlSelection(null,tinymce.activeEditor)).__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
===
* pwpfDscSelectControl (pwp'controlSelect)
* pwpfDscDestroy (pwp'destroy)

oPgmWpg.o2Dom.fDCssslr

name::
* McsEngl.oPgmWpg.o2Dom.fDCssslr@cptIt,
* McsEngl.pwpfDCssslr@cptIt,

_DEFINITION:
function Sizzle( selector, context, results, seed ) {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\dom\Sizzle.js +line:239]

fDCssSelector.prototype

name::
* McsEngl.fDCssSelector.prototype@cptIt,

pwpfDCssSelector.prototype:
> Object.getOwnPropertyNames(oPgmWpg.o2Dom.fDCssSelector.prototype).sort()
["constructor"]

oPgmWpg.o2Dom.fDMngrRo (DMgr)

name::
* McsEngl.oPgmWpg.o2Dom.fDMngrRo (DMgr)@cptIt,
* McsEngl.pwpfroDMngr@cptIt, {2016-03-15}
* McsEngl.pwpfDUtilFtr@cptIt,
* McsEngl.pwpfDUtil@cptIt,
* McsEngl.pwpfDomUtil@cptIt, {2015-03-31}
* McsEngl.pwpfDomUtils@cptIt,
* McsEngl.tinymce.dom.DOMUtils@cptIt,
* McsEngl.pwp'fDomUtils@cptIt,
* McsEngl.pwp'DomUtils@cptIt,

* McsEngl.phDUtl@cptIt,
* McsEngl.phDuts@cptIt,
* McsEngl.pwp'DU@cptIt,
* McsEngl.pwp'Dut@cptIt,

_DEFINITION:
This factory, creates 2 objects:
1) with the-page-document, and the other
2) with the-content-document.
[hmnSngo.2015-11-30]
===
Creates an-object for various DOM manipulation and retrieval functions.

Examples
// Add a class to an element by id in the page
tinymce.DOM.addClass('someid', 'someclass');

// Add a class to an element by id inside the editor
tinymce.activeEditor.dom.addClass('someid', 'someclass');
[http://www.tinymce.com/wiki.php/api4:class.tinymce.dom.DOMUtils]

pwpoDMngr

name::
* McsEngl.pwpoDUtil@cptIt,
* McsEngl.pwpoDomUtil@cptIt,
* McsEngl.pwpoDomUtils@cptIt,
* McsEngl.pwpoUtilsDom@cptIt,
* McsEngl.pwp'oUtilsDom@cptIt,

pwpoDUtil.member:
> 2016-05-05: Object.getOwnPropertyNames(oPgmWpg.o2Dom.fDMngrRo()).sort()
["bDMgrModeStd", "bDMgrModelBox", "fDMgrAttRs", "fDMgrAttSet", "fDMgrAttSetMany", "fDMgrAttsRao", "fDMgrClassvalHasRb", "fDMgrClassvalRemoveRas", "fDMgrClassvalToggle", "fDMgrClsvalAddRas", "fDMgrCssfileLoad", "fDMgrEltAddRao", "fDMgrEltAncestorCommonRo", "fDMgrEltBlockRb", "fDMgrEltCreateFragmentRo", "fDMgrEltCreateRo", "fDMgrEltHiddenRb", "fDMgrEltHide", "fDMgrEltInsertAfterRo", "fDMgrEltMatchCssslrRb", "fDMgrEltRemoveRao", "fDMgrEltRenameRo", "fDMgrEltReplace", "fDMgrEltRlo", "fDMgrEltRunfunctionRao", "fDMgrEltSHmlInnerSet", "fDMgrEltSHmlOuterRs", "fDMgrEltSHmlOuterSet", "fDMgrEltSelectRa", "fDMgrEltShow", "fDMgrEltSplitRo", "fDMgrEltWHRo", "fDMgrEltXYAbsRo", "fDMgrEltXYWHRo", "fDMgrNodeAncestorRlo", "fDMgrNodeAncestorsRalo", "fDMgrNodeBodyRo", "fDMgrNodeCloneRo", "fDMgrNodeEditableRls", "fDMgrNodeEmptyRb", "fDMgrNodeIndexRn", "fDMgrNodeNextRlo", "fDMgrNodePrevRlo", "fDMgrNodeSiblingRlo", "fDMgrOStyleToStringRs", "fDMgrRangeCompareRb", "fDMgrRangeCreateRo", "fDMgrRangeSplitRo", "fDMgrRangeToStringRs", "fDMgrRangeWalk", "fDMgrSColorRgbToHexRs", "fDMgrSEltCreateRs", "fDMgrSHmlDecodeRs", "fDMgrSHmlEncodeRs", "fDMgrSStyleToObjectRo", "fDMgrStyleRs", "fDMgrStyleSet", "fDMgrStyle_eltAdd", "fDMgrUniqueIdRs", "fDMgrWinXYWHRo", "nDMgrCounter", "oDMgrCfg", "oDMgrDoc", "oDMgrFiles", "oDMgrHSchema", "oDMgrHStyle", "oDMgrProps", "oDMgrRoot"]
===

> 2015-11-30: Object.getOwnPropertyNames(oPgmWpg.o2Dom.fDUtilFtr()).sort()
["aDUtlEventsAdded", "bDUtlModeStd", "bDUtlModelBox", "fDUtlAtt", "fDUtlAttSet", "fDUtlAttSetMany", "fDUtlAtts", "fDUtlClassvalueAdd", "fDUtlClassvalueBHas", "fDUtlClassvalueRemove", "fDUtlClassvalueToggle", "fDUtlCssfileLoad", "fDUtlDocFix", "fDUtlElt", "fDUtlEltAdd", "fDUtlEltAncestorCommon", "fDUtlEltB", "fDUtlEltBBlock", "fDUtlEltBHidden", "fDUtlEltCreate", "fDUtlEltCreateFragment", "fDUtlEltHide", "fDUtlEltHtmlInnerSet", "fDUtlEltHtmlOuter", "fDUtlEltHtmlOuterSet", "fDUtlEltInsertAfter", "fDUtlEltOPos", "fDUtlEltORect", "fDUtlEltOSize", "fDUtlEltRemove", "fDUtlEltRename", "fDUtlEltReplace", "fDUtlEltRunfunction", "fDUtlEltSelect", "fDUtlEltShow", "fDUtlEltSplit", "fDUtlEvt_listenerAdd", "fDUtlEvt_listenerCall", "fDUtlEvt_listenerRemove", "fDUtlNodeAncestor", "fDUtlNodeAncestorsarray", "fDUtlNodeBEditable", "fDUtlNodeBEmpty", "fDUtlNodeClone", "fDUtlNodeIndex", "fDUtlNodeNext", "fDUtlNodePrev", "fDUtlNodeRoot", "fDUtlNodeSibling", "fDUtlORangeCompare", "fDUtlORangeCreate", "fDUtlORangeSplit", "fDUtlORangeToString", "fDUtlORangeWalk", "fDUtlOViewportWin", "fDUtlSColorRgbToHex", "fDUtlSEltCreate", "fDUtlShtmlDecode", "fDUtlShtmlEncode", "fDUtlStyle", "fDUtlStyleAdd", "fDUtlStyleSet", "fDUtlStyleToObject", "fDUtlStyleToString", "fDUtlUniqueId",
"nDUtlCounter",
"oDUtilCfg", "oDUtlFiles", "oDUtlHSchema", "oDUtlHStyle", "oDUtlHmlDoc", "oDUtlProps", "oDUtlRoot"]
===
//2015-11-22
> Object.getOwnPropertyNames(oPgmWpg.o2Dom.fDUtil.prototype).sort()
["fDUtlAtt", "fDUtlAttSet", "fDUtlAttSetMany", "fDUtlAtts", "fDUtlClassvalueAdd", "fDUtlClassvalueBHas", "fDUtlClassvalueRemove", "fDUtlClassvalueToggle", "fDUtlCssfileLoad", "fDUtlDocFix", "fDUtlElt", "fDUtlEltAdd", "fDUtlEltAncestorCommon", "fDUtlEltB", "fDUtlEltBHidden", "fDUtlEltCreate", "fDUtlEltCreateFragment", "fDUtlEltHide", "fDUtlEltHtmlInnerSet", "fDUtlEltHtmlOuter", "fDUtlEltHtmlOuterSet", "fDUtlEltInsertAfter", "fDUtlEltOPos", "fDUtlEltORect", "fDUtlEltOSize", "fDUtlEltRemove", "fDUtlEltRename", "fDUtlEltReplace", "fDUtlEltRunfunction", "fDUtlEltSelect", "fDUtlEltShow", "fDUtlEltSplit", "fDUtlNodeAncestor", "fDUtlNodeAncestorsarray", "fDUtlNodeBEditable", "fDUtlNodeBEmpty", "fDUtlNodeClone", "fDUtlNodeIndex", "fDUtlNodeNext", "fDUtlNodePrev", "fDUtlNodeRoot", "fDUtlNodeSibling", "fDUtlORangeCreate", "fDUtlORangeSplit", "fDUtlORangeToString", "fDUtlORangeWalk", "fDUtlOViewportWin", "fDUtlSColorRgbToHex", "fDUtlSEltCreate", "fDUtlShtmlDecode", "fDUtlShtmlEncode", "fDUtlStyle", "fDUtlStyleAdd", "fDUtlStyleSet", "fDUtlStyleToObject", "fDUtlStyleToString", "fDUtlUniqueId", "oDUtlProps", "oDUtlRoot"]

pwpoDUtil.MEMBER:
* phaDUtlEventsAdded

===
* pwpbDUtlModeStd
* pwpbDUtlModelBox
* pwpbDUtlOuterHtml

===
* pwpfDUtlAtt (pwp'getAttrib): Returns the specified attribute by name.
(xEltIn, sAttNameIn, sAttValueDefaultIn)

* pwpfDUtlAttributes (pwp'getAttribs): Returns a NodeList with attributes for the element

* pwpfDUtlAttRemoveAll (pwp'removeAllAttribs): Removes all attributes from an element or elements

* pwpfDUtlAttSet (pwp'setAttrib): Sets the specified attribute of an element or elements

* pwpfDUtlAttSetMany (pwp'setAttribs): Sets two or more specified attributes of an element or elements

* pwpfDUtlClassAdd (pwp'addClass): Adds a class to the specified element or elements

* pwpfDUtlClassBHas (pwp'hasClass): Returns true if the specified element has the specified class

* pwpfDUtlClassRemove (pwp'removeClass): Removes a class from the specified element or elements

* pwpfDUtlClassToggle (pwp'toggleClass): Toggles the specified class on/off

* pwpfDUtlColorRgbToHex (pwp'toHex): Parses the specified RGB color value and returns a hex version of that color

* pwpfDUtlCssLoad (pwp'loadCSS): Imports/loads the specified CSS file into the document bound to the class

* pwpfDUtlDestroy (pwp'destroy): Destroys all internal references to the DOM to solve IE leak issues

* pwpfDUtlDocFix:

* pwpfDUtlElt (pwp'get): Returns the specified element by ID or the input element if it isn't a string

* pwpfDUtlEltAdd (pwp'add): Adds the specified element to another element or elements

* pwpfDUtlEltAncestorCommon (pwp'FindCommonAncestor): Find the common ancestor of two elements

* pwpfDUtlEltB (pwp'is): Returns true/false if the specified element matches the specified css pattern

* pwpfDUtlEltBBlock (pwp'isBlock): Returns true/false if the specified element is a block element or not

* pwpfDUtlEltBHidden (pwp'isHidden): Returns true/false if the element is hidden or not by checking the "display" style

* pwpfDUtlEltCreate (pwp'create): Creates a new js-element

* pwpfDUtlEltCreateFragment (pwp'createFragment): Creates a document fragment out of the specified HTML string

* pwpfDUtlEltCreateHtml (pwp'createHTML)
Creates HTML string for element

* pwpfDUtlEltHide (pwp'hide)
Hides the specified element(s) by ID by setting the "display" style

* pwpfDUtlEltHtmlInnerSet (pwp'setHTML)
Sets the specified HTML content inside the element or elements

* pwpfDUtlEltHtmlOuter (pwp'getOuterHTML)
Returns the outer HTML of an element

* pwpfDUtlEltHtmlOuterSet (pwp'setOuterHTML)
Sets the specified outer HTML on an element or elements

* pwpfDUtlEltParent (pwp'getParent)
Returns a node by the specified selector function

* pwpfDUtlEltParents (pwp'getParents)
Returns a node list of all parents matching the specified selector function or pattern

* pwpfDUtlEltPosXY (pwp'getPos)
Returns the absolute x, y position of a node

* pwpfDUtlEltRect (pwp'getRect)
Returns the rectangle for a specific element

* pwpfDUtlEltRemove (pwp'remove)
Removes/deletes the specified element(s) from the DOM

* pwpfDUtlEltRename (pwp'rename)
Renames the specified element and keeps its attributes and children

* pwpfDUtlEltReplace (pwp'replace)
Replaces the specified element or elements with the new element specified

* pwpfDUtlEltRunfunction (pwp'run)
Executes the specified function on the element by id or dom element node or array of elements/id

* pwpfDUtlEltSelect (pwp'select)
Selects specific elements by a CSS level 3 pattern

* fDUEltShow (pwp'show)
Shows the specified element(s) by ID by setting the "display" style

* pwpfDUtlEltSplit (pwp'split)
Splits an element into two new elements and places the specified split element or elements between t

* pwpfDUtlEltWidthHeight (pwp'getSize)
Returns the size dimensions of the specified element

* pwpfDUtlEventAdd (pwp'bind)
Binds a callback to an event on the specified target

* pwpfDUtlEventInvoke (pwp'fire)
Fires the specified event on the specified target

* pwpfDUtlEventRemove (pwp'unbind)
Unbinds the specified event by name, name and callback or all events on the target

* pwp'aDUEventsAdded (pwp'boundEvents)

* pwpfDUtlHtmlDecode (pwp'decode): Entity decodes a string

* pwpfDUtlHtmlEncode (pwp'encode): Entity encodes a string

* pwpfDUtlNodeBEmpty (pwp'isEmpty): Returns true/false if the specified node is to be considered empty or not

* pwpfDUtlNodeBEditable (pwp'getContentEditable):

* pwpfDUtlNodeClone:

* pwpfDUtlNodeIndex (pwp'nodeIndex)
Returns the index of the specified node within its parent

* pwpfDUtlNodeNext (pwp'getNext)
Returns the next node that matches selector or function

* pwpfDUtlNodePrev (pwp'getPrev): q1
Returns the previous node that matches selector or function

* pwpfDUtlRoot (pwp'getRoot): Returns the root node of the document

* pwpfDUtlStyle (pwp'getStyle)
Returns the current style or runtime/computed value of an element

* pwpfDUtlStyleAdd (pwp'addStyle)
Adds a style element at the top of the document with the specified cssText content

* pwpfDUtlStyleToObject (pwp'parseStyle): FROM jsstring TO jsobject.

* pwpfDUtlStyleToString (pwp'serializeStyle): FROM jsobject TO jsstring.

* pwpfDUtlStyleSet (pwp'setStyle): Sets the CSS style value on a HTML element
- oPgmHtml.oDomUtils.fDUtlStyleSet('mydiv', 'background-color', 'red');
- oPgmHtml.oDomUtils.fDUtlStyleSet('mydiv', {'background-color': 'red', 'color': 'green'});

* pwpfDUtlViewport (pwp'getViewPort): Returns the viewport of the window

===
* pwpnDUtlCounter

===
* pwpoDUtlFiles
* pwpoDUtlHTMLDocument
* pwpoDUtlHtmlStyles
* pwpoDUtlSettings:
- bDUtlKeep_values: false,
- nDUtlHex_colors: 1
- oDUtlHtmlSchema
* pwpoDUtlWindow
===
> 2015-03-31:
Object.getOwnPropertyNames(oPgmHtml.oDomUtil).sort()["aDUtlEventsAdded", "bDUtlModeStd", "bDUtlModelBox", "bDUtlOuterHtml", "fDUtlEltBBlock", "nDUtlCounter", "oDUtlDomUtilEvent", "oDUtlFiles", "oDUtlHTMLDocument", "oDUtlHtmlSchema", "oDUtlHtmlStyles", "oDUtlSettings", "oDUtlWindow"]Object.getOwnPropertyNames(oPgmHtml.oDomUtil.__proto__).sort()["fDUtlAtt", "fDUtlAttRemoveAll", "fDUtlAttSet", "fDUtlAttSetMany", "fDUtlAttributes", "fDUtlClassAdd", "fDUtlClassBHas", "fDUtlClassRemove", "fDUtlClassToggle", "fDUtlColorRgbToHex", "fDUtlCreateRange", "fDUtlCssLoad", "fDUtlDestroy", "fDUtlDocFix", "fDUtlDumpRng", "fDUtlElt", "fDUtlEltAdd", "fDUtlEltAncestorCommon", "fDUtlEltB", "fDUtlEltBHidden", "fDUtlEltCreate", "fDUtlEltCreateFragment", "fDUtlEltCreateHtml", "fDUtlEltHide", "fDUtlEltHtmlInnerSet", "fDUtlEltHtmlOuter", "fDUtlEltHtmlOuterSet", "fDUtlEltParent", "fDUtlEltParents", "fDUtlEltPosXY", "fDUtlEltRect", "fDUtlEltRemove", "fDUtlEltRename", "fDUtlEltReplace", "fDUtlEltRunfunction", "fDUtlEltSelect", "fDUtlEltShow", "fDUtlEltSplit", "fDUtlEltWidthHeight", "fDUtlEventAdd", "fDUtlEventInvoke", "fDUtlEventRemove", "fDUtlHtmlDecode", "fDUtlHtmlEncode", "fDUtlNodeBEditable", "fDUtlNodeBEmpty", "fDUtlNodeClone", "fDUtlNodeIndex", "fDUtlNodeInsertAfter", "fDUtlNodeNext", "fDUtlNodePrev", "fDUtlNodeRoot", "fDUtlNodeSibling", "fDUtlStyle", "fDUtlStyleAdd", "fDUtlStyleSet", "fDUtlStyleToObject", "fDUtlStyleToString", "fDUtlUniqueId", "fDUtlViewport", "oDUtlProps", "oDUtlRoot"]
===
> Object.getOwnPropertyNames(oPgmHtml.oUtilsDom).sort()
["boundEvents", "boxModel", "doc", "events", "files", "hasOuterHTML", "isBlock", "nCounter", "schema", "settings", "stdMode", "styles", "win"]
> Object.getOwnPropertyNames(oPgmHtml.oUtilsDom.__proto__).sort()
["_findSib", "add", "addStyle", "bind", "clone", "create", "createFragment", "createHTML", "createRng", "css", "decode", "destroy", "dumpRng", "encode", "fDUClassAdd", "fObslEventFire", "fUtlDomReplace", "fUtlDomUniqueId", "findCommonAncestor", "fixDoc", "get", "getAttrib", "getAttribs", "getContentEditable", "getNext", "getOuterHTML", "getParent", "getParents", "getPos", "getPrev", "getRect", "getRoot", "getSize", "getStyle", "getViewPort", "hasClass", "hide", "insertAfter", "is", "isEmpty", "isHidden", "loadCSS", "nodeIndex", "parseStyle", "props", "remove", "removeAllAttribs", "removeClass", "rename", "root", "run", "select", "serializeStyle", "setAttrib", "setAttribs", "setHTML", "setOuterHTML", "setStyle", "setStyles", "show", "split", "toHex", "toggleClass", "unbind"]
> Object.getOwnPropertyNames(oPgmHtml.oUtilsDom.__proto__.__proto__).sort()["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
===
> Object.getOwnPropertyNames(tinymce.DOM).sort()
["boundEvents", "boxModel", "counter", "doc", "events", "files", "hasOuterHTML", "isBlock", "schema", "settings", "stdMode", "styles", "win"]
> Object.getOwnPropertyNames(Object.getPrototypeOf(tinymce.DOM)).sort()
["_findSib", "add", "addClass", "addStyle", "bind", "clone", "create", "createFragment", "createHTML", "createRng", "css", "decode", "destroy", "dumpRng", "encode", "findCommonAncestor", "fire", "fixDoc", "get", "getAttrib", "getAttribs", "getContentEditable", "getNext", "getOuterHTML", "getParent", "getParents", "getPos", "getPrev", "getRect", "getRoot", "getSize", "getStyle", "getViewPort", "hasClass", "hide", "insertAfter", "is", "isEmpty", "isHidden", "loadCSS", "nodeIndex", "parseStyle", "props", "remove", "removeAllAttribs", "removeClass", "rename", "replace", "root", "run", "select", "serializeStyle", "setAttrib", "setAttribs", "setHTML", "setOuterHTML", "setStyle", "setStyles", "show", "split", "toHex", "toggleClass", "unbind", "uniqueId"]
===
// different
> Object.getOwnPropertyNames(tinymce.dom).sort()
["ControlSelection", "DOMUtils", "DomQuery", "Event", "EventUtils", "Range", "ScriptLoader", "Selection", "Serializer", "Sizzle", "TreeWalker", "TridentSelection"]

===
> Object.getOwnPropertyNames(new oPgmHtml.oDom.fDomUtils(document)).sort()
[, "boundEvents", "boxModel", "doc", "events", "files", "hasOuterHTML", "isBlock", "nCounter", "schema", "settings", "stdMode", "styles", "win"]
> Object.getOwnPropertyNames((new oPgmHtml.oDom.fDomUtils(document)).__proto__).sort()
[, "_findSib", "add", "addStyle", "bind", "clone", "create", "createFragment", "createHTML", "createRng", "css", "decode", "destroy", "dumpRng", "encode", "fDUClassAdd", "fDUEventInvoking", "fDUReplace", "fUtlDomUniqueId", "findCommonAncestor", "fixDoc", "get", "getAttrib", "getAttribs", "getContentEditable", "getNext", "getOuterHTML", "getParent", "getParents", "getPos", "getPrev", "getRect", "getRoot", "getSize", "getStyle", "getViewPort", "hasClass", "hide", "insertAfter", "is", "isEmpty", "isHidden", "loadCSS", "nodeIndex", "parseStyle", "props", "remove", "removeAllAttribs", "removeClass", "rename", "root", "run", "select", "serializeStyle", "setAttrib", "setAttribs", "setHTML", "setOuterHTML", "setStyle", "setStyles", "show", "split", "toHex", "toggleClass", "unbind"]
===
> Object.getOwnPropertyNames(tinymce.dom.DOMUtils).sort()
["DOM#pl:\File1a\tinymceDev407\js\tinymce\classes\dom\DOMUtils.js +line:2066#", "arguments", "caller", "length", "name", "prototype"]
===
Property  Defined By
DOM static
Instance of DOMUtils for the current document
tinymce.dom.DOMUtils
[http://www.tinymce.com/wiki.php/api4:class.tinymce.dom.DOMUtils]
===
> Object.getOwnPropertyNames(new tinymce.dom.DOMUtils(document)).sort()
["boundEvents", "boxModel", "counter", "doc", "events", "files", "hasOuterHTML", "isBlock", "schema", "settings", "stdMode", "styles", "win"]
> Object.getOwnPropertyNames(tinymce.dom.DOMUtils.prototype).sort()
["_findSib", "add", "addClass", "addStyle", "bind", "clone", "create", "createFragment", "createHTML", "createRng", "css", "decode", "destroy", "dumpRng", "encode", "findCommonAncestor", "fire", "fixDoc", "get", "getAttrib", "getAttribs", "getContentEditable", "getNext", "getOuterHTML", "getParent", "getParents", "getPos", "getPrev", "getRect", "getRoot", "getSize", "getStyle", "getViewPort", "hasClass", "hide", "insertAfter", "is", "isEmpty", "isHidden", "loadCSS", "nodeIndex", "parseStyle", "props", "remove", "removeAllAttribs", "removeClass", "rename", "replace", "root", "run", "select", "serializeStyle", "setAttrib", "setAttribs", "setHTML", "setOuterHTML", "setStyle", "setStyles", "show", "split", "toHex", "toggleClass", "unbind", "uniqueId"]

===
* pwp'oDUDomStyles (pwp'styles)
* pwp'oDUProps (pwp'props)
===
* pwp'clean
Removes all bound event listeners for the specified target

* pwp'createRng
Creates a new DOM Range object

* pwp'insertAfter
Inserts an element after the reference element

* pwp'setStyles
Sets multiple styles on the specified element(s)

[http://www.tinymce.com/wiki.php/api4:class.tinymce.dom.DOMUtils]

pwpoDUtil.fDUtlUniqueId:
* pwp'uniqueId: Returns a unique id
===
o) pwpexefMedSetup
id1 null-elt
... null-elt
id27 null-elt
o) pwpexefMedInit
o) pwpexefEdrRender
fLoadScript:
id28 null-elt
... null-elt
id59 null-elt
o) pwpexefEdrInit
id60 Save toolitem
...
id100 Statusbar
id101 null-elt
id102 null-elt
id103 null-elt
o) pwpexefEdrCntBodyInit
id104 LabelWords

oPgmWpg.o2Hml

name::
* McsEngl.oPgmWpg.o2Hml@cptIt,
* McsEngl.pwpo2Hml@cptIt,
* McsEngl.pwpoHtml@cptIt,
* McsEngl.pwpoShtml@cptIt, {2015-03-30}
* McsEngl.pwpoHtml@cptIt,
* McsEngl.pwp'oHtml@cptIt,

_DESCRIPTION:
HTML is a string for JavaScript. The UI of the program AND the UContent is written in html.
[hmnSngo.2015-04-19]

oPgmWpg.o2Hml.fHBufferFtr (HBfr)

name::
* McsEngl.oPgmWpg.o2Hml.fHBufferFtr (HBfr)@cptIt,
* McsEngl.pwpfHBufferFtr@cptIt,
* McsEngl.pwp'fHtmlBuffer@cptIt,
* McsEngl.pwp'fHtmlWriter@cptIt,
* McsEngl.tinymce.html.Writer@cptIt,
* McsEngl.pwp'oDomWriter@cptIt,
* McsEngl.pwp'Writer@cptIt,
* McsEngl.pwp'Hbr@cptIt,
* McsEngl.phHbr@cptIt,

_SETTINGS:
= input of the constructor.
* bValidate (validate)
* sElement_format (element_format)
* sEntity_encoding (entity_encoding) || 'raw'
* sIndent_after (indent_after)
* sIndent_before (indent_before)
* entities,

_DESCRIPTION:
A buffer (array) for html code.
===
This class is used to write HTML tags out it can be used with the Serializer or the SaxParser.
Examples
var writer = new tinymce.html.Writer({indent: true});
var parser = new tinymce.html.SaxParser(writer).parse('<p><br></p>');
console.log(writer.getContent());
[http://www.tinymce.com/wiki.php/api4:class.tinymce.html.Writer]

pwp'oHtmlBuffer

name::
* McsEngl.pwp'oHtmlBuffer@cptIt,
* McsEngl.pwp'oHtmlWriter@cptIt,
* McsEngl.pwp'oDomWriter@cptIt,

_PROTOTYPE:
> Object.getOwnPropertyNames(tinymce.html.Writer.prototype).sort()
["constructor"]
> Object.getOwnPropertyNames(new oPgmHtml.oHtml.fHtmlWriter()).sort()
["cdata", "comment", "doctype", "end", "getContent", "pi", "reset", "start", "text"]
===
* pwpfHBCdata (pwp'cdata): Writes a <![CDATA[data]]>.
* pwpfHBComment (pwp'comment): Writes a comment element such as <!-- Comment -->
* pwpfHBContent (pwp'getContent): Returns the html that was written.
* pwpfHBDoctype (pwp'doctype): Writes a doctype node such as <!DOCTYPE data>
* pwpfHBPi (pwp'pi): Writes a PI node such as <?xml attr="value" ?>
* pwpfHBReset (pwp'reset): Resets the internal buffer if one wants to reuse the writer
* pwpfHBTagEnd (pwp'end): Writes the end-tag of an element such as </p>
* pwpfHBTagStart (pwp'start): Writes the start-tag of an element such as <p id="a">
* pwpfHBText (pwp'text): Writes a text node

oPgmWpg.o2Hml.fHSchemaFtr (HScm)

name::
* McsEngl.oPgmWpg.o2Hml.fHSchemaFtr (HScm)@cptIt,
* McsEngl.pwpfHSchemaFtr@cptIt,
* McsEngl.pwpfHSchema@cptIt,
* McsEngl.phHtmlSchema@cptIt,
* McsEngl.tinymce.html.Schema@cptIt,
* McsEngl.pwp'fDomSchema@cptIt,
* McsEngl.pwp'fHtmlSchema@cptIt,
* McsEngl.pwp'Schema@cptIt,
* McsEngl.pwp'Hsm@cptIt,

* McsEngl.pwpHScm@cptIt,
* McsEngl.phHsm@cptIt,

_DESCRIPTION:

pwpoHSchema.SETTINGS:
* - bHScmVerify_html: allow all elements if false.
* - sEdrSchema: HScm5.
* - oHScmValid_styles: {elt: 'stl1,stl2'}
* - sHScmAttributesBoolean
* - sHScmChildrenValid
* - sHScmElementsBlock
* - sHScmElementsBlockText
* - sHScmElementsCustom
* - sHScmElementsNonempty
* - sHScmElementsSelfclosing
* - sHScmElementsShortended
* - sHScmElementsSpecial: comma-semarated
* - sHScmElementsValid: comma-separated valid element-names.
* - sHScmElementsValidExtended
* - sHScmElementsValidNo
* - sHScmElementsWhitespace

pwpoHSchema.MEMBER:
* pwpfHScmAttributesBool,
* pwpfHScmBValidEltAtt,
* pwpfHScmBValidEltChild,
* pwpfHScmChildrenValidAdd,
* pwpfHScmElementRule,
* pwpfHScmElementsBlock,
* pwpfHScmElementsBlockText
* pwpfHScmElementsCustom,
* pwpfHScmElementsCustomAdd,
* pwpfHScmElementsNonempty,
* pwpfHScmElementsShelfclosing,
* pwpfHScmElementsShortended,
* pwpfHScmElementsSpecial,
* pwpfHScmElementsValidAdd,
* pwpfHScmElementsValidSet,
* pwpfHScmElementsWhitespace,
* pwpoHScmChildren,
* pwpoHScmElements,
* pwpoHScmStyles,
===
> 2015-04-19:
Object.getOwnPropertyNames(new oPgmHtml.oHtml.fHSchema()).sort()
["fHScmAttributesBool", "fHScmBValidEltAtt", "fHScmBValidEltChild", "fHScmChildrenValidAdd", "fHScmElementRule", "fHScmElementsBlock", "fHScmElementsBlockText", "fHScmElementsCustom", "fHScmElementsCustomAdd", "fHScmElementsEmptyNo", "fHScmElementsSelfclosing", "fHScmElementsShortended", "fHScmElementsSpecial", "fHScmElementsValidAdd", "fHScmElementsValidSet", "fHScmElementsWhitespace", "oHScmChildren", "oHScmElements", "oHScmStyles"]
===
> var o=new oPgmHtml.oHtml.fHSchema()
>Object.getOwnPropertyNames(o).sort()
["fHScmAttrsBool", "fHScmBValidEltAtt", "fHScmBValidEltChild", "fHScmChildrenValidAdd", "fHScmElementRule", "fHScmElementsBlock", "fHScmElementsBlockText", "fHScmElementsCustom", "fHScmElementsCustomAdd", "fHScmElementsEmptyNo", "fHScmElementsSelfclosing", "fHScmElementsShortended", "fHScmElementsSpecial", "fHScmElementsValidAdd", "fHScmElementsValidSet", "fHScmElementsWhitespace", "oHScmChildren", "oHScmElements", "oHScmStyles"]
===
> Object.getOwnPropertyNames(new tinymce.html.Schema).sort()
["addCustomElements", "addValidChildren", "addValidElements", "children", "elements", "getBlockElements", "getBoolAttrs", "getCustomElements", "getElementRule", "getNonEmptyElements", "getSelfClosingElements", "getShortEndedElements", "getSpecialElements", "getTextBlockElements", "getWhiteSpaceElements", "isValid", "isValidChild", "setValidElements", "styles"]
> Object.getOwnPropertyNames(tinymce.html.Schema.prototype).sort()
["constructor"]

===
* pwpfHsmElementsCustomAdd (pwp'addCustomElements)
Adds custom non HTML elements to the schema

* pwpfHsmChildrenValidAdd (pwp'addValidChildren)
The valid children format is: "element[child1|child2]".
Parses a valid children string and adds them to the schema structure

* pwp'addValidElements
Parses a valid elements string and adds it to the schema

* pwpfHsmElementsBlock (pwp'getBlockElements)
Returns a map with block elements

* pwpfHsmAttrsBool (pwp'getBoolAttrs)
Returns an object with boolean attributes

* pwpfHsmElementsCustom (pwp'getCustomElements)
Returns an map object of all custom elements

* pwpfHsmElementRule (pwp'getElementRule)
Returns element object or undefined if the specified element is valid or not according to the schema

* pwpfHsmElementsNonempty (pwp'getNonEmptyElements)
Returns a map with elements that should be treated as contents regardless if it has text content in

* pwpfHsmElementsSelfclosing (pwp'getSelfClosingElements)
Returns a map with self closing tags such as <li>

* pwpfHsmElementsShortended (pwp'getShortEndedElements)
Returns a map with short ended elements such as BR or IMG

* pwpfHsmElementsSpecial (pwp'getSpecialElements)
Returns a map with special elements

* pwp'getTextBlockElements
Returns a map with text block elements

* pwp'getWhiteSpaceElements
Returns a map with elements where white space is to be preserved like PRE or SCRIPT

* pwpfHsmBValidEltAtt (pwp'isValid)
Returns true/false if the specified element name and optional attribute is valid according to the sc

* pwpfHsmBValidEltChild (pwp'isValidChild)
Returns true/false if the specified element and it's child is valid or not according to the schema

* pwp'setValidElements
Parses a valid elements string and sets it to the schema

* pwp'oHsmChildren (pwp'children)

* pwp'oHsmElements (pwp'elements)

* pwp'oHsmStyles (pwp'styles)

pwpoHSchema.fHScmElementsBlock

name::
* McsEngl.pwpoHSchema.fHScmElementsBlock@cptIt,

_CODE.PWP:
> new oPgmHtml.oHtml.fHSchema().fHScmElementsBlock()
Object
ADDRESS: ARTICLE: ASIDE: BLOCKQUOTE: CAPTION: CENTER: DATALIST: DD: DIR: DIV: DL: DT: FIELDSET: FIGURE: FOOTER: FORM: H1: H2: H3: H4: H5: H6: HEADER: HGROUP: HR: ISINDEX: LI: MENU: NAV: NOSCRIPT: OL: OPTGROUP: OPTION: P: PRE: SAMP: SECTION: SELECT: TABLE: TBODY: TD: TFOOT: TH: THEAD: TR: UL: address: article: aside: blockquote: caption: center: datalist: dd: dir: div: dl: dt: fieldset: figure: footer: form: h1: h2: h3: h4: h5: h6: header: hgroup: hr: isindex: li: menu: nav: noscript: ol: optgroup: option: p: pre: samp: section: select: table: tbody: td: tfoot: th: thead: tr: ul:

pwpoHSchema.oHScmStoreEltrule

name::
* McsEngl.pwpoHSchema.oHScmStoreEltrule@cptIt,

pwpoHScmStoreEltrule:
{elt: {oHScmEltrule}}
* pwpoHScmEltrule.member
- aHScmAtt_pattern
- aHScmAtts_default
- aHScmAtts_forced
- aHScmAtts_required

- bHScmAttsEmptyRemove
- bHScmPaddEmpty
- bHScmRemovedEmpty

- oHScmChild

- pattern
- required
- outputName

pwp'html-element

name::
* McsEngl.pwp'html-element@cptIt,

_SPECIFIC:
pwp'oElementsWhitespace = fCreateTableLookup('whitespace_elements',
'pre script noscript style textarea video audio iframe object');
pwp'oElementsSelfclosing = fCreateTableLookup('self_closing_elements',
'colgroup dd dt li option p td tfoot th thead tr');
pwp'oElementsShortended = fCreateTableLookup('short_ended_elements',
'area base basefont br col frame hr img input isindex link ' +
'meta param embed source wbr track');
pwp'oElementsBooleanattrs = fCreateTableLookup('boolean_attributes',
'checked compact declare defer disabled ismap multiple nohref noresize ' +
'noshade nowrap readonly selected autoplay loop controls');
pwp'oElementsNonempty = fCreateTableLookup('non_empty_elements',
'td th iframe video audio object', oElementsShortended);
pwp'oElementsBlockText = fCreateTableLookup('text_block_elements',
'h1 h2 h3 h4 h5 h6 p div address pre form ' +
'blockquote center dir fieldset header footer article section hgroup aside nav figure');
pwp'oElementsBlock = fCreateTableLookup('block_elements',
'hr table tbody thead tfoot ' +
'th tr td li ol ul caption dl dt dd noscript menu isindex samp option ' +
'datalist select optgroup', oElementsBlockText);

oPgmWpg.o2Hml.fHStyleFtr (HStl)

name::
* McsEngl.oPgmWpg.o2Hml.fHStyleFtr (HStl)@cptIt,
* McsEngl.tinymce.html.Styles@cptIt,
* McsEngl.pwp'fDomStyles@cptIt,
* McsEngl.pwp'Styles@cptIt,
* McsEngl.phHst@cptIt,

_DEFINITION:
return function(settings, schema) {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\html\Styles.js]

_DESCRIPTION:
Converts string css-declarations (property:value) to a JSobject and backwards.
[hmnSngo.2014-12-02]
===
This class is used to parse CSS styles it also compresses styles to reduce the output size.
Examples

var Styles = new tinymce.html.Styles({
url_converter: function(url) {
return url;
}
});

styles = Styles.parse('border: 1px solid red');
styles.color = 'red';

console.log(new tinymce.html.StyleSerializer().serialize(styles));
Methods

Method  Defined By
parse
Parses the specified style value into an object collection
tinymce.html.Styles
serialize
Serializes the specified style object into a string
tinymce.html.Styles
toHex
Parses the specified RGB color value and returns a hex version of that color
tinymce.html.Styles
[http://www.tinymce.com/wiki.php/api4:class.tinymce.html.Styles]

pwpoHStyle'member

name::
* McsEngl.pwpoHStyle'member@cptIt,

pwpoHStyle.member:
//2015-11-29
> Object.getOwnPropertyNames(oPgmWpg.o2Hml.fHStyle()).sort()
["fHStlFromRgbToHex", "fHStlToObject", "fHStlToString"]
===
> Object.getOwnPropertyNames(new tinymce.html.Styles).sort()
["parse", "serialize", "toHex"]
> Object.getOwnPropertyNames(tinymce.html.Styles.prototype).sort()
["constructor"]
===
* pwpfHStlFromRgbToHex (pwp'toHex)
* pwpfHStlToObject (pwp'parse)
* pwpfHStlToSCssdecl (pwp'serialize)

oPgmWpg.o2Hml.fHToDNodeFtr (HTdn)

name::
* McsEngl.oPgmWpg.o2Hml.fHToDNodeFtr (HTdn)@cptIt,
* McsEngl.phShToDNode@cptIt,
* McsEngl.pwp'fHtmlStringToPnode@cptIt, {2014-12-08}
* McsEngl.tinymce.html.DomParser@cptIt,
* McsEngl.pwp'DomParser@cptIt,
* McsEngl.pwp'fDomParser@cptIt,
* McsEngl.pwp'fHtmlParser@cptIt,
* McsEngl.pwp'fHtmlParserDom@cptIt,
* McsEngl.pwp'Hpr@cptIt,
* McsEngl.pwp'Hsp@cptIt,
* McsEngl.phHsp@cptIt,

_DEFINITION:
This class parses HTML code into a DOM like structure of nodes it will remove redundant whitespace and make sure that the node tree is valid according to the specified schema. So for example: <p>a<p>b</p>c</p> will become <p>a</p><p>b</p><p>c</p>

Examples
var parser = new tinymce.html.DomParser({validate: true}, schema);
var rootNode = parser.parse('<h1>content</h1>');

Constructors
Method  Defined By
DomParser
Constructs a new DomParser instance
tinymce.html.DomParser
Methods

Method  Defined By
addAttributeFilter
Adds a attribute filter function to the parser, the parser will collect nodes that has the specified
tinymce.html.DomParser
addNodeFilter
Adds a node filter function to the parser, the parser will collect the specified nodes by name and t
tinymce.html.DomParser
filterNode
Runs the specified node though the element and attributes filters
tinymce.html.DomParser
parse
Parses the specified HTML string into a DOM like node tree and returns the result
tinymce.html.DomParser
[http://www.tinymce.com/wiki.php/api4:class.tinymce.html.DomParser]

pwpoHToDNode:
//{2015-12-17}
> oPgmWpg.o2Hml.fHToDNodeFtr()
Object {}
* fHTdnFilterAttributeAdd: (sAttsIn, fCallbackIn)
* fHTdnFilterDNode: (oDNodeIn)
* fHTdnFilterDNodeAdd: (sNodesIn, fCallbackIn)
* fHTdnParse: (sHmlIn, oHTdnPrsArgsIn)
* oHSchema: Object
===
> Object.getOwnPropertyNames(new tinymce.html.DomParser).sort()
["addAttributeFilter", "addNodeFilter", "filterNode", "parse", "schema"]
> Object.getOwnPropertyNames(tinymce.html.DomParser.prototype).sort()
["constructor"]
> Object.getOwnPropertyNames(oDp).sort()
["addAttributeFilter", "addNodeFilter", "filterNode", "parse", "schema"]
===
* pwp'fHspAttributeFilterAdd (pwp'addAttributeFilter).
* pwpfHspFilterNode (pwp'filterNode).
* pwpfHspParse (pwp'parse)

pwpoHToDNode.fHTdnParse(sHmlIn; oCfgIn)

name::
* McsEngl.pwpoHToDNode.fHTdnParse(sHmlIn; oCfgIn)@cptIt,
* McsEngl.pwpfHTdnParse@cptIt,

_PARAMETER:
* - bInvalid
* - bRootContent
* - sContext: root node name
* - sCfgForced_root_block

oPgmWpg.o2Hml.fHToDNodeSaxFtr (HTds)

name::
* McsEngl.oPgmWpg.o2Hml.fHToDNodeSaxFtr (HTds)@cptIt,
* McsEngl.pwpfHToDNodeSaxFtr@cptIt,
* McsEngl.pwpfToDNodeSax@cptIt,
* McsEngl.pwpfShToDNodeSax@cptIt,
* McsEngl.pwp'fHtmlStringToPnodeSax@cptIt,
* McsEngl.tinymce.html.SaxParser@cptIt,
* McsEngl.pwp'fDomParserSax@cptIt,
* McsEngl.pwp'SaxParser@cptIt,
* McsEngl.pwp'Hps@cptIt,
* McsEngl.pwp'Hsps@cptIt,
* McsEngl.phHsps@cptIt,

fHtmlStringToPnodeSax.SETTINGS:
* fix_self_closing,
* remove_internals,
* self_closing_elements,
* validate,

_INSTANCE:
> Object.getOwnPropertyNames(new tinymce.html.SaxParser).sort()
["cdata", "comment", "doctype", "end", "parse", "pi", "schema", "start", "text"]
> Object.getOwnPropertyNames(tinymce.html.SaxParser.prototype).sort()
["constructor"]

_DESCRIPTION:
This class parses HTML code using pure JavaScript and executes various events for each item it finds. It will always execute the events in the right order for tag soup code like <b><p></b></p>. It will also remove elements and attributes that doesn't fit the schema if the validate setting is enabled.
Examples
var parser = new tinymce.html.SaxParser({
validate: true,

comment: function(text) {
console.log('Comment:', text);
},

cdata: function(text) {
console.log('CDATA:', text);
},

text: function(text, raw) {
console.log('Text:', text, 'Raw:', raw);
},

start: function(name, attrs, empty) {
console.log('Start:', name, attrs, empty);
},

end: function(name) {
console.log('End:', name);
},

pi: function(name, text) {
console.log('PI:', name, text);
},

doctype: function(text) {
console.log('DocType:', text);
}
}, schema);
Constructors

Method  Defined By
SaxParser
Constructs a new SaxParser instance
tinymce.html.SaxParser
Methods

Method  Defined By
parse
Parses the specified HTML string and executes the callbacks for each item it finds
tinymce.html.SaxParser
[http://www.tinymce.com/wiki.php/api4:class.tinymce.html.SaxParser]

oPgmWpg.o2Hml.fHToHmlFrmDNodFtr (HThd)

name::
* McsEngl.oPgmWpg.o2Hml.fHToHmlFrmDNodFtr (HThd)@cptIt,
* McsEngl.pwpfHToString@cptIt,
* McsEngl.pwp'fHtmlPnodeToString@cptIt, {2014-12-08}
* McsEngl.pwp'fHtmlFromDndtreeToString@cptIt,
* McsEngl.pwp'fHtmlSerializer@cptIt,
* McsEngl.tinymce.html.Serializer@cptIt,
* McsEngl.pwp'fDomSerializerHtml@cptIt,
* McsEngl.pwp'SerializerHtml@cptIt,
* McsEngl.pwp'Hps@cptIt,
* McsEngl.phHps@cptIt,

_DEFINITION:
Transforms a-DNode to sHtml.

_MEMBER:
//{2015-12-17}
> oPgmWpg.o2Hml.fHToHmlFrmDNodFtr()
Object {
* fHThdSerialize: (oDNodeIn)
* oHBuffer: Object
* oHSchema: Object
===
> Object.getOwnPropertyNames(new tinymce.html.Serializer).sort()
["schema", "serialize", "writer"]

pwpoHToString'settings

name::
* McsEngl.pwpoHToString'settings@cptIt,

_SPECIFIC:
* pwpbHTsgInner,
* pwpbHTsgValidate
===
apply_source_formatting
indent
indent_after
indent_before

pwpfHThdSerialize

oPgmWpg.o2Hml.fHToHmlFrmNodFtr (HThn)

name::
* McsEngl.oPgmWpg.o2Hml.fHToHmlFrmNodFtr (HThn)@cptIt,
* McsEngl.pwpfShFromDNodeEdr@cptIt,
* McsEngl.pwp'fHtmlPnodeEdrToString@cptIt,
* McsEngl.tinymce.dom.Serializer@cptIt,
* McsEngl.pwp'fDomSerializer@cptIt,
* McsEngl.pwp'Serializer@cptIt,
* McsEngl.pwp'hse@cptIt,
* McsEngl.pwp'Hpes@cptIt,

* McsEngl.phShFne@cptIt,
* McsEngl.phHpes@cptIt,

_DEFINITION:
Converts dom-tree to html with input the editor.
[hmnSngo.2014-11-30]
===
* This class is used to serialize DOM trees into a string.
* Consult the TinyMCE Wiki API for
* more details and examples on how to use this class.
return function(settings, editor) {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\dom\Serializer.js]

_MEMBER:
> Object.getOwnPropertyNames(tinymce.dom.Serializer.prototype).sort()
["constructor"]
> Object.getOwnPropertyNames(new tinymce.dom.Serializer(tinymce.activeEditor)).sort()
["addAttributeFilter", "addNodeFilter", "addRules", "onPostProcess", "onPreProcess", "schema", "serialize", "setRules"]

pwpfHThnSerialize(oCntBody, oCntCfgIn)
- bCntCleanupNo
- bCntEvtProcessPreNo
- bCntGet
- bCntGetInner
- bCntInitial
- bCntSelection
- sCnt
- sCntFormat || 'html', raw, text
- sCfgForced_root_block

oPgmWpg.o2Hml.oHChar (HChr)

name::
* McsEngl.oPgmWpg.o2Hml.oHChar (HChr)@cptIt,
* McsEngl.pwpoHChar@cptIt, {2015-11-24}
* McsEngl.pwpoShCharref@cptIt, {2015-03-30}
* McsEngl.pwp'oHtmlCharrefs@cptIt, {2014-12-06}
* McsEngl.pwp'oHtmlEntities@cptIt,
* McsEngl.tinymce.html.Entities@cptIt,
* McsEngl.pwp'Entities@cptIt,
* McsEngl.pwp'oDomEntities@cptIt,

* McsEngl.pwpHCrf@cptIt,
* McsEngl.pwp'Het@cptIt,
* McsEngl.phHcr@cptIt,

_DEFINITION:
var Entities = {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\html\Entities.js +line:118]

_DESCRIPTION:
Entity encoder class.
[http://www.tinymce.com/wiki.php/api4:class.tinymce.html.Entities]

pwpoHCharref.MEMBER:
//2015-11-24
> Object.getOwnPropertyNames(oPgmWpg.o2Html.oHChar).sort()
["fHChrDecode", "fHChrEncodeBase", "fHChrEncodeBaseAll", "fHChrEncodeDecimal", "fHChrEncodeFunction", "fHChrEncodeNamed"]
===
* pwpfHcrDecode (pwp'decode): Decodes the specified string, this will replace entities with raw UTF characters.
* pwpfHcrEncodeBase (pwp'encodeRaw):
* pwpfHerEncodeBaseAll (pwp'encodeAllRaw): Encoded the specified text with both the attributes and text entities.
* pwpfHcrEncodeDecimal (pwp'encodeNumeric): Encodes the specified string using numeric entities.
* pwpfHcrEncodeFunction (pwp'getEncodeFunc): Returns an encode function based on the name(s) and it's optional entities.
* pwpfHcrEncodeNamed (pwp'encodeNamed): Encodes the specified string using named entities.
===
> 2015-04-20:
Object.getOwnPropertyNames(oPgmHtml.oHtml.oHCharref).sort()
["fHCrfDecode", "fHCrfEncodeBase", "fHCrfEncodeBaseAll", "fHCrfEncodeDecimal", "fHCrfEncodeFunction", "fHCrfEncodeNamed"]
===
> Object.getOwnPropertyNames(tinymce.html.Entities).sort()
["decode", "encodeAllRaw", "encodeNamed", "encodeNumeric", "encodeRaw", "getEncodeFunc"]
> Object.getOwnPropertyNames(tinymce.html.Entities.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

oPgmWpg.o2I

name::
* McsEngl.oPgmWpg.o2I@cptIt,
* McsEngl.pwpo2I@cptIt,
=== _OLD:
* McsEngl.pwpoI@old, {2014-12-17}
* McsEngl.pwpoInterface@old,
* McsEngl.pwpoUi@old,
* McsEngl.pwp'oUi@old,
* McsEngl.pwp'ui@old,
* McsEngl.pwp'ui-namespace@old,
* McsEngl.phtmlOUi@old,

_DESCRIPTION:
Contains the different UI types such as buttons, listboxes etc.
[http://www.tinymce.com/wiki.php/api4:namespace.tinymce.ui]

_WHOLE:
* oPgmWpg#linkidPwpoPgmWpg#ql:idPwpoPgmWpg##

_GENERIC:
* http://synagonism.net/dMiw/dTchInf/lngJs.html#idLjbObject.prototype,


_GENERIC_SPECIFIC_TREE:
Object.prototype,
 oIAkCrl,
 oICrl,
   oICCnr,
     oICCButtoncnr,
     oICCFormcnr,
       oICCFFieldsetcnr,
     oICCFormitmcnr,
     oICCPanelcnr,
       oICCPFloatcnr,
         oICCPFMenucnr,
         oICCPFWincnr,
           oICCPFWMsgboxcnr,
       oICCPTabcnr,
     oICCToolbarcnr,
       oICCTMenubarcnr,
   oICHover,
     oICHButton,
       oICHBMenubtn,
         oICHBMListbtn,
         oICHBMSplitbtn,
       oICHBPanelbtn,
         oICHBPColorbtn,
     oICHCombobox,
       oICHCbFilepick,
     oICHCheckbox,
       oICHCkRadio,
     oICHIframe,
     oICHLabel,
     oICHMenuitm,
     fICWResizer,
     oICHSpacer,
     oICHTextbox,
   oICPath,
     oICPElement,
   oICTooltip,
 oIDragdrop,
 oIKbdnvn,
 oIFactory,
 oILayout,
   oILAbs,
     oILAFit,
     oILAFlex,
     oILAGrid,
   oILFlow,
     oILFStack,
 oIResizable,
 oISelector,
 oIThrobber,
 oIMovable,
 oIScrollable,

oPgmWpg o2I.MEMBER:
> pwp.0-90v: 2016-05-06 Object.getOwnPropertyNames(oPgmWpg.o2I).sort()
["aIPanelsVisible", "fIAkCrlRo", "fICCButtoncnrRo", "fICCFFieldsetcnrRo", "fICCFormcnrRo", "fICCFormitmcnrRo", "fICCPFMenucnrRo", "fICCPFWMsgboxcnrRo", "fICCPFWincnrRo", "fICCPFloatcnrRo", "fICCPFltHideAll", "fICCPTabcnrRo", "fICCPanelcnrRo", "fICCTMenubarcnrRo", "fICCToolbarcnrRo", "fICCnrRo", "fICHBMListbtnRo", "fICHBMSplitbtnRo", "fICHBMenubtnRo", "fICHBPColorbtnRo", "fICHBPanelbtnRo", "fICHButtonRo", "fICHCbFilepickRo", "fICHCheckboxRo", "fICHCkRadioRo", "fICHComboboxRo", "fICHIframeRo", "fICHLabelRo", "fICHMenuitmRo", "fICHSpacerRo", "fICHTextboxRo", "fICHoverRo", "fICPElementRo", "fICPathRo", "fICTooltipRo", "fICrlRo", "fIDragdropRo", "fIFactoryRo", "fIKbdnvnRo", "fILAFitRo", "fILAFlexRo", "fILAGridRo", "fILAbsRo", "fILFStackRo", "fILFlowRo", "fILayoutRo", "fIMovableRo", "fISelectorRo", "fIThrobberRo", "oIResizable"]
===
> 2015-02-18 Object.getOwnPropertyNames(oPgmHtml.oI).sort()
["fCCButtongroup", "fCCCButtongroup", "fCCCForm", "fCCCFormitem", "fCCCPFWMessage", "fCCCPFWindow", "fCCCPanel", "fCCCPanelFloat", "fCCCPanelFloatMenu", "fCCCPanelTab", "fCCCToolbar", "fCCCToolbarMenubar", "fCCContainer", "fCCFormFieldset", "fCCFormitem", "fCCPanel", "fCCPanelFloat", "fCCPanelFloatMenu", "fCCPanelFloatWindow", "fCCPanelTab", "fCCToolbar", "fCCToolbarMenubar", "fCCTooltip", "fCCWButton", "fCCWButtonMenu", "fCCWButtonMenuListbox", "fCCWButtonMenuSplit", "fCCWButtonPanel", "fCCWButtonPanelColor", "fCCWCheckbox", "fCCWCheckboxRadio", "fCCWCombobox", "fCCWComboboxFilepicker", "fCCWIframe", "fCCWLabel", "fCCWMenuitem", "fCCWSpacer", "fCCWTextbox", "fCCWidget", "fCControl", "fCPath", "fCPathElement", "fCWButton", "fCWButtonMenu", "fCWButtonMenuListbox", "fCWButtonMenuSplit", "fCWButtonPanel", "fCWButtonPanelColor", "fCWIframe", "fCWLabel", "fCWResizehandle", "fCWSpacer", "fCWTextbox", "fCWidget", "fICCForm", "fICContainer", "fICTooltip", "fICollection", "fIControl", "fIHelperDrag", "fILayout", "fILayoutAbsolute", "fILayoutAbsoluteFit", "fILayoutAbsoluteFlex", "fILayoutAbsoluteGrid", "fILayoutFlow", "fILayoutFlowStack", "fINavKeyboard", "fISelector", "fIThrobber", "oIFactory", "oIMovable", "oIResizable", "oIScrollable"]
===
> Object.getOwnPropertyNames(oPgmHtml.oUi).sort()
["fCCButtongroup", "fCCCButtongroup", "fCCCForm", "fCCCFormitem", "fCCCPanel", "fCCCPanelFloat", "fCCCPanelFloatMenu", "fCCCPanelFloatWindow", "fCCCPanelFloatWindowMessage", "fCCCPanelTab", "fCCCToolbar", "fCCCToolbarMenubar", "fCCContainer", "fCCForm", "fCCFormFieldset", "fCCFormitem", "fCCPanel", "fCCPanelFloat", "fCCPanelFloatMenu", "fCCPanelFloatWindow", "fCCPanelTab", "fCCToolbar", "fCCToolbarMenubar", "fCCTooltip", "fCCWButton", "fCCWButtonMenu", "fCCWButtonMenuListbox", "fCCWButtonMenuSplit", "fCCWButtonPanel", "fCCWButtonPanelColor", "fCCWCheckbox", "fCCWCheckboxRadio", "fCCWCombobox", "fCCWComboboxFilepicker", "fCCWIframe", "fCCWLabel", "fCCWMenuitem", "fCCWSpacer", "fCCWTextbox", "fCCWidget", "fCContainer", "fCControl", "fCPath", "fCPathElement", "fCTooltip", "fCWButton", "fCWButtonMenu", "fCWButtonMenuListbox", "fCWButtonMenuSplit", "fCWButtonPanel", "fCWButtonPanelColor", "fCWIframe", "fCWLabel", "fCWResizehandle", "fCWSpacer", "fCWTextbox", "fCWidget", "fControl",

"fUiCollection", "fUiHelperDrag", "fUiLAbsolute", "fUiLAbsoluteFit", "fUiLAbsoluteFlex", "fUiLAbsoluteGrid", "fUiLFlow", "fUiLFlowStack", "fUiLayout", "fUiNavigationKeyboard", "fUiSelector", "fUiThrobber", "oUiFactory", "oUiMovable", "oUiResizable", "oUiScrollable"]

pwpo2I.fIAkCrlRo (IAkc)

name::
* McsEngl.pwpo2I.fIAkCrlRo (IAkc)@cptIt,
* McsEngl.pwpfIAkCrlRo@cptIt,
=== _OLD:
* McsEngl.pwpfroIAloCrl@old, {2016-02-26}
* McsEngl.pwpfIArrlikeCrlFtr@old, {2016-01-02}
* McsEngl.pwpfICrlsetFtr@old,
* McsEngl.pwpfICollection@old,
* McsEngl.pwpCollection@old,
* McsEngl.pwp'Collection@old,
* McsEngl.pwp'fICollection@old,
* McsEngl.pwpICln@old,

_DESCRIPTION:
This object-factory-function creates an-array-like-object (= has 'length' as member and you can access its members like an-array) of oICrls and it enables you to perform actions on all the contained oICrls.
INPUT: Array|oIAkCrl of oICrls or one oICrl to add to the-array-like-object.

_WHOLE:
* o2I#linkidPwpo2I#ql:idPwpo2I##
* oPgmWpg##
* http://synagonism.net/dMiw/dTchInf/lngJs.html#idLjbwindow,

pwpoIAkCrl

name::
* McsEngl.pwpoIAkCrl@cptIt,

pwpoIAkCrl.member:
> pwp.0-90v 2016-05-06: Object.getOwnPropertyNames(oPgmWpg.o2I.fIAkCrlRo()).sort()
["pwpfIAkcAddRo", "pwpfIAkcClassAddRo", "pwpfIAkcClassRb", "pwpfIAkcDisabledRbo", "pwpfIAkcEachRo", "pwpfIAkcEqRo", "pwpfIAkcFilterRo", "pwpfIAkcIndexofRn", "pwpfIAkcMethodExecRo", "pwpfIAkcMethodSetGetRx", "pwpfIAkcParentRo", "pwpfIAkcRemoveRo", "pwpfIAkcReverseRo", "pwpfIAkcSetRo", "pwpfIAkcSliceRo", "pwpfIAkcTextRaso", "pwpfIAkcToArrayRa", "pwpfIAkcVisibleRbo", "pwpfIAkcXValueRx", "pwplength"]
===
> 2016-01-02: Object.getOwnPropertyNames(oPgmWpg.o2I.fIArrlikeCrlFtr()).sort()
["pwpfIAlcAdd", "pwpfIAlcBClass", "pwpfIAlcClassAdd", "pwpfIAlcDisabled", "pwpfIAlcEach", "pwpfIAlcEq", "pwpfIAlcFilter", "pwpfIAlcIndexof", "pwpfIAlcMethodExec", "pwpfIAlcMethodSetGet", "pwpfIAlcParent", "pwpfIAlcRemove", "pwpfIAlcReverse", "pwpfIAlcSet", "pwpfIAlcSlice", "pwpfIAlcText", "pwpfIAlcToArray", "pwpfIAlcValue", "pwpfIAlcVisible", "pwplength"]
===
//2015-12-01
> Object.getOwnPropertyNames(oPgmWpg.o2I.fICrlsetFtr()).sort()
[pwpfICstAdd, pwpfICstBClass, pwpfICstClassAdd, pwpfICstDisabled, pwpfICstEach, pwpfICstEq, pwpfICstFilter, pwpfICstIndexof, pwpfICstMethodExec, pwpfICstMethodSetGet, pwpfICstParent, pwpfICstRemove, pwpfICstReverse, pwpfICstSet, pwpfICstSlice, pwpfICstText, pwpfICstToArray, pwpfICstValue, pwpfICstVisible, pwplength"]
===
* pwpfIclnAdd, out: oICollection,
* pwpfIclnBClass,
* pwpfIclnClassAdd,
* pwpfIclnEach,
* pwpfIclnEq,
* pwpfIclnFilter,
* pwpfIclnIndexof,
* pwpfIClnMethodExec (pwp'fIclnExec),
* pwpfIClnMethodSetGet (pwp'fIclnMethodItem, pwp'prop),
* pwpfIclnParent,
* pwpfIclnRemove,
* pwpfIclnReverse, (pwp'reverse)
* pwpfIclnSet, (pwp'set): sets new items in the collection.
* pwpfIclnSlice,
* pwpfIclnText, (pwp'text)
* pwpfIclnToArray,

* pwpength,
===
> Object.getOwnPropertyNames(new oPgmHtml.oI.fICollection()).sort()
["fIclnAdd", "fIclnBClass", "fIclnClassAdd", "fIclnEach", "fIclnEq", "fIclnExec", "fIclnFilter", "fIclnIndexof", "fIclnMethodItem", "fIclnParent", "fIclnRemove", "fIclnReverse", "fIclnSet", "fIclnSlice", "fIclnText", "fIclnToArray", "length"]
> Object.getOwnPropertyNames(new oPgmHtml.oI.fICollection().__proto__).sort()
["constructor"]
===
> Object.getOwnPropertyNames(new oPgmHtml.oI.fICollection()).sort()
["fIclnAdd", "fIclnBClass", "fIclnEach", "fIclnEq", "fIclnExec", "fIclnFilter", "fIclnIndexof", "fIclnProp", "fIclnRemove", "fIclnReverse", "fIclnSet", "fIclnSlice", "fIclnToArray", "length"]
Object.getOwnPropertyNames(new oPgmHtml.oI.fICollection().__proto__).sort()
["after", "append", "before", "checked", "constructor", "data", "disabled", "fIcrlClassAdd", "fIcrlReflow", "fire", "hide", "name", "off", "on", "parent", "prepend", "removeClass", "selected", "show", "text", "value", "visible"]
Object.getOwnPropertyNames(new oPgmHtml.oI.fICollection().__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toSource", "toString", "unwatch", "valueOf", "watch"]
===
> Object.getOwnPropertyNames((new oPgmHtml.oI.fICollection())).sort()
["fIcnAdd", "fIcnBClass", "fIcnEach", "fIcnEq", "fIcnExec", "fIcnFilter", "fIcnIndexof", "fIcnProp", "fIcnRemove", "fIcnReverse", "fIcnSet", "fIcnSlice", "fIcnToArray", "length"]
> Object.getOwnPropertyNames((new oPgmHtml.oI.fICollection()).__proto__).sort()
["after", "append", "before", "checked", "constructor", "data", "disabled", "fBActive", "fCrlClassAdd", "fCrlReflow", "fire", "hide", "name", "off", "on", "parent", "prepend", "removeClass", "selected", "show", "text", "value", "visible"]
===
> Object.getOwnPropertyNames((new tinymce.ui.Collection)).sort()
[]
> Object.getOwnPropertyNames((new tinymce.ui.Collection).__proto__).sort()
["active", "add", "addClass", "after", "append", "before", "checked", "data", "disabled", "each", "eq", "exec", "filter", "fire", "hasClass", "hide", "indexOf", "init", "length", "name", "off", "on", "parent", "prepend", "prop", "reflow", "remove", "removeClass", "reverse", "selected", "set", "show", "slice", "text", "toArray", "value", "visible"]
> Object.getOwnPropertyNames((new tinymce.ui.Collection).__proto__.__proto__)
["constructor"]
> Object.getOwnPropertyNames((new tinymce.ui.Collection).__proto__.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

_CREATION:
A) return oICollection:
1) fIslrFind
2) fIclnAdd
3) fIclnSet
4) fIclnFilter
5) fIclnSlice
6) fIclnEq
7) fIclnEach
8) fIclnExec

fIcrlClnParents

fIccnrAdd
fIccnrFind

_CODE:
> var oc=new tinymce.oUi.fCCollection([{p1:1},{p2:2}])
undefined
> oc
fSpec {0: Object, 1: Object, length: 2, init: function, add: function, set: function, filter: function…}
0: Object
1: Object
length: 2
__proto__: oUtil.fClass
> oc[1]
Object {p2: 2}

pwpoIAkCrl.fIAkcAddRo

name::
* McsEngl.pwpoIAkCrl.fIAkcAddRo@cptIt,
* McsEngl.pwpfIAkcAddRo@cptIt,

_DESCRIPTION:
Adds new oICrls to the-oIAkCrl.

pwpoIAkCrl.fIAkcAsCfgTxtRaso

name::
* McsEngl.pwpoIAkCrl.fIAkcAsCfgTxtRaso@cptIt,
* McsEngl.pwpfIAkcASCfgTxtRaso@cptIt,

_DESCRIPTION:
Sets asICrlCfgTxt on all members or gets asICrlCfgTxt from the-first.

pwpoIAkCrl.fIAkcClassAddRo

name::
* McsEngl.pwpoIAkCrl.fIAkcClassAddRo@cptIt,
* McsEngl.pwpfIAkcClassAddRo@cptIt,

_DESCRIPTION:
Adds classes to all oICrls with the-method fICrlClassAddRo

pwpoIAkCrl.fIAkcClassRb

name::
* McsEngl.pwpoIAkCrl.fIAkcClassRb@cptIt,
* McsEngl.pwpfIAkcClassRb@cptIt,

_DESCRIPTION:
Returns true/false if the-class exists or not in the first oICrl of the-oIAkCrl.

pwpoIAkCrl.fIAkcDisabledRbo

name::
* McsEngl.pwpoIAkCrl.fIAkcDisabledRbo@cptIt,
* McsEngl.pwpfIAkcDisabledRbo@cptIt,

_DESCRIPTION:
Gets/Sets bICrlCfgDisabled

pwpoIAkCrl.fIAkcEachRo

name::
* McsEngl.pwpoIAkCrl.fIAkcEachRo@cptIt,
* McsEngl.pwpfIAkcEachRo@cptIt,

_DESCRIPTION:
Calls the specified fCallbackIn on each oICrl in oIAkCrl.

pwpoIAkCrl.fIAkcEqRo

name::
* McsEngl.pwpoIAkCrl.fIAkcEqRo@cptIt,
* McsEngl.pwpfIAkcEqRo@cptIt,

_DESCRIPTION:
Returns a-oIAkCrl with one oICrl, that of indexIn.
If indexIn = -1 returns the last oICrl.

pwpoIAkCrl.fIAkcFilterRo

name::
* McsEngl.pwpoIAkCrl.fIAkcFilterRo@cptIt,
* McsEngl.pwpfIAkcFilterRo@cptIt,

_DESCRIPTION:
- fIAkcFilterRo('fICCFormitmcnrRo')
- fIAkcFilterRo('fICHBMenubtnRo')
- fIAkcFilterRo(':fICrlVisibleRbo')

pwpoIAkCrl.fIAkcIndexofRn

name::
* McsEngl.pwpoIAkCrl.fIAkcIndexofRn@cptIt,
* McsEngl.pwpfIAkcIndexofRn@cptIt,

_DESCRIPTION:
Finds the-index of the-specified-oICrl or return -1 if it isn't in the-oIAkCrl.

pwpoIAkCrl.fIAkcMethodCallRo

name::
* McsEngl.pwpoIAkCrl.fIAkcMethodCallRo@cptIt,
* McsEngl.pwpfIAkcMethodCallRo@cptIt,

_DESCRIPTION:
Calls the-input-function with optional arguments on all oICrls in oIAkCrl if it exists.

pwpoIAkCrl.fIAkcMethodSetGetRx

name::
* McsEngl.pwpoIAkCrl.fIAkcMethodSetGetRx@cptIt,
* McsEngl.pwpfIAkcMethodSetGetRx@cptIt,

_DESCRIPTION:
Sets the-value on method-in on ALL oICrls in the-oIAkCrl.
Or gets the-value of method-in on the first oICrl.

pwpoIAkCrl.fIAkcParentRo

name::
* McsEngl.pwpoIAkCrl.fIAkcParentRo@cptIt,
* McsEngl.pwp@cptIt,

_DESCRIPTION:

pwpoIAkCrl.fIAkcRemoveRo

name::
* McsEngl.pwpoIAkCrl.fIAkcRemoveRo@cptIt,
* McsEngl.pwpfIAkcRemoveRo@cptIt,

_DESCRIPTION:
Removes all oICrls from oIAkCrl and DOM.

pwpoIAkCrl.fIAkcReverseRo

name::
* McsEngl.pwpoIAkCrl.fIAkcReverseRo@cptIt,
* McsEngl.pwpfIAkcReverseRo@cptIt,

_DESCRIPTION:
Returns a new oIAkCrl of the-contents in reverse order.

pwpoIAkCrl.fIAkcSetRo

name::
* McsEngl.pwpoIAkCrl.fIAkcSetRo@cptIt,
* McsEngl.pwpfIAkcSetRo@cptIt,

_DESCRIPTION:
Sets the-contents of the-oIAkCrl.
This will-remove any existing oICrls and replace them with the ones in the input array.

pwpoIAkCrl.fIAkcSliceRo

name::
* McsEngl.pwpoIAkCrl.fIAkcSliceRo@cptIt,
* McsEngl.pwpfIAkcSliceRo@cptIt,

_DESCRIPTION:
Slices the-items within the-oIAkCrl, like Array.prototype.slice.

pwpoIAkCrl.fIAkcToArrayRa

name::
* McsEngl.pwpoIAkCrl.fIAkcToArrayRa@cptIt,
* McsEngl.pwpfIAkcToArrayRa@cptIt,

_DESCRIPTION:
Returns an-array with the-oICrls of the-oIAkCrl.

pwpoIAkCrl.fIAkcVisibleRbo

name::
* McsEngl.pwpoIAkCrl.fIAkcVisibleRbo@cptIt,
* McsEngl.pwpfIAkcVisibleRbo@cptIt,

_DESCRIPTION:
Sets bICrlCfgVisible on all members of gets bICrlCfgVisible from the-first.

pwpoIAkCrl.fIAkcXCfgValueRx

name::
* McsEngl.pwpoIAkCrl.fIAkcXCfgValueRx@cptIt,
* McsEngl.pwpfIAkcXCfgValueRx@cptIt,

_DESCRIPTION:
Sets xICrlCfgValue on all members of gets xICrlCfgValue from the-first.

pwpoIAkCrl.length

name::
* McsEngl.pwpoIAkCrl.length@cptIt,
* McsEngl.pwplength@cptIt,

_DESCRIPTION:
length is a-number denoting the-quantity of the-members of the-oIAkCrl.

pwpo2I.fICrlRo (ICrl)

name::
* McsEngl.pwpo2I.fICrlRo (ICrl)@cptIt,
* McsEngl.pwpfICrlRo@cptIt,
* McsEngl.pwpfICrl@cptIt,
* McsEngl.pwpfIControl@cptIt,
* McsEngl.pwpfCControl@cptIt,
* McsEngl.phControl@cptIt,
* McsEngl.pwp'Control@cptIt,
* McsEngl.pwp'fCControl@cptIt,

* McsEngl.pwpgui@cptIt, {2015-06-01}
* McsEngl.phICrl@cptIt, {2015-03-22}
* McsEngl.phIcrl@cptIt,

_DESCRIPTION:
This object-returning-function creates the most generic oICrl.
All oICrls INHERIT from this one as it has the base logic needed by all of them.
INPUT: oICrlCfgIn.

pwpoICrl

name::
* McsEngl.pwpoICrl@cptIt,
=== _OLD:
* McsEngl.pwpoIControl@old,
* McsEngl.pwp'code.control@old,

_DESCRIPTION:
oICrl are the oICCnr, oICHover, oICPath, and oICTooltip.

pwpoICrl'class

name::
* McsEngl.pwpoICrl'class@cptIt,
* McsEngl.pwpclass@cptIt,
* McsEngl.phclass@cptIt,
* McsEngl.phcls@cptIt,

_LOCATION:
* fIcrlClassAdd('container')
* sIcrlClsContainer: contains class-name.
* class="..." attribute of html-elements
* skin.css file.
* fIcrlClassToggle
* sIlytClsFirst: 'first', sIlytClsLast: 'last'
* oHTMLElement.class,

_SPECIFIC:
* oIControl'class.autoscroll, phclsAutoscroll,
* oIControl'class.body
* oIControl'class.bottom
* oIControl'class.btn_size
* oIControl'class.checked
* oIControl'class.combobox
* oIControl'class.container,    => phclsContainer
* oIControl'class.container_body  => phclsContainerBody //
* oIControl'class.first //looses on formats/blocks the first indication
* oIControl'class.fixed_width
* oIControl'class.floatpanel
* oIControl'class.formitem
* oIControl'class.fullscreen
* oIControl'class.has_open
* oIControl'class.iframe
* oIControl'class.in
* oIControl'class.label
* oIControl'class.listbox
* oIControl'class.menu
* oIControl'class.menu_item
* oIControl'class.menu_item_checkbox
* oIControl'class.menu_item_expand
* oIControl'class.menu_item_normal
* oIControl'class.menu_item_preview
* oIControl'class.menu_item_sep
* oIControl'class.menubtn
* oIControl'class.multiline
* oIControl'class.path
* oIControl'class.placeholder
* oIControl'class.popover
* oIControl'class.resizehandle
* oIControl'class.resizehandle_both
* oIControl'class.scroll
* oIControl'class.selected
* oIControl'class.start
* oIControl'class.statusbar, phclsStatusbar,
* oIControl'class.strong
* oIControl'class.textbox
* oIControl'class.toolbar
* oIControl'class.widget
* oIControl'class.window

pwpoICrl'member

name::
* McsEngl.pwpoICrl'member@cptIt,

pwpoICrl.MEMBER:
> pwp.0-90v 2016-05-06: Object.getOwnPropertyNames(oPgmWpg.o2I.fICrlRo()).sort()
["pwpaICrlClasses", "pwpasICrlTxt", "pwpbICrlActive", "pwpbICrlDisabled", "pwpbICrlVisible", "pwpfICrlActiveRbo", "pwpfICrlAddAfterRo", "pwpfICrlAddBeforeRo", "pwpfICrlAppendToOEltRo", "pwpfICrlAriaRo", "pwpfICrlBlur", "pwpfICrlBoxBorderRo", "pwpfICrlBoxMarginRo", "pwpfICrlBoxMeasureRo", "pwpfICrlBoxPaddingRo", "pwpfICrlBoxParseRo", "pwpfICrlClassAddRo", "pwpfICrlClassRb", "pwpfICrlClassRemoveRo", "pwpfICrlClassToggleRo", "pwpfICrlClassesRs", "pwpfICrlDisabledRbo", "pwpfICrlEltBodyRo", "pwpfICrlEltRo", "pwpfICrlEvtDispatchRo", "pwpfICrlEvtRemoveCmdRo", "pwpfICrlEvtStoreCmdRo", "pwpfICrlEvtsPendingAddListener", "pwpfICrlFindAncestorCommonRo", "pwpfICrlFocusRo", "pwpfICrlFromEltRo", "pwpfICrlHide", "pwpfICrlInit", "pwpfICrlInitLayrect", "pwpfICrlLayrect", "pwpfICrlNameRos", "pwpfICrlNextRo", "pwpfICrlParentRo", "pwpfICrlParentsAkRo", "pwpfICrlPrevRo", "pwpfICrlRemove", "pwpfICrlRenderAfterRo", "pwpfICrlRenderBeforeRo", "pwpfICrlRepaint", "pwpfICrlRepaint_and_returnRo", "pwpfICrlSATextRaso", "pwpfICrlScrollIntoviewRo", "pwpfICrlSetHtmlInner", "pwpfICrlShowRo", "pwpfICrlToHtmlRs", "pwpfICrlVisibleRbo", "pwpfICrlXValueRx", "pwpnICrlHeight", "pwpnICrlWidth", "pwpoICrlAria", "pwpoICrlBoxBorder", "pwpoICrlBoxMargin", "pwpoICrlBoxPadding", "pwpoICrlCfg", "pwpoICrlEvtsNative", "pwpoICrlEvtstore", "pwpsICrlId", "pwpsICrlName", "pwpxICrlValue"]
===
//2016-01-08
> Object.getOwnPropertyNames(oPgmWpg.o2I.fICrlFtr()).sort()
["aICrlClasses", "asICrlTxt", "bICrlActive", "bICrlDisabled", "bICrlVisible", "fICrlAddAfter", "fICrlAddBefore", "fICrlAppendToOHmlElt", "fICrlAria", "fICrlBActive", "fICrlBClass", "fICrlBDisabled", "fICrlBVisible", "fICrlBlur", "fICrlBoxBorder", "fICrlBoxMargin", "fICrlBoxMeasure", "fICrlBoxPadding", "fICrlBoxParse", "fICrlClassAdd", "fICrlClassRemove", "fICrlClassToggle", "fICrlClasses", "fICrlCstParents", "fICrlEltBody", "fICrlEltGet", "fICrlEncode", "fICrlEventsPendingBind", "fICrlEvtAddListener", "fICrlEvtDispatch", "fICrlEvtRemoveListener", "fICrlFindAncestorCommon", "fICrlFocus", "fICrlFrmElt", "fICrlHide", "fICrlInit", "fICrlInitLayrect", "fICrlLayrect", "fICrlNext", "fICrlParent", "fICrlPrev", "fICrlRemove", "fICrlRenderAfter", "fICrlRenderBefore", "fICrlRepaint", "fICrlRepaint_and_return", "fICrlSAText", "fICrlSName", "fICrlScrollIntoview", "fICrlSetHtmlInner", "fICrlShow", "fICrlToHtml", "fICrlXValue", "nICrlHeight", "nICrlWidth", "oICrlAria", "oICrlBoxBorder", "oICrlBoxMargin", "oICrlBoxPadding", "oICrlCfg", "oICrlEvtsNative", "oICrlEvtstore", "sICrlId", "sICrlName", "xICrlValue"]
===
//2015-12-11
> Object.getOwnPropertyNames(oPgmWpg.o2I.fICrlFtr()).sort()
["aICrlClasses", "bICrlActive", "bICrlDisabled", "bICrlVisible", "fICrlAddAfter", "fICrlAddBefore", "fICrlAppendToOHmlElt", "fICrlAria", "fICrlBClass", "fICrlBlur", "fICrlBoxBorder", "fICrlBoxMargin", "fICrlBoxMeasure", "fICrlBoxPadding", "fICrlBoxParse", "fICrlClassAdd", "fICrlClassRemove", "fICrlClassToggle", "fICrlClasses", "fICrlCstParents", "fICrlEltBody", "fICrlEltGet", "fICrlEncode", "fICrlEventsPendingBind", "fICrlEvtDispatch", "fICrlEvtListenerAdd", "fICrlEvtListenerRemove", "fICrlFindAncestorCommon", "fICrlFocus", "fICrlFromHTMLElement", "fICrlHide", "fICrlInit", "fICrlInitLayrect", "fICrlNext", "fICrlPrev", "fICrlRemove", "fICrlRenderAfter", "fICrlRenderBefore", "fICrlRepaint", "fICrlRepaint_and_return", "fICrlScrollIntoview", "fICrlSetGetBActive", "fICrlSetGetBDisabled", "fICrlSetGetBVisible", "fICrlSetGetLayrect", "fICrlSetGetOParent", "fICrlSetGetSAText", "fICrlSetGetSName", "fICrlSetGetXValue", "fICrlSetHtmlInner", "fICrlShow", "fICrlToHtml", "nICrlHeight", "nICrlWidth", "oICrlAria", "oICrlBoxBorder", "oICrlBoxMargin", "oICrlBoxPadding", "oICrlCfg", "oICrlEvtsNative", "oICrlEvtstore", "sICrlId", "sICrlName", "saICrlText", "xICrlValue"]
===
aICrlClasses: Array[0]
bICrlActive: false
bICrlDisabled: false
bICrlVisible: true
nICrlHeight: 0
nICrlWidth: 0
oICrlAria: Object
oICrlBoxBorder: undefined
oICrlBoxMargin: undefined
oICrlBoxPadding: undefined
oICrlEventsNative: Object
oICrlEvtstore: Object
oICrlSettings: Object
sICrlId: "id75"
sICrlName: ""
saICrlText: ""
xICrlValue: false
===
aICrlClasses: Array[0]
bICrlActive: false
bICrlDisabled: false
bICrlVisible: true
nICrlHeight: 0
nICrlWidth: 0
oICrlAria: Object
oICrlBoxBorder: undefined
oICrlBoxMargin: undefined
oICrlBoxPadding: undefined
oICrlEventsNative: Object
oICrlEventsNativeNo: Object
oICrlSettings: Object
sICrlId: "id107"
sICrlName: ""
sICrlText: ""
xICrlValue: false
===
pwpoICrl.MEMBER:
> Object.getOwnPropertyNames(new oPgmHtml.oI.fIControl()).sort()
===
_lastRect
_rendered
U = underline
===
* phaICrlClasses (pwp'Uclasses)

* pwpbICrlActive (pwp'Uactive)
* pwpbICrlBody (pwp'UhasBody)
* pwpbICrlDisabled (pwp'Udisabled)
* pwpbICrlVisible (pwp'Uvisible)

* pwpfICrlAppendToElt (pwpfICrlRenderToElt, pwp'fICrlRenderToElt)
* pwpfICrlClasses (pwp'classes)
* pwpfICrlDisabled (pwp'disabled)
* pwpfICrlParent (pwp'parent)
* pwpfICrlRemove (pwp'remove)
* pwpfICrlRepaint (pwp'repaint)
* pwpfICrlText (pwp'text)
* pwpfICrlValue (pwp'value)
* pwpffICrlVisible (pwp'visible)

* pwpnICrlHight (pwp'UnHeight,)
* pwpnICrlWidth (pwp'UnWidth)

* pwpoICrlAria (pwp'UoAria)
* pwpoICrlBoxBorder (pwp'UoBoxBorder)
* pwpoICrlBoxPadding (pwp'UoBoxPadding)
* pwpoICrlBoxMargin (pwp'UoBoxMargin)
* pwpoICrlLayrect
* pwpoICrlLayrectRepaintLast
* pwpoICrlEventsNative (pwp'UnativeEvents)

* pwpsICrlId (pwp'Uid)
* pwpsICrlName (pwp'Uname)
* pwpsICrlPrefixClass
* pwpsICrlText (pwp'Utext)

* pwpxICrlValue (pwp'Uvalue)
===
> Object.getOwnPropertyNames(new oPgmHtml.oI.fIControl()).sort()
["aICrlClasses", "bICrlActive", "bICrlDisabled", "bICrlRendered", "bICrlVisible", "nICrlHeight", "nICrlWidth", "oICrlAria", "oICrlBoxBorder", "oICrlBoxMargin", "oICrlBoxPadding", "oICrlSettings", "oIccpfltEventsRoot", "sICrlId", "sICrlName", "saICrlText", "xICrlValue"]
> 2015-03-04:
Object.getOwnPropertyNames(new oPgmHtml.oI.fCControl()).sort()
["aICrlClasses", "bICrlActive", "bICrlDisabled", "bICrlVisible", "nICrlHeight", "nICrlWidth", "oICrlAria", "oICrlBindings", "oICrlBoxBorder", "oICrlBoxMargin", "oICrlBoxPadding", "oICrlEventsNative", "oICrlSettings", "sICrlId", "sICrlName", "sICrlText", "sICrlValue"]
Object.getOwnPropertyNames((new oPgmHtml.oI.fCControl()).__proto__).sort()
["fICrlAfter", "fIcrlAppendToElt", "fIcrlAria", "fIcrlBActive", "fIcrlBClass", "fIcrlBefore", "fIcrlBindEventsPending", "fIcrlBlur", "fIcrlBoxBorder", "fIcrlBoxMargin", "fIcrlBoxMeasure", "fIcrlBoxPadding", "fIcrlBoxParse", "fIcrlClassAdd", "fIcrlClassRemove", "fIcrlClassToggle", "fIcrlClasses", "fIcrlClnParents", "fIcrlDisabled", "fIcrlEltBodyGet", "fIcrlEltGet", "fIcrlEncode", "fIcrlEventhandlerAdd", "fIcrlEventhandlerRemove", "fIcrlFindAncestorCommon", "fIcrlFocus", "fIcrlHide", "fIcrlInnerhtml", "fIcrlLayoutrect", "fIcrlLayrectInit", "fIcrlName", "fIcrlNext", "fIcrlOutCrlInElt", "fIcrlParent", "fIcrlPrev", "fIcrlReflow", "fIcrlRemove", "fIcrlRenderAfter", "fIcrlRenderBefore", "fIcrlRepaint", "fIcrlScrollIntoview", "fIcrlShow", "fIcrlText", "fIcrlToHtml", "fIcrlValue", "fUobEventInvoke", "init", "sIcrlPrefixClass", "visible"]
===
> Object.getOwnPropertyNames(new oPgmHtml.oI.fCControl()).sort()
["aIcrlClasses", "bIcrlActive", "bIcrlDisabled", "bIcrlVisible", "nIcrlHeight", "nIcrlWidth", "oIcrlAria", "oIcrlBindings", "oIcrlBoxBorder", "oIcrlBoxMargin", "oIcrlBoxPadding", "oIcrlEventsNative", "sIcrlId", "sIcrlName", "sIcrlText", "sIcrlValue", "settings"]
> Object.getOwnPropertyNames(new oPgmHtml.oI.fCControl().__proto__).sort()
["fIcrlAfter", "fIcrlAria", "fIcrlBActive", "fIcrlBClass", "fIcrlBefore", "fIcrlBindEventsPending", "fIcrlBlur", "fIcrlBoxBorder", "fIcrlBoxMargin", "fIcrlBoxMeasure", "fIcrlBoxPadding", "fIcrlBoxParse", "fIcrlClassAdd", "fIcrlClassRemove", "fIcrlClassToggle", "fIcrlClasses", "fIcrlClnParents", "fIcrlDisabled", "fIcrlEltBodyGet", "fIcrlEltGet", "fIcrlEncode", "fIcrlEventLnrAdd", "fIcrlEventLnrRemove", "fIcrlFindAncestorCommon", "fIcrlFocus", "fIcrlHide", "fIcrlInnerhtml", "fIcrlLayoutrect", "fIcrlLayrectInit", "fIcrlName", "fIcrlNext", "fIcrlOutCrlInElt", "fIcrlParent", "fIcrlPrev", "fIcrlReflow", "fIcrlRemove", "fIcrlRenderAfter", "fIcrlRenderBefore", "fIcrlRenderToElt", "fIcrlRepaint", "fIcrlScrollIntoview", "fIcrlShow", "fIcrlText", "fIcrlToHtml", "fIcrlValue", "fUobEventInvoke", "init", "sIcrlPrefixClass", "visible"]
> Object.getOwnPropertyNames(new oPgmHtml.oI.fCControl().__proto__.__proto__).sort()
["constructor"]
> Object.getOwnPropertyNames(new oPgmHtml.oI.fCControl().__proto__.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
===
> Object.getOwnPropertyNames(new oPgmHtml.oI.fCControl()).sort()
["_bindings", "_nativeEvents", "aIcrlClasses", "bIcrlActive", "bIcrlDisabled", "bIcrlVisible", "nIcrlHeight", "nIcrlWidth", "oIcrlAria", "oIcrlBoxBorder", "oIcrlBoxMargin", "oIcrlBoxPadding", "sIcrlId", "sIcrlName", "sIcrlText", "sIcrlValue", "settings"]
> Object.getOwnPropertyNames(new oPgmHtml.oI.fCControl().__proto__).sort()
["classes", "disabled", "fIcrlAfter", "fIcrlAria", "fIcrlBActive", "fIcrlBefore", "fIcrlBindEventsPending", "fIcrlBlur", "fIcrlBoxBorder", "fIcrlBoxMargin", "fIcrlBoxMeasure", "fIcrlBoxPadding", "fIcrlBoxParse", "fIcrlClassAdd", "fIcrlClassHas", "fIcrlClassRemove", "fIcrlClassToggle", "fIcrlClnParents", "fIcrlEltBodyGet", "fIcrlEltGet", "fIcrlEncode", "fIcrlFindAncestorCommon", "fIcrlFocus", "fIcrlHide", "fIcrlInnerhtml", "fIcrlLayoutrect", "fIcrlLayoutrectInit", "fIcrlNext", "fIcrlOutCrlInElt", "fIcrlPrev", "fIcrlReflow", "fIcrlRenderAfter", "fIcrlRenderBefore", "fIcrlRenderToElt", "fIcrlScrollIntoview", "fIcrlShow", "fIcrlToHtml", "fUobEventInvoke", "init", "name", "off", "on", "parent", "remove", "repaint", "sPrefixClass", "text", "value", "visible"]
===
* pwpoICrl.UbRendered, (pwp'Urendered),
* pwpoICrl.UoEvents_root, (pwp'UeventsRoot),
* pwpoICrl.UoEventsNative, (pwp'UnativeEvents),

* pwpoICrl.fIcrlGetEltBody, (pwp'getContainerElm)
* pwpoICrl.fIcrlEltGet (pwp'getEl),
* pwpoICrl.fIcrlOtBoxMargin, (pwp'marginBox),
* pwpoICrl.fIcrlOtBoxPadding, (pwp'paddingBox),
* pwpoICrl.fIcrlParseBox, (pwp'parseBox),
===
> oCControl:
* pwp'Uactive,
* pwp'UbFixed,
* pwp'UbTitle,
* pwp'Ubindings,
* pwp'UborderBox,
* pwp'Uclasses,
* pwp'Udisabled,
* pwp'Uheight,
* pwp'Uid,
* pwp'UmarginBox,
* pwp'Uname,
* pwp'UnativeEvents,
* pwp'UoAria,
* pwp'UpaddingBox,
* pwp'Utext,
* pwp'Uvalue,
* pwp'Uvisible,
* pwp'Uwidth,
* pwp'settings,

> oCControlPrototype:
* pwp'active,
* pwp'addClass,
* pwp'after,
* pwp'aria,
* pwp'bTitle,
* pwp'before,
* pwp'bindPendingEvents,
* pwp'blur,
* pwp'borderBox,
* pwp'classes,
* pwp'disabled,
* pwp'encode,
* pwp'fEventFire,
* pwp'findCommonAncestor,
* pwp'focus,
* pwp'getParentCtrl,
* pwp'hasClass,
* pwp'height,
* pwp'hide,
* pwp'init,
* pwp'initLayoutRect,
* pwp'innerHtml,
* pwp'layoutRect,
* pwp'measureBox,
* pwp'name,
* pwp'next,
* pwp'off,
* pwp'on,
* pwp'parent,
* pwp'parents,
* pwp'postRender,
* pwp'prev,
* pwp'reflow,
* pwp'remove,
* pwp'removeClass,
* pwp'renderBefore,
* pwp'renderHtml,
* pwp'renderTo,
* pwp'repaint,
* pwp'sPrefixClass,
* pwp'sPropInstance,
* pwp'scrollIntoView,
* pwp'show,
* pwp'text,
* pwp'toggleClass,
* pwp'value,
* pwp'visible,
* pwp'width,
===
> Object.getOwnPropertyNames(new oPgmHtml.oI.fCControl()).sort()
["_active", "_bTitle", "_bindings", "_classes", "_disabled", "_id", "_nHeight", "_nWidth", "_name", "_nativeEvents", "_oAria", "_oBoxBorder", "_oBoxMargin", "_oBoxPadding", "_text", "_value", "_visible", "settings"]
> Object.getOwnPropertyNames((new oPgmHtml.oI.fCControl()).__proto__).sort()
["active", "classes", "disabled", "fIclAfter", "fIclAria", "fIclBefore", "fIclBindEventsPending", "fIclBlur", "fIclBoxBorder", "fIclBoxMargin", "fIclBoxMeasure", "fIclBoxPadding", "fIclBoxParse", "fIclClassAdd", "fIclClassHas", "fIclClassRemove", "fIclClassToggle", "fIclClnParents", "fIclEltBodyGet", "fIclEltGet", "fIclEncode", "fIclFindAncestorCommon", "fIclFocus", "fIclHide", "fIclInnerhtml", "fIclLayoutrect", "fIclLayoutrectInit", "fIclNext", "fIclOutCrlInElt", "fIclPrev", "fIclReflow", "fIclRenderAfter", "fIclRenderBefore", "fIclRenderToElt", "fIclScrollIntoview", "fIclShow", "fIclToHtml", "fUobEventInvoke", "init", "nHeight", "nWidth", "name", "off", "on", "parent", "remove", "repaint", "sPrefixClass", "text", "value", "visible"]
===
> Object.getOwnPropertyNames(new tinymce.ui.Control).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_text", "_title", "_value", "_visible", "_width", "settings"]
> Object.getOwnPropertyNames((new tinymce.ui.Control).__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "hasClass", "height", "hide", "init", "initLayoutRect", "innerHtml", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "value", "visible", "width"]
> Object.getOwnPropertyNames((new tinymce.ui.Control).__proto__.__proto__).sort()
["constructor"]
> Object.getOwnPropertyNames((new tinymce.ui.Control).__proto__.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
===
> Object.getOwnPropertyNames(tinymce.ui.Control.prototype).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "hasClass", "height", "hide", "init", "initLayoutRect", "innerHtml", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "value", "visible", "width"]
===
new tinymce.oUi.fControl
fClass {settings: Object, _id: "mce_83", _name: "", _text: "", _height: 0…}
_active: false
_aria: Object
_bindings: Object
_borderBox: undefined
_classes: Array[0]
_disabled: false
_height: 0
_id: "mce_83"
_marginBox: undefined
_name: ""
_nativeEvents: Object
_paddingBox: undefined
_text: ""
_title: false
_value: false
_visible: true
_width: 0
===
pwpfIControl.prototype.member:
//2015-11-19
> Object.getOwnPropertyNames(oPgmWpg.o2I.fIControl.prototype).sort()
["fICrlAddAfter", "fICrlAddBefore", "fICrlAppendToOHmlElt", "fICrlAria", "fICrlBActiveGetSet", "fICrlBClass", "fICrlBVisibleGetSet", "fICrlBlur", "fICrlBoxBorder", "fICrlBoxMargin", "fICrlBoxMeasure", "fICrlBoxPadding", "fICrlBoxParse", "fICrlClassAdd", "fICrlClassRemove", "fICrlClassToggle", "fICrlClasses", "fICrlCstParents", "fICrlEltBody", "fICrlEltGet", "fICrlEncode", "fICrlEvtDispatch", "fICrlEvtListenerAdd", "fICrlEvtListenerRemove", "fICrlEvtsNativePendingListenerAdd", "fICrlFindAncestorCommon", "fICrlFocus", "fICrlFromOHmlElt", "fICrlHide", "fICrlInit", "fICrlOLayrectGetSet", "fICrlOLayrectInit", "fICrlONextcrl", "fICrlOPrevcrl", "fICrlOPrntcrlGetSet", "fICrlRemove", "fICrlRenderAfter", "fICrlRenderBefore", "fICrlRepaint", "fICrlRepaint_and_return", "fICrlSATextGetSet", "fICrlSNameGetSet", "fICrlScrollIntoview", "fICrlSetGetBDisabled", "fICrlSetHtmlInner", "fICrlShow", "fICrlToSHml", "fICrlXValueGetSet"]

pwpoICrl.UlayoutRect:
self._layoutRect = layoutRect = {
x: settings.x || 0,
y: settings.y || 0,
w: width,
h: height,
deltaW: deltaW,
deltaH: deltaH,
contentW: width - deltaW,
contentH: height - deltaH,
innerW: width - deltaW,
innerH: height - deltaH,
startMinWidth: startMinWidth || 0,
startMinHeight: startMinHeight || 0,
minW: Math.min(minWidth, maxW),
minH: Math.min(minHeight, maxH),
maxW: maxW,
maxH: maxH,
autoResize: autoResize,
scrollW: 0
};

pwpoICrl.asICrlCfgTxt

name::
* McsEngl.pwpoICrl.asICrlCfgTxt@cptIt,
* McsEngl.pwpasICrlCfgTxt@cptIt,

_DESCRIPTION:
Contains the displayed text of the-oICrl, eg the-name of a-menu-command.

_DESCRIPTION:
Setting asICrlCfgTxt in a-toolitem, it displays the-icon plus the-value of asICrlCfgTxt.

pwpoICrl.aICrlClasses

name::
* McsEngl.pwpoICrl.aICrlClasses@cptIt,
* McsEngl.pwpaICrlClasses@cptIt,

_DESCRIPTION:
Contains the-classes of the-htmlelt of the-oICrl.
aICrlClasses = []
aICrlClasses.body = ["clsLytStack"]
aICrlClasses.body.oMap = {clsLytStack: "clsLytStack"}
aICrlClasses.control = ["clsPgmWpg", "clsContainer", "clsCnrPanel"]
aICrlClasses.control.oMap = {
clsCnrPanel: "clsCnrPanel"
clsContainer: "clsContainer"
clsPgmWpg: "clsPgmWpg"
}

pwpoICrl.bICrlCfgActive

name::
* McsEngl.pwpoICrl.bICrlCfgActive@cptIt,
* McsEngl.pwpbICrlCfgActive@cptIt,

_DESCRIPTION:

pwpoICrl.bICrlCfgDisabled

name::
* McsEngl.pwpoICrl.bICrlCfgDisabled@cptIt,
* McsEngl.pwpbICrlCfgDisabled@cptIt,

_DESCRIPTION:

pwpoICrl.bICrlCfgVisible

name::
* McsEngl.pwpoICrl.bICrlCfgVisible@cptIt,
* McsEngl.pwpbICrlCfgVisible@cptIt,

_DESCRIPTION:
Contains the visibility state of the-oICrl.

pwpoICrl.fICrlActiveRbo

name::
* McsEngl.pwpoICrl.fICrlActiveRbo@cptIt,
* McsEngl.pwpfICrlActiveRbo@cptIt,

_DESCRIPTION:
Gets/Sets the-value of bICrlCfgActive#ql:idpwpbICrlCfgActive#.

pwpoICrl.fICrlAncestorsAkRo

name::
* McsEngl.pwpoICrl.fICrlAncestorsAkRo@cptIt,
* McsEngl.pwpfICrlAncestorsAkRo@cptIt,

_DESCRIPTION:
Returns an oIAkCrl with all ancestor oICrls.

pwpoICrl.fICrlAppendToOEltRo

name::
* McsEngl.pwpoICrl.fICrlAppendToOEltRo@cptIt,
* McsEngl.pwpfICrlAppendToOEltRo@cptIt,

_DESCRIPTION:
Appends current-oICrl to the-specified-oEltIn or body-elt of oICrl.
Converts the-oICrl to sHml and creates a-document-fragment which appends to oEltIn.
RETURN: current-oICrl.

pwpoICrl.fICrlAriaRo

name::
* McsEngl.pwpoICrl.fICrlAriaRo@cptIt,
* McsEngl.pwpfICrlAriaRo@cptIt,

_DESCRIPTION:
Sets the specified aria or role attribute on oElt that corresponds to oICrl.
RETURN: current-oICrl.

pwpoICrl.fICrlBoxMeasureRo

name::
* McsEngl.pwpoICrl.fICrlBoxMeasureRo@cptIt,
* McsEngl.pwpfICrlBoxMeasureRo@cptIt,

_DESCRIPTION:
Returns the-box-object of the-oElt of the-oICrl.
INPUT: sPrefixIn: border, padding, margin

pwpoICrl.fICrlBoxParseRo

name::
* McsEngl.pwpoICrl.fICrlBoxParseRo@cptIt,
* McsEngl.pwpfICrlBoxParseRo@cptIt,

_DESCRIPTION:
Parses the specified box-value.
INPUT: A-box-value contains 1-4 values "1 2 3 4" in clockwise order top/right/bottom/left or a-number.
RETURN: Object with top/right/bottom/left members.

pwpoICrl.fICrlClassAddRo

name::
* McsEngl.pwpoICrl.fICrlClassAddRo@cptIt,
* McsEngl.pwpfICrlClassAddRo@cptIt,

_DESCRIPTION:
Adds the-specified-class-value to the-oICrl or sub-oICrl (same-id).

pwpoICrl.fICrlClassRb

name::
* McsEngl.pwpoICrl.fICrlClassRb@cptIt,
* McsEngl.pwpfICrlClassRb@cptIt,

_DESCRIPTION:
Returns true/false if the-specific-oICrl or sub-oICrl has the-specific-class.

pwpoICrl.fICrlClassRemoveRo

name::
* McsEngl.pwpoICrl.fICrlClassRemoveRo@cptIt,
* McsEngl.pwpfICrlClassRemoveRo@cptIt,

_DESCRIPTION:
Removes the-specified-class-value from the-oICrl or sub-oICrl.

pwpoICrl.fICrlClassToggleRo

name::
* McsEngl.pwpoICrl.fICrlClassToggleRo@cptIt,
* McsEngl.pwpfICrlClassToggleRo@cptIt,

_DESCRIPTION:
Toggles the-specified-class-value on the-oICrl or sub-oICrl.

pwpoICrl.fICrlClassesRs

name::
* McsEngl.pwpoICrl.fICrlClassesRs@cptIt,
* McsEngl.pwpfICrlClassesRs@cptIt,

_DESCRIPTION:
Returns the-class-string for the-current-oICrl or Sub-oICrl (= same-id).

pwpoICrl.fICrlDisabledRbo

name::
* McsEngl.pwpoICrl.fICrlDisabledRbo@cptIt,
* McsEngl.pwpfICrlDisabledRbo@cptIt,

_DESCRIPTION:
Gets|Sets bICrlCfgDisabled.

pwpoICrl.fICrlEltBodyRo

name::
* McsEngl.pwpoICrl.fICrlEltBodyRo@cptIt,
* McsEngl.pwpfICrlEltBodyRo@cptIt,

_DESCRIPTION:
Returns the-oHTMLBodyElement of the-index.html, not of the-content.

pwpoICrl.fICrlEltFocusRo

name::
* McsEngl.pwpoICrl.fICrlEltFocusRo@cptIt,
* McsEngl.pwpfICrlEltFocusRo@cptIt,

_DESCRIPTION:
Focuses oElt of current-oICrl.

pwpoICrl.fICrlEltRo

name::
* McsEngl.pwpoICrl.fICrlEltRo@cptIt,
* McsEngl.pwpfICrlEltRo@cptIt,

_DESCRIPTION:
Returns the-oElt that corresponds (with the same id) to current-oICrl.
The-oElts could be:
. sICrlId-absend
. sICrlId-body
. sICrlId-head
. sICrlId-inp
. sICrlId-open
. sICrlId-preview
. sICrlId-scroll + axisName
. sICrlId-t + nIdxIn
. sICrlId-text

pwpoICrl.fICrlEvtDispatchRo

name::
* McsEngl.pwpoICrl.fICrlEvtDispatchRo@cptIt,
* McsEngl.pwpfICrlEvtDispatchRo@cptIt,

_DESCRIPTION:
Fires the-specified-event by name and arguments on the-oICrl.
This will-execute all bound event-commands.

pwpoICrl.fICrlEvtRemoveCmdRo

name::
* McsEngl.pwpoICrl.fICrlEvtRemoveCmdRo@cptIt,
* McsEngl.pwpfICrlEvtRemoveCmdRo@cptIt,

_DESCRIPTION:
Removes event-commands.

pwpoICrl.fICrlEvtStoreCmdRo

name::
* McsEngl.pwpoICrl.fICrlEvtStoreCmdRo@cptIt,
* McsEngl.pwpfICrlEvtStoreCmdRo@cptIt,

_DESCRIPTION:
Adds an-event-cmd to a-specified-event on the-oICrl.
This event can both be native browser event like "click" or custom one.

pwpoICrl.fICrlEvtsNtvPendingAddEvtcmds

name::
* McsEngl.pwpoICrl.fICrlEvtsNtvPendingAddEvtcmds@cptIt,
* McsEngl.pwpfICrlEvtsNtvPendingAddEvtcmds@cptIt,

_DESCRIPTION:
Adds evtcmds to pending native events.

pwpoICrl.fICrlFromEltRou

name::
* McsEngl.pwpoICrl.fICrlFromEltRou@cptIt,
* McsEngl.pwpfICrlFromEltRou@cptIt,

_DESCRIPTION:
INPUT: oElt.
RETURN: oICrl with the same id to input oElt or undefined.

pwpoICrl.fICrlHide

name::
* McsEngl.pwpoICrl.fICrlHide@cptIt,
* McsEngl.pwpfICrlHide@cptIt,

_DESCRIPTION:
Sets bICrlCfgVisible to false.

pwpoICrl.fICrlInit

name::
* McsEngl.pwpoICrl.fICrlInit@cptIt,
* McsEngl.pwpfICrlInit@cptIt,

_DESCRIPTION:
Initializes a control: sets values to some of its members:
1) oIControlThis.oICrlSettings = fUTolObtExtend({}, oIControlThis.oICrlSettingsDefaults, oICrlSettingsIn);
2) oIControlThis.sICrlId = oCDUtil.fDUtlUniqueId();
-) oIControlThis.aICrlClasses = [];
-) oIControlThis.bICrlActive //config or false
-) oIControlThis.bICrlDisabled //config or false
-) oIControlThis.bICrlVisible //config or true
-) oIControlThis.nICrlWidth = 0;
-) oIControlThis.nICrlHeight = 0;
-) oIControlThis.oICrlAria = {sICrlRole: oIControlThis.oICrlSettings.sICrlRole};
-) oIControlThis.oICrlBoxBorder =
-) oIControlThis.oICrlBoxPadding =
-) oIControlThis.oICrlBoxMargin
-) oIControlThis.saICrlText = '';
-) oIControlThis.sICrlName = '';
-) oIControlThis.xICrlValue //config or false

pwpoICrl.fICrlInitLayrect

name::
* McsEngl.pwpoICrl.fICrlInitLayrect@cptIt,
* McsEngl.pwpfICrlInitLayrect@cptIt,

_DESCRIPTION:

pwpoICrl.fICrlLayrect

name::
* McsEngl.pwpoICrl.fICrlLayrect@cptIt,
* McsEngl.pwpfICrlLayrect@cptIt,

_DESCRIPTION:
Getter/setter for the-current-layoutrect.

pwpoICrl.fICrlNameRos

name::
* McsEngl.pwpoICrl.fICrlNameRos@cptIt,
* McsEngl.pwpfICrlNameRos@cptIt,

_DESCRIPTION:
Gets/sets sICrlCfgName.

pwpoICrl.fICrlNextRo

name::
* McsEngl.pwpoICrl.fICrlNextRo@cptIt,
* McsEngl.pwpfICrlNextRo@cptIt,

_DESCRIPTION:
Returns the-oICrl next (index + 1) to the-current-oICrl.

pwpoICrl.fICrlParentRo

name::
* McsEngl.pwpoICrl.fICrlParentRo@cptIt,
* McsEngl.pwpfICrlParentRo@cptIt,

_DESCRIPTION:
Sets|Gets its oICrlParent.

pwpoICrl.fICrlPrevRo

name::
* McsEngl.pwpoICrl.fICrlPrevRo@cptIt,
* McsEngl.pwpfICrlPrevRo@cptIt,

_DESCRIPTION:
Returns the-oICrl previous (index - 1) to the-current-oICrl.

pwpoICrl.fICrlRemoveRo

name::
* McsEngl.pwpoICrl.fICrlRemoveRo@cptIt,
* McsEngl.pwpfICrlRemoveRo@cptIt,

_DESCRIPTION:
Removes the-current-oICrl from the-objects which is member.

pwpoICrl.fICrlRenderAfterRo

name::
* McsEngl.pwpoICrl.fICrlRenderAfterRo@cptIt,
* McsEngl.pwpfICrlRenderAfterRo@cptIt,

_DESCRIPTION:
Post render method. Called after the-oICrl has-been-rendered to the-target.

pwpoICrl.fICrlRenderBeforeRo

name::
* McsEngl.pwpoICrl.fICrlRenderBeforeRo@cptIt,
* McsEngl.pwpfICrlRenderBeforeRo@cptIt,

_DESCRIPTION:
Renders the-oICrl before the-specified-oElt.

pwpoICrl.fICrlRepaint

name::
* McsEngl.pwpoICrl.fICrlRepaint@cptIt,
* McsEngl.pwpfICrlRepaint@cptIt,

_DESCRIPTION:
Repaints the-oICrl after a layout operation.

pwpoICrl.fICrlRepaintRo

name::
* McsEngl.pwpoICrl.fICrlRepaintRo@cptIt,
* McsEngl.pwpfICrlRepaintRo@cptIt,

_DESCRIPTION:
Reflows the-current-oICrl and it's ancestors.
This should be-used after you for example append children to the-current-oICrl so that the layout managers know that they need to reposition everything.

pwpoICrl.fICrlSATextRaso

name::
* McsEngl.pwpoICrl.fICrlSATextRaso@cptIt,
* McsEngl.pwpfICrlSATextRaso@cptIt,

_DESCRIPTION:
Gets/sets asICrlCfgTxt.

pwpoICrl.fICrlScrollIntoviewRo

name::
* McsEngl.pwpoICrl.fICrlScrollIntoviewRo@cptIt,
* McsEngl.pwpfICrlScrollIntoviewRo@cptIt,

_DESCRIPTION:
Scrolls the-current-oICrl into view.

pwpoICrl.fICrlSetHmlInner

name::
* McsEngl.pwpoICrl.fICrlSetHmlInner@cptIt,

_DESCRICPTION:
Sets the-inner-Hml of the-oICrl's Hml-element.

name::
* McsEngl.pwpfICrlSetHmlInner@cptIt,

pwpoICrl.fICrlShowRo

name::
* McsEngl.pwpoICrl.fICrlShowRo@cptIt,
* McsEngl.pwpfICrlShowRo@cptIt,

_DESCRIPTION:
Sets bICrlVisible#ql:idpwpbICrlVisible# to true.

pwpoICrl.fICrlToHmlRs

name::
* McsEngl.pwpoICrl.fICrlToHmlRs@cptIt,
* McsEngl.pwpfICrlToHmlRs@cptIt,

_DESCRIPTION:
Returns the-hml-code (as js-string) that represents the-oICrl, a div htmlelt.

pwpoICrl.fICrlVisibleRbo

name::
* McsEngl.pwpoICrl.fICrlVisibleRbo@cptIt,
* McsEngl.pwpfICrlVisibleRbo@cptIt,

_DESCRIPTION:
Sets/gets the-visible-state for the-oICrl.
RETURN: Current oICrl on a set operation or current state on a get.

pwpoICrl.fICrlXCfgValueRx

name::
* McsEngl.pwpoICrl.fICrlXCfgValueRx@cptIt,
* McsEngl.pwpfICrlXCfgValueRx@cptIt,

_DESCRIPTION:
Gets or Sets the-oICrl's xICrlCfgValue#ql:idpwpxICrlCfgValue#.

pwpoICrl.nICrlCfgHeight

name::
* McsEngl.pwpoICrl.nICrlCfgHeight@cptIt,
* McsEngl.pwpnICrlCfgHeight@cptIt,

pwpoICrl.nICrlCfgWidth

name::
* McsEngl.pwpoICrl.nICrlCfgWidth@cptIt,
* McsEngl.pwpnICrlCfgWidth@cptIt,

pwpoICrl.oICrlAria

name::
* McsEngl.pwpoICrl.oICrlAria@cptIt,
* McsEngl.pwpoICrlAria@cptIt,

_DESCRIPTION:
Contains the-aria attributes of the-oICrl hml-element.
oICrlAria = {sICrlRole: oICrlThis.oICrlCfg.sICrlRole}

pwpoICrl.oICrlBoxBorder

name::
* McsEngl.pwpoICrl.oICrlBoxBorder@cptIt,
* McsEngl.pwpoICrlBoxBorder@cptIt,

_DESCRIPTION:
oICrlBoxBorder = { top:, left:, bottom:, right:}

pwpoICrl.oICrlBoxMargin

name::
* McsEngl.pwpoICrl.oICrlBoxMargin@cptIt,
* McsEngl.pwpoICrlBoxMargin@cptIt,

_DESCRIPTION:
oICrlBoxMargin = { top:, left:, bottom:, right:}

pwpoICrl.oICrlBoxPadding

name::
* McsEngl.pwpoICrl.oICrlBoxPadding@cptIt,
* McsEngl.pwpoICrlBoxPadding@cptIt,

_DESCRIPTION:
oICrlBoxPadding = { top:, left:, bottom:, right:}

pwpoICrl.oICrlCfg

name::
* McsEngl.pwpoICrl.oICrlCfg@cptIt,
* McsEngl.pwpoICrlCfg@cptIt,
* McsEngl.pwpoICrl'settings@cptIt,
* McsEngl.pwpoICrl'cfg@cptIt,
* McsEngl.pwpoICrl'config-format@cptIt,

_DESCRIPTION:
Contains the-configuration-information of the-oICrl.
With this information fIFactory can create the-oICrl.

SPECIFIC

pwpoICrl'settings, pwpoICrlSettings:
=== array-object
* pwpaICrlItems (pwp'items),
* pwpaoICrlBody (pwp'body),
- (pwp'menu),

=== boolean
* pwpbICrlAutofix (pwp'autofix), 4 uses,
* pwpbICrlAutofocus (pwp'autofocus),
* pwpbICrlAutohide (pwp'autohide),
* pwpbICrlAutoscroll (pwp'autoScroll),
* pwpbICrlConstrain_to_viewport (pwp'constrainToViewport),
* pwpbICrlDisabled (pwp'disabled),
* pwpbICrlHidden (pwp'hidden),
* pwpbICrlLabelGapCalc (pwp'labelGapCalc),
* pwpbICrlMultiline (pwp'multiline),
* pwpbICrlPopover (pwp'popover),
* pwpbICrlPrepend_to_context, //on menuitem
* pwpbICrlSpellcheck (pwp'spellcheck),
* pwpbICrlVisible (pwp'visible), 2 times on settings
* pwpbIcCnrFixed (pwp'fixed)
* pwpbIcwChxChecked (pwp'checked)

=== number
* pwpnICrlFlex (pwp'flex),
* pwpnICrlHeightMin (pwp'minHeight),
* pwpnICrlLabelgap (pwp'labelGap),
* pwpnICrlLengthMax (pwp'maxLength),
* pwpnICrlRows (pwp'rows),
* pwpnICrlSize (pwp'size),
* pwpnICrlSpacing (pwp'spacing),
* pwpnICrlTabActive (pwp'activeTab),
* pwpnICrlWidthMin (pwp'minWidth),
* pwpnICrlWidthMax (pwp'maxWidth),
- pwp'h,
- pwp'height,
- pwp'w,
- pwp'width,
- pwp'x,
- pwp'y,
=== number|string
* pwpnsICrlBorder (pwp'border),
* pwpnsICrlMargin (pwp'margin),
* pwpnsICrlPadding (pwp'padding),

=== function
- pwp'onclick,

=== object
* pwpoICrlButtons (pwp'buttons),
* pwpoICrlData (pwp'data),
* pwpoICrlDefaults (pwp'defaults),
* pwpoICrlFcallbacks (pwp'callbacks),
* pwpoICrlItemDefaults (pwp'itemDefaults), //this destroys formats
* pwpoICrlPanel (pwp'panel): emoticons,

=== string
* pwpsICrlAlign (pwp'align),
* pwpsICrlAlignPopover (pwp'popoverAlign),
* pwpsICrlAutoresize (pwp'autoResize), //not layout-rectagle.
* pwpsICrlClasses (pwp'classes),
* pwpsICrlCmd (pwp'cmd),
* pwpsICrlCmdSelect (pwp'selectcmd),
* pwpsICrlContext (pwp'context), //on parserArgs, theme.js
* pwpsICrlDelimiter (pwp'delimiter),
* pwpsICrlDirection (pwp'direction),
* pwpsICrlForid (pwp'forId),
* pwpsICrlHtml (pwp'html),
* pwpsICrlIcon (pwp'icon),
* pwpsICrlImage (pwp'image),
* pwpsICrlLabel (pwp'label): fCCContainer, fCCWBMListbox, fCCWTextbox, fCCWCbFilepicker.
* pwpsICrlLayout (pwp'sILayout),
* pwpsICrlMnbitm (pwp'sICrlMenbaritm): 'oMenbaritmFile'
* pwpsICrlName (pwp'name),
* pwpsICrlPack (pwp'pack): 'end', 'center', 'start',
* pwpsICrlPackV
* pwpsICrlPlaceholder (pwp'placeholder),
* pwpsICrlRole (pwp'role),
* pwpsICrlSct (pwp'shortcut),
* pwpsICrlStyle (pwp'style): "font-size: 44px; text-align: center;" pgnCharmap
* pwpsICrlSubtype (pwp'subtype),
* pwpsaICrlText (pwp'text): oICWLabel text,
* pwpsICrlCfgTitle (pwp'title),
* pwpsICrlTooltip (pwp'tooltip),
* pwpsICrlTypeDefault (pwp'defaultType),
* pwpsICrlUrl (pwp'url),
- pwp'type, //no filetype
- pwp'filetype
===
* pwpxICrlValue (pwp'value):
- false //default
- "<!DOCTYPE html>?<html>?<head>?</head>?<body>?<p>Your content here.</p>?</body>?</html>" on pgnCode.
- {content: undefined, description: "Insert", url: "template1.html"}} //template

pwpoICrl.aICrlValues

name::
* McsEngl.pwpoICrl.aICrlValues@cptIt,

aICrlValues: [
{saICrlText: 'None', value: ''},
{saICrlText: 'Left', value: 'left'},
{saICrlText: 'Center', value: 'center'},
{saICrlText: 'Right', value: 'right'}
]

pwpoICrl.oICrlEvtsNative

name::
* McsEngl.pwpoICrl.oICrlEvtsNative@cptIt,
* McsEngl.pwpoICrlEvtsNative@cptIt,

_DESCRIPTION:
Contains native-events of oICrl.
oICrlEvtsNative = {evt: boolean}

pwpoICrl.oICrlEvtstore

name::
* McsEngl.pwpoICrl.oICrlEvtstore@cptIt,
* McsEngl.pwpoICrlEvtstore@cptIt,

_DESCRIPTION:
Contains an-array of evtcmds per evt on oICrl.
oICrlEvtstore = {evt: []}

pwpoICrl.sICfgObjectof

name::
* McsEngl.pwpoICrl.sICfgObjectof@cptIt,
* McsEngl.pwpsICfgObjectof@cptIt,

_DESCRIPTION:
Contains the-name of the-object-factory-function that created the-object.

pwpoICrl.sICrlId

name::
* McsEngl.pwpoICrl.sICrlId@cptIt,
* McsEngl.pwpsICrlId@cptIt,

_DESCRIPTION:
Contains the-id of the-hml-element.

pwpoICrl.sICrlCfgName

name::
* McsEngl.pwpoICrl.sICrlCfgName@cptIt,
* McsEngl.pwpsICrlCfgName@cptIt,

_DESCRIPTION:
Name of the-oICrl.

_NOTATION:
guiTypePluginName
[hmnSngo.2015-06-06]
===
guiName
[hmnSngo.2015-05-30]

_SPECIFIC:
//Filepicker
* guiFpr
===
//Label
* guiLbl
===
//Listbutton
* guiLbn
===
//Panel
* guiPnlBarStatus
===
//Textbox
* guiTbx

pwpoICrl.xICrlCfgValue

name::
* McsEngl.pwpoICrl.xICrlCfgValue@cptIt,
* McsEngl.pwpxICrlCfgValue@cptIt,

_DESCRIPTION:

pwpoICrl'hml-element

name::
* McsEngl.pwpoICrl'hml-element@cptIt,
* McsEngl.pwpoICrl'hml-code@cptIt,

_DESCRIPTION:
A-oICrl represents an-hml-element.

SPECIFIC

pwpoICrl.SPECIFIC:
* oICCnr#linkidPwpoICCnr#ql:idPwpoICCnr##
* oICHover#linkidPwpoICHover#ql:idPwpoICHover##
* oICPath#linkidPwpoICPath#ql:idPwpoICPath##
* oICTooltip#linkidPwpoICTooltip#ql:idPwpoICTooltip##
===
 oICrl,
   oICCnr#linkidPwpoICCnr#ql:idPwpoICCnr##
     oICCButtoncnr,
     oICCFormcnr,
       oICCFFieldsetcnr,
     oICCFormitmcnr,
     oICCPanelcnr,
       oICCPFloatcnr,
         oICCPFMenucnr,
         oICCPFWincnr,
           oICCPFWMsgboxcnr,
       oICCPTabcnr,
     oICCToolbarcnr,
       oICCTMenubarcnr,
   oICHover#linkidPwpoICHover#ql:idPwpoICHover##
     oICHButton,
       oICHBMenubtn,
         oICHBMListbtn,
         oICHBMSplitbtn,
       oICHBPanelbtn,
         oICHBPColorbtn,
     oICHCombobox,
       oICHCbFilepick,
     oICHCheckbox,
       oICHCkRadio,
     oICHIframe,
     oICHLabel,
     oICHMenuitm,
     fICWResizer,
     oICHSpacer,
     oICHTextbox,
   oICPath#linkidPwpoICPath#ql:idPwpoICPath##
     oICPElement,
   oICTooltip#linkidPwpoICTooltip#ql:idPwpoICTooltip##

pwpo2I.fICCnrRo (ICCnr)

name::
* McsEngl.pwpo2I.fICCnrRo (ICCnr)@cptIt,
* McsEngl.pwpfICCnrRo@cptIt,
=== _OLD:
* McsEngl.pwpfICCnrFtr@old,
* McsEngl.oPgmHtml.oI.Control.Container@old,
* McsEngl.pwpfICContainer@old,
* McsEngl.pwpContainer@old,
* McsEngl.pwp'Container@old,
* McsEngl.pwp'fCCContainer@old,
* McsEngl.tinymce.ui.Container@old,
* McsEngl.phIcc@old,
* McsEngl.phIccnr@old,

pwpoICCnr

name::
* McsEngl.pwpoICCnr@cptIt,

_GENERIC:
* oICrl#linkidPwpoICrl#ql:idPwpoICrl##

_DEFINITION:
* Container control. This is extended by all controls that can have
* children such as panels etc. You can also use this class directly as an
* generic container instance. The container doesn't have any specific role or style.
*
* @-x-less Container.less
* @class tinymce.ui.Container
* @extends tinymce.ui.Control
return Control#ql:tinymce.ui.control _name.english#.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Container.js]
===
It is divided into head, body, foot
[hmnSngo.2015-05-25]

pwpoICCnr'member

name::
* McsEngl.pwpoICCnr'member@cptIt,

pwpoICCnr.MEMBER:
> pwp.0-90 2016-05-09: Object.getOwnPropertyNames(oPgmWpg.o2I.fICCnrRo()).sort()
["aICrlClasses", "asICrlCfgTxt", "bICCnrBody", "bICCnrCfgFixed", "bICrlCfgActive", "bICrlCfgDisabled", "bICrlCfgVisible", "fICCnrAddRo", "fICCnrAdd_and_renderRo", "fICCnrAkCrlRo", "fICCnrCreateRa", "fICCnrFindAkCrlRo", "fICCnrFromNameXValueRo", "fICCnrInsert_and_renderRo", "fICCnrPrepend_and_renderRo", "fICCnrRecalcRb", "fICCnrRenderBeforeRo", "fICCnrRenderNewRo", "fICCnrReplace", "fICCnrToNameXValueRo", "fICrlEltFocusRo", "fICrlInit", "fICrlInitLayrect", "fICrlRenderAfterRo", "fICrlRepaintRo", "fICrlToHmlRs", "nICrlHeight", "nICrlWidth", "oICCnrAkCrl", "oICCnrLayout", "oICrlAria", "oICrlBoxBorder", "oICrlBoxMargin", "oICrlBoxPadding", "oICrlCfg", "sICfgObjectof", "sICrlCfgName", "sICrlId", "sICrlLayout", "xICrlCfgValue"]
===
//2015-12-11
> Object.getOwnPropertyNames(oPgmWpg.o2I.fICCnrFtr()).sort()
["aICrlClasses", "bICrlActive", "bICrlDisabled", "bICrlVisible", "bIcCnrBody", "bIcCnrFixed", "fICrlFocus", "fICrlInit", "fICrlInitLayrect", "fICrlRenderAfter", "fICrlRepaint_and_return", "fICrlToHtml", "fIcCnrAdd", "fIcCnrAppend", "fIcCnrControlset", "fIcCnrCreate", "fIcCnrFindcrlset", "fIcCnrFromNameValue", "fIcCnrInsert", "fIcCnrPrepend", "fIcCnrRecalc", "fIcCnrRenderBefore", "fIcCnrRenderNew", "fIcCnrReplace", "fIcCnrToNameValue", "nICrlHeight", "nICrlWidth", "oICrlAria", "oICrlBoxBorder", "oICrlBoxMargin", "oICrlBoxPadding", "oICrlCfg", "oIcCnrControlset", "oIcCnrLayout", "sICrlId", "sICrlLayout", "sICrlName", "saICrlText", "xICrlValue"]
===
//charmap table container
* _fGeneric: undefined
* aICrlClasses: Array[0]
.control [0: "clsContainer"
1: "clsFirst"
2: "clsLayoutAbsItem"]
* bICrlActive: false
* bICrlDisabled: false
* bICrlRendered: true
* bICrlVisible: true
* bIcCnrBody: true
* bIcCnrFixed: undefined
* nICrlHeight: 0
* nICrlWidth: 0
* oICrlAria: Object {sICrlRole: undefined}
* oICrlBoxBorder: Object {bottom: 0, left: 0, right: 0, top: 0}
* oICrlBoxMargin: Object {bottom: 0, left: 0, right: 0, top: 0}
* oICrlBoxPadding: Object {bottom: 0, left: 0, right: 0, top: 0}
* oICrlEventsNative: Object {click: false, mouseover: false}
* oICrlEvtstore: Object
* oICrlLayrect: Object
* oICrlLayrectLast: Object
* oICrlLayrectRepaintLast: Object
* oICrlParent: fSpecific
* oICrlSettings: Object {fsICrlHtml: "<table ..</table>"
onclick: (oEvtIn)
onmouseover: (oEvtIn)
sICrlType: "fCCContainer"}
* oIcCnrCollection: oI.fICollection
* oIcCnrLayout: oI.fILayout
* oIccpfltEventsRoot: fSpecific
* sICrlId: "id139"
* sICrlName: ""
* sICrlType: "fCCContainer"
* saICrlText: ""
* xICrlValue: false
* __proto__: fSpecific
===
_fProto: undefined
aICrlClasses: Array[0]
bICrlActive: false
bICrlDisabled: false
bICrlVisible: true
bIcCnrBody: true
bIcCnrFixed: undefined
nICrlHeight: 0
nICrlWidth: 0
oICrlAria: Object
oICrlBoxBorder: undefined
oICrlBoxMargin: undefined
oICrlBoxPadding: undefined
oICrlEventsNative: Object
oICrlEventsNativeNo: Object
oICrlSettings: Object
oIcCnrCollection: oI.fICollection
oIcCnrLayout: oI.fILayout
sICrlId: "id105"
sICrlName: ""
sICrlText: ""
xICrlValue: false
===
* pwpfIccnrAdd (pwp'add)
* pwpfIccnrAppend (pwp'append)
* pwpfIcCnrCollection: GET the oICollection which contains the members of the container.
* pwpfIccnrCreate (pwp'create)
* pwpfIccnrFind (pwp'find): fIccnrFind('#nameStatusbar')
* pwpfIccnrInsert (pwp'insert)
* pwpfIccnrItems (pwp'items)
* pwpfIccnrRecalc
* pwpfIccnrReplace (pwp'replace)
===
> Object.getOwnPropertyNames(new oPgmHtml.oI.fCCContainer()).sort()
["_fProto", "aIcrlClasses", "bIcrlActive", "bIcrlBody", "bIcrlDisabled", "bIcrlFixed", "bIcrlVisible", "nIcrlHeight", "nIcrlWidth", "oILayout", "oIccCollection", "oIcrlAria", "oIcrlBindings", "oIcrlBoxBorder", "oIcrlBoxMargin", "oIcrlBoxPadding", "oIcrlEventsNative", "sIcrlId", "sIcrlName", "sIcrlText", "sIcrlValue", "settings"]
> Object.getOwnPropertyNames(new oPgmHtml.oI.fCCContainer().__proto__).sort()
["add", "append", "create", "fCnrFromJSON", "fCnrRecalc", "fCnrRenderBefore", "fCnrRenderNew", "fCnrToJSON", "fIcrlLayoutrectInit", "fIcrlReflow", "fIcrlRenderAfter", "fIcrlToHtml", "find", "focus", "init", "insert", "items", "prepend", "replace", "sILayout"]
===
* pwpoICCContainer:
> Object.getOwnPropertyNames((new tinymce.oUi.fCCContainer)).sort()
* pwpoIContainer.Uactive,
* pwp'oContainer.UbTitle,
* pwp'oContainer.Ubindings,
* pwp'oContainer.UborderBox,
* pwp'oContainer.Uclasses,
* pwp'oContainer.Udisabled,
* pwp'oContainer.Ufixed,
* pwp'oContainer.UhasBody,
* pwp'oContainer.Uheight,
* pwp'oContainer.Uid,
* pwp'oContainer.Uitems,
* pwp'oContainer.Ulayout,
* pwp'oContainer.UmarginBox,
* pwp'oContainer.Uname,
* pwp'oContainer.UnativeEvents,
* pwp'oContainer.UoAria,
* pwp'oContainer.UoProto,
* pwp'oContainer.UpaddingBox,
* pwp'oContainer.Utext,
* pwp'oContainer.Uvalue,
* pwp'oContainer.Uvisible,
* pwp'oContainer.Uwidth,
* pwp'oContainer.settings,
Object.getOwnPropertyNames((new tinymce.oUi.fCCContainer).__proto__).sort()
* pwp'oContainer.add,
* pwp'oContainer.append,
* pwp'oContainer.create,
* pwp'oContainer.find,
* pwp'oContainer.focus,
* pwp'oContainer.fromJSON,
* pwp'oContainer.init,
* pwp'oContainer.initLayoutRect,
* pwp'oContainer.innerClass,
* pwp'oContainer.insert,
* pwp'oContainer.items,
* pwp'oContainer.layout,
* pwp'oContainer.postRender,
* pwp'oContainer.preRender,
* pwp'oContainer.prepend,
* pwp'oContainer.recalc,
* pwp'oContainer.reflow,
* pwp'oContainer.renderHtml,
* pwp'oContainer.renderNew,
* pwp'oContainer.replace,
* pwp'oContainer.toJSON,
===
> Object.getOwnPropertyNames((new tinymce.ui.Container)).sort()
["_active", "_aria", "_borderBox", "_classes", "_disabled", "_eventDispatcher", "_fixed", "_hasBody", "_height", "_id", "_items", "_layout", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.Container).__proto__).sort()
["add", "append", "create", "find", "focus", "fromJSON", "init", "initLayoutRect", "innerClass", "insert", "items", "layout", "postRender", "preRender", "prepend", "recalc", "reflow", "renderHtml", "renderNew", "replace", "toJSON"]
Object.getOwnPropertyNames((new tinymce.ui.Container).__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "getRoot", "hasClass", "hasEventListeners", "height", "hide", "init", "initLayoutRect", "innerHtml", "isRtl", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parentsAndSelf", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "translate", "value", "visible", "width"]

pwpoICCnr.bICCnrBody

name::
* McsEngl.pwpoICCnr.bICCnrBody@cptIt,
* McsEngl.pwpbICCnrBody@cptIt,

_DESCRIPTION:
Denotes if the-oICCnr has body sub-oICrl.

pwpoICCnr.bICCnrCfgFixed

name::
* McsEngl.pwpoICCnr.bICCnrCfgFixed@cptIt,
* McsEngl.pwpbICCnrCfgFixed@cptIt,

_DESCRIPTION:

pwpoICCnr.fICCnrAddRo

name::
* McsEngl.pwpoICCnr.fICCnrAddRo@cptIt,
* McsEngl.pwpfICCnrAddRo@cptIt,

_DESCRIPTION:

pwpoICCnr.fICCnrAddRenderRo

name::
* McsEngl.pwpoICCnr.fICCnrAddRenderRo@cptIt,
* McsEngl.pwpfICCnrAddRenderRo@cptIt,

_DESCRIPTION:

pwpoICCnr.fICCnrAkcChldRo

name::
* McsEngl.pwpoICCnr.fICCnrAkcChldRo@cptIt,
* McsEngl.pwpfICCnrAkcChldRo@cptIt,

_DESCRIPTION:
Returns an-oIAkCrl of children that the-oICCnr currently has.

pwpoICCnr.fICCnrCreateCrlsRa

name::
* McsEngl.pwpoICCnr.fICCnrCreateCrlsRa@cptIt,
* McsEngl.pwpfICCnrCreateCrlsRa@cptIt,

_DESCRIPTION:
Creates the specified oICrls.
If any of the-items is in config-format it will-convert these into real oICrls.

pwpoICCnr.fICCnrFindAkcChldRo

name::
* McsEngl.pwpoICCnr.fICCnrFindAkcChldRo@cptIt,
* McsEngl.pwpfICCnrFindAkcChldRo@cptIt,

_DESCRIPTION:
Finds child oICrls by css-selector.
fICCnrFindAkcChldRo('#guiTbxImgWidth'): finds child with this sICrlCfgName.

pwpoICCnr.fICCnrFromNameXValueRo

name::
* McsEngl.pwpoICCnr.fICCnrFromNameXValueRo@cptIt,
* McsEngl.pwp@cptIt,

_DESCRIPTION:
Sets the-xICrlCfgValue on the-members with an-input-sICrlCfgName.
INPUT: sICrlCfgName-xICrlCfgValue object.

pwpoICCnr.fICCnrInsertRenderRo

name::
* McsEngl.pwpoICCnr.fICCnrInsertRenderRo@cptIt,
* McsEngl.pwpfICCnrInsertRenderRo@cptIt,

_DESCRIPTION:
Inserts oICrls at a specific index.

pwpoICCnr.fICCnrPrependRenderRo

name::
* McsEngl.pwpoICCnr.fICCnrPrependRenderRo@cptIt,
* McsEngl.pwpfICCnrPrependRenderRo@cptIt,

_DESCRIPTION:
Prepends new-oICrls to the-current-oICCnr.

pwpoICCnr.fICCnrRecalcRb

name::
* McsEngl.pwpoICCnr.fICCnrRecalcRb@cptIt,
* McsEngl.pwpfICCnrRecalcRb@cptIt,

_DESCRIPTION:
Recalculates the-positions of the-oICrls in the-current-oICCnr.

pwpoICCnr.fICCnrRenderBeforeRo

name::
* McsEngl.pwpoICCnr.fICCnrRenderBeforeRo@cptIt,
* McsEngl.pwpfICCnrRenderBeforeRo@cptIt,

_DESCRIPTION:
Called before the-oICCnr is rendered.

pwpoICCnr.fICCnrRenderNewRo

name::
* McsEngl.pwpoICCnr.fICCnrRenderNewRo@cptIt,
* McsEngl.pwpfICCnrRenderNewRo@cptIt,

_DESCRIPTION:
Renders new oICrls.

pwpoICCnr.fICCnrReplace

name::
* McsEngl.pwpoICCnr.fICCnrReplace@cptIt,
* McsEngl.pwpfICCnrReplace@cptIt,

_DESCRIPTION:
Replaces the-specified-child-oICrl with a-new-oICrl.

pwpoICCnr.fICCnrToNameXValueRo

name::
* McsEngl.pwpoICCnr.fICCnrToNameXValueRo@cptIt,
* McsEngl.pwpfICCnrToNameXValueRo@cptIt,

_DESCRIPTION:
Returns an-object with sICrlCfgName-xICrlCfgValue of member oICrls.

pwpoICCnr.fICrlInit

name::
* McsEngl.pwpoICCnr.fICrlInit@cptIt,
* McsEngl.pwpfICrlInit@cptIt,

_DESCRIPTION:
Initializes a control: sets values to some of its members:
===
- oICContainerThis.bIcCnrFixed = oICrlSettingsIn.bIcCnrFixed;
- oICContainerThis.oIcCnrCollection
- oICContainerThis.fICrlClassAdd(oICrlSettingsIn.sICrlClsContainer);
- oICContainerThis.oIcCnrLayout
- oICContainerThis.fIcCnrAdd(oICrlSettingsIn.aICrlItems
- oICContainerThis.bIcCnrBody = true;
===
1) oIControlThis.oICrlSettings = fUTolObtExtend({}, oIControlThis.oICrlSettingsDefaults, oICrlSettingsIn);
2) oIControlThis.sICrlId = oCDUtil.fDUtlUniqueId();
-) oIControlThis.aICrlClasses = [];
-) oIControlThis.bICrlActive //config or false
-) oIControlThis.bICrlDisabled //config or false
-) oIControlThis.bICrlVisible //config or true
-) oIControlThis.nICrlWidth = 0;
-) oIControlThis.nICrlHeight = 0;
-) oIControlThis.oICrlAria = {sICrlRole: oIControlThis.oICrlSettings.sICrlRole};
-) oIControlThis.oICrlBoxBorder =
-) oIControlThis.oICrlBoxPadding =
-) oIControlThis.oICrlBoxMargin
-) oIControlThis.saICrlText = '';
-) oIControlThis.sICrlName = '';
-) oIControlThis.xICrlValue //config or false

pwpoICCnr.fICrlEltFocusRo

name::
* McsEngl.pwpoICCnr.fICrlEltFocusRo@cptIt,
* McsEngl.pwpfICrlEltFocusRoCnr@cptIt,
* McsEngl.pwpfICrlEltFocusRo@cptIt,

_DESCRIPTION:
Focuses the-current-oICCnr.
This will look for the first oICrl in the-oICCnr and focus that.

pwpoICCnr.fICrlInitLayrect

name::
* McsEngl.pwpoICCnr.fICrlInitLayrect@cptIt,
* McsEngl.pwpfICrlInitLayrectCnr@cptIt,
* McsEngl.pwpfICrlInitLayrect@cptIt,

_DESCRIPTION:
Initializes the-current-oICrls oICrlLayrect.

pwpoICCnr.fICrlRenderAfterRo

name::
* McsEngl.pwpoICCnr.fICrlRenderAfterRo@cptIt,
* McsEngl.pwpfICrlRenderAfterRoCnr@cptIt,
* McsEngl.pwpfICrlRenderAfterRo@cptIt,

_DESCRIPTION:
Post render method. Called after the-oICrl has been rendered to the-target.

pwpoICCnr.pwpfICrlRepaintRo

name::
* McsEngl.pwpoICCnr.pwpfICrlRepaintRo@cptIt,
* McsEngl.pwppwpfICrlRepaintRo@cptIt,

_DESCRIPTION:
Reflows the-current-oICCnr and it's children and possible parents.
This should be-used after you for example append children to the-current-oICrl so that the-oILayout managers know that they need to reposition everything.

pwpoICCnr.fICrlToHmlRs

name::
* McsEngl.pwpoICCnr.fICrlToHmlRs@cptIt,
* McsEngl.pwpfICrlToHmlRs@cptIt,

_DESCRIPTION:
Returns the-oICCnr as a-Hml-string.

pwpoICCnr.nICrlHeight

name::
* McsEngl.pwpoICCnr.nICrlHeight@cptIt,

pwpoICCnr.nICrlWidth

name::
* McsEngl.pwpoICCnr.nICrlWidth@cptIt,

pwpoICCnr.oICCnrAkCrl

name::
* McsEngl.pwpoICCnr.oICCnrAkCrl@cptIt,

pwpoICCnr.oICCnrLayout

name::
* McsEngl.pwpoICCnr.oICCnrLayout@cptIt,

pwpoICCnr.sICrlLayout

name::
* McsEngl.pwpoICCnr.sICrlLayout@cptIt,

pwpoICCnr'html-element

name::
* McsEngl.pwpoICCnr'html-element@cptIt,

_CODE.HTML.PWP:
//CHARMAP table container
<div id="id139" class="clsContainer clsFirst clsLayoutAbsItem" role="undefined" style="left: 10px; top: 10px; width: 425px; height: 298px;">
<div id="id139-body" class="" style="width: 425px; height: 298px;">
<table role="presentation" cellspacing="0" class="clsCharmap">
<tbody>
<tr>
<td title="no-break space 160"><div id="idTable0" tabindex="-1"> </div></td>
<td title="ampersand 38"><div id="idTable1" tabindex="-1">&</div></td>
<td title="quotation mark 34"><div id="idTable2" tabindex="-1">"</div></td>
...
<td title="null"><div id="idnull" tabindex="-1"> </div></td>
</tr>
</tbody>
</table>
</div>
</div>
=== SOURCE-CODE-WINDOW:
<div id="id113" class="clsContainer clsCnrPanel clsFloatpanel clsWindow clsIn" hidefocus="1" tabindex="-1" role="dialog" aria-labeledby="id113" aria-label="Source code" style="border-width: 1px; z-index: 65536; left: 261px; top: 34.5px; width: 640px; height: 196px;">
<div id="id113-head" class="clsWinHead">
<div class="clsWinTitle">Source code</div>
<button type="button" class="clsClose" aria-hidden="true">Χ</button>
<div id="id113-drag" class="clsWinDrag"></div>
</div>

<div id="id113-body" class="clsLayoutAbs" style="width: 640px; height: 107px;">
<div id="id114" class="clsContainer clsForm clsFirst clsLast clsLayoutAbsItem" role="undefined" style="left: 0px; top: 0px; width: 640px; height: 107px;">
<div id="id114-body" class="clsLayoutAbs" style="width: 640px; height: 107px;">
<textarea id="id115" class="clsTextbox clsMultiline clsFirst clsLast clsLayoutAbsItem" hidefocus="true" style="left: 20px; top: 20px; width: 592px; height: 59px;"><!DOCTYPE html>
</html></textarea></div></div></div>

<div id="id116" class="clsContainer clsCnrPanel clsFoot" hidefocus="1" tabindex="-1" style="border-width: 1px 0px 0px; left: 0px; top: 0px; width: 640px; height: 49px;">
<div id="id116-body" class="clsLayoutAbs" style="width: 640px; height: 49px;">
<div id="id117" class="clsWidget clsBtn clsPrimary clsFirst clsLayoutAbsItem" tabindex="-1" role="button" style="left: 10px; top: 10px; width: 52px; height: 29px;"><button role="presentation" type="button" tabindex="-1" style="height: 100%; width: 100%;">Ok</button></div>
<div id="id118" class="clsWidget clsBtn clsLast clsLayoutAbsItem" tabindex="-1" role="button" style="left: 65px; top: 10px; width: 64px; height: 29px;"><button role="presentation" type="button" tabindex="-1" style="height: 100%; width: 100%;">Cancel</button></div></div>
</div>
</div>

=== BIU-container
<div id="id101" class="clsContainer clsLayoutFlowItem clsCnrButton" role="toolbar">
<div id="id101-body">
<div id="id73" class="clsWidget clsBtn clsFirst" tabindex="-1" role="button" aria-labeledby="id73" aria-label="Bold">
<button role="presentation" type="button" tabindex="-1">
<i class="clsIco clsI-bold"></i>
</button>
</div>
<div id="id74" class="clsWidget clsBtn" tabindex="-1" role="button" aria-labeledby="id74" aria-label="Italic">
<button role="presentation" type="button" tabindex="-1">
<i class="clsIco clsI-italic"></i>
</button>
</div>
<div id="id75" class="clsWidget clsBtn clsLast" tabindex="-1" role="button" aria-labeledby="id75" aria-label="Underline">
<button role="presentation" type="button" tabindex="-1">
<i class="clsIco clsI-underline"></i>
</button>
</div>
</div>
=== statusbar
<div id="id106" class="clsBarStatusPnl clsContainer clsCnrPanel clsLast clsLayoutStackItem" hidefocus="1" tabindex="-1" style="border-width: 1px 0px 0px;">
<div id="id106-body" class="clsLayoutFlow">
<div id="id107" class="clsPath clsLayoutFlowItem clsFirst">
<div role="button" class="clsPathItem clsLast" data-index="0" tabindex="-1" id="id107-0">p
</div>
</div>
<label id="id111" class="clsWordcount clsWidget clsLabel clsLayoutFlowItem">Words: 3</label>
</div>
</div>
===
<div id="mce_124-body" class="cls-container-body cls-abs-layout" style="width: 382px; height: 30px;">
 <label id="mce_125" class="cls-widget cls-label cls-first cls-abs-layout-item" for="mce_115" style="line-height: 16px; left: 0px; top: 7px; width: 101px; height: 16px;">Title</label>
 <input id="mce_115" class="cls-textbox cls-last cls-abs-layout-item" value="" hidefocus="true" size="40" style="left: 101px; top: 0px; width: 271px; height: 28px;">
</div>

SPECIFIC

pwp'container.SPECIFIC:
* Button-cnr#ql:phlfcccbuttoncnr#
* Form#ql:tmce'form#
 * Fieldset-cnr
* Formitem#ql:tmce'formitem#
* Panel#ql:tmce'panel#
 * Floatpanel#ql:tmce'floatpanel#
   * Menu-cnr
   * Window-cnr
     * Msgbox-cnr
 * Tab-cnr
* Toolbar#ql:tmce'toolbar#
 * Menubar-cnr##
===
* id="id85" class="clsPgmHtml clsContainer clsCnrPanel"
contains the 4 bars of the-program.
* id="id86" class="clsContainer clsMenubar clsToolbar clsFirst clsLayoutStackItem"
contains the barMenu
* id="id95" class="clsContainer clsCnrPanel clsLayoutStackItem"
contains the-toolbars of the-program.
* id="id97" class="clsContainer clsFirst clsLayoutFlowItem clsCnrButton"
contains the first group of tools in the-toolbar.
...
* id="id104" class="clsBarContent clsContainer clsCnrPanel clsLayoutStackItem"
contains the-iframe of the-content.
* id="id105" class="clsBarStatusPnl clsContainer clsCnrPanel clsLast clsLayoutStackItem"
contains the-statusbar of the-program.
===
* id="id110" class="clsContainer clsFloatpanel clsMenu clsMenu-has-icons clsMenuAlign"
contains a-menuitem or a group of menuitems.
* id="id195" class="clsContainer clsCnrPanel clsFloatpanel clsPopover clsBottom clsStart"
contains a table of colors
* id="id203" class="clsContainer clsFloatpanel clsMenu clsMenu-sub clsMenuAlign clsMenu-sub-tr-tl"
contains submenu header1, header2, ...

pwpo2I.fICCButtoncnrRo (ICCBnc)

name::
* McsEngl.pwpo2I.fICCButtoncnrRo (ICCBnc)@cptIt,
* McsEngl.fICCButtoncnrRo@cptIt,
* McsEngl.pwpfICCButtoncnrFtr@cptIt,
* McsEngl.oPgmHtml.oI.Control.Container.ButtonGroup@cptIt,
* McsEngl.pwpfICCButtoncnr@cptIt,
* McsEngl.pwpfCCCButtoncnr@cptIt,
* McsEngl.phButtongroup@cptIt,
* McsEngl.phButtoncnr@cptIt,
* McsEngl.phButtoncontainer@cptIt,
* McsEngl.phIButtongroup@cptIt,
* McsEngl.pwp'ButtonGroup@cptIt,
* McsEngl.pwp'fCCCButtongroup@cptIt,
* McsEngl.tinymce.ui.ButtonGroup@cptIt,

* McsEngl.phIccbgp@cptIt,

pwpoICCButtoncnr

name::
* McsEngl.pwpoICCButtoncnr@cptIt,

_DESCRIPTION:
This oICCnr holds multiple toolbar-buttons.

pwpoICCButtoncnr.member

name::
* McsEngl.pwpoICCButtoncnr.member@cptIt,

pwpoICCButtoncnr.MEMBER:
> 0.90v 2016-05-13: Object.getOwnPropertyNames(oPgmWpg.o2I.fICCButtoncnrRo()).sort()
["aICrlClasses", "asICrlCfgTxt", "bICCnrBody", "bICCnrCfgFixed", "bICrlCfgActive", "bICrlCfgDisabled", "bICrlCfgVisible", "fICrlToHmlRs", "nICrlCfgHeight", "nICrlCfgWidth", "oICCnrAkcChld", "oICCnrLaymgr", "oICrlAria", "oICrlBoxBorder", "oICrlBoxMargin", "oICrlBoxPadding", "oICrlCfg", "oICrlCfgDefaults", "sICfgObjectof", "sICrlCfgName", "sICrlId", "xICrlCfgValue"]
===
bIcCnrBody: true
bIcCnrFixed: undefined
fICrlToSHtml: () {
oICrlSettingsDefaults: object
oIcCnrCollection: oI.fICollection
oIcCnrLayout: oI.fILayout

__proto__: object
bIcCnrBody: true
bIcCnrFixed: undefined
fICrlFocus: () {
fICrlLayrectInit: () {
fICrlReflow: () {
fICrlRenderAfter: () {
fICrlToSHtml: () {
fIcCnrAdd: (xItemsIn) {
fIcCnrAppend: (xItemsIn) {
fIcCnrClnofcontrols: () {
fIcCnrCreate: (aItemsIn) {
fIcCnrFindcln: (sCssselectorIn) {
fIcCnrFromOJSON: (oJsonIn) {
fIcCnrInsert: (xItemsIn, nIndexIn, bBeforeIn) {
fIcCnrPrepend: (xItemsIn) {
fIcCnrRecalc: () {
fIcCnrRenderBefore: () {
fIcCnrRenderNew: () {
fIcCnrReplace: (oIControlOldIn, oIControlNewIn) {
fIcCnrToOJSON: () {
init: (oICrlSettingsIn) {
oIcCnrCollection: oI.fICollection
oIcCnrLayout: oI.fILayout
sICrlLayout: "filayout"

__proto__: object
bICrlActive: false
bICrlDisabled: false
bICrlVisible: true
fICrlActive: (bActiveIn) {
fICrlAddAfter: (aoItemsIn) {
fICrlAddBefore: (aoItemsIn) {
fICrlAppendToElt: (oHTMLElement) {
fICrlAria: (sAriaGncIn, sAriaSpcIn) {
fICrlBClass: (sClsValueIn, sGroupIn) {
fICrlBindEventsPending: () {
fICrlBlur: () {
fICrlBoxBorder: () {
fICrlBoxMargin: () {
fICrlBoxMeasure: (oHeltIn, sPrefixIn) {
fICrlBoxPadding: () {
fICrlBoxParse: (nsBoxIn) {
fICrlClassAdd: (sClsValueIn, sGroupIn) {
fICrlClassRemove: (sClsValueIn, sGroupIn) {
fICrlClassToggle: (sClsValueIn, bAddIn, sGroupIn) {
fICrlClasses: (sGroupIn) {
fICrlClnParents: (sCssselectorIn) {
fICrlDisabled: (bDisabled) {
fICrlEltBody: () {
fICrlEltGet: (sIdsuffixIn, bDropCacheIn) {
fICrlEncode: (sTextIn, bTranslateIn) {
fICrlEvtfunctionAdd: (sEvtnamesIn, fsEvtfunctionIn) {
fICrlEvtfunctionCall: (sEvtnameIn, oEvtCrlArgsIn, bBubbleIn) {
fICrlEvtfunctionRemove: (sEvtnamesIn, callback) {
fICrlFindAncestorCommon: (oIControl1, oIControl2) {
fICrlFocus: () {
fICrlFromHTMLElement: (oHTMLElementIn) {
fICrlHide: () {
fICrlHtmlInner: (sHtmlIn) {
fICrlLayrect: (oICrlLayrectIn) {
fICrlLayrectInit: () {
fICrlName: (sNameIn) {
fICrlNext: () {
fICrlParent: (oICrlParentIn) {
fICrlPrev: () {
fICrlReflow: () {
fICrlRemove: () {
fICrlRenderAfter: () {
fICrlRenderBefore: (oHTMLElementIn) {
fICrlRepaint: () {
fICrlScrollIntoview: (sAlignIn) {
fICrlShow: () {
fICrlText: (sICrlTextIn) {
fICrlToSHtml: () {
fICrlValue: (xICrlValueIn) {
fICrlVisible: (bVisible) {
init: (oICrlSettingsIn) {
nICrlHeight: 0
nICrlWidth: 0
oICrlAria: object
oICrlBoxBorder: undefined
oICrlBoxMargin: undefined
oICrlBoxPadding: undefined
oICrlClasses: object
oICrlEventsNative: object
oICrlEventsNativeNo: object
oICrlSettings: object
sICrlId: "id105"
sICrlName: ""
sICrlText: ""
xICrlValue: false
===
pwpoICCButtoncnr.MEMBER:
> Object.getOwnPropertyNames((new tinymce.ui.ButtonGroup)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_fixed", "_hasBody", "_height", "_id", "_items", "_layout", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.ButtonGroup).__proto__).sort()
["Defaults", "renderHtml"]
Object.getOwnPropertyNames((new tinymce.ui.ButtonGroup).__proto__.__proto__).sort()
["add", "append", "create", "find", "focus", "fromJSON", "init", "initLayoutRect", "innerClass", "insert", "items", "layout", "postRender", "preRender", "prepend", "recalc", "reflow", "renderHtml", "renderNew", "replace", "toJSON"]
Object.getOwnPropertyNames((new tinymce.ui.ButtonGroup).__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "hasClass", "height", "hide", "init", "initLayoutRect", "innerHtml", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "value", "visible", "width"]

pwpoIccButtoncnr'html

name::
* McsEngl.pwpoIccButtoncnr'html@cptIt,

_HTML_ELEMENT:
2015-03-21:
> document.getElementById("id102")
<div id="id102" class="cls-container cls-last cls-flow-layout-item clsCnrButton" aria-sicrlrole="toolbar"><div id="id102-body"><div id="id80" class="cls-widget cls-btn cls-first" tabindex="-1" aria-sicrlrole="button" aria-labeledby="id80" aria-label="Insert/edit link"><button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-link"></i></button></div><div id="id81" class="cls-widget cls-btn" tabindex="-1" aria-sicrlrole="button" aria-labeledby="id81" aria-label="Insert/edit image"><button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-image"></i></button></div><div id="id82" class="cls-widget cls-btn" tabindex="-1" aria-sicrlrole="button" aria-labeledby="id82" aria-label="Preview"><button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-preview"></i></button></div><div id="id83" class="cls-widget cls-btn cls-last" tabindex="-1" aria-sicrlrole="button" aria-labeledby="id83" aria-label="Emoticons"><button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-emoticons"></i></button></div></div></div>
===
<div id="mce_76" class="cls-container cls-first cls-flow-layout-item cls-btngroup" role="toolbar">
<div id="mce_76-body">

<div id="mce_45" class="cls-widget cls-btn cls-first" tabindex="-1" role="button" aria-disabled="false">
<button role="presentation" type="button" tabindex="-1">
<i class="cls-ico cls-i-save"></i> Save</button>
</div>

<div id="mce_46" class="cls-widget cls-btn cls-disabled" tabindex="-1" role="button" aria-labeledby="mce_46" aria-label="Undo" aria-disabled="true"><button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-undo"></i></button></div>

<div id="mce_47" class="cls-widget cls-btn cls-last cls-disabled" tabindex="-1" role="button" aria-labeledby="mce_47" aria-label="Redo" aria-disabled="true"><button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-redo"></i></button></div></div></div>

pwpo2I.fICCFormcnrRo (ICCFmc)

name::
* McsEngl.pwpo2I.fICCFormcnrRo (ICCFmc)@cptIt,
* McsEngl.pwpfICCFormcnrRo@cptIt,
* McsEngl.pwpfICCFormcnrFtr@cptIt,
* McsEngl.oPgmHtml.oI.Control.Container.Form@cptIt,
* McsEngl.pwpfCCCForm@cptIt,
* McsEngl.pwpfICCForm@cptIt,
* McsEngl.pwpFormcnr@cptIt,
* McsEngl.phForm@cptIt,
* McsEngl.phFormcnr@cptIt,
* McsEngl.phIForm@cptIt,
* McsEngl.pwp'fCCCForm@cptIt,
* McsEngl.pwp'Form@cptIt,
* McsEngl.tinymce.ui.Form@cptIt,

* McsEngl.phIccfrm@cptIt,

pwpoICCFormcnr

name::
* McsEngl.pwpoICCFormcnr@cptIt,

_DESCRIPTION:
This function creates an-oICCFormcnr.
An-oICCFormcnr has the-ability to automatically wrap oICCFormitmcnr.
A-oICCFormitmcnr is a-container for a-label and an-item.

pwpoICCFormcnr'member

name::
* McsEngl.pwpoICCFormcnr'member@cptIt,

pwpoICCFormcnr.member:
> pwp.0-90v 2016-05-13 Object.getOwnPropertyNames(oPgmWpg.o2I.fICCFormcnrRo()).sort()
["pwpaICrlClasses", "pwpasICrlCfgTxt", "pwpbICCnrBody", "pwpbICCnrCfgFixed", "pwpbICrlCfgActive", "pwpbICrlCfgDisabled", "pwpbICrlCfgVisible", "pwpfICCFmcRecalcLabels", "pwpfICCnrRenderBeforeRo", "pwpfICCnrSubmit", "pwpfICrlRenderAfterRo", "pwpfICrlVisibleRbo", "pwpnICrlCfgHeight", "pwpnICrlCfgWidth", "pwpoICCnrAkcChld", "pwpoICCnrLaymgr", "pwpoICrlAria", "pwpoICrlBoxBorder", "pwpoICrlBoxMargin", "pwpoICrlBoxPadding", "pwpoICrlCfg", "pwpoICrlCfgDefaults", "pwpsICfgObjectof", "pwpsICrlCfgName", "pwpsICrlId", "pwpxICrlCfgValue"]
===
> Object.getOwnPropertyNames((new tinymce.ui.Form))
["_super", "settings", "_id", "_name", "_text", "_height", "_width", "_aria", "_classes", "_visible", "_title", "_disabled", "_active", "_value", "_bindings", "_nativeEvents", "_borderBox", "_paddingBox", "_marginBox", "_fixed", "_items", "_layout", "_hasBody"]
Object.getOwnPropertyNames((new tinymce.ui.Form).__proto__)
["Defaults", "preRender", "recalcLabels", "visible", "submit", "postRender"]

Object.getOwnPropertyNames((new tinymce.ui.Form).__proto__.__proto__)
["layout", "innerClass", "init", "items", "find", "add", "focus", "replace", "create", "renderNew", "append", "prepend", "insert", "fromJSON", "toJSON", "preRender", "renderHtml", "postRender", "initLayoutRect", "recalc", "reflow"]
Object.getOwnPropertyNames((new tinymce.ui.Form).__proto__.__proto__.__proto__)
["Statics", "classPrefix", "init", "Properties", "Methods", "getContainerElm", "getParentCtrl", "parseBox", "borderBox", "paddingBox", "marginBox", "measureBox", "initLayoutRect", "layoutRect", "repaint", "on", "off", "fire", "parents", "next", "prev", "findCommonAncestor", "hasClass", "addClass", "removeClass", "toggleClass", "classes", "innerHtml", "getEl", "visible", "show", "hide", "focus", "blur", "aria", "encode", "before", "after", "remove", "renderBefore", "renderTo", "postRender", "scrollIntoView", "bindPendingEvents", "reflow", "renderHtml", "parent", "title", "text", "width", "height", "disabled", "active", "name", "value"]

pwpoICCFormcnr'html-code

name::
* McsEngl.pwpoICCFormcnr'html-code@cptIt,

_CODE.HTML.PWP:
<div id="id166" class="clsContainer clsForm clsFirst clsLast clsLayoutAbsItem" role="undefined" style="left: 0px; top: 0px; width: 441px; height: 164px;">
<div id="id166-body" class="clsLayoutAbs" style="width: 441px; height: 164px;">

<div id="id178" class="clsContainer clsFirst clsLayoutAbsItem clsCnrFormitem" hidefocus="1" tabindex="-1" style="left: 20px; top: 20px; width: 401px; height: 30px;">
<div id="id178-body" class="clsLayoutAbs" style="width: 401px; height: 30px;">
<label id="id179" class="clsHover clsLabel clsFirst clsLayoutAbsItem" for="id167" style="line-height: 15px; left: 0px; top: 8px; width: 106px; height: 15px;">Find</label>
<input id="id167" class="clsTextbox clsLast clsLayoutAbsItem" value="" hidefocus="true" size="40" style="left: 106px; top: 0px; width: 287px; height: 30px;">
</div>
</div>

<div id="id180" class="clsContainer clsLayoutAbsItem clsCnrFormitem" hidefocus="1" tabindex="-1" style="left: 20px; top: 60px; width: 401px; height: 30px;"><div id="id180-body" class="clsLayoutAbs" style="width: 401px; height: 30px;"><label id="id181" class="clsHover clsLabel clsFirst clsLayoutAbsItem" for="id168" style="line-height: 15px; left: 0px; top: 8px; width: 106px; height: 15px;">Replace with</label><input id="id168" class="clsTextbox clsLast clsLayoutAbsItem" value="" hidefocus="true" size="40" style="left: 106px; top: 0px; width: 287px; height: 30px;"></div></div>

<div id="id182" class="clsContainer clsLayoutAbsItem clsCnrFormitem" hidefocus="1" tabindex="-1" style="left: 20px; top: 100px; width: 401px; height: 17px;"><div id="id182-body" class="clsLayoutAbs" style="width: 401px; height: 17px;"><label id="id183" class="clsHover clsLabel clsFirst clsLayoutAbsItem" for="id169" style="line-height: 0px; left: 0px; top: 9px; width: 106px; height: 0px;"> </label><div id="id169" class="clsCheckbox clsLast clsLayoutAbsItem" unselectable="on" aria-labeledby="id169-al" tabindex="-1" role="checkbox" aria-checked="false" style="left: 106px; top: 0px; width: 89px; height: 17px;"><i class="clsIco clsI-checkbox"></i><span id="id169-al" class="clsLabel">Match case</span></div></div></div>

<div id="id184" class="clsContainer clsLast clsLayoutAbsItem clsCnrFormitem" hidefocus="1" tabindex="-1" style="left: 20px; top: 127px; width: 401px; height: 17px;"><div id="id184-body" class="clsLayoutAbs" style="width: 401px; height: 17px;"><label id="id185" class="clsHover clsLabel clsFirst clsLayoutAbsItem" for="id170" style="line-height: 0px; left: 0px; top: 9px; width: 106px; height: 0px;"> </label><div id="id170" class="clsCheckbox clsLast clsLayoutAbsItem" unselectable="on" aria-labeledby="id170-al" tabindex="-1" role="checkbox" aria-checked="false" style="left: 106px; top: 0px; width: 99px; height: 17px;"><i class="clsIco clsI-checkbox"></i><span id="id170-al" class="clsLabel">Whole words</span></div></div></div>

</div></div>

pwpo2I.fICCFFieldsetcnrRo (ICCFFsc)

name::
* McsEngl.pwpo2I.fICCFFieldsetcnrRo (ICCFFsc)@cptIt,
* McsEngl.pwpfICCFFieldsetcnrRo@cptIt,
* McsEngl.pwpfICCFFieldsetcnrFtr@cptIt,
* McsEngl.oPgmHtml.oI.Control.Container.Form.FieldSet@cptIt,
* McsEngl.phFieldset@cptIt,
* McsEngl.phFieldsetcnr@cptIt,
* McsEngl.phIFieldset@cptIt,
* McsEngl.pwpfCCFFieldset@cptIt,
* McsEngl.pwp'fCCCFormFieldset@cptIt,
* McsEngl.pwp'FieldSet@cptIt,
* McsEngl.tinymce.ui.FieldSet@cptIt,
* McsEngl.pwpguiFieldset@cptIt,

* McsEngl.phIccffst@cptIt,

pwpoICCFFieldsetcnr

_DESCRIPTION:
Draws a-box around related form-oElts.

pwpoICCFFieldsetcnr.MEMBER:
> pwp.0-90v 2016-05-13 Object.getOwnPropertyNames(oPgmWpg.o2I.fICCFFieldsetcnrRo()).sort()
["aICrlClasses", "asICrlCfgTxt", "bICCnrBody", "bICCnrCfgFixed", "bICrlCfgActive", "bICrlCfgDisabled", "bICrlCfgVisible", "fICrlToHmlRs", "nICrlCfgHeight", "nICrlCfgWidth", "oICCnrAkcChld", "oICCnrLaymgr", "oICrlAria", "oICrlBoxBorder", "oICrlBoxMargin", "oICrlBoxPadding", "oICrlCfg", "oICrlCfgDefaults", "sICfgObjectof", "sICrlCfgName", "sICrlId", "xICrlCfgValue"]
> Object.getOwnPropertyNames((new tinymce.ui.FieldSet)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_fixed", "_hasBody", "_height", "_id", "_items", "_layout", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.FieldSet).__proto__).sort()
["Defaults", "renderHtml"]
Object.getOwnPropertyNames((new tinymce.ui.FieldSet).__proto__.__proto__).sort()
["Defaults", "postRender", "preRender", "recalcLabels", "submit", "visible"]
Object.getOwnPropertyNames((new tinymce.ui.FieldSet).__proto__.__proto__.__proto__).sort()
["add", "append", "create", "find", "focus", "fromJSON", "init", "initLayoutRect", "innerClass", "insert", "items", "layout", "postRender", "preRender", "prepend", "recalc", "reflow", "renderHtml", "renderNew", "replace", "toJSON"]
Object.getOwnPropertyNames((new tinymce.ui.FieldSet).__proto__.__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "hasClass", "height", "hide", "init", "initLayoutRect", "innerHtml", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "value", "visible", "width"]

pwpo2I.fICCFormitmcnrRo (ICCFic)

name::
* McsEngl.pwpo2I.fICCFormitmcnrRo (ICCFic)@cptIt,
* McsEngl.pwpfICCFormitmcnrRo@cptIt,
* McsEngl.fICCFormitmcnrFtr@cptIt,
* McsEngl.fICCFormitemcnrFtr@cptIt,
* McsEngl.oPgmHtml.oI.Control.Container.FormItem@cptIt,
* McsEngl.pwpFormitemcnr@cptIt,
* McsEngl.phFormitem@cptIt,
* McsEngl.phFormitemcontainer@cptIt,
* McsEngl.pwpfCCCFormitem@cptIt,
* McsEngl.pwpfICCFormitem@cptIt,
* McsEngl.pwp'fCCCFormitem@cptIt,
* McsEngl.pwp'FormItem@cptIt,
* McsEngl.tinymce.ui.FormItem@cptIt,

* McsEngl.phIccfim@cptIt,

pwpoCCFormitemcnr

name::
* McsEngl.pwpoCCFormitemcnr@cptIt,

_DEFINITION:
A-container with a-label and a-gui (listbox, textbox, filepicker).
[hmnSngo.2015-06-13]

pwpoCCCFormitemcnr.MEMBER:
_fProto: undefined
bICrlActive: false
bICrlDisabled: false
bICrlVisible: true
bIcCnrBody: true
bIcCnrFixed: undefined
nICrlHeight: 0
nICrlWidth: 0
oICrlAria: Object
oICrlBoxBorder: undefined
oICrlBoxMargin: undefined
oICrlBoxPadding: undefined
oICrlClasses: Objectbody: Array[1]control: Array[1]__proto__: Object
oICrlEventsNative: Object
oICrlEventsNativeNo: Object
oICrlSettings: Object
oIcCnrCollection: oI.fICollection
oIcCnrLayout: oI.fILAFlex
sICrlId: "id105"
sICrlName: ""
sICrlText: ""
type: "fCCCFormitem"
xICrlValue: false

__proto__: Object
fICrlToSHtml: (){
oICrlSettingsDefaults: Object

__proto__: Object
fICrlFocus: (){
fICrlLayrectInit: (){
fICrlReflow: (){
fICrlRenderAfter: (){
fICrlToSHtml: (){
fIcCnrAdd: (xItemsIn) {
fIcCnrAppend: (xItems) {
fIcCnrClnofcontrols: () {
fIcCnrCreate: (aItemsIn) {
fIcCnrFindcln: (sCssselectorIn) {
fIcCnrFromOJSON: (oJsonIn) {
fIcCnrInsert: (xItems, nIndexIn, bBeforeIn) {
fIcCnrPrepend: (xItemsIn) {
fIcCnrRecalc: () {
fIcCnrRenderBefore: () {
fIcCnrRenderNew: () {
fIcCnrReplace: (oIControlOldIn, oIControlNewIn) {
fIcCnrToOJSON: () {
init: (){
sICrlLayout: "filayout"

__proto__: Object
fICrlActive: (bActiveIn) {
fICrlAddAfter: (aoItemsIn) {
fICrlAddBefore: (aoItemsIn) {
fICrlAppendToElt: (oHTMLElement) {
fICrlAria: (sAriaGncIn, sAriaSpcIn) {
fICrlBClass: (sClsValueIn, sGroupIn) {
fICrlBindEventsPending: () {
fICrlBlur: () {
fICrlBoxBorder: () {
fICrlBoxMargin: () {
fICrlBoxMeasure: (oHeltIn, sPrefixIn) {
fICrlBoxPadding: () {
fICrlBoxParse: (nsBoxIn) {
fICrlClassAdd: (sClsValueIn, sGroupIn) {
fICrlClassRemove: (sClsValueIn, sGroupIn) {
fICrlClassToggle: (sClsValueIn, bAddIn, sGroupIn) {
fICrlClasses: (sGroupIn) {
fICrlClnParents: (sCssselectorIn) {
fICrlDisabled: (bDisabled) {
fICrlEltBody: () {
fICrlEltGet: (sIdsuffixIn, bDropCacheIn) {
fICrlEncode: (sTextIn, bTranslateIn) {
fICrlEvtfunctionAdd: (sEvtnamesIn, fsEvtfunctionIn) {
fICrlEvtfunctionCall: (sEvtnameIn, oEvtCrlArgsIn, bBubbleIn) {
fICrlEvtfunctionRemove: (sEvtnamesIn, callback) {
fICrlFindAncestorCommon: (oIControl1, oIControl2) {
fICrlFocus: () {
fICrlFromHTMLElement: (oHTMLElementIn) {
fICrlHide: () {
fICrlHtmlInner: (sHtmlIn) {
fICrlLayrect: (oICrlLayrectIn) {
fICrlLayrectInit: () {
fICrlName: (sName) {
fICrlNext: () {
fICrlParent: (oICrlParentIn) {
fICrlPrev: () {
fICrlReflow: () {
fICrlRemove: () {
fICrlRenderAfter: () {
fICrlRenderBefore: (oHTMLElementIn) {
fICrlRepaint: () {
fICrlScrollIntoview: (sAlignIn) {
fICrlShow: () {
fICrlText: (sICrlTextIn) {
fICrlToSHtml: () {
fICrlValue: (
xICrlValueIn) {
init: (oICrlSettingsIn) {
visible: (bVisible) {__proto__: oUtil.fUClass

pwpoICCFormitem.MEMBER:
> 2015-03-07
Object.getOwnPropertyNames(new oPgmHtml.oI.fCCCFormitem()).sort()["_fProto", "aIcrlClasses", "bIccnrBody", "bIccnrFixed", "bIcrlActive", "bIcrlDisabled", "bIcrlVisible", "nIcrlHeight", "nIcrlWidth", "oIccnrCollection", "oIccnrLayout", "oIcrlAria", "oIcrlBindings", "oIcrlBoxBorder", "oIcrlBoxMargin", "oIcrlBoxPadding", "oIcrlEventsNative", "oIcrlSettings", "sIcrlId", "sIcrlName", "sIcrlText", "sIcrlValue"]Object.getOwnPropertyNames((new oPgmHtml.oI.fCCCFormitem()).__proto__).sort()["fIcrlToHtml", "oIcrlSettingsDefaults"]
===
_INSTANCE:
Object.getOwnPropertyNames((new tinymce.ui.FormItem)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_fixed", "_hasBody", "_height", "_id", "_items", "_layout", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.FormItem).__proto__).sort()
["Defaults", "renderHtml"]
> CONTAINER: Object.getOwnPropertyNames((new tinymce.ui.FormItem).__proto__.__proto__).sort()
["add", "append", "create", "find", "focus", "fromJSON", "init", "initLayoutRect", "innerClass", "insert", "items", "layout", "postRender", "preRender", "prepend", "recalc", "reflow", "renderHtml", "renderNew", "replace", "toJSON"]
Object.getOwnPropertyNames((new tinymce.ui.FormItem).__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "hasClass", "height", "hide", "init", "initLayoutRect", "innerHtml", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "value", "visible", "width"]

pwpoCCFormitemcnr'hml-code

name::
* McsEngl.pwpoCCFormitemcnr'hml-code@cptIt,

//A label-textbox container:
<div id="id138" class="clsContainer clsLayoutAbsItem clsFormitem" hidefocus="1" tabindex="-1" style="left: 20px; top: 59px; width: 410px; height: 30px;">
<div id="id138-body" class="clsLayoutAbs" style="width: 410px; height: 30px;">
<label id="id139" class="clsWidget clsLabel clsFirst clsLayoutAbsItem" for="id129" style="line-height: 15px; left: 0px; top: 8px; width: 115px; height: 15px;">Text to display</label>
<input id="id129" class="clsTextbox clsLast clsLayoutAbsItem" value="here" hidefocus="true" size="40" style="left: 115px; top: 0px; width: 287px; height: 30px;"></div></div>
===
//
<div id="id146" class="clsContainer clsLayoutAbsItem clsFormitem" hidefocus="1" tabindex="-1" style="left: 20px; top: 100px; width: 401px; height: 17px;">
<div id="id146-body" class="clsLayoutAbs" style="width: 401px; height: 17px;">
<label id="id147" class="clsHover clsLabel clsFirst clsLayoutAbsItem" for="id133" style="line-height: 0px; left: 0px; top: 9px; width: 106px; height: 0px;"> </label>
<div id="id133" class="clsCheckbox clsLast clsLayoutAbsItem" unselectable="on" aria-labeledby="id133-al" tabindex="-1" role="checkbox" aria-checked="false" style="left: 106px; top: 0px; width: 89px; height: 17px;">
<i class="clsIco clsI-checkbox"></i>
<span id="id133-al" class="clsLabel">Match case</span>
</div></div></div>

pwpo2I.fICCPanelcnrRo (ICCPlc)

name::
* McsEngl.pwpo2I.fICCPanelcnrRo (ICCPlc)@cptIt,
* McsEngl.pwpfICCPanelcnrRo@cptIt,
* McsEngl.pwpICCPlc@cptIt,
* McsEngl.pwpfICCPanelcnrRo@cptIt,
=== _OLD:
* McsEngl.pwpfICCPanelcnrFtr@old,
* McsEngl.oPgmHtml.oI.Control.Container.Panel@old,
* McsEngl.oICCPanel@old,
* McsEngl.pwpfICCPanel@old,
* McsEngl.pwpPanelcnr@old,
* McsEngl.pwp'Panel@old,
* McsEngl.phPanelcontainer@old,
* McsEngl.phIccpnl@old,

pwpoICCPanelcnr

name::
* McsEngl.pwpoICCPanelcnr@cptIt,

_DESCRIPTION:
General container like
- guiPlcPgmWpg
- guiPlcBarTools
- guiPlcBarContent
- statusbar

pwpoICCPanelcnr'member

name::
* McsEngl.pwpoICCPanelcnr'member@cptIt,

pwpoICCPanel.member:
//media-plugin, second tab
_fGeneric: undefined
aICrlClasses: Array[0]
bICrlActive: false
bICrlDisabled: false
bICrlRendered: true
bICrlVisible: true
bIcCnrBody: true
bIcCnrFixed: undefined
nICrlHeight: 0
nICrlWidth: 0
oICrlAria: Object
oICrlBoxBorder: Object
oICrlBoxMargin: Object
oICrlBoxPadding: Object
oICrlEventsNative: Object
oICrlEvtstore: Object
oICrlLayrect: Object
oICrlLayrectLast: Object
oICrlLayrectRepaintLast: Object
oICrlParent: fSpecific
oICrlSettings: Object
oIcCnrCollection: oI.fICollection
oIcCnrLayout: fILAFlex
oIccpfltEventsRoot: fSpecific
sICrlId: "id141"
sICrlName: ""
sICrlType: "fCCCPanelcnr"
saICrlText: ""
xICrlValue: false
__proto__: fSpecific
===
//statusbar panel
_fProto: undefined
aICrlClasses: Array[0]
bICrlActive: false
bICrlDisabled: false
bICrlRendered: true
bICrlVisible: true
bIcCnrBody: true
bIcCnrFixed: undefined
nICrlHeight: 0
nICrlWidth: 0
oICrlAria: Object
oICrlBoxBorder: Object
oICrlBoxMargin: Object
oICrlBoxPadding: Object
oICrlEventsNative: Object
oICrlEvtstore: Object
oICrlLayrect: Object
oICrlLayrectLast: null
oICrlParent: fSpecific
oICrlSettings: Object
oIcCnrCollection: oI.fICollection
oIcCnrLayout: oI.fILFlow
oIccpfltEventsRoot: fSpecific
sICrlId: "id101"
sICrlName: "guiBarStatus"s
aICrlText: ""type: "fCCCPanel"
xICrlValue: false
__proto__: Object
===
> 2015-03-01:
Object.getOwnPropertyNames(new oPgmHtml.oI.fCCCPanel).sort()
["_fProto", "aIcrlClasses", "bIcrlActive", "bIcrlBody", "bIcrlDisabled", "bIcrlFixed", "bIcrlVisible", "nIcrlHeight", "nIcrlWidth", "oILayout", "oIccnrCollection", "oIcrlAria", "oIcrlBindings", "oIcrlBoxBorder", "oIcrlBoxMargin", "oIcrlBoxPadding", "oIcrlEventsNative", "oIcrlSettings", "sIcrlId", "sIcrlName", "sIcrlText", "sIcrlValue"]
> Object.getOwnPropertyNames((new oPgmHtml.oI.fCCCPanel).__proto__).sort()
["fIcrlToHtml", "fIslRenderScroll", "oIcrlSettingsDefaults"]
===
_PROPERTY:
> Object.getOwnPropertyNames(tinymce.ui.Panel).sort()
["arguments", "caller", "constructor", "extend", "length", "name", "prototype"]
> typeof tinymce.ui.Panel.prototype
"object"
> tinymce.ui.Panel.prototype
Class {Defaults: Object, Mixins: Array[1], renderHtml: function, renderScroll: function, layout: ""…}
> Object.getOwnPropertyNames(tinymce.ui.Panel.prototype).sort()
["Defaults", "Mixins", "renderHtml", "renderScroll"]
===
pwp'oCCCPanel:
> Object.getOwnPropertyNames((new tinymce.ui.Panel)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_fixed", "_hasBody", "_height", "_id", "_items", "_layout", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.Panel).__proto__).sort()
["Defaults", "Mixins", "renderHtml", "renderScroll"]
Object.getOwnPropertyNames((new tinymce.ui.Panel).__proto__.__proto__).sort()
["add", "append", "create", "find", "focus", "fromJSON", "init", "initLayoutRect", "innerClass", "insert", "items", "layout", "postRender", "preRender", "prepend", "recalc", "reflow", "renderHtml", "renderNew", "replace", "toJSON"]
Object.getOwnPropertyNames((new tinymce.ui.Panel).__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "hasClass", "height", "hide", "init", "initLayoutRect", "innerHtml", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "value", "visible", "width"]

pwpoICCPanelcnr.oICrlCfg

name::
* McsEngl.pwpoICCPanelcnr.oICrlCfg@cptIt,

pwpoICCPanel.settings:
//media plugin
{
sICrlType: 'fCCCPanelcnr',
sICrlTitle: 'Embed',
sICrlLayout: 'fILAFlex',
sICrlDelimiter: 'column',
sICrlAlign: 'stretch',
nsICrlPadding: 10,
nICrlSpacing: 10,
onShowTab: function() {..},
aICrlItems: [
{
sICrlType: 'fICHLabel',
saICrlText: 'Paste your embed code below:'
},
{
sICrlType: 'fICHTextbox',
nICrlFlex: 1,
sICrlName: 'guiTbxMediaEmbed',
xICrlValue: getSource(),
bICrlMultiline: true,
sICrlLabel: 'Source'
}
]
}

pwpoICCPanelcnr'hml-code

name::
* McsEngl.pwpoICCPanelcnr'hml-code@cptIt,

_CODE.HTML.PWP:
//Media plugin, second tab
<div id="id141" class="clsContainer clsCnrPanel clsLast clsLayoutAbsItem" hidefocus="1" tabindex="-1" style="left: 0px; top: 0px; width: 462px; height: 187px;">
<div id="id141-body" class="clsLayoutAbs" style="width: 462px; height: 187px;">
<label id="id142" class="clsHover clsLabel clsFirst clsLayoutAbsItem" style="line-height: 15px; left: 10px; top: 10px; width: 183px; height: 15px;">Paste your embed code below:</label>
<textarea id="id143" class="clsTextbox clsMultiline clsLast clsLayoutAbsItem" hidefocus="true" style="left: 10px; top: 35px; width: 175px; height: 30px;"></textarea>
</div>
</div>

pwpo2I.fICCPFloatcnrRo (ICCPFtc)

name::
* McsEngl.pwpo2I.fICCPFloatcnrRo (ICCPFtc)@cptIt,
* McsEngl.pwpfICCPFloatcnrRo@cptIt,
* McsEngl.pwpICCPFtc@cptIt,
=== OLD
* McsEngl.oPgmHtml.oI.Control.Container.Panel.Float@cptIt,
* McsEngl.phFloatcontainer@cptIt,
* McsEngl.phFloatpanel@cptIt,
* McsEngl.pwpfCCCPFloat@cptIt,
* McsEngl.pwpfICCPFloat@cptIt,
* McsEngl.pwp'FloatPanel@cptIt,
* McsEngl.tinymce.ui.FloatPanel@cptIt,
* McsEngl.phIccpflt@cptIt,

pwpoICCPFloatcnr

name::
* McsEngl.pwpoICCPFloatcnr@cptIt,

_DESCRIPTION:
oICCPFloatcnr is member of oICHBPanelbtn.

_GENERIC:
* oICCPanelcnr

pwpoICCPFloatcnr.SPECIFIC:
pwp'FloatPanel.Menu
pwp'FloatPanel.Window

pwpoICCPFloatcnr.MEMBER:
> pwp.0.90 {2016-05-14} Object.getOwnPropertyNames(oPgmWpg.o2I.fICCPFloatcnrRo()).sort()
["aICrlClasses", "asICrlCfgTxt", "bICCnrBody", "bICCnrCfgFixed", "bICrlCfgActive", "bICrlCfgDisabled", "bICrlCfgVisible", "fICCPFltClose", "fICCPFltFixed", "fICCPFltHideAll", "fICrlHide", "fICrlInit", "fICrlRemoveRo", "fICrlShowRo", "fIMvlMovePosRelRo", "fIMvlMoveToAbsRo", "fIMvlMoveToRltRo", "fIMvlTestPosRelRs", "fIRszResizePosAbsRo", "fIRszResizePosRltvRo", "nICrlCfgHeight", "nICrlCfgWidth", "oICCnrAkcChld", "oICCnrLaymgr", "oICrlAria", "oICrlBoxBorder", "oICrlBoxMargin", "oICrlBoxPadding", "oICrlCfg", "oICrlEventsRoot", "sICfgObjectof", "sICrlCfgName", "sICrlId", "xICrlCfgValue"]
===
> 2015-03-01
Object.getOwnPropertyNames(new oPgmHtml.oI.fCCCPFloat).sort()
["_fProto", "aIcrlClasses", "bIcrlActive", "bIcrlBody", "bIcrlDisabled", "bIcrlFixed", "bIcrlVisible", "nIcrlHeight", "nIcrlWidth", "oILayout", "oIccnrCollection", "oIcrlAria", "oIcrlBindings", "oIcrlBoxBorder", "oIcrlBoxMargin", "oIcrlBoxPadding", "oIcrlEventsNative", "oIcrlEventsRoot", "oIcrlSettings", "sIcrlId", "sIcrlName", "sIcrlText", "sIcrlValue"]
> Object.getOwnPropertyNames((new oPgmHtml.oI.fCCCPFloat).__proto__).sort()
["close", "fIcrlHide", "fIcrlRemove", "fIcrlShow", "fImvMoveRltv", "fImvTestRltv", "fIrsResizeBy", "fIrsResizeTo", "fIrsResizeToContent", "fixed", "hideAll", "init", "moveBy", "moveTo"]
===
> Object.getOwnPropertyNames(tinymce.ui.FloatPanel).sort()
["arguments", "caller", "constructor", "extend", "hideAll", "length", "name", "prototype"]
===
_PROTOTYPE:
> typeof tinymce.ui.FloatPanel.prototype
"object"
> tinymce.ui.FloatPanel.prototype
Class {Mixins: Array[3], init: function, fixed: function, show: function, hide: function…}
> Object.getOwnPropertyNames(tinymce.ui.FloatPanel.prototype).sort()
["Mixins", "close", "fixed", "hide", "hideAll", "init", "moveBy", "moveRel", "moveTo", "remove", "resizeBy", "resizeTo", "resizeToContent", "show", "testMoveRel"]
===
_INSTANCE:
> Object.getOwnPropertyNames((new tinymce.ui.FloatPanel)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_eventsRoot", "_fixed", "_hasBody", "_height", "_id", "_items", "_layout", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "settings"]
> Object.getOwnPropertyNames((new tinymce.ui.FloatPanel).__proto__).sort()
["Mixins", "close", "fixed", "hide", "hideAll", "init", "moveBy", "moveRel", "moveTo", "remove", "resizeBy", "resizeTo", "resizeToContent", "show", "testMoveRel"]
> PANEL: Object.getOwnPropertyNames((new tinymce.ui.FloatPanel).__proto__.__proto__).sort()
["Defaults", "Mixins", "renderHtml", "renderScroll"]
> CONTAINER: Object.getOwnPropertyNames((new tinymce.ui.FloatPanel).__proto__.__proto__.__proto__).sort()
["add", "append", "create", "find", "focus", "fromJSON", "init", "initLayoutRect", "innerClass", "insert", "items", "layout", "postRender", "preRender", "prepend", "recalc", "reflow", "renderHtml", "renderNew", "replace", "toJSON"]
> CONTROL: Object.getOwnPropertyNames((new tinymce.ui.FloatPanel).__proto__.__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "hasClass", "height", "hide", "init", "initLayoutRect", "innerHtml", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "value", "visible", "width"]

pwp'oCCCPanelFloat.settings:
(new tinymce.oUi.fCCCPanelFloat).settings
Object {layout: "fclabsolutefit", sClsContainer: "panel"}

pwpo2I.fICCPFMenucnrRo (ICCPFMnc)

name::
* McsEngl.pwpo2I.fICCPFMenucnrRo (ICCPFMnc)@cptIt,
* McsEngl.pwpfICCPFMenucnrRo@cptIt,
* McsEngl.pwpICCPFMnc@cptIt,
=== _OLD:
* McsEngl.fICCPFMenucnrFtr@old,
* McsEngl.oPgmHtml.oI.Control.Container.Panel.Float.Menu@old,
* McsEngl.pwpfCCCPFMenu@old,
* McsEngl.pwpfICCPFMenu@old,
* McsEngl.pwpfICnrMenu@old,
* McsEngl.pwpMenucnr@old,
* McsEngl.phMenu@old,
* McsEngl.phMenucontainer@old,
* McsEngl.pwp'fCCCPanelFloatMenu@old,
* McsEngl.pwp'Menu@old,
* McsEngl.tinymce.ui.Menu@old,
* McsEngl.pwpIccpfMnc@old, {2015-06-28}
* McsEngl.phIccpfmen@old,

pwpoICCPFMenucnr

name::
* McsEngl.pwpoICCPFMenucnr@cptIt,

_DEFINITION:
- contextmenu
- FmtGncGroup

pwpoICCPFMenucnr'member

name::
* McsEngl.pwpoICCPFMenucnr'member@cptIt,

pwpoICCPFMenucnr.member:
> pwp.0.90v 2016-05-15 Object.getOwnPropertyNames(oPgmWpg.o2I.fICCPFMenucnrRo()).sort()
["pwpaICrlClasses", "pwpasICrlCfgTxt", "pwpbICCnrBody", "pwpbICCnrCfgFixed", "pwpbICrlCfgActive", "pwpbICrlCfgDisabled", "pwpbICrlCfgVisible", "pwpcancel", "pwpfICCPFtcHideAll", "pwpfICCnrRenderBeforeRo", "pwpfICrlInit", "pwpfICrlRepaint", "pwpnICrlCfgHeight", "pwpnICrlCfgWidth", "pwpoICCnrAkcChld", "pwpoICCnrLaymgr", "pwpoICrlAria", "pwpoICrlBoxBorder", "pwpoICrlBoxMargin", "pwpoICrlBoxPadding", "pwpoICrlCfg", "pwpoICrlCfgDefaults", "pwpoICrlEventsRoot", "pwpoIKbdnvn", "pwpsICfgObjectof", "pwpsICrlCfgName", "pwpsICrlId", "pwpxICrlCfgValue"]
===
//2015-11-05
* _fGeneric: undefined
* aICrlClasses: Array[0]
.body [clsLayoutStack]
.control [0: "clsContainer"
1: "clsCnrFloatpanel"
2: "clsCnrMenu"
3: "clsMenu-has-icons"
4: "clsMenuAlign"]
* bICrlActive: false
* bICrlDisabled: false
* bICrlHasMouseenter: true
* bICrlRendered: true
* bICrlVisible: true
* bIcCnrBody: true
* bIcCnrFixed: undefined
* bIccpfMncHasIcons: true
* click: true
* focusin: true
* keydown: true
* nICrlHeight: 0
* nICrlWidth: 0
* oIControlHoverLast: null
* oICrlAria: Object
* oICrlBoxBorder: Object
* oICrlBoxMargin: Object
* oICrlBoxPadding: Object
* oICrlEventsNative: Object
* oICrlEvtstore: Object {click: Array[1]
close: Array[1]
focusin: Array[1]
hide: Array[1]
keydown: Array[1]
postrender: Array[1]
show: Array[2]}
* oICrlLayrect: Object
* oICrlLayrectLast: Object
* oICrlLayrectRepaintLast: Object
* oICrlSettings: Object {aICrlItems: Array[9]
0: Object {onclick: fShowDialog() sICrlIcon: "charmap" sICrlMenubaritem: "oMenuInsert" sICrlSct: "" saICrlText: "Special character"}
bICrlAutohide: true
bICrlConstrain_to_viewport: true
nsICrlBorder: 1
sICrlLayout: "fILFStack"
sICrlMenubaritem: "contextmenu"
sICrlRole: "roleMenu"
sICrlTypeDefault: "fICHMenuitem"}
* oIKeyboardnavigation: oI.fIKeyboardnavigation
* oIcCnrControlset: oI.fIControlset [0: fICHMenuitem, 1: fICHMenuitem]
* oIcCnrLayout: fILFStack
* oIccpfltEventsRoot: fSpecific
* sICrlId: "id78"
* sICrlName: ""
* saICrlText: ""
* xICrlValue: false
* zIndex: 65535
* __proto__: fSpecific
===
> 2015-03-01
Object.getOwnPropertyNames(new oPgmHtml.oI.fCCCPFMenu).sort()
["_fProto", "aIcrlClasses", "bIcrlActive", "bIcrlBody", "bIcrlDisabled", "bIcrlFixed", "bIcrlVisible", "nIcrlHeight", "nIcrlWidth", "oILayout", "oINavKeyboard", "oIccnrCollection", "oIcrlAria", "oIcrlBindings", "oIcrlBoxBorder", "oIcrlBoxMargin", "oIcrlBoxPadding", "oIcrlEventsNative", "oIcrlEventsRoot", "oIcrlSettings", "sIcrlId", "sIcrlName", "sIcrlText", "sIcrlValue"]
> Object.getOwnPropertyNames((new oPgmHtml.oI.fCCCPFMenu).__proto__).sort()
["cancel", "fIccnrRenderBefore", "fIcrlRepaint", "hideAll", "init", "oIcrlSettingsDefaults"]
===
> Object.getOwnPropertyNames((new tinymce.ui.Menu)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_eventsRoot", "_fixed", "_hasBody", "_height", "_id", "_items", "_layout", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "keyNav", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.Menu).__proto__).sort()
["Defaults", "cancel", "hideAll", "init", "preRender", "repaint"]
Object.getOwnPropertyNames((new tinymce.ui.Menu).__proto__.__proto__).sort()
["Mixins", "close", "fixed", "hide", "hideAll", "init", "moveBy", "moveRel", "moveTo", "remove", "resizeBy", "resizeTo", "resizeToContent", "show", "testMoveRel"]
Object.getOwnPropertyNames((new tinymce.ui.Menu).__proto__.__proto__.__proto__).sort()
["Defaults", "Mixins", "renderHtml", "renderScroll"]
Object.getOwnPropertyNames((new tinymce.ui.Menu).__proto__.__proto__.__proto__.__proto__).sort()
["add", "append", "create", "find", "focus", "fromJSON", "init", "initLayoutRect", "innerClass", "insert", "items", "layout", "postRender", "preRender", "prepend", "recalc", "reflow", "renderHtml", "renderNew", "replace", "toJSON"]
Object.getOwnPropertyNames((new tinymce.ui.Menu).__proto__.__proto__.__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "hasClass", "height", "hide", "init", "initLayoutRect", "innerHtml", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "value", "visible", "width"]

pwpoICCPFMenucnr.oICrlCfg

name::
* McsEngl.pwpoICCPFMenucnr.oICrlCfg@cptIt,

pwpoICCPFMenucnr.oICrlCfg:
{
aICrlItems: aItems,
sICrlMenubaritem: 'contextmenu'
}
===
autohide: true
border: 1
constrainToViewport: true
defaultType: "fccwmenuitem"
layout: "fclstack"
role: "menu"
sClsContainer: "panel"

pwpoICCPFMenucnr'hml-code

name::
* McsEngl.pwpoICCPFMenucnr'hml-code@cptIt,

<div id="id110" class="clsContainer clsCnrFloatpanel clsMenu clsMenu-has-icons clsMenuAlign" hidefocus="1" tabindex="-1" role="roleMenu" style="border-width: 1px; z-index: 65535; left: 287px; top: 263.091px; width: 160px;"><div id="id110-body" class="clsLayoutStack" style="width: 160px;"><div id="id111" class="clsMenuitem clsMenuitemNormal clsFirst clsLayoutStackItem" tabindex="-1" role="menuitem"><i class="clsIco clsI-charmap"></i> <span id="id111-text" class="clsText">Special character</span></div><div id="id112" class="clsMenuitem clsMenuitemNormal clsLayoutStackItem" tabindex="-1" role="menuitem"><i class="clsIco clsI-link"></i> <span id="id112-text" class="clsText">Insert link</span></div><div id="id113" class="clsMenuitem clsMenuitemNormal clsLayoutStackItem" tabindex="-1" role="menuitem"><i class="clsIco clsI-image"></i> <span id="id113-text" class="clsText">Insert image</span></div><div id="id114" class="clsMenuitem clsMenuitemExpand clsMenuitemNormal clsLayoutStackItem" tabindex="-1" role="menuitem" aria-haspopup="true"><i class="clsIco clsI-table"></i> <span id="id114-text" class="clsText">Insert table</span><div class="clsCaret"></div></div><div id="id115" class="clsMenuitem clsMenuitemSep clsMenuitemNormal clsLayoutStackItem" tabindex="-1" role="separator"></div><div id="id116" class="clsMenuitem clsMenuitemExpand clsMenuitemNormal clsLayoutStackItem" tabindex="-1" role="menuitem" aria-haspopup="true"><i class="clsIco clsI-selected"></i> <span id="id116-text" class="clsText">Cell</span><div class="clsCaret"></div></div><div id="id117" class="clsMenuitem clsMenuitemExpand clsMenuitemNormal clsLayoutStackItem" tabindex="-1" role="menuitem" aria-haspopup="true"><i class="clsIco clsI-selected"></i> <span id="id117-text" class="clsText">Row</span><div class="clsCaret"></div></div><div id="id118" class="clsMenuitem clsMenuitemExpand clsMenuitemNormal clsLayoutStackItem" tabindex="-1" role="menuitem" aria-haspopup="true"><i class="clsIco clsI-selected"></i> <span id="id118-text" class="clsText">Column</span><div class="clsCaret"></div></div><div id="id119" class="clsMenuitem clsMenuitemNormal clsLast clsLayoutStackItem clsDisabled" tabindex="-1" role="menuitem" aria-disabled="true"><i class="clsIco clsI-selected"></i> <span id="id119-text" class="clsText">Delete table</span></div></div></div>

pwpo2I.fICCPFWincnrRo (ICCPFWnc)

name::
* McsEngl.pwpo2I.fICCPFWincnrRo (ICCPFWnc)@cptIt,
* McsEngl.pwpfICCPFWincnrRo@cptIt,
* McsEngl.pwpICCPFWnc@cptIt,

* McsEngl.pwpfICCPFWincnrFrt@cptIt,
* McsEngl.oPgmHtml.oI.Control.Container.Panel.Float.Window@cptIt,
* McsEngl.pwpfCCCPFWindow@cptIt,
* McsEngl.pwpoCCCPFWindow@cptIt,
* McsEngl.pwpfICCPFWindow@cptIt,
* McsEngl.phICnrWindow@cptIt,
* McsEngl.phWindow@cptIt,
* McsEngl.phWindowcontainer@cptIt,
* McsEngl.pwp'fCCCPanelFloatWindow@cptIt,
* McsEngl.pwp'Window@cptIt,
* McsEngl.tinymce.ui.Window@cptIt,
* McsEngl.phIccpfWin@cptIt, {2015-03-22}
* McsEngl.phIccpfwin@cptIt,

pwpoICCPFWincnr

name::
* McsEngl.pwpoICCPFWincnr@cptIt,

_DESCRIPTION:
- Find-replace window

pwpoICCPFWincnr'problem

name::
* McsEngl.pwpoICCPFWincnr'problem@cptIt,

2015-11-06:
//on oICCPFWindowcnr
oICrlBoxMargin: undefined
oICrlBoxPadding: undefined

pwpoICCPFWincnr'member

name::
* McsEngl.pwpoICCPFWincnr'member@cptIt,

pwpoICCPFWincnr.MEMBER:
//
===
//search win
* _fGeneric: undefined
* aICrlClasses: Array[0]
.body [clsLayoutAbs]
.control [clsContainer, "clsCnrPanel", "clsCnrFloatpanel", "clsCnrWindow", "clsIn"]
* bICnrWinFullscreen: false
* bICrlActive: false
* bICrlDisabled: false
* bICrlHasMouseenter: true
* bICrlRendered: true
* bICrlVisible: true
* bIcCnrBody: true
* bIcCnrFixed: true (undefined)
* click: true
* focusin: true
* keydown: true
* nICrlHeight: 0
* nICrlWidth: 0
* oIControlHoverLast: null
* oICrlAria: Object {label: "Find and replace", sICrlRole: "dialog"}
* oICrlBoxBorder: Object {bottom: 1, left: 1, right: 1, top: 1}
* oICrlBoxMargin: Object {bottom: 0, left: 0, right: 0, top: 0}(undefined)
* oICrlBoxPadding: Object {bottom: 0, left: 0, right: 0, top: 0}(undefined)
* oICrlEventsNative: Object {click: false, focusin: false, keydown: false}
* oICrlEvtstore: Object {click: Array[2], close: Array[2], focusin: Array[1], hide: Array[1], keydown: Array[1], postrender: Array[1], show: Array[2], submit: Array[2]}
* oICrlLayrect: Object {
bICrlAutoresize: true
contentH: 164
contentW: 441
deltaH: 91
deltaW: 2
h: 255
headerH: 39
headerW: 193
innerH: 164
innerW: 441
maxH: 65535
maxW: 65535
minH: 255
minW: 443
scrollW: 0
startMinHeight: 0
startMinWidth: 0
w: 443
x: 66.5
y: 156.5}
* oICrlLayrectLast: Object {h: 255, w: 443, x: 66.5, y: 156.5}
* oICrlLayrectRepaintLast: Object {h: 255, innerH: 164, innerW: 441, w: 443, x: 66.5, y: 156.5}
* oICrlSettings: Object
{aICrlItems: Array[1]
aoICrlBtnsStatusbar: Array[6]
nsICrlBorder: 1
oICrlFEvtlisteners: Object
onclose: ()
onsubmit: (oEvtIn)
sICrlAlign: "center"
sICrlClsContainer: "clsCnrPanel"
sICrlLayout: "fILAFlex"
sICrlPack: "center"
sICrlRole: "dialog"
sICrlTitle: "Find and replace"
sICrlType: "fCCCPFWindowcnr"}
{nsICrlBorder: 1
oICrlFEvtlisteners: Object
sICrlClsContainer: "clsCnrPanel"
sICrlLayout: "fILAFlex"
sICrlRole: "dialog"}
aoICrlBtnsStatusbar: Array[6]
nsICrlBorder: 1
oICrlFEvtlisteners: Object
onclose: ()
onsubmit: (oEvtIn)
sICrlAlign: "center"
sICrlClsContainer: "clsCnrPanel"
sICrlLayout: "fILAFlex"
sICrlPack: "center"
sICrlRole: "dialog"
sICrlTitle: "Find and replace"
sICrlType: "fCCCPFWindowcnr"}

* oIHelperDrag: oI.fIDragdrop {fIDdpDestroy: ()}
* oIKeyboardnavigation: oI.fIKeyboardnavigation {fIKnnCancel: (), fIKnnFocusFirst: (), fIKnnFocusMove: (nInDir)}
* oIcCnrCollection: oI.fICollection {0: fICCFormcnr{oIcCnrCollection: oI.fICollection
0: fICCFormitemcnr
1: fICCFormitemcnr
2: fICCFormitemcnr
3: fICCFormitemcnr}}
* oIcCnrLayout: fILAFlex {sICrlType: "fILAFlex"}
* oIccpfWinStatusbar: fSpecific {0: "clsContainer", 1: "clsCnrPanel",2: "clsFoot"}
* oIccpfltEventsRoot: fSpecific {id135}
* sICrlId: "id135"
* sICrlName: ""
* sICrlType: "fCCCPFWindowcnr"
* saICrlText: ""
* xICrlValue: false
* zIndex: 65536
===
fSpecific {…}
* _fGeneric: undefined
* _hasMouseEnter: 1
* aICrlClasses: Array[0]
* bICnrWinFullscreen: false
* bICrlActive: false
* bICrlDisabled: false
* bICrlRendered: true
* bICrlVisible: true
* bIcCnrBody: true
* bIcCnrFixed: true
* click: true
* focusin: true
* keydown: true
* nICrlHeight: 0
* nICrlWidth: 0
* oIControlHoverLast: null
* oICrlAria: Object
* oICrlBoxBorder: Object
* oICrlBoxMargin: Object
* oICrlBoxPadding: Object
* oICrlEventsNative: Object
* oICrlEvtstore: Object
* oICrlLayrect: Object
* oICrlLayrectLast: Object
* oICrlLayrectRepaintLast: Object
* oICrlSettings: Object
* oIHelperDrag: oI.fIDragdrop
* oIKeyboardnavigation: oI.fIKeyboardnavigation
* oIcCnrCollection: oI.fICollection
* oIcCnrLayout: fILAFlex
* oIccpfWinStatusbar: fSpecific
* oIccpfltEventsRoot: fSpecific
* sICrlId: "id126"
* sICrlName: ""
* sICrlType: "fCCCPFWindowcnr"
* saICrlText: ""xICrlValue: false
* zIndex: 65536
__proto__: fSpecific
===
> 2015-03-19:
Object.getOwnPropertyNames(new oPgmHtml.oI.fCCCPFWindow()).sort()
["_fProto", "aIcrlClasses", "bIccnrBody", "bIccnrFixed", "bIccpfwinFullscreen", "bIcrlActive", "bIcrlDisabled", "bIcrlVisible", "nIcrlHeight", "nIcrlWidth", "oIccnrCollection", "oIccnrLayout", "oIccpfltEventsRoot", "oIcrlAria", "oIcrlBindings", "oIcrlBoxBorder", "oIcrlBoxMargin", "oIcrlBoxPadding", "oIcrlEventsNative", "oIcrlSettings", "sIcrlId", "sIcrlName", "sIcrlText", "xIcrlValue"]
Object.getOwnPropertyNames(new oPgmHtml.oI.fCCCPFWindow().__proto__).sort()
["bIcrlModal", "fIccnrRecalc", "fIcrlLayrectInit", "fIcrlRemove", "fIcrlRenderAfter", "fIcrlToHtml", "fullscreen", "init", "oIcrlSettingsDefaults", "submit"]
:: ICnrFloatpanel:
["close", "fIcrlHide", "fIcrlRemove", "fIcrlShow", "fImvlMoveBy", "fImvlMoveRelative", "fImvlMoveTo", "fImvlTestRltv", "fIrszResizeBy", "fIrszResizeTo", "fIrszResizeToContent", "fixed", "hideAll", "init"]
:: ICnrPanel:
["fIcrlToHtml", "fIsclRenderScroll", "oIcrlSettingsDefaults"]
:: IContainer:
["fIccnrAdd", "fIccnrAppend", "fIccnrCreate", "fIccnrFind", "fIccnrFromJSON", "fIccnrInsert", "fIccnrItems", "fIccnrPrepend", "fIccnrRecalc", "fIccnrRenderBefore", "fIccnrRenderNew", "fIccnrReplace", "fIccnrToJSON", "fIcrlFocus", "fIcrlLayrectInit", "fIcrlReflow", "fIcrlRenderAfter", "fIcrlToHtml", "init", "sIcrlLayout"]
:: IControl:
["fIcrlAddAfter", "fIcrlAddBefore", "fIcrlAppendToElt", "fIcrlAria", "fIcrlBActive", "fIcrlBClass", "fIcrlBindEventsPending", "fIcrlBlur", "fIcrlBoxBorder", "fIcrlBoxMargin", "fIcrlBoxMeasure", "fIcrlBoxPadding", "fIcrlBoxParse", "fIcrlClassAdd", "fIcrlClassRemove", "fIcrlClassToggle", "fIcrlClasses", "fIcrlClnParents", "fIcrlDisabled", "fIcrlEltBody", "fIcrlEltGet", "fIcrlEncode", "fIcrlEventInvoke", "fIcrlEventhandlerAdd", "fIcrlEventhandlerRemove", "fIcrlFindAncestorCommon", "fIcrlFocus", "fIcrlFromHTMLElement", "fIcrlHide", "fIcrlHtmlInner", "fIcrlLayrect", "fIcrlLayrectInit", "fIcrlName", "fIcrlNext", "fIcrlParent", "fIcrlPrev", "fIcrlReflow", "fIcrlRemove", "fIcrlRenderAfter", "fIcrlRenderBefore", "fIcrlRepaint", "fIcrlScrollIntoview", "fIcrlShow", "fIcrlText", "fIcrlToHtml", "fIcrlValue", "init", "sIcrlPrefixClass", "visible"]

===
Object.getOwnPropertyNames(new oPgmHtml.oI.fCCCPFWindow).sort()
["_fProto", "_fullscreen", "aIcrlClasses", "bIcrlActive", "bIcrlBody", "bIcrlDisabled", "bIcrlFixed", "bIcrlVisible", "nIcrlHeight", "nIcrlWidth", "oILayout", "oIccnrCollection", "oIcrlAria", "oIcrlBindings", "oIcrlBoxBorder", "oIcrlBoxMargin", "oIcrlBoxPadding", "oIcrlEventsNative", "oIcrlEventsRoot", "oIcrlSettings", "sIcrlId", "sIcrlName", "sIcrlText", "sIcrlValue"]
> Object.getOwnPropertyNames(new oPgmHtml.oI.fCCCPFloat).sort()
["_fProto", "aIcrlClasses", "bIcrlActive", "bIcrlBody", "bIcrlDisabled", "bIcrlFixed", "bIcrlVisible", "nIcrlHeight", "nIcrlWidth", "oILayout", "oIccnrCollection", "oIcrlAria", "oIcrlBindings", "oIcrlBoxBorder", "oIcrlBoxMargin", "oIcrlBoxPadding", "oIcrlEventsNative", "oIcrlEventsRoot", "oIcrlSettings", "sIcrlId", "sIcrlName", "sIcrlText", "sIcrlValue"]
> Object.getOwnPropertyNames(new oPgmHtml.oI.fCCCPanel).sort()
["_fProto", "aIcrlClasses", "bIcrlActive", "bIcrlBody", "bIcrlDisabled", "bIcrlFixed", "bIcrlVisible", "nIcrlHeight", "nIcrlWidth", "oILayout", "oIccnrCollection", "oIcrlAria", "oIcrlBindings", "oIcrlBoxBorder", "oIcrlBoxMargin", "oIcrlBoxPadding", "oIcrlEventsNative", "oIcrlSettings", "sIcrlId", "sIcrlName", "sIcrlText", "sIcrlValue"]
> Object.getOwnPropertyNames(new oPgmHtml.oI.fCCContainer).sort()
["_fProto", "aIcrlClasses", "bIcrlActive", "bIcrlBody", "bIcrlDisabled", "bIcrlFixed", "bIcrlVisible", "nIcrlHeight", "nIcrlWidth", "oILayout", "oIccnrCollection", "oIcrlAria", "oIcrlBindings", "oIcrlBoxBorder", "oIcrlBoxMargin", "oIcrlBoxPadding", "oIcrlEventsNative", "oIcrlSettings", "sIcrlId", "sIcrlName", "sIcrlText", "sIcrlValue"]
> Object.getOwnPropertyNames(new oPgmHtml.oI.fCControl).sort()
["aIcrlClasses", "bIcrlActive", "bIcrlDisabled", "bIcrlVisible", "nIcrlHeight", "nIcrlWidth", "oIcrlAria", "oIcrlBindings", "oIcrlBoxBorder", "oIcrlBoxMargin", "oIcrlBoxPadding", "oIcrlEventsNative", "oIcrlSettings", "sIcrlId", "sIcrlName", "sIcrlText", "sIcrlValue"]
===
> Object.getOwnPropertyNames((new tinymce.ui.Window)).sort()
TypeError: Cannot read property 'autohide' of undefined //4.0.7
===
Object.getOwnPropertyNames((new tinymce.ui.Window)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_eventsRoot", "_fixed", "_fullscreen", "_hasBody", "_height", "_id", "_items", "_layout", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.Window).__proto__).sort()
["Defaults", "fullscreen", "init", "initLayoutRect", "modal", "postRender", "recalc", "remove", "renderHtml", "submit"]
Object.getOwnPropertyNames((new tinymce.ui.Window).__proto__.__proto__).sort()
["Mixins", "close", "fixed", "hide", "hideAll", "init", "moveBy", "moveRel", "moveTo", "remove", "resizeBy", "resizeTo", "resizeToContent", "show", "testMoveRel"]
Object.getOwnPropertyNames((new tinymce.ui.Window).__proto__.__proto__.__proto__).sort()
["Defaults", "Mixins", "renderHtml", "renderScroll"]
Object.getOwnPropertyNames((new tinymce.ui.Window).__proto__.__proto__.__proto__.__proto__).sort()
["add", "append", "create", "find", "focus", "fromJSON", "init", "initLayoutRect", "innerClass", "insert", "items", "layout", "postRender", "preRender", "prepend", "recalc", "reflow", "renderHtml", "renderNew", "replace", "toJSON"]
Object.getOwnPropertyNames((new tinymce.ui.Window).__proto__.__proto__.__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "hasClass", "height", "hide", "init", "initLayoutRect", "innerHtml", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "value", "visible", "width"]


border: 1
callbacks: Object
layout: "fclflex"
role: "dialog"
sClsContainer: "panel"

pwpoICCPFWincnr.oICrlCfg

name::
* McsEngl.pwpoICCPFWincnr.oICrlCfg@cptIt,

_CODE.PWP:
{
sICrlCfgTitle: 'CEdit-Find-and-replace',
aICCnrCfgItems:
aoICrlBtnsStatusbar:
sICCnrCfgLaymgr: 'fILAFlexRo',
sICrlPack: 'center',
sICrlAlign: 'center',
onclose: function() {}
onsubmit: function(oEvtIn) {}
}
===
{
sICrlType: 'fCCCPFWindowcnr',
sICrlLayout: 'fILAFlex',
sICrlPack: "center",
sICrlAlign: "center",
onclose: function() { },
onsubmit: function(oEvtfcnargsIn) { },
oICrlButtons: [
{saICrlText: "Find", },
{saICrlText: "Replace", },
{saICrlText: "Replace all", },
{sICrlType: 'fICHSpacer', nICrlFlex: 1},
{saICrlText: "Prev", },
{saICrlText: "Next", }
],
sICrlTitle: "Find and replace",
aICrlItems: [{
sICrlType: 'fICCFormcnr',
nsICrlPadding: 20,
nICrlLabelgap: 30,
nICrlSpacing: 10,
aICrlItems: []}
]
}

pwpoICCPLWincnr'hml-code

name::
* McsEngl.pwpoICCPLWincnr'hml-code@cptIt,

_CODE.HTML.PWP:
pwpwin.Template.html:
<div id="id147" class="clsContainer clsPanel clsFloatpanel clsWindow clsIn" hidefocus="1" tabindex="-1" aria-sicrlrole="dialog" aria-labeledby="id147" aria-label="Insert template" style="border-width: 1px; z-index: 65536; left: 241px; top: 3px; width: 640px; height: 393px;">

<div id="id147-head" class="clsWindowHead">
<div class="clsTitle">Insert template</div>
<button type="button" class="clsClose" aria-hidden="true">Χ</button>
<div id="id147-drag" class="clsDrag"></div></div>

<div id="id147-body" class="clsLayoutAbs" style="width: 640px; height: 304px;"><div id="id148" class="clsContainer clsForm clsFirst clsLast clsLayoutAbsItem" role="undefined" style="left: 0px; top: 0px; width: 640px; height: 304px;"><div id="id148-body" class="clsLayoutAbs" style="width: 640px; height: 304px;"><div id="id156" class="clsContainer clsFirst clsLayoutAbsItem clsFormitem" hidefocus="1" tabindex="-1" style="left: 20px; top: 20px; width: 600px; height: 29px;"><div id="id156-body" class="clsLayoutAbs" style="width: 600px; height: 29px;"><label id="id157" class="clsWidget clsLabel clsFirst clsLayoutAbsItem" for="id149" style="line-height: 15px; left: 0px; top: 7px; width: 97px; height: 15px;">Templates</label><div id="id149" class="clsContainer clsLast clsLayoutAbsItem" role="undefined" style="left: 97px; top: 0px; width: 87px; height: 29px;"><div id="id149-body" class="" style="width: 87px; height: 29px;"><div id="id150" class="clsWidget clsBtn clsMenubtn clsListbox clsFirst clsLast" tabindex="-1" aria-sicrlrole="button" aria-haspopup="true" role="button"><button id="id150-open" role="presentation" type="button" tabindex="-1"><span>My name</span> <i class="clsCaret"></i></button></div></div></div></div></div><div id="id158" class="clsContainer clsLayoutAbsItem clsFormitem" hidefocus="1" tabindex="-1" style="left: 20px; top: 59px; width: 600px; height: 15px;"><div id="id158-body" class="clsLayoutAbs" style="width: 600px; height: 15px;"><label id="id159" class="clsWidget clsLabel clsFirst clsLayoutAbsItem" for="id151" style="line-height: 15px; left: 0px; top: 0px; width: 97px; height: 15px;">Description</label><label id="id160" class="clsWidget clsLabel clsLast clsLayoutAbsItem" style="line-height: 0px; left: 97px; top: 8px; width: 0px; height: 0px;"></label></div></div><iframe id="id152" class="clsLast clsLayoutAbsItem clsIframe" tabindex="-1" src="javascript:''" frameborder="0" style="border-width: 1px; left: 20px; top: 84px; width: 598px; height: 198px;"></iframe></div></div></div>

<div id="id153" class="clsContainer clsPanel clsFoot" hidefocus="1" tabindex="-1" style="border-width: 1px 0px 0px; left: 0px; top: 0px; width: 640px; height: 49px;"><div id="id153-body" class="clsLayoutAbs" style="width: 640px; height: 49px;"><div id="id154" class="clsWidget clsBtn clsPrimary clsFirst clsLayoutAbsItem" tabindex="-1" aria-sicrlrole="button" style="left: 10px; top: 10px; width: 52px; height: 29px;"><button role="presentation" type="button" tabindex="-1" style="height: 100%; width: 100%;">Ok</button></div><div id="id155" class="clsWidget clsBtn clsLast clsLayoutAbsItem" tabindex="-1" aria-sicrlrole="button" style="left: 65px; top: 10px; width: 64px; height: 29px;"><button role="presentation" type="button" tabindex="-1" style="height: 100%; width: 100%;">Cancel</button></div></div></div></div>

pwp'window'html:
//charmap
<div id="mce_114" class="cls-container cls-panel cls-floatpanel cls-window cls-in" hidefocus="1" tabindex="-1" role="dialog" aria-labeledby="mce_114" aria-label="Special character" style="border-width: 1px; z-index: 65536; left: 353px; top: 3.5px; width: 572px; height: 411px;">

<div id="mce_114-head" class="cls-window-head">
<div class="cls-title">Special character</div>
<button type="button" class="cls-close" aria-hidden="true">Χ</button>
<div id="mce_114-dragh" class="cls-dragh"></div>
</div>

<div id="mce_114-body" class="cls-container-body cls-abs-layout" style="width: 572px; height: 321px;">
<div id="mce_115" class="cls-container cls-first cls-abs-layout-item" role="undefined" style="left: 10px; top: 10px; width: 442px; height: 301px;"><div id="mce_115-body" class="cls-container-body cls-undefined" style="width: 442px; height: 301px;">
<table role="presentation" cellspacing="0" class="clsCharmap"><tbody>
<tr>
<td title="ampersand 38"><div id="id1" tabindex="-1">&</div></td>
<td title="quotation mark 34"><div id="id2" tabindex="-1">"</div></td>
...
</tbody></table></div></div>
<label id="mce_116" class="cls-widget cls-label cls-last cls-abs-layout-item" style="font-size: 44px; text-align: center; line-height: 80px; left: 462px; top: 10px; width: 100px; height: 80px;">Ή</label></div>
<div id="mce_117" class="cls-container cls-panel cls-foot" hidefocus="1" tabindex="-1" style="border-width: 1px 0px 0px; left: 0px; top: 0px; width: 572px; height: 50px;">
<div id="mce_117-body" class="cls-container-body cls-abs-layout" style="width: 572px; height: 50px;">
<div id="mce_118" class="cls-widget cls-btn cls-first cls-last cls-abs-layout-item" tabindex="-1" role="button" style="left: 504px; top: 10px; width: 56px; height: 28px;">
<button role="presentation" type="button" tabindex="-1" style="height: 100%; width: 100%;">Close</button></div></div></div></div>

//search problem
<div id="id126" class="clsContainer clsCnrPanel clsCnrFloatpanel clsCnrWindow" hidefocus="1" tabindex="-1" role="dialog" aria-labeledby="id126" aria-label="Find and replace" style="border-width: 1px; z-index: 65536;">

<div id="id126-head" class="clsWinHead">
<div class="clsWinTitle">Find and replace</div>
<button type="button" class="clsClose" aria-hidden="true">Χ</button>
<div id="id126-drag" class="clsWinDrag"></div>
</div>

<div id="id126-body" class="clsLayoutAbs">
<div id="id127" class="clsContainer clsCnrForm clsFirst clsLast clsLayoutAbsItem" role="undefined">
<div id="id127-body" class="clsLayoutAbs">
<div id="id139" class="clsContainer clsFirst clsLayoutAbsItem clsCnrFormitem" hidefocus="1" tabindex="-1">
<div id="id139-body" class="clsLayoutAbs">
<label id="id140" class="clsHover clsLabel clsFirst clsLayoutAbsItem" for="id128">Find</label><input id="id128" class="clsTextbox clsLast clsLayoutAbsItem" value="" hidefocus="true" size="40"></div></div>
<div id="id141" class="clsContainer clsLayoutAbsItem clsCnrFormitem" hidefocus="1" tabindex="-1"><div id="id141-body" class="clsLayoutAbs">
<label id="id142" class="clsHover clsLabel clsFirst clsLayoutAbsItem" for="id129">Replace with</label><input id="id129" class="clsTextbox clsLast clsLayoutAbsItem" value="" hidefocus="true" size="40"></div></div>
<div id="id143" class="clsContainer clsLayoutAbsItem clsCnrFormitem" hidefocus="1" tabindex="-1"><div id="id143-body" class="clsLayoutAbs">
<label id="id144" class="clsHover clsLabel clsFirst clsLayoutAbsItem" for="id130"> </label><div id="id130" class="clsCheckbox clsLast clsLayoutAbsItem" unselectable="on" aria-labeledby="id130-al" tabindex="-1" role="checkbox" aria-checked="false"><i class="clsIco clsI-checkbox"></i><span id="id130-al" class="clsLabel">Match case</span></div></div></div>
<div id="id145" class="clsContainer clsLast clsLayoutAbsItem clsCnrFormitem" hidefocus="1" tabindex="-1"><div id="id145-body" class="clsLayoutAbs">
<label id="id146" class="clsHover clsLabel clsFirst clsLayoutAbsItem" for="id131"> </label><div id="id131" class="clsCheckbox clsLast clsLayoutAbsItem" unselectable="on" aria-labeledby="id131-al" tabindex="-1" role="checkbox" aria-checked="false"><i class="clsIco clsI-checkbox"></i><span id="id131-al" class="clsLabel">Whole words</span></div></div></div></div></div></div>

<div id="id132" class="clsContainer clsCnrPanel clsFoot" hidefocus="1" tabindex="-1" style="border-width: 1px 0px 0px;">
<div id="id132-body" class="clsLayoutAbs">
<div id="id133" class="clsHover clsBtn clsFirst clsLayoutAbsItem" tabindex="-1" role="button">
<button role="presentation" type="button" tabindex="-1">Find</button></div>
<div id="id134" class="clsDisabled clsHover clsBtn clsLayoutAbsItem" tabindex="-1" role="button" aria-disabled="true"><button role="presentation" type="button" tabindex="-1">Replace</button></div>
<div id="id135" class="clsDisabled clsHover clsBtn clsLayoutAbsItem" tabindex="-1" role="button" aria-disabled="true"><button role="presentation" type="button" tabindex="-1">Replace all</button></div>
<div id="id136" class="clsLayoutAbsItem clsSpacer"></div>
<div id="id137" class="clsDisabled clsHover clsBtn clsLayoutAbsItem" tabindex="-1" role="button" aria-disabled="true"><button role="presentation" type="button" tabindex="-1">Prev</button></div>
<div id="id138" class="clsDisabled clsHover clsBtn clsLast clsLayoutAbsItem" tabindex="-1" role="button" aria-disabled="true"><button role="presentation" type="button" tabindex="-1">Next</button></div>
</div>
</div>
</div>

===
<div id="id94" class="clsContainer clsCnrPanel clsCnrFloatpanel clsCnrWindow clsIn" hidefocus="1" tabindex="-1" role="dialog" aria-labeledby="id94" aria-label="Find and replace" style="border-width: 1px; z-index: 65536; left: 58.5px; top: 156.5px; width: 441px; height: 253px;">

<div id="id94-head" class="clsWinHead">
<div class="clsWinTitle">Find and replace</div>
<button type="button" class="clsClose" aria-hidden="true">Χ</button>
<div id="id94-drag" class="clsWinDrag"></div>
</div>

<div id="id94-body" class="clsLayoutAbs" style="width: 441px; height: 164px;">
<div id="id95" class="clsContainer clsCnrForm clsFirst clsLast clsLayoutAbsItem" role="undefined">
<div id="id95-body" class="clsLayoutAbs">
<div id="id107" class="clsContainer clsFirst clsLayoutAbsItem clsCnrFormitem" hidefocus="1" tabindex="-1"><div id="id107-body" class="clsLayoutAbs">
<label id="id108" class="clsHover clsLabel clsFirst clsLayoutAbsItem" for="id96">Find</label>
<input id="id96" class="clsTextbox clsLast clsLayoutAbsItem" value="" hidefocus="true" size="40"></div></div>
<div id="id109" class="clsContainer clsLayoutAbsItem clsCnrFormitem" hidefocus="1" tabindex="-1"><div id="id109-body" class="clsLayoutAbs"><label id="id110" class="clsHover clsLabel clsFirst clsLayoutAbsItem" for="id97">Replace with</label><input id="id97" class="clsTextbox clsLast clsLayoutAbsItem" value="" hidefocus="true" size="40"></div></div><div id="id111" class="clsContainer clsLayoutAbsItem clsCnrFormitem" hidefocus="1" tabindex="-1"><div id="id111-body" class="clsLayoutAbs"><label id="id112" class="clsHover clsLabel clsFirst clsLayoutAbsItem" for="id98"> </label><div id="id98" class="clsCheckbox clsLast clsLayoutAbsItem" unselectable="on" aria-labeledby="id98-al" tabindex="-1" role="checkbox" aria-checked="false"><i class="clsIco clsI-checkbox"></i><span id="id98-al" class="clsLabel">Match case</span></div></div></div><div id="id113" class="clsContainer clsLast clsLayoutAbsItem clsCnrFormitem" hidefocus="1" tabindex="-1"><div id="id113-body" class="clsLayoutAbs"><label id="id114" class="clsHover clsLabel clsFirst clsLayoutAbsItem" for="id99"> </label><div id="id99" class="clsCheckbox clsLast clsLayoutAbsItem" unselectable="on" aria-labeledby="id99-al" tabindex="-1" role="checkbox" aria-checked="false"><i class="clsIco clsI-checkbox"></i><span id="id99-al" class="clsLabel">Whole words</span></div></div></div></div></div></div>

<div id="id100" class="clsContainer clsCnrPanel clsWinFoot" hidefocus="1" tabindex="-1" style="border-width: 1px 0px 0px;"><div id="id100-body" class="clsLayoutAbs">
<div id="id101" class="clsHover clsBtn clsFirst clsLayoutAbsItem" tabindex="-1" role="button"><button role="presentation" type="button" tabindex="-1">Find</button></div>
<div id="id102" class="clsDisabled clsHover clsBtn clsLayoutAbsItem" tabindex="-1" role="button" aria-disabled="true"><button role="presentation" type="button" tabindex="-1">Replace</button></div>
<div id="id103" class="clsDisabled clsHover clsBtn clsLayoutAbsItem" tabindex="-1" role="button" aria-disabled="true"><button role="presentation" type="button" tabindex="-1">Replace all</button></div>
<div id="id104" class="clsLayoutAbsItem clsSpacer"></div>
<div id="id105" class="clsDisabled clsHover clsBtn clsLayoutAbsItem" tabindex="-1" role="button" aria-disabled="true"><button role="presentation" type="button" tabindex="-1">Prev</button></div>
<div id="id106" class="clsDisabled clsHover clsBtn clsLast clsLayoutAbsItem" tabindex="-1" role="button" aria-disabled="true"><button role="presentation" type="button" tabindex="-1">Next</button>
</div></div></div></div>

===
<div id="id94" class="clsContainer clsCnrPanel clsCnrFloatpanel clsCnrWindow clsIn" hidefocus="1" tabindex="-1" role="dialog" aria-labeledby="id94" aria-label="Find and replace" style="border-width: 1px; z-index: 65536; left: 58.5px; top: 156.5px; width: 441px; height: 253px;">

<div id="id94-head" class="clsWinHead">
<div class="clsWinTitle">Find and replace</div>
<button type="button" class="clsClose" aria-hidden="true">Χ</button>
<div id="id94-drag" class="clsWinDrag"></div></div>

<div id="id94-body" class="clsLayoutAbs" style="width: 441px; height: 164px;">
<div id="id95" class="clsContainer clsCnrForm clsFirst clsLast clsLayoutAbsItem" role="undefined">
<div id="id95-body" class="clsLayoutAbs">
<div id="id107" class="clsContainer clsFirst clsLayoutAbsItem clsCnrFormitem" hidefocus="1" tabindex="-1"><div id="id107-body" class="clsLayoutAbs">
<label id="id108" class="clsHover clsLabel clsFirst clsLayoutAbsItem" for="id96">Find</label>
<input id="id96" class="clsTextbox clsLast clsLayoutAbsItem" value="" hidefocus="true" size="40"></div></div>
<div id="id109" class="clsContainer clsLayoutAbsItem clsCnrFormitem" hidefocus="1" tabindex="-1"><div id="id109-body" class="clsLayoutAbs"><label id="id110" class="clsHover clsLabel clsFirst clsLayoutAbsItem" for="id97">Replace with</label><input id="id97" class="clsTextbox clsLast clsLayoutAbsItem" value="" hidefocus="true" size="40"></div></div><div id="id111" class="clsContainer clsLayoutAbsItem clsCnrFormitem" hidefocus="1" tabindex="-1"><div id="id111-body" class="clsLayoutAbs"><label id="id112" class="clsHover clsLabel clsFirst clsLayoutAbsItem" for="id98"> </label><div id="id98" class="clsCheckbox clsLast clsLayoutAbsItem" unselectable="on" aria-labeledby="id98-al" tabindex="-1" role="checkbox" aria-checked="false"><i class="clsIco clsI-checkbox"></i><span id="id98-al" class="clsLabel">Match case</span></div></div></div><div id="id113" class="clsContainer clsLast clsLayoutAbsItem clsCnrFormitem" hidefocus="1" tabindex="-1"><div id="id113-body" class="clsLayoutAbs"><label id="id114" class="clsHover clsLabel clsFirst clsLayoutAbsItem" for="id99"> </label><div id="id99" class="clsCheckbox clsLast clsLayoutAbsItem" unselectable="on" aria-labeledby="id99-al" tabindex="-1" role="checkbox" aria-checked="false"><i class="clsIco clsI-checkbox"></i><span id="id99-al" class="clsLabel">Whole words</span></div></div></div></div></div></div><div id="id100" class="clsContainer clsCnrPanel clsWinFoot" hidefocus="1" tabindex="-1" style="border-width: 1px 0px 0px;"><div id="id100-body" class="clsLayoutAbs"><div id="id101" class="clsHover clsBtn clsFirst clsLayoutAbsItem" tabindex="-1" role="button"><button role="presentation" type="button" tabindex="-1">Find</button></div><div id="id102" class="clsDisabled clsHover clsBtn clsLayoutAbsItem" tabindex="-1" role="button" aria-disabled="true"><button role="presentation" type="button" tabindex="-1">Replace</button></div><div id="id103" class="clsDisabled clsHover clsBtn clsLayoutAbsItem" tabindex="-1" role="button" aria-disabled="true"><button role="presentation" type="button" tabindex="-1">Replace all</button></div><div id="id104" class="clsLayoutAbsItem clsSpacer"></div><div id="id105" class="clsDisabled clsHover clsBtn clsLayoutAbsItem" tabindex="-1" role="button" aria-disabled="true"><button role="presentation" type="button" tabindex="-1">Prev</button></div><div id="id106" class="clsDisabled clsHover clsBtn clsLast clsLayoutAbsItem" tabindex="-1" role="button" aria-disabled="true"><button role="presentation" type="button" tabindex="-1">Next</button></div></div></div></div>

pwpo2I.fICCPFWMsgboxcnrRo (ICCPFWMbc)

name::
* McsEngl.pwpo2I.fICCPFWMsgboxcnrRo (ICCPFWMbc)@cptIt,
* McsEngl.pwpfICCPFWMsgboxcnrRo@cptIt,
* McsEngl.pwpICCPFLMbc@cptIt,
=== _OLD:
* McsEngl.fICCPFWMsgboxcnrFtr@old,
* McsEngl.oPgmHtml.oI.Control.Container.Panel.Float.Window.Messagebox@old,
* McsEngl.pwpfCCCPFWMsgbox@old,
* McsEngl.pwpfCCCPFWMessagebox@old,
* McsEngl.pwpfICCPFWMessagebox@old,
* McsEngl.pwpMsgboxcnr@old,
* McsEngl.pwpMsgbox@old,
* McsEngl.phMessagebox@old,
* McsEngl.pwp'MessageBox@old,
* McsEngl.phIccpfwmbx@old,

pwpoICCPFWMsgboxcnr

name::
* McsEngl.pwpoICCPFWMsgboxcnr@cptIt,

_DESCRIPTION:
This object is-used to create Message-boxes like alerts/confirms etc.

pwpoICCPFWMsgboxcnr.MEMBER:
> pwp.0.90v 2016-05-15 Object.getOwnPropertyNames(oPgmWpg.o2I.fICCPFWMsgboxcnrRo()).sort()
["aICrlClasses", "asICrlCfgTxt", "bICCPFWinFullscreen", "bICCnrBody", "bICCnrCfgFixed", "bICrlCfgActive", "bICrlCfgDisabled", "bICrlCfgVisible", "fICCPFWMbxAlert", "fICCPFWMbxConfirm", "fICCPFWMbxMessage", "fICrlInit", "nICCPFWMbxOK", "nICCPFWMbxOK_CANCEL", "nICCPFWMbxYES_NO", "nICCPFWMbxYES_NO_CANCEL", "nICrlCfgHeight", "nICrlCfgWidth", "oICCPFWinStatusbar", "oICCnrAkcChld", "oICCnrLaymgr", "oICrlAria", "oICrlBoxBorder", "oICrlBoxMargin", "oICrlBoxPadding", "oICrlCfg", "oICrlEventsRoot", "sICfgObjectof", "sICrlCfgName", "sICrlId", "xICrlCfgValue"]
===
> Object.getOwnPropertyNames((new tinymce.ui.MessageBox)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_eventsRoot", "_fixed", "_fullscreen", "_hasBody", "_height", "_id", "_items", "_layout", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "settings", "statusbar"]
Object.getOwnPropertyNames((new tinymce.ui.MessageBox).__proto__).sort()
["Statics", "init"]
Object.getOwnPropertyNames((new tinymce.ui.MessageBox).__proto__.__proto__).sort()
["Defaults", "fullscreen", "init", "initLayoutRect", "modal", "postRender", "recalc", "remove", "renderHtml", "submit"]
Object.getOwnPropertyNames((new tinymce.ui.MessageBox).__proto__.__proto__.__proto__).sort()
["Mixins", "close", "fixed", "hide", "hideAll", "init", "moveBy", "moveRel", "moveTo", "remove", "resizeBy", "resizeTo", "resizeToContent", "show", "testMoveRel"]
Object.getOwnPropertyNames((new tinymce.ui.MessageBox).__proto__.__proto__.__proto__.__proto__).sort()
["Defaults", "Mixins", "renderHtml", "renderScroll"]
Object.getOwnPropertyNames((new tinymce.ui.MessageBox).__proto__.__proto__.__proto__.__proto__.__proto__).sort()
["add", "append", "create", "find", "focus", "fromJSON", "init", "initLayoutRect", "innerClass", "insert", "items", "layout", "postRender", "preRender", "prepend", "recalc", "reflow", "renderHtml", "renderNew", "replace", "toJSON"]
Object.getOwnPropertyNames((new tinymce.ui.MessageBox).__proto__.__proto__.__proto__.__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "hasClass", "height", "hide", "init", "initLayoutRect", "innerHtml", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "value", "visible", "width"]
===
tmce.oCCCPanelFloatWindowMessage:
align: "center"
autoScroll: true
border: 1
buttons: Object
callbacks: Object
items: Object
layout: "fclflex"
pack: "center"
padding: 20
role: "dialog"
sClsContainer: "panel"

pwpo2I.fICCPTabcnrRo (ICCPTbc)

name::
* McsEngl.pwpo2I.fICCPTabcnrRo (ICCPTbc)@cptIt,
* McsEngl.pwpfICCPTabcnrRo@cptIt,
* McsEngl.pwpICCPTbc@cptIt,
=== _OLD:
* McsEngl.fICCPTabcnrFtr@old,
* McsEngl.oPgmHtml.oI.Control.Container.Panel.Tab@old,
* McsEngl.pwpfICCPTab@old,
* McsEngl.pwpfCCCPTab@old,
* McsEngl.pwpTabcnr@old,
* McsEngl.phTab@old,
* McsEngl.phTabcontainer@old,
* McsEngl.pwp'fCCCPanelTab@old,
* McsEngl.pwp'TabPanel@old,
* McsEngl.tinymce.ui.TabPanel@old,
* McsEngl.phIccptab@old,

pwpoICCPTabcnr

_DESCRIPTION:

pwpoICCPTbc.MEMBER:
> Object.getOwnPropertyNames((new tinymce.ui.TabPanel)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_fixed", "_hasBody", "_height", "_id", "_items", "_layout", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.TabPanel).__proto__).sort()
["Defaults", "activateTab", "initLayoutRect", "lastIdx", "postRender", "renderHtml"]
Object.getOwnPropertyNames((new tinymce.ui.TabPanel).__proto__.__proto__).sort()
["Defaults", "Mixins", "renderHtml", "renderScroll"]
Object.getOwnPropertyNames((new tinymce.ui.TabPanel).__proto__.__proto__.__proto__).sort()
["add", "append", "create", "find", "focus", "fromJSON", "init", "initLayoutRect", "innerClass", "insert", "items", "layout", "postRender", "preRender", "prepend", "recalc", "reflow", "renderHtml", "renderNew", "replace", "toJSON"]
Object.getOwnPropertyNames((new tinymce.ui.TabPanel).__proto__.__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "hasClass", "height", "hide", "init", "initLayoutRect", "innerHtml", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "value", "visible", "width"]

pwpo2I.fICCToolbarcnrFtr (IccTbc)

name::
* McsEngl.pwpo2I.fICCToolbarcnrFtr (IccTbc)@cptIt,
* McsEngl.pwpfICCToolbarcnrFtr@cptIt,
* McsEngl.oPgmHtml.oI.Control.Container.Toolbar@cptIt,
* McsEngl.pwpfCCCToolbar@cptIt,
* McsEngl.pwpfICCToolbar@cptIt,
* McsEngl.pwpToolbarcnr@cptIt,
* McsEngl.phToolbar@cptIt,
* McsEngl.phToolbarcontainer@cptIt,
* McsEngl.pwp'fCCCToolbar@cptIt,
* McsEngl.pwp'Toolbar-function@cptIt,
* McsEngl.tinymce.ui.Toolbar@cptIt,

* McsEngl.phIcctbr@cptIt,

_DEFINITION:
- Creates a new toolbar, which is part of a panelcnr with all toolbars, which is part of the panelcnrPgmHtml.
===
return Container.extend({
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\ui\Toolbar.js]

pwpoICCToolbarcnr'settings

name::
* McsEngl.pwpoICCToolbarcnr'settings@cptIt,

pwpoICCToolbarcnr.settings:
(new tinymce.oUi.fCCCToolbar).settings
Object {role: "toolbar", layout: "fclflow"}

pwpoICCToolbarcnr.member

name::
* McsEngl.pwpoICCToolbarcnr.member@cptIt,

pwpoICCToolbarcnr.member:
//2015-11-01
* _fGeneric: undefined
* aICrlClasses: Array[0]
.body [: "clsLayoutFlow"]
.control [0: "clsContainer"
1: "clsBarTool"
2: "clsFirst"
3: "clsLast"
4: "clsLayoutStackItem"]
* bICrlActive: false
* bICrlDisabled: false
* bICrlRendered: true
* bICrlVisible: true
* bIcCnrBody: true
* bIcCnrFixed: undefined
* nICrlHeight: 0
* nICrlWidth: 0
* oICrlAria: Object {sICrlRole: "toolbar"}
* oICrlBoxBorder: Object {bottom: 0, left: 0, right: 0, top: 0}
* oICrlBoxMargin: Object {bottom: 0, left: 0, right: 0, top: 0}
* oICrlBoxPadding: Object {bottom: 0, left: 0, right: 0, top: 0}
* oICrlEventsNative: Object {click: false
focusin: false
keydown: false}
* oICrlEvtstore: Object
* oICrlLayrect: Object {bICrlAutoresize: true
contentH: 405
contentW: 542
deltaH: 0
deltaW: 0
h: 405
innerH: 405
innerW: 542
maxH: 65535
maxW: 65535
minH: 405
minW: 542
scrollW: 0
startMinHeight: 0
startMinWidth: 0
w: 542
x: 0
y: 0}
* oICrlLayrectLast: Object
* oICrlParent: fSpecific {sICrlName: "guiPlcBarTools"
sICrlType: "fCCCPanelcnr"}
* oICrlSettings: Object{aICrlItems: Array[7]
sICrlLayout: "fILFlow"
sICrlRole: "toolbar"
sICrlType: "fCCCToolbarcnr"}
* oIKeyboardnavigation: oI.fIKeyboardnavigation
* oIcCnrCollection: oI.fICollection [6 fICCButtoncnr]
* oIcCnrLayout: fILFlow
* oIccpfltEventsRoot: fSpecific {sICrlName: "guiPlcPgmHtml"
sICrlType: "fCCCPanelcnr"}
* sICrlId: "id96"
* sICrlName: ""
* sICrlType: "fCCCToolbarcnr"
* saICrlText: ""
* xICrlValue: false
* __proto__: fSpecific
===
> 2015-07-03:
fSpecific {…}
_fProto: undefined
aICrlClasses: Array[0]
bICrlActive: false
bICrlDisabled: false
bICrlRendered: true
bICrlVisible: true
bIcCnrBody: true
bIcCnrFixed: undefined
nICrlHeight: 0
nICrlWidth: 0
oICrlAria: Object
oICrlBoxBorder: Object
oICrlBoxMargin: Object
oICrlBoxPadding: Object
oICrlEventsNative: Object
oICrlEvtstore: Object
oICrlLayrect: Object
oICrlLayrectLast: Object
oICrlParent: fSpecific
oICrlSettings: Object
oIKeyboardnavigation: oI.fIKeyboardnavigation
oIcCnrCollection: oI.fICollection
oIcCnrLayout: fILFlow
oIccpfltEventsRoot: fSpecific
sIcrlId: "id97"
sIcrlName: ""
saICrlText: ""
type: "fCCCToolbar"
xICrlValue: false

__proto__: Object
fICrlRenderAfter: (){
init: (){
oICrlSettingsDefaults: Object

__proto__: Object
fICrlFocus: (){
fICrlLayrectInit: (){
fICrlReflow: (){
fICrlRenderAfter: (){
fICrlToSHtml: (){
fIcCnrAdd: (xItemsIn) {
fIcCnrAppend: (xItems) {
fIcCnrCollection: () {
fIcCnrCreate: (aItemsIn) {
fIcCnrFindcln: (sCssselectorIn) {
fIcCnrFromNameValue: (oJsonIn) {
fIcCnrInsert: (xItems, nIndexIn, bBeforeIn) {
fIcCnrPrepend: (xItemsIn) {
fIcCnrRecalc: () {
fIcCnrRenderBefore: () {
fIcCnrRenderNew: () {
fIcCnrReplace: (oIControlOldIn,
oIControlNewIn) {
fIcCnrToNameValue: () {init: (){
sIcrlLayout: "fILayout"

__proto__: Object
fICrlActive: (bActiveIn) {
fICrlAddAfter: (aoItemsIn) {
fICrlAddBefore: (aoItemsIn) {
fICrlAppendToElt: (oHTMLElement) {
fICrlAria: (sAriaGncIn, sAriaSpcIn) {
fICrlBClass: (sClsValueIn, sGroupIn) {
fICrlBindEventsPending: () {
fICrlBlur: () {
fICrlBoxBorder: () {
fICrlBoxMargin: () {
fICrlBoxMeasure: (oHeltIn, sPrefixIn) {
fICrlBoxPadding: () {
fICrlBoxParse: (nsBoxIn) {
fICrlClassAdd: (sClsValueIn, sGroupIn) {
fICrlClassRemove: (sClsValueIn, sGroupIn) {
fICrlClassToggle: (sClsValueIn, bAddIn, sGroupIn) {
fICrlClasses: (sGroupIn) {
fICrlClnParents: (sCssselectorIn) {
fICrlDisabled: (bDisabled) {
fICrlEltBody: () {
fICrlEltGet: (sIdsuffixIn, bDropCacheIn) {
fICrlEncode: (sTextIn, bTranslateIn) {
fICrlEvtfunctionAdd: (sEvtnamesIn, fsEvtfunctionIn) {
fICrlEvtfunctionCall: (sEvtnameIn, oEvtCrlArgsIn, bBubbleIn) {
fICrlEvtfunctionRemove: (sEvtnamesIn, callback) {
fICrlFindAncestorCommon: (oIControl1, oIControl2) {
fICrlFocus: () {
fICrlFromHTMLElement: (oHTMLElementIn) {
fICrlHide: () {
fICrlHtmlInner: (sHtmlIn) {
fICrlLayrect: (oICrlLayrectIn) {
fICrlLayrectInit: () {
fICrlName: (sName) {
fICrlNext: () {
fICrlParent: (oICrlParentIn) {
fICrlPrev: () {
fICrlReflow: () {
fICrlRemove: () {
fICrlRenderAfter: () {
fICrlRenderBefore: (oHTMLElementIn) {
fICrlRepaint: () {
fICrlScrollIntoview: (sAlignIn) {
fICrlShow: () {
fICrlText: (sICrlTextIn) {
fICrlToSHtml: () {
fICrlValue: (xICrlValueIn) {
fICrlVisible: (bVisible) {
init: (oICrlSettingsIn) {

__proto__: oUtil.fUClassconstructor: () {}

__proto__: Object

> 2015-03-02 Object.getOwnPropertyNames(new oPgmHtml.oI.fCCCToolbar).sort()["_fProto", "aIcrlClasses", "bIccnrBody", "bIccnrFixed", "bIcrlActive", "bIcrlDisabled", "bIcrlVisible", "nIcrlHeight", "nIcrlWidth", "oIccnrCollection", "oIccnrLayout", "oIcrlAria", "oIcrlBindings", "oIcrlBoxBorder", "oIcrlBoxMargin", "oIcrlBoxPadding", "oIcrlEventsNative", "oIcrlSettings", "sIcrlId", "sIcrlName", "sIcrlText", "sIcrlValue"]Object.getOwnPropertyNames((new oPgmHtml.oI.fCCCToolbar).__proto__).sort()["fIcrlRenderAfter", "init", "oIcrlSettingsDefaults"]Object.getOwnPropertyNames((new oPgmHtml.oI.fCCCToolbar).__proto__.__proto__).sort()["fIccnrAdd", "fIccnrAppend", "fIccnrCreate", "fIccnrFind", "fIccnrFromJSON", "fIccnrInsert", "fIccnrPrepend", "fIccnrRecalc", "fIccnrRenderBefore", "fIccnrRenderNew", "fIccnrReplace", "fIccnrToJSON", "fIcrlFocus", "fIcrlLayrectInit", "fIcrlReflow", "fIcrlRenderAfter", "fIcrlToHtml", "init", "items", "sILayout"]Object.getOwnPropertyNames((new oPgmHtml.oI.fCCCToolbar).__proto__.__proto__.__proto__).sort()["fIcrlAfter", "fIcrlAppendToElt", "fIcrlAria", "fIcrlBActive", "fIcrlBClass", "fIcrlBefore", "fIcrlBindEventsPending", "fIcrlBlur", "fIcrlBoxBorder", "fIcrlBoxMargin", "fIcrlBoxMeasure", "fIcrlBoxPadding", "fIcrlBoxParse", "fIcrlClassAdd", "fIcrlClassRemove", "fIcrlClassToggle", "fIcrlClasses", "fIcrlClnParents", "fIcrlDisabled", "fIcrlEltBodyGet", "fIcrlEltGet", "fIcrlEncode", "fIcrlEventLnrAdd", "fIcrlEventLnrRemove", "fIcrlFindAncestorCommon", "fIcrlFocus", "fIcrlHide", "fIcrlInnerhtml", "fIcrlLayoutrect", "fIcrlLayrectInit", "fIcrlName", "fIcrlNext", "fIcrlOutCrlInElt", "fIcrlParent", "fIcrlPrev", "fIcrlReflow", "fIcrlRemove", "fIcrlRenderAfter", "fIcrlRenderBefore", "fIcrlRepaint", "fIcrlScrollIntoview", "fIcrlShow", "fIcrlText", "fIcrlToHtml", "fIcrlValue", "fUobEventInvoke", "init", "sIcrlPrefixClass", "visible"]Object.getOwnPropertyNames((new oPgmHtml.oI.fCCCToolbar).__proto__.__proto__.__proto__.__proto__).sort()["constructor"]Object.getOwnPropertyNames((new oPgmHtml.oI.fCCCToolbar).__proto__.__proto__.__proto__.__proto__.__proto__).sort()["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
===
_INSTANCE:
> Object.getOwnPropertyNames(new tinymce.ui.Toolbar).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_fixed", "_hasBody", "_height", "_id", "_items", "_layout", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "settings"]
> Object.getOwnPropertyNames((new tinymce.ui.Toolbar).__proto__).sort()
["Defaults", "init", "postRender"]

pwpoICCToolbarcnr'html-code

name::
* McsEngl.pwpoICCToolbarcnr'html-code@cptIt,

_CODE.HTML.PWP:
<div id="id96" class="clsContainer clsBarTool clsFirst clsLast clsLayoutStackItem" role="toolbar">
<div id="id96-body" class="clsLayoutFlow">

<div id="id97" class="clsContainer clsFirst clsLayoutFlowItem clsCnrButton" role="toolbar"><div id="id97-body">
<div id="id64" class="clsHover clsBtn clsFirst" tabindex="-1" role="button" aria-disabled="false"><button role="presentation" type="button" tabindex="-1"><i class="clsIco clsI-save"></i> Save</button></div>
<div id="id65" class="clsHover clsBtn clsDisabled" tabindex="-1" role="button" aria-labeledby="id65" aria-label="Undo" aria-disabled="true"><button role="presentation" type="button" tabindex="-1"><i class="clsIco clsI-undo"></i></button></div>
<div id="id66" class="clsHover clsBtn clsLast clsDisabled" tabindex="-1" role="button" aria-labeledby="id66" aria-label="Redo" aria-disabled="true"><button role="presentation" type="button" tabindex="-1"><i class="clsIco clsI-redo"></i></button></div></div></div>

<div id="id98" class="clsContainer clsLayoutFlowItem clsCnrButton" role="toolbar"><div id="id98-body"><div id="id67" class="clsHover clsBtn clsBtnColor clsFirst" role="button" aria-labeledby="id67" aria-label="ColorForeground"><button role="presentation" hidefocus="" type="button" tabindex="-1"><i class="clsIco clsI-forecolor"></i><span id="id67-preview" class="clsPreview"></span></button><button type="button" class="clsOpen" hidefocus="" tabindex="-1"> <i class="clsCaret"></i></button></div><div id="id68" class="clsHover clsBtn clsBtnColor clsLast" role="button" aria-labeledby="id68" aria-label="ColorBackground"><button role="presentation" hidefocus="" type="button" tabindex="-1"><i class="clsIco clsI-backcolor"></i><span id="id68-preview" class="clsPreview"></span></button><button type="button" class="clsOpen" hidefocus="" tabindex="-1"> <i class="clsCaret"></i></button></div></div></div>

<div id="id99" class="clsContainer clsLayoutFlowItem clsCnrButton" role="toolbar"><div id="id99-body"><div id="id69" class="clsHover clsBtn clsMenubtn clsFirst" tabindex="-1" role="button" aria-haspopup="true" aria-expanded="false"><button id="id69-open" role="presentation" type="button" tabindex="-1"><span>Formats</span> <i class="clsCaret"></i></button></div><div id="id70" class="clsHover clsBtn clsMenubtn clsFixed-width clsListbutton" tabindex="-1" role="button" aria-haspopup="true" aria-expanded="true"><button id="id70-open" role="presentation" type="button" tabindex="-1"><span>Font Family</span> <i class="clsCaret"></i></button></div><div id="id71" class="clsHover clsBtn clsMenubtn clsFixed-width clsListbutton clsLast" tabindex="-1" role="button" aria-haspopup="true" aria-expanded="false"><button id="id71-open" role="presentation" type="button" tabindex="-1"><span>Font Sizes</span> <i class="clsCaret"></i></button></div></div></div>

<div id="id100" class="clsContainer clsLayoutFlowItem clsCnrButton" role="toolbar"><div id="id100-body"><div id="id72" class="clsHover clsBtn clsFirst" tabindex="-1" role="button" aria-labeledby="id72" aria-label="Bold"><button role="presentation" type="button" tabindex="-1"><i class="clsIco clsI-bold"></i></button></div><div id="id73" class="clsHover clsBtn" tabindex="-1" role="button" aria-labeledby="id73" aria-label="Italic"><button role="presentation" type="button" tabindex="-1"><i class="clsIco clsI-italic"></i></button></div><div id="id74" class="clsHover clsBtn clsLast" tabindex="-1" role="button" aria-labeledby="id74" aria-label="Underline"><button role="presentation" type="button" tabindex="-1"><i class="clsIco clsI-underline"></i></button></div></div></div>

<div id="id101" class="clsContainer clsLayoutFlowItem clsCnrButton" role="toolbar"><div id="id101-body"><div id="id75" class="clsHover clsBtn clsFirst" tabindex="-1" role="button" aria-labeledby="id75" aria-label="Align left"><button role="presentation" type="button" tabindex="-1"><i class="clsIco clsI-alignleft"></i></button></div><div id="id76" class="clsHover clsBtn" tabindex="-1" role="button" aria-labeledby="id76" aria-label="Align center"><button role="presentation" type="button" tabindex="-1"><i class="clsIco clsI-aligncenter"></i></button></div><div id="id77" class="clsHover clsBtn" tabindex="-1" role="button" aria-labeledby="id77" aria-label="Align right"><button role="presentation" type="button" tabindex="-1"><i class="clsIco clsI-alignright"></i></button></div><div id="id78" class="clsHover clsBtn clsLast" tabindex="-1" role="button" aria-labeledby="id78" aria-label="Justify"><button role="presentation" type="button" tabindex="-1"><i class="clsIco clsI-alignjustify"></i></button></div></div></div>

<div id="id102" class="clsContainer clsLayoutFlowItem clsCnrButton" role="toolbar"><div id="id102-body"><div id="id79" class="clsHover clsBtn clsSplitbtn clsMenubtn clsFirst" role="splitbutton" aria-labeledby="id79" aria-label="Bullet list" aria-haspopup="true"><button type="button" hidefocus="" tabindex="-1"><i class="clsIco clsI-btnBullist"></i></button><button type="button" class="clsOpen" hidefocus="" tabindex="-1"> <i class="clsCaret"></i></button></div><div id="id80" class="clsHover clsBtn clsSplitbtn clsMenubtn clsLast" role="splitbutton" aria-labeledby="id80" aria-label="Numbered list" aria-haspopup="true"><button type="button" hidefocus="" tabindex="-1"><i class="clsIco clsI-btnNumlist"></i></button><button type="button" class="clsOpen" hidefocus="" tabindex="-1"> <i class="clsCaret"></i></button></div></div></div>

<div id="id103" class="clsContainer clsLast clsLayoutFlowItem clsCnrButton" role="toolbar"><div id="id103-body">
<div id="id81" class="clsHover clsBtn clsFirst" tabindex="-1" role="button" aria-labeledby="id81" aria-label="Insert/edit link"><button role="presentation" type="button" tabindex="-1"><i class="clsIco clsI-link"></i></button></div>
<div id="id82" class="clsHover clsBtn" tabindex="-1" role="button" aria-labeledby="id82" aria-label="Insert/edit image"><button role="presentation" type="button" tabindex="-1"><i class="clsIco clsI-image"></i></button></div>
<div id="id83" class="clsHover clsBtn" tabindex="-1" role="button" aria-labeledby="id83" aria-label="Preview"><button role="presentation" type="button" tabindex="-1"><i class="clsIco clsI-preview"></i></button></div>
<div id="id84" class="clsHover clsBtn clsLast" tabindex="-1" role="button" aria-labeledby="id84" aria-label="Emoticons"><button role="presentation" type="button" tabindex="-1"><i class="clsIco clsI-emoticons"></i></button></div></div></div></div></div>

pwp'toolbar-ui

name::
* McsEngl.pwp'toolbar-ui@cptIt,

_DESCRIPTION:
It is the bar the has buttons on it for quick access.

pwpSetting.toolbar:
toolbar: "undo redo",
toolbar: "undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image | print preview media",
===
For multiple toolbars.

See the toolbar config options for details.

toolbar1: "undo redo | styleselect | bold italic",
toolbar2: "link image"
[http://www.tinymce.com/wiki.php/Configuration:toolbar%3CN%3E]

pwp'toolbar'add-button

name::
* McsEngl.pwp'toolbar'add-button@cptIt,

_PROCESS:
1) file.plugin.js: addButton
2) file.editor.html:
- plugins: "pluginname"
- toolbar2: "pluginname"

_CODE.PWP:
==> file.plugin.js:
* pwp'add_button:
 editor.addCommand('mceFullPageProperties', showDialog);

 editor.addButton('pluginname', {
   title: 'Document properties',
   cmd : 'mceFullPageProperties'
 });
===
editor.addButton('code', {
   icon: 'code',
   tooltip: 'Source code',
   onclick: showSourceEditor
 });
===
editor.addButton('emoticons', {
   type: 'panelbutton',
   popoverAlign: 'bc-tl',
   panel: {
     autohide: true,
     html: getHtml,
     onclick: function(e) {
       var linkElm = editor.dom.getParent(e.target, 'a');

       if (linkElm) {
         editor.insertContent('<img src="' + linkElm.getAttribute('data-mce-url') + '" />');
         this.hide();
       }
     }
   },
   tooltip: 'Emoticons'
 });

pwpo2I.fICCTMenubarcnrFtr (IcctMbc)

name::
* McsEngl.pwpo2I.fICCTMenubarcnrFtr (IcctMbc)@cptIt,
* McsEngl.pwpfICCTMenubarcnrFtr@cptIt,
* McsEngl.oPgmHtml.oI.Control.Container.Toolbar.MenuBar@cptIt,
* McsEngl.pwpfCCCTMenubar@cptIt,
* McsEngl.pwpfICCTMenubar@cptIt,
* McsEngl.pwpMenubarcnr@cptIt,
* McsEngl.phMenubar@cptIt,
* McsEngl.phMenubarcontainer@cptIt,
* McsEngl.pwp'MenuBar@cptIt,
* McsEngl.tinymce.ui.MenuBar@cptIt,

_DEFINITION:
- Creates a new menubar
===
return Toolbar#ql:tmce'toolbar#.extend({
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\ui\MenuBar.js]

pwpoICCTMenubarcnr'problem

name::
* McsEngl.pwpoICCTMenubarcnr'problem@cptIt,

pwpoICCTMenubarcnr'settings

name::
* McsEngl.pwpoICCTMenubarcnr'settings@cptIt,

pwpoICCTMenubarcnr.settings:
(new tinymce.oUi.fCCCToolbar).settings
Object {role: "toolbar", layout: "fclflow"}
defaults: Object
layout: "fclflow"
role: "menubar"
sClsContainer: "menubar"

pwpoICCTMenubarcnr'member

name::
* McsEngl.pwpoICCTMenubarcnr'member@cptIt,

pwpoICCTMenubarcnr.member:
//2015-11-01
_fGeneric: undefined
* aICrlClasses: Array[0]
.body {0: "clsLayoutFlow"}
.control {0: "clsContainer", 1: "clsBarMenu", 2: "clsBarTool", 3: "clsFirst", 4: "clsLayoutStackItem"}
* bICrlActive: false
* bICrlDisabled: false
* bICrlRendered: true
* bICrlVisible: true
* bIcCnrBody: true
* bIcCnrFixed: undefined
* nICrlHeight: 0
* nICrlWidth: 0
* oICrlAria: Object {sICrlRole: "menubar"}
* oICrlBoxBorder: Object {bottom: 1, left: 0, right: 0, top: 0}
* oICrlBoxMargin: Object {bottom: 0, left: 0, right: 0, top: 0}
* oICrlBoxPadding: Object {bottom: 0, left: 0, right: 0, top: 0}
* oICrlEventsNative: Object {click: false, focusin: false, keydown: false}
* oICrlEvtstore: Object {click: Array[1], focusin: Array[1], keydown: Array[1]}
* oICrlLayrect: Object {bICrlAutoresize: true
contentH: 159
contentW: 542
deltaH: 1
deltaW: 0
h: 160
innerH: 159
innerW: 542
maxH: 65535
maxW: 65535
minH: 160
minW: 542
scrollW: 0
startMinHeight: 0
startMinWidth: 0
w: 542
x: 0
y: 0}
* oICrlLayrectLast: Object {h: 160
w: 542
x: 0
y: 0}
* oICrlParent: fSpecific {sICrlName: "guiPlcPgmHtml", sICrlType: "fCCCPanelcnr"}
* oICrlSettings: Object {aICrlItems: Array[8]
nsICrlBorder: "0 0 1 0"
oICrlDefaults: Object
sICrlClsContainer: "clsBarMenu"
sICrlLayout: "fILFlow"
sICrlName: "guiMbcBarMenu"
sICrlRole: "menubar"
sICrlType: "fCCCTMenubarcnr"}
* oIKeyboardnavigation: oI.fIKeyboardnavigation
* oIcCnrCollection: oI.fICollection [7]
* oIcCnrLayout: fILFlow
* oIccpfltEventsRoot: fSpecific {sICrlName: "guiMbcBarMenu", sICrlType: "fCCCTMenubarcnr"}
* sICrlId: "id86"
* sICrlName: "guiMbcBarMenu"
* sICrlType: "fCCCTMenubarcnr"
* saICrlText: ""
* xICrlValue: false
* __proto__: fSpecific
===
> 2015-03-02:
Object.getOwnPropertyNames(new oPgmHtml.oI.fCCCTMenubar).sort()["_fProto", "aIcrlClasses", "bIccnrBody", "bIccnrFixed", "bIcrlActive", "bIcrlDisabled", "bIcrlVisible", "nIcrlHeight", "nIcrlWidth", "oIccnrCollection", "oIccnrLayout", "oIcrlAria", "oIcrlBindings", "oIcrlBoxBorder", "oIcrlBoxMargin", "oIcrlBoxPadding", "oIcrlEventsNative", "oIcrlSettings", "sIcrlId", "sIcrlName", "sIcrlText", "sIcrlValue"]
Object.getOwnPropertyNames((new oPgmHtml.oI.fCCCTMenubar).__proto__).sort()["oIcrlSettingsDefaults"]
===
_INSTANCE:
> Object.getOwnPropertyNames((new tinymce.ui.MenuBar)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_fixed", "_hasBody", "_height", "_id", "_items", "_layout", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.MenuBar).__proto__).sort()
["Defaults"]
> TOOLBAR: Object.getOwnPropertyNames((new tinymce.ui.MenuBar).__proto__.__proto__).sort()
["Defaults", "init", "postRender"]
> CONTAINER: Object.getOwnPropertyNames((new tinymce.ui.MenuBar).__proto__.__proto__.__proto__).sort()
["add", "append", "create", "find", "focus", "fromJSON", "init", "initLayoutRect", "innerClass", "insert", "items", "layout", "postRender", "preRender", "prepend", "recalc", "reflow", "renderHtml", "renderNew", "replace", "toJSON"]
> CONTROL: Object.getOwnPropertyNames((new tinymce.ui.MenuBar).__proto__.__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "hasClass", "height", "hide", "init", "initLayoutRect", "innerHtml", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "value", "visible", "width"]

pwpoICCTMenubarcnr'html-code

name::
* McsEngl.pwpoICCTMenubarcnr'html-code@cptIt,

_CODE.HTML.PWP:
<div id="id86" class="clsContainer clsBarMenu clsBarTool clsFirst clsLayoutStackItem" role="menubar" style="border-width: 0px 0px 1px;">
<div id="id86-body" class="clsLayoutFlow">

<div id="id87" class="clsHover clsBtn clsMenubtn clsFirst clsLayoutFlowItem clsBarToolItem" tabindex="-1" role="button" aria-haspopup="true" aria-expanded="false">
<button id="id87-open" role="presentation" type="button" tabindex="-1">
<span>File</span> <i class="clsCaret"></i></button></div>

<div id="id88" class="clsHover clsBtn clsMenubtn clsLayoutFlowItem clsBarToolItem" tabindex="-1" role="button" aria-haspopup="true" aria-expanded="false"><button id="id88-open" role="presentation" type="button" tabindex="-1"><span>Edit</span> <i class="clsCaret"></i></button></div>

<div id="id89" class="clsHover clsBtn clsMenubtn clsLayoutFlowItem clsBarToolItem clsActive" tabindex="-1" role="button" aria-haspopup="true" aria-expanded="false"><button id="id89-open" role="presentation" type="button" tabindex="-1"><span>Insert</span> <i class="clsCaret"></i></button></div>

<div id="id90" class="clsHover clsBtn clsMenubtn clsLayoutFlowItem clsBarToolItem" tabindex="-1" role="button" aria-haspopup="true" aria-expanded="false"><button id="id90-open" role="presentation" type="button" tabindex="-1"><span>View</span> <i class="clsCaret"></i></button></div>

<div id="id91" class="clsHover clsBtn clsMenubtn clsLayoutFlowItem clsBarToolItem" tabindex="-1" role="button" aria-haspopup="true" aria-expanded="false"><button id="id91-open" role="presentation" type="button" tabindex="-1"><span>Format</span> <i class="clsCaret"></i></button></div>

<div id="id92" class="clsHover clsBtn clsMenubtn clsLayoutFlowItem clsBarToolItem" tabindex="-1" role="button" aria-haspopup="true" aria-expanded="false"><button id="id92-open" role="presentation" type="button" tabindex="-1"><span>Table</span> <i class="clsCaret"></i></button></div>

<div id="id93" class="clsHover clsBtn clsMenubtn clsLayoutFlowItem clsBarToolItem" tabindex="-1" role="button" aria-haspopup="true" aria-expanded="false"><button id="id93-open" role="presentation" type="button" tabindex="-1"><span>Tools</span> <i class="clsCaret"></i></button></div>

<div id="id94" class="clsHover clsBtn clsMenubtn clsLast clsLayoutFlowItem clsBarToolItem" tabindex="-1" role="button" aria-haspopup="true" aria-expanded="false"><button id="id94-open" role="presentation" type="button" tabindex="-1"><span>Help</span> <i class="clsCaret"></i></button></div>
</div></div>

pwpo2I.fICHoverRo (ICHvr)

name::
* McsEngl.pwpo2I.fICHoverRo (ICHvr)@cptIt,
* McsEngl.pwpfICHoverRo@cptIt,
=== _OLD:
* McsEngl.pwpfICHoverFtr@old,
* McsEngl.oPgmHtml.oI.Control.Widget@old,
* McsEngl.pwpfICHover@old,
* McsEngl.pwpfCCWidget@old,
* McsEngl.pwpfICWidget@old,
* McsEngl.pwpHover-control@old, {2015-10-18}
* McsEngl.pwpWidget@old,
* McsEngl.pwp'fCCWidget@old,
* McsEngl.pwp'Widget@old,
* McsEngl.tinymce.ui.Widget@old,

* McsEngl.phIcwgt@old,

oICHover

_GENERIC:
* oICrl#linkidPwpoICrl#ql:idPwpoICrl##

_DEFINITION:
Hover-control is a-control thas has a-tooltip|hint.
[hmnSngo.2015-10-18]
===
- Widget base class a widget is a control that has a tooltip and some basic states
===
var Widget = Control#ql:tmce'control#.extend({
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\ui\Widget.js]

pwpoICHvr'member

name::
* McsEngl.pwpoICHvr'member@cptIt,

pwpoICHover.MEMBER:
> pwp.0-90v 2016-05-06: Object.getOwnPropertyNames(oPgmWpg.o2I.fICHoverRo()).sort()
["pwpaICrlClasses", "pwpasICrlTxt", "pwpbICrlActive", "pwpbICrlDisabled", "pwpbICrlFocus", "pwpbICrlVisible", "pwpbTooltips", "pwpfICHvrTooltipRo", "pwpfICrlActiveRbo", "pwpfICrlDisabledRbo", "pwpfICrlInit", "pwpfICrlRemove", "pwpfICrlRenderAfterRo", "pwpnICrlHeight", "pwpnICrlWidth", "pwpoICrlAria", "pwpoICrlBoxBorder", "pwpoICrlBoxMargin", "pwpoICrlBoxPadding", "pwpoICrlCfg", "pwpsICrlId", "pwpsICrlName", "pwpxICrlValue"]
===
> 2015-03-02:
Object.getOwnPropertyNames(new oPgmHtml.oI.fCCWidget).sort()["_fProto", "aIcrlClasses", "bCanFocus", "bIcrlActive", "bIcrlDisabled", "bIcrlVisible", "nIcrlHeight", "nIcrlWidth", "oIcrlAria", "oIcrlBindings", "oIcrlBoxBorder", "oIcrlBoxMargin", "oIcrlBoxPadding", "oIcrlEventsNative", "oIcrlSettings", "sIcrlId", "sIcrlName", "sIcrlText", "sIcrlValue"]
> Object.getOwnPropertyNames((new oPgmHtml.oI.fCCWidget).__proto__).sort()
["fIcrlBActive", "fIcrlDisabled", "fIcrlRemove", "fIcrlRenderAfter", "fIcwgtTooltip", "init", "oIcwgtTooltip"]
===
> Object.getOwnPropertyNames((new tinymce.ui.Widget)).sort()
* pwp'Uactive,
* pwp'Uaria,
* pwp'UborderBox,
* pwp'Uclasses,
* pwp'Udisabled,
* pwp'UeventDispatcher,
* pwp'Uheight,
* pwp'Uid,
* pwp'UmarginBox,
* pwp'Uname,
* pwp'UnativeEvents,
* pwp'UpaddingBox,
* pwp'Usuper,
* pwp'Utext,
* pwp'Utitle,
* pwp'Uvalue,
* pwp'Uvisible,
* pwp'Uwidth,
* pwp'canFocus,
* pwp'settings,
> Object.getOwnPropertyNames((new tinymce.ui.Widget).__proto__).sort()
* pwp'active,
* pwp'disabled,
* pwp'init,
* pwp'postRender,
* pwp'remove,
* pwpfIcwgtTooltip (pwp'tooltip),
===
> Object.getOwnPropertyNames((new tinymce.ui.Widget)).sort()
["_active", "_aria", "_borderBox", "_classes", "_disabled", "_eventDispatcher", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "canFocus", "settings"]
> Object.getOwnPropertyNames((new tinymce.ui.Widget).__proto__).sort()
["active", "disabled", "init", "postRender", "remove", "tooltip"]
> fCControl.prototype#ql:tmce'occontrol#:
Object.getOwnPropertyNames((new tinymce.ui.Widget).__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "getRoot", "hasClass", "hasEventListeners", "height", "hide", "init", "initLayoutRect", "innerHtml", "isRtl", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parentsAndSelf", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "translate", "value", "visible", "width"]
> Object.getOwnPropertyNames((new tinymce.ui.Widget).__proto__.__proto__.__proto__).sort()
["constructor"]
> Object.getOwnPropertyNames((new tinymce.ui.Widget).__proto__.__proto__.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

pwpoICHvr'fICrlInit

name::
* McsEngl.pwpoICHvr'fICrlInit@cptIt,

pwpoICHover.fICrlInit:
1) initializes control-settings#ql:phloicontrol'ficrlinit#:
1) oIControlThis.oICrlSettings = fUTolObtExtend({}, oIControlThis.oICrlSettingsDefaults, oICrlSettingsIn);
2) oIControlThis.sICrlId = oCDUtil.fDUtlUniqueId();
-) oIControlThis.aICrlClasses = [];
-) oIControlThis.bICrlActive //config or false
-) oIControlThis.bICrlDisabled //config or false
-) oIControlThis.bICrlVisible //config or true
-) oIControlThis.nICrlWidth = 0;
-) oIControlThis.nICrlHeight = 0;
-) oIControlThis.oICrlAria = {sICrlRole: oIControlThis.oICrlSettings.sICrlRole};
-) oIControlThis.oICrlBoxBorder =
-) oIControlThis.oICrlBoxPadding =
-) oIControlThis.oICrlBoxMargin
-) oIControlThis.saICrlText = '';
-) oIControlThis.sICrlName = '';
-) oIControlThis.xICrlValue //config or false
===
- oICWidgetThis.bICrlFocus = true;
- oICWidgetThis.fICrlAria('label', oICrlSettingsIn.sICrlTooltip)
- oIControlThis.saICrlText = sICrlTooltip
- oICHoverThis.fICrlEvtfunctionAdd('mouseenter,mouseleave'

SPECIFIC

_SPECIFIC:
* pwpWidget.Button#ql:tmce'button#
* pwpWidget.Checkbox#ql:tmce'checkbox#
* pwpWidget.ComboBox#ql:tmce'combobox#
* pwpWidget.Iframe#ql:tmce'iframe#
* pwpWidget.Label#ql:tmce'label#
* pwpWidget.MenuItem#ql:tmce'menuitem#
* pwpWidget.ResizeHandle#ql:tmce'resizehandle#
* pwpWidget.Spacer#ql:tmce'spacer#
* pwpWidget.TextBox#ql:tmce'textbox#
===
pwp'Widget.Button
pwp'Widget.Checkbox
pwp'Widget.ComboBox
pwp'Widget.Iframe
pwp'Widget.Label
pwp'Widget.MenuItem
pwp'Widget.ResizeHandle
pwp'Widget.Spacer
pwp'Widget.TextBox

pwpo2I.fICHButtonFtr (IchBtn)

name::
* McsEngl.pwpo2I.fICHButtonFtr (IchBtn)@cptIt,
* McsEngl.pwpfICHButtonFtr@cptIt,
* McsEngl.oPgmHtml.oI.Control.Widget.Button@cptIt,
* McsEngl.pwpfCCWButton@cptIt,
* McsEngl.pwpfICWButton@cptIt,
* McsEngl.phButton@cptIt,
* McsEngl.pwp'Button@cptIt,
* McsEngl.pwp'fCCWButton@cptIt,
* McsEngl.tinymce.ui.Button@cptIt,

* McsEngl.phIcwbtn@cptIt,

pwpoICWButton'GENERIC:
* Widget#ql:tmce'widget#

_DEFINITION:
- This class is used to create buttons
return Widget.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Button.js]

pwpoICWButton.MEMBER:
> 2015-12-31:
Object.getOwnPropertyNames(oPgmWpg.o2I.fICHButtonFtr()).sort()
["aICrlClasses", "bICrlActive", "bICrlDisabled", "bICrlFocus", "bICrlVisible", "fICrlInit", "fICrlRepaint", "fICrlToHtml", "nICrlHeight", "nICrlWidth", "oICrlAria", "oICrlBoxBorder", "oICrlBoxMargin", "oICrlBoxPadding", "oICrlCfg", "oICrlCfgDefaults", "sICrlId", "sICrlName", "saICrlText", "xICrlValue"]
===
> 2015-03-02:
Object.getOwnPropertyNames(new oPgmHtml.oI.fCCWButton).sort()["_fProto", "aIcrlClasses", "bCanFocus", "bIcrlActive", "bIcrlDisabled", "bIcrlVisible", "nIcrlHeight", "nIcrlWidth", "oIcrlAria", "oIcrlBindings", "oIcrlBoxBorder", "oIcrlBoxMargin", "oIcrlBoxPadding", "oIcrlEventsNative", "oIcrlSettings", "sIcrlId", "sIcrlName", "sIcrlText", "sIcrlValue"]
> Object.getOwnPropertyNames((new oPgmHtml.oI.fCCWButton).__proto__).sort()["fIcrlRepaint", "fIcrlToHtml", "init", "oIcrlSettingsDefaults"]
===
Object.getOwnPropertyNames(new tinymce.oUi.Button).sort()
["_active", "_bTitle", "_bindings", "_borderBox", "_classes", "_disabled", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_oAria", "_oProto", "_paddingBox", "_text", "_value", "_visible", "_width", "canFocus", "settings"]
Object.getOwnPropertyNames(tinymce.oUi.Button.prototype).sort()
["init", "oDefaults", "renderHtml", "repaint"]
===
> Object.getOwnPropertyNames((new tinymce.ui.Button)).sort()
TypeError: Cannot read property 'size' of undefined //4.0.28
needs
     settings = self.settings;//4.0.28
on init
===
Object.getOwnPropertyNames((new tinymce.ui.Button)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "canFocus", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.Button).__proto__).sort()
["Defaults", "init", "renderHtml", "repaint"]

> WIDGET: Object.getOwnPropertyNames((new tinymce.ui.Button).__proto__.__proto__).sort()
["active", "disabled", "init", "postRender", "remove", "tooltip"]
> CONTROL: Object.getOwnPropertyNames((new tinymce.ui.Button).__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "hasClass", "height", "hide", "init", "initLayoutRect", "innerHtml", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "value", "visible", "width"]

pwp'button'SETTINGS:
cmd: 'mceDirectionLTR',
icon: 'anchor',
tooltip: 'Anchor',
onclick: fShowDialog,
onPostRender: function() {
shortcut: 'Ctrl+Alt+F',
stateSelector: 'a:not([href])'

pwpoICHButton'fICrlInit

name::
* McsEngl.pwpoICHButton'fICrlInit@cptIt,

pwpoICHButton.fICrlInit:
- oICHButtonThis.fICrlEvtfunctionAdd('click,mousedown'
- initializes Hover-settings:
- oICHButtonThis.fICrlClassAdd(oICrlSettingsIn.sICrlSubtype);
- oICHButtonThis.fICrlClassAdd('clsBtn-' + oICrlSettingsIn.nsICrlSize);
===
2) initializes Hover-control-settings:
- oICWidgetThis.bICrlFocus = true;
- oICWidgetThis.fICrlAria('label', oICrlSettingsIn.sICrlTooltip)
- oIControlThis.saICrlText = sICrlTooltip
- oICHoverThis.fICrlEvtfunctionAdd('mouseenter,mouseleave'
===
1) initializes control-settings#ql:phloicontrol'ficrlinit#:
1) oIControlThis.oICrlSettings = fUTolObtExtend({}, oIControlThis.oICrlSettingsDefaults, oICrlSettingsIn);
2) oIControlThis.sICrlId = oCDUtil.fDUtlUniqueId();
-) oIControlThis.aICrlClasses = [];
-) oIControlThis.bICrlActive //config or false
-) oIControlThis.bICrlDisabled //config or false
-) oIControlThis.bICrlVisible //config or true
-) oIControlThis.nICrlWidth = 0;
-) oIControlThis.nICrlHeight = 0;
-) oIControlThis.oICrlAria = {sICrlRole: oIControlThis.oICrlSettings.sICrlRole};
-) oIControlThis.oICrlBoxBorder =
-) oIControlThis.oICrlBoxPadding =
-) oIControlThis.oICrlBoxMargin
-) oIControlThis.saICrlText = '';
-) oIControlThis.sICrlName = '';
-) oIControlThis.xICrlValue //config or false

pwpoICHButton'html-code

name::
* McsEngl.pwpoICHButton'html-code@cptIt,

pwp'button'html:
<div id="mce_70" class="cls-widget cls-btn cls-first" tabindex="-1" role="button" aria-labeledby="mce_70" aria-label="Align left">
<button role="presentation" type="button" tabindex="-1">
<i class="cls-ico cls-i-alignleft"></i>
</button>
</div>
===
<div id="mce_74" class="cls-widget cls-btn cls-splitbtn cls-menubtn cls-first cls-active" role="splitbutton" aria-labeledby="mce_74" aria-label="Bullet list" aria-haspopup="true" aria-pressed="true">
<button type="button" hidefocus="" tabindex="-1"><i class="cls-ico cls-i-btnBullist"></i></button>
<button type="button" class="cls-open" hidefocus="" tabindex="-1"> <i class="cls-caret"></i></button></div>

SPECIFIC

pwpoICHButton.SPECIFIC:
pwp'Button.MenuButton
pwp'Button.PanelButton

pwpo2I.fICHBMenubtnFtr (IchbΜnb)

name::
* McsEngl.pwpo2I.fICHBMenubtnFtr (IchbΜnb)@cptIt,
* McsEngl.pwpfICHBMenubtnFtr@cptIt,
* McsEngl.oPgmHtml.oI.Control.Widget.Button.MenuButton@cptIt,
* McsEngl.phMenubutton@cptIt,
* McsEngl.phMenuwidget@cptIt,
* McsEngl.pwpfCCWBMenubutton@cptIt,
* McsEngl.pwpfICWBMenubutton@cptIt,
* McsEngl.pwp'fCCWButtonMenu@cptIt,
* McsEngl.pwp'MenuButton@cptIt,
* McsEngl.tinymce.ui.MenuButton@cptIt,

* McsEngl.phIcwbmnu@cptIt,

_DEFINITION:
- Creates a new menu button
var MenuButton = Button.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\MenuButton.js]

pwpoICHBMenubtn'member

name::
* McsEngl.pwpoICHBMenubtn'member@cptIt,

pwpoCCWBMenu.member:
> 2015-03-02:
Object.getOwnPropertyNames(new oPgmHtml.oI.fCCWBMenu).sort()["_fProto", "_renderOpen", "aIcrlClasses", "bCanFocus", "bIcrlActive", "bIcrlDisabled", "bIcrlVisible", "hasPopup", "nIcrlHeight", "nIcrlWidth", "oIcrlAria", "oIcrlBindings", "oIcrlBoxBorder", "oIcrlBoxMargin", "oIcrlBoxPadding", "oIcrlEventsNative", "oIcrlSettings", "sIcrlId", "sIcrlName", "sIcrlText", "sIcrlValue"]Object.getOwnPropertyNames((new oPgmHtml.oI.fCCWBMenu).__proto__).sort()["activeMenu", "fIcrlRemove", "fIcrlRenderAfter", "fIcrlText", "fIcrlToHtml", "hideMenu", "init", "showMenu"]
===
> Object.getOwnPropertyNames((new tinymce.ui.MenuButton)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_renderOpen", "_super", "_text", "_title", "_value", "_visible", "_width", "canFocus", "hasPopup", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.MenuButton).__proto__).sort()
["activeMenu", "hideMenu", "init", "postRender", "remove", "renderHtml", "showMenu", "text"]

Object.getOwnPropertyNames((new tinymce.ui.MenuButton).__proto__.__proto__).sort()
["Defaults", "init", "renderHtml", "repaint"]
Object.getOwnPropertyNames((new tinymce.ui.MenuButton).__proto__.__proto__.__proto__).sort()
["active", "disabled", "init", "postRender", "remove", "tooltip"]
Object.getOwnPropertyNames((new tinymce.ui.MenuButton).__proto__.__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "hasClass", "height", "hide", "init", "initLayoutRect", "innerHtml", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "value", "visible", "width"]

pwpoICHBMenubtn'fICrlInit

name::
* McsEngl.pwpoICHBMenubtn'fICrlInit@cptIt,

pwpoICHBMenubtn.fICrlInit:
- initializes Button settings:
- oICHBMenubtnThis.fICrlClassAdd('clsMenubtn');
- oICHBMenubtnThis.fICrlClassAdd('clsWidthFixed'); IF bICrlWidthFixed
- oICHBMenubtnThis.fICrlAria('haspopup', true);
- oICHBMenubtnThis.bICrlPopup = true;

pwpoICHBMenubtn'html-code

name::
* McsEngl.pwpoICHBMenubtn'html-code@cptIt,

pwp'menubutton'html:
<div id="mce_64" class="cls-widget cls-btn cls-menubtn cls-first" tabindex="-1" role="button" aria-haspopup="true" aria-expanded="true">
<button id="mce_64-open" role="presentation" type="button" tabindex="-1"><span>Formats</span> <i class="cls-caret"></i></button>
</div>
===
<div id="mce_94" class="cls-widget cls-btn cls-menubtn cls-flow-layout-item cls-resizehandle cls-last" tabindex="-1" role="button" aria-haspopup="true">
<button id="mce_94-open" role="presentation" type="button" tabindex="-1"><span> </span> <i class="cls-caret"></i></button></div>

SPECIFIC

pwpoICHBMenubtn.SPECIFIC:
pwp'MenuButton.ListBox
pwp'MenuButton.SplitButton
====
* 'Formats'

pwpo2I.fICHBMListbtnFtr (IchbmLbn)

name::
* McsEngl.pwpo2I.fICHBMListbtnFtr (IchbmLbn)@cptIt,
* McsEngl.fICHBMListbtnFtr@cptIt,
* McsEngl.oPgmHtml.oI.Control.Widget.Button.MenuButton.ListBox@cptIt,
* McsEngl.pwpfCCWBMListbox@cptIt,
* McsEngl.pwpfICWBMListbox@cptIt,
* McsEngl.pwpguiListbox@cptIt,
* McsEngl.pwpListbtn@cptIt, {2015-06-18}
* McsEngl.pwpListbox@cptIt,
* McsEngl.pwp'fCCWButtonMenuListbox@cptIt,
* McsEngl.pwp'ListBox@cptIt,
* McsEngl.tinymce.ui.ListBox@cptIt,

* McsEngl.pwpLbx@cptIt,
* McsEngl.phIcwbmLbx@cptIt,

_DEFINITION:
A gui with a drop down list to choose one item.
===
- Creates a new list box control
return MenuButton#ql:tmce'menubutton#.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\ListBox.js]

pwpoICHBMListbtn'problem

name::
* McsEngl.pwpoICHBMListbtn'problem@cptIt,

2015-11-05:
choosing a value, selects the default

pwpoICHBMListbtn'member

name::
* McsEngl.pwpoICHBMListbtn'member@cptIt,

pwpoICWBMListbtn.MEMBER:
//2015-11-04
* _fGeneric: undefined
* aICrlClasses: Array[0]
.control[0: "clsHover"
1: "clsBtn"
2: "clsMenubtn"
3: "clsListbutton"
4: "clsLast"
5: "clsLayoutAbsItem"]
* aICrlValues: Array[3] [{aoICrlMenu: undefined, saICrlText: "synagonism", xICrlValue: "http://synagonism.net"}]
* bICrlActive: false
* bICrlDisabled: false
* bICrlFocus: true
* bICrlPopup: true
* bICrlRenderOpen: true
* bICrlRendered: true
* bICrlVisible: true
* nICrlHeight: 0
* nICrlWidth: 0
* oICCPFMenucnr: fSpecific
* oICrlAria: Object {expanded: true
haspopup: true
role: "button"
sICrlRole: "button"}
* oICrlBoxBorder: Object
* oICrlBoxMargin: Object
* oICrlBoxPadding: Object
* oICrlEventsNative: Object {click: false
mouseenter: false}
* oICrlEvtstore: Object {click: Array[3]
mousedown: Array[1]
mouseenter: Array[1]
select: Array[2]}
* oICrlLayrect: Object
* oICrlLayrectLast: null
* oICrlLayrectRepaintLast: Object
* oICrlParent: fICCFormitemcnr
* oICrlSettings: Object {aICrlValues: Array[3]
aoICrlMenu: Array[3]
nICrlFlex: 1
onselect: fOnselectUrllist(oEvtIn)
sICrlClasses: "clsHover clsBtn"
sICrlLabel: "Url-list"
sICrlRole: "button"
sICrlType: "fCCHBMListbtn"
saICrlText: "None"}
* oIccpfltEventsRoot: fSpecific
* sICrlId: "id103"
* sICrlName: ""
* sICrlType: "fCCHBMListbtn"
* saICrlText: "synagonism"
* xICrlValue: fICHMenuitem
* __proto__: fSpecific
===
* 2015-03-02:
Object.getOwnPropertyNames(new oPgmHtml.oI.fCCWBMListbox).sort()["_fProto", "_renderOpen", "_values", "aIcrlClasses", "bCanFocus", "bIcrlActive", "bIcrlDisabled", "bIcrlVisible", "hasPopup", "nIcrlHeight", "nIcrlWidth", "oIcrlAria", "oIcrlBindings", "oIcrlBoxBorder", "oIcrlBoxMargin", "oIcrlBoxPadding", "oIcrlEventsNative", "oIcrlSettings", "sIcrlId", "sIcrlName", "sIcrlText", "sIcrlValue"]
> Object.getOwnPropertyNames((new oPgmHtml.oI.fCCWBMListbox).__proto__).sort()["fIcrlValue", "init"]
===
_INSTANCE:
Object.getOwnPropertyNames((new tinymce.ui.ListBox)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_renderOpen", "_super", "_text", "_title", "_value", "_values", "_visible", "_width", "canFocus", "hasPopup", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.ListBox).__proto__).sort()
["init", "value"]
Object.getOwnPropertyNames((new tinymce.ui.ListBox).__proto__.__proto__).sort()
["activeMenu", "hideMenu", "init", "postRender", "remove", "renderHtml", "showMenu", "text"]

pwpoICHBMListbtn'html-code

name::
* McsEngl.pwpoICHBMListbtn'html-code@cptIt,

_CODE.HTML.PWP:
//pgnLink url list
<div id="id103" class="clsHover clsBtn clsMenubtn clsListbutton clsLast clsLayoutAbsItem" tabindex="-1" role="button" aria-haspopup="true" aria-expanded="true" style="left: 115px; top: 0px; width: 65px; height: 29px;">
<button id="id103-open" role="presentation" type="button" tabindex="-1" style="height: 100%; width: 100%;">
<span>synagonism</span> <i class="clsCaret"></i>
</button>
</div>
===
<div id="id131" class="clsWidget clsBtn clsMenubtn clsListbox clsLast clsLayoutAbsItem" tabindex="-1" aria-sicrlrole="button" aria-haspopup="true" role="button" aria-expanded="true" style="left: 115px; top: 0px; width: 65px; height: 29px;">
<button id="id131-open" role="presentation" type="button" tabindex="-1" style="height: 100%; width: 100%;">
<span>None</span> <i class="clsCaret"></i>
</button>
</div>
===
<div id="mce_84" class="mce-widget mce-btn mce-menubtn mce-listbox mce-last mce-abs-layout-item" tabindex="-1" role="button" aria-haspopup="true" aria-expanded="true" style="left: 115px; top: 0px; width: 295px; height: 29px;">
<button id="mce_84-open" role="presentation" type="button" tabindex="-1" style="height: 100%; width: 100%;">
<span>None</span>
<i class="mce-caret"></i>
</button>
</div>

SPECIFIC

pwpoICHBMListbtn:
* 'Font Family'
* 'Font Sizes'
* guiLbnTemplate

pwpFont_Family:
* aICrlValues: [ {bActive: false, fsICrlTextstyle: "font-family:andale mono,times", saICrlText: {sRaw: "Andale Mono"}, xICrlValue: "andale mono,times"}, ...]
* bICrlWidthFixed: true
* sICrlType: "fCCHBMListbtn"
* saICrlText: "Font Family"

pwpFont_Sizes:
* aICrlValues: [ {bActive: false, saICrlText: "8pt", xICrlValue: "8pt"}, ...]
* bICrlWidthFixed: true
* sICrlType: "fCCHBMListbtn"
* saICrlText: "Font Sizes"

pwpGuiLbnTemplate:
* aICrlValues: [ {bActive: true, bICrlSelected: true, saICrlText: "My name", xICrlValue: {content: "Kaseluris.Nikos.1959<br />", description: "Inserts my name", url: undefined}, ...]
* sICrlName: "guiLbnTemplate"
* sICrlType: "fCCHBMListbtn"

pwpGuiLbnLinkTarget:
* aICrlValues: [{saICrlText: "None", xICrlValue: ""},...]
sICrlLabel: "Target-list"
sICrlName: "guiLbnLinkTarget"
sICrlType: "fCCHBMListbtn"

pwpGuiLbnLinkUrl:
* aICrlValues: [{aoICrlMenu: undefined, saICrlText: "synagonism", xICrlValue: "http://synagonism.net"}, ...]
* sICrlLabel: "Url-list"
* sICrlName: "guiLbnLinkUrl"
* sICrlType: "fCCHBMListbtn"

pwpo2I.fICHBMSplitbtnFtr (IchbmSpt)

name::
* McsEngl.pwpo2I.fICHBMSplitbtnFtr (IchbmSpt)@cptIt,
* McsEngl.pwpfICHBMSplitbtnFtr@cptIt,
* McsEngl.oPgmHtml.oI.Control.Widget.Button.MenuButton.SplitButton@cptIt,
* McsEngl.pwpfCCWBMSplit@cptIt,
* McsEngl.pwpfICWBMSplit@cptIt,
* McsEngl.pwpSplitbtn@cptIt,
* McsEngl.phSplitbutton@cptIt,
* McsEngl.pwp'fCCWButtonMenuSplit@cptIt,
* McsEngl.pwp'SplitButton@cptIt,
* McsEngl.tinymce.ui.SplitButton@cptIt,

* McsEngl.phIcwbmspt@cptIt,

_DEFINITION:
Menubutton like 'color'.
===
- Creates a split button
return MenuButton#ql:tmce'menubutton#.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\SplitButton.js]

pwpoICWBMSplit.MEMBER:
> 2015-03-02:
Object.getOwnPropertyNames(new oPgmHtml.oI.fCCWBMSplit).sort()["_fProto", "_renderOpen", "aIcrlClasses", "bCanFocus", "bIcrlActive", "bIcrlDisabled", "bIcrlVisible", "hasPopup", "nIcrlHeight", "nIcrlWidth", "oIcrlAria", "oIcrlBindings", "oIcrlBoxBorder", "oIcrlBoxMargin", "oIcrlBoxPadding", "oIcrlEventsNative", "oIcrlSettings", "sIcrlId", "sIcrlName", "sIcrlText", "sIcrlValue"]
Object.getOwnPropertyNames((new oPgmHtml.oI.fCCWBMSplit).__proto__).sort()
["activeMenu", "fIcrlRenderAfter", "fIcrlRepaint", "fIcrlToHtml", "oIcrlSettingsDefaults"]
===
_INSTANCE:
> Object.getOwnPropertyNames((new tinymce.ui.SplitButton)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_renderOpen", "_super", "_text", "_title", "_value", "_visible", "_width", "canFocus", "hasPopup", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.SplitButton).__proto__).sort()
["Defaults", "activeMenu", "postRender", "renderHtml", "repaint"]
Object.getOwnPropertyNames((new tinymce.ui.SplitButton).__proto__.__proto__).sort()
["activeMenu", "hideMenu", "init", "postRender", "remove", "renderHtml", "showMenu", "text"]
===
> Object.getOwnPropertyNames((new tinymce.ui.SplitButton)).sort()
TypeError: Cannot read property 'tooltip' of undefined //4.0.7

_SETTINGS:
* menu: an array of choices.

pwp'splitbutton'html:
<div id="mce_72" class="cls-widget cls-btn cls-splitbtn cls-menubtn cls-first" role="splitbutton" aria-labeledby="mce_72" aria-label="Bullet list" aria-haspopup="true" aria-expanded="true">
<button type="button" hidefocus="" tabindex="-1"><i class="cls-ico cls-i-btnBullist"></i></button>
<button type="button" class="cls-open" hidefocus="" tabindex="-1"> <i class="cls-caret"></i></button></div>
?
<div id="mce_20" class="cls-flow-layout-item cls-resizehandle cls-last">
<button type="button" hidefocus="" tabindex="-1"></button>
<button type="button" class="cls-open" hidefocus="" tabindex="-1"> <i class="cls-caret"></i></button></div>

pwpo2I.fICHBPanelbtn (IchbPnl)

name::
* McsEngl.pwpo2I.fICHBPanelbtn (IchbPnl)@cptIt,
* McsEngl.oPgmHtml.oI.Control.Widget.Button.PanelButton@cptIt,
* McsEngl.pwpfCCWBPanel@cptIt,
* McsEngl.pwpfICWBPanel@cptIt,
* McsEngl.pwpfPanelbtn@cptIt,
* McsEngl.phPanelbutton@cptIt,
* McsEngl.phPanelwidget@cptIt,
* McsEngl.pwp'fCCWButtonPanel@cptIt,
* McsEngl.pwp'PanelButton@cptIt,
* McsEngl.tinymce.ui.PanelButton@cptIt,

* McsEngl.phIcwbpnl@cptIt,

_DEFINITION:
- Creates a new panel button
return Button.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\PanelButton.js]

pwpoICWBPanel.MEMBER:
> 2015-03-02:
Object.getOwnPropertyNames(new oPgmHtml.oI.fCCWBPanel).sort()["_fProto", "aIcrlClasses", "bCanFocus", "bIcrlActive", "bIcrlDisabled", "bIcrlVisible", "nIcrlHeight", "nIcrlWidth", "oIcrlAria", "oIcrlBindings", "oIcrlBoxBorder", "oIcrlBoxMargin", "oIcrlBoxPadding", "oIcrlEventsNative", "oIcrlSettings", "sIcrlId", "sIcrlName", "sIcrlText", "sIcrlValue"]
Object.getOwnPropertyNames((new oPgmHtml.oI.fCCWBPanel).__proto__).sort()
["fIcrlRenderAfter", "hidePanel", "showPanel"]
===
_INSTANCE:
Object.getOwnPropertyNames((new tinymce.ui.PanelButton)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "canFocus", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.PanelButton).__proto__).sort()
["hidePanel", "postRender", "showPanel"]
Object.getOwnPropertyNames((new tinymce.ui.PanelButton).__proto__.__proto__).sort()
["Defaults", "init", "renderHtml", "repaint"]

pwpo2I.fICHBPColorbtnFtr (IchbpClr)

name::
* McsEngl.pwpo2I.fICHBPColorbtnFtr (IchbpClr)@cptIt,
* McsEngl.pwpfICHBPColorbtnFtr@cptIt,
* McsEngl.oPgmHtml.oI.Control.Widget.Button.PanelButton.ColorButton@cptIt,
* McsEngl.pwpColorbtn@cptIt,
* McsEngl.phColorbutton@cptIt,
* McsEngl.pwpfCCWBPColor@cptIt,
* McsEngl.pwpfICWBPColor@cptIt,
* McsEngl.pwp'ColorButton@cptIt,
* McsEngl.pwp'fCCWButtonPanelColor@cptIt,
* McsEngl.tinymce.ui.ColorButton@cptIt,

* McsEngl.phIcwbpclr@cptIt,

_DEFINITION:
- This class creates a color button control

pwpoICWBPColor.MEMBER:
> 2015-03-02:
Object.getOwnPropertyNames(new oPgmHtml.oI.fCCWBPColor).sort()["_fProto", "aIcrlClasses", "bCanFocus", "bIcrlActive", "bIcrlDisabled", "bIcrlVisible", "nIcrlHeight", "nIcrlWidth", "oIcrlAria", "oIcrlBindings", "oIcrlBoxBorder", "oIcrlBoxMargin", "oIcrlBoxPadding", "oIcrlEventsNative", "oIcrlSettings", "sIcrlId", "sIcrlName", "sIcrlText", "sIcrlValue"]
Object.getOwnPropertyNames((new oPgmHtml.oI.fCCWBPColor).__proto__).sort()
["color", "fIcrlRenderAfter", "fIcrlToHtml", "init"]
===
_INSTANCE:
Object.getOwnPropertyNames((new tinymce.ui.ColorButton)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "canFocus", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.ColorButton).__proto__).sort()
["color", "init", "postRender", "renderHtml"]
Object.getOwnPropertyNames((new tinymce.ui.ColorButton).__proto__.__proto__).sort()
["hidePanel", "postRender", "showPanel"]

pwpo2I.fICHCheckboxFtr (IchCkx)

name::
* McsEngl.pwpo2I.fICHCheckboxFtr (IchCkx)@cptIt,
* McsEngl.pwpfICHCheckbxFtr@cptIt,
* McsEngl.oPgmHtml.oI.Control.Widget.Checkbox@cptIt,
* McsEngl.phCheckbox@cptIt,
* McsEngl.pwpfCCWCheckbox@cptIt,
* McsEngl.pwpfICWCheckbox@cptIt,
* McsEngl.pwpguiCheckbox@cptIt,
* McsEngl.pwp'Checkbox@cptIt,
* McsEngl.pwp'fCCWCheckbox@cptIt,
* McsEngl.tinymce.ui.Checkbox@cptIt,

* McsEngl.pwpChx@cptIt,

_DEFINITION:
- This control creates a custom checkbox
return Widget.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Checkbox.js]

pwpoICHCheckbox'settings

name::
* McsEngl.pwpoICHCheckbox'settings@cptIt,

Table-caption:
{sICrlType: 'fCCHCheckbox', sICrlLabel: 'Caption', sICrlName: 'caption'},

Search:
{sICrlType: 'fCCHCheckbox', sICrlName: 'guiCkxSearchCase', saICrlText: 'Match case', sICrlLabel: ' '},
{sICrlType: 'fCCHCheckbox', sICrlName: 'guiCkxSearchWholeword', saICrlText: 'Whole words', sICrlLabel: ' '}

pwpoICHCheckbox'member

name::
* McsEngl.pwpoICHCheckbox'member@cptIt,

pwpoICWCheckbox.MEMBER:
//pgnImage 2015-11-02
* _fGeneric: undefined
* aICrlClasses: Array[0] [0: "clsCheckbox"
1: "clsLast"
2: "clsLayoutAbsItem"
3: "clsChecked"]
* bICrlActive: false
* bICrlDisabled: false
* bICrlFocus: true
* bICrlRendered: true
* bICrlVisible: true
* bIcwCkxChecked: true
* nICrlHeight: 0
* nICrlWidth: 0
* oICrlAria: Object {checked: true, sICrlRole: "checkbox"}
* oICrlBoxBorder: Object
* oICrlBoxMargin: Object
* oICrlBoxPadding: Object
* oICrlEventsNative: Object {click: false}
* oICrlEvtstore: Object
* oICrlLayrect: Object
* oICrlLayrectLast: Object
* oICrlLayrectRepaintLast: Object
* oICrlParent: fSpecific {fCCContainer}
* oICrlSettings: Object {bIcwCkxChecked: true
sICrlClasses: "clsCheckbox"
sICrlName: "guiCkxImgConstrain"
sICrlRole: "checkbox"
sICrlType: "fCCHCheckbox"
saICrlText: "Constrain proportions"}
* oIccpfltEventsRoot: fSpecific
* sICrlId: "id141"
* sICrlName: "guiCkxImgConstrain"
* sICrlType: "fCCHCheckbox"
* saICrlText: "Constrain proportions"
* xICrlValue: false
* __proto__: fSpecific
===
> oPgmHtml.oCStoreId_Crlobt.id133
fSpecific {…}
* _fGeneric: undefined
* aICrlClasses: Array[0]
.control ["clsCheckbox", "clsLast", "clsLayoutAbsItem", "clsChecked"]
* bICrlActive: false
* bICrlDisabled: false
* bICrlFocus: true
* bICrlRendered: true
* bICrlVisible: true
* bIcwCkxChecked: true
* nICrlHeight: 0
* nICrlWidth: 0
* oICrlAria: Object {checked: true, sICrlRole: "checkbox"}
* oICrlBoxBorder: Object
* oICrlBoxMargin: Object
* oICrlBoxPadding: Object
* oICrlEventsNative: Object
* oICrlEvtstore: Object
* oICrlLayrect: Object
* oICrlLayrectLast: Object
* oICrlLayrectRepaintLast: Object
* oICrlParent: fSpecific
* oICrlSettings: Object
* oIccpfltEventsRoot: fSpecific
* sICrlId: "id133"
* sICrlName: "guiCkxSearchCase"
* sICrlType: "fCCHCheckbox"
* saICrlText: "Match case"
* xICrlValue: false
* __proto__: fSpecific
===
> 2015-03-03:
Object.getOwnPropertyNames(new oPgmHtml.oI.fCCWCheckbox).sort()
["_fProto", "aIcrlClasses", "bCanFocus", "bIcrlActive", "bIcrlDisabled", "bIcrlVisible", "bIcwchxChecked", "nIcrlHeight", "nIcrlWidth", "oIcrlAria", "oIcrlBindings", "oIcrlBoxBorder", "oIcrlBoxMargin", "oIcrlBoxPadding", "oIcrlEventsNative", "oIcrlSettings", "sIcrlId", "sIcrlName", "sIcrlText", "sIcrlValue"]
Object.getOwnPropertyNames((new oPgmHtml.oI.fCCWCheckbox).__proto__).sort()["fIcrlToHtml", "fIcrlValue", "fIcwchxChecked", "init", "oIcrlSettingsDefaults"]Object.getOwnPropertyNames((new oPgmHtml.oI.fCCWCheckbox).__proto__.__proto__).sort()["fIcrlBActive", "fIcrlDisabled", "fIcrlRemove", "fIcrlRenderAfter", "fIcwgtTooltip", "init", "oIcwgtTooltip"]
===
_INSTANCE:
> Object.getOwnPropertyNames((new tinymce.ui.Checkbox)).sort()
["_active", "_aria", "_borderBox", "_checked", "_classes", "_disabled", "_eventDispatcher", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "canFocus", "settings"]
> Object.getOwnPropertyNames((new tinymce.ui.Checkbox).__proto__).sort()
["Defaults", "checked", "init", "renderHtml", "value"]
> Object.getOwnPropertyNames((new tinymce.ui.Checkbox).__proto__.__proto__).sort()
["active", "disabled", "init", "postRender", "remove", "tooltip"]
Object.getOwnPropertyNames((new tinymce.ui.Checkbox).__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "getRoot", "hasClass", "hasEventListeners", "height", "hide", "init", "initLayoutRect", "innerHtml", "isRtl", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parentsAndSelf", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "translate", "value", "visible", "width"]
Object.getOwnPropertyNames((new tinymce.ui.Checkbox).__proto__.__proto__.__proto__.__proto__).sort()
["constructor"]
Object.getOwnPropertyNames((new tinymce.ui.Checkbox).__proto__.__proto__.__proto__.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

pwpoICHCheckbox'html-code

name::
* McsEngl.pwpoICHCheckbox'html-code@cptIt,

_CODE.HML:
<div id="id133" class="clsCheckbox clsLast clsLayoutAbsItem clsChecked" unselectable="on" aria-labeledby="id133-al" tabindex="-1" role="checkbox" aria-checked="true" style="left: 106px; top: 0px; width: 89px; height: 17px;">
<i class="clsIco clsI-checkbox"></i>
<span id="id133-al" class="clsLabel">Match case</span>
</div>
---
<div id="id157" class="clsCheckbox clsLast clsLayoutAbsItem" unselectable="on" aria-labeledby="id157-al" tabindex="-1" role="checkbox" aria-checked="false" style="left: 106px; top: 0px; width: 89px; height: 17px;">
<i class="clsIco clsI-checkbox"></i>
<span id="id157-al" class="clsLabel">Match case</span>
</div>
===
//selectable
<div id="id157" class="clsCheckbox clsLast clsLayoutAbsItem clsChecked" unselectable="on" aria-labeledby="id157-al" tabindex="-1" role="checkbox" aria-checked="true" style="left: 106px; top: 0px; width: 89px; height: 17px;">
<i class="clsIco clsI-checkbox"></i>
<span id="id157-al" class="clsLabel">Match case</span>
</div>
===
//a whole line with empty label in 'search-window':
<div id="id170" class="clsContainer clsLayoutAbsItem clsFormitem" hidefocus="1" tabindex="-1" style="left: 20px; top: 100px; width: 401px; height: 17px;">
<div id="id170-body" class="clsLayoutAbs" style="width: 401px; height: 17px;">
<label id="id171" class="clsHover clsLabel clsFirst clsLayoutAbsItem" for="id157" style="line-height: 0px; left: 0px; top: 9px; width: 106px; height: 0px;"> </label>
<div id="id157" class="clsCheckbox clsLast clsLayoutAbsItem clsChecked" unselectable="on" aria-labeledby="id157-al" tabindex="-1" role="checkbox" aria-checked="true" style="left: 106px; top: 0px; width: 89px; height: 17px;"><i class="clsIco clsI-checkbox"></i><span id="id157-al" class="clsLabel">Match case</span>
</div>
</div>
</div>

pwpo2I.fICHCkRadioFtr (IchcRbn)

name::
* McsEngl.pwpo2I.fICHCkRadioFtr (IchcRbn)@cptIt,
* McsEngl.pwpfICHCkRadioFtr@cptIt,
* McsEngl.oPgmHtml.oI.Control.Widget.Checkbox.Radio@cptIt,
* McsEngl.pwpfICWCRadiobtn@cptIt,
* McsEngl.pwpRadiocheckbox@cptIt, {2010-05-18}
* McsEngl.pwpRadiocbx@cptIt,
* McsEngl.phRadiobutton@cptIt,
* McsEngl.pwpfCCWCRadiobutton@cptIt,
* McsEngl.pwpfICWCRadiobutton@cptIt,
* McsEngl.pwp'fCCWCheckboxRadio@cptIt,
* McsEngl.pwp'Radio@cptIt,
* McsEngl.tinymce.ui.Radio@cptIt,

* McsEngl.phIcwcrbn@cptIt,

_DEFINITION:
not used
===
- Creates a new radio button
return Checkbox#ql:tmce'checkbox#.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Radio.js]

pwpoICWCRadio.MEMBER:
> 2015-03-03:
Object.getOwnPropertyNames(new oPgmHtml.oI.fCCWCRadiobutton).sort()["_fProto", "aIcrlClasses", "bCanFocus", "bIcrlActive", "bIcrlDisabled", "bIcrlVisible", "nIcrlHeight", "nIcrlWidth", "oIcrlAria", "oIcrlBindings", "oIcrlBoxBorder", "oIcrlBoxMargin", "oIcrlBoxPadding", "oIcrlEventsNative", "oIcrlSettings", "sIcrlId", "sIcrlName", "sIcrlText", "sIcrlValue"]Object.getOwnPropertyNames((new oPgmHtml.oI.fCCWCRadiobutton).__proto__).sort()["oIcrlSettingsDefaults"]
===
_INSTANCE:
> Object.getOwnPropertyNames((new tinymce.ui.Radio)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_checked", "_classes", "_disabled", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "canFocus", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.Radio).__proto__).sort()
["Defaults"]
Object.getOwnPropertyNames((new tinymce.ui.Radio).__proto__.__proto__).sort()
["Defaults", "checked", "init", "renderHtml", "value"]

pwpo2I.fICHCombobxFtr (IchCbx)

name::
* McsEngl.pwpo2I.fICHCombobxFtr (IchCbx)@cptIt,
* McsEngl.pwpfICHCombobxFtr@cptIt,
* McsEngl.oPgmHtml.oI.Control.Widget.ComboBox@cptIt,
* McsEngl.pwpCombobox@cptIt,
* McsEngl.phCombobox@cptIt,
* McsEngl.pwpfCCWCombobox@cptIt,
* McsEngl.pwpfICWCombobox@cptIt,
* McsEngl.pwp'ComboBox@cptIt,
* McsEngl.pwp'fCCWCombobox@cptIt,
* McsEngl.tinymce.ui.ComboBox@cptIt,

* McsEngl.pwpCox@cptIt,
* McsEngl.pwpCbx@cptIt,
* McsEngl.phIcwcbx@cptIt,

_DEFINITION:
- This class creates a combobox control
return Widget.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\ComboBox.js]

pwpoICWCombobox.MEMBER:
> 2015-03-03:
Object.getOwnPropertyNames(new oPgmHtml.oI.fCCWCombobox).sort()["_fProto", "aIcrlClasses", "bCanFocus", "bIcrlActive", "bIcrlDisabled", "bIcrlVisible", "nIcrlHeight", "nIcrlWidth", "oIcrlAria", "oIcrlBindings", "oIcrlBoxBorder", "oIcrlBoxMargin", "oIcrlBoxPadding", "oIcrlEventsNative", "oIcrlSettings", "sIcrlId", "sIcrlName", "sIcrlText", "sIcrlValue"]Object.getOwnPropertyNames((new oPgmHtml.oI.fCCWCombobox).__proto__).sort()["fIcrlDisabled", "fIcrlFocus", "fIcrlRemove", "fIcrlRenderAfter", "fIcrlRepaint", "fIcrlToHtml", "fIcrlValue", "init"]
===
_INSTANCE:
Object.getOwnPropertyNames((new tinymce.ui.ComboBox)).sort()
["_active", "_aria", "_borderBox", "_classes", "_disabled", "_eventDispatcher", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "ariaTarget", "canFocus", "settings", "subinput"]
Object.getOwnPropertyNames((new tinymce.ui.ComboBox).__proto__).sort()
["disabled", "focus", "init", "postRender", "remove", "renderHtml", "repaint", "showMenu", "value"]
Object.getOwnPropertyNames((new tinymce.ui.ComboBox).__proto__.__proto__).sort()
["active", "disabled", "init", "postRender", "remove", "tooltip"]
Object.getOwnPropertyNames((new tinymce.ui.ComboBox).__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "getRoot", "hasClass", "hasEventListeners", "height", "hide", "init", "initLayoutRect", "innerHtml", "isRtl", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parentsAndSelf", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "translate", "value", "visible", "width"]
Object.getOwnPropertyNames((new tinymce.ui.ComboBox).__proto__.__proto__.__proto__.__proto__).sort()
["constructor"]
Object.getOwnPropertyNames((new tinymce.ui.ComboBox).__proto__.__proto__.__proto__.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

pwpo2I.fICHCbFilepickFtr (IchcFpr)

name::
* McsEngl.pwpo2I.fICHCbFilepickFtr (IchcFpr)@cptIt,
* McsEngl.pwpfICHCbFilepickFtr@cptIt,
* McsEngl.oPgmHtml.oI.Control.Widget.ComboBox.FilePicker@cptIt,
* McsEngl.phFilepicker@cptIt,
* McsEngl.pwpguiFpr@cptIt,
* McsEngl.pwpfCCWCbFilepicker@cptIt,
* McsEngl.pwpfICWCbFilepicker@cptIt,
* McsEngl.pwp'FilePicker@cptIt,
* McsEngl.tinymce.ui.FilePicker@cptIt,

* McsEngl.pwpFpr@cptIt,
* McsEngl.phIcwcfpr@cptIt,

_DEFINITION:
- This class creates a file picker control
return ComboBox#ql:tmce'combobox#.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\FilePicker.js]

pwpoICWCFilepicker.MEMBER:
> 2015-03-03:
Object.getOwnPropertyNames(new oPgmHtml.oI.fCCWCFilepicker).sort()["_fProto", "aIcrlClasses", "bCanFocus", "bIcrlActive", "bIcrlDisabled", "bIcrlVisible", "nIcrlHeight", "nIcrlWidth", "oIcrlAria", "oIcrlBindings", "oIcrlBoxBorder", "oIcrlBoxMargin", "oIcrlBoxPadding", "oIcrlEventsNative", "oIcrlSettings", "sIcrlId", "sIcrlName", "sIcrlText", "sIcrlValue"]
Object.getOwnPropertyNames((new oPgmHtml.oI.fCCWCFilepicker).__proto__).sort()["init"]
===
_INSTANCE:
Object.getOwnPropertyNames((new tinymce.ui.FilePicker)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "canFocus", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.FilePicker).__proto__).sort()
["init"]
Object.getOwnPropertyNames((new tinymce.ui.FilePicker).__proto__.__proto__).sort()
["disabled", "focus", "init", "postRender", "remove", "renderHtml", "repaint", "value"]

pwpo2I.fICHIframeFtr (IchIfm)

name::
* McsEngl.pwpo2I.fICHIframeFtr (IchIfm)@cptIt,
* McsEngl.pwpfICHIframeFtr@cptIt,
* McsEngl.oPgmHtml.oI.Control.Widget.Iframe@cptIt,
* McsEngl.phIframe@cptIt,
* McsEngl.pwpfCCWIframe@cptIt,
* McsEngl.pwpfICWIframe@cptIt,
* McsEngl.pwp'fCCWIframe@cptIt,
* McsEngl.pwp'Iframe@cptIt,
* McsEngl.tinymce.ui.Iframe@cptIt,
====
* McsEngl.phIcwifm@cptIt,

_DEFINITION:
- This class creates an iframe
return Widget.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Iframe.js]

pwpoICWIframe.MEMBER:
> 2015-03-03:
Object.getOwnPropertyNames(new oPgmHtml.oI.fCCWIframe).sort()["_fProto", "aIcrlClasses", "bCanFocus", "bIcrlActive", "bIcrlDisabled", "bIcrlVisible", "nIcrlHeight", "nIcrlWidth", "oIcrlAria", "oIcrlBindings", "oIcrlBoxBorder", "oIcrlBoxMargin", "oIcrlBoxPadding", "oIcrlEventsNative", "oIcrlSettings", "sIcrlId", "sIcrlName", "sIcrlText", "sIcrlValue"]
Object.getOwnPropertyNames((new oPgmHtml.oI.fCCWIframe).__proto__).sort()["fIcrlToHtml", "fIcwifmHtml", "fIcwifmSrc"]
===
_INSTANCE:
> Object.getOwnPropertyNames((new tinymce.ui.Iframe)).sort()
["_active", "_aria", "_borderBox", "_classes", "_disabled", "_eventDispatcher", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "canFocus", "settings"]
> IframePrototype
Object.getOwnPropertyNames((new tinymce.ui.Iframe).__proto__).sort()
["html", "renderHtml", "src"]
> WidgetPrototype:
Object.getOwnPropertyNames((new tinymce.ui.Iframe).__proto__.__proto__).sort()
["active", "disabled", "init", "postRender", "remove", "tooltip"]
> ControlPrototype:
Object.getOwnPropertyNames((new tinymce.ui.Iframe).__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "getRoot", "hasClass", "hasEventListeners", "height", "hide", "init", "initLayoutRect", "innerHtml", "isRtl", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parentsAndSelf", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "translate", "value", "visible", "width"]

pwp'iframe'html:
<iframe id="mce_23_ifr" src='javascript:""' frameborder="0" allowtransparency="true" title="Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help" style="width: 100%; height: 247px; display: block;"></iframe>

pwpo2I.fICHLabelFtr (IchLbl)

name::
* McsEngl.pwpo2I.fICHLabelFtr (IchLbl)@cptIt,
* McsEngl.pwpfICHLabelFtr@cptIt,
* McsEngl.oPgmHtml.oI.Control.Widget.Label@cptIt,
* McsEngl.pwpLabel@cptIt,
* McsEngl.pwpfCCWLabel@cptIt,
* McsEngl.pwpfICWLabel@cptIt,
* McsEngl.pwp'fCCWLabel@cptIt,
* McsEngl.pwp'Label@cptIt,
* McsEngl.tinymce.ui.Label@cptIt,

* McsEngl.phIcwlbl@cptIt,

_DEFINITION:
- This class creates a label element
return Widget.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Label.js]

pwpoICHLabel'settings

name::
* McsEngl.pwpoICHLabel'settings@cptIt,

//charmap
{
type: 'fccwlabel',
name: 'previewlabel',
text: '\u00a7',
style: 'font-size: 44px; text-align: center;',
minWidth: 100,
minHeight: 80
}
===
sICrlType: 'fICHLabel',
bICrlMultiline: true,
nICrlWidthMax: 500,
nICrlHeightMax: 200
===
{sICrlType: 'fICHLabel', saICrlText: 'x'},
===
{sICrlType: 'fICHLabel', sICrlName: 'guiLblTltDesc', sICrlLabel: 'Description', saICrlText: 'something wrong here. sets the size'},
===
sICrlType: 'fICHLabel',
sICrlName: 'guiLblWordcount',
saICrlText: ['Words: {0}', fGetCount()],
sICrlClasses: 'clsWordcount'

pwpoICHLabel'member

name::
* McsEngl.pwpoICHLabel'member@cptIt,

_CODE.JS.phloICHLabel:
fSpecific {…}
_fProto: undefined
aICrlClasses:
.control: ["clsWordcount", "clsWidget", "clsLabel", "clsFlow-layout-item"
bICrlActive: false
bICrlDisabled: false
bICrlFocus: false
bICrlRendered: true
bICrlVisible: true
nICrlHeight: 0
nICrlWidth: 0
oICrlAria: Object
oICrlBoxBorder: undefined
oICrlBoxMargin: undefined
oICrlBoxPadding: undefined
oICrlEventsNative: Object
oICrlEvtstore: Object
oICrlParent: fSpecific
oICrlSettings: Object {
nICrlFlex: 0
nICrlWidthMin: 106
sICrlForid: "id131" //the-control which has this label.
sICrlType: "fICHLabel"
saICrlText: "Find"
}
oIccpfltEventsRoot: fSpecific
sICrlId: "id103"
sICrlName: "wordcount"
sICrlText: ["Words: {0}", 3]
sICrlType: "fCCWLabel"
xICrlValue: false
__proto__: Object

pwpoICWLabel:
> 2015-03-03:
Object.getOwnPropertyNames(new oPgmHtml.oI.fCCWLabel).sort()["_fProto", "aIcrlClasses", "bCanFocus", "bIcrlActive", "bIcrlDisabled", "bIcrlVisible", "nIcrlHeight", "nIcrlWidth", "oIcrlAria", "oIcrlBindings", "oIcrlBoxBorder", "oIcrlBoxMargin", "oIcrlBoxPadding", "oIcrlEventsNative", "oIcrlSettings", "sIcrlId", "sIcrlName", "sIcrlText", "sIcrlValue"]Object.getOwnPropertyNames((new oPgmHtml.oI.fCCWLabel).__proto__).sort()["fIcrlDisabled", "fIcrlLayrectInit", "fIcrlRepaint", "fIcrlText", "fIcrlToHtml", "init"]
===
> Object.getOwnPropertyNames((new tinymce.ui.Label)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "canFocus", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.Label).__proto__).sort()
["disabled", "init", "initLayoutRect", "renderHtml", "repaint", "text"]
Object.getOwnPropertyNames((new tinymce.ui.Label).__proto__.__proto__).sort()
["active", "disabled", "init", "postRender", "remove", "tooltip"]

pwpoICHLabel'html-code

name::
* McsEngl.pwpoICHLabel'html-code@cptIt,

_CODE.HTML.phloICHLabel:
//pgnTemplate:Description
<label id="id214" class="clsWidget clsLabel clsFirst clsLayoutAbsItem" for="id206" style="line-height: 15px; left: 0px; top: 0px; width: 97px; height: 15px;">Description</label>

<label id="id138" class="clsWidget clsLabel clsFirst clsLayoutAbsItem" for="id130" style="line-height: 15px; left: 0px; top: 0px; width: 97px; height: 15px;">Description</label>
===
<label id="id103" class="clsWordcount clsWidget clsLabel clsFlow-layout-item">Words: 3</label>
===
<label id="mce_125" class="cls-widget cls-label cls-first cls-abs-layout-item" for="mce_115" style="line-height: 16px; left: 0px; top: 7px; width: 101px; height: 16px;">Title</label>
===
//pgnCharmap
<label id="id121" class="clsWidget clsLabel clsLast clsLayoutAbsItem" style="font-size: 44px; text-align: center; line-height: 80px; left: 445px; top: 10px; width: 100px; height: 80px;">τ</label>

pwpo2I.fICHMenuitmRo (ICHMim)

name::
* McsEngl.pwpo2I.fICHMenuitmRo (ICHMim)@cptIt,
* McsEngl.pwpfICHMenuitmRo@cptIt,
* McsEngl.pwpfICHMenuitemFtr@cptIt,
* McsEngl.oPgmHtml.oI.Control.Widget.MenuItem@cptIt,
* McsEngl.phMenuitem@cptIt,
* McsEngl.pwpfCCWMenuitem@cptIt,
* McsEngl.pwpfICWMenuitem@cptIt,
* McsEngl.pwp'MenuItem@cptIt,
* McsEngl.tinymce.ui.MenuItem@cptIt,

* McsEngl.phIcwmim@cptIt,

_DEFINITION:
- Creates a new menu item
return Widget.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\MenuItem.js]

pwpoICWMenuitem.MEMBER:
> 2016-04-26: Object.getOwnPropertyNames(oPgmWpg.o2I.fICHMenuitmRo()).sort()
["aICrlClasses", "asICrlTxt", "bICrlActive", "bICrlDisabled", "bICrlFocus", "bICrlPopup", "bICrlVisible", "fICHMimBHasMenus", "fICHMimHide", "fICHMimShow", "fICrlInit", "fICrlRemove", "fICrlRenderAfterRo", "fICrlToHtmlRs", "nICrlHeight", "nICrlWidth", "oICrlAria", "oICrlBoxBorder", "oICrlBoxMargin", "oICrlBoxPadding", "oICrlCfg", "oICrlCfgDefaults", "sICrlId", "sICrlName", "xICrlValue"]
===
> 2015-03-03:
Object.getOwnPropertyNames(new oPgmHtml.oI.fCCWMenuitem).sort()["_fProto", "aIcrlClasses", "bCanFocus", "bIcrlActive", "bIcrlDisabled", "bIcrlVisible", "hasPopup", "nIcrlHeight", "nIcrlWidth", "oIcrlAria", "oIcrlBindings", "oIcrlBoxBorder", "oIcrlBoxMargin", "oIcrlBoxPadding", "oIcrlEventsNative", "oIcrlSettings", "sIcrlId", "sIcrlName", "sIcrlText", "sIcrlValue"]
Object.getOwnPropertyNames((new oPgmHtml.oI.fCCWMenuitem).__proto__).sort()["fIcrlRemove", "fIcrlRenderAfter", "fIcrlToHtml", "fIcwmimBHasMenus", "fIcwmimMenuHide", "fIcwmimMenuShow", "init", "oIcrlSettingsDefaults"]
===
_INSTANCE:
Object.getOwnPropertyNames((new tinymce.ui.MenuItem)).sort()
["_active", "_aria", "_borderBox", "_classes", "_disabled", "_eventDispatcher", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "canFocus", "hasPopup", "settings"]
> MenuItem.prototype:
Object.getOwnPropertyNames((new tinymce.ui.MenuItem).__proto__).sort()
["Defaults", "active", "hasMenus", "hideMenu", "init", "postRender", "remove", "renderHtml", "showMenu"]
> Widget.prototype:
Object.getOwnPropertyNames((new tinymce.ui.MenuItem).__proto__.__proto__).sort()
["active", "disabled", "init", "postRender", "remove", "tooltip"]
Object.getOwnPropertyNames((new tinymce.ui.MenuItem).__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "getRoot", "hasClass", "hasEventListeners", "height", "hide", "init", "initLayoutRect", "innerHtml", "isRtl", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parentsAndSelf", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "translate", "value", "visible", "width"]

pwp'menuitem'SETTINGS:
context: 'insert', //the menu under which this item located.
icon: 'anchor',
text: 'Anchor',
onclick: fShowDialog
separator: 'before',

oICrlCfg.aoICrlMen

name::
* McsEngl.oICrlCfg.aoICrlMen@cptIt,

pwpaoICrlMen:
//does NOT accept 'sICrlCmd'
aoICrlMen: [
{asICrlTxt: 'CFmt-Indent-increase', sICrlIcn: 'IcnIndent', onclick: function(){oPgmWpg.o1Cmd.fCmdCallRb('CmdFmtNtvIndent');}},
{asICrlTxt: 'CFmt-Indent-decrease', sICrlIcn: 'IcnOutdent', onclick: function(){oPgmWpg.o1Cmd.fCmdCallRb('CmdFmtNtvOutdent');}}

pwpo2I.fICHSpacerFtr (IchSpr)

name::
* McsEngl.pwpo2I.fICHSpacerFtr (IchSpr)@cptIt,
* McsEngl.pwpfICHSpacerFtr@cptIt,
* McsEngl.oPgmHtml.oI.Control.Widget.Spacer@cptIt,
* McsEngl.phSpacer@cptIt,
* McsEngl.pwpfCCWSpacer@cptIt,
* McsEngl.pwpfICWSpacer@cptIt,
* McsEngl.pwp'fCWSpacer@cptIt,
* McsEngl.pwp'fCCWSpacer@cptIt,
* McsEngl.pwp'Spacer@cptIt,
* McsEngl.tinymce.ui.Spacer@cptIt,

* McsEngl.phIcwspr@cptIt,

_DEFINITION:
- Creates a spacer
return Widget.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Spacer.js]

pwpoICWSpacer.MEMBER:
> 2015-03-03:
Object.getOwnPropertyNames(new oPgmHtml.oI.fCCWSpacer).sort()["_fProto", "aIcrlClasses", "bCanFocus", "bIcrlActive", "bIcrlDisabled", "bIcrlVisible", "nIcrlHeight", "nIcrlWidth", "oIcrlAria", "oIcrlBindings", "oIcrlBoxBorder", "oIcrlBoxMargin", "oIcrlBoxPadding", "oIcrlEventsNative", "oIcrlSettings", "sIcrlId", "sIcrlName", "sIcrlText", "sIcrlValue"]Object.getOwnPropertyNames((new oPgmHtml.oI.fCCWSpacer).__proto__).sort()["fIcrlToHtml"]
===
Object.getOwnPropertyNames((new tinymce.ui.Spacer)).sort()
["_active", "_aria", "_borderBox", "_classes", "_disabled", "_eventDispatcher", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "canFocus", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.Spacer).__proto__).sort()
["renderHtml"]
Object.getOwnPropertyNames((new tinymce.ui.Spacer).__proto__.__proto__).sort()
["active", "disabled", "init", "postRender", "remove", "tooltip"]
Object.getOwnPropertyNames((new tinymce.ui.Spacer).__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "getRoot", "hasClass", "hasEventListeners", "height", "hide", "init", "initLayoutRect", "innerHtml", "isRtl", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parentsAndSelf", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "translate", "value", "visible", "width"]

pwp'spacer'html:
<div id="id129" class="cls-abs-layout-item cls-spacer" style="left: 235px; top: 25px; width: 80px; height: 0px;"></div>
<div id="mce_114" class="cls-abs-layout-item cls-spacer" style="left: 235px; top: 25px; width: 80px; height: 0px;"></div>
===
<div id="id136" class="clsLayoutAbsItem clsSpacer" style="left: 224px; top: 25px; width: 0px; height: 0px;"></div>
===
//non class
<div id="id22" class="cls-flow-layout-item cls-resizehandle cls-last cls-abs-layout-item cls-spacer"></div>
<div id="mce_13" class="cls-flow-layout-item cls-resizehandle cls-last cls-abs-layout-item cls-spacer"></div>
===
//
<div id="id5" class="clsCombobox clsMenubtn clsLayoutFlowItem clsResizehandle clsLast clsLayoutAbsItem clsSpacer"></div>

pwpo2I.fICHTextboxFtr (IchTbx)

name::
* McsEngl.pwpo2I.fICHTextboxFtr (IchTbx)@cptIt,
* McsEngl.pwpfICHTextboxFtr@cptIt,
* McsEngl.oPgmHtml.oI.Control.Widget.TextBox@cptIt,
* McsEngl.pwpfICWTextbox@cptIt,
* McsEngl.pwpTextbox@cptIt,
* McsEngl.pwpguiTbx@cptIt,
* McsEngl.pwpguiTextbox@cptIt,
* McsEngl.phTextbox@cptIt,
* McsEngl.pwp'fCCWidgetTextbox@cptIt,
* McsEngl.pwp'TextBox@cptIt,
* McsEngl.tinymce.ui.TextBox@cptIt,
* McsEngl.phITextbox@cptIt,

* McsEngl.pwpTbx@cptIt,
* McsEngl.pwpIcwTbx@cptIt,

_DEFINITION:
- A gui with a box to write in text.
===
- Creates a new textbox
return Widget.extend({
[\File1a\tinymceDev407\js\tinymce\classes\ui\TextBox.js]
===
needed
type: 'fccwidgettextbox'
instead of
type 'textbox'

pwpoICWTextbox.MEMBER:
> 2015-03-17:
Object.getOwnPropertyNames(new oPgmHtml.oI.fCCWTextbox()).sort()["_fProto", "aIcrlClasses", "bIcrlActive", "bIcrlDisabled", "bIcrlFocus", "bIcrlVisible", "nIcrlHeight", "nIcrlWidth", "oIcrlAria", "oIcrlBindings", "oIcrlBoxBorder", "oIcrlBoxMargin", "oIcrlBoxPadding", "oIcrlEventsNative", "oIcrlSettings", "sIcrlId", "sIcrlName", "sIcrlText", "xIcrlValue"]
Object.getOwnPropertyNames(new oPgmHtml.oI.fCCWTextbox().__proto__).sort()["fIcrlDisabled", "fIcrlRemove", "fIcrlRenderAfter", "fIcrlRepaint", "fIcrlToHtml", "fIcrlValue", "init"]
===
> Object.getOwnPropertyNames((new tinymce.ui.TextBox)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "canFocus", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.TextBox).__proto__).sort()
["disabled", "init", "postRender", "remove", "renderHtml", "repaint", "value"]
Object.getOwnPropertyNames((new tinymce.ui.TextBox).__proto__.__proto__).sort()
["active", "disabled", "init", "postRender", "remove", "tooltip"]

_CODE.HTML.phlTbx:
//tbs with label:
<div id="id131" class="clsContainer clsFirst clsLayoutAbsItem clsFormitem" hidefocus="1" tabindex="-1" style="left: 20px; top: 20px; width: 407px; height: 29px;">

<div id="id131-body" class="clsLayoutAbs" style="width: 407px; height: 29px;">
<label id="id132" class="clsWidget clsLabel clsFirst clsLayoutAbsItem" for="id121" style="line-height: 15px; left: 0px; top: 7px; width: 135px; height: 15px;">Source</label>
<div id="id121" class="clsCombobox clsLast clsLayoutAbsItem" style="left: 135px; top: 0px; width: 167px; height: 29px;">
<input id="id121-inp" class="clsTextbox clsPlaceholder" value="" hidefocus="true" style="width: 157px;">
</div>
</div>
</div>
===
// tbxLinkText
<input id="id124" class="clsTextbox clsLast clsLayoutAbsItem" value="here" hidefocus="true" size="40" style="left: 115px; top: 0px; width: 287px; height: 30px;">
---
<input id="id135" class="clsTextbox clsLast clsLayoutAbsItem" value="here" hidefocus="true" style="left: 115px; top: 0px; width: 159px; height: 30px;">
===
<input id="mce_115" class="cls-textbox cls-last cls-abs-layout-item" value="" hidefocus="true" size="40" style="left: 101px; top: 0px; width: 271px; height: 28px;">

_CODE.JS.phlTbx:
// tbxLinkText
oPgmHtml.oPhlStoreIdControlobt.id124
fSpecific {…}
_fProto: undefined
aICrlClasses: Array[0]
bICrlActive: false
bICrlDisabled: false
bICrlFocus: true
bICrlRendered: true
bICrlVisible: true
nICrlHeight: 0
nICrlWidth: 0
oICrlAria: Object
oICrlBoxBorder: Object
oICrlBoxMargin: Object
oICrlBoxPadding: Object
oICrlEventsNative: Object
oICrlEvtstore: Object
oICrlLayrect: Object
oICrlLayrectLast: Object
oICrlLayrectRepaintLast: Object
oICrlParent: fSpecific
oICrlSettings: Object
oIccpfltEventsRoot: fSpecific
sICrlId: "id124"
sICrlName: "guiTbxLinkText"
saICrlText: ""
type: "fCCWTextbox"
xICrlValue: "here"
__proto__: Object

pwpo2I.fICPathRo (ICPth)

name::
* McsEngl.pwpo2I.fICPathRo (ICPth)@cptIt,
* McsEngl.pwpfICPathFtr@cptIt,
* McsEngl.oPgmHtml.oI.Control.Path@cptIt,
* McsEngl.pwpfCCPath@cptIt,
* McsEngl.pwpfICPath@cptIt,
* McsEngl.phPath@cptIt,
* McsEngl.pwp'fCCPath@cptIt,
* McsEngl.pwp'Path@cptIt,
* McsEngl.tinymce.ui.Path@cptIt,

* McsEngl.phIcpth@cptIt,

oICPath

name::
* McsEngl.pwpoICPath@cptIt,

_GENERIC:
* oICrl#linkidPwpoICrl#ql:idPwpoICrl##

_DEFINITION:
- Creates a new path control
return Control.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Path.js]

pwpoICPath.MEMBER:
> pwp.0-90v 2016-05-06: Object.getOwnPropertyNames(oPgmWpg.o2I.fICPathRo()).sort()
["aICrlClasses", "asICrlTxt", "bICrlActive", "bICrlDisabled", "bICrlFocus", "bICrlVisible", "fICPthData", "fICPthSHtmlInner", "fICPthUpdate", "fICrlFocusRo", "fICrlInit", "fICrlRenderAfterRo", "fICrlToHtmlRs", "nICrlHeight", "nICrlWidth", "oICrlAria", "oICrlBoxBorder", "oICrlBoxMargin", "oICrlBoxPadding", "oICrlCfg", "oICrlCfgDefaults", "sICrlId", "sICrlName", "xICrlValue"]
===
> 2015-03-02:
Object.getOwnPropertyNames(new oPgmHtml.oI.fICPath).sort()
["bCanFocus", "bIcrlRendered", "data", "fGetPathHtml", "fIcrlRenderAfter", "fIcrlToHtml", "focus", "init", "oIccpfltEventsRoot", "oIcrlSettingsDefaults", "update"]
===
> Object.getOwnPropertyNames((new oPgmHtml.oI.fICPath).__proto__).sort()[
"aIcrlClasses", "bIcrlActive", "bIcrlDisabled", "bIcrlRendered", "bIcrlVisible", "click", "fIcrlAfter", "fIcrlAppendToElt", "fIcrlAria", "fIcrlBActive", "fIcrlBClass", "fIcrlBefore", "fIcrlBindEventsPending", "fIcrlBlur", "fIcrlBoxBorder", "fIcrlBoxMargin", "fIcrlBoxMeasure", "fIcrlBoxPadding", "fIcrlBoxParse", "fIcrlClassAdd", "fIcrlClassRemove", "fIcrlClassToggle", "fIcrlClasses", "fIcrlClnParents", "fIcrlDisabled", "fIcrlEltBodyGet", "fIcrlEltGet", "fIcrlEncode", "fIcrlEventLnrAdd", "fIcrlFindAncestorCommon", "fIcrlFocus", "fIcrlHide", "fIcrlInnerhtml", "fIcrlLayoutrect", "fIcrlLayrectInit", "fIcrlName", "fIcrlNext", "fIcrlOutCrlInElt", "fIcrlParent", "fIcrlPrev", "fIcrlReflow", "fIcrlRemove", "fIcrlRenderAfter", "fIcrlRenderBefore", "fIcrlRepaint", "fIcrlScrollIntoview", "fIcrlShow", "fIcrlText", "fIcrlToHtml", "fIcrlValue", "fUobEventInvoke", "init", "nIcrlHeight", "nIcrlWidth", "name", "oIccpfltEventsRoot", "oIcrlAria", "oIcrlBindings", "oIcrlBoxBorder", "oIcrlBoxMargin", "oIcrlBoxPadding", "oIcrlEventsNative", "oIcrlSettings", "off", "sIcrlId", "sIcrlName", "sIcrlPrefixClass", "sIcrlText", "sIcrlValue", "visible"]
===
> Object.getOwnPropertyNames((new tinymce.ui.Path)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "canFocus", "settings"]
> Object.getOwnPropertyNames((new tinymce.ui.Path).__proto__).sort()
["Defaults", "_getPathHtml", "data", "focus", "init", "postRender", "renderHtml", "update"]
> Object.getOwnPropertyNames((new tinymce.ui.Path).__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "hasClass", "height", "hide", "init", "initLayoutRect", "innerHtml", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "value", "visible", "width"]

_HTML_ELEMENT:
//table » tbody » tr » td
<div role="button" class="cls-path-item" data-index="0" tabindex="-1" id="mce_88-0">table</div>
<div class="cls-divider" aria-hidden="true"> » </div>
<div role="button" class="cls-path-item" data-index="1" tabindex="-1" id="mce_88-1">tbody</div>
<div class="cls-divider" aria-hidden="true"> » </div>
<div role="button" class="cls-path-item" data-index="2" tabindex="-1" id="mce_88-2">tr</div>
<div class="cls-divider" aria-hidden="true"> » </div>
<div role="button" class="cls-path-item cls-last" data-index="3" tabindex="-1" id="mce_88-3">td</div>

pwpo2I.fICPElementRo

name::
* McsEngl.pwpo2I.fICPElementRo@cptIt,
* McsEngl.pwpfICPElementRo@cptIt,
* McsEngl.pwpfICPElementFtr@cptIt,
* McsEngl.oPgmHtml.oI.Control.Path.ElementPath@cptIt,
* McsEngl.pwp'ElementPath@cptIt,
* McsEngl.tinymce.ui.ElementPath@cptIt,

_DEFINITION:
- This control creates an path for the current selections parent elements in TinyMCE
return Path#ql:tmce'path#.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\ElementPath.js]

pwpoICPElement:
> 2013-03-02:
Object.getOwnPropertyNames(new oPgmHtml.oI.fICPElement).sort()
["fIcrlRenderAfter"]
Object.getOwnPropertyNames((new oPgmHtml.oI.fICPElement).__proto__).sort()
["bCanFocus", "data", "fGetPathHtml", "fIcrlRenderAfter", "fIcrlToHtml", "focus", "init", "oIcrlSettingsDefaults", "update"]
===
_INSTANCE:
> Object.getOwnPropertyNames((new tinymce.ui.ElementPath)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "canFocus", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.ElementPath).__proto__).sort()
["postRender"]
Object.getOwnPropertyNames((new tinymce.ui.ElementPath).__proto__.__proto__).sort()
["Defaults", "_getPathHtml", "data", "focus", "init", "postRender", "renderHtml", "update"]
Object.getOwnPropertyNames((new tinymce.ui.ElementPath).__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "hasClass", "height", "hide", "init", "initLayoutRect", "innerHtml", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "value", "visible", "width"]
===
Object.getOwnPropertyNames((new tinymce.ui.ElementPath))
TypeError: Cannot read property 'delimiter' of undefined //4.0.28

pwpo2I.fICTooltipRo (ICTtp)

name::
* McsEngl.pwpo2I.fICTooltipRo (ICTtp)@cptIt,
* McsEngl.pwpfICTooltipFtr@cptIt,
* McsEngl.oPgmHtml.oI.Control.Tooltip@cptIt,
* McsEngl.pwpfCCTooltip@cptIt,
* McsEngl.pwpfICTooltip@cptIt,
* McsEngl.phTooltip@cptIt,
* McsEngl.pwp'fCCTooltip@cptIt,
* McsEngl.pwp'Tooltip@cptIt,
* McsEngl.tinymce.ui.ToolTip@cptIt,

* McsEngl.phIcttp@cptIt,

oICTooltip

name::
* McsEngl.pwpoICTooltip@cptIt,

_GENERIC:
* oICrl#linkidPwpoICrl#ql:idPwpoICrl##

_DEFINITION:
Needs the-Widget

pwpoICTooltip.MEMBER:
> pwp.0-90v 2016-05-06 Object.getOwnPropertyNames(oPgmWpg.o2I.fICTooltipRo()).sort()
["aICrlClasses", "asICrlTxt", "bICrlActive", "bICrlDisabled", "bICrlVisible", "fICrlRepaint", "fICrlSATextRaso", "fICrlToHtmlRs", "fIMvlMovePosRelRo", "fIMvlMoveToAbsRo", "fIMvlMoveToRltRo", "fIMvlTestPosRelRs", "nICrlHeight", "nICrlWidth", "oICrlAria", "oICrlBoxBorder", "oICrlBoxMargin", "oICrlBoxPadding", "oICrlCfg", "sICrlId", "sICrlName", "xICrlValue"]
===
_fProto: undefined
aICrlClasses: Array[0]control: Array[3] oMap: Object
bICrlActive: false
bICrlDisabled: falsebICrlRendered: true
bICrlVisible: false
click: true
nICrlHeight: 0
nICrlWidth: 0
oICrlAria: Object
oICrlBoxBorder: Object
oICrlBoxMargin: Object
oICrlBoxPadding: Object
oICrlEventsNative: Object
oICrlEventsNativeNo: Object
oICrlLayrect: Object
oICrlLayrectLast: Object
oICrlSettings: Object sICrlClasses: "clsWidget clsTooltip clsTooltip-n"
oIccpfltEventsRoot: fSpecific
sICrlId: "id107"
sICrlName: ""
sICrlText: ""
xICrlValue: "Emoticons"
===
__proto__: fCCTooltip.prototype
fICrlRepaint: (){
fICrlText: (){
fICrlToSHtml: (){
fIMvlMoveBy: (dx, dy) {
fIMvlMoveRelative: (oHTMLElementIn, sRelativeIn) {
fIMvlMoveTo: (x, y) {
fIMvlTestRltv: (oHTMLElement, aRelativesIn) {
oICrlSettingsDefaults: Object sICrlClasses: "clsWidget clsTooltip clsTooltip-n"
===
__proto__: fCControl.prototype
fICrlActive: (bActiveIn) {
fICrlAddAfter: (aoItemsIn) {
fICrlAddBefore: (aoItemsIn) {
fICrlAppendToElt: (oHTMLElement) {
fICrlAria: (sAriaGncIn, sAriaSpcIn) {
fICrlBClass: (sClsValueIn, sGroupIn) {
fICrlBindEventsPending: () {
fICrlBlur: () {
fICrlBoxBorder: () {
fICrlBoxMargin: () {
fICrlBoxMeasure: (oHeltIn, sPrefixIn) {
fICrlBoxPadding: () {
fICrlBoxParse: (nsBoxIn) {
fICrlClassAdd: (sClsValueIn, sGroupIn) {
fICrlClassRemove: (sClsValueIn, sGroupIn) {
fICrlClassToggle: (sClsValueIn, bAddIn, sGroupIn) {
fICrlClasses: (sGroupIn) {
fICrlClnParents: (sCssselectorIn) {
fICrlDisabled: (bDisabled) {
fICrlEltBody: () {
fICrlEltGet: (sIdsuffixIn, bDropCacheIn) {
fICrlEncode: (sTextIn, bTranslateIn) {
fICrlEvtfunctionAdd: (sEvtnamesIn, fsEvtfunctionIn) {
fICrlEvtfunctionCall: (sEvtnameIn, oEvtCrlArgsIn, bBubbleIn) {
fICrlEvtfunctionRemove: (sEvtnamesIn, callback) {
fICrlFindAncestorCommon: (oIControl1, oIControl2) {
fICrlFocus: () {
fICrlFromHTMLElement: (oHTMLElementIn) {
fICrlHide: () {
fICrlHtmlInner: (sHtmlIn) {
fICrlLayrect: (oICrlLayrectIn) {
fICrlLayrectInit: () {
fICrlName: (sName) {
fICrlNext: () {
fICrlParent: (oICrlParentIn) {
fICrlPrev: () {
fICrlReflow: () {
fICrlRemove: () {
fICrlRenderAfter: () {
fICrlRenderBefore: (oHTMLElementIn) {
fICrlRepaint: () {
fICrlScrollIntoview: (sAlignIn) {
fICrlShow: () {
fICrlText: (sICrlTextIn) {
fICrlToSHtml: () {
fICrlValue: (xICrlValueIn) {
init: (oICrlSettingsIn) {
visible: (bVisible) {
__proto__: oUtil.fUClass
===
> 2015-03-17:
Object.getOwnPropertyNames(new oPgmHtml.oI.fCCTooltip()).sort()["aIcrlClasses", "bIcrlActive", "bIcrlDisabled", "bIcrlVisible", "nIcrlHeight", "nIcrlWidth", "oIcrlAria", "oIcrlBindings", "oIcrlBoxBorder", "oIcrlBoxMargin", "oIcrlBoxPadding", "oIcrlEventsNative", "oIcrlSettings", "sIcrlId", "sIcrlName", "sIcrlText", "xIcrlValue"]
Object.getOwnPropertyNames(new oPgmHtml.oI.fCCTooltip().__proto__).sort()["fIcrlRepaint", "fIcrlText", "fIcrlToHtml", "fImvlMoveBy", "fImvlMoveRelative", "fImvlMoveTo", "fImvlTestRltv", "oIcrlSettingsDefaults"]
===
> Object.getOwnPropertyNames((new tinymce.ui.Tooltip)).sort()
["_active", "_aria", "_borderBox", "_classes", "_disabled", "_eventDispatcher", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_text", "_title", "_value", "_visible", "_width", "settings"]
> Object.getOwnPropertyNames((new tinymce.ui.Tooltip).__proto__).sort()
["Defaults", "Mixins", "moveBy", "moveRel", "moveTo", "renderHtml", "repaint", "testMoveRel", "text"]
> CONTROL: Object.getOwnPropertyNames((new tinymce.ui.Tooltip).__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "getRoot", "hasClass", "hasEventListeners", "height", "hide", "init", "initLayoutRect", "innerHtml", "isRtl", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parentsAndSelf", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "translate", "value", "visible", "width"]
===
> (new tinymce.oUi.fControlTooltip)._active
false
> (new tinymce.oUi.fControlTooltip)._aria
Object {role: undefined}
> (new tinymce.oUi.fControlTooltip)._bindings
Object {click: Array[1]}
> (new tinymce.oUi.fControlTooltip)._borderBox
undefined
> (new tinymce.oUi.fControlTooltip)._classes
["widget", "tooltip", "tooltip-n"]
> (new tinymce.oUi.fControlTooltip)._disabled
false
> (new tinymce.oUi.fControlTooltip)._height
0
> (new tinymce.oUi.fControlTooltip)._id
"mce_92"
> (new tinymce.oUi.fControlTooltip)._marginBox
undefined
===
(new tinymce.oUi.fControlTooltip)
fClass {settings: Object, _id: "mce_108", _name: "", _text: "", _height: 0…}
_active: false
_aria: Object
_bindings: Object
_borderBox: undefined
_classes: Array[3]
_disabled: false
_height: 0
_id: "mce_108"
_marginBox: undefined
_name: ""
_nativeEvents: Object
_paddingBox: undefined
_text: ""
_title: false
_value: false
_visible: true
_width: 0
settings: Object
__proto__: fClass
Defaults: Object
Mixins: Array[1]
moveBy: function (dx, dy) {
moveRel: function (elm, rel) {
moveTo: function (x, y) {
renderHtml: function (){
repaint: function (){
testMoveRel: function (elm, rels) {
text: function (){
__proto__: fClass

oICTooltip'html-code

name::
* McsEngl.oICTooltip'html-code@cptIt,

pwpoICTooltip'html:
<div id="id206" class="clsICHover clsTooltip clsTooltipNw" role="presentation" style="left: -65535px; top: 101px; z-index: 131070; display: none;"><div class="clsTooltipArrow"></div><div class="clsTooltipInner">CFmt-Bold</div></div>
===
<div id="id111" class="clsWidget clsTooltip clsTooltip-n" role="presentation" style="left: -65535px; top: 64.625px; z-index: 131070; display: none;">
<div class="clsTooltipArrow"></div>
<div class="clsTooltipInner">Bold</div>
</div>
---
<div id="id111" class="clsTooltip-n" role="presentation" style="left: -65535px; top: 64.625px; z-index: 131070; display: none;"><div class="clsTooltipArrow"></div><div class="clsTooltipInner">Bold</div></div>
===
<div id="mce_103" class="cls-widget cls-tooltip cls-tooltip-n" role="presentation" style="left: -65535px; top: 67px; z-index: 131070; display: none;">
<div class="clsTooltipArrow"></div>
<div class="clsTooltipInner">Align left</div>
</div>
===
<div id="mce_3" class="" role="presentation"><div class="clsTooltipArrow"></div><div class="clsTooltipInner"></div></div>

pwpo2I.fIDragdropFtr (IDdp)

name::
* McsEngl.pwpo2I.fIDragdropFtr (IDdp)@cptIt,
* McsEngl.pwpfIHelperDrag@cptIt,
* McsEngl.pwp'DragHelper@cptIt,
* McsEngl.pwp'fHelperDrag@cptIt,
* McsEngl.tinymce.ui.DragHelper@cptIt,

* McsEngl.phIDdp@cptIt, {2015-03-26}
* McsEngl.phIhdg@cptIt, {2015-03-03}
* McsEngl.phIhd@cptIt,

_DEFINITION:
- Drag/drop helper class
return function(id, settings) {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\DragHelper.js]

pwpoIHelperDrag'member:
* pwpfIhdgDestroy (pwp'destroy)
===
> 2015-03-03
Object.getOwnPropertyNames(new oPgmHtml.oI.fIHelperDrag).sort()["fIhdDestroy"]Object.getOwnPropertyNames((new oPgmHtml.oI.fIHelperDrag).__proto__).sort()["constructor"]Object.getOwnPropertyNames((new oPgmHtml.oI.fIHelperDrag).__proto__.__proto__).sort()["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
===
> Object.getOwnPropertyNames((new tinymce.ui.DragHelper)).sort()
["destroy"]
Object.getOwnPropertyNames((new tinymce.ui.DragHelper).__proto__).sort()
["constructor"]
Object.getOwnPropertyNames((new tinymce.ui.DragHelper).__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

pwpo2I.fIFactoryRo (Iftr)

name::
* McsEngl.pwpo2I.fIFactoryRo (Iftr)@cptIt,
* McsEngl.pwpfIFactoryRo@cptIt,
* McsEngl.pwpoIFactory@cptIt,
* McsEngl.pwp'Factory@cptIt,
* McsEngl.tinymce.ui.Factory@cptIt,

* McsEngl.phIftr@cptIt,
* McsEngl.phIfr@cptIt,

_DESCRIPTION:
Creates an-interface-object based on the-config-format provided (oICfgIn).
This enables you to create oICrls without having to require other oICrls directly.
The object created will-be-based on the specified sICfgObjectof member of oICfgIn.
It can also create whole structures of components out of the specified cfg-object.

_DEFINITION:
* This class is a factory for control instances. This enables you
* to create instances of controls without having to require the UI controls directly.
*
* It also allow you to override or add new control types.
 return {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Factory.js]

_FILE:
* \PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Factory.js,

pwpoIFactory.MEMBER:
> 2015-03-04:
Object.getOwnPropertyNames(oPgmHtml.oI.oIFactory).sort()
["fIftrBHasIControl", "fIftrControlAdd", "fIftrIControlCreate"]
===
_MEMBER:
* fIfrIControlCreate
> Object.getOwnPropertyNames(tinymce.ui.Factory).sort()
["add", "create", "has"]
> Object.getOwnPropertyNames(tinymce.ui.Factory.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

pwpo2I.fIKbdnvnFtr (Ikbn)

name::
* McsEngl.pwpo2I.fIKbdnvnFtr (Ikbn)@cptIt,
* McsEngl.pwpfIKbdnvnFtr@cptIt,
* McsEngl.oPgmHtml.oI.fINavKeyboard@cptIt,
* McsEngl.pwpfINavKeyboard@cptIt,
* McsEngl.pwp'KeyboardNavigation@cptIt,
* McsEngl.tinymce.ui.KeyboardNavigation@cptIt,

* McsEngl.phIknn@cptIt,
* McsEngl.phInk@cptIt,

_DEFINITION:
- This class handles keyboard navigation of controls and elements
return function(settings) {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\KeyboardNavigation.js]

pwpoIKeyboardnavigation.MEMBER:
* pwpfIknnCancel (pwp'cancel)
* pwpfIknnFocusFirst (pwp'focusFirst),
* pwpfIknnFocusMove (pwp'moveFocus)
===
> 2015-03-04:
Object.getOwnPropertyNames(new oPgmHtml.oI.fIKeyboardnavigation).sort()["fIknnCancel", "fIknnFocusFirst", "fIknnFocusMove"]Object.getOwnPropertyNames((new oPgmHtml.oI.fIKeyboardnavigation).__proto__).sort()["constructor"]

pwpo2I.fILayoutRo (ILyt)

name::
* McsEngl.pwpo2I.fILayoutRo (ILyt)@cptIt,
* McsEngl.pwpfILayoutRo@cptIt,
* McsEngl.pwpfIlayoutFtr@cptIt,
* McsEngl.pwpfILayout@cptIt,
* McsEngl.pwpLayout@cptIt,
* McsEngl.pwp'Layout@cptIt,
* McsEngl.tinymce.ui.Layout@cptIt,

* McsEngl.phIlyt@cptIt,
* McsEngl.phIlt@cptIt,
* McsEngl.phIlay@cptIt,

oILayout

name::
* McsEngl.pwpoILayout@cptIt,

_DESCRIPTION:

_GENERIC:
* http://synagonism.net/dMiw/dTchInf/lngJs.html#idLjsObject.prototype#idLjsObject.prototype#

pwpoILayout.MEMBER:
> 2016-01-02
Object.getOwnPropertyNames(oPgmWpg.o2I.fILayoutFtr()).sort()
["fILytApplyClasses", "fILytCnrRecalc", "fILytRenderPost", "fILytRenderPre", "fILytToSHtml", "sILytClsFirst", "sILytClsLast"]
> 2015-03-03:
Object.getOwnPropertyNames(new oPgmHtml.oI.fILayout).sort()["fIlytApplyClasses", "fIlytCnrRecalc", "fIlytRenderPost", "fIlytRenderPre", "fIlytToHtml", "oIlytSettings"]
===
> Object.getOwnPropertyNames((new oPgmHtml.oI.fILayout())).sort()
["fCnrRecalc", "fIltApplyClasses", "fIltRenderPost", "fIltRenderPre", "fIltToHtml", "settings"]
> Object.getOwnPropertyNames((new oPgmHtml.oI.fILayout()).__proto__).sort()
["constructor"]
> Object.getOwnPropertyNames((new oPgmHtml.oI.fILayout()).__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
===
> Object.getOwnPropertyNames(new tinymce.ui.Layout).sort()
["settings"]
> Object.getOwnPropertyNames((new tinymce.ui.Layout).__proto__).sort()
["Defaults", "applyClasses", "init", "postRender", "preRender", "recalc", "renderHtml"]
> Object.getOwnPropertyNames((new tinymce.ui.Layout).__proto__.__proto__).sort()
["constructor"]
> Object.getOwnPropertyNames((new tinymce.ui.Layout).__proto__.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
> Object.getOwnPropertyNames((new tinymce.ui.Layout).__proto__.__proto__.__proto__.__proto__).sort()
TypeError: Object.getOwnPropertyNames called on non-object
===
> Object.getOwnPropertyNames(tinymce.ui.Layout.prototype).sort()
["Defaults", "applyClasses", "init", "postRender", "preRender", "recalc", "renderHtml"]
> tinymce.ui.Layout.prototype
Class {Defaults: Object, init: function, preRender: function, applyClasses: function, renderHtml: function…}
> typeof tinymce.ui.Layout.prototype
"object"
===
(new tinymce.oUi.Layout)
fClass {settings: Object, Defaults: Object, init: function, preRender: function, applyClasses: function…}
settings: Object
__proto__: fClass
Defaults: Object
applyClasses: function (container) {
init: function (settings) {
postRender: function () {
preRender: function (container) {
recalc: function () {
renderHtml: function (container) {
__proto__: fClass
constructor: function fClass() {
__proto__: Object

_CODE.PHTML.WIRED:
IF
layout: 'S
THEN
problem in statusbar, needs layout: 's
===
// TODO: Fix me! nnnLayout
if (this.settings.layout !== "fclflow" && this.settings.layout !== "fclstack") {
this.repaint();
}

pwpoILayout.fILytClassesApply

name::
* McsEngl.pwpoILayout.fILytClassesApply@cptIt,
* McsEngl.pwpfILytClassesApply@cptIt,

_DESCRIPTION:
Applies the-classes of current-oILayout (first, last, Crl) to the-input-oICCnr.

pwpoILayout.fILytCnrRecalc

name::
* McsEngl.pwpoILayout.fILytCnrRecalc@cptIt,
* McsEngl.pwpfILytCnrRecalc@cptIt,

_DESCRIPTION:
Recalculates the-positions of the-oICrls in the-input-oICCnr.

pwpoILayout.fILytRenderPre

name::
* McsEngl.pwpoILayout.fILytRenderPre@cptIt,

pwpoILayout.fILytToHmlRs

name::
* McsEngl.pwpoILayout.fILytToHmlRs@cptIt,
* McsEngl.pwpfILytToHmlRs@cptIt,

_DESCRIPTION:
* Renders the-input-oICCnr using current-oLayout's classes to Hml-string.

pwpoILayout.sILytClsFirst

name::
* McsEngl.pwpoILayout.sILytClsFirst@cptIt,
* McsEngl.pwpsILytClsFirst@cptIt,

_DESCRIPTION:
sILytClsLast: 'clsFirst',

pwpoILayout.sILytClsLast

name::
* McsEngl.pwpoILayout.sILytClsLast@cptIt,
* McsEngl.pwpsILytClsLast@cptIt,

_DESCRIPTION:
sILytClsLast: 'clsLast',

pwpo2I.fILAbsFtr (Ilabt)

name::
* McsEngl.pwpo2I.fILAbsFtr (Ilabt)@cptIt,
* McsEngl.pwpfILAbsFtr@cptIt,
* McsEngl.pwpfILayoutAbsolute@cptIt,
* McsEngl.phAbsolutelayout@cptIt,
* McsEngl.pwp'AbsoluteLayout@cptIt,
* McsEngl.tinymce.ui.AbsoluteLayout@cptIt,

* McsEngl.phIlabt@cptIt,
* McsEngl.phIla@cptIt,

_DEFINITION:
===
* LayoutManager for absolute positioning. This layout manager is more of
* a base class for other layouts but can be created and used directly.
*
* @-x-less AbsoluteLayout.less
* @class tinymce.ui.AbsoluteLayout
* @extends tinymce.ui.Layout
return Layout.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\AbsoluteLayout.js]

pwpoILAbsolute.MEMBER:
> 2015-03-03
Object.getOwnPropertyNames(new oPgmHtml.oI.fILAbsolute).sort()["fIlytCnrRecalc", "oIlytSettings"]Object.getOwnPropertyNames((new oPgmHtml.oI.fILAbsolute).__proto__).sort()["fIlytApplyClasses", "fIlytCnrRecalc", "fIlytRenderPost", "fIlytRenderPre", "fIlytToHtml", "oIlytSettings"]
===
> var oLa = new oPgmHtml.oI.fILayoutAbsolute()
undefined
> Object.getOwnPropertyNames(oLa).sort()
["fCnrRecalc", "fIclToHtml", "settings"]
> Object.getOwnPropertyNames(oLa.__proto__).sort()
["fCnrRecalc", "fIltApplyClasses", "fIltRenderPost", "fIltRenderPre", "fIltToHtml", "settings"]
> Object.getOwnPropertyNames(oLa.__proto__.__proto__).sort()
["constructor"]
> Object.getOwnPropertyNames(oLa.__proto__.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
===
> Object.getOwnPropertyNames((new tinymce.ui.LayoutAbsolute)).sort()
["settings"]
> Object.getOwnPropertyNames((new tinymce.ui.LayoutAbsolute).__proto__).sort()
["Defaults", "recalc", "renderHtml"]
> Object.getOwnPropertyNames((new tinymce.ui.LayoutAbsolute).__proto__.__proto__).sort()
["Defaults", "applyClasses", "init", "postRender", "preRender", "recalc", "renderHtml"]
> Object.getOwnPropertyNames((new tinymce.ui.LayoutAbsolute).__proto__.__proto__.__proto__).sort()
["constructor"]
> Object.getOwnPropertyNames((new tinymce.ui.LayoutAbsolute).__proto__.__proto__.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
===
> Object.getOwnPropertyNames(tinymce.ui.AbsoluteLayout.prototype).sort()
["Defaults", "recalc", "renderHtml"]

pwpo2I.fILAFitFtr (Ilafit)

name::
* McsEngl.pwpo2I.fILAFitFtr (Ilafit)@cptIt,
* McsEngl.pwpfILAFitFtr@cptIt,
* McsEngl.oPgmHtml.oI.fILayoutAbsoluteFit@cptIt,
* McsEngl.phFitlayout@cptIt,
* McsEngl.pwpfILayoutAbsoluteFit@cptIt,
* McsEngl.pwp'FitLayout@cptIt,
* McsEngl.tinymce.ui.FitLayout@cptIt,
* McsEngl.phIlaf@cptIt,

_DEFINITION:
- This layout manager will resize the control to be the size of it's parent container

pwpoILAFit.MEMBER:
> 2015-03-03:
Object.getOwnPropertyNames(new oPgmHtml.oI.fILAFit).sort()["fIlytCnrRecalc"]Object.getOwnPropertyNames((new oPgmHtml.oI.fILAFit).__proto__).sort()["fIlytCnrRecalc", "oIlytSettings"]

pwpo2I.fILAFlexFtr (Ilaflx)

name::
* McsEngl.pwpo2I.fILAFlexFtr (Ilaflx)@cptIt,
* McsEngl.pwpfILAFlexFtr@cptIt,
* McsEngl.oPgmHtml.oI.fILayoutAbsoluteFlex@cptIt,
* McsEngl.phFlexlayout@cptIt,
* McsEngl.pwpfILayoutAbsoluteFlex@cptIt,
* McsEngl.pwp'FlexLayout@cptIt,
* McsEngl.tinymce.ui.FlexLayout@cptIt,
* McsEngl.phIlax@cptIt,

_DEFINITION:
- This layout manager works similar to the CSS flex box

pwpoILAFlex.MEMBER:
> 2015-03-03:
Object.getOwnPropertyNames(new oPgmHtml.oI.fILAFlex).sort()["fIlytCnrRecalc"]Object.getOwnPropertyNames((new oPgmHtml.oI.fILAFlex).__proto__).sort()["fIlytCnrRecalc", "oIlytSettings"]

pwpo2I.fILAGridFtr (Ilagrd)

name::
* McsEngl.pwpo2I.fILAGridFtr (Ilagrd)@cptIt,
* McsEngl.pwpfILAGridFtr@cptIt,
* McsEngl.oPgmHtml.oI.fILayoutAbsoluteGrid@cptIt,
* McsEngl.phGridlayout@cptIt,
* McsEngl.pwpfILayoutAbsoluteGrid@cptIt,
* McsEngl.pwp'fCLAbsoluteGrid@cptIt,
* McsEngl.pwp'GridLayout@cptIt,
* McsEngl.tinymce.ui.GridLayout@cptIt,

* McsEngl.phIlagrd@cptIt,
* McsEngl.phIlag@cptIt,

_DEFINITION:
- This layout manager places controls in a grid

pwpoILAGrid.MEMBER:
> 2015-03-03:
Object.getOwnPropertyNames(new oPgmHtml.oI.fILAGrid).sort()["fIlytCnrRecalc"]Object.getOwnPropertyNames((new oPgmHtml.oI.fILAGrid).__proto__).sort()["fIlytCnrRecalc", "oIlytSettings"]

pwpo2I.fILFlowFtr (Ilflw)

name::
* McsEngl.pwpo2I.fILFlowFtr (Ilflw)@cptIt,
* McsEngl.pwpfILFlowFtr@cptIt,
* McsEngl.phFlowlayout@cptIt,
* McsEngl.pwpfILayoutFlow@cptIt,
* McsEngl.pwp'FlowLayout@cptIt,
* McsEngl.tinymce.ui.FlowLayout@cptIt,

* McsEngl.phIlflw@cptIt,
* McsEngl.phIlf@cptIt,

_DEFINITION:
- This layout manager will place the controls by using the browsers native layout

pwpoILFlow.MEMBER:
> 2015-03-03:
Object.getOwnPropertyNames(new oPgmHtml.oI.fILFlow).sort()["fIlytCnrRecalc", "oIlytSettings"]Object.getOwnPropertyNames((new oPgmHtml.oI.fILFlow).__proto__).sort()["fIlytApplyClasses", "fIlytCnrRecalc", "fIlytRenderPost", "fIlytRenderPre", "fIlytToHtml", "oIlytSettings"]
===
Object.getOwnPropertyNames(new oPgmHtml.oI.fILayoutFlow()).sort()
["fIltCnrRecalc", "oIltSettings"]
Object.getOwnPropertyNames(new oPgmHtml.oI.fILayoutFlow().__proto__).sort()
["fIltApplyClasses", "fIltCnrRecalc", "fIltRenderPost", "fIltRenderPre", "fIltToHtml", "oIltSettings"]
Object.getOwnPropertyNames(new oPgmHtml.oI.fILayoutFlow().__proto__.__proto__).sort()
["constructor"]
Object.getOwnPropertyNames(new oPgmHtml.oI.fILayoutFlow().__proto__.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toSource", "toString", "unwatch", "valueOf", "watch"]

pwpo2I.fILFStackFtr (Ilfstk)

name::
* McsEngl.pwpo2I.fILFStackFtr (Ilfstk)@cptIt,
* McsEngl.pwpfILFStackFtr@cptIt,
* McsEngl.oPgmHtml.oI.fILayoutFlowStack@cptIt,
* McsEngl.phStacklayout@cptIt,
* McsEngl.pwpfILayoutFlowStack@cptIt,
* McsEngl.pwp'StackLayout@cptIt,
* McsEngl.tinymce.ui.StackLayout@cptIt,
* McsEngl.phIlfs@cptIt,

_DEFINITION:
- This layout uses the browsers layout when the items are blocks

pwpoILFStack.MEMBER:
> 2015-03-03:
Object.getOwnPropertyNames(new oPgmHtml.oI.fILFStack).sort()
["oIlytSettings"]
Object.getOwnPropertyNames((new oPgmHtml.oI.fILFStack).__proto__).sort()
["fIlytCnrRecalc", "oIlytSettings"]
===
> Object.getOwnPropertyNames(new oPgmHtml.oI.fILayoutFlowStack().__proto__).sort()
["fIltCnrRecalc", "oIltSettings"]
> Object.getOwnPropertyNames(new oPgmHtml.oI.fILayoutFlowStack()).sort()
["oIltSettings"]
> Object.getOwnPropertyNames(new oPgmHtml.oI.fILayoutFlowStack().__proto__.__proto__).sort()
["fIltApplyClasses", "fIltCnrRecalc", "fIltRenderPost", "fIltRenderPre", "fIltToHtml", "oIltSettings"]
> Object.getOwnPropertyNames(new oPgmHtml.oI.fILayoutFlowStack().__proto__.__proto__.__proto__).sort()
["constructor"]
> Object.getOwnPropertyNames(new oPgmHtml.oI.fILayoutFlowStack().__proto__.__proto__.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toSource", "toString", "unwatch", "valueOf", "watch"]

pwpo2I.fISelectorFtr (Islr)

name::
* McsEngl.pwpo2I.fISelectorFtr (Islr)@cptIt,
* McsEngl.pwpfISelectorFtr@cptIt,
* McsEngl.phSelector@cptIt,
* McsEngl.pwpfISelector@cptIt,
* McsEngl.pwp'Selector@cptIt,
* McsEngl.tinymce.ui.Selector@cptIt,
* McsEngl.phIslr@cptIt,

_DEFINITION:
- Selector engine, enables you to select controls by using CSS like expressions
var Selector = Class.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Selector.js]

pwpoISelector.MEMBER:
> 2015-03-04:
Object.getOwnPropertyNames(new oPgmHtml.oI.fISelector).sort()
["aIslrSelectors", "fIslrFind", "fIslrMatch"]
===
> Object.getOwnPropertyNames((new tinymce.ui.Selector))
["_selectors"]
> Object.getOwnPropertyNames((new tinymce.ui.Selector).__proto__)
["init", "match", "find"]
Object.getOwnPropertyNames((new tinymce.ui.Selector).__proto__.__proto__)
["constructor"]
Object.getOwnPropertyNames((new tinymce.ui.Selector).__proto__.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
===
(new tinymce.oUi.fSelector)
fClass {_selectors: Array[1], init: function, match: function, find: function}
_selectors: Array[1]
__proto__: fClass
find: function (container) {
init: function (selector) {
match: function (control, selectors) {
__proto__: fClass
constructor: function fClass() {
__proto__: Object
__defineGetter__: function __defineGetter__() { [native code] }
__defineSetter__: function __defineSetter__() { [native code] }
__lookupGetter__: function __lookupGetter__() { [native code] }
__lookupSetter__: function __lookupSetter__() { [native code] }
constructor: function Object() { [native code] }
hasOwnProperty: function hasOwnProperty() { [native code] }
isPrototypeOf: function isPrototypeOf() { [native code] }
propertyIsEnumerable: function propertyIsEnumerable() { [native code] }
toLocaleString: function toLocaleString() { [native code] }
toString: function toString() { [native code] }
valueOf: function valueOf() { [native code] }
get __proto__: function __proto__() { [native code] }
set __proto__: function __proto__() { [native code] }

pwpo2I.fIThrobberFtr (Itbr)

name::
* McsEngl.pwpo2I.fIThrobberFtr (Itbr)@cptIt,
* McsEngl.pwpfIThrobberFtr@cptIt,
* McsEngl.phThrobber@cptIt,
* McsEngl.pwpfIThrobber@cptIt,
* McsEngl.pwp'Throbber@cptIt,
* McsEngl.tinymce.ui.Throbber@cptIt,
* McsEngl.phItr@cptIt,

_DEFINITION:
- This class enables you to display a Throbber for any element
return function(elm) {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Throbber.js]

pwpoIThrobber'member:
* pwpfItbrHide (pwp'hide)
* pwpfItbrShow (pwp'show),
===
> 2015-03-04:
Object.getOwnPropertyNames(new oPgmHtml.oI.fIThrobber).sort()["fItbrHide", "fItbrShow"]
===
> Object.getOwnPropertyNames((new tinymce.ui.Throbber)).sort()
["hide", "show"]
Object.getOwnPropertyNames((new tinymce.ui.Throbber).__proto__).sort()
["constructor"]
Object.getOwnPropertyNames((new tinymce.ui.Throbber).__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

pwpo2I.oIMovable (Imvl)

name::
* McsEngl.pwpo2I.oIMovable (Imvl)@cptIt,
* McsEngl.phMovable@cptIt,
* McsEngl.pwpoIMovable@cptIt,
* McsEngl.pwp'Movable@cptIt,
* McsEngl.tinymce.ui.Movable@cptIt,

* McsEngl.phImvl@cptIt,
* McsEngl.phImv@cptIt,

_DEFINITION:
- Movable mixin
return {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Movable.js]

pwpoIMovable.MEMBER:
> 2015-03-04:
Object.getOwnPropertyNames(oPgmHtml.oI.oIMovable).sort()["fImvlMoveBy", "fImvlMoveRelative", "fImvlMoveTo", "fImvlTestRltv"]

pwpo2I.oIResizable (Irsz)

name::
* McsEngl.pwpo2I.oIResizable (Irsz)@cptIt,
* McsEngl.phResizable@cptIt,
* McsEngl.pwpoIResizable@cptIt,
* McsEngl.pwp'Resizable@cptIt,
* McsEngl.tinymce.ui.Resizable@cptIt,

* McsEngl.phIrsz@cptIt,
* McsEngl.phIrs@cptIt,

_DEFINITION:
- Resizable mixin
return {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Resizable.js]

pwpoIResizable.MEMBER:
* pwpfIrszResizeBy (pwp'resizeBy)
* pwpfIrszResizeTo (pwp'resizeTo)
* pwpfIrszResizeToContent (pwp'resizeToContent)
===
> 2015-03-04:
Object.getOwnPropertyNames(oPgmHtml.oI.oIResizable).sort()["fIrszResizeBy", "fIrszResizeTo", "fIrszResizeToContent"]
===
> Object.getOwnPropertyNames((tinymce.ui.Resizable)).sort()
["resizeBy", "resizeTo", "resizeToContent"]
> Object.getOwnPropertyNames((tinymce.ui.Resizable).__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

pwpo2I.oIScrollable (IScl)

name::
* McsEngl.pwpo2I.oIScrollable (IScl)@cptIt,
* McsEngl.pwpoIScrollable@cptIt,
* McsEngl.pwp'Scrollable@cptIt,
* McsEngl.tinymce.ui.Scrollable@cptIt,

* McsEngl.phIscl@cptIt,
* McsEngl.phIsbl@cptIt,
* McsEngl.phIsl@cptIt,

_DEFINITION:
- This mixin makes controls scrollable using custom scrollbars
return {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Scrollable.js]

pwpoIScrollableMEMBER:
* pwpfIslInt
* pwpfIslRenderScroll, (pwp'renderScrol)
===
> 2015-03-04:
Object.getOwnPropertyNames(oPgmHtml.oI.oIScrollable).sort()
["fIsblInit", "fIsblRenderScroll"]
===
> Object.getOwnPropertyNames((tinymce.ui.Scrollable)).sort()
["init", "renderScroll"]
Object.getOwnPropertyNames((tinymce.ui.Scrollable).__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

oPgmWpg.o2Util

name::
* McsEngl.oPgmWpg.o2Util@cptIt,
* McsEngl.pwpo2Util@cptIt,
* McsEngl.pwp'namespace.tinymce.util@cptIt,
* McsEngl.tinymce.util@cptIt,
* McsEngl.pwp'util-namespace@cptIt,
* McsEngl.pwp'tinymce.util-namespace@cptIt,
* McsEngl.pwp'tinymce.util-object@cptIt,

_DESCRIPTION:
Contains various utility classes such as json parser, cookies etc.
[http://www.tinymce.com/wiki.php/api4:namespace.tinymce.util]

pwpo2Util.MEMBER:
> 2016-04-24
Object.getOwnPropertyNames(oPgmWpg.o2Util).sort()
["fUUrlRo", "oUCore", "oUI18n", "oUKey", "oUTool", "oUXhr"]
===
> Object.getOwnPropertyNames(oPgmHtml.oUtil).sort()
["fUtlClass", "fUtlJSONRequest", "fUtlQuirks", "fUtlURI", "oTools", "oUtlI18n", "oUtlJSON", "oUtlJSONP", "oUtlObservable", "oUtlStorageLocal", "oUtlTools", "oUtlVK", "oUtlXHR"]
===
> Object.getOwnPropertyNames(oPgmHtml.oUtil).sort()
["fUtlClass", "fUtlJSONRequest", "fUtlQuirks", "fUtlURI", "oTools", "oUtlI18n", "oUtlJSON", "oUtlJSONP", "oUtlObservable", "oUtlStorageLocal", "oUtlTools", "oUtlVK", "oUtlXHR"]

oPgmWpg.o2Util.fUUrlRo (UUrl)

name::
* McsEngl.oPgmWpg.o2Util.fUUrlRo (UUrl)@cptIt,
* McsEngl.pwpfUUrlRo@cptIt,
* McsEngl.pwpfUUrlFtr@cptIt, {2015-11-28}
* McsEngl.pwpfUUrl@cptIt, {2015-03-31}
* McsEngl.pwpfUtlURL@cptIt, {2014-12-18}
* McsEngl.pwpfUtlURI@cptIt,
* McsEngl.pwp'fUtlURI@cptIt,
* McsEngl.pwp'URI@cptIt,
* McsEngl.phUur@cptIt,

_DESCRIPTION:
Create object that handle URL functionality.
[hmnSngo.2015-11-28]

pwpoUUrlRo.MEMBER:
* pwpfUUrlHrefRs:fUUrlHrefRs(bProtocolHostNo)
* pwpfUUrlPathSet:fUUrlPathSet(sPathIn)
* pwpfUUrlToAbsOnCurrentRs:fUUrlToAbsOnCurrentRs(sUrlRlvIn)
* pwpfUUrlToAbsOnInputRs:fUUrlToAbsOnInputRs(sDirAbsIn, sPathRlvIn)
* pwpfUUrlToRtvOnCurrentRs:fUUrlToRtvOnCurrentRs(sUrlAbsIn)
* pwpfUUrlToRtvOnInputRs:fUUrlToRtvOnInputRs(base, sPathAbsIn)
* pwpoGeneric:Object
* pwpsUUrlAuthority:"synagonism.net"
* pwpsUUrlDir:"/"
* pwpsUUrlDirAbs:"http://synagonism.net/"
* pwpsUUrlFile:"index.html"
* pwpsUUrlHash:"idP1"
* pwpsUUrlHost:"synagonism.net"
* pwpsUUrlHref:"http://synagonism.net/index.html#idP1"
* pwpsUUrlOrigin:"http://synagonism.net"
* pwpsUUrlPassword:undefined
* pwpsUUrlPath:"/index.html"
* pwpsUUrlPathHash:"/index.html#idP1"
* pwpsUUrlPort:undefined
* pwpsUUrlProtocol:"http"
* pwpsUUrlQuery:undefined
* pwpsUUrlRelative:"/index.html#idP1"
* pwpsUUrlUser:undefined
* pwpsUUrlUserinfo:undefined
===
* sUUrlHref:    "http://synagonism.net/worldview/mise/index.html#idHead",
* sUUrlProtocol:  "http",
* sUUrlAuthority:  "synagonism.net",
* sUUrlUserinfo:  undefined,
* sUUrlUser:    undefined,
* sUUrlPassword:  undefined,
* sUUrlHost:    "synagonism.net",
* sUUrlPort:    undefined,
* sUUrlOrigin:    "http://synagonism.net",
* sUUrlRelative:  "/worldview/mise/index.html",
* sUUrlPath:    "/worldview/mise/index.html",
* sUUrlPathHash:  "/worldview/mise/index.html#idHead",
* sUUrlDir:    "/worldview/mise/",
* sUUrlDirAbs:    "http://synagonism.net/worldview/mise/",
* sUUrlFile:    "index.html",
* sUUrlQuery:    undefined,
* sUUrlHash:    "idHead",
===
//2015-11-29
> Object.getOwnPropertyNames(o).sort()
[pwpfUUrlHref, pwpfUUrlPathSet, pwpfUUrlToAbsOnCurrent, pwpfUUrlToAbsOnInput, pwpfUUrlToRtvOnCurrent, pwpfUUrlToRtvOnInput, pwpoGenerc, pwpsUUrlAuthority, pwpsUUrlDir, pwpsUUrlDirAbs, pwpsUUrlFile, pwpsUUrlHash, pwpsUUrlHost, pwpsUUrlHref, pwpsUUrlPassword, pwpsUUrlPath, pwpsUUrlPort, pwpsUUrlProtocol, pwpsUUrlQuery, pwpsUUrlRelative, pwpsUUrlUser, pwpsUUrlUserinfo,]
===
* anchor
* authority
* directory: protocol://host/relativepath/directory/file#anchor
* file
* host
* password
* path
* port
* protocol
* query
* relative
* source: the whole sInUrl
* user
* userInfo
===
* pwpfUurToAbsolute (pwp'toAbsolute)
Converts the specified URI into a absolute URI based on the current URI instance location
* pwpfUurToRelative (pwp'toRelative)
Converts the specified URI into a relative URI based on the current URI instance location
===
> 2015-05-05:
Object.getOwnPropertyNames(oPgmHtml.oMedEditorActive.oEdrUUrlProgram).sort()
["fUUrlHref", "fUUrlPathSet", "fUUrlToAbsolute", "fUUrlToPathRel", "fUUrlToRelative", "oUUrlSettings", "sUUrlAuthority", "sUUrlDir", "sUUrlFile", "sUUrlHash", "sUUrlHost", "sUUrlHref", "sUUrlPassword", "sUUrlPath", "sUUrlPort", "sUUrlProtocol", "sUUrlQuery", "sUUrlRelative", "sUUrlUser", "sUUrlUserinfo"]
Object.getOwnPropertyNames(oPgmHtml.oMedEditorActive.oEdrUUrlProgram.__proto__).sort()
["constructor", "fUUrlToPathAbs"]
===
> Object.getOwnPropertyNames(tinymce.util.URI).sort()
["arguments", "caller", "length", "name", "prototype"]
> Object.getOwnPropertyNames(tinymce.util.URI.prototype).sort()
["getURI", "setPath", "toAbsPath", "toAbsolute", "toRelPath", "toRelative"]

pwpfUUrlHref():
> var o=oPgmWpg.o2Util.fUUrl("http://synagonism.net/drPgmWpg/index.html#idMeta")
undefined
> o.fUUrlHref()
"http://synagonism.net/drPgmWpg/index.html#idMeta"
> o.fUUrlHref(false)
"http://synagonism.net/drPgmWpg/index.html#idMeta"
> o.fUUrlHref(true)
"/drPgmWpg/index.html#idMeta"

pwpfUUrlToAbsolute():
> var o=oPgmWpg.o2Util.fUUrl("http://synagonism.net/drPgmWpg/index.html#idMeta")
undefined
> o.fUUrlToAbsolute("dir/file.html")
"http://synagonism.net/drPgmWpg/dir/file.html"
> o.fUUrlToAbsolute("/dir/file.html")
"http://synagonism.net/drPgmWpg/dir/file.html"

oPgmWpg.o2Util.oUCore (UCor)

name::
* McsEngl.oPgmWpg.o2Util.oUCore (UCor)@cptIt,
* McsEngl.pwpoUCore@cptIt,
* McsEngl.pwpoUTool@cptIt,
* McsEngl.pwpoTools@cptIt,
* McsEngl.pwp'Tools@cptIt,

_DESCRIPTION:
The-members of this object are added in the-MAIN-self-executed-function.
[hmnSngo.2015-12-12]

oUCore.member:
> 2016-04-24
Object.getOwnPropertyNames(oPgmWpg.o2Util.oUCore).sort()
["fUCorArrayCreateRa", "fUCorArrayIndexRn", "fUCorArrayRb", "fUCorEachRb", "fUCorGrepRa", "fUCorObtExtendRo", "fUCorObtMakeRo", "fUCorReturnFalseRb", "fUCorReturnTrueRb", "fUCorStringSplitRa", "fUCorToArrayRa", "fUCorTrimRs", "fUCorTypeRb", "fUCorWalk"]
===
//2016-03-15
>Object.getOwnPropertyNames(oPgmWpg.o2Util.oUCore).sort()
["fraUCorArrayCreate", "fraUCorGrep", "fraUCorStringSplit", "fraUCorToArray", "frbUCorArray", "frbUCorEach", "frbUCorReturnFalse", "frbUCorReturnTrue", "frbUCorType", "frnUCorArrayIndex", "froUCorObtExtend", "froUCorObtMake", "frsUCorTrim", "fruUCorWalk"]
//2015-12-12
> Object.getOwnPropertyNames(oPgmWpg.o2Util.oUCore).sort()
["fUArrayCreate", "fUArrayIndex", "fUBArray", "fUBTypeof", "fUEach", "fUGrep", "fUObtExtend", "fUObtMake", "fUResolve", "fUReturnFalse", "fUReturnTrue", "fUStringSplit", "fUToArray", "fUTrim", "fUWalk"]

oPgmWpg.fUCorArrayCreate

name::
* McsEngl.oPgmWpg.fUCorArrayCreate@cptIt,
* McsEngl.pwpfUCorArrayCreate@cptIt,
* McsEngl.pwpfTlsArrayCreate@cptIt,
* McsEngl.pwp'fTlsArrayCreate@cptIt,
* McsEngl.pwp'map@cptIt,

_DEFINITION:
  * Creates a new array by the return value of each iteration function call. This enables you to convert
  * one array list into another.
  *
  * @method map
  * @param {Array} a Array of items to iterate.
  * @param {function} f Function to call for each item. It's return value will be the new value.
  * @return {Array} Array with new values based on function return values.
  */
 function map(a, f) {

[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Tools.js +line:166]

oPgmWpg.fUTolArrayIndex

name::
* McsEngl.oPgmWpg.fUTolArrayIndex@cptIt,
* McsEngl.pwpfTlsArrayIndex@cptIt,
* McsEngl.pwp'fTlsArrayIndex@cptIt,
* McsEngl.pwp'inArray@cptIt,

_DEFINITION:
function inArray(a, v) {
   var i, l;

   if (a) {
     for (i = 0, l = a.length; i < l; i++) {
       if (a[i] === v) {
         return i;
       }
     }
   }

   return -1;
 } Tools.js:342
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Tools.js +line:342]

oPgmWpg.fUTolBArray

name::
* McsEngl.oPgmWpg.fUTolBArray@cptIt,
* McsEngl.pwpfTlsBArray@cptIt,
* McsEngl.pwp'fTlsBArray@cptIt,
* McsEngl.pwp'isArray@cptIt,

_DESCRIPTION:
  * Returns true/false if the object is an array or not.
  *
  * @method isArray
  * @param {Object} obj Object to check.
  * @return {boolean} true/false state if the object is an array or not.
  */
 var isArray = Array.isArray || function(obj) {
   return Object.prototype.toString.call(obj) === "[object Array]";
 };
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Tools.js +line:37]

oPgmWpg.fUTolBType

name::
* McsEngl.oPgmWpg.fUTolBType@cptIt,
* McsEngl.pwpfTlsBType@cptIt,
* McsEngl.pwp'is@cptIt,
* McsEngl.pwp'fTlsBType@cptIt,

_DEFINITION:
  * Checks if a object is of a specific type for example an array.
  *
  * @method is
  * @param {Object} o Object to check type of.
  * @param {string} t Optional type to check for.
  * @return {Boolean} true/false if the object is of the specified type.
function is(o, t) {
   if (!t) {
     return o !== undefined;
   }

   if (t == 'array' && isArray(o)) {
     return true;
   }

   return typeof(o) == t;
 } Tools.js:49
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Tools.js +line:49]

oPgmWpg.fUTolEach

name::
* McsEngl.oPgmWpg.fUTolEach@cptIt,
* McsEngl.pwpfUTolEach@cptIt,
* McsEngl.pwpfTlsEach@cptIt,
* McsEngl.pwp'each@cptIt,
* McsEngl.pwp'fTlsEach@cptIt,

_DESCRIPTION:
Performs an iteration of all items in a collection such as an object or array. This method will execure the callback function for each item in the collection, if the callback returns false the iteration will terminate.
The callback has the following format: cb(value_or_item, key_or_index).
  *
  * @method each
  * @param {Object} o Collection to iterate.
  * @param {function} cb Callback function to execute for each item.
  * @param {Object} s Optional scope to execute the callback in.
  * @example
  * // Iterate an array
  * tinymce.each([1,2,3], function(v, i) {
  * console.debug("Value: " + v + ", Index: " + i);
  * });
  *
  * // Iterate an object
  * tinymce.each({a: 1, b: 2, c: 3], function(v, k) {
  * console.debug("Value: " + v + ", Key: " + k);
  * });

_FILE:
* \PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Tools.js +line127,

oPgmWpg.fUTolGrep

name::
* McsEngl.oPgmWpg.fUTolGrep@cptIt,
* McsEngl.pwpfTlsGrep@cptIt,
* McsEngl.pwp'fTlsGrep@cptIt,
* McsEngl.pwp'grep@cptIt,

_DEFINITION:
  * Filters out items from the input array by calling the specified function for each item.
  * If the function returns false the item will be excluded if it returns true it will be included.
  *
  * @method grep
  * @param {Array} a Array of items to loop though.
  * @param {function} f Function to call for each item. Include/exclude depends on it's return value.
  * @return {Array} New array with values imported and filtered based in input.
  * @example
  * // Filter out some items, this will return an array with 4 and 5
  * var items = tinymce.grep([1,2,3,4,5], function(v) {return v > 3;});
function grep(a, f) {
   var o = [];

   each(a, function(v) {
     if (!f || f(v)) {
       o.push(v);
     }
   });

   return o;
 } Tools.js:188
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Tools.js +line:188]

oPgmWpg.fUTolStringSplit

name::
* McsEngl.oPgmWpg.fUTolStringSplit@cptIt,
* McsEngl.pwpfTlsStringSplit@cptIt,
* McsEngl.pwp'explode@cptIt,
* McsEngl.pwp'fTlsStringSplit@cptIt,

_DEFINITION:
IN:
- {Array|string} as String to split.
- string} sDlmtr Delimiter to split by, default ','.
OUT:
{Array} Array of parts.
===
  * Splits a string but removes the whitespace before and after each value.
  * @param {string} s String to split.
  * @param {string} sDmr Delimiter to split by.
  * @example
  * // Split a string into an array with a,b,c
  * var arr = tinymce.explode('a, b, c');
function explode(s, d) {
   if (!s || is(s, 'array')) {
     return s;
   }

   return map(s.split(d || ','), trim);
 } Tools.js:477
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Tools.js +line:477]

oPgmWpg.fUTolObtExtend

name::
* McsEngl.oPgmWpg.fUTolObtExtend@cptIt,
* McsEngl.pwpfUTolObtExtend@cptIt,
* McsEngl.pwpfTlsObjExtend@cptIt,
* McsEngl.pwp'extend@cptIt,
* McsEngl.pwp'fTlsObtExtend@cptIt,

_DEFINITION:
//Adds in the-members of an object the-members of ONE or MORE other objects.
function extend(obj, ext) {
   var i, l, name, args = arguments, value;

   for (i = 1, l = args.length; i < l; i++) {
     ext = args[i];
     for (name in ext) {
       if (ext.hasOwnProperty(name)) {
         value = ext[name];

         if (value !== undefined) {
           obj[name] = value;
         }
       }
     }
   }

   return obj;
 } Tools.js:356
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Tools.js +line:356]

oPgmWpg.fUTolObtMake

name::
* McsEngl.oPgmWpg.fUTolObtMake@cptIt,
* McsEngl.pwpfTlsObtMake@cptIt,
* McsEngl.pwp'fTlsObtMake@cptIt,
* McsEngl.pwp'makeMap@cptIt,

_DEFINITION:
Makes a new object with members which have names out of an array or string and values empty objects.
  * @param {Array/String} items Items to make map out of.
  * @param {String} delim Optional delimiter to split string by.
  * @param {Object} map Optional map to add items to.
  * @return {Object} Name/value map of items.
  */
 function makeMap(items, delim, map) {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Tools.js +line:87]

oPgmWpg.fUTolToArray

name::
* McsEngl.oPgmWpg.fUTolToArray@cptIt,
* McsEngl.pwpfTlsToArray@cptIt,
* McsEngl.pwp'fTlsToArray@cptIt,
* McsEngl.pwp'toArray@cptIt,

_DEFINITION:
tinymce.toArray
function toArray(obj) {
   var array = [], i, l;

   for (i = 0, l = obj.length; i < l; i++) {
     array[i] = obj[i];
   }

   return array;
 } Tools.js:68
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Tools.js +line:68]

oPgmWpg.fUTolTrim

name::
* McsEngl.oPgmWpg.fUTolTrim@cptIt,
* McsEngl.pwpfTlsTrim@cptIt,
* McsEngl.pwp'fTlsTrim@cptIt,
* McsEngl.pwp'trim@cptIt,

_DEFINITION:
tinymce.trim
function (str) {
   return (str === null || str === undefined) ? '' : ("" + str).replace(whiteSpaceRegExp, '');
 } Tools.js:26
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Tools.js +line:26]

oPgmWpg.fUTolWalk (oPgmWpg.o2Util.oUTool)

name::
* McsEngl.oPgmWpg.fUTolWalk (oPgmWpg.o2Util.oUTool)@cptIt,
* McsEngl.pwpfTlsWalk@cptIt,
* McsEngl.pwp'fWalk@cptIt,
* McsEngl.pwp'fTlsWalk@cptIt,

_DEFINITION:
  * Executed the specified function for each item in a object tree.
  * @param {Object} o Object tree to walk though.
  * @param {function} f Function to call for each item.
  * @param {String} n Optional name of collection inside the objects to walk for example childNodes.
  * @param {String} s Optional scope to execute the function in.
function walk(o, f, n, s) {
   s = s || this;

   if (o) {
     if (n) {
       o = o[n];
     }

     each(o, function(o, i) {
       if (f.call(s, o, i, n) === false) {
         return false;
       }

       walk(o, f, n, s);
     });
   }
 } Tools.js:384
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Tools.js +line:384]

_MEMBER:
> oPgmHtml.oUtil.oTools
Object {
pwp'fTlsArrayCreate: function fTlsArrayCreate(a, f) {
pwp'fTlsArrayIndex: function fTlsArrayIndex(a, v) {
pwp'fTlsBArray: function (obj) {
pwp'fTlsBType: function fTlsBType(o, sType) {
pwp'fTlsEach: function fTlsEach(o, fCb, s) {
pwp'fTlsGrep: function fTlsGrep(a, f) {
pwp'fTlsObtExtend: function fTlsObtExtend(o, ext) {
fTlsObtMake: function fTlsObtMake(xNames, sDelim, o) {
pwp'fTlsResolve: function fTlsResolve(n, o) {
pwp'fTlsStringSplit: function fTlsStringSplit(as, sDlmtr) {
pwp'fTlsToArray: function fTlsToArray(obj) {
pwp'fTlsTrim: function (str) {
pwp'fTlsWalk: function fTlsWalk(o, f, n, sScope) {

pwp'fUTolObtMake

name::
* McsEngl.pwp'fUTolObtMake@cptIt,

_DESCRIPTION:
Makes a new object with members which have names out of an array or string and values empty objects.

oPgmWpg.o2Util.oUI18n (Ui8)

name::
* McsEngl.oPgmWpg.o2Util.oUI18n (Ui8)@cptIt,
* McsEngl.pwpoUtlI18n@cptIt,
* McsEngl.pwp'I18n@cptIt,
* McsEngl.pwp'Ui8@cptIt,

_DESCRIPTION:
I18n class that handles translation of TinyMCE UI. Uses po style with csharp style parameters.
Methods
add
Adds translations for a specific language code
translate
Translates the specified text
[http://www.tinymce.com/wiki.php/api4:class.tinymce.util.I18n]

_FILE:
* \PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\util\I18n.js,

_PROPERTY:
Object.getOwnPropertyNames(tinymce.util.I18n).sort()
["add", "data", "translate"]

oPgmWpg.o2Util.oUKey (UKey)

name::
* McsEngl.oPgmWpg.o2Util.oUKey (UKey)@cptIt,
* McsEngl.pwpoUKey@cptIt, {2015-03-31}
* McsEngl.pwpoUVk@cptIt,
* McsEngl.pwpoUtlVK@cptIt,
* McsEngl.pwp'oUtlVK@cptIt,
* McsEngl.pwp'VK@cptIt,
* McsEngl.phUvk@cptIt,

_DESCRIPTION:
This file exposes a set of the common KeyCodes for use. Please grow it as needed.
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\util\VK.js]

pwpoUKey.MEMBER:
> 2016-04-24
Object.getOwnPropertyNames(oPgmWpg.o2Util.oUKey).sort()
["fUKeyPressedMetakey", "fUKeyPressedModifier", "nUKeyBackspace", "nUKeyDelete", "nUKeyDown", "nUKeyEnter", "nUKeyLeft", "nUKeyRight", "nUKeySpacebar", "nUKeyTab", "nUKeyUp"]
===
* pwpfUKeyPressedMetakey (pwp'metaKeyPressed)
* pwpfUKeyPressedModifier (pwp'modifierPressed)

oPgmWpg.o2Util.oUTool (UTol)

name::
* McsEngl.oPgmWpg.o2Util.oUTool (UTol)@cptIt,
* McsEngl.pwpoUTool@cptIt,
* McsEngl.pwp'oUtlTools@cptIt,
* McsEngl.pwp'Tools@cptIt,
* McsEngl.phUtl@cptIt,

_GENERIC:
> typeof tinymce.util.Tools
"object"

_DEFINTION:
return {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Tools.js]

pwpoUTool.member:
> 2016-04-24
Object.getOwnPropertyNames(oPgmWpg.o2Util.oUTool).sort()
["fUTolArrayUniqueRa", "fUTolStyleToCssRs", "fUTolStyleToJsRs"]
===
//2016-03-15
> Object.getOwnPropertyNames(oPgmWpg.o2Util.oUTool).sort()
["fraArrayUnique", "frsCamelcaseStyle", "frsCamelcaseStyleRemove"]
===
Object.getOwnPropertyNames(tinymce.util.Tools).sort()
["create", "createNS", "each", "explode", "extend", "grep", "inArray", "is", "isArray", "makeMap", "map", "resolve", "toArray", "trim", "walk"]

_DESCRIPTION:
This class contains various utlity functions. These are also exposed directly on the tinymce namespace.
Methods
Method  Defined By
create
Creates a class, subclass or static singleton
tinymce.util.Tools
createNS
Creates a namespace on a specific object
tinymce.util.Tools
each
Performs an iteration of all items in a collection such as an object or array
tinymce.util.Tools
explode
Splits a string but removes the whitespace before and after each value
tinymce.util.Tools
grep
Filters out items from the input array by calling the specified function for each item
tinymce.util.Tools
inArray
Returns the index of a value in an array, this method will return -1 if the item wasn't found
tinymce.util.Tools
is
Checks if a object is of a specific type for example an array
tinymce.util.Tools
isArray
Returns true/false if the object is an array or not
tinymce.util.Tools
makeMap
Makes a name/object map out of an array with names
tinymce.util.Tools
map
Creates a new array by the return value of each iteration function call
tinymce.util.Tools
resolve
Resolves a string and returns the object from a specific structure
tinymce.util.Tools
toArray
Converts the specified object into a real JavaScript array
tinymce.util.Tools
trim
Removes whitespace from the beginning and end of a string
tinymce.util.Tools
walk
Executed the specified function for each item in a object tree
tinymce.util.Tools
[http://www.tinymce.com/wiki.php/api4:class.tinymce.util.Tools]

fUTolArrayUniqueRa

name::
* McsEngl.pwpfUTolArrayUniqueRa@cptIt,

fUTolStyleToCssRs

name::
* McsEngl.pwpfUTolStyleToCssRs@cptIt,

_DESCRIPTION:
Inputs a-js-style (xxYy) and outputs a-css-style (xx-yy)

fUTolStyleToJsRs

name::
* McsEngl.pwpfUTolStyleToJsRs@cptIt,

_DESCRIPTION:
Inputs a-css-style (xx-yy) and outputs a-js-style (xxYy)

oPgmWpg.o2Util.oUXHR (Uxr)

name::
* McsEngl.oPgmWpg.o2Util.oUXHR (Uxr)@cptIt,

* McsEngl.pwpoUtlXHR@cptIt,
* McsEngl.pwp'oUtilXHR@cptIt,
* McsEngl.pwp'XHR@cptIt,
* McsEngl.phUxr@cptIt,

_DESCRIPTION:
This class enables you to send XMLHTTPRequests cross browser.
Examples

// Sends a low level Ajax request
tinymce.util.XHR.send({
url: 'someurl',
success: function(text) {
console.debug(text);
}
});
Methods

Method  Defined By
send static
Sends a XMLHTTPRequest
tinymce.util.XHR
[http://www.tinymce.com/wiki.php/api4:class.tinymce.util.XHR]

pwpoUtlXHR:

> Object.getOwnPropertyNames(tinymce.util.XHR).sort()
["send"]

oPgmWpg.s1Id

name::
* McsEngl.oPgmWpg.s1Id@cptIt,

s1Id: "idPwp"

oPgmWpg.s1Shortcut#ql:idPwps1Shortcut#

name::
* McsEngl.oPgmWpg.s1Shortcut@cptIt,

oPgmWpg.s1Suffix

name::
* McsEngl.oPgmWpg.s1Suffix@cptIt,
* McsEngl.pwps1Suffix@cptIt,

_DESCRIPTION:
The-suffix the-files of the-program have like '' or '.min'.
It is detected in f1Init#ql:phlf1init# from 'pgmHtml(s1Suffix).js'.
[hmnSngo.2015-11-12]

oPgmWpg.s1UrlJs

name::
* McsEngl.oPgmWpg.s1UrlJs@cptIt,
* McsEngl.pwpsPhlUrlJs@cptIt,
* McsEngl.pwpsUrlJs@cptIt,

_CODE.PWP:
oPgmHtml.sUrlJs
"http://localhost/pgmHtml/pgm/js/"

oPgmWpg.s1UrlProgram

name::
* McsEngl.oPgmWpg.s1UrlProgram@cptIt,
* McsEngl.pwpsPhlUrlProgram@cptIt,
* McsEngl.pwpsUrlProgram@cptIt,

_CODE.PWP:
oPgmHtml.sUrlProgram
"http://localhost/pgmHtml/pgm/"

pwpalgo'code'js.API.GENERIC-SPECIFIC-TREE (Object.prototype)

name::
* McsEngl.pwpalgo'code'js.API.GENERIC-SPECIFIC-TREE (Object.prototype)@cptIt,
* McsEngl.pwp'code.js.MOST-GENERIC-OBJECT-(Object.prototype)@cptIt,
* McsEngl.pwpApiGs@cptIt,
* McsEngl.pwpop@cptIt,

_DESCRIPTION:
Object.prototype is THE-MOST-GENERIC object of the-js-code.
[hmnSngo.2015-11-08]

_SPECIFIC:
* oPgmHtml##
* oPgmHtml.f1Editor.prototype##
 * oPgmHtml.o1Editor##
* oPgmHtml.o1Env##
* oPgmHtml.o2Dom.fDNode.prototype##
* oPgmHtml.o2Dom.fDEvent.prototype##
 * oPgmHtml.o1DEvent##
* oPgmHtml.o2I.fIControl.prototype##

* o1Edr.oEdrFormatter

pwp'Browser-support

name::
* McsEngl.pwp'Browser-support@cptIt,
* McsEngl.pwpBrowser-support@cptIt,
* McsEngl.pwp'browser-compatibility@cptIt,

IE >= 9

addEventListener:
* IE9,

innerWidth:
* IE9

nextElementSibling:
* IE9, FF3.5,

TreeWalker:
* IE9

supportNo

IE < 9

cancelBubble

focusin, focusout

onmouseenter|leave:
* NO support (IE)

returnValue of Events.

srcElement:
* NO support.

pwp'Human

name::
* McsEngl.pwp'Human@cptIt,
* McsEngl.pgmWpg'human@cptIt,

Kaseluris.Nikos.1959:

pwp.EVOLUTING

name::
* McsEngl.pwp.EVOLUTING@cptIt,

{time.2014-11-01}:
I created this concept.

pwp.version

name::
* McsEngl.pwp.version@cptIt,

pgmWpg.1.{date}:
* publication.

pgmWpg.0-90.2016:
* pwp.0-90v,

pgmWpg.0-89.2016-05-06:
* generic-commands.

pgmWpg.0-85.2016-04-18:
* renamed: from pgmHml to pgmWpg.

pgmWpg.0.2013-10-02:
* tinymce 4.0.7 (2013-10-02)

pwp'tinymceToPgmWpg

name::
* McsEngl.pwp'tinymceToPgmWpg@cptIt,

* pwpevoluting, pwpevoluting, phevoluting, phtmlevoluting:
=== pwpTODO:
* o1Cfg and Cfgval variables to start with Cfg
* Events to start with Evt
* Plugins to start with Pgn
* Commands to start with Cmd

=== {2016-05-16 - 2016-05-09}:
* sICrlTitle => sICrlCfgTitle
* @param => @input
* oICrlPanel => oICrlCfgPanel
* sAttValueIn => sAttValIn
* oDoc.fICCnrRecalcRb() => oDoc.recalc()
* fICrlXValueRx => fICrlXCfgValueRx

=== {2016-04-18}:
* ONE type of cmds to store and execute, (no query cmds).

=== {2016-04-14}:
* RENAMED to PgmWpg from pgmHml

=== {2016-03-21}:
* remove evt-functions from oDMgr. Moved to o1Evt.

=== 2016-01-01:
* fDSelectionFtr problem in return {}, this not working
* fHToDNodSaxFtr, fDNodeFtr problem in return {}, no content.

=== 2015-12-30:
* o1Edr (observable) removed

=== 2015-12-24:
* o1Cfg
* RETURNED TO 2015-12-03 again.

=== 2015-12-22:
* RETURNED TO 2015-12-03 because of lost
- source code header footer
- table insert
- content insert
- save button

=== 2015-12-20:
* removed o1Edr. Functionaility moved to oPgmWpg and o1Cnt.

=== 2015-12-09:
* moved edrevts to oPgmWpg and removed oObservable.
- lost contextmenu.

=== 2015-12-05:
* oEdrCfg moved to o1Cfg.

=== 2015-12-04:
* Move the-program to 'drPgm'. This way someone can launch it with the 'index.html' only and configuring the-location of the-program.

=== 2015-12-03:
* the-object are NOT instances of the-factories!
- oPgmWpg.o2I.fICHBMenubtnFtr() instanceof oPgmWpg.o2I.fICHBMenubtnFtr > false
- use oICrlX.sICrlType instead-of

=== 2015-11-30:
* fDSelectionTrident removed. No support <IE9
* fDNode => fDNodeFtr

=== 2015-11-28:
* fUQuirks remove as unused.
* now I use FACTORY-OBJECTS, objects created from factory-functions with input and generic Object.prototype. Constructor-objects have as generic 'fConstructor.prototype'. ftr

=== 2015-11-26:
* UNDO lost. 2015-11-16 has correct functionality.

=== 2015-11-25:
* fDScriptloader converted to o1Scriptloader.

=== 2015-11-23:
* fDEvent converted to o1EvtPhl.

=== 2015-11-22:
* fDWalker REMOVED. replaced with native TreeWalker (IE>9).

=== 2015-11-17:
* o2Util.oUObservable REMOVED. Functionality Moved to oPgmHtml only, NOT o1Editor.

=== 2015-11-16:
* oDUtil Event functionality REMOVED. Moved to o1DEvent.

=== 2015-11-13:
* f1MgrFocus removed as unused.

=== 2015-11-12:
* oMgrEditor removed.
* fMedSetup moved inside fMedInit

=== 2015-11-10:
* removed: oMedEditorActive
* removed: aMedStoreEditor

=== 2015-11-09:
* page-break fixed.
* RETURDED to v2015-11-07 because windows were fullscreen.

* sCfgSelector removed. ONE editor.
* sEdrId removed as config. It is the-constant: 'idEdrTarget'.

=== 2015-11-07:
* >>> NO MORE fIClass

=== 2015-11-02:
* renamed fICollection ==> fIControlset (ICst)

=== 2015-11-01:
* fICrlInitCnr in fICContainer
* fICCToolbarcnr LOOSES events
* fICCTMenubar looses events from toolbar

=== 2015-10-20:
* RETURN to 2015-10-17
* Widget RENAMED to Hover
* table-properties: fixed
* delete-table: fixed

===
=== 2015-10-19:
* fDUtilEvent RENAMED fDEvent

=== 2015-10-18:
* Widget RENAMED to Hover

=== 2015-10-17:
* fCCCFormcnr to fICCFormcnr, problem in MediaPlugin

=== 2015-10-15:
* I removed oPgmHtml.oCStoreId_Eltobt = {};

=== 2015-10-12:
* fICWResizer. I removed oICWResizer from statusbar because always will be full-screen.
- removed fICWResizer.
- removed oICrlSettings.resize

=== 2015-10-11:
* fICrlAria: sICrlRole to be 'role' html-attribute.

=== 2015-10-10:
* the-members of oPgmHtml named 'xC...' from 'core'.


=== 2015-06-09:
* define fIControl = (function() { constructor, prototype})();
* setting defaults on prototype: fICWSpacer.prototype.oICrlSettingsDefaults, worked.
* fICWidget: oI.fIControl.prototype.init.apply(oICWidgetThis, oICrlSettingsIn);
to call the super method on this object.
fICrlRenderAfter removed code to work???, wanted oIControlThis insteadof oICrlSettings

=== 2015-06-08:
* visible => fICrlVisible
* fIControl => moved members to prototype

=== 2015-06-01:
* oDNode.type => oDNode.sDNodType

=== 2015-06-01:
* sICrlText => saICrlText, (guiWordcount text is an array)

=== 2015-05-31:
* oEdrSettings => oPgmHtml.html
* fCCWCFilepicker => fCCWCbFilepicker
* aoICrlItems => aICrlItems
* oPhlStoreIMembers ==> oPhlStoreIGui
* fCCWSpacer => fICWSpacer
* fCCTooltip => fICTooltip: init() wanted the-default-settings.
* sICrlPrefixClass REMOVED, remained some clsname.
* problem timFormats. BACK to 2015-05-22!!!

=== 2015-05-27:
* fCCWSpacer => fICWSpacer
=== 2015-05-25:
* fCCTooltip => fICTooltip: init() wanted the-default-settings.
=== 2015-05-23:
* sICrlPrefixClass REMOVED

=== 2015-05-22:
* classes ==> clsName

=== 2015-05-09:
* fsEdrTheme => sEdrTheme

=== 2015-05-05:
* fEditor cleanup

=== 2015-05-02:
* removed oUTool functions from oPgmHtml.
I use shortnames in wholemost selfexecuting function.

=== 2015-04-29:
* fFormatter cleanup

=== 2015-04-26:
* oDSelection cleanup
* oDWalker cleanup

=== 2015-04-23:
* oSettingsIn => oHTsgSettingsIn

=== 2015-04-22:
* sHScmAttname => name (problem in insert)

=== 2015-04-19:
* oShtml => oHtml to have one letter for this object.
* oSettingsIn => oEntSettingsIn
* oUStorageLocal removed
* oUJsonP removed
* oUJsonRequest removed
* oUJson cleanup
* oUXhr cleanup

=== 2015-04-18:
* fUUrl cleanup

=== 2015-04-17:
* fDUtilRange => moved to fDUtil.
* ph => pwp

=== 2015-04-14:
* fEditorcmd cleanup

=== 2015-04-12:
* fEditorcmd cleanup

=== 2015-04-11:
* MgrEditor cleanup
* MgrAddon cleanup

=== 2015-04-09:
* moved program to pgmHtml\pgm\ directory in order to include the-html-file.
* Medr => Mdr

=== 2015-04-08:
* fMgrUndo cleanup
* Uobl => UObv

=== 2015-04-07:
* fDUtil cleanup
* fDSelection cleanup
* fDUtlViewport => fDUtlOViewport

=== 2015-04-05:
* fDSelection cleanup
* FromPnode => FromDNode
* Dsln => DSln
* fDUtlCssLoad => fDUtlCssfileLoad
* fDUtlClassAdd => fDUtlClassvalueAdd
* fDUtil cleanup

=== 2015-04-04:
* DUtil cleanup

=== 2015-04-03:
* HtmlSchema => ShSchema

=== 2015-04-02:
* ToPnode => ToDNode
* Hcr => ShCrf
* fTool => fTol

=== 2015-04-01:
* data-mce => data-ph
* oDomPnode => oDPnode

=== 2015-03-31:
* fDUtlsRange => fDUtilRange
* oDom => oD
* fDom => fD
* oUVK => oUKey
* fUtl => fU
* fDUetDestroy REMOVED
* fDUetCancel REMOVED
* fDUetClean REMOVED
* oDomUtlEventThis.events => oDomUtlEventThis.oDUetEvents
* Tls => Tol
* oTools => oTool
* DomUtlsEvent => DomUtlEvent
* fDomUtils => fDomUtil
* Duts => DUtl
* Duet => DUet

=== 2015-03-30:
* this. => oNameThis.
* Dwkr => DWkr
* fShStyles => fShStyle
* oHtmlCharrefs => oShCharref
* Dslr => DSlr
* oEdrManagerUndo => oEdrMgrUndo
* self => oNameThis
* fHtmlSchema => fShSchema
* fHtmlBuffer => fShBuffer
* fHtmlPnodeEdrToString => fShFromPnodeEdr
* fHtmlPnodeToString => fShFromPnode
* fHtmlStringToPnode => fShToPnode
* oHtml => oShtml
* self => oNameThis

=== 2015-03-29:
* add => fMAdnAdd
* self => oNameThis
* fMngrAddon => fMgrAddon
* clsText //makes text of menuitem hover white

* REMOVE fExtendFcn DID NOT WORK
* lowercase Itypes.
* _fProto()
* fICollection,
* fIControl,
* fICContainer,
* fICCButtoncnr,
* fICCForm,
* fICCFFieldset,
* fICCFormitem,
* fICCPanel,
* fICCPFloat,
* fICCPFMenu,
* fICCPFWindow,
* fICCPFWMsgbox,
* fICCPTab,
* fICCToolbar,
* fICCTMenubar,
* fICPath,
* fICPElement,
* fICTooltip,
* fICWidget,
* fICWButton,
* fICWBMenu,
* fICWBMListbox,
* fICWBMSplit,
* fICWBPanel,
* fICWBPColor,
* fICWCombobox,
* fICWCFilepicker,
* fICWCheckbox,
* fICWCRadiobtn,
* fICWIframe,
* fICWLabel,
* fICWMenuitem,
* fICWResizer,
* fICWSpacer,
* fICWTextbox,

*** stored version 2015-03-29
* oIScrollable,
* oIResizable,
* oIMovable,
* oIFactory,
* fIThrobber,
* fISelector,
* fISlrFind => fISlrFindcln
* fILFStack,
* fILFlow,
* fILAGrid,
* fILAFlex,
* fILAFit,
* fILAbsolute,
* clsLayoutAbsItem,
* fILayout
* fIKeyboardnavigation,
* fIDragdrop,
* fICWTextbox
* fICWSpacer
* ficwresizehandler => ficwresizer
* fICWResizehandler => fICWResizer
* fICWMenuitem
* textStyle => fsICrlTextstyle // this destroyed formats in 2015-03-25brFormats
* fIcwMimHide
* fIcwMimShow
* clsMultiline
* IcwMim
* clsMenuitemSep
* clsMenuitemCheckbox // no css
* clsMenuitemNormal
* clsMenuitemPreview
* clsMenuitemExpand //no css
* fICWLabel
* clsStrong // no cls-strong
* fICWIframe
* IcwIfm
* clsIframe
* fCCWCRadiobutton => fICWCRadiobtn
* clsRadiobtn (no cls-radio)
* fCCWCheckbox
* clsLabel
* Icwchx => IcwChx
* fCCWCFilepicker
* fCCWCombobox
* clsPlaceholder
* clsCombobox

=== 2015-03-28:
* clsColorbtn
* _color => sIcwbpClrColor
* fCCWBPanel
* hidePanel => fIcwbPnlHide
* showPanel => fIcwbPnlShow
* fCCWBMSplit,
* clsOpen
* clsSplitbnt
* fCCWBMListbox,
* fCCWBMenu
* .menu => .aoICrlMenu
* clsCaret //shows the triangles next to menuitem
* fIcwbMnuHide
* fIcwbMnuShow
* fCCWButton
* clsIco
* clsBtn
* fCCWidget
* Imvl => IMvl
* clsActive //shows bar before paragraph menuitem
* IcWgt
* fCCTooltip
* clsWidget
* fICPElement,
* fICPath,
* cls-path-item => clsPathItem
* last => clsLast
* fICCTMenubar
* fCCCToolbar
* fCCCPTab
* fMngrWindow => fMgrWindow
* fCCCPFWMessagebox => fCCCPFWMsgbox
* fCCCPFWindow
* fIhdgDestroy => fIDdpDestroy
* fIHelperDrag => fIDragdrop
* statusbar => oIccpfWinStatusbar
* fullscreen => clsFullscreen
* fullscreen => fIccpfWinFullscreen
* fCCCPFMenu
* fCCCPFloat
* close => fIccpFltClose
* hideAll => fIccpFltHideAll
* fiexed => fIccpFltFixed
* fCCPanel => fICCPanel
* fCCCFormitem
* fCCCFFieldset
* fCCCForm
* submit => fIcCnrSubmit

=== 2015-03-27:
* fICCButtoncnr
* fICCButtongroup => fICCButtoncnr and ccbuttongroup
* fICContainer
* fILytToHtml => fILytToSHtml
* fIcCnrFromJSON => fIcCnrFromOJSON
* fIcCnrToJSON => fIcCnrToOJSON
* Ilyt => ILyt
* oInkFocusMove => oIKeyboardnavigation
* items() => fIcCnrClnofcontrols() //if (xxx.items)
* container => clsContainer
* Iccnr => IcCnr
* fIControl
* fICollection FROM broken27
* fICrlBActive => fICrlActive
* fICrlToHtml => fICrlToSHtml
* autoResize => bICrlAutoresize
* oCachId => oCacheId
* Islr => ISlr
* Icrl => ICrl
* Icln => ICln
* back to 2015-03-17 because of 'formats'.

=== 2015-03-10:
* oEdrSettings.name ==> oEdrSettings.xEdrName
=== 2015-03-09:
* renamed the names of Dom FROM Dxx TO Dxxx
=== 2015-03-08:
* on pwpfIcrlClassAdd added code to set the name of a css-class as 'clsName'.
=== 2015-03-05:
* fIControl SETTINGS:
=== 2015-03-04:
* control types can be writen in UPPERCASE.
* finished control-abbreviations: Iggxxx (1-leter-generic, 3-leter-control)
* FIXED fIKeyboardnavigation ESCAPE. IF 'this' is inside an eventlistener points to other object, needs 'self'.
=== 2015-03-01:
* control-abbreviations: Iggxxx (1-leter-generic, 3-leter-control)
* controls renamed to last-name only fCCCCName, fICCCName.
=== 2015-02-28:
- style => sIcrlStyle
* fIControl SETTINGS:
=== 2015-02-27:
* fIccnrFind('#replace').fIclnValue() RETURNS collection NOT control.
- name => sIcrlName
* fIControl SETTINGS:
=== 2015-02-26:
* oSettingsIn => oIcrlSettingsIn only on IControls.
* oIcrlSttgsIn => oIcrlSettingsIn
* RETURNED to 20150222-version because menuitems on formats did-not-work.

======
2014-11-12:
* finished names on Editor: name ===> xEdrName
======
2014-11-04:
editor.settings ===> editor.oEdrSettings
======
2014-11-01:
* created the PgmHtml concept (this).
======
2014-10-31:
* Ui ===> fUiName
======
2014-10-30:
* execCommand ===> fEdrExeccommand
======
2014-10-28:
* mce_ ===> id
* insert/video fixed (renaming needed)
* fEditor: addCommand ===> fEdrAddCommand
* theme.js renaming of functions.
* theme: removed renderInlineUI
* addClass ===> fDUClassAdd (DomUtils)
======
2014-10-27:
* fDomUtilsEvent: fEventFire ===> fDUEEventFire, unused.
======
2014-10-25:
* some oUi members ===> renamed to xUiName
* oUtil members ===> renamed to xUtlName
* oDom members ===> renamed to xDomName
* oEventutils ===> oUtilsEvent
* removed fullscreen menuitem, toolbutton from plugin.
* tinymce ===> oPgmHtml
======
2014-10-24:
* execCallback ===> fEdrExecCallback
* sBaseURL ===> sURLScript
* moved script to pgmHtml/js
* fUtilsDom:
- replace ===> fUtlDomReplace
- uniqueId ===> fUtlDomUniqueId
======
2014-10-23:
* fCCWButtonPanelColor (problem)
* fCWButtonMenuSplit (problem in toolbar)
* fCCWButtonMenuListbox (problem in values setting)
* fCCCToolbarMenubar (problem, there is and a new object)
* fCCCFormFieldset (nonused somewhere)
* fCCCForm
* fCCCPanelFloatMenu (problem on menu)
* fCCCFormitem (new fCCFormitem, problem table/properties)
======
2014-10-22:
* fCCPathElement ===> fCPathElement (needed on fCPath.init:
settings = fObtExtend({}, self.oDefaults, settings); //to add the defaults setts.
* fCCPath
======
2014-10-21:
* fCCPanelFloatWindow (problem)
* fCCPanelFloatMenu (problem)
* pluginAdvlist: each ===> fClnEach
* fCCCPanelFloat ===> fCCPanelFloat
* fCCCPanelTab ===> fCCPanelTab (one case = media)
======
2014-10-20:
* fCCCPanel ===> fCCPanel
- on container.init: self._oLayout = oUi.oFactory.fFtrCreateUiobject(settings.layout || self.layout); ===> self._oLayout = new oUi.fLayout();

* fCCCFormitem (problem on new container)
* oUi.fCCToolbar.prototype = new oUi.fCContainer() (problem on new container)
======
2014-10-19:
* oUi.fCCButtongroup.prototype = new oUi.fCContainer() (problem on new container)
* fCCContainer ===> fCContainer
- items ===> fCnrItems (problem in theme)
- renderNew ===> fCnrRenderNew
- preRender ===> fCnrRenderBefore
- recalc ===> fCnrRecalc
* _lastRect ===> _oLayoutrectLast (problem searchreplace foot)
* fCCWTextbox ===> fCWTextbox (problem)
* mce_ ===> id (problem insert_special_char)
======
2014-10-18:
* mce- ===> cls-
* fCCWSpacer ===> fCWSpacer (problem in searchreplace, nospace between buttons)
* fCCWResizehandle ===> fCWResizehandle ()
======
2014-10-17:
* fCCWResizehandle ===> fCWResizehandle ()
* fCCWMenuitem ===> fCWMenuitem (problem fcwmenuitem one case)
* fCCWLabel ===> fCWLabel (fccwlabel problem, image, template)
===
* fCCWIframe ===> fCWIframe (problem in template)
* fCCTooltip ===> fCTooltip (problem)
======
2014-10-16:
* fCCWidget ===> fCWidget
* fCControl ===> fControl
* fCControl:
- focus ===> fCrlFocus
- hide ===> fCrlHide (same with tinymce.oUtilsDom.hide)
- show ===> fCrlShow (
===
2013-10-02:
tinymce 4.0.7 (2013-10-02)

FvMcs.Cmrpgm.editor.tinyMCE (tmce)

_CREATED: {2013-06-26}

name::
* McsEngl.conceptIt581,
* McsEngl.Cmrpgm.editor.tinyMCE (tmce)@cptIt,
* McsEngl.FvMcs.Cmrpgm.editor.tinyMCE (tmce)@cptIt,
* McsEngl.program.tinyMCE@cptIt,
* McsEngl.tiny-moxicode-editor@cptIt,
* McsEngl.tinyMCE@cptIt581,
* McsEngl.tinymce-editor@cptIt581,
* McsEngl.tinymce-html-editor@cptIt581,
* McsEngl.tinymce-wysiwyg-html-editor@cptIt581,
* McsEngl.pgmTmce@cptIt, {2014-06-09}
* McsEngl.tmce@cptIt581,

DEFINITION

_DESCRIPTION:
TinyMCE is a platform independent web based Javascript HTML WYSIWYG editor control released as Open Source under LGPL.
TinyMCE has the ability to convert HTML TEXTAREA fields or other HTML elements to editor instances.
[http://www.tinymce.com/]

tmce'GENERIC

_GENERIC:
* html-editor#ql:html_editor@cptIt#

tmce'code

name::
* McsEngl.tmce'code@cptIt,

_ADDRESS.WPG:
* https://github.com/tinymce/tinymce,

_DESCRIPTION:
We use GitHub as a source repository for TinyMCE, if you wish to contribute, go to GitHub and fork the project then send a pull request when you have fixed it.
[http://www.tinymce.com/develop/source.php]

tmce'code'file

name::
* McsEngl.tmce'code'file@cptIt,
* McsEngl.tmce'file@cptIt,
* McsEngl.tmce'file-of-code@cptIt,

_DESCRIPTION:
* what are the files of the project.

_FILE_STRUCTURE:
/root/
* /js/
 * /tinymce/
   * /classes/
     * /dom/
     * /html/
     * /ui/
     * /util/
     - AddOnManager.js, Compat.js, Editor.js, EditorCommands.js
     - EditorManager.js, EnterKey.js, Env.js, FocusManager.js
     - ForceBlocks.js, Formatter.js, jquery.tinymce.js, LegacyInput.js
     - Shortcuts.js, UndoManager.js, WindowManager.js
   * /langs/
   * /plugins/
     * /pluginfolder1/
       - plugin.js
       - plugin.min.js
     * /pluginfolder2/
   * /skins/
     * /lightgrey/
   * /themes/
     * /modern/
   - tinymce.js
   - tinymce.min.js

FILE STRUCTURE
We have changed the file structure to match more common js project structures.
The number of files has also been dramatically reduced.
BASIC STRUCTURE

js/tinymce/tinymce.min.js
js/tinymce/plugins/table/plugin.min.js
js/tinymce/themes/modern/theme.min.js
js/tinymce/skins/lightgrey/skin.min.css

tmce'CDN

name::
* McsEngl.tmce'CDN@cptIt,

<script src="http://tinymce.cachefly.net/4.0/tinymce.min.js"></script>

tmce'file.html

name::
* McsEngl.tmce'file.html@cptIt,

tmce'file.html.EDITOR

name::
* McsEngl.tmce'file.html.EDITOR@cptIt,
* McsEngl.tmce'editor.html@cptIt,
* McsEngl.tmce'tinymce.html@cptIt,

_DESCRIPTION:
* It is the html-file that contains the code to START the tmce-editor.
[\File1a\tinymce406Dev\tinymce.dev.html]

tmce'file.less

name::
* McsEngl.tmce'file.less@cptIt,

tmce'file.js

name::
* McsEngl.tmce'file.js@cptIt,

tmce'code'developing

name::
* McsEngl.tmce'code'developing@cptIt,
* McsEngl.tmce'developing@cptIt,

_package.json:
{
"name": "tinymce",
"version": "4.0.0",
"description": "TinyMCE rich text editor",
"author": "Johan S?rlin <spocke@moxiecode.com>",
"bugs": { "url" : "http://www.tinymce.com/develop/bugtracker.php" },
"engines": {
"node" : ">=0.8.0"
},
"dependencies": {
"amdlc": ">= 0.0.2",
"jshint": ">= 0.9.1",
"uglify-js": ">= 2.0.0",
"glob": ">= 3.1.12",
"moxie-zip": ">= 0.0.1",
"less": ">= 1.3.1",
"coverjs": ">= 0.0.14"
}
}

tmce'code'building

name::
* McsEngl.tmce'code'building@cptIt,
* McsEngl.tmce'building@cptIt,
* McsEngl.tmce'jake@cptIt,

_DESCRIPTION:
Building TinyMCE
(0. download from github)
1. Install Node.js
2. Open a console and go to the project directory
3. Write "npm install" to install all Node.js modules needed
4. Build TinyMCE by writing "jake"
[https://github.com/tinymce/tinymce]

_BUILD_TASK:
`jake`
Runs the minifyjs, less, jshint build tasks.

`jake -T`
List all build tasks.

`jake minify`
Compiles the core classes, plugins and themes into minified versions.

`jake less`
Compiles all LESS based skins into css files that can be included in the browser.

`jake jshint`
Runs all js code though jshint.

`jake release`
Builds release packages with the version specified in changelog.txt.

`jake bundle[themes:*]`
Bundles all themes into the tinymce core js files.

`jake bundle[plugins:*]`
Bundles all plugins into the tinymce core js files.

`jake minify bundle[themes:modern,plugins:table,paste]`
Minifies the core, adds the modern theme and adds the table and paste plugin into tinymce.min.js.

tmce'code'contributing

name::
* McsEngl.tmce'code'contributing@cptIt,
* McsEngl.tmce'contributing@cptIt,

_ADDRESS.WPG:
* http://www.tinymce.com/develop/contributing.php,

_DESCRIPTION:
How to Contribute
The TinyMCE source code is hosted on Github. Through Github you can submit pull requests and log new bugs and feature requests.
When you submit a pull request, you will get a notice about signing the Contributors License Agreement (CLA). You should have a valid email address on your GitHub account, and you will be sent a key to verify your identity and digitally sign the agreement. After you signed your pull request will automatically be ready for review & merge.
[https://github.com/tinymce/tinymce] 2016-01-25
===
Since TinyMCE is an Open Source Software project we encourage developers to contribute patches and code for us to include in the main package of TinyMCE. However there are a few rules and limitations when doing so and this page list them.

Contributed code will be licensed under the LGPL license but not limited to LGPL.
Copyright notices will be changed to Moxiecode Systems AB. But contributors will get credit for their work.
All third party code will be reviewed, tested and possible modified before being released.
These basic rules makes it possible for us to earn a living of the TinyMCE project but it also ensures that the code remains Open Source and under the LGPL license. All contributions will be added to the changelog and on the TinyMCE website.
[http://www.tinymce.com/develop/contributing.php]

tmce'code'installing

name::
* McsEngl.tmce'code'installing@cptIt,
* McsEngl.tmce'installing@cptIt,

_DESCRIPTION:
TinyMCE - Quick install
<html>
<head><!-- CDN hosted by Cachefly -->
<script src="http://tinymce.cachefly.net/4.0/tinymce.min.js"></script>
<script>
tinymce.init({selector:'textarea'});
</script>
</head>
<body>
<textarea>Your content here.</textarea>
</body>
</html>

tmce'configuring#ql:tmce'option#

name::
* McsEngl.tmce'configuring@cptIt,

tmce'code'localization

name::
* McsEngl.tmce'code'localization@cptIt,
* McsEngl.tmce'languages@cptIt,
* McsEngl.tmce'localization@cptIt,

_ADDRESS.WPG:
* https://www.transifex.com/projects/p/tinymce//
* http://www.tinymce.com/i18n//

_DESCRIPTION:

tmce'option.language_url:
A simple URL to where the language file to use.
We recommend using a site absolute URL, for example:

language_url : '/languages/fi.js'

tmce'option.language:
Installing a language pack

Download one or more languages here.
Unpack files into your tinymce/langs folder
In your tinymce.init({...}) config, set the language option to whatever language you want, example:
language : 'sv_SE',
And you are done, load up TinyMCE and check the new language.
[http://www.tinymce.com/wiki.php/Configuration:language]

SPECIFIC

name::
* McsEngl.tmce'code.specific@cptIt,

_SPECIFIC:
* plugin##

tmce'code.ADD-CLASS-TO-ELEMENT

name::
* McsEngl.tmce'code.ADD-CLASS-TO-ELEMENT@cptIt,

_CODE.PWP:
// Add a class to an element by id in the page
tinymce.DOM.addClass('someid', 'someclass');

// Add a class to an element by id inside the editor
tinymce.activeEditor.dom.addClass('someid', 'someclass');
[http://www.tinymce.com/wiki.php/api4:class.tinymce.dom.DOMUtils]

tmce'code.COLOR

name::
* McsEngl.tmce'code.COLOR@cptIt,
* McsEngl.tmce'color@cptIt,

toHex(rgbVal)

_DESCRIPTION:
public function toHex(rgbVal:String):String
Parses the specified RGB color value and returns a hex version of that color.
Params
Name  Type  Description
rgbVal   String  RGB string value like rgb(1,2,3)
Returns
String Hex version of that RGB value like#FF00FF.
[http://www.tinymce.com/wiki.php/api4:method.tinymce.dom.DOMUtils.toHex]

tmce'code.ERROR

name::
* McsEngl.tmce'code.ERROR@cptIt,
* McsEngl.tmce'error@cptIt,

tmce'error.button_different_size:
solution: <!DOCTYPE html> was missing!!!

tmce'error.Cannot_read_property 'buttons' of undefined
solution: needs on 'init':
self._oProto(settings);
settings = self.settings;

tmce'error.uncaught_syntaxerror_unexpected_token:
Uncaught SyntaxError: Unexpected token ( test-dev.html:30

tmce'error.uncaught_typeerror_cannot_call_method_X_of_null:
Uncaught TypeError: Cannot call method 'execCommand' of null

tmce'bug

name::
* McsEngl.tmce'bug@cptIt,

https://github.com/tinymce/tinymce/blob/master/js/tinymce/classes/ui/Container.js
449
_lastRect
===
https://github.com/tinymce/tinymce/blob/master/js/tinymce/classes/ui/Control.js:
341
self._lastLayoutRect = {};

https://github.com/tinymce/tinymce/blob/master/js/tinymce/classes/ui/Control.js: 1145:
tinymce.ui.Control.postRender:
if (this.settings.border)
===
if (settings.border)

tmce'code.EVENT

name::
* McsEngl.tmce'code.EVENT@cptIt,
* McsEngl.tmce'event@cptIt,

tinymce.Event

name::
* McsEngl.tinymce.Event@cptIt,
* McsEngl.tmce'Event-class@cptIt,

_DESCRIPTION:
Subclasses  ContentEvent CommandEvent ProgressStateEvent FocusEvent ResizeEvent
This is the base class for all TinyMCE events.

Properties
Property  Defined By
type
The event type name for example "click"
tinymce.Event

Methods
Method  Defined By
isDefaultPrevented
Returns true/false if the default action is to be prevented or not
tinymce.Event
isImmediatePropagationStopped
Returns true/false if the event immediate propagation is stopped or not
tinymce.Event
isPropagationStopped
Returns true/false if the event propagation is stopped or not
tinymce.Event
preventDefault
Prevents the default action of an event to be executed
tinymce.Event
stopImmediatePropagation
Prevents the event from propagating to listeners on the same object
tinymce.Event
stopPropagation
Stops the event from propagating up to listeners on parent objects
tinymce.Event
[http://www.tinymce.com/wiki.php/api4:class.tinymce.Event]

tinymce.ContentEvent

name::
* McsEngl.tinymce.ContentEvent@cptIt,
* McsEngl.tmce'ContentEvent-class@cptIt,

_DESCRIPTION:

tinymce.CommandEvent

name::
* McsEngl.tinymce.CommandEvent@cptIt,
* McsEngl.tmce'CommandEvent-class@cptIt,

_DESCRIPTION:

tinymce.ProgressStateEvent

name::
* McsEngl.tinymce.ProgressStateEvent@cptIt,
* McsEngl.tmce'ProgressStateEvent-class@cptIt,

_DESCRIPTION:

tinymce.FocusEvent

name::
* McsEngl.tinymce.FocusEvent@cptIt,
* McsEngl.tmce'FocusEvent-class@cptIt,

_DESCRIPTION:

tinymce.ResizeEvent

name::
* McsEngl.tinymce.ResizeEvent@cptIt,
* McsEngl.tmce'ResizeEvent-class@cptIt,

_DESCRIPTION:

tmce'code.SOURCE-CODE

name::
* McsEngl.tmce'code.SOURCE-CODE@cptIt,
* McsEngl.tmce'source-code@cptIt,

_MENUBAR.TINYMCE:
* Tools/Source code

_MENUITEM.TINYMCE:
* plugins: code

_TOOLITEM.TINYMCE:
* toolbar: code

tmce'code.SPECIAL-CHARACTER

name::
* McsEngl.tmce'code.SPECIAL-CHARACTER@cptIt,
* McsEngl.tmce'special-character@cptIt,

_MENUBAR.TINYMCE:
* Insert/Special character

_MENUITEM.TINYMCE:
* plugins: charmap

_TOOLITEM.TINYMCE:
* toolbar: charmap

tmce'code.API

name::
* McsEngl.tmce'code.API@cptIt,
* McsEngl.tmce'api@cptIt,

_ADDRESS.WPG:
* http://tinymce.moxiecode.com/js/tinymce/docs/api/index.html,

tmce'getContent

name::
* McsEngl.tmce'getContent@cptIt,

   <a href="javascript:;" onmousedown="alert(tinymce.get('elm1').getContent());">[Get contents]</a>
   <a href="javascript:;" onmousedown="alert(tinymce.get('elm1').getContent({format:'raw'}));">[Get raw]</a>
   <a href="javascript:;" onmousedown="alert(tinymce.get('elm1').selection.getContent());">[Get selected HTML]</a>
   <a href="javascript:;" onmousedown="alert(tinymce.get('elm1').selection.getContent({format : 'text'}));">[Get selected text]</a>

tmce'html5-output

name::
* McsEngl.tmce'html5-output@cptIt,

TinyMCE produces HTML5 loose output as of 4.0. This means it can handle all new HTML5 elements and also allow the deprecated HTML4 attributes and elements. If you want to use html4 or html5-strict output check the schema option for details.
[http://www.tinymce.com/wiki.php/Tutorial:Migration_guide_from_3.x]

tmce'selection

name::
* McsEngl.tmce'selection@cptIt,

   <a href="javascript:;" onmousedown="alert(tinymce.get('elm1').selection.getContent());">[Get selected HTML]</a>
   <a href="javascript:;" onmousedown="alert(tinymce.get('elm1').selection.getContent({format : 'text'}));">[Get selected text]</a>
   <a href="javascript:;" onmousedown="alert(tinymce.get('elm1').selection.getNode().nodeName);">[Get selected element]</a>

tmce'code.API.4.x

name::
* McsEngl.tmce'code.API.4.x@cptIt,

_DESCRIPTION:
TinyMCE API 4.x

Namespaces
tinymce
Root level namespace this contains classes directly releated to the TinyMCE editor.

tinymce .dom
Contains classes for handling the browsers DOM.

tinymce .html
Contains html parser and serializer logic.

tinymce .ui
Contains the different UI types such as buttons, listboxes etc.

tinymce .util
Contains various utility classes such as json parser, cookies etc.
[http://www.tinymce.com/wiki.php/api4:index]

tmce'class-code

name::
* McsEngl.tmce'class-code@cptIt,

_SPECIFIC:
* @class.tinymce
* @class.tinymce.AddOnManager
* @class.tinymce.Editor
* @class.tinymce.EditorCommands
* @class.tinymce.EditorManager
* @class.tinymce.Env
* @class.tinymce.FocusManager
* @class.tinymce.Formatter
* @class.tinymce.Plugin
* @class.tinymce.Theme
* @class.tinymce.UndoManager
* @class.tinymce.WindowManager
* @class.tinymce.dom.ControlSelection
* @class.tinymce.dom.DOMUtils
* @class.tinymce.dom.DomQuery
* @class.tinymce.dom.RangeUtils
* @class.tinymce.dom.ScriptLoader
* @class.tinymce.dom.Selection
* @class.tinymce.dom.Serializer
* @class.tinymce.dom.TreeWalker
* @class.tinymce.dom.TridentSelection
* @class.tinymce.html.DomParser
* @class.tinymce.html.Entities
* @class.tinymce.html.Node
* @class.tinymce.html.SaxParser
* @class.tinymce.html.Schema
* @class.tinymce.html.Schema
* @class.tinymce.html.Serializer
* @class.tinymce.html.Styles
* @class.tinymce.html.Writer
* @class.tinymce.html.Writer
* @class.tinymce.ui.AbsoluteLayout
* @class.tinymce.ui.Button
* @class.tinymce.ui.ButtonGroup
* @class.tinymce.ui.Checkbox
* @class.tinymce.ui.Collection
* @class.tinymce.ui.ColorButton
* @class.tinymce.ui.ComboBox
* @class.tinymce.ui.Container
* @class.tinymce.ui.Control
* @class.tinymce.ui.DragHelper
* @class.tinymce.ui.ElementPath
* @class.tinymce.ui.Factory
* @class.tinymce.ui.FieldSet
* @class.tinymce.ui.FilePicker
* @class.tinymce.ui.FitLayout
* @class.tinymce.ui.FlexLayout
* @class.tinymce.ui.FloatPanel
* @class.tinymce.ui.FlowLayout
* @class.tinymce.ui.Form
* @class.tinymce.ui.FormItem
* @class.tinymce.ui.FormatControls
* @class.tinymce.ui.GridLayout
* @class.tinymce.ui.Iframe
* @class.tinymce.ui.KeyboardNavigation
* @class.tinymce.ui.Label
* @class.tinymce.ui.Layout
* @class.tinymce.ui.ListBox
* @class.tinymce.ui.Menu
* @class.tinymce.ui.MenuBar
* @class.tinymce.ui.MenuButton
* @class.tinymce.ui.MenuItem
* @class.tinymce.ui.Panel
* @class.tinymce.ui.PanelButton
* @class.tinymce.ui.Path
* @class.tinymce.ui.Radio
* @class.tinymce.ui.ResizeHandle
* @class.tinymce.ui.Selector
* @class.tinymce.ui.Spacer
* @class.tinymce.ui.SplitButton
* @class.tinymce.ui.StackLayout
* @class.tinymce.ui.TabPanel
* @class.tinymce.ui.TextBox
* @class.tinymce.ui.Throbber
* @class.tinymce.ui.ToolTip
* @class.tinymce.ui.Toolbar
* @class.tinymce.ui.Widget
* @class.tinymce.ui.Window
* @class.tinymce.ui.Window
* @class.tinymce.util.I18n
* @class.tinymce.util.JSON
* @class.tinymce.util.JSONRequest
* @class.tinymce.util.LocalStorage
* @class.tinymce.util.Quirks
* @class.tinymce.util.Tools
* @class.tinymce.util.URI
* @class.tinymce.util.XHR
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\tinymce.js]

tmce'module

name::
* McsEngl.tmce'module@cptIt,

tmce'module.DEPENDENCY:
"tinymce/dom/EventUtils",
"tinymce/dom/Sizzle",
"tinymce/dom/DomQuery",
"tinymce/html/Styles",
"tinymce/dom/TreeWalker",
"tinymce/util/Tools",
"tinymce/dom/Range",
"tinymce/html/Entities",
"tinymce/Env",
"tinymce/dom/DOMUtils",
"tinymce/dom/ScriptLoader",
"tinymce/AddOnManager",
"tinymce/html/Node",
"tinymce/html/Schema",
"tinymce/html/SaxParser",
"tinymce/html/DomParser",
"tinymce/html/Writer",
"tinymce/html/Serializer",
"tinymce/dom/Serializer",
"tinymce/dom/TridentSelection",
"tinymce/util/VK",
"tinymce/dom/ControlSelection",
"tinymce/dom/Selection",
"tinymce/Formatter",
"tinymce/UndoManager",
"tinymce/EnterKey",
"tinymce/ForceBlocks",
"tinymce/EditorCommands",
"tinymce/util/URI",
"tinymce/util/Class",
"tinymce/ui/Selector",
"tinymce/ui/Collection",
"tinymce/ui/DomUtils",
"tinymce/ui/Control",
"tinymce/ui/Factory",
"tinymce/ui/Container",
"tinymce/ui/DragHelper",
"tinymce/ui/Scrollable",
"tinymce/ui/Panel",
"tinymce/ui/Movable",
"tinymce/ui/Resizable",
"tinymce/ui/FloatPanel",
"tinymce/ui/KeyboardNavigation",
"tinymce/ui/Window",
"tinymce/ui/MessageBox",
"tinymce/WindowManager",
"tinymce/util/Quirks",
"tinymce/util/Observable",
"tinymce/Shortcuts",
"tinymce/Editor",
"tinymce/util/I18n",
"tinymce/FocusManager",
"tinymce/EditorManager",    defines tinymce

"tinymce/LegacyInput",
"tinymce/util/XHR",
"tinymce/util/JSON",
"tinymce/util/JSONRequest",
"tinymce/util/JSONP",
"tinymce/util/LocalStorage",
"tinymce/Compat",
"tinymce/ui/Layout",
"tinymce/ui/LayoutAbsolute",
"tinymce/ui/Tooltip",
"tinymce/ui/Widget",
"tinymce/ui/Button",
"tinymce/ui/ButtonGroup",
"tinymce/ui/Checkbox",
"tinymce/ui/PanelButton",
"tinymce/ui/ColorButton",
"tinymce/ui/ComboBox",
"tinymce/ui/Path",
"tinymce/ui/ElementPath",
"tinymce/ui/FormItem",
"tinymce/ui/Form",
"tinymce/ui/FieldSet",
"tinymce/ui/FilePicker",
"tinymce/ui/FitLayout",
"tinymce/ui/FlexLayout",
"tinymce/ui/FlowLayout",
"tinymce/ui/FormatControls",
"tinymce/ui/GridLayout",
"tinymce/ui/Iframe",
"tinymce/ui/Label",
"tinymce/ui/Toolbar",
"tinymce/ui/MenuBar",
"tinymce/ui/MenuButton",
"tinymce/ui/ListBox",
"tinymce/ui/MenuItem",
"tinymce/ui/Menu",
"tinymce/ui/Radio",
"tinymce/ui/ResizeHandle",
"tinymce/ui/Spacer",
"tinymce/ui/SplitButton",
"tinymce/ui/StackLayout",
"tinymce/ui/TabPanel",
"tinymce/ui/TextBox",
"tinymce/ui/Throbber",

tmce'module.ALPHABETICALLY:
tinymce/AddOnManager: function AddOnManager() {
tinymce/Compat: Object
tinymce/Editor: function Editor(id, settings, editorManager) {
tinymce/EditorCommands: function (editor) {
tinymce/EditorManager: Object
tinymce/EnterKey: function (editor) {
tinymce/Env: Object
tinymce/FocusManager: function FocusManager(editorManager) {
tinymce/ForceBlocks: function (editor) {
tinymce/Formatter: function (ed) {
tinymce/LegacyInput: undefined
tinymce/Shortcuts: function (editor) {
tinymce/UndoManager: function (editor) {
tinymce/WindowManager: function (editor) {

tinymce/dom/ControlSelection: function (selection, editor) {
tinymce/dom/DOMUtils: function DOMUtils(doc, settings) {
tinymce/dom/DomQuery: function DomQuery(selector, context) {
tinymce/dom/EventUtils: function EventUtils() {
tinymce/dom/Range: function Range(dom) {
tinymce/dom/RangeUtils: function RangeUtils(dom) {
tinymce/dom/ScriptLoader: function ScriptLoader() {
tinymce/dom/Selection: function Selection(dom, win, serializer, editor) {
tinymce/dom/Serializer: function (settings, editor) {
tinymce/dom/Sizzle: function Sizzle( selector, context, results, seed ) {
tinymce/dom/TreeWalker: function (start_node, root_node) {
tinymce/dom/TridentSelection: function Selection(selection) {
tinymce/html/DomParser: function (settings, schema) {
tinymce/html/Entities: Object
tinymce/html/Node: function Node(name, type) {
tinymce/html/SaxParser: function (settings, schema) {
tinymce/html/Schema: function (settings) {
tinymce/html/Serializer: function (settings, schema) {
tinymce/html/Styles: function (settings, schema) {
tinymce/html/Writer: function (settings) {
tinymce/ui/Button: function Class() {
tinymce/ui/ButtonGroup: function Class() {
tinymce/ui/Checkbox: function Class() {
tinymce/ui/Collection: function Class() {
tinymce/ui/ColorButton: function Class() {
tinymce/ui/ComboBox: function Class() {
tinymce/ui/Container: function Class() {
tinymce/ui/Control: function Class() {
tinymce/ui/DomUtils: Object
tinymce/ui/DragHelper: function (id, settings) {
tinymce/ui/ElementPath: function Class() {
tinymce/ui/Factory: Object
tinymce/ui/FieldSet: function Class() {
tinymce/ui/FilePicker: function Class() {
tinymce/ui/FitLayout: function Class() {
tinymce/ui/FlexLayout: function Class() {
tinymce/ui/FloatPanel: function Class() {
tinymce/ui/FlowLayout: function Class() {
tinymce/ui/Form: function Class() {
tinymce/ui/FormItem: function Class() {
tinymce/ui/FormatControls: undefined
tinymce/ui/GridLayout: function Class() {
tinymce/ui/Iframe: function Class() {
tinymce/ui/KeyboardNavigation: function (settings) {
tinymce/ui/Label: function Class() {
tinymce/ui/Layout: function Class() {
tinymce/ui/LayoutAbsolute: function Class() {
tinymce/ui/ListBox: function Class() {
tinymce/ui/Menu: function Class() {
tinymce/ui/MenuBar: function Class() {
tinymce/ui/MenuButton: function Class() {
tinymce/ui/MenuItem: function Class() {
tinymce/ui/MessageBox: function Class() {
tinymce/ui/Movable: Object
tinymce/ui/Panel: function Class() {
tinymce/ui/PanelButton: function Class() {
tinymce/ui/Path: function Class() {
tinymce/ui/Radio: function Class() {
tinymce/ui/Resizable: Object
tinymce/ui/ResizeHandle: function Class() {
tinymce/ui/Scrollable: Object
tinymce/ui/Selector: function Class() {
tinymce/ui/Spacer: function Class() {
tinymce/ui/SplitButton: function Class() {
tinymce/ui/StackLayout: function Class() {
tinymce/ui/TabPanel: function Class() {
tinymce/ui/TextBox: function Class() {
tinymce/ui/Throbber: function (elm) {
tinymce/ui/Toolbar: function Class() {
tinymce/ui/Tooltip: function Class() {
tinymce/ui/Widget: function Class() {
tinymce/ui/Window: function Class() {
tinymce/util/Class: function Class() {
tinymce/util/I18n: Object
tinymce/util/JSON: Object
tinymce/util/JSONP: Object
tinymce/util/JSONRequest: function JSONRequest(settings) {
tinymce/util/LocalStorage: Storage
tinymce/util/Observable: Object
tinymce/util/Quirks: function (editor) {
tinymce/util/Tools: Object
tinymce/util/URI: function URI(url, settings) {
tinymce/util/VK: Object
tinymce/util/XHR: Object

tmce'module.TYPE:
tinymce/AddOnManager: function AddOnManager() {
tinymce/Editor: function Editor(id, settings, editorManager) {
tinymce/EditorCommands: function (editor) {
tinymce/EnterKey: function (editor) {
tinymce/FocusManager: function FocusManager(editorManager) {
tinymce/ForceBlocks: function (editor) {
tinymce/Formatter: function (ed) {
tinymce/LegacyInput: undefined
tinymce/Shortcuts: function (editor) {
tinymce/UndoManager: function (editor) {
tinymce/WindowManager: function (editor) {

tinymce/dom/ControlSelection: function (selection, editor) {
tinymce/dom/DOMUtils: function DOMUtils(doc, settings) {
tinymce/dom/DomQuery: function DomQuery(selector, context) {
tinymce/dom/EventUtils: function EventUtils() {
tinymce/dom/Range: function Range(dom) {
tinymce/dom/RangeUtils: function RangeUtils(dom) {
tinymce/dom/ScriptLoader: function ScriptLoader() {
tinymce/dom/Selection: function Selection(dom, win, serializer, editor) {
tinymce/dom/Serializer: function (settings, editor) {
tinymce/dom/Sizzle: function Sizzle( selector, context, results, seed ) {
tinymce/dom/TreeWalker: function (start_node, root_node) {
tinymce/dom/TridentSelection: function Selection(selection) {

tinymce/html/DomParser: function (settings, schema) {
tinymce/html/Node: function Node(name, type) {
tinymce/html/SaxParser: function (settings, schema) {
tinymce/html/Schema: function (settings) {
tinymce/html/Serializer: function (settings, schema) {
tinymce/html/Styles: function (settings, schema) {
tinymce/html/Writer: function (settings) {

tinymce/ui/Button: function Class() {
tinymce/ui/ButtonGroup: function Class() {
tinymce/ui/Checkbox: function Class() {
tinymce/ui/Collection: function Class() {
tinymce/ui/ColorButton: function Class() {
tinymce/ui/ComboBox: function Class() {
tinymce/ui/Container: function Class() {
tinymce/ui/Control: function Class() {
tinymce/ui/DragHelper: function (id, settings) {
tinymce/ui/ElementPath: function Class() {
tinymce/ui/FieldSet: function Class() {
tinymce/ui/FilePicker: function Class() {
tinymce/ui/FitLayout: function Class() {
tinymce/ui/FlexLayout: function Class() {
tinymce/ui/FloatPanel: function Class() {
tinymce/ui/FlowLayout: function Class() {
tinymce/ui/Form: function Class() {
tinymce/ui/FormItem: function Class() {
tinymce/ui/GridLayout: function Class() {
tinymce/ui/Iframe: function Class() {
tinymce/ui/KeyboardNavigation: function (settings) {
tinymce/ui/Label: function Class() {
tinymce/ui/Layout: function Class() {
tinymce/ui/LayoutAbsolute: function Class() {
tinymce/ui/ListBox: function Class() {
tinymce/ui/Menu: function Class() {
tinymce/ui/MenuBar: function Class() {
tinymce/ui/MenuButton: function Class() {
tinymce/ui/MenuItem: function Class() {
tinymce/ui/MessageBox: function Class() {
tinymce/ui/Panel: function Class() {
tinymce/ui/PanelButton: function Class() {
tinymce/ui/Path: function Class() {
tinymce/ui/Radio: function Class() {
tinymce/ui/ResizeHandle: function Class() {
tinymce/ui/Selector: function Class() {
tinymce/ui/Spacer: function Class() {
tinymce/ui/SplitButton: function Class() {
tinymce/ui/StackLayout: function Class() {
tinymce/ui/TabPanel: function Class() {
tinymce/ui/TextBox: function Class() {
tinymce/ui/Throbber: function (elm) {
tinymce/ui/Toolbar: function Class() {
tinymce/ui/Tooltip: function Class() {
tinymce/ui/Widget: function Class() {
tinymce/ui/Window: function Class() {

tinymce/util/Class: function Class() {
tinymce/util/JSONRequest: function JSONRequest(settings) {
tinymce/util/Quirks: function (editor) {
tinymce/util/URI: function URI(url, settings) {

tinymce/Compat: Object
tinymce/EditorManager: Object
tinymce/Env: Object
tinymce/html/Entities: Object
tinymce/ui/DomUtils: Object
tinymce/ui/Factory: Object
tinymce/ui/Movable: Object
tinymce/ui/Resizable: Object
tinymce/ui/Scrollable: Object
tinymce/util/I18n: Object
tinymce/util/JSON: Object
tinymce/util/JSONP: Object
tinymce/util/Observable: Object
tinymce/util/Tools: Object
tinymce/util/VK: Object
tinymce/util/XHR: Object

tinymce/util/LocalStorage: Storage

tinymce/ui/FormatControls: undefined

tinymce object

name::
* McsEngl.tinymce-namespace@cptIt,
* McsEngl.tmce'namespace.tinymce@cptIt,
* McsEngl.tmce'tinymce-namespace@cptIt,
* McsEngl.tmce'tinymce-object@cptIt,
* McsEngl.tmce'tinyMCE@cptIt,
* McsEngl.tmce'tinymce-object@cptIt,
* McsEngl.tmce'tinymce-class@cptIt,
* McsEngl.oTmce@cptIt,

oPgmHtml'GENERIC:
> typeof tinymce
"object"
===
> window.tinymce === tinymce
true
===
tinymce === tinymce.EditorManager
true

_DEFINITION:
var tinymce = window.tinymce;
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\Compat.js]

oPgmHtml'DESCRIPTION:
Root level namespace this contains classes directly releated to the TinyMCE editor.
[http://www.tinymce.com/wiki.php/api4:namespace.tinymce]

oPgmHtml'FILE:
* \PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\Compat.js,
* \PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\EditorManager.js,
window.tinymce = window.tinyMCE = EditorManager;
* \PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\util\Tools.js,
trim: isArray: is: toArray: makeMap: each: map: grep: inArray: extend: create: walk: createNS: resolve: explode:

oPgmHtml'PROPERTY:
> Object.getOwnPropertyNames(tinymce).sort()
["AddOnManager", "Compat", "DOM", "Editor", "EditorCommands", "EditorManager", "EnterKey", "Env", "FocusManager", "ForceBlocks", "Formatter", "LegacyInput", "PluginManager", "ScriptLoader", "Shortcuts", "ThemeManager", "UndoManager", "WindowManager", "__bindings", "activeEditor", "add", "addI18n", "baseURI", "baseURL", "create", "createEditor", "createNS", "documentBaseURL", "dom", "each", "editors", "execCommand", "explode", "extend", "fire", "focusManager", "focusedEditor", "get", "grep", "hasEventListeners", "html", "i18n", "inArray", "init", "is", "isArray", "isGecko", "isIE", "isMac", "isOpera", "isWebKit", "majorVersion", "makeMap", "map", "minorVersion", "off", "on", "pasteplugin", "releaseDate", "remove", "resolve", "settings", "setup", "spellcheckerplugin", "suffix", "toArray", "translate", "triggerSave", "trim", "ui", "util", "walk"]
> Object.getOwnPropertyNames(tinymce.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
===
* tinymce.AddOnManager#linkL#
* tinymce.Compat#linkL#
* tinymce.DOM#linkL#
* tinymce.Editor#ql:tmce'tinymce.editor rl?#
* tinymce.EditorCommands#linkL#
* tinymce.EditorManager#linkL#
* tinymce.EnterKey#linkL#
* tinymce.Env#linkL#
* tinymce.FocusManager#linkL#
* tinymce.ForceBlocks#linkL#
* tinymce.Formatter#linkL#
* tinymce.LegacyInput#linkL#
* tinymce.PluginManager#linkL#
* tinymce.ScriptLoader#linkL#
* tinymce.Shortcuts#linkL#
* tinymce.ThemeManager#linkL#
* tinymce.UndoManager#linkL#
* tinymce.WindowManager#linkL#
* tinymce.__bindings#linkL#
* tinymce.activeEditor#linkL#
* tinymce.add#linkL#
* tinymce.addI18n#linkL#
* tinymce.baseURI#linkL#
* tinymce.baseURL#linkL#
* tinymce.create#linkL#
* tinymce.createEditor#linkL#
* tinymce.createNS#linkL#
* tinymce.documentBaseURL#linkL#
* tinymce.dom#linkL#
* tinymce.each#linkL#
* tinymce.editors#linkL#
* tinymce.execCommand#linkL#
* tinymce.explode#linkL#
* tinymce.extend#linkL#
* tinymce.fire#linkL#
* tinymce.focusManager#linkL#
* tinymce.focusedEditor#linkL#
* tinymce.get#linkL#
* tinymce.grep#linkL#
* tinymce.hasEventListeners#linkL#
* tinymce.html#linkL#
* tinymce.i18n#linkL#
* tinymce.inArray#linkL#
* tinymce.init#linkL#
* tinymce.is#linkL#
* tinymce.isArray#linkL#
* tinymce.isGecko#linkL#
* tinymce.isIE#linkL#
* tinymce.isMac#linkL#
* tinymce.isOpera#linkL#
* tinymce.isWebKit#linkL#
* tinymce.majorVersion#linkL#
* tinymce.makeMap#linkL#
* tinymce.map#linkL#
* tinymce.minorVersion#linkL#
* tinymce.off#linkL#
* tinymce.on#linkL#
* tinymce.pasteplugin#linkL#
* tinymce.releaseDate#linkL#
* tinymce.remove#linkL#
* tinymce.resolve#linkL#
* tinymce.settings#linkL#
* tinymce.setup#linkL#
* tinymce.spellcheckerplugin#linkL#
* tinymce.suffix#linkL#
* tinymce.tableplugin#linkL#
* tinymce.toArray#linkL#
* tinymce.translate#linkL#
* tinymce.triggerSave#linkL#
* tinymce.trim#linkL#
* tinymce.ui#ql:tmce'ui#
* tinymce.util#linkL#
* tinymce.walk#linkL#

oPgmHtml'PROTOTYPE:
> Object.prototype.isPrototypeOf(tinymce)
true
===
> Object.getOwnPropertyNames(Object.getPrototypeOf(tinymce) ).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
> Object.getOwnPropertyNames(Object.prototype ).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

===
* AddOnManager:
- tinymce.AddOnManager:
- This class handles the loading of themes/plugins or other add-ons and their language packs

* tmce'Theme:
- tinymce.Theme:
- TinyMCE theme class

* tmce'Plugin_class:
- tinymce.Plugin:
- Plugin base class, this is a pseudo class that describes how a plugin is to be created for TinyMCE

* Event:
- tinymce.Event:
- This is the base class for all TinyMCE events

* tmce'ContentEvent:
- tinymce.ContentEvent:
- This class is the event object send when the content events occurs such as GetContent/SetContent

* tmce'CommandEvent:
- tinymce.CommandEvent:
- This class is the event object send when the BeforeExecCommand and ExecCommand event occurs

* tmce'ProgressStateEvent:
- tinymce.ProgressStateEvent:
- This class is the event object send when the ProgressState event occurs

* tmce'FocusEvent:
- tinymce.FocusEvent:
- This class is the event object sent when editors are focused/blurred

* tmce'ResizeEvent:
- tinymce.ResizeEvent:
- This class is the event object sent when objects gets resized within the editor

* Editor#ql:tmce'editor_class#
* tmce'EditorCommands:
- tinymce.EditorCommands:
- This class enables you to add custom editor commands and it contains overrides for native browser co

- tinymce.EditorManager:
- This class used as a factory for manager for tinymce

* tmce'Env:
- tinymce.Env:
- This class contains various environment constrants like browser versions etc

* FocusManager:
- tinymce.FocusManager:
- This class manages the focus/blur state of the editor

* tmce'Formatter:
- tinymce.Formatter:
- Text formatter engine class

* tmce'UndoManager:
- tinymce.UndoManager:
- This class handles the undo/redo history levels for the editor

* WindowManager:
[http://www.tinymce.com/wiki.php/api4:namespace.tinymce]

_DESCRIPTION:
TinyMCE core class.
Properties

Property  Defined By
DOM static
Global DOM instance
tinymce
PluginManager static
Global PluginManager instance
tinymce
ScriptLoader static
Global ScriptLoader instance
tinymce
ThemeManager static
Global ThemeManager instance
tinymce
activeEditor static
Currently active editor instance
tinymce
baseURI static
Absolute baseURI for the installation path of TinyMCE
tinymce
baseURL static
Base URL where the root directory if TinyMCE is located
tinymce
documentBaseURL static
Document base URL where the current document is located
tinymce
editors static
Collection of editor instances
tinymce
i18n static
Collection of language pack data
tinymce
majorVersion static
Major version of TinyMCE build
tinymce
minorVersion static
Minor version of TinyMCE build
tinymce
releaseDate static
Release date of TinyMCE build
tinymce
suffix static
Current suffix to add to each plugin/theme that gets loaded for example "
tinymce
Events

Event  Defined By
AddEditor static
Fires when an editor is added to the EditorManager collection
tinymce
RemoveEditor static
Fires when an editor is removed from EditorManager collection
tinymce
Methods

Method  Defined By
add static
Adds an editor instance to the editor collection
tinymce
addI18n static
Adds a language pack, this gets called by the loaded language files like en
tinymce
create static
Creates a class, subclass or static singleton
tinymce
createEditor static
Creates an editor instance and adds it to the EditorManager collection
tinymce
createNS static
Creates a namespace on a specific object
tinymce
each static
Performs an iteration of all items in a collection such as an object or array
tinymce
execCommand static
Executes a specific command on the currently active editor
tinymce
explode static
Splits a string but removes the whitespace before and after each value
tinymce
fire static
Fires the specified event by name
tinymce
get static
Returns a editor instance by id
tinymce
grep static
Filters out items from the input array by calling the specified function for each item
tinymce
inArray static
Returns the index of a value in an array, this method will return -1 if the item wasn't found
tinymce
init static
Initializes a set of editors
tinymce
is static
Checks if a object is of a specific type for example an array
tinymce
isArray static
Returns true/false if the object is an array or not
tinymce
makeMap static
Makes a name/object map out of an array with names
tinymce
map static
Creates a new array by the return value of each iteration function call
tinymce
off static
Unbinds an event listener to a specific event by name
tinymce
on static
Binds an event listener to a specific event by name
tinymce
remove static
Removes a editor or editors form page
tinymce
resolve static
Resolves a string and returns the object from a specific structure
tinymce
toArray static
Converts the specified object into a real JavaScript array
tinymce
translate static
Translates the specified string using the language pack items
tinymce
triggerSave static
Calls the save method on all editor instances in the collection
tinymce
trim static
Removes whitespace from the beginning and end of a string
tinymce
walk static
Executed the specified function for each item in a object tree
tinymce
[http://www.tinymce.com/wiki.php/api4:class.tinymce]

tinymce.AddOnManager-function

name::
* McsEngl.tinymce.AddOnManager-function@cptIt,
* McsEngl.tmce'AddOnManager@cptIt,
* McsEngl.tmce'fManagerAddon@cptIt,
* McsEngl.oTmce.fManagerAddon@cptIt,

AddOnManager'GENERIC:
typeof tinymce.AddOnManager
"function"

AddOnManager'DESCRIPTION:
This class handles the loading of themes/plugins or other add-ons and their language packs.

Methods
Method  Defined By
* tmce'add
Adds a instance of the add-on by it's short name
tinymce.AddOnManager

* tmce'addComponents
Add a set of components that will make up the add-on
tinymce.AddOnManager

* tmce'get
Returns the specified add on by the short name
tinymce.AddOnManager

* tmce'load
Loads an add-on from a specific url
tinymce.AddOnManager

* tmce'requireLangPack
Loads a language pack for the specified add-on
tinymce.AddOnManager
[http://www.tinymce.com/wiki.php/api4:class.tinymce.AddOnManager]

AddOnManager'PROPERTY:
> Object.getOwnPropertyNames(tinymce.AddOnManager).sort()
["PluginManager", "ThemeManager", "arguments", "baseURL", "caller", "language", "languageLoad", "length", "name", "prototype"]

===
Object.getOwnPropertyNames(tinymce.fManagerAddon).sort()
["arguments", "caller", "language", "languageLoad", "length", "name", "prototype", "sBaseURL"]

_FILE:
* \PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\AddOnManager.js,

_INSTANCE:
> Object.getOwnPropertyNames((new tinymce.AddOnManager)).sort()
["items", "lookup", "urls"]
Object.getOwnPropertyNames((new tinymce.AddOnManager).__proto__).sort()
["add", "addComponents", "createUrl", "dependencies", "get", "load", "requireLangPack"]
Object.getOwnPropertyNames((new tinymce.AddOnManager).__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
===

> Object.getOwnPropertyNames(new tinymce.fManagerAddon()).sort()
["add", "addComponents", "createUrl", "dependencies", "get", "items", "load", "oLookup", "requireLangPack", "urls"]
Object.getOwnPropertyNames((new tinymce.fManagerAddon()).__proto__).sort()
["constructor"]
Object.getOwnPropertyNames((new tinymce.fManagerAddon()).__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

tinymce.Compat object

name::
* McsEngl.tinymce.Compat object@cptIt,
* McsEngl.tinymce.DOM@cptIt,

_GENERIC:
typeof tinymce.Compat
"object"
===
> Object.prototype.isPrototypeOf(tinymce.Compat)
true

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.Compat).sort()
[]

_FILE:
* \PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\Compat.js,

tinymce.DOM object of DOMUtils

name::
* McsEngl.tinymce.DOM object of DOMUtils@cptIt,
* McsEngl.tinymce.DOM@cptIt,
* McsEngl.tmce'DOMDOMUtils@cptIt,
* McsEngl.oTmce.oDOMUtils@cptIt,

_GENERIC:
> typeof tinymce.DOM
"object"
===
> tinymce.DOM instanceof tinymce.dom.DOMUtils
true
tinymce.dom instanceof tinymce.dom.DOMUtils
false

_DEFINITION:
tinymce.DOM = DOMUtils.DOM;
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\Compat.js]
DOMUtils.DOM = new DOMUtils(document);
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\dom\DOMUtils.js]

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.DOM).sort()
["boundEvents", "boxModel", "counter", "doc", "events", "files", "hasOuterHTML", "isBlock", "schema", "settings", "stdMode", "styles", "win"]
> Object.getOwnPropertyNames(Object.getPrototypeOf(tinymce.DOM)).sort()
["_findSib", "add", "addClass", "addStyle", "bind", "clone", "create", "createFragment", "createHTML", "createRng", "css", "decode", "destroy", "dumpRng", "encode", "findCommonAncestor", "fire", "fixDoc", "get", "getAttrib", "getAttribs", "getContentEditable", "getNext", "getOuterHTML", "getParent", "getParents", "getPos", "getPrev", "getRect", "getRoot", "getSize", "getStyle", "getViewPort", "hasClass", "hide", "insertAfter", "is", "isEmpty", "isHidden", "loadCSS", "nodeIndex", "parseStyle", "props", "remove", "removeAllAttribs", "removeClass", "rename", "replace", "root", "run", "select", "serializeStyle", "setAttrib", "setAttribs", "setHTML", "setOuterHTML", "setStyle", "setStyles", "show", "split", "toHex", "toggleClass", "unbind", "uniqueId"]
===
// different
> Object.getOwnPropertyNames(tinymce.dom).sort()
["ControlSelection", "DOMUtils", "DomQuery", "Event", "EventUtils", "Range", "ScriptLoader", "Selection", "Serializer", "Sizzle", "TreeWalker", "TridentSelection"]

tinymce.Editor-function

name::
* McsEngl.tinymce.Editor-function@cptIt,
* McsEngl.tmce'Editor@cptIt,
* McsEngl.tinymce.Editor@cptIt,
* McsEngl.tmce'Editor-class@cptIt,

_GENERIC:
typeof tinymce.Editor
"function"

_DESCRIPTION:
- tinymce.Editor:
- This class contains the core logic for a TinyMCE editor
[http://www.tinymce.com/wiki.php/api4:class.tinymce.Editor]

_FILE:
* \PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\Editor.js,

tinymce.Editor-object

name::
* McsEngl.tinymce.Editor-object@cptIt,
* McsEngl.tmce'oEditor@cptIt,

_PROPERTY:
> Object.getOwnPropertyNames((tinymce.activeEditor)).sort()
["__bindings", "_beforeUnload", "_pendingNativeEvents", "baseURI", "buttons", "container", "contentAreaContainer", "contentCSS", "contentDocument", "contentStyles", "contentWindow", "documentBaseURI", "documentBaseUrl", "dom", "editorCommands", "editorContainer", "editorManager", "enterKey", "execCommands", "forceBlocks", "formatter", "hasVisual", "id", "iframeHTML", "initialized", "inline", "isDefaultPrevented", "isImmediatePropagationStopped", "isNotDirty", "isPropagationStopped", "loadedCSS", "menuItems", "orgDisplay", "orgVisibility", "parser", "plugins", "preventDefault", "queryStateCommands", "queryValueCommands", "quirks", "schema", "selection", "serializer", "settings", "shortcuts", "startContent", "stopImmediatePropagation", "stopPropagation", "suffix", "target", "theme", "type", "undoManager", "windowManager"]
> Object.getOwnPropertyNames((tinymce.activeEditor.__proto__)).sort()
["_isHidden", "_refreshContentEditable", "addButton", "addCommand", "addMenuItem", "addQueryStateHandler", "addQueryValueHandler", "addShortcut", "addVisual", "bindNative", "convertURL", "destroy", "execCallback", "execCommand", "fire", "focus", "getBody", "getContainer", "getContent", "getContentAreaContainer", "getDoc", "getElement", "getLang", "getParam", "getWin", "hasEventListeners", "hide", "init", "initContentBody", "insertContent", "isDirty", "isHidden", "load", "nodeChanged", "off", "on", "queryCommandState", "queryCommandValue", "remove", "render", "save", "setContent", "setProgressState", "show", "translate", "unbindNative"]
> Object.getOwnPropertyNames((tinymce.activeEditor.__proto__.__proto__)).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

tmce'Editor'SETTINGS:
* inline: then cannot be fullpage.
id: id,
theme: 'modern',
delta_width: 0,
delta_height: 0,
popup_css: '',
plugins: '',
document_base_url: documentBaseUrl,
add_form_submit_trigger: true,
submit_patch: true,
add_unload_trigger: true,
convert_urls: true,
relative_urls: true,
remove_script_host: true,
object_resizing: true,
doctype: '<!DOCTYPE html>',
visual: true,
font_size_style_values: 'xx-small,x-small,small,medium,large,x-large,xx-large',

// See: http://www.w3.org/TR/CSS2/fonts.html#propdef-font-size
font_size_legacy_values: 'xx-small,small,medium,large,x-large,xx-large,300%',
forced_root_block: 'p',
hidden_input: true,
padd_empty_editor: true,
render_ui: true,
indentation: '30px',
inline_styles: true,
convert_fonts_to_spans: true,
indent: 'simple',
indent_before: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,' +'tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist',
indent_after: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,' +'tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist',
validate: true,
entity_encoding: 'named',
url_converter: self.convertURL,
url_converter_scope: self,
ie7_compat: true

tinymce.Editor'property

name::
* McsEngl.tinymce.Editor'property@cptIt,

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.Editor).sort()
["arguments", "caller", "length", "name", "prototype"]
> Object.getOwnPropertyNames(Function).sort()
["arguments", "caller", "length", "name", "prototype"]
===
> Object.getOwnPropertyNames(tinymce.Editor.prototype).sort()
["_isHidden", "_refreshContentEditable", "addButton", "addCommand", "addMenuItem", "addQueryStateHandler", "addQueryValueHandler", "addShortcut", "addVisual", "bindNative", "convertURL", "destroy", "execCallback", "execCommand", "fire", "focus", "getBody", "getContainer", "getContent", "getContentAreaContainer", "getDoc", "getElement", "getLang", "getParam", "getWin", "hasEventListeners", "hide", "init", "initContentBody", "insertContent", "isDirty", "isHidden", "load", "nodeChanged", "off", "on", "queryCommandState", "queryCommandValue", "remove", "render", "save", "setContent", "setProgressState", "show", "translate", "unbindNative"]

Property  Defined By
* tmce'baseURI
URI object to current document that holds the TinyMCE editor instance
tinymce.Editor
* tmce'contentCSS
Array with CSS files to load into the iframe
tinymce.Editor
* tmce'contentStyles
Array of CSS styles to add to head of document when the editor loads
tinymce.Editor
* tmce'documentBaseURI
URI object to document configured for the TinyMCE instance
tinymce.Editor
* dom
DOM instance for the editor
tinymce.Editor
* tmce'formatter
Formatter instance
tinymce.Editor
* tmce'id
Editor instance id, normally the same as the div/textarea that was replaced
tinymce.Editor
* tmce'initialized
Is set to true after the editor instance has been initialized
tinymce.Editor
* tmce'isNotDirty
State to force the editor to return false on a isDirty call
tinymce.Editor
* tmce'parser
HTML parser will be used when contents is inserted into the editor
tinymce.Editor
* tmce'plugins
Name/Value object containting plugin instances
tinymce.Editor
* tmce'schema
Schema instance, enables you to validate elements and it's children
tinymce.Editor
* tmce'selection
Selection instance for the editor
tinymce.Editor
* tmce'serializer
DOM serializer for the editor
tinymce.Editor
* tmce'settings
Name/value collection with editor settings
tinymce.Editor
* tmce'theme
Reference to the theme instance that was used to generate the UI
tinymce.Editor
* tmce'undoManager
Undo manager instance, responsible for handling undo levels
tinymce.Editor
* tmce'windowManager
Window manager reference, use this to open new windows and dialogs
tinymce.Editor

tinymce.Editor'Event

name::
* McsEngl.tinymce.Editor'Event@cptIt,

Event  Defined By
* tmce'AddUndo
Fires after an undo level has been added to the editor
tinymce.Editor
* tmce'BeforeAddUndo
Fires before an undo level is added to the editor
tinymce.Editor
* tmce'BeforeExecCommand
Fires before a execCommand call is made
tinymce.Editor
* tmce'BeforeRenderUI
Fires before the UI gets rendered
tinymce.Editor
* tmce'BeforeSetContent
Fires before contents is inserted into the editor
tinymce.Editor
* tmce'ExecCommand
Fires after a execCommand call has been made
tinymce.Editor
* tmce'GetContent
Fires after contents has been extracted from the editor
tinymce.Editor
* tmce'LoadContent
Fires after contents has been loaded into the editor
tinymce.Editor
* tmce'NodeChange
Fires when the selection is moved to a new location or is the DOM is updated by some command
tinymce.Editor
* tmce'ObjectResizeStart
Fires when a resize of an object like an image is about to start
tinymce.Editor
* tmce'ObjectResized
Fires after an object like an image is resized
tinymce.Editor
* tmce'ObjectSelected
Fires when an object is selected such as an image
tinymce.Editor
* tmce'PostProcess
Fires after the contents has been processed
tinymce.Editor
* tmce'PreInit
Fires before the editor has been initialized
tinymce.Editor
* tmce'PreProcess
Fires before the contents is processed
tinymce.Editor
* tmce'ProgressState
Fires when a progress event is made
tinymce.Editor
* tmce'SaveContent
Fires after contents has been saved/extracted from the editor
tinymce.Editor
* tmce'SetAttrib
Fires when attributes are updated on DOM elements
tinymce.Editor
* tmce'activate
Fires when the focus is moved from one editor to another editor
tinymce.Editor
* tmce'blur
Fires when the editor is blurred
tinymce.Editor
* tmce'change
Fires when contents is modified in the editor
tinymce.Editor
* tmce'deactivate
Fires when the focus is moved from one editor to another editor
tinymce.Editor
* tmce'focus
Fires when the editor gets focused
tinymce.Editor
* tmce'hide
Fires when the editor is hidden
tinymce.Editor
* tmce'init
Fires after the editor has been initialized
tinymce.Editor
* tmce'redo
Fires when an redo operation is executed
tinymce.Editor
* tmce'remove
Fires when the editor instance is removed
tinymce.Editor
* tmce'reset
Fires when the form containing the editor is resetted
tinymce.Editor
* tmce'show
Fires when the editor is shown
tinymce.Editor
* tmce'submit
Fires when the form containing the editor is submitted
tinymce.Editor
* tmce'undo
Fires when an undo operation is executed
tinymce.Editor

tinymce.Editor'Constructor

name::
* McsEngl.tinymce.Editor'Constructor@cptIt,

_DEFINITION:
function Editor(id, settings, editorManager) {
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\Editor.js +line:109]
===
Constructs a editor instance by id

tinymce.Editor'Method

name::
* McsEngl.tinymce.Editor'Method@cptIt,

Method  Defined By
* addButton
Adds a button that later gets created by the ControlManager

* tmce'addCommand
Adds a custom command to the editor, you can also override existing commands with this method

* tmce'addMenuItem
Adds a menu item to be used in the menus of the modern theme

* tmce'addQueryStateHandler
Adds a custom query state command to the editor, you can also override existing commands with this m

* tmce'addQueryValueHandler
Adds a custom query value command to the editor, you can also override existing commands with this m

* tmce'addShortcut
Adds a keyboard shortcut for some command or function

* tmce'addVisual
Adds visual aid for tables, anchors etc so they can be more easily edited inside the editor

* tmce'convertURL
URL converter function this gets executed each time a user adds an img, a or any other element that

* tmce'destroy
Destroys the editor instance by removing all events, element references or other resources that coul

* tmce'execCallback
Executes a legacy callback

* tmce'execCommand
Executes a command on the current instance

* tmce'fire
Fires the specified event by name
tinymce.util.Observable
* tmce'focus
Focuses/activates the editor

* tmce'getBody
Returns the iframes body element

* tmce'getContainer
Returns the editors container element

* tmce'getContent
Gets the content from the editor instance, this will cleanup the content before it gets returned usi

* tmce'getContentAreaContainer
Returns the editors content area container element

* tmce'getDoc
Returns the iframes document object

* tmce'getElement
Returns the target element/textarea that got replaced with a TinyMCE editor instance

* tmce'getLang
Returns a language pack item by name/key

* tmce'getParam
Returns a configuration parameter by name

* tmce'getWin
Returns the iframes window object

* tmce'hide
Hides the editor and shows any textarea/div that the editor is supposed to replace

* tmce'init
Initializes the editor this will be called automatically when all plugins/themes and language packs

* tmce'initContentBody
This method get called by the init method ones the iframe is loaded

* tmce'insertContent
Inserts content at caret position

* tmce'isDirty
Returns true/false if the editor is dirty or not

* tmce'isHidden
Returns true/false if the editor is hidden or not

* tmce'load
Loads contents from the textarea or div element that got converted into an editor instance

* tmce'nodeChanged
Distpaches out a onNodeChange event to all observers

* tmce'off
Unbinds an event listener to a specific event by name
tinymce.util.Observable
* tmce'on
Binds an event listener to a specific event by name
tinymce.util.Observable
* tmce'queryCommandState
Returns a command specific state, for example if bold is enabled or not

* tmce'queryCommandValue
Returns a command specific value, for example the current font size

* tmce'remove
Removes the editor from the dom and tinymce collection

* tmce'render
Renderes the editor/adds it to the page

* tmce'save
Saves the contents from a editor out to the textarea or div element that got converted into an edito

* tmce'setContent
Sets the specified content to the editor instance, this will cleanup the content before it gets set

* tmce'setProgressState
Sets the progress state, this will display a throbber/progess for the editor

* tmce'show
Shows the editor and hides any textarea/div that the editor is supposed to replace

* tmce'translate
Translates the specified string by replacing variables with language pack items it will also check i

tinymce.editor.getParam:
public function getParam(name:String, defaultVal:String, type:String):String
Returns a configuration parameter by name.
Examples

// Returns a specific config value from the currently active editor
var someval = tinymce.activeEditor.getParam('myvalue');

// Returns a specific config value from a specific editor instance by id
var someval2 = tinymce.get('my_editor').getParam('myvalue');
Params

Name  Type  Description
name   String  Configruation parameter to retrive.
defaultVal   String  Optional default value to return.
type   String  Optional type parameter.
Returns

String Configuration parameter value or default value.
[http://www.tinymce.com/wiki.php/api4:method.tinymce.Editor.getParam]

tinymce.editor.selection:
_DEFINITION:
self.selection = new Selection(self.dom, self.getWin(), self.serializer, self);
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\Editor.js +line:869]

tinymce.EditorCommands-function

name::
* McsEngl.tinymce.EditorCommands-function@cptIt,
* McsEngl.tmce'EditorCommands-class@cptIt,

_DESCRIPTION:
This class enables you to add custom editor commands and it contains overrides for native browser commands to address various bugs and issues.
[http://www.tinymce.com/wiki.php/api4:class.tinymce.EditorCommands]

_GENERIC:
> typeof tinymce.EditorCommands
"function"

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.EditorCommands).sort()
["arguments", "caller", "length", "name", "prototype"]
===
Object.getOwnPropertyNames(tinymce.EditorCommands.prototype).sort()
["constructor"]

tinymce.EditorManager object

name::
* McsEngl.tinymce.EditorManager object@cptIt,
* McsEngl.tmce'EditorManager@cptIt,
* McsEngl.tmce'EditorManager-class@cptIt,

_GENERIC:
typeof tinymce.EditorManager
"object"
===
tinymce === tinymce.EditorManager
true

_FILE:
* \PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\EditorManager.js,

_DESCRIPTION:
This object gives (by assignment) its properties to tinymce.
[hmnSngo.2013-11-11]
===
This class used as a factory for manager for tinymce.Editor instances.
[http://www.tinymce.com/wiki.php/api4:class.tinymce.EditorManager]

_PROPERTY:
Object.getOwnPropertyNames(tinymce.EditorManager).sort()
["AddOnManager", "Compat", "DOM", "Editor", "EditorCommands", "EditorManager", "EnterKey", "Env", "FocusManager", "ForceBlocks", "Formatter", "LegacyInput", "PluginManager", "ScriptLoader", "Shortcuts", "ThemeManager", "UndoManager", "WindowManager", "__bindings", "activeEditor", "add", "addI18n", "baseURI", "baseURL", "create", "createEditor", "createNS", "documentBaseURL", "dom", "each", "editors", "execCommand", "explode", "extend", "fire", "focusManager", "focusedEditor", "get", "grep", "hasEventListeners", "html", "i18n", "inArray", "init", "is", "isArray", "isGecko", "isIE", "isMac", "isOpera", "isWebKit", "majorVersion", "makeMap", "map", "minorVersion", "off", "on", "pasteplugin", "releaseDate", "remove", "resolve", "settings", "setup", "spellcheckerplugin", "suffix", "tableplugin", "toArray", "translate", "triggerSave", "trim", "ui", "util", "walk"]

tinymce.EnterKey-function

name::
* McsEngl.tinymce.EnterKey-function@cptIt,
* McsEngl.tmce'EnterKey@cptIt,

_GENERIC:
> typeof tinymce.EnterKey
"function"

_FILE:
* \PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\EnterKey.js,

tinymce.Env object

name::
* McsEngl.tinymce.Env object@cptIt,
* McsEngl.tmce'Env@cptIt,

_GENERIC:
typeof tinymce.Env
"object"

_DESCRIPTION:
This class contains various environment constrants like browser versions etc. Normally you don't want to sniff specific browser versions but sometimes you have to when it's impossible to feature detect. So use this with care.
Properties
Property  Defined By
contentEditable static
Constant that is true if the browser supports editing
tinymce.Env
documentMode static
Returns the IE document mode for non IE browsers this will fake IE 10
tinymce.Env
gecko static
Constant that is true if the browser is Gecko
tinymce.Env
iOS static
Constant that is true if the os is iOS
tinymce.Env
ie static
Constant that is more than zero if the browser is IE
tinymce.Env
mac static
Constant that is true if the os is Mac OS
tinymce.Env
noCaretAfter static
Returns true/false if the browser can or can't place the caret after a inline block like an image
tinymce.Env
opera static
Constant that is true if the browser is Opera
tinymce.Env
range static
Constant that is true if the browser supports native DOM Ranges
tinymce.Env
transparentSrc static
Transparent image data url
tinymce.Env
webKit static
Constant that is true if the browser is WebKit (Safari/Chrome)
tinymce.Env
[http://www.tinymce.com/wiki.php/api4:class.tinymce.Env]

_FILE:
* \PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\Env.js,

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.Env).sort()
["caretAfter", "contentEditable", "documentMode", "gecko", "iOS", "ie", "mac", "opera", "range", "transparentSrc", "webkit"]

tinymce.FocusManager-function

name::
* McsEngl.tinymce.FocusManager-function@cptIt,
* McsEngl.tmce'FocusManager@cptIt,
* McsEngl.tmce'FocusManager-class@cptIt,

_DESCRIPTION:
* This class manages the focus/blur state of the editor. This class is needed since some
* browsers fire false focus/blur states when the selection is moved to a UI dialog or similar.
*
* This class will fire two events focus and blur on the editor instances that got affected.
* It will also handle the restore of selection when the focus is lost and returned.

_GENERIC:
> typeof tinymce.FocusManager
"function"

_FILE:
* \PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\FocusManager.js,

tinymce.ForceBlocks-function

name::
* McsEngl.tinymce.ForceBlocks-function@cptIt,
* McsEngl.tmce'ForceBlocks@cptIt,

_GENERIC:
typeof tinymce.ForceBlocks
"function"

tinymce.Formatter-function

name::
* McsEngl.tinymce.Formatter-function@cptIt,
* McsEngl.tmce'Formatter-class@cptIt,

_GENERIC:
typeof tinymce.Formatter
"function"

_DESCRIPTION:
* Text formatter engine class. This class is used to apply formats like bold, italic, font size
* etc to the current selection or specific nodes. This engine was build to replace the browsers
* default formatting logic for execCommand due to it's inconsistent and buggy behavior.
*
* @class tinymce.Formatter
* @example
* tinymce.activeEditor.formatter.register('mycustomformat', {
* inline: 'span',
* styles: {color: '#ff0000'}
* });
*
* tinymce.activeEditor.formatter.apply('mycustomformat');

_FILE:
* \PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\Formatter.js,

tinymce.PluginManager object

name::
* McsEngl.tinymce.PluginManager object@cptIt,
* McsEngl.tmce'PluginManager@cptIt,
* McsEngl.oTmce.oManagerPlugin@cptIt,

_GENERIC:
> tinyMCE.PluginManager instanceof tinyMCE.AddOnManager
true
===
> typeof tinymce.PluginManager
"object"
===
AddOnManager.PluginManager = new AddOnManager();
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\AddOnManager.js]

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.PluginManager).sort()
["items", "lookup", "urls"]
> Object.getOwnPropertyNames(tinymce.PluginManager.__proto__).sort()
["add", "addComponents", "createUrl", "dependencies", "get", "load", "requireLangPack"]
> Object.getOwnPropertyNames(tinymce.AddOnManager.prototype).sort()
["add", "addComponents", "createUrl", "dependencies", "get", "load", "requireLangPack"]

tinymce.ScriptLoader object

name::
* McsEngl.tinymce.ScriptLoader object@cptIt,
* McsEngl.tmce'ScriptLoader@cptIt,

_GENERIC:
typeof tinymce.ScriptLoader
"object"

_DEFINITION:
tinymce.ScriptLoader = ScriptLoader#ql:tinymce.dom.scriptloader _name.english#.ScriptLoader;
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\Compat.js +line:36]

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.ScriptLoader.__proto__).sort()
["constructor"]
> Object.getOwnPropertyNames(tinymce.ScriptLoader).sort()
["add", "isDone", "load", "loadQueue", "loadScripts", "markDone"]

_FILE:
* \PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\dom\ScriptLoader.js,

tinymce.Shortcuts-function

name::
* McsEngl.tinymce.Shortcuts-function@cptIt,
* McsEngl.tmce'Shortcuts@cptIt,

_GENERIC:
typeof tinymce.Shortcuts
"function"

_FILE:
* \PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\Shortcuts.js,

_INSTANCE:
> tinymce.activeEditor.shortcuts instanceof tinymce.Shortcuts
true

tinymce.ThemeManager object

name::
* McsEngl.tinymce.ThemeManager object@cptIt,
* McsEngl.tmce'ThemeManager@cptIt,
* McsEngl.oTmce.oManagerTheme@cptIt,

_GENERIC:
> typeof tinymce.ThemeManager
"object"

_DEFINITION:
> tinymce.ThemeManager instanceof tinymce.AddOnManager#ql:tmce'addonmanager#
true
AddOnManager.ThemeManager = new AddOnManager();
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\AddOnManager.js]
===
tinymce.ThemeManager = AddOnManager.ThemeManager;
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\Compat.js]

_DESCRIPTION:
TinyMCE theme class.
Methods
Method  Defined By
* tmce'renderUI
This method is responsible for rendering/generating the overall user interface with toolbars, button
[http://www.tinymce.com/wiki.php/api4:class.tinymce.Theme]

_FILE:
* no exclusive file.
* \PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\AddOnManager.js
* \PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\Compat.js

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.ThemeManager).sort()
["items", "lookup", "urls"]
> Object.getOwnPropertyNames(tinymce.ThemeManager.__proto__).sort()
["add", "addComponents", "createUrl", "dependencies", "get", "load", "requireLangPack"]
> Object.getOwnPropertyNames(tinymce.AddOnManager.prototype ).sort()
["add", "addComponents", "createUrl", "dependencies", "get", "load", "requireLangPack"]
> Object.getOwnPropertyNames(tinymce.AddOnManager.prototype.__proto__ ).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

tinymce.UndoManager-function

name::
* McsEngl.tinymce.UndoManager-function@cptIt,
* McsEngl.tmce'UndoManager-class@cptIt,

_DESCRIPTION:

_GENERIC:
> typeof tinymce.UndoManager
"function"

tinymce.WindowManager-function

name::
* McsEngl.tinymce.WindowManager-function@cptIt,
* McsEngl.tmce'WindowManager-class@cptIt,

_DESCRIPTION:
* http://www.tinymce.com/wiki.php/api4:class.tinymce.WindowManager,
* \PgmWEB\tinyMCE\tinymce406Dev\js\tinymce\classes\WindowManager.js,
- tinymce.WindowManager:
- This class handles the creation of native windows and dialogs,

_GENERIC:
> typeof tinymce.WindowManager
"function"

_Method:
tinymce.WindowManager.alert
Creates a alert dialog

tinymce.WindowManager.close
Closes the top most window

tinymce.WindowManager.confirm
Creates a confirm dialog

tinymce.WindowManager.getParams
Returns the params of the last window open call

tinymce.WindowManager.open
Opens a new window

tinymce.WindowManager.setParams
Sets the params of the last opened window
[http://www.tinymce.com/wiki.php/api4:class.tinymce.WindowManager]

tinymce.activeEditor object of Editor

name::
* McsEngl.tinymce.activeEditor object of Editor@cptIt,
* McsEngl.tmce'activeEditor@cptIt,

_GENERIC:
> typeof tinymce.activeEditor
"object"
> tinymce.activeEditor instanceof tinymce.Editor#ql:tmce'editor_class#
true

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.activeEditor).sort()
["__bindings", "_beforeUnload", "_pendingNativeEvents", "baseURI", "buttons", "container", "contentAreaContainer", "contentCSS", "contentDocument", "contentStyles", "contentWindow",
"documentBaseURI", "documentBaseUrl", "dom",
"editorCommands", "editorContainer", "editorManager", "enterKey", "execCommands", "forceBlocks", "formatter", "hasVisual",
"id", "iframeHTML", "initialized", "inline", "isDefaultPrevented", "isImmediatePropagationStopped", "isNotDirty", "isPropagationStopped", "loadedCSS",
"menuItems", "orgDisplay", "orgVisibility",
"parser", "plugins", "preventDefault", "queryStateCommands", "queryValueCommands", "quirks",
"schema", "selection", "serializer", "settings", "shortcuts", "startContent", "stopImmediatePropagation", "stopPropagation", "suffix",
"target", "theme", "type", "undoManager", "windowManager"]

tmceactiveEditor.shortcuts:
> tinymce.activeEditor.shortcuts instanceof tinymce.Shortcuts
true
> Object.getOwnPropertyNames(tinymce.activeEditor.shortcuts).sort()
["add"]
> Object.getOwnPropertyNames(tinymce.activeEditor.shortcuts.__proto__).sort()
["constructor"]

tinymce.add-function

name::
* McsEngl.tinymce.add-function@cptIt,
* McsEngl.tmce'add@cptIt,

_DEFINITION:
Adds an editor instance to the editor collection. This will also set it as the active editor.
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\EditorManager.js +line:349]

tinymce.addI18n-function

name::
* McsEngl.tinymce.addI18n-function@cptIt,
* McsEngl.tmce'add@cptIt,

tinymce.addI18n
function (code, items) {
     I18n.add(code, items);
   } EditorManager.js:546

_FILE:
* \PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\EditorManager.js +line:546,

tinymce.baseURI object

name::
* McsEngl.tinymce.baseURI object@cptIt,
* McsEngl.tmce'baseURI@cptIt,

_DEFINITION:
self.baseURI = new URI(self.baseURL);
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\EditorManager.js +line:143]

tinymce.baseURL string

name::
* McsEngl.tinymce.baseURL string@cptIt,
* McsEngl.tmce'baseURL@cptIt,

_GENERIC:
> typeof tinymce.baseURL
"string"

_DEFINITION:
self.baseURL = new URI(documentBaseURL).toAbsolute(baseURL);
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\EditorManager.js +line:127]

tinymce.create-function

name::
* McsEngl.tinymce.create-function@cptIt,
* McsEngl.tmce'create@cptIt,

_DESCRIPTION:
public function create(s:String, p:Object, root:Object):void
Creates a class, subclass or static singleton.
[http://www.tinymce.com/wiki.php/api4:method.tinymce.util.Tools.create]

_FILE:
* \PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Tools.js +line:246,

tinymce.createEditor-function

name::
* McsEngl.tinymce.createEditor-function@cptIt,
* McsEngl.tmce'createEditor@cptIt,

_DEFINITION:
tinymce.createEditor
function (id, settings) {
     return this.add(new Editor(id, settings, this));
   } EditorManager.js:385
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Tools.js +line:385]

tinymce.createNS-function

name::
* McsEngl.tinymce.createNS-function@cptIt,
* McsEngl.tmce'createNS@cptIt,

_DESCRIPTION:
public function createNS(n:String, o:Object):Object
Creates a namespace on a specific object.
Examples
// Create some namespace
tinymce.createNS('tinymce.somepackage.subpackage');
[http://www.tinymce.com/wiki.php/api4:method.tinymce.util.Tools.createNS]

_FILE:
* \PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Tools.js, line420

tinymce.documentBaseURL string

name::
* McsEngl.tinymce.documentBaseURL string@cptIt,
* McsEngl.tmce'documentBaseURL@cptIt,

_DESCRIPTION:
> tinymce.documentBaseURL
"file:///D:/File1a/tinymceDev407/"

_DEFINITION:
self.documentBaseURL = documentBaseURL;
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Tools.js +line:135]

tinymce.dom object NAMESPACE

name::
* McsEngl.tinymce.dom object NAMESPACE@cptIt,
* McsEngl.tinymce.dom-object@cptIt,
* McsEngl.tinymce.dom-namescpace@cptIt,
* McsEngl.tmce'dom@cptIt,
* McsEngl.tmce'dom-namespace@cptIt,
* McsEngl.tmce'namespace.tinymce.dom@cptIt,
* McsEngl.tmce'tinymce.dom-namespace@cptIt,
* McsEngl.tmce'tinymce.dom-object@cptIt,

_GENERIC:
> typeof tinymce.dom
"object"
> Object.prototype.isPrototypeOf(tinymce.dom)
true

_DEFINITION:
tinymce.dom = tinymce.dom || {};
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\Compat.js]

_DESCRIPTION:
Contains classes for handling the browsers DOM.
===
CLASS:
* tmce'ControlSelection:
- tinymce.dom.ControlSelection:
- This class handles control selection of elements

* DOMUtils:

* tmce'RangeUtils:
- tinymce.dom.RangeUtils:
-

* tmce'ScriptLoader:
- tinymce.dom.ScriptLoader:
- This class handles asynchronous/synchronous loading of JavaScript files it will execute callbacks wh

* tmce'Selection:
- tinymce.dom.Selection:
- This class handles text and control selection it's an crossbrowser utility class

* tmce'Serializer:
- tinymce.dom.Serializer:
- This class is used to serialize DOM trees into a string

* tmce'TreeWalker:
- tinymce.dom.TreeWalker:
- TreeWalker class enables you to walk the DOM in a linear manner

* tmce'TridentSelection:
- tinymce.dom.TridentSelection:
- Selection class for old explorer versions
[http://www.tinymce.com/wiki.php/api4:namespace.tinymce.dom]

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.dom).sort()
["ControlSelection", "DOMUtils", "DomQuery", "Event", "EventUtils", "Range", "RangeUtils", "ScriptLoader", "Selection", "Serializer", "Sizzle", "TreeWalker", "TridentSelection"]
> Object.getOwnPropertyNames(tinymce.dom.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

tinymce.dom.ControlSelection-function

name::
* McsEngl.tinymce.dom.ControlSelection-function@cptIt,
* McsEngl.tinymce.dom.ControlSelection@cptIt,
* McsEngl.tmce'ControlSelection@cptIt,

_DEFINITION:
* This class handles control selection of elements. Controls are elements
* that can be resized and needs to be selected as a whole. It adds custom resize handles
* to all browser engines that support properly disabling the built in resize logic.
return function(selection, editor) {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\dom\ControlSelection.js]

_INSTANCE:
Object.getOwnPropertyNames((new tinymce.dom.ControlSelection(null,tinymce.activeEditor))).sort()
["controlSelect", "destroy"]
Object.getOwnPropertyNames((new tinymce.dom.ControlSelection(null,tinymce.activeEditor)).__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

tinymce.dom.DOMUtils-function

name::
* McsEngl.tinymce.dom.DOMUtils-function@cptIt,
* McsEngl.tinymce.dom.DOMUtils@cptIt,
* McsEngl.tmce'DOMUtils@cptIt,

_GENERIC:
> typeof tinymce.dom.DOMUtils
"function"

_DEFINITION:
function DOMUtils(doc, settings) {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\dom\DOMUtils.js]

_DESCRIPTION:
Utility class for various DOM manipulation and retrieval functions.

Examples
// Add a class to an element by id in the page
tinymce.DOM.addClass('someid', 'someclass');

// Add a class to an element by id inside the editor
tinymce.activeEditor.dom.addClass('someid', 'someclass');
[http://www.tinymce.com/wiki.php/api4:class.tinymce.dom.DOMUtils]

_PROPERTY.TMCE:
> Object.getOwnPropertyNames(tinymce.dom.DOMUtils).sort()
["DOM#pl:\File1a\tinymceDev407\js\tinymce\classes\dom\DOMUtils.js +line:2066#", "arguments", "caller", "length", "name", "prototype"]
===
Property  Defined By
DOM static
Instance of DOMUtils for the current document
tinymce.dom.DOMUtils
[http://www.tinymce.com/wiki.php/api4:class.tinymce.dom.DOMUtils]
===
> Object.getOwnPropertyNames(new tinymce.dom.DOMUtils(document)).sort()
["boundEvents", "boxModel", "counter", "doc", "events", "files", "hasOuterHTML", "isBlock", "schema", "settings", "stdMode", "styles", "win"]
> Object.getOwnPropertyNames(tinymce.dom.DOMUtils.prototype).sort()
["_findSib", "add", "addClass", "addStyle", "bind", "clone", "create", "createFragment", "createHTML", "createRng", "css", "decode", "destroy", "dumpRng", "encode", "findCommonAncestor", "fire", "fixDoc", "get", "getAttrib", "getAttribs", "getContentEditable", "getNext", "getOuterHTML", "getParent", "getParents", "getPos", "getPrev", "getRect", "getRoot", "getSize", "getStyle", "getViewPort", "hasClass", "hide", "insertAfter", "is", "isEmpty", "isHidden", "loadCSS", "nodeIndex", "parseStyle", "props", "remove", "removeAllAttribs", "removeClass", "rename", "replace", "root", "run", "select", "serializeStyle", "setAttrib", "setAttribs", "setHTML", "setOuterHTML", "setStyle", "setStyles", "show", "split", "toHex", "toggleClass", "unbind", "uniqueId"]

_CONSTRUCTOR.TMCE:
DOMUtils
Constructs a new DOMUtils instance
[http://www.tinymce.com/wiki.php/api4:class.tinymce.dom.DOMUtils]

_METHOD.TMCE:
* tmce'add
Adds the specified element to another element or elements
tinymce.dom.DOMUtils
* tmce'addClass
Adds a class to the specified element or elements
tinymce.dom.DOMUtils
* tmce'addStyle
Adds a style element at the top of the document with the specified cssText content
tinymce.dom.DOMUtils
* tmce'bind
Binds a callback to an event on the specified target
tinymce.dom.DOMUtils
* tmce'clean
Removes all bound event listeners for the specified target
tinymce.dom.DOMUtils
* tmce'create
Creates a new element
tinymce.dom.DOMUtils
* tmce'createFragment
Creates a document fragment out of the specified HTML string
tinymce.dom.DOMUtils
* tmce'createHTML
Creates HTML string for element
tinymce.dom.DOMUtils
* tmce'createRng
Creates a new DOM Range object
tinymce.dom.DOMUtils
* tmce'decode
Entity decodes a string
tinymce.dom.DOMUtils
* tmce'destroy
Destroys all internal references to the DOM to solve IE leak issues
tinymce.dom.DOMUtils
* tmce'encode
Entity encodes a string
tinymce.dom.DOMUtils
* tmce'findCommonAncestor
Find the common ancestor of two elements
tinymce.dom.DOMUtils
* tmce'fire
Fires the specified event on the specified target
tinymce.dom.DOMUtils
* tmce'get
Returns the specified element by ID or the input element if it isn't a string
tinymce.dom.DOMUtils
* tmce'getAttrib
Returns the specified attribute by name
tinymce.dom.DOMUtils
* tmce'getAttribs
Returns a NodeList with attributes for the element
tinymce.dom.DOMUtils
* tmce'getNext
Returns the next node that matches selector or function
tinymce.dom.DOMUtils
* tmce'getOuterHTML
Returns the outer HTML of an element
tinymce.dom.DOMUtils
* tmce'getParent
Returns a node by the specified selector function
tinymce.dom.DOMUtils
* tmce'getParents
Returns a node list of all parents matching the specified selector function or pattern
tinymce.dom.DOMUtils
* tmce'getPos
Returns the absolute x, y position of a node
tinymce.dom.DOMUtils
* tmce'getPrev
Returns the previous node that matches selector or function
tinymce.dom.DOMUtils
* tmce'getRect
Returns the rectangle for a specific element
tinymce.dom.DOMUtils
* tmce'getRoot
Returns the root node of the document
tinymce.dom.DOMUtils
* tmce'getSize
Returns the size dimensions of the specified element
tinymce.dom.DOMUtils
* tmce'getStyle
Returns the current style or runtime/computed value of an element
tinymce.dom.DOMUtils
* tmce'getViewPort
Returns the viewport of the window
tinymce.dom.DOMUtils
* tmce'hasClass
Returns true if the specified element has the specified class
tinymce.dom.DOMUtils
* tmce'hide
Hides the specified element(s) by ID by setting the "display" style
tinymce.dom.DOMUtils
* tmce'insertAfter
Inserts an element after the reference element
tinymce.dom.DOMUtils
* tmce'is
Returns true/false if the specified element matches the specified css pattern
tinymce.dom.DOMUtils
* tmce'isBlock
Returns true/false if the specified element is a block element or not
tinymce.dom.DOMUtils
* tmce'isEmpty
Returns true/false if the specified node is to be considered empty or not
tinymce.dom.DOMUtils
* tmce'isHidden
Returns true/false if the element is hidden or not by checking the "display" style
tinymce.dom.DOMUtils
* tmce'loadCSS
Imports/loads the specified CSS file into the document bound to the class
tinymce.dom.DOMUtils
* tmce'nodeIndex
Returns the index of the specified node within its parent
tinymce.dom.DOMUtils
* tmce'parseStyle
Parses the specified style value into an object collection
tinymce.dom.DOMUtils
* tmce'remove
Removes/deletes the specified element(s) from the DOM
tinymce.dom.DOMUtils
* tmce'removeAllAttribs
Removes all attributes from an element or elements
tinymce.dom.DOMUtils
* tmce'removeClass
Removes a class from the specified element or elements
tinymce.dom.DOMUtils
* tmce'rename
Renames the specified element and keeps its attributes and children
tinymce.dom.DOMUtils
* tmce'replace
Replaces the specified element or elements with the new element specified
tinymce.dom.DOMUtils
* tmce'run
Executes the specified function on the element by id or dom element node or array of elements/id
tinymce.dom.DOMUtils
* tmce'select
Selects specific elements by a CSS level 3 pattern
tinymce.dom.DOMUtils
* tmce'serializeStyle
Serializes the specified style object into a string
tinymce.dom.DOMUtils
* tmce'setAttrib
Sets the specified attribute of an element or elements
tinymce.dom.DOMUtils
* tmce'setAttribs
Sets two or more specified attributes of an element or elements
tinymce.dom.DOMUtils
* tmce'setHTML
Sets the specified HTML content inside the element or elements
tinymce.dom.DOMUtils
* tmce'setOuterHTML
Sets the specified outer HTML on an element or elements
tinymce.dom.DOMUtils
* tmce'setStyle
Sets the CSS style value on a HTML element
tinymce.dom.DOMUtils
* tmce'setStyles
Sets multiple styles on the specified element(s)
tinymce.dom.DOMUtils
* tmce'show
Shows the specified element(s) by ID by setting the "display" style
tinymce.dom.DOMUtils
* tmce'split
Splits an element into two new elements and places the specified split element or elements between t
tinymce.dom.DOMUtils
* tmce'toHex
Parses the specified RGB color value and returns a hex version of that color
tinymce.dom.DOMUtils
* tmce'toggleClass
Toggles the specified class on/off
tinymce.dom.DOMUtils
* tmce'unbind
Unbinds the specified event by name, name and callback or all events on the target
tinymce.dom.DOMUtils
* tmce'uniqueId
Returns a unique id
[http://www.tinymce.com/wiki.php/api4:class.tinymce.dom.DOMUtils]

tinymce.dom.DomQuery-function

name::
* McsEngl.tinymce.dom.DomQuery-function@cptIt,
* McsEngl.tinymce.dom.DomQuery@cptIt,
* McsEngl.tmce'DomQuery@cptIt,

_DEFINITION:
function DomQuery(selector, context) {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\dom\DomQuery.js +line:103]

tinymce.dom.DomQuery'PROPERTY:
> Object.getOwnPropertyNames(tinymce.dom.DomQuery).sort()
["arguments", "caller", "contains", "each", "expr", "extend", "filter", "find", "fn", "inArray", "isArray", "isXMLDoc", "length", "makeMap", "name", "prototype", "text", "toArray", "trim", "unique"]
> ["add", "addClass", "after", "append", "appendTo", "attr", "before", "clone", "constructor", "css", "each", "empty", "eq", "filter", "find", "first", "function (node) {
     return dir(node, "parentNode");
   }", "function (node) {
     return sibling(node, 'nextSibling');
   }", "function (node) {
     return sibling(node, 'nextSibling', 1);
   }", "function (node) {
     return sibling(node, 'previousSibling');
   }", "function (node) {
     return sibling(node, 'previousSibling', 1);
   }", "function (node) {
     return sibling(node.firstChild, 'nextSibling', 1);
   }", "function (node) {
     return toArray((node.nodeName === "iframe" ? node.contentDocument || node.contentWindow.document : node).childNodes);
   }", "function (node) {
     var parent = node.parentNode;

     return parent && parent.nodeType !== 11 ? parent : null;
   }", "function (node, until) {
     return dir(node, "parentNode", until);
   }", "hasClass", "hide", "html", "init", "is", "last", "length", "off", "on", "prepend", "push", "remove", "removeClass", "replaceWith", "selector", "show", "slice", "sort", "splice", "text", "toArray", "toggleClass", "unwrap", "wrap"]

tinymce.dom.Event object

name::
* McsEngl.tinymce.dom.Event object@cptIt,
* McsEngl.tinymce.dom.Event@cptIt,
* McsEngl.tmce'Event@cptIt,

_DEFINITION:
tinymce.dom.Event = EventUtils.Event;
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\Compat.js +line:41]

tinymce.dom.Event'PROPERTY:
> Object.getOwnPropertyNames(tinymce.dom.Event).sort()
["bind", "cancel", "clean", "destroy", "domLoaded", "events", "fire", "unbind"]

tinymce.dom.EventUtils

name::
* McsEngl.tinymce.dom.EventUtils@cptIt,
* McsEngl.tinymce.dom.EventUtils@cptIt,
* McsEngl.tmce'EventUtils@cptIt,

_DEFINITION:
function EventUtils() {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\dom\EventUtils.js +line:188]

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.dom.EventUtils).sort()
["Event", "arguments", "caller", "length", "name", "prototype"]

_INSTANCE:
> Object.getOwnPropertyNames(new tinymce.dom.EventUtils).sort()
["bind", "cancel", "clean", "destroy", "domLoaded", "events", "fire", "unbind"]

tinymce.dom.Range-function

name::
* McsEngl.tinymce.dom.Range-function@cptIt,
* McsEngl.tinymce.dom.Range@cptIt,
* McsEngl.tmce'Range@cptIt,

_DEFINITION:
function Range(dom) {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\dom\Range.js]

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.dom.Range).sort()
["arguments", "caller", "length", "name", "prototype"]
> Object.getOwnPropertyNames(tinymce.dom.Range.__proto__).sort()
["apply", "arguments", "bind", "call", "caller", "constructor", "length", "name", "toString"]
> Object.getOwnPropertyNames(tinymce.dom.Range.prototype).sort()
["constructor", "toString"]

_INSTANCE:
> Object.getOwnPropertyNames(new tinymce.dom.Range(document)).sort()
["END_TO_END", "END_TO_START", "START_TO_END", "START_TO_START", "cloneContents", "cloneRange", "collapse", "collapsed", "compareBoundaryPoints", "deleteContents", "endOffset", "extractContents", "insertNode", "selectNode", "selectNodeContents", "setEnd", "setEndAfter", "setEndBefore", "setStart", "setStartAfter", "setStartBefore", "startOffset", "surroundContents", "toStringIE"]

tinymce.dom.ScriptLoader

name::
* McsEngl.tinymce.dom.ScriptLoader@cptIt,
* McsEngl.tinymce.dom.ScriptLoader@cptIt,
* McsEngl.tmce'ScriptLoader@cptIt,

_DEFINITION:
* This class handles asynchronous/synchronous loading of JavaScript files it will execute callbacks
* when various items gets loaded. This class is useful to load external JavaScript files.
*
* @class tinymce.dom.ScriptLoader
* @example
* // Load a script from a specific URL using the global script loader
* tinymce.ScriptLoader.load('somescript.js');
*
* // Load a script using a unique instance of the script loader
* var scriptLoader = new tinymce.dom.ScriptLoader();
*
* scriptLoader.load('somescript.js');
*
* // Load multiple scripts
* var scriptLoader = new tinymce.dom.ScriptLoader();
*
* scriptLoader.add('somescript1.js');
* scriptLoader.add('somescript2.js');
* scriptLoader.add('somescript3.js');
*
* scriptLoader.loadQueue(function() {
* alert('All scripts are now loaded.');
* });

function ScriptLoader() {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\dom\ScriptLoader.js]

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.dom.ScriptLoader).sort()
["ScriptLoader", "arguments", "caller", "length", "name", "prototype"]

_INSTANCE:
> Object.getOwnPropertyNames(tinymce.dom.ScriptLoader.prototype).sort()
["constructor"]
> Object.getOwnPropertyNames(new tinymce.dom.ScriptLoader).sort()
["add", "isDone", "load", "loadQueue", "loadScripts", "markDone"]

tinymce.dom.Selection-function

name::
* McsEngl.tinymce.dom.Selection-function@cptIt,
* McsEngl.tinymce.dom.Selection@cptIt,
* McsEngl.tmce'Selection@cptIt,

_DEFINITION:
  * Constructs a new selection instance.
  *
  * @constructor
  * @method Selection
  * @param {tinymce.dom.DOMUtils} dom DOMUtils object reference.
  * @param {Window} win Window to bind the selection object to.
  * @param {tinymce.dom.Serializer} serializer DOM serialization class to use for getContent.
  */
 function Selection(dom, win, serializer, editor) {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\dom\Selection.js]

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.dom.Selection).sort()
["arguments", "caller", "length", "name", "prototype"]

_INSTANCE:
> Object.getOwnPropertyNames(tinymce.dom.Selection.prototype).sort()
["collapse", "destroy", "getBookmark", "getContent", "getEnd", "getNode", "getRng", "getScrollContainer", "getSel", "getSelectedBlocks", "getStart", "isCollapsed", "isForward", "moveToBookmark", "normalize", "scrollIntoView", "select", "selectorChanged", "setContent", "setCursorLocation", "setNode", "setRng"]

tinymce.dom.Serializer-function

name::
* McsEngl.tinymce.dom.Serializer-function@cptIt,
* McsEngl.tinymce.dom.Serializer@cptIt,
* McsEngl.tmce'Serializer@cptIt,

_DEFINITION:
* This class is used to serialize DOM trees into a string.
* Consult the TinyMCE Wiki API for
* more details and examples on how to use this class.
return function(settings, editor) {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\dom\Serializer.js]

_PROPERTY:
Object.getOwnPropertyNames(tinymce.dom.Serializer).sort()
["arguments", "caller", "length", "name", "prototype"]

_INSTANCE:
> Object.getOwnPropertyNames(tinymce.dom.Serializer.prototype).sort()
["constructor"]
> Object.getOwnPropertyNames(new tinymce.dom.Serializer(tinymce.activeEditor)).sort()
["addAttributeFilter", "addNodeFilter", "addRules", "onPostProcess", "onPreProcess", "schema", "serialize", "setRules"]

tinymce.dom.Sizzle

name::
* McsEngl.tinymce.dom.Sizzle@cptIt,
* McsEngl.tinymce.dom.Sizzle@cptIt,
* McsEngl.tmce'Sizzle@cptIt,

_DEFINITION:
function Sizzle( selector, context, results, seed ) {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\dom\Sizzle.js +line:239]

tinymce.dom.TreeWalker-function

name::
* McsEngl.tinymce.dom.TreeWalker-function@cptIt,
* McsEngl.tinymce.dom.TreeWalker@cptIt,
* McsEngl.tmce'TreeWalker@cptIt,

_DEFINITION:
* TreeWalker class enables you to walk the DOM in a linear manner.
return function(start_node, root_node) {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\dom\TreeWalker.js]

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.dom.TreeWalker).sort()
["arguments", "caller", "length", "name", "prototype"]

_INSTANCE:
> Object.getOwnPropertyNames(tinymce.dom.TreeWalker.prototype).sort()
["constructor"]
> Object.getOwnPropertyNames(new tinymce.dom.TreeWalker(document)).sort()
["current", "next", "prev"]

tinymce.dom.TridentSelection-function

name::
* McsEngl.tinymce.dom.TridentSelection-function@cptIt,
* McsEngl.tinymce.dom.TridentSelection@cptIt,
* McsEngl.tmce'TridentSelection@cptIt,

_DEFINITION:
* Selection class for old explorer versions. This one fakes the
* native selection object available on modern browsers.
 function Selection(selection) {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\dom\TridentSelection.js]

tinymce.each-function

name::
* McsEngl.tinymce.each-function@cptIt,
* McsEngl.tmce'each@cptIt,

_DESCRIPTION:
  * Performs an iteration of all items in a collection such as an object or array. This method will execure the
  * callback function for each item in the collection, if the callback returns false the iteration will terminate.
  * The callback has the following format: cb(value, key_or_index).
  *
  * @method each
  * @param {Object} o Collection to iterate.
  * @param {function} cb Callback function to execute for each item.
  * @param {Object} s Optional scope to execute the callback in.
  * @example
  * // Iterate an array
  * tinymce.each([1,2,3], function(v, i) {
  * console.debug("Value: " + v + ", Index: " + i);
  * });
  *
  * // Iterate an object
  * tinymce.each({a: 1, b: 2, c: 3], function(v, k) {
  * console.debug("Value: " + v + ", Key: " + k);
  * });

_FILE:
* \PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Tools.js +line127,

tinymce.editors object

name::
* McsEngl.tinymce.editors object@cptIt,
* McsEngl.tmce'editors@cptIt,

_GENERIC:
> typeof tinymce.editors
"object"

_DEFINITION:
* Collection of editor instances.
    *
    * @property editors
    * @type Object
    * @example
    * for (edId in tinymce.editors)
    * tinymce.editors[edId].save();
    */
   editors: [],
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\EditorManager.js +line:69]

tinymce.execCommand-function

name::
* McsEngl.tinymce.execCommand-function@cptIt,
* McsEngl.tmce'execCommand@cptIt,

_GENERIC:
typeof tinymce.execCommand
"function"

_DEFINTION:
    * Executes a specific command on the currently active editor.
    *
    * @method execCommand
    * @param {String} c Command to perform for example Bold.
    * @param {Boolean} u Optional boolean state if a UI should be presented for the command or not.
    * @param {String} v Optional value parameter like for example an URL to a link.
    * @return {Boolean} true/false if the command was executed or not.
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\EditorManager.js +line:483]

_DESCRIPTION:
public function execCommand(command:String, ui:Boolean, value:Object):Boolean
Executes the specified command.
Params
Name  Type  Description
command   String  Command to execute.
ui   Boolean  Optional user interface state.
value   Object  Optional value for command.
Returns
Boolean true/false if the command was found or not.
[http://www.tinymce.com/wiki.php/api4:method.tinymce.EditorCommands.execCommand]
===
    * @param {String} command Command to execute.
    * @param {Boolean} ui Optional user interface state.
    * @param {Object} value Optional value for command.
    * @return {Boolean} true/false if the command was found or not.
    */
   function execCommand(command, ui, value) {
[\PgmWEB\tinyMCE\tinymce401Dev\js\tinymce\classes\EditorCommands.js]
===

execCommand('2D-Position', false, true);
execCommand('Delete');
execCommand('Delete', false, null);
execCommand('Delete', false, null);
execCommand('FontName', false, e.control.settings.value);
execCommand('FontSize', false, e.control.settings.value);
execCommand('Paste');
execCommand('SelectAll');
execCommand('createlink', false, matches[1] + matches[2]);
execCommand('delete', false, null);
execCommand('enableObjectResizing', false, false);
execCommand('mceAddEditor', 0, value);
execCommand('mceColorPicker', true, {
execCommand('mceInsertContent', false, '<hr />');
execCommand('mceInsertContent', false, content);
execCommand('mceInsertContent', false, editor.dom.createHTML('a', {
execCommand('mceInsertContent', false, el.innerHTML);
execCommand('mceInsertLink', false, {
execCommand('mceNonBreaking');
execCommand('mceRepaint');
execCommand('mceRepaint');
execCommand('mceToggleFormat', false, fmt);
execCommand('mceVisualBlocks', false, null, {skip_focus: true});
execCommand('unlink');
execCommand(buttonCtrl.settings.selectcmd, false, value);
execCommand(isDelete ? 'ForwardDelete' : 'Delete', false, null);
execCommand(listName == 'UL' ? 'InsertUnorderedList' : 'InsertOrderedList');

_file:editor.html:
* setTimeout("tinymce.execCommand('mceInsertContent',false,'<b>Hello world!!</b> ')", 222);
* make selection bold:
- tinymce.get('idEditor').execCommand('Bold');

tinymce.explode-function

name::
* McsEngl.tinymce.explode-function@cptIt,
* McsEngl.tmce'explode@cptIt,

_DEFINITION:
  * Splits a string but removes the whitespace before and after each value.
  * @param {string} s String to split.
  * @param {string} sDmr Delimiter to split by.
  * @example
  * // Split a string into an array with a,b,c
  * var arr = tinymce.explode('a, b, c');
function explode(s, d) {
   if (!s || is(s, 'array')) {
     return s;
   }

   return map(s.split(d || ','), trim);
 } Tools.js:477
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Tools.js +line:477]

tinymce.extend-function

name::
* McsEngl.tinymce.extend-function@cptIt,
* McsEngl.tmce'extend@cptIt,

_DEFINITION:
function extend(obj, ext) {
   var i, l, name, args = arguments, value;

   for (i = 1, l = args.length; i < l; i++) {
     ext = args[i];
     for (name in ext) {
       if (ext.hasOwnProperty(name)) {
         value = ext[name];

         if (value !== undefined) {
           obj[name] = value;
         }
       }
     }
   }

   return obj;
 } Tools.js:356
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Tools.js +line:356]

tinymce.fire-function

name::
* McsEngl.tinymce.fire-function@cptIt,
* McsEngl.tmce'fire@cptIt,

_DEFINITION:
    * Fires the specified event by name.
    *
    * @method fire
    * @param {String} name Name of the event to fire.
    * @param {tinymce.Event/Object?} args Event arguments.
    * @param {Boolean?} bubble True/false if the event is to be bubbled.
    * @return {tinymce.Event} Event instance passed in converted into tinymce.Event instance.
    * @example
    * instance.fire('event', {...});
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Observable.js +line:45]

tinymce.focusManager object

name::
* McsEngl.tinymce.focusManager object@cptIt,
* McsEngl.tmce'focusManager@cptIt,

_GENERIC:
> tinymce.focusManager
FocusManager#ql:tmce'tinymce.focusmanager function# {}
> typeof tinymce.focusManager
"object"

_DEFINITION:
self.focusManager = new FocusManager(self);
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\EditorManager.js +line:153]

tinymce.focusedEditor object

name::
* McsEngl.tinymce.focusedEditor object@cptIt,
* McsEngl.tmce'focusedEditor@cptIt,

_GENERIC:
> typeof tinymce.focusedEditor
"object"
> tinymce.focusedEditor instanceof tinymce.Editor
true

_DEFINITION:
editorManager.focusedEditor = editor;
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\FocusManager.js +line:159]

tinymce.get-function

name::
* McsEngl.tinymce.get-function@cptIt,
* McsEngl.tmce'get@cptIt,

_DEFINITION:
function (id) {
     if (id === undefined) {
       return this.editors;
     }

     return this.editors[id];
   } EditorManager.js:334
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\EditorManager.js +line:334]

tinymce.grep-function

name::
* McsEngl.tinymce.grep-function@cptIt,
* McsEngl.tmce'grep@cptIt,

_DEFINITION:
  * Filters out items from the input array by calling the specified function for each item.
  * If the function returns false the item will be excluded if it returns true it will be included.
  *
  * @method grep
  * @param {Array} a Array of items to loop though.
  * @param {function} f Function to call for each item. Include/exclude depends on it's return value.
  * @return {Array} New array with values imported and filtered based in input.
  * @example
  * // Filter out some items, this will return an array with 4 and 5
  * var items = tinymce.grep([1,2,3,4,5], function(v) {return v > 3;});
function grep(a, f) {
   var o = [];

   each(a, function(v) {
     if (!f || f(v)) {
       o.push(v);
     }
   });

   return o;
 } Tools.js:188
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Tools.js +line:188]

tinymce.hasEventListeners-function

name::
* McsEngl.tinymce.hasEventListeners-function@cptIt,
* McsEngl.tmce'hasEventListeners@cptIt,

_DEFINITION:
tinymce.hasEventListeners
function (name) {
     var bindings = this[bindingsName];

     name = name.toLowerCase();

     return !(!bindings || !bindings[name] || bindings[name].length === 0);
   } Observable.js:233
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Observable.js +line:233]

tinymce.hasOwnProperty-function

name::
* McsEngl.tinymce.hasOwnProperty-function@cptIt,

_PROPERTY:
Object.getOwnPropertyNames(Object.prototype)
["constructor", "toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "__defineGetter__", "__lookupGetter__", "__defineSetter__", "__lookupSetter__", "__proto__"]

tinymce.html object NAMESPACE

name::
* McsEngl.tinymce.html object NAMESPACE@cptIt,
* McsEngl.tinymce.html@cptIt,
* McsEngl.tmce'html@cptIt,
* McsEngl.tmce'html-namespace@cptIt,
* McsEngl.tmce'namespace.tinymce.html@cptIt,
* McsEngl.tmce'tinymce.html-namespace@cptIt,
* McsEngl.tmce'tinymce.html-object@cptIt,

_GENERIC:
typeof tinymce.html
"object"

_DESCRIPTION:
Contains html parser and serializer logic.
[http://www.tinymce.com/wiki.php/api4:namespace.tinymce.html]

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.html).sort()
["DomParser", "Entities", "Node", "SaxParser", "Schema", "Serializer", "Styles", "Writer"]
> Object.getOwnPropertyNames(tinymce.html.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
===
* DomParser#ql:tmce'domparser#
* Entities#ql:tmce'entities#
* Node#ql:tmce'node#
* SaxParser#ql:tmce'saxparser#
* Schema#ql:tmce'schema#
* Serializer#ql:tmce'serializer.html#
* Styles#linkL#
* Writer#ql:tmce'writer#

tinymce.html.DomParser-function

name::
* McsEngl.tinymce.html.DomParser-function@cptIt,
* McsEngl.tinymce.html.DomParser@cptIt,
* McsEngl.tmce'DomParser@cptIt,

_GENERIC:
typeof tinymce.html.DomParser
"function"

_DEFINITION:
return function(settings, schema) {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\html\DomParser.js]

_INSTANCE:
> Object.getOwnPropertyNames(new tinymce.html.DomParser).sort()
["addAttributeFilter", "addNodeFilter", "filterNode", "parse", "schema"]
> Object.getOwnPropertyNames(tinymce.html.DomParser.prototype).sort()
["constructor"]

_DESCRIPTION:
This class parses HTML code into a DOM like structure of nodes it will remove redundant whitespace and make sure that the node tree is valid according to the specified schema. So for example: <p>a<p>b</p>c</p> will become <p>a</p><p>b</p><p>c</p>

Examples
var parser = new tinymce.html.DomParser({validate: true}, schema);
var rootNode = parser.parse('<h1>content</h1>');

Constructors
Method  Defined By
DomParser
Constructs a new DomParser instance
tinymce.html.DomParser
Methods

Method  Defined By
addAttributeFilter
Adds a attribute filter function to the parser, the parser will collect nodes that has the specified
tinymce.html.DomParser
addNodeFilter
Adds a node filter function to the parser, the parser will collect the specified nodes by name and t
tinymce.html.DomParser
filterNode
Runs the specified node though the element and attributes filters
tinymce.html.DomParser
parse
Parses the specified HTML string into a DOM like node tree and returns the result
tinymce.html.DomParser
[http://www.tinymce.com/wiki.php/api4:class.tinymce.html.DomParser]

_PROPERTY_OF_INSTANCE:
> Object.getOwnPropertyNames(oDp).sort()
["addAttributeFilter", "addNodeFilter", "filterNode", "parse", "schema"]
===
> Object.getOwnPropertyNames(tinymce.html.DomParser).sort()
["arguments", "caller", "length", "name", "prototype"]

tinymce.html.Entities object

name::
* McsEngl.tinymce.html.Entities object@cptIt,
* McsEngl.tinymce.html.Entities@cptIt,
* McsEngl.tmce'Entities@cptIt,

_GENERIC:
typeof tinymce.html.Entities
"object"

_DEFINITION:
var Entities = {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\html\Entities.js +line:118]

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.html.Entities).sort()
["decode", "encodeAllRaw", "encodeNamed", "encodeNumeric", "encodeRaw", "getEncodeFunc"]
> Object.getOwnPropertyNames(tinymce.html.Entities.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

_DESCRIPTION:
Entity encoder class.
Methods

Method  Defined By
decode static
Decodes the specified string, this will replace entities with raw UTF characters
tinymce.html.Entities
encodeAllRaw static
Encoded the specified text with both the attributes and text entities
tinymce.html.Entities
encodeNamed static
Encodes the specified string using named entities
tinymce.html.Entities
encodeNumeric static
Encodes the specified string using numeric entities
tinymce.html.Entities
encodeRaw static
Encodes the specified string using raw entities
tinymce.html.Entities
getEncodeFunc static
Returns an encode function based on the name(s) and it's optional entities
tinymce.html.Entities
[http://www.tinymce.com/wiki.php/api4:class.tinymce.html.Entities]

tinymce.html.Node-function

name::
* McsEngl.tinymce.html.Node-function@cptIt,
* McsEngl.tinymce.html.Node@cptIt,
* McsEngl.tmce'Node@cptIt,

_GENERIC:
typeof tinymce.html.Node
"function"

_DEFINITION:
function Node(name, type) {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\html\Node.js]

tmce'oNode:
> Object.getOwnPropertyNames(new tinymce.html.Node()).sort()
* tmce'oNode.name,
* tmce'oNode.type,
> Object.getOwnPropertyNames(tinymce.html.Node.prototype).sort()
* tmce'oNode.append,
* tmce'oNode.attr,
* tmce'oNode.clone,
* tmce'oNode.empty,
* tmce'oNode.getAll,
* tmce'oNode.insert,
* tmce'oNode.isEmpty,
* tmce'oNode.remove,
* tmce'oNode.replace,
* tmce'oNode.unwrap,
* tmce'oNode.walk,
* tmce'oNode.wrap,
===
> Object.getOwnPropertyNames(new tinymce.html.Node()).sort()
["name", "type"]
> Object.getOwnPropertyNames(tinymce.html.Node.prototype).sort()
["append", "attr", "clone", "empty", "getAll", "insert", "isEmpty", "remove", "replace", "unwrap", "walk", "wrap"]
> Object.getOwnPropertyNames((new tinymce.oDom.fNode()).__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

_DESCRIPTION:
This class is a minimalistic implementation of a DOM like node used by the DomParser class.
Examples

var node = new tinymce.html.Node('strong', 1);
someRoot.append(node);
Constructors

Method  Defined By
Node
Constructs a new Node instance
tinymce.html.Node
Methods

Method  Defined By
append
Appends a new node as a child of the current node
tinymce.html.Node
attr
Gets/sets or removes an attribute by name
tinymce.html.Node
clone
Does a shallow clones the node into a new node
tinymce.html.Node
create static
Creates a node of a specific type
tinymce.html.Node
empty
Removes all children of the current node
tinymce.html.Node
getAll
Get all children by name
tinymce.html.Node
insert
Inserts a node at a specific position as a child of the current node
tinymce.html.Node
isEmpty
Returns true/false if the node is to be considered empty or not
tinymce.html.Node
remove
Removes the node from it's parent
tinymce.html.Node
replace
Replaces the current node with the specified one
tinymce.html.Node
unwrap
Unwraps the node in other words it removes the node but keeps the children
tinymce.html.Node
walk
Walks to the next or previous node and returns that node or null if it wasn't found
tinymce.html.Node
wrap
Wraps the node in in another node
tinymce.html.Node
[http://www.tinymce.com/wiki.php/api4:class.tinymce.html.Node]

tinymce.html.SaxParser-function

name::
* McsEngl.tinymce.html.SaxParser-function@cptIt,
* McsEngl.tinymce.html.SaxParser@cptIt,
* McsEngl.tmce'SaxParser@cptIt,

_GENERIC:
typeof tinymce.html.SaxParser
"function"

_INSTANCE:
> Object.getOwnPropertyNames(new tinymce.html.SaxParser).sort()
["cdata", "comment", "doctype", "end", "parse", "pi", "schema", "start", "text"]
> Object.getOwnPropertyNames(tinymce.html.SaxParser.prototype).sort()
["constructor"]

_DESCRIPTION:
This class parses HTML code using pure JavaScript and executes various events for each item it finds. It will always execute the events in the right order for tag soup code like <b><p></b></p>. It will also remove elements and attributes that doesn't fit the schema if the validate setting is enabled.
Examples
var parser = new tinymce.html.SaxParser({
validate: true,

comment: function(text) {
console.log('Comment:', text);
},

cdata: function(text) {
console.log('CDATA:', text);
},

text: function(text, raw) {
console.log('Text:', text, 'Raw:', raw);
},

start: function(name, attrs, empty) {
console.log('Start:', name, attrs, empty);
},

end: function(name) {
console.log('End:', name);
},

pi: function(name, text) {
console.log('PI:', name, text);
},

doctype: function(text) {
console.log('DocType:', text);
}
}, schema);
Constructors

Method  Defined By
SaxParser
Constructs a new SaxParser instance
tinymce.html.SaxParser
Methods

Method  Defined By
parse
Parses the specified HTML string and executes the callbacks for each item it finds
tinymce.html.SaxParser
[http://www.tinymce.com/wiki.php/api4:class.tinymce.html.SaxParser]

tinymce.html.Schema-function

name::
* McsEngl.tinymce.html.Schema-function@cptIt,
* McsEngl.tinymce.html.Schema@cptIt,
* McsEngl.tmce'Schema@cptIt,

_GENERIC:
typeof tinymce.html.Schema
"function"

_DEFINITION:
return function(settings) {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\html\Schema.js +line:323]

_PROTOTYPE:
> Object.getOwnPropertyNames(new tinymce.html.Schema).sort()
["addCustomElements", "addValidChildren", "addValidElements", "children", "elements", "getBlockElements", "getBoolAttrs", "getCustomElements", "getElementRule", "getNonEmptyElements", "getSelfClosingElements", "getShortEndedElements", "getSpecialElements", "getTextBlockElements", "getWhiteSpaceElements", "isValid", "isValidChild", "setValidElements", "styles"]
> Object.getOwnPropertyNames(tinymce.html.Schema.prototype).sort()
["constructor"]

_DESCRIPTION:
Schema validator class.
Examples

if (tinymce.activeEditor.schema.isValidChild('p', 'span'))
alert('span is valid child of p.');

if (tinymce.activeEditor.schema.getElementRule('p'))
alert('P is a valid element.');
Constructors

Method  Defined By
Schema
Constructs a new Schema instance
tinymce.html.Schema
Methods

Method  Defined By
addCustomElements
Adds custom non HTML elements to the schema
tinymce.html.Schema
addValidChildren
Parses a valid children string and adds them to the schema structure
tinymce.html.Schema
addValidElements
Parses a valid elements string and adds it to the schema
tinymce.html.Schema
getBlockElements
Returns a map with block elements
tinymce.html.Schema
getBoolAttrs
Returns a map with boolean attributes
tinymce.html.Schema
getCustomElements
Returns an map object of all custom elements
tinymce.html.Schema
getElementRule
Returns true/false if the specified element is valid or not according to the schema
tinymce.html.Schema
getNonEmptyElements
Returns a map with elements that should be treated as contents regardless if it has text content in
tinymce.html.Schema
getSelfClosingElements
Returns a map with self closing tags such as <li>
tinymce.html.Schema
getShortEndedElements
Returns a map with short ended elements such as BR or IMG
tinymce.html.Schema
getSpecialElements
Returns a map with special elements
tinymce.html.Schema
getTextBlockElements
Returns a map with text block elements
tinymce.html.Schema
getWhiteSpaceElements
Returns a map with elements where white space is to be preserved like PRE or SCRIPT
tinymce.html.Schema
isValid
Returns true/false if the specified element name and optional attribute is valid according to the sc
tinymce.html.Schema
isValidChild
Returns true/false if the specified element and it's child is valid or not according to the schema
tinymce.html.Schema
setValidElements
Parses a valid elements string and sets it to the schema
tinymce.html.Schema
[http://www.tinymce.com/wiki.php/api4:class.tinymce.html.Schema]

tinymce.html.Serializer-function

name::
* McsEngl.tinymce.html.Serializer-function@cptIt,
* McsEngl.tinymce.html.Serializer@cptIt,
* McsEngl.tmce'SerializerHtml@cptIt,

_GENERIC:
typeof tinymce.html.Serializer
"function"

_DEFINITION:
return function(settings, schema) {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\html\Serializer.js]

_PROTOTYPE:
> Object.getOwnPropertyNames(new tinymce.html.Serializer).sort()
["schema", "serialize", "writer"]

_DESCRIPTION:
This class is used to serialize down the DOM tree into a string using a Writer instance.
Examples

new tinymce.html.Serializer().serialize(new tinymce.html.DomParser().parse('<p>text</p>'));
Constructors

Method  Defined By
Serializer
Constructs a new Serializer instance
tinymce.html.Serializer
Methods

Method  Defined By
serialize
Serializes the specified node into a string
tinymce.html.Serializer
[http://www.tinymce.com/wiki.php/api4:class.tinymce.html.Serializer]
[]

tinymce.html.Styles-function

name::
* McsEngl.tinymce.html.Styles-function@cptIt,
* McsEngl.tinymce.html.Styles@cptIt,
* McsEngl.tmce'Styles@cptIt,

_GENERIC:
typeof tinymce.html.Styles
"function"

_DEFINITION:
return function(settings, schema) {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\html\Styles.js]

_PROTOTYPE:
> Object.getOwnPropertyNames(new tinymce.html.Styles).sort()
["parse", "serialize", "toHex"]
> Object.getOwnPropertyNames(tinymce.html.Styles.prototype).sort()
["constructor"]

_DESCRIPTION:
This class is used to parse CSS styles it also compresses styles to reduce the output size.
Examples

var Styles = new tinymce.html.Styles({
url_converter: function(url) {
return url;
}
});

styles = Styles.parse('border: 1px solid red');
styles.color = 'red';

console.log(new tinymce.html.StyleSerializer().serialize(styles));
Methods

Method  Defined By
parse
Parses the specified style value into an object collection
tinymce.html.Styles
serialize
Serializes the specified style object into a string
tinymce.html.Styles
toHex
Parses the specified RGB color value and returns a hex version of that color
tinymce.html.Styles
[http://www.tinymce.com/wiki.php/api4:class.tinymce.html.Styles]

tinymce.html.Writer-function

name::
* McsEngl.tinymce.html.Writer-function@cptIt,
* McsEngl.tinymce.html.Writer@cptIt,
* McsEngl.tmce'Writer@cptIt,

_GENERIC:
typeof tinymce.html.Writer
"function"

_DESCRIPTION:
This class is used to write HTML tags out it can be used with the Serializer or the SaxParser.
Examples
var writer = new tinymce.html.Writer({indent: true});
var parser = new tinymce.html.SaxParser(writer).parse('<p><br></p>');
console.log(writer.getContent());
Constructors

Method  Defined By
Writer
Constructs a new Writer instance
tinymce.html.Writer
Methods

Method  Defined By
addShortcut
Adds a keyboard shortcut for some command or function
tinymce.html.Writer
cdata
Writes a comment node such as <!-- Comment -->
tinymce.html.Writer
doctype
Writes a doctype node such as <!DOCTYPE data>
tinymce.html.Writer
end
Writes the a end element such as </p>
tinymce.html.Writer
getContent
Returns the contents that got serialized
tinymce.html.Writer
pi
Writes a PI node such as <?xml attr="value" ?>
tinymce.html.Writer
reset
Resets the internal buffer if one wants to reuse the writer
tinymce.html.Writer
start
Writes the a start element such as <p id="a">
tinymce.html.Writer
text
Writes a text node
tinymce.html.Writer
[http://www.tinymce.com/wiki.php/api4:class.tinymce.html.Writer]

_PROTOTYPE:
> Object.getOwnPropertyNames(tinymce.html.Writer.prototype).sort()
["constructor"]
> Object.getOwnPropertyNames(new tinymce.html.Writer).sort()
["cdata", "comment", "doctype", "end", "getContent", "pi", "reset", "start", "text"]

tinymce.i18n object

name::
* McsEngl.tinymce.i18n object@cptIt,
* McsEngl.tmce'i18n@cptIt,

_DEFINITION:
* Collection of language pack data.
    *
    * @property i18n
    * @type Object
    */
   i18n: I18n,
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\EditorManager.js +line:77]

tinymce.inArray-function

name::
* McsEngl.tinymce.inArray-function@cptIt,
* McsEngl.tmce'inArray@cptIt,

_DEFINITION:
function inArray(a, v) {
   var i, l;

   if (a) {
     for (i = 0, l = a.length; i < l; i++) {
       if (a[i] === v) {
         return i;
       }
     }
   }

   return -1;
 } Tools.js:342
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Tools.js +line:342]

tinymce.init-function

name::
* McsEngl.tinymce.init-function@cptIt,
* McsEngl.tinymce.init@cptIt,
* McsEngl.tmce'init@cptIt,

_DEFINITION:
    * Initializes a set of editors. This method will create editors based on various settings.
    *
    * @method init
    * @param {Object} settings Settings object to be passed to each editor instance.
    * @example
    * // Initializes a editor using the longer method
    * tinymce.EditorManager.init({
    * some_settings : 'some value'
    * });
    *
    * // Initializes a editor instance using the shorter version
    * tinyMCE.init({
    * some_settings : 'some value'
    * });
    */
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\EditorManager.js +line:172]

tinymce.is-function

name::
* McsEngl.tinymce.is-function@cptIt,
* McsEngl.tmce'is@cptIt,

_DEFINITION:
  * Checks if a object is of a specific type for example an array.
  *
  * @method is
  * @param {Object} o Object to check type of.
  * @param {string} t Optional type to check for.
  * @return {Boolean} true/false if the object is of the specified type.
function is(o, t) {
   if (!t) {
     return o !== undefined;
   }

   if (t == 'array' && isArray(o)) {
     return true;
   }

   return typeof(o) == t;
 } Tools.js:49
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Tools.js +line:49]

tinymce.isArray-function

name::
* McsEngl.tinymce.isArray-function@cptIt,
* McsEngl.tmce'isArray@cptIt,

_DESCRIPTION:
  * Returns true/false if the object is an array or not.
  *
  * @method isArray
  * @param {Object} obj Object to check.
  * @return {boolean} true/false state if the object is an array or not.
  */
 var isArray = Array.isArray || function(obj) {
   return Object.prototype.toString.call(obj) === "[object Array]";
 };
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Tools.js +line:37]

tinymce.isGecko IE Mac Opera WebKit boolean

name::
* McsEngl.tinymce.isGecko IE Mac Opera WebKit boolean@cptIt,

_GENERIC:
> typeof tinymce.isGecko
"boolean"

_DEFINITION:
 Tools.each('isOpera isWebKit isIE isGecko isMac'.split(' '), function(name) {
   tinymce[name] = Env[name.substr(2).toLowerCase()];
 });
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\Compat.js +line:47]

tinymce.isPrototypeOf-function

name::
* McsEngl.tinymce.isPrototypeOf-function@cptIt,

tinymce.majorVersion string

name::
* McsEngl.tinymce.majorVersion string@cptIt,

_GENERIC:
> typeof tinymce.majorVersion
"string"

_DEFINITION:
majorVersion : '@@majorVersion@@',
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\EditorManager.js +line:42]

tinymce.makeMap-function

name::
* McsEngl.tinymce.makeMap-function@cptIt,
* McsEngl.tmce'makeMap@cptIt,

_DEFINITION:
  * Makes a name/object map out of an array with names.
  * @param {Array/String} items Items to make map out of.
  * @param {String} delim Optional delimiter to split string by.
  * @param {Object} map Optional map to add items to.
  * @return {Object} Name/value map of items.
  */
 function makeMap(items, delim, map) {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Tools.js +line:87]

tinymce.map-function

name::
* McsEngl.tinymce.map-function@cptIt,
* McsEngl.tmce'map@cptIt,

_DEFINITION:
  * Creates a new array by the return value of each iteration function call. This enables you to convert
  * one array list into another.
  *
  * @method map
  * @param {Array} a Array of items to iterate.
  * @param {function} f Function to call for each item. It's return value will be the new value.
  * @return {Array} Array with new values based on function return values.
  */
 function map(a, f) {

[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Tools.js +line:166]

tinymce.minorVersion string

name::
* McsEngl.tinymce.minorVersion string@cptIt,

_GENERIC:
> typeof tinymce.minorVersion
"string"

_DEFINITION:
   /**
    * Minor version of TinyMCE build.
    *
    * @property minorVersion
    * @type String
    */
   minorVersion : '@@minorVersion@@',
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\EditorManager.js +line:50]

tinymce.off-function

name::
* McsEngl.tinymce.off-function@cptIt,
* McsEngl.tmce'off@cptIt,

_DEFINITION:
    * Unbinds an event listener to a specific event by name.
    *
    * @method off
    * @param {String?} name Name of the event to unbind.
    * @param {callback?} callback Callback to unbind.
    * @return {Object} Current class instance.
    * @example
    * // Unbind specific callback
    * instance.off('event', handler);
    *
    * // Unbind all listeners by name
    * instance.off('event');
    *
    * // Unbind all events
    * instance.off();
    */
   off: function(name, callback) {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Observable.js +line:179]

tinymce.on-function

name::
* McsEngl.tinymce.on-function@cptIt,
* McsEngl.tmce'on@cptIt,

_DEFINITION:
    * Binds an event listener to a specific event by name.
    *
    * @method on
    * @param {String} name Event name or space separated list of events to bind.
    * @param {callback} callback Callback to be executed when the event occurs.
    * @return {Object} Current class instance.
    * @example
    * instance.on('event', function(e) {
    * // Callback logic
    * });
    */
   on: function(name, callback) {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Observable.js +line:127]

tinymce.pasteplugin object

name::
* McsEngl.tinymce.pasteplugin object@cptIt,
* McsEngl.tmce'pasteplugin@cptIt,

tinymce.propertyIsEnumerable-function

name::
* McsEngl.tinymce.propertyIsEnumerable-function@cptIt,

tinymce.releaseDate string

name::
* McsEngl.tinymce.releaseDate string@cptIt,

_GENERIC:
> typeof tinymce.minorVersion
"string"

_DEFINITION:
    * Release date of TinyMCE build.
    *
    * @property releaseDate
    * @type String
    */
   releaseDate: '@@releaseDate@@',
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\EditorManager.js +line:58]

tinymce.remove-function

name::
* McsEngl.tinymce.remove-function@cptIt,
* McsEngl.tmce'remove@cptIt,

_DEFINITION:
    * Removes a editor or editors form page.
    *
    * @example
    * // Remove all editors bound to divs
    * tinymce.remove('div');
    *
    * // Remove all editors bound to textareas
    * tinymce.remove('textarea');
    *
    * // Remove all editors
    * tinymce.remove();
    *
    * // Remove specific instance by id
    * tinymce.remove('#id');
    *
    * @method remove
    * @param {tinymce.Editor/String/Object} [selector] CSS selector or editor instance to remove.
    * @return {tinymce.Editor} The editor that got passed in will be return if it was found otherwise null.
    */
   remove: function(selector) {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\EditorManager.js +line:409]

tinymce.resolve-function

name::
* McsEngl.tinymce.resolve-function@cptIt,
* McsEngl.tmce'resolve@cptIt,

_DEFINITION:
  * Resolves a string and returns the object from a specific structure.
  *
  * @method resolve
  * @param {String} n Path to resolve for example a.b.c.d.
  * @param {Object} o Optional object to search though, defaults to window.
  * @return {Object} Last object in path or null if it couldn't be resolved.
  * @example
  * // Resolve a path into an object reference
  * var obj = tinymce.resolve('a.b.c.d');
  */
 function resolve(n, o) {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Tools.js +line:450]

tinymce.settings object

name::
* McsEngl.tinymce.settings object@cptIt,
* McsEngl.tinymce.settings@cptIt,
* McsEngl.tmce'resolve@cptIt,

_GENERIC:
typeof tinymce.settings
"object"

_DEFINITION:
self.settings = settings;
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\EditorManager.js +line:312]

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.settings).sort()
["browser_spellcheck", "content_css", "contextmenu", "entities", "entity_encoding", "external_plugins", "file_browser_callback", "init_instance_callback", "link_list", "nonbreaking_force_tab", "pagebreak_separator", "plugins", "save_enablewhendirty", "save_onsavecallback", "schema", "selector", "theme", "toolbar1", "toolbar2", "toolbar3"]
> Object.getOwnPropertyNames(tinymce.settings.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
===
> Object.getOwnPropertyNames((tinymce.EditorManager.settings)).sort()
["browser_spellcheck", "content_css", "contextmenu", "entities", "entity_encoding", "external_plugins", "file_browser_callback", "init_instance_callback", "link_list", "nonbreaking_force_tab", "pagebreak_separator", "plugins", "save_enablewhendirty", "save_onsavecallback", "schema", "selector", "theme", "toolbar1", "toolbar2", "toolbar3"]

tmce'option

name::
* McsEngl.tmce'option@cptIt,
* McsEngl.tmcecfg@cptIt,
* McsEngl.tmce'configuration@cptIt,
* McsEngl.tmce'option@cptIt,
* McsEngl.tmce'preference@cptIt,
* McsEngl.tmce'settings.core@cptIt,

_ADDRESS.WPG:
* http://www.tinymce.com/wiki.php/Configuration,

_SPECIFIC:
* auto_focus
* autoresize_max_height AutoResize plugin
* autoresize_min_height AutoResize plugin
* block_formats
* body_class
* body_id
* browser_spellcheck
* content_css
* convert_fonts_to_spans
* convert_urls
* custom_elements
* custom_undo_redo_levels
* directionality
* doctype
* document_base_url
* element_format
* entities
* entity_encoding
* extended_valid_elements
* external_plugins
* file_browser_callback#ql:tmce'file_browser_callback#
* fix_list_elements
* fixed_toolbar_container
* font_formats
* fontsize_formats
* force_hex_style_colors
* force_p_newlines
* forced_root_block
* formats
* fullpage_default_doctype Fullpage plugin
* fullpage_default_encoding Fullpage plugin
* fullpage_default_font_family Fullpage plugin
* fullpage_default_font_size Fullpage plugin
* fullpage_default_langcode Fullpage plugin
* fullpage_default_text_color Fullpage plugin
* fullpage_default_title Fullpage plugin
* fullpage_default_xml_pi Fullpage plugin
* fullpage_hide_in_source_view Fullpage plugin
* height
* hidden_input
* image_advtab Image plugin
* image_list Image plugin
* indentation
* inline
* insertdate_dateformat Insertdatetime plugin
* insertdate_formats Insertdatetime plugin
* insertdate_timeformat Insertdatetime plugin
* insertdatetime_element Insertdatetime plugin
* invalid_elements
* keep_styles
* language
* language_url
* link_list Link plugin
* menu
* menubar
* noneditable_editable_class Noneditable plugin
* noneditable_leave_contenteditable Noneditable plugin
* noneditable_noneditable_class Noneditable plugin
* nowrap
* object_resizing
* pagebreak_separator Pagebreak plugin
* paste_as_text Paste plugin
* paste_data_images Paste plugin
* plugins
* preview_styles
* protect
* rel_list Link plugin
* relative_urls
* remove_script_host
* resize
* save_enablewhendirty Save plugin
* save_oncancelcallback Save plugin
* save_onsavecallback Save plugin
* schema#linkL#
* selector
* skin
* spellchecker_wordchar_pattern Spellchecker plugin
* statusbar
* style_formats
* tabfocus_elements Tabfocus plugin
* table_clone_elements Table plugin
* target_list Link plugin
* template_cdate_classes Template plugin
* template_cdate_format Template plugin
* template_mdate_classes Template plugin
* template_mdate_format Template plugin
* template_popup_height Template plugin
* template_popup_width Template plugin
* template_replace_values Template plugin
* template_selected_content_classes Template plugin
* templates Template plugin
* theme#ql:tmce'theme#
* toolbar
* toolbar<N>
* valid_children
* valid_elements
* visual
* visualblocks_default_state Visualblocks plugin
* width

tmce'add_unload_trigger: false,

tmce'inline: true,

tmce'schema: "html5",

tmce'selector: "h1.edit",
selector : 'textarea',
selector: "textarea#elm1",

tmce'statusbar: false

tmce'style_formats: [
{title: 'Bold text', inline: 'b'},
{title: 'Red text', inline: 'span', styles: {color: '#ff0000'}},
{title: 'Red header', block: 'h1', styles: {color: '#ff0000'}},
{title: 'Example 1', inline: 'span', classes: 'example1'},
{title: 'Example 2', inline: 'span', classes: 'example2'},
{title: 'Table styles'},
{title: 'Table row 1', selector: 'tr', classes: 'tablerow1'}
],

_SPECIFIC:
* tmceadd_form_submit_trigger (b) ==> pwpbCfgAdd_form_submit_trigger
* tmceadd_unload_trigger (b)  ==> pwpbCfgAdd_unload_trigger
* tmcearia_label
* tmceauto_focus
* tmcebody_class (s)
* tmcebr_in_pre (b)
* tmcebrowser_spellcheck  ==> pwpbCfgBrowser_spellcheck,
* tmceflock_formats:
* tmcecaret_debug:
* tmceclass_filter
* tmcecontent_css:
* tmcecontent_document
* tmcecontent_editable:
* tmcecontent_element:
* tmcecontent_style
* tmcecontent_window
* tmceconvert_fonts_to_spans (b) ==> pwpbCfgConvert_fonts_to_spans
* tmceconvert_urls (b)    ==> pwpbCfgUrlsConvert
* tmcedelta_height: 0,    ==> pwpnCfgHeightDelta
* tmcedelta_width: 0,    ==> pwpnCfgWidthDelta
* tmcedisable_nodechange:
* tmcedirectionality
* tmcedoctype,      ==> pwpsCfgDoctype
* tmcedocument_base_url,  ==> pwpsCfgUrlDocumentbase,
* tmceencoding
* tmceend_container_on_empty_block,
* tmceentity_encoding: 'named',  ==> pwpsCfgEntity_encoding
* tmceexternal_plugins
* tmcefile_browser_callback  ==> pwpfCfgFilebrowser
* tmcefont_formats:
* tmcefont_size_classes,
* tmcefont_size_legacy_values  ==> pwpsCfgFontSizesLegacy
* tmcefont_size_style_values  ==> pwpsCfgFontSizes
* tmcefontsize_formats    ==> pwpsCfgFontSizesPoints
* tmceforce_hex_style_colors
* tmceforce_p_newlines
* tmceformats,
* tmcegecko_spellcheck
* tmceheight (n)
* tmcehidden_input (b)    ==> pwpbCfgHidden_input
* tmceid: id,
* tmceindent: 'simple',
* tmceindent_after (s)
* tmceindent_before (s)
* tmceindentation: '30px',  ==> pwpsCfgIndentation
* tmceinit_instance_callback  ==> pwpfCfgInitial_callback
* tmceinline: //then cannot be fullpage.
* tmceinline_styles (b) ==> bInline_styles
* tmcekeep_styles (b),
* tmcelanguage (s),
* tmcelanguage_url
* tmcemax_height
* tmcemax_width
* tmcemenu
* tmcemenubar
* tmcemin_height (n)
* tmcemin_width
* tmcenowrap
* tmceobject_resizing (b)    ==> pwpbCfgObject_resizing
* tmcepadd_empty_editor (b)  ==> pwpbCfgPadd_empty_editor
* tmceplugins (s)    ==> pwpsCfgPlugins
* tmcepopup_css,    ==> pwpsCfgCssPopup
* tmcepreview_styles:
* tmceprotect
* tmcereadonly
* tmcerelative_urls (b)    ==> pwpbCfgUrlsConvert_to_relative
* tmceremove_script_host (b)  ==> pwpbCfgRemove_script_host
* tmceremoved_menuitems
* tmcerender_ui (b),    ==> pwpbCfgRender_ui
* tmceresize
* tmceroot_name
* tmcesave_enablewhendirty
* tmcesave_onsavecallback
* tmcescheme,      ==> pwpsCfgScheme,
* tmceselector, ==> pwpsCfgSelector, //what element is becoming editor
* tmceskin
* tmceskin_url
* tmcestatusbar ==> pwpbCfgStatusbar
* tmcestyle_formats:
* tmcesubmit_patch (b)    ==> pwpbCfgSubmit_patch
* tmcetamplates      ==> phaCfgTemplates
* tmcetemplate_cdate_classes  ==>
* tmcetemplate_cdate_format
* tmcetemplate_mdate_classes
* tmcetemplate_mdate_format
* tmcetemplate_popup_height //nonused
* tmcetemplate_popup_width //nonused
* tmcetemplate_replace_values
* tmcetemplate_selected_content_classes
* tmcetheme,      ==> pwpfsCfgTheme,
* tmcetheme_url,    ==> pwpsCfgTheme_url,
* tmcetoolbar      ==> pwpsCfgToolbar
* tmcetoolbar_items_size    ==> pwpnCfgToolitem_size
* tmceurl_converter,    ==> pwpfCfgConvertUrl
* tmceurlconverter_callback
* tmcevalidate (b)
* tmcevisual (b)      ==> pwpbCfgVisual
* tmcevisual_table_class
* tmcewidth (n)
---
* pwpbCfgBrowser_spellcheck
* pwpbIe7_cmptbl,        ==> pwpbCfgIe7_cmptbl
* pwpbCfgInline_styles
---
* pwpoCfgUriDocument:
* pwpoScopeUrlconverter: self,
---
* pwpsForced_root_block: 'p',
===
* auto_focus
* autoresize_max_height AutoResize plugin
* autoresize_min_height AutoResize plugin
* block_formats
* body_class
* body_id
* browser_spellcheck
* content_css
* convert_fonts_to_spans
* convert_urls
* custom_elements
* custom_undo_redo_levels
* directionality
* doctype
* document_base_url
* element_format
* entities
* entity_encoding
* extended_valid_elements
* external_plugins
* file_browser_callback#ql:tmce'file_browser_callback#
* fix_list_elements
* fixed_toolbar_container
* font_formats
* fontsize_formats
* force_hex_style_colors
* force_p_newlines
* forced_root_block
* formats
* fullpage_default_doctype Fullpage plugin
* fullpage_default_encoding Fullpage plugin
* fullpage_default_font_family Fullpage plugin
* fullpage_default_font_size Fullpage plugin
* fullpage_default_langcode Fullpage plugin
* fullpage_default_text_color Fullpage plugin
* fullpage_default_title Fullpage plugin
* fullpage_default_xml_pi Fullpage plugin
* fullpage_hide_in_source_view Fullpage plugin
* height
* hidden_input
* image_advtab Image plugin
* image_list Image plugin
* indentation
* inline
* insertdate_dateformat Insertdatetime plugin
* insertdate_formats Insertdatetime plugin
* insertdate_timeformat Insertdatetime plugin
* insertdatetime_element Insertdatetime plugin
* invalid_elements
* keep_styles
* language
* language_url
* link_list Link plugin
* menu
* menubar
* noneditable_editable_class Noneditable plugin
* noneditable_leave_contenteditable Noneditable plugin
* noneditable_noneditable_class Noneditable plugin
* nowrap
* object_resizing
* pagebreak_separator Pagebreak plugin
* paste_as_text Paste plugin
* paste_data_images Paste plugin
* plugins
* preview_styles
* protect
* rel_list Link plugin
* relative_urls
* remove_script_host
* resize
* save_enablewhendirty Save plugin
* save_oncancelcallback Save plugin
* save_onsavecallback Save plugin
* schema#linkL#
* selector
* skin
* spellchecker_wordchar_pattern Spellchecker plugin
* statusbar
* style_formats
* tabfocus_elements Tabfocus plugin
* table_clone_elements Table plugin
* target_list Link plugin
* template_cdate_classes Template plugin
* template_cdate_format Template plugin
* template_mdate_classes Template plugin
* template_mdate_format Template plugin
* template_popup_height Template plugin
* template_popup_width Template plugin
* template_replace_values Template plugin
* template_selected_content_classes Template plugin
* templates Template plugin
* theme#ql:tmce'theme#
* toolbar
* toolbar<N>
* valid_children
* valid_elements
* visual
* visualblocks_default_state Visualblocks plugin
* width

tmce'add_unload_trigger: false,

tmce'inline: true,

tmce'schema: "html5",

tmce'selector: "h1.edit",
selector : 'textarea',
selector: "textarea#elm1",

tmce'statusbar: false

tmce'style_formats: [
{title: 'Bold text', inline: 'b'},
{title: 'Red text', inline: 'span', styles: {color: '#ff0000'}},
{title: 'Red header', block: 'h1', styles: {color: '#ff0000'}},
{title: 'Example 1', inline: 'span', classes: 'example1'},
{title: 'Example 2', inline: 'span', classes: 'example2'},
{title: 'Table styles'},
{title: 'Table row 1', selector: 'tr', classes: 'tablerow1'}
],

tmce'option.CORE

name::
* McsEngl.tmce'option.CORE@cptIt,

_SPECIFIC:
 General
* tmce'option.auto_focus
* tmce'option.directionality
* browser_spellcheck
* language
* language_url
* nowrap
* tmce'option.object_resizing
* tmce'option.plugins
* external_plugins
* tmce'option.selector
* tmce'option.skin
* theme
* tmce'option.inline
* tmce'option.hidden_input

 Cleanup/Output
* tmce'option.convert_fonts_to_spans
* tmce'option.custom_elements
* tmce'option.doctype
* element_format
* entities
* entity_encoding
* tmce'option.extended_valid_elements
* tmce'option.fix_list_elements
* tmce'option.font_formats
* tmce'option.fontsize_formats
* tmce'option.force_p_newlines
* tmce'option.force_hex_style_colors
* tmce'option.forced_root_block
* tmce'option.formats
* tmce'option.indentation
* tmce'option.invalid_elements
* tmce'option.keep_styles
* protect
* schema#ql:tmce'option.schema#
* tmce'option.style_formats
* tmce'option.block_formats
* tmce'option.valid_children
* tmce'option.valid_elements

 Content style
* tmce'option.body_id
* tmce'option.body_class
* tmce'option.content_css

 Visual aids
* visual

 Undo/Redo
* tmce'option.custom_undo_redo_levels

 User interface
* tmce'option.toolbar
* tmce'option.toolbar<N>
* tmce'option.menubar
* tmce'option.menu
* statusbar
* tmce'option.resize
* tmce'option.width
* tmce'option.height
* tmce'option.preview_styles
* tmce'option.fixed_toolbar_container

 URL
* tmce'option.convert_urls
* relative_urls
* remove_script_host
* document_base_url

 Callbacks
* file_browser_callback##

tmce'option.PLUGIN

name::
* McsEngl.tmce'option.PLUGIN@cptIt,

_SPECIFIC:

 Link plugin
* tmce'option.link_list
* tmce'option.target_list
* tmce'option.rel_list

 Image plugin
* tmce'option.image_list
* tmce'option.image_advtab

 Fullpage plugin
* tmce'option.fullpage_default_doctype
* tmce'option.fullpage_default_encoding
* tmce'option.fullpage_default_title
* tmce'option.fullpage_default_font_size
* tmce'option.fullpage_default_font_family
* tmce'option.fullpage_default_text_color
* tmce'option.fullpage_default_langcode
* tmce'option.fullpage_default_xml_pi
* tmce'option.fullpage_hide_in_source_view

 Tabfocus plugin
* tmce'option.tabfocus_elements

 Table plugin
* tmce'option.table_clone_elements

 Pagebreak plugin
* pagebreak_separator

 Visualblocks plugin
* tmce'option.visualblocks_default_state

 Paste plugin
* tmce'option.paste_data_images
* tmce'option.paste_as_text

 Template plugin
* tmce'option.templates
* tmce'option.template_cdate_classes
* tmce'option.template_mdate_classes
* tmce'option.template_cdate_format
* tmce'option.template_mdate_format
* tmce'option.template_selected_content_classes
* tmce'option.template_replace_values
* tmce'option.template_popup_width
* tmce'option.template_popup_height

 AutoResize plugin
* tmce'option.autoresize_min_height
* tmce'option.autoresize_max_height

 Save plugin
* tmce'option.save_enablewhendirty
* tmce'option.save_onsavecallback
* tmce'option.save_oncancelcallback

 Noneditable plugin
* tmce'option.noneditable_editable_class
* tmce'option.noneditable_noneditable_class
* tmce'option.noneditable_leave_contenteditable

 Insertdatetime plugin
* tmce'option.insertdate_dateformat
* tmce'option.insertdate_formats
* tmce'option.insertdate_timeformat
* tmce'option.insertdatetime_element

 Spellchecker plugin
* tmce'option.spellchecker_wordchar_pattern

tinymce.setup-function

name::
* McsEngl.tinymce.setup-function@cptIt,
* McsEngl.tmce'resolve@cptIt,

_GENERIC:
typeof tinymce.settings
"object"

_DEFINITION:
setup: function() {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\EditorManager.js +line:90]

tinymce.suffix string

name::
* McsEngl.tinymce.suffix string@cptIt,
* McsEngl.tmce'suffix@cptIt,

_DEFINITION:
* Current suffix to add to each plugin/theme that gets loaded for example ".min".
* @type String
     self.suffix = suffix;
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\EditorManager.js +line:151]

tinymce.toArray-function

name::
* McsEngl.tinymce.toArray-function@cptIt,
* McsEngl.tmce'toArray@cptIt,

_DEFINITION:
tinymce.toArray
function toArray(obj) {
   var array = [], i, l;

   for (i = 0, l = obj.length; i < l; i++) {
     array[i] = obj[i];
   }

   return array;
 } Tools.js:68
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Tools.js +line:68]

tinymce.translate-function

name::
* McsEngl.tinymce.translate-function@cptIt,
* McsEngl.tmce'translate@cptIt,

_DEFINITION:
tinymce.translate
function (text) {
     return I18n.translate(text);
   } EditorManager.js:557
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\EditorManager.js +line:557]

tinymce.triggerSave-function

name::
* McsEngl.tinymce.triggerSave-function@cptIt,
* McsEngl.tmce'triggerSave@cptIt,

_DEFINITION:
* Calls the save method on all editor instances in the collection. This can be useful when a form is to be submitted.
tinymce.triggerSave
function () {
     each(this.editors, function(editor) {
       editor.save();
     });
   } EditorManager.js:533
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\EditorManager.js +line:533]

tinymce.trim-function

name::
* McsEngl.tinymce.trim-function@cptIt,
* McsEngl.tmce'trim@cptIt,

_DEFINITION:
tinymce.trim
function (str) {
   return (str === null || str === undefined) ? '' : ("" + str).replace(whiteSpaceRegExp, '');
 } Tools.js:26
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Tools.js +line:26]

tinymce.ui object NAMESPACE

name::
* McsEngl.tinymce.ui object NAMESPACE@cptIt,
* McsEngl.tinymce.ui@cptIt,
* McsEngl.tmce'namespace.tinymce.ui@cptIt,
* McsEngl.tmce'oUi@cptIt,
* McsEngl.tmce'ui@cptIt,
* McsEngl.tmce'ui-namespace@cptIt,
* McsEngl.tmce'tinymce.ui-namespace@cptIt,
* McsEngl.tmce'tinymce.ui-object@cptIt,
* McsEngl.tmceui@cptIt,

_GENERIC:
typeof tinymce.ui
"object"

_DESCRIPTION:
Contains the different UI types such as buttons, listboxes etc.
[http://www.tinymce.com/wiki.php/api4:namespace.tinymce.ui]

tinymce.ui'PROPERTY:
> Object.getOwnPropertyNames(tinymce.ui).sort()
["AbsoluteLayout", "Button", "ButtonGroup", "Checkbox", "Collection", "ColorButton", "ComboBox", "Container", "Control", "DomUtils", "DragHelper", "ElementPath", "Factory", "FieldSet", "FilePicker", "FitLayout", "FlexLayout", "FloatPanel", "FlowLayout", "Form", "FormItem", "FormatControls", "GridLayout", "Iframe", "KeyboardNavigation", "Label", "Layout", "ListBox", "Menu", "MenuBar", "MenuButton", "MenuItem", "MessageBox", "Movable", "Panel", "PanelButton", "Path", "Radio", "Resizable", "ResizeHandle", "Scrollable", "Selector", "Spacer", "SplitButton", "StackLayout", "TabPanel", "TextBox", "Throbber", "Toolbar", "Tooltip", "Widget", "Window"]
> Object.getOwnPropertyNames((tinymce.ui).__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

tmce'ui.SPECIFIC:
* tmce'ui.Collection#linkL#
* tmce'ui.Control#linkL#
* tmce'ui.Control.Container#linkL#
* tmce'ui.Control.Container.ButtonGroup#linkL#
* tmce'ui.Control.Container.FloatPanel#linkL#
* tmce'ui.Control.Container.FloatPanel.Menu#linkL#
* tmce'ui.Control.Container.FloatPanel.Window#linkL#
* tmce'ui.Control.Container.FloatPanel.Window.MessageBox#linkL#
* tmce'ui.Control.Container.Form#linkL#
* tmce'ui.Control.Container.Form.FieldSet#linkL#
* tmce'ui.Control.Container.FormItem#linkL#
* tmce'ui.Control.Container.Panel#linkL#
* tmce'ui.Control.Container.Panel.TabPanel#linkL#
* tmce'ui.Control.Container.Toolbar#linkL#
* tmce'ui.Control.Container.Toolbar.MenuBar#linkL#
* tmce'ui.Control.Path#ql:tmce'path#
* tmce'ui.Control.Path.ElementPath#linkL#
* tmce'ui.Control.Tooltip#linkL#
* tmce'ui.Control.Widget#linkL#
* tmce'ui.Control.Widget.Button#ql:tmce'button#
* tmce'ui.Control.Widget.Button.MenuButton#linkL#
* tmce'ui.Control.Widget.Button.MenuButton.ListBox#linkL#
* tmce'ui.Control.Widget.Button.MenuButton.SplitButton#linkL#
* tmce'ui.Control.Widget.Button.PanelButton#linkL#
* tmce'ui.Control.Widget.Button.PanelButton.ColorButton#linkL#
* tmce'ui.Control.Widget.Checkbox#linkL#
* tmce'ui.Control.Widget.Checkbox.Radio#linkL#
* tmce'ui.Control.Widget.ComboBox#linkL#
* tmce'ui.Control.Widget.ComboBox.FilePicker#linkL#
* tmce'ui.Control.Widget.Iframe#linkL#
* tmce'ui.Control.Widget.Label#linkL#
* tmce'ui.Control.Widget.MenuItem#linkL#
* tmce'ui.Control.Widget.ResizeHandle#linkL#
* tmce'ui.Control.Widget.Spacer#linkL#
* tmce'ui.Control.Widget.TextBox#linkL#
* tmce'ui.Layout#linkL#
* tmce'ui.Layout.AbsoluteLayout#linkL#
* tmce'ui.Layout.FitLayout#linkL#
* tmce'ui.Layout.FlexLayout#linkL#
* tmce'ui.Layout.FlowLayout#linkL#
* tmce'ui.Layout.GridLayout#linkL#
* tmce'ui.Layout.StackLayout#linkL#

tinymce.ui.Class.Collection-function

name::
* McsEngl.tinymce.ui.Class.Collection-function@cptIt,
* McsEngl.tmce'Collection@cptIt,
* McsEngl.tmce'fCollection@cptIt,
* McsEngl.tinymce.ui.Collection@cptIt,

_DEFINITION:
- Control collection, this class contains control instances and it enables you to perform actions on a
===
Collection = Class#ql:tmce'class#.extend(proto);
[\File1a\PgmSgm\js\tinymce\classes\ui\Collection.js]

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.ui.Collection).sort()
["arguments", "caller", "constructor", "extend", "length", "name", "prototype"]

_INSTANCE:
> Object.getOwnPropertyNames((new tinymce.ui.Collection)).sort()
[]
> Object.getOwnPropertyNames((new tinymce.ui.Collection).__proto__).sort()
["active", "add", "addClass", "after", "append", "before", "checked", "data", "disabled", "each", "eq", "exec", "filter", "fire", "hasClass", "hide", "indexOf", "init", "length", "name", "off", "on", "parent", "prepend", "prop", "reflow", "remove", "removeClass", "reverse", "selected", "set", "show", "slice", "text", "toArray", "value", "visible"]
> Object.getOwnPropertyNames((new tinymce.ui.Collection).__proto__.__proto__)
["constructor"]
> Object.getOwnPropertyNames((new tinymce.ui.Collection).__proto__.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

_CODE:
> var oc=new tinymce.oUi.fCCollection([{p1:1},{p2:2}])
undefined
> oc
fSpec {0: Object, 1: Object, length: 2, init: function, add: function, set: function, filter: function…}
0: Object
1: Object
length: 2
__proto__: oUtil.fClass
> oc[1]
Object {p2: 2}

tinymce.ui.Class.Control-function

name::
* McsEngl.tinymce.ui.Class.Control-function@cptIt,
* McsEngl.tmce'Control@cptIt,
* McsEngl.tmce'fCControl@cptIt,
* McsEngl.tmcefControl@cptIt,
* McsEngl.tinymce.ui.Control@cptIt,

_DEFINITION:
They are the 'items' on toolbar#ql:tmce'toolbar# and menubar.
===
- This is the base class for all controls and containers
===
* This is the base class for all controls and containers. All UI control instances inherit
* from this one as it has the base logic needed by all of them.
var Control = Class#ql:tmce'tinymce.util.class#.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Control.js]

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.ui.Control).sort()
["arguments", "caller", "constructor", "controlIdLookup", "extend", "length", "name", "prototype", "repaintControls", "translate"]

tmceoControl:
* tmceoControl.UeventsRoot, tmceoControl.UoEvents_root,
* tmceoControl.UnativeEvents, tmceoControl.UoEventsNative,
* tmceoControl.Urendered, tmceoControl.UbRendered,
===
> oCControl:
* tmceoControl.Uactive,
* tmceoControl.UbTitle,
* tmceoControl.Ubindings,
* tmceoControl.UborderBox,
* tmceoControl.Uclasses,
* tmceoControl.Udisabled,
* tmceoControl.Uheight,
* tmceoControl.Uid,
* tmceoControl.UmarginBox,
* tmceoControl.Uname,
* tmceoControl.UnativeEvents,
* tmceoControl.UoAria,
* tmceoControl.UpaddingBox,
* tmceoControl.Utext,
* tmceoControl.Uvalue,
* tmceoControl.Uvisible,
* tmceoControl.Uwidth,
* tmceoControl.settings,

> oCControlPrototype:
* tmceoControl.active,
* tmceoControl.addClass,
* tmceoControl.after,
* tmceoControl.aria,
* tmceoControl.bTitle,
* tmceoControl.before,
* tmceoControl.bindPendingEvents,
* tmceoControl.blur,
* tmceoControl.borderBox,
* tmceoControl.classes,
* tmceoControl.disabled,
* tmceoControl.encode,
* tmceoControl.fEventFire,
* tmceoControl.findCommonAncestor,
* tmceoControl.focus,
* tmceoControl.getContainerElm, tmceoControl.fCrlGetEltBody
* tmceoControl.getEl,
* tmceoControl.getParentCtrl,
* tmceoControl.hasClass,
* tmceoControl.height,
* tmceoControl.hide,
* tmceoControl.init,
* tmceoControl.initLayoutRect,
* tmceoControl.innerHtml,
* tmceoControl.layoutRect,
* tmceoControl.marginBox, tmceoControl.fCrlOtBoxMargin,
* tmceoControl.measureBox,
* tmceoControl.name,
* tmceoControl.next,
* tmceoControl.off,
* tmceoControl.on,
* tmceoControl.paddingBox, tmceoControl.fCrlOtBoxPadding,
* tmceoControl.parent,
* tmceoControl.parents,
* tmceoControl.parseBox, tmceoControl.fCrlParseBox,
* tmceoControl.postRender,
* tmceoControl.prev,
* tmceoControl.reflow,
* tmceoControl.remove,
* tmceoControl.removeClass,
* tmceoControl.renderBefore,
* tmceoControl.renderHtml,
* tmceoControl.renderTo,
* tmceoControl.repaint,
* tmceoControl.sPrefixClass,
* tmceoControl.sPropInstance,
* tmceoControl.scrollIntoView,
* tmceoControl.show,
* tmceoControl.text,
* tmceoControl.toggleClass,
* tmceoControl.value,
* tmceoControl.visible,
* tmceoControl.width,
===
> Object.getOwnPropertyNames(new tinymce.ui.Control).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_text", "_title", "_value", "_visible", "_width", "settings"]
> Object.getOwnPropertyNames((new tinymce.ui.Control).__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "hasClass", "height", "hide", "init", "initLayoutRect", "innerHtml", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "value", "visible", "width"]
> Object.getOwnPropertyNames((new tinymce.ui.Control).__proto__.__proto__).sort()
["constructor"]
> Object.getOwnPropertyNames((new tinymce.ui.Control).__proto__.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
===
> Object.getOwnPropertyNames(tinymce.ui.Control.prototype).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "hasClass", "height", "hide", "init", "initLayoutRect", "innerHtml", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "value", "visible", "width"]
===
new tinymce.oUi.fControl
fClass {settings: Object, _id: "mce_83", _name: "", _text: "", _height: 0…}
_active: false
_aria: Object
_bindings: Object
_borderBox: undefined
_classes: Array[0]
_disabled: false
_height: 0
_id: "mce_83"
_marginBox: undefined
_name: ""
_nativeEvents: Object
_paddingBox: undefined
_text: ""
_title: false
_value: false
_visible: true
_width: 0

tmceoControl.UlayoutRect:
self._layoutRect = layoutRect = {
x: settings.x || 0,
y: settings.y || 0,
w: width,
h: height,
deltaW: deltaW,
deltaH: deltaH,
contentW: width - deltaW,
contentH: height - deltaH,
innerW: width - deltaW,
innerH: height - deltaH,
startMinWidth: startMinWidth || 0,
startMinHeight: startMinHeight || 0,
minW: Math.min(minWidth, maxW),
minH: Math.min(minHeight, maxH),
maxW: maxW,
maxH: maxH,
autoResize: autoResize,
scrollW: 0
};

tmce'control.SPECIFIC:
* Container#ql:tmce'container#
* Path#ql:tmce'path#
* Tooltip#ql:tmce'tooltip#
* Widget#ql:tmce'widget#
tmce'Control.Container
tmce'Control.Path
tmce'Control.Tooltip
tmce'Control.Widget

tmce'control-ui (menuitem; toolitem)

name::
* McsEngl.tmce'control-ui (menuitem; toolitem)@cptIt,
* McsEngl.tmce'code.control@cptIt,

_ADDRESS.WPG:
* http://www.tinymce.com/wiki.php/Controls,

_DESCRIPTION:
They are the 'items' on toolbar#ql:tmce'toolbar# and menubar.

_SPECIFIC:
* tmce'control.aligncenter.toolbar (core):
* tmce'control.alignjustify.toolbar (core):
* tmce'control.alignleft.toolbar (core):
* tmce'control.alignright.toolbar (core):
* tmce'control.anchor.mentubar (anchor_plugin):
* tmce'control.anchor.toolbar (anchor_plugin):
* tmce'control.backcolor.toolbar (forecolor_plugin):
* tmce'control.blockquote.toolbar (core):
* tmce'control.bold.menubar (core):
* tmce'control.bold.toolbar (core):
* tmce'control.bullist.toolbar (core):
* tmce'control.cancel.toolbar (save_plugin):
* tmce'control.cell.toolbar (table_plugin):
* tmce'control.charmap.mentubar (charmap_plugin):
* tmce'control.charmap.toolbar (charmap_plugin):
* tmce'control.code.mentubar (code_plugin):
* tmce'control.code.toolbar (code_plugin):
* tmce'control.column.toolbar (table_plugin):
* tmce'control.copy.menubar (core):
* tmce'control.copy.toolbar (core):
* tmce'control.cut.menubar (core):
* tmce'control.cut.toolbar (core):
* tmce'control.deletetable.toolbar (table_plugin):
* tmce'control.emoticons.toolbar (emoticons_plugin):
* tmce'control.fontselect.toolbar (core):
* tmce'control.fontsizeselect.toolbar (core):
* tmce'control.formats.menubar (core):
* tmce'control.formatselect.toolbar (core):
* tmce'control.fullscreen.mentubar (fullscreen_plugin):
* tmce'control.fullscreen.toolbar (fullscreen_plugin):
* hr.mentubar (hr_plugin):
* hr.toolbar (hr_plugin):
* tmce'control.image.mentubar (image_plugin):
* tmce'control.image.toolbar (image_plugin):
* tmce'control.indent.toolbar (core):
* tmce'control.insertdatetime.mentubar (insertdatetime_plugin):
* tmce'control.inserttable.toolbar (table_plugin):
* tmce'control.inserttime.toolbar (insertdatetime_plugin):
* tmce'control.italic.menubar (core):
* tmce'control.italic.toolbar (core):
* tmce'control.link.mentubar (link_plugin):
* tmce'control.link.toolbar (link unlink_plugin):
* tmce'control.ltr.toolbar (directionality_plugin):
* tmce'control.media.mentubar (media_plugin):
* tmce'control.media.toolbar (media_plugin):
* tmce'control.newdocument.menubar (core):
* tmce'control.newdocument.toolbar (core):
* tmce'control.nonbreaking.mentubar (nonbreaking_plugin):
* tmce'control.nonbreaking.toolbar (nonbreaking_plugin):
* tmce'control.numlist.toolbar (core):
* tmce'control.outdent.toolbar (core):
* tmce'control.pagebreak.mentubar (pagebreak_plugin):
* tmce'control.pagebreak.toolbar (pagebreak_plugin):
* tmce'control.paste.mentubar (pastetext_plugin):
* tmce'control.paste.menubar (core):
* tmce'control.paste.toolbar (core):
* tmce'control.preview.mentubar (preview_plugin):
* tmce'control.preview.toolbar (preview_plugin):
* tmce'control.print.mentubar (print_plugin):
* tmce'control.print.toolbar (print_plugin):
* tmce'control.redo.menubar (core):
* tmce'control.redo.toolbar (core):
* tmce'control.removeformat.menubar (core):
* tmce'control.removeformat.toolbar (core):
* tmce'control.row.toolbar (table_plugin):
* tmce'control.rtl.toolbar (directionality_plugin):
* tmce'control.save.toolbar (save_plugin):
* tmce'control.searchreplace.mentubar (searchreplace_plugin):
* tmce'control.searchreplace.toolbar (searchreplace_plugin):
* tmce'control.selectall.menubar (core):
* tmce'control.spellchecker.mentubar (spellchecker_plugin):
* tmce'control.spellchecker.toolbar (spellchecker_plugin):
* tmce'control.strikethrough.menubar (core):
* tmce'control.strikethrough.toolbar (core):
* tmce'control.styleselect.toolbar (core):
* tmce'control.subscript.menubar (core):
* tmce'control.subscript.toolbar (core):
* tmce'control.superscript.menubar (core):
* tmce'control.superscript.toolbar (core):
* tmce'control.table.toolbar (table_plugin):
* tmce'control.tableprops.toolbar (table_plugin):
* tmce'control.template.toolbar (template_plugin):
* tmce'control.textcolor.toolbar (forecolor_plugin):
* tmce'control.underline.menubar (core):
* tmce'control.underline.toolbar (core):
* tmce'control.undo.menubar (core):
* tmce'control.undo.toolbar (core):
* tmce'control.visualaid.menubar (core):
* tmce'control.visualblocks.mentubar (visualblocks_plugin):
* tmce'control.visualblocks.toolbar (visualblocks_plugin):
* tmce'control.visualchars.mentubar (visualchars_plugin):
* tmce'control.visualchars.toolbar (visualchars_plugin):

_SPECIFIC:
Controls
Below is a list of all available toolbar/menu controls that you can add to the editor.

* tmce'control.toolbar.newdocument (core):
* tmce'control.toolbar.bold (core):
* tmce'control.toolbar.italic (core):
* tmce'control.toolbar.underline (core):
* tmce'control.toolbar.strikethrough (core):
* tmce'control.toolbar.alignleft (core):
* tmce'control.toolbar.aligncenter (core):
* tmce'control.toolbar.alignright (core):
* tmce'control.toolbar.alignjustify (core):
* tmce'control.toolbar.styleselect (core):
* tmce'control.toolbar.formatselect (core):
* tmce'control.toolbar.fontselect (core):
* tmce'control.toolbar.fontsizeselect (core):
* tmce'control.toolbar.cut (core):
* tmce'control.toolbar.copy (core):
* tmce'control.toolbar.paste (core):
* tmce'control.toolbar.bullist (core):
* tmce'control.toolbar.numlist (core):
* tmce'control.toolbar.outdent (core):
* tmce'control.toolbar.indent (core):
* tmce'control.toolbar.blockquote (core):
* tmce'control.toolbar.undo (core):
* tmce'control.toolbar.redo (core):
* tmce'control.toolbar.removeformat (core):
* tmce'control.toolbar.subscript (core):
* tmce'control.toolbar.superscript (core):
* tmce'control.toolbar.hr (hr_plugin):
* tmce'control.toolbar.link (link unlink_plugin):
* tmce'control.toolbar.image (image_plugin):
* tmce'control.toolbar.charmap (charmap_plugin):
* tmce'control.toolbar.print (print_plugin):
* tmce'control.toolbar.preview (preview_plugin):
* tmce'control.toolbar.anchor (anchor_plugin):
* tmce'control.toolbar.pagebreak (pagebreak_plugin):
* tmce'control.toolbar.spellchecker (spellchecker_plugin):
* tmce'control.toolbar.searchreplace (searchreplace_plugin):
* tmce'control.toolbar.visualblocks (visualblocks_plugin):
* tmce'control.toolbar.visualchars (visualchars_plugin):
* tmce'control.toolbar.code (code_plugin):
* tmce'control.toolbar.fullscreen (fullscreen_plugin):
* tmce'control.toolbar.inserttime (insertdatetime_plugin):
* tmce'control.toolbar.media (media_plugin):
* tmce'control.toolbar.nonbreaking (nonbreaking_plugin):
* tmce'control.toolbar.cancel (save_plugin):
* tmce'control.toolbar.save (save_plugin):
* tmce'control.toolbar.table (table_plugin):
* tmce'control.toolbar.ltr (directionality_plugin):
* tmce'control.toolbar.rtl (directionality_plugin):
* tmce'control.toolbar.emoticons (emoticons_plugin):
* tmce'control.toolbar.template (template_plugin):
* tmce'control.toolbar.backcolor (forecolor_plugin):
* tmce'control.toolbar.textcolor (forecolor_plugin):

* tmce'control.menubar.newdocument (core):
* tmce'control.menubar.undo (core):
* tmce'control.menubar.redo (core):
* tmce'control.menubar.visualaid (core):
* tmce'control.menubar.cut (core):
* tmce'control.menubar.copy (core):
* tmce'control.menubar.paste (core):
* tmce'control.menubar.selectall (core):
* tmce'control.menubar.bold (core):
* tmce'control.menubar.italic (core):
* tmce'control.menubar.underline (core):
* tmce'control.menubar.strikethrough (core):
* tmce'control.menubar.subscript (core):
* tmce'control.menubar.superscript (core):
* tmce'control.menubar.removeformat (core):
* tmce'control.menubar.formats (core):
* tmce'control.mentubar.link (link_plugin):
* tmce'control.mentubar.image (image_plugin):
* tmce'control.mentubar.charmap (charmap_plugin):
* tmce'control.mentubar.paste (pastetext_plugin):
* tmce'control.mentubar.print (print_plugin):
* tmce'control.mentubar.preview (preview_plugin):
* tmce'control.mentubar.hr (hr_plugin):
* tmce'control.mentubar.anchor (anchor_plugin):
* tmce'control.mentubar.pagebreak (pagebreak_plugin):
* tmce'control.mentubar.spellchecker (spellchecker_plugin):
* tmce'control.mentubar.searchreplace (searchreplace_plugin):
* tmce'control.mentubar.visualblocks (visualblocks_plugin):
* tmce'control.mentubar.visualchars (visualchars_plugin):
* tmce'control.mentubar.code (code_plugin):
* tmce'control.mentubar.fullscreen (fullscreen_plugin):
* tmce'control.mentubar.insertdatetime (insertdatetime_plugin):
* tmce'control.mentubar.media (media_plugin):
* tmce'control.mentubar.nonbreaking (nonbreaking_plugin):
* tmce'control.toolbar.cell (table_plugin):
* tmce'control.toolbar.column (table_plugin):
* tmce'control.toolbar.deletetable (table_plugin):
* tmce'control.toolbar.tableprops (table_plugin):
* tmce'control.toolbar.inserttable (table_plugin):
* tmce'control.toolbar.row (table_plugin):
[http://www.tinymce.com/wiki.php/Controls]

tinymce.ui.Class.Control.Container-function

name::
* McsEngl.tinymce.ui.Class.Control.Container-function@cptIt,
* McsEngl.tmce'Container@cptIt,
* McsEngl.tmce'fCCContainer@cptIt,
* McsEngl.tinymce.ui.Container@cptIt,

_GENERIC:
* Control#ql:tmce'control#

_DEFINITION:
* Container control. This is extended by all controls that can have
* children such as panels etc. You can also use this class directly as an
* generic container instance. The container doesn't have any specific role or style.
*
* @-x-less Container.less
* @class tinymce.ui.Container
* @extends tinymce.ui.Control
return Control#ql:tinymce.ui.control _name.english#.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Container.js]

* tmceoContainer:
* tmceoCCContainer:
Object.getOwnPropertyNames((new tinymce.oUi.fCCContainer)).sort()
* tmceoContainer.Uactive,
* tmceoContainer.UbTitle,
* tmceoContainer.Ubindings,
* tmceoContainer.UborderBox,
* tmceoContainer.Uclasses,
* tmceoContainer.Udisabled,
* tmceoContainer.Ufixed,
* tmceoContainer.UhasBody,
* tmceoContainer.Uheight,
* tmceoContainer.Uid,
* tmceoContainer.Uitems,
* tmceoContainer.Ulayout,
* tmceoContainer.UmarginBox,
* tmceoContainer.Uname,
* tmceoContainer.UnativeEvents,
* tmceoContainer.UoAria,
* tmceoContainer.UoProto,
* tmceoContainer.UpaddingBox,
* tmceoContainer.Utext,
* tmceoContainer.Uvalue,
* tmceoContainer.Uvisible,
* tmceoContainer.Uwidth,
* tmceoContainer.settings,
Object.getOwnPropertyNames((new tinymce.oUi.fCCContainer).__proto__).sort()
* tmceoContainer.add,
* tmceoContainer.append,
* tmceoContainer.create,
* tmceoContainer.find,
* tmceoContainer.focus,
* tmceoContainer.fromJSON,
* tmceoContainer.init,
* tmceoContainer.initLayoutRect,
* tmceoContainer.innerClass,
* tmceoContainer.insert,
* tmceoContainer.items,
* tmceoContainer.layout,
* tmceoContainer.postRender,
* tmceoContainer.preRender,
* tmceoContainer.prepend,
* tmceoContainer.recalc,
* tmceoContainer.reflow,
* tmceoContainer.renderHtml,
* tmceoContainer.renderNew,
* tmceoContainer.replace,
* tmceoContainer.toJSON,
===
> Object.getOwnPropertyNames((new tinymce.ui.Container)).sort()
["_active", "_aria", "_borderBox", "_classes", "_disabled", "_eventDispatcher", "_fixed", "_hasBody", "_height", "_id", "_items", "_layout", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.Container).__proto__).sort()
["add", "append", "create", "find", "focus", "fromJSON", "init", "initLayoutRect", "innerClass", "insert", "items", "layout", "postRender", "preRender", "prepend", "recalc", "reflow", "renderHtml", "renderNew", "replace", "toJSON"]
Object.getOwnPropertyNames((new tinymce.ui.Container).__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "getRoot", "hasClass", "hasEventListeners", "height", "hide", "init", "initLayoutRect", "innerHtml", "isRtl", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parentsAndSelf", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "translate", "value", "visible", "width"]

_HTML_ELEMENT:
<div id="mce_124-body" class="cls-container-body cls-abs-layout" style="width: 382px; height: 30px;">
 <label id="mce_125" class="cls-widget cls-label cls-first cls-abs-layout-item" for="mce_115" style="line-height: 16px; left: 0px; top: 7px; width: 101px; height: 16px;">Title</label>
 <input id="mce_115" class="cls-textbox cls-last cls-abs-layout-item" value="" hidefocus="true" size="40" style="left: 101px; top: 0px; width: 271px; height: 28px;">
</div>

tmce'container.SPECIFIC:
* ButtonGroup#ql:tmce'buttongroup#
* FloatPanel#ql:tmce'floatpanel#
* Form#ql:tmce'form#
* FormItem#ql:tmce'formitem#
* Panel#ql:tmce'panel#
* Toolbar#ql:tmce'toolbar#
tmce'Container.ButtonGroup
tmce'Container.FloatPanel
tmce'Container.Form
tmce'Container.FormItem
tmce'Container.Panel
tmce'Container.Toolbar

tinymce.ui.Class.Control.Container.ButtonGroup-function

name::
* McsEngl.tinymce.ui.Class.Control.Container.ButtonGroup-function@cptIt,
* McsEngl.tmce'ButtonGroup@cptIt,
* McsEngl.tmce'fCCCButtongroup@cptIt,
* McsEngl.tinymce.ui.ButtonGroup@cptIt,

_DEFINITION:
- This control enables you to put multiple buttons into a group
return Container.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\ButtonGroup.js]

_INSTANCE:
bject.getOwnPropertyNames((new tinymce.ui.ButtonGroup)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_fixed", "_hasBody", "_height", "_id", "_items", "_layout", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.ButtonGroup).__proto__).sort()
["Defaults", "renderHtml"]
Object.getOwnPropertyNames((new tinymce.ui.ButtonGroup).__proto__.__proto__).sort()
["add", "append", "create", "find", "focus", "fromJSON", "init", "initLayoutRect", "innerClass", "insert", "items", "layout", "postRender", "preRender", "prepend", "recalc", "reflow", "renderHtml", "renderNew", "replace", "toJSON"]
Object.getOwnPropertyNames((new tinymce.ui.ButtonGroup).__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "hasClass", "height", "hide", "init", "initLayoutRect", "innerHtml", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "value", "visible", "width"]

_HTML_ELEMENT:
<div id="mce_76" class="cls-container cls-first cls-flow-layout-item cls-btngroup" role="toolbar">
<div id="mce_76-body">

<div id="mce_45" class="cls-widget cls-btn cls-first" tabindex="-1" role="button" aria-disabled="false">
<button role="presentation" type="button" tabindex="-1">
<i class="cls-ico cls-i-save"></i> Save</button>
</div>

<div id="mce_46" class="cls-widget cls-btn cls-disabled" tabindex="-1" role="button" aria-labeledby="mce_46" aria-label="Undo" aria-disabled="true"><button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-undo"></i></button></div>

<div id="mce_47" class="cls-widget cls-btn cls-last cls-disabled" tabindex="-1" role="button" aria-labeledby="mce_47" aria-label="Redo" aria-disabled="true"><button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-redo"></i></button></div></div></div>

tinymce.ui.Class.Control.Container.Form

name::
* McsEngl.tinymce.ui.Class.Control.Container.Form@cptIt,
* McsEngl.tmce'fCCCForm@cptIt,
* McsEngl.tmce'Form@cptIt,
* McsEngl.tinymce.ui.Form@cptIt,

_DEFINITION:
- This class creates a form container
return Container#ql:tmce'container#.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Form.js]

_INSTANCE:
> Object.getOwnPropertyNames((new tinymce.ui.Form))
["_super", "settings", "_id", "_name", "_text", "_height", "_width", "_aria", "_classes", "_visible", "_title", "_disabled", "_active", "_value", "_bindings", "_nativeEvents", "_borderBox", "_paddingBox", "_marginBox", "_fixed", "_items", "_layout", "_hasBody"]
Object.getOwnPropertyNames((new tinymce.ui.Form).__proto__)
["Defaults", "preRender", "recalcLabels", "visible", "submit", "postRender"]

Object.getOwnPropertyNames((new tinymce.ui.Form).__proto__.__proto__)
["layout", "innerClass", "init", "items", "find", "add", "focus", "replace", "create", "renderNew", "append", "prepend", "insert", "fromJSON", "toJSON", "preRender", "renderHtml", "postRender", "initLayoutRect", "recalc", "reflow"]
Object.getOwnPropertyNames((new tinymce.ui.Form).__proto__.__proto__.__proto__)
["Statics", "classPrefix", "init", "Properties", "Methods", "getContainerElm", "getParentCtrl", "parseBox", "borderBox", "paddingBox", "marginBox", "measureBox", "initLayoutRect", "layoutRect", "repaint", "on", "off", "fire", "parents", "next", "prev", "findCommonAncestor", "hasClass", "addClass", "removeClass", "toggleClass", "classes", "innerHtml", "getEl", "visible", "show", "hide", "focus", "blur", "aria", "encode", "before", "after", "remove", "renderBefore", "renderTo", "postRender", "scrollIntoView", "bindPendingEvents", "reflow", "renderHtml", "parent", "title", "text", "width", "height", "disabled", "active", "name", "value"]

tinymce.ui.Class.Control.Container.Form.FieldSet

name::
* McsEngl.tinymce.ui.Class.Control.Container.Form.FieldSet@cptIt,
* McsEngl.tmce'fCCCFormFieldset@cptIt,
* McsEngl.tmce'FieldSet@cptIt,
* McsEngl.tinymce.ui.FieldSet@cptIt,

_DEFINITION:
- This class creates fieldset containers
return Form#ql:tmce'form#.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\FieldSet.js]

_INSTANCE:
> Object.getOwnPropertyNames((new tinymce.ui.FieldSet)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_fixed", "_hasBody", "_height", "_id", "_items", "_layout", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.FieldSet).__proto__).sort()
["Defaults", "renderHtml"]
Object.getOwnPropertyNames((new tinymce.ui.FieldSet).__proto__.__proto__).sort()
["Defaults", "postRender", "preRender", "recalcLabels", "submit", "visible"]
Object.getOwnPropertyNames((new tinymce.ui.FieldSet).__proto__.__proto__.__proto__).sort()
["add", "append", "create", "find", "focus", "fromJSON", "init", "initLayoutRect", "innerClass", "insert", "items", "layout", "postRender", "preRender", "prepend", "recalc", "reflow", "renderHtml", "renderNew", "replace", "toJSON"]
Object.getOwnPropertyNames((new tinymce.ui.FieldSet).__proto__.__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "hasClass", "height", "hide", "init", "initLayoutRect", "innerHtml", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "value", "visible", "width"]

tinymce.ui.Class.Control.Container.FormItem

name::
* McsEngl.tinymce.ui.Class.Control.Container.FormItem@cptIt,
* McsEngl.tmce'fCCCFormitem@cptIt,
* McsEngl.tmce'FormItem@cptIt,
* McsEngl.tinymce.ui.FormItem@cptIt,

_DEFINITION:
- This class is a container created by the form element with a label and control item

_INSTANCE:
Object.getOwnPropertyNames((new tinymce.ui.FormItem)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_fixed", "_hasBody", "_height", "_id", "_items", "_layout", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.FormItem).__proto__).sort()
["Defaults", "renderHtml"]
> CONTAINER: Object.getOwnPropertyNames((new tinymce.ui.FormItem).__proto__.__proto__).sort()
["add", "append", "create", "find", "focus", "fromJSON", "init", "initLayoutRect", "innerClass", "insert", "items", "layout", "postRender", "preRender", "prepend", "recalc", "reflow", "renderHtml", "renderNew", "replace", "toJSON"]
Object.getOwnPropertyNames((new tinymce.ui.FormItem).__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "hasClass", "height", "hide", "init", "initLayoutRect", "innerHtml", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "value", "visible", "width"]

tinymce.ui.Class.Control.Container.Panel-function

name::
* McsEngl.tinymce.ui.Class.Control.Container.Panel-function@cptIt,
* McsEngl.tmce'Panel@cptIt,
* McsEngl.tinymce.ui.Panel@cptIt,

_GENERIC:
> typeof tinymce.ui.Panel
"function"

_DEFINITION:
- Creates a new panel
===
* @-x-less Panel.less
* @class tinymce.ui.Panel
* @extends tinymce.ui.Container
* @mixes tinymce.ui.Scrollable
return Container#ql:tinymce.ui.container _name.english#.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Panel.js]

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.ui.Panel).sort()
["arguments", "caller", "constructor", "extend", "length", "name", "prototype"]
> typeof tinymce.ui.Panel.prototype
"object"
> tinymce.ui.Panel.prototype
Class {Defaults: Object, Mixins: Array[1], renderHtml: function, renderScroll: function, layout: ""…}
> Object.getOwnPropertyNames(tinymce.ui.Panel.prototype).sort()
["Defaults", "Mixins", "renderHtml", "renderScroll"]

tmceoCCCPanel:
> Object.getOwnPropertyNames((new tinymce.ui.Panel)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_fixed", "_hasBody", "_height", "_id", "_items", "_layout", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.Panel).__proto__).sort()
["Defaults", "Mixins", "renderHtml", "renderScroll"]
Object.getOwnPropertyNames((new tinymce.ui.Panel).__proto__.__proto__).sort()
["add", "append", "create", "find", "focus", "fromJSON", "init", "initLayoutRect", "innerClass", "insert", "items", "layout", "postRender", "preRender", "prepend", "recalc", "reflow", "renderHtml", "renderNew", "replace", "toJSON"]
Object.getOwnPropertyNames((new tinymce.ui.Panel).__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "hasClass", "height", "hide", "init", "initLayoutRect", "innerHtml", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "value", "visible", "width"]

tmceoCCCPanel.settings:
(new tinymce.oUi.fCCCPanel).settings
Object {layout: "fclabsolutefit", sClsContainer: "panel"}

tinymce.ui.Class.Control.Container.Panel.FloatPanel-function

name::
* McsEngl.tinymce.ui.Class.Control.Container.Panel.FloatPanel-function@cptIt,
* McsEngl.tmce'FloatPanel@cptIt,
* McsEngl.tinymce.ui.FloatPanel@cptIt,

_GENERIC:
* container#ql:tmce'container#
===
typeof tinymce.ui.FloatPanel
"function"

_DEFINITION:
- This class creates a floating panel
===
* @-x-less FloatPanel.less
* @class tinymce.ui.FloatPanel
* @extends tinymce.ui.Panel
* @mixes tinymce.ui.Movable
* @mixes tinymce.ui.Resizable
 var FloatPanel = Panel#ql:tinymce.ui.panel _name.english#.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\FloatPanel.js]

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.ui.FloatPanel).sort()
["arguments", "caller", "constructor", "extend", "hideAll", "length", "name", "prototype"]
===
_PROTOTYPE:
> typeof tinymce.ui.FloatPanel.prototype
"object"
> tinymce.ui.FloatPanel.prototype
Class {Mixins: Array[3], init: function, fixed: function, show: function, hide: function…}
> Object.getOwnPropertyNames(tinymce.ui.FloatPanel.prototype).sort()
["Mixins", "close", "fixed", "hide", "hideAll", "init", "moveBy", "moveRel", "moveTo", "remove", "resizeBy", "resizeTo", "resizeToContent", "show", "testMoveRel"]

tmce'FloatPanel.SPECIFIC:
tmce'FloatPanel.Menu
tmce'FloatPanel.Window

_INSTANCE:
> Object.getOwnPropertyNames((new tinymce.ui.FloatPanel)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_eventsRoot", "_fixed", "_hasBody", "_height", "_id", "_items", "_layout", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "settings"]
> Object.getOwnPropertyNames((new tinymce.ui.FloatPanel).__proto__).sort()
["Mixins", "close", "fixed", "hide", "hideAll", "init", "moveBy", "moveRel", "moveTo", "remove", "resizeBy", "resizeTo", "resizeToContent", "show", "testMoveRel"]
> PANEL: Object.getOwnPropertyNames((new tinymce.ui.FloatPanel).__proto__.__proto__).sort()
["Defaults", "Mixins", "renderHtml", "renderScroll"]
> CONTAINER: Object.getOwnPropertyNames((new tinymce.ui.FloatPanel).__proto__.__proto__.__proto__).sort()
["add", "append", "create", "find", "focus", "fromJSON", "init", "initLayoutRect", "innerClass", "insert", "items", "layout", "postRender", "preRender", "prepend", "recalc", "reflow", "renderHtml", "renderNew", "replace", "toJSON"]
> CONTROL: Object.getOwnPropertyNames((new tinymce.ui.FloatPanel).__proto__.__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "hasClass", "height", "hide", "init", "initLayoutRect", "innerHtml", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "value", "visible", "width"]

tmceoCCCPanelFloat.settings:
(new tinymce.oUi.fCCCPanelFloat).settings
Object {layout: "fclabsolutefit", sClsContainer: "panel"}

tinymce.ui.Class.Control.Container.Panel.FloatPanel.Menu-function

name::
* McsEngl.tinymce.ui.Class.Control.Container.Panel.FloatPanel.Menu-function@cptIt,
* McsEngl.tmce'fCCCPanelFloatMenu@cptIt,
* McsEngl.tmce'Menu@cptIt,
* McsEngl.tinymce.ui.Menu@cptIt,

_GENERIC:
> typeof tinymce.ui.Menu
"function"

_DEFINITION:
- Creates a new menu
===
var Menu = FloatPanel#ql:tinymce.ui.floatpanel#.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Menu.js]
===
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Class.js +line:33]

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.ui.Menu)
["length", "name", "arguments", "caller", "prototype", "constructor", "extend"]
_PROTOTYPE:
> tinymce.ui.Menu.prototype
Class {Defaults: Object, init: function, repaint: function, cancel: function, hideAll: function…}
> Object.getOwnPropertyNames(tinymce.ui.Menu.prototype)
["Defaults", "init", "repaint", "cancel", "hideAll", "preRender"]

_INSTANCE:
> Object.getOwnPropertyNames((new tinymce.ui.Menu)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_eventsRoot", "_fixed", "_hasBody", "_height", "_id", "_items", "_layout", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "keyNav", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.Menu).__proto__).sort()
["Defaults", "cancel", "hideAll", "init", "preRender", "repaint"]
Object.getOwnPropertyNames((new tinymce.ui.Menu).__proto__.__proto__).sort()
["Mixins", "close", "fixed", "hide", "hideAll", "init", "moveBy", "moveRel", "moveTo", "remove", "resizeBy", "resizeTo", "resizeToContent", "show", "testMoveRel"]
Object.getOwnPropertyNames((new tinymce.ui.Menu).__proto__.__proto__.__proto__).sort()
["Defaults", "Mixins", "renderHtml", "renderScroll"]
Object.getOwnPropertyNames((new tinymce.ui.Menu).__proto__.__proto__.__proto__.__proto__).sort()
["add", "append", "create", "find", "focus", "fromJSON", "init", "initLayoutRect", "innerClass", "insert", "items", "layout", "postRender", "preRender", "prepend", "recalc", "reflow", "renderHtml", "renderNew", "replace", "toJSON"]
Object.getOwnPropertyNames((new tinymce.ui.Menu).__proto__.__proto__.__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "hasClass", "height", "hide", "init", "initLayoutRect", "innerHtml", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "value", "visible", "width"]

tmceoCCCPanelFloat.settings:
(new tinymce.oUi.fCCCPanelFloat).settings
Object {layout: "fclabsolutefit", sClsContainer: "panel"}
===
autohide: true
border: 1
constrainToViewport: true
defaultType: "fccwmenuitem"
layout: "fclstack"
role: "menu"
sClsContainer: "panel"

tinymce.ui.Class.Control.Container.Panel.FloatPanel.Window

name::
* McsEngl.tinymce.ui.Class.Control.Container.Panel.FloatPanel.Window@cptIt,
* McsEngl.tmce'fCCCPanelFloatWindow@cptIt,
* McsEngl.tmce'Window@cptIt,
* McsEngl.tinymce.ui.Window@cptIt,

_DEFINITION:
- This class is used to create MessageBoxes like alerts/confirms etc
- Creates a new window
var Window = FloatPanel#ql:tmce'floatpanel#.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Window.js]

_INSTANCE:
> Object.getOwnPropertyNames((new tinymce.ui.Window)).sort()
TypeError: Cannot read property 'autohide' of undefined //4.0.7
===
Object.getOwnPropertyNames((new tinymce.ui.Window)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_eventsRoot", "_fixed", "_fullscreen", "_hasBody", "_height", "_id", "_items", "_layout", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.Window).__proto__).sort()
["Defaults", "fullscreen", "init", "initLayoutRect", "modal", "postRender", "recalc", "remove", "renderHtml", "submit"]
Object.getOwnPropertyNames((new tinymce.ui.Window).__proto__.__proto__).sort()
["Mixins", "close", "fixed", "hide", "hideAll", "init", "moveBy", "moveRel", "moveTo", "remove", "resizeBy", "resizeTo", "resizeToContent", "show", "testMoveRel"]
Object.getOwnPropertyNames((new tinymce.ui.Window).__proto__.__proto__.__proto__).sort()
["Defaults", "Mixins", "renderHtml", "renderScroll"]
Object.getOwnPropertyNames((new tinymce.ui.Window).__proto__.__proto__.__proto__.__proto__).sort()
["add", "append", "create", "find", "focus", "fromJSON", "init", "initLayoutRect", "innerClass", "insert", "items", "layout", "postRender", "preRender", "prepend", "recalc", "reflow", "renderHtml", "renderNew", "replace", "toJSON"]
Object.getOwnPropertyNames((new tinymce.ui.Window).__proto__.__proto__.__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "hasClass", "height", "hide", "init", "initLayoutRect", "innerHtml", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "value", "visible", "width"]


border: 1
callbacks: Object
layout: "fclflex"
role: "dialog"
sClsContainer: "panel"

tmce'window'html:
//charmap
<div id="mce_114" class="cls-container cls-panel cls-floatpanel cls-window cls-in" hidefocus="1" tabindex="-1" role="dialog" aria-labeledby="mce_114" aria-label="Special character" style="border-width: 1px; z-index: 65536; left: 353px; top: 3.5px; width: 572px; height: 411px;">

<div id="mce_114-head" class="cls-window-head">
<div class="cls-title">Special character</div>
<button type="button" class="cls-close" aria-hidden="true">Χ</button>
<div id="mce_114-dragh" class="cls-dragh"></div>
</div>

<div id="mce_114-body" class="cls-container-body cls-abs-layout" style="width: 572px; height: 321px;">
<div id="mce_115" class="cls-container cls-first cls-abs-layout-item" role="undefined" style="left: 10px; top: 10px; width: 442px; height: 301px;"><div id="mce_115-body" class="cls-container-body cls-undefined" style="width: 442px; height: 301px;">
<table role="presentation" cellspacing="0" class="clsCharmap"><tbody>
<tr>
<td title="ampersand 38"><div id="id1" tabindex="-1">&</div></td>
<td title="quotation mark 34"><div id="id2" tabindex="-1">"</div></td>
...
</tbody></table></div></div>
<label id="mce_116" class="cls-widget cls-label cls-last cls-abs-layout-item" style="font-size: 44px; text-align: center; line-height: 80px; left: 462px; top: 10px; width: 100px; height: 80px;">Ή</label></div>
<div id="mce_117" class="cls-container cls-panel cls-foot" hidefocus="1" tabindex="-1" style="border-width: 1px 0px 0px; left: 0px; top: 0px; width: 572px; height: 50px;">
<div id="mce_117-body" class="cls-container-body cls-abs-layout" style="width: 572px; height: 50px;">
<div id="mce_118" class="cls-widget cls-btn cls-first cls-last cls-abs-layout-item" tabindex="-1" role="button" style="left: 504px; top: 10px; width: 56px; height: 28px;">
<button role="presentation" type="button" tabindex="-1" style="height: 100%; width: 100%;">Close</button></div></div></div></div>

tinymce.ui.Class.Control.Container.Panel.FloatPanel.Window.MessageBox

name::
* McsEngl.tinymce.ui.Class.Control.Container.Panel.FloatPanel.Window.MessageBox@cptIt,
* McsEngl.tmce'MessageBox@cptIt,

_DEFINITION:
 var MessageBox = Window#ql:tmce'window#.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\MessageBox.js]

_INSTANCE:
> Object.getOwnPropertyNames((new tinymce.ui.MessageBox)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_eventsRoot", "_fixed", "_fullscreen", "_hasBody", "_height", "_id", "_items", "_layout", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "settings", "statusbar"]
Object.getOwnPropertyNames((new tinymce.ui.MessageBox).__proto__).sort()
["Statics", "init"]
Object.getOwnPropertyNames((new tinymce.ui.MessageBox).__proto__.__proto__).sort()
["Defaults", "fullscreen", "init", "initLayoutRect", "modal", "postRender", "recalc", "remove", "renderHtml", "submit"]
Object.getOwnPropertyNames((new tinymce.ui.MessageBox).__proto__.__proto__.__proto__).sort()
["Mixins", "close", "fixed", "hide", "hideAll", "init", "moveBy", "moveRel", "moveTo", "remove", "resizeBy", "resizeTo", "resizeToContent", "show", "testMoveRel"]
Object.getOwnPropertyNames((new tinymce.ui.MessageBox).__proto__.__proto__.__proto__.__proto__).sort()
["Defaults", "Mixins", "renderHtml", "renderScroll"]
Object.getOwnPropertyNames((new tinymce.ui.MessageBox).__proto__.__proto__.__proto__.__proto__.__proto__).sort()
["add", "append", "create", "find", "focus", "fromJSON", "init", "initLayoutRect", "innerClass", "insert", "items", "layout", "postRender", "preRender", "prepend", "recalc", "reflow", "renderHtml", "renderNew", "replace", "toJSON"]
Object.getOwnPropertyNames((new tinymce.ui.MessageBox).__proto__.__proto__.__proto__.__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "hasClass", "height", "hide", "init", "initLayoutRect", "innerHtml", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "value", "visible", "width"]

tmce.oCCCPanelFloatWindowMessage:
align: "center"
autoScroll: true
border: 1
buttons: Object
callbacks: Object
items: Object
layout: "fclflex"
pack: "center"
padding: 20
role: "dialog"
sClsContainer: "panel"

tinymce.ui.Class.Control.Container.Panel.TabPanel

name::
* McsEngl.tinymce.ui.Class.Control.Container.Panel.TabPanel@cptIt,
* McsEngl.tmce'fCCCPanelTab@cptIt,
* McsEngl.tmce'TabPanel@cptIt,
* McsEngl.tinymce.ui.TabPanel@cptIt,

_DEFINITION:
- Creates a tab panel control
return Panel#ql:tmce'panel#.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\TabPanel.js]

_INSTANCE:
> Object.getOwnPropertyNames((new tinymce.ui.TabPanel)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_fixed", "_hasBody", "_height", "_id", "_items", "_layout", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.TabPanel).__proto__).sort()
["Defaults", "activateTab", "initLayoutRect", "lastIdx", "postRender", "renderHtml"]
Object.getOwnPropertyNames((new tinymce.ui.TabPanel).__proto__.__proto__).sort()
["Defaults", "Mixins", "renderHtml", "renderScroll"]
Object.getOwnPropertyNames((new tinymce.ui.TabPanel).__proto__.__proto__.__proto__).sort()
["add", "append", "create", "find", "focus", "fromJSON", "init", "initLayoutRect", "innerClass", "insert", "items", "layout", "postRender", "preRender", "prepend", "recalc", "reflow", "renderHtml", "renderNew", "replace", "toJSON"]
Object.getOwnPropertyNames((new tinymce.ui.TabPanel).__proto__.__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "hasClass", "height", "hide", "init", "initLayoutRect", "innerHtml", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "value", "visible", "width"]

tinymce.ui.Class.Control.Container.Toolbar-function

name::
* McsEngl.tinymce.ui.Class.Control.Container.Toolbar-function@cptIt,
* McsEngl.tmce'fCCCToolbar@cptIt,
* McsEngl.tmce'Toolbar@cptIt,
* McsEngl.tinymce.ui.Toolbar@cptIt,

_GENERIC:
> typeof tinymce.ui.Toolbar
"function"

_DEFINITION:
- Creates a new toolbar
===
return Container.extend({
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\ui\Toolbar.js]

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.ui.Toolbar).sort()
["arguments", "caller", "constructor", "extend", "length", "name", "prototype"]

_INSTANCE:
> Object.getOwnPropertyNames(new tinymce.ui.Toolbar).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_fixed", "_hasBody", "_height", "_id", "_items", "_layout", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "settings"]
> Object.getOwnPropertyNames((new tinymce.ui.Toolbar).__proto__).sort()
["Defaults", "init", "postRender"]

tmceoCCCToolbar.settings:
(new tinymce.oUi.fCCCToolbar).settings
Object {role: "toolbar", layout: "fclflow"}

tmce'toolbar-ui

name::
* McsEngl.tmce'toolbar-ui@cptIt,

_DESCRIPTION:
It is the bar the has buttons on it for quick access.

tmce'option.toolbar:
toolbar: "undo redo",
toolbar: "undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image | print preview media",
===
For multiple toolbars.

See the toolbar config options for details.

toolbar1: "undo redo | styleselect | bold italic",
toolbar2: "link image"
[http://www.tinymce.com/wiki.php/Configuration:toolbar%3CN%3E]

tmce'toolbar'add-button

name::
* McsEngl.tmce'toolbar'add-button@cptIt,

_PROCESS:
1) file.plugin.js: addButton
2) file.editor.html:
- plugins: "pluginname"
- toolbar2: "pluginname"

_CODE.TMCE:
==> file.plugin.js:
* tmce'add_button:
 editor.addCommand('mceFullPageProperties', showDialog);

 editor.addButton('pluginname', {
   title: 'Document properties',
   cmd : 'mceFullPageProperties'
 });
===
editor.addButton('code', {
   icon: 'code',
   tooltip: 'Source code',
   onclick: showSourceEditor
 });
===
editor.addButton('emoticons', {
   type: 'panelbutton',
   popoverAlign: 'bc-tl',
   panel: {
     autohide: true,
     html: getHtml,
     onclick: function(e) {
       var linkElm = editor.dom.getParent(e.target, 'a');

       if (linkElm) {
         editor.insertContent('<img src="' + linkElm.getAttribute('data-mce-url') + '" />');
         this.hide();
       }
     }
   },
   tooltip: 'Emoticons'
 });

tinymce.ui.Class.Control.Container.Toolbar.MenuBar-function

name::
* McsEngl.tinymce.ui.Class.Control.Container.Toolbar.MenuBar-function@cptIt,
* McsEngl.tmce'MenuBar@cptIt,
* McsEngl.tinymce.ui.MenuBar@cptIt,

_GENERIC:
> typeof tinymce.ui.MenuBar
"function"

_DEFINITION:
- Creates a new menubar
===
return Toolbar#ql:tmce'toolbar#.extend({
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\ui\MenuBar.js]

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.ui.MenuBar)
["length", "name", "arguments", "caller", "prototype", "constructor", "extend"]

_INSTANCE:
> Object.getOwnPropertyNames((new tinymce.ui.MenuBar)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_fixed", "_hasBody", "_height", "_id", "_items", "_layout", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.MenuBar).__proto__).sort()
["Defaults"]
> TOOLBAR: Object.getOwnPropertyNames((new tinymce.ui.MenuBar).__proto__.__proto__).sort()
["Defaults", "init", "postRender"]
> CONTAINER: Object.getOwnPropertyNames((new tinymce.ui.MenuBar).__proto__.__proto__.__proto__).sort()
["add", "append", "create", "find", "focus", "fromJSON", "init", "initLayoutRect", "innerClass", "insert", "items", "layout", "postRender", "preRender", "prepend", "recalc", "reflow", "renderHtml", "renderNew", "replace", "toJSON"]
> CONTROL: Object.getOwnPropertyNames((new tinymce.ui.MenuBar).__proto__.__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "hasClass", "height", "hide", "init", "initLayoutRect", "innerHtml", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "value", "visible", "width"]

tmceoCCCToolbar.settings:
(new tinymce.oUi.fCCCToolbar).settings
Object {role: "toolbar", layout: "fclflow"}
defaults: Object
layout: "fclflow"
role: "menubar"
sClsContainer: "menubar"

tinymce.ui.Class.Control.Path-function

name::
* McsEngl.tinymce.ui.Class.Control.Path-function@cptIt,
* McsEngl.tmce'fCCPath@cptIt,
* McsEngl.tmce'Path@cptIt,
* McsEngl.tinymce.ui.Path@cptIt,

_GENERIC:
* Control#ql:tmce'control#

_DEFINITION:
- Creates a new path control
return Control.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Path.js]

tmceoCCPath:
> Object.getOwnPropertyNames((new tinymce.ui.Path)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "canFocus", "settings"]
> Object.getOwnPropertyNames((new tinymce.ui.Path).__proto__).sort()
["Defaults", "_getPathHtml", "data", "focus", "init", "postRender", "renderHtml", "update"]
> Object.getOwnPropertyNames((new tinymce.ui.Path).__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "hasClass", "height", "hide", "init", "initLayoutRect", "innerHtml", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "value", "visible", "width"]

_HTML_ELEMENT:
//table » tbody » tr » td
<div role="button" class="cls-path-item" data-index="0" tabindex="-1" id="mce_88-0">table</div>
<div class="cls-divider" aria-hidden="true"> » </div>
<div role="button" class="cls-path-item" data-index="1" tabindex="-1" id="mce_88-1">tbody</div>
<div class="cls-divider" aria-hidden="true"> » </div>
<div role="button" class="cls-path-item" data-index="2" tabindex="-1" id="mce_88-2">tr</div>
<div class="cls-divider" aria-hidden="true"> » </div>
<div role="button" class="cls-path-item cls-last" data-index="3" tabindex="-1" id="mce_88-3">td</div>

tinymce.ui.Class.Control.Path.ElementPath

name::
* McsEngl.tinymce.ui.Class.Control.Path.ElementPath@cptIt,
* McsEngl.tmce'ElementPath@cptIt,
* McsEngl.tinymce.ui.ElementPath@cptIt,

_DEFINITION:
- This control creates an path for the current selections parent elements in TinyMCE
return Path#ql:tmce'path#.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\ElementPath.js]

_INSTANCE:
> Object.getOwnPropertyNames((new tinymce.ui.ElementPath)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "canFocus", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.ElementPath).__proto__).sort()
["postRender"]
Object.getOwnPropertyNames((new tinymce.ui.ElementPath).__proto__.__proto__).sort()
["Defaults", "_getPathHtml", "data", "focus", "init", "postRender", "renderHtml", "update"]
Object.getOwnPropertyNames((new tinymce.ui.ElementPath).__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "hasClass", "height", "hide", "init", "initLayoutRect", "innerHtml", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "value", "visible", "width"]
===
Object.getOwnPropertyNames((new tinymce.ui.ElementPath))
TypeError: Cannot read property 'delimiter' of undefined //4.0.28

tinymce.ui.Class.Control.Tooltip-function

name::
* McsEngl.tinymce.ui.Class.Control.Tooltip-function@cptIt,
* McsEngl.tmce'fCCTooltip@cptIt,
* McsEngl.tmce'Tooltip@cptIt,
* McsEngl.tinymce.ui.ToolTip@cptIt,

_GENERIC:
* Control#ql:tmce'control#

_DEFINITION:
- Creates a tooltip instance
return Control.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Tooltip.js]

tmceoCCTooltip:
> Object.getOwnPropertyNames((new tinymce.ui.Tooltip)).sort()
["_active", "_aria", "_borderBox", "_classes", "_disabled", "_eventDispatcher", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_text", "_title", "_value", "_visible", "_width", "settings"]
> Object.getOwnPropertyNames((new tinymce.ui.Tooltip).__proto__).sort()
["Defaults", "Mixins", "moveBy", "moveRel", "moveTo", "renderHtml", "repaint", "testMoveRel", "text"]
> CONTROL: Object.getOwnPropertyNames((new tinymce.ui.Tooltip).__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "getRoot", "hasClass", "hasEventListeners", "height", "hide", "init", "initLayoutRect", "innerHtml", "isRtl", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parentsAndSelf", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "translate", "value", "visible", "width"]
===
> (new tinymce.oUi.fControlTooltip)._active
false
> (new tinymce.oUi.fControlTooltip)._aria
Object {role: undefined}
> (new tinymce.oUi.fControlTooltip)._bindings
Object {click: Array[1]}
> (new tinymce.oUi.fControlTooltip)._borderBox
undefined
> (new tinymce.oUi.fControlTooltip)._classes
["widget", "tooltip", "tooltip-n"]
> (new tinymce.oUi.fControlTooltip)._disabled
false
> (new tinymce.oUi.fControlTooltip)._height
0
> (new tinymce.oUi.fControlTooltip)._id
"mce_92"
> (new tinymce.oUi.fControlTooltip)._marginBox
undefined
===
(new tinymce.oUi.fControlTooltip)
fClass {settings: Object, _id: "mce_108", _name: "", _text: "", _height: 0…}
_active: false
_aria: Object
_bindings: Object
_borderBox: undefined
_classes: Array[3]
_disabled: false
_height: 0
_id: "mce_108"
_marginBox: undefined
_name: ""
_nativeEvents: Object
_paddingBox: undefined
_text: ""
_title: false
_value: false
_visible: true
_width: 0
settings: Object
__proto__: fClass
Defaults: Object
Mixins: Array[1]
moveBy: function (dx, dy) {
moveRel: function (elm, rel) {
moveTo: function (x, y) {
renderHtml: function (){
repaint: function (){
testMoveRel: function (elm, rels) {
text: function (){
__proto__: fClass

tmce'tooltip'html:
<div id="mce_103" class="cls-widget cls-tooltip cls-tooltip-n" role="presentation" style="left: -65535px; top: 67px; z-index: 131070; display: none;">
<div class="clsTooltipArrow"></div>
<div class="clsTooltipInner">Align left</div>
</div>
===
<div id="mce_3" class="" role="presentation"><div class="clsTooltipArrow"></div><div class="clsTooltipInner"></div></div>

tinymce.ui.Class.Control.Widget-function

name::
* McsEngl.tinymce.ui.Class.Control.Widget-function@cptIt,
* McsEngl.tmce'fCCWidget@cptIt,
* McsEngl.tmce'Widget@cptIt,
* McsEngl.tinymce.ui.Widget@cptIt,

_GENERIC:
* Control#ql:tmce'control#

_DEFINITION:
- Widget base class a widget is a control that has a tooltip and some basic states
===
var Widget = Control#ql:tmce'control#.extend({
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\ui\Widget.js]

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.ui.Widget).sort()
["arguments", "caller", "constructor", "extend", "length", "name", "prototype", "tooltips"]

tmceoCCWidget:
> Object.getOwnPropertyNames((new tinymce.ui.Widget)).sort()
* tmceoCCWidget.Uactive,
* tmceoCCWidget.Uaria,
* tmceoCCWidget.UborderBox,
* tmceoCCWidget.Uclasses,
* tmceoCCWidget.Udisabled,
* tmceoCCWidget.UeventDispatcher,
* tmceoCCWidget.Uheight,
* tmceoCCWidget.Uid,
* tmceoCCWidget.UmarginBox,
* tmceoCCWidget.Uname,
* tmceoCCWidget.UnativeEvents,
* tmceoCCWidget.UpaddingBox,
* tmceoCCWidget.Usuper,
* tmceoCCWidget.Utext,
* tmceoCCWidget.Utitle,
* tmceoCCWidget.Uvalue,
* tmceoCCWidget.Uvisible,
* tmceoCCWidget.Uwidth,
* tmceoCCWidget.canFocus,
* tmceoCCWidget.settings,
> Object.getOwnPropertyNames((new tinymce.ui.Widget).__proto__).sort()
* tmceoCCWidget.active,
* tmceoCCWidget.disabled,
* tmceoCCWidget.init,
* tmceoCCWidget.postRender,
* tmceoCCWidget.remove,
* tmceoCCWidget.tooltip,
===
> Object.getOwnPropertyNames((new tinymce.ui.Widget)).sort()
["_active", "_aria", "_borderBox", "_classes", "_disabled", "_eventDispatcher", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "canFocus", "settings"]
> Object.getOwnPropertyNames((new tinymce.ui.Widget).__proto__).sort()
["active", "disabled", "init", "postRender", "remove", "tooltip"]
> fCControl.prototype#ql:tmce'occontrol#:
Object.getOwnPropertyNames((new tinymce.ui.Widget).__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "getRoot", "hasClass", "hasEventListeners", "height", "hide", "init", "initLayoutRect", "innerHtml", "isRtl", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parentsAndSelf", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "translate", "value", "visible", "width"]
> Object.getOwnPropertyNames((new tinymce.ui.Widget).__proto__.__proto__.__proto__).sort()
["constructor"]
> Object.getOwnPropertyNames((new tinymce.ui.Widget).__proto__.__proto__.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

_SPECIFIC:
* Button#ql:tmce'button#
* Checkbox#ql:tmce'checkbox#
* ComboBox#ql:tmce'combobox#
* Iframe#ql:tmce'iframe#
* Label#ql:tmce'label#
* MenuItem#ql:tmce'menuitem#
* ResizeHandle#ql:tmce'resizehandle#
* Spacer#ql:tmce'spacer#
* TextBox#ql:tmce'textbox#
tmce'Widget.Button
tmce'Widget.Checkbox
tmce'Widget.ComboBox
tmce'Widget.Iframe
tmce'Widget.Label
tmce'Widget.MenuItem
tmce'Widget.ResizeHandle
tmce'Widget.Spacer
tmce'Widget.TextBox

tinymce.ui.Class.Control.Widget.Button-function

name::
* McsEngl.tinymce.ui.Class.Control.Widget.Button-function@cptIt,
* McsEngl.tmce'Button@cptIt,
* McsEngl.tmce'fCCWButton@cptIt,
* McsEngl.tinymce.ui.Button@cptIt,

_GENERIC:
* Widget#ql:tmce'widget#

_DEFINITION:
- This class is used to create buttons
return Widget.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Button.js]

_PROPERTY:
> Object.getOwnPropertyNames((tinymce.ui.Button)).sort()
["arguments", "caller", "constructor", "extend", "length", "name", "prototype"]

tmceoCCWButton:
Object.getOwnPropertyNames(new tinymce.oUi.Button).sort()
["_active", "_bTitle", "_bindings", "_borderBox", "_classes", "_disabled", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_oAria", "_oProto", "_paddingBox", "_text", "_value", "_visible", "_width", "canFocus", "settings"]
Object.getOwnPropertyNames(tinymce.oUi.Button.prototype).sort()
["init", "oDefaults", "renderHtml", "repaint"]
===
> Object.getOwnPropertyNames((new tinymce.ui.Button)).sort()
TypeError: Cannot read property 'size' of undefined //4.0.28
needs
     settings = self.settings;//4.0.28
on init
===
Object.getOwnPropertyNames((new tinymce.ui.Button)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "canFocus", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.Button).__proto__).sort()
["Defaults", "init", "renderHtml", "repaint"]

> WIDGET: Object.getOwnPropertyNames((new tinymce.ui.Button).__proto__.__proto__).sort()
["active", "disabled", "init", "postRender", "remove", "tooltip"]
> CONTROL: Object.getOwnPropertyNames((new tinymce.ui.Button).__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "hasClass", "height", "hide", "init", "initLayoutRect", "innerHtml", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "value", "visible", "width"]

tmce'button.SPECIFIC:
tmce'Button.MenuButton
tmce'Button.PanelButton

tmce'button'SETTINGS:
cmd: 'mceDirectionLTR',
icon: 'anchor',
tooltip: 'Anchor',
onclick: fShowDialog,
onPostRender: function() {
shortcut: 'Ctrl+Alt+F',
stateSelector: 'a:not([href])'

tmce'button'html:
<div id="mce_70" class="cls-widget cls-btn cls-first" tabindex="-1" role="button" aria-labeledby="mce_70" aria-label="Align left">
<button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-alignleft"></i></button>
</div>

<div id="mce_110" class="cls-widget cls-btn cls-first cls-last" tabindex="-1"><button role="presentation" type="button" tabindex="-1"></button></div>
===
<div id="mce_74" class="cls-widget cls-btn cls-splitbtn cls-menubtn cls-first cls-active" role="splitbutton" aria-labeledby="mce_74" aria-label="Bullet list" aria-haspopup="true" aria-pressed="true">
<button type="button" hidefocus="" tabindex="-1"><i class="cls-ico cls-i-btnBullist"></i></button>
<button type="button" class="cls-open" hidefocus="" tabindex="-1"> <i class="cls-caret"></i></button></div>

tinymce.ui.Class.Control.Widget.Button.MenuButton

name::
* McsEngl.tinymce.ui.Class.Control.Widget.Button.MenuButton@cptIt,
* McsEngl.tmce'fCCWButtonMenu@cptIt,
* McsEngl.tmce'MenuButton@cptIt,
* McsEngl.tinymce.ui.MenuButton@cptIt,

_DEFINITION:
- Creates a new menu button
var MenuButton = Button.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\MenuButton.js]

_SPECIFIC:
tmce'MenuButton.ListBox
tmce'MenuButton.SplitButton

tmceoCCWButtonMenu:
> Object.getOwnPropertyNames((new tinymce.ui.MenuButton)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_renderOpen", "_super", "_text", "_title", "_value", "_visible", "_width", "canFocus", "hasPopup", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.MenuButton).__proto__).sort()
["activeMenu", "hideMenu", "init", "postRender", "remove", "renderHtml", "showMenu", "text"]

Object.getOwnPropertyNames((new tinymce.ui.MenuButton).__proto__.__proto__).sort()
["Defaults", "init", "renderHtml", "repaint"]
Object.getOwnPropertyNames((new tinymce.ui.MenuButton).__proto__.__proto__.__proto__).sort()
["active", "disabled", "init", "postRender", "remove", "tooltip"]
Object.getOwnPropertyNames((new tinymce.ui.MenuButton).__proto__.__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "hasClass", "height", "hide", "init", "initLayoutRect", "innerHtml", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "value", "visible", "width"]

tmce'menubutton'html:
<div id="mce_64" class="cls-widget cls-btn cls-menubtn cls-first" tabindex="-1" role="button" aria-haspopup="true" aria-expanded="true">
<button id="mce_64-open" role="presentation" type="button" tabindex="-1"><span>Formats</span> <i class="cls-caret"></i></button>
</div>
===
<div id="mce_94" class="cls-widget cls-btn cls-menubtn cls-flow-layout-item cls-resizehandle cls-last" tabindex="-1" role="button" aria-haspopup="true">
<button id="mce_94-open" role="presentation" type="button" tabindex="-1"><span> </span> <i class="cls-caret"></i></button></div>

tinymce.ui.Class.Control.Widget.Button.MenuButton.ListBox

name::
* McsEngl.tinymce.ui.Class.Control.Widget.Button.MenuButton.ListBox@cptIt,
* McsEngl.tmce'fCCWButtonMenuListbox@cptIt,
* McsEngl.tmce'ListBox@cptIt,
* McsEngl.tinymce.ui.ListBox@cptIt,

_DEFINITION:
- Creates a new list box control
return MenuButton#ql:tmce'menubutton#.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\ListBox.js]

_INSTANCE:
Object.getOwnPropertyNames((new tinymce.ui.ListBox)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_renderOpen", "_super", "_text", "_title", "_value", "_values", "_visible", "_width", "canFocus", "hasPopup", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.ListBox).__proto__).sort()
["init", "value"]
Object.getOwnPropertyNames((new tinymce.ui.ListBox).__proto__.__proto__).sort()
["activeMenu", "hideMenu", "init", "postRender", "remove", "renderHtml", "showMenu", "text"]

tinymce.ui.Class.Control.Widget.Button.MenuButton.SplitButton

name::
* McsEngl.tinymce.ui.Class.Control.Widget.Button.MenuButton.SplitButton@cptIt,
* McsEngl.tmce'fCCWButtonMenuSplit@cptIt,
* McsEngl.tmce'SplitButton@cptIt,
* McsEngl.tinymce.ui.SplitButton@cptIt,

_DEFINITION:
- Creates a split button
return MenuButton#ql:tmce'menubutton#.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\SplitButton.js]

_INSTANCE:
> Object.getOwnPropertyNames((new tinymce.ui.SplitButton)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_renderOpen", "_super", "_text", "_title", "_value", "_visible", "_width", "canFocus", "hasPopup", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.SplitButton).__proto__).sort()
["Defaults", "activeMenu", "postRender", "renderHtml", "repaint"]
Object.getOwnPropertyNames((new tinymce.ui.SplitButton).__proto__.__proto__).sort()
["activeMenu", "hideMenu", "init", "postRender", "remove", "renderHtml", "showMenu", "text"]
===
> Object.getOwnPropertyNames((new tinymce.ui.SplitButton)).sort()
TypeError: Cannot read property 'tooltip' of undefined //4.0.7

_SETTINGS:
* menu: an array of choices.

tmce'splitbutton'html:
<div id="mce_72" class="cls-widget cls-btn cls-splitbtn cls-menubtn cls-first" role="splitbutton" aria-labeledby="mce_72" aria-label="Bullet list" aria-haspopup="true" aria-expanded="true">
<button type="button" hidefocus="" tabindex="-1"><i class="cls-ico cls-i-btnBullist"></i></button>
<button type="button" class="cls-open" hidefocus="" tabindex="-1"> <i class="cls-caret"></i></button></div>
?
<div id="mce_20" class="cls-flow-layout-item cls-resizehandle cls-last">
<button type="button" hidefocus="" tabindex="-1"></button>
<button type="button" class="cls-open" hidefocus="" tabindex="-1"> <i class="cls-caret"></i></button></div>

tinymce.ui.Class.Control.Widget.Button.PanelButton

name::
* McsEngl.tinymce.ui.Class.Control.Widget.Button.PanelButton@cptIt,
* McsEngl.tmce'fCCWButtonPanel@cptIt,
* McsEngl.tmce'PanelButton@cptIt,
* McsEngl.tinymce.ui.PanelButton@cptIt,

_DEFINITION:
- Creates a new panel button
return Button.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\PanelButton.js]

_INSTANCE:
Object.getOwnPropertyNames((new tinymce.ui.PanelButton)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "canFocus", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.PanelButton).__proto__).sort()
["hidePanel", "postRender", "showPanel"]
Object.getOwnPropertyNames((new tinymce.ui.PanelButton).__proto__.__proto__).sort()
["Defaults", "init", "renderHtml", "repaint"]

tinymce.ui.Class.Control.Widget.Button.PanelButton.ColorButton

name::
* McsEngl.tinymce.ui.Class.Control.Widget.Button.PanelButton.ColorButton@cptIt,
* McsEngl.tmce'ColorButton@cptIt,
* McsEngl.tmce'fCCWButtonPanelColor@cptIt,
* McsEngl.tinymce.ui.ColorButton@cptIt,

_DEFINITION:
- This class creates a color button control

_INSTANCE:
Object.getOwnPropertyNames((new tinymce.ui.ColorButton)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "canFocus", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.ColorButton).__proto__).sort()
["color", "init", "postRender", "renderHtml"]
Object.getOwnPropertyNames((new tinymce.ui.ColorButton).__proto__.__proto__).sort()
["hidePanel", "postRender", "showPanel"]

tinymce.ui.Class.Control.Widget.Checkbox

name::
* McsEngl.tinymce.ui.Class.Control.Widget.Checkbox@cptIt,
* McsEngl.tmce'Checkbox@cptIt,
* McsEngl.tmce'fCCWCheckbox@cptIt,
* McsEngl.tinymce.ui.Checkbox@cptIt,

_DEFINITION:
- This control creates a custom checkbox
return Widget.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Checkbox.js]

_INSTANCE:
> Object.getOwnPropertyNames((new tinymce.ui.Checkbox)).sort()
["_active", "_aria", "_borderBox", "_checked", "_classes", "_disabled", "_eventDispatcher", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "canFocus", "settings"]
> Object.getOwnPropertyNames((new tinymce.ui.Checkbox).__proto__).sort()
["Defaults", "checked", "init", "renderHtml", "value"]
> Object.getOwnPropertyNames((new tinymce.ui.Checkbox).__proto__.__proto__).sort()
["active", "disabled", "init", "postRender", "remove", "tooltip"]
Object.getOwnPropertyNames((new tinymce.ui.Checkbox).__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "getRoot", "hasClass", "hasEventListeners", "height", "hide", "init", "initLayoutRect", "innerHtml", "isRtl", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parentsAndSelf", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "translate", "value", "visible", "width"]
Object.getOwnPropertyNames((new tinymce.ui.Checkbox).__proto__.__proto__.__proto__.__proto__).sort()
["constructor"]
Object.getOwnPropertyNames((new tinymce.ui.Checkbox).__proto__.__proto__.__proto__.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

tinymce.ui.Class.Control.Widget.Checkbox.Radio

name::
* McsEngl.tinymce.ui.Class.Control.Widget.Checkbox.Radio@cptIt,
* McsEngl.tmce'fCCWCheckboxRadio@cptIt,
* McsEngl.tmce'Radio@cptIt,
* McsEngl.tinymce.ui.Radio@cptIt,

_DEFINITION:
- Creates a new radio button
return Checkbox#ql:tmce'checkbox#.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Radio.js]

_INSTANCE:
> Object.getOwnPropertyNames((new tinymce.ui.Radio)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_checked", "_classes", "_disabled", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "canFocus", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.Radio).__proto__).sort()
["Defaults"]
Object.getOwnPropertyNames((new tinymce.ui.Radio).__proto__.__proto__).sort()
["Defaults", "checked", "init", "renderHtml", "value"]

tinymce.ui.Class.Control.Widget.ComboBox

name::
* McsEngl.tinymce.ui.Class.Control.Widget.ComboBox@cptIt,
* McsEngl.tmce'ComboBox@cptIt,
* McsEngl.tmce'fCCWCombobox@cptIt,
* McsEngl.tinymce.ui.ComboBox@cptIt,

_DEFINITION:
- This class creates a combobox control
return Widget.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\ComboBox.js]

_INSTANCE:
Object.getOwnPropertyNames((new tinymce.ui.ComboBox)).sort()
["_active", "_aria", "_borderBox", "_classes", "_disabled", "_eventDispatcher", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "ariaTarget", "canFocus", "settings", "subinput"]
Object.getOwnPropertyNames((new tinymce.ui.ComboBox).__proto__).sort()
["disabled", "focus", "init", "postRender", "remove", "renderHtml", "repaint", "showMenu", "value"]
Object.getOwnPropertyNames((new tinymce.ui.ComboBox).__proto__.__proto__).sort()
["active", "disabled", "init", "postRender", "remove", "tooltip"]
Object.getOwnPropertyNames((new tinymce.ui.ComboBox).__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "getRoot", "hasClass", "hasEventListeners", "height", "hide", "init", "initLayoutRect", "innerHtml", "isRtl", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parentsAndSelf", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "translate", "value", "visible", "width"]
Object.getOwnPropertyNames((new tinymce.ui.ComboBox).__proto__.__proto__.__proto__.__proto__).sort()
["constructor"]
Object.getOwnPropertyNames((new tinymce.ui.ComboBox).__proto__.__proto__.__proto__.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

tinymce.ui.Class.Control.Widget.ComboBox.FilePicker

name::
* McsEngl.tinymce.ui.Class.Control.Widget.ComboBox.FilePicker@cptIt,
* McsEngl.tmce'FilePicker@cptIt,
* McsEngl.tinymce.ui.FilePicker@cptIt,

_DEFINITION:
- This class creates a file picker control
return ComboBox#ql:tmce'combobox#.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\FilePicker.js]

_INSTANCE:
Object.getOwnPropertyNames((new tinymce.ui.FilePicker)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "canFocus", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.FilePicker).__proto__).sort()
["init"]
Object.getOwnPropertyNames((new tinymce.ui.FilePicker).__proto__.__proto__).sort()
["disabled", "focus", "init", "postRender", "remove", "renderHtml", "repaint", "value"]

tinymce.ui.Class.Control.Widget.Iframe

name::
* McsEngl.tinymce.ui.Class.Control.Widget.Iframe@cptIt,
* McsEngl.tmce'fCCWIframe@cptIt,
* McsEngl.tmce'Iframe@cptIt,
* McsEngl.tinymce.ui.Iframe@cptIt,

_DEFINITION:
- This class creates an iframe
return Widget.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Iframe.js]

_INSTANCE:
> Object.getOwnPropertyNames((new tinymce.ui.Iframe)).sort()
["_active", "_aria", "_borderBox", "_classes", "_disabled", "_eventDispatcher", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "canFocus", "settings"]
> IframePrototype
Object.getOwnPropertyNames((new tinymce.ui.Iframe).__proto__).sort()
["html", "renderHtml", "src"]
> WidgetPrototype:
Object.getOwnPropertyNames((new tinymce.ui.Iframe).__proto__.__proto__).sort()
["active", "disabled", "init", "postRender", "remove", "tooltip"]
> ControlPrototype:
Object.getOwnPropertyNames((new tinymce.ui.Iframe).__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "getRoot", "hasClass", "hasEventListeners", "height", "hide", "init", "initLayoutRect", "innerHtml", "isRtl", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parentsAndSelf", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "translate", "value", "visible", "width"]

tmce'iframe'html:
<iframe id="mce_23_ifr" src='javascript:""' frameborder="0" allowtransparency="true" title="Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help" style="width: 100%; height: 247px; display: block;"></iframe>

tinymce.ui.Class.Control.Widget.Label

name::
* McsEngl.tinymce.ui.Class.Control.Widget.Label@cptIt,
* McsEngl.tmce'fCCWLabel@cptIt,
* McsEngl.tmce'Label@cptIt,
* McsEngl.tinymce.ui.Label@cptIt,

_DEFINITION:
- This class creates a label element
return Widget.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Label.js]

tmceoCCWLabel:
> Object.getOwnPropertyNames((new tinymce.ui.Label)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "canFocus", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.Label).__proto__).sort()
["disabled", "init", "initLayoutRect", "renderHtml", "repaint", "text"]
Object.getOwnPropertyNames((new tinymce.ui.Label).__proto__.__proto__).sort()
["active", "disabled", "init", "postRender", "remove", "tooltip"]

tmce'label'HTML:
<label id="mce_125" class="cls-widget cls-label cls-first cls-abs-layout-item" for="mce_115" style="line-height: 16px; left: 0px; top: 7px; width: 101px; height: 16px;">Title</label>

tmce'label'javascript:
//charmap
{
type: 'fccwlabel',
name: 'previewlabel',
text: '\u00a7',
style: 'font-size: 44px; text-align: center;',
minWidth: 100,
minHeight: 80
}

tinymce.ui.Class.Control.Widget.MenuItem

name::
* McsEngl.tinymce.ui.Class.Control.Widget.MenuItem@cptIt,
* McsEngl.tmce'MenuItem@cptIt,
* McsEngl.tinymce.ui.MenuItem@cptIt,

_DEFINITION:
- Creates a new menu item
return Widget.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\MenuItem.js]

_INSTANCE:
Object.getOwnPropertyNames((new tinymce.ui.MenuItem)).sort()
["_active", "_aria", "_borderBox", "_classes", "_disabled", "_eventDispatcher", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "canFocus", "hasPopup", "settings"]
> MenuItem.prototype:
Object.getOwnPropertyNames((new tinymce.ui.MenuItem).__proto__).sort()
["Defaults", "active", "hasMenus", "hideMenu", "init", "postRender", "remove", "renderHtml", "showMenu"]
> Widget.prototype:
Object.getOwnPropertyNames((new tinymce.ui.MenuItem).__proto__.__proto__).sort()
["active", "disabled", "init", "postRender", "remove", "tooltip"]
Object.getOwnPropertyNames((new tinymce.ui.MenuItem).__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "getRoot", "hasClass", "hasEventListeners", "height", "hide", "init", "initLayoutRect", "innerHtml", "isRtl", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parentsAndSelf", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "translate", "value", "visible", "width"]

tmce'menuitem'SETTINGS:
context: 'insert', //the menu under which this item located.
icon: 'anchor',
text: 'Anchor',
onclick: fShowDialog
separator: 'before',

tinymce.ui.Class.Control.Widget.ResizeHandle

name::
* McsEngl.tinymce.ui.Class.Control.Widget.ResizeHandle@cptIt,
* McsEngl.tmce'fCCWResizehandle@cptIt,
* McsEngl.tmce'ResizeHandle@cptIt,
* McsEngl.tinymce.ui.ResizeHandle@cptIt,

_DEFINITION:
- Renders a resize handle that fires ResizeStart, Resize and ResizeEnd events
return Widget.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\ResizeHandle.js]

_INSTANCE:
Object.getOwnPropertyNames((new tinymce.ui.ResizeHandle)).sort()
["_active", "_aria", "_borderBox", "_classes", "_disabled", "_eventDispatcher", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "canFocus", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.ResizeHandle).__proto__).sort()
["postRender", "remove", "renderHtml"]
Object.getOwnPropertyNames((new tinymce.ui.ResizeHandle).__proto__.__proto__).sort()
["active", "disabled", "init", "postRender", "remove", "tooltip"]
Object.getOwnPropertyNames((new tinymce.ui.ResizeHandle).__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "getRoot", "hasClass", "hasEventListeners", "height", "hide", "init", "initLayoutRect", "innerHtml", "isRtl", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parentsAndSelf", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "translate", "value", "visible", "width"]

tinymce.ui.Class.Control.Widget.Spacer

name::
* McsEngl.tinymce.ui.Class.Control.Widget.Spacer@cptIt,
* McsEngl.tmce'fCWSpacer@cptIt,
* McsEngl.tmce'fCCWSpacer@cptIt,
* McsEngl.tmce'Spacer@cptIt,
* McsEngl.tinymce.ui.Spacer@cptIt,

_DEFINITION:
- Creates a spacer
return Widget.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Spacer.js]

tmce'spacer'object:
Object.getOwnPropertyNames((new tinymce.ui.Spacer)).sort()
["_active", "_aria", "_borderBox", "_classes", "_disabled", "_eventDispatcher", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "canFocus", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.Spacer).__proto__).sort()
["renderHtml"]
Object.getOwnPropertyNames((new tinymce.ui.Spacer).__proto__.__proto__).sort()
["active", "disabled", "init", "postRender", "remove", "tooltip"]
Object.getOwnPropertyNames((new tinymce.ui.Spacer).__proto__.__proto__.__proto__).sort()
["Methods", "Properties", "Statics", "active", "addClass", "after", "aria", "before", "bindPendingEvents", "blur", "borderBox", "classPrefix", "classes", "disabled", "encode", "findCommonAncestor", "fire", "focus", "getContainerElm", "getEl", "getParentCtrl", "getRoot", "hasClass", "hasEventListeners", "height", "hide", "init", "initLayoutRect", "innerHtml", "isRtl", "layoutRect", "marginBox", "measureBox", "name", "next", "off", "on", "paddingBox", "parent", "parents", "parentsAndSelf", "parseBox", "postRender", "prev", "reflow", "remove", "removeClass", "renderBefore", "renderHtml", "renderTo", "repaint", "scrollIntoView", "show", "text", "title", "toggleClass", "translate", "value", "visible", "width"]

tmce'spacer'html:
<div id="mce_114" class="cls-abs-layout-item cls-spacer" style="left: 235px; top: 25px; width: 80px; height: 0px;"></div>
===
//non class
<div id="id22" class="cls-flow-layout-item cls-resizehandle cls-last cls-abs-layout-item cls-spacer"></div>
<div id="mce_13" class="cls-flow-layout-item cls-resizehandle cls-last cls-abs-layout-item cls-spacer"></div>

tinymce.ui.Class.Control.Widget.TextBox

name::
* McsEngl.tinymce.ui.Class.Control.Widget.TextBox@cptIt,
* McsEngl.tmce'fCCWidgetTextbox@cptIt,
* McsEngl.tmce'TextBox@cptIt,
* McsEngl.tinymce.ui.TextBox@cptIt,

_DEFINITION:
- Creates a new textbox
return Widget.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\TextBox.js]
===
needed
type: 'fccwidgettextbox'
instead of
type 'textbox'

_INSTANCE:
> Object.getOwnPropertyNames((new tinymce.ui.TextBox)).sort()
["_active", "_aria", "_bindings", "_borderBox", "_classes", "_disabled", "_height", "_id", "_marginBox", "_name", "_nativeEvents", "_paddingBox", "_super", "_text", "_title", "_value", "_visible", "_width", "canFocus", "settings"]
Object.getOwnPropertyNames((new tinymce.ui.TextBox).__proto__).sort()
["disabled", "init", "postRender", "remove", "renderHtml", "repaint", "value"]
Object.getOwnPropertyNames((new tinymce.ui.TextBox).__proto__.__proto__).sort()
["active", "disabled", "init", "postRender", "remove", "tooltip"]

_HTML_ELEMENT:
<input id="mce_115" class="cls-textbox cls-last cls-abs-layout-item" value="" hidefocus="true" size="40" style="left: 101px; top: 0px; width: 271px; height: 28px;">

tinymce.ui.Class.Layout-function

name::
* McsEngl.tinymce.ui.Class.Layout-function@cptIt,
* McsEngl.tmce'Layout@cptIt,
* McsEngl.tinymce.ui.Layout@cptIt,

_GENERIC:
> typeof tinymce.ui.Layout
"function"

_DEFINITION:
- Base layout manager class
===
return Class.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Layout.js]

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.ui.Layout).sort()
["arguments", "caller", "constructor", "extend", "length", "name", "prototype"]

_INSTANCE:
> Object.getOwnPropertyNames(new tinymce.ui.Layout).sort()
["settings"]
> Object.getOwnPropertyNames((new tinymce.ui.Layout).__proto__).sort()
["Defaults", "applyClasses", "init", "postRender", "preRender", "recalc", "renderHtml"]

> Object.getOwnPropertyNames((new tinymce.ui.Layout).__proto__.__proto__).sort()
["constructor"]
> Object.getOwnPropertyNames((new tinymce.ui.Layout).__proto__.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
> Object.getOwnPropertyNames((new tinymce.ui.Layout).__proto__.__proto__.__proto__.__proto__).sort()
TypeError: Object.getOwnPropertyNames called on non-object
===
> Object.getOwnPropertyNames(tinymce.ui.Layout.prototype).sort()
["Defaults", "applyClasses", "init", "postRender", "preRender", "recalc", "renderHtml"]
> tinymce.ui.Layout.prototype
Class {Defaults: Object, init: function, preRender: function, applyClasses: function, renderHtml: function…}
> typeof tinymce.ui.Layout.prototype
"object"
===
(new tinymce.oUi.Layout)
fClass {settings: Object, Defaults: Object, init: function, preRender: function, applyClasses: function…}
settings: Object
__proto__: fClass
Defaults: Object
applyClasses: function (container) {
init: function (settings) {
postRender: function () {
preRender: function (container) {
recalc: function () {
renderHtml: function (container) {
__proto__: fClass
constructor: function fClass() {
__proto__: Object

_CODE.TMCE.WIRED:
IF
layout: 'S
THEN
problem in statusbar, needs layout: 's
===
// TODO: Fix me! nnnLayout
if (this.settings.layout !== "fclflow" && this.settings.layout !== "fclstack") {
this.repaint();
}

tinymce.ui.Class.Layout.AbsoluteLayout-function

name::
* McsEngl.tinymce.ui.Class.Layout.AbsoluteLayout-function@cptIt,
* McsEngl.tmce'AbsoluteLayout@cptIt,
* McsEngl.tinymce.ui.AbsoluteLayout@cptIt,

_GENERIC:
typeof tinymce.ui.AbsoluteLayout
"function"

_DEFINITION:
- LayoutManager for absolute positioning
===
* LayoutManager for absolute positioning. This layout manager is more of
* a base class for other layouts but can be created and used directly.
*
* @-x-less AbsoluteLayout.less
* @class tinymce.ui.AbsoluteLayout
* @extends tinymce.ui.Layout
return Layout.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\AbsoluteLayout.js]

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.ui.AbsoluteLayout).sort()
["arguments", "caller", "constructor", "extend", "length", "name", "prototype"]

_INSTANCE:
> Object.getOwnPropertyNames((new tinymce.ui.LayoutAbsolute)).sort()
["settings"]
> Object.getOwnPropertyNames((new tinymce.ui.LayoutAbsolute).__proto__).sort()
["Defaults", "recalc", "renderHtml"]
> Object.getOwnPropertyNames((new tinymce.ui.LayoutAbsolute).__proto__.__proto__).sort()
["Defaults", "applyClasses", "init", "postRender", "preRender", "recalc", "renderHtml"]
> Object.getOwnPropertyNames((new tinymce.ui.LayoutAbsolute).__proto__.__proto__.__proto__).sort()
["constructor"]
> Object.getOwnPropertyNames((new tinymce.ui.LayoutAbsolute).__proto__.__proto__.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

===
> Object.getOwnPropertyNames(tinymce.ui.AbsoluteLayout.prototype).sort()
["Defaults", "recalc", "renderHtml"]
===

tinymce.ui.Class.Layout.Absolute.FitLayout

name::
* McsEngl.tinymce.ui.Class.Layout.Absolute.FitLayout@cptIt,
* McsEngl.tmce'FitLayout@cptIt,
* McsEngl.tinymce.ui.FitLayout@cptIt,

_DEFINITION:
- This layout manager will resize the control to be the size of it's parent container

tinymce.ui.Class.Layout.Absolute.FlexLayout

name::
* McsEngl.tinymce.ui.Class.Layout.Absolute.FlexLayout@cptIt,
* McsEngl.tmce'FlexLayout@cptIt,
* McsEngl.tinymce.ui.FlexLayout@cptIt,

_DEFINITION:
- This layout manager works similar to the CSS flex box

tinymce.ui.Class.Layout.Absolute.GridLayout

name::
* McsEngl.tinymce.ui.Class.Layout.Absolute.GridLayout@cptIt,
* McsEngl.tmce'fCLAbsoluteGrid@cptIt,
* McsEngl.tmce'GridLayout@cptIt,
* McsEngl.tinymce.ui.GridLayout@cptIt,

_DEFINITION:
- This layout manager places controls in a grid

tinymce.ui.Class.Layout.FlowLayout

name::
* McsEngl.tinymce.ui.Class.Layout.FlowLayout@cptIt,
* McsEngl.tmce'FlowLayout@cptIt,
* McsEngl.tinymce.ui.FlowLayout@cptIt,

_DEFINITION:
- This layout manager will place the controls by using the browsers native layout

tinymce.ui.Class.Layout.Flow.StackLayout

name::
* McsEngl.tinymce.ui.Class.Layout.Flow.StackLayout@cptIt,
* McsEngl.tmce'StackLayout@cptIt,
* McsEngl.tinymce.ui.StackLayout@cptIt,

_DEFINITION:
- This layout uses the browsers layout when the items are blocks

tinymce.ui.Class.Selector-function

name::
* McsEngl.tinymce.ui.Class.Selector-function@cptIt,
* McsEngl.tmce'Selector@cptIt,
* McsEngl.tinymce.ui.Selector@cptIt,

_DEFINITION:
- Selector engine, enables you to select controls by using CSS like expressions
var Selector = Class.extend({
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Selector.js]

_INSTANCE:
> Object.getOwnPropertyNames((new tinymce.ui.Selector))
["_selectors"]
> Object.getOwnPropertyNames((new tinymce.ui.Selector).__proto__)
["init", "match", "find"]
Object.getOwnPropertyNames((new tinymce.ui.Selector).__proto__.__proto__)
["constructor"]
Object.getOwnPropertyNames((new tinymce.ui.Selector).__proto__.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
===
(new tinymce.oUi.fSelector)
fClass {_selectors: Array[1], init: function, match: function, find: function}
_selectors: Array[1]
__proto__: fClass
find: function (container) {
init: function (selector) {
match: function (control, selectors) {
__proto__: fClass
constructor: function fClass() {
__proto__: Object
__defineGetter__: function __defineGetter__() { [native code] }
__defineSetter__: function __defineSetter__() { [native code] }
__lookupGetter__: function __lookupGetter__() { [native code] }
__lookupSetter__: function __lookupSetter__() { [native code] }
constructor: function Object() { [native code] }
hasOwnProperty: function hasOwnProperty() { [native code] }
isPrototypeOf: function isPrototypeOf() { [native code] }
propertyIsEnumerable: function propertyIsEnumerable() { [native code] }
toLocaleString: function toLocaleString() { [native code] }
toString: function toString() { [native code] }
valueOf: function valueOf() { [native code] }
get __proto__: function __proto__() { [native code] }
set __proto__: function __proto__() { [native code] }

tinymce.ui.DomUtils object

name::
* McsEngl.tinymce.ui.DomUtils object@cptIt,
* McsEngl.tmce'DomUtils@cptIt,

_GENERIC:
typeof tinymce.ui.DomUtils
"object"

_DEFINITION:
return {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\DomUtils.js]

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.ui.DomUtils).sort()
["addClass", "createFragment", "css", "fire", "get", "getPos", "getSize", "getViewPort", "getWindowSize", "hasClass", "id", "innerHtml", "off", "on", "removeClass", "toggleClass"]
Object.getOwnPropertyNames(tinymce.ui.DomUtils.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

tinymce.ui.DragHelper-function

name::
* McsEngl.tinymce.ui.DragHelper-function@cptIt,
* McsEngl.tmce'DragHelper@cptIt,
* McsEngl.tmce'fHelperDrag@cptIt,
* McsEngl.tinymce.ui.DragHelper@cptIt,

_DEFINITION:
- Drag/drop helper class
return function(id, settings) {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\DragHelper.js]

_INSTANCE:
> Object.getOwnPropertyNames((new tinymce.ui.DragHelper)).sort()
["destroy"]
Object.getOwnPropertyNames((new tinymce.ui.DragHelper).__proto__).sort()
["constructor"]
Object.getOwnPropertyNames((new tinymce.ui.DragHelper).__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

tinymce.ui.Factory object

name::
* McsEngl.tinymce.ui.Factory object@cptIt,
* McsEngl.tmce'Factory@cptIt,
* McsEngl.tinymce.ui.Factory@cptIt,

_GENERIC:
> typeof tinymce.ui.Factory
"object"

_DEFINITION:
* This class is a factory for control instances. This enables you
* to create instances of controls without having to require the UI controls directly.
*
* It also allow you to override or add new control types.
 return {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Factory.js]

_FILE:
* \PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Factory.js,

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.ui.Factory).sort()
["add", "create", "has"]
> Object.getOwnPropertyNames(tinymce.ui.Factory.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

tinymce.ui.FormatControls undefined

name::
* McsEngl.tinymce.ui.FormatControls undefined@cptIt,
* McsEngl.tmce'FormatControls@cptIt,
* McsEngl.tinymce.ui.FormatControls@cptIt,

_GENERIC:
> tinymce.ui.FormatControls
undefined

_DEFINITION:
code to execute in a module.
===
- Internal class containing all TinyMCE specific control types such as format listboxes, fontlist boxe
* Internal class containing all TinyMCE specific control types such as
* format listboxes, fontlist boxes, toolbar buttons etc.
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\FormatControls.js]

tinymce.ui.KeyboardNavigation-function

name::
* McsEngl.tinymce.ui.KeyboardNavigation-function@cptIt,
* McsEngl.tmce'KeyboardNavigation@cptIt,
* McsEngl.tinymce.ui.KeyboardNavigation@cptIt,

_DEFINITION:
- This class handles keyboard navigation of controls and elements
return function(settings) {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\KeyboardNavigation.js]

tinymce.ui.Movable object

name::
* McsEngl.tinymce.ui.Movable object@cptIt,
* McsEngl.tmce'Movable@cptIt,
* McsEngl.tinymce.ui.Movable@cptIt,

_DEFINITION:
- Movable mixin
return {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Movable.js]

tinymce.ui.Resizable object

name::
* McsEngl.tinymce.ui.Resizable object@cptIt,
* McsEngl.tmce'Resizable@cptIt,
* McsEngl.tinymce.ui.Resizable@cptIt,

_DEFINITION:
- Resizable mixin
return {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Resizable.js]

_PROPERTY:
> Object.getOwnPropertyNames((tinymce.ui.Resizable)).sort()
["resizeBy", "resizeTo", "resizeToContent"]
> Object.getOwnPropertyNames((tinymce.ui.Resizable).__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

tinymce.ui.Scrollable object

name::
* McsEngl.tinymce.ui.Scrollable object@cptIt,
* McsEngl.tmce'Scrollable@cptIt,
* McsEngl.tinymce.ui.Scrollable@cptIt,

_DEFINITION:
- This mixin makes controls scrollable using custom scrollbars
return {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Scrollable.js]

_PROPERTY:
> Object.getOwnPropertyNames((tinymce.ui.Scrollable)).sort()
["init", "renderScroll"]
Object.getOwnPropertyNames((tinymce.ui.Scrollable).__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

tinymce.ui.Throbber-function

name::
* McsEngl.tinymce.ui.Throbber-function@cptIt,
* McsEngl.tmce'Throbber@cptIt,
* McsEngl.tinymce.ui.Throbber@cptIt,

_FILE:
* https://github.com/tinymce/tinymce/blob/master/js/tinymce/classes/ui/Throbber.js,

_DEFINITION:
- This class enables you to display a Throbber for any element
return function(elm) {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\ui\Throbber.js]

_INSTANCE:
> Object.getOwnPropertyNames((new tinymce.ui.Throbber)).sort()
["hide", "show"]
Object.getOwnPropertyNames((new tinymce.ui.Throbber).__proto__).sort()
["constructor"]
Object.getOwnPropertyNames((new tinymce.ui.Throbber).__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

tinymce.util object NAMESPACE

name::
* McsEngl.tinymce.util object NAMESPACE@cptIt,
* McsEngl.tmce'namespace.tinymce.util@cptIt,
* McsEngl.tinymce.util@cptIt,
* McsEngl.tmce'util-namespace@cptIt,
* McsEngl.tmce'tinymce.util-namespace@cptIt,
* McsEngl.tmce'tinymce.util-object@cptIt,

_GENERIC:
typeof tinymce.util
"object"

_DESCRIPTION:
Contains various utility classes such as json parser, cookies etc.
[http://www.tinymce.com/wiki.php/api4:namespace.tinymce.util]

_PROPERTY:
Object.getOwnPropertyNames(tinymce.util).sort()
["Class", "I18n", "JSON", "JSONP", "JSONRequest", "LocalStorage", "Observable", "Quirks", "Tools", "URI", "VK", "XHR"]

tinymce.util.Class-function

name::
* McsEngl.tinymce.util.Class-function@cptIt,
* McsEngl.tmce'Class@cptIt,
* McsEngl.tinymce.util.Class@cptIt,

_GENERIC:
typeof tinyMCE.util.Class
"function"

_DEFINITION:
function Class() {
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\util\Class.js]

_DESCRIPTION:
* This utilitiy class is used for easier inheritage.
*
* Features:
* * Exposed super functions: this._super();
* * Mixins
* * Dummy functions
* * Property functions: var value = object.value(); and object.value(newValue);
* * Static functions
* * Defaults settings
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\util\Class.js]

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.util.Class).sort()
["arguments", "caller", "extend", "length", "name", "prototype"]
> Object.getOwnPropertyNames(Object.constructor).sort()
["arguments", "caller", "length", "name", "prototype"]
===
tinymce.util.Class.extend function:
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\util\Class.js +line:29]

_INSTANCE:
> Object.getOwnPropertyNames((new tinymce.util.Class)).sort()
[]
> Object.getOwnPropertyNames((new tinymce.util.Class).__proto__).sort()
["constructor"]
> Object.getOwnPropertyNames((new tinymce.util.Class).__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

_SPECIFIC:
* Collection#linkL#
* Control#linkL#
* Layout#linkL#
* Selector#ql:tmce'selector#

tinymce.util.I18n object

name::
* McsEngl.tinymce.util.I18n object@cptIt,
* McsEngl.tmce'I18n@cptIt,

_GENERIC:
typeof tinyMCE.util.I18n
"object"

_DESCRIPTION:
I18n class that handles translation of TinyMCE UI. Uses po style with csharp style parameters.
Methods
add
Adds translations for a specific language code
translate
Translates the specified text
[http://www.tinymce.com/wiki.php/api4:class.tinymce.util.I18n]

_FILE:
* \PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\util\I18n.js,

_PROPERTY:
Object.getOwnPropertyNames(tinymce.util.I18n).sort()
["add", "data", "translate"]

tinymce.util.JSON object

name::
* McsEngl.tinymce.util.JSON object@cptIt,
* McsEngl.tmce'JSON@cptIt,

_DESCRIPTION:
JSON parser and serializer class.
Examples

// JSON parse a string into an object
var obj = tinymce.util.JSON.parse(somestring);

// JSON serialize a object into an string
var str = tinymce.util.JSON.serialize(obj);
Methods

Method  Defined By
parse static
Unserializes/parses the specified JSON string into a object
tinymce.util.JSON
serialize static
Serializes the specified object as a JSON string
tinymce.util.JSON
[http://www.tinymce.com/wiki.php/api4:class.tinymce.util.JSON]

_FILE:
* \File1a\tinymceDev\js\tinymce\classes\util\JSON.js,

tinymce.util.JSONP object

name::
* McsEngl.tinymce.util.JSONP object@cptIt,
* McsEngl.tmce'JSONP@cptIt,

_DESCRIPTION:

tinymce.util.JSONRequest-function

name::
* McsEngl.tinymce.util.JSONRequest-function@cptIt,
* McsEngl.tmce'JSONRequest@cptIt,

_DESCRIPTION:
This class enables you to use JSON-RPC to call backend methods.
Examples

var json = new tinymce.util.JSONRequest({
url: 'somebackend.php'
});

// Send RPC call 1
json.send({
method: 'someMethod1',
params: ['a', 'b'],
success: function(result) {
console.dir(result);
}
});

// Send RPC call 2
json.send({
method: 'someMethod2',
params: ['a', 'b'],
success: function(result) {
console.dir(result);
}
});
Methods

Method  Defined By
send
Sends a JSON-RPC call
tinymce.util.JSONRequest
sendRPC static
Simple helper function to send a JSON-RPC request without the need to initialize an object
tinymce.util.JSONRequest
[http://www.tinymce.com/wiki.php/api4:class.tinymce.util.JSONRequest]

tinymce.util.LocalStorage object

name::
* McsEngl.tinymce.util.LocalStorage object@cptIt,
* McsEngl.tmce'LocalStorage@cptIt,

_DESCRIPTION:
This class will simulate LocalStorage on IE 7 and return the native version on modern browsers. Storage is done using userData on IE 7 and a special serialization format. The format is designed to be as small as possible by making sure that the keys and values doesn't need to be encoded. This makes it possible to store for example HTML data. Storage format for userData: <base 32 key length>,<key string>,<base 32 value length>,<value>,... For example this data key1=value1,key2=value2 would be: 4,key1,6,value1,4,key2,6,value2
Examples

tinymce.util.LocalStorage.setItem('key', 'value');
var value = tinymce.util.LocalStorage.getItem('key');
Properties

Property  Defined By
length static
Length of the number of items in storage
tinymce.util.LocalStorage
Methods

Method  Defined By
clear static
Removes all items
tinymce.util.LocalStorage
getItem static
Returns the value if the specified key or null if it wasn't found
tinymce.util.LocalStorage
key static
Returns the key name by index
tinymce.util.LocalStorage
removeItem static
Removes the specified item by key
tinymce.util.LocalStorage
setItem static
Sets the value of the specified item by it's key
tinymce.util.LocalStorage
[http://www.tinymce.com/wiki.php/api4:class.tinymce.util.LocalStorage]

_FILE:
* \File1a\tinymceDev\js\tinymce\classes\util\LocalStorage.js,

tinymce.util.Observable object

name::
* McsEngl.tinymce.util.Observable object@cptIt,
* McsEngl.tmce'Observable@cptIt,

_DESCRIPTION:
Mixins  Editor EditorManager
This mixin will add event binding logic to classes.
Methods

Method  Defined By
fire
Fires the specified event by name
tinymce.util.Observable
off
Unbinds an event listener to a specific event by name
tinymce.util.Observable
on
Binds an event listener to a specific event by name
tinymce.util.Observable
[http://www.tinymce.com/wiki.php/api4:mixin.tinymce.util.Observable]

_PROPERTY:
Object.getOwnPropertyNames(tinymce.util.Observable).sort()
["fire", "hasEventListeners", "off", "on"]

tinymce.util.Quirks-function

name::
* McsEngl.tinymce.util.Quirks-function@cptIt,
* McsEngl.tmce'Quirks@cptIt,

_GENERIC:
typeof tinyMCE.util.Quirks
"function"

_DESCRIPTION:
This file includes fixes for various browser quirks it's made to make it easy to add/remove browser specific fixes.
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\util\Quirks.js]

_PROPERTY:
Object.getOwnPropertyNames(tinymce.util.Quirks).sort()
["arguments", "caller", "length", "name", "prototype"]

tinymce.util.Tools object

name::
* McsEngl.tinymce.util.Tools object@cptIt,
* McsEngl.tmce'Tools@cptIt,

_GENERIC:
> typeof tinymce.util.Tools
"object"

_DEFINTION:
return {
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Tools.js]

_DESCRIPTION:
This class contains various utlity functions. These are also exposed directly on the tinymce namespace.
Methods
Method  Defined By
create
Creates a class, subclass or static singleton
tinymce.util.Tools
createNS
Creates a namespace on a specific object
tinymce.util.Tools
each
Performs an iteration of all items in a collection such as an object or array
tinymce.util.Tools
explode
Splits a string but removes the whitespace before and after each value
tinymce.util.Tools
grep
Filters out items from the input array by calling the specified function for each item
tinymce.util.Tools
inArray
Returns the index of a value in an array, this method will return -1 if the item wasn't found
tinymce.util.Tools
is
Checks if a object is of a specific type for example an array
tinymce.util.Tools
isArray
Returns true/false if the object is an array or not
tinymce.util.Tools
makeMap
Makes a name/object map out of an array with names
tinymce.util.Tools
map
Creates a new array by the return value of each iteration function call
tinymce.util.Tools
resolve
Resolves a string and returns the object from a specific structure
tinymce.util.Tools
toArray
Converts the specified object into a real JavaScript array
tinymce.util.Tools
trim
Removes whitespace from the beginning and end of a string
tinymce.util.Tools
walk
Executed the specified function for each item in a object tree
tinymce.util.Tools
[http://www.tinymce.com/wiki.php/api4:class.tinymce.util.Tools]

_PROPERTY:
Object.getOwnPropertyNames(tinymce.util.Tools).sort()
["create", "createNS", "each", "explode", "extend", "grep", "inArray", "is", "isArray", "makeMap", "map", "resolve", "toArray", "trim", "walk"]

tinymce.util.URI-function

name::
* McsEngl.tinymce.util.URI-function@cptIt,
* McsEngl.tmce'URI@cptIt,

_GENERIC:
typeof tinymce.util.URI
"function"

_DESCRIPTION:
This class handles parsing, modification and serialization of URI/URL strings.
Constructors

Method  Defined By
URI
Constructs a new URI instance
tinymce.util.URI
Methods

Method  Defined By
getURI
Returns the full URI of the internal structure
tinymce.util.URI
setPath
Sets the internal path part of the URI
tinymce.util.URI
toAbsPath
Converts a relative path into a absolute path
tinymce.util.URI
toAbsolute
Converts the specified URI into a absolute URI based on the current URI instance location
tinymce.util.URI
toRelPath
Converts a absolute path into a relative path
tinymce.util.URI
toRelative
Converts the specified URI into a relative URI based on the current URI instance location
tinymce.util.URI
[http://www.tinymce.com/wiki.php/api4:class.tinymce.util.URI]

_FILE:
* \File1a\tinymceDev\js\tinymce\classes\util\URI.js,

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.util.URI).sort()
["arguments", "caller", "length", "name", "prototype"]
> Object.getOwnPropertyNames(tinymce.util.URI.prototype).sort()
["getURI", "setPath", "toAbsPath", "toAbsolute", "toRelPath", "toRelative"]

tinymce.util.VK object

name::
* McsEngl.tinymce.util.VK object@cptIt,
* McsEngl.tmce'VK@cptIt,

_DESCRIPTION:
This file exposes a set of the common KeyCodes for use. Please grow it as needed.
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\util\VK.js]

tinymce.util.XHR object

name::
* McsEngl.tinymce.util.XHR object@cptIt,
* McsEngl.tmce'XHR@cptIt,

_GENERIC:
typeof tinymce.util.XHR
"object"

_DESCRIPTION:
This class enables you to send XMLHTTPRequests cross browser.
Examples

// Sends a low level Ajax request
tinymce.util.XHR.send({
url: 'someurl',
success: function(text) {
console.debug(text);
}
});
Methods

Method  Defined By
send static
Sends a XMLHTTPRequest
tinymce.util.XHR
[http://www.tinymce.com/wiki.php/api4:class.tinymce.util.XHR]

_PROPERTY:
Object.getOwnPropertyNames(tinymce.util.XHR).sort()
["send"]

tinymce.walk-function

name::
* McsEngl.tinymce.walk-function@cptIt,
* McsEngl.tmce'is@cptIt,

_DEFINITION:
  * Executed the specified function for each item in a object tree.
  * @param {Object} o Object tree to walk though.
  * @param {function} f Function to call for each item.
  * @param {String} n Optional name of collection inside the objects to walk for example childNodes.
  * @param {String} s Optional scope to execute the function in.
function walk(o, f, n, s) {
   s = s || this;

   if (o) {
     if (n) {
       o = o[n];
     }

     each(o, function(o, i) {
       if (f.call(s, o, i, n) === false) {
         return false;
       }

       walk(o, f, n, s);
     });
   }
 } Tools.js:384
[\PgmWEB\tinyMCE\tinymceDev407\js\tinymce\classes\util\Tools.js +line:384]

tmce'code.COMMAND

name::
* McsEngl.tmce'code.COMMAND@cptIt,
* McsEngl.tmce'command@cptIt,

_DESCRIPTION:
// Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample');
 editor.addCommand('mceAutoResize', resize);
[\PgmWEB\tinyMCE\tinymce401Dev\js\tinymce\plugins\autoresize\plugin.js]

_SPECIFIC:
Bold
Bold
Copy
Cut
FontName
FontName
FontSize
FontSize
ForeColor
FormatBlock
HiliteColor
Indent
InsertHorizontalRule
InsertOrderedList
InsertOrderedList
InsertUnorderedList
InsertUnorderedList
Italic
Italic
JustifyCenter
JustifyCenter
JustifyFull
JustifyFull
JustifyLeft
JustifyLeft
JustifyRight
JustifyRight
Outdent
Outdent
Paste
Redo
RemoveFormat
Strikethrough
Strikethrough
Subscript
Subscript
Superscript
Superscript
Underline
Underline
Undo
mceAddUndoLevel
mceBeginUndoLevel
mceBlockQuote
mceBlockQuote
mceCleanup
mceEndUndoLevel
mceInsertContent
mceInsertLink
mceInsertRawHTML
mceNewDocument
mceRemoveNode
mceRepaint
mceReplaceContent
mceResetDesignMode
mceSelectNode
mceSelectNodeDepth
mceSetContent
mceToggleFormat
mceToggleVisualAid
selectAll
unlink

tmce'cmd.mce:

tmce'cmd.mceAddEditor:
tinymce.execCommand('mceAddEditor', false, 'elm1')

tmce'cmd.mceAddEditor:
tinymce.execCommand('mceAddEditor', false, 'idEditor');

tmce'cmd.mceInsertContent:
setTimeout("tinymce.execCommand('mceInsertContent',false,'<b>Hello world!!</b> ')", 222);

tmce'cmd.mceInsertLink:
mceInsertLink: function(command, ui, value)

tmce'cmd.mceNewDocument:
editor.setContent('');

tmce'cmd.mcePreview:

tmce'cmd.mceReplaceContent:
mceReplaceContent: function(command, ui, value)

tmce'cmd.Redo:
editor.undoManager.redo();

tmce'cmd.selectAll:

tmce'cmd.Undo:
editor.undoManager.undo();

tmce'cmd'creating

name::
* McsEngl.tmce'cmd'creating@cptIt,
* McsEngl.tmce'addCommand@cptIt,
* McsEngl.tmce'cmd'registering@cptIt,

_CODE.TMCE:
editor.addCommand('InsertHorizontalRule', function() {
 editor.execCommand('mceInsertContent', false, '<hr />');
});
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\plugins\hr\plugin.js]
===
 editor.addCommand('mceFullPageProperties', showDialog);

tmce'code.CONTENT

name::
* McsEngl.tmce'code.CONTENT@cptIt,
* McsEngl.tmce'content@cptIt,

tmce'option.protect:
This configuration option enables you to control what contents should be protected from editing while it gets passed into the editor. This could for example be control codes in the HTML. It's recommended not to use inline control contents since it breaks the wisiwyg editing concept but sometimes they can't be avoided.

The option takes an array of regexps that it will match the contents against and these will be invisible while editing.

Example of usage:
tinymce.init({
protect: [
/\<\/?(if|endif)\>/g, // Protect <if> & </endif>
/\<xsl\:[^>]+\>/g, // Protect <xsl:...>
/<\?php.*?\?>/g // Protect php code
]
});
[http://www.tinymce.com/wiki.php/Configuration:protect]

tmce'code.content.EDITING

name::
* McsEngl.tmce'code.content.EDITING@cptIt,
* McsEngl.tmce'editing-content@cptIt,

_TOOLBAR_ITEM.TMCE:
cut copy paste undo redo

tmce'code.content.GETTING

name::
* McsEngl.tmce'code.content.GETTING@cptIt,

_ADDRESS.WPG:
* http://fiddle.tinymce.com/e5caab,

tmce'code.content.INSERTING

name::
* McsEngl.tmce'code.content.INSERTING@cptIt,
* McsEngl.tmce'content.inserting@cptIt,
* McsEngl.tmce'inserting-content-code@cptIt,

_CODE.TMCE:
editor.execCommand('mceInsertContent', false, '<hr />');
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\plugins\hr\plugin.js]
===
setup: function (ed) {
// make sure the instance of the TinyMCE editor has been fully loaded
ed.on('init', function (args) {
// find the iframe which relates to this instance of the editor
var iframe = $("#" + args.target.id + "_ifr");
// get the head element of the iframe's document and inject the javascript
$(iframe[0].contentWindow.document).children('html')
.children('body').append('TEXT');
});
},
[http://stackoverflow.com/questions/3033206/inject-javascript-into-iframe-generated-by-tinymce-yui/18588469#18588469]

_SPECIFIC:
* hr##
* image##
* link##

tmce'code.INSERT-NONBREAKING-SPACE

name::
* McsEngl.tmce'code.INSERT-NONBREAKING-SPACE@cptIt,
* McsEngl.tmce'insert-nonbreaking-space@cptIt,

_MENUBAR.TMCE:
* insert/Nonbreaking space

_MENUITEM.TMCE:
* nonbreaking

_TOOLITEM.TMCE:
* nonbreaking

tmce'plugin.nonbreaking

name::
* McsEngl.tmce'plugin.nonbreaking@cptIt,
* McsEngl.tmce'nonbreaking-plugin@cptIt,

_DESCRIPTION:
This plugin adds a button for inserting nonbreaking space entities   at the current caret location.

Plugin options
Name  Summary
[tmce'option.nonbreaking_force_tab]  This enables you to force TinyMCE to insert three   entities when the user presses the tab key.

Initialization Example
tinymce.init({
plugins: "nonbreaking",
toolbar: "nonbreaking",
nonbreaking_force_tab: true
});
[http://www.tinymce.com/wiki.php/Plugin:nonbreaking]

tmce'code.content.HR

name::
* McsEngl.tmce'code.content.HR@cptIt,
* McsEngl.tmce'horizontal-ruler@cptIt,
* McsEngl.tmce'hr-code@cptIt,

_DESCRIPTION:
inserts the html-element '<hr />' at cursor.
===
This plugin adds a menu item and button control that allows you to insert a horizontal ruler on page.

Initialization Example
tinymce.init({
plugins: "hr"
});
[http://www.tinymce.com/wiki.php/Plugin:hr]

_MENUBAR_ITEM:
* tmce'control.hr.mentubar (hr_plugin):

_TOOLBAR_ITEM:
* tmce'control.hr.toolbar (hr_plugin):

_PLUGIN:
* tmce'plugin.hr:
* \PgmWEB\tinyMCE\tinymceDev\js\tinymce\plugins\hr\plugin.js,

tmce'code.content.IMAGE

name::
* McsEngl.tmce'code.content.IMAGE@cptIt,
* McsEngl.tmce'image-code@cptIt,

tmce'code.content.LINK

name::
* McsEngl.tmce'code.content.LINK@cptIt,
* McsEngl.tmce'link-code@cptIt,

tmce'code.content.URL

name::
* McsEngl.tmce'code.content.URL@cptIt,
* McsEngl.tmce'url@cptIt,

_OPTION.TINYMCE:
* tmce'option.relative_urls
* tmce'option.remove_script_host
* tmce'option.document_base_url

_DESCRIPTION:
Q: How do I convert my URLs to relative, absolute, or absolute with domain?

Relative URLs

This will convert all URLs within the same domain to relative URLs. The URLs will be relative from the document_base_url.

relative_urls : true,
document_base_url : "http://www.site.com/path1/"
Example: http://www.site.com/path1/path2/file.htm >> path2/file.htm

Absolute URLs

This will convert all relative URLs to absolute URLs. The URLs will be absolute based on the document_base_url.

relative_urls : false,
remove_script_host : true,
document_base_url : "http://www.site.com/path1/"
Example: path2/file.htm >> /path1/path2/file.htm

Domain Absolute URLs

This will convert all relative URLs to absolute URLs. The URLs will be absolute based on the document_base_url with domain.

relative_urls : false,
remove_script_host : false,
document_base_url : "http://www.site.com/path1/"
Example: path2/file.htm >> http://www.site.com/path1/path2/file.htm
[http://www.tinymce.com/wiki.php/FAQ]

tmce'code.content.LIST

name::
* McsEngl.tmce'code.content.LIST@cptIt,
* McsEngl.tmce'list@cptIt,

_TOOLBAR_ITEM:
bullist numlist

tmce'code.content.OUTPUTING

name::
* McsEngl.tmce'code.content.OUTPUTING@cptIt,
* McsEngl.tmce'content.outputing@cptIt,

_OPTION:
* tmce'option.schema:
* tmce'schema_option:
* html5
* html5-strict
* html4
===
The schema option enables you to switch between the HTML4 and HTML5 schema. This controls the valid elements and attributes that can be placed in the HTML. This value can either be the default html5, html4 or html5-strict.

Example of usage
tinymce.init({
...
schema: "html5"
});
[http://www.tinymce.com/wiki.php/Configuration:schema]
===
* tmce'option.element_format:
* tmce'element_format:
This option enables control if elements should be in html or xhtml mode. xhtml is the default state for this option. This means that for example <br /> will be <br> if you set this option to "html".

// Output elements in HTML style
tinymce.init({
...
element_format : "html"
});
[http://www.tinymce.com/wiki.php/Configuration:element_format]

===
* tmce'option.entities:
* tmce'entities_option:
This option contains a comma separated list of entity names that is used instead of characters. Odd items are the character code and even items are the name of the character code. Part of the default value of this option is placed in the example below.

The base entities < > & ' and " will always be entity encoded into their named equivalents. Though ' and " will only be encoded within attribute values and < > will only be encoded within text nodes. This is correct according too the HTML and XML specs.

Example of usage of the entities option / default value:

tinyMCE.init({
...
entities : "160,nbsp,38,amp,34,quot,162,cent,8364,euro,163,pound,165,yen,169,copy,174,reg,8482,trade,8240,permil,60,lt,62,gt,8804,le,8805,ge,176,deg,8722,minus"
});
[http://www.tinymce.com/wiki.php/Configuration3x:entities]

===
* tmce'option.entity_encoding:
* tmce'entity_encoding:
This option controls how entities/characters get processed by TinyMCE. The value can be set as shown in Encoding Types below. You can also mix named and numeric by setting this to "named+numeric" this way it will produce entity names of the ones found in the configured entities and numeric entities for other entities.
The base entities < > & ' and " will always be entity encoded into their named equivalents. Though ' and " will only be encoded within attribute values and < > will only be encoded within text nodes. This is correct according too the HTML and XML specs.

Encoding Types
Name  Summary
* named  Characters will be converted into named entities based on the entities option. For example, a non-breaking space could be encoded as  .
* numeric  Characters will be converted into numeric entities. For example, a non-breaking space would be encoded as  .
* raw  All characters will be stored in non-entity form except these XML default entities: & < > "
tinymce.init({
...
entity_encoding : "raw"
});
[http://www.tinymce.com/wiki.php/Configuration:entity_encoding]

tmce'code.content.SPELLING

name::
* McsEngl.tmce'code.content.SPELLING@cptIt,
* McsEngl.tmce'spelling@cptIt,

* tmce'option.browser_spellcheck
This is a true/false value if the usage of the browsers internal spellchecker should be used.

tinymce.init({
...
browser_spellcheck : true
});
Default value is false.
[http://www.tinymce.com/wiki.php/Configuration:browser_spellcheck]

tmce'plugin.spellchecker-php

name::
* McsEngl.tmce'plugin.spellchecker-php@cptIt,
* McsEngl.tmce'spellchecer-php-plugin@cptIt,

_ADDRESS.WPG:
* https://github.com/tinymce/tinymce_spellchecker_php//

tmce'code.content.STYLING

name::
* McsEngl.tmce'code.content.STYLING@cptIt,
* McsEngl.tmce'content.styling@cptIt,
* McsEngl.tmce'format-code@cptIt,
* McsEngl.tmce'styling-code@cptIt,

_TOOLBAR_ITEM.TMCE:
bold italic underline strikethrough subscript superscript
alignleft aligncenter alignright alignjustify
styleselect formatselect fontselect fontsizeselect
outdent indent
blockquote removeformat

tmce'blockquote-htmlelement

name::
* McsEngl.tmce'blockquote-htmlelement@cptIt,

tmce'code.content.TABLE

name::
* McsEngl.tmce'code.content.TABLE@cptIt,
* McsEngl.tmce'table-code@cptIt,

tmce'option.visual:
This true/false option gives you the ability to turn on/off the visual aid for borderless tables. If the border of a table is set to "0", then TinyMCE adds a dotted line around the table by default.

Example of usage of the visual option:

tinymce.init({
...
visual: false
});
[http://www.tinymce.com/wiki.php/Configuration:visual]

tmce'code.content.VALIDATING

name::
* McsEngl.tmce'code.content.VALIDATING@cptIt,
* McsEngl.tmce'content.validating@cptIt,
* McsEngl.tmce'validating-code@cptIt,

_OPTION:
* tmce'option.valid_children:
The valid_children enables you to control what child elements can exists within what parent elements. TinyMCE will remove/split any non HTML transitional contents by default. So for example a P can't be a child of another P element.

The syntax for this option is a comma separated list of parents with elements that should be added/removed as valid children for that element. So for example "+body[style]" would add style as a valid child of body.

Control characters:

Name  Summary
+  Adds children to the list of valid elements for the specified parent.
-  Removes children from the list of valid children for the specified parent.
This example shows you how to add style as a valid child of body and remove div as a valid child. It also forces only strong and a and text contents to be valid children of P.

tinymce.init({
...
valid_children : "+body[style],-body[div],p[strong|a|#text]"
});
This is an option you shouldn't have to fiddle with, the default ruleset for this follows the HTML5 specification.
[http://www.tinymce.com/wiki.php/Configuration:valid_children]

tmce'option.valid_elements:
The valid_elements option defines which elements will remain in the edited text when the editor saves. You can use this to limit the returned HTML to a subset.

This option contains a comma separated list of element conversion chunks. Each chunk contains information about how one element and its attributes should be treated. The default rule set for this option is specified below.

If you just want to add or change some behaviour for a few items, use the extended_valid_elements option
[http://www.tinymce.com/wiki.php/Configuration:valid_elements]

tmce'option.valid_styles:
This option enables you specify the available styles for each element. This means you can force ordering and only specific styles to be valid within style attribute values. Specify the element name, then it's styles or * for all elements.

Example of usage of the auto_focus option:

tinymce.init({
...
valid_styles: {
"*": "border,font-size",
"div": "width,height"
}
});
[http://www.tinymce.com/wiki.php/Configuration:valid_styles]

tmce'code.FILE-MANAGING

name::
* McsEngl.tmce'code.FILE-MANAGING@cptIt,
* McsEngl.tmce'file-browser@cptIt,

_ADDRESS.WPG:
* http://www.whiletrue.it/how-to-implement-a-custom-file-manager-in-tinymce-4/
* http://www.tinymce.com/wiki.php/TinyMCE3x:How-to_ implement_a_custom_file_browser,
* Replacement for tinyMCEPopup in 4.0b1?
- http://www.tinymce.com/forum/viewtopic.php?pid=107526,
* http://stackoverflow.com/questions/19244558/ajaxfilemanager-for-tinymce-4-x?rq=1,

_OPTION:
* tmce'option.file_browser_callback,
* tmce'file_browser_callback:
This option enables you to add your own file browser/image browser to TinyMCE. If this option is set with a value a browse button will appear in different dialogues such as "insert/edit link" or "insert/edit image". If this option hasn't got a value set (or equals to false or null) the dialogues in question won't show any browse button.

This function is executed each time a user clicks on the "browse" buttons in various dialogues. The format of this callback function is: fileBrowser(field_name, url, type, win) where field_name is the id/name of the form element that the browser should insert its URL into. The url parameter contains the URL value that is currently inside the field. The type parameter contains what type of browser to present; this value can be file, image or flash depending on what dialogue is calling the function. The win parameter contains a reference to the dialog/window that executes the function.

Example of usage of the file_browser_callback option:

tinymce.init({
...
file_browser_callback: function(field_name, url, type, win) {
win.document.getElementById(field_name).value = 'my browser value';
}
});
[http://www.tinymce.com/wiki.php/Configuration:file_browser_callback]

tmce'elFinder

name::
* McsEngl.tmce'elFinder@cptIt,
* McsEngl.tmce'integrating.elFinder@cptIt,

_ADDRESS.WPG:
- http://www.tinymce.com/wiki.php/Tutorials:Creating_custom_dialogs,
- http://www.tinymce.com/forum/viewtopic.php?pid=108477#p108477,
* https://github.com/Studio-42/elFinder/wiki/Integration-with-TinyMCE-4.x,
* http://stackoverflow.com/questions/16016870/tinymce-4-with-elfinder,
* http://www.tinymce.com/forum/viewtopic.php?id=31053,
* http://www.tinymce.com/forum/viewtopic.php?id=26653,
* https://github.com/Studio-42/elFinder/issues/378,
* https://github.com/Studio-42/elFinder/wiki/Integration-with-TinyMCE-3.x,
* http://elrte.org/redmine/boards/2/topics/3335,

tmce'elFinder-dialog

name::
* McsEngl.tmce'elFinder-dialog@cptIt,

_DESCRIPTION:
Open a dialog with elfinder, when want to find an address.

tinymce.init()
file_browser_callback: function (field_name, url, type, win) {
tinymce.activeEditor.windowManager.open({
url: 'http://localhost/efr/efrTmce/elfinder.tmce.html',// use an absolute path!
title: 'elFinder 2.x',
width: 900,
height: 450,
resizable: 'yes'
}, {
oninsert: function(url) {
win.document.getElementById(field_name).value = url;
}
});
return false;
}
[]

tmce'elFinder-plugin

name::
* McsEngl.tmce'elFinder-plugin@cptIt,
* McsEngl.tmce'plugin.elfinder@cptIt,

plugin.js:
tinymce.PluginManager.add('elfinder', function(editor) {

function showDialog() {
 var url = "http://synagonism.net/program/elfinderEl/elfndrEl.html";
var frame = editor.windowManager.open({
title: 'elFinder 2.0.2',
url: url,
height:600,
width:900,
onclose: function(){
var parentWin = (!window.frameElement && window.dialogArguments) || opener || parent || top;
var parentEditor = parentWin.my_namespace_activeEditor;
parentEditor.execCommand('mceInsertRawHTML', false, 'Lorem Ipsum');
}
});

window.my_namespace_activeEditor = editor;
window.my_namespace_activeFrame = frame;
}

editor.addButton('elfinder', {
icon: 'browse',
tooltip: 'elFinder',
onclick: showDialog
});

editor.settings.file_browser_callback = function (field_name, url, type, win) {
 var url = "http://synagonism.net/program/elfinderEl/elfndrEl.html";
var frame = editor.windowManager.open({
title: 'My-File-Manager.elFinder',
url: url,
height:600,
width:900,
onclose: function(){
// Whatever you want
}
 });

window.my_namespace_activeEditor = editor;
window.my_namespace_activeFrame = frame;
window.my_namespace_activeInput = field_name;

return false;
}

function buttonClick() {
var parentWin = (!window.frameElement && window.dialogArguments) || opener || parent || top;
var parentEditor = parentWin.my_namespace_activeEditor;
parentEditor.execCommand('mceInsertRawHTML', false, 'Lorem Ipsum');
}

});

tmce'FileManager4TinyMCE

name::
* McsEngl.tmce'FileManager4TinyMCE@cptIt,

_ADDRESS.WPG:
* https://github.com/2b3ez/FileManager4TinyMCE,
- http://test.albertoperipolli.com/filemanager4tinymce//

_problem: does not show the files. (I renamed to fm, now does not work)

Installation
1. Upload each folder plugins (image, link, media and filemanager) to tinymce plugins folder (lang file is optional)
2. open filemanager/config.php and set your configurations like base_url, upload_dir, type extensions allowed , max file size, permits… and other specifications. save file.
3. create folder where upload files and give write permits.
4. your work is finish!!! settings of tinymce should be like : (remember to add filemanager in plugins list)

tmce'Mad-File-Manager for TinyMCE Alpha

name::
* McsEngl.tmce'Mad-File-Manager for TinyMCE Alpha@cptIt,

_ADDRESS.WPG:
* http://sourceforge.net/projects/tinyfilemanager//

tmce'MCFileManager

name::
* McsEngl.tmce'MCFileManager@cptIt,
* McsEngl.Moxiecode-FileManager@cptIt,

_ADDRESS.WPG:
* http://www.tinymce.com/wiki.php/MCFileManager,

_DESCRIPTION:
The MCFileManager is a online file management utility, available as PHP and .NET, that is seamlessly integrated with TinyMCE or other similar editors. This utility can also be used standalone and it's easy to integrate with your backend system. MCFileManager also integrates nicely with MCImageManager forming a complete set of file and image management functionality.
[http://www.tinymce.com/wiki.php/MCFileManager]

tmce'code.HTML

name::
* McsEngl.tmce'code.HTML@cptIt,
* McsEngl.tmce'html-code@cptIt,

tmce'code.HTML-ELEMENT

name::
* McsEngl.tmce'code.HTML-ELEMENT@cptIt,
* McsEngl.tmce'element.html@cptIt,
* McsEngl.tmce'helt@cptIt, {2013-11-10}
* McsEngl.tmce'html-element@cptIt,
* McsEngl.tmce'helt@cptIt,
* McsEngl.tmce'htmlelt@cptIt,

tmce'helt'attribute

name::
* McsEngl.tmce'helt'attribute@cptIt,

tmce'helt'attribute.ROLE:
role="button"
role="option"
role="presentation"

tmce'helt'creating

name::
* McsEngl.tmce'helt'creating@cptIt,
* McsEngl.tmce'createHTML@cptIt,

_DESCRIPTION:
public function createHTML(name:String, attrs:Object, html:String):String
Creates HTML string for element. The element will be closed unless an empty inner HTML string is passed in.
Examples

// Creates a html chunk and inserts it at the current selection/caret location
tinymce.activeEditor.selection.setContent(tinymce.activeEditor.dom.createHTML('a', {href: 'test.html'}, 'some line'));
Params

Name  Type  Description
name   String  Name of new element.
attrs   Object  Optional object name/value collection with element attributes.
html   String  Optional HTML string to set as inner HTML of the element.
Returns

String String with new HTML element, for example: <a href="#">test</a>.
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\classes\EnterKey.js]

_CODE.TMCE:
editor.dom.createHTML('a', {
         id: e.data.name,
         class: e.data.class
       });
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\plugins\anchor\plugin.js]

tmce'helt'converting

name::
* McsEngl.tmce'helt'converting@cptIt,
* McsEngl.tmce'converting-elements@cptIt,
* McsEngl.tmce'substituting-elements@cptIt,

_CODE:
//converts b-elt to strong-elt,
tinyMCE.init({
...
valid_elements : "strong/b"
});

tmce'helt'inserting#ql:tmce'content.inserting#

name::
* McsEngl.tmce'helt'inserting@cptIt,

tmce'helt'validating

name::
* McsEngl.tmce'helt'validating@cptIt,

_OPTION.TMCE:
* tmce'option.invalid_elements:
* tmce'invalid_elements:
===
This option should contain a comma separated list of element names to exclude from the content.

Elements in this list will be removed when TinyMCE executes a cleanup.

tinymce.init({
...
invalid_elements : "strong,em"
});
Caution: This option doesn't accept attributes in the list, only elements

Also see valid_elements and extended_valid_elements for more configuration options.
[http://www.tinymce.com/wiki.php/Configuration:invalid_elements]

_OPTION.TMCE:
* tmce'option.valid_elements:
* tmce'valid_elements:
===
valid_elementsEdit wiki pagePage revisionsPrint
The valid_elements option defines which elements will remain in the edited text when the editor saves. You can use this to limit the returned HTML to a subset.

This option contains a comma separated list of element conversion chunks. Each chunk contains information about how one element and its attributes should be treated. The default rule set for this option is specified below.

If you just want to add or change some behaviour for a few items, use the extended_valid_elements option

Control characters:

Name  Summary
@  
Rules with this name will be applied to all elements defined after this rule. So @[attr1|attr2] will enable attr1 and attr2 for all elements, but element1,@[attr1|attr2],element2,element3 will enable attr1 and attr2 only for element2 and element3.

If applied in extended_valid_elements, it is only effective for the elements in the extended_valid_elements list.

,  Separates element chunk definitions.
/  Separates element synonymous. The first element is the one that will be output.
|  Separates attribute definitions.
[  Starts a new attribute list for an element definition.
]  Ends an attribute list for an element definition.
!  Makes attributes required. If none of the required attributes are set, the element will be removed. For example, "!href".
=  Makes the attribute default to the specified value. For example, "target=_blank"
:  Forces the attribute to the specified value. For example, "border:0"
<  Verifies the value of an attribute (only the listed values are allowed). For example, "target<_blank?_self"
?  Separates attribute verification values. See above.
+  Makes the element open if no child nodes exists. For example, "+a".
-  Enables removal of empty elements such as <strong />. For example, "-strong".
#  Enables padding of empty elements. This will pad with   if they are empty. For example, "#p".
Wildcards such as *,+,? may be used in element or attribute name matching.

Special variables:

Name  Summary
{$uid}  Results in a unique ID. For example, "p[id:{$uid}]".
Use *[*] to include all elements and all attributes. This can be very useful when used with the invalid_elements option. Example of usage of the valid_elements option:

This example string tells TinyMCE to remove all elements that are not a "a, strong, div or br" element, convert "b" elements to "strong" elements, default "target" to "_blank" and keep the "href", "target" and "align" attributes of the elements.

tinyMCE.init({
...
valid_elements : "a[href|target=_blank],strong/b,div[align],br"
});
Duplicate Attribute Warning

Be careful not to duplicate attributes in the definitions as this may cause tinyMCE to render duplicate attributes in the output. For example, if you have

... //bad code: dir and style listed twice
"blockquote[dir|style|cite|class|dir<ltr?rtl|id|lang|onclick|ondblclick"
+"|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout"
+"|onmouseover|onmouseup|style|title]"
...
then if you happen to have a <blockquote> element in your code with style= or dir= attributes, the editor will cause each of those attributes to be duplicated in the output, which will result in invalid XHTML.
[http://www.tinymce.com/wiki.php/Configuration:valid_elements]

_OPTION.TMCE:
* tmce'option.extended_valid_elements:
* tmce'extended_valid_elements:
This option is very similar to valid_elements. The only difference between this option and valid_elements is that this one gets added to the existing rule set. This can be very useful if the existing rule set is fine but you want to add some specific elements that also should be valid.

When adding a new attribute by specifying an existing element rule (e.g. img), the entire rule for that element is over-ridden so be sure to include all valid attributes not just the one you wish to add. See valid_elements for default rules.

The below example replaces the current img rule (including the global element rules)

tinymce.init({
...
extended_valid_elements: "img[class|src|border=0|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name]"
});
Also see valid_elements and invalid_elements for more configuration options.
[http://www.tinymce.com/wiki.php/Configuration:extended_valid_elements]

tmce'code.ISSUES

name::
* McsEngl.tmce'code.ISSUES@cptIt,
* McsEngl.tmce'bugtracker@cptIt,
* McsEngl.tmce'issue@cptIt,
* McsEngl.tmce'problem@cptIt,
* McsEngl.tmce'tracker@cptIt,

_ADDRESS.WPG:
* http://www.tinymce.com/develop/bugtracker.php,

tmce'issue.BUG

name::
* McsEngl.tmce'issue.BUG@cptIt,
* McsEngl.tmce'bug@cptIt,
* McsEngl.tmce'code.bug@cptIt,

_ADDRESS.WPG:
* http://www.tinymce.com/develop/bugtracker_bugs.php,

_SPECIFIC:
* closed##
* open##
* verified##

tmce'issue.Control:
* function init:
- remove all related to 'classes' except 'todo'
- add before 'todo': self._classes = [];
[hmnSngo.2014-12-27]

tmce'issue.FEATURE

name::
* McsEngl.tmce'issue.FEATURE@cptIt,
* McsEngl.tmce'feature-request@cptIt,
* McsEngl.tmce'code.feature@cptIt,

tmce'issue.pgmHtml

name::
* McsEngl.tmce'issue.pgmHtml@cptIt,

_SPECIFIC:
* template description: {2014-10-13}

tmce'code.PULL-REQUEST

name::
* McsEngl.tmce'code.PULL-REQUEST@cptIt,
* McsEngl.tmce'pull-request@cptIt,

_ADDRESS.WPG:
* https://github.com/tinymce/tinymce/pulls,
* https://github.com/tinymce/tinymce/pull/250,

_MERGE:
You can merge this Pull Request by running
git pull https://github.com/qnub/tinymce patch-1

tmce'code.DIFF

name::
* McsEngl.tmce'code.DIFF@cptIt,

_ADDRESS.WPG:
* https://github.com/tinymce/tinymce/pull/250.diff,

tmce'code.PATCH

name::
* McsEngl.tmce'code.PATCH@cptIt,

_ADDRESS.WPG:
* https://github.com/tinymce/tinymce/pull/250.patch,

tmce'code.KEYBORD

name::
* McsEngl.tmce'code.KEYBORD@cptIt,
* McsEngl.tmce'key@cptIt,
* McsEngl.tmce'shortcut@cptIt,

_DESCRIPTION:
You must be on the editor element.

tmce'ctrl_a:
* tmce'key.select_all:
-

tmce'ctrl_b:
* tmce'key.bold:
- strong html elm.

tmce'ctrl_c:
* tmce'key.copy:
-

tmce'ctrl_d:
* tmce'key.copy:
- hknm

tmce'ctrl_f:
* tmce'key.find:
* find and replace

tmce'ctrl_i:
* tmce'key.italic:
- em html elm.

tmce'ctrl_k:
* tmce'key.link:
- insert link,

tmce'ctrl_n:
* tmce'key.new_doc:
- ,

tmce'ctrl_p:
* tmce'key.print:
- insert link,

tmce'ctrl_x:
* tmce'key.cut:
-

tmce'ctrl_y:
* tmce'key.redo:
-

tmce'ctrl_z:
* tmce'key.undo,
* tmce'shortcut.undo,

tmce'ctrl_alt_f:
* tmce'key.fullscreen:
* tmce'shortcut.fullscreen

tmce'ctrl_shift_z:
* tmce'key.redo:

tmce'addShortcut

name::
* McsEngl.tmce'addShortcut@cptIt,

_CODE.TMCE:
editor.addShortcut('ctrl+s', '', 'mceSave');
editor.addShortcut('ctrl+y,ctrl+shift+z', '', 'Redo');
editor.addShortcut('Ctrl+Alt+F', '', toggleFullscreen);

tmce'code.PLUGIN

name::
* McsEngl.tmce'code.PLUGIN@cptIt,
* McsEngl.tmce'plugin@cptIt,

_ADDRESS.WPG:
* http://www.tinymce.com/wiki.php/Plugins,
* http://www.tinymce.com/wiki.php/Tutorials:Creating_a_plugin,

tmce'plugin'configuring

name::
* McsEngl.tmce'plugin'configuring@cptIt,
* McsEngl.tmce'plugin'loading@cptIt,
* McsEngl.tmce'plugin'option@cptIt,
* McsEngl.tmce'option.plugins@cptIt,

tmce'plugins: [
 ["advlist autolink link image lists charmap print preview hr anchor pagebreak spellchecker"],
 ["searchreplace wordcount visualblocks visualchars code fullscreen insertdatetime media nonbreaking"],
 ["save table contextmenu directionality emoticons template paste"]
],
===
plugins: [
"advlist autolink link image lists charmap print preview hr anchor pagebreak spellchecker",
"searchreplace wordcount visualblocks visualchars code fullscreen insertdatetime media nonbreaking",
"save table contextmenu directionality emoticons template paste textcolor"
],

_LOAD_FROM_ANY_LOCATION:
//at script before init()
//also add name at plugins_option:
tinymce.PluginManager.load('elfinder', '/D:/File1a/tinyMCE401Dev/js/tinymce/plugins/elfinder/plugin.min.js');

* tmce'option.external_plugins
This option enables you to specify URLs to plugins outside the tinymce plugins directory. This option is useful when loading TinyMCE from a CDN or when you want to have the TinyMCE directory separate from your custom plugins.

Example

tinymce.init({
...
plugins: "image link",
external_plugins: {
"myplugin": "/myplugins/myplugin.js"
}
});
[http://www.tinymce.com/wiki.php/Configuration:external_plugins]
===
external_plugins: {
"htmlp": "/D:/File1a/tinymcePlugin/htmlp/plugin.js"
},
[\PgmWEB\tinyMCE\tinymceDev\tinymce.dev.html]

tmce'plugin'creating

name::
* McsEngl.tmce'plugin'creating@cptIt,

tinymce.oManagerPlugin.add('print', function(editor) {
//create a command
editor.addCommand('fCmdPrint', function() {
editor.getWin().print();
});

//add a toolbar button
editor.fEdrAddButton('print', {
title: 'Print',
cmd: 'fCmdPrint'
});

//create a shortct for the command
editor.addShortcut('Ctrl+P', '', 'fCmdPrint');

//add a menuitem
editor.addMenuItem('print', {
text: 'Print',
cmd: 'fCmdPrint',
icon: 'print',
shortcut: 'Ctrl+P',
context: 'file'
});
});

tmce'plugin'error

name::
* McsEngl.tmce'plugin'error@cptIt,
* McsEngl.tmce'error.plugin@cptIt,

eqneditor:
* destroys the saveAs command.

tmce'error.Failed_to_load: http://tinymce.cachefly.net/4.0/plugins/elfinder/plugin.min.js:
the plugin does not exist.

tmce'error.Failed_to_load_resource_file:
Failed to load resource file:///D:/File1a/tinyMCE401Dev/js/tinymce/plugins/mfm/plugin.js
Failed to load: file:///D:/File1a/tinyMCE401Dev/js/tinymce/plugins/mfm/plugin.js ScriptLoader.js:81
===>
plugin 'mfm' does not exists.

tmce'plugin'file-structure

name::
* McsEngl.tmce'plugin'file-structure@cptIt,

/tinymceroot/
* /js/
 * /tinymce/
   * /classes/
     * /dom/
     * /html/
     * /ui/
     * /util/
   * /langs/
   * /plugins/
     * /pluginfolder1/
       - plugin.js
       - plugin.min.js
     * /pluginfolder2/
   * /skins/
     * /lightgrey/
   * /themes/
     * /modern/
   - tinymce.js
   - tinymce.min.js
===
IF editor uses min.js THEN and the plugin uses the min.js file.

tmce'plugin'directory

name::
* McsEngl.tmce'plugin'directory@cptIt,
* McsEngl.tmce'directory.plugin@cptIt,
* McsEngl.tmce'plugin'file-location@cptIt,

1) in tinymceroot/js/tinymce/plugins/here/

2) anywhere, but add in editor.html:
You can also have the plugin in any location you want by loading the plugin.js/plugin.min.js files directrly after the tinymce.js/tinymce.min.js.
Example of loading the plugin from another url
<script src="/tinymce/js/tinymce.min.js"></script>
<script src="/scripts/my.tinymce.plugin.js"></script>
===
1) on editor.html:
- <script src="c:/public_html/tmceexample/plugin.js"></script>
- plugins: ["tmceexample"]
2) on plugin.js
- tinymce.PluginManager.add('tmceexample', function(editor, url) {

tmce'plugin'file.PLUGIN.JS

name::
* McsEngl.tmce'plugin'file.PLUGIN.JS@cptIt,
* McsEngl.tmce'plugin.js@cptIt,

_DESCRIPTION:
To create a plugin you need to create a directory in the tinymce plugins directory. TinyMCE will load the plugin.js file if you use the tinymce.js file in your page. If you use the tinymce.min.js file it will load the plugin.min.js file. It's recommended to use the tinymce.js file while developing then have a build script minifying the plugin.js into plugin.min.js for production usage.
[http://www.tinymce.com/wiki.php/Tutorials:Creating_a_plugin]

tmce'plugin'file.PLUGIN.MIN.JS

name::
* McsEngl.tmce'plugin'file.PLUGIN.MIN.JS@cptIt,
* McsEngl.tmce'plugin.min.js@cptIt,

_DESCRIPTION:
IF editor uses min.js THEN and the plugin uses the min.js file.

tmce'plugin'name

name::
* McsEngl.tmce'plugin'name@cptIt,

_DESCRIPTION:
The name must be the same with the directory in which resides:
js/tinymce/plugins/name/

file:plugin.js:
tinymce.PluginManager.add('NAME', function(editor, url) {

tinymce.init():
plugins: [ ["NAME advlist anchor autolink charmap code contextmenu directionality "]],
toolbar2: "NAME code | emoticons",

tmce'plugin'parameter

name::
* McsEngl.tmce'plugin'parameter@cptIt,

tinymce.oManagerPlugin.add('visualblocks', function(editor, url) {:
* editor: is the tinymce.oEditorActive
* url: is the directory the plugin resides.

SPECIFIC

name::
* McsEngl.tmce'plugin.specific@cptIt,

_SPECIFIC:
* advlist
* anchor
* autolink
* autoresize
* autosave
* bbcode
* charmap
* code
* compat3x
* contextmenu
* directionality
* emoticons
* filemanager
* fullpage
* fullscreen
* hr
* image
* insertdatetime
* layer
* legacyoutput
* link
* lists
* media
* nonbreaking
* noneditable
* pagebreak
* paste
* preview
* print
* save
* searchreplace
* spellchecker
* tabfocus
* table
* template
* textcolor
* visualblocks
* visualchars
* wordcount

tmce'plugin.advlist

name::
* McsEngl.tmce'plugin.advlist@cptIt,
* McsEngl.tmce'advlist-plugin@cptIt,

_DESCRIPTION:
Creates the bullet and number list BUTTONS.
===
This plugin adds more advanced options to the ordered and unordered list buttons.
[http://www.tinymce.com/wiki.php/Plugin:advlist]

tmce'plugin.anchor

name::
* McsEngl.tmce'plugin.anchor@cptIt,
* McsEngl.tmce'anchor-plugin@cptIt,

_DESCRIPTION:
Inserts <a id="name" class="class-name"></a> on carret, NOT AT BLANK LINE.

tmce'plugin.autolink

name::
* McsEngl.tmce'plugin.autolink@cptIt,
* McsEngl.tmce'autolink-plugin@cptIt,

_DESCRIPTION:
Creates links automatically when we type 'www.xxx.com'
[http://www.tinymce.com/wiki.php/plugin:autolink]

tmce'plugin.autoresize

name::
* McsEngl.tmce'plugin.autoresize@cptIt,
* McsEngl.tmce'autoresize-plugin@cptIt,

_DESCRIPTION:
* This plugin automatically resizes the content area to fit its content height.
* It will retain a minimum height, which is the height of the content area when
* it's initialized.

tmce'plugin.autosave

name::
* McsEngl.tmce'plugin.autosave@cptIt,
* McsEngl.tmce'autosave-plugin@cptIt,

_DESCRIPTION:
Add on file-menu, 'restore last draft' menuitem.

tmce'plugin.4.0

name::
* McsEngl.tmce'plugin.4.0@cptIt,

_SPECIFIC:
Removed plugins
These plugins where removed in 4.0: advhr, advimage, advlink, iespell, inlinepopups, style, emotions and xhtmlxtras.

New plugins
These are the new plugins in 4.0: anchor, charmap, compat3x, hr, image, link, emoticons, code and textcolor.
[http://www.tinymce.com/wiki.php/Tutorial:Migration_guide_from_3.x]

tmce'plugin.bbcode

name::
* McsEngl.tmce'plugin.bbcode@cptIt,
* McsEngl.tmce'bbcode-plugin@cptIt,

_DESCRIPTION:
holds the source in bbcode format.

tmce'plugin.charmap

name::
* McsEngl.tmce'plugin.charmap@cptIt,
* McsEngl.tmce'charmap-plugin@cptIt,

_DESCRIPTION:
Inserts special-characters.

tmce'plugin.code

name::
* McsEngl.tmce'plugin.code@cptIt,
* McsEngl.tmce'code-plugin@cptIt,

_DESCRIPTION:
displays the source html code.

tmce'plugin.codemagic

name::
* McsEngl.tmce'plugin.codemagic@cptIt,

_ADDRESS.WPG:
* https://github.com/tinymce-plugins/codemagic,
* http://tinymcesupport.com/premium-plugins/code-magic,

tmce'plugin.codemirror

name::
* McsEngl.tmce'plugin.codemirror@cptIt,

_ADDRESS.WPG:
* http://www.avoid.org/codemirror-for-tinymce4//

_DESCRIPTION:
Needs chrome to run on 'chrome.exe --allow-file-access-from-files'

tmce'plugin.improvedcode

name::
* McsEngl.tmce'plugin.improvedcode@cptIt,

_ADDRESS.WPG:
* https://github.com/aguvillalba/improvedcode,

tmce'plugin.emoticons

name::
* McsEngl.tmce'plugin.emoticons@cptIt,
* McsEngl.tmce'emoticons-plugin@cptIt,

_DESCRIPTION:
inserts emotions.

tmce'plugin.EQUATION-EDITOR

name::
* McsEngl.tmce'plugin.EQUATION-EDITOR@cptIt,
* McsEngl.tmce'eqneditor-plugin@cptIt,
* McsEngl.tmce'plugin.eqneditor@cptIt,

_ADDRESS.WPG:
* http://www.codecogs.com/latex/integration/tinymce_v4/install.php,

_DESCRIPTION:
Inserts equations as ONLINE images from codecogs.

_PROBELM.TMCE:
I increased timeout from 111 to 555 in order to work.

tmce'plugin.fullpage

name::
* McsEngl.tmce'plugin.fullpage@cptIt,
* McsEngl.tmce'fullpage-plugin@cptIt,

_DESCRIPTION:
This plugin adds fullpage editing support. This enables you to edit whole documents with both head and body.
[http://www.tinymce.com/wiki.php/Plugin:fullpage]
===
* support full page html and not for one element in it.

_USAGE:
tinymce.init({
plugins: "fullpage",
toolbar: "fullpage"
});

_OPTION:
Plugin options
Name  Summary
[tmce'fullpage_default_doctype]  This option enables you to specify the default doctype for the output HTML.
[tmce'fullpage_default_encoding]  This option enables you to specify the default encoding for the output HTML.
[tmce'fullpage_default_title]  This option enables you to specify the default title for the output HTML.
[tmce'fullpage_default_font_size]  This option enables you to specify the default font size for body element.
[tmce'fullpage_default_font_family]  This option enables you to specify the default font family for body element.
[tmce'fullpage_default_text_color]  This option enables you to specify the default text color for body element.
[tmce'fullpage_default_langcode]  This option enables you to specify the default langcode for the output HTML.
[tmce'fullpage_default_xml_pi]  This option enables you to specify if a XML declaration should be added or not true/false option.
tmce'fullpage_hide_in_source_view  Hides the non body content from source view.

tmce'plugin.fullscreen

name::
* McsEngl.tmce'plugin.fullscreen@cptIt,
* McsEngl.tmce'fullscreen@cptIt,
* McsEngl.tmce'fullscreen-plugin@cptIt,
* McsEngl.tmce'code.fullscreen@cptIt,

_CODE.TMCE:
int():
init_instance_callback: function (editor) {
setTimeout("tinymce.activeEditor.execCommand('mceFullScreen')", 100);
}
[stackoverflow]

tmce'plugin.GENERIC

name::
* McsEngl.tmce'plugin.GENERIC@cptIt,

tmce'plugin.generic.CONTENT.HTML

name::
* McsEngl.tmce'plugin.generic.CONTENT.HTML@cptIt,

_SPECIFIC:
* legacyoutput, outputs font, b, ##

tmce'plugin.generic.CONTENT.INSERT

name::
* McsEngl.tmce'plugin.generic.CONTENT.INSERT@cptIt,
* McsEngl.tmce'insert-content-plugin@cptIt,

_SPECIFIC:
* charmap, inserts special characters##
* emoticons,##
* example, inserts a paragraph with 'Title: ' prefix##
* hr,##
* image,##
* insertdatetime##
* link##
* pagebreak, inserts paragraph##

tmce'plugin.generic.CONTENT.STYLE

name::
* McsEngl.tmce'plugin.generic.CONTENT.STYLE@cptIt,

_SPECIFIC:

tmce'plugin.generic.USER-INTERFACE

name::
* McsEngl.tmce'plugin.generic.USER-INTERFACE@cptIt,

_SPECIFIC:
* visualblocks, shows blocks##

tmce'plugin.image

name::
* McsEngl.tmce'plugin.image@cptIt,
* McsEngl.tmce'image-plugin@cptIt,

_DESCRIPTION:
This plugin adds a insert image button and menu item.

Initialization Example
tinymce.init({
plugins: "image",
image_list: [
{title: 'My image 1', value: 'http://www.tinymce.com/my1.gif'},
{title: 'My image 2', value: 'http://www.moxiecode.com/my2.gif'}
]
});

Plugin options
Name  Summary
tmce'image_list  Array with items to add to a list with images. Each item having "title" and "value".
tmce'image_advtab  True/false option if the advanced tab should be displayed or not.
[http://www.tinymce.com/wiki.php/Plugin:image]

tmce'plugin.insertdatetime

name::
* McsEngl.tmce'plugin.insertdatetime@cptIt,
* McsEngl.tmce'insertdatetime-plugin@cptIt,
* McsEngl.tmce'date@cptIt,
* McsEngl.tmce'time@cptIt,

_DESCRIPTION:
* I customized the code to insert "2013-06-28".

insertdatetimeEdit wiki pagePage revisionsPrint
Initialization Example

tinymce.init({
plugins: "insertdatetime",
toolbar: "insertdate inserttime",
plugin_insertdate_dateFormat: "%Y-%m-%d",
plugin_insertdate_timeFormat: "%H:%M:%S"
});


Plugin options
Name  Summary
tmce'plugin_insertdate_dateFormat  Format that the date is output as. Defaults to: "%Y-%m-%d".
tmce'plugin_insertdate_timeFormat  Format that the time is output as. Defaults to: "%H:%M:%S".

Replacement variables
Name  Summary
%D  mm/dd/yy (same as %m/%d/%y)
%r  12-hour clock time hh:mm:ss with AM or PM (same as %I:%M:%S %p)
%y  year as a decimal number without a century (range 00 to 99)
%Y  year as a decimal number including the century
%m  month as a decimal number (range 01 to 12)
%B  full localised month name (e.g. "January")
%b  abbreviated localised month name (e.g. "Jan")
%d  day of the month as a decimal number (range 01 to 31)
%A  full localised weekday name (e.g. "Monday")
%a  abbreviated localised weekday name (e.g. "Mon")
%H  hour as a decimal number using a 24-hour clock (range 00 to 23)
%I  hour as a decimal number using a 12-hour clock (range 01 to 12)
%M  minute as a decimal number (range 00-59)
%S  second as a decimal number (range 00-59)
%p  either "am" or "pm" according to the given time value
%%  a literal "%" character
[http://www.tinymce.com/wiki.php/Plugin:insertdatetime]

tmce'plugin.link

name::
* McsEngl.tmce'plugin.link@cptIt,
* McsEngl.tmce'link-plugin@cptIt,

This plugin adds a menu item and button that enables you to insert links to text and images.

Initialization Example

tinymce.init({
plugins: "link",
link_list: [
{title: 'My page 1', value: 'http://www.tinymce.com'},
{title: 'My page 2', value: 'http://www.moxiecode.com'}
]
});
Plugin options

Name  Summary
link_list  Array with items to add to a list with links. Each item having "title" and "value".
target_list  Array with items to add to a list with targets. Each item having "title" and "value".
rel_list  Array with items to add to a list with rel options. Each item having "title" and "value".
[http://www.tinymce.com/wiki.php/Plugin:link]

tmce'plugin.lists

name::
* McsEngl.tmce'plugin.lists@cptIt,
* McsEngl.tmce'lists-plugin@cptIt,

_DESCRIPTION:
ol, ul, management. Add commands insert list ...

tmce'plugin.media

name::
* McsEngl.tmce'plugin.media@cptIt,
* McsEngl.tmce'media-plugin@cptIt,

_DESCRIPTION:
'insert video' menuitem.

tmce'plugin.pagebreak

name::
* McsEngl.tmce'plugin.pagebreak@cptIt,
* McsEngl.tmce'pagebreak-plugin@cptIt,

_DESCRIPTION:
Adds pagebreak support, some CMS systems uses a special separator to break the contents into pages. This plugin enables you to insert such page breaks in the editor.

Initialization Example
tinymce.init({
plugins: "pagebreak",
pagebreak_separator: "<!-- my page break -->"
});
[pagebreak_separator]  Enables you to specify how the page break should be generated in the HTML source code.
[http://www.tinymce.com/wiki.php/Plugin:pagebreak]

_OPTION:
* tmce'option.pagebreak_separator
[pagebreak_separator]  Enables you to specify how the page break should be generated in the HTML source code.
===
inserts a p-element with content the value of this variable.
[hmnSngo.2013-10-05]

_FILE:
* \PgmWEB\tinyMCE\tinymce407Dev\js\tinymce\plugins\pagebreak\plugin.js,

tmce'plugin.preview

name::
* McsEngl.tmce'plugin.preview@cptIt,
* McsEngl.tmce'preview-plugin@cptIt,

_DESCRIPTION:
Opens a non editable window with the content of the page.

tmce'plugin.save

name::
* McsEngl.tmce'plugin.save@cptIt,
* McsEngl.tmce'save-plugin@cptIt,

_ADDRESS.WPG:
* http://www.tinymce.com/forum/viewtopic.php?id=11281,
* http://stackoverflow.com/questions/13660978/saving-tinymce-textarea-content-to-file,
* http://stackoverflow.com/questions/15772441/tinymce-implementation-with-php?rq=1,
* http://stackoverflow.com/questions/5430543/trying-to-get-the-text-written-inside-a-tinymce-textarea?rq=1,
* http://stackoverflow.com/questions/4022002/saving-tinymce-contect-via-ajax-as-part-of-a-larger-form,

_DESCRIPTION:
This plugin adds a save button to TinyMCE this save button will submit the form that the editor is within.
[http://www.tinymce.com/wiki.php/Plugin:save]

_OPTION:
[tmce'save_enablewhendirty]  If you set this option to true, the edit button will be disabled/dimmed until modifications are made. This is disabled by default.
[tmce'save_onsavecallback]  This option enables you to add a custom function to be called when the save button/command is invoked. This is not used by default.
[tmce'save_oncancelcallback]  This option enabled you to add a custom function to be called when the cancel button/command is invoked. This is not used by default.

_USAGE:
tinymce.init({
plugins: "save",
toolbar: "save",
save_enablewhendirty: true,
save_onsavecallback: function() {console.log("Save");}
});

tmce'plugin.searchreplace

name::
* McsEngl.tmce'plugin.searchreplace@cptIt,
* McsEngl.tmce'searchreplace-plugin@cptIt,

tmce'plugin.spellchecker

name::
* McsEngl.tmce'plugin.spellchecker@cptIt,
* McsEngl.tmce'spellchecker-plugin@cptIt,

_ADDRESS.WPG:
* http://www.tinymce.com/wiki.php/plugin:spellchecker,

nanospell

//spellchecker_rpc_url: "http://localhost/nanospell/server/ajax/php/tinyspell.php",
//external_plugins: {"nanospell": "http://localhost/nanospell/plugin.js"},
//nanospell_server: 'php', // choose "php" "asp" "asp.net"
//nanospell_dictionary: 'en', // download 23 more at http://tinymcespellcheck.com/dictionaries
//nanospell_ignore_words_with_numerals: true,
//nanospell_autostart: true,
//nanospell_ignore_block_caps: false,
//nanospell_compact_menu: false,

tmce'plugin.template

name::
* McsEngl.tmce'plugin.template@cptIt,
* McsEngl.tmce'template-plugin@cptIt,

_ADDRESS.WPG:
* https://github.com/Xesenix/tinymce-advanced-template-example,

_DESCRIPTION:
This plugin adds support for custom templates. There are two types of files this plugin supports: templates and snippets.

Plugin options
Name  Summary
templates  Array with template items each having a title, description and content.
template_cdate_classes  A list of class names separated by spaces. Any template element with one of the classes will have its content replaced by the 'creation' date, formatted according to the 'template_cdate_format' option. A creation date is one that is set if no previous date existed within the element. Once set the original date is stored inside the element in a HTML comment and is designed not to change even with a template change.
template_mdate_classes  A list of class names separated by spaces. Any template element with one of the classes will have its content replaced by the 'modified' date, formatted according to the 'template_mdate_format' option. A modified date is one that is updated with each edit.
template_cdate_format  A date format string for the creation date see below for options.
template_mdate_format  A date format string for the modified date see below for options.
template_selected_content_classes  A list of class names separated by spaces. Any template element with one of the classes will have its content replaced by the selected editor content when first inserted.
template_replace_values  This is an array of items that control content replacement in the inserted templates. The array keys equal the classnames used in the template. If a template element has a classname matching any in this array its contents will be replaced by the array value. See examples below.
template_popup_width  Template dialog width, defaults to 700.
template_popup_height  Template dialog height, defaults to 600.

Replace values example
Class names are used for templates and variable names are used for snippets.

template_replace_values : {
className : "Replace with this content",
anotherClassName: "Replacement content"
}
Replace values (functions) example

Replace content array values can also be functions. If a template element has a classname matching and the value is a fuction the function is called and the element passed as an argument.

template_replace_values : {
className : function(element) {
// do something and then:
// element.innerHTML = something
}
}
Templates example

template_templates : [
{
title : "Editor Details",
src : "editor_details.htm",
description : "Adds Editors Name and Staff ID"
}
]
Example of an external list

This is the contents your backend page should return if you specify a URL using the template_external_list_url option. A simple array containing each template to present. This URL can be a backend page, for example a PHP file.

var tinyMCETemplateList = [
// Name, URL, Description
["Simple snippet", "templates/snippet1.htm", "Simple HTML snippet."],
["Layout", "templates/layout1.htm", "HTML Layout."]
];
Making Snippets

Snippets are HTML code chunks that can be inserted. Replace variables will only be executed upon insert, without being wrapped in a template DIV element. So if you define somevar1 in template_replace_values array it will be replaced on preview and insert.

This is a simple <strong>snippet</strong>. Will be replaced: {$somevar1}.
Making Templates

A template is a file with DIV containing the template data. All HTML outside the DIV will simply be presented to the user in the preview frame. A template has more capabilities than a simple snippet, a template can have dynamic content/smart content that gets updated by functions located in the template_replace_values. These functions will continue to be executed each time a cleanup procedure is performed.

Each template needs to use the following base HTML:

<!-- This will not be inserted -->
<div class="mceTmpl">
<table width="98%%" border="0" cellspacing="0" cellpadding="0">
<tr>
<th scope="col"> </th>
<th scope="col"> </th>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
</table></div>
Initialization Example

tinymce.init({
plugins: "template",
toolbar: "template",

template_cdate_classes: "cdate creationdate",
template_mdate_classes: "mdate modifieddate",
template_selected_content_classes: "selcontent",
template_cdate_format: "%m/%d/%Y : %H:%M:%S",
template_mdate_format: "%m/%d/%Y : %H:%M:%S",
template_replace_values: {
username : "Jack Black",
staffid : "991234"
},
templates : [
{
title: "Editor Details",
url: "editor_details.htm",
description: "Adds Editor Name and Staff ID"
},
{
title: "Timestamp",
url: "time.htm",
description: "Adds an editing timestamp."
}
]
});
[http://www.tinymce.com/wiki.php/Plugin:template]

tmce'plugin.textcolor

name::
* McsEngl.tmce'plugin.textcolor@cptIt,
* McsEngl.tmce'textcolor-plugin@cptIt,

_DESCRIPTION:
Defines the buttons forecolor and backcolor.

tmce'plugin.visualblocks

name::
* McsEngl.tmce'plugin.visualblocks@cptIt,
* McsEngl.tmce'visualblocks-plugin@cptIt,

_DESCRIPTION:
* command: view/show blocks

tmce'plugin.visualchars

name::
* McsEngl.tmce'plugin.visualchars@cptIt,
* McsEngl.tmce'visualchars-plugin@cptIt,

_DESCRIPTION:
This plugin adds the possibility to see invisible characters like  . Installation
Initialization Example
tinymce.init({
plugins: "visualchars",
toolbar: "visualchars"
});
[http://www.tinymce.com/wiki.php/Plugin:visualchars]

tmce'plugin.

name::
* McsEngl.tmce'plugin.@cptIt,
* McsEngl.tmce'-plugin@cptIt,

_DESCRIPTION:

tmce'code.USER-INTERFACE

name::
* McsEngl.tmce'code.USER-INTERFACE@cptIt,
* McsEngl.tmce'ui-code@cptIt,
* McsEngl.tmce'user-interface@cptIt,

tmce'option.height:
* tmce'height:
height : 300

tmce'control-ui (menuitem; toolitem)#ql:tmce'control#

name::
* McsEngl.tmce'control-ui (menuitem@cptIt, toolitem),

tmce'CSS

name::
* McsEngl.tmce'CSS@cptIt,

_OPTION:
* tmce'option.content_css:
* tmce'content_css: "css/development.css",
===
content_css: "http://synagonism.net/hitp/hitp.css",

tmce'dialog-window

name::
* McsEngl.tmce'dialog-window@cptIt,
* McsEngl.tmce'code.dialog-window@cptIt,
* McsEngl.tmce'custom-dialog@cptIt,

_DESCRIPTION:
Dialogs as HTML pages

In TinyMCE 3.x all dialogs where HTML pages that got loaded into a iframe or window. This was changed in TinyMCE 4 to make it easier to make plugins and fully support CDN:s. But you can still load HTML based pages into TinyMCE dialogs by using the WindowManager.

// Opens a HTML page inside a TinyMCE dialog
editor.windowManager.open({
title: "My html dialog",
url: 'mydialog.html',
width: 700,
height: 600
});
You can also pass in parameters to the dialog just as you could in 3.x by using the second parameter of the WindowManager.open.

// Opens a HTML page inside a TinyMCE dialog and pass in two parameters
editor.windowManager.open({
title: "My html dialog",
url: 'mydialog.html',
width: 700,
height: 600
}, {
arg1: 42,
arg2: "Hello world"
});
You can access these parameters from your mydialog.html page by using this code:

// Get the parameters passed into the window from the top frame
var args = top.tinymce.activeEditor.windowManager.getParams();
console.log(args.arg1, args.arg2);
You can also close the current window by calling:

// Close the front most window (mydialog.html)
top.tinymce.activeEditor.windowManager.close();
[http://www.tinymce.com/wiki.php/Tutorials:Creating_custom_dialogs]

_CODE.TMCE:
     // Open window with a specific url
     editor.windowManager.open({
       title: 'my site',
       url: 'http://synagonism.net',
       width: 800,
       height: 400,
       buttons: [{
         text: 'Close',
         onclick: 'close'
       }]
     });
[\PgmWEB\tinyMCE\tinymce406Dev\js\tinymce\plugins\example\plugin.js]

tmce'dialog'body

name::
* McsEngl.tmce'dialog'body@cptIt,

_CODE.TMCE:
     body: {type: 'textbox', name: 'name', size: 40, label: 'Name', value: selectedNode.name || selectedNode.id},
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\plugins\anchor\plugin.js]
===
body: [
 {type: 'textbox', name: 'name', size: 40, label: 'Name', value: selectedNode.name || selectedNode.id},
 {type: 'textbox', name: 'class', size: 40, label: 'Class', value: selectedNode.name || selectedNode.id}
],

tmce'dialog'buttons

name::
* McsEngl.tmce'dialog'buttons@cptIt,

_CODE.TMCE:
       buttons: [{
         text: 'Close',
         onclick: 'close'
       }]
     });
[\PgmWEB\tinyMCE\tinymce406Dev\js\tinymce\plugins\example\plugin.js]

tmce'dialog'height

name::
* McsEngl.tmce'dialog'height@cptIt,

tmce'dialog'onsubmit-function

name::
* McsEngl.tmce'dialog'onsubmit-function@cptIt,

_CODE.TMCE:
     onsubmit: function(e) {
       editor.execCommand('mceInsertContent', false, editor.dom.createHTML('a', {
         id: e.data.name,
         class: e.data.class
       }));
     }
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\plugins\anchor\plugin.js]

tmce'dialog'title

name::
* McsEngl.tmce'dialog'title@cptIt,

tmce'dialog'url

name::
* McsEngl.tmce'dialog'url@cptIt,

tmce'dialog'width

name::
* McsEngl.tmce'dialog'width@cptIt,

tmce'icon

name::
* McsEngl.tmce'icon@cptIt,

_ADDRESS.WPG:
* http://www.tinymce.com/forum/viewtopic.php?id=31060,
* http://icomoon.io/app//

_SPECIFIC:
* aligncenter
* alignjustify
* alignleft
* alignright
* anchor
* blockquote
* bold
* bullist
* charmap
* code
* copy
* cut
* emoticons
* forecolor
* fullpage
* fullscreen
* help
* hr
* image
* indent
* inserttime
* italic
* link
* ltr
* media
* newdocument
* nonbreaking
* numlist
* outdent
* pagebreak
* paste
* pastetext
* preview
* print
* redo
* removeformat
* resize
* restoredraft
* rtl
* save
* searchreplace
* spellchecker
* strikethrough
* sub
* sup
* table
* template
* underline
* undo
* unlink
* visualchars

tmce'menu-item

name::
* McsEngl.tmce'menu-item@cptIt,
* McsEngl.tmce'menubar-control@cptIt,
* McsEngl.tmce'menubar-item@cptIt,
* McsEngl.tmce'menuitem@cptIt,
* McsEngl.tmce'mnitem@cptIt,

_SPECIFIC:
* file, edit, insert, view, format, table, tools,

_DESCRIPTION:
Configure what items should appear in the menu this option overrides the whole menu so you need to configure all the items back in. Check the controls list for all available items.

Example
tinymce.init({
menu: {
file: {title: 'File', items: 'newdocument'},
edit: {title: 'Edit', items: 'undo redo | cut copy paste | selectall'},
insert: {title: 'Insert', items: '|'},
view: {title: 'View', items: 'visualaid'},
format: {title: 'Format', items: 'bold italic underline strikethrough superscript subscript | formats | removeformat'},
table: {title: 'Table'},
tools: {title: 'Tools'}
}
});
[http://www.tinymce.com/wiki.php/Configuration:menu]

tmce'menuitem'adding

name::
* McsEngl.tmce'menuitem'adding@cptIt,
* McsEngl.tmce'addMenuItem@cptIt,
* McsEngl.tmce'menuitem'creating@cptIt,

_CODE.TMCE:
 editor.addMenuItem('pluginname', {
   text: 'Document properties',
   cmd : 'mceFullPageProperties',
   context: 'file' //the menu to appean
 });

tmce'menuitem'cmd

name::
* McsEngl.tmce'menuitem'cmd@cptIt,

tmce'menuitem'context

name::
* McsEngl.tmce'menuitem'context@cptIt,

_DESCRIPTION:
The menubar-item on which it is part.

tmce'menuitem'icon

name::
* McsEngl.tmce'menuitem'icon@cptIt,

tmce'menuitem'text

name::
* McsEngl.tmce'menuitem'text@cptIt,

tmce'menuitem.SPECIFIC

name::
* McsEngl.tmce'menuitem.SPECIFIC@cptIt,

_SPECIFIC:

* tmce'control.anchor.mentubar (anchor_plugin):
* tmce'control.bold.menubar (core):
* tmce'control.cell.toolbar (table_plugin):
* tmce'control.charmap.mentubar (charmap_plugin):
* tmce'control.code.mentubar (code_plugin):
* tmce'control.column.toolbar (table_plugin):
* tmce'control.copy.menubar (core):
* tmce'control.cut.menubar (core):
* tmce'control.deletetable.toolbar (table_plugin):
* tmce'control.formats.menubar (core):
* tmce'control.fullscreen.mentubar (fullscreen_plugin):
* hr.mentubar (hr_plugin):
* tmce'control.image.mentubar (image_plugin):
* tmce'control.insertdatetime.mentubar (insertdatetime_plugin):
* tmce'control.inserttable.toolbar (table_plugin):
* tmce'control.italic.menubar (core):
* tmce'control.link.mentubar (link_plugin):
* tmce'control.media.mentubar (media_plugin):
* tmce'control.newdocument.menubar (core):
* tmce'control.nonbreaking.mentubar (nonbreaking_plugin):
* tmce'control.pagebreak.mentubar (pagebreak_plugin):
* tmce'control.paste.mentubar (pastetext_plugin):
* tmce'control.paste.menubar (core):
* tmce'control.preview.mentubar (preview_plugin):
* tmce'control.print.mentubar (print_plugin):
* tmce'control.redo.menubar (core):
* tmce'control.removeformat.menubar (core):
* tmce'control.row.toolbar (table_plugin):
* tmce'control.searchreplace.mentubar (searchreplace_plugin):
* tmce'control.selectall.menubar (core):
* tmce'control.spellchecker.mentubar (spellchecker_plugin):
* tmce'control.strikethrough.menubar (core):
* tmce'control.subscript.menubar (core):
* tmce'control.superscript.menubar (core):
* tmce'control.tableprops.toolbar (table_plugin):
* tmce'control.underline.menubar (core):
* tmce'control.undo.menubar (core):
* tmce'control.visualaid.menubar (core):
* tmce'control.visualblocks.mentubar (visualblocks_plugin):
* tmce'control.visualchars.mentubar (visualchars_plugin):

tmce'menubar

name::
* McsEngl.tmce'menubar@cptIt,
* McsEngl.tmce'menu'menubar@cptIt,

_DESCRIPTION:
It is the bar that contains the menu: file, edit, ...

tmce'option.menubar:
This option allows you to configure the menus you want to appear in the menu bar.

// Disable all menus
tinymce.init({
menubar : false
});

// Configure different order
tinymce.init({
menubar: "tools table format view insert edit"
});
[http://www.tinymce.com/wiki.php/Configuration:menubar]

tmce'skin

name::
* McsEngl.tmce'skin@cptIt,

_ADDRESS.WPG:
* http://skin.tinymce.com// skin creator.

tmce'status-bar

name::
* McsEngl.tmce'status-bar@cptIt,
* McsEngl.tmce'code.statusbar@cptIt,

* tmce'option.statusbar:
Boolean, show or hide the statusbar.
statusbar : false
[http://www.tinymce.com/wiki.php/Configuration:statusbar]

tmce'theme

name::
* McsEngl.tmce'theme@cptIt,

tmce'option.theme:
* tmce'theme_option:
* tmce'theme: "modern",
===
Removed themes
The "simple" and "advanced" themes where removed in 4.0.

New themes
The new "modern" theme was introduced in 4.0. More themes will be added in the future.
[http://www.tinymce.com/wiki.php/Tutorial:Migration_guide_from_3.x]

tmce'tool-item

name::
* McsEngl.tmce'tool-item@cptIt,
* McsEngl.tmce'control.toolbar@cptIt,
* McsEngl.tmce'tlitem@cptIt,
* McsEngl.tmce'toolbar-control@cptIt,
* McsEngl.tmce'toolbar-item@cptIt,
* McsEngl.tmce'toolbar-button@cptIt,
* McsEngl.tmce'toolitem@cptIt,

tmce'toolitem'adding

name::
* McsEngl.tmce'toolitem'adding@cptIt,
* McsEngl.tmce'addButton@cptIt,
* McsEngl.tmce'toolitem'creating@cptIt,

_CODE.TMCE:
 editor.addButton('hr', {
   icon: 'hr',
   tooltip: 'Horizontal line',
   cmd: 'InsertHorizontal_line'
 });
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\plugins\hr\plugin.js]

tmce'toolitem'cmd

name::
* McsEngl.tmce'toolitem'cmd@cptIt,

tmce'toolitem'icon

name::
* McsEngl.tmce'toolitem'icon@cptIt,

tmce'toolitem'panel

name::
* McsEngl.tmce'toolitem'panel@cptIt,

_CODE.TMCE:
   panel: {
     autohide: true,
     html: getHtml,
     onclick: function(e) {
       var linkElm = editor.dom.getParent(e.target, 'a');

       if (linkElm) {
         editor.insertContent('<img src="' + linkElm.getAttribute('data-mce-url') + '" />');
         this.hide();
       }
     }
   },
[\PgmWEB\tinyMCE\tinymceDev\js\tinymce\plugins\emoticons\plugin.js]

tmce'toolitem'size

name::
* McsEngl.tmce'toolitem'size@cptIt,

_ISSUE.TMCE:
* tmce'issue.button_size:
Q: Why do Buttons/selectboxes have incorrect size?
You are probably using an old DOCTYPE as of TinyMCE 4 a proper HTML5 doctype is required. All web developers should use a standards rendering mode on their web pages. So use a HTML5 doctype like <!DOCTYPE html> to properly render the page and the TinyMCE UI.
[http://www.tinymce.com/wiki.php/FAQ]

tmce'toolitem'tooltip

name::
* McsEngl.tmce'toolitem'tooltip@cptIt,

tmce'toolitem.SPECIFIC

name::
* McsEngl.tmce'toolitem.SPECIFIC@cptIt,

_SPECIFIC:
* tmce'control.aligncenter.toolbar (core):
* tmce'control.alignjustify.toolbar (core):
* tmce'control.alignleft.toolbar (core):
* tmce'control.alignright.toolbar (core):
* tmce'control.anchor.toolbar (anchor_plugin):
* tmce'control.backcolor.toolbar (forecolor_plugin):
* tmce'control.blockquote.toolbar (core):
* tmce'control.bold.toolbar (core):
* tmce'control.bullist.toolbar (core):
* tmce'control.cancel.toolbar (save_plugin):
* tmce'control.charmap.toolbar (charmap_plugin):
* tmce'control.code.toolbar (code_plugin):
* tmce'control.copy.toolbar (core):
* tmce'control.cut.toolbar (core):
* tmce'control.emoticons.toolbar (emoticons_plugin):
* tmce'control.fontselect.toolbar (core):
* tmce'control.fontsizeselect.toolbar (core):
* tmce'control.formatselect.toolbar (core):
* tmce'control.fullscreen.toolbar (fullscreen_plugin):
* hr.toolbar (hr_plugin):
* tmce'control.image.toolbar (image_plugin):
* tmce'control.indent.toolbar (core):
* tmce'control.inserttime.toolbar (insertdatetime_plugin):
* tmce'control.italic.toolbar (core):
* tmce'control.link.toolbar (link unlink_plugin):
* tmce'control.ltr.toolbar (directionality_plugin):
* tmce'control.media.toolbar (media_plugin):
* tmce'control.newdocument.toolbar (core):
* tmce'control.nonbreaking.toolbar (nonbreaking_plugin):
* tmce'control.numlist.toolbar (core):
* tmce'control.outdent.toolbar (core):
* tmce'control.pagebreak.toolbar (pagebreak_plugin):
* tmce'control.paste.toolbar (core):
* tmce'control.preview.toolbar (preview_plugin):
* tmce'control.print.toolbar (print_plugin):
* tmce'control.redo.toolbar (core):
* tmce'control.removeformat.toolbar (core):
* tmce'control.rtl.toolbar (directionality_plugin):
* tmce'control.save.toolbar (save_plugin):
* tmce'control.searchreplace.toolbar (searchreplace_plugin):
* tmce'control.spellchecker.toolbar (spellchecker_plugin):
* tmce'control.strikethrough.toolbar (core):
* tmce'control.styleselect.toolbar (core):
* tmce'control.subscript.toolbar (core):
* tmce'control.superscript.toolbar (core):
* tmce'control.table.toolbar (table_plugin):
* tmce'control.template.toolbar (template_plugin):
* tmce'control.textcolor.toolbar (forecolor_plugin):
* tmce'control.underline.toolbar (core):
* tmce'control.undo.toolbar (core):
* tmce'control.visualblocks.toolbar (visualblocks_plugin):
* tmce'control.visualchars.toolbar (visualchars_plugin):

tmce'toolbar-ui#ql:tmce'toolbar#

name::
* McsEngl.tmce'toolbar-ui@cptIt,

tmce'wrap

name::
* McsEngl.tmce'wrap@cptIt,

* tmce'option.nowrap:
This option will make the editable are behave like very much like a <pre> tag, and add a scroll instead of wrapping text.

tinymce.init({
...
nowrap : true
});
Boolean value, default false.
[http://www.tinymce.com/wiki.php/Configuration:nowrap]

tmce'executing

name::
* McsEngl.tmce'executing@cptIt,

tmceexecuting:
1) open the \public_html\PgmHtml\pgmHtml.html which starts the program.
2) \public_html\PgmHtml\js\pgmHtml.js:27882:tinymce.fInit,
 creates the editor with the settings of html-file.
3) \public_html\PgmHtml\js\pgmHtml.js:27796:tinymce.fSetup,

tmce'forum

name::
* McsEngl.tmce'forum@cptIt,

_ADDRESS.WPG:
* http://community.tinymce.com/forum//

_EMAIL:
forum administrator at spam@moxiecode.com.

tmce'html-doc

name::
* McsEngl.tmce'html-doc@cptIt,

tmcedoc:
<!DOCTYPE html>
<html class="cls-fullscreen">
<head>
<title>pgmHtml 0.0.1</title>
<script src="js/tinymce/pgmHtml.js"></script>
<script src="js/tinymce/plugins/save/FileSaver.js"></script>
<script>
tinymce.fInit({
selector: 'textarea',
theme: "themeModern",
schema: "html5",
plugins: [
["advlist anchor autolink autosave charmap code contextmenu directionality "],
["emoticons example fullpage fullscreen hr image insertdatetime link lists media nonbreaking"],
["pagebreak paste print preview save searchreplace "],
["table template textcolor"],
["visualblocks visualchars wordcount "],
["codeimproved codemirror"]
],
toolbar1: "save undo redo | eqneditor forecolor backcolor | styleselect fontselect fontsizeselect | bold italic underline | alignleft aligncenter alignright alignjustify | btnBullist btnNumlist | link image preview ",
//fullscreen
init_instance_callback: function (editor) {
setTimeout("tinymce.oEditorActive.execCommand('cmdFullscreen')", 777);
},
//saveas
save_enablewhendirty: false,
save_onsavecallback: function() {
fSaveAs(
new Blob(
[tinymce.oEditorActive.startContent],
{type: "text/plain;charset=" + document.characterSet}
),
"name.html"
);
},
browser_spellcheck: true,
template_popup_height: 100,
template_popup_width: 200,
templates: [
{title: 'My name', description: 'Inserts my name', content: 'Kaseluris.Nikos.1959<br />'},
{title: 'table', description: 'Inserts table', url: 'template1.html'}
],
codemirror: {},


});

//tinymce.oUtil.oXHR.send({
//url: 'template1.html',
//content_type: 'text/plain;charset=utf-8',
//success: function(text) {
//console.log(text);
//},
//error: function( type, req, o ){
//console.log("XHRError: " + type + " HTTP Status: " + req.status);
//}
//});

//var oXhr;
//oXhr = new XMLHttpRequest();
//oXhr.onreadystatechange = function() {
//if (oXhr.readyState==4 && oXhr.status==200) {
//console.log(oXhr.responseText);
//}
//else {
//console.log("error loading: " + oXhr.status);
//}
//}
//oXhr.open("GET", "template1.html", true);
//oXhr.send();
</script>
<link rel="stylesheet" href="http://localhost/pgmHtml/js/tinymce/skins/lightgray/skin.css">
</head>

<body class="cls-fullscreen">

<div id="mce_65" class="cls-tinymce cls-container cls-panel" hidefocus="1" tabindex="-1" style="visibility: hidden; border-width: 1px;">

<div id="mce_65-body" class="cls-container-body cls-stack-layout cls-fullscreen">

//menubar
<div id="mce_66" class="cls-container cls-menubar cls-toolbar cls-first cls-stack-layout-item" role="menubar" style="border-width: 0px 0px 1px;">
<div id="mce_66-body" class="cls-container-body cls-flow-layout">
<div id="mce_67" class="cls-widget cls-btn cls-menubtn cls-first cls-flow-layout-item" tabindex="-1" role="menuitem" aria-haspopup="true"><button id="mce_67-open" role="presentation" type="button" tabindex="-1"><span>File</span> <i class="cls-caret"></i></button>
</div>
<div id="mce_68" class="cls-widget cls-btn cls-menubtn cls-flow-layout-item" tabindex="-1" role="menuitem" aria-haspopup="true"><button id="mce_68-open" role="presentation" type="button" tabindex="-1"><span>Edit</span> <i class="cls-caret"></i></button>
</div>
<div id="mce_69" class="cls-widget cls-btn cls-menubtn cls-flow-layout-item" tabindex="-1" role="menuitem" aria-haspopup="true"><button id="mce_69-open" role="presentation" type="button" tabindex="-1"><span>Insert</span> <i class="cls-caret"></i></button>
</div>
<div id="mce_70" class="cls-widget cls-btn cls-menubtn cls-flow-layout-item" tabindex="-1" role="menuitem" aria-haspopup="true"><button id="mce_70-open" role="presentation" type="button" tabindex="-1"><span>View</span> <i class="cls-caret"></i></button>
</div>
<div id="mce_71" class="cls-widget cls-btn cls-menubtn cls-flow-layout-item" tabindex="-1" role="menuitem" aria-haspopup="true"><button id="mce_71-open" role="presentation" type="button" tabindex="-1"><span>Format</span> <i class="cls-caret"></i></button>
</div>
<div id="mce_72" class="cls-widget cls-btn cls-menubtn cls-flow-layout-item" tabindex="-1" role="menuitem" aria-haspopup="true"><button id="mce_72-open" role="presentation" type="button" tabindex="-1"><span>Table</span> <i class="cls-caret"></i></button>
</div>
<div id="mce_73" class="cls-widget cls-btn cls-menubtn cls-last cls-flow-layout-item" tabindex="-1" role="menuitem" aria-haspopup="true">
<button id="mce_73-open" role="presentation" type="button" tabindex="-1"><span>Tools</span> <i class="cls-caret"></i></button>
</div>
</div>
</div>

//toolbar
<div id="mce_74" class="cls-container cls-panel cls-stack-layout-item" hidefocus="1" tabindex="-1">
<div id="mce_74-body" class="cls-container-body cls-stack-layout">
<div id="mce_75" class="cls-container cls-toolbar cls-first cls-last cls-stack-layout-item" role="toolbar">
<div id="mce_75-body" class="cls-container-body cls-flow-layout">
<div id="mce_76" class="cls-container cls-first cls-flow-layout-item cls-btngroup" role="toolbar">
<div id="mce_76-body">
<div id="mce_45" class="cls-widget cls-btn cls-first" tabindex="-1" role="button" aria-disabled="false"><button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-save"></i> Save</button>
</div>
<div id="mce_46" class="cls-widget cls-btn cls-disabled" tabindex="-1" role="button" aria-labeledby="mce_46" aria-label="Undo" aria-disabled="true"><button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-undo"></i></button>
</div>
<div id="mce_47" class="cls-widget cls-btn cls-last cls-disabled" tabindex="-1" role="button" aria-labeledby="mce_47" aria-label="Redo" aria-disabled="true"><button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-redo"></i></button>
</div>
</div>
</div>
<div id="mce_77" class="cls-container cls-flow-layout-item cls-btngroup" role="toolbar">
<div id="mce_77-body">
<div id="mce_48" class="cls-widget cls-btn cls-colorbutton cls-first" role="button" aria-labeledby="mce_48" aria-label="Text color"><button role="presentation" hidefocus="" type="button" tabindex="-1"><i class="cls-ico cls-i-forecolor"></i><span id="mce_48-preview" class="cls-preview"></span></button><button type="button" class="cls-open" hidefocus="" tabindex="-1"> <i class="cls-caret"></i></button>
</div>
<div id="mce_49" class="cls-widget cls-btn cls-colorbutton cls-last" role="button" aria-labeledby="mce_49" aria-label="Background color"><button role="presentation" hidefocus="" type="button" tabindex="-1"><i class="cls-ico cls-i-backcolor"></i><span id="mce_49-preview" class="cls-preview"></span></button><button type="button" class="cls-open" hidefocus="" tabindex="-1"> <i class="cls-caret"></i></button>
</div>
</div>
</div>
<div id="mce_78" class="cls-container cls-flow-layout-item cls-btngroup" role="toolbar">
<div id="mce_78-body">
<div id="mce_50" class="cls-widget cls-btn cls-menubtn cls-first" tabindex="-1" role="button" aria-haspopup="true"><button id="mce_50-open" role="presentation" type="button" tabindex="-1"><span>Formats</span> <i class="cls-caret"></i></button>
</div>
<div id="mce_51" class="cls-widget cls-btn cls-menubtn cls-fixed-width cls-listbox" tabindex="-1" role="button" aria-haspopup="true"><button id="mce_51-open" role="presentation" type="button" tabindex="-1"><span>Font Family</span> <i class="cls-caret"></i></button>
</div>
<div id="mce_52" class="cls-widget cls-btn cls-menubtn cls-fixed-width cls-listbox cls-last" tabindex="-1" role="button" aria-haspopup="true"><button id="mce_52-open" role="presentation" type="button" tabindex="-1"><span>Font Sizes</span> <i class="cls-caret"></i></button>
</div>
</div>
</div>
<div id="mce_79" class="cls-container cls-flow-layout-item cls-btngroup" role="toolbar">
<div id="mce_79-body">
<div id="mce_53" class="cls-widget cls-btn cls-first" tabindex="-1" role="button" aria-labeledby="mce_53" aria-label="Bold"><button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-bold"></i></button>
</div>
<div id="mce_54" class="cls-widget cls-btn" tabindex="-1" role="button" aria-labeledby="mce_54" aria-label="Italic"><button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-italic"></i></button>
</div>
<div id="mce_55" class="cls-widget cls-btn cls-last" tabindex="-1" role="button" aria-labeledby="mce_55" aria-label="Underline"><button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-underline"></i></button>
</div>
</div>
</div>
<div id="mce_80" class="cls-container cls-flow-layout-item cls-btngroup" role="toolbar">
<div id="mce_80-body">
<div id="mce_56" class="cls-widget cls-btn cls-first" tabindex="-1" role="button" aria-labeledby="mce_56" aria-label="Align left"><button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-alignleft"></i></button>
</div>
<div id="mce_57" class="cls-widget cls-btn" tabindex="-1" role="button" aria-labeledby="mce_57" aria-label="Align center"><button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-aligncenter"></i></button>
</div>
<div id="mce_58" class="cls-widget cls-btn" tabindex="-1" role="button" aria-labeledby="mce_58" aria-label="Align right"><button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-alignright"></i></button>
</div>
<div id="mce_59" class="cls-widget cls-btn cls-last" tabindex="-1" role="button" aria-labeledby="mce_59" aria-label="Justify"><button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-alignjustify"></i></button>
</div>
</div>
</div>
<div id="mce_81" class="cls-container cls-flow-layout-item cls-btngroup" role="toolbar">
<div id="mce_81-body">
<div id="mce_60" class="cls-widget cls-btn cls-splitbtn cls-menubtn cls-first" role="splitbutton" aria-labeledby="mce_60" aria-label="Bullet list" aria-haspopup="true"><button type="button" hidefocus="" tabindex="-1"><i class="cls-ico cls-i-btnBullist"></i></button><button type="button" class="cls-open" hidefocus="" tabindex="-1"> <i class="cls-caret"></i></button>
</div>
<div id="mce_61" class="cls-widget cls-btn cls-splitbtn cls-menubtn cls-last" role="splitbutton" aria-labeledby="mce_61" aria-label="Numbered list" aria-haspopup="true"><button type="button" hidefocus="" tabindex="-1"><i class="cls-ico cls-i-btnNumlist"></i></button><button type="button" class="cls-open" hidefocus="" tabindex="-1"> <i class="cls-caret"></i></button>
</div>
</div>
</div>
<div id="mce_82" class="cls-container cls-last cls-flow-layout-item cls-btngroup" role="toolbar">
<div id="mce_82-body">
<div id="mce_62" class="cls-widget cls-btn cls-first" tabindex="-1" role="button" aria-labeledby="mce_62" aria-label="Insert/edit link"><button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-link"></i></button>
</div>
<div id="mce_63" class="cls-widget cls-btn" tabindex="-1" role="button" aria-labeledby="mce_63" aria-label="Insert/edit image"><button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-image"></i></button>
</div>
<div id="mce_64" class="cls-widget cls-btn cls-last" tabindex="-1" role="button" aria-labeledby="mce_64" aria-label="Preview"><button role="presentation" type="button" tabindex="-1"><i class="cls-ico cls-i-preview"></i></button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

//edit-area
<div id="mce_83" class="cls-edit-area cls-container cls-panel cls-stack-layout-item" hidefocus="1" tabindex="-1" style="border-width: 1px 0px 0px;">
<iframe id="mce_9_ifr" src='javascript:""' frameborder="0" allowtransparency="true" title="Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help" style="width: 100%; height: 231px; display: block;">
<!DOCTYPE html>
<html>
<head>
<style id="mceDefaultStyles" type="text/css">
.cls-content-body div.cls-resizehandle {position: absolute;border: 1px solid black;background:#FFF;width: 5px;height: 5px;z-index: 10000}
.cls-content-body .cls-resizehandle:hover {background:#000}.cls-content-body img[data-mce-selected], hr[data-mce-selected] {outline: 1px solid black;resize: none}
.cls-content-body .cls-clonedresizable {position: absolute;outline: 1px dashed black;opacity: .5;filter: alpha(opacity=50);z-index: 10000}
</style>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link type="text/css" rel="stylesheet" href="http://localhost/pgmHtml/js/tinymce/skins/lightgray/content.css">
</head>
<body id="tinymce" class="cls-content-body " onload="window.parent.tinymce.fGetEditor('mce_9').fEventFire('load');" contenteditable="true">
<p>Your content here.</p>
</body>
</html>
</iframe>
</div>

//statusbar
<div id="mce_84" class="cls-statusbar cls-container cls-panel cls-last cls-stack-layout-item" hidefocus="1" tabindex="-1" style="border-width: 1px 0px 0px;">
<div id="mce_84-body" class="cls-container-body cls-flow-layout">
<div id="mce_85" class="cls-path cls-flow-layout-item cls-first">
<div role="button" class="cls-path-item cls-last" data-index="0" tabindex="-1" id="mce_85-0">p
</div>
</div><label id="mce_86" class="cls-wordcount cls-widget cls-label cls-flow-layout-item" "=">Words: 3</label>
<div id="mce_8" class="cls-flow-layout-item cls-resizehandle cls-last"><i class="cls-ico cls-i-resize"></i>
</div>
</div>
</div>

</div>
</div>

<textarea id="mce_9" style="display: none;" aria-hidden="true">Your content here.</textarea>
<p id="idLoad"></p>

<div id="mce_87" class="cls-widget cls-tooltip cls-tooltip-n" role="presentation" style="left: -65535px; top: 67px; z-index: 131070; display: none;">
<div class="clsTooltipArrow"></div>
<div class="clsTooltipInner">Background color</div>
</div>
</body>
</html>

tmce'human

name::
* McsEngl.tmce'human@cptIt,
* McsEngl.tinymce'human@cptIt,

Johan_Sorlin:
* Johan Sorlin,
* Sorlin.Johan,
* spocke@moxiecode.com
Johan "Spocke" Sφrlin, Chief Technical Officer
Phone: +46 (0)910 - 39 73 0

Joakim Lindkvist, System Developer, Customer Relations
Phone: +46 (0)910 - 39 73 0

Spyropoulos.Alexandros

tmce'organization (MoxieCode)

name::
* McsEngl.tmce'organization (MoxieCode)@cptIt,
* McsEngl.Moxiecode-Systems@cptIt,

_DESCRIPTION:
About Moxiecode Systems
Moxiecode Systems is a company located in Skellefteε, Sweden. We mainly focus our work on the following areas:
System development and integration
Product development
Strategy / analysis
Search Engine Optimization
Education
The word "moxie" [MOX-ee] is english slang, and means (courtesy of dictionary.com): "the ability to face difficulty with spirit and courage / aggressive energy; initiative / skill; know-how". The word "code" refers to the development of software. Altogether, we feel that "Moxiecode" truly represents our way of working.

System development is our main focus. The systems are often specifically made for each client to fit their needs, as we feel that close cooperation enables us to work out a solution that is optimal for each client. We base our system development on modular development, ie we develop flexible, reusable parts that can be reused in many of the systems we develop. This gives an effective and fast development, as well as well-tested stable systems.

The company was started in January 2003. The owners have worked together with software development for many years, and have got vast experience in development and the market.

Moxiecode has also made important clients and partners internationally, and we're now aiming for both the local and international market.
If you have any questions about us or our work, please feel free to contact us for any additional information.
[http://www.moxiecode.com/about.php]

Ephox {2015}

_ADDRESS.WPG:
* http://ephox.com//

{time.2015-06-24}:
We are joining Ephox: the start of something great

Moxiecode, the company behind TinyMCE, is merging with Ephox. Ephox is an online editing software company based in the US and Australia with more than 150 enterprise and OEM customers. Read more about the merger from Andrew Roberts of Ephox.

Why are we joining with Ephox? Ephox has been a partner of ours for the last five years, providing TinyMCE enterprise offerings. Over the course of that partnership we had come to understand that both companies had a very similar vision of the future. While we have had various inquiries over the years to join forces with other companies, none of those companies shared our vision in the way Ephox does. In addition to the five years of experience with TinyMCE, we felt that Ephox’s 15 years of experience in creating online editors will be invaluable in helping us take TinyMCE to the next level.

What does this mean for TinyMCE? Having partnered with Ephox successfully, we’re looking forward to more fully utilizing the resources of our combined companies. By bringing Moxiecode and Ephox together, we will be able to deliver more features, increase support services and accelerate development of future releases of TinyMCE. Among many things, we’ve begun working on improving the documentation for TinyMCE.

What does this mean for our team? We are all staying on in the combined company, and we will be the beginnings of a new “Ephox Sweden” office based in Umeε. The combined company has more than 40 staff so we will gain additional resources in engineering and support that will enable us to build new features, new services and accelerate releases of TinyMCE.

For over ten years, TinyMCE has been at the forefront of WYSIWYG development. Today TinyMCE’s open source community edition is downloaded over 400,000 times a month and is widely recognized as the top JavaScript library for the WYSIWYG editing of web content in the world.

The merger of TinyMCE and Ephox truly brings together two world-class development teams that will enable us to increase our day to day involvement in the open-source community.

Looking towards the future. We’ve been talking with the Ephox team since last year about bringing our companies together. Over the past couple months, we’ve been working closely with the Ephox team to ensure a smooth transition. We have many plans for innovative features that include a cloud delivery service and a mobile SDK that makes it possible to edit content on any device, anywhere.

To the open source community: Today’s announcement will give us even more opportunities to build new features, deliver updates and be more involved in the needs of the community. The success of the community will be the success of our company, and we remain 100% committed to our open-source heritage.

We appreciate your support and look forward to building more great things with and for the community.

tmce'resourceInfHmn#cptResource843#

name::
* McsEngl.tmce'resourceInfHmn@cptIt,

_ADDRESS.WPG:
* http://www.tinymce.com//
* https://github.com/tinymce/tinymce,
* http://www.tinymce.com/nightly/tinymce/tests/manual//
* https://go.tinymce.com/blog/installing-tinymce-from-a-github-repository-through-npm/,
* CDN Version provided by Cachefly
One of the fastest CDN's in the world is hosting TinyMCE for you to use, read more.
<script src="//tinymce.cachefly.net/4.0/tinymce.min.js"></script>

tmce'security

name::
* McsEngl.tmce'security@cptIt,

Q: Is TinyMCE protected against XSS vulnerabilities?
Protection against XSS attacks needs to be done on the server since if you can submit contents in a form using TinyMCE one could as easily disable all javascript and there for bypass TinyMCE filtering and still submit HTML code with insecure content. You need to properly filter the HTML input on the server using things like HTMLPurifier etc.
[http://www.tinymce.com/wiki.php/FAQ]

tmce.EVOLUTING#cptCore546.171#

name::
* McsEngl.tmce.EVOLUTING@cptIt,

tmce'version

name::
* McsEngl.tmce'version@cptIt,

_ADDRESS.WPG:
* https://github.com/tinymce/tinymce/blob/master/changelog.txt,

tmce4.3.4
(2016-02-11)

tmce4.3.3
2016-01-13,

tmce4.1.0:
TinyMCE 4.1.0 released
Jun 18th, 2014

tmce4.0.28:
* 2014-05-27.

tmce4.0.7:
* 2013-10-02

tmce4.0.6:
* 2013-09-12-4.0.6

tmce4.0.1:
* 2013-06-26

tmce4.0:
* 2013-06-13-4.0

FvMcs.Cmrpgm.EDUCATION

name::
* McsEngl.conceptIt411,
* McsEngl.Cmrpgm.EDUCATION@cptIt,
* McsEngl.FvMcs.Cmrpgm.EDUCATION@cptIt,
* McsEngl.education--application-software@cptIt,
* McsEngl.education-program@cptIt411,
* McsEngl.education-program@cptIt,
* McsEngl.program.education@cptIt411,
* McsEngl.teaching-program@cptIt,
* McsEngl.prgEdu@cptIt, {2012-12-17}
====== lagoGreek:
* McsElln.ΔΙΔΑΣΚΑΛΙΑΣ-ΠΡΟΓΡΑΜΑ@cptIt,
* McsElln.ΕΚΠΑΙΔΕΥΤΙΚΟ-ΛΟΓΙΣΜΙΚΟ@cptIt,
* McsElln.ΕΚΠΑΙΔΕΥΤΙΚΟ'ΠΡΟΓΡΑΜΜΑ@cptIt,
* McsElln.ΠΡΟΓΡΑΜΜΑ'ΕΚΠΑΙΔΕΥΤΙΚΟ@cptIt411,

DEFINITION

ΕΚΠΑΙΔΕΥΤΙΚΑ ΠΡΟΓΡΑΜΜΑΤΑ είναι ΠΡΟΓΡΑΜΜΑΤΑ-ΕΦΑΡΜΟΓΩΝ#cptIt304.1# με τα οποία διδάσκεται κάποιο ΣΧΟΛΙΚΟ ΜΑΘΗΜΑ.
[hmnSngo.1995-03]

pgmEdu'GENERIC

_GENERIC:
* desktop-appl#cptItsoft304#
* PROGRAM#cptIt59#

pgmEdu'WHOLE

_WHOLE:
* greek-education##

pgmEdu'ognCompany#cptEconomy7#

name::
* McsEngl.pgmEdu'ognCompany@cptIt,

pgmEdu'EVALUATION#cptCore546.107#

name::
* McsEngl.pgmEdu'EVALUATION@cptIt,

Μελέτες καταδεικνύουν ότι η διδασκαλία με τη βοήθεια του υπολογιστή παράγει τουλάχιστον 30% περισσότερη εκμάθηση, σε 40% λιγότερο χρόνο, με 30% μικρότερο κόστος, σε σχέση με τον παραδοσιακό τροπο.
[ΚΑΘΗΜΕΡΙΝΗ, 5 ΦΕΒ. 1995, 20]

pgmEdu'FILES#cptIt354#

name::
* McsEngl.pgmEdu'FILES@cptIt,

pgmEdu'Doing#cptCore475#

name::
* McsEngl.pgmEdu'Doing@cptIt,

+++education#cptIt444-16#

pgmEdu'HARDWARE-DEMAND

name::
* McsEngl.pgmEdu'HARDWARE-DEMAND@cptIt,

pgmEdu'measure#cptCore88#

name::
* McsEngl.pgmEdu'measure@cptIt,

pgmEdu'OPERATING-SYSTEM#cptIt434#

name::
* McsEngl.pgmEdu'OPERATING-SYSTEM@cptIt,

pgmEdu'PRICE#cptEconomy541.44#

name::
* McsEngl.pgmEdu'PRICE@cptIt,

pgmEdu'structure#cptCore515#

name::
* McsEngl.pgmEdu'structure@cptIt,

pgmEdu'TIPS#cptIt470#

name::
* McsEngl.pgmEdu'TIPS@cptIt,

pgmEdu'Version#cptIt471#

name::
* McsEngl.pgmEdu'Version@cptIt,

pgmEdu.SPECIFIC

name::
* McsEngl.pgmEdu.SPECIFIC@cptIt,
* McsEngl.pgmEdu.specific@cptIt,

_SPECIFIC: pgmEdu.alphabetically:
* prgEdu.CAI {COMPUTER ASSISTED INSTRUCTION} PROGRAMS
* prgEdu.cpi#cptIt583#
* prgEdu.ENCYCLOPEDIA#cptIt486#
* prgEdu.FOREIGN LANGUAGE LEARNING
* prgEdu.GEOGRAPHY
* prgEdu.HEALTH
* prgEdu.ICAI {INTELLIGENT CAI} PROGRAMS
* prgEdu.MACSYMA#cptIt685#
* prgEdu.mathcad#cptIt687#
* prgEdu.mathematica#cptIt688#
* prgEdu.math#cptItsoft952#
* prgEdu.pcglobe#cptIt492###
* prgEdu.SPSS#cptIt818#
* prgEdu.statgraphics#cptIt821#
* prgEdu.statistica#cptIt822#
* prgEdu.systat#cptIt827#
* prgEdu.TYPING LEARNING
===
* prgEdu.ΦΥΣΙΚΗ ΓΥΜΝΑΣΙΟΥ ΤΜΗΜΑ ΙΙ#cptIt928#
===
* prgEdu.surabaya (sf)

ΠΑΝΕΠΙΣΤΗΜΙΟΥ ΑΘΗΝΩΝ ΤΑΞΙΝΟΜΗΣΗ

ΠΡΟΤΑΣΗ ΠΑΝΕΠΙΣΤΗΜΙΟΥ ΑΘΗΝΩΝ (MITIS), ΣΤΟ ΕΠΕΤ ΙΙ ΤΗΣ ΓΓΕΤ.

CAI {COMPUTER ASSISTED INSTRUCTION} PROGRAMS


 DRILL AND PRACTICE: ΑΣΚΗΣΕΙΣ ΠΑΝΩ ΣΕ ΔΙΔΑΚΤΕΑ ΥΛΗ.
 TUTORIAL INSTRUCTION:
 PROBLEM SOLVING
 SIMULATORS:

ICAI {INTELLIGENT CAI} PROGRAMS


 AUTHORING SYSTEMS:
 CARD or PAGE BASED,
 ICON BASED,
 TIME BASED,

ΠΡΟΓΡΑΜΜΑΤΑ ΚΑΤΑΡΤΙΣΗΣ


 CBT {COMPUTER BASED TRAINING}
 CMT {COMPUTER MANAGED TESTING}
 CAT {COMPUTER ASSISTED TESTING}
 CATC {COMPUTER ASSISTED TEST CONSTRUCTION}

pgmEdu.FOREIGN-LANGUAGE-LEARNING

name::
* McsEngl.pgmEdu.FOREIGN-LANGUAGE-LEARNING@cptIt,

_SPECIFIC:
* cpi#cptIt583#

pgmEdu.GEOGRAPHY

name::
* McsEngl.pgmEdu.GEOGRAPHY@cptIt,

_SPECIFIC:
* pcglobe##

pgmEdu.HEALTH

name::
* McsEngl.pgmEdu.HEALTH@cptIt,

pgmEdu.LearnBoost

name::
* McsEngl.pgmEdu.LearnBoost@cptIt,

_TIME.CREATED: 2013-09-25

name::
* McsEngl.LearnBoost@cptIt,

_DESCRIPTION:
LearnBoost’s free all-in-one solution allows teachers to manage their classroom by offering an amazing gradebook, software for managing and creating lesson plans, tracking attendance, maintaining schedules, integrating Google Apps including calendars, tagging of Common Core Standards, and so much more.
[https://www.learnboost.com/info/about/]

pgmEdu.MYSCHOOL

name::
* McsEngl.pgmEdu.MYSCHOOL@cptIt,
* McsEngl.myschool@cptIt,

_ADDRESS.WPG:
* http://synagonism.net/worldview/edu/myschool.html,
* http://alkisg.mysch.gr/steki/index.php?topic=5527.0,

myschool'human

name::
* McsEngl.myschool'human@cptIt,

mySchool
May 2012 to Present
Team Members: Ioannis Papaioannou, PhD, Athanasios Kataras, Dimitris Kalaitzis, Eftychios Valeontis, Vasilis Delis
myschool.sch.gr is a school management system for the Greek Ministry of Education. My contribution to the project includes database design and implementation (SQL Server) and application development (Asp.NET, C#).
[http://gr.linkedin.com/pub/ioannis-papaioannou-phd/7/772/2aa]

myschool'law

name::
* McsEngl.myschool'law@cptIt,

Προς Κ. Διευθυντές/ντριες
Λόγω των σημαντικών αποκλίσεων που παρατηρούνται στις καταγραφές του συστήματος myschool και στα στοιχεία που αποστέλλονται
στο ΥΠΑΙΘ από τη Διεύθυνσή μας, σας επισημαίνουμε ότι:
"βάσει του άρθρου 7 παρ. 2 του Ν. 3848/2010 ο/η Διευθυντής/ντρια κάθε σχολικής μονάδας έχει την ευθύνη για την καταγραφή και εισαγωγή των στοιχείων που αφορούν τη σχολική μονάδα, στο σύστημα καταγραφής myschool, καθώς και την επικαιροποίησή τους καθημερινά".
[Ημερομηνία:  Fri, 19 Sep 2014 12:41:25 +0300 [19/09/2014 12:41:25 ΜΜ EEST]
Από:  Δ/νση Δ/θμιας Εκπ/σης Ιωαννίνων <mail@dide.ioa.sch.gr>]

pgmEdu.MOODLE

_CREATED: {2012-12-17}

name::
* McsEngl.moodle@cptIt, {2012-12-17}

Moodle: Moodle is a Course Management System (CMS), also known as a Learning Management System (LMS) or a Virtual Learning Environment (VLE). It is a Free web application that educators can use to create effective online learning sites.

_ADDRESS.WPG:
* https://docs.moodle.org/38/en/Features,

pgmEdu.TEACHING

_CREATED: {2013-04-09}

name::
* McsEngl.program.teaching@cptIt,

_SPECIFIC:
* course-managment-system##

Υπολογιστής σε ρόλο καθηγητή: Λογισμικό «αναλαμβάνει» τη διόρθωση γραπτών

08.04.2013 22:16 Σχόλια
-A+A
Tη ζωή των καθηγητών έρχεται να διευκολύνει το νέο λογισμικό που ανέπτυξαν Αμερικανοί επιστήμονες, καθώς αυτό δίνει τη δυνατότητα της διόρθωσης και της βαθμολόγησης γραπτών μέσω ηλεκτρονικών υπολογιστών.

Το πρόγραμμα αναπτύχθηκε για τη πλατφόρμα δωρεάν παράδοσης μαθημάτων EdX, από τα πανεπιστήμια Χάρβαρντ, ΜΙΤ και Μπέρκλεϊ και σύντομα θα διατίθεται δωρεάν σε οποιοδήποτε αντίστοιχο εκπαιδευτικό φορέα θέλει να το χρησιμοποιήσει.

Το συγκεκριμένο λογισμικό, μάλιστα, μπορεί να βαθμολογεί όχι μόνο σύντομες απαντήσεις, αλλά και δοκίμια και εκθέσεις.

Μέσω του προγράμματος αυτού αφενός οι καθηγητές γλιτώνουν χρόνο, αφετέρου, οι μαθητές, όπως υποστηρίζει ένας εκ των επιστημόνων που βοήθησαν στην ανάπτυξη του λογισμικού, θα έχουν τη δυνατότητα να βελτιωθούν καθώς θα μπορούν να ξαναγράφουν αμέσως το κείμενο και να βλέπουν αμέσως αν κατάφεραν να λάβουν έναν καλύτερο βαθμό.

Οπως είναι φυσικό δεν λείπουν και οι αντιδράσεις, καθώς πολλοί καθηγητές επιμένουν ότι ένα αυτόματο σύστημα τεχνητής νοημοσύνης ποτέ δεν θα μπορέσει να υποκαταστήσει έναν ζωντανό δάσκαλο, ενώ στο διαδίκτυο έχει ξεκινήσει μια «εκστρατεία» κατά του λογισμικού, η οποία έχει ήδη συγκεντρώσει πάνω από 2.000 υπογραφές, μεταξύ των οποίων του Νόαμ Τσόμσκι.
[http://www.iefimerida.gr/news/99131/υπολογιστής-σε-ρόλο-καθηγητή-νέο-λογισμικό-«αναλαμβάνει»-τη-διόρθωση-γραπτών]

FvMcs.Cmrpgm.ENTERTAINMENT-(game)

name::
* McsEngl.conceptIt413,
* McsEngl.entertainment software@cptIt,
* McsEngl.cmrpgm.game@cptIt413,
* McsEngl.computer-game@cptIt,
* McsEngl.game@cptIt,
* McsEngl.game application program@cptIt,
* McsEngl.game.computer@cptIt,
* McsEngl.game-program@cptIt413,
* McsEngl.pgm.game@cptIt413,
* McsEngl.program.game@cptIt413,
* McsEngl.prgGam@cptIt413, {2012-10-20}

pgmGam'DEFINITION

Προγράματα για διασκέδαση.

pgmGam'GENERIC

_GENERIC:
* desktop-appl#cptItsoft304#
* PROGRAM#cptIt59#

pgmGam'doing#cptCore475#

name::
* McsEngl.pgmGam'doing@cptIt,

+++#cptIt444-17#

pgmGam'popularity

name::
* McsEngl.pgmGam'popularity@cptIt,

SPECIFIC

name::
* McsEngl.pgmGam.specific@cptIt,

_GENERIC:
* generic-game##
* individual-game

pgmGam.computer.MOBILE

name::
* McsEngl.pgmGam.computer.MOBILE@cptIt,
* McsEngl.mobile-game@cptIt,

pgmGam.generic.MASSIVELY-MULTIPLAYER-ONLINE-RPG

name::
* McsEngl.pgmGam.generic.MASSIVELY-MULTIPLAYER-ONLINE-RPG@cptIt,
* McsEngl.massively-multiplayer-online-role-playing-game@cptIt, {2012-12-20}

Massively multiplayer online role-playing game (MMORPG) is a genre of role-playing video games in which a very large number of players interact with one another within a virtual game world.

As in all RPGs, players assume the role of a character (often in a fantasy world) and take control over many of that character's actions. MMORPGs are distinguished from single-player or small multi-player online RPGs by the number of players, and by the game's persistent world (usually hosted by the game's publisher), which continues to exist and evolve while the player is offline and away from the game.

MMORPGs are played throughout the world. Worldwide revenues for MMORPGs exceeded half a billion dollars in 2005,[1] and Western revenues exceeded US$1 billion in 2006.[2] In 2008, Western consumer spending on subscription MMOGs grew to $1.4 billion.[3] World of Warcraft, a popular MMORPG, has more than 10 million subscribers as of February 2012.[4] Star Wars: The Old Republic, released in 2011, became the world's 'Fastest-Growing MMO Ever' after gaining 1 million subscribers within the first three days of its launch.[5][6]
[http://en.wikipedia.org/wiki/MMORPG]

pgmGam.generic.ONLINE

name::
* McsEngl.pgmGam.generic.ONLINE@cptIt,

* Φυλάκισε τη γάτα: http://www.gamedesign.jp/flash/chatnoir/chatnoir.swf,

pgmGam.generic.ROLE-PLAYING-GAME

name::
* McsEngl.pgmGam.generic.ROLE-PLAYING-GAME@cptIt,
* McsEngl.role-playing-game@cptIt, {2012-12-20}

A role-playing game (RPG and sometimes roleplaying game[1][2]) is a game in which players assume the roles of characters in a fictional setting. Players take responsibility for acting out these roles within a narrative, either through literal acting, or through a process of structured decision-making or character development.[3] Actions taken within many games succeed or fail according to a formal system of rules and guidelines.[4]

There are several forms of RPG. The original form, sometimes called the tabletop RPG, is conducted through discussion, whereas in live action role-playing games (LARP) players physically perform their characters' actions.[5] In both of these forms, an arranger called a game master (GM) usually decides on the rules and setting to be used and acts as referee, while each of the other players plays the role of a single character.[6]

Several varieties of RPG also exist in electronic media, such as multi-player text-based MUDs and their graphics-based successors, massively multiplayer online role-playing games (MMORPGs). Role-playing games also include single-player offline role-playing video games in which players control a character or team who undertake quests, and may include capabilities that advance using statistical mechanics. These games often share settings and rules with tabletop RPGs, but emphasize character advancement more than collaborative storytelling.[7][8]

Despite this variety of forms, some game forms such as trading card games and wargames that are related to role-playing games may not be included. Role-playing activity may sometimes be present in such games, but it is not the primary focus.[9] The term is also sometimes used to describe roleplay simulation games and exercises used in teaching, training, and academic research.
[http://en.wikipedia.org/wiki/Role-playing_game]

pgmGam.generic.VIDEO

name::
* McsEngl.pgmGam.generic.VIDEO@cptIt,
* McsEngl.videogame@cptIt,

How Many Video Game Players Are over 50?
26% of all video game players are over 50 years old.

Nearly six out of every 10 Americans play video games, and 26% of video
game players are over 50, according to 2010 findings from the Entertainment
Software Rating Board. Although playing video games is often thought of as
a pastime for a younger demographic, nearly half of all video game players
are adults between ages 18 and 49. In fact, there are even slightly more
video gamers over 50 than kids and teenagers – only 25% of gamers are
under 18, the lowest percentage demographic. The average overall age of a
video game player in the US is 34, and most players have been taking part
in the activity for approximately 12 years.
Read More: http://www.wisegeek.com/how-many-video-game-players-are-over-50.htm?m, {2015-03-01}

pgmGam.CANDY-CRUSH

name::
* McsEngl.pgmGam.CANDY-CRUSH@cptIt,
* McsEngl.candy-crush-game@cptIt,

How Popular Is the Mobile Game Candy Crush?
In the first quarter of 2014, the mobile game Candy Crush made 56% more revenue than all Nintendo games combined.

The mobile game Candy Crush is extremely popular. In the first quarter of
2014, the game made 56% more revenue than all Nintendo games combined.
Often referred to as being "irresistible" and "addictive," Candy Crush is a
mobile puzzle game which requires players to match 3 same-colored candies.
The game becomes more difficult as the gamer advances through the stages
and additional lives are available for purchase. The game became so popular
after it released as a mobile application in 2012 that it was played 151
billion times in its first year alone.

Read More: http://www.wisegeek.com/how-popular-is-the-mobile-game-candy-crush.htm?m, 2015-05-24

pgmGam.FLAPPY-BIRD

name::
* McsEngl.pgmGam.FLAPPY-BIRD@cptIt,
* McsEngl.flappy-bird@cptIt,

_DESCRIPTION:
Ο δημιουργός του Flappy Bird «έκοψε» το παιχνίδι από τα App Stores
Ο δημιουργός του Flappy Bird «έκοψε» το παιχνίδι από τα App Stores
Ήταν ένα από τα πλέον δημοφιλή παιχνίδια στα App Stores. Παρ' όλα αυτά, το «Flappy Bird» «κατέβηκε» από τα app stores το Σαββατοκύριακο, με απόφαση του ίδιου του δημιουργού. Ο λόγος; Επειδή το παιχνίδι κατέστρεψε την «απλή ζωή» του...

Ο Dong Nguyen, από το Ανόι του Βιετνάμ, ενημέρωσε με ένα tweet το Σάββατο ότι σκοπεύει να «κόψει» το παιχνίδι.

Μόλις την προηγούμενη εβδομάδα ο ίδιος είχε δηλώσει σε συνέντευξή του στο περιοδικό «The Verge» ότι κέρδιζε από διαφημίσεις 50.000 δολάρια την ημέρα.
Ο Nguyen, όμως, δεν περίμενε ποτέ ότι το παιχνίδι που έφτιαξε θα είχε τόσο μεγάλη επιτυχία. Με νέο του tweet αποφάσισε να το κατεβάσει, επειδή το μίσησε που του κατέστρεψε την απλή ζωή του, ζητώντας να τον αφήσουν όλοι στην ησυχία του...
[http://www.imerisia.gr/article.asp?catid=27200&subid=2&pubid=113217852]

FvMcs.Cmrpgm.ide.BORLAND-TURBO-PASCAL (6.0)-(tp)

name::
* McsEngl.conceptItsoft539,
* McsEngl.Cmrpgm.ide.BORLAND-TURBO-PASCAL (6.0)-(tp)@cptIt,
* McsEngl.FvMcs.Cmrpgm.ide.BORLAND-TURBO-PASCAL (6.0)-(tp)@cptIt,
* McsEngl.Borland-Pascal@cptIt,
* McsEngl.borland'pascal@cptItsoft539,
* McsEngl.turbo-pascal@cptIt,

DEFINITION

BORLAND PASCAL is LANGUAGE-PROGRAM#cptIt430.1# ...
[NIKOS, JUNE 1995]

GENERIC

_GENERIC:
* pascal#cptItsoft1039#
* IDE#cptIt430#

INFO-TECH-BUSINESS#cptEconomy7.108#

BORLAND INTERNATIONAL
ΑΝΤΙΠΡΟΣΩΠΟΣ M-DATA,

tp'OPERATING-SYSTEM#cptIt434#

name::
* McsEngl.tp'OPERATING-SYSTEM@cptIt,

DOS,
WINDOWS 7.0(1993)

tp'PRICE#cptEconomy541.44#

name::
* McsEngl.tp'PRICE@cptIt,

40000 DRX(MAY 1993)

tp'PROGRAM#cptIt59#

name::
* McsEngl.tp'PROGRAM@cptIt,

tp'UNIT

name::
* McsEngl.tp'UNIT@cptIt,

A unit
is a collection of constants, data types, variables, procedures, and functions. Each unit is compiled separately; you can use each unit in your program.
Turbo Pascal provides eight predefined units;
Turbo3, Graph3, and Graph are the only ones not stored in TURBO.TPL:
Crt Dos Graph Overlay Printer System
In addition, there are a number of units included in Turbo Vision, Borland's object library for windowing applications:
App Dialogs Drivers HistList Memory Menus Objects TextView Views

A Review of Unit Files
There are two types of unit files: .TPU files and .TPL files. When you compile a unit, Turbo Pascal puts the resulting object code in a .TPU (Turbo Pascal Unit) file, which always contains exactly one unit.
A .TPL (Turbo Pascal Library) file, on the other hand, can contain multiple units. For example, all the units that come on your Turbo Pascal disk are in the file TURBO.TPL. The file TURBO.TPL is currently the only library file Turbo Pascal will load units from.
You may have noticed, though, that you can use the standard Turbo Pascal units without giving a file name. That's because these units are stored in the Turbo Pascal standard unit file--TURBO.TPL on your distribution disk. Because the units are in that file, any program can use them without "knowing" their location.
Suppose you have a unit called TOOLS.TPU, and you use it in many different programs. Though adding Tools to TURBO.TPL takes up memory (TURBO.TPL is automatically loaded into memory by the compiler), adding it to the resident library makes "using" Tools faster because the unit is in memory instead of on disk.
There are five standard units already in TURBO.TPL: System, Overlay, Printer, Crt, and Dos.
[tp6 doc]

FvMcs.Cmrpgm.KNOWLEDGE

_CREATED: 1997oct18 pgmKnl'toc#ql:[Level CONCEPT:rl? conceptIt497#.

name::
* McsEngl.conceptIt497,
* McsEngl.Cmrpgm.KNOWLEDGE@cptIt,
* McsEngl.FvMcs.Cmrpgm.KNOWLEDGE@cptIt,
* McsEngl.information'management'program@cptIt497, {2007-11-28}
* McsEngl.knowledge-program@cptIt497, {2011-09-02}
* McsEngl.knowledge-representation-program@cptIt497, {2007-11-29}
* McsEngl.knowledge-acquisition-system@cptIt,
* McsEngl.knowledge-based-program@cptIt,
* McsEngl.knowledge-management-system@cptIt,
* McsEngl.knowledge-manipulation-program@cptIt,
* McsEngl.knowledge-system@cptIt,
* McsEngl.knowledge-representation-system@cptIt,
* McsEngl.knowledge-representaion-and-reasoning-system@cptIt,
* McsEngl.pgm.knowledge@cptIt,
* McsEngl.program.knowledge@cptIt497,
* McsEngl.programKnowledge@cptIt497, {2011-09-02}
* McsEngl.science-support-system@cptIt, {1999-08-27}
* McsEngl.prgKnl@cptIt497, {2012-11-22}
* McsEngl.prgKno@cptIt497, {2011-09-06}
* McsEngl.imp@cptIt497,
* McsEngl.ims@cptIt,
* McsEngl.krp@cptIt497,
* McsEngl.kbs@cptIt,
* McsEngl.kms@cptIt,
* McsEngl.krs@cptIt,
* McsEngl.sss@cptIt,
=== _Old:
* McsEngl.information'management'system@cptIt497,
====== lagoGreek:
* McsElln.ΣΥΣΤΗΜΑ-ΔΙΑΧΕΙΡΙΣΗΣ-ΓΝΩΣΗΣ@cptIt,
* McsElln.ΣΥΣΤΗΜΑ-ΒΑΣΙΣΜΕΝΟ-ΣΤΗ-ΓΝΩΣΗ@cptIt,

SPECIFIC SYSTEMS:
expert system,
frame based system,
frame representation system,

1999aug27:
In 1990 as sss I was thinking something like my todays scs.
Today sss I mean a more general scs AND the scs is a concrete sss that uses structured-concepts to represent knowledge.
I call it also kms even thought today as kms many mean a system that manages corporate-knowledge.
[nikkas]

1990: 'Knowledge Management' term:
Riedesel, J. D. (1990). "Knowledge Management: An Abstraction of Knowledge Base and Database Management Systems". The 5th Annual AI Systems in Government Conference, Washington, D.C., 80-87.

SOURCES

SOURCES

knowledge representation and reasoning systems:
[KIF MANUAL 3.0, GENESERETH-FIKES, 1992] 2000jul22

ΣΥΣΤΗΜΑ ΒΑΣΙΣΜΕΝΟ ΣΤΗ ΓΝΩΣΗ,
[Βιβλίο α' λυκείου, έκδοση α' 1998, σελ 103]

DEFINITION

Knowledge_Representation_Program is an Application_Program#cptIt304# that uses langeto#cptIt501.2# and kognepto_representation_methods.
[KasNik, 2008-01-26]

Knowledge_Representation_Program is an Application_Program#cptIt304# that uses mineto_model#cptCore593# or brainepto_model#cptCore762# knowledge_representation-methods#cptIt501# .
[KasNik, 2007-11-29]

Knowledge-Management-System is a SYSTEM (computer-system#cptIt453#) that MANAGES (stores and retrieves) KNOWLEDGE#cptCore476.1# (conceptual models).
KMS is not a DATABASE-SYSTEM that stores DATA, and not an INFORMATION-MANAGEMENT-SYSTEM that stores DOCUMENTS.
[nikkas 2000jul16]

Many AI researchers have wanted to represent information such as:
- block A is on block B
- Jill's car is red
- Meningitis is an infectious disease
They would like to collect all this declarative information and have another program apply it in the right order to solve a problem. This is called inference. By combining declarative information and inference we have a knowledge-based system. Large bodies of declarative information are called knowledge bases.
[SOURCE: http://projects.technwledge.com/hpkb/intro.html, (2000jul25)]

KMS is a COMPUTER-SYSTEM#cptIt453.1# that store/organize and retrieve KNOWLEDGE not data, using a KNOWLEDGE-REPRESENTATION-FORMALISM.
We need to define 'knowledge', 'computer-system', 'krf'.
[nikkas 1999aug31]

KMS is a computer-system that store and retrieve knowledge not data (of course knowledge and data need definition!!)
[nikkas 1999aug27]

KMS is a 'program#cptIt59.1#' that manages (store, retrieve, edit and INFERENCE) 'human-information#cptCore445.1#', using a 'knowledge-representaion-formalism#cptIt501#'.
[nikos, {1998-04-26}]

KMS is a 'program#cptIt59.1#' that manages (store, retrieve and edit) 'human-information#cptCore445.1#', using a 'knowledge-representaion-formalism#cptIt501#'.
[nikos, {1998-04-24}]

Knowledge management systems are COMPUTER PROGRAMS that
- store, organize and
- retrieve knowledge.
They attempt to handle knowledge in a way that their developers believe is more compact, informative and convenient than conventional knowledge storage forms such as books. Their knowledge is usually stored in a knowledge base, a structured repository of small nuggets of information. [Skuce and Lethbridge, 1995 to appear]
[Kavanagh, Text Analyzer] 1998jul17

A basic problem in Artificial Intelligence applications is the creation of knowledge resources, that is, systems that can serve to store and retrieve knowledge in structured formats. Traditionally, these are called knowledge bases, which are highly abstracted, structured, condensed and often formalized sources of knowledge. Years of experience have shown that building such knowledge bases can be very difficult. This has two main causes: a lack of sufficiently powerful tools for creating complex knowledge bases, and a lack of understanding of the basic conceptual and linguistic needs and behaviour of users.
[http://www.csi.uottawa.ca/~doug/LAKE.html Doug Skuce
created: 1997oct18]

There exists no commonly accepted definition of the term Knowledge Based Systems. Here comes one of the better alternative definitions: "[Knowledge-Based] systems typically separate the declarative knowledge from the code that controls the inference and search procedures contained in a system. The declarative knowledge is kept in a knowledge base while the control knowledge is kept in a separate area called an inference engine. An inference engine is an algorithm that dynamically directs or controls the system when it searches its knowledge base."
Source: Harmon, Paul and Hall, Curtis. "Intelligent Software Systems Development: An IS Manager's Guide." John Wiley & Sons, Inc. New York, New York. 1993. p. 184.

pgmKnl'GENERIC

_GENERIC:
* PROGRAM#cptIt59#

pgmKnl'WHOLE

_WHOLE:
* systemItComputer#cptItsoft453#, {1999-09-23}

Knowledge-Management-System is a SYSTEM (computer-system#cptIt453#) that MANAGES (stores and retrieves) KNOWLEDGE#cptCore476.1# (conceptual models).
KMS is not a DATABASE-SYSTEM that stores DATA, and not an INFORMATION-MANAGEMENT-SYSTEM that stores DOCUMENTS.
[nikkas 2000jul16]

pgmKnl'ENVIRONMENT#cptCore756#

name::
* McsEngl.pgmKnl'ENVIRONMENT@cptIt,

Environment is simply the world in which an agent operates. The aspects of an agent's intended environment often influence the properties it must have, as well as many of the design decisions made in developing the architecture of that agent. Different aspects of the environment are presented in the list below. Note that these categories are not mutually-exclusive; for instance, an environment may be both dynamic and unpredictable.
Dynamic vs. Static Agent Limited Resources Complete Knowledge Information Overload Learning Cost Events Unpredictable Asynchronous Concurrent Varying Priority Limited Response Time External demands Multiple Tasks Supervisors The following list includes environmental considerations that influenced the designers though they do not affect the agent directly: Consistent Environments Frame Problem Software Engineering
[http://krusty.eecs.umich.edu/cogarch4/toc_defs/defs_env.html] 1998feb16

The Frame-Problem

The frame problem can be described as the task of any agent acting in a dynamic environment to keep its model of the world and its knowledge in general in synchrony with the world. In the case of detecting changes and asserting them perceptually, the problem is logically trivial. However, the effect of these changes on derivational knowledge and on the state of goals and strategies is non-trivial and not understood.
Suppose a robot has the task of stacking blocks and after partly completing the task, the blocks are toppled. In this case a strategy of back-tracking may be sufficient, but not all cases are this straight-forward. There could be many state-dependent decisions made which could be invalidated by the changes to the world but not easily detected since the state in which the decision was made could be far in the past.
STRIPS and STRIPS-like systems approach this problem by building goal and state trees that attempt to track the dependencies of knowledge on other knowledge so that when a particular information is invalidated, its antecedants can be efficiently and completely traced and adjusted. However, this represents only the knowledge-maintenance aspect of the problem. The problem of determining what to do next may or may not still be clear. If not clear, a strategy for reanalyzing goals must be present.
[http://krusty.eecs.umich.edu/cogarch4/toc_defs/defs_env/defs_frame.html] 1998feb16

pgmKnl'Budget#cptEconomy540.16#

name::
* McsEngl.pgmKnl'Budget@cptIt,

kb'ENVIRONMENT#cptCore756#

name::
* McsEngl.kb'ENVIRONMENT@cptIt,

kb & database

name::
* McsEngl.kb'and'Database@cptIt497.1i,

A knowledge base that is largely full of instances in fact could be called a database. There is little to distinguish such an entity from an object-oriented database. A key feature of a knowledge base that distinguishes it from a database is the focus on the relations between, and the manipulation of types. In database parlance, when one manipulates the type hierarchy, one is manipulating the schema for instances.
[Tim Lethbridge's PhD Thesis 1994nov]

pgmKnl'Execution#cptIt56#

name::
* McsEngl.pgmKnl'Execution@cptIt,

pgmKnl'evaluation#cptCore546.107#

name::
* McsEngl.pgmKnl'evaluation@cptIt,

A Quick Overview of Evaluation Methods

A longer version of this page is available elsewhere. When we look at various techniques for evaluation knowledge-based systems, we can see some general themes.

Panel-based evaluation: The expert system and a panel of human experts assess some cases. The human experts offer their recommendations before seeing the results of the expert system. The results are compared. This is how MYCIN [Yu79] and CASNET [Weiss78] were assessed. There are two drawback to panel-based evaluation: the panel must be convened (getting such top experts can be a hard task) and the panel must be reconvened if ever changes are made to the expert system. Panels are hence not suitable for assessing multiple variants on an expert system (large-scale variant assessment requires mutation studies or simulated experts).

Knowledge-level (KL) studies: Explorations of the utility of PSMs (e.g. [Cor95] ) or the problem space computational model [Yost92a] . Sometimes, some algorithmic knowledge is used to assess the PSM (e.g. [Motta95] , [Motta96] , [Zdrahal94] ). Alternatively, the formal properties of a KBS specification language can be analysed [VanHarm96] .

Numerous researchers have explored the meaning of a "good" measurement and how we should analyse it (e.g. [Fenton91] , [Basili92] , [Offen97] ). General empirical methods for AI in general are also discussed in [Cohen95] . Researchers ignore these principles of measurements at their peril.

Mutation studies: The field of knowledge representation has a well-developed evaluation methodology for studying the tractability of a KR system. (e.g. [Cheeseman91] , [Gent95] , [Smith96] ). Typically, these do not extend to human-in-the-loop systems (but see [Waugh97] , [Menzies96b] for experiments with algorithmic analysis of human-in-the-loop systems). Such studies have to be constructed with great care (see [Gent97] , [Johnson96] , [Mitchell96] ).

Researchers in Human-computer interaction (HCI) studies have evolved techniques for analysing human-in-the-loop systems (see [Balbo95] , [Saud89] , [Vicente95] ).

Simulated expert studies are a technique for running numerous trials of variants of a KBS. Humans get tired very quickly with such multiple trials. In the simulated expert approach, a "stand-in" is built to mimic the human. Examples of PS-based simulated experts are:
[Lark87] which studied the analysis of the merits of sentential vs diagrammatic representations. [Lohse93] which studied the utility of different visual forms for comprehension. [Compton95] : which studied variants in the ripple-down-rule approach.
--------------------------------------------------------------------------------
This page is one of the Evaluating Knowledge Engineering web pages maintained by Tim Menzies [timm@cse.unsw.edu.au]. Last modified: 20/01/98 .
[http://www.cse.unsw.edu.au/~timm/pub/eval/]

DISADVANTAGE

NAMES:
The names used for manipulation must be the most common names used in literature AND not be the ones used to implement the system.
[nikos, 1997oct28]

LIMITATIONS

_DEFINITION:
What the system can't do.
[nikos, {1998-04-22}]

PROBLEMS

Two of the hardest problems in developing a KBS are
- getting the information from medical records and
- working out the terminology and concept system (the 'ontology').
- A third major problem is that it has proved very difficult to get different KBSs to work together.
[galen overview 1994] {1998-04-14}

pgmKnl'Knowledge-engineering

name::
* McsEngl.pgmKnl'Knowledge-engineering@cptIt,
* McsEngl.knowledge-engineering@cptIt497i,

Knowledge engineering (KE) refers to the building, maintaining and development of knowledge-based systems. It has a great deal in common with software engineering, and is related to many computer science domains such as artificial intelligence, databases, data mining, expert systems, decision support systems and geographic information systems. Knowledge engineering is also related to mathematical logic, as well as strongly involved in cognitive science and socio-cognitive engineering where the knowledge is produced by socio-cognitive aggregates (mainly humans) and is structured according to our understanding of how human reasoning and logic works.
[http://en.wikipedia.org/wiki/Knowledge_engineering]

pgmKnl'KnowledgeBase

_CREATED: {2007-11-29} {1997-10-21}

name::
* McsEngl.pgmKnl'KnowledgeBase@cptIt,
* McsEngl.conceptIt497.1,
* McsEngl.collectionKnowledge-497.1@cptIt, {2011-09-03}
* McsEngl.kb@cptIt,
* McsEngl.kb-497.1@cptIt,
* McsEngl.knowledge-base@cptIt,
* McsEngl.knowledgebase@cptIt497.1,
* McsEngl.knowledge-system@cptIt,
====== lagoGreek:
* McsElln.ΒΑΣΗ-ΓΝΩΣΕΩΝ@cptIt,
====== lagoEsperanto:
* McsEngl.kona-baso@lagoEspo,
* McsEspo.kona-baso@cptIt,
====== lagoChinese:
zhi1shi2ku4; knowledge base,

kb'GENERIC:
* collectionData#cptItsoft97#
===
Knowledge is contained in a knowledge base.
[Tim Lethbridge's PhD Thesis 1994nov]

_DEFINITION:
* analytic:
KNOWLEDGE-BASE is an APPLICATION#cptIt97# of kms#cptIt497#.
[nikos, {1997-11-09}]
===
knowledge base.
An informal term for a collection of information that includes an ontology as one component. Besides an ontology, a knowledge base may contain information specified in a declarative language such as logic or expert-system rules, but it may also include unstructured or unformalized information expressed in natural language or procedural code.
[http://www.jfsowa.com/ontology/ontoshar.htm]
===
A knowledge base (kb) is a structured set of statements about some topic such as Java, operating systems, cars, hockey. It presents facts that you would otherwise find in a book or set of books or set of web sites. The advantage is the facts are much clearer, simpler, and easier to find, relate, and understand. This note describes the kb part of DocKMan (Document based Knowledge Management), a system under development at the University of Ottawa.
[] 1998jul10

* working
* KNOWLEDGE BASE is the CONTENT written by a Knowledge-Management-System#cptIt497#, using a knowledge-representation-language.
[NIKOS, 1997oct21]

* A knowledge base is a collection of interrelated concepts.
[Tim Lethbridge's PhD Thesis 1994nov]

* The Cyc KB is the repository of Cyc's knowledge.

* The notion of a knowledge base (kb) has many varieties in the AI literature. For us, a kb is a hierarchically structured collection of statements about some domain or subject area. These statements can take many forms, ranging from
a) formal (having precise syntax and semantics, e.g. a version of predicate logic) to
b) simple fragments of texts, or
c) urls to web documents.
[IKARUS ...ikarus4.html 1996]

* A knowledge base is a place to store information about a topic in an concise, organized manner. Understanding a topic is easier when you look at a knowledge base than when you read a book because only the essential information is in the knowledge base. You can use a knowledge base to see information that someone has stored or you can build your own knowledge base on a topic that is of interest to you. If you run Ikarus, you can look at some sample knowledge bases that other people have created. Feel free to browse them.
[IKARUS intro 1996]

* ANALOGIES:
book  topic
kms  kb
[nikos 1997oct30]

kb'DOMAIN

name::
* McsEngl.kb'DOMAIN@cptIt,
* McsEngl.subject-domain@cptIt,

kb'conceptual-chain

name::
* McsEngl.kb'conceptual-chain@cptIt,
* McsEngl.kb'CONCEPTUAL'HIERARCHY@cptIt,

_DESCRIPTION:
The organization of knowledge results in CHAINS-OF-CONCEPTS such as:
* inheritance hierarchy (general-subgeneral relations)
* whole chain (whole relations)
* parts chains (part relations)
[hmnSngo.2000jul29]

SPECIFIC

name::
* McsEngl.kb.specific@cptIt,

_SPECIFIC: kb.Alphabetically:
* ontology#cptItsoft511.1#
* worldview-kb#cptCore578#

pgmKnl'knowledge-based-system (HardSoft)

_CREATED: {2014-02-06}

name::
* McsEngl.pgmKnl'knowledge-based-system (HardSoft)@cptIt,
* McsEngl.conceptIt497.19,
* McsEngl.knowledge-based-system@cptIt497.19,

_DESCRIPTION:
Kbs the hardware and the software system that manages knowledge.
[hmnSngo.2014-02-06]

pgmKnl'knowledge-computer-language#cptIt525#

name::
* McsEngl.pgmKnl'knowledge-computer-language@cptIt,

pgmKnl'Operating-system#cptIt434#

name::
* McsEngl.pgmKnl'Operating-system@cptIt,

pgmKnl'Organization-Research

name::
* McsEngl.pgmKnl'Organization-Research@cptIt,

I classify them per country per organization.

pgmKnl'ASIA

name::
* McsEngl.pgmKnl'ASIA@cptIt,

pgmKnl'JAPAN

name::
* McsEngl.pgmKnl'JAPAN@cptIt,

Hitachi Advanced Research Laboratory:
(Hatoyama)
** http://hatoyama.hitachi.co.jp/
** ES/KERNEL2, the new version of the current best-selling tool, is geared to the development of large-scale applications (Hitachi Ltd. undated brochure).
-- Hitachi Laboratory was one of the early exploratory users of ES technology.
[JTEC 1993]

KYOTO UNIVERSITY:

OSAKA UNIVERSITY:
(Osaka)
Mizoguchi Lab, ISIR
http://www.ei.sanken.osaka-u.ac.jp/

UNIVERSITY OF TOKYO:

pgmKnl'EUROPE

name::
* McsEngl.pgmKnl'EUROPE@cptIt,

pgmKnl'BELGIUM

name::
* McsEngl.pgmKnl'BELGIUM@cptIt,

Free University of Brussels:
(Brussels)
VUB AI Laboratory
http://arti.vub.ac.be/www/welcome.html

PCP (http://pespmc1.vub.ac.be)

pgmKnl'FRANCE

name::
* McsEngl.pgmKnl'FRANCE@cptIt,

INRIA Research Institute in computer science:
http://zenon.inria.fr:8003/Programmes/Programme3-eng.html
INRIA - Program 3
(France)

UNIVERSITY OF PARIS-SUD:
(Paris)
Laboratorie de Recherche en Informatique,
LRI - Equipe Intelligence Artificielle et Systemes d'Inference
http://www.lri.fr/equipes/iasi/

pgmKnl'GERMANY

name::
* McsEngl.pgmKnl'GERMANY@cptIt,

AACHEN UNIVERSITY OF TECHNOLOGY (RWTH):
** Creator of ConceptBase
** http://www-i5.informatik.rwth-aachen.de/CBdoc/

BAVARIAN RESEARCH CENTER FOR KNOWLEDGE-BASED SYSTEMS:
** The Bavarian Research Center for Knowledge-Based Systems (FORWISS) is one of the leading German research organizations for appl ...
** http://www.forwiss.tu-muenchen.de/index.eng.html

University of Kaiserslautern:
KAISERSLAUTERN (south-west Germany, in Rhineland-Palatinate, since 1970):
WG Artificial Intelligence - Expert Systems Group
http://bern.informatik.uni-kl.de/index-en.html

German National Research Center for Computer Science
GMD - Artificial Intelligence Research Division
http://nathan.gmd.de/

**The Machine Learning Group
http://nathan.gmd.de/projects/ml/home.html

pgmKnl'ITALY

name::
* McsEngl.pgmKnl'ITALY@cptIt,

University of Bari,
(Bari, against albania)
LACAM - Knowledge Acquisition and Machine Learning Laboratory
http://plotkin.uniba.it:8000/

University of Pavia,
(Pavia)
The Medical Informatics Laboratory Research Activities
http://ipvaimed9.unipv.it/lab/research2.html"

IRST (Istituto per la Ricerca Scientifica e Tecnologica)
I-38050 Povo TN, ITALY.
KNOWLEDGE REPRESENTATION AND REASONING GROUP:
http://mnemosyne.itc.it:1024/
** Description Logics.
Our current research interests include Knowledge Representation and Reasoning in Artificial Intelligence, Description Logics, Computational Logics, Natural Language Formal Semantics, Formal Ontology, Conceptual Modeling, and Flexible Access to Information. We work on the research and the development of expressive and efficient description logic based systems, i.e. knowledge representation systems of the KL-ONE family, with formal grounds for ontological categories like parts and pluralities, time, events. We study the computational properties of the representation of natural language semantics using description logics; we developed the semantics processing module of a large natural language dialogue system. We are investigating the challenges of using description logics in a information system context, both at the conceptual modeling and at the query processing levels.
[] 1998feb20

pgmKnl'NETHERLANDS

name::
* McsEngl.pgmKnl'NETHERLANDS@cptIt,

DELFT UNIVERSITY OF TECHNOLOGY:
Knowledge Based Systems Group,
http://www.kbs.twi.tudelft.nl/.

TWENTE UNIVERSITY OF TECHNOLOGY (1961):
(Enschede)
Laboratory for Production and Design Engineering (LPDE)
http://utwpue.wb.utwente.nl/home.html

UNIVERSITY OF AMSTERDAM:
(Amsterdam)
SWI Department of Social Sciences Informatics
http://www.swi.psy.uva.nl.

http://www.cs.vu.nl/fb/general/werkeenheden/700.html
Research Group Artificial Inteligence
Vrije University Amsterdam (Netherlands)

pgmKnl'SWEDEN

name::
* McsEngl.pgmKnl'SWEDEN@cptIt,

SICS - Knowledge Technology and Methodology Group
http://www.sics.se/ktm/ktm.html

pgmKnl'UK

name::
* McsEngl.pgmKnl'UK@cptIt,

University of Aberdeen (1860):
ABERDEEN(scotland):
Department of Computing Science,
http://www.csd.abdn.ac.uk/

University of Edinburgh:
EDINBURGH:
Department of Artificial Intelligence (http://www.dai.ed.ac.uk),
AIAI - Artificial Intelligence Applications Institute,
http://www.aiai.ed.ac.uk.

UNIVERSITY OF MANCHESTER:
** Creator of galen.
** http://www.cs.man.ac.uk/mig/galen/

University of Nottingham,
NOTTINGHAM:
Artificial Intelligence Research Group,
http://www.psyc.nott.ac.uk/aigr/home-page.html

pgmKnl'AMERICA

name::
* McsEngl.pgmKnl'AMERICA@cptIt,

pgmKnl'CANADA

name::
* McsEngl.pgmKnl'CANADA@cptIt,

NATIONAL RESEARCH COUNCIL OF CANADA:
Institute for Information Technology,
http://ai.iit.nrc.ca/home_page.html.

UNIVERSITY OF CALGARY:
CALGARY(Alberta province):
Knowledge science institute,
http://ksi.cpsc.ucalgary.ca/KSI/

UNIVERSITY OF OTTAWA:
OTTAWA (Capital of canada on Ontario province):
Language Analysis and Knowledge Engineering Lab (LAKE),
** http://www.csi.uottawa.ca/~doug/LAKE.html
** This lab is concerned mainly with the theory and practice of converting knowledge in its "raw" forms, usually natural language documents or only in minds, into the forms that are required by knowledge-based software systems or by humans seeking quick and accurate knowledge. We term the generic problem "knowledge management".
Knowledge management involves building knowledge bases, defining the meaning of terms, analysing documents to discover critical information, and collecting, analysing, exploring and displaying both documents and knowledge bases using techniques designed to maximize understanding and minimize errors. Our approach assumes a close relationship between knowledge bases and documents: a knowledge base should represent an abstraction and clarification of, and often corrections to, documents. We are working on tools and techniques to permit collecting documents, classifying, analysing them, extracting relevant portions, and ultimately storing any retrieved "nuggets" of knowledge in knowledge bases in a seamless manner.
[] 1998feb20

pgmKnl'USA

name::
* McsEngl.pgmKnl'USA@cptIt,

AT&T:
** Creator of classic system.
** http://www.research.att.com/sw/tools/classic/classic.html

CARNEGIE MELLON UNIVERSITY:
(privately controlled institution in Pittsburgh, Pennsylvania, founded in 1900 )
Computer Science Department,
http://www.cs.cmu.edu/Web/Groups/AI/html/repository.html.

Cycorp, Inc:
(Austin, Texas)
** Creator of Cyc.
** http://www.cyc.com.

MIT:
http://www.ai.mit.edu/

PRINCETON UNIVERSITY:
** Creator of WordNet
** http://www.cogsci.princeton.edu/~wn/

SIGNIFORM:
** Creator of ThoughtTreasure
** http://www.signiform.com

SRI International:
a) Artificial Intelligence Center
The AI Center at SRI International does research in three areas: Natural Language, Perception, and Representation and Reasoning. One of the world's great -- and hugely successful -- research and policy analysis think tanks, SRI operates out of Menlo Park, California.
http://www.ai.sri.com/

+++STANFORD UNIVERSITY:
(California state / Sacramento capital):
Computer Science Department,
a) Knowledge Systems Laboratory
** Thomas Gruber, gruber@hpp.stanford.edu, http://www-ksl.stanford.edu/people/gruber/
** Creator of Ontoligua
** http://www-ksl.stanford.edu./

UNIVERSITY OF ILINOIS at Urbana-Champaign :
Knowledge Based Systems Group,
** The research of the KBS Group focuses on the interplay between expert system shell architectures, machine learning, probabilistic reasoning, and immersive expert interfaces.
** http://www-kbs.ai.uiuc.edu/.

UNIVERSITY OF MICHIGAN:
AI Laboratory,
http://krusty.eecs.umich.edu/.

UNIVERSITY OF SOUTHERN CALIFORNIA:
Information Sciences Institute,
** Creator of LOOM.
** http://www.isi.edu/isd/LOOM/LOOM-HOME.html

UNIVERSITY OF TEXAS:
(Texas state, Austin capital)
KBS Group,
** Work on large-scale, multifunctional knowledge-bases.
** http://www.cs.utexas.edu/users/mfkb/index.html

pgmKnl'Popularity

name::
* McsEngl.pgmKnl'Popularity@cptIt,

The widespread-use will come when the system will be
a) easy to use and
b) functionallity that obviously will help intellectual-processes.
[hmnSngo.2000jul28]

Unfortunately, most knowledge representation technology so far developed has not been practical enough for widespread use.
[Tim Lethbridge's PhD Thesis 1994nov]

pgmKnl'Price#cptEconomy541.44#

name::
* McsEngl.pgmKnl'Price@cptIt,

pgmKnl'ProgramIDE#cptIt430#

name::
* McsEngl.pgmKnl'ProgramIDE@cptIt,

pgmKnl'Programing-language#cptIt248#

name::
* McsEngl.pgmKnl'Programing-language@cptIt,

_SPECIFIC:
* JAVA
* PROLOG

pgmKnl'resourceInfHmn#cptResource843#

name::
* McsEngl.pgmKnl'resourceInfHmn@cptIt,

_ADDRESS.WPG:
* Toward Principles for the Design of Ontologies Used for Knowledge Sharing
Revision: August 23, 1993
Thomas R. Gruber
http://tomgruber.org/writing/onto-design.pdf,

+http://www.bus.orst.edu/faculty/brownc/es_tutor/es_tutor.htm:
Basic theory on KBS and expert systems

+http://itri.loyola.edu/kb/:
Knowledge-Based Systems In Japan (1993)

pgmKnl'SOURCE'TO'CHECK

name::
* McsEngl.pgmKnl'SOURCE'TO'CHECK@cptIt,

http://www.commonkads.uva.nl/

http://www.swi.psy.uva.nl/projects/IBROW3/home.html
IBROW3 is an Esprit project, nr. 27169
The objective of IBROW3 is to develop intelligent brokers that are able to distributively configure reusable components into knowledge systems through the World-Wide Web. The WWW is changing the nature of software development to a distributive plug & play process, which requires a new kind of managing software: intelligent software brokers. IBROW3 will integrate research on heterogeneous DB, interoperability and Web technology with knowledge-system technology and ontologies.

pgmKnl'BIBLIOGRAPHY

name::
* McsEngl.pgmKnl'BIBLIOGRAPHY@cptIt,

1976: Shortliffe, E.H. Computer-Based Medical Consultation: MYCIN. Elsvier/North-Holland.

1984: T.P. Kehler and G.D. Clemenson. KEE: The Knowledge Engineering Environment for Industry. Systems And Software, 3(1):212–224, January 1984.

1989: Alexender Borgida, Ronald J. Brachman, Deborah L. McGuinness, and Lori Alperine Resnick. CLASSIC: A Structural Data Model for Objects. In Proceedings of the 1989 ACM SIGMOD International Conference on Management of Data, pages 58–67, Portland, OR, 1989.

1989: Christof Peltason, Albrecht Schmiedel, Carsten Kindermann, and Joachim Quantz. The BACK System Revisited. Technical Report KIT - Report 75, Tecnische Universitat Berlin, September 1989.

1990: Lenat, D. B., & Guha, R. V. Building Large Knowledge-based Systems: Representation and Inference in the Cyc Project. Menlo Park, CA: Addison-Wesley.

1992: Genesereth, M. R., & Fikes, R. E. Knowledge Interchange Format, Version 3.0 Reference Manual. Technical Report Logic-92-1, Computer Science Department, Stanford University.

1993: Gruber, Thomas R. Toward Principles for the Design of Ontologies Used for Knowledge Sharing. Technical Report KSL-93-04, Stanford Knowledge Systems Laboratory.

1993: Peter F. Patel-Schneider and Bill Swartout. Description-Logic Knowledge Representation SystemSpecification, from the KRSS Group of the DARPA Knowledge Sharing Effort. Technical report, November 1993.

1996: P. Karp, M. Riley, S. Paley, and A. Pellegrini-Toole. EcoCyc: Electronic Encyclopedia of E. coli Genes and Metabolism. Nuc. Acids Res., 24(1):32–40, 1996.

pgmKnl'Simplicity

name::
* McsEngl.pgmKnl'Simplicity@cptIt,

The more SIMPLE for a user the system is, the better the system is.
[nikkas 2000jul19]

pgmKnl'Size

name::
* McsEngl.pgmKnl'Size@cptIt,

The system supports Large-scale knowledge-bases or not?

pgmKnl'Speed

name::
* McsEngl.pgmKnl'Speed@cptIt,
* McsEngl.prgKnl'performance@cptIt,

Fast-Access to Knowledge:
When running under real-time constraints, it is most likely the case that the knowledge of the system must be accessed quickly in order to plan and/or execute at an acceptable speed. Various architectures utilize various methods of knowledge organization and retrieval, and so vary in their access efficiency.
[http://krusty.eecs.umich.edu/cogarch4/toc_defs/defs_capa/defs_fast.html] 1998feb16

pgmKnl'Storage#cptIt14#

name::
* McsEngl.pgmKnl'Storage@cptIt,

pgmKnl'structure#cptCore515#

name::
* McsEngl.pgmKnl'structure@cptIt,

EDITOR

pgmKnl'ARCHITECTURE

name::
* McsEngl.pgmKnl'ARCHITECTURE@cptIt,

The architecture of a system defines the underlying structure that influences and limits the levels above. For example, the architecture of a computer, on the most basic level, contains the hardware of the computer; above that, there might exist an operating system, which provides an architecture for applications running on that system.
In this hypertext, we are concerned with architectures that integrate the various components of Artificial Intelligence, and in that effort, we characterize these architectures by several dimensions:

Generality Versatility Rationality Scalability Reactivity Efficiency Ability to Add New Knowledge Ability to Learn Taskability Psychological Validity
[http://krusty.eecs.umich.edu/cogarch4/toc_defs/defs_arch.html] 1998feb16

Hierarchical-Organization

Intelligent systems are organized into hierarchies, or levels, which correspond to different capabilities. Capabilities of the "lower" levels of organization are in a sense inherited by the levels above, providing both a means of modularizing individual capabilities, but also the ability to reuse methods in different branches of the hierarchy.
Simon (1962) proposed that a hierarchical decomposition is necessary for the construction of any complex assembly. Without stable sub-assemblies, complex systems require too many pieces of information (parts) to be considered simultaneously. Without decomposition, the exclusion (or failure) of any part causes a complete system failure. Overlooking parts in smaller subsystems is less likely (since there are less things to consider) and failures, which may also disable the entire system, are more easily traced by testing the operation of individual subsystems.
Levels in a hierarchy however need to be completely insulated from levels above below them. Such insulation is known as a strong level and is characteristic of the levels in a computer systems hierarchy (e.g., register-transfer level, program level, etc). However, in weak levels there is interaction between levels; a lower level may be said to "show through" in the upper level. In the human cognitive architecture, the level between the cognitive band and the rational band is weak, primarily because rationality is bounded by the limited resources of the human computational architecture. This allows the human architecture to be evident from human behavior; Newell characterized this as "psychology".
[http://krusty.eecs.umich.edu/cogarch4/toc_defs/defs_props/defs_hierarchy.html] 1998feb16

Modular-Organization

A modular organization is one in which different functional components are separated from one another, a technique adopted from software engineering. This is in contrast to a composite organization in which there is no separation between functions. Modular organization is also distinct from hierarchical organization. Modular organization is chiefly concerned with the horizontal design of a system whereas hierarchical organization involves a consideration of the vertical nature of the design. Thus, each level in a hierarchical system may be sub-divided into functionally-distinct modules.
[http://krusty.eecs.umich.edu/cogarch4/toc_defs/defs_props/defs_modular.html] 1998feb16

pgmKnl'SystemTechData#attWho#

name::
* McsEngl.pgmKnl'SystemTechData@cptIt,

pgmKnl'Hardware-OF-COMPUTER-STRUCTURE#cptIt456#

name::
* McsEngl.pgmKnl'Hardware-OF-COMPUTER-STRUCTURE@cptIt,

pgmKnl'SystemSoftware

name::
* McsEngl.pgmKnl'SystemSoftware@cptIt,

pgmKnl'User

name::
* McsEngl.pgmKnl'User@cptIt,


Who will use the system?
How much time a user needs to learn the system?

pgmKnl'AUTHOR

name::
* McsEngl.pgmKnl'AUTHOR@cptIt,

AUTHOR:
The person who stores and retrieves knowledge.
[hmnSngo.1999aug24]

_GENERIC
* prgKnl'PROFESSIONAL#cptIt6#

pgmKnl'READER

name::
* McsEngl.pgmKnl'READER@cptIt,

READER (SIMPLE USER):
The person who retrieves knowledge.
[hmnSngo.1999aug24]

pgmKnl'User-interface

name::
* McsEngl.pgmKnl'User-interface@cptIt,

pgmKnl'Doing#cptCore475#

name::
* McsEngl.pgmKnl'Doing@cptIt,
* McsEngl.krp'function@cptIt,
* McsEngl.function'of'prgKno@cptIt497,
* McsEngl.service'of'prgKno@cptIt497,

_SPESIFEPTO:
* presentation
* reasoning services
* services to application-programs

Generally, the system must support 2 functions:
- knowledge storage and
- knowledge retrieval.
[nikos {1998-03-29}]

A description-logic based knowledge representation system is more than an inference engine for a particular description logic. A knowledge representation system must provide a number of services to human users, including presentation of the information stored in the system in a manner palatable to users and justification of the inferences performed by the system. If human users cannot understand what the system is doing, then the development of knowledge bases is made much more difficult or even impossible. A knowledge representation system must also provide a number of services to application programs, including access to the basic information stored in the system but also including access to the machinations of the system. If programs cannot easily access and manipulate the information stored in the system, then the development of applications is made much more difficult or even impossible.
[http://www.dis.uniroma1.it/~nardi/dlhb/contents-no-files.html]

pgmKnl'Retrieving

name::
* McsEngl.pgmKnl'Retrieving@cptIt,
* McsEngl.pgmKnl'KNOWLEDGE'RETRIEVAL@cptIt,

pgmKnl'ACCESS

name::
* McsEngl.pgmKnl'ACCESS@cptIt,

The system must be a multi-user access system.
[hmnSngo.2000jul27]

SYSTEM ACCESS I mean WHO, WHEN and from WHERE the system will be accessed.
[nikkas 1999aug28]

It must be an online system (internet) with free access to everyone.
[nikos 1999] 1999aug24

pgmKnl'NAVIGATION

_CREATED: {2000-07-30}

name::
* McsEngl.pgmKnl'NAVIGATION@cptIt,

Apart from knowledge-presentation (to present a piece of knowledge to user) the system must help the user to EASILY walk around a knowledge-base (the nework of concepts) eg with TREES of relations (subgeneral, part, etc).
[hmnSngo.2000jul30]

pgmKnl'QUESTIONIG

name::
* McsEngl.pgmKnl'QUESTIONIG@cptIt,

Natural-language question answering.

pgmKnl'LOGOS-ANALYSIS

name::
* McsEngl.pgmKnl'LOGOS-ANALYSIS@cptIt,

We can make a machine that can tell us which LOGOS is true or not in relation to true-knowledge we have stored in the machine.
[hmnSngo.2000aug05]

pgmKnl'PRESENTATION

name::
* McsEngl.pgmKnl'PRESENTATION@cptIt,
* McsEngl.prgKnl'knowledge'presentation@cptIt,
* McsEngl.prgKnl'knowledge'display@cptIt,
* McsEngl.prgKnl'user'interface'for'retrieval@cptIt,

_DEFINITION:
techniques by which the presentation of knowledge is organized.

The knowledge must be presented in natural-language-form (information) because this is the way humans undertand knowledge.
Also the menus, the icons the system uses must be very-easily understandable.
[nikkas 2000jul27]

The knowledge display is the first thing a user encounters in any computer-system. Reading in a computer screen is very different from reading a paper book. On a computer we are loosing the position in the text we are reading. That's why we must display in the same screen the whole picture of what we are reading. My java&xml system nicely presents an entity (structured-concept) and all its relations in a tree. From there also you can navigate to any other entity.
[nikos 1999] 1999aug24

pgmKnl'Natural'Language'Processing#cptIt497.12#

name::
* McsEngl.pgmKnl'Natural'Language'Processing@cptIt,
* McsEngl.pgmKnl'NLP@cptIt,
* McsEngl.pgmKnl'Natural'language'Understanding@cptIt,

Natural Language Processing program#cptItsoft497.12#

Natural language understanding techniques are designed to allow the computer user to communicate in a written human language (usually english) instead of menus, or complicated commands. Like the other techniques mentioned so far, a great deal of knowledge is necessary to perform this task. Computers are still a long way from being able to communicate in natural language, but progress is made by the application of massive amounts of knowledge. One example of how hard this task is may be illustrated by the following two sentences:
- The pen is in the box.
- The box is in the pen.
In the first sentence, "pen" is a writing instrument, in the second it is a corral. Without knowledge about the relative sizes of pens and boxes there is no way for the computer to know which meaning is intended.
[SOURCE: http://projects.technwledge.com/hpkb/intro.html (2000jul25)]

pgmKnl'GLOBALIZATION

name::
* McsEngl.pgmKnl'GLOBALIZATION@cptIt,

The system must present the knowledge in any natural language.
[nikos 1999] 1999aug24

pgmKnl'Machine'Translation#cptIt497.15#

name::
* McsEngl.pgmKnl'Machine'Translation@cptIt,

Machine-Translation-program#cptItsoft497.15#

pgmKnl'WORLDVIEWS

name::
* McsEngl.pgmKnl'WORLDVIEWS@cptIt,
* McsEngl.contexts@cptIt,
* McsEngl.microtheories@cptIt,

=== _NOTES: Cyc uses the term 'microtheories' similarly, not exactly the same.

The system must present the different VIEWS that exist about an entity.
[nikos 1999] 1999aug24

pgmKnl'EVOLUTION

name::
* McsEngl.pgmKnl'EVOLUTION@cptIt,

The system must have the ability to present the evolution of an entity AND the evolution of our knowledge about this entity.
[nikos 1999] 1999aug24

pgmKnl'SEARCHING

name::
* McsEngl.pgmKnl'SEARCHING@cptIt,
* McsEngl.searching-prgKnl@cptIt, {2012-11-25}

The user must quickly and easily find the entity s/he wants by writing or pronouncing its name.
From there s/he must find easily any other related knowledge.
My java system does SMART searching, id can search related concepts.
My folio-views system can easily find the entity I want.
QUESTIONS: The system must have the ability to answer to user's questions.
[nikos 1999] 1999aug24

pgmKnl'Storing

name::
* McsEngl.pgmKnl'Storing@cptIt,
* McsEngl.pgmKnl'KNOWLEDGE'STORAGE@cptIt,

By 'knowledge-storage' I mean the process of storing and organizing knowledge.
[nikkas 1999aug27]

The system must automate the procedures needed to store knowledge.

pgmKnl'ACQUISITION

_CREATED: {1999-08-27}

name::
* McsEngl.pgmKnl'ACQUISITION@cptIt,
* McsEngl.prgKno'Knowledge'Entry@cptIt, created: {1998-04-26}
* McsEngl.prgKno'Knowledge'Acquisition@cptIt,
* McsEngl.pgmKnl'ENTRANCE@cptIt,

DEFINITON:
KNOWLEDGE ACQUISITION is the way the system uses to gather new knowledge:
- programmatically, in a knowledge representation language?
- typing in human readable form?
- reading/hearing it automatically?
- have learning capabilities? / by mechanical reasoning?
[nikkas 1999aug27]

Knowledge acquisition techniques are somewhat similar to machine learning but instead of using data as the input to the program, a human who is expert in some field is the source. A typical application of such a program is to capture some human knowledge which is very valuable or about to be lost, for example an expert at running a large paper mill might be about to retire. This software asks the user questions or has him propose exercises which will allow the computer to learn facts about how he does his job. In order to conduct this dialog though, the computer must already have a great deal of declarative knowledge about the domain.
[SOURCE: http://projects.technwledge.com/hpkb/intro.html (2000jul25)]

Adding New Knowledge:
This capability of an agent is strictly concerned with the adding of knowledge into the system by direct programming by the designer. We separate this from the notion of learning which is more of an autonomous action.
[http://krusty.eecs.umich.edu/cogarch4/toc_defs/defs_arch/defs_nknow.html] 1998feb18

pgmKnl'COLLABORATION

name::
* McsEngl.pgmKnl'COLLABORATION@cptIt,

_DEFINITION:
The system supports collaboration if acquires knowledge by many authors.
[nikkas 1999aug28]

The system stores knowledge collaborativelly or not?
or multi-user knowledge storage.

pgmKnl'MACHINE-LEARNING#cptIt358#

name::
* McsEngl.pgmKnl'MACHINE-LEARNING@cptIt,

machine learning#cptIt358: attPar#

pgmKnl'LOGOS-ANALYSIS

name::
* McsEngl.pgmKnl'LOGOS-ANALYSIS@cptIt,

A machine could examine the CORECTENESS of logos (its logic, contradictions, consistency, clearnes, etc).
The TRUTH of this logos (its relations with its referent) it is not a language matter, not a conceptual one. It is reality matter, that's why marxists say PRACTICE is the ultimate criterion of truth.
[hmnSngo.{2000-09-02}]

pgmKnl'FORMAL-INFORMAL-STORAGE

name::
* McsEngl.pgmKnl'FORMAL-INFORMAL-STORAGE@cptIt,

Our knowledge is an open-system and we cannot completly formalize it because of the present of the 'unknown'. Then a kms must have formal and informal parts.
[hmnSngo.2000aug04]

The system must have the ability to store 'unformal-knowledge' (id natural-language statements) in order to help us in the future turn them to 'formal-knowledge' as the other knowledge in order for the computer to 'retrieve' it.
[hmnSngo.2000jul27]

pgmKnl'CHANGE

name::
* McsEngl.pgmKnl'CHANGE@cptIt,
* McsEngl.pgmKnl'ADDITION@cptIt,
* McsEngl.pgmKnl'EDITING@cptIt,

Adding, removing or modifying the knowledge must be an easy procedure.
[hmnSngo.1999aug24]

The Author must enter the information in natural-language form and not in any kind of knowledge-representation-languages.
[nikos 1999] 1999aug24

CONCEPT MERGING:
The system must merge 2 cpts in one, combining all the relations that have both.
[hmnSngo.{2000-09-06}]

pgmKnl'CHANGING-FLEXIBILITY

name::
* McsEngl.pgmKnl'CHANGING-FLEXIBILITY@cptIt,

DEFNITION:
CHANGIND-FLEXIBILITY is the ability to change EASILY. Our knowledge is a constantly changing entity. The system must help us to chang our knowledge.
[hmnSngo.2000jul29]

pgmKnl'MERGING

name::
* McsEngl.pgmKnl'MERGING@cptIt,
* McsEngl.merging-function-of-prgKnl@cptIt,

_DEFINITION:
The ability of the system to MERGE with other existing knowledgebases.

pgmKnl'TERMINOLOGY-MANAGEMENT

name::
* McsEngl.pgmKnl'TERMINOLOGY-MANAGEMENT@cptIt,

Any change in the name of a concept must take effect all over in the system's knowledge-base.
[nikos 1999] 1999aug24

The system must have linguistic-knowledge (part of speech, syntax,...) of the terms it uses to name concepts in order to transform the knowledge to information (any natural-language).
[hmnSngo.2000jul26]

pgmKnl'UNDO'FUNCTION

name::
* McsEngl.pgmKnl'UNDO'FUNCTION@cptIt,

The system must have a multi-level undo capability.
[hmnSngo.2000jul26]

pgmKnl'VALIDATION

name::
* McsEngl.pgmKnl'VALIDATION@cptIt,
* McsEngl.conflict-handling@cptIt,
* McsEngl.consistency-maintenance@cptIt,
* McsEngl.prgKno'CONSISTENCY-INTEGRATION@cptIt,

_DEFINITION:
One of the most important functions a kms must have is 'consistency-maintenance' that is in any change in the knowledge-base the system must ensure that there are no conflicts.
[nikos, {1998-04-26}]

It must guarantee that the stored-knowledge is a consistent whole.
That's why I'm following system's theory approach and every concept (Structured-Concept) is a system with relations to other systems. The system must find the violations among the relations of the structured-concepts.
[nikos 1999] 1999aug24

After EDITING the knowledge-base, the system must detect the inconsistencies of the new knowledge-base. For example adding an Attribute in a general-concept, then the system adds the new attribute to all subgeneral-concepts.
[nikkas 1999aug24]

pgmKnl'MISC-FUNCTION

name::
* McsEngl.pgmKnl'MISC-FUNCTION@cptIt,

Capabilities
The capabilities of an architecture refers to what the architecture as a system is able to do and methods toward fulfilling those needs. The capabilities of the systems discussed here are:

Capabilities related to Learning
Ability to Learn
Multimethod Learning
Learning by Instruction
Transfer of Learning
Weak Methods of Learning
Concept Acquisition
Abstraction Learning by Analogy

Capabilities related to Planning and Problem Solving
Planning Problem Solving Support of Multiple, Simultaneous Goals Self Reflection Meta-Reasoning Expert-Systems Capability Inductive and Deductive Reasoning Situated Action

Capabilities related to Interaction with the Environment
Provide Explanations for Decisions Navigational Strategies Manipulation Support for Inaccurate Sensing Natural Language Understanding Perception Robotic Tasks

Capabilities related to Execution
Real-Time Execution Fast Access to Knowledge Focused Processing Goal Reconstruction Human-like Math Capability

Capabilities related to Behaviors
Coherence Saliency Adequacy

--------------------------------------------------------------------------------
Use the following list to view the capabilities of any given architecture:
Subsumption Architecture
Gat (Heterogeneous Asynchronous Architecture)
Theo (Plan-then-compile Architecture)
Planning and Learning Architecture (Prodigy)
Modular-Integrated Architecture (ICARUS)
Adaptive Intelligent Systems (AIS)
Meta-reasoning Architecture for 'X' (MAX) Integration of Situated Action and Planned Action (TETON) Problem-Space Architecture (SOAR) Highly integrated agent (HOMER) Real-Time, Decision Theoretic Architecture (RALPH-MEA) Entropy Reduction Engine (ERE)
[http://krusty.eecs.umich.edu/cogarch4/toc_defs/defs_capa.html] 1998feb16

pgmKnl'REASONING#cptIt485.2#

name::
* McsEngl.pgmKnl'REASONING@cptIt,

INFERENCE ABILITY the system must have and when STORES knowledge (eg adding a specific-cpt to automatically add the inherited attributes) and when RETRIEVES knowledge (find a concept that satisfies some criteria).
[hmnSngo.2000jul29]

I classify Mechanical Reasoning as a 'retrieval' function because we use this function to retrieve knowledge from stored one.
[nikkas 1999aug28]

Bounded-Rationality

Bounded Rationality as an Agent/Architecture Property
Bounded rationality refers to an agent's inability to act with complete rationality due to limited resources. These limits in the ability of an agent to bring all knowledge to bear upon a problem arise for many reasons. Memory limits and time limits are the most obvious limitations.

These architectures have bounded rationality:
Adaptive Intelligent Systems (AIS) A Basic Integrated Agent (Homer) Problem Solving Architecture (Soar) Real-Time Decision Theoretic (Ralph-MEA) Entropy Reduction Engine (ERE)
[http://krusty.eecs.umich.edu/cogarch4/toc_defs/defs_props/defs_boundedrat.html] 1998feb16

Explanation

It is often desirable that an agent provide explanations of its actions. For instance, supervisors may monitor a system's performance, possibly because of the sensitivity of the domain, in which case the agent must provide justifications of its choices. More commonly, a system may make mistakes which must be corrected. Because of the complexity of most architectures, such debugging is difficult, if not intractable. A trace of the agent's processing, in the form of a decision explanation, would provide valuable information to the system designers in trying to amend the situation.
[http://krusty.eecs.umich.edu/cogarch4/toc_defs/defs_capa/defs_explan.html] 1998feb16

Open-Loop-Processing

A system is said to perform open-loop processing if, after one cycle, the results of the processing are thought to be complete. That is, the output from the process do not feed back as input to the same process. Contrast this with Closed-Loop Processing.
[http://krusty.eecs.umich.edu/cogarch4/toc_defs/defs_props/defs_o-loop_proc.html] 1998feb16

Problem-Solving

It may seem that all agents must solve problems, as indeed they must, but problem solving in the technical sense is the ability to consider and attain goals in particular domains using domain-independent techniques (such as the weak methods) as well as domain knowledge. Problem Solving includes the capability to acquire and reason about knowledge, although the level to which such capability is supported differs between architectures. Problem solving, especially human problem solving, has been characterized as deliberate movement through a problem space. A problem space defines the states that are possible for a particular problem instance and the operators available to transform one state to another. In this formulation, problem solving is search through the state space by applying operators until a recognizable goal state is reached.
[http://krusty.eecs.umich.edu/cogarch4/toc_defs/defs_capa/defs_prob.html] 1998feb18

Real-time-Performance

Agents acting in the world require real-time performance at least some of the time. Real-time performance is the taking of immediate action upon receipt of some event. Successful implementation often requires precise knowledge of the duration of tasks which can mean that things cannot be interrupted, even by the overseer.
[http://krusty.eecs.umich.edu/cogarch4/toc_defs/defs_capa/defs_realtime.html] 1998feb18

pgmKnl'goal

name::
* McsEngl.pgmKnl'goal@cptIt,

pgmKnl'EVOLUTION#cptCore546.171#

name::
* McsEngl.pgmKnl'EVOLUTION@cptIt,

{time.1995}
* jan: Cycorp, Inc., based in Austin, Texas:
Founded in January 1995 by AI pioneer Doug Lenat as a spin-off from MCC

* ONTOLINGUA:
Public anouncement of the Ontolingua-Server.

{time.1984 Cyc:
Lenat initiates the Cyc project at MCC.

1982: Doug Lenat:
Publishes the Knowledge Based Systems in Artificial Intelligence (1982, McGraw-Hill)

1980: ESs:
The expert systems of the early 1980s proved to be difficult to bulid because of the challenge of capturing all of an expert's knowledge. They were also difficult to maintain, because their large rule bases had little organization. Most expert systems were stand-alone applications on dedicated workstations.
[BYTE, JUL 1993, 107]

SPECIFIC

name::
* McsEngl.pgmKnl.specific@cptIt,

_SPECIFIC: pgmKnl.alphabetically:
* prgKnl.AI#cptItsoft497.6#
* prgKnl.collaborative
* prgKnl.ConceptBrainualSensorial_Manager#cptItsoft356#
* prgKnl.conceptual_graphs
* prgKnl.decision-support-system#cptItsoft497.8#
* prgKnl.description-logics#cptItsoft497.7#
* prgKnl.design
* prgKnl.diagnosis
* prgKnl.expert_system#cptItsoft497.9#
* prgKnl.frame_based#cptItsoft497.5#
* prgKnl.java_language
* prgKnl.lisp_language
* prgKnl.logic
* prgKnl.ontology_program#ql:* ontology_system@cptIt561#
* prgKnl.planning/SCHEDULING
* prgKnl.process_control
* prgKnl.prolog_language
* prgKnl.rule_based
* prgKnl.smalltalk_language
* prgKnl.web_content_management

=== instance
NAME(COUNTRY: Organization, KRL, Implementation-Language, Comment)
* prgKnl.AAj#cptItsoft1047# (GREECE: nikkas, SC(xml) Frame, Java)#cptItsoft1047#
* prgKnl.ALGERNON (USA: Univ Texas Austin)##
* prgKnl.BKB (USA: Univ Texas)
* prgKnl.CLASSIC (USA: AT&T's, Desc Logics, ,elegant but restrictive )##
* prgKnl.Clips (USA: ,Frame,)
* prgKnl.CODE4 (CANADA: Univ Ottawa,,Smalltalk)##
* prgKnl.ConceptBase (GERMANY: Aachen University of Technology (RWTH))##
* prgKnl.ConceptNet#cptItsoft1091#
* prgKnl.CYC#cptIt502# (USA: CyCorp)#cptIt502#
* prgKnl.DocKMan (CANADA: Univ Ottawa)##
* prgKnl.ECOCYC (USA: SRI)
* prgKnl.EDR (JAPAN)
* prgKnl.Epikit (USA: Genesereth, FirstOrderLogic,)
* prgKnl.GALEN (UK: Univ Manchester Medical terminology)##
* prgKnl.IKAROUS (CANADA: Univ Ottawa)##
* prgKnl.KADS-II project, http://swi.psy.uva.nl/projects/CommonKADS/home.html
* prgKnl.KEE (USA: IntelliCorp,Frame,)
* prgKnl.KL'ONE (Brachman and Schmolze 1985).
* prgKnl.KM (Knowledge Machine) (USA)
* prgKnl.LOOM (USA: Univ Southern California - ISI more expressive but complex)##
* prgKnl.Ocelot
* prgKnl.ONTOLINGUA (USA: Stanford KSL, KIF, CommonLisp)##
* prgKnl.PCP#cptIt531# (BELGIUM/USA)#cptIt531#
* prgKnl.PowerLoom (USA: USC/ISI)##
* prgKnl.SIPE (USA: SRI)
* prgKnl.Stanford'Digital'Library (USA:)
* prgKnl.Theo (USA: CMU, Frame,)
* prgKnl.ThoughtTreasure (USA: Signiform)##
* prgKnl.TROPES (FR:)##
* prgKnl.VHG (UK:)##
* prgKnl.WordNet (USA: terminology)##

===

COLLABORATIVE_PROGRAM
 prgKnl.ONTOLINGUA#cptIt2033# (USA: Stanford KSL, KIF, CommonLisp)#cptIt2033#
 TROPES#cptIt2038# (FR:)#cptIt2038#
KL_ONE_LIKE_PROGRAM:
 BACK
 CLASSIC
 K-Rep
 KANDOR
 KL-TWO
 KRIS
 KRYPTON
 LOOM
 MESON
 NIKL
 SB-ONE
 YAK


FIRST-GENERATION SYSTEM

pgmKnl.SPECIFIC-DIVISION.DOMAIN-of-KRM

name::
* McsEngl.pgmKnl.SPECIFIC-DIVISION.DOMAIN-of-KRM@cptIt,

_SPECIFIC:
* prgKnl.KOGNEPTO_PROGRAM#cptItsoft497.3#
* prgKnl.LANGETO_PROGRAM#cptItsoft497.2#
===
DESCRIPTION_LOGICS_SYSTEM#cptIt503#:
 BACK
 CLASSIC#cptIt497.10#
 CRACK
 LOOM (USA: Univ Southern California - ISI)#cptIt#
CONCEPTUAL_GRAPHS_SYSTEMS:
 CGMA
 CGP
 CDPro
 CONGRES
 CONSTRUCT
 CP
 KALIPSOS
 PEIRCE
 SEMANTIC INTERPRETER,
 SOCD
FIRST_ORDER_LOGIC:
 Epikit
 PTTP
FRAME_BASED_SYSTEM:
 Clips
 KEE
 * prgKnl.ConceptBrainualSensorial_Manager#cptItsoft356#
 THEO
PRODUCTION_SYSTEMS
RULE_BASED_SYSTEMS

pgmKnl.SPECIFIC-DIVISION.country

name::
* McsEngl.pgmKnl.SPECIFIC-DIVISION.country@cptIt,

_SPECIFIC:
CANADA SYSTEMS:
 CODE4#cptIt2023# (CANADA: Univ Ottawa)#cptIt2023#
 DocKMan#ql:dockman# (CANADA: Univ Ottawa)#cptIt2031#
 IKAROUS#cptIt2025# (CANADA: Univ Ottawa)#cptIt2025#
EUROPE SYSTEMS:
 ConceptBase#cptIt2037# (GERMANY)#cptIt2037#
 GALEN#cptIt2032# (UK: Univ Manchester Medical terminology)#cptIt2032#
 * prgKnl.ConceptBrainualSensorial_Manager#cptItsoft356#
 TROPES#cptIt2038# (FR:)#cptIt2038#
 VHG#cptIt2029# (UK:)#cptIt2029#
USA SYSTEMS:
 ALGERNON#cptIt2036# (USA: Univ Texas Austin)#cptIt2036#
 CLASSIC#cptIt508# (USA: AT&T's elegant but restrictive )#cptIt508#
 CYC#cptIt502# (USA: CyCorp)#cptIt502#
 LOOM (USA: Univ Southern California/ISI more expressive/complex)#cptIt564#
 ONTOLINGUA#cptIt2033# (USA: Stanford Knowledge Systems Laboratory)#cptIt2033#
 PowerLoom#cptIt2035# (USA: USC/ISI)#cptIt2035#
 ThoughtTreasure#cptIt2024# (USA: Signiform)#cptIt2024#
 WordNet#cptIt2030# (USA: terminology)#cptIt2030#

pgmKnl.SPECIFIC-DIVISION.doing

name::
* McsEngl.pgmKnl.SPECIFIC-DIVISION.doing@cptIt,

_SPECIFIC:
* prgKnl.DESIGN_PROGRAM
* prgKnl.DIAGNOSIS_PROGRAM
* prgKnl.KNOWLEGE_INTEGRATOR_PROGRAM
* prgKnl.KNOWLEDGE_ACQUISITION_PROGRAM
* prgKnl.PLANNING_SCHEDULING_PROGRAM
* prgKnl.PROCESS_CONTROL_PROGRAM

pgmKnl.SPECIFIC-DIVISION.programing-lang-written

name::
* McsEngl.pgmKnl.SPECIFIC-DIVISION.programing-lang-written@cptIt,

_SPECIFIC:
* prgKnl.JAVA_PROGRAM:
 * prgKnl.ConceptBrainualSensorial_Manager#cptItsoft356#
* prgKnl.LISP_PROGRAM:
* prgKnl.PROLOG_PROGRAM:
* prgKnl.SMALLTALK_PROGRAM:
 * prgKnl.CODE4#cptIt2023# (CANADA: Univ Ottawa)#cptIt2023#

pgmKnl.AI

name::
* McsEngl.pgmKnl.AI@cptIt,
* McsEngl.conceptCore497.6,
* McsEngl.conceptIt317,
* McsEngl.ai'application@cptIt,
* McsEngl.ai-program@cptIt317,
* McsEngl.artificial-intelligence-software@cptIt,
* McsEngl.Knowledge-Engineering@cptIt,
* McsEngl.prgAI@cptIt497.6, {2011-09-06}
* McsEngl.program.ai@cptIt317,

* McsElln.ΤΕΧΝΗΤΗ-ΝΟΗΜΟΣΥΝΗ@cptIt,

_DESCRIPTION:
The term artificial intelligence is also used to describe a property of machines or programs: the intelligence that the system demonstrates.
[http://en.wikipedia.org/wiki/AI]
===
Knowledge Engineering is the process of building AI constructs.
KE is the applied science aspect of AI.
The object of KE is the development, production and distribution of intelligence through man-made systems.
[Chorafas 1990].

Evolution#cptCore546.171#

The big news of the 1980s (1981-1990) is that AI has gone commercial
[Gevarter, 1990, 12#cptResource668]

SPECIFIC

_SPECIFIC:
* abstracting
* machine-learning
* MACHINE-LEARNING#cptIt358#
* NATURAL-LANGUAGE-PROCESSING#cptItsoft497.12#
* TRANSLATION-#cptItsoft497.15#

education,
Architectures and languages,
Automated reasoning,
Automatic programming,
Cognitive modeling,
Expert systems,
Knowledge aquisition,
Knowledge representation,
Learning and Acquision,
Logic programming,
Natural language,
Perception,
Philosophical Foundations,
Planning and search
Reasoning,
Robotics,
Theorem proving,

AI matures and grows, this program has a long history of work in the following areas: •Generative planning
•Reactive planning/control
•Fuzzy control
•Evidential reasoning
•Automated deduction
•Knowledge browsing and editing
•Agent architectures
•Distributed reasoning

In the simplest case, AI applications can be divided into two types: classifiers ("if shiny then diamond") and controllers ("if shiny then pick up"). Controllers do however also classify conditions before inferring actions, and therefore classification forms a central part of most AI systems.
[http://en.wikipedia.org/wiki/AI]

pgmKnl.Brainual-program

_CREATED: {2007-12-01}

name::
* McsEngl.pgmKnl.Brainual-program@cptIt,
* McsEngl.conceptCore497.3,
* McsEngl.kognepto-program@cptIt497.2, {2008-01-26}
* McsEngl.brainepto'program@cptIt497.2, {2007-12-01}

_DEFINITION:
* Kognepto_program is any KRP that maps (represents) KOGNEPTO_VIEWS#cptCore762# analogically.
[KasNik, 2008-01-26]

* BRAINEPTO_PROGRAM is any KRP that uses BRAINEPTO_MODELS#cptCore762# to represent knowledge.
[KasNik, 2007-12-01]

KNOWLEDGE_REPRESENTATION:
* CONCEPT-MAPPING#cptIt556: attSpe#
* ONTOLOGY-LANGUAGE#cptIt557: attSpe#
* SEMANTIC-NETWORK#cptIt437: attSpe#

_SPECIFIC:
* ConceptBrainualSensorial_Manager#cptItsoft356#

pgmKnl.CONCEPT-MINING

_CREATED: {2012-11-22}

name::
* McsEngl.pgmKnl.CONCEPT-MINING@cptIt,
* McsEngl.concept-mining,

_DESCRIPTION:
Concept mining is an activity that results in the extraction of concepts from artifacts. Solutions to the task typically involve aspects of artificial intelligence and statistics, such as data mining and text mining. Because artifacts are typically a loosely structured sequence of words and other symbols (rather than concepts), the problem is nontrivial, but it can provide powerful insights into the meaning, provenance and similarity of documents.
[http://en.wikipedia.org/wiki/Concept_mining]

resourceInfHmn#cptResource843#

_ADDRESS.WPG:
* http://www.conceptsearching.com/wp//

pgmKnl.CONCEPT-SEARCH

_CREATED: {2012-11-22}

name::
* McsEngl.pgmKnl.CONCEPT-SEARCH@cptIt,
* McsEngl.concept-search,
* McsEngl.conceptual-search,

A concept search (or conceptual search) is an automated information retrieval method that is used to search electronically stored unstructured text (for example, digital archives, email, scientific literature, etc.) for information that is conceptually similar to the information provided in a search query. In other words, the ideas expressed in the information retrieved in response to a concept search query are relevant to the ideas contained in the text of the query.
[http://en.wikipedia.org/wiki/Concept_Search]

pgmKnl.CONJUGATOR-DECLENSOR

_CREATED: {2013-09-20}

name::
* McsEngl.pgmKnl.CONJUGATOR-DECLENSOR@cptIt,

pgmKnl.CONJUGATOR

_CREATED: {2013-08-16}

name::
* McsEngl.pgmKnl.CONJUGATOR@cptIt,
* McsEngl.conjugator@cptIt,
* McsEngl.pgm.conjugator@cptIt,
* McsEngl.program.conjugator@cptIt,

_SPECIFIC:
* english: http://www.dict66.com//

pgmKnl.DECLENSOR

_CREATED: {2013-08-16}

name::
* McsEngl.pgmKnl.DECLENSOR@cptIt,
* McsEngl.declensor@cptIt,
* McsEngl.pgm.declensor@cptIt,
* McsEngl.program.declensor@cptIt,

_SPECIFIC:
* latin: http://grammatica.furius.id.au/firstyear/declensor//

pgmKnl.Description-logics

name::
* McsEngl.pgmKnl.Description-logics@cptIt,
* McsEngl.conceptIt497.7,
* McsEngl.conceptIt503,
* McsEngl.description-logic-kms@cptIt,
* McsEngl.description'logic'kms@cptIt503,
* McsEngl.description-logic-system@cptIt,
* McsEngl.description'logic'system@cptIt503,

_DESCRIPTION:
One of the most important classes of knowledge representation tools are the descendants of Brachman's KL-ONE system (Brachman and Schmolze 1985). These tools, collectively called description logic languages, range from
- the AT&T's elegant but restrictive Classic (Brachman, McGuiness et al. 1991) to
- ISI's more expressive but complex LOOM (ISX 1991; MacGregor 1991b).
MacGregor (MacGregor 1991a) describes the evolution of this whole family of languages.
Description logic languages share a number of features:
* The primary units of knowledge representation are called concepts[9], of which there are two fundamental classes: primitive[10] and defined[11]. Primitive concepts are those which are asserted to exist in order to represent some set of individual things, any conditions attached to them may be necessary but are not sufficient. Defined concepts, on the other hand, have explicit definitions expressed in terms of necessary and sufficient conditions that refer ultimately to the primitive concepts.
* They have a terminological language, describing concepts (the T-Box) and an assertion language (A-Box) describing constraints or facts in the world.
* In addition to inheritance, which is a capability of all frame-based systems, description logic languages include classification as a major inference mechanism. By examining definitions (i.e. the properties possessed by a concept), the classification mechanism is able to place concepts at the correct point in the inheritance hierarchy.
Classic remains true to the spirit of the original KL-ONE. It differs primarily in the details of expressions it uses to represent knowledge - the expressions have been carefully restricted to enable its nine major inference mechanisms to operate efficiently.
Whereas Classic remains a knowledge representation system (with a modelling language), LOOM has evolved into a programming system by adding a `behaviour language' with such features as actions, methods and production rules. LOOM can be used to directly build expert systems. While the addition of these facilities has made LOOM less restrictive than Classic in terms of what can be represented, it still remains a largely formal system.
[Tim Lethbridge's PhD Thesis 1994nov]
===
Description logics provide the following aspects :
formal concise semantics high expressive power powerful inferential services no procedural elements due to the declarative semantics
[http://dpt-info.u-strasbg.fr/~w3eric/liia-gtln/projets/c3l.html] 1998feb03

dlp.SPECIFIC

name::
* McsEngl.dlp.SPECIFIC@cptIt,

Current DESCRIPTION LOGIC REASONERS

* CEL is a free (for non-commercial use) LISP-based reasoner for EL with GCIs and complex role inclusions. It implements a refined version of a known polynomial-time classification algorithm. Currently, it accepts inputs in a small extension of the KRSS syntax and supports the DIG-API.
* Cerebra Engine is a commercial C++-based reasoner. It implements a tableau-based decision procedure for general TBoxes (subsumption, satisfiability, classification) and ABoxes (retrieval, tree-conjunctive query answering using a XQuery-like syntax). It supports the OWL-API and comes with numerous other features.
* FaCT++ is a free open-source C++-based reasoner for SHOIQ with simple datatypes (i.e., for OWL-DL with qualifying cardinality restrictions). It implements a tableau-based decision procedure for general TBoxes (subsumption, satisfiability, classification) and incomplete support of ABoxes (retrieval). It supports the lisp-API and the DIG-API.
* fuzzyDL is a free Java/C++ based reasoner for fuzzy SHIF with concrete fuzzy concepts (explicit definition of fuzzy sets + modifiers). It implements a tableau + Mixed Integer Linear Programming optimization decision procedure to compute the maximal degree of subsumption and instance checking w.r.t. a general TBox and Abox. It supports Zadeh semantics, Lukasiewicz semantics and is backward compatible with classical description logic reasoning.
* KAON2 is a free (free for non-commercial usage) Java reasoner for SHIQ extended with the DL-safe fragment of SWRL. It implements a resolution-based decision procedure for general TBoxes (subsumption, satisfiability, classification) and ABoxes (retrieval, conjunctive query answering). It comes with its own, Java-based interface, and supports the DIG-API.
* MSPASS is a free open-source C reasoner for numerous description logics. It implements a resolution-based decision procedure for extensions of ALB (which is ALC with inverse and Boolean operators on roles) with general TBoxes (satisfiability, subsumption) and ABoxes (instance checking, retrieval). It is an extension of the theorem prover SPASS, and can thus also be used to reason about arbitrary first-order statements.
* Pellet [http://pellet.owldl.com/] is a free open-source Java-based reasoner for SROIQ with simple datatypes (i.e., for OWL 1.1). It implements a tableau-based decision procedure for general TBoxes (subsumption, satisfiability, classification) and ABoxes (retrieval, conjunctive query answering). It supports the OWL-API, the DIG-API, and Jena interface and comes with numerous other features.
* QuOnto is a free (for non-commercial use) Java-based reasoner for DL-lite with GCIs. It implements a query rewriting algorithm for both consistency checking and query answering for unions of conjunctive queries over DL-Lite knowledge bases, whose ABox is managed through relational database technology. It comes with its own Java-based interface.
* RacerPro is a commercial (free trials and research licenses are available) lisp-based reasoner for SHIQ with simple datatypes (i.e., for OWL-DL with qualified number restrictions, but without nominals). It implements a tableau-based decision procedure for general TBoxes (subsumption, satisfiability, classification) and ABoxes (retrieval, nRQL query answering). It supports the OWL-API and the DIG-API and comes with numerous other features.
[http://www.cs.man.ac.uk/~sattler/reasoners.html] 2007-09-05

DESCRIPTION LOGIC REASONERS which are no longer actively supported
* BACK
* CLASSIC
* CICLOP
* CRACK
* DLP
* FaCT
* FLEX
* HAM-ALC
* K-REP
* KRIS
* LOOM
* *SAT
* YAK
[http://www.cs.man.ac.uk/~sattler/reasoners.html] 2007-09-05

Description Logic Systems:
BACK
CLASSIC
CRACK
FaCT
FLEX
K-REP
KRIS
Loom
MOTEL
YAK
[http://www.ida.liu.se/labs/iislab/people/patla/DL/systems.html] 1998feb20

dlp'Description-logics#cptIt560#

name::
* McsEngl.dlp'Description-logics@cptIt,

dlp'KRSS

name::
* McsEngl.dlp'KRSS@cptIt,

Knowledge Representation System Specification (KRSS) is a common denominator for description logic systems such as LOOM[12], CLASSIC [2], and BACK [14].
Both KRSS and Ontolingua were developed as part of DARPA’s Knowledge Sharing Effort.
[OKBC 2.0.3 1998] 2000jul20

dlp'resourceInfHmn#cptResource843#

name::
* McsEngl.dlp'resourceInfHmn@cptIt,

Home Page:
* http://dl.kr.org//

SPECIFIC

dlp.CRACK

name::
* McsEngl.dlp.CRACK@cptIt,
* McsEngl.crack@cptIt503,

CREATOR: IRST (Italy).

ONLINE VERSION:
http://mnemosyne.itc.it:1024/crack/

pgmKnl.Decision-support-system

name::
* McsEngl.pgmKnl.Decision-support-system@cptIt,
* McsEngl.conceptIt497.8,
* McsEngl.conceptIt65,
* McsEngl.DSS-its@cptIt,
* McsEngl.dss-program@cptIt,
* McsEngl.decision-support-system@cptIt,
* McsEngl.program.DSS@cptIt,
* McsEngl.conceptIt497.8,

_DESCRIPTION:
Keen and Scott Morton (1978) gave an earlier definition of DSS: "The application of available and suitable computer-based technology to help improve the effectiveness of managerial decision making in semi-structured tasks".
[ER, 1988, 356#cptResource15]
===
Decision support systems are a class of computer-based information systems including knowledge based systems that support decision making activities.
[http://en.wikipedia.org/wiki/Decision_support_system]

dss'EVOLUTION#cptCore546.171#

name::
* McsEngl.dss'EVOLUTION@cptIt,

{time.1981}:
=== QUANTITY:
The first DSS were implemented in the mid-1970s. The first book with the words DSSs in its title was published in 1978 (Keen and Scott Morton). Today [1981] the number of DSS users is in the thousands, but probably less than 10000.
[HUBER#ql:idrscinf38#, 1982, 251#cptResource38]

{time.1978}:
=== NAME:
To complement EDP and also to shift the attention away from MIS, the term DSS, Decision Support Systems, was coined by Keen and Scott Morton (1978) to denote the other aspect of information processing, namely the provision of information for supprorting management decision making.
[Er, 1988, 355#cptResource15]

{time.1971-1980:
=== INVENTION:
The DSS developed in the 1970s.
[SELWYN, 1989, 74#cptResource96]

{time.1967-1970:
=== INVENTION:
DSS date back to the late 1960s, basically since the advent of data bases and direct access to information through terminals.
[Monger, Managerial DM with technology, 1987, 10]

dss'system

name::
* McsEngl.dss'system@cptIt,
* McsEngl.conceptIt497.11,
* McsEngl.conceptIt65,
* McsEngl.its.dss@cptIt65,
* McsEngl.sysIt.decision-support@cptIt497.11, {2012-05-05}

_DESCRIPTION:
The program, the hardware, the humans.
[hmnSngo.2012-05-05]
===
Business intelligence (BI) is defined as the ability for an organization to take all its capabilities and convert them into knowledge, ultimately, getting the right information to the right people, at the right time, via the right channel. This produces large amounts of information which can lead to the development of new opportunities for the organization. When these opportunities have been identified and a strategy has been effectively implemented, they can provide an organization with a competitive advantage in the market, and stability in the long run (within its industry). (Rud, Olivia (2009). Business Intelligence Success Factors: Tools for Aligning Your Business in the Global Economy. Hoboken, N.J: Wiley & Sons. ISBN 978-0-470-39240-9.)
BI technologies provide historical, current and predictive views of business operations. Common functions of business intelligence technologies are reporting, online analytical processing, analytics, data mining, process mining, complex event processing, business performance management, benchmarking, text mining, predictive analytics and prescriptive analytics.
Business intelligence aims to support better business decision-making. Thus a BI system can be called a decision support system (DSS).[1] Though the term business intelligence is sometimes used as a synonym for competitive intelligence, because they both support decision making, BI uses technologies, processes, and applications to analyze mostly internal, structured data and business processes while competitive intelligence gathers, analyzes and disseminates information with a topical focus on company competitors. Business intelligence understood broadly can include the subset of competitive intelligence.[2]
[http://en.wikipedia.org/wiki/Business_intelligence]

pgmKnl.EXPERT_SYSTEM

name::
* McsEngl.conceptIt497.9, (old-136#cptIt136#)
* McsEngl.es,
* McsEngl.es@cptIt136,
* McsEngl.expert-system@cptIt136,
* McsEngl.expert system program,
* McsEngl.program.ExpertSystem@cptIt136,
* McsEngl.knowledge-base system,
* McsEngl.knowledge-based system,
* McsElln.ΕΜΠΕΙΡΙΚΟ-ΣΥΣΤΗΜΑ,

_NOTE: many authors assume complete interchangeability with other terms, such as
- "intelligent knowledge-based system" or
- "knowledge-based system".
[BROOKS, 1987, 368#cptResource8#]

es'DEFINITION

Expert System is a KMS#cptIt497# with reasoning capabilities in a small domain.
[nikkas {1999-09-09}]

An expert system, also known as a knowledge based system, is a computer program that contains the knowledge and analytical skills of one or more human experts, related to a specific subject. This class of program was first developed by researchers in artificial intelligence during the 1960s and 1970s and applied commercially throughout the 1980s.
[http://en.wikipedia.org/wiki/Expert_system]

ΕΞΠΕΡΤ ΣΥΣΤΗΜΑ ονομάζω πρόγραμμα που μπορεί να κάνει ΛΟΓΙΚΕΣ ΠΡΑΞΕΙΣ.
[ΝΙΚΟΣ, ΝΟΕΜ. 1994]

An expert system is an artificial intelligence technique in which the knowledge to accomplish a particular task (or set of tasks) is encoded a priori from a human expert. An expert system typically consists to two pieces. The knowledge base represents the expert's domain knowledge and must be encoded as efficiently as possible due to the size of the database. This representation often takes the form of rules. The reasoner exploits the knowledge in the rules in order to apply that knowledge to a particular problem. Expert systems often have an explanation facility as well. Production systems are often used to realize expert systems. Expert systems also often lag the cutting edge of AI research since they are normally more application-oriented. Examples of implemented expert systems include:
MYCIN: Diagnosis of Infectious Diseases
MOLE: Disease Diagnosis
PROSPECTOR: Mineral Exploration Advice
DESIGN ADVISOR: Silicon Chip Design Advice
R1: Computer Configuration
The cognitive architecture Soar has been also been applied to the last task in a system called R1-Soar.
[http://krusty.eecs.umich.edu/cogarch4/toc_defs/defs_capa/defs_expert.html] 1998feb16

OTHER-VIEW#cptCore505#

An expert system is a COMPUTER PROGRAM that embodies the knowledge obtained from an expert's experience in a specialized field.
[SAWARAGI, 1986, 100#cptResource93]

EXPERT SYSTEM: technology designed to encode an expert's knowledge into a computer program in the form of IF...THEN rules.
[BYTE, JUL 1993, 108]

es.SPECIFIC

name::
* McsEngl.es.SPECIFIC@cptIt,

_SPECIFIC: es.Alphabetically:
* Symbologic, Adept#cptItsoft826#
* TestBench, Carnegie Group, Pittsburgh PA. Has knowledge editor for textual and graphical editing on an OBJECT ORIENTED methodology, for DIAGNOSTIC problems.
[BYTE, OCT. 1994, 87]

_SPECIFIC_DIVISION.METHODOLOGY:
* CaseBaseRepresentation
* CaseBaseReasoning: συγκεκριμένα παραδείγματα αξιολογούνται.
* DecisionTreeReasoning:
* FaultHierarchyReasoning:
Σε διαγνωστικα προβλήματα οι αιτίες ακολουθουνε ενα δένδορ που 'πέφτει προς τα κάτω.
* FRAME BASED REPRESENTATION
* GENETIC-ALGORITHM#cptIt344# system
* KBS
* PROCEDURE'BASED'SYSTEM
* RuleBasedReasoning:
* RULE'BASED'SYSTEM

FUNCTION
_SPECIFIC_DIVISION.Doing:
* The machine translation system is a typical example of ES.
[SAWARAGI, 1986, 139#cptResource93]
* Advisory function

es'Advantage

name::
* McsEngl.es'Advantage@cptIt,

The major advantage of an expert system is that with it anyone can perform with the same ability as an expert.
[SAWARAGI, 1986, 100#cptResource93]

es'Fact

name::
* McsEngl.es'Fact@cptIt,

A fact is a simple proposition. A rule is two propositions joined by if and then.
[internet] 1998may02

es'Inference-engine

name::
* McsEngl.es'Inference-engine@cptIt,
* McsEngl.inference'engine'in'expert'system@cptIt136i,
* McsEngl.reasoning-mechanism@cptIt,

The inference engine of an ES is completely independent of the content of the knowledge base.
[BROOKS, 1987, 373#cptResource8]

es'Problem#cptIt466#

name::
* McsEngl.es'Problem@cptIt,

The expert systems of the early 1980s proved to be difficult to bulid because of the challenge of capturing all of an expert's knowledge. They were also difficult to maintain, because their large rule bases had little organization. Most expert systems were stand-alone applications on dedicated workstations.
[BYTE, JUL 1993, 107]

es'Relation-to-DSS#cptIt497.11#

name::
* McsEngl.es'Relation-to-DSS@cptIt,

DSS is essentially based on quantitative approach such as OR/MS
whereas ES is based on qualitative approach such as heuristic method.
[SAWARAGI, 1986, 65(Kuratani)#cptResource93]

es'Rule

name::
* McsEngl.es'Rule@cptIt,

A fact is a simple proposition. A rule is two propositions joined by if and then.
[internet] 1998may02

es'Usage

name::
* McsEngl.es'Usage@cptIt,

In summary, the classic expert systems have shown that it is possible to design knowledge-based systems that can perform over a VERY LIMITED domain at performance levels approaching those of a human expert.
[BROOKS, 1987, 372#cptResource8]

es.Production-System

name::
* McsEngl.es.Production-System@cptIt,

A production system is a tool used in artificial intelligence and especially within the applied AI domain known as expert systems. Production systems consist of a database of rules, a working memory, a matcher, and a procedure that resolves conflicts between rules. These components are outlined below. Several different versions of productions systems have been developed, including the OPs series which culminated in OPS5 (see Forgy). OPS5 was modified to implement the Soar production system described elsewhere in this document.
Matching The rules of a production consist of a condition and action in the form: (if x then y). The left-hand-side conditions (x and y may be arbitrarily complex conjunctions of expressions) are compared against the elements of working memory to determine if the conditions are satisfied. Matching is an computationally intense procedure although the RETE algorithm of OPS5 is significantly more efficient than a simple condition-by-condition matcher. Conflict Resolution At any point in processing, several productions may match to the elements of working memory simultaneously. Since production systems are normally implemented on serial computers, this results in a conflict: there is a non-unique choice about which action to take next. Most conflict resolution schemes are very simple, dependent on the number of conditions in the production, the time stamps (ages) of the elements to which the conditions matched, or completely random. One of the advantages of production systems is that the computational complexity of the matcher, while large, is deterministically finite and the conflict resolution scheme is trivial. This is in contrast to logicist systems in which declarative knowledge may be accessed instantly but the time required to use the knowledge (in a theorem prover, for instance) can not be pre-determined.
Actions The actions of productions are manipulations to working memory. Elements may be added, deleted and modified. Since elements may be added and deleted, the production system is non-monotonic: the addition of new knowledge may obviate previous knowledge. Non-monotonicity increases the significance of the conflict resolution scheme since productions which match in one cycle may not match in the following because of the action of the intervening production. Some production systems are monotonic, however, and only add elements to working memory, never deleting or modifying knowledge through the action of production rules. Such systems may be regarded as implicitly parallel since all rules that match will be fired regardless of which is fired first.
[http://krusty.eecs.umich.edu/cogarch4/toc_defs/defs_arch/defs_prod.html] 1998feb16

pgmKnl.FRAME-BASED

_CREATED: {2011-09-06} {2000-06-19}

name::
* McsEngl.pgmKnl.FRAME-BASED@cptIt,
* McsEngl.conceptIt497.5,
* McsEngl.conceptIt538,
* McsEngl.fbp@cptIt497.5, {2011-09-06}
* McsEngl.frame-based-program@cptIt497.5, {2011-09-06}
* McsEngl.frame-based-system@cptIt,
* McsEngl.frame-representation-system@cptIt,
* McsEngl.frs@cptIt538,
* McsEngl.object-oriented-knowledge-representation-system@cptIt,

=== _NOTES: object-oriented knowledge representation systems Name the frs the OKBC protocole.
2000jul20

_GENERIC:
* AI_PROGRAM#cptItsoft497.6#

_DESCRIPTION:
Frames were proposed by Marvin Minsky in his 1974 article "A Framework for Representing Knowledge." A frame is an artificial intelligence data structure used to divide knowledge into substructures by representing "stereotyped situations." Frames are connected together to form a complete idea.
[http://en.wikipedia.org/wiki/Frame_%28Artificial_intelligence%29]

fbp'Class

name::
* McsEngl.fbp'Class@cptIt,

fbp'CollectionKnowledge

name::
* McsEngl.fbp'CollectionKnowledge@cptIt,
* McsEngl.knowledge-base-frp@cptIt538i,

A knowledge base (KB) is a collection of classes, individuals, frames, slots, slot values, facets, facet values, frame-slot associations, and frame-slot-facet associations. KBs are considered to be entities in the universe of discourse and are represented by frames. All frames reside in some KB. The frames representing KBs are considered to reside in a distinguished KB called the meta-kb, which is accessible to OKBC applications.
[OKBC 2.0.3 1998] 2000jul20

fbp'Constant

name::
* McsEngl.fbp'Constant@cptIt,

The OKBC Knowledge Model assumes a universe of discourse consisting of all entities about which knowledge is to be expressed. Each OKBC knowledge base may have a different universe of discourse. However, OKBC assumes that the universe of discourse always includes all constants of the following basic types:
- integers
- floating point numbers
- strings
- symbols
- lists
- classes
Classes are sets of entities 1 , and all sets of entities are considered to be classes. OKBC also assumes that the domain of discourse includes the logical constants true and false.
[OKBC 2.0.3 1998] 2000jul21

fbp'DomainIn

name::
* McsEngl.fbp'DomainIn@cptIt,

Thus, the domain of discourse consists of individuals and classes.
[OKBC 2.0.3 1998] 2000jul20

fbp'Frame

name::
* McsEngl.fbp'Frame@cptIt,

A frame is a primitive object that represents an entity in the domain of discourse. Formally, a frame corre-sponds to a KIF constant. A frame that represents a class is called a class frame, and a frame that represents an individual is called an individual frame.
[OKBC 2.0.3 1998] 2000jul20

fbp'resourceInfHmn#cptResource843#

name::
* McsEngl.fbp'resourceInfHmn@cptIt,

OKBC
Open Knowledge Base Connectivity 2.0.3, 1998

fbp'Terminology

name::
* McsEngl.fbp'Terminology@cptIt,

In a recent review of FRSs, Karp identifies over 50 of these systems.
He also observes that terminology in the field of KR is in a state of chaos because different researchers often use different terms to mean the same thing.
For example, there are
10 different terms for the notion of a class (concept);
4 terms for an instance (individual);
4 terms for the relationship between a concept and an instance (slot);
3 terms for the notion of slot values; and
2 terms for the slot and for the slot unit.
[Generic Frame Protocol 1997]

pgmKnl.NATURAL-LANGUAGE-PROCESSING

name::
* McsEngl.pgmKnl.NATURAL-LANGUAGE-PROCESSING@cptIt,
* McsEngl.conceptIt365,
* McsEngl.conceptIt497.12,
* McsEngl.lagHmn'program@cptIt,
* McsEngl.lagHmn'tool@cptIt,
* McsEngl.natural-language-processing@cptIt,
* McsEngl.natural-language-system@cptIt,
* McsEngl.Nlp@cptIt,
* McsEngl.Nlp-program@cptIt,
* McsEngl.program.human-language@cptIt365,
* McsEngl.program.NaturalLanguageProcessing@cptIt365,
* McsEngl.pgmNlp@cptIt,
* McsEngl.prgNlp@cptIt, {2012-11-24}

_GENERIC:
* program-knowledge#cptItsoft497#
* AI-PROGRAM#cptItsoft497.6#

_DESCRIPTION:
Natural language generation systems convert information from computer databases into normal-sounding human language, and natural language understanding systems convert samples of human language into more formal representations that are easier for computer programs to manipulate.
[http://en.wikipedia.org/wiki/Natural_language_processing]

pgmNlp'parsing

name::
* McsEngl.pgmNlp'parsing@cptIt,

_DESCRIPTION:
"This is necessary because the theory behind the parsing of natural languages might be the same one that is behind the parsing of programming languages, however the practice is very dissimilar. In fact, you are not going to build a parser for a natural language. That is unless you work in artificial intelligence or as researcher. You are even rarely going to use one. Rather you are going to find an algorithm that work a simplified model of the document that can only solve your specific problem.

In short, you are going to find tricks to avoid to actually having to parse a natural language. That is why this area of computer science is usually called natural language processing rather than natural language parsing."
[https://tomassetti.me/guide-natural-language-processing/]

ΓΡΑΜΜΑΤΙΚΗ ΑΝΑΛΥΣΗ
PRINCIPLE BASED
RULE BASED PARSING

pgmNlp'resource

name::
* McsEngl.pgmNlp'resource@cptIt,

_ADDRESS.WPG:
* https://tomassetti.me/guide-natural-language-processing/

SPECIFIC

name::
* McsEngl.prgNlp.specific@cptIt,

_SPECIFIC: prgNlp.alphabetically:
* prgNlp.abstracting##cptIt497.13##
* prgNlp.advisory#cptItsoft497.14#
* prgNlp.conjugator##
* prgNlp.declensor##
* prgNlp.expert_system#cptItsoft497.9#
* prgNlp.Grammar_Checker
* prgNlp.Parser##
* prgNlp.speech_recognizer#cptItsoft540.1#
* prgNlp.Spell_Checker#cptIt408#
* prgNlp.START#linkL#cptIt521##
* prgNlp.text_anaysis##
* prgNlp.translating#cptItsoft497.15#


Major tasks in NLP
* Automatic summarization
* Foreign Language Reading Aid
* Foreign Language Writing Aid
* Information extraction
* Information retrieval
* Machine translation
* Named entity recognition
* Natural language generation
* Optical Character Recognition
* Question answering
* Speech recognition
* Spoken dialogue system
* Text simplification
* Text to speech
* Text-proofing
[http://en.wikipedia.org/wiki/Natural_language_processing]

pgmNlp.GATE

name::
* McsEngl.pgmNlp.GATE@cptIt,

GATE2 is an infrastructure for developing and deploying software components that process
human language. It is nearly 15 years old and is in active use for all types of computational
task involving human language. GATE excels at text analysis of all shapes and sizes. From
large corporations to small startups, from €multi-million research consortia to undergraduate
projects, our user community is the largest and most diverse of any system of this type, and
is spread across all but one of the continents3.
GATE is open source free software; users can obtain free support from the user and developer
community via GATE.ac.uk or on a commercial basis from our industrial partners. We
are the biggest open source language processing project with a development team more
than double the size of the largest comparable projects (

pgmNlp.JAVA

name::
* McsEngl.pgmNlp.JAVA@cptIt,

Grok:
natural language processing library written in Java which provides implementations for most of the interfaces defined in the opennlp.common package.
[http://grok.sf.net]

pgmNlp.JavaScript

_CREATED: {2013-08-28}

name::
* McsEngl.pgmNlp.JavaScript@cptIt,
* McsEngl.js'nlp@cptIt,

_SPECIFIC:
* http://www.chrisumbel.com/article/node_js_natural_language_nlp,
* http://www.erickfernandes.com/post/2012/04/17/natjs-Javascript-Library-for-NLP.aspx,

_SPECIFIC: NODE.JS:
* https://github.com/NaturalNode/natural,

pgmNlp.PARSER

_CREATED: {2012-11-24} {2000-09-17}

name::
* McsEngl.pgmNlp.PARSER@cptIt,
* McsEngl.conceptIt546,
* McsEngl.human-language-parser@cptIt,
* McsEngl.natural-language-parser@cptIt,
* McsEngl.parser@cptIt,
* McsEngl.parser.nl@cptIt546,

_DESCRIPTION:
A parser for some natural language (English, Portugese, etc.) is a program that diagrams sentences of that language---that supplies for a given sentence a correct grammatical analysis, demarcating its parts (called constituents), labeling each, identifying the part of speech of every word used in the sentence, and usually offering additional information, such as the semantic class (e.g., Person, Physical Object) of each word and the functional class (e.g., Subject, Direct Object) of each constituent of the sentence.
[http://www.cse.ogi.edu/CSLU/HLTsurvey/, 1996, 13.4.1]

pgmKnl.SEMASIAL-PROGRAM

_CREATED: {2007-12-01}

name::
* McsEngl.pgmKnl.SEMASIAL-PROGRAM@cptIt,
* McsEngl.conceptCore497.2,
* McsEngl.mineto-program@cptIt497.2, {2007-12-01}
* McsEngl.semasial-program@cptIt497.2, {2011-08-30}

_DEFINITION:
* Lagneto_program is any KRP that maps (represents) LANGETO_VIEWS#cptIt593# analogically.
[KasNik, 2008-01-26]

* MINETO_PROGRAM is any KRP that uses MINETO_MODELS#cptCore593# to represent knowledge.
[KasNik, 2007-12-01]

pgmKnl.VISUAL

name::
* McsEngl.pgmKnl.VISUAL@cptIt,
* McsEngl.conceptIt497.17,
* McsEngl.diagram-knowledge-program@cptIt497.17, {2012-11-24}
* McsEngl.graphic-knowledge-program@cptIt497.17, {2012-11-24}
* McsEngl.visual-knowledge-program@cptIt497.17, {2012-11-24}

VUE

name::
* McsEngl.VUE@cptIt497i,

The Visual Understanding Environment (VUE) is an Open Source project based at Tufts University. The VUE project is focused on creating flexible tools for managing and integrating digital resources in support of teaching, learning and research. VUE provides a flexible visual environment for structuring, presenting, and sharing digital information.
[http://vue.tufts.edu/]

pgmKnl.individual.Algernon

_CREATED: {2011-09-06} {1998-03-03}

name::
* McsEngl.pgmKnl.individual.Algernon@cptIt,
* McsEngl.conceptIt2036,
* McsEngl.algernon@cptIt,
* McsEngl.algernon-2036@cptIt,
* McsEngl.kms.algernon@cptIt,

_DESCRIPTION:

MethodKnowledge#cptIt501#

We have developed Access-Limited Logic (ALL) into a useful language for representing knowledge in very large knowledge-bases. Our goal in this work is to combine the formal rigor of first-order logic with the efficiency and intuitive appeal of a network-structured knowledge-base. Our research methodology involves a synergistic balance between theoretical work and system implementation. On the formal side, we have completed a rigorous proof of soundness and Socratic Completeness for ALL which includes negation, assumptions, and proof by contradiction. We have also demonstrated the existence of a family of increasingly powerful inference methods, parameterized by the depth of assumption nesting, ranging from incomplete and tractable to complete and intractable.
...
It has long been a guiding principle of the semantic network approach to knowledge representation that by exploiting the network structure of knowledge, one can increase the efficiency of reasoning. Intuitively, in a semantic network related concepts are located ``close together'' in the network and thus search and inference can be guided by the structure of the knowledge-base. However, formalisms for semantic networks have generally treated the semantic network notation as a variant of predicate calculus, and have regarded the access limitations inherent in a network to be an extra-logical indexing mechanisms.
Reasoning is hard. If a knowledge representation language is as expressive as first-order predicate calculus, then the problem of deciding what an agent implicitly knows (i.e. what an agent could logically deduce from its knowledge) is unsolvable [Boolos & Jeffrey, 1980]. Thus a sound and decidable knowledge representation and reasoning system must either give up expressive power, or use a weak inference system with an incomplete set of deduction rules or artificial resource limits (e.g. bounds on the number of applications of modus ponens). However, such inference systems tend to be difficult to describe semantically and tend to place unnatural limits on an agent's reasoning ability [Levesque, 1986].
Our solution to this dilemma is two fold. First, we have identified a set of inference mechanisms which can be efficiently computed in a network structured knowledge-base. The inference mechanisms in ALL are based on the idea of an access path and are guaranteed never to require searches of the entire knowledge-base. The time complexity of computing inference in ALL thus depends (polynomially) on the size of the accessible portion of the knowledge-base. Inference in ALL is thus necessarily incomplete. The second part of our approach is the development of formal results which characterize the (in)completeness of ALL. We have shown that ALL is Socratically Complete --- for any query of a proposition which is a consequence (in predicate calculus) of the knowledge-base, there exists a series of preliminary queries after which the original query will succeed. We have also shown several technical properties which partially characterize the conditions under which a query will succeed immediately.
Though ALL is Socratically Complete, complete inference in first order logic without existential quantification is known to be NP complete, so the problem of generating the series of preliminary Socratic queries must be NP complete. However, we have shown that the key factor determining the difficulty of finding such a series is the depth of assumption nesting in the series. Given any knowledge-base and any fact, if there exists a series of preliminary queries and assumptions after which a query of the fact will succeed, and the series only nests assumptions to depth n, then the series can be found in time proportional to the size of the accessible portion of the knowledge-base raised to the power n. This result is particularly significant since we expect common-sense reasoning to require large knowledge-bases, but relatively shallow assumption nesting. In future work, we plan to use context mechanisms to restrict the size of the reachable portion of the knowledge base.

Programming-language

Algernon has been implemented in CommonLisp (and recently in C++) and is a substantial knowledge-representation system.

User-interface

Amaze is a graphical browser for Algernon. It is written in Java and interacts with the LISP environment. It was released in March, 1997 and so far has only been tested on Sun and Linux machines using Allegro CL v4.3. Amaze is loaded by "algy.lisp".
Amaze features:
Display frames from the knowledge base.
Browse a hierarchy of frames by following one relation.
Reset and reload the KB.
Load user files.
Execute any LISP command.
Set the trace level or trace a specific rule.
Run examples.

pgmKnl.individual.CLASSIC

name::
* McsEngl.pgmKnl.individual.CLASSIC@cptIt,
* McsEngl.conceptIt497.10,
* McsEngl.conceptIt508,
* McsEngl.classic-kms@cptIt,
* McsEngl.kms.classic@cptIt508,

_DESCRIPTION:
CLASSIC is a knowledge representation(KR) system designed for applications where only limited expressive power is necessary, but rapid responses to questions are essential. CLASSIC is based on a description-logic#ql:description'logic'language_it503#(DL), which gives it an object-centered flavor, and thus most of the features available in semantic networks are also available in CLASSIC.
CLASSIC has a framework that allows users to represent
- descriptions,
- concepts,
- roles,
- individuals and
- rules.
CLASSIC allows for both primitive concepts, similar to the classes and frames of other knowledge representation systems and object-oriented programming languages, and defined concepts, i.e., concepts that have both necessary and sufficient conditions for membership.
Concepts are automatically organized into a generalization taxonomy and objects are automatically made instances of all concepts for which they pass the membership test. The other type of reasoning that CLASSIC does is to detect inconsistencies in information that it is told. In the presence of defined concepts these operations are non-trivial and useful. CLASSIC is one of a number of implemented description logics. Some other implemented systems are mentioned on this site, or for more complete information about description logics, see the official description logic home page .
[http://www.research.att.com/sw/tools/classic/classic.html 1998feb01]

pgmKnl.individual.Code4

_CREATED: {1997-10-25}

name::
* McsEngl.pgmKnl.individual.Code4@cptIt,
* McsEngl.conceptIt2023,
* McsEngl.code4@cptIt2023,
* McsEngl.Conceptually-Oriented-Design/Description-Environment@cptIt,

_DESCRIPTION:
* every concept has a unique number for identification, so its name can change.
[nikos]
===
CODE4 is a KNOWLEDGE-MANAGEMENT-SYSTEM created by Tim Lethbridge at university of Ottawa.
[nikos 1997oct25]

_OrgProducer:
* University of Ottawa
* Tim Lethbridge, http://www.site.uottawa.ca/~tcl//

cfr'Evaluation#cptCore546.107#

name::
* McsEngl.cfr'Evaluation@cptIt,

Phase 3: CODE4 evaluation (1993-1994)
The final stage of this research is the evaluation of CODE4 (discussed in chapter 6) which was performed in order to provide scientific validity to the research. In most related research, the evaluation, if done at all, focuses on assessing certain mathematical properties of a knowledge representation. The practical-knowledge-management goals of this work dictated a different approach however, one for which there are few precedents: The top level evaluation process involved determining how effectively substantial numbers of serious users worked with CODE4. Evaluation tools included a user questionnaire and the metrics[5] discussed in chapter 5.
[Tim Lethbridge, PhD Thesis, 1994nov]

cfr'Evolution#cptCore546.171#

name::
* McsEngl.cfr'Evolution@cptIt,

1991jan: CODE4:
CODE4 development began in January, 1991; and Smalltalk was once again chosen as the implementation language.
...Although the major principles embedded in CODE4's design have not changed, development continues to this day. Recently added features have met the specific needs of various users (e.g. the addition of various printout formats, inference mechanisms etc.)
[Tim Lethbridge, PhD Thesis, 1994nov]

1989-1990: CODE2:
CODE2 development period.
[Tim Lethbridge, PhD Thesis, 1994nov]

cfr'Doing#cptCore475#

name::
* McsEngl.cfr'Doing@cptIt,

A KMS, at least as we shall use the term, is an integrated, multi-functional tool in that it can support what we believe to be the main knowledge management or processing activities:
· capturing
· organizing, structuring
· clarifying, understanding
· debugging, editing
· finding
· displaying, formatting
· disseminating, transferring, sharing, etc.
[Skuce, Lethbridge. CODE4. IJHCS 42. 1995]

kms'KNOWLEDGE'RETRIEVAL

name::
* McsEngl.kms'KNOWLEDGE'RETRIEVAL@cptIt,

kms'ACCESS

name::
* McsEngl.kms'ACCESS@cptIt,

kms'EVOLUTION

name::
* McsEngl.kms'EVOLUTION@cptIt,

kms'GLOBALIZATION

name::
* McsEngl.kms'GLOBALIZATION@cptIt,

kms'Machine'Translation#cptIt497.15#

name::
* McsEngl.kms'Machine'Translation@cptIt,

kms'REASONING#cptIt485#

name::
* McsEngl.kms'REASONING@cptIt,

kms'PRESENTATION

name::
* McsEngl.kms'PRESENTATION@cptIt,

kms'Natural'Language'Processing#cptIt497.12#

name::
* McsEngl.kms'Natural'Language'Processing@cptIt,

kms'SEARCHING

name::
* McsEngl.kms'SEARCHING@cptIt,

kms'VIEWS

name::
* McsEngl.kms'VIEWS@cptIt,

kms'KNOWLEDGE'STORAGE

name::
* McsEngl.kms'KNOWLEDGE'STORAGE@cptIt,

cfr'ACQUISITION

name::
* McsEngl.cfr'ACQUISITION@cptIt,

For the purpose of this thesis, knowledge acquisition (KA) is considered the process of gathering knowledge and entering it into a computer so that the computer, and humans using it, can put that knowledge to use. Traditionally, the term knowledge acquisition has referred to gathering expertise, primarily in the form of rules, from experts in order to create an expert system (Gaines 1987; Neale 1989). Today, the term has evolved to mean more than that. This thesis, for example, is concerned very little with rules and even less with expert systems (although the acquired knowledge may be used to drive such systems). The kind of knowledge acquired in this research is typically general knowledge about things in the world, or detailed knowledge about the design of some device, program, organization etc.
An understanding of the term `knowledge acquisition' requires a basic understanding of what `knowledge' is. Unfortunately there are many debates about the definition of the latter, and it is desired to avoid prolonged arguments. In general, knowledge is considered to be any form of information that one might be able to manipulate in one's brain, but this thesis is primarily concerned with those aspects involving the categorization, definition and characterization of things and their relationships. This thesis is deliberately unconcerned with repetitive data, procedural knowledge (as might be embedded in a computer program) or knowledge of spatial structures (as might be embedded in a CAD/CAM database)[2].
The word `acquisition' implies an inputting process, whereas the kinds of processes performed in this research go far beyond that: Here, concerns include manipulation, storage, presentation and many other processes performed on the knowledge. Therefore to clarify the nature of this research, the broader term `knowledge management' (Riedesel 1990) is chosen - and the CODE4 software system developed in this research is called a knowledge management system (KMS).
[Tim Lethbridge, PhD Thesis, 1994nov]

kms'LEARNING#cptIt358#

name::
* McsEngl.kms'LEARNING@cptIt,

cfr'PROBLEM'REPORTER

name::
* McsEngl.cfr'PROBLEM'REPORTER@cptIt,

Also, an automatic problem reporting feature is included in the system: When a user has a problem (or suggestion, request etc.) he or she can invoke the problem reporter. The problem reporter emails text of the problem, along with the current state of the system and various debugging information, to the CODE4 developers.
[Tim Lethbridge, PhD Thesis, 1994nov]

kms'COLLABORATION

name::
* McsEngl.kms'COLLABORATION@cptIt,

cfr'CONSISTENCY/INTEGRATION

name::
* McsEngl.cfr'CONSISTENCY/INTEGRATION@cptIt,

INCONSISTENT KNOWLEDGE:
Thus, in contrast to some KR systems which would not permit entering an inconsistent statement, CODE4 allows it but can issue a warning, which may be recorded as a flag on the statement that further attention is needed. Later during knowledge reviews, one can ask for all statements flagged with inconsistencies. We have taken this approach because we have found that often as knowledge is emerging, users want to state beliefs that may be inconsistent, and deal with them later, possibly in consultation with others. For our purposes, enforcing literal consistency would prevent many users from entering knowledge at all: imagine if you told someone "you cannot speak unless you are always consistent". CODE4 is intended for capturing knowledge of any quality; hopefully rough knowledge would be later refined.
[Skuce, Lethbridge. CODE4. IJHCS 42. 1995]

kms'EDITING

name::
* McsEngl.kms'EDITING@cptIt,

cfr'TERMINOLOGY'MANAGEMENT

name::
* McsEngl.cfr'TERMINOLOGY'MANAGEMENT@cptIt,

CONCEPT RENAMING:
if a concept is subsequently renamed, a commonly needed operation, all references to it will still exist correctly and the new name will appear everywhere. Few systems support renaming, a critical knowledge managment operation.
[Skuce, Lethbridge. CODE4. IJHCS 42. 1995]

The system also can give SAME-NAMES to more than one concept.

cfr'Inferencing

name::
* McsEngl.cfr'Inferencing@cptIt,

inference mechanisms in CODE4 (such as inheritance and delegation) ...
Users can add their own inference layers on top of CODE4-KR if they wish; this involves programming.

cfr'Delegation

name::
* McsEngl.cfr'Delegation@cptIt,

Delegation is a mechanism whereby a statement's value is determined by referring to the values of other statements; hence it can be used to specify certain kinds of constraints. Delegation can be considered a generalized form of inheritance, but whereas inheritance always occurs unless overridden, the knowledge enterer must explicitly request delegation.
[Tim Lethbridge, PhD Thesis, 1994nov]

cfr'DomainIn

name::
* McsEngl.cfr'DomainIn@cptIt,

general purpose

This subsection explores the nature of the tasks in which a knowledge management system of the type described in this thesis might be used. In general, such a system might be used where there are:
* Ideas that are novel, not easily understood, difficult to categorize, difficult to relate to each other, difficult to distinguish or difficult to define precisely.
* Complex interrelationships among ideas or large interconnected networks of ideas.
* Multiple ways of looking at ideas and multiple opinions about ideas.
* Problems expressing ideas completely, clearly and unambiguously in a linear, tabular or diagrammatic format.
[Tim Lethbridge, PhD Thesis, 1994nov]

cfr'Goal#cptIt215#

name::
* McsEngl.cfr'Goal@cptIt,

The ultimate goal is to make such people more productive with the technology; the proximate goal is to identify key principles that should be applied in the design of knowledge representation and acquisition systems.
[Tim Lethbridge, PhD Thesis, 1994nov]

cfr'MethodKnowledge#cptIt501#

name::
* McsEngl.cfr'MethodKnowledge@cptIt,
* McsEngl.cfr'CODE4-KR@cptIt,
* McsEngl.cfr'krl@cptIt,
* McsEngl.code4c-method-497i@cptIt,
* McsEngl.methodKnowledgeCode4@cptIt,

_GENERIC:
* method-knowledge#cptItsoft525#

_DEFINITION:
CODE4-KR, a frame-based knowledge representation designed to improve the practicality of knowledge management.
[Tim Lethbridge, PhD Thesis, 1994nov]

cfr'PARADIGM

name::
* McsEngl.cfr'PARADIGM@cptIt,

CONCEPT:
 Metaconcept (not inherited relations),
   terms property (the referent doesn't have a name by itself)
   superconcept property,
 Statement,
   Facet,
     subFacet,...

cfr'FORMALITY

name::
* McsEngl.cfr'FORMALITY@cptIt,

FORMAL AND INFORMAL KNOWLEDGE REPRESENTATION:
It can be used both informally to clarify preliminary or developing ideas, and more formally if it is desired to make precise definitions or to allow the system to make inferences. Emphasis has been placed on permitting the user a wide choice in the degree of formality, making it "retrofittable", i.e., one can capture knowledge informally at first and then progressively formalize parts of it if needed.
[Skuce, Lethbridge. CODE4. IJHCS 42. 1995]

cfr'COMMAND

name::
* McsEngl.cfr'COMMAND@cptIt,

All operations on physical representations of CODE4-KR are performed using a limited set of well-defined commands. The commands are partitioned into two major sets:
* Those that update the knowledge base are called modifiers.
* Those that query the knowledge base are termed navigators (because applications using navigators use the results of one query to construct the next query, and thus navigate around the knowledge base).

An important subset of modifiers are the constructors: commands that add concepts and links between concepts, but do not delete or merely change knowledge. The basic constructors form a minimal set necessary and sufficient to construct any CODE4 knowledge base.
[Tim Lethbridge, PhD Thesis, 1994nov]

cfr'CONCEPT

name::
* McsEngl.cfr'CONCEPT@cptIt,

_DEFINITION:
As with several other knowledge representations, the basic unit of knowledge in CODE4-KR is called the concept.
[Tim Lethbridge, PhD Thesis, 1994nov]

In CODE4-KR, a concept is any knowledge structure that participates in the underlying inheritance mechanism. This includes the parts from which a typical frame-like structure is created.
It is critically important to distinguish a concept from the `thing' the concept represents. A concept is a piece of knowledge inside a CODE4 knowledge base[1], whereas clearly most things are not inside CODE4.
[Skuce, Lethbridge. CODE4. IJHCS 42. 1995]

INTENSION:
The potential set of properties possessed by a concept is called its intension[37]. The potential set of properties whose most general subject is a concept is called its local intension. Each concept has a local intension that is disjoint from that of all other concepts. The intension of a concept is the union of its local intension and the intensions of all its superconcepts.
The expression `potential set of properties' was used above to emphasise the fact that adding a property does not intrinsically alter the nature of the underlying thing being represented which theoretically might have an unlimited set of properties[38]. When a property is added to a concept, it is merely being stated that now one of the elements of the intension is known.
[Tim Lethbridge, PhD Thesis, 1994nov]

CODE4 is unusual among knowledge based systems in that the user's choice about whether a concept is a type or an instance has little effect on the system's behaviour. Furthermore, the user is provided with simple commands to switch concepts between being types and instances, and vice-versa.
From a purely practical point of view, the main effect of declaring a concept to be an instance is that it cannot have subconcepts - i.e. nothing can then inherit from it. All types can have subconcepts, whereas instances are only found at the bottom of the inheritance hierarchy.
[Tim Lethbridge, PhD Thesis, 1994nov]

cfr'CONCEPT'ATTRIBUTE

name::
* McsEngl.cfr'CONCEPT'ATTRIBUTE@cptIt,

As users gain expertise they come to know that anything (i.e. any concept) they find in the representation has certain attributes such as
- a superconcept,
- a metaconcept, and
- statements about which it is the subject.
[Tim Lethbridge, PhD Thesis, 1994nov]

EVALUATION:
STATEMENTS are not 'attributes' of concepts. With statements we express the attributes of a concept in a natural-language
eg "A general-cpt of 'tall-people' is 'people'".
[hmnSngo.2000jul29]

cfr'CONCEPT'INTENSION

name::
* McsEngl.cfr'CONCEPT'INTENSION@cptIt,

The potential set of properties possessed by a concept is called its intension[37]. The potential set of properties whose most general subject is a concept is called its local intension. Each concept has a local intension that is disjoint from that of all other concepts. The intension of a concept is the union of its local intension and the intensions of all its superconcepts.
The expression `potential set of properties' was used above to emphasise the fact that adding a property does not intrinsically alter the nature of the underlying thing being represented which theoretically might have an unlimited set of properties[38]. When a property is added to a concept, it is merely being stated that now one of the elements of the intension is known.
[38] Properties are mental (or computational) and descriptive entities. In CODE4 they are not considered to be intrinsic to the real-world entity being described. For example, each user is likely to characterise cars using a different set of properties; furthermore, it is trivially easy to `invent' new properties to describe some latent aspect of a thing, or some obscure relation that one has just noticed. While some definitional properties might be a necessary part of a concept (in a mind or knowledge base), this does not limit a user's ability to endlessly invent other properties for a thing.
[Tim Lethbridge, PhD Thesis, 1994nov, 53]

cfr'CONCEPT'METACONCEPT

name::
* McsEngl.cfr'CONCEPT'METACONCEPT@cptIt,
* McsEngl.cfr'Metaconcept@cptIt,

_DEFINITION:
When representing knowledge, it is frequently necessary to describe properties not of the thing a concept represents, but of the concept itself. For example, a non-metaconcept such as car would have properties that describe actual cars. e.g. specifying that they have wheels, a chassis, an engine and a body. However, the metaconcept concept of car would have properties such as inventor or comment that do not apply to particular instances of car but rather apply to the overall idea (i.e. concept) of cars.
...Each concept has exactly one metaconcept associated with it, and vice-versa. A concept represents a thing in the world and its metaconcept represents that concept. A concept is called the defining concept of its metaconcept.
...Although the idea of metaconcepts is not new, certain details are: For example: 1) the assumption of the existence of a metaconcept for every concept, and 2) the attachment of all non-inheriting properties to metaconcepts.
[Tim Lethbridge, PhD Thesis, 1994nov]

METACONCEPT:
*Specialized kind of: Instance concept,
*Represents: concept,
*Example: concept of Jil,
[Tim Lethbridge, PhD Thesis, 1994nov]

METACONCEPT-PROPERTIES:
It has been mentioned before that all primitive properties that show the interrelation between concepts (as opposed to between things in general) are attached to metaconcepts.
...
Metaconcepts are instances of the primitive type metaconcept. This is the most general subject for a number of properties shared by all metaconcepts, such as: * enterer, the person who entered the knowledge about the concept;
* entry date, the date the concept was entered;
* properties relating the concept to others (superconcepts, subconcepts, kinds, dimensions, disjoint concepts);
* information about how the concept can be referred-to or visualized (terms, graph layout position);
* information about which properties have the defining concept as their most general subject (source properties);
* descriptive information (comment).
[Tim Lethbridge, PhD Thesis, 1994nov]

NOT-INHERITED PROPERTIES:
The important thing to note about all such properties is that they inherit to each individual metaconcept, but not to subconcepts of a metaconcept's defining concept. Also, a value of a statement (having one of these properties as predicate and a particular metaconcept as subject) would not be inherited by any other concept. This naturally derives from the fact that metaconcepts are instance concepts; like other instance concepts they can have no subconcepts, and hence nothing can inherit from them.
So by having metaconcepts, CODE4-KR provides an elegant and intuitive mechanism for non-inheriting properties. Whereas most knowledge representations require that non-inheriting slots be tagged as such, CODE4-KR has a uniform rule that all properties inherit, and uses metaconcepts, separate from their defining concepts, to provide non-inheriting properties.
[Tim Lethbridge, PhD Thesis, 1994nov]

cfr'METACONCEPT'DIMENSION PROPERTY

name::
* McsEngl.cfr'METACONCEPT'DIMENSION PROPERTY@cptIt,
* McsEngl.cfr'DIMENSION@cptIt,

A dimension is a partitioning of a concept into subconcepts based on one point of view or criterion, for example, the sex of persons. The concept person might have four subconcepts: female person, male person, adult and child. The first two subconcepts constitute the dimension `by sex', while the second two constitute the dimension `by age'. The dimension property of the metaconcept for female person, would contain `by sex'. CODE4 labels subconcept arcs using dimensions. The regular subconcept relation can be considered a `nameless' dimension.
...
Dimensions have been found to be an important mechanism for organizing knowledge. A similar idea with this name exists in Classic. Library scientists, however, call a taxonomy breakdown where there are several independent criteria facetted classification (Vickery 1960; Hunter 1988; Dahlberg 1993) (there is no relation to CODE4's facets). The principle is called discriminators in OMT (Rumbaugh, Blaha et al. 1991).
[Tim Lethbridge, PhD Thesis, 1994nov]

cfr'KINDS:
Another primitive metaconcept property related to dimensions is kinds. Statements whose predicate is the kinds property contain text that describes which subconcepts are in which dimension. For example, the value of kinds for concept of person may be listed as: `by age: (concept of child, concept of adult); by sex: (concept of female person, concept of male person)'. The reason why `concept of...' precedes each concept name is that what are being listed are metaconcepts.
[Tim Lethbridge, PhD Thesis, 1994nov]

cfr'METACONCEPT'DISJOINTNESS PROPERTY

name::
* McsEngl.cfr'METACONCEPT'DISJOINTNESS PROPERTY@cptIt,
* McsEngl.cfr'Disjoint'Cocept@cptIt,

_DEFINITION:
* disjoint concepts:
A useful operation available in CODE4, but typically used only by experts, is to declare two or more concepts disjoint from each other. The practical effect of this is to declare that no two of them can have a common subconcept (i.e. no concept can be a direct or indirect subconcept of any two or more).
CODE4 prevents any attempt at making a common subconcept of two disjoint concepts. The disjointness property is symmetric: if one concept is disjoint from another, then that other is disjoint from the first. Also, if the concept of A is disjoint from the concept of B, then the concept of A's subconcepts are automatically disjoint from the concept of B's subconcepts.
Note that the disjointness property is attached to a concept's metaconcept - i.e. it relates concepts, not the things represented by those concepts.
[Tim Lethbridge, PhD Thesis, 1994nov]

cfr'METACONCEPT'ENTERER

name::
* McsEngl.cfr'METACONCEPT'ENTERER@cptIt,

* enterer, the person who entered the knowledge about the concept;
[Tim Lethbridge, PhD Thesis, 1994nov]

cfr'METACONCEPT'ENTRY'DATE

name::
* McsEngl.cfr'METACONCEPT'ENTRY'DATE@cptIt,

* entry date, the date the concept was entered;
[Tim Lethbridge, PhD Thesis, 1994nov]

cfr'METACONCEPT'INVENTOR

name::
* McsEngl.cfr'METACONCEPT'INVENTOR@cptIt,

cfr'METACONCEPT'SUPERCONCEPT PROPERTY

name::
* McsEngl.cfr'METACONCEPT'SUPERCONCEPT PROPERTY@cptIt,

cfr'METACONCEPT'NAME PROPERTY

name::
* McsEngl.cfr'METACONCEPT'NAME PROPERTY@cptIt,
* McsEngl.cfr'Term@cptIt,

_DEFINITION:
CODE4-KR treats the words or symbols used to name concepts as full-fledged concepts themselves. Such concepts are called terms.
...The terms property is attached to metaconcepts because it is not the underlying thing that has a name - names are associated with the concept of the thing. Different knowledge bases may use different terms for a given thing.
[Tim Lethbridge, PhD Thesis, 1994nov]

TERM ATTRIBUTES:
Terms have properties such as part-of-speech, plural or French equivalent. Values for some of these can be automatically obtained from an on-line dictionary to which CODE4 may be connected.
The only necessary property of a term is its character string; and there is a one-to-one mapping between terms and character strings. There are few restrictions on the internal syntax of a term's string except that if it starts with an octothorpe, then it is assumed to be an encoded binary bitmap - the term then represents a graphical icon. Encoded bitmaps are never returned when an alphabetic name for a concept is requested. They are used in the graphical mediating representation (see chapter 4).
...
Also one can find out what concepts a term represents by looking at the term property meanings.
[Tim Lethbridge, PhD Thesis, 1994nov]

cfr'NAME:
[44] A term is a kind of concept; a name is a string used to identify a concept (associated with a term); a label is what is displayed on the screen to identify a concept.
[Tim Lethbridge, PhD Thesis, 1994nov]

cfr'CONCEPT'INHERITANCE

name::
* McsEngl.cfr'CONCEPT'INHERITANCE@cptIt,
* McsEngl.cfr'Inheritance@cptIt,

CODE4-KR has a uniform rule that all properties inherit, and uses metaconcepts, separate from their defining concepts, to provide non-inheriting properties.
[Tim Lethbridge, PhD Thesis, 1994nov]

3.10.2 Inheritance
In the context of CODE4 there are two senses of the verb `to inherit':
* Property inheritance: This is described in section 3.5. A concept always possesses those properties possessed by its superconcepts.
* Value inheritance: This is derived from the first sense and is described in section 3.6. Value inheritance is a special case of facet inheritance.
In section 3.6, it was explained how the value facet inherits; in fact the value facet is the only facet that always inherits, and it does so using a primitive mechanism. The values of other facets never inherit unless explicitly directed to do so using a delegation directive (see above); this directive is specified at a facet property's most general subject (usually statement). Each facet inherits independently, i.e. if the value is overridden in a subconcept, other inheriting facets would still inherit unchanged.
[Tim Lethbridge, PhD Thesis, 1994nov]

INHERITANCE-HIERARCHY:
Central to knowledge management is the idea of categorizing; i.e. arranging concepts in a generalization or inheritance hierarchy.
[Tim Lethbridge, PhD Thesis, 1994nov]

cfr'CONCEPT'PART

name::
* McsEngl.cfr'CONCEPT'PART@cptIt,

[31] Another error very commonly made by users is confusing the subconcept relation with the parts relation. Since the normal knowledge-base building methodology involves specifying the inheritance hierarchy before adding any relations, users often specify things to be subconcepts that should be parts. At present CODE4 provides no solution to this problem, but see section 7.3.1 for possible future work.
[Tim Lethbridge, PhD Thesis, 1994nov]

cfr'CONCEPT'SUBGENERAL

name::
* McsEngl.cfr'CONCEPT'SUBGENERAL@cptIt,

SUBGENERAL:
* type-concept:
eg 'car', 'person'
* instance-concept:
eg my-car.
* user-concept:
If the primitive concepts, statements, metaconcepts and terms were to be ignored, what would be left would be those types and instances that have been explicitly added by the knowledge base developers. These are called user concepts
* disjoint concepts:
A useful operation available in CODE4, but typically used only by experts, is to declare two or more concepts disjoint from each other. The practical effect of this is to declare that no two of them can have a common subconcept (i.e. no concept can be a direct or indirect subconcept of any two or more).
* DEPENDENT CONCEPT:
A statement is a dependent concept.
As with a statement, a metaconcept is a dependent concept.
* SYSTEM-MANIPULATED CONCEPT:
A system-manipulated concept is one that is physically created and destroyed as a byproduct of the user's manipulation of other concepts, but is not manipulated directly by the user.

cfr'INHERITANCE'HIERARCHY:
Central to knowledge management is the idea of categorizing; i.e. arranging concepts in a generalization or inheritance hierarchy.
[Tim Lethbridge, PhD Thesis, 1994nov]

cfr'CONCEPT.DEPENDENT

name::
* McsEngl.cfr'CONCEPT.DEPENDENT@cptIt,
* McsEngl.cfr'Dependent'Concept@cptIt,

_DEFINITION:
* DEPENDENT CONCEPT:
A statement is a dependent concept.
As with a statement, a metaconcept is a dependent concept.

cfr'CONCEPT.INSTANCE

name::
* McsEngl.cfr'CONCEPT.INSTANCE@cptIt,
* McsEngl.cfr'Instance'Concept@cptIt,

Metaconcepts, properties, statements and terms are all instance concepts. This is because the things represented by these special concepts are individual in nature, not sets in nature. For example a term concept represents an individual word, compound word or symbol and a metaconcept represents an individual concept. Questions have been raised with regard to the instancehood of properties;
[Tim Lethbridge, PhD Thesis, 1994nov]

cfr'CONCEPT.PRIMITIVE

name::
* McsEngl.cfr'CONCEPT.PRIMITIVE@cptIt,
* McsEngl.cfr'Primitive'Concept@cptIt,

METACONCEPT:
Metaconcepts are instances of the primitive type metaconcept.
[Tim Lethbridge, PhD Thesis, 1994nov]

PROPERTY:
Properties are instance concepts. They are all grouped as subconcepts of a special primitive type concept by default called `property' (although the user can change that name).
[Tim Lethbridge, PhD Thesis, 1994nov]

STATEMENT:
Just like properties, statements are instance concepts; they are instances of the primitive type statement
[Tim Lethbridge, PhD Thesis, 1994nov]

cfr'CONCEPT.SYSTEM'MANIPULATED

name::
* McsEngl.cfr'CONCEPT.SYSTEM'MANIPULATED@cptIt,
* McsEngl.cfr'System'Manipulated'Concept@cptIt,

_DEFINITION:
* SYSTEM-MANIPULATED CONCEPT:
A system-manipulated concept is one that is physically created and destroyed as a byproduct of the user's manipulation of other concepts, but is not manipulated directly by the user.

cfr'CONCEPT.TYPE

name::
* McsEngl.cfr'CONCEPT.TYPE@cptIt,
* McsEngl.cfr'Type'Concept@cptIt,

_DEFINITION:
* type-concept: eg 'car', 'person'

cfr'CONCEPT.USER

name::
* McsEngl.cfr'CONCEPT.USER@cptIt,
* McsEngl.cfr'User'Concept@cptIt,

_DEFINITION:
* user-concept:
If the primitive concepts, statements, metaconcepts and terms were to be ignored, what would be left would be those types and instances that have been explicitly added by the knowledge base developers. These are called user concepts
* disjoint concepts:
A useful operation available in CODE4, but typically used only by experts, is to declare two or more concepts disjoint from each other. The practical effect of this is to declare that no two of them can have a common subconcept (i.e. no concept can be a direct or indirect subconcept of any two or more).

cfr'MAIN'SUBJECT

name::
* McsEngl.cfr'MAIN'SUBJECT@cptIt,

Those user concepts that are the subjects of statements are called main subjects (the set of main subjects does not include those user concepts about which nothing has been said).
[Tim Lethbridge, PhD Thesis, 1994nov]

cfr'PROPERTY

name::
* McsEngl.cfr'PROPERTY@cptIt,

_DEFINITION:
Property: (*) A CONCEPT representing a relation between concepts (Specialization of INSTANCE CONCEPT; DISJOINT with SYSTEM-MANIPULATED CONCEPT and USER INSTANCE).
...
Properties can be viewed as logical predicates. This will be discussed further in section 3.6 during the discussion of statements. Another, equivalent, view of a property is as a relation whose domain is the extension of its most general subject. Subproperties can be considered subrelations.
...
Every concept has a set of properties associated with it. A property is introduced at a certain concept, P; and it is inherited by all the subconcepts of P. The concept at which it is introduced is called the property's most general subject. The actual descriptive information associated with the occurrence of a property at a concept is found in a statement (see section 3.6).
...
In CODE4-KR when a concept, C, is said to have a property P, it means that C is either the most general subject for P or inherits P.
...
Normally the user does not care about the position of properties in the inheritance hierarchy, instead he or she is only interested in how they are used to build descriptions of concepts.
[Tim Lethbridge, PhD Thesis, 1994nov]

EVALUATION:
Some properties are instance and some are type.
[hmnSngo.2000jul29]

Properties can be instance and type at the same time. Every property is an instance of the primitive 'property'. The same can be type if represents a set of things.
It is analogous to that
- the concept 'entity' is subconcept of the concept 'concept' because 'entity' is a concept and
- the concept 'entity' is superconcept of 'concept' because the 'concept' is a subset of entities.
[nikos 1997oct29]

concept properties are NOT instance-concepts (3.5.1). If the concept is type then its properties are also type, if teh concept is instance then its properties are instace.
Yes, every 'property' is subconcept of the primitive 'properties'.
The same with statements. they are not instance-concepts. We are interesting in the 'thing' they represent, not on 'metaconcept' information.
Thinking in the same way someone can say that all concepts are instance-concepts of the 'primitive' 'concept'. But some concepts are type and others are instances IN RELATION to thing they represent.
[nikos, 1997oct28]

cfr'PROPERTY'HIERARCHY

name::
* McsEngl.cfr'PROPERTY'HIERARCHY@cptIt,

Equally important is the idea of characterizing concepts, i.e. specifying properties that define or describe the concepts. However little attention has been paid to the categorization of those properties themselves. Chapter 3 discusses the idea of a global property hierarchy in a knowledge base, as well as a number of closely related organizing techniques.
[Tim Lethbridge, PhD Thesis, 1994nov]

These generally have the top property as their starting concept and use the subproperties primitive property as their relation. It is also possible to display subtrees of a knowledge base's property hierarchy, but this is rarely done.
[Tim Lethbridge, PhD Thesis, 1994nov, 89]

cfr'SUBPROPERTY:
example:
Make person possess a property related persons, which has subproperties for various types of human relations (father, mother, friends, spouse etc).
[Tim Lethbridge, PhD Thesis, 1994nov, 90]

cfr'PROPERTY'MOST'GENERAL'SUBJECT

name::
* McsEngl.cfr'PROPERTY'MOST'GENERAL'SUBJECT@cptIt,

Every concept has a set of properties associated with it. A property is introduced at a certain concept, P; and it is inherited by all the subconcepts of P. The concept at which it is introduced is called the property's most general subject. The actual descriptive information associated with the occurrence of a property at a concept is found in a statement (see section 3.6).
[Tim Lethbridge, PhD Thesis, 1994nov]

EVALUATION:
Not ALL properties are inherited.
[hmnSngo.2000jul29]

cfr'PROPERTY'AND'STATEMENT

name::
* McsEngl.cfr'PROPERTY'AND'STATEMENT@cptIt,

* The relation between statement and property clearly is not `is-a'; a statement has a property as predicate, but in no sense is a property.
[Tim Lethbridge, PhD Thesis, 1994nov]

cfr.PROPERTY.PRIMITIVE

name::
* McsEngl.cfr.PROPERTY.PRIMITIVE@cptIt,

cfr'STATEMENT

name::
* McsEngl.cfr'STATEMENT@cptIt,
* McsEngl.cfr'CONCEPT.DEPENDENT.STATEMENT@cptIt,

_DEFINITION:
When something is to be said involving a property of a particular concept it is said using a statement.
...Just like properties, statements are instance concepts; they are instances of the primitive type statement. As with properties the user rarely thinks of them in this way: It is their role of associating a particular concept (their subject) and a particular property (their predicate) that is of interest.
... A statement is a dependent concept.
... Statement: (***) A CONCEPT representing an assertion of fact about a concept, known as the statement's SUBJECT. The representation of the possession by the subject of a particular PROPERTY called the statement's PREDICATE. The subject and predicate are a statement's DEFINING CONCEPTS. (Specialization of DEPENDENT INSTANCE; DISJOINT with METACONCEPT).
[Tim Lethbridge, PhD Thesis, 1994nov]
In a similar manner, most KR's have some notion of the association between a property and a particular slot in a frame. For example in KM the concept-slot-value triple fulfils this role. In CODE4-KR the fact that a concept has a property is encoded by a statement. This CODE notion has been made close to the linguistic notion of a statement to may it easier for users to grasp: a concept is the subject, and its property is encoded by the predicate of the statement.
[Skuce, Lethbridge. CODE4. IJHCS 42. 1995]

DISPLAYMENT:
Statements can be displayed on a CODE4 graph[4] as links between the subject and the value concept (in fact all links on graphs represent some statement). The property name labels the link.
[Skuce, Lethbridge. CODE4. IJHCS 42. 1995]

EVALUATION:
STATEMENTS are NOT concepts. Yes we have the concept of statement to define what statement is, but the real statements are the REFERENTS of the concept statement and not 'substatements'. With statements we create Information that describes conceptual-models.
Is it wright to treat a car like a concept?
[hmnSngo.2000jul29]

cfr'STATEMENT'DEFINING'CONCEPT

name::
* McsEngl.cfr'STATEMENT'DEFINING'CONCEPT@cptIt,

DEFINING CONCEPT:
The subject and predicate of a statement are said to be its defining concepts.
[Tim Lethbridge, PhD Thesis, 1994nov]

cfr'STATEMENT'FACET'PROPERTY

name::
* McsEngl.cfr'STATEMENT'FACET'PROPERTY@cptIt,
* McsEngl.cfr'Facet'Property@cptIt,
* McsEngl.cfr'Statement'Properyt@cptIt,

As with other concepts, statements possess a set of properties that are called facet properties.
[Tim Lethbridge, PhD Thesis, 1994nov, 57]

NAME:
What properties (facets) should a statement have?
[This statement shows that Tim uses the the name 'facet' AND for the 'facet-property'.]
[Tim Lethbridge, PhD Thesis, 1994nov, 57]

cfr'STATEMENT'HIERARCHY

name::
* McsEngl.cfr'STATEMENT'HIERARCHY@cptIt,

As discussed in section 3.5, a concept C inherits a portion of the global property hierarchy, HC. The statements whose subject is C and whose predicates are in HC form C's statement hierarchy. Statement A is a substatement of statement B if they both have the same subject, and if the predicate of A is a subproperty of the predicate of B. In other words, there is a one-to-one mapping between that HC and the statement hierarchy of C.

...The inheritance rule for statements in CODE4-KR is as follows: If statement X, with predicate PX and subject SX, has value V, then the subconcepts of SX have statements with predicate PX and value V, unless the user explicitly replaces value V with something else or unless multiple inheritance occurs.
[This rule shows that statement-'hierarchy a mapping to property-hierarchy is a general-hierarchy. Then property-hierarchy is a general-hierarchy, nikkas 2000jul29]
[Tim Lethbridge, PhD Thesis, 1994nov]

cfr'STATEMENT'PREDICATE

name::
* McsEngl.cfr'STATEMENT'PREDICATE@cptIt,
* McsEngl.cfr'Predicate@cptIt,

Just like properties, statements are instance concepts; they are instances of the primitive type statement. As with properties the user rarely thinks of them in this way: It is their role of associating a particular concept (their subject) and a particular property (their predicate) that is of interest.
[Tim Lethbridge, PhD Thesis, 1994nov]

cfr'STATEMENT'SUBJECT

name::
* McsEngl.cfr'STATEMENT'SUBJECT@cptIt,
* McsEngl.cfr'Subject@cptIt,

Just like properties, statements are instance concepts; they are instances of the primitive type statement. As with properties the user rarely thinks of them in this way: It is their role of associating a particular concept (their subject) and a particular property (their predicate) that is of interest.
[Tim Lethbridge, PhD Thesis, 1994nov]

cfr'STATEMENT'VALUE

name::
* McsEngl.cfr'STATEMENT'VALUE@cptIt,
* McsEngl.cfr'Value@cptIt,

VALUE OF A STATEMENT:
In the relation interpretation of properties (section 3.5.2), the value of a statement specifies part of the range of the relation formed by its predicate, where the subject specifies a corresponding part of the domain.
...Value: (*) A component of a STATEMENT, composed of either a text string or one or more CONCEPTS. A value indicates what the statement's SUBJECT is related to by way of its PREDICATE. (Role term applicable to any text string or set of concepts when discussing its role in a statement).
...A statement can have only one value (although several value items).
[Tim Lethbridge, PhD Thesis, 1994nov]
A value usually corresponds to the direct object of a sentence.
...
Values can be formal or informal (see chapter 1 and the glossary for a discussion of these terms). An informal value contains a character string; i.e. uninterpreted text. A formal value contains an ordered list of value items. The value items refer to other concepts in the knowledge base. Section 3.6.2 explains this further.
[Skuce, Lethbridge. CODE4. IJHCS 42. 1995]

in Kif, CycL value of a statement is true/false.
[hmnSngo.2000jul27]

cfr'STATEMENT'SUBGENERAL

name::
* McsEngl.cfr'STATEMENT'SUBGENERAL@cptIt,

SUBGENERAL:
** VIRTUAL STATEMENT:
A statement that conceptually exists, because a particular subject possesses a particular predicate, need not physically be created in a knowledge base. If it does not physically exist, it is considered virtual. A virtual statement is made real when knowledge is added involving it; i.e. under the following circumstances:
- It is made the most general subject of a property. (A property is attached to it.)
- Its value is specified.
- The value of one of its facets (of which it is the subject; discussed below) is specified.
- It is specified as one of the value-items of a value (also discussed below).
** FACET:
Statements whose subjects are statements are called facets.

cfr'STATEMENT.FACET

name::
* McsEngl.cfr'STATEMENT.FACET@cptIt,
* McsEngl.cfr'facet@cptIt,

Statements whose subjects are statements are called facets. It is in these that a large portion of the important information in a CODE4 knowledge base is stored.
[Tim Lethbridge, PhD Thesis, 1994nov]

cfr'STATEMENT.GROUNDED

name::
* McsEngl.cfr'STATEMENT.GROUNDED@cptIt,

When the value of a statement contains an instance concept, it is often said to be grounded; i.e. it is known which particular thing is related to the subject.
[Tim Lethbridge, PhD Thesis, 1994nov]

cfr'Programing-language

name::
* McsEngl.cfr'Programing-language@cptIt,

Smalltalk

TECHNOLOGY:
* Smalltalk-80

cfr'resourceInfHmn#cptResource843#

name::
* McsEngl.cfr'resourceInfHmn@cptIt,

Tim Lethbridge's PhD Thesis. 1994nov.

cfr'User-interface

name::
* McsEngl.cfr'User-interface@cptIt,

cfr'BROWSER

name::
* McsEngl.cfr'BROWSER@cptIt,

In order to display knowledge a user must choose both a knowledge map and a browser type. Three basic browser types are described in this section: Outline browsers, graphical browsers and matrix browsers. Commands that operate on these browsers (especially the first two) are very similar.
[Skuce, Lethbridge. CODE4. IJHCS 42. 1995]

cfr'CONTROL'PANEL'WINDOW

name::
* McsEngl.cfr'CONTROL'PANEL'WINDOW@cptIt,

This is the master or `top level' window of the user interface. It is used to initiate all loading and browsing of knowledge bases and to set detailed parameters that control how CODE4's various features will work.
[Tim Lethbridge, PhD Thesis, 1994nov]

cfr'DOCUMENT'PROCESSOR

name::
* McsEngl.cfr'DOCUMENT'PROCESSOR@cptIt,

In many of our applications knowledge bases have been, or could be, built up from information available in documents. CODE4 has a facility to assist with this, shown on the right side in Figure 11. The document appears sentence by sentence in the upper part of the Processor, and the user selects one sentence at a time for processing. Any words not in CODE's dictionary (the list of terms associated with a kb) or the common external dictionary bring up a dialog in which the user defines the part of speech. Compound phrases, which are very common in technical documents, may also be identified. Next, simple rules break the sentence up into useful fragments: every noun and every verb is listed in the middle column, along with the pre and post modifying phrases to the left and right, somewhat like in concordance tools. From this, the user may easily construct a statement to be added to a kb by a series of mouse actions, editing expressions if necessary. We have found that the processor speeds up knowledge capture from documents several times.
The main functions this facility serves are: 1) to discipline the user's thinking so that each noun and verb is given attention (the system keeps track of which have been used, so one can review a document for knowledge not added to the kb); 2) to permit verifying the kb (the system inserts pointers from statements in the kb to the sentences from which they were derived); 3) to eliminate the need to retype many phrases. The user can see the kb additions happening in the browser, open at left in Figure 11 (the screen snap was taken just after adding the statement `car manufacturers manufacture cars'). At any time, the kb can be browsed to assist in understanding or deciding what to do next.
[Skuce, Lethbridge. CODE4. IJHCS 42. 1995]

cfr'FEEDBACK'PANEL

name::
* McsEngl.cfr'FEEDBACK'PANEL@cptIt,

The feedback panel tells the user about the result of each command. This is of most use when he or she has done something that CODE4 does not like.
[Skuce, Lethbridge. CODE4. IJHCS 42. 1995]

cfr'KNOWLEDGE'MAP

name::
* McsEngl.cfr'KNOWLEDGE'MAP@cptIt,

_DEFINITION:
A knowledge map is a software abstraction that allows for the manipulation of a network of related concepts. The knowledge map defines this network in terms of:
a) One or more starting concepts.
b) One or more relations that recursively relate the starting concepts to other concepts. These are discussed in more detail in section 4.1.1.
c) A limit on the traversal depth.
[Tim Lethbridge, PhD Thesis, 1994nov]

FIGURE:


#img.it2-1-code4'knwoledge-map.bmp#

cfr'MASK

name::
* McsEngl.cfr'MASK@cptIt,

A mask is a logical expression evaluated for each concept in a knowledge map as the concept is being prepared for display. It is composed of a set of conditions (or criteria) related by logical operators, and is either `true' or `false' for each concept.
[Tim Lethbridge, PhD Thesis, 1994nov]

cfr'PROPERTY'MANAGER

name::
* McsEngl.cfr'PROPERTY'MANAGER@cptIt,

In summary, the property manager is intended to assist the user by:
· Reporting properties that have the same, synonymous, or closely related names.
· Reporting properties that have the same value at their origin (the concept where they are introduced).
· Reporting properties that are hierarchically related, but have the same value.
· Making it easier to see the problem and decide which solution is best.
[Skuce, Lethbridge. CODE4. IJHCS 42. 1995]

pgmKnl.individual.Dockman

name::
* McsEngl.pgmKnl.individual.Dockman@cptIt,
* McsEngl.conceptIt2031,
* McsEngl.dockman@cptIt,
* McsEngl.dockman-2031@cptIt,
* McsEngl.document-based-knowledge-management@cptIt,

_DESCRIPTION:
We are currently developing a successor to IKARUS called DocKMan (Document-based Knowledge Management). Its key features are:
- It merges information retrieval, document processing, database, and knowledge base functionality
- It is written in Java and is accessible for collaborative work
- It stores every sentence or knowledge base fact as a record in a dbms
- Each sentence or fact is structured and indexed in various ways (e.g. by subject, verb, source, author)
- There is a comprehensive lexicon: all nouns and verbs belong to an ontology, and senses can be distinguished
The knowledge is organized in various kinds of hierarchical concept or topic structures. Material such manuals, textbooks, or documents on the Internet would be typical sources. One can almost automatically create a knowledge base from a collection of documents on a particular topic (we focus on Java as a topic). For example, one would be able to ask questions such as "what is Java?", "how do I create a postscript file in Unix?", or "when did Roosevelt die?" or "show me everything about vehicles moving in mountaneous terrain". One can search both large document collections or formal knowledge bases for answers, and find individual sentences in documents or facts in a kb.
The system will use machine learning techniques such as neural networks to learn relationships between concepts and words or word-word relatioships (e.g. subject-verb, or synonyms). Such knowledge bases should make it easy to organize and use large amounts of knowledge based on textual sources. They will be easy to navigate, accessible globally via the World Wide Web, and linguistically sophisticated, that is, they will contain much knowledge about how words behave.
[http://www.csi.uottawa.ca/~doug/ Doug Skuce] 1997oct18]

resourceInfHmn#cptResource843#

* http://dkm.site.uottawa.ca//

pgmKnl.individual.GALEN

name::
* McsEngl.pgmKnl.individual.GALEN@cptIt,
* McsEngl.conceptIt2032,
* McsEngl.pgmKnl.GALEN@cptIt,
* McsEngl.galen@cptIt2032,
* McsEngl.Generalised-Architecture-for-Languages@cptIt,
* McsEngl.Encyclopaedias-and-Nomenclatures-in-medicine@cptIt,

_DESCRIPTION:
** ορίζει ΑΝΤΙΚΕΙΜΕΝΑ (τα ονομάζει έννοιες) και ΣΧΕΣΕΙΣ. GRAIL allows the system to use the concepts and relationships to:
-determine whether or not a particular composition is sensible;
- generate all possible concepts based on that knowledge;
-automatically derives other relationships, such as classification hierarchies, based on the composition (definitions) of concepts.
** GALEN separates the model of the concepts (ideas) from the natural language phrases used to refer to them (terms). The CORE model is intended to be language independent and hence information entered in one language can be displayed in another

CollectionKnowledge#cptIt500#

The CORE (COncept REference) Model is the model of medical concepts being built in GRAIL. This model forms the underlying structural foundation for the services provided by the GALEN terminology servers.
...
Hence the GALEN slogan "managing diversity, without imposing uniformity".
[galen faq 1994] {1998-04-14}

DomainIn

Medical Knowledge.

Evoluting#cptCore546.171#

1992-1995:
The first three year phase of GALEN, during the span of Framework 3, ended in December 1994, but work continued for a further 9 months under a follow-on project, ACTION. The work is now being continued through the GALEN-IN-USE project, which is developing a European Common Reference Model for Medical Procedures.

Goal#cptIt215#

GALEN's goal is to develop a language-independent system of medical concepts.
[galen overview 1994] {1998-04-14}

MethodKnowledge#cptIt501#

GRAIL - the GALEN Representation And Integration Language Kernel - is the concept modelling language (or 'formalism')that is being developed in GALEN, and is being used to build the CORE Model of medical knowledge.
GRAIL is a formal system, which we aim to use to represent all and only sensible medical concepts in a form suitable for effective computer-based use.
GRAIL is a compositional and generative semantic network knowledge representation language, which has many similarities - and many unique distinguishing features - to other such languages which have developed out of the Artificial Intelligence community. GRAIL and its predecessors were developed specifically to support the problems that were encountered in trying to build effective clinical systems - systems that would be able to represent and manipulate detailed clinical information about patients
...
GRAIL is a knowledge representation (KR) language; as described earlier, it has lots of features similar to KR languages(sometimes also known as 'description logics') such as KL-ONE, CLASSIC and BACK. However, it has been developed specifically to support the requirements of medical terminology, and has specific features to support that; for example, its handling of partonomies and the integration of multiple classifications for different purposes is unique, as far as we have been able to determine.
GRAIL may be useful as a general purpose KR language, and separately funded work is taking place to examine its use in other environments outside of medicine. However, within GALEN we are interested in it to support our high-level requirements for building effective clinical information systems. All we can say now is that it is proving its use in medicine.
[galen faq 1994] {1998-04-14}

We introduce GRAIL - the concept modelling formalism we are building,
[galen overview 1994] {1998-04-14}

TECHNOLOGY:
At the heart of GALEN is a semantically valid model of clinical terminology, represented in a formal language, and associated with sophisticated support for different natural languages and conversion between different coding schemes.

OrgProducer

ORGANIZATION:
Growing out of earlier work in PEN&PAD undertaken at the University of Manchester, the research and development project which is GALEN has been funded by the European Commission as part of its Framework programmes.

Programming-language#cptIt430#

Most of the GALEN software is implemented in Smalltalk - almost the original object oriented language.
[galen faq 1994] {1998-04-14}

resourceInfHmn#cptResource843#

SOURCE:
http://www.cs.man.ac.uk/mig/galen/

pgmKnl.individual.ConceptNet {2002}

_CREATED: {2007-06-17}

NAME

name::
* McsEngl.pgmKnl.individual.ConceptNet {2002}@cptIt,
* McsEngl.conceptItsoft1091,
* McsEngl.pgmKnl.ConceptNet@cptIt,
* McsEngl.ConceptNet@cptItsoft1091,

DEFINITION

GENERIC

_GENERIC:
* worldview-management-system#cptCore402#
* KNOWLEDGE MANAGEMENT SYSTEM#cptItsoft497#

ADVANTAGE

ConceptNet, in contrast, excels at contextual commonsense reasoning over real-world texts.

EVOLUTION#cptCore546.171#

First built in 2002, it has since undergone several generations of revision motivated by feedback from early adopters of the system. The present ConceptNet version 2.0 consists of both a semantic network, and an integrated natural-language-processing toolkit (MontyLingua).

KNOWLEDGE'BASE#cptIt500#

name::
* McsEngl.KNOWLEDGE'BASE@cptIt,

Structure of the ConceptNet Knowledgebase
The ConceptNet knowledgebase is formed by the linking together of 1.6 million assertions (1.25 million of which are k-lines) into a semantic network of over 300,000 nodes.

The ConceptNet knowledgebase is built by an automated three-stage process:
1) regular expressions and syntactic-semantic constraints extract binary-relation assertions from OMCS sentences;
2) assertions are normalized; and
3) heuristic “relaxation” over the assertion-base produces additional “intermediate” knowledge such as semantic and lexical generalizations, which helps to bridge other knowledge and to improve the connectivity of the knowledgebase.

Of the 1.6 million facts interrelating the concepts in the ConceptNet semantic network, approximately 1.25 million are dedicated to making rather generic connections between concepts. This type of knowledge is best described as k-lines, which Minsky (1987) implicates as a primary mechanism for context and memory.

KNOWLEDGE'REPRESENTATION'LANGUAGE#cptIt501#

name::
* McsEngl.KNOWLEDGE'REPRESENTATION'LANGUAGE@cptIt,

Second, we extend WordNet’s repertoire of semantic relations from the triplet of synonym, is-a, and part-of, to a present repertoire of twenty semantic relations including, for example, EffectOf (causality), SubeventOf (event hierarchy), CapableOf (agent’s ability), PropertyOf, LocationOf, and MotivationOf (affect).
[ConceptNet: A Practical Commonsense Reasoning Toolkit
Hugo Liu and Push Singh
Media Laboratory
Massachusetts Institute of Technology
{hugo, push}@media.mit.edu]

ConceptNet’s natural-language knowledge-representation
= uses natural-language for knowledge-representation.

ConceptNet’s nodes as semi-structured English phrases.

A criticism that is often levied against natural language knowledge representations is that there are many ambiguous and redundant ways to specify the same idea.

NATURAL-LANGUAGE PROCESSING ENGINE

An Integrated Natural-Language-Processing Engine
ConceptNet version 2.0’s integrated natural-language-processing engine is an adapted version of the MontyLingua natural-language-understander (Liu, 2003b). MontyLingua is written in cross-platform Python, but is also available as a Java library, or the whole ConceptNet package can be run as an XML-RPC server (included with the distribution) and accessed via sockets.

pgmKnl.individual.IBM-WATSON

_CREATED: {2015-10-27}

name::
* McsEngl.pgmKnl.individual.IBM-WATSON@cptIt,
* McsEngl.conceptIt497.20,
* McsEngl.IBM-Watson@cptIt,
* McsEngl.IBMWatson@cptIt,
* McsEngl.pgmKnl.IBM-Watson@cptIt,

* McsEngl.piw@cptIt,
* McsEngl.pgmIwn@cptIt,

_DESCRIPTION:
Cognitive computing is a new type of software that combines machine learning and natural language processing techniques in order to solve complex problems.
IBM Watson is a revolutionary system implementing the cognitive computing paradigm.
[http://technobium.com/getting-started-with-ibm-watson//]

piw'bluemix

name::
* McsEngl.piw'bluemix@cptIt,

_DESCRIPTION:
IBM Bluemix is an open-standards, cloud platform for building, running, and managing applications. With Bluemix, developers can focus on building excellent user experiences with flexible compute options, choice of DevOps tooling, and a powerful set of IBM and third-party APIs and services.
[https://www.ng.bluemix.net/docs/?cm_mc_uid=12684000266714459540089&cm_mc_sid_50200000=1445956902]

piw'developer-cloud

name::
* McsEngl.piw'developer-cloud@cptIt,

_DESCRIPTION:
The Watson Developer Cloud is a library of Watson APIs and SDKs that you can use to create Powered by Watson apps.
[http://www.ibm.com/smarterplanet/us/en/ibmwatson/watson-cloud.html]

piw'doing

name::
* McsEngl.piw'doing@cptIt,

Table of Contents for Services Documentation


Getting Started
Getting Started with Watson Services and Bluemix

REST APIs
API Reference Documentation

AlchemyData News
Query the world's news like a database

AlchemyLanguage
AlchemyLanguage is a collection of 12 APIs that enable text analysis through natural language processing.

AlchemyVision
AlchemyVision employs deep learning innovations to understand a picture’s content and context.

Concept Expansion
Discovers euphemisms and colloquial terms from unstructured text.

Concept Insights
Rather than limiting findings to traditional text matching, Concept Insights explores information based on the concepts behind your input.

Dialog
Create conversations any way you like to answer questions, walk through processes, or just to chat!

Document Conversion
Transforms HTML, PDF, and Microsoft Word documents into normalized HTML, plain text, or sets of Answer units that can be used with other Watson services.

Language Translation
Identify the language text is written in. Translate text from one language to another for specific domains.

Message Resonance
Communicate with people with the style and words that suit them

Natural Language Classifier
Interpret natural language and classify it with confidence

Personality Insights
Enables deeper understanding of people's personality characteristics, needs, and values to help engage users on their own terms

Question and Answer
Direct responses to user inquiries fueled by primary document sources

Relationship Extraction
Intelligently finds relationships between sentence components (nouns, verbs, subjects, objects, etc.)

Retrieve and Rank
Enhance information retrieval with machine learning

Speech to Text
Low-latency, streaming transcription

Text to Speech
Synthesizes natural-sounding speech from text

Tone Analyzer
Helps users understand the attitudes that are implied in text

Tradeoff Analytics
Helps users make better choices to best meet multiple conflicting goals, combining smart visualization and recommendations for tradeoff exploration

Visual Insights
Derive insights from the visual analysis of an image collection by looking at the distribution of automatically recognized semantics

Visual Recognition
Analyzes the visual content of images and video frames to understand visual content without the need for a textual description
[http://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/doc/]

Here are a few examples:
Concept Expansion service – analyses text and interprets its meaning based on usage in other similar contexts. For example, it could interpret “The Big Apple” as meaning “New York City”. It can be used to create a dictionary of related words and concepts so that euphemisms, colloquialisms, or otherwise unclear phrases can be better understood and analyzed. Live demo
Language Identification service – detects the language in which text is written. This helps inform next steps such as translation, voice to text, or direct analysis. The service can be used in tandem with the Machine Translation service. Today, the service can identify 25 languages – Arabic; Chinese (Simplified); Chinese (Traditional); Cyrillic; Danish; Dutch; English; Farsi; Finnish; French; German; Greek; Hebrew; Hindi; Icelandic; Italian; Japanese; Korean; Norwegian (Bokmal); Norwegian (Nynorsk); Portuguese; Spanish; Swedish; Turkish; Urdu. Live demo
Machine Translation service – converts text input in one language into a destination language for the end user. Translation is available among English, Brazilian Portuguese, Spanish, French, and Arabic. Live demo
Message Resonance service – analyzes draft content and scores how well it is likely to be received by a specific target audience. This analysis is based on content that’s been written by the target audience itself such as fans of a specific sports team or new parents. Today, analysis can be done against people active in cloud computing or discussions but future versions will let users provide their own community data. Live demo
Relationship Extraction service – parses sentences into their various components and detects relationships between the components. It can process new terms (like people’s names in a news feed) it has never analyzed before through contextual analysis. Sentence components include parts of speech (noun, verb, adjective, conjunction, etc.) and functions (subjects, objects, predicates, etc.). The service maps the relationships between the components so that users or analytics engines can more easily understand the meaning of individual sentences and documents. Live demo
User Modeling service – uses linguistic analytics to extract a set of personality and social traits from the way a person communicates. The service can analyze any communication the user makes available such as their text messages, tweets, posts, email, and more. Users of the service can understand, connect, and communicate with people on a more personally tailored level by analyzing personality and social traits. Live demo
Question and Answer service – interprets and answers user questions directly based on primary data sources (brochures, web pages, manuals, records, etc.) that have been selected and gathered into a body of data or ‘corpus’. The service returns candidate responses with associated confidence levels and links to supporting evidence. The current data corpora on IBM Bluemix focuses on the Travel and Healthcare industries.
[http://technobium.com/getting-started-with-ibm-watson/]

piw.EVOLUTING

name::
* McsEngl.piw.EVOLUTING@cptIt,

{time.2011}:
You may already know that in 2011 IBM Watson competed on Jeopardy! against two former winners and won the first place. This was a great achievement in the field of artificial intelligence and a validation that cognitive computing is ready to be used in real life applications. Since then the system evolved continually and is now available also for developers to integrate it in third party Apps.
[http://technobium.com/getting-started-with-ibm-watson/]

pgmKnl.individual.IKARUS

name::
* McsEngl.pgmKnl.individual.IKARUS@cptIt,
* McsEngl.pgmKnl.ikarus@cptIt,
* McsEngl.ikarus@cptIt,
* McsEngl.ikarus-2025@cptIt,
* McsEngl.Intelligent-knowledge-acquisition-and--retrieval-universal-system@cptIt,

_DESCRIPTION:
IKARUS is a Web-based knowledge management system that incorporates the following basic principles and functionality:
The system is designed to facilitate cooperative knowledge acquisition, sharing and retrieval using the Web: any user, anywhere in the world, can access knowledge accumulated by others and possibly add to it.

The system is designed to integrate as seamlessly as possible three normally distinct kinds of knowledge: lexical (word meanings), frame-structured (as in many AI systems) and conventional text and Web documents.

The system is based on a simple inference engine somewhat like in our earlier knowledge management system, CODE (frame-like property inheritance). This engine is deliberately kept simple in its behaviour so that users who are not AI experts can understand how to work with it. Keeping the right balance between being too simple or too complex is a difficult design objective which we believe we have met.

The system will offer assistance in various knowledge acquisition tasks, primarily the construction of hierarchies, since a us  er may want to use a number of hierarchies to organize knowledge. A second form of assistance is to provide various templates a user can follow or modify to add structure to knowledge.

The system uses existing software as much as possible. The interface uses Netscape2.0 (using Java and Javascript) and the local indexing engine is Glimpse, a powerful full-text retrieval system. The cgi programming is done in Perl.

The system is designed to make it easy to find detailed information - documents, paragraphs, sentences or structured statements. The documents can be anywhere on the internet, preferably accessible to exisiting Web search engines which can act as front ends, i.e. IKARUS permits downloading selected documents so the local copies can be indexed and rapidly searched using Glimpse.

The system will incorporate knowledge (in kbs) that can assist in finding new knowledge, including both lexical (word) knowledge and "world" knowledge. It can acquire this knowledge incrementally, both automatically and manually, every time someone uses the system. Lexical knowledge will come mainly from dictionaries such as Wordnet or LDOCE. Examples of lexical knowledge include definitions, hypernyms (more general words), synonyms, and collocations. World knowledge will be built up incrementally by users finding and storing facts of interest to them.

The main retrieval function will be to answer questions. Queries (to find some kind of knowledge) will be classified and stored in kbs. (Today's faq lists are an embryonic form of such a resource.) Thus one could begin a query by first looking for a similar existing one (the system will help you with this). Using kb linking, queries from any kb would be accessible, somewhat like faqs on the Web today can point to each other. Machine learning (ML) will assist in classifying and adapting existing queries. Queries will not be just sets of terms but will have a simple structure such as: topic=programming languages, subject=Perl, attribute=cost, queryType=what_is. (After some amount of use, the system will have learned facts such as that Perl is a programming language, so the topic can be inferred automatically.) Initially, queries will not be actual English, but mapping of real English queries into query structures is a longer term goal.

OrgProducer

ORGANIZATION:
University of Ottawa

resourceInfHmn#cptResource843#

http://www.csi.uottawa.ca/~kavanagh/Ikarus/IkarusInfo.html

pgmKnl.individual.ConceptBase

_CREATED: {1998-08-04}

name::
* McsEngl.pgmKnl.individual.ConceptBase@cptIt,
* McsEngl.conceptIt2037,
* McsEngl.ConceptBase@cptIt,
* McsEngl.conceptbase@cptIt2037,

_DESCRIPTION:
ConceptBase is an experimental deductive object base management system specifically intended for meta data management and the coordination of design environments. It integrates techniques from deductive, object-oriented, and temporal databases in the logical framework of the data model Telos. The usage environment offers an extensible palette of graphical, tabular, and textual windows conforming to the X11 standard. The communication between the windows and the object base is organized in a client-server architecture using TCP/IP.
[ConceptBase V4.1, released 15-Aug-1996 ]

Evolution#cptCore546.171#

Historical remarks
We started development of ConceptBase in 1987 at the University of Passau. Version 1.0 was available in early 1988. Thus, ConceptBase was one of the first deductive object managers. Version 2.0 appeared in November 1989 and added deductive integrity checking plus the client server architecture. A few months later an interval-based time calculus was included. Version 3.0 was released in 1991 to provide query classes for information retrieval and a X11-based user interface. In 1992 the development team moved to the RWTH Technical University of Aachen. The current version is 4.1 and it represents a major step forward in terms of handling large object bases und expressiveness.

MethodKnowledge#cptIt501#

One may also associate ConceptBase with so-called concept languages (KL-One-like languages). There are strong similarities but they are certainly not the same. Concept languages are mainly for reasoning on all possible models of a logical theory. ConceptBase only reasons on its current database (i.e., the currently stored objects).

OrgProducer

Aachen University of Technology (RWTH), Germany

resourceInfHmn#cptResource843#

* http://www-i5.informatik.rwth-aachen.de/CBdoc//

pgmKnl.individual.ReVerb

_CREATED: {2014-02-05}

name::
* McsEngl.pgmKnl.individual.ReVerb@cptIt,
* McsEngl.pgmKnl.ReVerb@cptIt,
* McsEngl.ReVerb@cptIt,

_DESCRIPTION:
ReVerb is a program that automatically identifies and extracts binary relationships from English sentences. ReVerb is designed for Web-scale information extraction, where the target relations cannot be specified in advance and speed is important.

ReVerb takes raw text as input, and outputs (argument1, relation phrase, argument2) triples. For example, given the sentence "Bananas are an excellent source of potassium," ReVerb will extract the triple (bananas, be source of, potassium).

More information is available at the ReVerb homepage: http://reverb.cs.washington.edu
[https://github.com/knowitall/reverb/]

pgmKnl.individual.ROSS#ql:ross-legal-expert-program#

name::
* McsEngl.pgmKnl.individual.ROSS@cptIt,

pgmKnl.individual.Ontolingua

name::
* McsEngl.pgmKnl.individual.Ontolingua@cptIt,
* McsEngl.conceptIt2033,
* McsEngl.ontolingua@cptIt,
* McsEngl.ontolingua@cptIt2033,

_DESCRIPTION:
Ontolingua is a set of tools, written in Common Lisp, for analyzing and translating ontologies. It uses KIF as the interlingua and is portable over several representation systems. It includes a KIF parser and syntax checker, a cross reference utility, and a set of translators from KIF into implemented representation systems, and a HTML report generator.

ontolingua'Axiom

name::
* McsEngl.ontolingua'Axiom@cptIt,

An axiom is a sentence in first order logic that is assumed to be true without proof.
In practice, we use axioms to refer to the sentences that cannot be represented using only slots and values on a frame.
For example, you would represent the statement:
If any two animals are siblings,
then there exists someone who is the mother of both of them.
with the axiom:
(=> (sibling ?sib1 ?sib2)
(exists (?mom) (and (has-mother ?sib1 ?mom)
(has-mother ?sib2 ?mom)))
[http://www-ksl-svc.stanford.edu:5915/doc/frame-editor/what-is-an-axiom.html]

ontolingua'CollectionKnowledge (ontology)

name::
* McsEngl.ontolingua'CollectionKnowledge (ontology)@cptIt,

To communicate, plan, think we need a conceptualization of the world
- What kinds of things are there?
- What are their properties?
- What are their relationships?
These things define our ontology.
[tutorial, Farquar, 1997]

What is an ontology?
An ontology is an explicit specification of some topic. For our purposes, it is a formal and declarative representation which includes
- the vocabulary (or names) for referring to the terms in that subject area and
- the logical statements that describe what the terms are, how they are related to each other, and how they can or cannot be related to each other.
Ontologies therefore provide a vocabulary for representing and communicating knowledge about some topic and a set of relationships that hold among the terms in that vocabulary.

A conceptualization is an abstract, simplified view of the world that we wish to represent for some purpose. Every knowledge base, knowledge-based system, or knowledge-level agent is committed to some conceptualization, explicitly or implicitly. An ontology is an explicit specification of a conceptualization. The term is borrowed from philosophy, where an Ontology is a systematic account of Existence.
[KSL-93-04 Gruber Ontology Design]

KR - Glossary:
- Frame Any object, including classes, instances, and relations
- Relation A relation over one or more objects
- Class A distinguished set of objects
- Instance A member of a class
- Function A relation where the last argument is uniquely determined by the others
- Slot A binary relation
- Own Slot A slot belonging to a frame
- Template Slot A slot associated with a class, but with values for instances
- Facet A ternary relation on a frame, slot, value
- Constraint Any assertion that constrains the possible interpretation of frames
- Axiom Any statement taken to be true without proof
[Tutorial, Farquhar, 1997]

_USAGE:
Explicit specifications of domain conceptualizations, called ontologies, are essential for
- the development and use of intelligent systems as well as for
- the interoperation of heterogeneous systems.
[KSL-95-63 Collaborative Ontology Construction]

ontolingua'ONTOLOGY'SUBJECT'AREA

name::
* McsEngl.ontolingua'ONTOLOGY'SUBJECT'AREA@cptIt,
* McsEngl.subject-domain@cptIt,
* McsEngl.topic@cptIt,

ontolingua'ONTOLOGY.FRAME

name::
* McsEngl.ontolingua'ONTOLOGY.FRAME@cptIt,

ACCESS:
http://www-ksl-svc.stanford.edu:5915/frame-editor/
&sid=ANONYMOUS
&user-id=ALIEN
&command=EDIT-ONTOLOGY
&ontology=Frame-Ontology

ontolingua'Editor

name::
* McsEngl.ontolingua'Editor@cptIt,

FUNCTION:
the Ontolingua Ontology Editor provided by the Stanford KSL Network Services for creating and modifying ontologies.

ontolingua'Evolution#cptCore546.171#

name::
* McsEngl.ontolingua'Evolution@cptIt,

1995 feb:
Public anouncment of the ONTOLOGY-SERVER.

ontolingua'Facet

name::
* McsEngl.ontolingua'Facet@cptIt,

A facet says something about a slot on a class. Facets can the meaning of a slot.
Common facets
» The value- type of age on people is non- negative
» The reverse of son- of for animals is parent- of
» The cardinality of biological parents for mammals is 2
[Tutorial, Farquhar, 1997]

ontolingua'Frame

name::
* McsEngl.ontolingua'Frame@cptIt,

A frame is a named data structure (or object) which is used torepresent some concept in a domain. A frame can be a class, instance, slot, facet, function, relation, or axiom. A frame allows one to group some related statements about that concept. Associated with each frame is a group of slots, facets, and values on the slots or facets.

ontolingua'MethodKnowledge#cptIt501#

name::
* McsEngl.ontolingua'MethodKnowledge@cptIt,

KIF#cptIt2027: attPar#

ontolingua'OrgProducer

name::
* McsEngl.ontolingua'OrgProducer@cptIt,

Thomas R. Gruber
Stanford Knowledge Systems Laboratory

ontolingua'Programming-language#cptIt430#

name::
* McsEngl.ontolingua'Programming-language@cptIt,

Common Lisp

ontolingua'Relation

name::
* McsEngl.ontolingua'Relation@cptIt,

The arity of a relation is the number of arguments it takes
l A class is a unary relation!» Person( alan)
l A slot is a binary relation » son- of( alan, bob), age- of( alan, 25)
l A facet is a ternary relation » slot- value- type( person, age- of, number)
l A function is just a relation whose last argument is uniquely determined by the others (a. k. a. single valued slot)
[Tutorial, Farquhar, 1997]

ontolingua'resourceInfHmn#cptResource843#

name::
* McsEngl.ontolingua'resourceInfHmn@cptIt,

_ADDRESS.WPG:
* http://www.ksl.stanford.edu/software/ontolingua//

Tutorial, Farquhar, 1997

ontolingua'Slot

name::
* McsEngl.ontolingua'Slot@cptIt,

A slot is a relation between two things
[Tutorial, Farquhar, 1997]

TAMPLATE SLOT:
Some slots apply to every instance of a class. We call these template slots . They are also known as instance slots, or attributes
» Age- of is a template slot of Physical- Thing
» Son- of is a template slot of Animal
» Cardinality- of is a template slot of Set

Template slots summarize information about every instance

Attributes in programming languages are a kind of template slots
[Tutorial, Farquhar, 1997]

ontolingua'Term

name::
* McsEngl.ontolingua'Term@cptIt,

A term is any object that has a definition (e.g., slots, classes, instances, relations, functions). An axiom is not considered a term.

pgmKnl.individual.PowerLoom

_CREATED: {1998-03-30}

name::
* McsEngl.pgmKnl.individual.PowerLoom@cptIt,
* McsEngl.conceptIt2035,
* McsEngl.powerloom@cptIt,
* McsEngl.powerloom@cptIt2035,

_DESCRIPTION:
PowerLoom provides a language and environment for constructing intelligent applications. It is the successor to the Loom knowledge representation system.

MethodKnowledge#cptIt501#

PowerLoom uses a fully expressive, logic-based representation language (a variant of KIF). It uses a Prolog-technology backward chainer as its deductive component. The backward chainer is (not yet) a complete theorem prover, but it can handle Horn rules, negation, and simple equality reasoning. Contrary to Prolog, it also handles recursive rules without the risk of infinite recursion. Once the classifier is completed, it will be able to classify descriptions expressed in full first order predicate calculus [See paper]. PowerLoom uses modules as a structuring device for knowledge bases, and ultra-lightweight worlds to support hypothetical reasoning.

OrgProducer

PowerLoom is being developed by the Intellligent Systems Division, the artificial intelligence research group at University of Southern California's off campus Information Sciences Institute (ISI).

Programing-languge#cptIt430#

To implement PowerLoom we developed a new programming language called STELLA, which is a Strongly Typed, Lisp-like LAnguage that can be translated into Lisp and C++. STELLA tries to preserve those features of Lisp that facilitate symbolic programming and rapid prototyping, while still allowing translation into readable as well as efficient C++ code. By writing PowerLoom in STELLA, we are able to deliver it in Common-Lisp as well as in C++. Once the STELLA-to-Java translator has been completed, PowerLoom will also become available in Java.

STELLA - Painless Symbolic Processing in C++
Common Lisp provides a very supportive environment for the development of symbolic processing applications (e.g., ``intelligent'' applications). However, Common Lisp has several drawbacks: Its performance is slow (as compared to a C++ program); it does not interface well to tools and applications in commercial environments (e.g., to C++ and CORBA); and it fails to incorporate recent object system trends (e.g., collections, iterators, and parameterized types). As a result, customer demand and vendor support for Lisp is declining, creating yet another reason to abandon Lisp. Developers of intelligent applications face a problem, since none of the currently ``healthy'' languages (such as C++) provide adequate environments for the construction of symbolic processing programs. Our response has been to invent a new programming language, called STELLA, that incorporates aspects of Common Lisp that we deemed essential into a language that can be translated into efficient, readable C++ code. STELLA resembles a simplified version of Lisp, extended to include strong typing and a modern object system. Our translators can compile a STELLA program into either C++ or Common Lisp code. We benchmarked our translators on the STELLA system itself - results show that the C++ version of STELLA compiled with g++ executes about 10 times faster than the equivalent Common Lisp (CLOS) version compiled with Allegro CL 4.2. This provides a contrast to systems like Kyoto Common Lisp or Chestnut, whose C-based outputs usually execute slower than native Common Lisps. The C-based Lisps are handicapped (from a performance standpoint) because they use C as an intermediate language to implement the full functionality of Common Lisp.
To date, we have programmed approximately 28,000 lines of STELLA code - 22,000 lines (890K) of STELLA kernel code, plus 6,000 lines (255K) of PowerLoom (knowledge representation system) code. Our subjective experience has been that it is only slightly more difficult to write and debug a STELLA program than a Lisp program (we use the Common Lisp-based version of STELLA for prototyping). Thus, we appear to have achieved our goal of combining the rapid-prototyping capabilities of Lisp with the efficiency of C++.
A set of STELLA slides gives a brief overview of the various features of the language, and describes some of the reasons that motivated the development of STELLA.
Last modified: September 18, 1996

resourceInfHmn#cptResource843#

http://www.isi.edu/

pgmKnl.individual.START

_CREATED: {2012-11-24} {1998-08-13}

name::
* McsEngl.pgmKnl.individual.START@cptIt,
* McsEngl.conceptIt521,
* McsEngl.start@cptIt521,
* McsEngl.SynTactic-Analysis-using-Reversible-Transformations@cptIt,

_DESCRIPTION:
This chapter describes a NATURAL LANGUAGE SYSTEM START (SynTactic Analysis using Reversible Transformations).
The system analyzes English text and automatically transforms it into an apropriate representation the 'knowledge base', which incorporates the information found in the text.
The user gains access to information stored in the knowledge base by quering it in English. The system analyzes the query and decides through a matching process what information in the knowledge base is relevant to the question. Then it retrieves this information and formulates its response also in English.
[Boris Katz, "Using English for Indexing and Retrieving" in AI in MIT, 1990, 135]

pgmKnl.individual.ThougthTreasure

name::
* McsEngl.pgmKnl.individual.ThougthTreasure@cptIt,
* McsEngl.ThougthTreasure@cptIt,
* McsEngl.ThougthTreasure-2024@cptIt,

_DESCRIPTION:
Functionality
• comprehensive natural language processing/AI platform
• classified ad parsing
• simple story understanding
• question answering
• English to French and French to English translation
• simulation of a 2-dimensional virtual world
• identification of entities in text
• data extraction from ASCII tables
• chatterbot
• concordance generation
• shell (command interpreter)
[Signiform http://www.signiform.com ]

Execution#cptIt56#

To have a conversation with ThoughtTreasure, type chateng at the asterisk ("*") prompt. You may then ask it questions such as How are you?, What time is it?, What color is the sky?, and What is a cat?

Operating-system#cptIt434#

Compatibility
• operating systems: Microsoft Windows 95, Sun Solaris 2.4 or higher

Price#cptEconomy541.44#

free download from Signiform's web site www.signiform.com

Programming-language#cptIt430#

Source code
• language: ANSI C
• lines of code including comments: 65,000
• compilers: GNU gcc, Sun Solaris cc

Storage#cptIt14#

I've downloaded the program and I have it on \SCS RELATED\PROJECTS

SystemHardware#cptIt456#

Windows 95
486 processor or higher
16 MB RAM minimum,
32 MB or more recommended 40 MB available disk space or more recommended (8 MB for the distribution and working space + 32 MB for swapping) The Windows 95 version of ThoughtTreasure comes with an executable, but if you wish to modify and recompile it, you will also need to download a copy of DJGPP version 2.01 or higher.

Usage

Application areas
• natural language agents
• agent communication language
• content representation
• interactive fiction
• linguistic research

pgmKnl.individual.Troeps

name::
* McsEngl.pgmKnl.individual.Troeps@cptIt,
* McsEngl.troeps-kms@cptIt,
* McsEngl.tropes-kms@cptIt,
* McsEngl.kms.tropes@cptIt2038,

_DESCRIPTION:
An object-based knowledge representation system

OrgProducer

TROPES is a result of the Sherpa (http://www.inrialpes.fr/sherpa) project headed by Francois Rechenmann since 1988. The system stems from the work of the whole Sherpa team and the previous research on SHIRKA and continuous efforts made in order to enhance it. Meanwhile, the overall design of TROPES has been the early initiative of Olga Marino, the development of TROPES has been carried out at various level of involvement by Christophe Alemany, Cecile Capponi, Isabelle Crampe, Pierre Fontanille, Pierre Girard, Jerome Gensel, Florence Lemaire, Olivier Schmeltzer, Loic Tricand De La Goutte, Nina Tayar and Petko Valtchev under the supervision of Jerome Euzenat.

Programming-language#cptIt430#

TROPES has been developed with the standard Unix utility Lex, YACC (now replaced by FLex and Bison) and the Ilog TALK LISP compiler. It is thus made of a set of C programs that should be compilable with any C compiler as far as Ilog TALK libraries are available. The knowledge servers use a small set of Java applet and should be used on any kind of platform on which it is possible to find a HTTP client.

Price#cptEconomy541.44#

TROPES and its documentation are available for public distribution under the term of the COPYRIGHT file provided with the distribution.

resourceInfHmn#cptResource843#

http://hytropes.inrialpes.fr/

REFERENCE MANUAL:
http://hytropes.inrialpes.fr/docs/tropes-manual.html.

pgmKnl.individual.VHG

_CREATED: {1998-02-05}

name::
* McsEngl.pgmKnl.individual.VHG@cptIt,
* McsEngl.conceptIt2029,
* McsEngl.vhg@cptIt,
* McsEngl.vhg@cptIt2029,
* McsEngl.virtual-hyper-glossary@cptIt,

_DESCRIPTION:
The Virtual Hyperglossary is a collaborative virtual project to provide a distributed set of glossaries (terminological databases) on the WWW.
[http://www.venus.co.uk/vhg/intro.html]
===
The Virtual Hyperglossary (VHG) project endeavors to "enable knowledge enhancement through global terminology; the VHG project offers terminological services to people who want to provide them on the web especially learned societies and also to people creating their intranets." Written in XML and based upon ISO standards for terminology (ISO FDIS 12620, MARTIF - MAchine Readable Terminology Interchange Format), the VHG employs "innovative concepts such as clickable concept maps" and uses current technologies such as java."

The developers of VHG, Peter Murray-Rust and Lesley West, have created a "simple but scalable XML DTD for terminology based on ISO 12620 (Data Categories for Terminology). This DTD uses a deliberately small subset of about 12 categories (e.g., <term>, <acronym>, <synonym>, <abbreviation>, <definition>). Others can be added through an attribute-based syntax. Hyperglossary is used in a wide sense to include any semantic resource composed of standardised subcomponents such as data sheets or catalogues. A major design feature for the VHG was that it should be easily accessible to people with little or no terminological experience (i.e., they are only familiar with the commonest terms). Thus a molecular hyperglossary could include chemical structures, measured properties and commercial availability. Because XML is tree-based it supports hierarchical collections (thesauri, catalogs, etc.) in a natural and powerful manner and we have found that most of our current examples fall into it. For non-hierarchical relationships (<see>, <seeAlso>, multiple broaderTerms, etc.) the VHG uses the full power of XLink to add additional structure. Thus terms can be grouped in different classifications by using xml:link="extended" with locator references to the linked terms. Equivalences (e.g., in multilingual glossaries) can be defined through an external link database. This allows different language curators to develop their glossaries in parallel and link the terms through XML IDs." [adapted from the 1998 XML Developers' Conference abstract]

[May 12, 2000] "The VHG has been designed with the knowledge and support of the authors of ISO 12620 ("Data categories for terminology") and can support any of those (ca. 150) data categories, of which several deal with multilinguality. They are deliberately not hardcoded into the VHG DTD because there can be complex relationships in multilinguality. Among the relevant data categories are: (1) equivalence (equivalent or quasi-equivalent or non-equivalent); (2) directionality (bidirectional or monodirectional); (3) false friend; (4) degree of synonymy. It is therefore possible, using 12620+VHG, to manage quite complex multilingual relationships, besides bi-directional equivalence." [Peter Murray-Rust]
[http://xml.coverpages.org/vhg.html]

Evoluting#cptCore546.171#

The VHG was started early in 1995 by students and consultants on the Virtual course on Principles of Protein Structure at Birkbeck College, Crystallography Department. Students and associates of the course set up glossaries in other disciplines.

resourceInfHmn#cptResource843#

* http://www.cryst.bbk.ac.uk/PPS2/press/aslib.htm

http://www.venus.co.uk/vhg/index.html

LOCAL:
\SCS RELATED\PROJECTS - KMS\VHG

pgmKnl.individual.WordNet

name::
* McsEngl.pgmKnl.individual.WordNet@cptIt,

_Created {1998-02-05}

name::
* McsEngl.conceptIt2030,
* McsEngl.wordnet@cptIt2030,

_DESCRIPTION:
WordNet® is an on-line lexical reference system whose design is inspired by current psycholinguistic theories of human lexical memory. English nouns, verbs, adjectives and adverbs are organized into synonym sets, each representing one underlying lexical concept. Different relations link the synonym sets.

The most ambitious feature of WordNet, however, is its attempt to organize lexical information in terms of word meanings, rather than word forms [concept-names].

WordNet has been given detailed information about relations between word forms and synonym sets.

wn'PART

The WordNet system consists of
- lexicographer files,
- code to convert these files into a database, and
- search routines and interfaces that display information from the database.
The lexicographer files organize nouns, verbs, adjectives and adverbs into groups of synonyms, and describe relations between synonym groups. grind(1WN) converts the lexicographer files into a database that encodes the relations between the synonym groups. The different interfaces to the WordNet database utilize a common library of search routines to display these relations. Note that the lexicographer files and grind(1WN) program are not distributed.

The WordNet system falls naturally into four parts:
-the WordNet lexicographers’ source files;
-the software to convert these files into the WordNet lexical database;
-the WordNet lexical database;
-and the suite of software tools used to access the database.

The WordNet system is developed on a network of Sun-4 workstations.

wn'Evolution#cptCore546.171#

name::
* McsEngl.wn'Evolution@cptIt,

1.7.1:
* I downloaded it on 2002-08-10

wn'File

name::
* McsEngl.wn'File@cptIt,

FILES:
noun.idx, noun.dat, verb.idx, verb.dat, adj.idx, adj.dat, adv.idx, adv.dat - WordNet database files (PC)

noun.exc, verb.exc. adj.exc adv.exc - morphology exception lists

cousin.tps, cousin.exc - files used by search code to group similar senses (PC)

sentidx.vrb, sents.vrb - files used by search code to display sentences illustrating the use of some specific verbs

wn'INDEX'FILE (words alphabetically)

name::
* McsEngl.wn'INDEX'FILE (words alphabetically)@cptIt,
* McsEngl.wn'dababase'index'file@cptIt,

_DESCRIPTION:
Each index file is an alphabetized list of all the words found in WordNet in the corresponding part of speech. On each line, following the word, is a list of byte offsets (synset_offset s) in the corresponding data file, one for each synset containing the word. Words in the index file are in lower case only, regardless of how they were entered in the lexicographer files. This folds various orthographic representations of the word into one line enabling database searches to be case insensitive. See wninput(5WN) for a detailed description of the lexicographer files.

NAMES:
index.noun, index.verb, index.adj, index.adv, - WordNet database files (default file names)

noun.idx, verb.idx, adj.idx, adv.idx, - WordNet database files (PC)

_FORMAT:
examples:
absconder n 1 1 @ 1 0 07054038
absolutism n 4 2 @ ~ 4 0 10363554 06243405 04709707 04572869
abyssal_zone n 1 1 @ 1 0 06694017

Index File Format:
Each index file begins with several lines containing a copyright notice, version number and license agreement. These lines all begin with two spaces and the line number so they do not interfere with the binary search algorithm that is used to look up entries in the index files. All other lines are in the following format. In the field descriptions, number always refers to a decimal integer unless otherwise defined.

lemma pos poly_cnt p_cnt [ptr_symbol...] sense_cnt tagsense_cnt synset_offset [synset_offset...]


1) lemma lower case ASCII text of word or collocation. Collocations are formed by joining individual words with an underscore (_ ) character.

2) pos Syntactic category(part of speech): n for noun files, v for verb files, a for adjective files, r for adverb files.
All remaining fields are with respect to senses of lemma in pos .

3) poly_cnt [wn'poly'cnt] Number of different senses (polysemy) lemma has in WordNet. Note that this is the same value as sense_cnt , but is retained for historical reasons.

4) p_cnt Number of different types of pointers lemma has in all synsets containing it.

5) ptr_symbol A space separated list of p_cnt different types of pointers that lemma has in all synsets containing it. See wninput(5WN) for a list of pointer_symbol s. If all senses of lemma have no pointers, this field is omitted and p_cnt is 0 .

6) sense_cnt Number of synsets that lemma is in. This is the number of senses of the word in WordNet. See Sense Numbers below for a discussion of how sense numbers are assigned and the order of synset_offset s in the index files.

7) tagsense_cnt Number of senses of lemma that are ranked according to their frequency of occurrence in semantic concordance texts.

8) synset_offset Byte offset in data.pos file of a synset containing lemma . Each synset_offset in the list corresponds to a different sense of lemma in WordNet. synset_offset is an 8 digit, zero-filled decimal integer that can be used with fseek(3) to read a synset from the data file. When passed to read_synset(3WN) along with the syntactic category, a data structure containing the parsed synset is returned.

wn'DATA'FILE (the synonym-sets by offset)

name::
* McsEngl.wn'DATA'FILE (the synonym-sets by offset)@cptIt,
* McsEngl.wn'database'data'file@cptIt,

_DESCRIPTION:
A data file for a syntactic category contains information corresponding to the synsets that were specified in the lexicographer files, with relational pointers resolved to synset_offset s. Each line corresponds to a synset. Pointers are followed and hierarchies traversed by moving from one synset to another via the synset_offset s.

NAMES:
index.noun, data.noun, index.verb, data.verb, index.adj, data.adj, index.adv, data.adv - WordNet database files (default file names)

noun.idx, noun.dat, verb.idx, verb.dat, adj.idx, adj.dat, adv.idx, adv.dat - WordNet database files (PC)

_FORMAT:
00685030 04 n 01 nursing 1 001 @ 00684853 n 0000 | nourishing at the breast
04493671 09 n 03 concept 0 conception 0 construct 0 017 @ 04492484 n 0000 ! 04529867 n 0201 ~ 04494109 n 0000 ~ 04494358 n 0000 ~ 04496335 n 0000 ~ 04501800 n 0000 ~ 04503850 n 0000 ~ 04506767 n 0000 ~ 04507519 n 0000 ~ 04514703 n 0000 ~ 04516267 n 0000 ~ 04517355 n 0000 ~ 04519159 n 0000 ~ 04526699 n 0000 ~ 04527031 n 0000 ~ 05418414 n 0000 ~ 06848705 n 0000 | an abstract or general idea inferred or derived from specific instances

Each data file begins with several lines containing a copyright notice, version number and license agreement. These lines all begin with two spaces and the line number. All other lines are in the following format. Integer fields are of fixed length, and are zero-filled.

synset_offset
lex_filenum
ss_type
w_cnt
word lex_id
[word lex_id...]
p_cnt
[ptr...]
[frames...] | gloss

synset_offset [wn'synset'offset] Current byte offset in the file represented as an 8 digit decimal integer.

lex_filenum [wn'lex'filenum] Two digit decimal integer corresponding to the lexicographer file name containing the synset. See lexnames(5WN) for the list of filenames and their corresponding numbers.

ss_type [wn'ss'type] One character code indicating the synset type: n NOUN v VERB a ADJECTIVE s ADJECTIVE SATELLITE r ADVERB

w_cnt [wn'w'cnt] Two digit hexadecimal integer indicating the number of words in the synset.

word ASCII form of a word as entered in the synset by the lexicographer, with spaces replaced by underscore characters (_ ). The text of the word is case sensitive, in contrast to its form in the corresponding index. pos file, that contains only lower-case forms. In data.adj , a word is followed by a syntactic marker if one was specified in the lexicographer file. A syntactic marker is appended, in parentheses, onto word without any intervening spaces. See wninput(5WN) for a list of the syntactic markers for adjectives.

lex_id [wn'lex'id] One digit hexadecimal integer that, when appended onto lemma, uniquely identifies a sense within a lexicographer file. lex_id numbers usually start with 0 , and are incremented as additional senses of the word are added to the same file, although there is no requirement that the numbers be consecutive or begin with 0 . Note that a value of 0 is the default, and therefore is not present in lexicographer files.

p_cnt [wn'p'cnt] Three digit decimal integer indicating the number of pointers from this synset to other synsets. If p_cnt is 000 the synset has no pointers.

ptr [wn'ptr] A pointer from this synset to another. ptr is of the form:
pointer_symbol synset_offset pos source/target
where synset_offset is the byte offset of the target synset in the data file corresponding to pos .
The source/target field distinguishes lexical and semantic pointers. It is a four byte hexadecimal field: the first two bytes indicate the word number in the current (source) synset, the last two bytes indicate the word number in the target synset. A value of 0000 means that pointer_symbol represents a semantic relation between the current (source) synset and the target synset indicated by synset_offset .
A lexical relation between two words in different synsets is represented by non-zero values in the source and target word numbers. The first and last two bytes of this field indicate the word numbers in the source and target synsets, respectively, between which the relation holds. Word numbers are assigned to the word fields in a synset, from left to right, beginning with 1 .
See wninput(5WN) for a list of pointer_symbol s, and semantic and lexical pointer classifications.

frames [wn'frames] In data.verb only, a list of numbers corresponding to the generic verb sentence frames for word s in the synset. frames is of the form: f_cnt + f_num w_num [+ f_num w_num...]
where f_cnt a two digit decimal integer indicating the number of generic frames listed, f_num is a two digit decimal integer frame number, and w_num is a two digit hexadecimal number indicating the word in the synset that the frame applies to. As with pointers, if this number is 00 , f_num applies to all word s in the synset. If non-zero, it is applicable only to the word indicated. Word numbers are assigned as described for pointers. Each f_num w_num pair is preceded by a + . See wninput(5WN) for the text of the generic sentence frames.

gloss [wn'gloss] Each synset contains a gloss. A gloss is represented as a vertical bar (| ), followed by a text string that continues until the end of the line. The gloss may contain a definition, one or more example sentences, or both.

wn'LEXICOGRAPHER'FILE (synsets by pos and meaning)

name::
* McsEngl.wn'LEXICOGRAPHER'FILE (synsets by pos and meaning)@cptIt,

During WordNet development synsets are organized into forty-five lexicographer files based on syntactic category and logical groupings. grind(1WN) processes these files and produces a database suitable for use with the WordNet library, interface code, and other applications. The format of the lexicographer files is described in wninput(5WN) .

The names of the lexicographer files and their corresponding file numbers are listed below along with a brief description each file's contents.
Number  Name      Contents
00    adj.all      all adjective clusters
01    adj.pert    relational adjectives (pertainyms)

02    adv.all      all adverbs

03    noun.Tops    unique beginners for nouns
04    noun.act    nouns denoting acts or actions
05    noun.animal    nouns denoting animals
06    noun.artifact    nouns denoting man-made objects
07    noun.attribute    nouns denoting attributes of people and objects
08    noun.body    nouns denoting body parts
09    noun.cognition    nouns denoting cognitive processes and contents
10    noun.communication  nouns denoting communicative processes and contents
11    noun.event    nouns denoting natural events
12    noun.feeling    nouns denoting feelings and emotions
13    noun.food    nouns denoting foods and drinks
14    noun.group    nouns denoting groupings of people or objects
15    noun.location    nouns denoting spatial position
16    noun.motive    nouns denoting goals
17    noun.object    nouns denoting natural objects (not man-made)
18    noun.person    nouns denoting people
19    noun.phenomenon  nouns denoting natural phenomena
20    noun.plant    nouns denoting plants
21    noun.possession  nouns denoting possession and transfer of possession
22    noun.process    nouns denoting natural processes
23    noun.quantity    nouns denoting quantities and units of measure
24    noun.relation    nouns denoting relations between people or things or ideas
25    noun.shape    nouns denoting two and three dimensional shapes
26    noun.state    nouns denoting stable states of affairs
27    noun.substance  nouns denoting substances
28    noun.time    nouns denoting time and temporal relations

29    verb.body    verbs of grooming, dressing and bodily care
30    verb.change    verbs of size, temperature change, intensifying, etc.
31    verb.cognition    verbs of thinking, judging, analyzing, doubting
32    verb.communication  verbs of telling, asking, ordering, singing
33    verb.competition  verbs of fighting, athletic activities
34    verb.consumption  verbs of eating and drinking
35    verb.contact    verbs of touching, hitting, tying, digging
36    verb.creation    verbs of sewing, baking, painting, performing
37    verb.emotion    verbs of feeling
38    verb.motion    verbs of walking, flying, swimming
39    verb.perception  verbs of seeing, hearing, feeling
40    verb.possession  verbs of buying, selling, owning
41    verb.social    verbs of political and social activities and events
42    verb.stative    verbs of being, having, spatial relations
43    verb.weather    verbs of raining, snowing, thawing, thundering

44    adj.ppl      participial adjectives

wn'SENSE'INDEX (the senses)

name::
* McsEngl.wn'SENSE'INDEX (the senses)@cptIt,

FILE NAME: index.sense, sense.idx.

_DEFINITION:
The WordNet sense index provides an alternate method for accessing synsets and word senses in the WordNet database. It is useful to applications that retrieve synsets or other information related to a specific sense in WordNet, rather than all the senses of a word or collocation. It can also be used with tools like grep and Perl to find all senses of a word in one or more parts of speech. A specific WordNet sense, encoded as a sense_key , can be used as an index into this file to obtain its WordNet sense number, the database byte offset of the synset containing the sense, and the number of times it has been tagged in the semantic concordance texts.

FORMAT:
The file is in alphabetical order, fields are separated by one space, and each line is terminated with a newline character.
Each line is of the form:

sense_key synset_offset sense_number tag_cnt

EXAMPLE: zulu%1:18:00:: 07053056 1 0
sense_key is an encoding of the word sense. Programs can construct a sense key in this format and use it as a binary search key into the sense index file. The format of a sense_key is described below.

synset_offset is the byte offset that the synset containing the sense is found at in the database "data" file corresponding to the part of speech encoded in the sense_key . synset_offset is an 8 digit, zero-filled decimal integer, and can be used with fseek(3) to read a synset from the data file. When passed to the WordNet library function read_synset() along with the syntactic category, a data structure containing the parsed synset is returned.

sense_number is a decimal integer indicating the sense number of the word, within the part of speech encoded in sense_key , in the WordNet database. See wndb(5WN) for information about how sense numbers are assigned.

tag_cnt represents the decimal number of times the sense is tagged in various semantic concordance texts. A tag_cnt of 0 indicates that the sense has not been semantically tagged.
[WN1.6 senseidx.htm]

wn'Glossary

name::
* McsEngl.wn'Glossary@cptIt,

GLOSSARY OF TERMS
Many terms used in the WordNet Reference Manual are unique to the WordNet system. Other general terms have specific meanings when used in the WordNet documentation. Definitions for many of these terms are given to help with the interpretation and understanding of the reference manual, and in the use of the WordNet system.

ALPHABETICALLY

* wn'adjective'cluster:
A group of adjective synsets that are organized around antonymous pairs or triplets. An adjective cluster contains two or more head synsets which represent antonymous concepts. Each head synset has one or more satellite synsets .

* wn'attribute:
A noun for which adjectives express values. The noun weight is an attribute, for which the adjectives light and heavy express values.

* base-form:

* wn'basic'synset:
Syntactically, same as synset . Term is used in wninput(5WN) to help explain differences in entering synsets in lexicographer files.

* wn'co'occurrence'key:
A semantic tag which is optionally present in a sentence along with a primary key in order for escort(5WN) to retrieve the sentence.

* collocation:

* wn'coordinate:
Coordinate terms are words that have the same hypernym.

* wn'cross'cluster'pointer:
A semantic pointer from one adjective cluster to another.

* wn'cousin:
Senses whose hyponyms bear a specific relation to each other.
...
The cousin groupings exploit the hyponym relation in WordNet. Many WordNet nodes whose hyponyms bear a specific relation to each other have been identified. For example, the noun crab refers to an animal, as well as the edible meat of the animal. The same relation, that of "an animal and its edible meat", holds for lobster , chicken and most other matching strings under the food and animal nodes.
FILES:
All files are in directory WNSEARCHDIR :
cousin.tops pairs of noun top nodes (Unix and Macintosh)
cousin.tps pairs of noun top nodes (PC)
cousin.exc senses that should not be grouped

wn'direct'antonyms:
A pair of words between which there is an associative bond built up by co-occurrences. In adjective clusters , direct antonyms appears only in head synsets.

entailement:

wn'exception'list:
Morphological transformations for words that are not regular and therefore cannot be processed in an algorithmic manner.

wn'group:
Senses deemed [θεωρούμενες] similar by the cousin, sister or twin relations.

wn'gloss:
Definition and/or example sentences for a synset.

wn'head'synset:
Synset in an adjective cluster containing at least one word that has a direct antonym.

wn'holonym:
The name of the whole of which the meronym names a part. Y is a holonym of X if X is a part of Y .

wn'hypernym The generic term used to designate a whole class of specific instances. Y is a hypernym of X if X is a (kind of) Y.
[denotes a GENERIC concept]

wn'hyponym:
The specific term used to designate a member of a class. X is a hyponym of Y if X is a (kind of) Y .
[denotes a SPECIFIC concept]

wn'indirect'antonym:
An adjective in a satellite synset that does not have a direct antonym has an indirect antonyms via the direct antonym of the head synset .

wn'lemma:
lower case ASCII text of word as found in the WordNet database index files.

wn'lexical'pointer:
A lexical pointer indicates a relation between words in synsets (word forms).

wn'monosemous Having only one sense in a syntactic category.

wn'meronym The name of a constituent part of, the substance of, or a member of something. X is a meronym of Y if X is a part of Y .
[denotes a PART concept]

wn'part'of'speech, , wn'pos, wn'syntactic'category:
WordNet defines "part of speech" as either noun, verb, adjective, or adverb. Same as syntactic category .
The syntactic category field is encoded as follows:
1 NOUN
2 VERB
3 ADJECTIVE
4 ADVERB

Nouns and verbs are organized into hierarchies based on the hypernymy/hyponymy relation between synsets. Additional pointers are be used to indicate other relations.

Adjectives are arranged in clusters containing head synsets and satellite synsets. Each cluster is organized around antonymous pairs (and occasionally antonymous triplets). The antonymous pairs (or triplets) are indicated in the head synsets of a cluster. Most head synsets have one or more satellite synsets, each of which represents a concept that is similar in meaning to the concept represented by the head synset. One way to think of the adjective cluster organization is to visualize a wheel, with a head synset as the hub[κέντρο] and satellite synsets as the spokes[ακτίνες]. Two or more wheels are logically connected via antonymy, which can be thought of as an axle between the wheels.
Pertainyms are relational adjectives and do not follow the structure just described. Pertainyms do not have antonyms; the synset for a pertainym most often contains only one word or collocation and a lexical pointer to the noun that the adjective is "of or pertaining to[ανήκω σε]". Participial adjectives have lexical pointers to the verbs that they are derived from.

Adverbs are often derived from adjectives, and sometimes have antonyms; therefore the synset for an adverb usually contains a lexical pointer to the adjective from which it is derived.

[I organize concepts not "lexemes" because a noun and a verb may denote the same concept. 2001-11-25]

participial-adjective:

wn'pertainym:
A relational adjective. Adjectives that are pertainyms are usually defined by such phrases as "of or pertaining to [ανήκουν στο]" and do not have antonyms. A pertainym can point to a noun or another pertainym.

polysemous:

polysemy-count:

postnominal:

predicative:

prenominal:

wn'primary'key:
A semantic tag which must be present in a sentence in order for escort(5WN) to retrieve the sentence.

wn'satellite'synset:
Synset in an adjective cluster representing a concept that is similar in meaning to the concept represented by its head synset .

wn'semantic'concordance:
A textual corpus (Brown Corpus) and a lexicon (WordNet) so combined that every substantive word in the text is linked to its appropriate sense in the lexicon via a semantic tag .

wn'semantic'tag:
A pointer from a text file to a specific sense of a word in the WordNet database. A semantic tag in a semantic concordance is represented by a sense key .

wn'semantic'pointer:
A semantic pointer indicates a relation between synsets (word meanings).

sense:

wn'sense'key:
Information necessary to find a sense in the WordNet database. A sense key combines a lemma field and codes for the synset type, lexicographer id, lexicographer file number, and information about a satellite's head synset , if required. See senseidx(5WN) for a description of the format of a sense key.

Sense Key Encoding:
A sense_key is represented as:

lemma%lex_sense

where lex_sense is encoded as:
ss_type:lex_filenum:lex_id:head_word:head_id

lemma [wn'lemma] is the ASCII text of the word or collocation as found in the WordNet database index file corresponding to pos . lemma is in lower case, and collocations are formed by joining individual words with an underscore (_ ) character.
ss_type is a one digit decimal integer representing the synset type for the sense. See Synset Type below for a listing of the numbers corresponding to each synset type.
lex_filenum is a two digit decimal integer representing the name of the lexicographer file containing the synset for the sense. See lexnames(5WN) for the list of lexicographer file names and their corresponding numbers.
lex_id is a two digit decimal integer that, when appended onto lemma , uniquely identifies a sense within a lexicographer file. lex_id numbers usually start with 00 , and are incremented as additional senses of the word are added to the same file, although there is no requirement that the numbers be consecutive or begin with 00 . Note that a value of 00 is the default, and therefore is not present in lexicographer files. Only non-default lex_id values must be explicitly assigned in lexicographer files. See wninput(5WN) for information on the format of lexicographer files.
head_word is only present if the sense is in an adjective satellite synset. It is the lemma of the first word of the satellite's head synset.
head_id is a two digit decimal integer that, when appended onto head_word , uniquely identifies the sense of head_word within a lexicographer file, as described for lex_id . There is a value in this field only if head_word is present.
Synset Type

wn'sister:
Matching strings that are both the immediate hyponyms of the same superordinate.
[denotes immediate SPECIFIC-CONCEPTS of ONE cpt]
...
Another class of related senses in the noun hierarchy is called sisters. Sisters are matching strings that are both the immediate hyponyms of the same superordinate. For example, the noun flounder can refer to several kinds of flatfish .

wn'subordinate Same as hyponym .

wn'superordinate Same as hypernym .

synonym-set:

synset:

synset-type:

wn'troponym:
A verb expressing a specific manner elaboration of another verb. X is a troponym of Y if to X is to Y in some manner.

wn'twin:
Synsets having at least three words in common.
...
The third grouping relation is called twins. These are synsets that have at least three words in common. For example, one sense of duo is a musical group and another is a musical composition. Both synsets contain duet , duette , and duo .

wn'unique'beginner:
A noun synset with no superordinate.
[a concept with no generic one]

word:

STRUCTURED

_WORD:
wn'word:
In following definitions word is used in place of word or collocation.

wn'collocation:
A collocation in WordNet is a string [sequence] of two or more words, connected by spaces or hyphens. Examples are: man-eating shark, blue-collar, depend on, line of products. In the database files spaces are represented as underscore (_ ) characters.

wn'base'form:
The base form of a word or collocation is the form to which inflections are added.

wn'NAME:
* wn'synset, wn'synonym'set:
A synonym set; a set of words that are interchangeable in some context.
...
Each sense of a word is in a different synset.
...
word meanings are represented by synonym sets (synset s) - lists of synonymous word forms that are interchangeable in some context.
[wninput.htm]
...
Information in WordNet is organized around logical groupings called synsets. Each synset consists of a list of synonymous words or collocations (eg. "fountain pen" , "take in" ), and pointers that describe the relations between this synset and other synsets. A word or collocation may appear in more than one synset, and in more than one part of speech. The words in a synset are logically grouped such that they are interchangeable in some context.

* SENSE (MEANING):
wn'sense:
A meaning of a word in WordNet. Each sense of a word is in a different synset .

wn'polysemous:
Having more than one sense in a syntactic category.

wn'polysemy'count:
Number of senses of a word in a syntactic category, in WordNet.

* wn'synset'type:
Synset Type The synset type is encoded as follows:
1 NOUN
2 VERB
3 ADJECTIVE
4 ADVERB
5 ADJECTIVE SATELLITE

NOUN:

VERB:
wn'entailment:
A verb X entails Y if X cannot be done unless Y is, or has been, done.

_ADJECTIVE:
wn'predicative:
An adjective that can be used only in predicate positions. If X is a predicate adjective, it can be used in such phrases as "it is X ".

wn'prenominal:
An adjective that can occur only before the noun that it modifies.

wn'postnominal:
A postnominal adjective occurs only immediately following the noun that it modifies.

wn'participial'adjective:
An adjective that is derived from a verb.

wn'Programming-language#cptIt430#

name::
* McsEngl.wn'Programming-language@cptIt,

The software programs and tools are written using the C programming language, Unix utilities, and shell scripts.

wn'resourceInfHmn#cptResource843#

name::
* McsEngl.wn'resourceInfHmn@cptIt,

SOURCE:
* online: http://wordnetweb.princeton.edu/perl/webwn
http://www.cogsci.princeton.edu/~wn/

wn'Operating-system#cptIt434#

name::
* McsEngl.wn'Operating-system@cptIt,

To date, WordNet has been ported to the following computer systems:
- Sun-3;
- DECstation;
- NeXT;
- IBM PC and PC clones;
- Macintosh.

wn'OrgProducer

name::
* McsEngl.wn'OrgProducer@cptIt,

Princeton University, USA

wn'Statistics

name::
* McsEngl.wn'Statistics@cptIt,


POS    Unique Strings Synsets  Total Senses
Noun  94474  73%  66025    116317
Adjective  20170  15,5%  17915    29881
Verb    10319  8%  12127    22066
Adverb  4546  3,5%  3575    5677
Totals  121.962  99.642    173.941
[wn1.6, wnstats.htm]

We observe that the WN contains 173.941 senses [CONCEPTS] and 121.962 strings [words] and even less synsets 99.642 [CONCEPT-WORDS].
This demonstrates that a language uses less concept-words than the concepts it uses (here almost HALF!!!).
[hmnSngo.2001-11-24]

wn'Tip

name::
* McsEngl.wn'Tip@cptIt,


* SHIFT + click on a word    SEARCHES for this word.
* middle mouse button on word    SEARCHES for this word.
* CTRL + S        COPY the selected-text into the search-textfield and searches for it.


* CAPS LOCK: when caps lock is on, you can NOT copy text. [2003-12-14]

pgmKnl.doing.ABSTRACTING

name::
* McsEngl.pgmKnl.doing.ABSTRACTING@cptIt,
* McsEngl.conceptIt497.13,
* McsEngl.conceptIt390,
* McsEngl.abstracting-program/software@cptIt,
* McsEngl.program.abstracting@cptIt390,
* McsEngl.summarizing-program@cptIt,
* McsElln.ΠΡΟΓΡΑΜΜΑ-ΠΕΡΙΛΗΨΗΣ@cptIt,

_GENERIC:
* DOCUMENT MANAGEMENT PROGRAM#cptIt426#
* PROGRAM#cptIt59#

_DESCRIPTION:
Virtually all research in AYTOMATIC ABSTRACTING has been concerned with selecting (possible noncontigous) sentences from the document to form an extract. Some systems do a little editing on the extract but current abstracting programs do not create completly new sentences as a human abstracter can do. [1990]

pgmKnl.doing.ACQUISITION

_CREATED: {2012-12-17}

name::
* McsEngl.pgmKnl.doing.ACQUISITION@cptIt,
* McsEngl.knowledge-gathering-program@cptIt, {2012-12-17}

Software-agent

name::
* McsEngl.conceptIt492,
* McsEngl.intelligent-agent@cptIt,
* McsEngl.software-agent@cptIt,
* McsEngl.software'agent@cptIt492,

_DESCRIPTION:
What are software Agents?
Because of the large amount of data that needs to be processed, data mining and textual information base creation and analysis are operations that lend themselves as tasks that are typically delegated. They are typical of human tasks that are researched and results relayed to the requesting individual. Previously the question was asked as to whether it was possible to automate this 'human task' of information gathering.
Recently, there has been an explosion of interest in an area of computing that brings together a number of different computing disciplines that allows just this type of processing. The term 'Software Agents' or 'Intelligent Information Agents' has been coined to describe this approach. It draws from the worlds of object orientation, artificial intelligence and expert or knowledge based systems.
Intelligent agents have been called, 'Objects that Think'. They can interact with the user, with system resources and with other agents in order to achieve their goals. Software objects are now reasonably well understood and are becoming more and more prevalent in the commercial computing world. They encapsulate data with processes or methods that act on that data. These methods are the only way to access the data. Objects en mass, communicate via messages. It is possible to create new classes of objects from existing ones by adding to or changing the data or methods that act on that data. This is known as inheritance. If the same message is sent to different objects, then that message may be interpreted in different ways. This is known as polymorphism.
Agents go one step further than objects, and in many ways are more easily recognised by non computing experts. They have data and methods that act on that data, but also have 'beliefs, commitments and goals'. That is, a degree of reasoning is applied to the data that is available to guide the gathering of extra information in order to achieve the goals that have been set.
Like objects, agents are able to communicate via messages. Agents may be complex or simple and either work alone or in harmony, creating what we call a 'co-operative society'. Other attributes include the ability to migrate themselves across nodes of a network in order to perform their tasks and report back their findings.
[Gentia Agents 1996] 1997oct

pgmKnl.doing.ADVISORY

name::
* McsEngl.pgmKnl.doing.ADVISORY@cptIt,
* McsEngl.conceptIt497.14,
* McsEngl.conceptIt461,
* McsEngl.advisory-program@cptIt,
* McsEngl.program.advisory@cptIt461,

_SPECIFIC:
* CYC

pgmKnl.doing.Forcasting

name::
* McsEngl.pgmKnl.doing.Forcasting@cptIt,

_DESCRIPTION:
Υπερυπολογιστής προβλέπει... επαναστάσεις!
ΑΘΗΝΑ 09/09/2011
Η επανάσταση δεν θα μεταδοθεί από την τηλεόραση, όπως λέγεται συχνά, ωστόσο ίσως μπορεί να προβλεφθεί από τον "Ναυτίλο" ένα υπερκομπιούτερ που επεξεργάζεται ειδήσεις και ιστορικά δεδομένα και βρίσκεται στις ΗΠΑ.

Σύμφωνα με το BBC, επιστήμονες "τάισαν" τον "Ναυτίλο" με εκατομμύρια άρθρα και δημοσιεύσεις στο Ίντερνετ σχετικά με διάφορα γεγονότα που είχαν να κάνουν με την κατάσταση - κοινωνική, πολιτική, οικονομική- στην Αίγυπτο και αυτός προέβλεψε την πτώση του Μουμπάρακ.

Για την ακρίβεια αυτό που συμπέρανε το σύστημα ήταν το επιδεινούμενο κλίμα οργής απέναντί του και το πόσο δυνατός ήταν.

Τα αποτελέσματα της δουλειάς του υπερκομπιούτερ παρουσίασε ο καθηγητής του Πανεπιστιμίου του Ιλινόι Κάλεφ Λεετάρου. Όπως είπε, τα δεδομένα που επεξεργάστηκε ο "Ναυτίλος" προήλθαν από το Open Source Center της κυβέρνησης των ΗΠΑ, από δημοσιεύματα του BBC, το αρχείο των New York Times και τηλεγραφήματα πρακτορείων.

Συνολικά ο "Ναυτίλος" επεξεργάστηκε πάνω από 100 εκ. άρθρα. Η ανάλυση είχε ως στόχο την εξαγωγή δύο κατηγοριών συμπερασμάτων: το κλίμα - αν ήταν καλά ή άσχημα νέα - και την τοποθεσία - που συνέβαιναν τα γεγονότα.

Από την ανάλυση προέκυψαν περίπου 1 τρισεκατομμύριο σχέσεις που διαμόρφωσαν πιθανά σενάρια. Ο "Ναυτίλος" δημιούργησε στη συνέχεια γραφικά για διάφορες χώρες που έζησαν την λεγόμενη "αραβική άνοιξη".

Ενδεικτικά, το κλίμα στην κοινωνία βρέθηκε στο ζενίθ της δυσαρέσκειας λίγο πριν την πτώση Μουμπάρακ.

Ο καθηγητής αναφέρει ότι το σύστημά του έπεσε περισσότερο "μέσα" από τις προβλέψεις των αμερικανικών υπηρεσιών πληροφοριών, που - γνωρίζοντας το "ισόβιο" της προεδρίας Μουμπάρακ - προέβλεπαν ότι δεν επρόκειτο να πέσει από την εξουσία.
[http://www.nooz.gr/tech/upologistis-8a-provlepsei-tin-epanastasi]

pgmKnl.doing.LAW

name::
* McsEngl.pgmKnl.doing.LAW@cptIt,
* McsEngl.pgmKnl.law@cptIt,
* McsEngl.pgmKnl.legal-expert@cptIt,
* McsEngl.legal-expert@cptIt,

pgmKnl.ROSS

name::
* McsEngl.pgmKnl.ROSS@cptIt,
* McsEngl.ROSS-legal-expert-program@cptIt,

_DESCRIPTION:
Built on top of Watson, IBM's cognitive computer,
ROSS is a digital legal expert that helps you power through your legal research.

You ask your questions in plain English, as you would a colleague, and ROSS then reads through the entire body of law and returns a cited answer and topical readings from legislation, case law and secondary sources to get you up-to-speed quickly.

In addition, ROSS monitors the law around the clock to notify you of new court decisions that can affect your case.
[http://www.rossintelligence.com/] 2015-10-27

pgmKnl.doing.TERM-EXTRACTOR

_CREATED: {2013-08-28}

name::
* McsEngl.pgmKnl.doing.TERM-EXTRACTOR@cptIt,
* McsEngl.program.term-extractor@cptIt,
* McsEngl.term-extractor@cptIt,

glossary

_DESCRIPTION:
glossary is a JavaScript module that extracts keywords from text (aka "term extraction" or "auto tagging"). It takes a string of text and returns an array of terms that are relevant to the content:

var glossary = require("glossary");

var keywords = glossary.extract("Her cake shop is the best in the business");

console.log(keywords) // ["cake", "shop", "cake shop", "business"]
glossary is standalone and uses part-of-speech analysis to extract the relevant terms.
[https://github.com/harthur/glossary]

pgmKnl.doing.TEXT-ANALYSIS

_CREATED: {2012-11-24}

name::
* McsEngl.pgmKnl.doing.TEXT-ANALYSIS@cptIt,
* McsEngl.conceptIt497.16,
* McsEngl.text-analytics@cptIt497.16, {2012-11-24}
* McsEngl.text-data-mining@cptIt497.16, {2012-11-24}
* McsEngl.text-mining@cptIt497.16, {2012-11-24}

_DESCRIPTION:
Text mining, sometimes alternately referred to as text data mining, roughly equivalent to text analytics, refers to the process of deriving high-quality information from text. High-quality information is typically derived through the devising of patterns and trends through means such as statistical pattern learning. Text mining usually involves the process of structuring the input text (usually parsing, along with the addition of some derived linguistic features and the removal of others, and subsequent insertion into a database), deriving patterns within the structured data, and finally evaluation and interpretation of the output. 'High quality' in text mining usually refers to some combination of relevance, novelty, and interestingness. Typical text mining tasks include text categorization, text clustering, concept/entity extraction, production of granular taxonomies, sentiment analysis, document summarization, and entity relation modeling (i.e., learning relations between named entities).

Text analysis involves information retrieval, lexical analysis to study word frequency distributions, pattern recognition, tagging/annotation, information extraction, data mining techniques including link and association analysis, visualization, and predictive analytics. The overarching goal is, essentially, to turn text into data for analysis, via application of natural language processing (NLP) and analytical methods.

A typical application is to scan a set of documents written in a natural language and either model the document set for predictive classification purposes or populate a database or search index with the information extracted.
[http://en.wikipedia.org/wiki/Text_mining]

SPECIFIC

_SPECIFIC:
* text categorization,
* text clustering,
* concept/entity extraction,
* production of granular taxonomies,
* sentiment analysis,
* document summarization, and
* entity relation modeling (i.e., learning relations between named entities).
[http://en.wikipedia.org/wiki/Text_mining]

pgmKnl.doing.TEXT-GROUPING

_CREATED: {2012-11-24}

name::
* McsEngl.pgmKnl.doing.TEXT-GROUPING@cptIt,
* McsEngl.conceptIt497.18,
* McsEngl.document-clustering@cptIt497.18, {2012-11-24}
* McsEngl.text-clustering@cptIt497.18, {2012-11-24}
* McsEngl.text-grouping@cptIt497.18, {2012-11-24}

_DESCRIPTION:
Document clustering (or Text clustering) is automatic document organization, topic extraction and fast information retrieval or filtering. It is closely related to data clustering.

A web search engine often returns thousands of pages in response to a broad query, making it difficult for users to browse or to identify relevant information. Clustering methods can be used to automatically group the retrieved documents into a list of meaningful categories, as is achieved by Enterprise Search engines such as Northern Light and Vivisimo, consumer search engines such as PolyMeta and Helioid, or open source software such as Carrot2.
Example:
FirstGov.gov, the official Web portal for the U.S. government, uses document clustering to automatically organize its search results into categories. For example, if a user submits “immigration”, next to their list of results they will see categories for “Immigration Reform”, “Citizenship and Immigration Services”, “Employment”, “Department of Homeland Security”, and more. Probabilistic Latent Semantic Analysis (PLSA) can also be conducted to perform document clustering.

Document clustering involves the use of descriptors and descriptor extraction. Descriptors are sets of words that describe the contents within the cluster. Document clustering is generally considered to be a centralized process. Examples of document clustering include web document clustering for search users.

The application of document clustering can be categorized to two types, online and offline. Online applications are usually constrained by efficiency problems when compared offline applications.

In general, there are two common algorithms. The first one is the hierarchical based algorithm, which includes single link, complete linkage, group average and Ward's method. By aggregating or dividing, documents can be clustered into hierarchical structure, which is suitable for browsing. However, such an algorithm usually suffers from efficiency problems. The other algorithm is developed using the K-means algorithm and its variants. Usually, it is of greater efficiency, but less accurate than the hierarchical algorithm.

Other algorithms involve graph based clustering, ontology supported clustering and order sensitive clustering.
[http://en.wikipedia.org/wiki/Text_clustering]

pgmKnl.CARROT2

name::
* McsEngl.pgmKnl.CARROT2@cptIt,

Carrot²[1] is an open source search results clustering engine.[2] It can automatically cluster small collections of documents, e.g. search results or document abstracts, into thematic categories. Apart from two specialized search results clustering algorithms, Carrot² offers ready-to-use components for fetching search results from various sources. Carrot² is written in Java and distributed under the BSD license.
[http://en.wikipedia.org/wiki/Carrot2]

pgmKnl.doing.TEXT-SIMPLIFICATION

name::
* McsEngl.pgmKnl.doing.TEXT-SIMPLIFICATION@cptIt,

Text simplification is an operation used in natural language processing to modify, enhance, classify or otherwise process an existing corpus of human-readable text in such a way that the grammar and structure of the prose is greatly simplified, while the underlying meaning and information remains the same. Text simplification is an important area of research, because natural human languages ordinarily contain complex compound constructions that are not easily processed through automation. In terms of reducing language diversity, semantic compression can be employed to limit and simplify a set of words used in given texts.
Example
Text Simplification is illustrated with an example. The first sentence contains two relative clauses and one conjoined verb phrase. A text simplification system aims to simplify the first sentence to the second sentence.
“The ability to simplify means to eliminate the unnecessary so that the necessary may speak”
Also contributing to the firmness in copper, the analyst noted, was a report by Chicago purchasing agents, which precedes the full purchasing agents report that is due out today and gives an indication of what the full report might hold.
Also contributing to the firmness in copper, the analyst noted, was a report by Chicago purchasing agents. The Chicago report precedes the full purchasing agents report. The Chicago report gives an indication of what the full report might hold. The full report is due out today.
[http://en.wikipedia.org/wiki/Text_simplification]

pgmKnl.doing.TRANSLATING

name::
* McsEngl.pgmKnl.doing.TRANSLATING@cptIt,
* McsEngl.conceptIt497.15,
* McsEngl.conceptIt361,
* McsEngl.pgmTranslating@cptIt,
* McsEngl.program.TRANSLATION@cptIt361,
* McsEngl.machine-translation@cptIt,
* McsEngl.machine'translation'program@cptIt361,
* McsElln.ΑΥΤΟΜΑΤΗ-ΜΕΤΑΦΡΑΣΗ@cptIt,
* McsElln.ΜΗΧΑΝΙΚΗ-ΜΕΤΑΦΡΑΣΗ@cptIt,

_GENERIC:
* DOCUMENT MANAGEMENT PROGRAM#cptIt426#
* desktop-appl#cptItsoft304#
* PROGRAM#cptIt59#

_WHOLE:
* program-knowledge#cptItsoft497#

DIFICULTIES

Many factors contribute to the difficulty of machine translation, including
1) words with multiple meanings,
2) sentences with multiple grammatical structures,
3) uncertainty about what a pronoun refers to, and other problems of grammar.
[Martin Kay of Xerox-PARC, Palo Alto, CA, and Stanford University ]

EVOLUTION#cptCore546.171#

At the end of the 1950s, researchers in the United States, Russia, and Western Europe were confident that high-quality machine translation (MT) of scientific and technical documents would be possible within a very few years. After the promise had remained unrealized for a decade, the National Academy of Sciences of the United States published the much cited but little read report of its Automatic Language Processing Advisory Committee. The ALPAC Report recommended that the resources that were being expended on MT as a solution to immediate practical problems should be redirected towards more fundamental questions of language processing that would have to be answered before any translation machine could be built. The number of laboratories working in the field was sharply reduced all over the world, and few of them were able to obtain funding for more long-range research programs in what then came to be known as computational linguistics.

There was a resurgence of interest in machine translation in the 1980s and, although the approaches adopted differed little from those of the 1960s, many of the efforts, notably in Japan, were rapidly deemed successful. This seems to have had less to do with advances in linguistics and software technology or with the greater size and speed of computers than with a better appreciation of special situations where ingenuity might make a limited success of rudimentary MT. The most conspicuous example was the METEO system, developed at the University of Montreal, which has long provided the French translations of the weather reports used by airlines, shipping companies, and others. Some manufacturers of machinery have found it possible to translate maintenance manuals used within their organizations (not by their customers) largely automatically by having the technical writers use only certain words and only in carefully prescribed ways.
[Martin Kay of Xerox-PARC, Palo Alto, CA, and Stanford University ]

METHODOLOGY

Interlingual and Transfer approaches.

resourceInfHmn#cptResource843#

_ADDRESS.WPG:
* Air University list of links
Machine Translation and Natural Language Processing -
http://www.au.af.mil/own/dxlt/langcomp.html

* Georgetown University:
Machine Translation Links http://www.georgetown.edu/cball/ling361/ling361_mt_links.html

structure#cptCore515#

The Structure of Machine Translation Systems
While there have been many variants, most MT systems, and certainly those that have found practical application, have parts that can be named for the chapters in a linguistic text book. They have lexical, morphological, syntactic, and possibly semantic components, one for each of the two languages, for treating basic words, complex words, sentences and meanings. Each feeds into the next until a very abstract representation of the sentence is produced by the last one in the chain.

There is also a 'transfer' component, the only one that is specialized for a particular pair of languages, which converts the most abstract source representation that can be achieved into a corresponding abstract target representation. The target sentence is produced from this essentially by reversing the analysis process. Some systems make use of a so-called 'interlingua' or intermediate language, in which case the transfer stage is divided into two steps, one translating a source sentence into the interlingua and the other translating the result of this into an abstract representation in the target language.
[Martin Kay of Xerox-PARC, Palo Alto, CA, and Stanford University ]

SPECIFIC

GENERAL SYSTEMS


COMMERCIAL SYSTEM
INTERLINGUAL SYSTEM
RESEARCH SYSTEM

INDIVIDUAL SYSTEMS


ATLAS II of Fujitsu,
CETA, interlingual design
DLT system at BSO in the Netherlands,
GAT, word-for-word
METAL, transfer approach
PIVOT system of NEC,
POWER TRANSLATOR, Globalink, (Spanish, german, french, russian)
Rosetta system at Phillips,
UNITRAN

About twenty systems are now commercially available. About fifteen of them are Japanese (AS-Transac by Toshiba, ATLAS-II by Fujitsu, PIVOT by NEC, HICAT by Hitachi, SHALT-J by IBM-Japan, PENSE by OKI, DUET by Sharp, MAJESTIC by JICST, etc.), and handle almost exclusively the language pairs Japanese / English. Other systems come from the U.S. (LOGOS, METAL, SPANAM), France (Ariane/aero/F-E by SITE-B'VITAL, based on GETA's computer tools and linguistic methodology), or Germany (SUSY by IAI in Saarbruecken), and center on English, German or French, although mockups and prototypes exist for many other languages. Still others are large and operational, but not (yet ?) commercially offered (JETS by IBM-Japan, LMT by IBM-US, ALT/JE by NTT, etc.).
[http://www.cse.ogi.edu/CSLU/HLTsurvey/, 1996, 8.3.1]

GAT

GAT (THE Georgetown Automatic Translation system), was operated from 1964 to 1976.
[Winston-et-al, 1990, 331#cptResource112]

"INTERLINGUAL"-SYSTEMS


ATLAS II of Fujitsu
DLT system at BSO in the Netherlands (Esperanto)
PIVOT system of NEC
Rosetta system at Phillips

"TRANSFER"-SYSTEMS

Eurotra system
Verbmobil system

Transifex

name::
* McsEngl.transifex@cptIt,

Οταν η πληροφορική συναντά τη μετάφραση
Η ιστορία ενός δυναμικού star tup, του Transifex, που ξεκίνησε από την Ελλάδα
ΔΗΜΟΣΙΕΥΣΗ: 2014-08-08 05:45
Οταν η πληροφορική συναντά τη μετάφραση
Η Transifex (στη φωτογραφία, εργαζόμενοι στην εταιρεία) έχει αναπτύξει ένα online λογισμικό που βοηθά τις εταιρείες να διαχειριστούν τη μετάφραση ψηφιακών προϊόντων

Χαρακτηριστικό παράδειγμα υγιούς οργανικής και επιτυχημένης επιχειρηματικής ανάπτυξης αποτελεί η Transifex, ένα star tup που ξεκίνησε το 2009 από την Πάτρα και συνδυάζοντας πληροφορική και μετάφραση σήμερα παρέχει καινοτόμες υπηρεσίες στη διεθνή αγορά από την Ελλάδα και την Αμερική αντίστοιχα. Οπως διηγείται στο «Βήμα» ο ιδρυτής και επικεφαλής της εταιρείας κ. Δημήτρης Γλέζος, η κεντρική ιδέα της Transifex προέκυψε κατά τη διάρκεια του διδακτορικού του στο Ηνωμένο Βασίλειο, όταν βοηθούσε ως εθελοντής στο έργο Fedora, ένα περιβάλλον επιφάνειας εργασίας του ανοιχτού λογισμικού Linux. «Τότε έφτιαξα την πρώτη έκδοση. Οταν κατάλαβα ότι υπήρχε επιχειρηματική ευκαιρία, δημιούργησα την εταιρεία στην Πάτρα» αναφέρει.

Η Transifex ξεκίνησε με ελάχιστα κεφάλαια και εν μέσω παράλληλης ενασχόλησης με εξωτερικά έργα, τα έσοδα από τα οποία χρηματοδοτούσαν την ανάπτυξή της. Η εταιρεία γρήγορα προσείλκυσε το ενδιαφέρον της αγοράς, με την Intel και τη Nokia να γίνονται οι πρώτοι μεγάλοι πελάτες της. «Καταφέραμε να αναπτύξουμε την εταιρεία, η οποία άρχισε να έχει 100% έσοδα από το προϊόν της, και κατόπιν περάσαμε στο Software as a Service (SAAS)» εξηγεί ο ιδρυτής της. Πλέον η Transifex απασχολεί περίπου 20 άτομα, έχει ένα γραφείο στην Αθήνα, όπου εργάζεται η βασική της ομάδα, και ένα ακόμη στην Αμερική, στην καρδιά της Σίλικον Βάλεϊ. «Είμαστε στην Καλιφόρνια εδώ και δύο χρόνια» παρατηρεί ο κ. Γλέζος.

Μετάφραση για 250 εταιρείες
Η Transifex έχει αναπτύξει ένα online λογισμικό που βοηθά τις εταιρείες να διαχειριστούν τη μετάφραση ψηφιακών προϊόντων. Η μετάφραση γίνεται συνδυαστικά, τόσο από υπολογιστικές μηχανές όσο και από επαγγελματίες μεταφραστές, ενώ το λογισμικό παρακολουθεί τις όποιες αλλαγές και επικαιροποιεί τις μεταφράσεις. Πρόκειται για μια λύση, σύμφωνα με τον ιδρυτή της Transifex, η οποία είναι ιδεώδης για ψηφιακά προϊόντα που αλλάζουν συχνά, όπως μία ιστοσελίδα ή μία κινητή εφαρμογή, καθώς η μηχανική αυτοματοποίηση καθιστά εύκολο κάτι εξαιρετικά δύσκολο για την παραδοσιακή μεθοδολογία της μετάφρασης. «Εκεί που παλιά θα έστελνες δεκάδες e-mail και θα περίμενες μία-δύο εβδομάδες για να λάβεις τις μεταφράσεις, με το λογισμικό μας αυτό το χρονικό διάστημα συρρικνώνεται σε μέρες ή και ώρες» εξηγεί.

Το πελατολόγιο της εταιρείας περιλαμβάνει 250 μεγάλες και μικρότερες εταιρείες, όπως η Deutsche Telekom, η Vodafone, η Nokia, αλλά και η Coursera, που παρέχει τη γνωστή διαδικτυακή πλατφόρμα εκπαίδευσης, και η Waze, μια κινητή εφαρμογή πλοήγησης η οποία έχει εξαγοραστεί από την Google.

Για όλη αυτή την οργανική ανάπτυξη η εταιρεία δεν χρειάστηκε να αντλήσει χρηματοδότηση από την αγορά. Πριν από λίγες ημέρες η εταιρεία ανακοίνωσε την επένδυση ύψους 2,5 εκατ. δολαρίων από τη New Enterprise Associates, ένα κορυφαίο διεθνές κεφάλαιο επενδυτικών συμμετοχών. Επίσης την επένδυση θα υποστηρίξουν οικονομικά η Toba Capital, η Arafura Ventures και angel investors όπως ο κ. Γιώργος Παπαδόπουλος (ιδρυτής της Atypon), o κ. Ιλια Σουχάρ (ιδρυτής της Parse), ο κ. Τζόναθαν Σίγκελ (ιδρυτής της RightSignature) και ο κ. Θάνος Τριάντ (angel investor στις Siebel και BrightEdge).

Με ένα κλικ μετάφραση σε 100 γλώσσες
Η χρηματοδότηση, όπως λέει ο κ. Γλέζος, έρχεται να υποστηρίξει μια νέα τεχνολογία της Transifex η οποία επιτρέπει στους προγραμματιστές με μόλις μία γραμμή κώδικα να συλλέξουν το πηγαίο περιεχόμενο στα αγγλικά και να το μεταφράσουν σε πολλές γλώσσες, αντικαθιστώντας αυτόματα το παλιό με βάση τις ρυθμίσεις της συσκευής του χρήστη ή το domain. «Με την καινούργια μας τεχνολογία η online μετάφραση γίνεται πανεύκολη» τονίζει ο επικεφαλής της Transifex και επισημαίνει ότι η νέα υπηρεσία θα λύσει τα χέρια των πελατών της εταιρείας, κάποιοι εκ των οποίων μεταφράζουν σε 100 γλώσσες.

Ο κ. Γλέζος είναι 32 ετών, γεννήθηκε στη Λεμεσό, σπούδασε μηχανικός ηλεκτρονικών υπολογιστών στην Πάτρα και έκανε διδακτορικό στο Μάντσεστερ στην τεχνητή νοημοσύνη. Οπως λέει, στην Ελλάδα «έχουμε καλά πανεπιστήμια τα οποία μας βοήθησαν να δημιουργήσουμε μια κορυφαία ομάδα που κάνει το Transifex πραγματικότητα».

Στον τομέα της επιχειρηματικότητας τα πανεπιστήμια διατηρούν αποστάσεις από την αγορά, με αποτέλεσμα να υπάρχει κενό που δυσκολεύει πολύ έναν απόφοιτο ΑΕΙ να διαθέτει όλα εκείνα τα εφόδια που θα επιτρέψουν να ξεκινήσει ο ίδιος μια επιχειρηματική απόπειρα. Αντίθετα, όπως παρατηρεί, στην Αμερική οι φοιτητές δουλεύουν τα καλοκαίρι σε προγράμματα πρακτικής σε εταιρείες και μέχρι να ολοκληρώσουν τις σπουδές τους διαθέτουν εμπειρία της αγοράς. Πάντως πιστεύει ότι από το 2009 έως σήμερα έχουν γίνει τεράστια βήματα στον χώρο των startups. «Το open coffee έχει κάνει καλή δουλειά και έχει δημιουργήσει ένα θετικό κλίμα νέας επιχειρηματικότητας» καταλήγει.
[http://www.tovima.gr/society/article/?aid=621585]

pgmKnl.doing.WORLDMODEL-MANAGER

_CREATED: {2009-03-13}

name::
* McsEngl.pgmKnl.doing.WORLDMODEL-MANAGER@cptIt,
* McsEngl.conceptIt497.4,
* McsEngl.program.worldview-management@cptIt497.4, {2012-11-21}
* McsEngl.worldmodel-management-program@cptIt497.4, {2015-09-21}
* McsEngl.worldview-management-program@cptIt497.4, {2012-11-21}
* McsEngl.worldview-manager@cptIt497.4, {2013-07-31}
* McsEngl.worldview-program@cptIt497.4,
* McsEngl.pgmWvw@cptIt497.4, {2013-07-31}
* McsEngl.prgWvm@cptIt497.4, {2012-11-21}

_DEFINITION:
It is a computer-program that MANAGES worldviews.
[2009-03-13]

SPECIFIC

_SPECIFIC:
* cbsmgr#cptItsoft356#
* wordlmodel-comparison
* worldmodel-creation

FvMcs.Cmrpgm.SYSTEM-UTILITY

name::
* McsEngl.conceptIt425,
* McsEngl.Cmrpgm.SYSTEM-UTILITY@cptIt,
* McsEngl.FvMcs.Cmrpgm.SYSTEM-UTILITY@cptIt,
* McsEngl.program.system.utility@cptIt425,
* McsEngl.program.utility@cptIt425,
* McsEngl.system-utility-program@cptIt,

DEFINITION

Function 444-9.

GENERIC

_GENERIC:
* PROGRAM#cptIt59#

SPECIFIC

Specific_concepts (level 3) =

DIAGNOSTIC


CHECKIT#cptItsoft560: attSpe#
CHECKIT LAN#cptItsoft561: attSpe#
CHECKLIST#cptItsoft562: attSpe#
KICKSTART#cptItsoft663: attSpe#
WINSLENTH#cptItsoft877: attSpe#

FILE MANAGEMENT

BACKUP#cptItsoft465: attSpe#

COPY FILES:

FIND FILES:

MOVE FILES:


FINDIT#cptItsoft616: attSpe#
PC TOOLS#cptItsoft759: attSpe#

MEMORY MANAGEMENT

MISC


BAT#cptItsoft535: attSpe#
COMMANDER#cptItsoft570: attSpe#
EASY BOOT#cptItsoft603: attSpe#
FASTBAT#cptItsoft613: attSpe#
PCResume#cptItsoft760: attSpe#
SCREEN-SAVERS#cptItsoft799: attSpe#
W95register (zd3/utility)

OS EMULATOR


softpc#cptItsoft808: attSpe#
VP/ix#cptItsoft868: attSpe#

STORAGE MANAGEMENT


PARK#cptItsoft748: attSpe#
Stacker 2.0, διπλασιασμος χώρου. M-Data 9590631

FvMcs.Cmrpgm.VIRUS

name::
* McsEngl.conceptIt281,
* McsEngl.Cmrpgm.VIRUS@cptIt,
* McsEngl.FvMcs.Cmrpgm.VIRUS@cptIt,
* McsEngl.VIRUS-system-program@cptIt,
* McsEngl.virus'program@cptIt281,
* McsEngl.program.system.virus@cptIt281,

DEFINITION

Function 444-10.

VIRUS is a program that destroys information in the computer.

GENERIC

_GENERIC:
* PROGRAM#cptIt59#

APPEARANCE

resourceInfHmn#cptResource843#

COMPUTER GO, OCT. 1994, 77.

DATE OF ACTION

LENGTH

measure#cptCore88#

2000 Σ'ΟΛΟ ΤΟΝ ΚΟΣΜΟ
[ΝΕΑ 11 ΜΑΡΤΙΟΥ 1993, 31]

Version#cptIt471#

SPECIFIC

Specific_concepts (level 3) =

MELISsA

Melissa Virus fix...FYI (in case you haven't already been there) http://www.microsoft.com/security/bulletins/ms99-002.asp http://officeupdate.microsoft.com/downloaddetails/wd97sp.htm

ΜΙΧΑΗΛ ΑΓΓΕΛΟΣ

ΕΜΦΑΝΙΣΤΗΚΕ: 1988 ΝΕΑ ΖΗΛΑΝΔΙΑ
ΠΑΡΑΛΛΑΓΕΣ: 26
ΜΗΚΟΣ: 480 BYTE
ΧΤΥΠΑ: ΠΡΩΤΟ ΔΕΚΑΗΜΕΡΟ ΤΟΥ ΜΑΡΤΙΟΥ

FvMcs.Cmrpgm.WORD-PROCESSOR

name::
* McsEngl.conceptIt399,
* McsEngl.Cmrpgm.WORD-PROCESSOR@cptIt,
* McsEngl.FvMcs.Cmrpgm.WORD-PROCESSOR@cptIt,
* McsEngl.program.wordprocessor@cptIt399,
* McsEngl.word-processor-program@cptIt,
* McsEngl.word'processor@cptIt399,
* McsElln.ΕΠΕΞΕΡΓΑΣΤΗΣ-ΚΕΙΜΕΝΟΥ@cptIt,

DEFINITION

Πρόγραμα γραφής γραπτού λόγου.

GENERIC

_GENERIC:
DOCUMENT-MANAGEMENT PROGRAM#cptIt426#
* PROGRAM#cptIt59#

APPLICATION#cptIt97#

αρχεια γραμμένα με αυτό το πρόγραμα.

ognCompany#cptEconomy7#

MAKER:
AUTHORIZED DISTRIBUTOR:
VENDOR:

EVALUATION#cptCore546.107#

FILES#cptIt354#

Doing#cptCore475#

word'processing#cptIt444-26#

ADMINISTRATION


Go to operating syst:
Setup:

BOOKMARKS


bookmark definition:
find bookmark:

EDDITING


block text:
delete text:
mode
 draft:
move text:
outliner
Reveale codes:
search
 backward:
 forward:
 go to:
 search and replace:
undo:

EMBEDDING OBJECTS

FILE MANAGEMENT


Exit (Save all)
Export a file at a diferent format:
Import a diferent format file:
Import file at cursor:
List files (open):
Max of open files:
Open new file:
Save without exit:
Save and exit:
summary:
switch among files:
Timed automatic save:

FIELDS

FORMATING


FONT
LAYOUT
 line
 page
 document

GRAPHICS


drawing tools/program
draws lines/boxes/borders
flows text around frames
No. file formats imported:
sizes/crops/rotates graphics
table editor:
type of graph:

HELP

on-line:

INDEXING

LINKING OBJECTS

PRINTING

OLE FUNCTION

PROGRAM USE


open program:
close program:

SPELLING


grammar checker:
languages:
thesaurus:

TABLE OF CONTENTS

UTILITIES


DDE:
ecuation editor:
cross referencing:
index creation:
MACROS
 create:
 play:
mail merge:
math functions:
outliner
summary:
table of contents:

OPERATING-SYSTEM#cptIt434#

PRICE#cptEconomy541.44#

SIZE OF FILE WORKING WITH

SPELLERS#cptIt408: attPar#

Version#cptIt471#

SPECIFIC

Specific_concepts (level 3) =

DTP Desk Top publishing= sophisticated systems for magazine publishers

TEXT EDITORS= For pure text with no additional information concerning fonts or page layout.

WORD PROCESSING= Many are nearly as sophisticated as desktop publishing.

CONCRETE PROGRAMS


ΑmiPro#cptItsoft514: attSpe#
ChiWrite#cptItsoft564: attSpe#
Describe, 3.0 OS/2, Microtransfer
Hyperwriter#cptItsoft644: attSpe#
LetterExpress#cptItsoft674: attSpe#
microsoft-WORD#cptItsoft707: attSpe#
microsoft-WORKS#cptItsoft334: attSpe#
PageMaker#cptIt751#, DTP#cptItsoft751: attSpe#
Professional-write-plus#cptItsoft777: attSpe#
Quark-Xpress#cptIt785#, DTP#cptItsoft785: attSpe#
Scriptum#cptItsoft800: attSpe#
Ventura-publisher#cptIt855#, DTP#cptItsoft855: attSpe#
WordPerfect#cptItsoft879: attSpe#
WordStar#cptItsoft881: attSpe#

FvMcs.Cmrpgm.OLE

name::
* McsEngl.conceptIt432,
* McsEngl.Cmrpgm.OLE@cptIt,
* McsEngl.FvMcs.Cmrpgm.OLE@cptIt,
* McsEngl.OLE@cptIt,
* McsEngl.ole'program@cptIt432,
* McsEngl.OBJECT-LINKING-AND-EMBEDDING@cptIt,
* McsEngl.program.ole@cptIt432,
* McsElln.ΣΥΝΔΕΣΗ-ΚΑΙ-ΕΝΣΩΜΑΤΩΣΗ-ΑΝΤΙΚΕΙΜΕΝΩΝ@cptIt,

DEFINITION

OLE is supposed to enable different applications to communicate and share information.

Το OLE είναι στην ουσία μια βιβλιοθήκη συναρτήσεων, που καθορίζουν πως επικοινωνούν οι εφαρμογές μεταξύ τους.

GENERIC

_GENERIC:
* PROGRAM#cptIt59#

Server document

source doc, departure.

Client document

destination document.

DIFFERENCE'LINKING'EMBEDDING

name::
* McsEngl.DIFFERENCE'LINKING'EMBEDDING@cptIt,

At a client doc,
a LINKED OBJECT does not exist in the overall structure, only a reference to the source. The linked-object changes automatically IF someone changes the document from which it is copied. Link information when you want to have the latest information.

At a client doc,
an EMBEDDING OBJECT has a copy of the source object in the overall structure. You can change it from the client document.

SPECIFIC

Specific_concepts (level 3) =

OLE (1989 Windows 3.1).

OLE 2.0 (1993).

FvMcs.Cmrpgm.BOOK

name::
* McsEngl.conceptIt327,
* McsEngl.Cmrpgm.BOOK@cptIt,
* McsEngl.FvMcs.Cmrpgm.BOOK@cptIt,
* McsEngl.book-its-PROGRAM@cptIt,
* McsEngl.electronic-book-program@cptIt,
* McsEngl.program.electronic'book@cptIt327,
* McsElln.ΠΡΟΓΡΑΜΑ-ΗΛΕΚΤΡΟΝΙΚΟΥ-ΒΙΒΛΙΟΥ@cptIt,

DEFINITION

ΠΡΟΓΡΑΜΑΤΑ ΗΛΕΚΤΡΟΝΙΚΟΥ ΒΙΒΛΙΟΥ ονομάζω κάθε πρόγραμα με το οποίο μπορεί να δημιουργηθεί και να διαβαστεί ένα βιβλίο σε ηλεκτρονική μορφή.

WHOLE

_WHOLE:
ITS.BOOK#cptIt316#

EDITING

EXPOSITION#cptIt148#

ΟΚΤΩΒΡΙΟΣ 1993:
45n ΔΙΕΘΝΗ ΕΚΘΕΣΗ ΒΙΒΛΙΟΥ ΣΤΗ ΦΡΑΓΚΦΟΥΡΤΗ, ΗΤΑΝ ΑΦΙΕΡΩΜΕΝΗ ΣΤΗΝ ΗΛΕΚΤΡΟΝΙΚΗ ΕΚΔΟΣΗ
[ΔΕΛΤΙΟ ΕΕΑ, ΣΕΠΤ 1993]

SPECIFIC

Specific_concepts (level 3) =

INFORMATION ORGANIZATION SPECIFIC-DIVISION


DATABASES (wordprocessors, outliners, databases books)
INFOBASES (hypertext books)
KNOWLEDGE BASES (AI books)
[ΝΙΚΟΣ, ΙΟΥΝ. 1994]

MISC SPECIFIC-DIVISION

ΣΟΦΙΑ

ΠΕΡΙΕΧΕΙ Βυζαντινή ιστορία και τέχνη. Αντιπροσωπεύει σε έκταση 3500 εικονογραφημένες σελίδες βιβλίου και στην ηλεκτρονική του μορφή περιέχει 450 σελίδες νεοελληνικών ιστορικών κειμένων, 1800 εικόνες και χάρτες, 30 λεπτά μουσικής και ήχου, 230 σελίδες πρωτότυπου βυζαντινού κειμένου με την νεοελληνική του απόδοση, σχόλια και 40 σελίδες χρονολογικών πινάκων απο το 324 ως το 1453.

ΔΗΜΙΟΥΡΓΟΣ. Το ίδρυμα μελετών Λαμπράκη με τη συμμετοχή του στο πρόγραμμα "Σαπφώ, πολλαπλά μέσα στην εκπαίδευση και τον πολιτισμό" της κοινοτικής πρωτοβουλίας STRIDE.

ΑΠΑΙΤΗΣΕΙΣ ΓΙΑ ΕΚΤΕΛΕΣΗ: DOS, CDROM.

COUNTRY SPECIFIC-DIVISION

USA

"ΣΤΙΣ ΗΠΑ ΑΥΤΗΝ ΤΗ ΣΤΙΓΜΗ, ΑΠΟΤΕΛΟΥΝ ΜΙΑ ΒΙΟΜΗΧΑΝΙΑ ΑΞΙΑΣ 1 ΔΙΣ. ΔΟΛΑΡΙΩΝ ΤΟ ΧΡΟΝΟ. ΤΟ 1991, 55.000 ΛΟΓΟΤΕΧΝΙΚΑ ΕΡΓΑ ΚΥΚΛΟΦΟΡΗΣΑΝ ΣΕ ΚΑΣΕΤΕΣ ΚΑΙ CD.
ΟΡΙΣΜΕΝΟΙ ΣΥΓΚΡΙΝΟΥΝ ΤΗΝ ΤΑΣΗ ΑΥΤΗ ΜΕ ΤΗΝ ΠΡΩΤΟΦΑΝΗ ΕΠΙΤΥΧΙΑ, ΤΩΝ ΒΙΒΛΙΩΝ ΤΣΕΠΗΣ ΣΤΗ ΔΕΚΑΕΤΙΑ ΤΟΥ '70.

FvMcs.Cmrpgm.DATABASE

name::
* McsEngl.conceptIt8,
* McsEngl.Cmrpgm.DATABASE@cptIt,
* McsEngl.FvMcs.Cmrpgm.DATABASE@cptIt,
* McsEngl.databank-program@cptIt,
* McsEngl.database@cptIt8,
* McsEngl.database-program@cptIt,
* McsEngl.database'program@cptIt8,
* McsEngl.dbms@cptIt,
* McsEngl.database-management-system@cptIt8, {2012-11-23}
* McsEngl.prgDB@cptIt8, {2011-09-13}
* McsEngl.programDatabase@cptIt8, {2011-09-13}
* McsEngl.program.database@cptIt8,

* McsElln.ΠΡΟΓΡΑΜΜΑ-ΒΑΣΗΣ-ΔΕΔΟΜΕΝΩΝ@cptIt,
* McsElln.ΣΥΣΤΗΜΑ-ΔΙΑΧΕΙΡΙΣΗΣ-ΒΑΣΕΩΝ-ΔΕΔΟΜΕΝΩΝ@cptIt,

DEFINITION

DATABASE PROGRAM is an APPLICATION-PROGRAM#cptIt304.1# with witch we store structured information.
[NIKOS, DEC 1996]

DATABASE is a mean to put in STRUCTURED INFORMATION.

prgDB'GENERIC

_GENERIC:
* DOCUMENT MANAGEMENT PROGRAM#cptIt426#
* desktop-appl#cptItsoft304#
* PROGRAM#cptIt59#

prgDB.SPECIFIC

name::
* McsEngl.prgDB.SPECIFIC@cptIt,

_SPECIFIC: prgDB.Alphabetically:
* Access#cptItsoft507#, Microsoft#cptItsoft507#
* Approach, Lotus#cptItsoft519#
* Btrieve, Softcraft
* C-tree#cptItsoft542#
* CA-clipper#cptItsoft543#
* CA-dbfast#cptItsoft545#
* db_vista III#cptItsoft586#
* DB2#cptItsoft587#
* DBase-IV#cptItsoft588#
* DDCS/2#cptItsoft589#
* FileMaker Pro, mac 2.0 win(1992), Claris
* FOXPRO#cptItsoft619#
* INFORMIX#cptItsoft653#
* Ingres, RDBMS
* Iris ΠΑΘΟΛΟΓΙΚΟ, 130.000 δρχ σεπτ1994,
* MySQL#
* Omnis Seven, 1.03 win, Blyth Software
* ORACLE7#cptItsoft464#, RDBMS#cptItsoft464#
* PARADOX#cptItsoft753#
* R:base#cptItsoft793#
* SQLWindows 5.1.1, Gupta Europe, PC Editors' choice
* Superbase, 2.0 win(1992), Software Publishing Corporation
* Unify#cptItsoft849#
* WindowBase 1.5, Software Products International UK
=== Generic:
* client-server-database#cptItsoft144#
* cooperative server
* databank,
* developer's-database,
* hierarchical-database,
* online-database,
* flat-file-database,
* object-oriented-database,
* object-relational-database,
* relational-database,
* transactional--database,

=== instance
* Access#cptItsoft507#, Microsoft#cptItsoft507#
* Approach, Lotus#cptItsoft519#
* Btrieve, Softcraft
* C-tree#cptItsoft542#
* CA-clipper#cptItsoft543#
* CA-dbfast#cptItsoft545#
* db_vista III#cptItsoft586#
* DB2#cptItsoft587#
* DBase-IV#cptItsoft588#
* DDCS/2#cptItsoft589#
* FileMaker Pro, mac 2.0 win(1992), Claris
* FOXPRO#cptItsoft619#
* INFORMIX#cptItsoft653#
* Ingres, RDBMS
* Iris ΠΑΘΟΛΟΓΙΚΟ, 130.000 δρχ σεπτ1994,
* Omnis Seven, 1.03 win, Blyth Software
* ORACLE7#cptItsoft464#, RDBMS#cptItsoft464#
* PARADOX#cptItsoft753#
* R:base#cptItsoft793#
* SQLWindows 5.1.1, Gupta Europe, PC Editors' choice
* Superbase, 2.0 win(1992), Software Publishing Corporation
* Unify#cptItsoft849#
* WindowBase 1.5, Software Products International UK

prgDB'IDE#cptIt430#

name::
* McsEngl.prgDB'IDE@cptIt,

prgDB'Form

name::
* McsEngl.prgDB'Form@cptIt,
* McsElln.ΕΝΤΥΠΟ@cptIt,
* McsElln.ΦΟΡΜΑ@cptIt,

_DEFINITION:
FORM are ways to see and change the data.

prgDB'Doing#cptCore475#

name::
* McsEngl.prgDB'Doing@cptIt,

Ποιά είναι η λειτουργία που θα εκτελέσει το προγραμμα.


GENERAL
MEDICAL

prgDB'Info

_CREATED: {2007-08-11}

name::
* McsEngl.prgDB'Info@cptIt,
* McsEngl.conceptCore358.1,
* McsEngl.database-data@cptIt8.1, {2011-09-13}
* McsEngl.database-info@cptIt8.1,

_DESCRIPTION:
Εφαρμογες γραμμένες απο το προγραμα.
===
On a database we can put information about ***ONE*** entity. This will be an abstract one with many instancies. Every instance takes one row and every attribute of the entity occupies one column.
[nikos 1997oct30]

Generic:
* INFO#cptCore181.62#

prgDB'Report

name::
* McsEngl.prgDB'Report@cptIt,
* McsElln.ΕΚΘΕΣΗ@cptIt,

prgDB'Transaction

name::
* McsEngl.prgDB'Transaction@cptIt,
* McsEngl.database-transaction@cptIt8i, {2011-09-17}
* McsEngl.transaction-database@cptIt8i, {2011-09-17}

_DESCRIPTION:
A transaction comprises a unit of work performed within a database management system (or similar system) against a database, and treated in a coherent and reliable way independent of other transactions. Transactions in a database environment have two main purposes:

1. To provide reliable units of work that allow correct recovery from failures and keep a database consistent even in cases of system failure, when execution stops (completely or partially) and many operations upon a database remain uncompleted, with unclear status.
2. To provide isolation between programs accessing a database concurrently. If this isolation is not provided the programs outcome are possibly erroneous.

A database transaction, by definition, must be atomic, consistent, isolated and durable.[1] Database practitioners often refer to these properties of database transactions using the acronym ACID.

Transactions provide an "all-or-nothing" proposition, stating that each work-unit performed in a database must either complete in its entirety or have no effect whatsoever. Further, the system must isolate each transaction from other transactions, results must conform to existing constraints in the database, and transactions that complete successfully must get written to durable storage.
[http://en.wikipedia.org/wiki/Database_transaction] {2011-09-17}

ACID

In computer science, ACID (atomicity, consistency, isolation, durability) is a set of properties that guarantee database transactions are processed reliably. In the context of databases, a single logical operation on the data is called a transaction. For example, a transfer of funds from one bank account to another, even though that might involve multiple changes (such as debiting one account and crediting another), is a single transaction.

Jim Gray defined these properties of a reliable transaction system in the late 1970s and developed technologies to automatically achieve them.[1] In 1983, Andreas Reuter and Theo Hδrder coined the acronym ACID to describe them.[2]
[http://en.wikipedia.org/wiki/ACID]

SPECIFIC

prgDB.CouchDB

_CREATED: {2013-03-25}

name::
* McsEngl.prgDB.CouchDB@cptIt,
* McsEngl.CouchDB@cptIt,

_DESCRIPTION:
Apache CouchDB, commonly referred to as CouchDB, is an open source database that focuses on ease of use and on being "a database that completely embraces the web".[1] It is a NoSQL database that uses JSON to store data, JavaScript as its query language using MapReduce and HTTP for an API.[1] One of its distinguishing features is easy replication. CouchDB was first released in 2005 and later became an Apache project in 2008.
Unlike in a relational database, CouchDB does not store data and relationships in tables. Instead, each database is a collection of independent documents. Each document maintains its own data and self-contained schema. An application may access multiple databases, such as one stored on a user's mobile phone and another on a server. Document metadata contains revision information, making it possible to merge any differences that may have occurred while the databases were disconnected.
CouchDB implements a form of Multi-Version Concurrency Control (MVCC) in order to avoid the need to lock the database file during writes. Conflicts are left to the application to resolve. Resolving a conflict generally involves first merging data into one of the documents, then deleting the stale one.[2]
Other features are ACID semantics with eventual consistency, MapReduce, incremental replication and fault-tolerance. Administration is supported with a built-in web application called Futon.
[http://en.wikipedia.org/wiki/Couchdb]

couchdb'ATTRIBUTE

name::
* McsEngl.couchdb'ATTRIBUTE@cptIt,

_HTTP_SERVER:
CouchDB is an HTTP server, capable of serving HTML directly to the browser.
[http://couchapp.org/page/what-is-couchapp]

couchdb'replication

name::
* McsEngl.couchdb'replication@cptIt,

Aside from simplicity and the scalability that comes with it, there is another major benefit to creating a 100% pure CouchApp: Replication. When your app is hosted by just a CouchDB, that means it can be run from any CouchDB, with no need to set up complex server-side dependencies. When your app can run on any CouchDB, you are free to take advantage of CouchDB's killer feature: replicating the app and the data anywhere on the network.
[http://couchapp.org/page/what-is-couchapp]

couchdb'API

name::
* McsEngl.couchdb'API@cptIt,

couchdb'uuids:
* curl -X GET http://127.0.0.1:5984/_uuids?count=4

couchdb'application

name::
* McsEngl.couchdb'application@cptIt,

_DESCRIPTION:
CouchDB documents may have binary attachments. The easiest way to add an attachment to a document is via Futon. We'll do that later in this blog post.
So, the simplest possible CouchApp is just an HTML file, served directly from CouchDB, that uses Ajax to load and save data from the CouchDB.
[http://couchapp.org/page/what-is-couchapp]

_SPECIFIC:
* http://www.speqmath.com/tutorials/couchdb_tasklist/index.html,

couchdb'database

name::
* McsEngl.couchdb'database@cptIt,

_DESCRIPTION:
For the strict, CouchDB is a database management system (DMS). That means it can hold multiple databases. A database is a bucket that holds “related data.” We’ll explore later what that means exactly. In practice, the terminology is overlapping—often people refer to a DMS as “a database” and also a database within the DMS as “a database.” We might follow that slight oddity, so don’t get confused by it. In general, it should be clear from the context if we are talking about the whole of CouchDB or a single database within CouchDB.
[http://guide.couchdb.org/editions/1/en/api.html#databases]

_STORAGE_LOCATION:
* \Program Files\Apache Software Foundation\CouchDB\var\lib\couchdb

couchdb'database'creating

name::
* McsEngl.couchdb'database'creating@cptIt,

Now let’s make one! We want to store our favorite music albums, and we creatively give our database the name albums. Note that we’re now using the -X option again to tell curl to send a PUT request instead of the default GET request:

curl -X PUT http://127.0.0.1:5984/albums

CouchDB replies:
{"ok":true}
[http://guide.couchdb.org/editions/1/en/api.html#databases]

couchdb'database'storage

name::
* McsEngl.couchdb'database'storage@cptIt,

CouchDB stores each database in a single file.
[http://guide.couchdb.org/editions/1/en/api.html#databases]

_STORAGE_LOCATION:
* \Program Files\Apache Software Foundation\CouchDB\var\lib\couchdb

couchdb'document

name::
* McsEngl.couchdb'document@cptIt,
* McsEngl.couchdb'doc@cptIt,

_WHOLE:
* couchdb-database#linkL#

_DESCRIPTION:
A CouchDB document is simply a JSON object. You can use any JSON structure with nesting. You can fetch the document's revision information by adding ?revs_info=true to the get request.
[http://wiki.apache.org/couchdb/HTTP_Document_API#Documents]

couchdb'doc'attachment

name::
* McsEngl.couchdb'doc'attachment@cptIt,

Documents can have attachments just like email. There are two ways to use attachments: the first one is a REST API that addresses individual attachments by URLs; the second is inline with your document.

A note on attachment names: Attachments may have embedded / characters that are sent unescaped to CouchDB. You can use this to provide a subtree of attachments under a document. A DocID must have any / escaped as %2F. So if you have document a/b/c with an attachment d/e/f.txt, you would be able to access it at http://couchdb/db/a%2fb%2fc/d/e/f.txt .
[http://wiki.apache.org/couchdb/HTTP_Document_API#Attachments]

couchdb'doc'key

name::
* McsEngl.couchdb'doc'key@cptIt,
* McsEngl.couchdb'field@cptIt,

_DESCRIPTION:
Note that any top-level fields within a JSON document containing a name that starts with a _ prefix are reserved for use by CouchDB itself. Also see Reserved_words. Currently (0.10+) reserved fields are:

Field Name
Description
_id
The unique identifier of the document (mandatory and immutable)
_rev
The current MVCC-token/revision of this document (mandatory and immutable)
_attachments
If the document has attachments, _attachments holds a (meta-)data structure (see section on HTTP_Document_API#Attachments)
_deleted
Indicates that this document has been deleted and previous revisions will be removed on next compaction run
_revisions
Revision history of the document
_revs_info
A list of revisions of the document, and their availability
_conflicts
Information about conflicts
_deleted_conflicts
Information about conflicts
_local_seq
Sequence number of the revision in the database (as found in the _changes feed)
[http://wiki.apache.org/couchdb/HTTP_Document_API#Special_Fields]

couchdb'doc'id

name::
* McsEngl.couchdb'doc'id@cptIt,
* McsEngl.couchdb'DocID@cptIt,

_DESCRIPTION:
Naming/Addressing
Documents stored in a CouchDB have a DocID. DocIDs are case-sensitive string identifiers that uniquely identify a document. Two documents cannot have the same identifier in the same database, they are considered the same document.
http://localhost:5984/test/some_doc_id
http://localhost:5984/test/another_doc_id
http://localhost:5984/test/BA1F48C5418E4E68E5183D5BD1F06476
The above URLs point to some_doc_id, another_doc_id and BA1F48C5418E4E68E5183D5BD1F06476 in the database test.
[http://wiki.apache.org/couchdb/HTTP_Document_API#Naming.2BAC8-Addressing]
===
Document IDs don't have restrictions on what characters can be used. Although it should work, it is recommended to use non-special characters for document IDs. Using special characters you have to be aware of proper URL en-/decoding. Documents prefixed with _ are special documents:
Document ID prefix    Description
_design/      are DesignDocuments
_local/      are not being replicated (local documents) and used for Replication checkpointing.
You can have / as part of the document ID but if you refer to a document in a URL you must always encode it as %2F. One special case is _design/ documents, those accept either / or %2F for the / after _design, although / is preferred and %2F is still needed for the rest of the DocID.
[http://wiki.apache.org/couchdb/HTTP_Document_API#Document_IDs]

Universally (or Globally) Unique IDentifier.

couchdb'doc.EXAMPLE

name::
* McsEngl.couchdb'doc.EXAMPLE@cptIt,

Here are two simple examples of documents:


{
"_id":"discussion_tables",
"_rev":"D1C946B7",
"Sunrise":true,
"Sunset":false,
"FullHours":[1,2,3,4,5,6,7,8,9,10],
"Activities": [
{"Name":"Football", "Duration":2, "DurationUnit":"Hours"},
{"Name":"Breakfast", "Duration":40, "DurationUnit":"Minutes", "Attendees":["Jan", "Damien", "Laura", "Gwendolyn", "Roseanna"]}
]
}

{
"_id":"some_doc_id",
"_rev":"D1C946B7",
"Subject":"I like Plankton",
"Author":"Rusty",
"PostedDate":"2006-08-15T17:30:12-04:00",
"Tags":["plankton", "baseball", "decisions"],
"Body":"I decided today that I don't like baseball. I like plankton."
}
[http://wiki.apache.org/couchdb/HTTP_Document_API#Documents]

couchdb'futon

name::
* McsEngl.couchdb'futon@cptIt,

_DESCRIPTION:
After having seen CouchDB’s raw API, let’s get our feet wet by playing with Futon, the built-in administration interface. Futon provides full access to all of CouchDB’s features and makes it easy to work with some of the more complex ideas involved. With Futon we can create and destroy databases; view and edit documents; compose and run MapReduce views; and trigger replication between databases.
[http://guide.couchdb.org/editions/1/en/tour.html]

_FUTON'LOAD:
To load Futon in your browser, visit:
http://127.0.0.1:5984/_utils/
[http://guide.couchdb.org/editions/1/en/tour.html]

couchdb'resourceInfHmn#cptResource843#

name::
* McsEngl.couchdb'resourceInfHmn@cptIt,

_ADDRESS.WPG:
* http://wiki.apache.org/couchdb//
* http://couchdb.readthedocs.org/en/latest//
* http://guide.couchdb.org/editions/1/en/index.html,
* http://couchapp.org/page/index,

prgDB.COOPERATIVE-SERVER

name::
* McsEngl.prgDB.COOPERATIVE-SERVER@cptIt,

Η ΝΕΑ ΤΕΧΝΟΛΟΓΙΑ ΤΗΣ ORACLE ΟΠΟΥ ΔΙΝΕΙ ΤΗ ΔΥΝΑΤΟΤΗΤΑ ΤΑ ΔΕΔΟΜΕΝΑ ΝΑ ΕΙΝΑΙ ΚΑΤΕΝΕΜΗΜΕΝΑ ΣΕ ΠΟΛΛΟΥΣ ΥΠΟΛΟΓΙΣΤΕΣ.

DDBMS Διανεμημενα συστήματα βασεων δεδομένων. Το μελλον [COMPUTER 105/214]

prgDB.DATABANK

name::
* McsEngl.prgDB.DATABANK@cptIt,

ΤΡΑΠΕΖΑ ΠΛΗΡΟΦΟΡΙΩΝ ΤΩΝ ΜΗΧΑΝΙΚΩΝ, ΔΟΜΙΚΗ ΕΝΗΜΕΡΩΣΗ, ΔΙΑΤΑΞΕΙΣ ΣΕ ΘΕΜΑΤΑ ΝΟΜΟΘΕΣΙΑΣ ΚΑΤΑΣΚΕΥΩΝ.

prgDB.DEVELOPER'S DATABASE

name::
* McsEngl.prgDB.DEVELOPER'S DATABASE@cptIt,

A database designed for a spesific job.

prgDB.FLAT-FILE

name::
* McsEngl.prgDB.FLAT-FILE@cptIt,

A database that contains only a single table (like this one) is usually called a flat-file database.
[Eckel, Thinking in Java, 1998jan]

Μια σειρα απο records χωρις σχεσεις αναμεσα σε σχετιζομενες databases.

prgDB.HIERARCHICAL

name::
* McsEngl.prgDB.HIERARCHICAL@cptIt,

hierarchical database technology first became commercially available in the early 1970s.
[Landon, 1988, 62#cptResource52]

prgDB.HTML

_CREATED: {2013-03-25}

name::
* McsEngl.prgDB.HTML@cptIt,
* McsEngl.HTML-database@cptIt,

_DESCRIPTION:
A hypertext markup language (HTML) database is a program that can collect and display information over the Internet. This database software interfaces with the Internet programming language to enable website visitors to search a collection of information or enter information into a Web form to be added to the database. The language, HTML, serves as the mechanism that allows the visitor to understand how the database can be used.

Databases are essential tools that enable people to store and manipulate information. In a database, information is entered into a file structure that allows the information to be called up or displayed when requested. There are many types of databases, but the two general types that are familiar to the average consumer are flat and relational.

Flat databases are the sorts of tables or spreadsheets that can contain information and manipulate it to a degree. These sorts of database mostly serve as a way to organize and present information. For example, a person may put information into a table so the information can be presented in a chart as part of a report. The table allows the data to be sorted, and, in some instances, summed up, but each entry in the table stands alone. If a person were to pluck a line of information from a flat database, it would not substantively affect any of the other data.

Relational databases store information in relations to other bits of information. The database gives each record a key, and everything that relates to that record is tied together by using that key. This enables the database user to call up related information and search the data based on queries, or questions. The most commonly used type of database on the Internet is relational.

Many of the things that Web surfers do involve an HTML database. When a person creates a login on a website, and then creates a profile or accesses his own account information, he is using a database. Search engines are simply databases that the public can access through an HTML interface.

The Internet uses a number of different types of HTML database engines on websites. The most popular of these is an SQL database. Whichever engine or program is used to create the HTML database, they must all use some version of Internet programming language to enable the database interface to display over the Web. The most basic Internet programming language is HTML.

HTML can also be used to create flat tables just by using the coding language to display information in a chart. When people think of an HTML database, however, they will most likely think of the way information that is entered into a Web form becomes part of an account that they can access by logging in. In this way, the term has a bit of ubiquity that transcends the type of database software that might actually power the website.
[http://www.wisegeek.com/what-is-an-html-database.htm]

prgDtb.NoSQL

_CREATED: {2012-11-23}

name::
* McsEngl.prgDtb.NoSQL@cptIt,
* McsEngl.conceptIt8.3,
* McsEngl.NoSQL-database@cptIt8.3, {2012-11-23}

_DESCRIPTION:
In computing, NoSQL (commonly interpreted as "not only SQL"[1]) is a broad class of database management systems identified by non-adherence to the widely used relational database management system model. NoSQL databases are not built primarily on tables, and generally do not use structured query language for data manipulation.

NoSQL database systems are often highly optimized for retrieve and append operations and often offer little functionality beyond record storage (e.g. key–value stores). The reduced run-time flexibility compared to full SQL systems is compensated by marked gains in scalability and performance for certain data models.

In short, NoSQL database management systems are useful when working with a huge quantity of data when the data's nature does not require a relational model. The data can be structured, but NoSQL is used when what really matters is the ability to store and retrieve great quantities of data, not the relationships between the elements. Usage examples might be to store millions of key–value pairs in one or a few associative arrays or to store millions of data records. This organization is particularly useful for statistical or real-time analyses of growing lists of elements (such as Twitter posts or the Internet server logs from a large group of users).
[http://en.wikipedia.org/wiki/Nosql]

prgDB.ONLINE-#cptIt195: attSpe#

name::
* McsEngl.prgDB.ONLINE-@cptIt,

prgDB.OBJECT-ORIENTED

name::
* McsEngl.prgDB.OBJECT-ORIENTED@cptIt,
* McsEngl.conceptIt1035,
* McsEngl.database.object'oriented@cptIt1035,
* McsEngl.object-database@cptIt,
* McsEngl.object-oriented-database@cptIt,
* McsEngl.object'oriented'database@cptIt1035,

_DESCRIPTION:
Object-Oriented Databases are databases that support objects and classes. They are different from the more traditional relational databases because they allow structured subobjects, each object has its own identity, or object-id (as opposed to a purely value-oriented approach) and because of support for methods and inheritance. It is also possible to provide relational operations on an object-oriented database. OODBs allow all the benefits of object-orientation, as well as the ability to have a strong equivalence with object-oriented programs, an equivalence that would be lost if an alternative were chosen, as with a purely relational database.
[Hathaway, Bod. Comp.Object FAQ v1.0.9, 2 Apr. 1996]

Evolution#cptCore546.171#

Java to some extent restores programmers to where they were in 1978 with their Xerox Smalltalk environment or MIT Lisp Machine. Since Java seems to have enough money behind it to catch on and object databases are very naturally suited to backing up Java programs, I predict an increase in object database popularity.
[Introduction to Database Management Systems by Philip Greenspun, part of SQL for Web Nerds ] {1999-04-02}

ResourceInfHmn#cptResource843#

The Object Database Management Group (ODMG) has set up Gopher and Web Servers at the following addresses:
Gopher: gopher.odmg.org, port 2073
WWW: http://www.odmg.org:3083

prgDB.OBJECT-RELATIONAL

name::
* McsEngl.prgDB.OBJECT-RELATIONAL@cptIt,
* McsEngl.conceptIt8.2,
* McsEngl.object-relational-database@cptIt8.2, {2011-09-15}
* McsEngl.ORDMS@cptIt8.2, {2011-09-15}

_DESCRIPTION:
An object-relational database (ORD), or object-relational database management system (ORDBMS), is a database management system (DBMS) similar to a relational database, but with an object-oriented database model: objects, classes and inheritance are directly supported in database schemas and in the query language. In addition, it supports extension of the data model with custom data-types and methods.
An object-relational database can be said to provide a middle ground between relational databases and object-oriented databases (OODBMS). In object-relational databases, the approach is essentially that of relational databases: the data resides in the database and is manipulated collectively with queries in a query language; at the other extreme are OODBMSes in which the database is essentially a persistent object store for software written in an object-oriented programming language, with a programming API for storing and retrieving objects, and little or no specific support for querying.
[http://en.wikipedia.org/wiki/ORDBMS]

_SPECIFIC:
* postgreSQL#cptItsoft564#

prgDB.RELATIONAL

name::
* McsEngl.prgDB.RELATIONAL@cptIt,

databases are linked.

Most problems that go beyond the simple storage and retrieval of data generally require multiple tables that must be related by joins to produce the desired results, and these are called relational databases.
[Eckel, Thinking in Java, 1998jan]

prgDB.TRANSACTIONAL

name::
* McsEngl.prgDB.TRANSACTIONAL@cptIt,

αυτες που δουλεβουν με ενα βασικό ρεκορντ και τρανζακσιονς σχετιζόμενες μᾳυτο.

prgDB.WEB

_CREATED: {2013-03-25}

name::
* McsEngl.prgDB.WEB@cptIt,
* McsEngl.web-database@cptIt,

_DESCRIPTION:
A web database is a system for storing information that can then be accessed via a website. For example, an online community may have a database that stores the username, password, and other details of all its members. The most commonly used database system for the internet is MySQL due to its integration with PHP — one of the most widely used server side programming languages.

At its most simple level, a web database is a set of one or more tables that contain data. Each table has different fields for storing information of various types. These tables can then be linked together in order to manipulate data in useful or interesting ways. In many cases, a table will use a primary key, which must be unique for each entry and allows for unambiguous selection of data.

A web database can be used for a range of different purposes. Each field in a table has to have a defined data type. For example, numbers, strings, and dates can all be inserted into a web database. Proper database design involves choosing the correct data type for each field in order to reduce memory consumption and increase the speed of access. Although for small databases this often isn't so important, big web databases can grow to millions of entries and need to be well designed to work effectively.

Content management systems commonly use web databases to store information such as posts, usernames, and comments. Using a database allows the website to be updated easily and without the need to edit the HTML code for each individual page. Not only is this a much more efficient way of creating and updating a website, but it also makes the process more accessible to people who aren't fluent in the programming languages of the Internet.

An example of where a web database may be used is for an online forum. Forum software often creates a database with a number of tables, including one for users, posts, and settings. It is important for the relationships between the database tables to be properly set and defined so that posts and users can be linked together easily.

In some cases, web databases can be bought with information already included. For example, a database could include a list of all the dentists in the US along with state and address. These databases are commonly integrated into related websites using PHP and HTML, along with additional content.
[http://www.wisegeek.com/what-is-a-web-database.htm]

FvMcs.Cmrpgm.SPREADSHEET

name::
* McsEngl.conceptIt29,
* McsEngl.Cmrpgm.SPREADSHEET@cptIt,
* McsEngl.FvMcs.Cmrpgm.SPREADSHEET@cptIt,
* McsEngl.program.spreadsheet@cptIt29,
* McsEngl.spreadsheet-program@cptIt,
* McsEngl.spreadsheet@cptIt29,
====== lagoGreek:
* McsElln.ΛΟΓΙΣΤΙΚΟ-ΦΥΛΛΟ@cptIt,
* McsElln.ΥΠΟΛΟΓΙΣΤΙΚΟ-ΦΥΛΛΟ@cptIt,
* McsElln.ΦΥΛΛΟ-ΕΡΓΑΣΙΑΣ@cptIt,

DEFINITION

A spreadsheet is a rectangular table (or grid) of information, often financial information. The word came from "spread" in its sense of a newspaper or magazine item (text and/or graphics) that covers two facing pages, extending across the center fold and treating the two pages as one large one. The compound word "spread-sheet" came to mean the format used to present bookkeeping ledgers—with columns for categories of expenditures across the top, invoices listed down the left margin, and the amount of each payment in the cell where its row and column intersect—which were traditionally a "spread" across facing pages of a bound ledger (book for keeping accounting records) or on oversized sheets of paper ruled into rows and columns in that format and approximately twice as wide as ordinary paper.
[http://en.wikipedia.org/wiki/Spreadsheet]

GENERIC

_GENERIC:
* desktop-appl#cptItsoft304#
* PROGRAM#cptIt59#

SPECIFIC

Specific_concepts (level 3) =


Excel#cptIt611: attSpe#
Lotus1-2-3#cptIt678: attSpe#
Lotus-Improv#cptIt679: attSpe#
Quattro-Pro#cptIt786: attSpe#

{time.1979 SPREADSHEET:
VisiCalc. ΤΟ ΠΡΩΤΟ "ΗΛΕΚΤΡΟΝΙΚΟ ΛΟΓΙΣΤΙΚΟ ΦΥΛΛΟ" ΓΙΑ ΠΡΟΣΩΠΙΚΟΥΣ ΚΟΜΠΙΟΥΤΕΡ.
[COMPUTER ΓΟ, ΜΑΡΤ 1993, 18]

FvMcs.Cmrpgm.REMOTE-ACCESS

name::
* McsEngl.conceptIt88,
* McsEngl.Cmrpgm.REMOTE-ACCESS@cptIt,
* McsEngl.FvMcs.Cmrpgm.REMOTE-ACCESS@cptIt,
* McsEngl.program.remoteAccess@cptIt88,
* McsEngl.remote-access-program@cptIt,
* McsEngl.NETWORK-ΠΡΟΓΡΑΜΑΤΑ-ΤΗΛΕΧΕΙΡΙΣΜΟΥ@cptIt,

DEFINITION

ΛΕΙΤΟΥΡΓΙΑ:
ΤΡΕΧΟΥΝ ΕΦΑΡΜΟΓΕΣ ΣΕ ΑΛΛΟΝ ΥΠΟΛΟΓΙΣΤΗ, ΜΕΣΩ ΚΑΛΩΔΙΟΥ ΣΥΡΙΑΚΩΝ ΘΥΡΩΝ ή MODEM.

EXECUTION#cptIt56#

SPECIFIC

Specific_concepts (level 3) =

remote'access |4|L.PROGRAMS {|4| remote'access}

Carbon Copy Plus, Microcom, Inc.,
Close-Up, Norton-Lambert Corp.
NETremote, Brightwork Development, Inc.,
NetWare AnyWare,

FvMcs.Cmrpgm.PROJECT-MANAGEMENT

name::
* McsEngl.conceptIt101,
* McsEngl.Cmrpgm.PROJECT-MANAGEMENT@cptIt,
* McsEngl.FvMcs.Cmrpgm.PROJECT-MANAGEMENT@cptIt,
* McsEngl.project-management-application-program@cptIt,
* McsEngl.program.project-management@cptIt304,

DEFINITION

Πρόγραμμα για τη διαχείριση κάποιου έργου.

application-p.#cptIt304#

GENERIC

_GENERIC:
* desktop-appl#cptItsoft304#
* PROGRAM#cptIt59#

Doing#cptCore475#

+++project management#cptIt444-23#

SPECIFIC

Specific_concepts (level 3) =

PROGRAMS#ql:[Field program:project'management]# {|4| PROJECT'MANAGEMENT}

OnTarget, win, Symanteck

ProjectGuide, win, Marin Research

FvMcs.Cmrpgm.Electronic-Mail

name::
* McsEngl.conceptIt102,
* McsEngl.Cmrpgm.Electronic-Mail@cptIt,
* McsEngl.FvMcs.Cmrpgm.Electronic-Mail@cptIt,
* McsEngl.CLIENT-MAIL-PROGRAMS@cptIt,
* McsEngl.electronic-mail@cptIt102,
* McsEngl.email-program@cptIt102,
* McsEngl.email@cptIt,
* McsEngl.email'program@cptIt102,
* McsEngl.email-program@cptIt102,
* McsEngl.e-mail@cptIt,
* McsEngl.electronic-mail@cptIt,
* McsEngl.program.network.application.email@cptIt121,
* McsEngl.program.email@cptIt102,
* McsEngl.eml@cptIt102, {2013-10-02}
====== lagoGreek:
* McsElln.ΗΛΕΚΤΡΟΝΙΚΟ-ΤΑΧΥΔΡΟΜΕΙΟ@cptIt,

_DESCRIPTION:
Με αυτά τα προγράμματα ο χρήστης διαβάζει το ταχυδρομείο.
- Απο τα πιο διαδεδομένα είναι το UNIX MAIL μια και το κατεξοχήν λειτουργικό σύστημα στο internet είναι το unix.
- Λόγω της δυσχρηστίας του αναπτύχθηκαν πιο φιλικοί READERS όπως το Elm και Pine.
[COMPUTER GO, SEP. 1994, 85]

ΕΥΡΩΠΑΙΚΗ ΕΝΩΣΗ ΗΛΕΚΤΡΟΝΙΚΟΥ ΤΑΧΥΔΡΟΜΕΙΟΥ (ΣΥΝΕΔΡΙΟ 23 ΝΟΕΜ 1993 ΑΘΗΝΑ)

ADVANTAGE

1) Εξαλείφει τους κανόνες τηλεφωνικής επικοινωνίας και επιτρέπει στο ευρέως διασπαρμένο προσωπικό να αγνοεί τις διαφορές ώρας και τις ώρες γραφείου.
2) Low cost.
3) Speed.
4) Flexibility. E.g. spreadsheet files
5) Waste reduction.

* Electronic mail is changing the way the world thinks about exchanging information.

pgmEmail'data

name::
* McsEngl.pgmEmail'data@cptIt,

How Often Did President Bill Clinton Send E-Mails?
Bill Clinton sent only two e-mails throughout his eight years as US president.

While speaking at a Wired for Change technology conference in 2011,
President Bill Clinton confessed that he sent only two e-mails during his
entire presidency. One e-mail was to the United States troops in the
Adriatic, and the other was to John Glenn for his 77th birthday, while he
was in orbit around the Earth on the shuttle Discovery. E-mail has been a
relatively common form of communication since the early 1990's (the term
"e-mail" being coined around 1993). President Clinton was in office from
1993 to 2001 and the staff of the White House sent around 40 million emails
during this time. These e-mails have been archived in the Bill Clinton
memorial library, along with the two emails sent by President Clinton
himself during the same period.

Read More: http://www.wisegeek.com/how-often-did-president-bill-clinton-send-e-mails.htm?m, {2015-02-25}

MIME TYPES

Peter Murray-Rust writes: > >What will differentiate a text/xml document from an application/xml one?
text/* is used for text, and appliction/* is for binary data.  Thus, text/xml is appropriate for XML documents.  (The reason that application/xml is introduced is only for transmitting XML documents in UTF-16 or UCS-2 via e-mail.)
text/* has the charset parameter, which specifies the encoding method.  text/* (implicitly) allows code conversion by proxy servers.  application/* does not have the charaset parameter (if not explicitly defined for subtypes).  application/* (again, implicitly) disallows code conversion by proxy servers.
[1997dec21]

STANDARD#cptIt139#

To X.400 είναι ένα διεθνές στάνταρ σχεδιασμένο για την παροχή ενός γενικού συστήματος ανταλαγής ηλεκτρονικού ταχυδρομείου.

ΣΥΝΔΕΣΕΙΣ ΥΠΟΛΟΓΙΣΤΩΝ ΓΙΑ email

Δεδομένου ότι τα e-mail προγράμματα βασικά μεταφέρουν αρχεία, συνεργάζονται με πολλά σχήματα σύνδεσης:

Απλά καλώδια που συνδέονται στην σειριακή έξοδο ενός PC,

modem που συνδέονται σε τηλεφωνικές γραμμές και

υψηλής ταχύτητας καλώδια LAN, όλα μπορούν να μεταφέρουν μηνύματα e-mail.

SPECIFIC

Specific_concepts (level 3) =

_SPECIFIC:
PROGRAMS#ql:[Field program:email]# {|4| EMAIL}
BeyondMail, 1.0 win(1992),
cc:Mail, Performance Technology
Coordinator, Action Technologies
Da Vinci e-mail
Higgins E-mail
Mail 3.0, Microsoft, MAPI vs VIMI industry.
The Network Courier

UNIX-mail#cptIt137: attSpe#

email.CHECKER

name::
* McsEngl.email.CHECKER@cptIt,

Poppy for windows:
* I 've downloaded at 2004-12-27
* storage: programs\internet

FvMcs.Cmrpgm.IMAGE

name::
* McsEngl.conceptIt106,
* McsEngl.Cmrpgm.IMAGE@cptIt,
* McsEngl.FvMcs.Cmrpgm.IMAGE@cptIt,
* McsEngl.GRAPHICS-PROGRAM@cptIt,
* McsEngl.graphics'program@cptIt106,
* McsEngl.pgm.image@cptIt106,
* McsEngl.pgm.picture@cptIt106,
* McsEngl.program.graphics@cptIt106,
* McsEngl.program.image@cptIt106,
* McsEngl.program.picture@cptIt106,
* McsEngl.pgmImg@cptIt,
====== lagoGreek:
* McsElln.ΠΡΟΓΡΑΜΜΑ-ΓΡΑΦΙΚΩΝ@cptIt,
* McsElln.ΠΡΟΓΡΑΜΜΑ-ΣΧΕΔΙΑΣΤΙΚΗΣ@cptIt,

DEFINITION

Πρόγραμα δημιουργίας/παρουσίασης εικόνων.

pgmImg'GENERIC

_GENERIC:
* desktop-appl#cptItsoft304#
* PROGRAM#cptIt59#

pgmImg'ALIASING

name::
* McsEngl.pgmImg'ALIASING@cptIt,

In computer graphics, when lines are drawn at an angle their appearance often takes on a jagged or stair-step effect. This is especially true on monitors with a poor resolution and is referred to as aliasing.
Antialiasing is a desirable feature in a computer graphics system whereby the jagged or stair-step effect is automatically removed or reduced.
[SOURCE: PC-GLOSSARY 1993]

pgmImg'STANDARD#cptIt139#

name::
* McsEngl.pgmImg'STANDARD@cptIt,

BMP bitmap (Windows Paint),
CGM (Computer Graphics Metafile),
CLP (DOS for Quattro),
CIS
EPS (Encapsulated PostScript),
GIF (Graphics Interchange Format), CompuServe.
Jpeg: ΤΡΟΠΟΣ ΣΥΜΠΙΕΣΗΣ true color
PCX (Paintbrush)
Photo CD:
PIC (Lotus for DOS)
TGA Targa
TIF (Tag Image File Format)

pgmImg'Doing#cptCore475#

name::
* McsEngl.pgmImg'Doing@cptIt,

+++#cptIt444-18#

SPECIFIC

pgmImg.specific,

_SPECIFIC: pgmImg.ALPHABETICALLY:
* ADOBE ILLUSTRATOR#cptItsoft511#
* ADOBE PHOTOSHOP#cptItsoft765#
* ALDUS PHOTOSTYLER#cptItsoft766#
* ARTSHOW#cptItsoft523#
* CA-CRICKET IMAGE#cptItsoft544#
* CorelDraw!#cptItsoft582#
* DeltaGraph Professional#cptItsoft594#
* Freelance Graphics#cptItsoft621#
* halo Desktop Imager#cptItsoft634#
* Hijack#cptItsoft635#
* KS#cptItsoft665#
* MAPIT#cptItsoft945#
* METADESIGN#cptItsoft693#
* photoFinish#cptItsoft764#
* PICTURE PUBLISHER#cptItsoft767#
* SPIRALS#cptItsoft814#
* INTELLIDRAW#cptItsoft838#
* VCGM#cptItsoft1065#
* VgaTest#cptItsoft857#
* VIEWER#cptItsoft860#
* Vpic#cptItsoft869#

pgmImg.CAD/CAM/CAE/GIS#cptIt274 CAD#

name::
* McsEngl.pgmImg.CAD/CAM/CAE/GIS@cptIt,

pgmImg.ONLINE

name::
* McsEngl.pgmImg.ONLINE@cptIt,

_SPECIFIC:
* http://fotoflexer.com//
* http://pixlr.com//
* http://www.phixr.com//
* http://www134.lunapic.com/editor//

pgmImg.PAINTING

name::
* McsEngl.pgmImg.PAINTING@cptIt,

pgmImg.PHOTO

name::
* McsEngl.pgmImg.PHOTO@cptIt,

_SPECIFIC:
Adobe Photoshop
Corel Photo-Paint
Micrografx Picture Publisher
Adobe PhotoDeluxe
Micrografx Photo Magic
Microsoft Image Composer (ZD3/graphics)
Jasc Paint Shop Pro (ZD3/graphics)

pgmImg.PRESENTATION

name::
* McsEngl.pgmImg.PRESENTATION@cptIt,
* McsEngl.image-gallery@cptIt,
* McsEngl.pgmImg.slider@cptIt,

pgmImg.presentation.WEB

name::
* McsEngl.pgmImg.presentation.WEB@cptIt,

_ADDRESS.WPG:
* http://galleria.io// jQuery,

FlexSlider

_ADDRESS.WPG:
* http://www.woothemes.com/flexslider//
* https://github.com/woothemes/FlexSlider,

_CODE.LJS:
// Can also be used with $(document).ready()
$(window).load(function() {
$('.flexslider').flexslider({
animation: "slide"
});
});

_CODE.HML:
<!-- Place somewhere in the <body> of your page -->
<div class="flexslider">
<ul class="slides">
<li>
<img src="slide1.jpg" />
</li>
<li>
<img src="slide2.jpg" />
</li>
<li>
<img src="slide3.jpg" />
</li>
<li>
<img src="slide4.jpg" />
</li>
</ul>
</div>

pgmImg.SVG

Inkscape: A Linux, Windows & OSX vector graphics editor (SVG format) featuring transparency, gradients, node editing, pattern fills, PNG export, and more. Aiming for capabilities similar to Illustrator, CorelDraw, Visio, etc.

pgmImg.VIDEO

name::
* McsEngl.conceptIt28,
* McsEngl.video-program@cptIt,
* McsEngl.video-software@cptIt,
* McsEngl.program.video@cptIt28,

pgmVdo'DEFINITION

VIDEO PROGRAM είναι ένα πρόγραμμα που που επεξεργάζεται ή παίζει 'video' information.

ΧΡΗΣΙΜΟΠΟΙΕΙ 24 ΚΑΡΕ ΠΟΥ ΦΑΙΝΕΤΑΙ ΣΤΟ ΜΑΤΙ ΣΑΝ ΚΙΝΗΣΗ.

Complete Colour Solution, Rombo (Greek Software), packet hard and soft.

QuickTime 1.5 (Dec1992), Mac. 2 hours on a CD'ROM.
ΛΗΨΗ, ΑΝΑΠΑΡΑΓΩΓΗ, ΑΠΟΘΗΚΕΥΣΗ ΨΗΦΙΑΚΗΣ ΕΙΚΟΝΑΣ ΠΛΗΡΗΣ ΚΙΝΗΣΗΣ

ADSL {ASYMMETRIC DIGITAL SUBSCRIBER LINE} ΠΡΟΣΦΕΡΕΙ ΤΗ ΔΥΝΑΤΟΤΗΤΑ ΛΗΨΗΣ ΣΗΜΑΤΩΝ ΜΕΣΩ ΤΟΥ ΥΠΑΡΧΟΝΤΟΣ ΟΙΚΙΑΚΟΥ ΤΗΛΕΦΩΝΙΚΟΥ ΔΙΚΤΥΟΥ, ΑΦΟΥ ΠΡΟΣΤΕΘΕΙ Ο ΑΠΑΡΑΙΤΗΤΟΣ ΕΞΟΠΛΙΣΜΟΣ ΣΕ ΚΑΘΕ ΑΚΡΗ ΤΗΣ ΤΗΛΕΦΩΝΙΚΗΣ ΓΡΑΜΜΗΣ.

H BELL ATLANTIC ΤΟΝ ΧΡΗΣΙΜΟΠΟΙΕΙ ΣΤΟ IMTV {INTERACTIVE MULTIMEDIA TELEVISION}
[CGO, SEP 1993, 66]

pgmVdo'GENERIC

_GENERIC:
* desktop-appl#cptItsoft304#
* PROGRAM#cptIt59#

pgmVdo'Doing#cptCore475#

name::
* McsEngl.pgmVdo'Doing@cptIt,

+++#cptIt444-12#

pgmVdo'resourceInfHmn#cptResource843#

name::
* McsEngl.pgmVdo'resourceInfHmn@cptIt,

ΑΦΙΕΡΩΜΑ: VIDEO ΣΤΟ PC
[RAM 1998feb]

pgmVdo'STANDARD#cptIt139#

name::
* McsEngl.pgmVdo'STANDARD@cptIt,

Δεν υπάρχει καθιερωμένο στάνταρντ για videoCD.
[MULTIMEDIA-&-CD-ROM, JUL. 1994, 9#cptResource73]

pgmVdo'ENVIRONMENT#cptCore756#

name::
* McsEngl.pgmVdo'ENVIRONMENT@cptIt,

pgmVdo'VIDEO'HARDWARE#cptIt38#

name::
* McsEngl.pgmVdo'VIDEO'HARDWARE@cptIt,

SPECIFIC

* pgmVdo.specific,

_SPECIFIC:
* QuickTime#cptItsoft792#
* Video#cptIt859#
* WebPhone#cptItsoft1040#

pgmVdo.SCREENCASTING

name::
* McsEngl.pgmVdo.SCREENCASTING@cptIt,
* McsEngl.program.screencasting@cptIt,
* McsEngl.screencasting-program@cptIt,

_ADDRESS.WPG:
* http://www.1stwebdesigner.com/freebies/free-screencasting-tools-video-tutorials//

_DESCRIPTION:
Screencasting is a better and great way to showcase a procedure, to teach,demonstrate a service or to create video tutorials without having to write a content or an article. Screencasting tools are available both as desktop applications (Free and commercial) and web-based services. The good news is that there are a growing number of screencasting tools that are completely free to use; some do not even require a registration to let you get started.
Videos are simply great to deliver a message in a very short time and for most people bandwidth is not a problem any more.The following screencasting tools are all free to record screen but of course their features are not as much as paid ones.You can easily record your screen and add audio or edit your recorded screen videos with these tools.If you know more free tools then please denote in comments section.
[http://www.1stwebdesigner.com/freebies/free-screencasting-tools-video-tutorials/]

pgmVdo.ONLINE

name::
* McsEngl.pgmVdo.ONLINE@cptIt,

_ADDRESS.WPG:
* https://studio.stupeflix.com/videos//
* http://www.magisto.com//

pgmVdo.VIEWER

name::
* McsEngl.pgmVdo.VIEWER@cptIt,

Kantaris: 0.3.6 released
http://www.pheedo.com/click.phdo?i=be0621de6e432759a5e566b945063248
Kantaris Media Player is a all-in-one media player which tries to
provides the best media experience.Video playback is based on VLC code
which results in that it plays everything without the need of
installing any codecs.Contains beautiful music visuals. Kantaris 0.3.6
released This version only contains one major new feature; support for
non-western characters in subtitles. So now you should be able to use
your Arabic, Hebrew, Chinese, A~?a^‚¬A^¦ subtitles with Kantaris. Other
improvements: Added subtitles size setting Speed up file loading Saving
downloaded subtitles in the A~?a^‚¬A*“kantaris\cacheA~?a^‚¬ directory instead of in
the A~?a^‚¬A*“temporary internet filesA~?a^‚¬ folder Double-clicking for full
screen works again Hopefully fixed a bug caused by bass_fx.dll in Vista
64-bit ( I canA~?a^‚¬a^„?t test it) Fixed a bug with the listing of embedded
subtitles Uninstaller now removes file associations Probably some more
which I canA~?a^‚¬a^„?t remember right now.
2008-05-17

pgmVdo.VIDEO-CONCRENCING PROGRAMS

name::
* McsEngl.pgmVdo.VIDEO-CONCRENCING PROGRAMS@cptIt,
* McsEngl.videoconcrencing-program@cptIt,

GLOBALYST PC&C of AT&T.

pgmVdo.EDITING

name::
* McsEngl.pgmVdo.EDITING@cptIt,

ADOBE PREMIERE (6.0 ram 152)

Free

_ADDRESS.WPG:
* ivsEdits: http://www.ivsedits.com/default/compare.aspx,

pgmVdo.VLC

name::
* McsEngl.pgmVdo.VLC@cptIt,
* McsEngl.vlc-media-player@cptIt,

_ADDRESS.WPG:
* http://en.kioskea.net/faq/1266-extracting-the-sound-from-a-video-with-vlc,

pgmImg.VIEWER

name::
* McsEngl.pgmImg.VIEWER@cptIt,

_SPECIFIC:
* VCGM#cptItsoft1065#
* VgaTest#cptItsoft857#
* VIEWER#cptItsoft860#
* Vpic#cptItsoft869#

FvMcs.Cmrpgm.Dentist-Office-management

name::
* McsEngl.conceptIt111,
* McsEngl.Cmrpgm.Dentist-Office-management@cptIt,
* McsEngl.FvMcs.Cmrpgm.Dentist-Office-management@cptIt,
* McsEngl.dentist-office-management-program@cptIt,
* McsEngl.program.DentistOffice@cptIt111,

FvMcs.Cmrpgm.Drugstore-Management

name::
* McsEngl.conceptIt123,
* McsEngl.Cmrpgm.Drugstore-Management@cptIt,
* McsEngl.FvMcs.Cmrpgm.Drugstore-Management@cptIt,
* McsEngl.drugstore-management-program@cptIt,
* McsEngl.program.drugstoreManagement@cptIt123,

GENERIC

_GENERIC:
business-management PROGRAM#cptIt279#

FvMcs.Cmrpgm.MULTIMEDIA

name::
* McsEngl.conceptIt154,
* McsEngl.Cmrpgm.MULTIMEDIA@cptIt,
* McsEngl.FvMcs.Cmrpgm.MULTIMEDIA@cptIt,
* McsEngl.multimedia-program@cptIt,
* McsEngl.program.multimedia@cptIt154,

FvMcs.Cmrpgm.DATABASE.ONLINE

name::
* McsEngl.conceptIt195,
* McsEngl.Cmrpgm.DATABASE.ONLINE@cptIt,
* McsEngl.FvMcs.Cmrpgm.DATABASE.ONLINE@cptIt,
* McsEngl.database.online@cptIt195,
* McsEngl.online-database@cptIt,
* McsEngl.online'database@cptIt195,
* McsEngl.on-line-database@cptIt,
* McsEngl.online-ΒΑΣΗ-ΔΕΔΟΜΕΝΩΝ@cptIt,

DEFINITION

ONLINE DATABASE είναι κάθε βάση δεδομένων, στην οποία έχει πρόσβαση πολύς κόσμος.

GENERIC

_GENERIC:
* program-database,
* program-net#cptIt350#

CHARGE

EVOLUTION#cptCore546.171#

{time.1972 DIALOG:
ΕΜΦΑΝΙΖΕΤΑΙ Η ΕΤΑΙΡΙΑ host DIALOG ΚΑΙ Ο ΟΡΟΣ "on line ΕΜΠΟΡΙΚΕΣ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ" ΓΕΝΙΕΤΑΙ.

{time.1980 NEXIS:
ΔΗΜΙΟΥΡΓΕΙΤΑΙ Η ΠΡΩΤΗ full text on line ΒΑΣΗ ΔΕΔΟΜΕΝΩΝ, η NEXIS.

{time.1992 QUANTITY:
ΓΥΡΩ ΣΤΟ 1986 ΜΕ 1987 ΥΠΗΡΧΑΝ ΠΑΝΩ ΑΠΟ 3.500 ΣΕ ΟΛΟ ΤΟ ΚΟΣΜΟ, ΕΝΩ ΣΗΜΕΡΑ Ο ΑΡΙΘΜΟΣ ΑΥΤΟΣ ΞΕΠΕΡΝΑ ΤΙΣ 20.000, ΚΑΤΙ ΠΟΥ ΥΠΟΓΡΑΜΙΖΕΙ ΤΟΝ ΕΝΤΟΝΟ ΡΥΘΜΟ ΑΝΑΠΤΥΞΗΣ ΤΕΤΟΙΩΝ ΣΥΣΤΗΜΑΤΩΝ

Doing#cptCore475#

INTEGRATED-DEVELOPMENT-ENVIRONMENT#cptIt430#

language of the contents.

PRODUCER

VENDOR/PHONE

name of vendor, country, phone.

UPDATE

PRODUCTION COST

measure#cptCore88#

ΞΕΝΕΣ:
ΣΗΜΕΡΑ (1992) ΣΤΟ ΕΞΩΤΕΡΙΚΟ ΥΠΑΡΧΟΥΝ ΠΑΝΩ ΑΠΟ 5.000 ΔΙΑΘΕΣΙΜΕΣ ON LINE ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ.

SUBJECT

Το περιεχόμενο της βασης. Το είδος της πληροφορίας.


BUSINESS:
EDUCATION:
ENVIRONMETAL DATABASES:
GENERAL INFORMATION:
HEALTH:
INFORMATION TECHNOLOGIES:
LEGISLATION/LAW:
PUBLICATIONS:
SCIENCE:
TOURISM:

VOLUME OF DATA

SPECIFIC


ΕΛΛΗΝΙΚΕΣ, |195| vendor:greece.

SPECIFIC(alphabetikal order)

ΕΛΛΑΣLEX/HELLASLEX

_DEFINITION: LAW. Νομική βιβλιογραφία και νομολογια. Με την εποπτεία του δικηγορικού συλλόγου.

VENDOR: Greece.

ΜΝΗΜΗ ΑΠΕ DATABASES

_DEFINITION: news, Βιογραφίες ελληνικών πολιτικών, Ελληνικές εκλογές, Χώρες. Αθλητικά

PRODUCER: ΑΠΕ(Αθηναικο πρακτορείο ειδήσεων).

ΚΑΠΑ ΤΕΛ databases

_DEFINITION: news, δρομολόγια, ψυχαγωγία, χρηματιστήριο. Σύνδεση με MINITELNET (France), TRANSNET (Switzerland).

VENDOR: ΚΑΠΑ ΤΕΛ online σύστημα.

ΝΟΜΟΣ: jumd195.1

name::
* McsElln.ΝΟΜΟΣ: jumd195.1;@cptIt,
* McsElln.ΝΟΜΟΣ@cptIt,

_DEFINITION: Περιέχει
- ΤΗ ΝΟΜΟΘΕΣΙΑ ΑΠΟ ΣΥΣΤΑΣΕΩΣ ΤΟΥ ΕΛΛΗΝΙΚΟΥ ΚΡΑΤΟΥΣ.
- ΤΗ ΝΟΜΟΛΟΓΙΑ, 1988-93 ΠΛΗΡΕΣ ΚΕΙΜΕΝΟ, ΠΡΙΝ 1988 ΣΕ ΠΕΡΙΛΗΨΕΙΣ.
- ΒΙΒΛΙΟΓΡΑΦΙΑ.

FUNCTIONS: Προσφέρει
- δυνατότητα εμφάνισης του ισχύοντος και του προϊσχύοντος δικαίου με τρόπο ιδιαίτερα φιλικό προς τον χρήστη,
- αλληλοσύνδεση της νομοθεσίας, της νομολογίας και της νομικής βιβλιογραφίας.

HISTORY: 1994 διατέθηκε στην αγορά.

LANGUAGE: greek.
Πρόσφατη πολυγλωσσικό περιβάλον που μετράει ιδιαίτερα στον ευρωπαϊκό χώρο. [ΚΑΘΗΜΕΡΙΝΗ, 26 ΙΟΥΝ. 1994, 56]

PRODUCER: Intrasoft.

UPDATE:
η ενημέρωση στη νομοθεσία γίνεται το αργότερο σε 15 μέρες απο τη δημοσίευση στο ΦΕΚ, ενώ στη νομολογία γίνεται ένα μήνα μετά την καθαρογραφή των σημαντικών αποφάσεων.

VENDOR:
DATABANK THL-649.4830.

PRODUCTION COST: 1 ΔΙΣ ΔΡΧ.

VOLUME OF DATA: 5GB.

21 CFR ONLINE

_DEFINITION:
VENDOR: BRS, DATA.STAR. 301-881.2100.

ABI/INFORM

_DEFINITION: science, business.
Contains more than 500.000 citation that provide complete
 bibliographic information,
 indexing,
 abstracts, and
 selected full'text articles
from more than 1000 BUSINESS JOURNALS.
TIME: 20 YEARS PAST.

PRODUCER:  UMI/DATA COURIER

VENDOR: 800-626.2823 BRS, DATA'STAR, DIALOG, INFO GLOBE, OCLC, HRIN, ORBIT, THOMSON FINANCIAL NETWORKS,

UPDATE: 2000 new articls each week

BIRTH DEFECTS ENCYCLOPEDIA:

_DEFINITION: HEALTH.

VENDOR: on BRS INFORMATION TECHNOLOGIES.

BIX databases

_DEFINITION: information'technology, BYTE information.

CHARGE: $13 per month. $3 per hour via Tymnet.

VENDROR: General Videotex Corporation 1-800-695-4882, 617-491-3342

BOOKS IN PRINT:

_DEFINITION:
VENDOR: BTS, DIALOG.

BUSINESS AMERICA ONLINE:

_DEFINITION: business. info on 10 million usa business.

VENDOR: 402-593.4593.

CAREER PLACEMENT REGISTRY:

_DEFINITION: business. THOUSANDS OF RESUMES.

VENDOR: on DIALOG.

CELEX

_DEFINITION: LAW. ΠΕΡΙΛΑΜΒΑΝΕΙ ΟΛΟ ΤΟ ΚΟΙΝΟΤΙΚΟ ΔΙΚΑΙΟ
VENDOR: Luxembourg.

COMPULINK DATABASES

_DEFINITION:
COMPUBANK: εταιρίες πληροφορικής.
ΗΛΕΚΤΡΟΝΙΚΗ ΒΙΒΛΙΟΘΗΚΗ: full text για COMPUTER ΓΙΑ ΟΛΟΥΣ, PIXEL, PC MASTER, CAD/CAM & GRAPHICS, ΣΥΓΧΡΟΝΗ ΕΠΙΧΕΙΡΗΣΗ, ΤΟΥΡΙΣΤΙΚΗ ΑΓΟΡΑ, INFORMATION.

VENDOR: Compulink online information services. Greece.

COMPUTER DATABASE/ASAP:

_DEFINITION: information'technology. From 150 journals.

VENDOR: on DIALOG, COMPUSERVE, DATA'STA, NEXUS, DOW JONES NEWS RETRIEVAL.

UPDATE: 1500 records add per week.

COMPUTERIZED AIDS INFORMATION NETWORK

_DEFINITION: HEALTH.

VENDOR: DELPHI.

DIALOG databases

_DEFINITION: είναι ίσως η μεγαλύτερη και η παλαιότερη τραπεζα πληροφοριών στον κόσμο. 400 databases με τεραστιο φάσμα θεμάτων. Πάνω απο 300.000.000 εγγραφές.
Σε λίγο καιρό θα έχει και τις βάσεις δεδομένων της datastar, που είναι μια πλέον εταιρία(1994)

HISTORY: Ιδρύθηκε το 1972 στο Palo Alto of California.

VENDOR: ΠΡΩΤΟΓΕΝΕΙΑ Ηλεκτρονικά Συστήματα Τηλεπληροφόρησης ΕΠΕ. Greece.

DUN'S ELECTRONIC BUSINESS DIRECTORY:

name::
* McsEngl.DUN'S ELECTRONIC BUSINESS DIRECTORY:@cptIt,

_DEFINITION: business. 9.6 MILLION COMPANIES.

ELECTRONIC WHITE PAGES:

_DEFINITION: 120 MIL LISTINGS.

UPDATE: Updated daily. on DIRECTORYNET.

EPOQUE

_DEFINITION: lagislation. Η ΒΑΣΗ ΤΟΥ ΕΥΡΩΠΑΙΚΟΥ ΚΟΙΝΟΒΟΥΛΙΟΥ
VENDOR: Luxembourg.

ERIC {EDUCATION RESOURCES INFORMATION CENTER}

_DEFINITION:
VENDOR: on BRS, DIALOG, KNOWLEDGE INDEX, OCLC.
UPDATE: It is updated monthly.

ESA-IRS/European space agency - Information retrieval service; databases

_DEFINITION: science. 30.000.000 records multidisciplinary. ESA-IRS ΕΙΝΑΙ Η ΜΕΓΑΛΥΤΕΡΗ ΒΑΣΗ ΔΕΔΟΜΕΝΩΝ ΤΗΣ ΕΥΡΩΠΗΣ ΚΑΙ ΜΙΑ ΑΠΟ ΤΙΣ ΜΕΓΑΛΥΤΕΡΕΣ ΕΠΙΣΤΗΜΟΝΙΚΕΣ ΒΑΣΕΙΣ ΣΤΟΝ ΚΟΣΜΟ.
SERVICES:
 ESA-QUEST: ΕΥΡΕΣΗ ΠΛΗΡΟΦΟΡΙΩΝ ME TO CAS {CURRENT AWARENESS SERVICES}
 DOWNLOADING.
 ΗΛΕΚΤΡΟΝΙΚΟ ΤΑΧΥΔΡΟΜΕΙΟ, DDS.
 ΠΑΡΑΓΓΕΛΙΑ ΕΓΓΡΑΦΩΝ (PRIMORDIAL).

HISTORY: CREATION: 1966.

PRODUCER: European Space angency: Esrin - C.P. 64, 00044 Frascati (Rome), ITALY.

EVENTLINE

_DEFINITION:
VENDOR: on DIALOG.

HEALTHNET REFERENCE LIBRARY:

_DEFINITION: HEALTH.

VENDOR: COMPUSERVE.

FT PROFILE INFORMATION

_DEFINITION: business, economic. NEWS. SCIENCE.

VENDOR: ΔΗΛΟΣ ΕΠΙΚΟΙΝΩΝΙΕΣ ΕΠΕ. Greece.

PRODUCER: του οργανισμού που εκδίδει τη Financial times.

UPDATE: καθημερινά.

ICAP DATABANK

_DEFINITION: business, economic. Περιέχει επεξεργασμένα στοιχεία για περισσότερες απο 120.000 ελληνικές επιχειρήσεις. Παρουσιάζει ισολογισμούς και αποτελέσματα χρήσης.

CHARGE: Η χρέωση γίνεται με μορφή κουπονιών που καταναλώνονται ανάλογα με τις αναζητήσεις και την τελική λήψη πληροφοριών απο το χρήστη.

HISTORY: Η συλλογή πληροφοριών ξεκίνησε από το 1964.

INFORMATION USA+:

_DEFINITION:
VENDOR: COMPUSERVE.

LEGAL RESEARCH CENTER:

_DEFINITION: LAW,
VENDOR: COMPUSERVE.

LEXIS

_DEFINITION: LAW. Η ΜΕΓΑΛΥΤΕΡΗ ΕΠΙΣΗΜΗ ΒΑΣΗ,
VENDOR: MDC 044-71-4044097

MAGAZINE INDEX

_DEFINITION: 500 general interest magazines.
VENDOR: on COMPUSERVE, DATA'STAR, DIALOG.

McGraw-Hill publications online

_DEFINITION: 35 publications full-text
VENDOR: 609-4265523...

NATIONAL NEWSPAPER INDEX

_DEFINITION: THE NEW YORK TIMES, THE LOS ANGELES TIMES, THE WALL STREET JOURNAL, THE WASHINGTON POST, CHRISTIAN SCIENCE MONITOR.

VENDOR: on COMPUSERVE, DATA'STAR, DIALOG.
UPDATE: MONTHLY

NEWSBYTES NEWS NETWORK

_DEFINITION: information'technology.
VENDOR: on AMERICA ONLINE, APPLELINK, DIALOG, GENIE, NEWSNET.

PAIS INTERNATIONAL

_DEFINITION:

PHILOSOPHERS'S INDEX DATABASE:

name::
* McsEngl.PHILOSOPHERS'S INDEX DATABASE:@cptIt,

_DEFINITION: SCIENCE.
VENDOR: DIALOG, KNOWLEDGE INDEX.

PRODUCTSCAN:

_DEFINITION: business.

VENDOR: on DIALOG.

RIO

_DEFINITION: θα περιεχει πληροφοριες για διαφορα κοινοτικα ερευνητικα προγραμματα.
[βημα 5 Ιουλ 92]
LANGUAGE:
PRODUCER: INTRASOFT.
VENDOR/PHONE:
UPDATE:

SPACE/ASTRONOMY:

_DEFINITION: SCIENCE.
VENDOR: COMPUSERVE.

SCICON

_DEFINITION: ΚΟΙΝΟΒΟΥΛΕΥΤΙΚΟ ΣΥΣΤΗΜΑ ΒΡΕΤΑΝΙΑΣ
VENDOR: 044-908-585858,

SCOOLMATCH:

_DEFINITION: education. 16000 public and 9000 private scholls.

VENDOR: HRIN.

TRAINING MEDIA DATABASE

_DEFINITION:

WESTLAW:

_DEFINITION: LAW
VENDOR: USA.

FvMcs.Cmrpgm.VIEWER

name::
* McsEngl.conceptIt228,
* McsEngl.Cmrpgm.VIEWER@cptIt,
* McsEngl.FvMcs.Cmrpgm.VIEWER@cptIt,
* McsEngl.viewer-program@cptIt,
* McsEngl.file-viewer-program@cptIt,
* McsEngl.program.viewer@cptIt228,

DEFINITION

VIEWER-PROGRAM I call any APPLICATION-PROGRAM#cptIt304.1# that sees the contents of any FILE#cptIt354#.
[nikos, 1997dec26]

GENERIC

_GENERIC:
* desktop-appl#cptItsoft304#
* PROGRAM#cptIt59#

SPECIFIC


IMAGE VIEWER
TEXT-VIEWER-PROGRAM#cptItsoft1043: attSpe#

QUICK-VIEW
** ANY FILE
** \PROGRAMS...\VIEWERS\QUICKVU.EXE

FvMcs.Cmrpgm.ANIMATION

name::
* McsEngl.conceptIt230,
* McsEngl.Cmrpgm.ANIMATION@cptIt,
* McsEngl.FvMcs.Cmrpgm.ANIMATION@cptIt,
* McsEngl.animation-application-program@cptIt,
* McsEngl.animation-application-software@cptIt,
* McsEngl.program.animation@cptIt230,
* McsElln.ΠΡΟΓΡΑΜΜΑ-ΚΙΝΟΥΜΕΝΟΥ-ΣΧΕΔΙΟΥ@cptIt,

DEFINITION

ΠΑΡΑΓΩΓΙΚΟΣ ΟΡΙΣΜΟΣ:
ΠΡΟΓΡΑΜΑ ΚΙΝΟΥΜΕΝΩΝ ΣΧΕΔΙΩΝ Είναι κάθε ΠΡΟΓΡΑΜΑ ΕΦΑΡΜΟΓΩΝ που εκτελεί τη λειτουργια 444-3.

ΠΡΟΓΡΑΜΜΑΤΑ ΚΙΝΟΥΜΕΝΟΥ ΣΧΕΔΙΟΥ ονομάζω <προγράμματα εφαρμογων> με ΛΕΙΤΟΥΡΓΙΑ τη δημιουργία, τροποποίηση, παρουσίαση κινουμένων σχεδίων
[ΝΙΚΟΣ, 27 ΣΕΠΤ. 1994]

STANDARD#cptIt139#

FLI (Autodesk)

Doing#cptCore475#

#cptIt444-3#

GENERIC

_GENERIC:
* PROGRAM#cptIt59#

resource

_SPECIFIC:
* http://www.practicalecommerce.com/articles/3813-20-Tools-for-Animation,

SPECIFIC

Specific_concepts (level 3) =

_SPECIFIC:
* 3D Studio#cptItsoft503: attSpe#
* Aaplay#cptItsoft506: attSpe#
* Animator Pro#cptItsoft516: attSpe#
* Autodesk Animator#cptItsoft531: attSpe#
* MacroMind Director#cptItsoft684: attSpe#
* mciaap.drv#cptItsoft690: attSpe#
* pivot##

FvMcs.Cmrpgm.AUDIO

name::
* McsEngl.conceptIt247,
* McsEngl.Cmrpgm.AUDIO@cptIt,
* McsEngl.FvMcs.Cmrpgm.AUDIO@cptIt,
* McsEngl.audio'program@cptIt247,
* McsEngl.program.audio@cptIt247,
* McsEngl.sound-program@cptIt,

GENERIC

_GENERIC:
* desktop-appl#cptItsoft304#
* PROGRAM#cptIt59#

STANDARD#cptIt139#

CFM,

CMS,

MOD: αρχεια που χρησιμοποιουνται απο Commodore & atari υπολογιστες.

STM,

WRK,

Doing#cptCore475#

+++#cptIt444-12#

AUDIO-HARDWARE#cptIt40: attPar#

SOUND SOURCES

waveform (.wav,) MIDI, CD

SPECIFIC

Specific_concepts (level 3) =

PROGRAMS#ql:cptIt247# {itsoft.nfo}

speech output/ΣΥΝΘΕΣΗ ΦΩΝΗΣ

speech recognition/ΑΝΑΓΝΩΡΙΣΗ ΦΩΝΗΣ

EDITOR

Audacity: sound editor 1.3.5 released
http://www.pheedo.com/click.phdo?i=f958980422259cb647c9d4bce777cb9e
A fast multi-track audio editor and recorder for Linux, BSD, Mac OS,
and Windows. Supports WAV, AIFF, Ogg, and MP3 formats. Features include
envelope editing, mixing, built-in effects and plug-ins, all with
unlimited undo. The Audacity Team is pleased to announce the release of
Audacity 1.3.5 (beta) for Windows, Mac and Linux/Unix. Changes include
improvements and new features for recording, import/export and the user
interface. See http://audacity.sourceforge.net/ for details.

VERBEX VOICE SYSTEMS

VERBEX'VOICE'SYSTEM: Η ΕΤΑΙΡΙΑ ΑΥΤΗ ΑΝΕΠΤΥΞΕ INTERFACES ΠΟΥ ΜΠΟΡΟΥΝ ΝΑ ΑΝΑΓΝΩΡΙΣΟΥΝ ΦΩΝΗ ΧΡΗΣΤΗ ΓΙΑ 9 ΓΝΩΣΤΕΣ ΕΦΑΡΜΟΓΕΣ: Microsoft office, wordperfect, coreldraw, autocad. $100.
[CGO, OCT 1993, 64]#

SUBGENERAL

Voice Recognition Software
Talking to Your PC
Recap PC Magazine took a look at voice recognition software in the March 25, 1997, 15th Anniversary issue, "The PC of the Future". (09/09/97) -- Voice recognition software has finally caught up with the way we speak. You no longer need to pause deliberately between words, because the newest technology--continuous voice recognition--lets you talk naturally and at a normal pace.

www.dragonsys.com
Dragon Systems (800-825-5897, 617-965-5200) is the first company to implement this long-awaited improvement. Dragon NaturallySpeaking ($700 street) claims a 95 percent accuracy rate of words recognized and spelled correctly, and it features a vocabulary comprising the 30,000 most commonly used words in the English language. It also comes with a customizable backup dictionary of 230,000+ words. In addition, NaturallySpeaking's select-and-say approach allows you to edit and format as easily as you dictate. Other handy features include Pronunciation Guesser and Dictation Shorthands. Dragon plans to reduce the price of the software by the end of the summer.

IBM (800-825-5263) has recently released Simply Speaking Gold ($100 street) and ViaVoice ($200 street). Simply Speaking Gold, IBM's successor to Simply Speaking, can recognize speech containing slight pauses between words. It also enables the computer to read back the text you've input. IBM claims its product has a 97% accuracy rate (on average) and a dictation speed of 70 to 100 words per minute. Simply Speaking Gold comes with a 24,000-word vocabulary (expandable to 64,000 words). You also have the ability to make corrections by simply saying them rather than typing them.
ViaVoice takes Simply Speaking Gold one step further by including the new continuous voice recognition technology. You can speak to the computer in a normal voice as if you were talking to a person. An improved version, ViaVoice Gold, is planned for release by the end of the year.

www.kurzweil.com
Kurzweil Applied Intelligence Inc. (617-893-5151), the other major player in the voice recognition software market, was recently acquired by Lernout & Hauspie, an international firm specializing in speech and language technology. Plans are in the works to release a continuous voice recognition product by the end of this year. --
Yvonne Koulouthros
Copyright (c) 1997 Ziff-Davis Inc. 1997aug

FvMcs.Cmrpgm.HYPERTEXT

name::
* McsEngl.conceptIt255,
* McsEngl.Cmrpgm.HYPERTEXT@cptIt,
* McsEngl.FvMcs.Cmrpgm.HYPERTEXT@cptIt,
* McsEngl.hypertext@cptIt255,
* McsEngl.hypertext program@cptIt,
* McsEngl.hypertext system@cptIt,
* McsEngl.hypertext technology@cptIt,
* McsEngl.program.hypertext@cptIt255,
* McsElln.ΥΠΕΡΚΕΙΜΕΝΟ@cptIt255,

The term "hypertext" was coined by Ted Nelson in 1965.
[McAleese, 1989, 93#cptResource714]

DEFINITION

HYPERTEXT I call any DOCUMENT-MANAGEMENT-PROGRAM#cptIt426.1# that keep information not serially, but in a network of nodes with links.
[NIKOS, MAR. 1995]

HYPERTEXT ονομάζω το 'πρόγραμα' που φυλάει πληροφορίες όχι σειριακά, η μία μετά την άλλη, αλλά σε ένα δίκτυο από κόμβους με ενώσεις μεταξύ τους.
Οι 'πληροφορίες' είναι 'κείμενο'. ΑΝ είναι και άλλος τύπος όπως ήχος, εικόνα, βίντεο ΤΟΤΕ είναι και multimedia.
[ΝΙΚΟΣ, ΙΟΥΝ 1994]

The central notion of a hypertext system is of linking chunks of information together.
[McAleese, 1989, 7#cptResource714]

Hypertext is an approach to information management in which data is stored in a network of nodes connected by links. Such nodes can contain multimedia, classical data, text, image, graphics, audio, video, source code, or other forms.
[Chorafas, 1990, 284#cptResource444]

hypertext'GENERIC

_GENERIC:
* DOCUMENT_MANAGEMENT_PROGRAM#cptIt426#
* PROGRAM#cptIt59#

hypertext'ENVIRONMENT#cptCore756#

name::
* McsEngl.hypertext'ENVIRONMENT@cptIt,

ENVIRONMENT: hypertext & AI#cptIt497.6#

name::
* McsEngl.ENVIRONMENT: hypertext & AI@cptIt,

As nodes and links become more and more structured and more and more meanignful, the nature of the system changes progressively from being hypertext to being a kind of knowledge representation style known as a SEMANTIC NETWORK.
[McAleese, 1989, 155#cptResource714]

A major type of application of AI is the building of expert systems. Expertise is often conyeyd in documents; so there is a natural fit between the technology of expert systems and the technology of hyperdocuments.
[Martin, 1990, 20#cptResource134]#

hypertext'APPLICATION#cptIt97#

name::
* McsEngl.hypertext'APPLICATION@cptIt,

uses

1. Presentations. Better communication with staff and customers.
2. Training.
3. Education.

HYPERDOCUMENT

name::
* McsEngl.hyperdocument@cptIt,
* McsEngl.hypertext-document@cptIt,

HYPERDOCUMENT είναι η πληροφορία που έχει γραφτεί με χαϊπερτέξτ προγράματα.

hypertext'BOOKMARK

name::
* McsEngl.hypertext'BOOKMARK@cptIt,

Με αυτη τη δυνατοτητα βάζουμε σημαδια σε NODES που χρησιμοποιούμε συχνα και ανοίγοντας το bookmark έχουμε γρήγορη προσπέλαση σε αυτά τα nodes.

To windows help έχει αυτο το χαρακτηριστικό.

hypertext'CONFERENCES

name::
* McsEngl.hypertext'CONFERENCES@cptIt,

1987: an event that really marked the graduation of hypertext from a pet project of a few fanatics to widespread popularity was the FIRST ACM conference on hypertext, Hypertext'87, held at the university of North Carolina on November 13-15, 1987.
[Nielsen, 1990, 40#cptResource712]

1988 march: Hypertext 1
took place in the teaching centre of the University of Aberdeen on Thursday and Friday, 17th and 18th march 1988. The conference was organised in Aberdeen by teh Interactive Learning Systems Special Interest Group of the Alvey HCI Club (UK).
[McAleese, 1989, vii#cptResource714]

1988 june: the ASLIB conference on Hypertext, 30th June 1988, London.
[McAleese, 1989, 44#cptResource714]

hypertext'DICTIONARY

name::
* McsEngl.hypertext'DICTIONARY@cptIt,

Η Compton's Family Encyclopedia έχει ενα σύστημα όπου μέσα σε κάθε άρθρο είχες πρόσβαση σε λεξικο για ΚΑΘΕ λέξη μέσα στο άρθρο κάνοντας διπλό κλικ σε οποιαδήποτε λέξη.

hypertext'EDITING

name::
* McsEngl.hypertext'EDITING@cptIt,

Είναι καλό το Χάιπερτεξτ πρόγραμμα να περιέχει και κάποιο editor with eg search and replace capabilities.

hypertext'EVALUATION#cptCore546.107#

name::
* McsEngl.hypertext'EVALUATION@cptIt,

ADVANTAGES

It may well be that many of the major advantages of hypertext will not become apparent until we have such great hypertexts integrating major fields of human knowledge.
[Nielsen, 1990, 192#cptResource712]

1) Savings on production costs.
2) Improve accuracy and timeliness.
3) Networks can serve many readers with one copy.
4) Updating paper documents is expensive, time consuming, and error-prone.

COMPARED TO PAPER

There is no clear evidence for whether hypertext is in fact superior to paper. For some applications hypertext tested better, but for other applications paper tested better than the current generation of hypertext.
[Nielsen, 1990, 190#cptResource712]

COST:
the cost of digital storage is much cheaper than the cost of paper. Today this cost difference is realizable only with large documents... A CDROM can hold the equivalent of hundreds of books and be mass-produced for the price of one book (the price of a music CD).
[Martin, 1990, 10#cptResource716]

NAVIGATION:
Paper documents provide
- a table of contents and
- an index.
Hyperdocuments can provide far more useful ways to navigate through complex or bulky information.
[Martin, 1990, 12#cptResource716]

SPACE:
the documentation for a jet fighter weighs more than the plane.
[Martin, 1990, 10#cptResource716]

UPDATING:
Paper updates are sent out which the recipient is supposed to insert into the appropriate place in the document binders. Often updates are never inserted. This maintenance problem is avoided if the documentation is on CD-ROM and a current version of the disk is sent out periodically.
[Martin, 1990, 10#cptResource716]

DISADVANTAGES#cptIt468#

COMPARED WITH PAPER DOCUMENTS

- 30% slower reading speed on current displays.
- lower resolution graphics.
- not portable.
- overhead in heaving to learn system and setting up computer.
- not user interface standard.
- no regular publishing channels, bookshops, libraries ISBN, etc.
- no "romance" first editions, leather binding, etc.
- computer text "homogenized".
[Nielsen, 1990, 191#cptResource712]

COMPARED WITH TRADITIONAL COMPUTER SYSTEMS

- possible spaghetti structure.
- no central definition of the structure of the data, and therefore no easy way to specify general actions or computations on the data.
[Nielsen, 1990, 191#cptResource712]

hypertext'EVOLUTION#cptCore546.171#

name::
* McsEngl.hypertext'EVOLUTION@cptIt,

1945 MEMEX:
Vannevar Bush proposes Memex
[Nielsen, 1990, 120#cptResource712]

1965 NAME HYPERTEXT:
Ted Nelson coins the word "Hypertext".
[Nielsen, 1990, 120#cptResource712]
But Nelson attributes the underlying concepts to Vannevar Bush who presented his ideas in a classic article on Memex.
[McAleese, 1989, 93#cptResource714]

1967: HYPERTEXT EDITING SYSTEM:
It was the world's first working hypertext system. It ran in a 128K memory partition on a small IBM/360 mainframe and was funded by an IBM research contract... at Brown University ... under the leadership of Andries van Dam.
[Nielsen, 1990, 35#cptResource712]

1986 GUIDE
Office Workstations Limited introduced Guide. It was the first to run on PCs.

1987 HYPERCARD.
Apple introduces it.

1989 HYPERMEDIA JOURNAL:
The year 1989 saw the birth of the first scientific journal devoted to hypertext, HYPERMEDIA, published by Taylor Graham.

hypertext'Doing#cptCore475#

name::
* McsEngl.hypertext'Doing@cptIt,

hypertext#cptIt444-27#

hypertext'GOAL#cptIt215#

name::
* McsEngl.hypertext'GOAL@cptIt,

EXPLOTION OF SCIENTIFIC INFORMATION:
The main reason Vannevar Bush (1890-1974) developed his proposal for the Memex was that he was worried about the expotion of scientific information which made it impossible even for specialists to follow developments in a discipline.
[Nielsen, 1990, 120#cptResource712]

LEARNING:
One of the aims of hypertext is to enhance existing learning strategies.
[McAleese, 1989, 22#cptResource714]

hypertext'HISTORY/TRAIL

name::
* McsEngl.hypertext'HISTORY/TRAIL@cptIt,

The WINDOWS help system has the history feature.

hypertext'LINK

name::
* McsEngl.hypertext'LINK@cptIt,
* McsEngl.hyperlink@cptIt,
* McsEngl.hypertext-links@cptIt,
* McsEngl.hyperlink@cptIt,

hyperlink'departure

name::
* McsEngl.hyperlink'reference@cptIt,
* McsEngl.hyperlink'departure@cptIt,

hyperlink'destination

name::
* McsEngl.hyperlink'destination@cptIt,

hyperlink'direction

name::
* McsEngl.hyperlink'direction@cptIt,

SPECIFIC

name::
* McsEngl.hyperlink.specific@cptIt,

_SPECIFIC:
* external,
* FIXED & DYNAMIC LINKS.
* inline,

hyperlink.BIDIRECTIONAL

name::
* McsEngl.hyperlink.BIDIRECTIONAL@cptIt,

BIDIRECTIONAL links.
You can go to ALL other paths through which you went there.

hyperlink.LOCATION

name::
* McsEngl.hyperlink.LOCATION@cptIt,
* McsEngl.anchor-link@cptIt,
* McsEngl.location-link@cptIt,
* McsEngl.position-link@cptIt,
* McsEngl.linkLocation@cptIt,
* McsEngl.location-link@cptIt,
* McsEngl.place-link@cptIt,
* McsEngl.position-link@cptIt,
* McsEngl.space-link@cptIt,

* McsEngl.linkL@cptIt,

_DESCRIPTION:
1) We name a location in a document.
2) We create a link to that location.

_SPECIFIC:
* html-a-element#ql:htmlelt.a#

hyperlink.MANUAL-AND-AUTOMATIC

name::
* McsEngl.hyperlink.MANUAL-AND-AUTOMATIC@cptIt,

We are doubtful whether the present manual methods for creating the links between elements of hypertext will prove to be viable. Such links are more restrictive than the keywords used in many computer based bibliographies; they present barries to the exploration of hyperspace and are cumbersome to introduce and to manage even in small systems.
[McAleese, 1989, 164#cptResource714]

hyperlink.ONE-DIRECTION

name::
* McsEngl.hyperlink.ONE-DIRECTION@cptIt,

Almost ALL current hypertext systems are limiting to providing one directional links... This means that the system can show the user the links that have the current node as their departure point but not the ones that have it as their arrival point. In other words, the system will tell you where you can go next BUT not in what alternative ways you might have arrived at where you are now.
[Nielsen, 1990, 3#cptResource712]

hyperlink.PROGRAM

name::
* McsEngl.hyperlink.PROGRAM@cptIt,
* McsEngl.linkPrgogram@cptIt,
* McsEngl.linkP@cptIt,

hyperlink.QUERY

name::
* McsEngl.hyperlink.QUERY@cptIt,
* McsEngl.linkQuery@cptIt,
* McsEngl.linkQ@cptIt,
* McsEngl.querylink@cptIt,

_DESCRIPTION:
A link that contains a query. IF the-query is unique, then it behaves like linkLocation.
[hmnSngo.2015-05-09]

hypertext'OVERVIEW/NAVIGATION#cptIt236#@cptIt236

name::
* McsEngl.hypertext'OVERVIEW/NAVIGATION#cptIt236#@cptIt236,

hypertext'PROBLEMS#cptIt466#

name::
* McsEngl.hypertext'PROBLEMS@cptIt,

The three most common problems are
- links to nodes which do not exist.
- nodes which are not linked at all and are therefore inaccessible, and
- nodes which are inadvertently linked to themselves.
[McAleese, 1989, 145#cptResource714]

hypertext'Rrepresentation-method

_CREATED: {2007-08-08}

name::
* McsEngl.hypertext'Rrepresentation-method@cptIt,
* McsEngl.conceptIt255.1,
* McsEngl.hypertext-language@cptIt255.1,
* McsEngl.hypertext-representation@cptIt255.1,
* McsEngl.hypertext-representation-paradigm@cptIt255.1,

hypertext'measure#cptCore88#

name::
* McsEngl.hypertext'measure@cptIt,

STATUS:
The current hypertext market seems to be mostly focused on sales of systems and features instead of actual content.
[Nielsen, 1990, 182#cptResource712]

SHORT TERM FUTURE:
I expect to see two major changes:
- the emergence of a mass market for hypertext,
- the integration of hypertext and other computer facilities.
[Nielsen, 1990, 181#cptResource712]

FUTURE:
towards the end of the 90s we should expect to see widespread publishing of hypertext MATERIAL.
[Nielsen, 1990, 185#cptResource712]

where two years ago or so only 2 or 3 such programs were on the market, there are now about 20, with more in the wings.
[Cole, B.C. "Hypertext tackles the information slut" ELECTRONICS (v63 n2 Feb 1990): 66-68, abstract]

hypertext'resourceInfHmn#cptResource843#

name::
* McsEngl.hypertext'resourceInfHmn@cptIt,

The year 1989 saw the birth of the first scientific journal devoted to hypertext, HYPERMEDIA, published by Taylor Graham.
[Nielsen, 1990, 41#cptResource712]

hypertext.SPECIFIC

Specific_concepts (level 3) =

OTHER_VIEW#cptCore505#

My description will list systems according to application. There are 4 broad application areas for which hypertext systems have been developed:
- MACRO LITERARY SYSTEMS: the study of technologies to support large online libraries in which interdocument links are machine-supported (that is, all publishing, reading, collaboration, and criticism takes place within the network.
- PROBLEM EXPLORATION TOOLS: tools to support early unstructured thinking on a problem when many disconnected ideas come to mind (for example, during early authoring and outlining, problem solving, and programming and design.
- BROWSING SYSTEMS: systems similar to macro literary system, but smaller in scale (for teaching, reference, and public information, where ease of use is crucial).
- GENERAL HYPERTEXT TECHNOLOGY: general purpose systems designed to allow experimentation with a range of hypertext applications (for reading, writing, collaboration, etc.)
[Conklin, 1987, 20#cptResource469]

CONCRETE PROGRAMS


Αρχείον#cptItsoft896: attSpe#
Action, Authoring system multi
Architect (mac)
Authorware, (WIN), authoring system, multimedia
AskSam#cptItsoft524: attSpe#
BOOKMANAGER, DOS, IBM 914-642-5449

Document Examiner#cptItsoft597: attSpe#
Dynatext#cptItsoft602: attSpe#
Folio-Views#cptItsoft617# DOS#cptItsoft617: attSpe# text library
Folio Views windows#cptItsoft416: attSpe#
gIBIS#cptItsoft627: attSpe#
Guide#cptItsoft632: attSpe#
Hyparchiv#cptItsoft639: attSpe#
HyperCard#cptItsoft640: attSpe#
HyperDoc
HyperGate, mac
HyperLog
HyperRez#cptItsoft638: attSpe#
Hyperties ibm
HyPlus#cptItsoft645: attSpe#
IconAuthor, win, Authoring system, multimedia
Infobase#cptItsoft652: attSpe#
Inquire/Text#cptItsoft654: attSpe#
Intermedia#cptItsoft658: attSpe#
Isys, DOS, file-indexing, for changing data
KMS (old name ZOG) ws
KnowledgePro ibm
LinkWay ibm
Linx (mac)
Multimedia Toolbook, win, Authoring system
NLS/Augment
NoteCards#cptItsoft928: attSpe#
Plus, (mac dos),
Quest#cptItsoft787: attSpe#
re:Search, text library
SmartText ibm
Sonar Professional, (WIN MAC), file-indexing, powerful search
StrathTutor#cptItsoft823: attSpe#
SuperBook ws
SuperCard (mac), application generator
TenCORE Language Authoring System
TextWare#cptItsoft831: attSpe#
Thoth-II
ToolBook#cptItsoft843: attSpe#
ViewCards (ws)
Virtual notebook system#cptItsoft929: attSpe#
WorldView#cptItsoft884: attSpe#
Writing Environment#cptItsoft885: attSpe#
Xanadu#cptItsoft889: attSpe#
Z-mail#cptItsoft891: attSpe#
ZyIndex, (WIN UNIX DOS), file-indexing, search interface, changing data

FvMcs.Cmrpgm.OrgProducing

name::
* McsEngl.conceptIt279,
* McsEngl.business management program@cptIt,
* McsEngl.pmp@cptIt279, {2011-08-07}
* McsEngl.program.businessManagement@cptIt279,
* McsEngl.programManagingProducer@cptIt279,
* McsEngl.program.managing.organization.production@cptIt279, {2012-05-17}
* McsEngl.prgPrd@cptIt279,

prgPrd'GENERIC

_GENERIC:
* ORGANIZATION MANAGEMENT PROGRAM#cptItsoft427#
* PROGRAM#cptIt59#

prgPrd'Module

name::
* McsEngl.prgPrd'Module@cptIt,

ΑΞΙΟΓΡΑΦΑ
ΑΠΟΘΗΚΗ
ΑΡΙΘΜΟΣ ΕΤΑΙΡΕΙΩΝ
ΓΕΝΙΚΗ ΛΟΓΙΣΤΙΚΗ
ΠΑΡΑΓΩΓΗ
ΠΕΛΑΤΕΣ
ΠΡΟΜΗΘΕΥΤΕΣ
ΤΕΧΝΙΚΕΣ ΠΡΟΔΙΑΓΡΑΦΕΣ
ΤΙΜΟΛΟΓΗΣΗ ΠΩΛΗΣΕΩΝ/ΑΓΟΡΩΝ

prgPrd'Law

name::
* McsEngl.prgPrd'Law@cptIt,

ΠΔ.186-1992 ΤΗΡΗΣΗ ΛΟΓΙΣΤΙΚΩΝ ΒΙΒΛΙΩΝ ΚΑΙ ΕΚΔΟΣΗ ΤΩΝ ΦΟΡΟΛΟΓΙΚΩΝ ΣΤΟΙΧΕΙΩΝ ΜΕ ΧΡΗΣΗ ΗΛΕΚΤΡΟΝΙΚΟΥ ΥΠΟΛΟΓΙΣΤΗ.

SPECIFIC

name::
* McsEngl.prgPrd.specific@cptIt,

prgPrd.alphabetically.INSTANCE

name::
* McsEngl.prgPrd.alphabetically.INSTANCE@cptIt,

_SPECIFIC:
* DEFACTO#cptIt592#
* Eurofasma#cptIt608#
* Frame#cptIt620#
* INFINITY PLUS+#cptIt651#
* Manager#cptIt686#
* Meridian ΦΟΡΟΤΕΧΝΙΚΟ#cptIt692#
* Premium#cptIt774#
* Professional ΕΣΟΔΑ-ΕΞΟΔΑ#cptIt778#
* Professional ΦΟΡΟΛΟΓΙΑ ΕΙΣΟΔΗΜΑΤΟΣ#cptIt779#
* Quicken#cptIt791#
* SHOP#cptIt803#
* The American Phone Book#cptIt832#
===
* ΔΗΛΩΣΗ ΕΙΣΟΔΗΜΑΤΟΣ#cptIt898#
* ΕΠΙΧΕΙΡΗΣΗ#cptIt903#
* ΕΣΟΔΑ-ΕΞΟΔΑ#cptIt904#
* ΕΦΟΡΟΣ'93#cptIt905#
* ΚΕΦΑΛΑΙΟ#cptIt907#
* ΟΡΙΖΟΝΤΕΣ/ΓΕΝΙΚΗ ΛΟΓΙΣΤΙΚΗ#cptIt913#
* ΟΡΙΖΟΝΤΕΣ/ΕΜΠΟΡΙΚΗ ΔΙΑΧΕΙΡΙΣΗ#cptIt914#
* σ90#cptIt917#
* ΦΟΡΟΙ#cptIt923#

prgPrd.SPECIFIC-DIVISION.FUNCTION

name::
* McsEngl.prgPrd.SPECIFIC-DIVISION.FUNCTION@cptIt,

_SPECIFIC:
* accounting_software
* BPR
* ERP
===
ΑΝΕΛΚΥΣΤΗΡΩΝ ΣΥΝΤΗΡΗΣΗ
ΑΝΤΑΛΛΑΚΤΙΚΩΝ ΔΙΑΧΕΙΡΙΣΗ
ΑΞΙΟΓΡΑΦΑ
ΑΠΟΘΗΚΗΣ ΔΙΑΧΕΙΡΙΣΗ
ΑΡΧΙΤΕΚΤΟΝΕΣ (ΑΡΧΙΤΕΚΤΟΝΙΚΟ)
ΑΣΦΑΛΙΣΤΙΚΑ
ΑΥΤΟΚΙΝΗΤΩΝ ΑΝΤΙΠΡΟΣΩΠΕΙΑ
ΑΥΤΟΚΙΝΗΤΩΝ ΕΝΟΙΚΙΑΣΕΙΣ
ΒΙΒΛΙΟΘΗΚΗΣ ΔΙΑΧΕΙΡΙΣΗ
ΒΙΒΛΙΟΠΩΛΕΙΟΥ ΔΙΑΧΕΙΡΙΣΗ
ΒΙΟΜΗΧΑΝΙΚΗ ΔΙΑΧΕΙΡΙΣΗ
ΒΟΥΛΚΑΝΙΖΑΤΕΡ ΔΙΑΧΕΙΡΙΣΗ
ΓΡΑΦΕΙΟΥ ΟΡΓΑΝΩΣΗ
ΓΥΜΝΑΣΤΗΡΙΟΥ ΔΙΑΧΕΙΡΙΣΗ
ΔΗΜΟΙ & ΚΟΙΝΟΤΗΤΕΣ
ΔΗΜΟΣΙΑ ΕΡΓΑ
ΔΗΜΟΣΙΟΙ ΟΡΓΑΝΙΣΜΟΙ
ΔΙΑΝΟΜΩΝ ΔΙΑΧΕΙΡΙΣΗ
ΔΙΚΗΓΟΡΙΚΟ
ΔΙΣΚΟΠΩΛΕΙΩΝ ΔΙΑΧΕΙΡΙΣΗ
ΕΙΔΩΝ ΥΓΙΕΙΝΗΣ ΔΙΑΧΕΙΡΙΣΗ
ΕΙΣΑΓΩΓΕΣ-ΕΞΑΓΩΓΕΣ
ΕΚΔΟΤΙΚΩΝ ΕΠΙΧΕΙΡΗΣΕΩΝ ΔΙΑΧΕΙΡΙΣΗ
ΟΔΟΝΤΙΑΤΡΕΙΟΥ#cptIt111: attSpe#
ΤΟΥΡΙΣΤΙΚΩΝ ΓΡΑΦΕΙΩΝ ΔΙΑΧΕΙΡΙΣΗ
ΤΡΑΠΕΖΙΚΕΣ ΕΦΑΡΜΟΓΕΣ
ΤΡΟΦΙΜΩΝ ΔΙΑΧΕΙΡΙΣΗ
ΦΑΡΜΑΚΕΙΟΥ-ΔΙΑΧΕΙΡΙΣΗ#cptIt123: attSpe#
ΧΡΗΜΑΤΙΣΤΗΡΙΑΚΟ
ΧΡΗΜΑΤΩΝ ΔΙΑΧΕΙΡΙΣΗ
ΧΡΥΣΟΧΟΙΑΣ ΕΡΓΑΣΤΗΡΙΟΥ ΔΙΑΧΕΙΡΙΣΗ
ΩΔΕΙΟΥ ΔΙΑΧΕΙΡΙΣΗ

prgPrd.ACCOUNTING

name::
* McsEngl.prgPrd.ACCOUNTING@cptIt,
* McsEngl.conceptIt279.2,
* McsEngl.accounting-software@cptIt279.2,
* McsEngl.program.accounting@cptIt,
* McsEngl.pgm.accounting@cptIt,
* McsEngl.prgAccng@cptIt279.2, {2012-12-02}

_DESCRIPTION:
Accounting software is application software that records and processes accounting transactions within functional modules such as accounts payable, accounts receivable, payroll, and trial balance. It functions as an accounting information system. It may be developed in-house by the company or organization using it, may be purchased from a third party, or may be a combination of a third-party application software package with local modifications. It varies greatly in its complexity and cost.[1]
The market has been undergoing considerable consolidation since the mid 1990s, with many suppliers ceasing to trade or being bought by larger groups.
[http://en.wikipedia.org/wiki/Accounting_system]

prgAccng'Module

name::
* McsEngl.prgAccng'Module@cptIt,

Modules
Accounting software is typically composed of various modules, different sections dealing with particular areas of accounting. Among the most common are:[2][3][4][5]

Core modules
Accounts receivable—where the company enters money received
Accounts payable—where the company enters its bills and pays money it owes
General ledger—the company's "books"
Billing—where the company produces invoices to clients/customers
Stock/inventory—where the company keeps control of its inventory
Purchase order—where the company orders inventory
Sales order—where the company records customer orders for the supply of inventory
Bookkeeping—where the company records collection and payment
Non-core modules
Debt collection—where the company tracks attempts to collect overdue bills (sometimes part of accounts receivable)
Electronic payment processing
Expense—where employee business-related expenses are entered
Inquiries—where the company looks up information on screen without any edits or additions
Payroll—where the company tracks salary, wages, and related taxes
Reports—where the company prints out data
Timesheet—where professionals (such as attorneys and consultants) record time worked so that it can be billed to clients
Purchase requisition—where requests for purchase orders are made, approved and tracked
Reconciliation—compares records from parties at both sides of transactions for consistency
Different vendors will use different names for these modules.
[http://en.wikipedia.org/wiki/Accounting_system]

resource

_ADDRESS.WPG:
* https://tomassetti.me/financial-accounting-dsl/,

SPECIFIC

pgmAccng.FREE

name::
* McsEngl.pgmAccng.FREE@cptIt,

_ADDRESS.WPG:
* http://www.turbocash.net//

prgAccng.GnuCash

_CREATED: {2012-12-02}

name::
* McsEngl.prgAccng.GnuCash@cptIt,
* McsEngl.GnuCash@cptIt, {2012-12-06}

_ADDRESS.WPG:
* http://www.gnucash.org//

_DESCRIPTION:
GnuCash is a free and open source accounting software program that implements a double-entry bookkeeping system. It was initially aimed at developing capabilities similar to Intuit, Inc.'s Quicken application,[7] but also has features for small business accounting.[8] Recent development has been focused on adapting to modern desktop support-library requirements.
GnuCash is part of the GNU Project,[9][10] and runs on Linux, OpenBSD, FreeBSD, Solaris, Mac OS X, and other Unix-like platforms.[4] A Microsoft Windows (2000 or newer) port was made available starting with the 2.2.0 series.[11]
...
Original author(s)  Gnumatic[1]
Developer(s)  GnuCash development team
Stable release  2.4.11 (July 14, 2012; 4 months ago) [±]
Preview release  Non [±]
Written in  C, Scheme[2]
Java (Android version)[3]
Platform  Cross-platform[4]
Available in  multilingual[5]
Type  Accounting and personal finance
License  GNU General Public License
Apache License 2 (Android version)[6]
Website  www.gnucash.org
[http://en.wikipedia.org/wiki/GnuCash]

prgAccng.ONLINE

_CREATED: {2012-12-02}

name::
* McsEngl.prgAccng.ONLINE@cptIt,
* McsEngl.e-accounting-software@cptIt, {2012-12-02}
* McsEngl.online-accounting-software@cptIt, {2012-12-02}

E-accounting or online accounting, is the application of online and Internet technologies to the business accounting function. Similar to e-mail being an electronic version of traditional mail, e-accounting is "electronic enablement" of lawful accounting and traceable accounting processes which were traditionally manual and paper-based.

E-accounting involves performing regular accounting functions, accounting research and the accounting training and education through various computer based /internet based accounting tools such as digital tool kits, various internet resources, international web-based materials, institute and company databases which are internet based, web links, internet based accounting software and electronic financial spreadsheet tools to provide efficient decision making.

Online accounting through a web application is typically based on a simple monthly charge and zero-administration approach to help businesses concentrate on core activities and avoid the hidden costs associated with traditional accounting software such as installation, upgrades, exchanging data files, backup and disaster recovery.

E-accounting does not have a standard definition but merely refers to the changes in accounting due to computing and networking technologies.[1] Most e-accounting services are offered as SaaS;‘software as a service’, i.e. as a cloud service.
[http://en.wikipedia.org/wiki/E-accounting]

SPECIFIC

_ADDRESS.WPG:
* http://www.kpi.com//

prgPrd.ENTERPRISE-SYSTEMS

_CREATED: {2012-05-20}

name::
* McsEngl.prgPrd.ENTERPRISE-SYSTEMS@cptIt,
* McsEngl.conceptIt279.3,
* McsEngl.enterprise-systems@cptIt279.3, {2012-05-20}
* McsEngl.program.enterprise-systems@cptIt279.3, {2012-05-20}

Enterprise systems (ES) are large-scale application software packages that support business processes, information flows, reporting, and data analytics in complex organizations. In short, ES are packaged enterprise application software (PEAS) systems.
Types of enterprise systems include enterprise resource planning (ERP) systems, enterprise planning systems, and customer relationship management software. Although data warehousing or business intelligence systems are enterprise-wide packaged application software often sold by ES vendors, since they do not directly support execution of business processes, they are often excluded from the term.
Enterprise systems are built on software platforms, such as SAP’s NetWeaver and Oracle's Fusion, and databases.
[http://en.wikipedia.org/wiki/Enterprise_systems]

prgPrd.ERP

name::
* McsEngl.conceptIt279.1,

prgPrd.BPR

name::
* McsEngl.BPR@cptIt,
* McsEngl.business process reengineering program@cptIt,
* McsEngl.program.BPR@cptIt,

Unlike typical flowcharting programs, process-mapping programs let you attach data such as numbers of units processed, cost/resources consumed, required time, and other information associated with an activity. Costs are $250-500.
[BYTE, OCT. 1994, 24]

ANALYST, action technologies.

MAXIM, KnowledgeWare

ABC Toolkit, Micrografx

FvMcs.Cmrpgm.FINANCE

_CREAT
* McsEngl.conceptIt280,ED: {2012-05-17}

name::
* McsEngl.finance-program@cptIt280, {2012-05-17}
* McsEngl.prgFin@cptIt280, {2012-05-17}

SPECIFIC

name::
* McsEngl.prgFinspecific@cptIt,

prgFin.STOCK-MARKET

_CREATED: {2012-12-17}

name::
* McsEngl.prgFin.STOCK-MARKET@cptIt,
* McsEngl.stock-market-program@cptIt, {2012-12-17}

prgFin.JStock

name::
* McsEngl.prgFin.JStock@cptIt,
* McsEngl.JStock@cptIt, {2012-12-17}

JStock is a free stock market software for 26 countries. It provides stock watchlist, intraday stock price snapshot, stock indicator editor, stock indicator scanner and portfolio management. Free SMS/email alert supported.
Earlier this month we spoke with Yan Chen Cheok, the lead developer on this project. Listen, or read, to find out more about JStock. And, if you're interested in the stock market, you can use JStock to help you become a smarter investor.
[sf.net]

prgFin.WOLFRAM-FINANCE-PLATFORM

_CREATED: {2012-05-17}

name::
* McsEngl.prgFin.WOLFRAM-FINANCE-PLATFORM@cptIt,
* McsEngl.conceptIt280.1,
* McsEngl.Wolfram-Finance-Platform@cptIt280.1, {2012-05-17}

Algorithmic agility has come center stage in finance. Yet finance tools are often outmoded—failing to use modern, smart computation from other fields. Wolfram Finance Platform injects ultimate computation into finance workflows—increasing your competitiveness in areas as diverse as option pricing, risk analysis, enterprise system development, and interactive reporting. Why Wolfram Finance Platform»
[http://www.wolfram.com/finance-platform/]

FvMcs.Cmrpgm.MODEM

name::
* McsEngl.conceptIt315,
* McsEngl.Cmrpgm.MODEM@cptIt,
* McsEngl.FvMcs.Cmrpgm.MODEM@cptIt,
* McsEngl.MODEM-COMMUNICATION-PROGRAM@cptIt,
* McsEngl.program.modemCommunication@cptIt315,

SPECIFIC

Specific_concepts (level 3) =

FvMcs.Cmrpgm.OUTLINER

name::
* McsEngl.conceptIt333,
* McsEngl.Cmrpgm.OUTLINER@cptIt,
* McsEngl.FvMcs.Cmrpgm.OUTLINER@cptIt,
* McsEngl.outline-processor@cptIt,
* McsEngl.outliner-program@cptIt,
* McsEngl.program.outliner@cptIt333,

DEFINITION

_DESCRIPTION:

GENERIC

_GENERIC:
DOCUMENT MANAGEMENT PROGRAM#cptIt426#
* PROGRAM#cptIt59#

outliner & HYPERTEXT PROGRAM@cptIt255

Another traditional computer application with similarities to hypertext is outliner programs like ThinkTank... But a chapter heading in an outliner cannot have a pointer to a subsection in another chapter even though that subsection may be very relevant to its topic. That limitation is why outliners are not hypertext.
[Nielsen, 1990, 8#cptResource712]

FvMcs.Cmrpgm.OCR

name::
* McsEngl.conceptIt336,
* McsEngl.Cmrpgm.OCR@cptIt,
* McsEngl.FvMcs.Cmrpgm.OCR@cptIt,
* McsEngl.program.ocr@cptIt336,
* McsEngl.OCR'program@cptIt336,
* McsEngl.optical-character-recognition@cptIt,

GENERIC

_GENERIC:
* desktop-appl#cptItsoft304#
* PROGRAM#cptIt59#

ACCURACY

For a product to be usable, you want the accuracy rate to be at least 95 percent to 97 percent

Doing#cptCore475#

+++OCR#cptIt444-20#

HARDWARE-OF-COMPUTER-STRUCTURE#cptIt456#

PROCESSOR
RAM
HD
SCANNERS

NATURAL LANGUAGES SUPPORTED

SPEED

Speed is largerly dependent on your system's processor and available memory.

WORD PROCESSORS SUPPORTED#cptIt399#

SPECIFIC

Specific_concepts (level 3) =


ΑΝΑΓΝΩΣΤΗΣ#cptIt894: attSpe#
Catchword, logitech, Altec
OmniPage-Professional#cptItsoft810#, Caere#cptIt810: attSpe#
PAPER KEYBOARD#cptIt752: attSpe#
READ RIGHT#cptIt795: attSpe#
RECOGNITA#cptIt796: attSpe#
TextBridge, Xerox Imaging Systems, 2.0, $99 1994
TypeReader, Formscan
WordScan Plus, Calera, 3.0, $595 1994, good accuracy

FvMcs.Cmrpgm.NEURAL-NETWORK

name::
* McsEngl.conceptIt340,
* McsEngl.Cmrpgm.NEURAL-NETWORK@cptIt,
* McsEngl.FvMcs.Cmrpgm.NEURAL-NETWORK@cptIt,
* McsEngl.program.neural'network@cptIt340,
* McsEngl.neural-network@cptIt,
* McsEngl.neural'network@cptIt340,
* McsElln.ΝΕΥΡΩΝΙΚΟ-ΔΙΚΤΥΟ@cptIt,

DEFINITION

NEURAL NETWORK: A system that emulates the human nervous system and brain to process information. Neural networks are used for such things as sensor and signal processing and pattern recognition.
[BYTE, JUL 1993, 108]

ΥΠΑΡΧΟΥΝ ΑΡΚΕΤΑ ΠΑΚΕΤΑ ΓΙΑ ΠΕΡΙΒΑΛΛΟΝΤΑ DOS, WINDOWS, MACINTOSH. e.g.
WinBrain,
Neuralyst for Excel,
Braincel,
Autonet,
BrainMaker,
Neural Network Utility,

GENERIC

_GENERIC:
* PROGRAM#cptIt59#
** DATA-MINING-TECHNIQUES#ql:stats'data'mining#

FvMcs.Cmrpgm.PERSONAL-INFORMATION-MANAGEMENT -(PIM)

name::
* McsEngl.conceptIt342,
* McsEngl.Cmrpgm.PERSONAL-INFORMATION-MANAGEMENT -(PIM)@cptIt,
* McsEngl.FvMcs.Cmrpgm.PERSONAL-INFORMATION-MANAGEMENT -(PIM)@cptIt,
* McsEngl.PIM@cptIt,
* McsEngl.pim@cptIt342,
* McsEngl.personal-information-manager@cptIt,
* McsEngl.program.pim@cptIt342,

DEFINITION

PIM does exactly as its name suggests: It manages your personal information. Most PIMs include
an appointment scheduler and calendar,
an address book with telephone-dialing capability,
a note taker, and
a few other information management functions.
The basic idea is to replace your paper Day-Timer or address book with an electronic one.
[BYTE, MAY 1993, 194]

GENERIC

_GENERIC:
* desktop-appl#cptItsoft304#
* PROGRAM#cptIt59#

Doing#cptCore475#

+++#cptIt444-22#

SPECIFIC

Specific_concepts (level 3) =

ACT for windows 1.0
Ascend 4.0
Commence 1.0
GoldMine 2.5
Lotus organizer 1.0
On time for windows 1.2
PackRat 4.1
YourWay 3.0

FvMcs.Cmrpgm.VIRTUAL-REALITY

name::
* McsEngl.conceptIt343,
* McsEngl.Cmrpgm.VIRTUAL-REALITY@cptIt,
* McsEngl.FvMcs.Cmrpgm.VIRTUAL-REALITY@cptIt,
* McsEngl.program.virtualreality@cptIt343,
* McsEngl.VIRTUAL'REALITY@cptIt343,
* McsEngl.virtual-reality@cptIt,
* McsElln.ΕΙΚΟΝΙΚΗ-ΠΡΑΓΜΑΤΙΚΟΤΗΤΑ@cptIt,
* McsElln.ΠΛΑΣΜΑΤΙΚΗ-ΠΡΑΓΜΑΤΙΚΟΤΗΤΑ@cptIt,

DEFINITION

analytic

VIRTUAL REALITY: A process that uses computers to simulate realistic 3-D audio, visual, and tactile worlds.
[BYTE, JUL 1993, 108]

GENERIC

_GENERIC:
* desktop-appl#cptItsoft304#
* PROGRAM#cptIt59#

APPLICATION#cptIt97#

ΧΕΙΡΟΥΡΓΙΚΗ

Εκατοντάδες αμερικανοι χειρουργοι δοκιμάζουν συστηματα 3 διαστάσεων.
[ΚΑΘΗΜΕΡΙΝΗ, 11 ΔΕΚ. 1994, 60]

FvMcs.Cmrpgm.BUNDLE_SOFTWARE

name::
* McsEngl.conceptIt352,
* McsEngl.bundle-software@cptIt352, {2012-05-29}
* McsEngl.pgm.office@cptIt,
* McsEngl.program.office-automation@cptIt,
* McsEngl.program.suite@cptIt352,
* McsEngl.suite program@cptIt,
* McsElln.ΟΛΟΚΛΗΡΩΜΕΝΟ ΠΑΚΕΤΟ ΕΦΑΡΜΟΓΩΝ ΓΡΑΦΕΙΟΥ@cptIt,
* McsElln.ΣΟΥΙΤΑ@cptIt352,
* McsElln.ΥΠΕΡΠΑΚΕΤΑ@cptIt,

DEFINITION

ΥΠΕΡΠΑΚΕΤΑ είναι ένα σύνολο προγραμμάτων μιας ετεριας.

ognCompany#cptEconomy7#

Doing#cptCore475#

INTERFACE LANGUAGE#cptIt469#

PRICE#cptEconomy541.44#

measure#cptCore88#

ΣΗΜΕΡΑ, ΥΠΟΛΟΓΙΖΕΤΑΙ ΟΤΙ ΠΕΡΙΣΣΟΤΕΡΟ ΑΠΟ ΤΟ 30-70% ΤΩΝ ΠΩΛΗΣΕΩΝ ΠΑΚΕΤΩΝ ΕΦΑΡΜΟΓΩΝ ΤΗΣ MICROSOFT, ΓΙΝΕΤΑΙ ΜΕΣΩ ΤΩΝ ΠΩΛΗΣΕΩΝ ΤΩΝ ΥΠΕΡΠΑΚΕΤΩΝ.
[RAM, OKT 1993, 198]

SUBSET

Version#cptIt471#

SPECIFIC

Specific_concepts (level 3) =


LOTUS SMARTSUITE#cptIt682: attSpe#
MICROSOFT OFFICE#cptIt703: attSpe#

pgmOfc.LIBREOFFICE

name::
* McsEngl.LibreOffice@cptIt,

_ADDRESS.WPG:
* https://el.libreoffice.org//
* http://members.hellug.gr/sng/ancientgreekoxt/index.html,
* http://www.libreoffice.org//

FvMcs.Cmrpgm.SPELL_CHECKER

name::
* McsEngl.conceptIt408,
* McsEngl.pgm.spellchecker@cptIt,
* McsEngl.program.speller@cptIt408,
* McsEngl.spell-checker@cptIt,
* McsEngl.spellchecker@cptIt408,
* McsEngl.SPELLER@cptIt,
* McsEngl.speller@cptIt408,
* McsElln.ΔΙΟΡΘΩΤΗΣ@cptIt,

spellchecker'DEFINITION

Πρόγραμα για διόρθωση ορθογραφικών λαθών γραπτού λόγου.

spellchecker'ognCompany#cptEconomy7#

name::
* McsEngl.spellchecker'ognCompany@cptIt,

spellchecker'FILES#cptIt354#

name::
* McsEngl.spellchecker'FILES@cptIt,

spellchecker'dictionary

name::
* McsEngl.spellchecker'dictionary@cptIt,

_ADDRESS.WPG:
* http://www.javascriptspellcheck.com/JavaScript_SpellChecking_Dictionaries,

spellchecker'Doing#cptCore475#

name::
* McsEngl.spellchecker'Doing@cptIt,

SPELLING#cptIt444-25#

spellchecker'INSTALLATION#cptIt162#

name::
* McsEngl.spellchecker'INSTALLATION@cptIt,

spellchecker'OPERATING-SYSTEM#cptIt434#

name::
* McsEngl.spellchecker'OPERATING-SYSTEM@cptIt,

spellchecker'PRICE#cptEconomy541.44#

name::
* McsEngl.spellchecker'PRICE@cptIt,

spellchecker'Version#cptIt471#

name::
* McsEngl.spellchecker'Version@cptIt,

SPECIFIC

spellchecker.specific,

_SPECIFIC:
* ASPELL#cptItsoft1084#
* JAZZY#cptItsoft1208#
* Spellmate#cptItsoft813#

* Ορθογράφος#cptItsoft912# (LEXIGRAF) (TSR,DOS)#cptItsoft912#
* ερμής,
* correct (win),
* scriptum, wordperfect
* IntraLex#cptItsoft478#
* Lapsus#cptIt670#

spellchecker.ASPELL

_CREATED: {2003-02-15}

name::
* McsEngl.spellchecker.ASPELL@cptIt,
* McsEngl.conceptItsoft1084,
* McsEngl.aspell@cptItsoft1084,

GENERIC

_GENERIC:
* SPELL-CHECKER#cptIt408#

ALGORITHM

8. How Aspell Works
The magic behind my spell checker comes from merging Lawrence Philips excellent metaphone algorithm and Ispell's near miss strategy which is inserting a space or hyphen, interchanging two adjacent letters, changing one letter, deleting a letter, or adding a letter.
The process goes something like this.
1. Convert the misspelled word to its soundslike equivalent (its metaphone for English words).
2. Find all words that have a soundslike within one or two edit distances from the original words soundslike. The edit distance is the total number of deletions, insertions, exchanges, or adjacent swaps needed to make one string equivalent to the other. When set to only look for soundslikes within one edit distance it tries all possible soundslike combinations and check if each one is in the dictionary. When set to find all soundslike within two edit distance it scans through the entire dictionary and quickly scores each soundslike. The scoring is quick because it will give up if the two soundslikes are more than two edit distances apart.
3. Find misspelled words that have a correctly spelled replacement by the same criteria of step number 2 and 3. That is the misspelled word in the word pair (such as teh -> the) would appear in the suggestions list as if it was a correct spelling.
4. Score the result list and return the words with the lowest score. The score is roughly the weighed average of the weighed edit distance of the word to the misspelled word and the soundslike equivalent of the two words. The weighted edit distance is like the edit distance except that the various edits have weights attached to them.
5. Replace the misspelled words that have correctly spelled replacements with their replacements and remove any duplicates that might arise because of this.
Please note that the soundslike equivalent is a rough approximation of how the words sounds. It is not the phoneme of the word by any means. For more details about exactly how each step is performed please see the file suggest.cc. For more information on the metaphone algorithm please see the data file english_phonet.dat.
[GNU Aspell 0.50.3]

spellchecker.DEPENDENT

name::
* McsEngl.spellchecker.DEPENDENT@cptIt,

Αυτοί που ΔΕΝ ΥΠΟΣΤΗΡΙΖΟΥΝ ΑΛΛΑ ΠΑΚΕΤΑ
* SPELLMATE WORD
* LOTUS AMIPRO, MEMOTEK

spellchecker.DEPENDENT.NO

name::
* McsEngl.spellchecker.DEPENDENT.NO@cptIt,

_SPECIFIC:
Α) ΠΕΡΙΒΑΛΟΝ: DOS, WINDOWS, BOTH
B) ΤΡΟΠΟΣ: TSR (CORRECT DOS WIN), ΑΝΕΞΑΡΤΗΤΑ (LAPSUS DOS)

spellchecker.JAZZY

_CREATED: {2003-02-15}

name::
* McsEngl.spellchecker.JAZZY@cptIt,
* McsEngl.conceptItsoft1208,
* McsEngl.jazzy@cptItsoft1208,

_DESCRIPTION:
JAZZY is an opensource java SPELL-CHECKER.
[hknu_2003-02-15]

_GENERIC:
* SPELL-CHECKER#cptIt408#

SOURCE

* \java\app\spellchecker

spellchecker.ONLINE

name::
* McsEngl.spellchecker.ONLINE@cptIt,

_SPECIFIC:
* http://www.jspell.com/public-spell-checker.html,

FvMcs.Cmrpgm.DOCUMENT-MANAGEMENT

name::
* McsEngl.conceptIt426,
* McsEngl.Cmrpgm.DOCUMENT-MANAGEMENT@cptIt,
* McsEngl.FvMcs.Cmrpgm.DOCUMENT-MANAGEMENT@cptIt,
* McsEngl.document-management-program@cptIt,
* McsEngl.document'management'program@cptIt426,
* McsEngl.program.DocumentManagement@cptIt426,

DEFINITION

analytic

ΚΕΙΜΕΝΟΥ ΔΙΑΧΕΙΡΙΣΗΣ ΠΡΟΓΡΑΜΑ ονομάζω καθε ΠΡΟΓΡΑΜΜΑ-ΕΦΑΡΜΟΓΩΝ#cptIt304.1# με το οποίο επεξεργαζόμαστε καθε είδους κείμενο.
[hmnSngo.1995-03]

Κάθε πρόγραμα επεξεργασίας ντοκουμέντων.

GENERIC

_GENERIC:
* desktop-appl#cptItsoft304#
* PROGRAM#cptIt59#

APPLICATION#cptIt97#

ENCYCLOPEDIAS#cptIt486: attSpe#

EVALUATION#cptCore546.107#

FILES#cptIt354#

Doing#cptCore475#

+++document management#cptIt444-15#

INSTALLATION#cptIt162#

measure#cptCore88#

SPECIFIC

_SPECIFIC:
ARTICLE
DICTIONARY program#cptIt476#
ENCYCLOPEDIA
PERIODICAL

FUNCTION SPECIFIC_DIVISION

_SPECIFIC:
ABSTRACTING program#cptIt497.13##cptIt497.13#
DATABASE-PROGRAMS#cptIt8#
DTP
EDITOR#cptIt991#
HYPERTEXT-programs#cptIt255#
OUTLINER-programs#cptIt333#
TEXT-VIEWER#cptItsoft1043#
TRANSLATION-program#cptItsoft497.15#
WORD-PROCESSOR-programs#cptIt399#

SUBJECT SPECIFIC_DIVISION

Pandoc

_CREATED: {2012-06-05}

name::
* McsEngl.pandoc@cptIt426i, {2012-06-05}

_DESCRIPTION:
About pandoc

If you need to convert files from one markup format into another, pandoc is your swiss-army knife. Pandoc can convert documents in markdown, reStructuredText, textile, HTML, DocBook, or LaTeX to

HTML formats: XHTML, HTML5, and HTML slide shows using Slidy, Slideous, S5, or DZSlides.
Word processor formats: Microsoft Word docx, OpenOffice/LibreOffice ODT, OpenDocument XML
Ebooks: EPUB
Documentation formats: DocBook, GNU TexInfo, Groff man pages
TeX formats: LaTeX, ConTeXt, LaTeX Beamer slides
PDF via LaTeX
Lightweight markup formats: Markdown, reStructuredText, AsciiDoc, MediaWiki markup, Emacs Org-Mode, Textile
Pandoc understands a number of useful markdown syntax extensions, including document metadata (title, author, date); footnotes; tables; definition lists; superscript and subscript; strikeout; enhanced ordered lists (start number and numbering style are significant); running example lists; delimited code blocks with syntax highlighting; smart quotes, dashes, and ellipses; markdown inside HTML blocks; and inline LaTeX. If strict markdown compatibility is desired, all of these extensions can be turned off.

LaTeX math (and even macros) can be used in markdown documents. Eight different methods of rendering math in HTML are provided, including MathJax and translation to MathML. LaTeX math is rendered in docx using native Word equation objects.

Pandoc includes a powerful system for automatic citations and bibliographies, using Andrea Rossato’s citeproc-hs. This means that you can write a citation like

[see @doe99, pp. 33-35; also @smith04, ch. 1]
and pandoc will convert it into a properly formatted citation using any of hundreds of CSL styles (including footnote styles, numerical sytles, and author-date styles), and add a properly formatted bibliography at the end of the document. Many forms of bibliography database can be used, including bibtex, RIS, EndNote, ISI, MEDLINE, MODS, and JSON citeproc. Citations work in every output format.

Pandoc includes a Haskell library and a standalone command-line program. The library includes separate modules for each input and output format, so adding a new input or output format just requires adding a new module.

Pandoc is free software, released under the GPL. © 2006-2012 John MacFarlane.
[http://johnmacfarlane.net/pandoc/]

FvMcs.Cmrpgm.ORGANIZATION_MANAGEMENT

name::
* McsEngl.conceptIt427,
* McsEngl.program.OrganizationManagement@cptIt427,
* McsEngl.organization-management-program@cptIt,
* McsEngl.pgm.managing@cptIt,
* McsEngl.pgmMng@cptIt427,

pgmMng'GENERIC

_GENERIC:
* desktop-appl#cptItsoft304#
* PROGRAM#cptIt59#

pgmMng'ognCompany#cptEconomy7#

name::
* McsEngl.pgmMng'ognCompany@cptIt,

pgmMng'EVALUATION#cptCore546.107#

name::
* McsEngl.pgmMng'EVALUATION@cptIt,

pgmMng'FILES#cptIt354#

name::
* McsEngl.pgmMng'FILES@cptIt,

pgmMng'Doing#cptCore475#

name::
* McsEngl.pgmMng'Doing@cptIt,

+++ORGANIZATION MANAGEMENT#cptIt444-21#

pgmMng'HARDWARE DEMAND

name::
* McsEngl.pgmMng'HARDWARE DEMAND@cptIt,

pgmMng'OPERATING-SYSTEM#cptIt434#

name::
* McsEngl.pgmMng'OPERATING-SYSTEM@cptIt,

pgmMng'ORGANIZATION WHO USES THE PROGRAM

name::
* McsEngl.pgmMng'ORGANIZATION WHO USES THE PROGRAM@cptIt,


BUSINESS
SCHOOL

pgmMng'PRICE#cptEconomy541.44#

name::
* McsEngl.pgmMng'PRICE@cptIt,

measure#cptCore88#

pgmMng'TIPS#cptIt470#

name::
* McsEngl.pgmMng'TIPS@cptIt,

pgmMng'Version#cptIt471#

name::
* McsEngl.pgmMng'Version@cptIt,

SPECIFIC

pgmMng.specific,

pgmMng.SPECIFIC-DIVISION.organization

name::
* McsEngl.pgmMng.SPECIFIC-DIVISION.organization@cptIt,

_SPECIFIC:
* BUSINESS-MANAGEMENT#cptIt279: attSpe#
* Government-organization
* SHCOOL-management#cptItsoft1049: attSpe#

pgmMng.DemocracyOS

_CREATED: {2015-03-27}

name::
* McsEngl.pgmMng.DemocracyOS@cptIt,
* McsEngl.DemocracyOS@cptIt,

_DESCRIPTION:
DemocracyOS is an online space for deliberation and voting on political proposals. The software aims to stimulate better arguments and come to better rulings. http://democracyos.org
[https://github.com/democracyos/app]

FvMcs.Cmrpgm.CALCULATIONS

name::
* McsEngl.conceptIt428,
* McsEngl.Cmrpgm.CALCULATIONS@cptIt,
* McsEngl.FvMcs.Cmrpgm.CALCULATIONS@cptIt,
* McsEngl.calculations-program@cptIt,
* McsEngl.program.calculations@cptIt428,
* McsElln.ΠΡΟΓΡΑΜΑ-ΥΠΟΛΟΓΙΣΤΙΚΟ@cptIt,

GENERIC

_GENERIC:
* desktop-appl#cptItsoft304#
* PROGRAM#cptIt59#

Doing#cptCore475#

+++#cptIt444-13#

SPECIFIC

Specific_concepts (level 3) =

SPREADSHEET-program#cptIt29 spreadsheet: attSpe#

FvMcs.Cmrpgm.TRAINING

name::
* McsEngl.conceptIt462,
* McsEngl.Cmrpgm.TRAINING@cptIt,
* McsEngl.FvMcs.Cmrpgm.TRAINING@cptIt,
* McsEngl.program.training@cptIt462,
* McsEngl.training-application-program@cptIt,

GENERIC

_GENERIC:
* PROGRAM#cptIt59#

SPECIFIC

TYPING MASTER (ZD3\APPLICATION)

FvMcs.Cmrpgm.BACKUP

name::
* McsEngl.conceptIt465,
* McsEngl.Cmrpgm.BACKUP@cptIt,
* McsEngl.FvMcs.Cmrpgm.BACKUP@cptIt,
* McsEngl.backup-program@cptIt,
* McsEngl.backup'program@cptIt465,
* McsEngl.program.system.utility.backup@cptIt465,
* McsEngl.program.backup@cptIt465,
* McsElln.ΠΡΟΓΡΑΜΑ-ΑΝΤΙΓΡΑΦΩΝ@cptIt,

DEFINITION

Είναι προγράμματα για τη κράτηση αντιγράφων των αρχείων συστήματος.

HSM

Hierarchical Storage Management. Αρχιτεκτονική που βασίζεται στη βασική αρχή ότι τα δεδομένα αποθηκεύονται στη χαμηλότερου κόστους μονάδα, ανάλογα με την απαιτούμενη κατά περίπτωση απόδοση. Επιτρεπει αυτόματο μπακάπ, υποστήριξη διαφορετικών τύπων μονάδων και επιτρεπει τα δεδομένα να βρίσκονται πάντα online. bbb βββ
[COMPUTER-GO, SEP. 1994, 133#cptResource28#]

STANDARD#cptIt139#

SIDF:
System Independent Data Format. Πρόταση της Novell χωρίς να έχει γίνει defacto πρότυπο.

PRICE#cptEconomy541.44#

SPECIFIC

Specific_concepts (level 3) =


CHOP/LOAD#cptIt565: attSpe#
ProServe#cptIt782: attSpe#
SBACKUP, Netware 3.11 and after.
Quicksave#cptIt788: attSpe#

FvMcs.Cmrpgm.Lawyer-Office-Management

name::
* McsEngl.conceptIt468,
* McsEngl.Cmrpgm.Lawyer-Office-Management@cptIt,
* McsEngl.FvMcs.Cmrpgm.Lawyer-Office-Management@cptIt,
* McsEngl.lawyer-office-management-program@cptIt,
* McsEngl.program.LawyerOfficeManagement@cptIt468,
* McsElln.ΔΙΚΗΓΟΡΙΚΟ@cptIt,

FvMcs.Cmrpgm.Architect-Office-Management

name::
* McsEngl.conceptIt474,
* McsEngl.Cmrpgm.Architect-Office-Management@cptIt,
* McsEngl.FvMcs.Cmrpgm.Architect-Office-Management@cptIt,
* McsEngl.architect-office-management-program@cptIt,
* McsEngl.program'ArchitectOfficeManagement@cptIt474,
* McsElln.ΑΡΧΙΤΕΚΤΟΝΙΚΟ@cptIt,

FvMcs.Cmrpgm.UTILITY

name::
* McsEngl.conceptIt481,
* McsEngl.Cmrpgm.UTILITY@cptIt,
* McsEngl.FvMcs.Cmrpgm.UTILITY@cptIt,
* McsEngl.application-program-utility@cptIt,
* McsEngl.utility'applicationProgrm@cptIt481,

SPECIFIC

Specific_concepts (level 3) =
* COMPRESSION-UTILITY#cptIt523: attSpe#

FvMcs.Cmrpgm.TRAINING

name::
* McsEngl.conceptIt482,
* McsEngl.Cmrpgm.TRAINING@cptIt,
* McsEngl.FvMcs.Cmrpgm.TRAINING@cptIt,
* McsEngl.training-program@cptIt,
* McsEngl.program.training@cptIt482,

FvMcs.Cmrpgm.AGENT

name::
* McsEngl.conceptIt493,
* McsEngl.Cmrpgm.AGENT@cptIt,
* McsEngl.FvMcs.Cmrpgm.AGENT@cptIt,
* McsEngl.agent'program@cptIt493,
* McsEngl.agent-program@cptIt,
* McsEngl.program.agent@cptIt493,
* McsElln.ΠΡΑΚΤΟΡΑΣ@cptIt,

DEFINITION

CYC PROJECT AT MCC CORPORATION:
Cyc becomes thought of as THE KNOWLEDGE UTILITY, much like an electric or telephone utility today: something everyone plugs into and is happy to pay for. Just as, today, mo one would even think of buying a computer that didn't have an operating system and that couldn't run a spreadsheet and a word processing program, we hope that by 1999 no one would even think about having a computer that doesn't have Cyc running on it.
[Lenat 1990]

Ξεκίνησε το 1984.
Είναι ένα expert system που σήμερα γνωρίζει 30.000 γενικές έννοιες.
Εχει υποστηρικτες την Apple, Microsoft.
[COMPUTER GO, JAN. 1995, 14]

The name Cyc (Lenat and Guha 1990) refers to:
a) the large knowledge representation system being developed in a multi-year project at MCC;
b) the knowledge base being built using the system, and
c) the overall project.
Cyc, the project, is the largest knowledge representation effort to date and has a variety of corporate investors who hope that Cyc will become a resource for such activities as natural language understanding and the management of large-scale corporate knowledge bases.
The Cyc system has a variety of important features:
* CycL is Cyc's frame-based knowledge representation language. In common with many other such languages, CycL uses two separate syntaxes: one to represent the structure of a knowledge base in terms of units (Cyc's term for concept) and slots, and the other to represent rules and constraints.
* CycL is heavily dependent on the top-level ontology that comes with Cyc: This top-level ontology describes such abstract things as represented thing, stuff, collection, individual object and internal machine thing.
* CycL contains a wide variety of features designed to deal with difficult problems that appear when representing knowledge about everyday things. For example CycL has mechanisms to handle what it calls subabstractions, which are context-dependent aspects of a thing (particularly different `snap-shots' of a thing at points in time).
* Cyc contains a large number of inference mechanisms. To answer queries, Cyc uses a chain of increasingly complex mechanisms that are called successively until one succeeds. Also present are a truth maintenance system, and mechanisms for analogical reasoning (to suggest new rules or facts) and conflict resolution.
Cyc has a variety of user interface capabilities. The primary focus of these is editing the details of concepts (i.e. the values of slots and associated rules). Multiple users can operate on a Cyc knowledge base using these mechanisms from remote displays. Conflicts that result are detected asynchronously and result in the initiation of dialogues between users, mediated by the system.
* The standard Unit Editor (UE) has a large window tiled with several subwindows each displaying a unit's slots. The user modifies the slots by entering declarative statements in CycL's restricted syntax. Despite the greater sophistication of the other interface modalities described below, the emacs-based UE appears still to be the major way that knowledge is entered into Cyc (Porter 1994).
* The Museum Unit Editor allows the user to traverse the network of units. The relationship of one unit to another is shown using nested boxes: The inner box represents the related unit.
* Another interface mechanism called HITS, developed by MCC's human interface lab (Terveen 1990; Terveen and Wroblewski 1992), provides a collaborative interface between the user and Cyc. HITS actively assists the user in making knowledge editing decisions and is based on an edit-by-analogy paradigm - using prior editing tasks as models.
The Cyc project has the ambitious goal to capture a sufficiently large percentage of `common-sense' knowledge such that the system will begin to be able to `read' external sources of knowledge and thus augment its knowledge base automatically.
[Tim Lethbridge's PhD Thesis 1994nov]

cyc'GENERIC

_GENERIC:
* program-knowledge#cptItsoft497#

Cycorp, Inc.
3721 Executive Center Drive, Suite 100
Austin, TX 78731
Internet: info@cyc.com
Telephone: +1 (512) 342-4000
Fax: +1 (512) 342-4040

cyc'BUDGET#cptEconomy540.16#

name::
* McsEngl.cyc'BUDGET@cptIt,

$60M:
... το 1986, το Cyc ρώτησε εάν είναι άνθρωπος. Αργότερα την ίδια χρονιά, ρώτησε εάν στο project εμπλέκονται και άλλοι υπολογιστές.

Ο πρώτος υπολογιστής που βγάζει συμπεράσματα;

Εδώ και 18 χρόνια προγραμματιστές και επιστήμονες διαφόρων ειδικοτήτων ασχολούνται με ένα project, η ολοκλήρωση του οποίου ευελπιστούν ότι θα αλλάξει τον κόσμο. Σκοπός του, κόστους 60 εκ. δολαρίων (περίπου 64 εκ. ευρώ) project, είναι η εκμάθηση της κοινής λογικής σε έναν υπολογιστή.
Για το σκοπό αυτό δημιουργήθηκε μια database με την ονομασία Cyc, η οποία τροφοδοτήθηκε με 1,4 εκατομμύρια πληροφορίες και αξιώματα σχετικά με την καθημερινή ζωή τα οποία χρησιμοποιούνται από τον υπολογιστή για την εξαγωγή συμπερασμάτων με τον ίδιο τρόπο που σκέφτεται ο ανθρώπινος εγκέφαλος. Τα αξιώματα και οι πληροφορίες μπορεί να είναι στοιχεία όπως ''το αυτοκίνητο έχει ρόδες'' ή ''όταν κυματίζει η σημαία υπάρχει ρεύμα αέρα'' ή ακόμη και 'ῃ γέννηση προηγείται του θανάτου'' τα οποία είναι ιδιαίτερα χρήσιμα για την ανάπτυξη εφαρμογών τεχνητής νοημοσύνης.
Ο αμερικάνικος στρατός έχει ήδη επενδύσει 25 εκ. δολάρια (περίπου 26,6 εκ. ευρώ), ενώ το Cyc χρησιμοποιείται ήδη σε κάποιες εμπορικές εφαρμογές όπως στη μηχανή αναζήτησης (search engine) του Lycos.
Πνευματικός πατέρας του project Cyc, είναι ο κ. Doug Lenat, ο οποίος το 1983, όταν ήταν καθηγητής στο πανεπιστήμιο του Stanford, αποφάσισε ότι για την εξέλιξη της τεχνητής νοημοσύνης πρέπει να δημιουργηθεί μια βάση δεδομένων η οποία θα επιτρέπει στον υπολογιστή να ξεχωρίζει άμεσα τα παράλογα δεδομένα όπως π.χ. το γεγονός ότι ένας 25χρονος δεν είναι δυνατόν να έχει 20ετή εργασιακή πείρα. Η βάση δεδομένων του Cyc χωρά σε ένα μόλις CD-ROM, αλλά η ιδιοκτήτρια εταιρεία Cycorp Inc., ευελπιστεί ότι σύντομα η database αυτή θα γίνει μια παγκόσμια knowledgebase καθώς εδώ και λίγο καιρό η εταιρεία επιτρέπει την ενημέρωσή της από το ευρύ κοινό μέσω Internet.
Οι σχεδιαστές του Cyc εκτιμούν ότι η σωστή εκμετάλλευση και η ευρεία χρήση της, θα επιτρέψει στους υπολογιστές να μη λειτουργούν βάση άκαμπτων νόμων αλλά βάση γενικεύσεων οι οποίες είναι η αρχή του τρόπου με τον οποίοι κάνουν υποθέσεις οι άνθρωποι.
Οι κατασκευαστές του Cyc το έχουν σχεδιάσει έτσι ώστε να κάνει ερωτήσεις όταν ''κρίνει'' ότι χρειάζεται περισσότερα στοιχεία σχετικά με μία έννοια. Χαρακτηριστικό παράδειγμα είναι ότι το 1986, το Cyc ρώτησε εάν είναι άνθρωπος. Αργότερα την ίδια χρονιά, ρώτησε εάν στο project εμπλέκονται και άλλοι υπολογιστές.
Ωστόσο, οι επικριτές του Cαναφέρουν ότι η ''κοινή λογική'' δε στηρίζεται στην υπακοή σε μια σειρά κανόνων όπως η database του Cyc αλλά στο συνδυασμό της υπακοής αυτής με την αναγνώριση μοτίβων (pattern recognition).
[www.Flash.gr 17/6/2002]

$37M:
Partly because of its unique history, the Cyc Project has been able to devote more than half of its resources (about $20M out of $37M) to develop its rich general ontological content, which in turn what has driven the evolution of its ontologizing methodology and its inferencing innovations. The heart of Cyc is its enormous general KB.
["Leveraging CYC for HPKB Intermediate-level Knowledge and Efficient Reasoning" Dr. Douglas B. Lenat ] {1998-03-01}

cyc'CYCL#cptIt517#

name::
* McsEngl.cyc'CYCL@cptIt,

cyc'EVOLUTION#cptCore546.171#

name::
* McsEngl.cyc'EVOLUTION@cptIt,

{time.2006.07 OpenCyc 1.0:
The latest version of OpenCyc, 1.0, was released in July 2006. OpenCyc 1.0 includes the entire Cyc ontology containing hundreds of thousands of terms, along with millions of assertions relating the terms to each other. The knowledge base contains 47,000 concepts and 306,000 facts and can be browsed on the OpenCyc website.
[http://en.wikipedia.org/wiki/Cyc]

* ResearchCyc 1.0:
In July 2006, Cycorp released ResearchCyc 1.0, a free (but not open source) version of Cyc aimed at the research community. (ResearchCyc was in beta stage of development during all of 2004; a beta version was released in February 2005.) In addition to the taxonomic information contained in OpenCyc, ResearchCyc includes significantly more semantic knowledge (i.e., additional facts) about the concepts in its knowledge base, and includes a large lexicon, English parsing and generation tools, and Java based interfaces for knowledge editing and querying.
[http://en.wikipedia.org/wiki/Cyc] 2007-09-21

{time.2001-05-15 OpenCyc
Date: 2001-05-15 10:15
Summary: Announcing OpenCyc
* The first version of OpenCyc was released in May 2001 and contained only 6,000 concepts and 60,000 facts.
[http://en.wikipedia.org/wiki/Cyc]

{time.1996aug08
Version 2.1 of the Upper CYC® Ontology is released.

{time.1995 Cycorp
Cycorp, Inc., based in Austin, Texas,
Founded in January 1995 by AI pioneer Doug Lenat as a spin-off from MCC, Cycorp is continuing the development of the Cyc project, initiated by Lenat at MCC in 1984. Cycorp has inherited from MCC's Cyc project not only the CYC® technology but the majority of its staff.
[Cycorp Overview, November 3, 1997]

1990: Top-Down methodology:
Gradually, around 1990, we began to work in a more top-down fashion, treating entire topics one at a time and in moderate detail.
[Lenat, http://www.cyc.com/halslegacy.html, (2000jul24)]

1987:
Cyc passed the 100,000-rule mark in 1987.
[http://www.cyc.com/hpkb/proposal-summary-hpkb.html, (1997)]

{time.1984 Cyc:
Doug Lenat's CYC (from enCYClopedia) Project at MCC in Austin, a ten- year $35 million project begun in 1984, uses logic, too, but emphasizes the Aristotle-problem, employing a dozen 'ontological engineers' to enumerate tens of millions of common-sense facts that will ultimately 'add up' to logical intelligence. Lenat's goal is a system that can understand and speak ordinary language, and detect violations of common sense as readily as humans can.
[] 1998feb28

cyc'FUNCTION

name::
* McsEngl.cyc'FUNCTION@cptIt,

JENEREINO:
* KMS_FUNCTION#ql:function'of'kms-*###

cyc'QUERING

name::
* McsEngl.cyc'QUERING@cptIt,

The terminology used in this document to refer to different types of queries is:
1. "ASK" -> General-purpose query
2. "PROVE" -> Conditional query
3. "QUERY" -> Could be either of the above
[http://www.cyc.com/doc/handbook/oe/13-writing-cycl-queries.html]

cyc'ASK

name::
* McsEngl.cyc'ASK@cptIt,

_DEFINITION:
The purpose of an ASK operation is to query a CYC® Server about the truth of a formula.
The details of an ASK operation vary from interface to interface.
[http://www.cyc.com/cycdoc/ref/glossary.html#ASK] 2007-09-22

EXAMPLE:
For example, if you wanted to find some people who have served as head of state of a European country, you might execute an ASK with the following parameters:
Formula: (#$and
(#$geographicalSubRegions#$ContinentOfEurope ?X)
(#$headOfStateOf ?X ?Y))
Microtheory:#$BaseKB
Direction: backward
Number: 5
Time: 10
Inference Depth: 10
Axiom Depth: 3
This asks CYC® to find no more than 5 bindings for ?X and ?Y, satisfiable in the#$BaseKB, that can be found in 10 seconds of processor time or less. CYC® can use rules in the search, since the direction is backward, and can stop pursuing any search path as soon as it requires using a 4th rule or satisfying an 11th literal.
[http://www.cyc.com/cycdoc/ref/glossary.html#ASK] 2007-09-22

cyc'ASSERT'OPERATION

name::
* McsEngl.cyc'ASSERT'OPERATION@cptIt,

The purpose of the ASSERT operation is to add a new assertion--a "fact" or a "rule"--to the KB. If an ASSERT operation is successful, afterwards the KB will contain one or more new assertions.
[http://www.cyc.com/cycdoc/ref/glossary.html] 2007-09-22

cyc'MERGING

name::
* McsEngl.cyc'MERGING@cptIt,

The advent of Web services and the Semantic Web described by domain ontologies highlight the bottleneck to their growth: ontology mapping, merging, and integration. In this paper we present the process by which over the last 15 years several ontologies of varying complexity have been mapped or integrated with Cyc, a large commonsense
knowledge base. These include
- SENSUS,
- FIPS 10-4,
- several large (300k-term) pharmaceutical thesauri,
- large portions of WordNet,
- MeSH/Snomed/UMLS, and the
- CIA World Factbook.
This has to date required trained ontologists talking with subject matter experts. To break that bottleneck – to enable subject matter experts to directly map/merge/integrate their ontologies – we have been developing interactive clarification-dialog-based tools.
[http://www.cyc.com/doc/white_papers/mapping-ontologies-into-cyc_v31.pdf] 2007-09-20

cyc'NL-SUBSYSTEM

name::
* McsEngl.cyc'NL-SUBSYSTEM@cptIt,
* McsEngl.natural'language'in'cyc@cptIt502,

STRUCTURE:
The Cyc-NL system can be described in terms of its three primary components, although in truth there are many other utilities that contribute to its success. The three main components are the lexicon, the syntactic parser, and the semantic interpreter.
[http://www.cyc.com/nl.html, (2000jul25)]

cyc'LEXICON

name::
* McsEngl.cyc'LEXICON@cptIt,

The lexicon is the backbone of the NL system. It contains syntactic and semantic information about English words. Each word is represented as a CYC® constant. For example, the constant#$Light-TheWord is used to represent the English word "light". Assertions in the lexicon specify that#$Light-TheWord has noun, verb, adjective, and adverb forms (as in "a bright light", "light a fire", "a light meal", and "touching someone lightly", respectively). Further lexical assertions specify which syntactic patterns the various forms of "light" can appear in (for example, "light" can be a transitive verb, as in "he lit a fire"; it can also appear with certain prepositions, as in "the whole house was lit up"). Most importantly, the lexicon is where links between English words and CYC® constants are stored. The noun "light", for example, has denotation links to two CYC® constants:#$LightEnergy and#$LightingDevice. The other parts of speech of#$Light-TheWord have denotation links to CYC® constants as well.
When Cyc-NL processes an input sentence, it first checks the lexicon to assign possible parts of speech to words in the string. The lexicon (along with our generative morphology component) would assign these parts of speech to the following input string:

"John saw the light with the telescope"
pn vb det n prep det n
n vb vb
adj
pn=proper noun det=determiner n=noun vb=verb prep=preposition adj=adjective
Notice that many of the words are ambiguous as to part of speech. It is the job of the syntactic parser to decide which part-of-speech assignments are appropriate, and to build a structure from the sentence which can be passed along to the sematic component for interpretation.
[http://www.cyc.com/nl.html, (2000jul25)]

cyc'SYNTACTIC'PARSER

name::
* McsEngl.cyc'SYNTACTIC'PARSER@cptIt,

The syntactic parser utilizes a phrase-structure grammar loosely based on Government and Binding principles. Using a number of context-free rules, the parser builds tree-structures, bottom-up, over the input string. The parser outputs all trees allowed by the rule system, so multiple parses are possible in cases of syntactic ambiguity.
In the case of the sentence above, the parser generates two tree structures:
{:SENTENCE {:NP {:DETP {#$Determiner [the]}} {:N-BAR {#$SimpleNoun [man]}}} {:VP {#$Verb [saw]} {:NP {:DETP {#$Determiner [the]}} {:N-BAR {#$SimpleNoun [light]}} {:PP {#$Preposition [with]} {:NP {:DETP {#$Determiner [the]}} {:N-BAR {#$SimpleNoun [telescope]}}}}}}}} {:SENTENCE {:NP {:DETP {#$Determiner [the]}} {:N-BAR {#$SimpleNoun [man]}}} {:VP {#$Verb [saw]} {:NP {:DETP {#$Determiner [the]}} {:N-BAR {:N-BAR {#$SimpleNoun [light]}} {:PP {#$Preposition [with]} {:NP {:DETP {#$Determiner [the]}} {:N-BAR {#$SimpleNoun [telescope]}}}}}}}}
In the first tree, the prepositional phrase "with a telescope" attaches to the verb phrase, corresponding to the interpretation "John used a telescope to see the light". In the second tree, the prepositional phrase attaches to the noun phrase, corresponding to the interpretation "John saw the light which had a telescope". These structures are then passed to the semantic component, where they are translated into CycL, and spurious parses are discarded.
[http://www.cyc.com/nl.html, (2000jul25)]

cyc'Semantic'Interpreter

name::
* McsEngl.cyc'Semantic'Interpreter@cptIt,

Cyc-NL's semantic component transforms syntactic parses into CycL formulas. The output of the semantic component is "pure" CycL: a parsed sentence can immediately be asserted into the KB, for example, or a parsed question can be presented to the SQL generator in order to pose a database query.
Cyc's semantic interpreter incorporates principles of Montague semantics. Semantic structures are built up piece-by-piece and combined into larger structures. For each syntactic rule, there is a corresponding semantic procedure which applies. Cyc-NL's clausal semantics is basically "verb-driven". Verbs are stored in the lexicon with "templates" for their translation into CycL. For example, the template for "believe" when followed by a that-clause might look like this: (#$believes :SUBJECT :CLAUSE). In translating a sentence like "Mary believes that the blue hat is pretty", we retrieve the appropriate template for "believe", then build up the interpretations of the arguments which will fill the :SUBJECT and :CLAUSE slots.
Cyc-NL's semantic component makes use of knowledge in the KB at virtually every level of the interpretation process. In the example "the man saw the light with the telescope", the semantic component would consult the KB to find out whether telescopes are typically used as instruments in seeing, and whether lights are the kinds of things that usually have telescopes. Based on the results of asking the KB, the semantic component would reject the second parse as invalid, and produce a CycL translation of the first parse.
Using commonsense knowledge to guide the interpretation process allows us to deal with the ever-present problem of ambiguity in natural language without having to rely solely on statistical techniques.
[http://www.cyc.com/nl.html, (2000jul25)]

EVALUATION

It is imposible from only the syntax (how words are related) to get the 'meaning' of 'logos'.
The 'ambiquities' of logos are resoleved in 'meaning' (one meaning) and
the ambiguities of 'meaning' are resoleved in 'referent' (one true).
That's why a 'sentence' is transformed into 'cyc-formulas' and then can by compared with its 'kb' to UNDERSTAND it, to get its meaning.
[hmnSngo.{2000-09-24}]

cyc'REASONING

name::
* McsEngl.cyc'REASONING@cptIt,
* McsEngl.cyc'inference'engine@cptIt502,
* McsEngl.inferencing'in'cyc@cptIt502,
* McsEngl.inference'in'cyc@cptIt502,

cyc'reasoning'DEFINITION:
Inference is the process of automatically adding new facts to a knowledge base by applying rules of inference to the axioms and already-inferred facts of the knowledge base.
[http://www.cyc.com/cyc-2-1/ref/glossary.html, 1997aug08] 2000jul25

inferencing in Cyc
The Cyc inference engine performs general logical deduction (including modus ponens, modus tollens, and universal and existential quantification), with AI's well-known named inference mechanisms (inheritance, automatic classification, etc.) as special cases. Cyc performs best-first search over proof-space using a set of proprietary heuristics, and uses microtheories to optimize inferencing by restricting search domains.

Because the Cyc KB contains hundreds of thousands of assertions (aka "rules"), many approaches commonly taken by other inference engines (such as frame-based expert system shells, RETE match, Prolog, etc.) just don't scale up to KBs of this size. As a result, the Cyc team has been forced to develop other techniques.

Cyc also includes several special-purpose inferencing modules for handling a few specific classes of inference. One such module handles reasoning concerning collection membership/disjointness. Others handle equality reasoning, temporal reasoning, and mathematical reasoning.
[http://www.cyc.com/cyc/technology/technology/whatiscyc_dir/howdoescycreason] 2007-09-20

cyc'ARGUMENTATION:
Argumentation is the process of weighing various arguments, pro and con, for the truth of an assertion, and arriving at a truth value for the assertion. CYC® employs a number of heuristics during argumentation. One simple example is "prefer monotonic rules," i.e., if two rules conclude P but with different negation status (one concludes P with a monotonic rule but the other concludes Not-P with a default rule), all else being equal, CYC® sets the truth value of P to the one suggested by the monotonic rule.
[http://www.cyc.com/cycdoc/ref/glossary.html] 2007-09-22

cyc'reasoning'SPESIFEINO:
* BACKWARD_INFERENCING
* COLLECTION_MEMBERSHIP
* DISJOINTENESS
* EQUALITY_REASONING
* REFLEXIVITY_REASONING
* SUBSETHOOD
* SYMMETRY_REASONING
* TRANSITIVITY_REASONING
===============================================
The Cyc knowledge base contains over 1 million assertions. Many approaches commonly taken by other inference engines (such as frames, RETE match, Prolog, etc.) just don't scale well to KBs of this size. As a result, the Cyc team has been forced to develop other techniques.
Cyc also includes several special-purpose inferencing modules for handling a few specific classes of inference. One set of modules handles reasoning concerning collection membership, subsethood, and disjointness. Another handles equality reasoning. Others implement fast reasoning with#$genlPreds and#$genlAttributes. Still others implement symmetry, transitivity and reflexivity reasoning.
[http://www.cyc.com/cycdoc/ref/inferencing.html] 2007-09-22

cyc'RULE'OF'INFERENCE

name::
* McsEngl.cyc'RULE'OF'INFERENCE@cptIt,
* McsEngl.rule'of'inference'in'cyc@cptIt502,

Cyc currently uses two rules of inference in its general theorem proving, modus ponens and modus tollens.
[http://www.cyc.com/cyc-2-1/ref/glossary.html, 1997aug08] 2000jul25

modus ponens
A rule of inference under which, given a knowledge base which contains the formulas "A" and "A implies B", one may conclude "B".
[http://www.cyc.com/cyc-2-1/ref/glossary.html, 1997aug08] 2000jul25

modus tollens
A rule of inference which can be derived from modus ponens under which, given a knowledge base which contains the formulas "Not B" and "A implies B", one may conclude "Not A".
[http://www.cyc.com/cyc-2-1/ref/glossary.html, 1997aug08] 2000jul25

cyc'reasoning.BACKWARD

name::
* McsEngl.cyc'reasoning.BACKWARD@cptIt,

_DEFINITION:
Backward inferencing--the type of inferencing initiated by an ASK operation--can be regarded as a search through a tree of nodes, where each node represents a CycL formula for which bindings are sought, and each link represents a transformation achieved by employing an assertion in the knowledge base.
[http://www.cyc.com/cycdoc/ref/inferencing.html] 2007-09-22

cyc'reasoning.EQUALITY

name::
* McsEngl.cyc'reasoning.EQUALITY@cptIt,

Equality is handled at unification time. It's as if the KB had a unique names assumption: objects with different names are assumed to be not equal, unless you specifically override the assumption by asserting that two objects are equal, e.g. (equals Fred Joe). No inference concerning equality is done at unification time.
[http://www.cyc.com/cycdoc/ref/inferencing.html] 2007-09-22

cyc'CANONICALIZER

name::
* McsEngl.cyc'CANONICALIZER@cptIt,
* McsEngl.canonicalizer'in'cyc@cptIt502,

The Canonicalizer is the module in Cyc which converts from EL#ql:el'in'cycl-*# to HL#ql:hl'in'cycl-*#. Having two separate representation languages means that we have to have a way to convert between the two. The Canonicalizer converts from EL to HL, and the Uncanonicalizer converts back from HL to EL. The Canonicalizer is important because it makes the EL/HL distinction possible. Without the Canonicalizer, we would be stuck with choosing a particular tradeoff between expressiveness and efficiency. With the Canonicalizer, we can have both. See the section on the EL/HL Distinction for more information on EL and HL, and the motivation for making the separation.
[http://www.cyc.com/doc/handbook/oe/06-el-hl-and-the-canonicalizer.html] 2007-09-22

cyc'GOAL#cptIt215#

name::
* McsEngl.cyc'GOAL@cptIt,

The goal of the CYC® project is to break the "software brittleness bottleneck" once and for all by constructing a foundation of basic "common sense" knowledge--a semantic substratum of terms, rules, and relations--that will enable a variety of knowledge-intensive products and services. CYC® is intended to provide a "deep" layer of understanding that can be used by other programs to make them more flexible.
[The CYC® Technology Cycorp. All rights reserved. September 15, 1997] 1998feb27

cyc'TRUTH-MAINTENANCE-SYSTEM

name::
* McsEngl.cyc'TRUTH-MAINTENANCE-SYSTEM@cptIt,
* McsEngl.tms'in'cyc@cptIt502,
* McsEngl.truth'maintenance'system'in'cyc@cptIt502,

truth maintenance system (TMS)
A truth maintenance system is a mechanism whereby a knowledge based system can keep reasonably consistent and truthful as its knowledge changes. For example, if facts have been added to the KB through inference based on a set of premises, and one of the premises is later removed from the KB, any conclusion that depends on that premise should also be removed from the KB. The CYC® TMS relies on the fact that each assertion has all of its arguments recorded in the datastructure.
[glossary] 2007-09-22

cyc'KNOWLEDGE-BASE#ql:cycl'knowledge'base#

name::
* McsEngl.cyc'KNOWLEDGE-BASE@cptIt,

cyc'resourceInfHmn#cptResource843#

name::
* McsEngl.cyc'resourceInfHmn@cptIt,

http.CYC:
* http://www.cyc.com//

http.OpenCyc:
* http://opencyc.org//

http.ResearchCyc:
* http://researchcyc.cyc.com//

http.CycFoundation (blog):
* http://www.cycfoundation.org/blog//

cyc'TOOL

name::
* McsEngl.cyc'TOOL@cptIt,

cyc'OpenCyc-KB-Browser

name::
* McsEngl.cyc'OpenCyc-KB-Browser@cptIt,
* McsEngl.cyc'browser@cptIt502,
* McsEngl.cyc'kb'browser@cptIt502,
* McsEngl.opencyc'kb'browser@cptIt502,

_DEFINITION:
The OpenCyc KB Browser includes a subset of the functionality of the Cyc KB Browser.
...
The OpenCyc KB Browser is the main interface tool for accessing the Cyc Knowledge Base (Cyc KB). It provides a means for browsing the KB in a number of different ways, a means for querying the KB, and (for registered users) a means for modifying or adding to the KB itself.
[http://www.cyc.com/cycdoc/ref/kb-browser.html] 2007-09-20

cyc'Version

name::
* McsEngl.cyc'Version@cptIt,

OpenCyc

name::
* McsEngl.opencyc@cptIt502,

_DEFINITION:
OpenCyc is the open source version of the Cyc(r) technology, the world's largest and most complete general knowledge base and commonsense reasoning engine. OpenCyc can be used as the basis for a wide variety of intelligent applications.
[http://sourceforge.net/projects/opencyc/]

* OpenCyc
The latest version of OpenCyc, 1.0, was released in July 2006. OpenCyc 1.0 includes the entire Cyc ontology containing hundreds of thousands of terms, along with millions of assertions relating the terms to each other. The knowledge base contains 47,000 concepts and 306,000 facts and can be browsed on the OpenCyc website. The first version of OpenCyc was released in May 2001 and contained only 6,000 concepts and 60,000 facts. The knowledge base is released under the Apache License. Cycorp has stated its intention to release OpenCyc under parallel, unrestricted licences to meet the needs of its users. The CycL and SubL interpreter (the program that allows you to browse and edit the database as well as to draw inferences) is released free of charge, but only as a binary, without source code. It is available for GNU/Linux and for Windows.
[http://en.wikipedia.org/wiki/Cyc]

EVOLEINO:
Date: 2001-05-15 10:15
Summary: Announcing OpenCyc

ResearchCyc

name::
* McsEngl.researchcyc@cptIt502,

ResearchCyc
In July 2006, Cycorp released ResearchCyc 1.0, a free (but not open source) version of Cyc aimed at the research community. (ResearchCyc was in beta stage of development during all of 2004; a beta version was released in February 2005.) In addition to the taxonomic information contained in OpenCyc, ResearchCyc includes significantly more semantic knowledge (i.e., additional facts) about the concepts in its knowledge base, and includes a large lexicon, English parsing and generation tools, and Java based interfaces for knowledge editing and querying.

Cycorp has publicly stated its intention of releasing all of the terms and taxonomic relationships contained in ResearchCyc as part of OpenCyc and this will supposedly be achieved with a future release of OpenCyc. One stated goal is that of providing a completely free and unrestricted semantic vocabulary for use in the Semantic Web. The OpenCyc taxonomy supposedly will become available in Owl on the OpenCyc web site.
[http://en.wikipedia.org/wiki/Cyc] 2007-09-21

CYC10

name::
* McsEngl.cyc10@cptIt502,

_DEFINITION:
The current version of CYC® developed at Cycorp under the direction of Keith Goolsbey, and first deployed there in March, 1995. All current CYC® development effort is with Cyc-10.
[http://www.cyc.com/cycdoc/ref/glossary.html#Cyc-10] 2007-09-21

CYC9

name::
* McsEngl.cyc9@cptIt502,

_DEFINITION:
The last version of CYC® developed at MCC.
[http://www.cyc.com/cycdoc/ref/glossary.html#Cyc-9] 2007-09-21

cyc'ENVIRONMENT#cptCore756#

name::
* McsEngl.cyc'ENVIRONMENT@cptIt,

cyc'EVALUATION

name::
* McsEngl.cyc'EVALUATION@cptIt,

The Architecture
Cyc διαθέτει πλήρες και λειτουργικό API για πρόσβαση σε όλη την λειτουργικότητα του
Επιτρέπει ανάπτυξη του Cyc σε οποιαδήποτε κατανεμημένη αρχιτεκτονική
(-) Φορτώνει όλη την οντολογία στην μνήμη => πρόβλημα απώλειας μνήμης
(-) Όλη η γνώση πρέπει να φορτωθεί στα περιορισμένα όρια της μνήμης
Cyc βρίσκεται σε προσπάθεια βελτίωσης αυτού του προβλήματος
[http://www.csd.uoc.gr/~hy566/Deliverables/Excer1/CyCorp.ppt] 2008-01-26

Criticisms of the Cyc Project
The Cyc project has been described as "one of the most controversial endeavours of the artificial intelligence history" (Bertino et al, p. 275), so it has inevitably garnered its share of criticism. Criticisms involve:
* The complexity of the system - arguably necessitated by its encyclop?dic ambitions - and the consequent difficulty in adding to the system by hand
* Scalability problems from widespread reification, especially as constants
* Unsatisfactory treatment of the concept of substance and the related distinction between intrinsic and extrinsic properties
* The lack of any meaningful benchmark or comparison for the efficiency of Cyc's inference engine
* The current incompleteness of the system in both breadth and depth and the related difficulty in measuring its completeness
* Limited documentation
* The lack of up-to-date on-line training material makes it difficult for new people to learn the systems
* Contrary to claims there is no "open source" ontology available nor an "open source" version of assertions
* A large number of gaps in not only the ontology of ordinary objects but an almost complete lack of relevant assertions describing such objects
* An amateurish feel to the entire project that point to the pitfalls of large "open" projects or perhaps the commitment of its founder
These issues have been debated in various places since the inception of the project.
[http://en.wikipedia.org/wiki/Cyc] 2007-09-21

cyc'PROFESSIONAL#cptIt6#

name::
* McsEngl.cyc'PROFESSIONAL@cptIt,
* McsEngl.cyc'people@cptIt502,
* McsEngl.people'of'cyc@cptIt502,

Lenat, Doug:
EMAIL: doug@cyc.com
URL:
** The FOUNDER.

cyc'EDITOR (AUTHOR)

name::
* McsEngl.cyc'EDITOR (AUTHOR)@cptIt,
* McsEngl.author'in'cyc@cptIt502,
* McsEngl.cyclist@cptIt502,
* McsEngl.editor'in'cyc@cptIt502,
* McsEngl.engineer'in'cyc@cptIt502,
* McsEngl.KEer'in'cyc@cptIt502,
* McsEngl.Ontological'Engineer'in'cyc@cptIt502,
* McsEngl.OE'in'cyc'502@cptIt,

_DESCRIPTION:
When a Cyclist is ready to add assertions ...
[http://www.cyc.com/doc/handbook/oe/03-from-constants-to-assertions.html]

cyc'BROWSER (USER)

name::
* McsEngl.cyc'BROWSER (USER)@cptIt,

Anyone who browses the cyc-ontology, but not edits it.
[KasNik]

FvMcs.Cmrpgm.COMPRESSION

_CREATED: {2003-02-17}

name::
* McsEngl.conceptIt523,
* McsEngl.Cmrpgm.COMPRESSION@cptIt,
* McsEngl.FvMcs.Cmrpgm.COMPRESSION@cptIt,
* McsEngl.compression/decompression-program@cptIt,
* McsEngl.compression-utility@cptIt,
* McsEngl.compression'program@cptIt523,
* McsEngl.program.compression@cptIt523,
====== lagoGreek:
* McsElln.ΣΥΜΠΙΕΣΗΣ/ΑΠΟΣΥΜΠΙΕΣΗΣ-ΠΡΟΓΡΑΜΜΑ@cptIt,

GENERIC

_GENERIC:
* PROGRAM#cptIt59#

tar-file

name::
* McsEngl.file.tar@cptIt,
* McsEngl.tar-file@cptIt,

_DESCRIPTION:
In computing, tar (derived from tape archive) is both a file format (in the form of a type of archive bitstream) and the name of a program used to handle such files. The format was created in the early days of Unix and standardized by POSIX.1-1988[1] and later POSIX.1-2001.[2]

Initially developed to write data to sequential I/O devices for tape backup purposes, tar is now commonly used to collect many files into one larger file for distribution or archiving, while preserving file system information such as user and group permissions, dates, and directory structures.[3]
[http://en.wikipedia.org/wiki/Tar_(computing)]

_7ZIP:
1) right click / 7zip/ add to archive/ tar
===
IF we want to compress, on tar-file do gz compression.
[http://linhost.info/2012/08/gzip-files-in-windows/]

SPECIFIC

_SPECIFIC:
* 7-ZIP
* BZIP2
* ZIP
* JAR

7ZIP

name::
* McsEngl.7ZIP@cptIt,

_DESCRIPTION:
The main features of 7-Zip

High compression ratio in 7z format with LZMA and LZMA2 compression
Supported formats:
Packing / unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM
Unpacking only: ARJ, CAB, CHM, CPIO, CramFS, DEB, DMG, FAT, HFS, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, RAR, RPM, SquashFS, UDF, VHD, WIM, XAR and Z.
For ZIP and GZIP formats, 7-Zip provides a compression ratio that is 2-10 % better than the ratio provided by PKZip and WinZip
Strong AES-256 encryption in 7z and ZIP formats
Self-extracting capability for 7z format
Integration with Windows Shell
Powerful File Manager
Powerful command line version
Plugin for FAR Manager
Localizations for 79 languages
7-Zip
7-Zip works in Windows 7 / Vista / XP / 2008 / 2003 / 2000 / NT / ME / 98. There is a port of the command line version to Linux/Unix.

On 7-Zip's Source Forge Page you can find a forum, bug reports, and feature request systems.
[http://www.7-zip.org/]

BZIP2

name::
* McsEngl.conceptIt523.1,
* McsEngl.bzip2@cptIt523.1,

_DEFINITION:
* It is a general compression program with very big compression

INSTALATION:
* I renamed the file to bz2, and I have put it on windows\system32

RUN:
* From dos-command: bz2 --help

SOURCE:
* bzip2-102-x86-win32.exe

FvMcs.Cmrpgm.postgreSQL

_CREATED: {2011-09-13}

name::
* McsEngl.conceptIt564,
* McsEngl.postgreSQL@cptIt564, {2011-09-13}
* McsEngl.postgres@cptIt564, {2011-09-13}

pg'DEFINITION

pg'DEFINITION

_DESCRIPTION:
PostgreSQL, often simply Postgres, is an object-relational database management system (ORDBMS) available for many platforms including Linux, FreeBSD, Solaris, Windows and Mac OS X.[6] It is released under the PostgreSQL License, which is an MIT-style license, and is thus free and open source software. As with many other open-source programs, PostgreSQL is not controlled by any single company — a global community of developers and companies develops the system.
[http://en.wikipedia.org/wiki/PostgreSQL]

pg'GENERIC

_GENERIC:
* object-relational-database#cptItsoft8.1#
* client-server-program#cptItsoft345#

pg'ATTRIBUTE

name::
* McsEngl.pg'ATTRIBUTE@cptIt,

Features
PostgreSQL has most features present in large proprietary DBMSs, like transactions, subselects, triggers, views, foreign key referential integrity, and sophisticated locking. We have some features they do not have, like user-defined types, inheritance, rules, and multi-version concurrency control to reduce lock contention.
[http://wiki.postgresql.org/wiki/FAQ]

Can PostgreSQL be embedded?
PostgreSQL is designed as a client/server architecture, which requires separate processes for each client and server, and various helper processes. Many embedded architectures can support such requirements. However, if your embedded architecture requires the database server to run inside the application process, you cannot use Postgres and should select a lighter-weight database solution.
Popular embeddable options include SQLite and Firebird SQL.
[http://wiki.postgresql.org/wiki/FAQ]

pg.SPECIFIC

name::
* McsEngl.pg.SPECIFIC@cptIt,

_SPECIFIC:#ql:_GENERIC cptIt564#

pg'Client-program

name::
* McsEngl.pg'Client-program@cptIt,

The user's client (frontend) application that wants to perform database operations. Client applications can be very diverse in nature: a client could be a text-oriented tool, a graphical application, a web server that accesses the database to display web pages, or a specialized database maintenance tool. Some client applications are supplied with the PostgreSQL distribution; most are developed by users.

pg'Database-cluster

name::
* McsEngl.pg'Database-cluster@cptIt,
* McsEngl.catalog-cluster-postgres@cptIt,
* McsEngl.database-cluster-postgres@cptIt,
* McsEngl.database-storage-area@cptIt,
* McsEngl.pg'cluster@cptIt,
* McsEngl.pg'data-area@cptIt,
* McsEngl.pg'data-directory@cptIt,

=== _NOTES: SQL uses the term catalog cluster.
... In file system terms, a database cluster will be a single directory under which all data will be stored. We call this the data directory or data area.
[http://www.postgresql.org/docs/9.1/static/creating-cluster.html]

_DESCRIPTION:
Tables are grouped into databases, and a collection of databases managed by a single PostgreSQL server instance constitutes a database cluster.
[file:///C:/Program%20Files/PostgreSQL/9.1/doc/postgresql/html/tutorial-concepts.html]

_PART:
* database#ql:pg'database#

Directory

In file system terms, a database cluster will be a single directory under which all data will be stored. We call this the data directory or data area. It is completely up to you where you choose to store your data. There is no default, although locations such as /usr/local/pgsql/data or /var/lib/pgsql/data are popular.
[http://www.postgresql.org/docs/9.1/static/creating-cluster.html]

pg'Database

name::
* McsEngl.pg'Database@cptIt,

_DESCRIPTION:
Tables are grouped into databases, and a collection of databases managed by a single PostgreSQL server instance constitutes a database cluster.
[file:///C:/Program%20Files/PostgreSQL/9.1/doc/postgresql/html/tutorial-concepts.html]

_PART:
* schema#ql:pg'schema#,
* table#ql:pg'table#

pg'Database'Create

name::
* McsEngl.pg'Database'Create@cptIt,

_winDOS:
1) connect-as-user#ql:pg'connect_to_server#,
2) cmd: CREATE DATABASE databasename;
===> [http://www.postgresql.org/docs/9.1/static/sql-createdatabase.html]

_winDOS:
1) set path to \Program Files\PostgreSQL\9.1\bin,
2) cmd: createdb -E UNICODE -U postgres topicmaps
===>
createdb -E UTF8 database-name

pg'Database'List

name::
* McsEngl.pg'Database'List@cptIt,

_winDOS:
1) connect-as-user#ql:pg'connect_to_server#,
2) cmd: \l
===> will list the databases

pg'Datatype

name::
* McsEngl.pg'Datatype@cptIt,

_DESCRIPTION:
Extensible data type system providing for custom, user-defined datatypes and rapid development of new datatypes.
[http://www.postgresql.org/about/advantages]

SPECIFIC

Table 45-49. typcategory Codes
Code  Category
A  Array types
B  Boolean types
C  Composite types
D  Date/time types
E  Enum types
G  Geometric types
I  Network address types
N  Numeric types
P  Pseudo-types
S  String types
T  Timespan types
U  User-defined types
V  Bit-string types
X  unknown type
[http://www.postgresql.org/docs/9.1/static/catalog-pg-type.html]

pg'Domain

name::
* McsEngl.pg'Domain@cptIt,

_DESCRIPTION:
A domain is essentially a data type with optional constraints (restrictions on the allowed set of values). The user who defines a domain becomes its owner.

If a schema name is given (for example, CREATE DOMAIN myschema.mydomain ...) then the domain is created in the specified schema. Otherwise it is created in the current schema. The domain name must be unique among the types and domains existing in its schema.

Domains are useful for abstracting common constraints on fields into a single location for maintenance. For example, several tables might contain email address columns, all requiring the same CHECK constraint to verify the address syntax. Define a domain rather than setting up each table's constraint individually.
[http://www.postgresql.org/docs/9.1/static/sql-createdomain.html]

pg'Doing

name::
* McsEngl.pg'Doing@cptIt,

pg'Connect-to-server

name::
* McsEngl.pg'Connect-to-server@cptIt,

_winDOS:
1) set "\Program Files\PostgreSQL\9.1\bin" on path
2a) cmd: psql -U postgress
===> connect user "postgress" to server.
2b) cmd: psql -d databasename -U postgress
===> connect user "postgress" to specific database.

pg'Execute-script-file

name::
* McsEngl.pg'Execute-script-file@cptIt,

_psql:
at the psql prompt do this:

\i <sqlfile>
[http://archives.postgresql.org/pgsql-sql/2000-11/msg00216.php]

_winDOS:
1) connect-as-user#ql:pg'connect_to_server#,
2) cmd: psql example.sql
===> execute the sql commands in the script file.
[http://archives.postgresql.org/pgsql-novice/2004-06/msg00011.php]

2b) If the server is not on your computer, you will need to specify the hostname to the computer and a username to log into the server with:
cmd: psql -h server.postgres.com -U dba example.sql

pg'Exit-connection

name::
* McsEngl.pg'Exit-connection@cptIt,

_winDOS:
1) connect-as-user#ql:pg'connect_to_server#,
2) cmd: \q
===> quit

pg'User.create

name::
* McsEngl.pg'User.create@cptIt,

_winDOS:
1) connect-as-user#ql:pg'connect_to_server#,
2) cmd: CREATE USER username WITH PASSWORD '123456';
===>

pg'User.priviliges

name::
* McsEngl.pg'User.priviliges@cptIt,

_winDOS:
1) connect-as-user#ql:pg'connect_to_server#,
2) cmd: GRANT all ON DATABASE databasename TO username;
===>

pg'Event-system

name::
* McsEngl.pg'Event-system@cptIt,

_DESCRIPTION:
The events system is an interprocess communication system in which messages and events can be transmitted between clients using the LISTEN and NOTIFY commands, allowing both simple peer to peer communication and advanced coordination on database events. Since notifications can be issued from triggers and stored procedures, PostgreSQL clients can monitor database events such as table updates, inserts, or deletes as they happen.
[http://www.postgresql.org/about/]

pg'EVOLUTION#cptCore546.171#

name::
* McsEngl.pg'EVOLUTION@cptIt,

_2011-09-11:
PostgreSQL 9.1 released

pg'Fulltext-search

name::
* McsEngl.pg'Fulltext-search@cptIt,

Full text indexing will make searching in large amounts of text quite quick. It isn't built into PostgreSQL, rather it's available through an external ('contrib') module called 'TSearch2'.

There was a 'tsearch' module so don't get them confused. TSearch was available before version 8.0 and will be deprecated in the future.

Installing tsearch2 is quite easy. Once you install the contrib package, find the tsearch2.sql file and import it:

psql -d databasename < /path/to/tsearch2.sql

for example:

$ psql -d mydatabase < /usr/share/postgresql/contrib/tsearch2.sql

It will run through a series of commands (CREATE FUNCTION and CREATE OPERATOR) and then finish installing.

If you log in to psql:

psql -d mydatabase

and run \d to print out a list of tables, you will see extra tables:

public | pg_ts_cfg | table | tomcat
public | pg_ts_cfgmap | table | tomcat
public | pg_ts_dict | table | tomcat
public | pg_ts_parser | table | tomcat

We don't need to worry about these tables or what they do at the moment.

Now that's installed, we need to add full text indexing to our table.
[http://www.designmagick.com/article/27/PostgreSQL/Introduction-to-Full-Text-Indexing]

pg'Installation

name::
* McsEngl.pg'Installation@cptIt,

Unistallation

In Windows:

Via Uninstaller:

i) Go to the Add/Remove Programs and uninstall postgresql server from there or go to the postgresql server installation directory and run the uninstaller.

Manual Uninstallation:

i) Remove the postgresql server installation directory. (rd /s /q "\Program Files\PostgreSQL\8.3") Assuming default location.

ii) Delete the user 'postgres' (net user postgres /delete)

iii) Remove the Registry entries. (HKEY_LOCAL_MACHINE\SOFTWARE\PostgreSQL\Installations\postgresql-8.3) and (HKEY_LOCAL_MACHINE\SOFTWARE\PostgreSQL\Services\postgresql-8.3)

iv) Remove the postgresql-8.3 service. (sc delete postgresql-8.3)
[http://forums.enterprisedb.com/posts/list/1437.page]

pg'JDBC

name::
* McsEngl.pg'JDBC@cptIt,

_ADDRESS.WPG:
* http://jdbc.postgresql.org//

pg'Licence

name::
* McsEngl.pg'Licence@cptIt,

Best of all, PostgreSQL's source code is available under a liberal open source license: the PostgreSQL License. This license gives you the freedom to use, modify and distribute PostgreSQL in any form you like, open or closed source.
[http://www.postgresql.org/about/]

pg'Limit

name::
* McsEngl.pg'Limit@cptIt,

Some general PostgreSQL limits are included in the table below.
Limit        Value
Maximum Database Size    Unlimited
Maximum Table Size    32 TB
Maximum Row Size      1.6 TB
Maximum Field Size    1 GB
Maximum Rows per Table    Unlimited
Maximum Columns per Table  250 - 1600 depending on column types
Maximum Indexes per Table  Unlimited
[http://www.postgresql.org/about/]

_Table_number:

Laurent Raufaste, Managed a Slony cluster of 12 servers
1 vote by Rick Branson
There is no practical limit on the number of tables in a given database.

The practical limit depends on how well your kernel copes with directories containing large numbers of files (since PG stores each table as a file within the directory for the database). Many Unixen start to get pretty slow with more than a few thousand files in a directory, because they do directory lookups by linear search.

pg'Object

name::
* McsEngl.pg'Object@cptIt,

_Ownership:
* every object created in postgres, is owned by the user created it:
[http://www.youtube.com/watch?v=FSDe2qDRDtc]

pg'pgAdmin

name::
* McsEngl.pg'pgAdmin@cptIt,
* McsEngl.pgAdmin@cptIt564i,

_DESCRIPTION:
Using an existing graphical frontend tool like pgAdmin or an office suite with ODBC or JDBC support to create and manipulate a database. These possibilities are not covered in this tutorial.
[file:///C:/Program%20Files/PostgreSQL/9.1/doc/postgresql/html/tutorial-accessdb.html]

pg'psql

name::
* McsEngl.pg'psql@cptIt,
* McsEngl.psql@cptIt564i,

_DESCRIPTION:
Running the PostgreSQL interactive terminal program, called psql, which allows you to interactively enter, edit, and execute SQL commands.
[file:///C:/Program%20Files/PostgreSQL/9.1/doc/postgresql/html/tutorial-accessdb.html]

pg'Password

name::
* McsEngl.pg'Password@cptIt,

superuser (postgres):

service account (postgres): hknu

pg'Replication

name::
* McsEngl.pg'Replication@cptIt,

_DESCRIPTION:
Replication (non-commercial and commercial solutions) allowing the duplication of the master database to multiple slave machines.
[http://www.postgresql.org/about/advantages]

pg'ResourceInfHmnn#cptResource843#

name::
* McsEngl.pg'ResourceInfHmnn@cptIt,

_ResourceWeb:
* http://www.postgresql.org//
* http://en.wikipedia.org/wiki/PostgreSQL,
* index-doc: http://www.postgresql.org/docs/9.1/static/bookindex.html,
* wiki: http://wiki.postgresql.org/wiki/Main_Page,
* docs: http://www.postgresql.org/docs/manuals//
* faq: http://wiki.postgresql.org/wiki/Frequently_Asked_Questions,
* Postgres, Passwords and Installers: http://pgsnake.blogspot.com/2010/07/postgresql-passwords-and-installers.html,
* intallation/unistalation: http://www.pokertracker.com/products/PT3/docs/PokerTracker3_Manual_Uninstall_Reinstall_PostgreSQL.pdf,

pg'Rule-system

name::
* McsEngl.pg'Rule-system@cptIt,
* McsEngl.query-rewrite-system-postgres@cptIt,

_DESCRIPTION:
The rules system, also called the query rewrite system, allows the database designer to create rules which identify specific operations for a given table or view, and dynamically transform them into alternate operations when they are processed.
[http://www.postgresql.org/about/]

pg'Server-program

name::
* McsEngl.pg'Server-program@cptIt,

_DESCRIPTION:
The PostgreSQL server can handle multiple concurrent connections from clients. To achieve this it starts ("forks") a new process for each connection. From that point on, the client and the new server process communicate without intervention by the original postgres process. Thus, the master server process is always running, waiting for client connections, whereas client and associated server processes come and go. (All of this is of course invisible to the user. We only mention it here for completeness.)
[file:///C:/Program%20Files/PostgreSQL/9.1/doc/postgresql/html/tutorial-arch.html]

pg'Schema

name::
* McsEngl.pg'Schema@cptIt,

_WHOLE:
* database,

_PART:
* table#ql:pg'table#

_DESCRIPTION:
A database contains one or more named schemas, which in turn contain tables. Schemas also contain other kinds of named objects, including data types, functions, and operators. The same object name can be used in different schemas without conflict; for example, both schema1 and myschema can contain tables named mytable. Unlike databases, schemas are not rigidly separated: a user can access objects in any of the schemas in the database he is connected to, if he has privileges to do so.

There are several reasons why one might want to use schemas:

To allow many users to use one database without interfering with each other.

To organize database objects into logical groups to make them more manageable.

Third-party applications can be put into separate schemas so they do not collide with the names of other objects.

Schemas are analogous to directories at the operating system level, except that schemas cannot be nested.
[http://www.postgresql.org/docs/9.0/static/ddl-schemas.html]

pg'SQL

name::
* McsEngl.pg'SQL@cptIt,

pg'System-catalog

name::
* McsEngl.pg'System-catalog@cptIt,

_DESCRIPTION:
The system catalogs are the place where a relational database management system stores schema metadata, such as information about tables and columns, and internal bookkeeping information. PostgreSQL's system catalogs are regular tables. You can drop and recreate the tables, add columns, insert and update values, and severely mess up your system that way. Normally, one should not change the system catalogs by hand, there are always SQL commands to do that. (For example, CREATE DATABASE inserts a row into the pg_database catalog — and actually creates the database on disk.) There are some exceptions for particularly esoteric operations, such as adding index access methods.
[http://www.postgresql.org/docs/9.1/static/catalogs.html]

pg'Table

name::
* McsEngl.pg'Table@cptIt,

_WHOLE:
* schema#ql:pg'schema#

PostgreSQL is a relational database management system (RDBMS). That means it is a system for managing data stored in relations. Relation is essentially a mathematical term for table. The notion of storing data in tables is so commonplace today that it might seem inherently obvious, but there are a number of other ways of organizing databases. Files and directories on Unix-like operating systems form an example of a hierarchical database. A more modern development is the object-oriented database.

Each table is a named collection of rows. Each row of a given table has the same set of named columns, and each column is of a specific data type. Whereas columns have a fixed order in each row, it is important to remember that SQL does not guarantee the order of the rows within the table in any way (although they can be explicitly sorted for display).
[file:///C:/Program%20Files/PostgreSQL/9.1/doc/postgresql/html/tutorial-concepts.html]

pg'Table-Inheritance

name::
* McsEngl.pg'Table-Inheritance@cptIt,
* McsEngl.pg'Inheritance@cptIt,

_DESCRIPTION:
Table inheritance puts an object oriented slant on table creation, allowing database designers to derive new tables from other tables, treating them as base classes. Even better, PostgreSQL supports both single and multiple inheritance in this manner.
[http://www.postgresql.org/about/]

A better solution is this:

CREATE TABLE cities (
name text,
population real,
altitude int -- (in ft)
);

CREATE TABLE capitals (
state char(2)
) INHERITS (cities);
[file:///C:/Program%20Files/PostgreSQL/9.1/doc/postgresql/html/tutorial-inheritance.html]

pg'Transaction

name::
* McsEngl.pg'Transaction@cptIt,

Transactions are a fundamental concept of all database systems. The essential point of a transaction is that it bundles multiple steps into a single, all-or-nothing operation. The intermediate states between the steps are not visible to other concurrent transactions, and if some failure occurs that prevents the transaction from completing, then none of the steps affect the database at all.
[file:///C:/Program%20Files/PostgreSQL/9.1/doc/postgresql/html/tutorial-transactions.html]

pg'User-account

name::
* McsEngl.pg'User-account@cptIt,

_DESCRIPTION:
As with any server daemon that is accessible to the outside world, it is advisable to run PostgreSQL under a separate user account. This user account should only own the data that is managed by the server, and should not be shared with other daemons. (For example, using the user nobody is a bad idea.) It is not advisable to install executables owned by this user because compromised systems could then modify their own binaries.
To add a Unix user account to your system, look for a command useradd or adduser. The user name postgres is often used, and is assumed throughout this book, but you can use another name if you like.
[http://www.postgresql.org/docs/9.1/static/postgres-user.html]

_SPECIFIC:
* defalult-user: postgres (hknu)

FvMcs.Cmrpgm.ANTIVIRUS

_CREATED: {2007-09-25}

name::
* McsEngl.conceptIt567,
* McsEngl.Cmrpgm.ANTIVIRUS@cptIt,
* McsEngl.FvMcs.Cmrpgm.ANTIVIRUS@cptIt,
* McsEngl.antivirus-program@cptIt567,
* McsEngl.programAntivirus@cptIt567,

GENERIC

_GENERIC:
* security-tech#cptIt302#
* program-system#cptIt331#

SPECIFIC

_SPECIFIC:#ql:_GENERIC cptIt567#

prgAvrs.AVAST

name::
* McsEngl.prgAvrs.AVAST@cptIt,
* McsEngl.avast-antivirus@cptIt,

avast! Pro Antivirus (1 PC; 3 years)

_TIME_OF_BUYING:
* {2012-09-25}

_PRICE:
* 59,99€, mastercard,

_INSTALLATION:
Follow the instructions below to start using avast! Pro Antivirus:

Your license is valid from the day of purchase not the day of activation.

1) If you have not done so already, please download the installation file form the following URL:

http://files.avast.com/iavs5x/avast_pro_antivirus_setup.exe

IMPORTANT NOTE: If you have already installed the avast! Pro Antivirus on your PC or if you are upgrading from the avast! Free Antivirus, please go directly to step 5.

2) To install the program(once downloaded), double click the downloaded file and follow the on-screen instructions. We recommend that any other applications are closed before installing the program.

3) After installation, you will be prompted to restart your computer - please do so, remembering to save any work you may have left open in other applications.

4) After your system has restarted, you will see the orange avast icon in your system tray, near the clock (on the bottom right-hand side of the screen).

5) Together with this message you have also received a copy of your license file. If you have not already downloaded and saved your license file via the provided link, save it now to a secure folder on your hard drive and create a backup copy of it in case of hard drive failure. This file is necessary to activate your avast! Pro Antivirus

6) To insert your license, double click on the “License.avastlic” file and your license will be inserted into the avast program automatically to activate the program.
Alternatively, you may insert your license file manually by following the instructions below:

Double click on the avast icon and choose the “Maintenance” tab from the program interface. Click on the “Subscription” option and then click on “Insert license file”. Navigate to the license file saved in step 5) and then click OK. Your license file will be inserted automatically to activate the program.

NOTE: Your license is valid from the day of purchase not the day of activation.

prgAvrs.PANDA

name::
* McsEngl.prgAvrs.PANDA@cptIt,
* McsEngl.panda'andivirus@cptIt567,

Όνομα χρήστη:  CCF228DFH5
Κωδικός πρόσβασης:  4UVX3FQE
Αριθμός πελάτη:  78656431

Ενεργοποίηση υπηρεσιών (αγορά 2007-09-25) 28€

Σας ευχαριστούμε πολύ. Έχουμε αξιολογήσει όλα τα στοιχεία που έχετε εισάγει. Θα λάβετε ένα e-mail από τη διεύθυνσηtusclaves@pandasecurity.comή τη διεύθυνσηrenovacion@pandasecurity.com(ανάλογα με την επιλογή σας στο βήμα 2 της διαδικασίας ενεργοποίησης), στη διεύθυνση e-mail που έχετε ορίσει. Ελέγξτε τα e-mail σας και βεβαιωθείτε ότι το μήνυμα αυτό δεν έχει χαρακτηριστεί ως πιθανό spam.

Διαβάστε με προσοχή την παρούσα σελίδα και φυλάξετε τα στοιχεία αυτά, καθώς ενδέχεται να τα χρειαστείτε στο μέλλον εάν επικοινωνήσετε με εμάς.

Οι υπηρεσίες προϊόντος θα ισχύουν έως:

PANDA ANTIVIRUS 2008
-24-ΩΡΗ ΥΠΗΡΕΣΊΑ SOS VIRUSμέχριSEPTEMBER 24, 2008
-ΑΝΑΒΑΘΜΊΣΕΙΣ ΛΟΓΙΣΜΙΚΟΎ ANTIVIRUSμέχριSEPTEMBER 24, 2008
-ΕΝΗΜΕΡΏΣΕΙΣ ΤΟΥ ΑΡΧΕΊΟΥ ΥΠΟΓΡΑΦΏΝ ΙΏΝμέχριSEPTEMBER 24, 2008
-ΤΕΧΝΙΚΉ ΥΠΟΣΤΉΡΙΞΗ ΜΈΣΩ E-MAILμέχριSEPTEMBER 24, 2008

Ο αριθμός πελάτη σας είναι ο εξής:78656431Φυλάξετέ τον, καθώς θα τον χρειαστείτε σε περίπτωση που επικοινωνήσετε με την Panda Security. Ο αριθμός αυτός θα μας επιτρέψει να διευθετήσουμε γρηγορότερα και αποτελεσματικότερα τυχόν ερωτήσεις σας.

Ακολούθως, παρατίθενται το όνομα χρήστη και ο κωδικός πρόσβασης. Για τα στοιχεία αυτά ισχύει η διάκριση πεζών-κεφαλαίων και θα πρέπει να εισάγονται στο προϊόν σας ακριβώς όπως εμφανίζονται παρακάτω:

Όνομα χρήστη:CCF228DFH5
Κωδικός πρόσβασης:4UVX3FQE

Το όνομα χρήστη και ο κωδικός πρόσβασης είναι απαραίτητα για τη διαμόρφωση των αυτόματων ενημερώσεων του προϊόντος ασφαλείας που χρησιμοποιείτε ή για τη λήψη των τελευταίων εκδόσεων του προϊόντος. Εισάγετε τα στοιχεία στο προϊόν σας, διαφορετικά θα σταματήσει να ενημερώνεται αυτόματα έναντι νέων ιών και απειλών σε λίγες ημέρες.

Ακόμα και στην περίπτωση που το προϊόν σας διαθέτει περισσότερες από μία άδειες χρήσης, εσείς θα πρέπει να ενεργοποιήσετε τις υπηρεσίες μόνο μία φορά. Μπορείτε να διαμορφώσετε τις ενημερώσεις σε διαφορετικούς υπολογιστές χρησιμοποιώντας το ίδιο όνομα χρήστη και τον ίδιο κωδικό πρόσβασης.

Οι σχετικές οδηγίες περιέχονται σε e-mail που λαμβάνετε από εμάς. Λάβετε υπόψη σας ότι μέχρι να λάβετε το e-mail αυτό, τα στοιχεία που σας παρέχει η Panda ενδέχεται να μην είναι λειτουργικά.

Τέλος, να θυμάστε ότι μπορείτε να συμβουλεύστε την περιοχή Τεχνικής Υποστήριξης στο δικτυακό τόπο του Panda Security σε περίπτωση ερωτήσεων ή αναζήτησης.

Χρειάζεστε αυτά τα στοιχείαγια την διαμόρφωση της λειτουργίας ενημερώσεων του προϊόντος σαςή ότανμεταφέρετε τις νεότερες εκδόσεις του προϊόντος που δηλώσατε από το Web site της Panda Software.Εισάγετε αυτά τα στοιχεία στο πρόγραμμα antivirusΕάν δεν το κάνετε, σε λίγες ημέρες, το πρόγραμμα θα σταματήσει να ενημερώνει τον εαυτό του για νέους ιούς.Εάν έχετε οποιεσδήποτε απορίες σχετικά με την διαμόρφωση της λειτουργίας ενημέρωσης ή την διαδικασία μεταφοράς (download) του προϊόντος, κάντε κλικεδώΗ ενέργεια αυτή θα σας μεταφέρει σ' έναν ειδικό τομέα Βοήθειας, ο οποίος περιλαμβάνει χρήσιμες πληροφορίες και υποδείξεις.

Να θυμάστε ότι αυτοί οι κωδικοί δεν θα είναι ενεργοί μέχρι να λάβετε ένα μήνυμα e-mail για επιβεβαίωση.

FvMcs.Cmrpgm.GROUPWARE

name::
* McsEngl.conceptIt950,
* McsEngl.Cmrpgm.GROUPWARE@cptIt,
* McsEngl.FvMcs.Cmrpgm.GROUPWARE@cptIt,
* McsEngl.groupware application program@cptIt,
* McsEngl.program.groupware@cptIt950,
* McsEngl.program.workgroup@cptIt950,
* McsEngl.workgroup program@cptIt,

FvMcs.Cmrpgm.OBJECT_ORIENTED

name::
* McsEngl.conceptIt951,
* McsEngl.Cmrpgm.OBJECT_ORIENTED@cptIt,
* McsEngl.FvMcs.Cmrpgm.OBJECT_ORIENTED@cptIt,
* McsEngl.object-oriented program@cptIt,
* McsEngl.program.ObjectProgram@cptIt951,
* McsElln.ΟΝΤΟΚΕΝΤΡΙΚΟ ΠΡΟΓΡΑΜΜΑ@cptIt,

FvMcs.Cmrpgm.MATH

name::
* McsEngl.conceptIt952,
* McsEngl.Cmrpgm.MATH@cptIt,
* McsEngl.FvMcs.Cmrpgm.MATH@cptIt,
* McsEngl.math-program@cptIt,
* McsEngl.program.math@cptIt952,
* McsEngl.pgmMth@cptIt952, {2014-01-13}
* McsEngl.prgMth@cptIt952, {2012-11-22}
* McsEngl.prgMath@cptIt952,

pgmMth'GENERIC

_GENERIC:
* computer_program#cptItsoft59#

pgmMth'ResourceInfHmnn#cptResource843#

name::
* McsEngl.pgmMth'ResourceInfHmnn@cptIt,

_ADDRESS.WPG:
* http.math.PROGRAM,
* http://en.wikipedia.org/wiki/Mathematical_software,

SPECIFIC

name::
* McsEngl.pgmMth.specific@cptIt,

_SPECIFIC: pgmMth.alphabetically:
* pgmMth.automated_theorem_proving#linkL#ql:automated_theorem_proving@cptIt##
* pgmMth.GeoGebra##
* pgmMth.MACSYMA#cptItsoft685#
* pgmMth.MathCad#cptItsoft687#
* pgmMth.Mathematica#cptItsoft688#
* pgmMth.SPSS#cptItsoft818#
* pgmMth.statgraphics#cptItsoft821#
* pgmMth.statistica#cptItsoft822#
* pgmMth.statistics#cptItsoft952.1#
* pgmMth.systat#cptItsoft827#
===

pgmMth.GeoGebra

name::
* McsEngl.GeoGebra@cptIt952i,

What is GeoGebra?
? Dynamic Mathematics Software in one easy-to-use package
? For learning and teaching at all levels of education
? Joins interactive geometry, algebra, tables, graphing, calculus and statistics
? Open source software, freely available from www.geogebra.org
[http://www.geogebra.org/help/geogebraquickstart_en.pdf]

pgmMth.GEOMETRY

name::
* McsEngl.geometry-program@cptIt,
* McsEngl.http.math.GEOMETRY.PROGRAM,
* McsEngl.http.program.GEOMETRY,

pgmMth.EUCLIDE

Euclide is a dynamic geometry software, which tries to be flexible. You start by placing some free points, then you create objects using these points: lines, circles, line segment, circle arcs... each new figure can in turn be used to compose new shapes. By moving the points placed at the beginning, one can observe the evolution of the figure. An example is given below.
[http://jeuclide.sourceforge.net/]

pgmMth.GNU_OCTAVE

_CREATED: {2012-11-22}

name::
* McsEngl.GNU-Octave@cptIt, {2012-11-22}

GNU Octave is a high-level interpreted language, primarily intended for numerical computations. It provides capabilities for the numerical solution of linear and nonlinear problems, and for performing other numerical experiments. It also provides extensive graphics capabilities for data visualization and manipulation. Octave is normally used through its interactive command line interface, but it can also be used to write non-interactive programs. The Octave language is quite similar to Matlab so that most programs are easily portable.
[http://www.gnu.org/software/octave/]

pgmMth.JMathLab

_CREATED: {2012-11-22}

name::
* McsEngl.JMathLab@cptIt, {2012-11-22}

_DESCRIPTION:
jMatLab is a platform for mathematical and numerical computations. It is a clone of Matlab and Octave. Unlike Matlab, it is free. Unlike Octave, it runs on any platform where Java is installed. It can also run on the Web browser. The program can be used for:
* Symbolic calculations (simplification, differentials, integration)
* Numeric Evaluation of mathematical functions, special functions
* Linear algebra with vectors and matrices
* Displaying data, vectors, matrices and functions using 2D and 3D interactive plots
* Saving data (vectors and matrices) in CSV files
* Random numbers using the major distributions
* Solving linear and non-linear equations and systems of equations
* Basic statistical calculations and histogramming
[http://jwork.org/jmathlab/]

_ADDRESS.WPG:
* http://jwork.org/learn/doc/doku.php?id=jmathlab:start,

pgmMth.MACSYMA

name::
* McsEngl.conceptItsoft685,
* McsEngl.Macsyma@cptIt,

GENERIC

_GENERIC:
education-program#cptIt411#
MATH-PROGRAM#cptIt952#

INFO-TECH-BUSINESS#cptEconomy7.108#

VENDOR:
ΕΠΑΦΟΣ# obj.itcomp-767#cptItorg767##

OPERATING-SYSTEM#cptIt434#

UNIX SUN HP, RS 6000,

pgmMth.MATHEMATICA (mtha)

name::
* McsEngl.conceptItsoft688,
* McsEngl.Mathematica@cptItsoft688,
* McsEngl.mth@cptItsoft688, {2009-01-03}
* McsEngl.mtha@cptItsoft688, {2012-04-28}

mtha'DEFINITION

Mathematica is fundamentally an interpreter which scans through expressions calling internal code pointed to by the symbol table entries of heads that it encounters.
[http://reference.wolfram.com/mathematica/note/SomeNotesOnInternalImplementation.html]

Mathematica is the world's most powerful general computation system. First released in 1988, it has had a profound effect on the way computers are used in technical and other fields.
[http://www.stephenwolfram.com/about-mathematica/] 2009-01-03

This Part gives a self-contained introduction to Mathematica, concentrating on using Mathematica as an interactive problem-solving system.
[http://reference.wolfram.com/legacy/v5/TheMathematicaBook/APracticalIntroductionToMathematica/I1.html]

Mathematica is an unprecedentedly flexible and intuitive programming language.
[http://reference.wolfram.com/legacy/v5/Tour/MathematicaAsAProgrammingLanguage.html]

mtha'GENERIC

_GENERIC:
education-program#cptIt411#
MATH-PROGRAM#cptIt952#

INFO-TECH-BUSINESS#cptEconomy7.108#

INFO-TECH-BUSINESS#cptEconomy7.108#

Wolfram Research, ΑΝΤΙΠΡΟΣΩΠΟΣ General Data Applications.

mtha'CDF

_CREATED: {2012-04-28}

name::
* McsEngl.mtha'CDF@cptIt,
* McsEngl.conceptItsoft688.1,
* McsEngl.CDF@cptItsoft688.1, {2012-04-28}
* McsEngl.computable-document-format@cptItsoft688.1, {2012-04-28}

_DESCRIPTION:
Computable Document Format (CDF) is an electronic document format[1] designed to allow easy authoring[2] of dynamically generated interactive content. It was created by Wolfram Research.
[http://en.wikipedia.org/wiki/Computable_Document_Format]

cdf'Authoring

name::
* McsEngl.cdf'Authoring@cptIt,

_Authoring:
CDF Files can be created using Mathematica. Online authoring tools are planned.[8]
[http://en.wikipedia.org/wiki/Computable_Document_Format]

cdf'Reading

name::
* McsEngl.cdf'Reading@cptIt,

_Reading:
CDF files can be read using a proprietary CDF Player with a restrictive license, which can be downloaded free of charge from Wolfram Research. In contrast to static formats such as PDF and pre-generated interactive content provided by formats such as Adobe Flash the CDF Player contains an entire runtime library of Mathematica allowing document content to be generated in response to user interaction using any algorithms or visualizations which can be described in Mathematica.[4][5] This makes it particularly suited to scientific, engineering and other technical content[6] and digital textbooks.[7]
CDF reader support is available for Microsoft Windows, Macintosh and Linux but not for ebooks or tablets. The reader supports a plugin mode for Internet Explorer, Mozilla Firefox, Google Chrome, Opera and Safari, which allows CDF content to be embedded inline in HTML pages.
[http://en.wikipedia.org/wiki/Computable_Document_Format]

cdf'ResourceInfHmnn#cptResource843#

name::
* McsEngl.cdf'ResourceInfHmnn@cptIt,

_ADDRESS.WPG:
* http://demonstrations.wolfram.com/index.html,

mtha'Documentation

name::
* McsEngl.mtha'Documentation@cptIt,

DOCUMENTATION_CENTER:
* http://reference.wolfram.com/mathematica/guide/Mathematica.html.

mtha'Expression

name::
* McsEngl.mtha'Expression@cptIt,
* McsEngl.mtha'symbolic-expression-688i@cptIt,

_DEFINITION:
Mathematica is built on the powerful unifying idea that everything can be represented as a symbolic expression.
All symbolic expressions are built up from combinations of the basic form: head[arg1, arg2, ...]
[http://reference.wolfram.com/legacy/v5/Tour/TheUnifyingIdeaOfMathematica.html]

mtha'Function

name::
* McsEngl.mtha'Function@cptIt,
* McsEngl.mtha'Mathematical-Function-688i@cptIt,

URL:
* http://functions.wolfram.com//

3.2.1 Naming Conventions
Mathematical functions in Mathematica are given names according to definite rules. As with most Mathematica functions, the names are usually complete English words, fully spelled out. For a few very common functions, Mathematica uses the traditional abbreviations. Thus the modulo function, for example, is Mod, not Modulo.

Mathematical functions that are usually referred to by a person's name have names in Mathematica of the form PersonSymbol. Thus, for example, the Legendre polynomials are denoted LegendreP[n, x]. Although this convention does lead to longer function names, it avoids any ambiguity or confusion.

When the standard notation for a mathematical function involves both subscripts and superscripts, the subscripts are given before the superscripts in the Mathematica form. Thus, for example, the associated Legendre polynomials are denoted LegendreP[n, m, x].
[http://reference.wolfram.com/legacy/v5/TheMathematicaBook/AdvancedMathematicsInMathematica/MathematicalFunctions/3.2.1.html]

mth.function.BASIC-ARITHMETIC-OPERATION

name::
* McsEngl.mth.function.BASIC-ARITHMETIC-OPERATION@cptIt,

mth.plus:
a + b  plus

mth.minus:
a - b  minus

mth.times:
a b or a*b  times

mth.divide:
a/b  divide

mth.power:
a^b  power

mth.square_root:
Sqrt[a]  square root

mth.function.TRIGONOMETRIC-EXPONENTIAL

name::
* McsEngl.mth.function.TRIGONOMETRIC-EXPONENTIAL@cptIt,

Sin[x], Cos[x], Tan[x],
Csc[x], Sec[x], Cot[x]
 trigonometric functions
(with arguments in radians)

ArcSin[x], ArcCos[x], ArcTan[x], ArcTan[x,y],
ArcCsc[x], ArcSec[x], ArcCot[x]
 inverse trigonometric functions
(giving results in radians)

Exp[x] or E^x  exponential function
Log[x]  natural logarithm
Log[b, x]  logarithm of x to the base b
Sinh[x], Cosh[x], Tanh[x],
Csch[x], Sech[x], Coth[x]  hyperbolic functions
ArcSinh[x], ArcCosh[x], ArcTanh[x],
ArcCsch[x], ArcSech[x], ArcCoth[x]  inverse hyperbolic functions

mtha'function.HIGHER

name::
* McsEngl.mtha'function.HIGHER@cptIt,

Higher Mathematical Functions

Mathematica includes over 500 higher mathematical functions, including almost all the functions of mathematical physics.

mtha'function.Integrate

name::
* McsEngl.mtha'function.Integrate@cptIt,

mtha'Integrate,

Integrate (Integral)
Integrate[f, x]
gives the indefinite integral ?f dx.
Integrate[f, {x, xmin, xmax}]
gives the definite integral .
Integrate[f, {x, xmin, xmax}, {y, ymin, ymax}, ...]
gives the multiple integral .

mtha'operating-system#cptIt434#

name::
* McsEngl.mtha'operating-system@cptIt,

WINDOWS 2.1(1993) :

mtha'Price#cptEconomy541.44#

name::
* McsEngl.mtha'Price@cptIt,

300.000 δρχ.

mtha'resourceInfHmn#cptResource843#

name::
* McsEngl.mtha'resourceInfHmn@cptIt,

_ADDRESS.WPG:
* http.Mathematica:
* http://en.wikipedia.org/wiki/Mathematica:
* documentation: http://reference.wolfram.com/mathematica/guide/Mathematica.html
* online integrator: http://integrals.wolfram.com/index.jsp:
* demonstrations: http://demonstrations.wolfram.com/
* functions: http://functions.wolfram.com/
* http://mathworld.wolfram.com/
* library.wolfram.com
Thousands of downloadable resources and references for Mathematica and other Wolfram products, collected over the full history of Wolfram Research

mtha.ONLINE

_ADDRESS.WPG:
* http://blog.stephenwolfram.com/2014/09/launching-today-mathematica-online//

pgmMth.MATHCAD

name::
* McsEngl.conceptItsoft687,
* McsEngl.Mathcad@cptIt,

GENERIC

_GENERIC:
education-program#cptIt411#
* program.math#cptItsoft952#

INFO-TECH-BUSINESS#cptEconomy7.108#

mathsoft Inc.

DOING#cptCore475#

EQUALITIES/ΙΣΟΤΗΤΕΣ

Γράφεις τον τύπο όπως θέλεις, γράφεις = και έντερ, και έχεις το αποτέλεσμα.

EQUATIONS/ΕΞΙΣΩΣΕΙΣ


1. define constants: a:=4, b:=7.
2. define the equation: x=2*a+b
3. x= enter and have the result.

KEYBOARD USE


:    >> := which define variables, functions etc.
;    >> .. the rage of a variable.
"    >> to insert text.
[    >> put subscript on a variable.
$    >> Σ
&    >> integral sign.
#    >> Π παραγοντοποίηση.
ctrl + =  >> equal sign.
ctrl + f9  >> insert line.
ctrl + f10 >> del blank line.
ctrl + V  >> creates matrices.
F9  >> recalculates the data window.

MATH-FUNCTION MANIPULATION


1. define f(x):= x^2 +1
2. f(3)=
3. graph creation:
 x:=10..20
 <create graph>/@

SYMBOLIC CALCULATIONS

SOLVE FOR A VARIABLE in an equation:
1. write the equation eg x^2/45 + y=2
2. select with arrows the variable you want.
3. command <solve for variable>

OPERATING-SYSTEM#cptIt434#

WINDOWS plus5.0 (1994):

STORAGE#cptIt14#

FD-6 v3:

pgmMth.MATLAB

_CREATED: {2012-11-28}

name::
* McsEngl.matlab@cptIt, {2012-11-28}

_DESCRIPTION:
MATLAB (matrix laboratory) is a numerical computing environment and fourth-generation programming language. Developed by MathWorks, MATLAB allows matrix manipulations, plotting of functions and data, implementation of algorithms, creation of user interfaces, and interfacing with programs written in other languages, including C, C++, Java, and Fortran.
Although MATLAB is intended primarily for numerical computing, an optional toolbox uses the MuPAD symbolic engine, allowing access to symbolic computing capabilities. An additional package, Simulink, adds graphical multi-domain simulation and Model-Based Design for dynamic and embedded systems.
In 2004, MATLAB had around one million users across industry and academia.[2] MATLAB users come from various backgrounds of engineering, science, and economics. MATLAB is widely used in academic and research institutions as well as industrial enterprises.
[http://en.wikipedia.org/wiki/Matlab]

_ADDRESS.WPG:
* https://www.library.cmu.edu/ctms//

pgmMth.NUMERICAL_ANALYSIS

_ADDRESS.WPG:
* http://en.wikipedia.org/wiki/List_of_numerical_analysis_software,

pgmMth.SCILAB

_CREATED: {2012-11-28}

_DESCRIPTION:
Scilab is an open source, cross-platform numerical computational package and a high-level, numerically oriented programming language. It can be used for signal processing, statistical analysis, image enhancement, fluid dynamics simulations, numerical optimization, and modeling, simulation of explicit and implicit dynamical systems and (if the corresponding toolbox is installed) symbolic manipulations. MATLAB code, which is similar in syntax, can be converted to Scilab. Scilab is one of several open source alternatives to MATLAB.
Developer(s)  Scilab Enterprises
Stable release  5.4.0 / October 1, 2012; 53 days ago
Written in  Scilab, C, C++, Java, Fortran
Operating system  Linux, Windows, Mac OS X, BSD
Available in  Catalan, German, English, Spanish, French, Italian, Japanese, Portuguese (Brazil), Russian, Ukrainian, Chinese, Czech, Polish
Type  Technical computing
License  CeCILL
Website  www.scilab.org, www.scilab-enterprises.com
[http://en.wikipedia.org/wiki/Scilab]

pgmMth.STATISTICS

_CREATED: {2012-05-18}

name::
* McsEngl.conceptIt952.1,
* McsEngl.program.statistics@cptIt952.1, {2012-05-18}
* McsEngl.statistical-software@cptIt952.1, {2012-05-18}
* McsEngl.statistics-software@cptIt952.1, {2012-05-18}
* McsEngl.prgStat@cptIt952.1, {2012-05-18}

_DESCRIPTION:
The rapid and sustained increases in computing power starting from the second half of the 20th century have had a substantial impact on the practice of statistical science. Early statistical models were almost always from the class of linear models, but powerful computers, coupled with suitable numerical algorithms, caused an increased interest in nonlinear models (such as neural networks) as well as the creation of new types, such as generalized linear models and multilevel models.
Increased computing power has also led to the growing popularity of computationally intensive methods based on resampling, such as permutation tests and the bootstrap, while techniques such as Gibbs sampling have made use of Bayesian models more feasible. The computer revolution has implications for the future of statistics with new emphasis on "experimental" and "empirical" statistics. A large number of both general and special purpose statistical software are now available.
[http://en.wikipedia.org/wiki/Statistics]

resourceInfHmn#cptResource843#

_ADDRESS.WPG:
* http://en.wikipedia.org/wiki/List_of_statistical_packages,
* web: http://www.openepi.com/OE2.3/Menu/OpenEpiMenu.htm,

SPECIFIC

_SPECIFIC:
* SPSS#cptItsoft818#
* statgraphics#cptItsoft821#
* statistica#cptItsoft822#
* systat#cptItsoft827#

pgmMth.statistics.SPSS

name::
* McsEngl.conceptItsoft818,
* McsEngl.SPSS@cptIt,
* McsEngl.SPSS@cptItsoft818,

DEFINITION

GENERIC

_GENERIC:
education-program#cptIt411#
MATH-PROGRAM#cptIt952#

INFO-TECH-BUSINESS#cptEconomy7.108#

ORCO ΕΠΕ ΤΗΛ.723.6001-2

DOING#cptCore475#

statistics

OPERATING-SYSTEM#cptIt434#

WINDOWS(1992),

pgmMth.statistics.STATGRAPHICS

name::
* McsEngl.conceptItsoft821,
* McsEngl.Statgraphics@cptIt,

DEFINITION

GENERIC

_GENERIC:
education-program#cptIt411#
MATH-PROGRAM#cptIt952#

INFO-TECH-BUSINESS#cptEconomy7.108#

MANUGISTICS INC, ΑΝΤΙΠΡΟΣΩΠΟΣ MP & ASSOCIATES,

EVOLUTION#cptCore546.171#

VERSION#cptIt471#

6.0

DOING#cptCore475#

statistics,

OPERATING-SYSTEM#cptIt434#

DOS

PRICE#cptEconomy541.44#

484.000 DRX+FPA.

pgmMth.statistics.STATISTICA/w

name::
* McsEngl.conceptItsoft822,
* McsEngl.Statistica/w@cptIt,

DEFINITION

GENERIC

_GENERIC:
education-program#cptIt411#
MATH-PROGRAM#cptIt952#

INFO-TECH-BUSINESS#cptEconomy7.108#

statsoft USA...

DOING#cptCore475#

statistics.

OPERATING-SYSTEM#cptIt434#

DOS WINDOWS MAC,

PRICE#cptEconomy541.44#

$1000

pgmMth.statistics.SYSTAT

name::
* McsEngl.conceptItsoft827,
* McsEngl.Systat@cptIt,

GENERIC

_GENERIC:
education-program#cptIt411#
MATH-PROGRAM#cptIt952#

INFO-TECH-BUSINESS#cptEconomy7.108#

Systat tel 708-8645670, USA...

DOING#cptCore475#

statistics, General purpose

OPERATING-SYSTEM#cptIt434#

DOS WINDOWS,

pgmMth.SYMBOLIC_COMPUTATION

name::
* McsEngl.algebraic-computation@cptIt,
* McsEngl.computer-algebra@cptIt,
* McsEngl.symbolic-computation@cptIt,

_DEFINITION:
Symbolic computation, algebraic computation, or, less commonly, symbolic manipulation, symbolic processing, symbolic mathematics, or symbolic algebra, relates to the use of machines, such as computers, to manipulate mathematical equations and expressions in symbolic form, as opposed to manipulating the approximations of specific numerical quantities represented by those symbols. Such a system might be used for symbolic integration or differentiation, substitution of one expression into another, simplification of an expression, etc.

It has uses in software testing under the title of symbolic execution where it can be used to analyse if and when errors in the code may occur. It can be used to predict what code statements do to specified inputs and outputs. It is also important for considering path traversal. It struggles when dealing with statements which are not purely mathematical.
[http://en.wikipedia.org/wiki/Symbolic_computation] 2009-01-06

pgmMth.WEB_BASED

Growing number of mathematical software is available in the web browser, without the need to download or install any code. Examples are NCLab and Sage.
[http://en.wikipedia.org/wiki/Mathematical_software]

_DESCRIPTION:
* http://www.cymath.com//

FvMcs.Cmrpgm.SCHOOL_MANAGEMENT

name::
* McsEngl.conceptIt953,
* McsEngl.program.schoolManagement@cptIt953,
* McsEngl.school management program@cptIt,

SPECIFIC

_SPECIFIC#ql:_GENERIC cptIt953#

FvMcs.Cmrpgm.HOUSEHOLD_MANAGEMENT

name::
* McsEngl.conceptIt954,
* McsEngl.household management program@cptIt,
* McsEngl.program.HouseholdManagement@cptIt954,

SPECIFIC

_SPECIFIC#ql:_GENERIC cptIt954#

FvMcs.Cmrpgm.Travel_Agent_Management

name::
* McsEngl.conceptIt955,
* McsEngl.program.TravelagentManagement@cptIt,
* McsEngl.travel-agent management program@cptIt,
* McsElln.ΠΡΟΓΡΑΜΑ ΔΙΑΧΕΙΡΙΣΗΣ ΤΟΥΡΙΣΤΙΚΟΥ ΓΡΑΦΕΙΟΥ@cptIt,
* McsElln.ΤΟΥΡΙΣΤΙΚΟ@cptIt,

DEFINITION

SPECIFIC

_SPECIFIC#ql:_GENERIC cptIt955#

FvMcs.Cmrpgm.ICR

name::
* McsEngl.conceptIt957,
* McsEngl.icr program@cptIt,
* McsEngl.intelligent character recognition program@cptIt,
* McsEngl.program.icr@cptIt957,

SPECIFIC

_SPECIFIC#ql:_GENERIC cptIt957#

FvMcs.Cmrpgm.FILE_MANAGER

name::
* McsEngl.conceptIt958,
* McsEngl.file-management program@cptIt,
* McsEngl.file-manager-program@cptIt,
* McsEngl.prgm.file-manager@cptIt958,
* McsEngl.program.FileManagement@cptIt958,
* McsEngl.pgmFmr@cptIt958, {2013-08-24}
* McsEngl.prgmFm@cptIt958,

pgmFmr'DEFINITION

_DESCRIPTION:
A file manager or file browser is a computer program that provides a user interface to work with file systems. The most common operations performed on files or groups of files are: create, open, edit, view, print, play, rename, move, copy, delete, search/find, and modify file attributes, properties and file permissions. Files are typically displayed in a hierarchy. Some file managers contain features inspired by web browsers, including forward and back navigational buttons.
Some file managers provide network connectivity via protocols, such as FTP, NFS, SMB or WebDAV. This is achieved by allowing the user to browse for a file server (connecting and accessing the server's file system like a local file system) or by providing its own full client implementations for file server protocols.
[http://en.wikipedia.org/wiki/File_manager]

pgmFmr'GENERIC

_GENERIC:
* program#cptItsoft59#

pgmFmr'backuping

name::
* McsEngl.pgmFmr'backuping@cptIt,

pgmFmr'building

name::
* McsEngl.pgmFmr'building@cptIt,

pgmFmr'compressing

name::
* McsEngl.pgmFmr'compressing@cptIt,
* McsEngl.pgmFmr'zipping@cptIt,

pgmFmr'drag-and-dropping

name::
* McsEngl.pgmFmr'drag-and-dropping@cptIt,

pgmFmr'editing

name::
* McsEngl.pgmFmr'editing@cptIt,

pgmFmr'os

name::
* McsEngl.pgmFmr'os@cptIt,

pgmFmr'programing-language

name::
* McsEngl.pgmFmr'programing-language@cptIt,

_SPECIFIC:
* c++,
* java,
* javascript,
* php,

pgmFmr'renaming

name::
* McsEngl.pgmFmr'renaming@cptIt,

_SPECIFIC:
* batch-renaming##

pgmFmr'resource

name::
* McsEngl.pgmFmr'resource@cptIt,

_ADDRESS.WPG:
* http://en.wikipedia.org/wiki/Comparison_of_file_managers,

pgmFmr'searching

name::
* McsEngl.pgmFmr'searching@cptIt,

pgmFmr'security

name::
* McsEngl.pgmFmr'security@cptIt,

pgmFmr'synchronizing

name::
* McsEngl.pgmFmr'synchronizing@cptIt,

pgmFmr'authentication

name::
* McsEngl.pgmFmr'authentication@cptIt,

pgmFmr'permission

name::
* McsEngl.pgmFmr'permission@cptIt,
* McsEngl.chmod@cptIt,
* McsEngl.file-permissions@cptIt,

chmod777:
everthing to all.

chmod755:
Set attributes to counter.cgi file as executable (chmod 755).

chmod666:
Set attributes to counter.txt file as 'read-write' (chmod 666).

How to determine numeric chmod value
Chmod value calculation is very simple, here is a quick tutorial for those who doesn’t know how to do it or tend to forget (like I sometimes do).

Chmod values are often given as three digit numbers. For example 777, 755 and so on. Maximum value of one digit is 7 and minimum value is 0

First digit gives permissions of file owner (owner permissions)
Second digit gives permissions of users who belong to file’s group
Third digit gives permissions to all other users

There are three types of permissions and of course “no permissions”:
Read
Write
Execute
When Chmodding files combinations of these three can be calculated digit by digit as a sum of chmods components cranted
+4 : Read Permissions
+2 : Write Permissions
+1 : Execute Permissions

So for example if you want to give the owner all permissions, to the group read and execute permissions and to others no permissions you would calculate the the correct chmod value like this:
First Digit: 1+2+4
Second Digit: 1+4
Third Digit: 0
So you would get 750
[http://polarwebservices.com/hostingblog/?p=8]

pgmFmr'user-managing

name::
* McsEngl.pgmFmr'user-managing@cptIt,

pgmFmr'tabbed-browsing

name::
* McsEngl.pgmFmr'tabbed-browsing@cptIt,

_DESCRIPTION:
Use of tabs to hold different directories.

_EXAMPLE:
* extplorer##
* xyplorer http://www.xyplorer.com/product.php#p1,

pgmFmr'versioning

name::
* McsEngl.pgmFmr'versioning@cptIt,

SPECIFIC

name::
* McsEngl.pgmFmr.specific@cptIt,

_SPECIFIC: pgmFmr.alphabetically:
* ftp##
* jquery##
* php-fmr##
* web-fmr##

pgmFmr'SPECIFIC-DIVISION.NETWORK

name::
* McsEngl.pgmFmr'SPECIFIC-DIVISION.NETWORK@cptIt,

_SPECIFIC:
* network-fmr##
* network.no-fmr##

pgmFmr.ajaXplorer (php; auth)

_CREATED: {2013-06-21}

name::
* McsEngl.pgmFmr.ajaXplorer (php; auth)@cptIt,
* McsEngl.ajaXplorer@cptIt,
* McsEngl.ajxr@cptIt,

_DESCRIPTION:
Open Source File Sharing
===
ajaXplorer is an open source software that turns instantly any server (on premise, NAS, cloud IaaS or PaaS) into a file sharing platform for your company. It is an alternative to SaaS Boxes and Drives, with more control, safety and privacy, and favorable TCOs.
As easy to use as great consumer software, ajaXplorer is designed to provide enterprise grade security and control. Unbelievably easy to install for System Administrators, ajaXplorer connects instantly to your existing employee directories.
[http://ajaxplorer.info/about/]

ajxr'attribute

name::
* McsEngl.ajxr'attribute@cptIt,

_ATTRIBUTE:
* Simple, Sleek, Beautiful.
- Access your docs from anywhere, from any browser.
- Most common formats previews (audio, video, PDF, Office Documents)
- Native mobile applications for iOS and Android - WebDAV server embedded
- Lucene indexation for quick search
* The ultimate sharing machine
- Share files or folders as weblinks with internal or external users
- NEW! Create public minisites to publish document lists
- NEW! Get notified when a file or folder is consulted or modified
- NEW! All your shares at a glance
* An admin’s heaven
- AjaXplorer is regularly audited by security expert, all vulnerabilities are immediately patched.
- AjaXplorer users & groups can be mapped directly from an LDAP/AD, or from the most common PHP-based CMS.
- Modularity is in the heart of the application: access existing data sources (FileSystem, (s)FTP, S3, etc), develop your own plugins
- Monitor users activities in real-time
* Mature. Scalable. Get HA Out of the box
- With nearly 500 000 downloads on Sourceforge, embedded deployments in many NAS systems all over the globe, the project is mature and proven.
- No data migration is necessary. The standard access driver is that plain-ol’ file system of yours. Put your data in orbit in seconds!
- Coupled with distrbuted file systems like GlusterFS, AjaXplorer is ready to scale out.
[http://ajaxplorer.info/about/]

ajxr'auth

name::
* McsEngl.ajxr'auth@cptIt,

ajxr'evoluting

name::
* McsEngl.ajxr'evoluting@cptIt,

06/06/2013 AjaXplorer 5.0.0:

ajxr'human

name::
* McsEngl.ajxr'human@cptIt,

Charles du Jeu
* cdujeu:
* https://github.com/cdujeu,
* http://sourceforge.net/users/cdujeu,

ajxr'installing

name::
* McsEngl.ajxr'installing@cptIt,

How to install?

1. Extract the content of the archive inside a folder on your server.

2. Make the data/ folder writeable by the server. For example, chown -R www-data /ajaxplorer/install/path/data/.

3. Access the ajaxplorer folder through a web browser: http://yoursite.com/ajaxplorer/

That’s it! Next, read Quick Start from the Admin Guide.
[http://ajaxplorer.info/download/]

diagnostic-test

Run through the diagnostic and fix the necessary errors
At very first run, a diagnostic tool will check a couple of features and configurations of your server, and will report errors or warning as it find them, along with suggestions for fixing the issues.



While “Warnings” can be generally ignored without preventing the application from running, you should still try to fix them if you can, as you will surely encounter problems at one point or another. Typically, the “Encoding” warning tells you that the application does not correctly recognize the server encoding setting, and if you skip that, you will surely bump into problems if you upload files with names containing non-ascii characters (like french θι, german ό, etc;…).

“Error” failing tests must be fixed before going further, otherwise the application will very surely crash.

Once you think you have correctly fixed the issue, simply reload the page to see if the test now correctly passes. If you ever need to re-run this test page later, you can access it by calling runTests.php at the root of your AjaXplorer install path. However, for security reasons, you will first have to edit this file manually and comment out the first line of code :

// die("You are not allowed to see this page ...")
[http://ajaxplorer.info/administrator/start/quick/]

ajxr'license

name::
* McsEngl.ajxr'license@cptIt,

Can I use AjaXplorer for free on my website, as a company?
As long as you do not modify AjaXplorer deeply (modifications like theming or little tweaks are not taken into account), and as long as you leave a link to the source code (i.e. to this website, except if you want to host the source code on your own website) on the user-interface (this is the particularity of AGPL against GPL), yes you can.
For example, if you change the logo of the splashscreen (using the gui.ajax plugin options) and let the « Powered by AjaXplorer » mention, this will be ok. If you want to remove this reference, you should contact us.
[http://ajaxplorer.info/knowledge-base-2/f-a-q/#39185]

Can I modify and/or integrate AjaXplorer inside my open-source software?
As long as your software license is compatible with the AGPL, and that the modifications are published, and that you leave the link on the user interface, YES.
[http://ajaxplorer.info/knowledge-base-2/f-a-q/#39187]

ajxr'plugin

name::
* McsEngl.ajxr'plugin@cptIt,

_DESCRIPTION:
As you may now understand, the manifest.xml file is a central piece of each plugin. Its grammar is entirely described in the plugins/core.ajaxplorer/ajxp_registry.xsd XML Schema, thus it is very recommanded to use an XML editor supporting schemas. The tags and elements should be generally self explaining, and we try to document the schema, but here we will go through some specifc elements that are part of the day-to-day life of a plugin developer.
[http://ajaxplorer.info/developer-guide/plugins/]

ajxr'problem

name::
* McsEngl.ajxr'problem@cptIt,
* McsEngl.ajxr'issue@cptIt,

ajxr'error

name::
* McsEngl.ajxr'error@cptIt,

ajxr'warning

name::
* McsEngl.ajxr'warning@cptIt,

- PHP Command LineWARNING
Php command line not detected (there seem to be some safe_mode or a-like restriction), this is NOT BLOCKING, but enabling it could allow to send some long tasks in background. If you do not have the ability to tweak your server, you can safely ignore this warning.

- PHP Output Buffer disabledWARNING
You should disable php output_buffering parameter for better performances with AjaXplorer.

- SSL EncryptionWARNING
You are not using SSL encryption, or it was not detected by the server. Be aware that it is strongly recommended to secure all communication of data over the network.
Suggestion : if your server supports HTTPS, set the AJXP_FORCE_REDIRECT_HTTPS parameter in the conf/bootstrap_conf.php file.

- Server charset encodingWARNING
You must set a correct charset encoding in your locale definition in the form: en_us.UTF-8. Please refer to setlocale man page. If your detected locale is C, please check the F.A.Q.. Detected locale: C (using UTF-8)
Suggestion : Set the AJXP_LOCALE parameter to the correct value in the conf/bootstrap_conf.php file

ajxr'programing-language

name::
* McsEngl.ajxr'programing-language@cptIt,

This reading is highly recommended if you want either to customize your installation or if you want to develop a full-featured plugin. In fact, the first case should lead to the latter, as the architecture allow a great flexibility, and thinking always “extension” will allow you to upgrade much more easily in the future releases. You should be basically comfortable with XML and XPath syntaxes, as well as PHP if you want to add server-side functions, and JavaScript if you want to add client-side behaviours.
[http://ajaxplorer.info/developer-guide/]

ajxr'resource

name::
* McsEngl.ajxr'resource@cptIt,

_ADDRESS.WPG:
* https://github.com/ajaxplorer//
* http://ajaxplorer.info/developer-guide//

ajxr'security

name::
* McsEngl.ajxr'security@cptIt,

AjaXplorer was tested and corrected with the help of security experts, and should be resistant to the common web attacks (csrf, etc, see the 3.2 release note). But at some point, AjaXplorer cannot fix holes created by a wrong server configuration. Thus here are some basic recommandations for securing your AjaXplorer installation.

Protect your folders from direct web access
Under the main AjaXplorer installation folder, the following folders contents must be hidden from the web server. It is by default the case if you are using Apache, as .htaccess files are part of the distribution.

ajaxplorer_install/conf
ajaxplorer_install/data/[all subfolders except "public"], that is the default container for the “shared links” public files.
Note: concerning the .htaccess files under Apache, be sure to allow override of the Limit directives on your web server (contact your Webmaster).

If you can, do not use the default “files” folder placed inside the distribution, but create a repository pointing to a folder outside your web “document root”.

Basic security rules
HTTPS usage is recommended, but you have to configure your server for that, it cannot be done automatically by AjaXplorer.

Always use strong passwords. There is a password minimum length option that is set to 8 characters by default.

Check for updates
Security issues are always released with high priority, use the integrated upgrade tool to check if updates are available and apply them!
[http://ajaxplorer.info/administrator/start/securing-your-installation/]

pgmFmr.BarracudaDrive

name::
* McsEngl.pgmFmr.BarracudaDrive@cptIt,
* McsEngl.BarracudaDrive@cptIt,
* McsEngl.bdv@cptIt,

_ADDRESS.WPG:
* http://barracudadrive.com//

_DESCRIPTION:
With BarracudaDrive, you own and operate your own server. BarracudaDrive is a software package available for many platforms including Windows, Mac, Linux, and mini computers such as Raspberry Pi. You can also easily install the software on your own online Virtual Private Server.

BarracudaDrive transforms your home or business computer network into a powerful and secure online storage system, letting you access and share files from any connected computer or device in the world.

BarracudaDrive is a free for non-commercial use and low cost for commercial use software package that lets you set up and operate your own secure file-sharing site, even if you're not a techie. BarracudaDrive is an easy-to-use server that runs either on your own computer or on your own private online cloud/VPS server.

Access and share inbound and outbound private documents, photos, videos, or other files, from your smart phone or tablet (iPhone, iPad, Android, Nook, Kindle, Blackberry), Windows, Mac, and Linux on your own secure BarracudaDrive server.
[http://barracudadrive.com/]

bdv'administration-panel

name::
* McsEngl.bdv'administration-panel@cptIt,

_DESCRIPTION:
The Administrator Panel is an application that is integrated with the BarracudaDrive web-server. The Administrator Panel lets you control and manage the BarracudaDrive web-server.
[/rtl/protected/admin/help/]

bdv'CMS

name::
* McsEngl.bdv'CMS@cptIt,

bdv'MxTunnel

name::
* McsEngl.bdv'MxTunnel@cptIt,

_DESCRIPTION:
The MxTunnel is our new high speed replacement for the original HTTPS tunnel and Proxy products.
The MxTunnel requires a BarracudaDrive server version 5.1 or newer.

The MxTunnel provides peace of mind in a dangerous world. Our software will ensure your online privacy as well as provide secure, unblocked, encrypted access to the Internet and VoIP services such as Skype from anywhere on the globe.

The MxTunnel is a tunnel and proxy server that allows you to circumvent firewalls and/or proxies, access resources that may be blocked, and to securely access internal resources on a business and/or home network. The MxTunnel is a free and complementary BarracudaDrive product.

The MxTunnel maintains a HTTPS (encrypted) connection between the MxTunnel and a BarracudaDrive server. The picture below shows two possible BarracudaDrive deployments: a BarracudaDrive server installed on a private network and a BarracudaDrive server installed on an online cloud server running in a datacenter.

The MxTunnel is installed on a client (local) computer such as a laptop or a work computer. The MxTunnel is then configured to connect to one or several BarracudaDrive servers, either directly or via a chained corporate proxy. The data tunneled between the MxTunnel and the BarracudaDrive server is encrypted with military grade encryption that cannot be broken.
You must install a BarracudaDrive server or have access to a BarracudaDrive server before installing the tunnel on your local computer.

bdv'Real-Time-Logic

name::
* McsEngl.bdv'Real-Time-Logic@cptIt,
* McsEngl.bdv'rtl@cptIt,

bdv'version

name::
* McsEngl.bdv'version@cptIt,

BarracudaDrive 6.5.1

6.5 May 2013

3.4 May 3, 2007

bdv'web-file-server

name::
* McsEngl.bdv'web-file-server@cptIt,

_DESCRIPTION:
The WFS is designed as a Web File Manager Server and can be used by any browser. The WFS also includes a WebDAV server that can be used by WebDAV clients. WebDAV functions like a Web-disk and can be mounted/mapped as a drive by WebDAV clients. For example Mac OS X and Microsoft Windows include WebDAV clients in their operating system.
[server/rtl/wfshelp/]

bdv'login-wfs

name::
* McsEngl.bdv'login-wfs@cptIt,

_ADDRESS:
* /fs/bdusers/upload/

bdv'WebDAV

name::
* McsEngl.bdv'WebDAV@cptIt,

What is WebDAV?
Your computer stores your work on its disk drive. A 'Network drive' is just another disk drive that is connected via the network. You use a network drive just like you use your local disk drive -- you can open and edit documents directly on the network drive. However, the network drive server can be thousands of miles away from your current location.
WebDAV is a type of network drive that can be securely accessed over the Internet.
[http://barracudadrive.com/FileServer.lsp]

bdv'WebDAV-session-URL

name::
* McsEngl.bdv'WebDAV-session-URL@cptIt,

WebDAV server (network file server) session URL.
Provides instructions for Mapping/Mounting the current directory using a WebDAV session URL. A WebDAV session URL is a special URL that makes the WebDAV client use the browser's session.

Using a session URL is an alternative to using a regular URL. Simply copy the regular browser URL and use the URL with the WebDAV client if you do not want to use a session URL. The WebDAV client will then ask you to login.

Mapping/Mounting a drive with the browser's session is safer if you use the server from a computer that is not your own computer. Logging out from a WebDAV connected drive is typically not possible unless you reboot the computer. A session URL inherits the browser's login session and you can therefore logout the WebDAV client by using the browser. A session automatically expires after a specific idle time. The idle time is automatically reset every time you access the drive. You can no longer use the drive if the session expires. You must disconnect the drive and reconnect using a new session.
Use the optional WebDAV session URL if you are:
not using your own computer, laptop, iPhone, etc.
using an older Windows version such as XP.
Use the URL in the browser's address field for all other client computers and/or client devises. You can optionally make the WebDAV connection persistent across computer restarts -- i.e. a set it and forget it configuration. See the video tutorials at the end of this help file for more information.
[/rtl/wfshelp/#WebDAV]

pgmFmr.elFinder (js; auth)

name::
* McsEngl.pgmFmr.elFinder (js; auth)@cptIt,
* McsEngl.elFinder@cptIt,
* McsEngl.efr@cptIt,

_ADDRESS.WPG:
* http://elfinder.org//
* https://github.com/Studio-42/elFinder,

_DESCRIPTION:
elFinder is an open-source file manager for web, written in JavaScript using jQuery UI. Creation is inspired by simplicity and convenience of Finder program used in Mac OS X operating system.
[https://github.com/Studio-42/elFinder]

efr'code

name::
* McsEngl.efr'code@cptIt,

efr'building

name::
* McsEngl.efr'building@cptIt,

_ADDRESS.WPG:
* https://github.com/Studio-42/elFinder/wiki/Build-and-compress-elfinder-from-source,

_DESCRIPTION:
1) dl latest https://github.com/Studio-42/elFinder,
2) from the unziped dir
npm install jake
npm install uglify-js
npm install csso
3) md build
jake -C ./build elfinder
===
Build and compress elfinder from source
Requirements
elFinder build system is based on Node.js, it must be installed on your computer. Also you will need npm - a package manager for node, to install build tools.

Tested with nodejs 0.4.x and 0.6.x on Linux and Mac OS X. Should also work on Windows with latest nodejs, but it's not tested much.

After you have nodejs and npm installed next is to install build tools:

Build tool: jake
JS compressor: UglifyJS
CSS optimizer: CSSO
Install them using next commands (or see install guides for each of them on the sites above):
npm install jake
npm install uglify-js
npm install csso

Building elFinder
Get the latest sources from github: git clone git://github.com/Studio-42/elFinder.git

Enter elFinder directory cd elFinder

Set npm paths for nodejs (this is needed for nodejs to find npm modules):

export NODE_PATH=`npm root`
Run jake -C ./build elfinder, elFinder will be build inside build directory (make sure you have created this directory before running jake), css and js files will be minified.

After build you can pack release by running jake -C ./build release, you will find .tar.gz and .zip files in ./build/pkg directory

For more info run jake and jake --tasks
Last edited by AliMD, 5 months ago
[https://github.com/Studio-42/elFinder/wiki/Build-and-compress-elfinder-from-source]

efr'code'configuring

name::
* McsEngl.efr'code'configuring@cptIt,
* McsEngl.efr'configuring@cptIt,

efr'connector.php at /root/php:
=== at an ftp account:
   array(
     'driver' => 'FTP',
     'host' => 'ftp.synagonism.net',
     'user' => 'kaseluri160933',
     'pass' => '',
     'path' => '/',
     'tmpPath' => '../files/ftp',
   ),

=== al local apache
array(
 'driver' => 'LocalFileSystem', //accessing file system (REQUIRED)
 'path' => '../files/', // path to files (REQUIRED)
 'URL' => 'http://localhost/elfinder/files/', // URL to files (REQUIRED)
 'accessControl' => 'access' // disable and hide dot starting files (OPTIONAL)

efr'code'installing

name::
* McsEngl.efr'code'installing@cptIt,
* McsEngl.efr'installing@cptIt,

2013-06-06:
1) dl from github, (elfinder.org does not work)
2) set ftp at php/connector.php

efr'code'integrating.inside.ckeditor#ql:cke'elfinder#

name::
* McsEngl.efr'code'integrating.inside.ckeditor@cptIt,

efr'code'option

name::
* McsEngl.efr'code'option@cptIt,
* McsEngl.efr'option@cptIt,

_file:
* \public_html\elfinderEl\js\elFinder.options.js,

_elfinder.html:
var options = {
 url : 'php/connector.php',
 lang : 'en'
}
$('#elfinder').elfinder(options);
===
$('#finder').elfinder({
option_name : 'option_value',
...

Localization
You can use localization to change volume folder name (similar to alias option but without overwriting return path) like:

elFinder.prototype.i18.en.messages.volumes_media = 'User media files';
// or
elFinder.prototype.i18.ru.messages.volumes_files = '??? ?????';
where files or media is name of your volume root folder.

Contents
url - Connector URL
lang - The interface lang to use
customData - Data to append to all requests and to upload files
cssClass - Additional css class for filemanager node
rememberLastDir - Remeber last opened dir to open it after reload or in next session
onlyMimes - Display only certain files based on their mime type
validName - Used to validate file names
defaultView - Default view mode
sort - How to sort files in a directory view
sortDirect - Sort order
width - The width of the elFinder main interface
height - The height of the elFinder main interface (in pixels)
clientFormatDate - Format dates using client
UTCDate - Show datetime in UTC timezone
dateFormat - File modification datetime format
fancyDateFormat - File modification datetime format for last two days (today, yesterday)
commands - Active commands list
commandsOptions - Commands options used to interact with external callbacks, editors, plugins
getFileCallback - Callback function for "getfile" command
handlers - Event listeners to bind on elFinder init
ui - UI plugins to load
uiOptions - Specifies the configuration for the elFinder UI
contextmenu - The configuration for the right-click context menu
resizable - Whether or not the elFinder interface will be resizable
notifyDelay - Timeout before open notifications dialogs
dragUploadAllow - Allow to drag and drop to upload files
allowShortcuts - Allow shortcuts
loadTmbs - Amount of thumbnails to create per one request
showFiles - Lazy load
showThreshold - Lazy load
requestType - The AJAX request type
urlUpload - Separate URL to upload file to
iframeTimeout - Timeout for upload using iframe
sync - Sync content by refreshing cwd every N seconds
cookie - Cookie option for browsers that does not support localStorage
debug - Debug config
[https://github.com/Studio-42/elFinder/wiki/Client-configuration-options]

efr'commands : [],
commands : [
   'open', 'reload', 'home', 'up', 'back', 'forward', 'getfile', 'quicklook',
   'download', 'rm', 'duplicate', 'rename', 'mkdir', 'mkfile', 'upload', 'copy',
   'cut', 'paste', 'edit', 'extract', 'archive', 'search', 'info', 'view', 'help', 'resize', 'sort', 'netmount'
 ],

efr'commandsOptions : {
edit : {

efr'customData : {answer : 42},

efr'debug : true
debug : ['error', 'warning', 'event-destroy']

efr'defaultView : 'icons',

efr'editorCallback : function(url) {
window.opener.CKEDITOR.tools.callFunction(funcNum, url);
window.close();
},
//does not work,

efr'getFileCallback : function(files, fm) {
// console.log(files);
// },
  * Callback for "getfile" commands.
  * Required to use elFinder with WYSIWYG editors etc..
===
getFileCallback: function(files, fm) {
window.tinymceFileWin.document.forms[0].elements[window.tinymceFileField].value = files.url;
window.tinymceFileWin.focus();
window.close();
//var output = '';
//for (property in files) {
// output += property + ': ' + files[property]+'; ';
//}
//alert(output);
}
[http://peshexod.blogspot.gr/2011/08/elfinder-20-tinymce.html]

efr'handlers : {
select : function(event, elfinderInstance) {
var selected = event.data.selected;
if (selected.length) {
console.log(elfinderInstance.file(selected[0]))
}
}
},

efr'lang : 'el',
needs and the script to work:
 <script src="js/i18n/elfinder.el.js"></script>

efr'onlyMimes : ['image', 'text/plain'],

efr'rememberLastDir : false,

efr'requestType : 'post',
requestType : 'POST',

efr'transport : new elFinderSupportVer1(),

efr'ui : ['tree', 'toolbar'],
// ui : ['toolbar', 'path', 'stat'],
@full ['toolbar', 'places', 'tree', 'path', 'stat']

efr'uiOptions : {
// toolbar : [['help']]
// }
uiOptions : {
// toolbar configuration
toolbar : [
['back', 'forward'],
['netmount'],
// ['reload'],
// ['home', 'up'],
['mkdir', 'mkfile', 'upload'],
['open', 'download', 'getfile'],
['info'],
['quicklook'],
['copy', 'cut', 'paste'],
['rm'],
['duplicate', 'rename', 'edit', 'resize'],
['extract', 'archive'],
['search'],
['view', 'sort'],
['help']
],
// directories tree options
tree : {
// expand current root on init
openRootOnLoad : true,
// auto load current dir parents
syncTree : true
},
// navbar options
navbar : {
minWidth : 150,
maxWidth : 500
},
cwd : {
// display parent folder with ".." name :)
oldSchool : false
}
},

efr'url : 'php/connector.php',

efr'validName:
* Additional rule to valid new file name.
* By default not allowed empty names or '..'
*
* @type false|RegExp|function
* @default false
* @example
* disable names with spaces:
* validName : /^[^\s]$/
*/
validName : false,

efr'option.CONNECTOR.PHP

name::
* McsEngl.efr'option.CONNECTOR.PHP@cptIt,

     'attributes' => array(
       array(
         'pattern' => '/\.js$/',
         'read' => true,
         'write' => false,
//          'hidden' => true,
       ),

efr'option.PREVENT-DELETION-OF-FILE

name::
* McsEngl.efr'option.PREVENT-DELETION-OF-FILE@cptIt,
* McsEngl.efr'code.prevent-deleting-file@cptIt,

_CODE.EFR:
How to prevent the deletion of a file or a name change?
In advance thank you


Reply to this email directly or view it on GitHub.


Naoki Sawada <notifications@github.com>
4:27 AM (6 hours ago)

to Studio-42/elFi.
Hi,

Try connector configuration "disabled". ( https://github.com/Studio-42/elFinder/wiki/Connector-configuration-options#wiki-disabled )

ex.

$opts = array(
'locale' => '',
'roots' => array(
array(
'driver' => 'LocalFileSystem',
'path' => '/path/to/files/',
'URL' => 'http://localhost/to/files/',
'disabled' => array('rename', 'delete')
)
)
);
===
Chuck <notifications@github.com>
5:10 PM (2 hours ago)

to Studio-42/elFi.
'attributes' => array(
array(
'pattern' => '/.(Pictures+)/', // Access for Folders named "Pictures" and his subfolders
'read' => true,
'write' => true,
'locked' => true
);
),

With that connector config you can read, write, but not delete cause its locked

efr'code.STANDALONE-POPUP-FILE-SELECTOR

name::
* McsEngl.efr'code.STANDALONE-POPUP-FILE-SELECTOR@cptIt,

I want to open elfinder in a new window, like

window.open('path_to_el_finder', '_blank', 'height=520,width=950')
And if I select some file, I want to get it in my input field.
I think it is possible, but I cannot find the solution.


Reply to this email directly or view it on GitHub.


proph7 <notifications@github.com>
2013-09-20 4:30 PM (1 hour ago)

to Studio-42/elFi.
Sorry, already figured out:

$('#elfinder_button').live('click', function() {
$('<div id="editor" />').dialogelfinder({
url : '{{ path('ef_connect') }}',
getFileCallback: function(file) {
$('#editor').dialogelfinder('close');
$('#editor').closest('.elfinder').val(file.path);
console.log($('#editor').closest('.elfinder-input'));
console.log(file.url);
}
});
});

phpMagpie opened this issue 3 months ago
Standalone Popup File Selector Example
No milestone No one is assigned
Hi,

Can someone please point me in the direction of a recent example of how to use ElFinder as a standalone file selector.

All I want is a text field with a browse button, click the button, elFinder pops-up, select an image, the url is copied into the text field and the pop-up closes.

Surprised there is not an example of this on the wiki as people do not always want to use this as part of an RTE.

Thanks, Paul.
2 participants

fibodesign commented an hour ago
I searched many but I didn't find anything too!
this is my code,maybe useful

in Browser.html
if(getUrlParam('tnbrowser')){
var funcNum = getUrlParam('tnbrowser');
var type = getUrlParam('type');

var elf = $('#elfinder').elfinder({
url : 'php/connector.php',
getFileCallback : function(file) {
window.opener.BrowseServer(file,funcNum,type);
window.close();
},
resizable: true,
width: 1000,height: 500
}).elfinder('instance');
}
in your page
$('.BrowseServer').click(function () {
$returnid="fileid";
$type='image';
$href='/elfinderelfinder.html?tnbrowser='+$returnid+'&type='+$type;
window.open($href, "popupWindow", "width=1030,height=530,scrollbars=yes");
})
function BrowseServer(file,id,type){
document.getElementById(id).value = file;
...
}
[https://github.com/Studio-42/elFinder/issues/603#issuecomment-23778844]

_CODE.EFR:
$('<div \>').dialog({modal: true, width: "80%", title: "Select your file", zIndex: 99999,
create: function(event, ui) {
$(this).elfinder({
resizable: false,
url: "path to connector",
commandsOptions: {
getfile: {
oncomplete: 'destroy'
}
},
getFileCallback: function(file) {
document.getElementById('fileurl').value = file;
jQuery('a.ui-dialog-titlebar-close[role="button"]').click();
}
}).elfinder('instance')
}
});
[grigv2000 <notifications@github.com>]

efr'code.API

name::
* McsEngl.efr'code.API@cptIt,
* McsEngl.efr'api@cptIt,

efr'api.JavaScript

name::
* McsEngl.efr'api.JavaScript@cptIt,
* McsEngl.efr'javascript-api@cptIt,
* McsEngl.efr'js-api@cptIt,

efr'js.method.i18n

name::
* McsEngl.efr'js.method.i18n@cptIt,
* McsEngl.efr'i18n-js-function@cptIt,
* McsEngl.efr'method.js.i18n@cptIt,

_DESCRIPTION:
* Return message translated onto current language
[\public_html\elfinderEl\js\elFinder.js]

fm.i18n('btnSave')
[\File1a\WebsiteSngm\program\elfinderEl\js\commands\edit.js]

efr'api.PHP

name::
* McsEngl.efr'api.PHP@cptIt,
* McsEngl.efr'php@cptIt,
* McsEngl.efr'php-api@cptIt,

efr'php.elFinderConnector

name::
* McsEngl.efr'php.elFinderConnector@cptIt,

_GENERIC:
* php-class#ql:php'class#

_FILE:
* \pgmFMR\elFinder\elFinder-2.x-130904\php\elFinderConnector.class.php,

efr'php.elFinderVolumeDriver

name::
* McsEngl.efr'php.elFinderVolumeDriver@cptIt,

_GENERIC:
* php-class#ql:php'class#

_FILE:
* \pgmFMR\elFinder\elFinder-2.x-130904\php\elFinderVolumeDriver.class.php,

_DESCRIPTION:
* Base class for elFinder volume.
* Provide 2 layers:
* 1. Public API (commands)
* 2. abstract fs API
* All abstract methods begin with "_"

method

_SPECIFIC:
allowCreate($dir, $name): protected function
attr($path, $name, $val=null): protected function
cacheDir($path): protected function
canCreateTmb($path, $stat): protected function
canResize($path, $stat): protected function
childsByAttr($path, $attr, $val): protected function
clearcache(): protected function
closestByAttr($path, $attr, $val): protected function
configure(): protected function
copy($src, $dst, $name): protected function
copyFrom($volume, $src, $destination, $name): protected function
countSize($path): protected function
createTmb($path, $stat): protected function
crypt($path): protected function
decode($hash): protected function
doSearch($path, $q, $mimes): protected function
encode($path): protected function
gdImage($image, $filename, $destformat, $mime ){ protected function
gdImageBackground($image, $bgcolor){ protected function
gdImageCreate($path,$mime){ protected function
getScandir($path): protected function
gettmb($path, $stat): protected function
gettree($path, $deep, $exclude=''): protected function
imgCrop($path, $width, $height, $x, $y, $destformat = null): protected function
imgResize($path, $width, $height, $keepProportions = false, $resizeByBiggerSide = true, $destformat = null): protected function
imgRotate($path, $degree, $bgcolor = '#ffffff', $destformat = null): protected function
imgSquareFit($path, $width, $height, $align = 'center', $valign = 'middle', $bgcolor = '#0000ff', $destformat = null): protected function
init(): protected function
isSameType($mime1, $mime2): protected function
mimetype($path, $name = ''): protected function
move($src, $dst, $name): protected function
nameAccepted($name): protected function
procExec($command , array &$output = null, &$return_var = -1, array &$error_output = null): protected function
remove($path, $force = false): protected function
rmTmb($stat): protected function
setError($error): protected function
stat($path): protected function
stripos($haystack , $needle , $offset = 0): protected function
tmbname($stat): protected function
uncrypt($hash): protected function
updateCache($path, $stat): protected function
===
_abspath($path); abstract protected function
_archive($dir, $files, $name, $arc); abstract protected function
_basename($path); abstract protected function
_checkArchivers(); abstract protected function
_copy($source, $targetDir, $name); abstract protected function
_dimensions($path, $mime); abstract protected function
_dirname($path); abstract protected function
_extract($path, $arc); abstract protected function
_fclose($fp, $path=''); abstract protected function
_filePutContents($path, $content); abstract protected function
_fopen($path, $mode="rb"); abstract protected function
_getContents($path); abstract protected function
_inpath($path, $parent); abstract protected function
_joinPath($dir, $name); abstract protected function
_mkdir($path, $name); abstract protected function
_mkfile($path, $name); abstract protected function
_move($source, $targetDir, $name); abstract protected function
_normpath($path); abstract protected function
_path($path); abstract protected function
_relpath($path); abstract protected function
_rmdir($path); abstract protected function
_save($fp, $dir, $name, $stat); abstract protected function
_scandir($path); abstract protected function
_stat($path); abstract protected function
_subdirs($path); abstract protected function
_symlink($source, $targetDir, $name); abstract protected function
_unlink($path); abstract protected function

property

_SPECIFIC:
$access = null; protected
$archivers = array( protected
$attributes = array(); protected
$cache = array(); protected
$cryptLib = ''; protected
$defaults = array( protected
$diabled = array(); protected
$dirsCache = array(); protected
$driverId = 'a'; protected
$error = array(); protected
$finfo = null; protected
$id = ''; protected
$imgLib = 'auto'; protected
$mimeDetect = 'auto'; protected
$mounted = false; protected
$onlyMimes = array(); protected
$options = array( protected
$removed = array(); protected
$root = ''; protected
$rootName = ''; protected
$separator = DIRECTORY_SEPARATOR; protected
$startPath = ''; protected
$tmbPath = ''; protected
$tmbPathWritable = false; protected
$tmbSize = 48; protected
$tmbURL = ''; protected
$today = 0; protected
$treeDeep = 1; protected
$uploadAllow = array(); protected
$uploadDeny = array(); protected
$uploadMaxSize = 0; protected
$uploadOrder = array(); protected
$URL = ''; protected
$yesterday = 0; protected

efr'php.elFinderVolumeLocalFileSystem

name::
* McsEngl.efr'php.elFinderVolumeLocalFileSystem@cptIt,

_GENERIC:
* php-class#ql:php'class#

_FILE:
* \pgmFMR\elFinder\elFinder-2.x-130904\php\elFinderVolumeLocalFileSystem.class.php,

efr'code.command

name::
* McsEngl.efr'code.command@cptIt,
* McsEngl.efr'cmd@cptIt,
* McsEngl.efr'command@cptIt,

efr'cmd'exec

name::
* McsEngl.efr'cmd'exec@cptIt,
* McsEngl.efr'exec@cptIt,

efr'cmd'getstate

name::
* McsEngl.efr'cmd'getstate@cptIt,
* McsEngl.efr'getstate@cptIt,

_CODE.ELFINDER:
this.getstate = function(sel) {
   var sel = this.files(sel),
     cnt = sel.length;
   
   return cnt == 1
     ? 0
     : cnt ? ($.map(sel, function(file) { return file.mime == 'directory' ? null : file}).length == cnt ? 0 : -1) : -1
 }
[\public_html\elfinder\js\commands\open.js]

efr'cmd'option

name::
* McsEngl.efr'cmd'option@cptIt,

\pgmNET\pgmFMR\elFinder\js\elFinder.options.js
commandsOptions : {

efr'cmd'shortcuts

name::
* McsEngl.efr'cmd'shortcuts@cptIt,
* McsEngl.efr'key@cptIt,
* McsEngl.efr'shortcuts@cptIt,

===
CTRL+A      Select all files
CTRL+C      Copy
CTRL+E      Edit file
CTRL+F      Find files
CTRL+I      Get info
CTRL+U      Upload files
CTRL+V      Paste
CTRL+X      Cut
CTRL+BACKSPACE  Delete
CTRL+DOWN    Open
CTRL+LEFT    Back
CTRL+HOME    Home
CTRL+RIGHT    Forward
CTRL+SHIFT+N    New folder
CTRL+SHIFT+R    Reload
CTRL+SHIFT+UP    Home
CTRL+UP      Go to parent directory
===
F1        About this software
F2        Rename
F3        Find files
F5        Reload
===
SHIFT+ENTER    Download
SHIFT+LEFT    Select file(s)
SHIFT+RIGHT    Select file(s)
SHIFT+UP      Select file(s)
SHIFT+DOWN    Select file(s)
===
BACKSPACE    Back
DELETE      Delete
END      Select last file
ENTER      Open
HOME      Select first file
NUMPAD_ENTER  Open
SPACE      Preview
===
LEFT      Select file(s)
RIGHT      Select file(s)
UP        Select file(s)
DOWN      Select file(s)

_CODE.ELFINDER:
this.shortcuts = [{
   pattern : 'ctrl+e'
 }];
[\public_html\elfinderEl\js\commands\edit.js]
===
this.shortcuts = [{
   pattern : 'ctrl+left backspace'
 }];
[\public_html\elfinder\js\commands\back.js]
===
 this.shortcuts = [{
   pattern : 'ctrl+down numpad_enter'+(this.fm.OS != 'mac' && ' enter')
 }];
[\public_html\elfinder\js\commands\open.js]

efr'cmd'toolbar

name::
* McsEngl.efr'cmd'toolbar@cptIt,

_DESCRIPTION:
The place where to configure the commands on the toolbar:
\pgmNET\pgmFMR\elFinder\js\elFinder.options.js
* uiOptions :

efr'cmd.SPECIFIC

name::
* McsEngl.efr'cmd.SPECIFIC@cptIt,

_SPECIFIC:
archive,
back,
copy,
cut,
download,
duplicate,
edit,
extract,
forward,
getfile,
help,
home,
info,
mkdir,
mkfile,
netmount,
open,
paste,
quicklook,
reload,
rename,
resize,
rm,
search,
sort,
view,
up,
upload,

efr'cmd.ACTIVE

name::
* McsEngl.efr'cmd.ACTIVE@cptIt,

_DESCRIPTION:
* Active commands list:
* \pgmNET\pgmFMR\elFinder\js\elFinder.options.js
commands : [

efr'cmd.ACTIVE.NO

name::
* McsEngl.efr'cmd.ACTIVE.NO@cptIt,
* McsEngl.efr'cmd'deactivated@cptIt,
* McsEngl.efr'cmd'non-active@cptIt,

efr'cmd.CONTEXT-MENU

name::
* McsEngl.efr'cmd.CONTEXT-MENU@cptIt,
* McsEngl.efr'context-menu@cptIt,

_ADDRESS.WPG:
* http://stackoverflow.com/questions/16604842/adding-a-custom-context-menu-item-to-elfinder//

efr'contextmenu_option:
_elFinder.options.js:
===
_elfinder.html:
contextmenu : {
// navbarfolder menu
navbar : ['open', '|', 'copy', 'cut', 'paste', 'duplicate', '|', 'rm', '|', 'info'],
// current directory menu
cwd : ['reload', 'back', '|', 'upload', 'mkdir', 'mkfile', 'paste', '|', 'sort', '|', 'info'],
// current directory file menu
files : ['getfile', '|','open', 'quicklook', '|', 'download', '|', 'copy', 'cut', 'paste', 'duplicate', '|', 'rm', '|', 'edit', 'rename', 'resize', '|', 'archive', 'extract', '|', 'info']
},

_ITEM_ADD:

up vote
2
down vote
accepted
I found the solution: The examples don't show the fact that you need to have a function called this.getstate inside of the elFinder.prototype.commands.yourcommand function. It shall return 0 when the icon is enabled and -1 when it's disabled.

So the full code for adding your own menu item or context menu item looks like this:

var elf;
jQuery().ready(function() {

elFinder.prototype.i18.en.messages['cmdeditimage'] = 'Edit Image';
elFinder.prototype.i18.de.messages['cmdeditimage'] = 'Bild bearbeiten';
elFinder.prototype._options.commands.push('editimage');
elFinder.prototype.commands.editimage = function() {
this.exec = function(hashes) {
//do whatever
}
this.getstate = function() {
//return 0 to enable, -1 to disable icon access
return 0;
}
}
...
elf = jQuery('#elfinder').elfinder({
lang: 'de', // language (OPTIONAL)
url : '/ext/elfinder-2.0-rc1/php/connector.php', //connector URL
width:'100%',
uiOptions : {
// toolbar configuration
toolbar : [
...
['quicklook', 'editimage'],
/*['copy', 'cut', 'paste'],*/
...
]},
contextmenu : {
...
// current directory file menu
files : [
'getfile', '|','open', 'quicklook', 'editimage', ...
]
}
}).elfinder('instance');

});
[http://stackoverflow.com/questions/16604842/adding-a-custom-context-menu-item-to-elfinder?rq=1]

efr'cmd.EXAMPLE

name::
* McsEngl.efr'cmd.EXAMPLE@cptIt,

_CODE.ELFINDER:
elFinder.prototype.commands.open = function() {
this.alwaysEnabled = true;

this._handlers = { }

this.shortcuts = [{ }];

this.getstate = function(sel) { }

this.exec = function(hashes) { }

}
[\public_html\elfinder\js\commands\open.js]

efr'cmd.open

name::
* McsEngl.efr'cmd.open@cptIt,
* McsEngl.efr'open@cptIt,

_DESCRIPTION:
Enter folder or open files in new windows IN browser.
[\public_html\elfinder\js\commands\open.js]

_TO_DISABLE:
$('#finder').elfinder({

url : 'php/connector.php',
getFileCallback : function(files, fm) {
return false;
}
});
[http://stackoverflow.com/questions/14370411/disabling-open-in-elfinder?rq=1]

efr'code.directory

name::
* McsEngl.efr'code.directory@cptIt,
* McsEngl.efr'file-of-program@cptIt,
* McsEngl.efr'root-dir@cptIt,

_ADDRESS.WPG:
* full: http://www.51aspx.com/CodeFile/ActyaCMS/src/Actya.Web/CmsContent/Themes/Admin/Scripts/elfinder/js/elfinder.full.js.html,

efr'elfndr.src.html_file:
* the start file of the program.

efr'css-dir

name::
* McsEngl.efr'css-dir@cptIt,

efr'files-dir

name::
* McsEngl.efr'files-dir@cptIt,

efr'img-dir

name::
* McsEngl.efr'img-dir@cptIt,

efr'jquery-dir

name::
* McsEngl.efr'jquery-dir@cptIt,

efr'js-dir

name::
* McsEngl.efr'js-dir@cptIt,

efr'php-dir

name::
* McsEngl.efr'php-dir@cptIt,

efr'sounds-dir

name::
* McsEngl.efr'sounds-dir@cptIt,

efr'code.editor

name::
* McsEngl.efr'code.editor@cptIt,
* McsEngl.efr'editor@cptIt,

_ADDRESS.WPG:
* https://github.com/Studio-42/elFinder/wiki/Using-custom-editor-to-edit-files-within-elfinder,

efr'edit.js

name::
* McsEngl.efr'edit.js@cptIt,

Contains code for the internal editor:
[\public_html\elfinderEl\js\commands\edit.js]

efr'editor.CKEditor

name::
* McsEngl.efr'editor.CKEditor@cptIt,
* McsEngl.efr'cmnd.edit.CKEditor@cptIt,
* McsEngl.efr'ckeditor@cptIt,

_ADDRESS.WPG:
* http://stackoverflow.com/questions/12985676/need-to-integrate-elfinder-file-manager-with-ckeditor,

efr'editor.tinyMCE

name::
* McsEngl.efr'editor.tinyMCE@cptIt,
* McsEngl.efr'cmnd.edit.tinyMCE@cptIt,
* McsEngl.efr'tinymce@cptIt,

_ADDRESS.WPG:
* https://github.com/Studio-42/elFinder/wiki/Using-custom-editor-to-edit-files-within-elfinder,
* http://bxuulgygd9.tal.ki/20120610/elfinder-custom-editor-code-not-working-1676066//
* http://elfinder.org/forum/#/20110811/integration-with-tinymce-inline-788796//
* https://github.com/Studio-42/elFinder/wiki/Integration-with-TinyMCE-3.x,

_LOCAL_INSTALLATION:
* \public_html\efr\efr.src\elfinder.src.html,

_CODE.ELFINDER:
// init
tinyMCE.init({});

// elfinder options
var opts = {
commandsOptions : {
edit : {
editors : [
{
mimes : ['text/html'], // add here other mimes if required
load : function(textarea) {
tinyMCE.execCommand('mceAddControl', true, textarea.id);
},
close : function(textarea, instance) {
tinyMCE.execCommand('mceRemoveControl', false, textarea.id);
},
save : function(textarea, editor) {
textarea.value = tinyMCE.get(textarea.id).selection.getContent({format : 'html'});
tinyMCE.execCommand('mceRemoveControl', false, textarea.id);
}
},
{...} // probably other editors for other mime types
]
}
}
}
[https://github.com/Studio-42/elFinder/wiki/Using-custom-editor-to-edit-files-within-elfinder]

efr'code.elfinder-object

name::
* McsEngl.efr'code.elfinder-object@cptIt,
* McsEngl.efr'elfinder-object@cptIt,

_DESCRIPTION:
* @class elFinder - file manager for web
* @author Dmitry (dio) Levashov
[\public_html\elfinder\js\elFinder.js]

efr'clipboard

name::
* McsEngl.efr'clipboard@cptIt,

_DESCRIPTION:
Buffer for copied files
[\public_html\elfinder\js\elFinder.js]

efr'escape

name::
* McsEngl.efr'escape@cptIt,

  * Replace not html-safe symbols to html entities
  *
  * @param String text to escape
  * @return String
  */
 escape : function(name) {
   return this._node.text(name).html();
 },
[\public_html\elfinder\js\elFinder.js]

efr'request

name::
* McsEngl.efr'request@cptIt,

  * Proccess ajax request.
  * Fired events :
  * @todo
  * @example
  * @todo
  * @return $.Deferred
  */
 this.request = function(options) {

efr'res

name::
* McsEngl.efr'res@cptIt,

res : function(type, id) {
   return this.resources[type] && this.resources[type][id];
 },
[\public_html\elfinder\js\elFinder.js]

efr'code.file

name::
* McsEngl.efr'code.file@cptIt,
* McsEngl.efr'file@cptIt,

_SPECIFIC:
* name, directory, description,
===
* elFinder.class.php, root\php\, Core class.
* tree.js, root\js\ui\, class elFinder folders tree,

efr'error

name::
* McsEngl.efr'error@cptIt,

efr'error.Invalid_backend_configuration. Readable volumes not available.
===
'path' => '../worldview/', //was wrong.

efr'error.Invalid_backend_response. Data is not JSON.
===
file /root/php/elFinderVolumeMySQL.class.php was missing.

efr'error.jquery.min.map:
===
I renamed the 'jquery-1.9.1.min.map' to 'jquery.min.map'

efr'error.open_folder:
===
delete httpd service, restart apache.
===
images files were missing.

efr'error.Reload_folder_content:
===
F5 running on source. reboot apache.

efr'error.Unable_to_connect_to_backend:
===
apache is not running.

efr'evoluting

name::
* McsEngl.efr'evoluting@cptIt,

{time.2013-06-06}:
Version 2.0.2 (2013-06-06)

efr'version

name::
* McsEngl.efr'version@cptIt,
* McsEngl.elfinder'version@cptIt,

_elfinderb:
Version: 2.0.2, protocol version: 2.0
jQuery/jQuery UI: 1.8.0/1.8.23

_CODE.ELFINDER:
/**
* Application version
*
* @type String
**/
elFinder.prototype.version = '2.0.2';
[\public_html\elfinderEl\js\elFinder.version.js]

efr'human

name::
* McsEngl.efr'human@cptIt,

_Levashov.Dmitry:
* chief developer.
Aka std42
I'm author and chief developer of elRTE WYSIWYG HTML-Editor and elFinder file manager for Web. I code JavaScript/jQuery, PHP and I like to create free software
[http://flattr.com/thing/361600/elFinder]
===
* dio@std42.ru
* http://www.std42.ru//

_Nevelin.Troex:
* maintainer.

_Sawada.Naoki:
* nao-pon
* Aichi, Japan
* https://github.com/nao-pon,

_Sukhotin.Alexey:
* developer.

_ChuckNorrison
* JavaScript, PHP
* Germany
* https://github.com/ChuckNorrison,

_Author:
Chief developer: Dmitry "dio" Levashov dio@std42.ru
Maintainer: Troex Nevelin troex@fury.scancode.ru
Developers: Alexey Sukhotin strogg@yandex.ru, Naoki Sawada hypweb@gmail.com
Icons: PixelMixer, Yusuke Kamiyamane
[https://github.com/Studio-42/elFinder/tree/2.1]

efr'issue

name::
* McsEngl.efr'issue@cptIt,

_ADDRESS.WPG:
* https://github.com/Studio-42/elFinder/issues?state=closed,

efr'issue.680: SFTP

name::
* McsEngl.efr'issue.680: SFTP@cptIt,

* https://github.com/Studio-42/elFinder/issues/680,

efr'security

name::
* McsEngl.efr'security@cptIt,

efr'auth

name::
* McsEngl.efr'auth@cptIt,

1) gives access to a directory on server.

2) 'mount' access with ftp, but unmounts my closing the browser.

efr'file-permission-control

name::
* McsEngl.efr'file-permission-control@cptIt,

Simple file permissions control

TODO describe more how locked and hidden works

Assign an attributes array inside the specific mounted driver you would like to set the permissions for.

Example:

<?php
array(
 'driver' => 'LocalFileSystem', // driver for accessing file system (REQUIRED)
 'path' => 'path/to/files', // path to files (REQUIRED)
 'attributes' => array(
   array(
     'pattern' => '/^TEST$/', //You can also set permissions for file types by adding, for example, .jpg inside pattern.
     'read' => false,
     'write' => false,
     'locked' => true
   )
 )
),
[https://github.com/Studio-42/elFinder/wiki/Simple-file-permissions-control]

efr'sftp-driver

name::
* McsEngl.efr'sftp-driver@cptIt,
* McsEngl.efr'sftp@cptIt,

You can also use https://github.com/barryvdh/elfinder-flysystem-driver
That enables support for any Flysystem (https://github.com/thephpleague/flysystem) driver, like SFTP (https://github.com/thephpleague/flysystem-sftp)

Naveen Kapoor <notifications@github.com>
7:08 AM (1 hour ago)

to Studio-42/elFi., me
Needed an sftp. So I started playing with phpseclib. Wrote the following lines and I am able to view the folders, files in the elfinder. If someone wants to take it further for copying,deleting files, etc.., be my guest. Here is the code. Also in your connector include this file called: elfinderVolumeSFTP.class.php an extension of the FTP adapter. Not using passwords but RSA keys. The variables in uppercase is what you should replace. However, you will need to install the phpseclib. I downloaded and installed it in the php folder of elfinder as phpseclib.

<?php

/**

Simple elFinder driver for SFTP *author Nick Kapoor
email: nick.kapoor@gmail.com
*/
class elFinderVolumeSFTP extends elFinderVolumeFTP {

protected function connect() {
set_include_path(get_include_path() . PATH_SEPARATOR . 'YOURPHPSECLIB/phpseclib');
include('Crypt/RSA.php');
$key = new Crypt_RSA();
$key->loadKey(file_get_contents('YOUR PHP RSA SEC KEY'));
include("Net/SFTP.php");
$sftp = new Net_SFTP($this->options['host']);
if (!$sftp->login('USERNAME', $key)) {
return $this->setError('Unable to connect to SFTP server ' . $this->options['host']);
}
$this->connect = $sftp;
$this->options['mode'] = 'active';
$this->sftp_chdir($this->connect, $this->root);
$stat = array();
$stat['name'] = $this->root;
$stat['mime'] = 'directory';
$this->filesCache[$this->root] = $stat;
$this->cacheDir($this->root);
return true;
}

protected function sftp_chdir($sftp, $path) {
$sftp->chdir($path);
}

protected function _subdirs($path) {
$buff = $this->sftp_rawlist($this->connect, $path, true);
foreach ($buff as $n => $v) {
$stat = $this->sftpparseRaw($n, $v);
return ($stat['mime'] == 'directory');
}
return false;
}

protected function cacheDir($path) {
$this->dirsCache[$path] = array();

$buff = $this->sftp_rawlist($this->connect, $path, true);
foreach ($buff as $n => $v) {
$p = $path . DIRECTORY_SEPARATOR . $n; //join(" ", array_slice($info, 3, 9));
$this->dirsCache[$path][] = $p;
$stat = $this->sftpparseRaw($n, $v);
$this->filesCache[$p] = $stat;
}
}

protected function sftpparseRaw($n, $raw) {
$stat = array();
if ($n == '.' || $n == '..')
return false;
$stat['name'] = $n;
$stat['mime'] = $raw['type'] == 2 ? 'directory' : $this->mimetype($stat['name']);
$stat['ts'] = $raw['mtime'];
$stat['size'] = $stat['mime'] == 'directory' ? 0 : $raw['size'];
$stat['read'] = $stat['write'] = true;
return $stat;
}

protected function _stat($path) {
$stat = array();

$stat = $this->filesCache[$path];

if (empty($stat)) {
$this->cacheDir($this->_dirname($path));
$stat = $this->filesCache[$path];
}

return $stat;
}

protected function sftp_rawlist($sftp, $remote_directory, $boolVar = true) {
if ($remote_directory == '')
return $sftp->rawlist();
$sftp->chdir($remote_directory);

return $sftp->rawlist();
}

protected function ftp_scan_dir($remote_directory) {

$buff = $this->sftp_rawlist($this->connect, $remote_directory, true);

$items = array();
foreach ($buff as $n => $v) {
$remote_file_path = $remote_directory . DIRECTORY_SEPARATOR . $n; //join(" ", array_slice($info, 3, 9));
$item = array();
$item['type'] = $v['type'] == 2 ? 'd' : 'f';
$item['path'] = $remote_file_path;
$items[] = $item;

if ($item['type'] == 'd' && $n != '.' && $n != '..')
$items = array_merge($items, $this->ftp_scan_dir($this->connect, $item['path']));
}
return $items;
}

}

efr'troubleshooting

name::
* McsEngl.efr'troubleshooting@cptIt,

_FREEZING:
* del httpd διεργασίες and run apache server again.
{2013-09-04}

_NETMOUNT_DEACTIVATED:
* connector.php, after building is the 'minimal' one. Use the full from source.
{2013-09-04}

pgmFmr.File-renaming

name::
* McsEngl.pgmFmr.File-renaming@cptIt,
* McsEngl.bulk-rename-utility@cptIt,
* McsEngl.bulk-rename-utility@cptIt,
* McsEngl.program.renaming-files@cptIt,
* McsEngl.renaming-files-program@cptIt,

reg_exp:
(IMG_)(.*)
\2
===
IMG_xxx.jpg ===> xxx.jpg

pgmFmr.Filemanager

name::
* McsEngl.pgmFmr.Filemanager@cptIt,

_ADDRESS.WPG:
* https://github.com/simogeo/Filemanager,

_DESCRIPTION:
An open-source file manager released under MIT license. Up-to-date for PHP connector. For an online demo, see URL below — Read more
http://fm.linea21.com/
[https://github.com/simogeo/Filemanager]

pgmFmr.FTP

name::
* McsEngl.pgmFmr.FTP@cptIt,
* McsEngl.ftp-program@cptIt,
* McsEngl.program.ftp@cptIt,
* McsEngl.programFtp@cptIt,
* McsEngl.pgmFtp@cptIt,

SPECIFIC

name::
* McsEngl.prgmFtp.specific@cptIt,

_SPECIFIC:
* FileZilla
* FullSync
* WinSCP

pgmFtp.FullSync

name::
* McsEngl.pgmFtp.FullSync@cptIt,
* McsEngl.FullSync@cptIt,

_OVERVIEW:
FullSync is a universal file synchronization and backup tool which is highly customizable and expandable. It is especially for developers, but the basic functionality is easy enough for everyone.
[http://fullsync.sourceforge.net/]

_ADDRESS.WPG:
* http://fullsync.sourceforge.net//
* http://fullsync.sourceforge.net/docs/manual-0.10.0/manual.html,

pgmFmr.FTPbox

name::
* McsEngl.pgmFmr.FTPbox@cptIt,
* McsEngl.FTPbox@cptIt370i,

_DESCRIPTION:
FTPbox is an open-source application that allows you to synchronize all your files to your remote host, via FTP. This way, you can access your files anywhere, without having to pay for disk space on some 3rd-party website!
FTPbox makes synchronizing your files to your own host easy, so you can access them from anywhere. FTPbox supports SFTP (FTP over SSH), so that your file transfers are always safe, and also works offline, which means that any changes made while you were not connected to the internet will be applied once you get connected. In order to easily access your files, FTPbox provides you with links to them. You can use these links either to check your files in browser, or to send them to your friends in order to share the file with them!
[http://ftpbox.org//] 2011-09-21

_PROGRAMING_LANG:
* .NET,

pgmFmr.JASFinder

name::
* McsEngl.pgmFmr.JASFinder@cptIt,
* McsEngl.JASFinder@cptIt,

_DESCRIPTION:
When FCKeditor became CKEditor they made the filemanager component a paid for extension ( http://ckfinder.com/ ). This project seeks to fix this by creating an free LGPL alternative.
[http://sourceforge.net/projects/jasfinder/]

pgmFmr.jQuery

name::
* McsEngl.pgmFmr.jQuery@cptIt,
* McsEngl.jQuery-ftp-program@cptIt,

_ADDRESS.WPG:
* http://www.jquery4u.com/plugins/10-jquery-file-manager-plugins//

_SPECIFIC:
* elFinder: http://elfinder.org// good,
* Free Web File Manager: http://freewebfilemanager.com/filemanager//
* http://sfbrowser.sjeiti.com//
* http://www.abeautifulsite.net/blog/2008/03/jquery-file-tree//

pgmFmr.KCFinder

name::
* McsEngl.pgmFmr.KCFinder@cptIt,
* McsEngl.KCFinder@cptIt,

Current version: 2.51
Release date: August 25, 2011
Author: Pavel Tzonkov
Licenses: GPLv2 & LGPLv2
KCFinder is free open-source alternative to the CKFinder web file manager. It can be integrated into FCKeditor, CKEditor, and TinyMCE WYSIWYG web editors (or your custom web applications) to upload and manage images, flash movies, and other files that can be embedded in an editor's generated HTML content.
[http://kcfinder.sunhater.com//]

kcfinder'installing

name::
* McsEngl.kcfinder'installing@cptIt,

Installation
1. Copy the distribution files to your web server inside the /kcfinder directory or any other directory in your web site.
2. Create a directory in the server to hold all uploaded files. By default, KCFinder is configured to use the /kcfinder/upload/ directory.
3. Make the above upload directory writable by the web server. On Linux, chmod it to 0777.
[http://kcfinder.sunhater.com/docs/install]

pgmFmr.Kinky

name::
* McsEngl.pgmFmr.Kinky@cptIt,

The Kinky File Explorer is a totally free ColdFusion based file exploration system designed to provide read-only access to a specific directory of files. The idea here is that you can provide users with an easy way to view your project codebase without having to worry about them snooping around.
[http://www.bennadel.com/projects/kinky-file-explorer.htm]

pgmFmr.LOCAL-SERVER

name::
* McsEngl.pgmFmr.LOCAL-SERVER@cptIt,

pgmFmr.muCommander (java)

_CREATED: {2013-08-24}

name::
* McsEngl.pgmFmr.muCommander (java)@cptIt,
* McsEngl.muCommander@cptIt,

_ADDRESS.WPG:
* http://www.mucommander.com//

pgmFmr.NETWORK

name::
* McsEngl.pgmFmr.NETWORK@cptIt,
* McsEngl.net-file-manager@cptIt,

pgmFmr.NETWORK.NO

name::
* McsEngl.pgmFmr.NETWORK.NO@cptIt,
* McsEngl.local-file-manager@cptIt,
* McsEngl.non-net-file-manager@cptIt,

pgmFmr.net2ftp (php-auth)

name::
* McsEngl.pgmFmr.net2ftp (php-auth)@cptIt,
* McsEngl.net2ftp@cptIt,

_ADDRESS.WPG:
* http://www.net2ftp.com/index.php,

_DESCRIPTION:
a web based ftp client
[http://www.net2ftp.com/]
===
net2ftp is a web based FTP client, written in PHP.

Features[edit source | editbeta]

As well as offering standard FTP functions, net2ftp also offers a variety of features including archiving and extracting files and directories, downloading a selected group of files and/or directories as an archive.

net2ftp can be set to restrict connections via an access list and can log user actions. Other plugins can be installed to add additional functionality as well. net2ftp can also be downloaded and installed on a host server, in which the requirements are:

A web server (Apache recommended)
PHP 4.2.3 or greater (Optionally, one feature requires PHP 5)
At least 7.5 MB of free space for the net2ftp binaries
MySQL for advanced logging
Integration[edit source | editbeta]

net2ftp has been integrated into many popular Content Management Systems, including Drupal, Joomla, Mambo and XOOPS. net2ftp has also been translated into over 15 languages.
[http://en.wikipedia.org/wiki/Net2ftp]
===
What is net2ftp?

The normal way to connect to your FTP server is to use an FTP client and to communicate via the FTP protocol. This is however not always possible:

you may be behind a corporate firewall at work, which may block the FTP communications;
you may be on holiday and connecting to the internet via a CyberCafe, where you may not be allowed to install an FTP client.
When you use net2ftp these problems are solved: you connect to net2ftp using a regular web browser, and net2ftp translates your requests and takes care of the FTP communication.

net2ftp also provides additional features, on top of the regular FTP features: the possibility to edit code using your web browser, to view the code with syntax highlighting, to upload-and-unzip archives, and to search for words on the FTP server.
[file:///D:/prgmFM/net2ftp_v1.0/net2ftp_v1.0/files_to_upload/help.html]

net2ftp'authenticatin

name::
* McsEngl.net2ftp'authenticatin@cptIt,

Authorizations
Allow the users to connect to all FTP servers, or to only a predefined list of FTP servers.
The input box on the login page will change accordingly.

Logging
Activate or deactivate 3 kinds of logging: pages requested, logins and errors.
[http://www.net2ftp.com/homepage/features-administrator.html?PHPSESSID=jB%2C3sKwCIjavDRbnuHjj6%2C96k8f]

net2ftp'database

name::
* McsEngl.net2ftp'database@cptIt,

MySQL database
A MySQL database is optional. A MySQL database is only needed for logging, and for the Daily Limit (see below).
[http://www.net2ftp.com/homepage/features-administrator.html?PHPSESSID=jB%2C3sKwCIjavDRbnuHjj6%2C96k8f]

pgmFmr.ORTHODOX

_CREATED: {2013-08-29}

name::
* McsEngl.pgmFmr.ORTHODOX@cptIt,
* McsEngl.orthodox-file-manager@cptIt,

_DESCRIPTION:
Orthodox file managers (OFM) or command-based file managers have three windows (two panels and one command line window). Orthodox file managers are one of the older families of file managers. Developers create applications that duplicate and extend the interface that was introduced by PathMinder and John Socha's famous Norton Commander for DOS.[citation needed] The concept is more than twenty five years old—PathMinder was released in 1984, and Norton Commander version 1.0 was released in 1986. Despite the age of this concept, file managers based on Norton Commander are actively developed, and dozens of implementations exist for DOS, Unix, and Microsoft Windows. Nikolai Bezroukov publishes his own set of criteria for an OFM standard (version 1.2 dated June 1997).[13]
[http://en.wikipedia.org/wiki/Orthodox_file_manager#Orthodox_file_managers]

pgmFmr.PHP

name::
* McsEngl.pgmFmr.PHP@cptIt,
* McsEngl.php-ftp-program@cptIt,

_ADDRESS.WPG:
*

_SPECIFIC:
* File Thingie, http://www.solitude.dk/filethingie//
* net2ftp,
* yafm, http://yafm.sourceforge.net//

What is File Thingie?

File Thingie is a small web-based file manager written in PHP. It is intended for those who need to give others access to a part of their server's file system when FTP is not practical. Through File Thingie you and your users get access to the most common functions:

Upload multiple files at once
Multiple users and user groups
Create subdirectories
Rename, move, delete and copy files and folders
Search for file and folder names
Control access to files based on black- or whitelists
Edit text files
Unzip files without downloading
Easy customization of the CSS based layout
Translate into your own language

pgmFmr.Plupload

_CREATED: {2013-07-06}

name::
* McsEngl.pgmFmr.Plupload@cptIt,

_ADDRESS.WPG:
* https://github.com/moxiecode/plupload,
* http://www.plupload.com//
* https://github.com/moxiecode/plupload/wiki/Frequently-Asked-Questions,

plupload'api

name::
* McsEngl.plupload'api@cptIt,

plupload'upload-to-different-domain

name::
* McsEngl.plupload'upload-to-different-domain@cptIt,

How do I upload to a page on a different domain/host?

Different runtimes have different pre-requisites.

For html5 you need to send Access-Control-Allow-Origin header from the remote server, with the comma-separated list of domains to accept. Something like:

// example in PHP
header("Access-Control-Allow-Origin: *"); // * - stands for all domains
You should put this in your server-side handler, before any output. If you are using our bundled upload.php, then that's the place to put it. More info about Cross-Origin Resource Sharing (CORS) here. Examples for other languages here.
In case of flash/silverlight you need to have a crossdomain.xml file in the document root of your destination server (it should be accessible at: http://your-domain.com/crossdomain.xml. Contents like this will allow you to upload from any domain:

<?xml version="1.0" ?>
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>
[https://github.com/moxiecode/plupload/wiki/Frequently-Asked-Questions#wiki-what-is-moxie]

plupload'moxi

name::
* McsEngl.plupload'moxi@cptIt,

mOxie is combined name for XHR2 and File API pollyfills that we've extracted from Plupload in order to make it more flexible and give it opportunity for further growth. But now that pollyfills are separate, they can be used independently.

XHR2 and File API pollyfills are multi-runtime, which means that they will fallback to Flash and SilverLight (additionally there's Java runtime in production) or even "good old" HTML4, when there are no HTML5 capabilities found in current browser.
[https://github.com/moxiecode/plupload/wiki/Frequently-Asked-Questions#wiki-what-is-moxie]

plupload'version

name::
* McsEngl.plupload'version@cptIt,

1.5.7 (bugfix release)
Wed 10/4 2013 20:00


HTML5: Workaround for squish problem in iOS6, when uploading resized images.
HTML5: Fix failing workaround for FormData+Blob bug on Android...
HTML5: Allow multiple uploads on iOS.
Include VB build script that doesn't depend on Ant and is said to be native to Windows.
[http://www.plupload.com/]

pgmFmr.PORTABLE

name::
* McsEngl.pgmFmr.PORTABLE@cptIt,

pgmFmr.SynaMan

_CREATED: {2013-08-25}

name::
* McsEngl.pgmFmr.SynaMan@cptIt,
* McsEngl.SynaMan@cptIt,

_DESCRIPTION:
* Creates a local-machine (host) server and the user connects to it from anywhere on the internet from a browser

pgmFmr.SYNCHRONIZING

name::
* McsEngl.pgmFmr.SYNCHRONIZING@cptIt,

FreeFileSync

_DESCRIPTION:
Key Features

Detect moved and renamed files and folders
Copy locked files (Volume Shadow Copy Service)
Detect conflicts and propagate deletions
Binary file comparison
Configure handling of Symbolic Links
Automate sync as a batch job
Process multiple folder pairs
Comprehensive and detailed error reporting
Copy NTFS extended attributes (compressed, encrypted, sparse)
Copy NTFS security permissions
Support long file paths with more than 260 characters
Fail-safe file copy
Cross-platform: Windows, Linux, Mac OS X
Expand environment variables like %USERPROFILE%
Access variable drive letters by volume name (USB sticks)
Native 64-bit support
Keep versions of deleted/updated files
Prevent disc space bottlenecks via optimal sync sequence
Full Unicode support
Highly optimized runtime performance
Include/exclude files via filter
FreeFileSync portable and local installation available
Handle daylight saving time changes on FAT/FAT32
Use macros %time%, %date%, et al. for recurring backups
Case-sensitive synchronization
Built-in locking: serialize multiple jobs running against the same network share
[http://www.freefilesync.org/features.php]

FullSync#ql:fullsync@cptIt#

pgmFmr.WEB

name::
* McsEngl.pgmFmr.WEB@cptIt,
* McsEngl.browser-file-manager@cptIt,
* McsEngl.online-file-manager@cptIt,
* McsEngl.pgmWeb.FILE-MANAGER@cptIt,
* McsEngl.web-based-file-manager@cptIt,
* McsEngl.website.file-manager@cptIt,
* McsEngl.web-file-manager@cptIt,
* McsEngl.pgmWfm@cptIt,

_GENERIC:
* web-program#ql:pgmweb@cptIt580#

_ADDRESS.WPG:
* http://webix.com/filemanager/index.html,
* http://freecode.com/articles/sftp-for-business-use,
* http://www.nilambar.net/2012/10/best-free-web-based-file-management-scripts-in-php.html,
* http://www.dreamcss.com/2009/08/7-web-based-file-managers-written-in.html,
* http://www.fromdev.com/2012/08/Best-Open-Source-Web-Based-File-Explorer-Applications.html,
* http://www.responsivefilemanager.com//

_DESCRIPTION:
Web-based file managers are typically scripts written in either PHP, Ajax, Perl, ASP or another server-side language. When installed on a local server or on a remote server, they allow files and directories located there to be managed and edited, using a web browser, without the need for FTP Access.

More advanced, and usually commercially-distributed, web-based file management scripts allow the administrator of the file manager to configure secure, individual user accounts, each with individual account permissions. Authorized users have access to documents stored on the server or in their individual user directories anytime, from anywhere, via a web browser.

A web-based file manager can serve as an organization's digital repository. For example, documents, digital media, publishing layouts, and presentations can be stored, managed, and shared between customers, suppliers, and remote workers, or just internally.

Web-based file managers are becoming increasingly popular due to the rise in popularity of dynamic web content management systems (CMS) and the need for non-technical website moderators to manage media on their websites powered by these platforms.

Examples[edit source | editbeta]
net2ftp – a popular, PHP and JavaScript-based FTP client
[http://en.wikipedia.org/wiki/File_manager#Web-based_file_managers]

pgmWfm'security

name::
* McsEngl.pgmWfm'security@cptIt,

Security
user authentication
cms integration - use the CMS's authentication
most permissions (upload/create/edit/delete files/directories) can be turned on/off
ban dangerous file extensions (can't upload/rename, etc files to/with those names)
restrict uploads to images only
[http://kfm.verens.com/Features]

SPECIFIC

* pgmWfm.SPECIFIC,

_SPECIFIC:
* freeNo, secure, php, http://www.filerun.com/features,
* java http://jupload.sourceforge.net/index.html,
* perl: efileman http://www.efileman.de//
* perl http://www.gossamer-threads.com/products/fileman//
* php, db: mollify, http://www.mollify.org/features.php,
* php, db, navphp http://navphp.demo.isource.net.nz//
* php, db, WebFileMan http://www.webfileman.com//
* php, java, file-manager http://www.gerd-tentler.de/tools/index.html,
* php, js: AerFM http://sourceforge.net/projects/aerfm//
* php, js http://bfexplorer.sourceforge.net//

pgmWfm.AnyClient (java)

_CREATED: {2013-07-25}

name::
* McsEngl.pgmWfm.AnyClient (java)@cptIt,
* McsEngl.AnyClient@cptIt,
* McsEngl.anyclient-web@cptIt,
* McsEngl.pgmWeb.AnyClient@cptIt,
* McsEngl.pgmWeb.secure-FTP-applet@cptIt,

_ADDRESS.WPG:
* https://app.anyclient.com//

_DESCRIPTION:
Java program.
===
What is it?
AnyClient Web is a zero-installation web based file transfer client that is easy-to-use and supports all major operating systems including Windows, Mac OS X and Linux.
What file transfer protocols does it support?
AnyClient Web supports all major file transfer protocols including Amazon S3, FTP/S, SFTP, WebDAV and AFTP.
Why was it developed?
Users need to be able to transfer files without having to locate, purchase, install and learn complicated file transfer software. AnyClient solves this problem by offering an intuitive web based file transfer client that is accessible from anywhere in the world. Best of all it's completely free.
Is it secure?
AnyClient Web stores your site information using government grade AES-256 encryption whose secret key can be unlocked only with your password. This secret key is further protected during your session using strong SSL encryption. AnyClient Web also supports several encrypted file transfer protocols that encrypt both your credentials and data as they are sent over the network.
Who uses it?
AnyClient Web users are looking for a no-hassle method of transferring files. It is especially popular with users connecting from shared environments where the installation of software is prohibited (e.g. internet cafes and computer labs). AnyClient Web is also used by businesses seeking to reduce their software licensing and support costs.
Who developed it?
AnyClient Web is brought to you courtesy of JSCAPE, a leading provider of managed file transfer software and networking solutions to businesses and government agencies worldwide.
[https://app.anyclient.com//]
===
Secure FTP Applet
Secure FTP Applet is a secure FTP client component that runs within the context of your Web browser as a Java applet. It can establish a connection using either standard FTP or the SFTP protocol for a secure connection. It is designed to let non-technical users exchange data with an FTP server while ensuring that all data exchanged is completely secure.
[http://freecode.com/projects/secureftpapplet]

pgmWfm.bfExplorer (php; db)

name::
* McsEngl.pgmWfm.bfExplorer (php; db)@cptIt,

BytesFall Explorer (bfExplorer for short) is a web-based file manager written in PHP and JavaScript and licensed under the GNU GPL. It allows you to upload, download, view, edit, copy, move/rename, compress and change permissions of a single file/directory or a group of files/directories. It's also possible to create files and directories and execute shell commands. An SQL engine is used to store the users for the authentication (currently MySQL and PostgreSQL are supported). BytesFall Explorer has an interface similar to Windows Explorer.

bfExplorer uses the work of some other projects, also released under the GNU GPL license:

LiveTree (a modified version) is used to generate the directories tree.
GeSHi is used to highligh the source code in the known files.
Shell Commander (a modified version) is used to provide the shell functionality.
FCKeditor is used to provide WYSIWYG edition of HTML files.
TAR/GZIP/BZIP2/ZIP Archives is used to provide the compression functionality.
[http://bfexplorer.sourceforge.net/index.php]

pgmWfm.eXtplorer (php-js-auth)

name::
* McsEngl.pgmWfm.eXtplorer (php-js-auth)@cptIt,
* McsEngl.eXtplorer@cptIt,
* McsEngl.pgmWeb.eXtplorer@cptIt,
* McsEngl.prgmFm.eXtplorer@cptIt,
* McsEngl.etr@cptIt,

_ADDRESS.WPG:
* http://extplorer.net//
* http://extplorer.sourceforge.net//
* https://www.facebook.com/eXtplorer,

_DESCRIPTION:
eXtplorer is a PHP- and Javascript-based File Manager, which you can be placed on your own web space.
[http://extplorer.net/]
===
* with authentication.

_GENERIC:
* ftp-program,
* web-file-manager,

etr'code

name::
* McsEngl.etr'code@cptIt,

eXtplorer is based on QuiXplorer 2.3.1 (available at http://quixplorer.sourceforge.net/).
[\public_html\extplorer213\README.txt]

etr'evoluting

name::
* McsEngl.etr'evoluting@cptIt,

{time.2012-12-25}:
=== version 2.1.3 security release.
[http://sourceforge.net/p/extplorer/news/]

{time.2011-03-26}:
=== eXtplorer moves to extplorer.net
The eXtplorer project moves to http://extplorer.net! Wiki, Bug Tracker and source code can be found over there now.
Posted by soeren 2011-03-26
[http://sourceforge.net/p/extplorer/news/]

etr'version

name::
* McsEngl.etr'version@cptIt,

etr.2.1.3:
12/25/2012 07:56 am  1.94 MB
eXtplorer: eXtplorer 2.1.3 Security Release

Added by Sφren Eberhardt-Biermann 7 months ago

This morning we were notified of a problem within the authentication system of eXtplorer by Brendan Coles of itsecuritysolutions.org. Versions 2.1.2, 2.1.1, 2.1.0 and 2.1.0RC5 have found to be vulnerable to an authentication bypass bug.
This bug has been fixed in the latest release of eXtplorer (2.1.3), which you should download and install/upgrade immediately!
If you just want a quick fix, please download the attached file called users.php and put it into the eXtplorer subfolder "/include", in Joomla! installations it can be found under "/administrator/components/com_extplorer/include". Just replace the existing file with this new one.
[http://extplorer.net/news]

etr.2.1.0:
eXtplorer 2.1.0 released
July 9, 2012

etr'human

name::
* McsEngl.etr'human@cptIt,

etr'human.DEVELOPER

name::
* McsEngl.etr'human.DEVELOPER@cptIt,

Eberhardt.Soeren:
Upstream Author:
 Soeren Eberhardt <soeren@virtuemart.net>
[\public_html\extplorer213\copyright]
===
soeren [<a t>] virtuemart.net
Content Responsible:
Soeren Eberhardt
Schweriner Str. 15
Neustadt-Glewe
GERMANY
[http://extplorer.sourceforge.net/]
===
Sφren Eberhardt-Biermann
Email: info@extplorer.net
[http://extplorer.net/users/3]
===
eXtplorer is a free project, maintained by me - soeren.

You can send me an email: soeren [<a t>] fledge.de

Content Responsible:
Soeren Eberhardt
Schweriner Str. 15
GERMANY, Neustadt-Glewe
[http://extplorer.net/wiki/Contact]

This package was debianized by Thomas Goirand <thomas@goirand.fr> on
Wed, 07 Oct 2009 10:45:22 +0800
[\public_html\extplorer213\copyright]

etr'human.USER

name::
* McsEngl.etr'human.USER@cptIt,

_ATTRIBUTE:
* Username:
* Confirm password:
* Confirm new password:
* Change password: checkbox.
* Home directory: C:/public_html/
* Home URL: http://localhost
* Show hidden items: boolean
* Hide pattern:
* Permissions: View only, Modify, Change password, Modify & Change password, Administrator.
* Active: boolean.

etr'installation

name::
* McsEngl.etr'installation@cptIt,

Stand Alone Installation
1. Extract the downloaded Archive to a local directory, say \Files\extplorer
2. Login to your server via FTP and create a subdirectory for eXtplorer, say /extplorer
3. Allow write access for your webserver for that subdirectory and the subdirectory /extplorer/ftp_tmp (e.g. chmod 777)
4. Upload all eXtplorer files from your computer into the subdirectory on the server
5. Browse to the URL http://<YOURSERVER>/extplorer and login (user: admin, pass: admin). Remember to immediately change the admin password.
- Important: If you can't change your admin password, this is most likely because the user file is not writable. With your FTP program browse to the eXtplorer directory /config and make the file ".htusers.php" writable (CHMOD 666).
...
Access Stand Alone eXtplorer the First Time
If you access eXtplorer the first time, you are asked to change the admin password. You really need to change it - if not, your system is open to intrusion by hackers or other malicious people. On the left of the main screen you can see the directory tree. If you click on a directory in that tree, eXtplorer checks for subdirectories and loads them if existant. In the Internet Explorer and Firefox you can right-click on a directory and access a context menu with actions you can perform on it. A double-click on a directory allows you to rename it.

The grid in the center of the main screen lists the first 50 files of the currently selected directory. You can display directories in the list by clicking Show Directories in the toolbar. If the directory contains more than 50 files and dirs, you can use the page navigation in the footer of the grid to go to the next page or jump to a page of your choice. The grid allows you to perform right-clicks on certain files. A right-click opens the context menu - as well as a double-click. Actions which couldn't be executed are grayed out. You can select multiple files at once using the Ctrl-Key while selecting items in the grid with the mouse or the up- and down- arrow keys.
[http://extplorer.net/projects/extplorer/wiki/Getting_Started]

etr'license

name::
* McsEngl.etr'license@cptIt,

eXtplorer is released under a dual-license: You can choose wether you want to use eXtplorer under the Mozilla Public License (MPL 1.1) or under the GNU General Public License (GNU/GPL). Note that if you decide to distribute/use eXtplorer under the MPL, you are not allowed to use the ExtJS Javascript library.
[http://extplorer.sourceforge.net/]

pgmWfm.FILE-SHARING

name::
* McsEngl.pgmWfm.FILE-SHARING@cptIt,
* McsEngl.pgmWeb.file-sharing@cptIt,
* McsEngl.web-based-file-sharing@cptIt,
* McsEngl.website.file-sharing@cptIt,
* McsEngl.web-file-sharing@cptIt,

_ADDRESS.WPG:
* https://send-anywhere.com//
* http://www.hongkiat.com/blog/15-great-free-online-file-sharing-alternatives//

_DESCRIPTION:
Today’s technology and machines (whether it’s PC or Mac) are certainly capable of processing large original files like .PSD (Photoshop) and .AI (Illustrator) but the bad news is the sharing part aren’t . These files are fairly large in size and cumbersome to share with peers and clients. Two ways we would generally used – e-mailing and sharing via hosting account. Not saying it’s bad but e-mail comes with attachment limitation and usually doesn’t allow anything more than 100Mb. On the other hand sharing via web hosting account allows you to upload as big as your account can take but it also means the file is exposed by anyone who knows its direct path.
File-sharing web services solve most of these problems. They are free (most of them and they allow large files to be sent securely. Here are some free file-sharing sites we come to know and if you share files with friends or peers via Internet frequently, you might want to consider getting them done this way.
[http://www.hongkiat.com/blog/15-great-free-online-file-sharing-alternatives/]

_SPECIFIC:
* PipeBytes
Instantly send music, movies, presentations or any other files to anybody!
Max filesize: Unlimited | Registration: No | Premium account: No | Password Protection: No | Visit Website

pgmWfm.iDC-file-manager (perl https)

name::
* McsEngl.pgmWfm.iDC-file-manager (perl https)@cptIt,

_DESCRIPTION:
iDC File Manager allows you to securely store, manage and share files and every other format of digital media, including, documents, images, audio, video, publishing layouts, presentations and PDF files between you and your end users.

Once installed on your existing web server, you can setup in seconds, secure, individual user accounts enabling your authorized users quick and easy access to your documents. Access can be gained 24 hours a day, 7 days a week from anywhere in the world via an Internet Browser.

Acting as a Digital repository, the Web Based File Manager will allow you to easily organize and categorize all of your company documents by department, customer name, project or workgroup into centrally located folders or sub folders. All uploaded documents can then be quickly located through the familiar folder structures or via the built in search facility.

Imagine how much more productive your company will be when your management teams have access to centralized, up-to-the-minute information or when your sales representatives can share pricing structures, sales proposals or sales information across your regional locations in real time.

Whether you are in the office, or accessing documents from the other side of the world, you'll always have access to the most up-to-date information available.
[http://www.filemanager.net/site.php?page=FeaturesOverview]

pgmWfm.KFM

name::
* McsEngl.pgmWfm.KFM@cptIt,
* McsEngl.KFM@cptIt,
* McsEngl.pgmFmr.KFM@cptIt,

_DESCRIPTION:
KFM is an online file manager which can be used on its own, or as a plugin for a rich-text editor such as CKeditor, TinyMCE or FCKeditor.
KFM is Open Source, and you are free to use it in any project, whether free or commercial.
[http://kfm.verens.com/Home]

_ADDRESS.WPG:
* https://code.google.com/p/kfm//

pgmWfm.LOCAL-SERVER

name::
* McsEngl.pgmWfm.LOCAL-SERVER@cptIt,

_SPECIFIC:
* freeNo, http://web-file-management.com//

pgmWfm.MonstaFTP (free; php; unsecure)

_CREATED: {2013-08-27}

name::
* McsEngl.pgmWfm.MonstaFTP (free@cptIt, php; unsecure),
* McsEngl.MonstaFTP@cptIt,

_DESCRIPTION:
Open source PHP/Ajax cloudware that puts FTP file management right in your browser, anywhere, any time.
[www.monstaftp.com]
===
Monsta FTP Description
Say goodbye to desktop FTP software forever because Monsta FTP can connect you to any Windows or Linux server right from your browser, anywhere, anytime. Open source PHP/Ajax supports the latest HTML5 browser technologies to easily drag and drop files and folders from your desktop. Just 2 files to install and away you go, uploading, downloading, chmoding, renaming, deleting and editing. Features multi-language support.
[http://www.monstaftp.com/promote/]

monstaftp'IP-session-locking

name::
* McsEngl.monstaftp'IP-session-locking@cptIt,

When would I turn off IP session locking?
Mobile networks typically change the IP address you're using when you're using mobile data, which can cause your session to be terminated. If using Monsta FTP on your mobile, this is a more reliable option.
[http://www.monstaftp.com/support/]

monstaftp'security

name::
* McsEngl.monstaftp'security@cptIt,

_DESCRIPTION:
Is Monsta FTP secure?

Monsta FTP is as secure as any program using the FTP protocol. Every time you click a link or button within the app, before any process is performed, the system will check that your IP matches the IP of the initial login. This protects against session hyjacking (this can be turned off if required). Also, to prevent repeat failed login attempts, the system will lockout the user after 3 failed attempts. You can see how long the lockout lasts for.

If you use the "Save Login Details" feature on the login screen, your FTP details (host, username, password) will be saved in plain text to a cookie on your system.
[http://www.monstaftp.com/support/]

monstaftp'version

name::
* McsEngl.monstaftp'version@cptIt,

pgmWfm.OLIVER

name::
* McsEngl.pgmWfm.OLIVER@cptIt,
* McsEngl.pgmWeb.oliver@cptIt,

Oliver (formerly Webshare) is a free, web based FTP front-end, written in PHP and released under the GPL. It is intended to allow people to access files, normally only available via FTP, using a web browser. This effectively provides users with a complete web-based file management system that, if SSL is enabled on your web server, uses a single secure connection - making it far simpler to use and to work through a firewall. Despite the existence of many similar projects, notably Gollem, it was created to fulfill specific requirements:

Small and Simple
This isn't trying to compete with powerful systems like Gollem. It is really only intended to be a functional skeleton for end-users to use and customize. The code should be well commented and easy to understand.
Javascript optional
There are bits of javascript here, but they're all optional. A lot of effort has gone into avoiding javascript here - I can't help wondering if it was worth it ?

Fast
Speed is essential and considered more important than features. This is supposed to be usable. If you want bells and whistles you're probably in the wrong place.

Secure as possible
Don't laugh! OK the very essence of this concept is insecure, however it should be as secure as possible in the circumstances. Using Oliver instead of FTP should improve the security of your file store.

Status
There is an ever growing TODO list, nonetheless Oliver is totally functional. Thanks to the generosity of the user base, translations are included for Dutch, French, German, Japanese, Portuguese (Brazil), and Spanish. Check the screenshots for an example of what to expect.
Oliver was originally based on FCG FTP CLIENT By Tiago Luz and Gollem, however nearly all of the FCG code has been replaced.

Links
SourceForge project page
Browse SVN repository
Please send bug-reports, patches, feature requests and bottles of red wine to oliver@fatsquirrel.org
[http://oliver.sourceforge.net//]

pgmWfm.PAFM

_CREATED: {2013-08-27}

name::
* McsEngl.pgmWfm.PAFM@cptIt,
* McsEngl.PAFM@cptIt,

_DESCRIPTION:
1 php file, http, did not work correct

PHP AJAX File Manager (PAFM) is a web file manager based on the KISS Principle.
It is intended for use by web masters who need a simple way to interact with their files. As much control as possible is given, which makes it only suitable for those who already have complete access.
[https://github.com/mustafa0x/pafm]
===
PHP AJAX File Manager (PAFM) is a web-based file manager designed to give you complete control of your site's files. Source code editing is done with CodeMirror, a web-based editor with as-you-type syntax highlighting.
[http://sourceforge.net/projects/pafm/]

pgmWfm.QuiXplorer

name::
* McsEngl.quixplorer@cptIt,

_ADDRESS.WPG:
* https://github.com/realtimeprojects/quixplorer,
* http://quixplorer.sourceforge.net//

eXtplorer is based on QuiXplorer 2.3.1 (available at http://quixplorer.sourceforge.net/).
[C:\public_html\extplorer213\README.txt]

pgmFmr.WinMerge

name::
* McsEngl.WinMerge@cptIt,

_DESCRIPTION:
WinMerge is a Windows tool for visual difference display and merging, for both files and directories. It is highly useful for determining what has changed between file versions, and then merging those changes. WinMerge has Unicode support, Flexible syntax coloring editor, Visual SourceSafe integration, and Windows Shell integration. Regexp filtering for filenames and lines. Side-by-side line difference and highlights differences inside lines. A file map shows the overall file differences in a location pane. The user interface is translated into several languages.
[http://sourceforge.net/projects/winmerge/]

FvMcs.Cmrpgm.PRESENTATION

name::
* McsEngl.conceptIt959,
* McsEngl.presentation program@cptIt,
* McsEngl.program.presentation@cptIt959,

DEFINITION

SPECIFIC

_SPECIFIC#ql:_GENERIC cptIt959#

FvMcs.Cmrpgm.SYNAGONISM

_CREATED: {2014-06-09}

name::
* McsEngl.conceptIt588,
* McsEngl.program.synagonism@cptIt,
* McsEngl.programSynagonism@cptIt,
* McsEngl.pgmSgm@cptIt, 2014-06-08

pgmSgm'DEFINITION

_DEFINITION:
PgmSgm is a computer-program, written in JavaScript, which is a code-editor, html-wysiwyg-editor, and an IDE.
[hmnSngo.2014-06-09]

FvMcs.Cmrpgm.MySQL

_CREATED: {2011-09-23}

name::
* McsEngl.conceptIt43,
* McsEngl.mysql@cptIt43,

mysql'DEFINITION

MySQL Community Edition is the freely downloadable version of the world's most popular open source database. It is available under the GPL license and is supported by a huge and active community of open source developers.
[http://www.mysql.com/products/community/]

MySQL ( /ma? ??skju?'?l/ "My S-Q-L",[1] officially, but also commonly /ma? 'si?kw?l/ "My Sequel") is a relational database management system (RDBMS)[2] that runs as a server providing multi-user access to a number of databases. It is named after developer Michael Widenius' daughter, My.[3] The SQL phrase stands for Structured Query Language.[4]
[http://en.wikipedia.org/wiki/MySQL]

mysql'GENERIC

_GENERIC:
* program-database#cptIt8#

mysql.SPECIFIC

name::
* McsEngl.mysql.SPECIFIC@cptIt,

Specific_concepts (level 3) =

mysql'Constraint

name::
* McsEngl.mysql'Constraint@cptIt,

MySQL enables you to work both with transactional tables that permit rollback and with nontransactional tables that do not. Because of this, constraint handling is a bit different in MySQL than in other DBMSs. We must handle the case when you have inserted or updated a lot of rows in a nontransactional table for which changes cannot be rolled back when an error occurs.

The basic philosophy is that MySQL Server tries to produce an error for anything that it can detect while parsing a statement to be executed, and tries to recover from any errors that occur while executing the statement. We do this in most cases, but not yet for all.
[http://dev.mysql.com/doc/refman/5.5/en/constraints.html]

mysql'Database

name::
* McsEngl.mysql'Database@cptIt,

mysql'database'backuping

name::
* McsEngl.mysql'database'backuping@cptIt,
* McsEngl.mysql'doing.database.backuping@cptIt,

_mysqldump:
Using mysqldump to backup just one database:

%>mysqldump [options] db_name
Using mysqldump to backup several tables within a database:

%>mysqldump [options] db_name table1 table2 . . . tableN
Using mysqldump to backup several databases:

%>mysqldump [options] --databases [options] db_name1 db_name2 . . . db_nameN
Using mysqldump to backup all databases:

%>mysqldump [options] --all-databases [options]
The options can be viewed by executing the following command:

%>mysqldump --help
[http://dev.mysql.com/tech-resources/articles/mysql_intro.html]

_mysqlhotcopy:
The mysqlhotcopy utility is a perl script that uses several basic system and SQL commands to backup a database. More specifically, it will lock the tables, flush the tables, make a copy, and unlock the tables. Although it is the fastest method available for backing up a MySQL database, it is limited to backing up only those databases residing on the same machine as where it is executed.

The function mysqlhotcopy can be executed to backup one database, a number of databases, or only those databases matching a name specified by a regular expression. In this section, the syntax involved with each scenario is provided, followed with a few examples.

Using mysqlhotcopy to backup just one database:

%>mysqlhotcopy [options] db_name /path/to/new_directory
Using mysqlhotcopy to backup just several databases:

%>mysqlhotcopy [options] db_name_1 ... db_name_n /path/to/new_directory
Using mysqlhotcopy to backup only those tables within a given database that match a regular expression:

%>mysqlhotcopy [options] db_name./regex/
The options can be viewed by executing the following command:

%>mysqlhotcopy --help
[http://dev.mysql.com/tech-resources/articles/mysql_intro.html]

mysql'database'creating

name::
* McsEngl.mysql'database'creating@cptIt,
* McsEngl.mysql'doing.database.creating@cptIt,

_mysqladmin:
cmd: %>mysqladmin -u root -p create db_name

mysql'database'deleting

name::
* McsEngl.mysql'database'deleting@cptIt,
* McsEngl.mysql'doing.database.deleting@cptIt,

_mysqladmin:
cmd: %>mysqladmin -u root -p drop db_name

mysql'database'selecting

name::
* McsEngl.mysql'database'selecting@cptIt,
* McsEngl.mysql'doing.database.selecting@cptIt,

_mysql:
cmd: use db_name

mysql'database'showing

name::
* McsEngl.mysql'database'showing@cptIt,
* McsEngl.mysql'doing.database.showing@cptIt,

_mysql:
cmd: show databases;

mysql'database.mysql

name::
* McsEngl.mysql'database.mysql@cptIt,
* McsEngl.db-mysql@cptIt,

_PART:
* privilege-tables#ql:mysql'privilege_tables#

_Table:
columns_priv
db
event
func
general_log
help_category
help_keyword
help_relation
help_topic
host
ndb_binlog_index
plugin
proc
procs_priv
proxies_priv
servers
slow_log
tables_priv
time_zone
time_zone_leap_second
time_zone_name
time_zone_transition
time_zone_transition_type
user

mysql'Data

name::
* McsEngl.mysql'Data@cptIt,

_WHOLE:
* table#ql:mysql'table#

mysql'Blob

name::
* McsEngl.mysql'Blob@cptIt,

BLOB values are treated as binary strings (byte strings). They have no character set, and sorting and comparison are based on the numeric values of the bytes in column values. TEXT values are treated as nonbinary strings (character strings). They have a character set, and values are sorted and compared based on the collation of the character set.
[http://dev.mysql.com/doc/refman/5.5/en/blob.html]

mysql'Datatype

name::
* McsEngl.mysql'Datatype@cptIt,

_DESCRIPTION:
Data Types:

Many data types: signed/unsigned integers 1, 2, 3, 4, and 8 bytes long, FLOAT, DOUBLE, CHAR, VARCHAR, BINARY, VARBINARY, TEXT, BLOB, DATE, TIME, DATETIME, TIMESTAMP, YEAR, SET, ENUM, and OpenGIS spatial types. See Chapter 10, Data Types.

Fixed-length and variable-length string types.

Statements and Functions:

Full operator and function support in the SELECT list and WHERE clause of queries. For example:

mysql> SELECT CONCAT(first_name, ' ', last_name)
-> FROM citizen
-> WHERE income/dependents > 10000 AND age > 30;
Full support for SQL GROUP BY and ORDER BY clauses. Support for group functions (COUNT(), AVG(), STD(), SUM(), MAX(), MIN(), and GROUP_CONCAT()).

Support for LEFT OUTER JOIN and RIGHT OUTER JOIN with both standard SQL and ODBC syntax.

Support for aliases on tables and columns as required by standard SQL.

Support for DELETE, INSERT, REPLACE, and UPDATE to return the number of rows that were changed (affected), or to return the number of rows matched instead by setting a flag when connecting to the server.

Support for MySQL-specific SHOW statements that retrieve information about databases, storage engines, tables, and indexes. MySQL 5.0 adds support for the INFORMATION_SCHEMA database, implemented according to standard SQL.

An EXPLAIN statement to show how the optimizer resolves a query.

Independence of function names from table or column names. For example, ABS is a valid column name. The only restriction is that for a function call, no spaces are permitted between the function name and the “(” that follows it. See Section 8.3, “Reserved Words”.

You can refer to tables from different databases in the same statement.
[http://dev.mysql.com/doc/refman/5.5/en/features.html]

mysql'Enum

name::
* McsEngl.mysql'Enum@cptIt,

_Example:
fa_media_type | enum('UNKNOWN','BITMAP','DRAWING','AUDIO','VIDEO','MULTIMEDIA','OFFICE','TEXT','EXECUTABLE','ARCHIVE')

mysql'Doing

name::
* McsEngl.mysql'Doing@cptIt,

mysql'doing.Server.connecting

name::
* McsEngl.mysql'doing.Server.connecting@cptIt,

_command_line:
1) set on path: \Program Files\MySQL\MySQL Server 5.5\bin;
2) shell> mysql -h host -u user -p
Enter password: ********
---
If you are logging in on the same machine that MySQL is running on, you can omit the host, and simply use the following:
shell> mysql -u user -p

mysql'doing.Show.status-info#ql:sql'doing.Show.status-info#

name::
* McsEngl.mysql'doing.Show.status-info@cptIt,

mysql'Error

name::
* McsEngl.mysql'Error@cptIt,

mysql'erron.1044:
Note
If you get an error such as ERROR 1044 (42000): Access denied for user 'monty'@'localhost' to database 'menagerie' when attempting to create a database, this means that your user account does not have the necessary privileges to do so. Discuss this with the administrator or see Section 5.4, “The MySQL Access Privilege System”.
[http://dev.mysql.com/doc/refman/5.5/en/creating-database.html]

mysql'error.2002:
If, when you attempt to log in, you get an error message such as ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2), it means that the MySQL server daemon (Unix) or service (Windows) is not running. Consult the administrator or see the section of Chapter 2, Installing and Upgrading MySQL that is appropriate to your operating system.
[http://dev.mysql.com/doc/refman/5.5/en/connecting-disconnecting.html]

mysql'EVOLUTION#cptCore546.171#

name::
* McsEngl.mysql'EVOLUTION@cptIt,

_2011-09-15:
Stable release  5.5.16

_1995_05_23:
Initial release

mysql'Index

name::
* McsEngl.mysql'Index@cptIt,

_DESCRIPTION:
7.3.4. Column Indexes
The most common type of index involves a single column, storing copies of the values from that column in a data structure, allowing fast lookups for the rows with the corresponding column values. The B-tree data structure lets the index quickly find a specific value, a set of values, or a range of values, corresponding to operators such as =, >, =, BETWEEN, IN, and so on, in a WHERE clause.
The maximum number of indexes per table and the maximum index length is defined per storage engine. See Chapter 13, Storage Engines. All storage engines support at least 16 indexes per table and a total index length of at least 256 bytes. Most storage engines have higher limits.
[http://dev.mysql.com/doc/refman/5.5/en/column-indexes.html]

mysql'index.FullText

name::
* McsEngl.mysql'index.FullText@cptIt,

_DESCRIPTION:
You can also create FULLTEXT indexes. These are used for full-text searches. Only the MyISAM storage engine supports FULLTEXT indexes and only for CHAR, VARCHAR, and TEXT columns. Indexing always takes place over the entire column and column prefix indexing is not supported. For details, see Section 11.9, “Full-Text Search Functions”.
[http://dev.mysql.com/doc/refman/5.5/en/column-indexes.html]

mysql'index.Memory

name::
* McsEngl.mysql'index.Memory@cptIt,

_DESCRIPTION:
The MEMORY storage engine uses HASH indexes by default, but also supports BTREE indexes.
[http://dev.mysql.com/doc/refman/5.5/en/column-indexes.html]

mysql'index.Multiple-column

name::
* McsEngl.mysql'index.Multiple-column@cptIt,

7.3.5. Multiple-Column Indexes
MySQL can create composite indexes (that is, indexes on multiple columns). An index may consist of up to 16 columns. For certain data types, you can index a prefix of the column (see Section 7.3.4, “Column Indexes”).

MySQL can use multiple-column indexes for queries that test all the columns in the index, or queries that test just the first column, the first two columns, the first three columns, and so on. If you specify the columns in the right order in the index definition, a single composite index can speed up several kinds of queries on the same table.

A multiple-column index can be considered a sorted array, the rows of which contain values that are created by concatenating the values of the indexed columns.
[http://dev.mysql.com/doc/refman/5.5/en/multiple-column-indexes.html]

mysql'index.Prefix

name::
* McsEngl.mysql'index.Prefix@cptIt,

_DESCRIPTION:
With col_name(N) syntax in an index specification, you can create an index that uses only the first N characters of a string column. Indexing only a prefix of column values in this way can make the index file much smaller. When you index a BLOB or TEXT column, you must specify a prefix length for the index. For example:

CREATE TABLE test (blob_col BLOB, INDEX(blob_col(10)));
Prefixes can be up to 1000 bytes long (767 bytes for InnoDB tables).

Note
Prefix limits are measured in bytes, while the prefix length in CREATE TABLE statements is interpreted as number of characters. Take this into account when specifying a prefix length for a column that uses a multi-byte character set.
[http://dev.mysql.com/doc/refman/5.5/en/column-indexes.html]

mysql'index.Spatial

name::
* McsEngl.mysql'index.Spatial@cptIt,

_DESCRIPTION:
You can also create indexes on spatial data types. Currently, only MyISAM supports R-tree indexes on spatial types. Other storage engines use B-trees for indexing spatial types (except for ARCHIVE, which does not support spatial type indexing).
[http://dev.mysql.com/doc/refman/5.5/en/column-indexes.html]

mysql'Installation

name::
* McsEngl.mysql'Installation@cptIt,

_Service:
If service is not active, set it manually from "services" at εναρξη/εργαλεία-διαχειρισης/

my.cnf

name::
* McsEngl.my.cnf@cptIt,

_win:
\Program Files\MySQL\MySQL Server 5.5\my.ini,

This file, entitled my.cnf, stores default startup options for both the server and for clients. Correct configuration of this file can go a long way towards optimizing MySQL, as various memory buffer settings and other valuable options can be set here.
[http://dev.mysql.com/tech-resources/articles/mysql_intro.html]

Error

PHP Fatal error: Call to a member function isLocal() on a non-object in \public_html\ow\includes\Title.
php on line 542
>>> \php\php maintenance/rebuildall.php

mysql'Limit

name::
* McsEngl.mysql'Limit@cptIt,

Scalability and Limits:

Support for large databases. We use MySQL Server with databases that contain 50 million records. We also know of users who use MySQL Server with 200,000 tables and about 5,000,000,000 rows.

Support for up to 64 indexes per table (32 before MySQL 4.1.2). Each index may consist of 1 to 16 columns or parts of columns. The maximum index width is 1000 bytes (767 for InnoDB); before MySQL 4.1.2, the limit is 500 bytes. An index may use a prefix of a column for CHAR, VARCHAR, BLOB, or TEXT column types.
[http://dev.mysql.com/doc/refman/5.5/en/features.html]

mysql'mysql-client-program

name::
* McsEngl.mysql'mysql-client-program@cptIt,
* McsEngl.mysql-client-program@cptIt,
* McsEngl.mysql-interface-command@cptIt,
* McsEngl.mysql-terminal-monitor@cptIt,
* McsEngl.mysql-monitor@cptIt,

_DESCRIPTION:
This chapter provides a tutorial introduction to MySQL by showing how to use the mysql client program to create and use a simple database. mysql (sometimes referred to as the “terminal monitor” or just “monitor”) is an interactive program that enables you to connect to a MySQL server, run queries, and view the results. mysql may also be used in batch mode: you place your queries in a file beforehand, then tell mysql to execute the contents of the file. Both ways of using mysql are covered here.
[http://dev.mysql.com/doc/refman/5.5/en/tutorial.html]

_Run_script:
You can also use scripts from the mysql prompt by using the source command or \. command:

mysql> source filename;
mysql> \. filename
[http://dev.mysql.com/doc/refman/5.5/en/batch-mode.html]

mysql'OrgProducing

name::
* McsEngl.mysql'OrgProducing@cptIt,

Developer(s)  MySQL AB (A subsidiary of Oracle)

The MySQL development project has made its source code available under the terms of the GNU General Public License, as well as under a variety of proprietary agreements. MySQL was owned and sponsored by a single for-profit firm, the Swedish company MySQL AB, now owned by Oracle Corporation.[5]
[http://en.wikipedia.org/wiki/MySQL]

mysql'Performance

name::
* McsEngl.mysql'Performance@cptIt,

_DESCRIPTION:
Database performance depends on several factors at the database level, such as tables, queries, and configuration settings. These software constructs result in CPU and I/O operations at the hardware level, which you must minimize and make as efficient as possible. As you work on database performance, you start by learning the high-level rules and guidelines for the software side, and measuring performance using wall-clock time. As you become an expert, you learn more about what happens internally, and start measuring things such as CPU cycles and I/O operations.

Typical users aim to get the best database performance out of their existing software and hardware configurations. Advanced users look for opportunities to improve the MySQL software itself, or develop their own storage engines and hardware appliances to expand the MySQL ecosystem.
[http://dev.mysql.com/doc/refman/5.5/en/optimize-overview.html]

mysql'Optimization

name::
* McsEngl.mysql'Optimization@cptIt,

mysql'phpMyAdmin

name::
* McsEngl.mysql'phpMyAdmin@cptIt,
* McsEngl.mysql-interface-web@cptIt,
* McsEngl.phpMyAdmin@cptIt43i,
* McsEngl.pmAdmin@cptIt43i,

_GENERIC:
* program-tool,

_DESCRIPTION:
phpMyAdmin is a free software tool written in PHP intended to handle the administration of MySQL over the World Wide Web. phpMyAdmin supports a wide range of operations with MySQL. The most frequently used operations are supported by the user interface (managing databases, tables, fields, relations, indexes, users, permissions, etc), while you still have the ability to directly execute any SQL statement.
[http://www.phpmyadmin.net/home_page/index.php]

pmAdmin'ATTRIBUTE

name::
* McsEngl.pmAdmin'ATTRIBUTE@cptIt,

Features

Intuitive web interface
Support for most MySQL features:
browse and drop databases, tables, views, fields and indexes
create, copy, drop, rename and alter databases, tables, fields and indexes
maintenance server, databases and tables, with proposals on server configuration
execute, edit and bookmark any SQL-statement, even batch-queries
manage MySQL users and privileges
manage stored procedures and triggers
Import data from CSV and SQL
Export data to various formats: CSV, SQL, XML, PDF, ISO/IEC 26300 - OpenDocument Text and Spreadsheet, Word, LATEX and others
Administering multiple servers
Creating PDF graphics of your database layout
Creating complex queries using Query-by-example (QBE)
Searching globally in a database or a subset of it
Transforming stored data into any format using a set of predefined functions, like displaying BLOB-data as image or download-link
And much more...
[http://www.phpmyadmin.net/home_page/index.php]

pmAdmin'Installation

name::
* McsEngl.pmAdmin'Installation@cptIt,

_WIN:
1) unzip on "\public_html\phpmyadmin"
2) on \public_html\phpmyadmin\config.inc.php
- set $cfg['blowfish_secret'] = 'hknm';
3) run: http://localhost/phpmyadmin/index.php

pmAdmin'Resource

name::
* McsEngl.pmAdmin'Resource@cptIt,

_SPECIFIC:
* http://wiki.phpmyadmin.net/pma/Welcome_to_phpMyAdmin_Wiki,

mysql'Privilege-tables

name::
* McsEngl.mysql'Privilege-tables@cptIt,

_WHOLE:
* mysql-database,

_DESCRIPTION:
keep in mind that the privilege tables are playing a role in every single query and command that takes place, ensuring that the user executing these commands/queries has proper permissions for doing so.
... These tables, collectively located in the mysql database, contain information regarding the connection and usage capabilities of all users intended to use the MySQL database server.
[http://dev.mysql.com/tech-resources/articles/mysql_intro.html]

mysql'Program

name::
* McsEngl.mysql'Program@cptIt,

_DESCRIPTION:
There are many different programs in a MySQL installation. ...
Most MySQL distributions include all of these programs, except for those programs that are platform-specific. (For example, the server startup scripts are not used on Windows.)
[http://dev.mysql.com/doc/refman/5.5/en/programs-overview.html]

_SPECIFIC:
* administration-program,
* client-program,
* command-line--program,
* GUI-program,
* installation-program,
* server-program,
* utility-program

mysql'program.Administrative

name::
* McsEngl.mysql'program.Administrative@cptIt,

_SPECIFIC:
4.6. MySQL Administrative and Utility Programs
4.6.1. innochecksum — Offline InnoDB File Checksum Utility
4.6.2. myisam_ftdump — Display Full-Text Index information
4.6.3. myisamchk — MyISAM Table-Maintenance Utility
4.6.4. myisamlog — Display MyISAM Log File Contents
4.6.5. myisampack — Generate Compressed, Read-Only MyISAM Tables
4.6.6. mysqlaccess — Client for Checking Access Privileges
4.6.7. mysqlbinlog — Utility for Processing Binary Log Files
4.6.8. mysqldumpslow — Summarize Slow Query Log Files
4.6.9. mysqlhotcopy — A Database Backup Program
4.6.10. mysql_convert_table_format — Convert Tables to Use a Given Storage Engine
4.6.11. mysql_find_rows — Extract SQL Statements from Files
4.6.12. mysql_fix_extensions — Normalize Table File Name Extensions
4.6.13. mysql_setpermission — Interactively Set Permissions in Grant Tables
4.6.14. mysql_waitpid — Kill Process and Wait for Its Termination
4.6.15. mysql_zap — Kill Processes That Match a Pattern

mysql'program.Client

name::
* McsEngl.mysql'program.Client@cptIt,
* McsEngl.mysql-interface@cptIt,

_SPECIFIC:
* phpMyAdmin,
* mysql — The MySQL Command-Line Tool
* mysqladmin — Client for Administering a MySQL Server
* mysqlcheck — A Table Maintenance Program
* mysqldump — A Database Backup Program
* mysqlimport — A Data Import Program
* mysqlshow — Display Database, Table, and Column Information
* mysqlslap — Load Emulation Client

mysql'program.mysqladmin

name::
* McsEngl.mysql'program.mysqladmin@cptIt,

_DESCRIPTION:
mysqladmin — Client for Administering a MySQL Server
mysqladmin is a client for performing administrative operations. You can use it to check the server's configuration and current status, to create and drop databases, and more.
[http://dev.mysql.com/doc/refman/5.5/en/mysqladmin.html]

_ADDRESS.WPG:
* http://dev.mysql.com/doc/refman/5.5/en/mysqladmin.html,

mysql'Program.server

name::
* McsEngl.mysql'Program.server@cptIt,

_SPECIFIC:

mysql'Program-uses-mysql

name::
* McsEngl.mysql'Program-uses-mysql@cptIt,

Applications which use MySQL databases include: Joomla, WordPress, MyBB, phpBB, Drupal and other software built on the LAMP software stack. MySQL is also used in many high-profile, large-scale World Wide Web products, including Wikipedia, Google[6] (though not for searches) and Facebook.[7]
[http://en.wikipedia.org/wiki/MySQL]

mysql'Programming-language

name::
* McsEngl.mysql'Programming-language@cptIt,

MySQL is written in C and C++. Its SQL parser is written in yacc, and a home-brewed lexical analyzer named sql_lex.cc.[15]
Many programming languages with language-specific APIs include libraries for accessing MySQL databases. These include MySQL Connector/Net for integration with Microsoft's Visual Studio (languages such as C# and VB are most commonly used) and the JDBC driver for Java. In addition, an ODBC interface called MyODBC allows additional programming languages that support the ODBC interface to communicate with a MySQL database, such as ASP or ColdFusion. The HTSQL - URL based query method also ships with a MySQL adapter, allowing direct interaction between a MySQL database and any web client via structured URLs. The MySQL server and official libraries are mostly implemented in ANSI C/ANSI C++.
[http://en.wikipedia.org/wiki/MySQL]

mysql'Resource

name::
* McsEngl.mysql'Resource@cptIt,

_SPECIFIC:
* www.mysql.com
* dev.mysql.com
* http://dev.mysql.com/tech-resources/articles/mysql_intro.html,
* http://dev.mysql.com/doc/refman/5.5/en/index.html,
* tutorial: http://www.mysqltutorial.org//
* tutorial: http://www.tizag.com/mysqlTutorial/index.php,

mysql'Security

name::
* McsEngl.mysql'Security@cptIt,

_DESCRIPTION:
Security:

A privilege and password system that is very flexible and secure, and that enables host-based verification.

Password security by encryption of all password traffic when you connect to a server.
[http://dev.mysql.com/doc/refman/5.5/en/features.html]

mysql'Password

name::
* McsEngl.mysql'Password@cptIt,

_Set_password:
mysql>SET PASSWORD FOR 'root'@'localhost' = PASSWORD('secret_password');
%>mysqladmin -u root password 'secret_password'

mysql'Standard

name::
* McsEngl.mysql'Standard@cptIt,

We try to make MySQL Server follow the ANSI SQL standard and the ODBC SQL standard, but MySQL Server performs operations differently in some cases:

There are several differences between the MySQL and standard SQL privilege systems. For example, in MySQL, privileges for a table are not automatically revoked when you delete a table. You must explicitly issue a REVOKE statement to revoke privileges for a table. For more information, see Section 12.4.1.5, “REVOKE Syntax”.

The CAST() function does not support cast to REAL or BIGINT. See Section 11.10, “Cast Functions and Operators”.
[http://dev.mysql.com/doc/refman/5.5/en/differences-from-ansi.html]

mysql'Storage-engine

name::
* McsEngl.mysql'Storage-engine@cptIt,

Multiple storage engines, allowing one to choose the one that is most effective for each table in the application (in MySQL 5.0, storage engines must be compiled in; in MySQL 5.1, storage engines can be dynamically loaded at run time):
Native storage engines (MyISAM, Falcon, Merge, Memory (heap), Federated, Archive, CSV, Blackhole, Cluster, Berkeley DB, EXAMPLE, Maria, and InnoDB, which was made the default as of 5.5)
Partner-developed storage engines (solidDB, NitroEDB, Infobright (formerly Brighthouse), Kickfire, XtraDB, IBM DB2).[23] InnoDB used to be a partner-developed storage engine, but with recent acquisitions, Oracle now owns both MySQL core and InnoDB.
Community-developed storage engines (memcache engine, httpd, PBXT, Revision Engine)
Custom storage engines
[http://en.wikipedia.org/wiki/MySQL]

_SPECIFIC:

Engine  Support  Comment  Transactions  XA  Savepoints
FEDERATED  NO  Federated MySQL storage engine  NULL  NULL  NULL
MRG_MYISAM  YES  Collection of identical MyISAM tables  NO  NO  NO
MyISAM  YES  MyISAM storage engine  NO  NO  NO
BLACKHOLE  YES  /dev/null storage engine (anything you write to it...  NO  NO  NO
CSV  YES  CSV storage engine  NO  NO  NO
MEMORY  YES  Hash based, stored in memory, useful for temporary...  NO  NO  NO
ARCHIVE  YES  Archive storage engine  NO  NO  NO
InnoDB  DEFAULT  Supports transactions, row-level locking, and fore...  YES  YES  YES
PERFORMANCE_SCHEMA  YES  Performance Schema  NO  NO  NO

mysql'Table

name::
* McsEngl.mysql'Table@cptIt,

_ATTRIBUTE:
* column
* row,

mysql'table'Column

name::
* McsEngl.mysql'table'Column@cptIt,
* McsEngl.mysql'field@cptIt,

mysql'Foreign-key

name::
* McsEngl.mysql'Foreign-key@cptIt,

7.3.3. Using Foreign Keys
If a table has many columns, and you query many different combinations of columns, it might be efficient to split the less-frequently used data into separate tables with a few columns each, and relate them back to the main table by duplicating the numeric ID column from the main table. That way, each small table can have a primary key for fast lookups of its data, and you can query just the set of columns that you need using a join operation. Depending on how the data is distributed, the queries might perform less I/O and take up less cache memory because the relevant columns are packed together on disk. (To maximize performance, queries try to read as few data blocks as possible from disk; tables with only a few columns can fit more rows in each data block.)
[http://dev.mysql.com/doc/refman/5.5/en/optimizing-foreign-keys.html]

mysql'Primary-key

name::
* McsEngl.mysql'Primary-key@cptIt,

7.3.2. Using Primary Keys
The primary key for a table represents the column or set of columns that you use in your most vital queries. It has an associated index, for fast query performance. Query performance benefits from the NOT NULL optimization, because it cannot include any NULL values. With the InnoDB storage engine, the table data is physically organized to do ultra-fast lookups and sorts based on the primary key column or columns.

If your table is big and important, but does not have an obvious column or set of columns to use as a primary key, you might create a separate column with auto-increment values to use as the primary key. These unique IDs can serve as pointers to corresponding rows in other tables when you join tables using foreign keys.
[http://dev.mysql.com/doc/refman/5.5/en/optimizing-primary-keys.html]

mysql'table'Row

name::
* McsEngl.mysql'table'Row@cptIt,
* McsEngl.mysql'record@cptIt,

mysql'table'type

name::
* McsEngl.mysql'table'type@cptIt,

A database may contain tables of different types. That is, tables need not all be created with the same storage-engine#ql:mysql'storage_engine#.
[http://dev.mysql.com/doc/refman/5.5/en/storage-engine-setting.html]

mysql'User

name::
* McsEngl.mysql'User@cptIt,

mysql'user'Creating

name::
* McsEngl.mysql'user'Creating@cptIt,

mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';

mysql'user'Removing

name::
* McsEngl.mysql'user'Removing@cptIt,

DROP USER 'jeffrey'@'localhost';

FvMcs.Cmrpgm.MODELING

_CREATED: {2015-09-21}

name::
* McsEngl.conceptItsoft1221,
* McsEngl.Cmrpgm.MODELING@cptIt,
* McsEngl.FvMcs.Cmrpgm.MODELING@cptIt,
* McsEngl.modeling-program@cptItsoft1221,
* McsEngl.program.modeling@cptIt,
* McsEngl.pgmMdl@cptItsoft1221,

DEFINITION

_DESCRIPTION:
Modeling software (or modelling software in UK English) is a computer program to build simulations or other models.

Modeling software relies on a modeling language, that “ is any artificial language that can be used to express information or knowledge or systems in a structure that is defined by a consistent set of rules. The rules are used for interpretation of the meaning of components in the structure. A modeling language can be graphical or textual.” [1]

Modeling languages can be used by instructional designers/technologists or even teachers to produce teaching materials (e.g. simulations). Learners also can be engaged into modeling activities.
[http://edutechwiki.unige.ch/en/Modeling_software]

pgmMdl'model#cptCore493#

name::
* McsEngl.pgmMdl'model@cptIt,

pgmMdl'meleling-language#cptCore493.5#

name::
* McsEngl.pgmMdl'meleling-language@cptIt,

SPECIFIC

name::
* McsEngl.pgmMdl.specific@cptIt,

_SPECIFIC:
* NetLogo#cptItsoft1221.1#
* Wolfram-SystemModeler#cptItsoft1221.2#

pgmMdl.NetLogo

_CREATED: {2015-09-21}

name::
* McsEngl.pgmMdl.NetLogo@cptIt,
* McsEngl.conceptItsoft1221.1,
* McsEngl.NetLogo@cptItsoft,
* McsEngl.pgmNlg@cptItsoft1221.1,

_DESCRIPTION:
NetLogo is a programmable modeling environment for simulating natural and social phenomena. It was authored by Uri Wilensky in 1999 and has been in continuous development ever since at the Center for Connected Learning and Computer-Based Modeling.

NetLogo is particularly well suited for modeling complex systems developing over time. Modelers can give instructions to hundreds or thousands of "agents" all operating independently. This makes it possible to explore the connection between the micro-level behavior of individuals and the macro-level patterns that emerge from their interaction.

NetLogo lets students open simulations and "play" with them, exploring their behavior under various conditions. It is also an authoring environment which enables students, teachers and curriculum developers to create their own models. NetLogo is simple enough for students and teachers, yet advanced enough to serve as a powerful tool for researchers in many fields.

NetLogo has extensive documentation and tutorials. It also comes with the Models Library, a large collection of pre-written simulations that can be used and modified. These simulations address content areas in the natural and social sciences including biology and medicine, physics and chemistry, mathematics and computer science, and economics and social psychology. Several model-based inquiry curricula using NetLogo are available and more are under development.

NetLogo can also power a classroom participatory-simulation tool called HubNet. Through the use of networked computers or handheld devices such as Texas Instruments graphing calculators, each student can control an agent in a simulation. Follow this link for more information.

NetLogo is the next generation of the series of multi-agent modeling languages including StarLogo and StarLogoT. NetLogo runs on the Java virtual machine, so it works on all major platforms (Mac, Windows, Linux, et al). It is run as a desktop application. Command line operation is also supported.
[http://ccl.northwestern.edu/netlogo/docs/]

pgmNlg'resourse

name::
* McsEngl.pgmNlg'resourse@cptIt,

_ADDRESS.WPG:
* http://ccl.northwestern.edu/netlogo/index.shtml,
* http://ccl.northwestern.edu/netlogo/docs/

pgmMdl.Wolfram-SystemModeler

name::
* McsEngl.pgmMdl.Wolfram-SystemModeler@cptIt,
* McsEngl.conceptItsoft1221.2,
* McsEngl.systemModeler@cptCore493i, {2012-05-23}

_ADDRESS.WPG:
* http://www.wolfram.com/system-modeler//

_DESCRIPTION:
Announcing Wolfram SystemModeler
May 23, 2012 — Stephen Wolfram
1 CommentShareThis208 180 27
Today I’m excited to be able to announce that our company is moving into yet another new area: large-scale system modeling. Last year, I wrote about our plans to initiate a new generation of large-scale system modeling. Now we are taking a major step in that direction with the release of Wolfram SystemModeler.
SystemModeler is a very general environment that handles modeling of systems with mechanical, electrical, thermal, chemical, biological, and other components, as well as combinations of different types of components. It’s based—like Mathematica—on the very general idea of representing everything in symbolic form.
In SystemModeler, a system is built from a hierarchy of connected components—often assembled interactively using SystemModeler's drag-and-drop interface. Internally, what SystemModeler does is to derive from its symbolic system description a large collection of differential-algebraic and other equations and event specifications—which it then solves using powerful built-in hybrid symbolic-numeric methods. The result of this is a fully computable representation of the system—that mirrors what an actual physical version of the system would do, but allows instant visualization, simulation, analysis, or whatever.
Here’s an example of SystemModeler in action—with a 2,685-equation dynamic model of an airplane being used to analyze the control loop for continuous descent landings:

There’s a long and tangled history of products that do various kinds of system modeling. The exciting thing about SystemModeler is that from its very foundations, it takes a new approach that dramatically unifies and generalizes what’s possible. In the past, products tended either to be specific to a particular application domain (like electric circuits or hydraulics), or were based on rigid low-level component models such as procedural blocks.
What SystemModeler does is to use a fully symbolic representation of everything, which immediately allows both arbitrary domains to be covered, and much more flexible models for components to be used. In the past, little could have been done with such a general representation. But the major breakthrough is that by using a new generation of hybrid symbolic-numeric methods, SystemModeler is capable of successfully solving for the behavior of even very large-scale such systems.
When one starts SystemModeler, there’s immediately a library of thousands of standard components—sensors, actuators, gears, resistors, joints, heaters, and so on. And one of the key features of SystemModeler is that it uses the new standard Modelica language for system specifications—so one can immediately make use of model libraries from component manufacturers and others.

SystemModeler is set up to automate many kinds of system modeling work. Once one’s got a system specified, SystemModeler can simulate any aspect of the behavior of the system, producing visualizations and 3D animations. It can also synthesize a report in the form of an interactive website—or generate a computable model of the system as a standalone executable.
These capabilities alone would make SystemModeler an extremely useful and important new product, for a whole range of industries from aerospace to automotive, marine, consumer, manufacturing, and beyond.
But there’s more. Remember that we have Mathematica too. And SystemModeler integrates directly with Mathematica—bringing in our whole 25-year Mathematica technology stack.
This makes possible many spectacular things. Just like Mathematica can operate on data or images or programs, so now it can also operate on computable models from SystemModeler. This means that it takes just a line or two of Mathematica code to do a parameter sweep, or a sensitivity analysis, or a sophisticated optimization on a model from SystemModeler.
And one gets all of the interface features of Mathematica—being able to do visualizations, instantly introduce interactive controls, or produce computable CDF documents as reports.
But even more than this, one gets to use all of the algorithms and analysis capabilities of Mathematica. So it becomes straightforward to take a model, and do statistical analysis on it, build a control system for it, or export results in any of the formats Mathematica supports.
When one builds models, it’s often important to bring in real-world data, say material properties or real-time weather or cost information. And through its direct link to Wolfram|Alpha—as well as its custom data import capabilities—Mathematica can supply these to SystemModeler.
To me, it’s very satisfying seeing all these parts of our technology portfolio working together. And this is just the beginning. As I discussed in my post last year, it’s going to be possible to integrate system modeling not only with Mathematica, but also at a deep level with Wolfram|Alpha and such things as our mobile apps.
But today, it’s exciting to me to launch Wolfram SystemModeler as a major new direction for our company. Mathematica allows us to represent a vast range of formal and algorithmic systems; SystemModeler extends our reach to large-scale practical engineering and other systems. We already know some of the important things that this will make possible. But I’m sure there will be many wonderful surprises to come in the years ahead, as we gradually realize just what the power of symbolic systems modeling really is.
[http://blog.wolfram.com/2012/05/23/announcing-wolfram-systemmodeler/]

FvMcs.Cmrpgm.ROTKI (appRotki)

_CREATED: {2020-04-30}

name::
* McsEngl.conceptIt1018,
* McsEngl.Cmrpgm.ROTKI (appRotki)@cptIt,
* McsEngl.FvMcs.Cmrpgm.ROTKI (appRotki)@cptIt,
* McsEngl.Cmrpgm.Rotki@cptIt,
* McsEngl.appRotki@cptIt,
* McsEngl.pgmRotki@cptIt,

DEFINITION

_DESCRIPTION:
Rotki is an opensource portfolio tracking, analytics, and tax reporting application that respects your privacy. It is focused on Crypto assets but will also slowly facilitate tracking of more traditional assets.
[https://rotki.readthedocs.io/en/latest/faq.html#what-is-rotki]

appRotki'documentation

name::
* McsEngl.appRotki'documentation@cptIt,

_ADDRESSWPG:
* user-guide: https://rotki.readthedocs.io/en/latest/usage_guide.html,

FvMcs.sector.ONLINE-INFORMATION-SERVICES

name::
* McsEngl.conceptIt7,
* McsEngl.sector.ONLINE-INFORMATION-SERVICES@cptIt,
* McsEngl.FvMcs.sector.ONLINE-INFORMATION-SERVICES@cptIt,
* McsEngl.online-information-services-industry/sector@cptIt,
* McsEngl.online-information-services-industry@cptIt,
* McsEngl.online-information-services-sector@cptIt,
* McsEngl.online-ΒΙΟΜΗΧΑΝΙΑ-ΠΛΗΡΟΦΟΡΗΣΗΣ@cptIt,
* McsEngl.sector.OnlineInformationServices@cptIt7,

DEFINITION

INFORMATION SERVICES INDUSTRY, ΕΙΝΑΙ Ο "ΤΟΜΕΑΣ ΠΑΡΑΓΩΓΗΣ" ΥΠΗΡΕΣΙΩΝ ΠΛΗΡΟΦΟΡΙΑΣ. ΟΜΩΣ ΚΥΡΙΩΣ ΕΔΩ ΜΑΣ ΕΝΔΙΑΦΕΡΕΙ ΑΥΤΟΣ ΠΟΥ ΠΑΡΕΧΕΙ ΑΥΤΕΣ ΤΙΣ ΠΛΗΡΟΦΟΡΙΕΣ ΜΕ ΗΛΕΚΤΡΟΝΙΚΟ ΤΡΟΠΟ, ONLINE.
[NIKOS, DEC 1993]

ATTRIBUTES


BBS#cptIt371: attPar#
ONLINE-SYSTEMS#cptIt372: attPar#

SERVICES:
 ELECTRONIC MAIL,
 ELECTRONIC'PERIODICAL, ONLINE
 electronic'NEWSLETTER, ONLINE
 Electronic'Newspaper,-online#cptIt23: attPar#
 DATABASES,-online#cptIt195: attPar#
 FILE TRANSFER,
 ΤΡΑΠΕΖΙΚΕΣ'ΣΥΝΑΛΛΑΓΕΣ,-online#cptIt303: attPar#
 ΥΠΗΡΕΣΙΕΣ ΔΙΚΤΥΩΝ:
   ΒΕΤΕΧ
   BIMCOM
   INFONET
   MCI-MAIL

ΟΤΕ:
 ΤΗΛΕΠΙΚΟΙΝΩΝΙΑΚΑ ΠΑΡΚΑ
 DAS
 HELLASCOM
 HELLASPAC
 HELLASTEL
 VIDEOCONFERENCE

ΟΤΕ

DAS: Ηλεκτρονικο δικτυο παροχης πληροφοριων καταλογου. ΟΤΕ. Θα λειτουργησει μεσα στο 1992.

HELLASTEL, ΤΟ ΕΛΛΗΝΙΚΟ ΔΙΚΤΥΟ VIDEOTEX. Θα λειτουργησει μεσα στο 1992.

SPECIFIC

Specific_concepts (level 3) =

GREEK INFORMATION SERVICES INDUSTRY,

USA INFORMATION SERVICES INDUSTRY,

WORLD INFORMATION SERVICES INDUSTRY,

CONCULTING
ΑΝΤΑΛΛΑΓΕΣ, ΕΤΑΙΡΙΕΣ ΠΟΥ ΚΑΝΟΥΝ ΑΝΤΑΛΛΑΓΕΣ ΣΥΣΤΗΜΑΤΩΝ,
ΕΠΙΣΚΕΥΕΣ, ΕΤΑΙΡΙΕΣ ΠΟΥ ΚΑΝΟΥΝ ΕΠΙΣΚΕΥΕΣ ΣΥΣΤΗΜΑΤΩΝ

FvMcs.diseaseHmn.INFO-TECH

name::
* McsEngl.conceptIt15,
* McsEngl.diseaseHmn.INFO-TECH@cptIt,
* McsEngl.FvMcs.diseaseHmn.INFO-TECH@cptIt,
* McsEngl.defect.human-from-it@cptIt15,
* McsEngl.info-tech-DEFECT@cptIt,
* McsEngl.health-and-computer@cptIt,
* McsElln.ΥΓΕΙΑ-ΚΑΙ-ΚΟΜΠΙΟΥΤΕΡ@cptIt,

DEFINITION

ΠΑΘΗΣΗ ΠΤ είναι κάθε ΠΑΘΗΣΗ που προκαλείται στον άνθρωπο απο 'πληροφοριακή τεχνολογια'
[hmnSngo.1995-05]

GENERIC

_GENERIC:
* entity.model.information.evaluation.problem.disease.animal.human#cptHBody007#

WHOLE

_WHOLE:
* techData#cptItsoft0#

RSI

REPETITIVE STRESS INJURIES: ΠΛΗΤΟΥΝ ΟΛΟ ΚΑΙ ΜΕΓΑΛΥΤΕΡΟ ΑΡΙΘΜΟ ΕΡΓΑΖΟΜΕΝΩΝ ΣΕ Η/Υ ΚΑΙ ΓΡΑΦΟΜΗΧΑΝΕΣ.

ΔΑΚΤΥΛΑ

ΕΛΑΦΡΩΣ ΚΥΡΤΩΜΕΝΑ.

ΕΝΤΑΣΗ

ΠΡΟΚΑΛΕΙ ΜΕΙΩΣΗ ΤΗΣ ΚΥΚΛΟΦΟΡΙΑΣ ΤΟΥ ΑΙΜΑΤΟΣ ΣΤΟΥΣ ΜΥΣ ΚΑΙ ΤΟΥΣ ΤΕΝΟΝΤΕΣ ΠΟΥ ΕΡΓΑΖΟΝΤΑΙ ΑΣΤΑΜΑΤΗΤΑ. ΕΤΣΙ ΧΩΡΙΣ ΕΠΑΡΚΕΣ ΟΞΥΓΟΝΟ ΟΙ ΙΣΤΟΙ ΚΑΤΑΠΟΝΟΥΝΤΑΙ ΕΠΙΠΛΕΟΝ.

ΚΑΡΕΚΛΑ

ΜΕ ΚΛΙΣΗ ΕΛΑΦΡΩΣ ΠΡΟΣ ΤΑ ΕΜΠΡΟΣ ΓΙΑ ΝΑ ΔΙΕΥΚΟΛΥΝΘΕΙ Η ΣΩΣΤΗ ΣΤΑΣΗ ΤΩΝ ΓΟΝΑΤΩΝ.

ΚΑΡΠΟΙ

ΧΑΛΑΡΟΙ ΣΕ ΟΡΙΖΟΝΤΙΑ ΘΕΣΗ ΧΩΡΙΣ ΝΑ ΚΑΜΠΤΟΝΤΑΙ ΠΡΟΣ ΤΑ ΠΑΝΩ Η ΠΡΟΣ ΤΑ ΚΑΤΩ.

ΜΑΤΙΑ

ΙΑΠΩΝΕΣ ΕΡΕΥΝΗΤΕΣ ΠΡΟΤΕΙΝΟΥΝ
α) ΝΑ ΤΟΠΟΘΕΤΕΙΤΑΙ Η ΟΘΟΝΗ ΧΑΜΗΛΟΤΕΡΑ ΩΣΤΕ ΝΑ ΑΝΟΙΓΟΥΝ ΤΑ ΜΑΤΙΑ ΛΙΓΟΤΕΡΟ ΚΑΙ
β) ΕΙΔΙΚΑ ΦΑΡΜΑΚΑ ΠΟΥ ΔΙΑΤΗΡΟΥΝ ΤΗΝ ΥΓΡΑΣΙΑ ΤΩΝ ΜΑΤΙΩΝ ΕΠΕΙΔΗ ΑΝΟΙΓΟΚΛΕΙΝΟΥΝ ΛΙΓΟ.
[ΚΑΘΗΜΕΡΙΝΗ, 7 ΜΑΡΤ 1993, 44]

ΟΘΟΝΗ

ΣΤΟ ΥΨΟΣ ΤΩΝ ΜΑΤΙΩΝ Η ΛΙΓΟ ΧΑΜΗΛΟΤΕΡΑ.

FvMcs.ABBREVIATION

name::
* McsEngl.conceptIt16,
* McsEngl.ABBREVIATION@cptIt,
* McsEngl.FvMcs.ABBREVIATION@cptIt,
* McsEngl.Info-Tech-abbreviation@cptIt,
* McsEngl.abbreviation.InfoTech@cptIt16,

SPECIFIC

TYPES: Communication(COM), COMPANY, HARDWARE, PROTOCOL,

ΑPI: Application Program Interface.


CMIP: Common Management Information Protocol, ISO.

DDE: Dynamic Data Exchange
DQDB: Distribution Queue Dual Bus.
DVI: Digital Video Interactive.

EBCDIC: Extended Binary Coded Decimal Interchange Code, IBM mainframe alphabet
ECMA: European Computer Manufacturers' Association.
EMS: Expanded Memory.

FCC: Federal Communications Commission.

GDI: Graphics Device Interface.

HMA: High Memory Area.

IDE: Integrated Drive Electronics, hard disks connection.
IPX/SPX: Internet Packet Echange/Sequenced Packet Exchange. Novell transport
IRQ: Interrupt Request.

MAC: Media Access Control
MCI: Media Control Interface
MHS: Message Handling Service. Novell

NACS: NetWare Asynchronous Communications Server.
NSF: National Science Foundation.

OEM:

PDN: Public Data Networks. COM
PPP: Point to Point Protocol. COM
PPSDN: Public Packet Switched Data Networks. COM
PSTN: Public Switched Telephone Network. COM

SIG: Special Interest Group
SNMP: Simple Network Management Protocol.

TTS: Transaction Tracking System.

UPS: Uniterruptible Power Sypply
UUCP: Unix to Unix copy. Unix networking system.

VAR: Value Added Resellers.
VSAT: Very Small Aperture Terminal. Satellite

WYSIWYG: (Wuisiwig) What Yoy See Is What Yoy Get

FvMcs.METEOR BURST CHANNEL

name::
* McsEngl.conceptIt30,
* McsEngl.METEOR BURST CHANNEL@cptIt,
* McsEngl.FvMcs.METEOR BURST CHANNEL@cptIt,
* McsElln.οκ@cptIt,
* McsEngl.meteor-burst-channel@cptIt,
* McsEngl.MeteorBurst'channel@cptIt30,

APPLICATION#cptIt97#

- ΔΙΑΣΠΑΡΤΟΙ ΜΕΤΕΩΡΟΛΟΓΙΚΟΙ ΣΤΑΘΜΟΙ
- ΔΥΣΠΡΟΣΗΤΕΣ ΠΕΡΙΟΧΕΣ.

Distance#cptCore978.4#

2000 ΚΜ ΜΑΞΙΜΟΥΜ.

FREQUENCY#cptCore1013: attPar#

40-50 MHz.

TRANSFER-RATE#cptIt498#

2400/4800 bps.

FvMcs.SOFTWARE PIRACY

name::
* McsEngl.conceptIt32,
* McsEngl.SOFTWARE PIRACY@cptIt,
* McsEngl.FvMcs.SOFTWARE PIRACY@cptIt,
* McsEngl.program-piracy@cptIt,
* McsEngl.program'piracy@cptIt32,
* McsEngl.software-piracy@cptIt,
* McsElln.ΠΕΙΡΑΤΕΙΑ-ΠΡΟΓΡΑΜΑΤΩΝ@cptIt,

measure#cptCore88#

H πειρατεία του software είναι μια πληγή για τους κατασκευαστές προγραμμάτων, υπαρκτή σε όλα τα μήκη και τα πλάτη της γής.
[COMPUTER GO, MART 1994, 66]

ΕΛΛΗΝΙΚΗ ΝΟΜΟΘΕΣΙΑ ΚΑΤΑ ΠΕΙΡΑΤΕΙΑΣ

ΝΟΜΟΣ 2121/93 για την "ΠΝΕΥΜΑΤΙΚΗ ΙΔΙΟΚΤΗΣΙΑ ΚΑΙ ΤΑ ΣΥΓΓΕΝΙΚΑ ΔΙΚΑΙΩΜΑΤΑ" που άρχισε να ισχύει απο 4 ΜΑΡΤΙΟΥ 1993.
Υλοποιεί την 250/91 οδηγία της ΕΟΚ.
[COMPUTER GO, MART 1994, 68]

ΕΤΑΙΡΙΕΣ ΠΟΥ ΚΑΤΑΠΟΛΕΜΟΥΝ ΤΗΝ ΠΕΙΡΑΤΕΙΑ

BSA/BUSINESS SOFTWARE ALLIANCE:
Καταπολεμά την πειρατεία σε 50 χώρες.
ΜΕΛΗ: Adobe, Apple, Autodesk, Central Point, Lotus, Microsoft, Novell, SCO, Symantec, Wordperfect.
[COMPUTER GO, MART 1994, 66]

FSA greece/ΕΛΛΑΣ:
ΙΔΡΥΣΗ: 1992.
ΜΕΛΗ: Aco Hellas, Byte Computer Applications, M-Data, Πουλιαδης & Συνεργατες ΑΕ.
[COMPUTER GO, MART 1994, 66]

FvMcs.MULTIPLEXER

name::
* McsEngl.conceptIt36,
* McsEngl.MULTIPLEXER@cptIt,
* McsEngl.FvMcs.MULTIPLEXER@cptIt,
* McsEngl.multiplexer@cptIt36,
* McsElln.ΠΟΛΥΠΛΕΚΤΗΣ@cptIt,

DEFINITION

ΠΟΛΥΠΛΕΞΗ ΟΝΟΜΑΖΕΤΑΙ Η ΤΕΧΝΙΚΗ ΚΑΤΑ ΤΗΝ ΟΠΟΙΑ ΔΕΔΟΜΕΝΑ ΑΠΟ ΠΟΛΛΟΥΣ ΧΡΗΣΤΕΣ ΣΥΝΤΙΘΕΝΤΑΙ ΣΕ ΕΝΑ ΦΥΣΙΚΟ ΚΑΝΑΛΙ ΜΕΤΑΔΟΣΗΣ.

SPECIFIC

Specific_concepts (level 3) =

TIME DEVISION MULTIPLEXING.

FvMcs.AUDIO-HARDWARE

name::
* McsEngl.conceptIt40,
* McsEngl.AUDIO-HARDWARE@cptIt,
* McsEngl.FvMcs.AUDIO-HARDWARE@cptIt,
* McsEngl.audio'hardware@cptIt40,
* McsEngl.hardware.audio@cptIt40,
* McsEngl.audio/sound-hardware@cptIt,
* McsElln.ΗΧΟΥ-ΥΛΙΚΟ@cptIt,

PORT


* midi-port#cptIt158: attSpe#
* ANALOG: miniJack
* DIGITAL: miniJack, RCA, optical.

ENVIRONMENT#cptCore756#

SPECIFIC'COMPLEMENT

name::
* McsEngl.SPECIFIC'COMPLEMENT@cptIt,

AUDIO-SOFTWARE#cptIt476#

SPECIFIC

AUDIO-CARD#cptIt977: attSpe#

VOICE SYNTHESIZERS

MIDI specification:
Synthesized sound is usually catered-for /ΥΠΟΣΤΗΡΙΖΕΤΑΙ by the MIDI specification. This defines a serial link and commands that allow a computer to control a compatible musical instrument.

ΤΑ ΜΟΥΣΙΚΑ ΟΡΓΑΝΑ ΠΟΥ ΕΦΑΡΜΟΖΟΥΝ ΤΟ MIDI, ΣΥΣΤΗΜΑ ΠΑΡΑΓΩΓΗΣ ΗΧΩΝ ΜΕ ΕΙΔΙΚΟ INTERFACE, ΞΕΚΙΝΗΣΑΝ ΝΑ ΓΙΝΟΝΤΑΙ ΓΝΩΣΤΑ ΜΕ ΤΟ ΟΝΟΜΑ ΣΥΝΘΕΤΗΤΕΣ- SYNTHESIZERS.

FM SYNTHESIZERS:
ΚΥΚΛΩΜΑΤΑ ΠΟΥ ΠΑΡΑΓΟΥΝ, ΑΝΑΛΟΓΑ ΜΕ ΔΕΔΟΜΕΝΑ ΠΟΥ ΕΧΟΥΝ, ΔΙΑΦΟΡΕΣ ΣΥΧΝΟΤΗΤΕΣ ΠΟΥ ΣΥΝΘΕΤΟΥΝ ΤΟΥΣ ΕΠΙΘΥΜΗΤΟΥΣ ΗΧΟΥΣ.

CHIPS:
ADSP 2115 20MHz:
OPL 2:
OPL 3: ενα τετοιο τσιπ.
YM 3812FM:
YMF 262: chip of Yamaha που συνθετει ήχους.

WAVE TABLE: SYTHESIZERS ΦΥΣΙΚΩΝ ΗΧΩΝ:
ΟΙ ΗΧΟΙ ΕΙΝΑΙ ΑΠΟΘΗΚΕΥΜΕΝΟΙ ΚΑΙ ΤΟ ΚΥΚΛΩΜΑ ΑΝΑΠΑΡΑΓΕΙ ΤΑ ΑΠΟΘΗΚΕΥΜΕΝΑ ΔΕΙΓΜΑΤΑ ΜΕΤΑΒΑΛΛΟΝΤΑΣ ΠΑΡΑΜΕΤΡΟΥΣ ΤΩΝ ΚΑΙ Ο ΗΧΟΣ ΑΚΟΥΓΕΤΑΙ ΦΥΣΙΚΟΣ.

EQUALIZER

ΕΝΙΣΧΥΤΕΣ

ΚΑΛΩΔΙΑ

MINI JACK:
Ενα βίσμα και για τα δύο ηχεία.

RCA:
Ξεχωριστό για κάθε ηχείο.

ΜΕΙΚΤΕΣ

ΑΝΕΞΑΡΤΗΤΕΣ ΣΥΣΚΕΥΕΣ ΗΧΟΥ

ΚΑΣΣΕΤΟΦΩΝΑ:

CD PLAYERS:

MINIDISK/MD:
ΠΡΩΤΟΕΜΦΑΝΙΣΗ: 1992.
Είναι προιον της Sony, προσπαθεί να αντικαταστήσει τις παραδοσιακές δισκέτες με οπτικούς δίσκους εγγράψιμους.
Σύντομα θα κυκλοφορήσει και η μορφή MD DATA για συνδεση με υπολογιστες. Μαιος 1994.

FvMcs.VIDEOCAMERA

name::
* McsEngl.conceptIt41,
* McsEngl.camcorder@cptIt41,
* McsEngl.VIDEOCAMERA@cptIt,
* McsEngl.videocamera@cptIt41,
* McsEngl.myCamcorderSonyUX19e@cptIt41i,
* McsEngl.mySony-ux19e@cptIt41i,
* McsEngl.myCamcorderSony-trv12e@cptIt41i,
* McsEngl.mySony-trv12e@cptIt41i,

ΤΙΜΗ:
ΒΑΡΟΣ:
ΕΙΚΟΝΑ ΣΕ ΕΙΚΑΝΑ (ΔΥΟ ΕΙΚΟΝΕΣ ΜΑΖΙ):
ΖΟΟΜ:
ΦΩΤΙΣΜΟΣ ΕΓΓΡΑΦΗΣ:
ΠΕΡΙΣΤΡΕΦΟΜΕΝΗ ΚΕΦΑΛΗ:
ΗΛΕΚΤΡΙΚΗ ΤΡΟΦΟΔΟΣΙΑ:

SPECIFIC

Specific_concepts (level 3) =

FULL_HD

Sony HDR - UX19E (AVCHD)
Τιμή (με ΦΠΑ):  919,00 € (36 x 28,85 €)
Αρχική τιμή:  941,18 €
Κερδίζετε:  22,18 €
Κατασκευαστής: Sony
Πρώτη Κυκλοφορία: Φεβρουάριος 2008
Εγγύηση: 12 Μήνες
Περιγραφή
Καλύτερη ποιότητα εικόνας από κάθε άλλη φορά, με βίντεο Full HD 1920x1080 και φωτογραφίες 4 megapixel. Εξελιγμένη τεχνολογία απεικόνισης με ανίχνευση προσώπου και εύχρηστες δυνατότητες. Εγγραφή HD έως 3 ωρών, στην εσωτερική μνήμη 8 GB, εγγραφή σε DVD 8 cm για εύκολο μοίρασμα και αρχειοθέτηση (HYBRID Plus) και σε Memory Stick.
Τεχνικά και Λοιπά Χαρακτηριστικά    
Αποθηκευτικό μέσο: DVD 8cm, Memory Stick
Ήχος: Dolby Digital 5.1
Φακός: f/1,8-2,6
Zoom: Οπτικό 15x, Ψηφιακό 180x
Σκόπευτρο: Υβριδική οθόνη LCD 2,7 ιντσών
Είσοδοι-Έξοδοι: Έξοδος ήχου, video, Svideo, USB, HDMI
Εξοπλισμός-Συνοδευτικά: Τροφοδοτικό AC-L200, Σετ επαναφορτιζόμενων μπαταριών NP-FH60, Καλώδιο AV, Καλώδιο USB.
Διαστάσεις (ΠxΥxB): 58 x 93 x 134 mm
Βάρος: 0,470 Kg
[http://www.shop21.gr//product/product.hel.asp?pfid=27770&prid=28506]

Sony HDR - SR10E (AVCHD)
Τιμή (με ΦΠΑ):  909,00 € (36 x 28,53 €)
Αρχική τιμή:  919,00 €
Κερδίζετε:  10,00 €
Διαθεσιμότητα: Εβδομάδας. Συνήθως αποστέλλεται σε τέσσερις έως επτά ημέρες
Κατασκευαστής: Sony
Πρώτη Κυκλοφορία: Μάρτιος 2008
Εγγύηση: 12 Μήνες
Περιγραφή
Καλύτερη ποιότητα εικόνας από κάθε άλλη φορά, με βίντεο Full HD 1920x1080 και φωτογραφίες έως 4 megapixel. Στη μονάδα σκληρού δίσκου 40 GB εγγράφονται έως 15 ώρες βίντεο. Ανίχνευση προσώπου για πανέμορφες φωτογραφίες αυτόματα και εύχρηστες δυνατότητες για λήψη και μοίρασμα.
[http://www.shop21.gr//product/product.hel.asp?pfid=27805&prid=28545]
2008-04-16

Sony HDR - CX6EK (AVCHD)
Τιμή (με ΦΠΑ):  999,00 € (36 x 31,36 €)
Αρχική τιμή:  1.350,00 €
Κερδίζετε:  351,00 €
Διαθεσιμότητα: Αμεση. Συνήθως αποστέλλεται σε 2-3 ημέρες.
Κατασκευαστής: Sony
Πρώτη Κυκλοφορία: Ιούλιος 2007
Εγγύηση: 12 Μήνες
Περιγραφή
Η μικρότερη και ελαφρύτερη βιντεοκάμερα 1080i HD στον κόσμο (σύμφωνα με έρευνα της Sony, τον Απρίλιο 2007) με αισθητήρα ClearVid CMOS, τεχνολογία x.v.Colour και φακό Carl Zeiss- Vario-Sonnar T*, μικτός αριθμός Pixel 3200. Εγγράφει ταινίες AVCHD διάρκειας 2 ωρών και 55 λεπτών (με 8GB) σε αφαιρούμενο μέσο Memory Stick. Εγγραφή στατικής εικόνας 6,1 Megapixel και διπλή εγγραφή 4,3 Megapixel ενώ εγγράφετε ταινία.

Και μην ξεχνάτε, για να απολαύσετε τα βίντεό σας στην Full HD τηλεόραση σας, απαραίτητη προυπόθεση είναι να έχετε καλώδιο HDMI σε MiniHDMI, δείτε το Sony Sony VMC-15MHD
[http://www.shop21.gr//product/product.hel.asp?pfid=26657&prid=27283] 2008-04-16

DIGITAL

AVID-IKEGAMI:
ΑΠΡ. 1995 παρουσίασαν την πρώτη ΕΠΑΓΓΕΛΜΑΤΙΚΗ κάμερα που γράφει σε σκληρό δισκο υπολογιστών 2,5 ιντσων 15-20 λεπτά εικόνας.
[ΚΑΘΗΜΕΡΙΝΗ, 30 ΑΠΡ. 1995, 51]

SHARP

SHARP:
 VL-MX7(GY): 379.000 DRX(1993)
 VL-M4S: 279.000 DRX(1993)

VL-M4S ΒΑΡΟΣ 670 ΓΡ, 8 ZOOM, ΚΑΣΕΤΑ 8mm, ΕΥΑΙΣΘΗΣΙΑ 3 LUX, FLASH, FADE IN-OUT, ΔΥΟ ΤΑΧΥΤΗΤΕΣ, DIGITAL AUTO FOCUS, ΔΙΑΦΡΑΓΜΑ 6 ΤΑΧ.

SONY

 240.000 ΔΡΧ
 210.000 ΔΡΧ

sony handycam TR 303, 590 gr, 2 lux, 3,5 hours recorded.

FvMcs.ΗΛΕΚΤΡΩΝΙΚΟ ΦΑΚΕΛΩΜΑ

name::
* McsEngl.conceptIt45,
* McsElln.ΗΛΕΚΤΡΟΝΙΚΟ ΦΑΚΕΛΩΜΑ@cptIt,

{time.1985}:
1985 συγκροτίθηκε επιτροπή πανεπιστημιακών για την καταρτιση σχεδίου για την προστασία του ατομου απο την πληροφορική. Το σχεδιο εγκριθηκε απο αντιστοιχη επιτροπη του Συμβουλίου της Ευρώπης σε ημερίδα στο Ζαππειο το 1988 ΑΛΛΑ ποτε δεν έγινε νόμος.

FvMcs.LEXIS: online database

name::
* McsEngl.conceptIt47,
* McsEngl.LEXIS online database@cptIt,
* McsEngl.lexis@cptIt47,

DEFINITION

LEXIS είναι αγγλική online βάση δεδομένων, ΝΟΜΙΚΟΥ ΠΕΡΙΕΧΟΜΕΝΟΥ. Περιέχει χιλιάδες εκθέσεις δικαστικών υποθέσεων από ΟΛΟ ΤΟΝ ΚΟΣΜΟ, αλλά είναι πολύ δυνατή κυρίως στις αγγλικές, τις γαλλικές και τις αμερικανικές υποθέσεις. Μάλιστα στην Αμερική, η Lexis και ο ανταγωνιστής της, η Westlaw, έχουν κατά πολύ μεγάλο βαθμό ορίσει ένα σημαντικό μέρος από το πώς εξασκείται το δικηγορικό επάγγελμα.
[TELECOM (CGO), APR 1994, 11]

FvMcs.sysSoftware.WEB

_CREATED: {2012-01-22}

name::
* McsEngl.conceptIt52,
* McsEngl.appWeb@cptIt52, {2012-01-22}
* McsEngl.system.software.web@cptIt52, {2012-05-05}

<appWeb'GENERIC

_GENERIC:
* software-application#cptItsoft490#

appWeb'ContentcptIt97##

name::
* McsEngl.appWeb'ContentcptIt97@cptIt,

appWeb'ProgramcptIt580##

name::
* McsEngl.appWeb'ProgramcptIt580@cptIt,

appWeb.SPECIFIC

name::
* McsEngl.appWeb.SPECIFIC@cptIt,

FvMcs.device.PRINTER

name::
* McsEngl.conceptIt61,
* McsEngl.device.PRINTER@cptIt,
* McsEngl.FvMcs.device.PRINTER@cptIt,
* McsEngl.PRINTER@cptIt,
====== lagoGreek:
* McsElln.ΕΚΤΥΠΩΤΗΣ@cptIt,

printer'ATTRIBUTES

name::
* McsEngl.printer'ATTRIBUTES@cptIt,


ΘΟΡΥΒΟΣ: 40 dB Canon BJC 600,
ΤΡΟΦΟΔΟΤΗΣ ADF
ΜΟΝΤΕΛΟ:
ΚΑΤΑΣΚΕΥΑΣΤΗΣ:
ΠΡΟΕΛΕΥΣΗ:
ΔΙΑΣΤΑΣΕΙΣ:
ΒΑΡΟΣ:
ΕΓΧΡΩΜΗ ΕΚΤΥΠΩΣΗ:
ΜΕΓΙΣΤΗ ΑΝΑΛΥΣΗ:
ΜΕΓΙΣΤΟΣ ΑΡΙΘΜΟΣ ΣΤΗΛΩΝ:
EMULATIONS:
ΕΝΣΩΜΑΤΩΜΕΝΑ FONTS:
ΜΕΘΟΔΟΣ ΕΚΤΥΠΩΣΗΣ:
ΑΡΙΘΜΟΣ ΑΚΡΟΦΥΣΙΩΝ ΚΕΦΑΛΗΣ:
ΜΕΓΕΘΟΣ ΜΠΑΦΕΡ:
ΠΑΡΑΛΛΗΛΗ ΘΥΡΑ ΕΠΙΚΟΙΝΩΝΙΑΣ:
ΣΕΙΡΙΑΚΗ ΘΥΡΑ ΕΠΙΚΟΙΝΩΝΙΑΣ:
ΥΠΟΔΟΧΕΣ ΓΙΑ CARTRIDGE:
MTBF:
ΔΙΑΡΚΕΙΑ ΖΩΗΣ ΚΕΦΑΛΗΣ:
ΤΡΟΦΟΔΟΣΙΑ:
ΑΝΤΙΠΡΟΣΩΠΟΣ:
COMPANIES

printer'IO FEATURES

name::
* McsEngl.printer'IO FEATURES@cptIt,

parallel port,
ethernet connection by BNC, UTP OR AUI connectors,
serial port (RS-232)

printer'LANGUAGE

name::
* McsEngl.printer'LANGUAGE@cptIt,

LANGUAGE SWITCHING

Η δυνατότητα να 'καταλαβαίνει' αυτόματα τη γλώσσα του αρχείου που δέχεται χωρίς παρέμβαση του χρήστη.
[ΚΟΜΠΙΟΥΤΕΡ ΓΟ, ΣΕΠΤ.1996, 176]

PCL

H PCL είναι μια 'γλώσσα' εκτύπωσης που υποστηρίζεται τώρα πια από όλους τους επαγγελματικούς εκτυπωτές. Η τελευταία έκδοση αυτής είναι η PCL6, η οποία προσφέρει ταχύτερες εκτυπώσεις, ενσωματωμένες intellifont and truetype τεχνολογίες γραμματοσειρών, ενσωματωμένα HP-GL/2 διανυσματικά γραφικά και αναβαθμισμένες δυνατότητες γραφικών.
[ΚΟΜΠΙΟΥΤΕΡ ΓΟ, ΣΕΠΤ.1996, 176]

POSTSCRIPT

name::
* McsEngl.postscript@cptIt,

_DESCRIPTION:
PostScript[edit]
Format:  PostScript
Published as:  .ps
PostScript is a page description language used in the electronic and desktop publishing areas for defining the contents and layout of a printed page, which can be used by a rendering program to assemble and create the actual output bitmap. Many office printers directly support interpreting PostScript and printing the result. As a result, the format also sees wide use in the Unix world.
[https://en.wikipedia.org/wiki/Comparison_of_e-book_formats#PostScript]
===
Μία 'γλώσσα' εκτύπωσης που συνδυάζει διανυσματικά γραφικά με ιδιαίτερα μεγάλες δυνατότητες εκτύπωσης κειμένων. Η τελευταία έκδοσή της είναι η level 2, που είναι συμβατή με τις προηγούμενες. Συνήθως για να μπορέσει ένας εκτυπωτής να τυπώσει postscript αρχεία θα πρέπει να συνοδεύεται και από ειδικούς ΟΔΗΓΟΥΣ για το λειτουργικό σύστημα που χρησιμοποιεί.
[ΚΟΜΠΙΟΥΤΕΡ ΓΟ, ΣΕΠΤ.1996, 176]

printer'PAPER HANDLING

name::
* McsEngl.printer'PAPER HANDLING@cptIt,

Οι εκτυπωτές μπορούν να τυπώσουν σε μία μεγάλη γκάμα από μεγέθη και είδη χαρτιού, όπως φάκελοι, ετικέτες. διαφάνειες. Συνήθως, η διαχείριση των διαφορετικών τύπων χαρτιού γίνεται με διαφορετικά trays.
[ΚΟΜΠΙΟΥΤΕΡ ΓΟ, ΣΕΠΤ.1996, 176]


A6 index card: 105x148mm
A4: 210x297mm
A3: 11x17
B5: 182x257mm
ENVELOPE DL: 110x220mm
EXECUTIVE: 7.25x10.5in
LEGAL: 8.5x14in
LETTER: 8.5x11in
STATEMENT: 5.5x8.5in
ΜΗΧΑΝΟΓΡΑΦΙΚΟ ΧΑΡΤΙ:
ΦΑΚΕΛΟΙ:
ΔΙΑΦΑΝΕΙΕΣ:
ΕΤΙΚΕΤΕΣ:
ΜΕΓΙΣΤΟ ΠΛΑΤΟΣ ΧΑΡΤΙΟΥ:

printer'PRICE#cptEconomy541.44#

name::
* McsEngl.printer'PRICE@cptIt,

printer'RESOLUSION (QUALITY)

name::
* McsEngl.printer'RESOLUSION (QUALITY)@cptIt,

dpi: κουκκίδες ανα ίνσα

2400dpi είναι η επαγγελματική εκτύπωση του περιοδικού RAM
[RAM 1997may 102]

printer'SPEED

name::
* McsEngl.printer'SPEED@cptIt,

cpm {characters per minute}
ppm {pages per minite}

printer.SPECIFIC

name::
* McsEngl.printer.SPECIFIC@cptIt,

Specific_concepts (level 3) =

printer.BEST'BUY:
* INKJET:epson stylus color 600
* LASER: NEC superscript 860 137000+ 7pps 1997jun,
LEXMARK optra E 123000+ 5,5pps 1997jun

printer.3D

name::
* McsEngl.printer.3D@cptIt,
* McsEngl.3D-printer@cptIt,

Is 3D Printing Possible in Space?
The International Space Station has a 3D printer on board that can receive design files from NASA and create tools.

Thanks to the film Apollo 13, which dramatized how the April 1970 lunar
mission was aborted after an oxygen canister exploded, people know that the
astronauts cobbled together spare parts to conserve spacecraft power and
get home safely. NASA hopes that in the future, space travelers will be
able to create whatever tools or objects they need in space using 3D
printers. In a 2018 test, NASA experts on Earth designed and transmitted
electronic parameters for a basic wrench, which astronauts on board the
International Space Station successfully converted into an actual tool
using a 3D printer.

Read More:
http://www.wisegeek.com/is-3d-printing-possible-in-space.htm?m {2019-03-31}

printer.BUBBLE

name::
* McsEngl.printer.BUBBLE@cptIt,

printer.DIGITIZER

name::
* McsEngl.printer.DIGITIZER@cptIt,

printer.DOT'MATRIX printer

name::
* McsEngl.printer.DOT'MATRIX printer@cptIt,

ΚΙΝΔΥΝΕΥΟΥΝ ΝΑ ΑΦΑΝΙΣΤΟΥΝ ΑΠΟ INKJET.
ΒΑΣΙΚΟ ΠΛΕΟΝΕΚΤΗΜΑ ΟΤΙ ΔΙΝΟΥΝ ΦΤΗΝΑ ΠΟΛΛΑΠΛΑ ΑΝΤΙΓΡΑΦΑ.

9 PIN

Epson
LX-100: 240 cpm, 75.000 drh, no noise

Panasonic
quiet, 43 dBA, Intertech s.a. ΛΕΩΦ. ΣΥΓΓΡΟΥ 126, 902.8300

24 PIN

COLOR

CITIZEN
COLOR ABC 24 pin, 57000 [anastasiadis Jul 1994]

STAR
LC-100 COLOR, 53.500 DRX, ALFA COMPUTER ΘΗΒΩΝ 360.[ΣΕΠΤ 1993]

printer.IMPACT printer

name::
* McsEngl.printer.IMPACT printer@cptIt,
* McsElln.ΕΚΤΥΠΩΤΗΣ-ΑΚΙΔΩΝ@cptIt,
* McsElln.ΚΡΟΥΣΤΙΚΟΣ-ΕΚΤΥΠΩΤΗΣ@cptIt,

printer.INKJET printer

name::
* McsEngl.printer.INKJET printer@cptIt,

BW

TI
MICROMARC 300cps, GRD.90000 drx [sep 1993]

COLOR

CANON buble inkjet
BJC-600, ΦΘΙΝΟΤΕΡΟΣ ΑΠΟ ΗΡ (1.1994), INFORMA.
BJC-4000, 164.500 δρχ + φπα δεκ.1994, informa

EPSON
stylus Colour. 720x720. Πουλιάδης.
* stylus 500, 90000+ drx, Πλαίσιο οκτ.1996,

HP DeskJet:
- 820CXI, 10000+DRX, ΠΛΑΙΣΙΟ ΟΚΤ.1996

- 690 77000+ SYSTEM 2000, OKT.1996

- 320C, GRD.86000 δρχ, ΠΛΑΙΣΙΟ (ΔΕΚ.1994)
- 310, GRD.95000, ΦΟΡΗΤΟΣ, σαν 500C, ΠΛΑΙΣΙΟ (ΙΑΝΟ 1994)

- 500C GRD.130000 DRX KISWARE (OKT 1993)
 GRD.87000 δρχ, πλαισιο (δεκ.1994)
- 540, ο μικρός αδελφος του 560C,
 GRD.103000 +fpa, HP Hellas, (MAR. 1995)
- 550C, ΤΕΤΡΑΧΡΩΜΟΣ, 256000 ΔΡΧ.
 GRD.177000 DRX ALTEC (1993).
 GRD.129000 anastasiadis (jul 1994)
- 560C GRD.127000 πλαισιο, δεκ.1994


- 1200C/PS, 640000+FPA

printer.LASER printer

name::
* McsEngl.printer.LASER printer@cptIt,

price: low cost $700/2000, high cost $22.000
ppm: 4-32
Resolution: 300/600 dpi

Compaq: PageMarq 20 ppm, 800x400 dpi, 4 RAM,

DEC: DEClaser 1152 (1993)

HP LaserJet:
- LaserJet IIIsi
- LaserJet 4, 600 dpi/A4, 552.000 drahmes
- 4L, 159000 δρχ, πλαισιο, δεκ.1994

QMS: 32 ppm, 300dpi, 2 sides of paper, $22,000.

printer.LINE

name::
* McsEngl.printer.LINE@cptIt,

Τυπώνουν κείμενα, εικόνες ανά γραμμή.


ΚΡΟΥΣΤΙΚΟΙ#ql:printer.dot'matrix#
ΨΕΚΑΣΜΟΥ#ql:printer.inkjet#

printer.PAGE

name::
* McsEngl.printer.PAGE@cptIt,

H σελίδα τυπώνεται στη μνήμη τους με μιας και τυπώνεται ολόκληρη.

ΛΕΙΖΕΡ#ql:printer.laser#

printer.PLOTER

name::
* McsEngl.printer.PLOTER@cptIt,

printer.PORTABLE/ΦΟΡΗΤΟΣ

name::
* McsEngl.printer.PORTABLE/ΦΟΡΗΤΟΣ@cptIt,

printer.THERMAL printer

name::
* McsEngl.printer.THERMAL printer@cptIt,

Η ΕΤΑΙΡΕΙΑ CPI ΑΝΤΙΠΡΟΣΩΠΕΥΕΙ ΤΟΥΣ UBI

FvMcs.device.MODEM

name::
* McsEngl.conceptIt66,
* McsEngl.device.MODEM@cptIt,
* McsEngl.FvMcs.device.MODEM@cptIt,
* McsEngl.MODEM@cptIt,
* McsEngl.modem@cptIt66,
* McsEngl.MOdulator-DEModulator@cptIt,

DEFINITION

ΕΙΝΑΙ ΣΥΣΚΕΥΕΣ ΠΟΥ ΜΕΤΑΤΡΕΠΟΥΝ ΤΑ ΨΗΦΙΑΚΑ ΣΗΜΑΤΑ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΣΕ ΗΛΕΚΤΡΙΚΑ ΣΗΜΑΤΑ ΑΚΟΥΣΤΙΚΩΝ ΣΥΧΝΟΤΗΤΩΝ ΚΑΤΑΛΛΗΛΗΣ ΕΝΤΑΣΗΣ, ΩΣΤΕ ΝΑ ΜΠΟΡΟΥΝ ΝΑ ΠΕΡΑΣΟΥΝ ΑΠΟ ΤΟ ΤΗΛΕΦΩΝΙΚΟ ΔΙΚΤΥΟ.
[ΑΛΕΞΟΠΟΥΛΟΣ-ΚΑ, 1992, 239#cptResource223]

AT COMMAND

The set of commands that is used to control the operation of a modem is called the standard Hayes AT Command Set. Most of the commands are prefaced with an AT which stands for ATtention.
For example, to dial the phone, the communications program would send the command "ATD" (ATtention, Dial) to the modem.
In 1981, Hayes Microcomputer Products, Inc. produced the first modem to operate with a command set. It was called a smart modem because prior to that time modems only modulated and demodulated signals between the telephone line and the computer. They did not operate with a command set.
[SOURCE: pc-glossary 1993]

COMMUNICATION PROGRAM

COMPRESSION

V.42bis (4:1)

MNP5 (2:1)

ΜΕ ΤΗ ΣΥΜΠΙΕΣΗ ΔΕΔΟΜΕΝΩΝ ΑΥΞΑΝΕΤΑΙ Η ΤΑΧΥΤΗΤΑ ΜΕΤΑΔΟΣΗΣ ΔΕΔΟΜΕΝΩΝ. ΕΝΑ ΤΕΤΟΙΟ ΠΡΩΤΟΚΟΛΟ ΕΙΝΑΙ ΤΟ MNP#cptIt135: attSpe# ΠΟΥ ΕΠΙΤΡΕΠΕΙ ΤΗ ΜΕΙΩΣΗ ΤΟΥ ΟΓΚΟΥ ΤΩΝ ΔΕΔΟΜΕΝΩΝ ΣΤΟ ΜΙΣΟ.
- ΜΙΑ ΑΛΛΗ ΜΕΘΟΔΟΣ ΣΥΜΠΙΕΣΗΣ ΕΙΝΑΙ ΤΟ CCITT V.42bis ΜΕ ΤΟ ΟΠΟΙΟ ΜΠΟΡΕΙ ΝΑ ΕΠΙΤΕΥΧΘΕΙ ΜΕΓΙΣΤΟΣ ΒΑΘΜΟΣ ΣΥΜΠΙΕΣΗΣ 4:1.
- ΟΙ ΣΥΜΠΙΕΣΕΙΣ ΔΕΝ ΜΠΟΡΟΥΝ ΝΑ ΕΠΙΤΕΥΧΘΟΥΝ ΣΤΗ ΠΡΑΞΗ, ΑΦΟΥ ΤΑ ΔΕΔΟΜΕΝΑ ΔΕΝ ΒΡΙΣΚΟΝΤΑΙ ΑΠΑΡΑΙΤΗΤΑ ΣΕ ΜΟΡΦΗ ΠΟΥ ΝΑ ΕΠΙΤΡΕΠΕΙ ΤΗ ΣΥΜΠΙΕΣΗ, ΟΠΟΤΕ ΠΡΟΚΕΙΤΑΙ ΓΙΑ ΜΑΛΛΟΝ ΘΕΩΡΗΤΙΚΗ ΤΑΧΥΤΗΤΑ.

ERROR CORRECTION


V.42
MNP2-4
MNP-10,

ΤΑ ΜΟΝΤΕΜΣ ΔΙΑΘΕΤΟΥΝ ΚΑΙ ΠΡΩΤΟΚΟΛΑ ΔΙΟΡΘΩΣΗΣ ΛΑΘΩΝ ΜΕ ΤΑ ΟΠΟΙΑ ΜΠΟΡΟΥΝ ΝΑ ΕΞΑΛΕΙΥΘΟΥΝ ΜΕΧΡΙ ΕΝΑ ΒΑΘΜΟ ΟΙ ΔΥΣΚΟΛΙΕΣ ΜΕΤΑΔΟΣΗΣ ΛΟΓΩ ΚΑΚΩΝ ΓΡΑΜΜΩΝ.
- ΤΑ ΠΡΩΤΟΚΟΛΛΑ ΑΥΤΑ ΕΙΝΑΙ ΣΥΝΗΘΩΣ ΤΑ MNP 2-4 and V.442.
- ΤΗΝ ΑΠΟΦΑΣΗ ΓΙΑ ΤΟ ΠΟΙΟ ΠΡΩΤΟΚΟΛΛΟ ΕΠΙΚΟΙΝΩΝΙΑΣ ΘΑ ΧΡΗΣΙΜΟΠΟΙΗΘΕΙ ΤΗΝ ΠΑΙΡΝΕΙ ΣΥΝΗΘΩΣ ΤΟ ΜΟΝΤΕΜ ΠΡΟΟΡΙΣΜΟΥ.

SPEED


2,400bps
9,600bps
14,400bps
23,000bps
28,800bps, CCITT protocol V.Fast.

V.26     2.400 bps
V.27     4.800
V.29     9.600
V.32     9.600 2σύρματη
V.32bis    14.400 2σύρματη
V.33    14.400
V.fast    28.800 private
V.34    28.800

REMOTE SETUP

SECURITY

STANDARD#cptIt139#

Η ΣΕΙΡΑ V ΣΥΣΤΑΣΕΩΝ ΤΗ CCITT ΕΙΝΑΙ ΣΗΜΕΡΑ ΑΥΤΗ ΠΟΥ ΧΡΗΣΙΜΟΠΟΙΕΙΤΑΙ ΓΙΑ ΤΗΝ ΤΥΠΟΠΟΙΗΣΗ ΤΩΝ MODEM ΣΕ ΠΑΓΚΟΣΜΙΟ ΕΠΙΠΕΔΟ.
ΣΤΗΝ ΑΜΕΡΙΚΗ ΕΧΟΥΝ ΑΝΑΠΤΥΧΘΕΙ ΙΔΙΑΙΤΕΡΕΣ ΤΥΠΟΠΟΙΗΣΕΙΣ, ΤΑ bell standard, ΠΟΥ ΔΕΝ ΕΙΝΑΙ ΠΑΝΤΑ ΣΥΜΒΑΤΑ ΜΕ ΤΙΣ ΣΥΣΤΑΣΕΙΣ ΤΗΣ CCITT.

SPECIFIC

Specific_concepts (level 3) =


VOICEBAND MODEM
BASEBAND MODEM
BROADBAND MODEM
DEDICATED LINE MODEM
DIAL-UP LINE MODEM
ΧΑΜΗΛΗΣ/ΥΨΗΛΗΣ ΤΑΧΥΤΗΤΑΣ MODEM
ΣΥΓΧΡΟΝΗΣ/ΑΣΥΓΧΡΟΝΗΣ ΜΕΤΑΔΟΣΗΣ MODEM
HALF/FULL DUPLEX MODEM

modem.ISDN

name::
* McsEngl.modem.ISDN@cptIt,

Farallon introduces two new ISDN modems that it says will increase the effective speed limit of ISDN from 128 kbps to 230 kbps.
[http://www.news.com/, 21 okt 1996]

modem.mine

name::
* McsEngl.modem.mine@cptIt,

MICRONET Express Shuttle 3000 data/fax/voice 56 Kbps
** Model No: SP3000E
** DESCRIPTION: Shuttle 3000 Modem External 56K
** αγορά 1999jul, 5000 δρχ
** ITU V.90 compliant
- X2 technology
- auto-detect v.90/x2 when linking to isp
- Video Ready V.80 capability, supporting H.324
- message center with data, fax and voice in one machine with call discrimination
- support full-duplex speaker-phone (FDSP) function
- support telephone answering machine
- plug-and-play

US ROBOTICS sportster flash x2 56kbps compatible.
1998σεπ, +20.000δρχ.

MICRONET Express Shuttle 3000 data/fax/voice 56 Kbps
** αγορά 1998σεπ, 33000 δρχ
** ITU V.90 compliant
- X2 technology
- auto-detect v.90/x2 when linking to isp
- Video Ready V.80 capability, supporting H.324
- message center with data, fax and voice in one machine with call discrimination
- support full-duplex speaker-phone (FDSP) function
- support telephone answering machine
- plug-and-play

SUPRA SupraExpress 288i PnP:
** αγορά 1996φεβ, 60.000 δρχ
** κάηκε από αστραπή 1998σεπ

ZX 1896 Fax Modem, Zoltrix inc.
MANUAL: BIBL:NA473#cptResource473#
SPEED: FAX 9,600bps, Modem 2,400bps fully Hayes compatible.
-ΕΙΘΕΛΕ ΤΗΝ ΕΝΤΟΛΗ ΑΤΧ3 ΓΙΑ ΝΑ ΛΕΙΤΟΥΡΓΗΣΕΙ ΤΟ ΦΑΧ ΣΤΗΝ ΕΛΛΑΔΑ.

modem.RADIO

name::
* McsEngl.modem.RADIO@cptIt,

ΣΤΗΝ ΕΚΘΕΣΗ CeBIT 93 H TOSHIBA ENA ΕΝΣΩΜΑΤΩΜΕΝΟ ΣΤΗ ΣΕΙΡΑ notebooks T1800.

modem.SUPER

name::
* McsEngl.modem.SUPER@cptIt,

BROADBAD MODEM.
θα ανταποκρίνεται σε συχνότητες των 6MHz αντι των 3,3KHz του παρόντος. Η υλοποίηση είναι ακόμη μακριά, τουλάχιστον 5 χρόνια σύμφωνα με μετριοπαθείς εκτιμήσεις.
[ΚΟΜΠΙΟΥΤΕΡ ΓΟ, ΟΚΤ. 1996, 186]

New modem will speed up Internet access
October 4, 1996
Web posted at: 6:20 p.m. EDT

ATLANTA (CNN) -- Home Internet users frustrated with the slow speed on the information superhighway may be in luck. A new type of modem technology is turbocharging access to the Internet and World Wide Web by using an ordinary phone line.
The modem created by Alcatel Telecom, a French-owned company, can download information at 4 million bits per second, more than 100 times faster than the current 28,000 bits-per-second standard for home computer modems. The company says its equipment is also significantly faster than other new types of lines like ISDN and much-hyped cable TV modems.
The cost of the modem service to users could be as low as $50 per month, including a regular phone line, Alcatel says.
Alcatel's modem is the size of a CD player and uses two types of technology: Asymmetrical Digital Subscriber Line, ADSL, and Asychronous Transfer Mode, ATM, which together divide copper phone lines in two, providing a path for on-line connections while retaining room for simple phone calls.
The split also ends one of the top complaints of on-line users -- slow access to the Web and Internet -- by opening lanes and tremendously increasing surfing speed. Downloading pictures can be done in seconds, and video and film clips, which are notoriously time-consuming to download, can be accessed in minutes, Alcatel officials say.
Alcatel says regional phone companies are jumping at the opportunity. It requires a file cabinet-sized box of switching equipment and servers installed at each phone company. Commercial trials of the super-modems are expected to begin by the middle of next year, with full-scale consumer testing by the end of 1997.
[http://cnn.com/TECH/9610/04/faster.internet/index.html]

modem.TRANSFER'RATE'CLASS

name::
* McsEngl.modem.TRANSFER'RATE'CLASS@cptIt,

modem.56Kbps

name::
* McsEngl.modem.56Kbps@cptIt,

U.S. Robotics
unveils faster modem. U.S. Robotics said Wednesday it has developed a new computer modem that can operate at 56 kilobits per second -- a new high in transmission speed -- and is comparable to high-speed ISDN networks. The "x2" modem will begin field tests in November and will be available beginning in the first quarter of 1997.
[http://www.cnn.com/DIGEST/, 17 okt. 1996]

modem.28.800bps (V.34)

name::
* McsEngl.modem.28.800bps (V.34)@cptIt,

CRAY COMMUNICATIONS:
QUATTRO SM288

CRYPTO:
- compact V.34:
- Databank 288VF: 115200bps με συμπίεση, fax, remote setup, security.

DIGICOM:
SNM31F

GENERAL DATACOMM INC.
V.F 28.8

MICROCOM:
(MNP-10, fax, parallel port, Lexis ΠΛΗΡΟΦΟΡΙΚΗ)
DESKPORTE
TRAVELPORTE

MULTITECH SYSTEMS:
MT2834.

NOKIA TELECOMMUNICATIONS:
ECMFAST-28.800

US ROBOTICS:
sportser, V.Fast clas, Info-Quest.

14.400bps (V.32bis)

CRYPTO 144VF compact:
data/fax/modem. Λειτουργία και με μπαταρία. 80000 +φπα εξωτερικο. 70000 +φπα καρτα. δεκ.1994.

FvMcs.DRAM

name::
* McsEngl.conceptIt87,
* McsEngl.DRAM@cptIt,
* McsEngl.FvMcs.DRAM@cptIt,
* McsEngl.dram@cptIt87,
* McsEngl.dynamic-random-access-memory@cptIt,

DEFINITION

Dynamic RAM είναι ο πλέον διαδεδομένος τύπος μνήμης και δεν είναι άλλος απο αυτόν που χρησιμοποιούν σήμερα όλοι οι προσωπικοί υπολογιστές.
Η αποθήκευση αφορά την φόρτιση και εκφόρτιση ΠΥΚΝΩΤΩΝ.
Για να μή χάνονται οι πληροφορίες (ως γνωστόν οι πυκνωτές αποφορτίζονται με την πάροδο ελαχίστου χρόνου), απαιτείται η συνεχής τροφοδοσία με ηλεκτρικό ρεύμα. Έτσι εξηγείται και η χρήση του όρου 'ΔΥΝΑΜΙΚΗ' αφού πρέπει να ανανεώνεται, ώστε να διατηρεί τα δεδομένα της.
[RAM 1998feb, 215]

GENERIC

_GENERIC:
computer RAM#cptIt140#

CAPACITY#cptIt14.1#

Samsung has announced the development of the world’s first 1-gigabyte DRAM chip, which promises to change the future of computers.

this ultra-small device that’s capable of storing information equivalent to more than 8,000 newspaper pages or 400 still pictures. The 1-gigabyte DRAM chip will be commercially available in 2002, with full-scale production in 2005.
[http://www.msnbc.com/news/st_front.asp, 8 NOV. 1996]

EVOLUTION#cptCore546.171#

1997feb06:
NEC develops first 4-gigabit DRAM chip
Copyright © 1997 Nando.net Copyright © 1997 Reuter Information Service
TOKYO (Feb 6, 1997 3:30 p.m. EST) - Japanese electronics company NEC Corp. announced Thursday it had developed the world's first 4-gigait dynamic random access memory, or DRAM, computer chip, the most sophisticated memory chip yet.

FvMcs.Cache Memory

name::
* McsEngl.conceptIt89,
* McsEngl.Cache Memory@cptIt,
* McsEngl.FvMcs.Cache Memory@cptIt,
* McsEngl.CACHE-MEMORY@cptIt,
* McsElln.ΛΑΝΘΑΝΟΥΣΑ-ΜΝΗΜΗ@cptIt,
* McsElln.ΜΝΗΜΗ-cache@cptIt89,

DEFINITION

H cache είναι μια ιδιαίτερα γρήγορη μνήμη (25nsec ή και λιγότερο) την οποία χρησιμοποιεί ο επεξεργαστής ως ενδιάμεσο στάδιο για τη γρηγορότερη μεταφορά δεδομένων από και προς την κεντρική μνήμη RAM.
[COMPUTER GO, DEC 1995, ΕΝΘΕΤΟ 26]

Μια γρήγορη ΜΝΗΜΗ RAM που αποθηκεύει δεδομένα, ώστε να μην υπάρχει λόγος προσπέλασης του δίσκου την επόμενη φορά που ο υπολογιστης θα χρειαστει καποια δεδομένα.

Doing#cptCore475#

Το μέγεθός της επηρεάζει την απόδοση του επεξεργαστή.
[COMPUTER GO, DEC 1995, ΕΝΘΕΤΟ 26]

SPECIFIC

Ανάλογα με το σημείο τοποθέτησης υπάρχουν δύο είδη μνήμης cache:
* ΕΣΩΤΕΡΙΚΗ (μέσα στον επεξεργαστή)
* ΕΞΩΤΕΡΙΚΗ (πάνω στη μητρική).
[COMPUTER GO, DEC 1995, ΕΝΘΕΤΟ 26]

FvMcs.ΚΥΣΥΠ {ΚΥΒΕΡΝΗΤΙΚΟ ΣΥΜΒΟΥΛΙΟ ΠΛΗΡΟΦΟΡΙΚΗΣ}

name::
* McsEngl.conceptIt90,
* McsElln.ΚΥΣΥΠ {ΚΥΒΕΡΝΗΤΙΚΟ ΣΥΜΒΟΥΛΙΟ ΠΛΗΡΟΦΟΡΙΚΗΣ}@cptIt,
* McsEngl.FvMcs.ΚΥΣΥΠ {ΚΥΒΕΡΝΗΤΙΚΟ ΣΥΜΒΟΥΛΙΟ ΠΛΗΡΟΦΟΡΙΚΗΣ}@cptIt,
* McsElln.ΚΥΣΥΠ@cptIt90,
* McsElln.ΚΥΒΕΡΝΗΤΙΚΟ-ΣΥΜΒΟΥΛΙΟ-ΠΛΗΡΟΦΟΡΙΚΗΣ@cptIt,

DEFINITION

ΚΥΣΥΠ {ΚΥΒΕΡΝΗΤΙΚΟ ΣΥΜΒΟΥΛΙΟ ΠΛΗΡΟΦΟΡΙΚΗΣ}:
ΤΟ ΑΝΩΤΑΤΟ ΚΥΒΕΡΝΗΤΙΚΟ ΟΡΓΑΝΟ ΓΙΑ ΘΕΜΑΤΑ ΠΛΗΡΟΦΟΡΙΚΗΣ, ΣΥΝΕΔΡΙΑΖΕΙ ΚΑΘΕ ΔΥΟ ΜΗΝΕΣ ΠΕΡΙΠΟΥ, ΜΕ ΟΥΣΙΑΣΤΙΚΗ ΑΣΧΟΛΙΑ ΤΗΝ ΕΠΙΤΗΡΗΣΗ ΤΩΝ ΜΕΓΑΛΩΝ ΕΡΓΩΝ ΤΟΥ ΔΗΜΟΣΙΟΥ..

EVOLUTION#cptCore546.171#

ΜΑΡΤΗΣ 1986:
Με πράξη του υπουργικού συμβουλίου ιδρύονται τα ΚΥΣΥΠ & ΤΕΣΥΠ. Το ΚΥΣΥΠ συνεδρίασε 2 φορές ΙΟΥΛ 1986 και ΓΕΝ 1988.
[ΕΠΙΣΤΗΜΟΝΙΚΗ ΣΚΕΨΗ, 39, 25]

FvMcs.device.REPEATER

name::
* McsEngl.conceptIt100,
* McsEngl.device.REPEATER@cptIt,
* McsEngl.FvMcs.device.REPEATER@cptIt,
* McsEngl.repeater@cptIt100,
* McsElln.ΕΠΑΝΑΛΗΠΤΗΣ@cptIt,

DEFINITION

Για παράδειγμα, η προδιαγραφή Ethernet ορίζει ότι ένα σήμα μπορεί να ταξιδεψει δε ένα μέγιστο μήκος καλωδίου μέχρι 500 μέτρα σε ένα μοναδικό τμήμα, αλλά με επαναλήπτες να συνδέουν πέντε τμήματα, μπορεί να φθάσει μια μέγιστη απόσταση 2.500 μέτρων καλωδίων.

Το κόστος κυμαίνεται απο μόλις κατω από $1.000 απλό Ethernet μέχρι αρκετά πάνω από $2.000 για συσκευές Token-Ring.

#cptIt21.5(network hardware)#

FvMcs.material-body'COLOR

name::
* McsEngl.conceptIt113,
* McsEngl.material-body'COLOR@cptIt,
* McsEngl.FvMcs.material-body'COLOR@cptIt,
* McsEngl.color@cptIt113,
* McsEngl.colour@cptIt,
* McsElln.ΧΡΩΜΑ@cptIt,
* McsEngl.xρώμα@cptIt,
* McsEngl.kalaro@lagoSngo, {2014-01-14}
* McsEngl.koro@lagoSngo, {2010-08-23}
* McsSngo.kalaro@cptIt, {2014-01-14}
* McsSngokoro@cptIt, {2010-08-23}
* McsEngl.koloro@lagoEspo,
* McsEspo.koloro@cptIt,

DEFINITION

In physics, visible light is said to be composed of electromagnetic rays. Likewise, the rays emitted from radio and television stations are also electromagnetic. The electromagnetic rays of visible light differ form the electromagnetic rays carrying radio and television information only in their frequency.
What in colloquial terms is referred to as THE COLOR OF AN OBJECT is, in fact, man's perception of the REFLECTION of electromagnetic rays. It is important to remember that all objects are colorless and that the sensation of color originates only in the human brain.
[Epson, the theory and practice of color, 1995]

Το λευκό είναι μια σύνθεση όλων των χρωμάτων. Οταν πέφτει φως πάνω σε κάποιο αντικείμενο, κάποιες ΣΥΧΝΟΤΗΤΕΣ του απορροφώνται και κάποιεςανακλωνται δημιουργώντας το χρώμα του.
[RAM 1997may, 148]

color'GENERIC

_GENERIC:
* entity.attribute#cptCore398#

color'WHOLE

_WHOLE:
* sympan'material_body#cptCore742#

color'ENVIRONMENT#cptCore756#

name::
* McsEngl.color'ENVIRONMENT@cptIt,

color'bit-depth

name::
* McsEngl.color'bit-depth@cptIt,
* McsElln.ΒΑΘΟΣ-ΧΡΩΜΑΤΟΣ@cptIt,

_BIT:
8bit    256 χρωματα
16bit    65536 χρώματα
24bit    16,7 εκ. χρώματα

true color:
It requires 256 graduations of the three primary colors. Each primary color requires 1 byte and a total of 3 bytes is needed for each color shade.
In the case of a 1024x768 pixel resolution, 1024x768x3=2,25MB are needed for a picture.

color'resource

name::
* McsEngl.color'resource@cptIt,

_ADDRESS.WPG:
* http://www.w3schools.com/tags/ref_colorpicker.asp,

color'temperature

name::
* McsEngl.color'temperature@cptIt,
====== lagoGreek:
* McsElln.ΘΕΡΜΟΚΡΑΣΙΑ-ΧΡΩΜΑΤΟΣ@cptIt,

Το χρώμα των αντικειμένων είναι "σωστότερο" όταν φωτίζονται με καθαρό λευκό φως. Ομως η έννοια του καθαρού λευκού είναι μια σύμβαση. Κάθε λευκό φως, από τον ήλιο, από φλάς ή από οποιαδήποτε φωτιστική πηγή, περιέχει και λίγο χρώμα: οι ηλεκτρικές λάμπες "κιτρινίζουν" ενώ ο συννεφιασμένος ουρανός "μπλεδίζει". Το έγχρωμο αυτό περιεχόμενο εκφράζει τη λεγόνενη ΘΕΡΜΟΚΡΑΣΙΑ του χρώματος, η οποία μετριέται σε βαθμούς Kelvin.
[RAM 1997may, 148]

SPECIFIC

name::
* McsEngl.color.specific@cptIt,

Για την απεικόνιση των χρωμάτων στο χώρο των υπολογιστών χρησιμοποιούνται 3 ΧΡΩΜΑΤΙΚΑ ΜΟΝΤΕΛΑ ή συστήματα: προσθετικά ή αφαιρετικά, τα RGB, CMYK και το HSB.
[COMPUTER GO, JAN. 1996, 32 ΕΝΘΕΤΟ]

_SPECIFIC:

color.INDIGO

name::
* McsEngl.color.INDIGO@cptIt,

_DESCRIPTION:
Indigo is a color that was traditionally regarded as a color on the visible spectrum and as one of the seven colors of the rainbow: the color between blue and violet. Although traditionally considered one of seven major spectral colors, its actual position in the electromagnetic spectrum is controversial. Indigo is a deep and bright color close to the color wheel blue (a primary color in the RGB color space), as well as to some variants of ultramarine.
The color indigo was named after the Indigo dye derived from the plant Indigofera tinctoria and related species.
The first recorded use of indigo as a color name in English was in 1289.[3]

Color coordinates
Hex triplet  #4B0082
sRGBB (r, g, b)  (75, 0, 130)
CMYKH (c, m, y, k)  (42, 100, 0, 49)
HSV (h, s, v)  (275°, 100%, 51%)
[http://en.wikipedia.org/wiki/Indigo]

color.LANGUAGE

name::
* McsEngl.color.LANGUAGE@cptIt,

_SPECIFIC:
English  Greek  Esperanto  Komo
color  χρώμα  koloro  koro
white  άσπρο  blanka  koro-blanko
blue  μπλε  blua  koro-bluo
brown  καφέ  bruna  koro-bruno
maroon  καστανέρυθρο  brunkarmezina  koro-marono
yellow  κίτρινο  flava  koro-yelo
magenta  φούξια  fuksina  koro-fukso
beige  μπεζ  grizbruneta  koro-bezo
grey  γκρι  griza  koro-grizo
indigo  λουλακί  indiga  koro-indigo
khaki  χακί  kakia  koro-kako
crimson  βαθυκόκκινο, βυσσινή  karmezina  koro-krimso
black  μαύρο  nigra  koro-blako
olive  λαδί  olivkolora  koro-livo
orange  πορτοκαλί  orangxa  koro-ranjo
puce  καστανέρυθρο  pulkolora  koro-pyyuzo
purple  πορφυρό  purpura  koro-purpo
pink  ροζ  rozkolora  koro-pinko
red  κόκκινο  rugxa  koro-redo
silver  ασημί  silvera  koro-silvo
turquoise  τυρκουάζ  turkisblua  koro-turkozo
green  πράσινο  verda  koro-grino
violet  βιολετή  viola  koro-violo
[file:///D:/File1a/SBC-2010-08-23/hSbc/hSbc1.html#ifiColor]

color.model.ADDITIVE

name::
* McsEngl.color.model.ADDITIVE@cptIt,

R+G+B=W

R+G=Yellow

R+B=Magenta

G+B=Cyan

color.model.SUBTRACTIVE

name::
* McsEngl.color.model.SUBTRACTIVE@cptIt,

C+M+Y=B


C  W  R
M =  W -  G
Y  W  B

color.ORANGE

name::
* McsEngl.color.ORANGE@cptIt,

Where Did the Name of the Color Orange Originate?
The color orange was named after the fruit, rather than the other way around.

The use of "orange" to refer to the color first appeared in Anglo text in
the 13th century. Orange fruits are thousands of years old and have been
cultivated in the Middle East and Mediterranean region since the 9th
century. Since the fruit came first, the color orange was named after the
fruit rather than the other way around.

Read More: http://www.wisegeek.com/where-did-the-name-of-the-color-orange-originate.htm?m, {2015-04-24}

color.PURPLE

name::
* McsEngl.color.PURPLE@cptIt,

What Color of Dye Came from Rotting Snails?
In ancient Rome, purple dye was made by boiling dead sea snails, taking 10,000 snails for every gram of dye.

Tyrian purple, or royal purple, was made in ancient Rome by boiling dead
Murex, a type of sea snail. The snails themselves are not purple, but were
harvested for their mucous secretion. In order to create the intense
purple, thousands of snails were boiled in giant lead vats for several
days. It took roughly 10,000 snails to make a gram of dye. One the color
was made, it could be made brighter with sunlight and did not fade easily.

Read More: http://www.wisegeek.com/what-color-of-dye-came-from-rotting-snails.htm?m, {2014-11-22}

color.RAINBOW

name::
* McsEngl.color.RAINBOW@cptIt,
* McsEngl.rainbow-color@cptIt,
====== lagoGreek:
* McsElln.ουράνιου-τόξου-χρώματα@cptIt,

_DESCRIPTION:
The apparent discreteness of main colours is an artefact of human perception and the exact number of main colours is a somewhat arbitrary choice.
Red, Orange, Yellow, Green, Blue, Indigo (λουλακί), Violet
[http://en.wikipedia.org/wiki/Rainbow]
===
Green, Blue, Indigo (λουλακί), Violet, Red, Orange, Yellow,

color.RGB

name::
* McsEngl.color.RGB@cptIt,
* McsEngl.color.hexadecimal@cptIt,

_SPECIFIC:
* "000000", "Black",
* "993300", "Burnt orange",
* "333300", "Dark olive",
* "003300", "Dark green",
* "003366", "Dark azure",
* "000080", "Navy Blue",
* "333399", "Indigo",
* "333333", "Very dark gray",
* "800000", "Maroon",
* "FF6600", "Orange",
* "808000", "Olive",
* "008000", "Green",
* "008080", "Teal",
* "0000FF", "Blue",
* "666699", "Grayish blue",
* "808080", "Gray",
* "FF0000", "Red",
* "FF9900", "Amber",
* "99CC00", "Yellow green",
* "339966", "Sea green",
* "33CCCC", "Turquoise",
* "3366FF", "Royal blue",
* "800080", "Purple",
* "999999", "Medium gray",
* "FF00FF", "Magenta",
* "FFCC00", "Gold",
* "FFFF00", "Yellow",
* "00FF00", "Lime",
* "00FFFF", "Aqua",
* "00CCFF", "Sky blue",
* "993366", "Brown",
* "C0C0C0", "Silver",
* "FF99CC", "Pink",
* "FFCC99", "Peach",
* "FFFF99", "Light yellow",
* "CCFFCC", "Pale green",
* "CCFFFF", "Pale cyan",
* "99CCFF", "Light sky blue",
* "CC99FF", "Plum",
* "FFFFFF", "White"
===
black    0,0,0    000000
white    255,255,255  ffffff

blue    0,0,255    0000ff
cyan    0,255,255  00ffff (a0ffff)
gray    128,128,128  808080
GrayDark    64,64,64  404040
GrayLight    192,192,192  c0c0c0
green    0,255,0    00ff00
magenta    255,0,255  ff00ff
orange    255,200,0  ffc800
pink    255,175,175  ffafaf
red      255,0,0    ff0000
yellow    255,255,0  ffff00
yellow2    255,251,203  FFF5CB

Gray:
#000000; black
#111111; near black
#AAAAAA; GRAY
#EEEEEE; near white
#F7F7F7; near white
#FFFFFF; white

Green:
#507aa5;

Blue:
#BDEDFF; (cyan)
#CDEFFF; (cyan)

color.VIOLET

name::
* McsEngl.color.VIOLET@cptIt,

_DESCRIPTION:
Violet is a bright bluish purple color that takes its name from the violet flower.[2] On the traditional color wheel used by painters, it is located between blue and purple. Violet is at the higher end of the visible spectrum, with a wavelength between approximately 380-450 nanometers.[3] Light with a shorter wavelength than violet but longer than X-rays and gamma rays is called ultraviolet, and is not visible to the human eye.

According to surveys in Europe and the United States, violet is the color most commonly associated with the extravagant, the individualist, ambiguity, the unconventional, and the artificial.[4]

Color coordinates
Hex triplet  #8F00FF
sRGBB (r, g, b)  (143, 0, 255)
CMYKH (c, m, y, k)  (44, 100, 0, 0)
HSV (h, s, v)  (274°, 100%, 100%)
[http://en.wikipedia.org/wiki/Violet_(color)]

FvMcs.Port

name::
* McsEngl.conceptIt115,
* McsEngl.Port@cptIt,
* McsEngl.FvMcs.Port@cptIt,
* McsEngl.PORT@cptIt,
* McsEngl.port@cptIt115,
* McsEngl.connection@cptIt,
* McsEngl.CONNECTOR@cptIt,
* McsEngl.INTERFACE@cptIt,
* McsEngl.PORT@cptIt,
* McsElln.ΔΙΑΣΥΝΔΕΣH@cptIt,

DEFINITION

"ΜΕ ΤΗ ΛΕΞΗ ΔΙΑΣΥΝΔΕΣΗ ή INTERFACE ΕΝΝΟΟΥΜΕ ΤΟ ΣΥΝΟΛΟ ΤΩΝ ΚΑΝΟΝΩΝ ΠΟΥ ΠΡΟΣΔΙΟΡΙΖΟΥΝ ΑΦΕΝΟΣ ΤΙΣ ΜΗΧΑΝΙΚΕΣ ΚΑΙ ΗΛΕΚΤΡΙΚΕΣ ΙΔΙΟΤΗΤΕΣ, ΑΦΕΤΕΡΟΥ ΤΙΣ ΛΕΙΤΟΥΡΓΙΕΣ ΚΑΙ ΤΙΣ ΑΠΑΡΑΙΤΗΤΕΣ ΔΙΑΔΙΚΑΣΙΕΣ ΣΥΝΔΕΣΗΣ ΔΥΟ ΨΗΦΙΑΚΩΝ ΣΥΣΚΕΥΩΝ"
[ΑΛΕΞΟΠΟΥΛΟΣ-ΚΑ, 1992, 203#cptResource223]

ΜΗΧΑΝΙΚΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ

ΑΝΑΦΕΡΟΝΤΑΙ ΣΤΗ ΦΥΣΙΚΗ ΥΠΟΣΤΑΣΗ ΤΗΣ ΔΙΑΣΥΝΔΕΣΗΣ.

ΗΛΕΚΤΡΙΚΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ

ΠΕΡΙΓΡΑΦΟΥΝ ΤΙΣ ΣΤΑΘΜΕΣ ΤΩΝ ΤΑΣΕΩΝ, ΤΩΝ ΡΕΥΜΑΤΩΝ ΠΟΥ ΠΡΕΠΕΙ ΝΑ ΥΠΑΡΧΟΥΝ ΚΛΠ.

ΛΕΙΤΟΥΡΓΙΚΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ

ΠΡΟΣΔΙΟΡΙΖΟΥΝ ΤΙΣ ΛΕΙΤΟΥΡΓΙΕΣ ΤΩΝ ΔΙΑΦΟΡΩΝ ΚΥΚΛΩΜΑΤΩΝ. ΠΕΡΑ ΑΠΟ ΤΑ ΚΥΚΛΩΜΑΤΑ ΜΕΤΑΦΟΡΑΣ, ΥΠΑΡΧΕΙ ΚΑΙ ΕΝΑΣ ΑΛΛΟΣ ΣΗΜΑΝΤΙΚΟΣ ΑΡΙΘΜΟΣ ΚΥΚΛΩΜΑΤΩΝ ΠΟΥ ΔΙΕΥΚΟΛΥΝΟΥΝ ΤΙΣ ΔΙΑΔΙΚΑΣΙΕΣ ΕΠΙΚΟΙΝΩΝΙΑΣ, ΟΠΩΣ ΤΑ ΣΗΜΑΤΑ ΕΛΕΓΧΟΥ, ΧΡΟΝΙΣΜΟΥ, ΓΕΙΩΣΕΩΝ ΚΑΙ ΤΡΟΦΟΔΟΣΙΑΣ.

ΔΙΑΔΙΚΑΣΤΙΚΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ

ΠΕΡΙΓΡΑΦΟΥΝ ΤΗ ΛΟΓΙΚΗ ΚΑΙ ΧΡΟΝΙΚΗ ΑΚΟΛΟΥΘΙΑ ΤΩΝ ΣΗΜΑΤΩΝ ΠΟΥ ΥΠΑΡΧΟΥΝ ΓΙΑ ΤΗΝ ΕΝΑΡΞΗ, ΣΥΝΤΗΡΗΣΗ ΚΑΙ ΔΙΑΚΟΠΗ ΤΗΣ ΕΚΑΣΤΟΤΕ ΕΠΙΚΟΙΝΩΝΙΑΣ.

SPECIFIC

Specific_concepts (level 3) =

LIGHT-PEAK

Light Ρeak είναι το κωδικό όνομα της νέας, ταχύτατης, τεχνολογίας διασύνδεσης ηλεκτρονικών συσκευών μέσω καλωδίων οπτικών ινών. Η τεχνολογία Light Ρeak επιτρέπει τη διασύνδεση πολλαπλών συσκευών μέσω ενός μόνο καλωδίου, ενώ παράλληλα η οπτική φύση του μέσου επιτρέπει μακρύτερα, λεπτότερα και περισσότερο ευλύγιστα καλώδια μικρότερων επαφών από τα συνηθισμένα. Η υπάρχουσα τεχνολογία ηλεκτρικών καλωδίων που εφαρμόζεται στους προσωπικούς υπολογιστές έχει φτάσει στα όριά της όσον αφορά το μήκος και την ταχύτητα. Η βασικότερη αιτία είναι οι ηλεκτρομαγνητικές παρεμβολές αλλά και άλλοι παράγοντες. Το Light Ρeak φέρνει την οπτική τεχνολογία στους προσωπικούς υπολογιστές και στις καταναλωτικές συσκευές, και μάλιστα με πολύ χαμηλό κόστος.
Το πρωτότυπο σύστημα που επέδειξε η Ιntel σε μηχάνημα της Αpple βασίζεται σε πομπούς λέιζερ και προσφέρει ρυθμό διαμεταγωγής 10 Gbps ανά κατεύθυνση.
[http://www.tovima.gr/default.asp?pid=2&ct=33&artId=291127&dt=30/09/2009] 2009-10-13

USB

name::
* McsEngl.usb@cptIt115i,

USB3.1:
USB 3.1 is a specification published by the USB-IF.
A January 2013 press release from the USB group revealed plans to update USB 3.0 to 10 Gbit/s (1280 MB/s).[1] The group ended up creating a new USB specification, USB 3.1, which was released on 31 July 2013,[2] replacing USB 3.0 standard. USB 3.1 specification takes over existing USB 3.0's SuperSpeed USB transfer rate, now calling it USB 3.1 Gen 1, and introduces a faster transfer rate called SuperSpeed USB 10 Gbps, also called USB 3.1 Gen 2,[3] putting it on par with a single first-generation Thunderbolt channel. The new mode's logo features a caption stylized as SUPERSPEED+. The USB 3.1 standard increases the maximum data signaling rate to 10 Gbit/s (1280 MB/s), double that of SuperSpeed USB, and reduces line encoding overhead to just 3% by changing the encoding scheme to 128b/132b.[4] The first USB 3.1 implementation demonstrated real-world transfer speeds of 7.2 Gbit/s.[5]
[https://en.wikipedia.org/wiki/USB_3.1]

USB3.0:
USΒ 3.0 που θα κάνουν σε λίγο καιρό την εμφάνισή τους στην αγορά.
Τα νέα «στικάκια» προσφέρουν ταχύτητες 5 Gbps, δέκα φορές υψηλότερες σε σχέση με τις υπάρχουσες συσκευές USΒ 2.0

USB2.0:

usb-type-c

_DESCRIPTION:
USB Type-C is a USB specification for a small 24-pin fully reversible-plug connector for USB devices and USB cabling.[1]
The USB Type-C Specification 1.0 was published by the USB Implementers Forum (USB-IF) and was finalized in August 2014.[2] It was developed at roughly the same time as the USB 3.1 specification.
If a product implements USB Type-C, it does not necessarily support USB 3.1 or USB Power Delivery.[3][4]
[https://en.wikipedia.org/wiki/USB_Type-C]

usb-micro

usb-mini

CENTRONICS

CENTRONICS: ΔΗΜΙΟΥΡΓΗΘΗΚΕ ΑΠΟ ΤΗΝ ΟΜΩΝΥΜΗ ΕΤΑΙΡΙΑ ΕΚΤΥΠΩΤΩΝ.
ΟΙ PC IBM ΔΕΝ ΧΡΗΣΙΜΟΠΟΙΟΥΝ ΤΟ ΜΗΧΑΝΙΣΜΟ CONNECTOR of CENTRONICS but the ISO 2110 ΠΟΥ ΕΧΟΥΜΕ ΚΑΙ ΣΤΗ V.24

DISPLAY PORT

EPP

EPP= Enchanced Parallel Port. Νεο πρωτόκολλο που εκτελείται στο ήδη υπάρχον χαρντγουερ, πετυχαίνοντας ταχύτητες απο 2 ΜΒytes/sec και προβλέπονται να φθάσουν στα 8 MBytes/sec.
H παλια παράληλη έξοδος έχει ταχύτητα 50/150 ΚΒytes/sec.

G.703

IEEE-488

IEEE488: ΤΥΠΟΠΟΙΗΘΗΚΕ ΓΙΑ ΠΡΩΤΗ ΦΟΡΑ ΤΟ 1975. ΜΕΡΙΚΕΣ ΦΟΡΕΣ ΑΠΟΚΑΛΕΙΤΑΙ GRIB.
ΧΡΗΣΙΜΟΠΟΙΕΙΤΑΙ ΕΥΡΕΩΣ ΣΤΗ ΒΙΟΜΗΧΑΝΙΑ ΓΙΑ ΤΟΝ ΕΛΕΓΧΟ ΣΥΣΚΕΥΩΝ ΚΑΙ ΟΡΓΑΝΩΝ ΑΠΟ ΚΕΝΤΡΙΚΟ ΥΠΟΛΟΓΙΣΤΗ.

port.KEYBOARD

name::
* McsEngl.port.KEYBOARD@cptIt,

Συνδέεται στη θύρα DIN

port.miniDIN

name::
* McsEngl.port.miniDIN@cptIt,

Μπορεί να συνδεθεί πληκτρολόγιο ή ποντίκι.

port.MOUSE

name::
* McsEngl.port.MOUSE@cptIt,

Συνδέονταν σε σειριακή θύρα

port.PARALLEL

name::
* McsEngl.port.PARALLEL@cptIt,
* McsEngl.conceptIt171,
* McsEngl.parallel-port@cptIt,
* McsEngl.parallel'port@cptIt171,
* McsEngl.port.parallel@cptIt171,

DEFINITION

ΧΡΗΣΙΜΟΠΟΙΟΥΝΤΑΙ ΣΕ ΣΥΝΔΕΣΕΙΣ ΜΙΚΡΩΝ ΑΠΟΣΤΑΣΕΩΝ ΑΦΟΥ ΕΙΝΑΙ ΣΑΦΩΣ ΤΑΧΥΤΕΡΕΣ ΤΩΝ ΣΕΙΡΙΑΚΩΝ.

DB-25 Female connector

TRANSFER-RATE#cptIt498#

ΤΑΧΥΤΗΤΑ:
Η παράλληλη μετάδοση κυμαίνεται από 12 kbps μέχρι πάνω από 123 kbps.

port-PCMCIA#cptIt203: attSpe#

SERIAL-PORT

SERIALPORT:
Ο ΛΟΓΟΣ ΤΗΣ ΥΠΑΡΞΗΣ ΔΙΑΦΟΡΕΤΙΚΩΝ ΤΥΠΩΝ ΔΙΑΣΥΝΔΕΣΕΩΝ ΕΙΝΑΙ Η ΑΠΑΙΤΗΣΗ ΓΙΑ ΔΙΑΦΟΡΕΤΙΚΕΣ ΕΠΙΔΟΣΕΙΣ ΣΤΟΝ ΤΟΜΕΑ ΤΗΣ ΤΑΧΥΤΗΤΑΣ, ΣΤΗΝ ΑΝΤΟΧΗ ΣΕ ΘΟΡΥΒΟ ΚΑΙ ΣΤΟ ΘΕΜΑ ΤΗΣ ΑΠΟΣΤΑΣΗΣ.

9pin connector D-type

RS-232#cptIt169: attSpe#

RS-422

RS-423

RS-449

RS-485

RS-530

V.10

name::
* McsEngl.V.10@cptIt,

V.10 of CCITT, ΕΙΝΑΙ ΑΝΤΙΣΤΟΙΧΗ ΤΗΣ
RS-423 of EIA, AND
X.26 of CCITT ΓΙΑ ΨΗΦΙΑΚΑ ΔΙΚΤΥΑ.

ΜΙΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΗ ΕΦΑΡΜΟΓΗ-ΤΗΣ ΕΙΝΑΙ Η ΟΔΗΓΗΣΗ ΠΟΛΛΩΝ ΟΘΟΝΩΝ ΑΠΟ ΕΝΑΝ ΥΠΟΛΟΓΙΣΤΗ ΟΠΩΣ ΓΙΝΕΤΑΙ ΣΤΟ ΧΡΗΜΑΤΙΣΤΗΡΙΟ, ΤΑ ΑΕΡΟΔΡΟΜΙΑ, ΚΛΠ.
ΔΕΝ ΚΑΘΟΡΙΖΕΙ ΤΥΠΟΥΣ ΣΥΝΔΕΤΩΝ, ΟΥΤΕ ΔΙΑΤΑΞΗ ΤΩΝ ΑΚΡΟΔΕΚΤΩΝ.

ΑΠΟΣΤΑΣΗ: 1200 ΜΕΤΡΑ.

ΤΑΧΥΤΗΤΑ: 100.000 bps.

V.11

name::
* McsEngl.V.11@cptIt,

V.24cptIt169: attSpe##

name::
* McsEngl.V.24cptIt169: attSpe@cptIt,

V.28cptIt169: attSpe##

name::
* McsEngl.V.28cptIt169: attSpe@cptIt,

V.35

name::
* McsEngl.V.35@cptIt,

X.20

name::
* McsEngl.X.20@cptIt,

X.20 bis

name::
* McsEngl.X.20 bis@cptIt,

X.21

name::
* McsEngl.X.21@cptIt,

X.21 bis

name::
* McsEngl.X.21 bis@cptIt,

FvMcs.WORM DRIVE

name::
* McsEngl.conceptIt117,
* McsEngl.WORM DRIVE@cptIt,
* McsEngl.FvMcs.WORM DRIVE@cptIt,
* McsEngl.storage'worm@cptIt117,
* McsEngl.WORM-storage@cptIt,
* McsEngl.worm@cptIt117,
* McsEngl.write-once-read-many-drive@cptIt,

ETERIES#ql:[Group optical worm]:IT-COMP.NFO# illp# {optical worm}

SPECIFIC

Specific_concepts (level 3) =


MAXTOR: 1GB, $2300
PANAONIC 940MB W/1F, $2900 (92)

FvMcs.ΜΙΚΡΟΚΥΜΑΤΙΚΕΣ ΖΕΥΞΕΙΣ-Microwave Channel

name::
* McsEngl.conceptIt127,
* McsElln.ΜΙΚΡΟΚΥΜΑΤΙΚΕΣ ΖΕΥΞΕΙΣ-Microwave Channel@cptIt,
* McsEngl.FvMcs.ΜΙΚΡΟΚΥΜΑΤΙΚΕΣ ΖΕΥΞΕΙΣ-Microwave Channel@cptIt,
* McsEngl.microwave-channel@cptIt,
* McsElln.ΜΙΚΡΟΚΥΜΑΤΙΚΕΣ-ΖΕΥΞΕΙΣ@cptIt,

DEFINITION

_DESCRIPTION:

WHOLE'CONCEPT,

PRODUCTS

Αρκετές εταιρείες, όπως η
M/A-Com,
Microwave Networks,
Motorola Microwave
πωλούν ΜΙΚΡΟΚΥΜΑΤΙΚΟΥΣ ΑΣΥΡΜΑΤΟΥΣ που λειτουργούν στα 23 GHz τους οποίους μπορείτε κυριολεκτικά να τοποθετήσετε πάνω σε ένα υπολογιστη.
Αυτά τα προϊόντα μπορούν να καλύψουν αποστάσεις με οπτική επαφή, σε μέγιστο 3/5 μίλια, αλλά μπορούν να παρέχουν ταχύτητα 1,544 mbps, $10.000 περίπου.

ΜΕΙΟΝΕΚΤΗΜΑΤΑ

- ΑΡΚΕΤΑ ΕΥΑΙΣΘΗΤΕΣ ΣΤΗΝ ΚΑΚΟΚΑΙΡΙΑ.
- ΧΡΕΙΑΖΟΝΤΑΙ ΑΝΑΜΕΤΑΔΟΤΕΣ ΓΙΑΤΙ ΠΟΜΠΟΣ ΔΕΚΤΗΣ ΠΡΕΠΕΙ ΝΑ ΕΧΟΥΝ ΟΠΤΙΚΗ ΕΠΑΦΗ.

ΡΥΘΜΟΣ.ΜΕΤΑΔΟΣΗΣ

name::
* McsElln.ΡΥΘΜΟΣ.ΜΕΤΑΔΟΣΗΣ@cptIt,

ΜΠΟΡΕΙ ΝΑ ΦΘΑΣΕΙ ΤΑ 300Mbps.
ΓΙΑ ΤΗΝ ΕΥΡΩΠΗ, ΓΙΑ ΤΙΣ ΨΗΦΙΑΚΕΣ ΕΠΙΚΟΙΝΩΝΙΕΣ ΕΧΟΥΝ ΤΥΠΟΠΟΙΗΘΕΙ ΟΙ ΡΥΘΜΟΙ ΜΕΤΑΔΟΣΗΣ 34, 68, 140, 280 Mbps.

ΣΥΧΝΟΤΗΤΕΣ

ΧΡΗΣΙΜΟΠΟΙΕΙ ΣΥΧΝΟΤΗΤΕΣ 2/40GHz ΑΝ ΚΑΙ ΤΑ ΠΕΡΙΣΣΟΤΕΡΑ ΣΥΣΤΗΜΑΤΑ ΛΕΙΤΟΥΡΓΟΥΝ ΣΤΗΝ ΠΕΡΙΟΧΗ 2/18.

FvMcs.standard-IEEE

name::
* McsEngl.conceptIt129,
* McsEngl.standard-IEEE@cptIt,
* McsEngl.FvMcs.standard-IEEE@cptIt,
* McsEngl.IEEE-STANDARD@cptIt,
* McsEngl.standard.ieee@cptIt129,

DEFINITION

Το 'σύνολο' των IEEE standards,

ADDRESS:
INSTITUTE OF ELECTRICAL AND ELECTRONIC ENGINEERS
345 EAST 47 STREET, NEW YORK, NY 10017
TEL-001-212-705.7900

SUBSET

802:

Προδιαγραφές για φυσικές και ηλεκτρικές συνδέσεις σε ΤΟΠΙΚΑ ΔΙΚΤΥΑ.

802.1

Interface LAN ΜΕ ΤΑ ΑΝΩΤΕΡΑ ΕΠΙΠΕΔΑ.

802.2

Logical link.

802.3

CSMA/CD.
10BaseT. 10 mbps καλωδίωση twisted-pair Ethernet χρησιμοποιώντας τεχνική μεταδοσης baseband. Aυτό το σύστημα απαιτεί ενα συγκεντρωτη καλωδίων.

802.4

token bus

802.5

IBM Token-Ring.

802.6

Metropolitan area network.
DQDB. Προτεινόμενο για μητροπολιτικά δίκτυα.

802.7

broadband ΤΟΠΙΚΑ ΔΙΚΤΥΑ.

802.8

Fiber optic.

802.9

ISDN ΚΑΙ ΕΝΟΠΟΙΗΣΗ ΤΟΠΙΚΩΝ ΔΙΚΤΥΩΝ

802.11

THE WIRELESS LOCAL-AREA NETWORKS STANDARDS WORKING GROUP.
The committee has worked to establish a universal standard, since 1990.

FvMcs.EDI

name::
* McsEngl.conceptIt130,
* McsEngl.EDI@cptIt,
* McsEngl.FvMcs.EDI@cptIt,
* McsEngl.EDI@cptIt,
* McsEngl.edi@cptIt130,
* McsEngl.Electronic-data-interchange@cptIt,
* McsElln.ΗΛΕΚΤΡΟΝΙΚΗ-ΑΝΤΑΛΛΑΓΗ-ΔΕΔΟΜΕΝΩΝ@cptIt,
* McsElln.ΗΛΕΚΤΡΟΝΙΚΗ-ΑΝΤΑΛΛΑΓΗ-ΠΑΡΑΣΤΑΤΙΚΩΝ@cptIt,
* McsElln.ΗΛΕΚΤΡΟΝΙΚΗ-ΑΝΤΑΛΛΑΓΗ-ΠΛΗΡΟΦΟΡΙΩΝ@cptIt,
* McsElln.ΗΛΕΚΤΡΟΝΙΚΗ-ΜΕΤΑΒΙΒΑΣΗ-ΔΕΔΟΜΕΝΩΝ@cptIt,
* McsElln.ΗΛΕΚΤΡΟΝΙΚΗ-ΜΕΤΑΒΙΒΑΣΗ-ΕΜΠΟΡΙΚΩΝ-ΕΓΓΡΑΦΩΝ@cptIt,

DEFINITION

EDI είναι λειτουργια-πληροφοριακων-τεχνολογιων#cptIt246.1# με την οποία μεταβιβάζονται εμπορικά έγγραφα/παραστατικά μεταξυ συναλλασομένων
[hmnSngo.1995-02]

EDI είναι ΠΡΟΤΥΠΟ#cptIt139.1# για ανταλλαγη πληροφοριων κυρίως στις επιχειρήσεις.
[ΝΙΚΟΣ, ΝΟΕΜ. 1994]

Η Ηλεκτρονικη Μεταβίβαση Εμπορικών Εγγράφων, EDI, ορίζεται ως η "αποστολή και λήψη εμπορικών και διοικητικών δεδομένων που έχουν μορφοποιηθεί βάσει προτύπων, μεταξύ συστημάτων υπολογιστών των συναλλασσομένων εταίρων, με την ελάχιστη ανθρώπινη παρέμβαση".
[ΚΑΘΗΜΕΡΙΝΗ, 19 ΦΕΒ. 1995, 43]

EDI είναι η επικοινωνία παραγγελιών, τιμολογίων, και παρόμοιων κινήσεων ηλεκτρονικά μεταξύ οργανισμών.

ΣΤΗΝ ΠΡΑΞΗ, EDI ΕΙΝΑΙ Η ΗΛΕΚΤΡΟΝΙΚΗ ΑΝΤΑΛΛΑΓΗ ΤΥΠΟΠΟΙΗΜΕΝΩΝ ΜΗΝΥΜΑΤΩΝ ΜΕΤΑΞΥ ΕΤΑΙΡIΩΝ ΠΟΥ ΕΧΟΥΝ ΕΜΠΟΡΙΚΕΣ ΣΥΝΑΛΛΑΓΕΣ.
ΕΙΝΑΙ ΓΝΩΣΤΟ ΣΑΝ "ΕΜΠΟΡΙΟ ΧΩΡΙΣ ΕΓΓΡΑΦΑ".

EDI is the electronic transmission of routine business data in machine-readable, standardized formats. It involves the electronic transmission of such documents as invoices, purchase orders and remittance data, thereby reducing paper flow between corporations and suppliers.
[Bank-Management, Jan 1990, 26#cptResource446]

GENERIC

_GENERIC:
function#cptIt246#

resourceInfHmn#cptResource843#

ΔΟΥΚΙΔΗΣ, Γ.Ι., Α. ΦΡΑΓΚΟΠΟΥΛΟΥ, Ι. ΑΝΑΓΝΩΣΤΟΠΟΥΛΟΣ. EDI: Η ΠΛΗΡΟΦΟΡΙΚΗ ΣΤΙΣ ΣΥΓΧΡΟΝΕΣ ΕΠΙΧΕΙΡΗΣΕΙΣ, ΑΘΗΝΑ: Α. ΣΤΑΜΟΥΛΗΣ, 1993.
ΕΡΕΥΝΑ ΤΟΥ ΤΜΗΜΑΤΟΣ ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΟΥ ΠΑΝΕΠΙΣΤΗΜΙΟΥ ΑΘΗΝΩΝ.
[CGO, SEPT 1993, 191]

DIGITAL SIGNATURE

They are long numbers bundled with a file. Only the owner of the signature holds the secret number that allows them to create a signature

DIGITAL TIMESTAMPS

Through a digital notary service.

Surety Technologies (Chatham, NJ) is one company that is planning to develop digital timestamps it has patented.
[BYTE, OCT. 1994, 128]

EVALUATION#cptCore546.107#

ADVANTAGES:
- digital mechanisms can introduce greater levels of security and verification than paper could ever provide.

EVOLUTION#cptCore546.171#

Mastercard sees rise in electronic trade
Mastercard International Inc. executives announced the company will seek to exploit expected growth in electronic commerce and computerized payments during the next few years. Two Mastercard executives said they see 1997 as the year in which electronic commerce via the Internet takes off.
[http://www.cnn.com/DIGEST/, 11 Nov. 1996]

FUNCTIONS vvv

ανταλαγη ΠΑΡΑΣΤΑΤΙΚΩΝ:
- προσφορες
- παραγγελιες,
- τιμολογια
- πιστωτικα
- τιμοκαταλόγους κλπ
που απευθύνονται σε πελάτες ή προέρχονται απο προμηθευτές.

IMPORTANCE#cptCore781#

Η δυνατότητα αυτή είναι στρατηγικής οικονομικής σημασίας και αναμένεται ότι θα καταστεί απαραίτητη στο άμεσο μέλλον σαν εναλλακτική δυνατότητα σε σχέση με τις ταχυδρομικές υπηρεσίες που χρησιμοποιούνται για την ανταλλαγή τέτοιων στοιχείων. Μάλιστα, θεωρείται μια απο τις ΤΡΕΙΣ ΣΗΜΑΝΤΙΚΟΤΕΡΕΣ εφαρμογές στον τομέα της τεχνολογιας πληροφοριών για τη δεκαετία του '90.
[σύν, Μάρτιος 1994, 8]

measure#cptCore88#

The 1990 BAI survey results lead teh conclusion that EDI is a SERVICE in its infancy, But one that is primed to grow.

STANDARD#cptIt139#

ANSI X.12

name::
* McsEngl.ANSI X.12@cptIt,

SHAMROCK

Συνεργασία Adobe systems, EDS, coca cola, ... για τη δημιουργία προτύπου διαχείρισης εγγράφων.
[COMPUTER GO, JUL. 1994, 48]

UN/EDIFACT = ISO 9735

UN/EDIFACT {UNITED NATIONS/EDI FOR ADMINISTRATION, COMMERCE AND TRANSPORT}

An ISO 9735 STANDARD for EDI.

ΤΟ ΣΤΑΝΤΑΡΝΤ ΑΥΤΟ ΥΙΟΘΕΤΗΘΗΚΕ ΔΙΕΘΝΩΣ ΚΑΙ ΕΝΑΙ ΑΥΤΟ ΠΟΥ ΧΡΗΣΙΜΟΠΟΙΕΙΤΑΙ ΣΤΗΝ ΕΥΡΩΠΗ ΚΑΙ ΣΤΗΝ ΑΠΩ ΑΝΑΤΟΛΗ. ΓΙΑ ΤΗΝ ΩΡΑ Η ΣΥΝΕΡΓΑΣΙΑ ΜΕΤΑΞΥ ΤΩΝ ΔΥΟ ΣΤΑΝΤΑΡΝΤ ΔΕΝ ΕΙΝΑΙ ΑΔΥΝΑΤΗ, ΑΛΛΑ ΑΠΑΙΤΕΙΤΑΙ Η ΠΑΡΕΜΒΟΛΗ ΤΟΥ ΔΑΠΑΝΗΡΟΥ ΚΑΙ ΧΡΟΝΟΒΟΡΟΥ ΜΕΤΑΦΡΑΣΤΗ ΓΙΑ ΤΗ ΜΕΤΑΤΡΟΠΗ ΤΩΝ ΔΕΔΟΜΕΝΩΝ.
[RAM, OKT 1993, 159]

Στα πλαίσια του EDIFACT έχουν αναπτυχθεί αρκετά υποσύνολα που χρησιμοποιούνται σε συγκεκριμένους εμπορικούς κλάδους οπως
λιανικό εμπόριο,
μεταφορές,
ασφάλειες,
κλωστοϋφαντουργία και ένδυση,
βιομηχανία, κ.α.
[σύν, Μάρτιος 1994, 9]

COMPANY SPECIFIC-DIVISION

SUPPLY TECH, Inc:
In greece through TCI Telecommunications Ltd, 654.6529

ENVIRONMENT#cptCore756#

ENVIRONMENT: EDI & EMAIL#cptIt102#

name::
* McsEngl.ENVIRONMENT: EDI & EMAIL@cptIt,

Ενα μηνυμα ηλεκτρονικου ταχυδρομείου ΔΕΝ είναι EDI γιατί τα δεδομενα είναι σε ελεύθερη μορφή και δεν είναι ΔΟΜΗΜΕΝΑ, που είναι το κύριο χαρακτηριστικο των EDI μηνημάτων.
[COMPUTER GO, DEC. 1994, 82]

Η κύρια διαφορά του EDI σε σχέση με το ηλεκτρονικό ταχυδρομείο είναι ότι, ενώ μέσω ηλ. ταχυδρομείου μπορούν να ανταλλαγούν μόνο στοιχεία που προορίζονται για ανθρώπινη επεξεργασία, μέσω του EDI οι επιχειρήσεις μπορούν να στέλνουν στοιχεία τα οποία μπορούν να τύχουν ΑΜΕΣΗΣ επεξεργασίας απο τις ΕΜΠΟΡΙΚΕΣ ΕΦΑΡΜΟΓΕΣ που χρησιμοποιούν.
[σύν, Μάρτιος 1994, 8]

SPECIFIC

Specific_concepts (level 3) =

SINGAPORE#cptCore313#

Υλοποιεί με γοργούς ρυθμούς το Interactive TradeNet System, το οποίο θα της επιτρέψει ως το έτος 2000 (οπότε θα έχει ολοκληρωθεί και η καλωδίωση με οπτικές ίνες) να διεξάγει όλο το εμπόριο της χωρίς να διακινεί ούτε ένα φύλλο χαρτιού.
Σύμφωνα με τους εμπνευστές του συστήματος, ο χρόνος ολοκλήρωσης της διαδικασίας ανταλαγών ΔΕΝ θα είναι μεγαλύτερος απο 2-3 λεπτά. Και αξίζει να σημειωθεί ότι με το σημερινό -ηλεκτρονικό επίσης αλλά πιο ... πρωτόγονο σύστημα που κάνει 15-20 λεπτά που βρίσκεται σε χρήση, οι επιχειρήσεις γλιτώνουν περίπου 700 εκατομύρια δολάρια το χρόνο.
[ΚΑΘΗΜΕΡΙΝΗ, 19 ΦΕΒ. 1995, 43]

FvMcs.machine.SCANNER

name::
* McsEngl.conceptIt131,
* McsEngl.machine.SCANNER@cptIt,
* McsEngl.FvMcs.machine.SCANNER@cptIt,
* McsEngl.SCANNER@cptIt,
* McsEngl.scanner@cptIt131,
* McsElln.ΣΑΡΩΤΗΣ@cptIt,

DEFINITION

_DESCRIPTION:

GENERIC

_GENERIC:
* entity.economic.satisfierWorking.techInfo.machine#cptItsoft1.1#
* entity.economic.satisfierWorking.techInfo.hardware#cptItsoft1#

PRICE#cptEconomy541.44#

ΑΝΑΛΥΣΗ

ΔΙΑΣΤΑΣΕΙΣ

ΜΕΓΕΘΟΣ ΕΓΓΡΑΦΟΥ ΠΡΟΣ ΣΑΡΩΣΗ

ΠΡΟΣΑΡΜΟΣΤΗΣ ΔΙΑΦΑΝΕΙΩΝ

ΤΡΟΦΟΔΟΤΗΣ

ΤΥΠΟΣ

Επίπεδος, Χειρός. Κυλίνδρου.

SPECIFIC

Specific_concepts (level 3) =

CANON CLC-10

CANON CLC-10, ΕΚΤΥΠΩΝΕΙ, ΣΑΡΩΝΕΙ, ΦΩΤΟΑΝΤΙΓΡΑΦΕΙ ΕΓΡΩΜΑ. INFORMA ΣΥΓΓΡΟΥ 36..

HP

30/12/2001
Νέοι ScanJets από την Hewlett-Packard

Η Hewlett-Packard παρουσίασε πρόσφατα πέντε νέους scanners για οικιακή χρήση και μικρά γραφεία.

Τα νέα μοντέλα 4400c/4470c και 5400c/5470c/ 5490c ενσωματώνουν την τεχνολογία σάρωσης της HP που μέχρι τώρα ήταν διαθέσιμη μόνο στους υψηλότερου κόστους επαγγελματικούς scanner HP.

Τα νέα μοντέλα της HP διαθέτουν διπλό αισθητήρα CCD, τον ένα με ανάλυση μέχρι 2.400dpi για σάρωση μικρών λεπτομερειών, ενώ τον δεύτερο με 600dpi, για καθημερινή γρήγορη σάρωση (οκτώ δευτερόλεπτα). Ανάμεσα στα νέα χαρακτηριστικά των scanners είναι η δυνατότητα ''σάρωσης σε CD'' που επιτρέπει την αποθήκευση των ψηφιοποιημένων εικόνων σε CD, καθώς και το ενσωματωμένο ''πλήκτρο επανεκτύπωσης φωτογραφιών'' που επιτρέπει την εύκολη τοποθέτηση περισσοτέρων της μιας φωτογραφιών διαφορετικών μεγεθών σε μια σελίδα.

Χαρακτηριστικά:
ScanJet 4400c και 4470c
Διπλός Αισθητήρας CCD: αισθητήρας 1200/300dpi με βάθος χρώματος 48-bit. 1200dpi για σάρωση και μεγέθυνση φωτογραφιών υψηλής ανάλυσης, αρνητικών και 35mm. Αισθητήρας 300dpi για γρήγορη σάρωση υψηλής ποιότητας φωτογραφιών και εγγράφων χαμηλότερης ανάλυσης. Δυνατότητα γρήγορης δημιουργίας έγχρωμων ή ασπρόμαυρων αντιγράφων, σε συνδυασμό με οποιονδήποτε τύπο εκτυπωτή Προεπισκόπηση σάρωσης σε 13 δευτερόλεπτα Φωτεινός προσαρμογέας για τη σάρωση αρνητικών και slides 35mm (συμπεριλαμβάνεται με τον HP ScanJet 4470c και διατίθεται προαιρετικά με τον HP ScanJet 4400c).

ΕΠΙΤΡΑΠΕΖΙΟΣ

ΧΕΙΡΟΣ

ΑΣΠΡΟΜΑΥΡΟΣ

ΕΓΧΡΩΜΟΣ

EPSON
** EPSON GT-8000 450000 ΔΡΧ (1.1994)

HP
** SCANJET IIP 280000 ΔΡΧ HP (1.1994)

MICROTEK
** ScanMaker IIsp GRD.70000 drx + fpa may 1994.

FvMcs.HELLASCOM

name::
* McsEngl.conceptIt132,
* McsEngl.HELLASCOM@cptIt,
* McsEngl.FvMcs.HELLASCOM@cptIt,
* McsEngl.HELLASCOM@cptIt,
* McsEngl.hellascom@cptIt132,

DEFINITION

Είναι προηγμενο ΨΗΦΙΑΚΟ δικτυο του ΟΤΕ για δεδομένα και φωνή.

GENERIC

_GENERIC:
public data network#cptIt37#

CHANNELS

1000 κυκλώματα.

CHARGE

- τέλος σύνδεσης-αποσύνδεσης ανά άκρο
- βασικό μηνιαίο τελος ανάλογα με την ταχύτητα
- μηνιαίο μισθωμα ανάλογα με την αποσταση, ταχύτητα και διάρκεια χρησιμοποίησης του κυκλώματος
- τελη για ειδικές υπηρεσίες.

Για παράδειγμα μια σύνδεση Αθήνα - Θεσσαλονίκη με σταθερή ζεύξη κοστιζει περιπου 330000 δρχ ανα μήνα.
[TELECOM, OCT. 1994, 43]

EVOLUTION#cptCore546.171#

BEGINING: March 1994.

INFORMATION

Τηλ. 611.8992, 611.8194

SPEED

2.4, 4.8, 19.2, 64Kbps, Nx64 until 2.048Mbps

FvMcs.UNIX MAIL

name::
* McsEngl.conceptIt137,
* McsEngl.UNIX MAIL@cptIt,
* McsEngl.FvMcs.UNIX MAIL@cptIt,
* McsEngl.UNIX-MAIL@cptIt,
* McsEngl.unix'mail@cptIt137,

uuname= produces a list of all the computers your computer knows about.

write= carry on a "conversation" with another user.
mesg n= messages off.

mailx mailer
elm mailer
Berkeley
MH
NMail
PMX/TERM
fmail

FvMcs.OPEN SYSTEM

name::
* McsEngl.conceptIt138,
* McsEngl.OPEN SYSTEM@cptIt,
* McsEngl.FvMcs.OPEN SYSTEM@cptIt,
* McsEngl.open-system@cptIt,
* McsElln.ΑΝΟΙΚΤΟ-ΣΥΣΤΗΜΑ@cptIt,

GENERIC

_GENERIC:
info-tech.PROCESSING#cptIt245#

BENEFITS

1. Greater freedom of choice.
2. Easier integration.
3. Lower training costs.
4. Lower software development costs.
5. A large market for software vendors.
6. Longer product life.

Doing#cptCore475#

* information-processing-function#cptItsoft444#

FvMcs.WORKSTATION

name::
* McsEngl.conceptIt146,
* McsEngl.WORKSTATION@cptIt,
* McsEngl.FvMcs.WORKSTATION@cptIt,
* McsEngl.workstation@cptIt146,

DEFINITION

Workstations are DESKTOP COMPUTERS, often with massive processing capacities, that are connected by networks to larger computers.

GENERIC

_GENERIC:
MIDDLE COMPUTER#cptIt122#

SPECIFIC

Specific_concepts (level 3) =

SILICON GRAPHICS

INDIGO 2 EXTREME: ΥΠΟΣΤΗΡΙΖΕΙ ΟΤΙ ΠΡΟΣΦΕΡΕΙ ΤΗΝ ΥΨΗΛΟΤΕΡΗ ΑΠΟΔΟΣΗ ΚΑΙ ΤΑ ΠΙΟ ΙΣΧΥΡΑ ΓΡΑΦΙΚΑ ΠΟΥ ΜΠΟΡΟΥΝ ΝΑ ΣΥΝΑΤΗΘΟΥΝ ΣΕ DESKTOP SYSTEM.
[COMPUTER ΓΟ, ΜΑΡΤ 1993, 17]

FvMcs.CDROM TITLE

name::
* McsEngl.conceptIt147,
* McsEngl.CDROM TITLE@cptIt,
* McsEngl.FvMcs.CDROM TITLE@cptIt,
* McsEngl.CD'ROM@cptIt,
* McsEngl.CDROM-TITLE@cptIt,
* McsEngl.cdrom'title@cptIt147,
* McsEngl.software.cdromtitle@cptIt147,

DEFINITION

CDROM TITLES are SOFTWARE#cptIt64.1# published/STORED on CDROM disk.

GENERIC

_GENERIC:
SOFTWARE#cptIt64#

resourceInfHmn#cptResource843#

CD'ROM Market Place 1991: An international Place. Connecticat: Meckler.

Elshami, Ahmed M. CD'ROM Technology for Information Managers. Chicago:American Library Association, 1990.

Lambert,St., and Suzanne Ropiequet. (ed) CD'ROM: The New Papyrus: The Current and Future State of the Art. Redmond,Wash.:Microsoft, 1986.

CDROM-DRIVE#cptIt265#

ognCompany#cptEconomy7#

COMPANIES-selling-titles#ql:[Level ATTRIBUTE:atr function cdrom'title ]## ent.eteries: cdrom'title#

EVOLUTION#cptCore546.171#

1985    First products.
1986    90 titles.
1987    260 titles.
1988    over 500 titles.

measure#cptCore88#

1993 ΙΑΝΟ-ΟΚΤΩ: 4.000.000 τιτλοι, 100 εκ. δολ.
[MULTIMEDIA $ CD ROM (CGO), MAR 1994, 31]

CDROM PUBLISHERS

Euro-CD:
ΠΑΝΕΡΩΠΑΙΚΟ ΔΙΚΤΥΟ ΔΙΑΘΕΣΗΣ, ΚΥΜ ΕΠΕ ΑΝΤΙΠΡΟΣΩΠΟΣ

KYM ΕΠΕ:
Δεσπεραί 15, 031-2212248
αντιπροσωπος της euro-cd της μεγαλύτερης αντιπροσώπου CD'ROM title.

Elimia Marc
TEI of Kozani
Kozani
50100 Greece
Fax:30-461-39682
Executive, DP Mgez

Optical Systems, Ltd.
9 Tharypou Str.
Athens
117 45 Greece
Tel: 01-9028757
Fax: 01-9231282
John Georgacopoulos
CD'ROM publishishing program: distributor

TEI of Kozani, (KIIA, Kozani 50100 Greece)
SIGMA SA/L
Sofon 27th floor
Thessaloniki
54625 Greece
Tel: 0030-31-5455158
Fax:0030-461-39682
Dimitris Zisos

SPECIFIC

Specific_concepts (level 3) =

H ταξινόμηση, ΕΚΤΟΣ ΑΠΟ CDROM, είναι η ίδια με την ταξινόμηση προγραμμάτων.


PROGRAMS/TITLES#ql:[Field program:cdrom]# {|4| CDROM}
FAMILY DOCTOR, $150, Tigersoftware xq8830
Microsoft works for windows, βοήθεια με ηχο και κινούμενο σχέδιο.
MM LOTUS, Lotus
MULTIMEDIA BEETHOVEN, microsoft
MULTIMEDIA ENCYCLOPEDIA for windows, compton's New Media.
OXFORD ENGLISH DICTIONARY 2nd ed WIN, $850 p495, UK 44-865-267979
WORLD ATLAS, $160, Tigersoftware XQ8540
ΤΡΑΠΕΖΑ ΠΛΗΡΟΦΟΡΙΩΝ ΕΠΑΓΓΕΛΜΑΤΙΩΝ, MULTIMEDIA PUBLISHING LTD 031-229822

FvMcs.IRQ

name::
* McsEngl.conceptIt151,
* McsEngl.IRQ@cptIt,
* McsEngl.FvMcs.IRQ@cptIt,
* McsEngl.IRQ@cptIt,
* McsEngl.irq@cptIt151,
* McsElln.ΑΙΤΗΣΗ-ΔΙΑΚΟΠΗΣ-ΣΥΣΤΗΜΑΤΟΣ@cptIt,

DEFINITION

Generally, the modem cannot share an IRQ setting with a mouse, or any other device that has software that stays resident.

ΜΕΣΩ ΤΟΥ ΑΡΙΘΜΟΥ ΕΝΟΣ interrupt ΜΠΟΡΕΙ ΜΙΑ ΣΥΣΚΕΥΗ ΝΑ ΔΩΣΕΙ ΤΗΝ ΤΑΥΤΟΤΗΤΑ ΤΗΣ ΣΤΟΝ ΕΠΕΞΕΡΓΑΣΤΗ ΓΙΑ ΝΑ ΖΗΤΗΣΕΙ ΤΗΝ ΠΡΟΣΟΧΗ ΤΟΥ.

FvMcs.HUB

name::
* McsEngl.conceptIt153,
* McsEngl.HUB@cptIt,
* McsEngl.FvMcs.HUB@cptIt,
* McsEngl.hub@cptIt153,

DEFINITION

A hub is a distribution, hardware device used in certain network topologies to perform special functions with the transmission signals. There are two types of network hubs, active and passive.
An active hub is used to amplify and condition the transmission signals while allowing for additional workstation ports to be added. Active hubs have between four and 64 ports.
A passive hub, often with just 4 ports, is also used to split a transmission signal so that additional workstations can be added, but a passive hub cannot amplify the signal. Passive hubs must therefore be connected directly to a workstation or an active hub.
Local Area Networks using ARCnet topology have active and passive hubs attached to achieve a maximum cabling distance of 20,000 feet from any node on the network to any other node.
[SOURCE: PC-GLOSSARY 1993]

FvMcs.standard CD-I

name::
* McsEngl.conceptIt155,
* McsEngl.standard CD-I@cptIt,
* McsEngl.FvMcs.standard CD-I@cptIt,
* McsEngl.cd-i@cptIt,
* McsEngl.cd-interactive@cptIt,
* McsEngl.cd'i@cptIt155,

DEFINITION

Developed by Philips as a standard for data compression and recording. It uses proprietary algorithms for still images, complex graphics, and run-length coding for simple graphics. One CD-I disk holds 650 MB of information, sufficient for either one hour of stereo digital audio or one hour of full-screen video.

APPLICATION#cptIt97#

100 ΔΙΣΚΟΙ ΗΔΗ, ΜΕΡΙΚΟΙ ΕΛΛΗΝΙΚΑ, 7.000/13.000 ΔΡΧ [ΙΟΥΝ 1993]

DISK CREATION

ΥΠΑΡΧΕΙ ΕΝΑ ΦΟΡΗΤΟ, ΕΝΑ ΕΠΙΤΡΑΠΕΖΙΟ (170.000), ΚΑΙ ΕΠΑΓΓΕΛΜΑΤΙΚΟ. [ΙΟΥΝ 1993]

CDI 220: HOME SYSTEM

FvMcs.DVI

name::
* McsEngl.conceptIt156,
* McsEngl.DVI@cptIt,
* McsEngl.FvMcs.DVI@cptIt,
* McsEngl.DVI@cptIt,
* McsEngl.dvi@cptIt156,

A programmable chip-set developed by Intel that compresses, decompresses, and displays image data.

FvMcs.JPEG

name::
* McsEngl.conceptIt157,
* McsEngl.JPEG@cptIt,
* McsEngl.FvMcs.JPEG@cptIt,
* McsEngl.JPEG@cptIt,
* McsEngl.jpeg@cptIt157,
* McsEngl.joint-photographic-experts-group@cptIt,

JOINT PHOTOGRAPHIC EXPERTS GROUP. It is a compression standard for still images, developed by the ISO.

FvMcs.MIDI-PORT

name::
* McsEngl.conceptIt158,
* McsEngl.MIDI-PORT@cptIt,
* McsEngl.FvMcs.MIDI-PORT@cptIt,
* McsEngl.MIDI-PORT@cptIt,
* McsEngl.midi'port@cptIt158,
* McsEngl.musical-instrument-digital-interface@cptIt,
* McsElln.ΨΗΦΙΑΚΟ-interface-ΜΟΥΣΙΚΩΝ-ΟΡΓΑΝΩΝ@cptIt,

DEFINITION

Ειδικό interface που αναλαμβάνει την αναμεταξύ τους σύνδεση μουσικών οργάνων υψηλής ποιότητας. Σχεδόν όλες οι κάρτεσ ήχου ενσωματώνουν ένα που χρησιμοποιείται είτε για τη σύνδεση με joystick είτε για τη σύνδεση με synthesizer. Εαν θέλετε να ασχοληθείτε επαγγελματικά με τη μουσική, θα είναι ο πρώτος όρος που θα συναντήσετε μπροστά σας.
[ΚΟΜΠΙΟΥΤΕΡ ΓΟ, ΑΠΡ. 1996, 183]

MIDI is an international STANDARD developed for digital music. The midi standard determines the cabling and hardware and communications protocol needed to transfer information, or music, between electronic musical instruments or recording equipment and a computer.
[Multimedia mania, 485]

An industry standard connection for computer control of musical instruments and devices.

MIDI-DATA#cptIt551#

FvMcs.MPEG

name::
* McsEngl.conceptIt159,
* McsEngl.MPEG@cptIt,
* McsEngl.FvMcs.MPEG@cptIt,
* McsEngl.MPEG@cptIt,
* McsEngl.mpeg@cptIt159,
* McsEngl.motion-picture-expert-group@cptIt,

DEFINITION

MPEG is the "Moving Picture Experts Group", working under the joint direction of the International Standards Organization (ISO) and the International Electro-Technical Commission (IEC). This group works on standards for the coding of moving pictures and associated audio.

MOTION PICTURE EXPERT GROUP:
A standard developed by ISO, compresses video images using interframe motion compression, DCT, and audio compression technifques. The objective of this standard is to get a compressed data rate of about 1.2 Mbps to 1.8 Mbps, about the same a the data transfer rates for CD'ROM devices. To make MPEG suitable for broadcast type video, only 15 frames are linked by interframe compression.

Σε γενικές γραμμές, το πρότυπο MPEG ακολουθεί ασύμμετρους αλγορίθμους συμπίεσης (ο χρόνος για τη συμπίεση είναι πολύ μεγαλύτερος απο το χρονο αποσυμπίεσης) και το αποσυμπιεσμένο σήμα δεν είναι το ίδιο με το πρωτότυπο (lossy compression), χαρακτηριστικό που καθιστά άχρηστο το πρότυπο σε εφαρμογές όπως όραση με υπολογιστή.
[MULTIMEDIA & CD ROM (CGO), MART 1994, 7]

WHOLE

_WHOLE:
* Video Technology#cptIt509#

SPECIFIC

Specific_concepts (level 3) =

VIDEO-FORMAT#ql:mpeg.videoformat#

AUDIO FORMAT

MPEG-4

name::
* McsEngl.MPEG@cptIt4@cptIt159i,

_DEFINITION:
MPEG-4: "Very Low Bitrate Audio-Visual Coding" Status: Call for Proposals first deadline 1. 10. 95
[Fraunhofer Institut fur integrierte Schaltungen last update 5. September 1995 ]

1998:
Το mpeg forum εξέδωσε τις ανοιχτές προδιαγραφές ενός νέου codec για βίντεο, ονόματι mpeg-4. Ήταν ένα έξυπνο σύστημα συμπίεσης, κατάλληλο για μετάδοση ποιοτικού βίντεο στο ιντερνέτ σε πραγματικό χρόνο (STEAMING VIDEO) και όχι μόνο.
[RAM 148 ΙΟΥΝΙΟΣ 2001, 100]

MPEG-3

name::
* McsEngl.MPEG@cptIt3@cptIt159i,

_DEFINITION:
MPEG-3: does no longer exist (has been merged into MPEG-2)
[Fraunhofer Institut fur integrierte Schaltungen last update 5. September 1995 ]

MPEG-2

name::
* McsEngl.MPEG@cptIt2@cptIt159i,

_DEFINITION:
"Generic Coding of Moving Pictures and Associated Audio"
Status: International Standard IS-13818, completed in 11.94
[Fraunhofer Institut fur integrierte Schaltungen last update 5. September 1995 ]

DVD use this format for movies.

Βρίσκεται στα τελευταία στάδια και θα έχει τυπική ανάλυση 768χ560 σημεία (PAL).
[MULTIMEDIA & CD ROM (CGO), MART 1994, 7]

MPEG-1

name::
* McsEngl.MPEG@cptIt1@cptIt159i,

_DEFINITION:
"Coding of Moving Pictures and Associated Audio for Digital Storage Media at up to about 1.5 MBit/s"
Status: International Standard IS-11172, completed in 10.92
[Fraunhofer Institut fur integrierte Schaltungen last update 5. September 1995 ]

MP3#ql:mp3-550i#

FvMcs.RS-232

name::
* McsEngl.conceptIt169,
* McsEngl.RS-232@cptIt,
* McsEngl.FvMcs.RS-232@cptIt,
* McsEngl.V.24-(CCITT)@cptIt,
* McsEngl.RS@cptIt232,
* McsEngl.RS@cptIt232-C,
* McsEngl.EIA@cptIt232-D, (jan 1987; αντικαθιστα RS@cptIt232-C ME ενσωματωση του ISO 2110)
* McsEngl.D-connector-25-pin@cptIt,
* McsEngl.ISO2110@cptIt,

DEFINITION

Χρησιμοποιείται για σειριακές πόρτες.

Είναι ενα ηλεκτρικό στάνταρ από την Electrical Industries Association.

Ειναι το ίδιο με το CCITT V.24.

ΤΙΣ ΣΤΑΘΜΕΣ ΤΩΝ ΤΑΣΕΩΝ ΤΗΣ V.24 ΚΑΘΟΡΙΖΕΙ Η V.28 ΤΥΠΟΠΟΙΗΣΗ ΤΗΣ CCITT ΠΟΥ ΑΝΑΦΕΡΕΤΑΙ ΑΝΑΛΥΤΙΚΑ ΣΤΑ ΗΛΕΚΤΡΙΚΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ.

ΕΙΝΑΙ ΤΥΠΟΠΟΙΗΣΗ ΓΙΑ point to point ΣΥΝΔΕΣΕΙΣ.

Introduced in August of 1969 by the Electronic Industries Assoc., the RS-232 interface standard provides an electrical description for connecting peripheral devices to computers.

Although the standard specifies a 25-pin connector, not all RS-232 devices use them. For example, the IBM PC/AT uses a 9-pin connector.

The RS-232 standard defines two types of interfaces, Data Terminal Equipment (DTE), and Data Communication Equipment (DCE).
Personal computers are almost always configured as DTE devices while a device like a modem or mouse is typically configured as a DCE device.

When connecting two like devices, DTE to DTE or DCE to DCE, you must use a null modem cable or modem-eliminator adapter.
[SOURCE: PC-GLOSSARY 1993]

Distance#cptCore978.4#

ΘΕΩΡΗΤΙΚΑ ΕΧΕΙ ΠΕΡΙΟΡΙΣΜΟ ΤΑ 15 ΜΕΤΡΑ ΜΕΓΙΣΤΗ ΑΠΟΣΤΑΣΗ

SPEED

ΤΑΧΥΤΗΤΑ 19.200 bps.
ΕΝΙΟΤΕ ΚΑΙ ΜΕΧΡΙ 38.000 bps.

USES

ΧΡΗΣΙΜΟΠΟΙΕΙΤΑΙ ΣΥΝΗΘΩΣ ΓΙΑ ΣΥΝΔΕΣΕΙΣ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ MODEM. MIA ΠΑΡΑΛΛΑΓΗ-ΤΗΣ ΧΡΗΣΙΜΟΠΟΙΕΙΤΑΙ ΓΙΑ ΤΟΠΙΚΕΣ ΣΥΝΔΕΣΕΙΣ ΜΕΤΑΞΥ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ ΤΕΡΜΑΤΙΚΩΝ ή ΑΛΛΩΝ ΣΕΙΡΙΑΚΩΝ ΠΕΡΙΦΕΡΕΙΑΚΩΝ ΣΥΣΚΕΥΩΝ.

ΜΕ ΕΙΔΙΚΕΣ ΤΡΟΠΟΠΟΙΗΣΕΙΣ ΚΑΛΩΔΙΟΥ ΜΠΟΡΕΙ ΝΑ ΧΡΗΣΙΜΟΠΟΙΗΘΕΙ ΓΙΑ ΧΡΗΣΗ ΔΥΟ DTE. (NULL MODEM CONNECTION)

FvMcs.RS-422

name::
* McsEngl.conceptIt170,
* McsEngl.RS-422@cptIt,
* McsEngl.FvMcs.RS-422@cptIt,
* McsEngl.RS@cptIt422,
* McsEngl.RS@cptIt422@cptIt170code,


ΤΑΧΥΤΗΤΑ: 38.400 bps.

Ενα EIA στάνταρ που χρησιμοποιείται σε δυαδικές, σειριακές συγχρονες, ή ασύγχρονες επικοινωνίες.

FvMcs.RAID

name::
* McsEngl.conceptIt172,
* McsEngl.RAID@cptIt,
* McsEngl.FvMcs.RAID@cptIt,
* McsEngl.RAID@cptIt,
* McsEngl.raid@cptIt172,
* McsEngl.REDUNDAT-ARRAYS-of-INEXPENSIVE-DISKS@cptIt,
* McsElln.ΠΛΕΟΝΑΖΟΥΣΕΣ-ΟΜΑΔΕΣ-ΦΘΗΝΩΝ-ΔΙΣΚΩΝ@cptIt,
* McsElln.ΥΠΕΡΕΠΑΡΚΗΣ-ΣΥΣΤΟΙΧΙΑ-ΦΘΗΝΩΝ-ΔΙΣΚΩΝ@cptIt,

DEFINITION

ΕΝΑ ΣΥΣΤΗΜΑ ΑΠΟ ΦΘΗΝΟΥΣ ΣΚΛΗΡΟΥΣ ΔΙΣΚΟΥΣ ΚΛΑΣΗΣ PC, ΠΟΥ ΣΥΝΔΕΟΝΤΑΙ ΜΕ ΤΑ ΚΑΤΑΛΛΗΛΑ ΚΥΚΛΩΜΑΤΑ ΣΥΓΧΡΟΝΙΣΜΟΥ ΚΑΙ ΕΛΕΓΧΟΥ, ΕΤΣΙ ΩΣΤΕ ΝΑ ΑΝΤΙΜΕΤΩΠΙΖΟΝΤΑΙ ΣΑΝ ΜΙΑ ΕΝΙΑΙΑ ΣΥΣΚΕΥΗ ΑΠΟΘΗΚΕΥΣΗΣ.

Η ΠΛΕΟΝΑΖΟΥΣΑ ΠΛΗΡΟΦΟΡΙΑ ΕΙΝΑΙ ΑΟΡΑΤΗ ΑΠΟ ΤΟΝ ΥΠΟΛΟΓΙΣΤΗ.

EVOLUTION#cptCore546.171#

ΤΕΧΝΙΚΕΣ RAID ΑΡΧΙΣΑΝ ΝΑ ΧΡΗΣΙΜΟΠΟΙΟΥΝΤΑΙ ΣΕ ΜΕΓΑΛΑ ΥΠΟΛΟΓΙΣΤΙΚΑ ΣΥΣΤΗΜΑΤΑ ΣΤΗ ΔΕΚΑΕΤΙΑ ΤΟΥ '80 ΚΑΙ ΑΡΧΙΣΑΝ, ΤΕΛΕΥΤΑΙΑ, ΝΑ ΜΕΤΑΦΕΡΟΝΤΑΙ ΚΑΙ ΣΕ ΜΙΚΡΟΤΕΡΑ ΣΥΣΤΗΜΑΤΑ, ΚΑΘΩΣ ΑΥΤΑ ΚΑΛΟΥΝΤΑΙ ΝΑ ΑΝΤΙΚΑΤΑΣΤΗΣΟΥΝ ΤΑ MAINFRAMES.
[RAM, OKT 1993, 142]

FvMcs.CODEC

_CREATED: {2007-12-21}

name::
* McsEngl.conceptIt174,
* McsEngl.CODEC@cptIt,
* McsEngl.FvMcs.CODEC@cptIt,
* McsEngl.codec@cptIt174,

DEFINITION

A codec is a device or program capable of performing encoding and decoding on a digital data stream or signal. The word codec may be a combination of any of the following: 'Compressor-Decompressor', 'Coder-Decoder', or 'Compression/Decompression algorithm'.
[http://en.wikipedia.org/wiki/Codecs]

codec.AUDIO#ql:audio'codec-*#

FvMcs.standard-APPC

name::
* McsEngl.conceptIt176,
* McsEngl.standard-APPC@cptIt,
* McsEngl.FvMcs.standard-APPC@cptIt,
* McsEngl.appc@cptIt176,
* McsEngl.advanced-program-to-program-communications@cptIt,

ADVANCED PROGRAM to PROGRAM COMMUNICATIONS: Είναι ένα πρωτόκολλο μεσα στο SNA of IBM, που δημιουργεί τις συνθήκες που δίνουν τη δυνατότητα σε προγραμματα να επικοινωνούν μέσα στο δίκτυο.

FvMcs.SAA

name::
* McsEngl.conceptIt177,
* McsEngl.SAA@cptIt,
* McsEngl.FvMcs.SAA@cptIt,
* McsEngl.saa@cptIt177,
* McsEngl.systems-application-architecture@cptIt,

DEFINITION

SYSTEMS APPLICATION ARCHITECTURE: Περιγραφει τον τρόπο επικοινωνίας με το χρήστη προγραμμάτων εφαρμογών, στάνταρ για την οθόνη και το πληκτρολόγιο, και πρωτόκολλα που ελεγχουν τις επικοινωνίες στα λειτουργικα συστήματα και σε πρωτόκολλα όπως το APPC.

FvMcs.standard-DISTRIBUTED-QUEUE-DUAL-BAS

name::
* McsEngl.conceptIt178,
* McsEngl.standard-DISTRIBUTED-QUEUE-DUAL-BAS@cptIt,
* McsEngl.FvMcs.standard-DISTRIBUTED-QUEUE-DUAL-BAS@cptIt,
* McsEngl.dqdb@cptIt,
* McsEngl.distributed-queue-dual-bus@cptIt,

DEFINITION

DISTRIBUTED QUEUE DUAL BUS: Ενα προτεινόμενο IEEE 802.6 στάνταρ για μητροπολιτικα δίκτυα.

FvMcs.hardware.CONTROLLER

name::
* McsEngl.conceptIt179,
* McsEngl.hardware.CONTROLLER@cptIt,
* McsEngl.FvMcs.hardware.CONTROLLER@cptIt,
* McsEngl.CONTROLLER@cptIt,
* McsEngl.controller@cptIt179,
* McsEngl.interface@cptIt,
* McsElln.ΕΛΕΓΚΤΗΣ@cptIt,

DEFINITION

In computing and especially in computer hardware, controller is a chip, an expansion card, or a stand-alone device that interfaces with a peripheral device. This may be a link between two parts of a computer (for example a memory controller that manages access to memory for the computer) or a controller on an external device that manages the operation of (and connection with) that device.

The term is sometimes used in the opposite sense to refer to a device by which the user controls the operation of the computer, as in game controller.

In desktop computers the controller may be a plug in board, a single integrated circuit on the motherboard, or an external device. In mainframes the controller is usually either a separate device attached to a channel or integrated into the peripheral.
[http://en.wikipedia.org/wiki/Controller_(computing)]

ΕΛΕΓΚΤΗΣ. ΗΛΕΚΤΡΟΝΙΚΑ ΚΥΚΛΩΜΑΤΑ ΠΟΥ ΕΠΙΤΡΕΠΟΥΝ ΤΗΝ ΕΠΙΚΟΙΝΩΝΙΑ ΜΕΤΑΞΥ ΤΗΣ ΜΟΝΑΔΑΣ ΕΠΕΞΕΡΓΑΣΙΑΣ ΚΑΙ ΜΙΑΣ ΠΕΡΙΦΕΡΕΙΑΚΗΣ ΜΟΝΑΔΑΣ.
[ΚΟΙΛΙΑΣ, 1993, 255#cptResource468]

ΕΙΔΙΚΗ ΣΥΣΚΕΥΗ, ΠΟΥ ΘΕΤΕΙ ΣΕ ΛΕΙΤΟΥΡΓΙΑ ΚΑΠΟΙΑ ΠΕΡΙΦΕΡΕΙΑΚΗ ΜΟΝΑΔΑ, ΟΠΩΣ ΟΘΟΝΗ, ΕΚΤΥΠΩΤΗ, ή ΟΔΗΓΟ ΔΙΣΚΩΝ.

controller.IDE

name::
* McsEngl.controller.IDE@cptIt,
* McsEngl.ide-controller@cptIt,
* McsEngl.Integrated-Drive-Electronics@cptIt,

IDE DISKS:
ΠΛΕΟΝΕΚΤΗΜΑΤΟΥΣ ΕΙΝΑΙ Η ΕΥΚΟΛΙΑ ΜΕ ΤΗΝ ΟΠΟΙΑ ΔΗΛΩΝΟΝΤΑΙ ΣΤΟ ΣΥΣΤΗΜΑ.
ΠΡΩΤΑ ΒΙΔΩΝΟΝΤΑΙ ΣΤΟ ΦΑΤΝΙΟ.
ΜΕΤΑ ΣΥΝΔΕΟΥΜΕ ΜΕ ΤΟ ΕΙΔΙΚΟ ΚΑΛΩΔΙΟ-ΤΑΙΝΙΑ ΔΙΣΚΟΥ ΜΕ ΤΟΝ ΕΛΕΓΚΤΗ, ΜΕ ΤΗ ΣΩΣΤΗ ΠΟΛΙΚΟΤΗΤΑ (ΤΟ ΚΟΚΚΙΝΟ ΚΑΛΩΔΙΑΚΙ ΣΤΗΝ ΑΚΙΔΑ 1 ΤΟΥ ΕΛΕΓΚΤΗ ΚΑΙ ΤΗΝ 1 ΤΟΥ ΔΙΣΚΟΥ).
ΒΕΒΑΙΩΝΟΜΑΣΤΕ ΟΤΙ Ο ΕΛΕΓΚΤΗΣ ΕΙΝΑΙ ΕΝΕΡΓΟΠΟΙΗΜΕΝΟΣ (ΓΙΑΤΙ ΣΥΝΗΘΩΣ ΒΡΙΣΚΕΤΑΙ ΣΕ ΜΙΑ ΚΑΡΤΑ ΠΟΛΛΑΠΛΩΝ ΛΕΙΤΟΥΡΓΙΩΝ, ΠΟΥ ΔΙΑΘΕΤΕΙ ΚΑΙ ΚΥΚΛΩΜΑΤΑ ΘΥΡΩΝ ΣΕΙΡΑΣ ΚΑΙ ΠΑΡΑΛΛΗΛΙΑΣ ΚΑΙ ΠΑΙΧΝΙΔΙΩΝ ΚΑΙ ΤΟΝ ΕΛΕΓΚΤΗ ΔΙΣΚΕΤΩΝ) ΚΑΙ ΜΕΤΑ ΔΗΛΩΝΟΥΜΕ ΣΤΟ BIOS ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ ΤΟΝ ΑΡΙΘΜΟ ΚΥΛΙΝΡΩΝ, ΚΕΦΑΛΩΝ ΚΑΙ ΤΟΜΕΩΝ, ΣΥΜΦΩΝΑ ΜΕ ΤΟΝ ΚΑΤΑΣΚΕΥΑΣΤΗ. ΜΕΤΑ ΤΡΕΧΟΥΜΕ ΤΟ FDISK.
[RAM, OKT 1993, 126]

ENCHANCE IDE:
αποδίδουν διπλάσια ταχύτητα από το στάνταρντ.

controller.SCSI

name::
* McsEngl.controller.SCSI@cptIt,
* McsEngl.scsi-controller@cptIt,

_DESCRIPTION:
Small Computer System Interface is a standard developed by Shugart Associates and approved by ANSI in 1986. The parallel SCSI (pronounced scuzzy) permits faster data transfer than is possible under the common serial ST506 interface used for most PC-compatible hard disks. SCSI uses a 50-pin connector and permits multiple devices (up to seven disk drives and/or tape drives) to be connected in daisy chain fashion.
With a SCSI port, parallel data transfer occurs at speeds averaging up to 4 megabytes per second.
A former name for SCSI was SASI (Shugart Associates System Interface)
The SCSI-2 bus became available in the early 1990's.
[SOURCE: PC-GLOSSARY 1993]
===
SCSI (ΣΚΑΖΙ) ΔΙΣΚΟΙ ΠΡΟΟΡΙΖΟΝΤΑΙ ΠΕΡΙΣΣΟΤΕΡΟ ΓΙΑ ΕΞΥΠΗΡΕΤΗΤΕΣ ΔΙΚΤΥΟΥ, ΟΠΟΥ ΧΡΕΙΑΖΟΝΤΑΙ ΠΟΛΛΟΙ ΚΑΙ ΜΕΓΑΛΟΙ ΔΙΣΚΟΙ ΣΕ ΕΝΑΝ ΥΠΟΛΟΓΙΣΤΗ, ΙΚΑΝΟΤΗΤΑ ΠΟΥ ΜΟΝΟ ΑΥΤΟ ΤΟ ΠΡΩΤΟΚΟΛΛΟ ΕΧΕΙ.
ΔΕΧΕΤΑΙ ΜΕΧΡΙ 8 ΣΥΣΚΕΥΕΣ (ΟΧΙ ΜΟΝΟ ΔΙΣΚΟΥΣ) ΑΝΑ ΕΛΕΓΚΤΗ, ΕΝΩ ΤΟ IDE ΜΕΧΡΙ 2 ΔΙΣΚΟΥΣ ΣΤΟ ΣΥΝΟΛΟ.
[RAM, OKT 1993, 124]

_SPECIFIC:
FAST SCSI-2,
SCSI-2,
WIND SCSI-2,

FvMcs.ΝΌΜΟΣ

name::
* McsEngl.conceptIt183,
* McsElln.ΝΌΜΟΣ@cptIt,
* McsEngl.FvMcs.ΝΌΜΟΣ@cptIt,
* McsElln.ΝΟΜΟΣ@cptIt,
* McsElln.ΝΌΜΟΣ@cptIt,
* McsElln.ΝΟΜΟΣ'ΒΑΣΗΔΕΔΟΜΕΝΩΝ@cptIt183,

FvMcs.IEEE

name::
* McsEngl.conceptIt185,
* McsEngl.IEEE@cptIt,
* McsEngl.FvMcs.IEEE@cptIt,
* McsEngl.IEEE@cptIt185org,
* McsEngl.institute of electrical and electronic engineers@cptIt,

FvMcs.CURSOR MOVEMENT HARDWARE

name::
* McsEngl.conceptIt188,
* McsEngl.CURSOR MOVEMENT HARDWARE@cptIt,
* McsEngl.FvMcs.CURSOR MOVEMENT HARDWARE@cptIt,
* McsEngl.cursor movement hardware@cptIt,
* McsEngl.hardware.cursorMovement@cptIt188,

SPECIFIC

MOUSE

Με το mouse ο δρομέας κινείται ανάλογα με την κίνηση μιάς μπάλας ΠΑΝΩ σε μια επιφάνεια.

BUS MOUSE:
It does NOT have a COM port address. It does, however, have an IRQ setting.

MOUSEMAN CORDLESS, LOGITECH

ADAPTOR:
FROM serial TO ps/2: na692 manuals

TRACKBALL

Ο δρομέας κινείται ανάλογα με την κίνηση μπάλας, που παραμένει σε μια στάνταρ θέση και απλώς περιστρέφεται σε αυτή τη θέση προς όλες τις κατευθύνσεις.

TRACKPAD

Μοιάζει με το trackball, αλλα τώρα δέν έχουμε μπάλα αλλά κάποια επιφάνεια κινούμενη.

ΠΡΩΤΟΕΜΦΑΝΙΖΕΤΑΙ στα apple powerbook 1994.

FvMcs.machine.ROBOT

name::
* McsEngl.conceptIt190,
* McsEngl.machine.ROBOT@cptIt,
* McsEngl.FvMcs.machine.ROBOT@cptIt,
* McsEngl.robot@cptIt,
* McsElln.ΡΟΜΠΟΤ@cptIt,
* McsElln.ρομπότ@cptIt,

robot'nationality

name::
* McsEngl.robot'nationality@cptIt,

Will Robots Ever Have the Same Rights as Humans?
Saudi Arabia has granted citizenship to a robot named Sophia, making “her” the first robot with a nationality.

Modeled after the late actress Audrey Hepburn, a humanoid robot named
Sophia is highly mobile and able to express and display a wide range of
human emotions. The “latest and most advanced robot” created by Hong
Kong-based Hanson Robotics was activated on 19 April 2015. At an October
2017 technology summit in Riyadh, the life-like android announced that she
had recently been granted citizenship by Saudi Arabia, making her the first
robot to become a citizen of any country.

Read More: http://www.wisegeek.com/will-robots-ever-have-the-same-rights-as-humans.htm?m {2017-11-06}

robot'relation-to-cost

name::
* McsEngl.robot'relation-to-cost@cptIt,

robot'relation-to-job#ql:job'relation-to-automation#

name::
* McsEngl.robot'relation-to-job@cptIt,

robot'relation-to-productivity#ql:productivity@cptEconomy255#

name::
* McsEngl.robot'relation-to-productivity@cptIt,

robot'security

name::
* McsEngl.robot'security@cptIt,

_ADDRESS.WPG:
* http://www.nooz.gr/tech/rompot-skotose-ergati-se-ergostasio-tis-volkswagen, {2015-07-02}

robot'resource

name::
* McsEngl.robot'resource@cptIt,

_ADDRESS.WPG:
* {2017-12-15} These are the jobs most likely to be taken by robots: https://www.weforum.org/agenda/2017/12/robots-coming-for-800-million-jobs/,
- More than a fifth of the global labour force - 800 million workers - might lose their jobs because of automation.
* {2017-09-04} http://www.information-age.com/robots-drive-down-retirement-age-123468331/,
* https://www.weforum.org/agenda/2016/03/this-map-shows-the-countries-with-the-most-robots//
* https://www.weforum.org/agenda/2016/02/where-will-robots-take-over-the-most-jobs//

robot'doing#cptCore475#

name::
* McsEngl.robot'doing@cptIt,

* information-processing-function#cptItsoft444#

robot'GENERIC

_GENERIC:
* machine#cptCore444#
* system.dynamic#cptCore765.19#
* technology.info_processing#cptItsoft245#

SPECIFIC

robot.specific

robot.SPECIFIC-DIVISION.function

name::
* McsEngl.robot.SPECIFIC-DIVISION.function@cptIt,

robot.MEDICIN

name::
* McsEngl.robot.MEDICIN@cptIt,

MINERVA:
Στη λωζάνη της ελβετίας στο ομοσπονδιακό ινστιτούτο τεχνολογίας. Κάνει εγχειρίσεις στον εγκέφαλο. Θα γίνουν το βήμα για τηλεγχιρίσεις.
[ΚΑΘΗΜΕΡΙΝΗ, 6 ΝΟΕΜ. 1994, 44]

ROBODOCK:
Η ΠΡΩΤΗ ΧΡΗΣΗ ΣΤΗ ΙΑΤΡΙΚΗ
[ΝΕΑ 11 ΝΟΕΜ 92]

robot.SPECIFIC-DIVISION.computer-language

name::
* McsEngl.robot.SPECIFIC-DIVISION.computer-language@cptIt,

_SPECIFIC:
=== javascript::
* http://nodebots.io/,

robot.NANOROBOT

name::
* McsEngl.robot.NANOROBOT@cptIt,
* McsEngl.nanorobot@cptIt,

_ADDRESS.WPG:
* https://www.weforum.org/agenda/2017/09/nanobots-kill-drill-cancer-cells-60-seconds/,

robot.individual.ADAM

name::
* McsEngl.robot.individual.ADAM@cptIt,

Αδάμ, το πρώτο ρομπότ-επιστήμονας

Ο Αδάμ σχηματίζει υποθέσεις, σχεδιάζει και πραγματοποιεί πειράματα, αναλύει τα αποτελέσματά τους και συνθέτει νέα επιστημονική γνώση, χωρίς καμία εξωτερική παρέμβαση επιστημόνων. Ο Αδάμ είναι ρομπότ.

Το «ρομπότ-επιστήμονας» είναι η πρώτη μηχανή που είναι ικανή να πραγματοποιεί πειράματα και να αναλύει τα αποτελέσματα τους χωρίς καμία βοήθεια από άνθρωπο, σύμφωνα με την έρευνα που δημοσιεύτηκε σήμερα.

Το ρομπότ κατασκευάστηκε από ομάδα επιστημόνων του πανεπιστημίου Aberystwyth της Ουαλίας και το πανεπιστήμιο του Κέμπριτζ στην Αγγλία. Χάρη στην τεχνητή νοημοσύνη, ο Άνταμ έχει ανακαλύψει νέα επιστημονική γνώση χωρίς ανθρώπινη παρέμβαση, σύμφωνα με δήλωση του Ρος Κίνγκ, επικεφαλής ερευνητή του προγράμματος.

«Εξαιτίας του ότι οι βιολογικοί οργανισμοί είναι τόσο περίπλοκοι, έχει ιδιαίτερη σημασία η λεπτομερής καταγραφή των βιολογικών πειραμάτων» ανέφερε ο Κίνγκ. «Είναι μια δύσκολη και επίπονη διαδικασία για τους επιστήμονες, αλλά εύκολη για ένα ρομπότ».

Ο Αδάμ ανέλαβε τη λεπτομερή γενετική μελέτη του σακχαρομύκητα cerevisiae, που χρησιμμεύει μεταξύ άλλων στην παραγωγή μπύρας, και που οι επιστήμονες χρησιμοποιούν για την αναπαράσταση πιο πολύπλοκων μορφών ζωής. Μετά την ανάλυση του Αδάμ, οι επιστήμονες έκαναν και εκείνοι τις δικές τους μετρήσεις για την επαλήθευση των αναλύσεων του ρομπότ.

Η σημασία τέτοιων μορφών τεχνητής νοημοσύνης αυξάνεται καθώς πολλές επιστημονικές διαδικασίες αυτοματοποιούνται. Η τεράστια αύξηση των επιστημονικών δεδομένων που καταγράφονται απαιτεί την επακόλουθη αύξηση στη χρήση ισχυρών υπολογιστών που θα ερμηνεύσουν και θα αναλύσουν αυτά τα δεδομένα.

«Τα ρομπότ-επιστήμονες θα μπορούσαν να παρέχουν ένα πολύ χρήσιμο εργαλείο για τη διαχείριση τέτοιων δεδομένων και γνώσης, καθιστώντας πιο εύκολες τις διαδικασίες», δήλωσε ο Ντάγκλας Κελ, επικεφαλής του Ερευνητικού Συμβουλίου Βιοτεχνολογίας και Βιολογικών Επιστημών της Βρετανίας, που χρηματοδοτεί το συγκεκριμένο πρόγραμμα.

Ο Αδάμ είναι, όπως είναι φυσικό, στο στάδιο του πρωτότυπου, ενώ η ομάδα του Κίνγκ εργάζεται ήδη στην κατασκευή της Εύας, ενός ρομπότ που θα βοηθήσει τους επιστήμονες στο σχεδιασμό θεραπείων για την αντιμετώπιση της ελονοσίας και της σχιστοσομίασης

www.kathimerini.gr με πληροφορίες από Γαλλικό Πρακτορείο

Hμερομηνία : 03-04-09 Copyright: http://www.kathimerini.gr
[http://portal.kathimerini.gr/4Dcgi/4dcgi/_w_articles_kathciv_1_03/04/2009_273763] 2009-04-05

* http://news.bbc.co.uk/2/hi/science/nature/7979113.stm:

robot.EVOLUTING

name::
* McsEngl.robot.EVOLUTING@cptIt,

{time.forcast2020from2016}
=== CHINA:
[http://www.nooz.gr/tech/pekino-stoxos-ta-triplasia-rompot-eos-to-2020]

{time.2012}
===
Japan was number one with 310,508 operational robots, according to data from 2012. There's even a hotel staffed almost entirely by robots that opened last year in Nagasaki, Japan, according to BAML.
The US is in second place with 168,623 operational robots, and Germany is in third with 161,988, according to 2012 figures.
[https://www.weforum.org/agenda/2016/03/this-map-shows-the-countries-with-the-most-robots/]

{time.1980}:
===
Η βιομηχανια χρησιμοποιούσε 20,000 στις καπιταλιστικες χώρες και 6,000 στις σοσιαλιστικες.
[ΔΗΜΗΤΡΙΟΥ 5, 1986, 221#cptResource168]
=== ΕΣΣΔ:
ΥΠΗΡΧΑΝ ΠΕΡΙΠΟΥ 25.000 ΑΥΤΟΜΑΤΕΣ ΓΡΑΜΜΕΣ ΠΑΡΑΓΩΓΗΣ, 83.000 ΑΥΤΟΜΑΤΟΠΟΙΗΜΕΝΟΙ ΤΟΜΕΙΣ ΚΑΙ ΤΜΗΜΑΤΑ ΕΠΙΧΕΙΡΗΣΕΩΝ, 64.000 ΑΥΤΟΜΑΤΟΠΟΙΗΜΕΝΕΣ ΕΠΙΧΕΙΡΗΣΕΙΣ ΚΑΙ 70.000 ΡΟΜΠΟΤ ΚΑΙ ΑΥΤΟΜΑΤΟΙ ΧΕΙΡΙΣΤΕΣ.
[ΡΙΖ 8 ΙΑΝ 1989]

{time.1971}:
=== ΚΑΤΑΣΚΕΥΑΖΕΤΑΙ ΠΡΩΤΟ ΡΟΜΠΟΤ ΣΤΗΝ ΕΣΣΔ.

{time.1960sEarly}:
=== ΚΑΤΑΣΚΕΥΑΖΕΤΑΙ ΠΡΩΤΟ ΡΟΜΠΟΤ ΣΤΙΣ ΗΠΑ.

Διακρίνονται 3 γενιες στην εξέλιξή τους:
- Της πρώτης γενιας ανήκουν κυρίως στους άκαμπτους μηχανισμούς.
- Απο το 1985 εισάγεται η δεύτερη γενιά με βάση τους μικροϋπολογιστές. Διαθέτουν ανιχνευτές κι έχουν τη δυνατότητα της επανάδρασης με το περιβάλον και πολυπρογραμματισμού...
- Η τρίτη γενιά βρίσκεται στο στάδιο της προετοιμασίας. Αφορά τα "ευφυή ρομπότ" που θα διεξάγουν διάλογο με τον άνθρωπο, θα διαθέτουν συντονισμό ματιού (κάμερας TV)-χεριού-κίνησης και θα μπορούν να συνθέτουν αλγορίθμους για τα προβλήματα για τα οποία θα έχουν σχεδιασθεί. Για την αναγνώριση υποδείγματος εξετάζεται η χρήση σημειωτικού μοντέλου.
[ΔΗΜΗΤΡΙΟΥ-5, 1986, 221#cptResource168]

FvMcs.VIRTUAL MEMORY

name::
* McsEngl.conceptIt191,
* McsEngl.VIRTUAL MEMORY@cptIt,
* McsEngl.FvMcs.VIRTUAL MEMORY@cptIt,
* McsEngl.virtual-memory@cptIt,
* McsEngl.virtual'memory@cptIt191,

DEFINITION

Virtual memory
When a program requires more space than is available in main memory, a direct access storage device can be used to hold program segments until needed in memory. The program utilizing virtual storage appears to be held entirely in memory.
The virtual memory system allows a program to be broken up into segments, called pages. Instead of bringing the entire program into memory, it brings in as many pages that will fit and leaves the remaining pages on disk.
When instructions are called for that are not in memory, the appropriate disk page is read in, overlaying a page in memory.
The input and output of program pages is called paging or swapping.
[SOURCE: PC-GLOSSARY 1993]

VIRTUAL MEMORY is a technique used in advanced computer systems, wherein an application is divided up into chunks.
When the application is running it uses only a few chunks of the program, and seems like uses all the program.

FvMcs.standard-ANSI

name::
* McsEngl.conceptIt196,
* McsEngl.standard-ANSI@cptIt,
* McsEngl.FvMcs.standard-ANSI@cptIt,
* McsEngl.ANSI'protocol@cptIt196,
* McsEngl.ANSI-STANDARD@cptIt,
* McsEngl.standard.ansi@cptIt196,


103
212
224
224
224: MODEM 2400 bps, CCITT v.22bis

FvMcs.Plotter

name::
* McsEngl.conceptIt202,
* McsEngl.Plotter@cptIt,
* McsEngl.FvMcs.Plotter@cptIt,
* McsEngl.PLOTTER@cptIt,
* McsEngl.plotter@cptIt202,

FvMcs.PCMCIA

name::
* McsEngl.conceptIt203,
* McsEngl.PCMCIA@cptIt,
* McsEngl.FvMcs.PCMCIA@cptIt,
* McsEngl.pc-card-interface; the new name 1995@cptIt,
* McsEngl.pcmcia-interface/port@cptIt,
* McsEngl.port.pcmcia@cptIt203,
* McsEngl.personal-computer-memory-card-international-assign@cptIt,

DEFINITION

PCMCIA: {Personal Computer Memory Card International Assign}. 250 κατασκευαστες έκαναν αυτο το στάνταρ για συνδεση περιφερειακών. Οπως το ISA έτσι και αυτο θα είναι ελεύθερο, δηλ. μη πληρωμη δικαιωματων. Μορφή καρτας.
Release 1.0: august 1990
Release 2.0: september 1991

FvMcs.mapping-method.COMPUTER-LANGUAGE

_CREATED: {2011-08-30} {2011-10-11}

name::
* McsEngl.conceptIt204.6,
* McsEngl.mapping-method.COMPUTER-LANGUAGE@cptIt,
* McsEngl.FvMcs.mapping-method.COMPUTER-LANGUAGE@cptIt,
* McsEngl.conceptIt204,
* McsEngl.conceptIt442,
* McsEngl.computer-language@cptIt,
* McsEngl.coding-method@cptIt204, {2012-03-05}
* McsEngl.computer-language@cptIt204, {2011-10-11}
* McsEngl.computing-language@cptIt204, {2014-01-19}
* McsEngl.datatech-method@cptIt204, {2011-08-30}
* McsEngl.data-macnine-representation@cptCore478i, {2008-01-08}
* McsEngl.data-method@cptIt204.6,
* McsEngl.language@cptIt442, {2011-10-11}
* McsEngl.language@cptIt204, {2012-03-05}
* McsEngl.language.computer@cptIt,
* McsEngl.method@cptIt, {2011-08-30}
* McsEngl.methodData@cptIt204.6,
* McsEngl.methodDatatech@cptIt204, {2011-08-30}
* McsEngl.software-representation@cptIt204, {2013-12-24}
* McsEngl.software'METHODOLOGY@cptIt,
* McsEngl.lcr@cptIt204, {2014-10-25}
* McsEngl.lc@cptIt204, {2014-02-05}
* McsEngl.lngCmr@cptIt204, {2014-01-31}
* McsEngl.cmrlng@cptIt204, {2013-09-20}
* McsEngl.cmplng@cptIt442, {2012-05-19} (small 'l'because it does not denotes specifics)
* McsEngl.cl@cptIt442, {2011-10-11}
* McsEngl.clng@cptIt204, {2012-04-12}
* McsEngl.lng@cptIt442Old, {2011-10-11}
* McsEngl.lng@cptIt204, {2012-03-05}
====== lagoGreek:
* McsElln.γλωσσα-των-κομπιουτερ@cptIt204, {2012-04-12}

DEFINITION

_DESCRIPTION:
Any method[epistem17] that inputs data[epistem613] of digitaldata[it242] and transforms them in another-format, the dataOut, using rules (the code).
[hmnSngo.2012-03-05]
===
Datatech-method is any method(= knowledge of doing something) used in datatech[-0-#cptIt0#]
===
Any method on data[242].
[hmnSngo.2011-08-31]

A computation_language is a method of mapping
- a computation_solution to
- a computation_program.
[hmnSngo.2008-01-08_KasNik]

lagCmr'Archetype

name::
* McsEngl.lagCmr'Archetype@cptIt,

lagCmr'domainIN

name::
* McsEngl.lagCmr'domainIN@cptIt,

lagCmr'expressive-power

name::
* McsEngl.lagCmr'expressive-power@cptIt,

_DESCRIPTION:
In computer science, the expressive power (also called expressiveness or expressivity) of a language is the breadth of ideas that can be represented and communicated in that language. The more expressive a language is, the greater the variety and quantity of ideas it can be used to represent.
For example, the Web Ontology Language expression language profile (OWL2 EL) lacks ideas (such as negation) which can be expressed in OWL2 RL (rule language). OWL2 EL may therefore be said to have less expressive power than OWL2 RL. These restrictions allow more efficient (polynomial time) reasoning in OWL2 EL than in OWL2 RL. So OWL2 EL trades some expressive power for more efficient reasoning (processing of the knowledge representation language).
[http://en.wikipedia.org/wiki/Expressive_power]

lagCmr'usage

name::
* McsEngl.lagCmr'usage@cptIt,

Every cl is used for something.

SPECIFIC

name::
* McsEngl.cmrlng'domainIn'PART@cptIt,

_SPECIFIC:
* data-domain
* dataNo-domain (knowledge-domain)
* processing-domain#ql:pgmlng'domainin#
* processingNo-domain (representation-domain)

lagCmr'Code (model | domainOut)

name::
* McsEngl.lagCmr'Code (model | domainOut)@cptIt,
* McsEngl.conceptIt204.3,
* McsEngl.code-of-lcr@cptIt,
* McsEngl.model-of-lcr@cptIt,
* McsEngl.lcr'model@cptIt,
* McsEngl.cl'code@cptIt,
* McsEngl.code.computer-language@cptIt204.3,
* McsEngl.code-of-data-method@cptIt,
* McsEngl.cmplng'Domain.Out@cptIt,
* McsEngl.lcr'model@cptIt, {2016-03-06}

_DESCRIPTION:
* The output of the encoding-method on data.
[hmnSngo.2012-03-05]

_SPECIFIC:
* unit-of-code,

lagCmr'code'Unit

_CREATED: {2016-03-06}

name::
* McsEngl.lagCmr'code'Unit@cptIt,
* McsEngl.lcr'unit.construction@cptIt,
* McsEngl.construction-unit-of-lcr@cptIt,
* McsEngl.lcr'construction-unit@cptIt,

_DESCRIPTION:
Construction-unit is unit that denotes nothing, used to build the-code#ql:lcr'code#.
[hmnSngo.2016-03-06]

lagCmr'code'Semantic-unit

_CREATED: {2016-03-06}

name::
* McsEngl.lagCmr'code'Semantic-unit@cptIt,
* McsEngl.semantic-unit-of-lcr@cptIt,
* McsEngl.lcr'construction-unit@cptIt,
* McsEngl.lcr'unit.SEMANTIC@cptIt,

_DESCRIPTION:
A-semantic-unit maps|represents|denotes an-archo-unit.
[hmnSngo.2016-06-10]

lagCmr'code'Sentence

name::
* McsEngl.lagCmr'code'Sentence@cptIt,

lagCmr'code'Root-tree

name::
* McsEngl.lagCmr'code'Root-tree@cptIt,

lagCmr'code'Syntax

name::
* McsEngl.lagCmr'code'Syntax@cptIt,
* McsEngl.lcr'syntax@cptIt,

_DESCRIPTION:
The-structure of the-code.
[hmnSngo.2016-06-10]

lagCmr'Data-digital#cptIt242#

name::
* McsEngl.lagCmr'Data-digital@cptIt,

lagCmr'EVOLUTION#cptCore546.171#

name::
* McsEngl.lagCmr'EVOLUTION@cptIt,

_2012-03-05:
I merged this with it442#cptIt442# (computer-language).

lagCmr'human

_CREATED: {2015-10-29}

name::
* McsEngl.lagCmr'human@cptIt,
* McsEngl.developer@cptIt,
* McsEngl.software-engineer@cptIt,

_ADDRESS.WPG:
* http://toddmotto.com/being-a-healthy-software-engineer//

lagCmr'Implementation

name::
* McsEngl.lagCmr'Implementation@cptIt,

lagCmr'Instruction

_CREATED: {2012-04-12}

name::
* McsEngl.lagCmr'Instruction@cptIt,
* McsEngl.conceptIt204.15,
* McsEngl.computer-command@cptIt204.15, {2012-04-12}
* McsEngl.computer-instruction@cptIt204.15, {2012-04-12}
* McsEngl.command.computer@cptIt204.15, {2012-04-12}
* McsEngl.instruction.computer@cptIt204.15, {2012-04-12}

lagCmr'Organization

name::
* McsEngl.lagCmr'Organization@cptIt,

lagCmr'Rule

name::
* McsEngl.lagCmr'Rule@cptIt,

lagCmr'semantics

name::
* McsEngl.lagCmr'semantics@cptIt,

lagCmr'Specification

name::
* McsEngl.lagCmr'Specification@cptIt,
* McsEngl.conceptIt204.5,

We can have a format, but we may have not a specification.

lagCmr'resource

name::
* McsEngl.lagCmr'resource@cptIt,

_ADDRESS.WPG:
* https://tomassetti.me/learning-build-languages/,

lagCmr'GENERIC

_GENERIC:
* mapping-method#cptCore320#
* entity.model.information.method#cptCore181.67#

SPECIFIC

name::
* McsEngl.lc.specific@cptIt,
* McsEngl.lngCmr.specific@cptIt,

_SPECIFIC: lc.Alphabetically:
* computer_language.architecture_description##
* computer_language.data_communication#cptItsoft262#
* computer_language.data_management#cptItsoft204.7#
* computer_language.data_processing#cptItsoft248#
* computer_language.data_representation#cptItsoft501#
* computer_language.domain_specific#cptItsoft204.6#
* computer_language.general_purpose##
* computer_language.hardware#cptItsoft204.1#
* computer_language.human_readable#cptItsoft204.10#
* computer_language.human_readable_no#cptItsoft204.11#
* computer_language.knowledge#cptItsoft525#
* computer_language.knowledge_representation#cptIt501.7#
* computer_language.markup#cptItsoft501.9#
* computer_language.modeling#cptItsoft447#
* computer_language.programming#cptItsoft248#
* computer_language.query#cptItsoft437#
* computer_language.software#cptItsoft204.2#
* computer_language.specification#cptItsoft362#
* computer_language.standard#cptItsoft139#
* computer_language.standardNo#cptItsoft204.4#
* computer_language.transformation#cptItsoft556#
* computer_language.visual

_SPECIFIC:
* character-format#cptItsoft243.1#
* data-method#cptItsoft204.6#
* file-format#cptItsoft164#
* specification-computer-language#cptItsoft362#

_SPECIFIC_DIVISION.COMMONNESS:
* computer_language.standard#cptItsoft139#
* computer_language.standardNo,

Computer languages include:
* Programming languages (e.g., C++, assembly language)
* Scripting languages
* Specification languages
* Machine Code (the non human-readable form other languages are translated into, sometimes on the fly)
* Bytecode (essentially "virtual" machine code - executed by a virtual machine)
* Query language (e.g., SQL, XQuery)
* Markup languages (e.g., HTML - typically used for producing documents)
* Transformation languages (e.g., XSLT)
* Template processing languages
* Fourth-generation programming language ("4GL")
* Visual programming languages
* Hardware description languages
* Configuration file formats (e.g., INI file)
* Category:Data serialization formats
[http://en.wikipedia.org/wiki/Computer_language]

lagCmr.SPECIFIC-DIVISION.archetype-set

name::
* McsEngl.lagCmr.SPECIFIC-DIVISION.archetype-set@cptIt,

_SPECIFIC:
* computer_language.domain_specific#cptItsoft204.6#
* computer_language.general_purpose##

lagCmr.SPECIFIC-DIVISION.doing

name::
* McsEngl.lagCmr.SPECIFIC-DIVISION.doing@cptIt,

_SPECIFIC:
* communicating-lagCmr##
* processing-lagCmr#cptItsoft248#
* representation-lagCmr#cptItsoft501#
===
* processing-language#cptItsoft248#
* processingNo-language#cptItsoft501#
This is NOT a division. A non-processing computer-language is NOT the specific-complement of processing-language because processing-languages are and representation-languages.
[hmnSngo.2014-02-02]

lagCmr.SPECIFIC-DIVISION.knowledge

name::
* McsEngl.lagCmr.SPECIFIC-DIVISION.knowledge@cptIt,

_SPECIFIC:
* knowledge-lagCmr#cptItsoft525#
* knowledgeNo-lagCmr##

lagCmr.SPECIFIC-DIVISION.readability

name::
* McsEngl.lagCmr.SPECIFIC-DIVISION.readability@cptIt,

_SPECIFIC:
* computer_language.human_readable#cptItsoft204.10#
* computer_language.human_readable_no#cptItsoft204.11#

lagCmr.COMMUNICATING

_CREATED: {2014-02-05}

name::
* McsEngl.lagCmr.COMMUNICATING@cptIt,
* McsEngl.conceptIt204.18,
* McsEngl.language.computer.communicating@cptIt204.18, {2014-02-05}
* McsEngl.lcc@cptIt, {2014-02-05}

_DESCRIPTION:
A computer-language used to communication INFORMATION and COMPUTER-CODE among computers.
[hmnSngo.2014-02-05]

_SPECIFIC:
* JSON#cptItsoft204.19#
* knowledge-communicating##
* serialization-format#cptItsoft204.17#
* YAML#cptItsoft501.15#
* XML#cptItsoft439#

lagCmrc.KNOWLEDGE

name::
* McsEngl.lagCmrc.KNOWLEDGE@cptIt,
* McsEngl.conceptIt525.4,

lagCmr.Computer-language-other

_CREATED: {2011-08-31} {2007-08-27}

name::
* McsEngl.lagCmr.Computer-language-other@cptIt,
* McsEngl.conceptIt204.14,
* McsEngl.conceptIt458,
* McsEngl.cl-other@cptIt458, {2011-10-11} {2010-10-07}
* McsEngl.computer-language-other@cptIt204.14,
* McsEngl.lng-other@cptIt204.14, {2011-10-11} {2011-08-29}

_GENERIC:
* method#cptItsoft204#
* REPRESENTATION_METHOD#cptCore320#
* HUMAN_LANGAUGE#cptCore93#

_DESCRIPTION:
SOME methods[204#cptIt204#] are called "computer-languages". None is "language:hknu".
[hmnSngo.2011-08-31]
===
SOME software-methods[204.2#cptIt204.2#] (text and instructions representation) are called "computer-languages.
[hmnSngo.2011-08-30]
===
The term computer language is a more expansive and alternate term for the more commonly-used term programming language. It includes a wide variety of languages used to communicate with computers. Programming languages are a subset of computer languages, and so are other types of languages.
For example, HTML is a markup language and a computer language, but not traditionally considered a programming language. Machine code is a computer language, can technically be used for programming, and has been (e.g. the original bootstrapper for Altair BASIC), though most would not consider it a programming language.
[http://en.wikipedia.org/wiki/Computer_language]

SPECIFIC

_SPECIFIC: lag.Alphabetically:
* Data-representation#cptIt501#
* Knowledge-representation-language#cptIt501.7#
* Markup-language#cptItsoft501.9#
* Programming-language#cptItsoft248#
* query-language#cptItsoft437#
* SPECIFICATION_LANGUAGE#cptItsoft362#
* transformation-language#cptItsoft556#

Computer languages include:
* Programming languages (e.g., C++, assembly language)
* Scripting languages
* Specification languages
* Machine Code (the non human-readable form other languages are translated into, sometimes on the fly)
* Bytecode (essentially "virtual" machine code - executed by a virtual machine)
* Query language (e.g., SQL, XQuery)
* Markup languages (e.g., HTML - typically used for producing documents)
* Transformation languages (e.g., XSLT)
* Template processing languages
* Fourth-generation programming language ("4GL")
* Visual programming languages
* Hardware description languages
* Configuration file formats (e.g., INI file)
* Category:Data serialization formats
[http://en.wikipedia.org/wiki/Computer_language]

_SPECIFIC: lag.SPECIFIC_DIVISION.Doing:
* programming_language#cptItsoft248#
* language.computer.representation#cptItsoft501#

_SPECIFIC: lag.SPECIFIC_DIVISION.READABILITY:
* TEXT_BASED (HUMAN_READABLE)
* BINARY_BASED (NONHUMAN_READABLE)

Evolution#cptCore546.171#

_2011-08-31:
I transferd this concept FROM "458" TO "method 204".

_2008-01-21:
I merge this concept with "format#cptCore571#"

Implementation

The process of doing it.

Rule

Specification

We can have a format, but we may have not a specification.

Usage

Every cl is used for something.

lagCmr.Data.Management

name::
* McsEngl.lagCmr.Data.Management@cptIt,
* McsEngl.conceptIt204.7,

_DESCRIPTION:
It is a method of management (representation, management, communication) of data[242#cptIt242#]

_GENERIC:
* data-method#cptItsoft204.6#

lagCmr.domainIn.GENERIC

name::
* McsEngl.lagCmr.domainIn.GENERIC@cptIt,
* McsEngl.conceptIt204.8,
* McsEngl.cmrlng.GENERAL-PURPOSE@cptIt,
* McsEngl.general-purpose-language@cptIt204.8, {2012-03-05}

lagCmr.domainIn.SPECIFIC

name::
* McsEngl.lagCmr.domainIn.SPECIFIC@cptIt,
* McsEngl.conceptIt204.6,
* McsEngl.DSCL@cptIt,
* McsEngl.DSL@cptIt,
* McsEngl.domain-specific-computer-language@cptIt,
* McsEngl.domain-specific-language@cptIt,

_DESCRIPTION:
In software development and domain engineering, a domain-specific language (DSL) is a programming language or specification language dedicated to a particular problem domain, a particular problem representation technique, and/or a particular solution technique. The concept isn't new—special-purpose programming languages and all kinds of modeling/specification languages have always existed, but the term has become more popular due to the rise of domain-specific modeling.

Examples of domain-specific languages include HTML, Logo for children, Verilog and VHDL hardware description languages, Mata for matrix programming, Mathematica and Maxima for symbolic mathematics, spreadsheet formulas and macros, SQL for relational database queries, YACC grammars for creating parsers, regular expressions for specifying lexers, the Generic Eclipse Modeling System for creating diagramming languages, Csound for sound and music synthesis, and the input languages of GraphViz and GrGen, software packages used for graph layout and graph rewriting.

The opposite is:
a general-purpose programming language, such as C, Java or Python,
or a general-purpose modeling language such as the Unified Modeling Language (UML).
Creating a domain-specific language (with software to support it) can be worthwhile if the language allows a particular type of problem or solution to be expressed more clearly than an existing language would allow and the type of problem in question reappears sufficiently often. Language-Oriented Programming considers the creation of special-purpose languages for expressing problems a standard part of the problem solving process.
[http://en.wikipedia.org/wiki/Domain-specific_language]

user-view

How users receive DSLs?
Inbox
federico@tomassetti.me
{2018-04-02}
Hi,

It does not matter how good your implementation is, how pure and nice is your language design, which clever solutions you found around the most challenging conceptual issues.

A language without users is just dead, wasted time. That means that users play a crucial role in determining if you have done a good job as a language designer.

The question is: what makes users to accept or reject a language?

This depends on many factors, but there is one general rule: developers tend to reject much more DSLs compared to other users. Why is that?

Over time I have reached the conclusion that:

Developers perceive less benefits from DSLs, because they are used to the alternative of using common programming languages. Over time they got accustomed to the shortcomings, and they have difficulties seeing them
Developers have invested a lot of time honing their skills with their programming languages of choice. The idea of using a DSL to partially, or totally, replace what they do with a DSL is threatening for them, because it makes a portion of their skills obsolete, less relevant.
There is no easy recipe to solve that issue. What I normally do in these cases is:

Focus on supporting the activities developers hate to do: generating documentation, writing repetitive portions of code
Explain how their analytical skills will still be very relevant. The developer brain is wired differently
Involve them to make the language encapsulate the best practices they developed
This approach will work with most developers, especially if they are focused on making the business succeed, not in preserving their little ring of power. There will be people who could not be convinced, at least not immediately. My best advice is to identify who is irremediably against the idea of a DSL. The first few people involved are crucial, putting "an enemy" in the initial team is the fastest way to doom the project.

Cheers,
Federico

SPECIFIC

name::
* McsEngl.cmrlng.dsl.specific@cptIt,

_SPECIFIC:
* HTML
* page-description-language
* programing-dscl
* programingNo-dscl
* text-processing

_SPECIFIC:
Examples of domain-specific languages include HTML, Logo for pencil-like drawing, Verilog and VHDL hardware description languages, MATLAB and GNU Octave for matrix programming, Mathematica and Maxima for symbolic mathematics, Specification and Description Language for reactive and distributed systems, spreadsheet formulas and macros, SQL for relational database queries, YACC grammars for creating parsers, regular expressions for specifying lexers, the Generic Eclipse Modeling System for creating diagramming languages, Csound for sound and music synthesis, and the input languages of GraphViz and GrGen, software packages used for graph layout and graph rewriting.
[http://en.wikipedia.org/wiki/Domain-specific_language]

lagCmr.Formal-language

name::
* McsEngl.lagCmr.Formal-language@cptIt,
* McsEngl.conceptIt204.9,
* McsEngl.formal-language@cptIt204.9, {2011-09-03}

_Desciption:
Formal languages have a precise, i.e., mathematical, syntax and semantics.
[http://www.cs.ru.nl/~peterl/teaching/KeR/summary.pdf]

lagCmr.HARDWARE-DESCRIBING

name::
* McsEngl.lagCmr.HARDWARE-DESCRIBING@cptIt,
* McsEngl.conceptIt204.1,
* McsEngl.hardware-method@cptIt204.1,
* McsEngl.methodHardware@cptIt204.1, {2011-08-31}

lagCmr.Hardware-description-language

name::
* McsEngl.lagCmr.Hardware-description-language@cptIt,
* McsEngl.hardware-description-language@cptIt458i,
* McsEngl.hdl@cptIt204i,

_DEFINITION:
In electronics, a hardware description language or HDL is any language from a class of computer languages for formal description of electronic circuits. It can describe the circuit's operation, its design and organization, and tests to verify its operation by means of simulation.
A Hardware Description Language (HDL) is a standard text-based expression of the temporal behaviour and/or (spatial) circuit structure of an electronic system. In contrast to a software programming language, an HDL's syntax and semantics include explicit notations for expressing time and concurrency which are the primary attributes of hardware. Languages whose only characteristic is to express circuit connectivity between a hierarchy of blocks are properly classified as netlist languages.
[http://en.wikipedia.org/wiki/Hardware_description_language]

DEFINITION

_DESCRIPTION:
It is any datatech-method used for knowledge (data except text-and-hypertext).
[hmnSngo.2011-08-31]

lagKnlg'GENERIC

_GENERIC:
* data-method#cptItsoft204.6#

lagKnlg'WHOLE

_WHOLE:
* tech-knowledge#cptItsoft458#

lagKnlg'DomainIn ::this.part

name::
* McsEngl.lagKnlg'DomainIn ::this.part@cptIt,
* McsEngl.mKno'knowledge@cptIt525i,
* McsEngl.knowledge-mKno@cptIt,

_GENERIC:
* this.part
* knowledge#cptItsoft458.1#

name::
* McsEngl.domain'of'prgKno@cptIt497,
* McsEngl.application'domain'of'prgKno@cptIt497,

_DEFINITION:
eg. general purpose, a particular real-world situation,

lagKnlg'DomainOut ::this.part

name::
* McsEngl.lagKnlg'DomainOut ::this.part@cptIt,

_SPECIFIC:
* collectionKnowledge_mKno,

lagKnlg'CollectionKnowledge

name::
* McsEngl.lagKnlg'CollectionKnowledge@cptIt,

_GENERIC:
* domainOut-mKno,

lagKnlg'Notation ::this.part

name::
* McsEngl.lagKnlg'Notation ::this.part@cptIt,
* McsEngl.conceptIt525.10,
* McsEngl.knowledge-format@cptIt525.10, {2011-09-03}
* McsEngl.knowledge-notation@cptIt525.10, {2011-09-03}
* McsEngl.knowledge-syntax@cptIt525.10, {2011-09-05}
* McsEngl.notationKnowledge@cptIt525.10, {2011-09-03}

_GENERIC:
* data-notation,

_File:
Notations are stored in files with usally specific extensions.

_SPECIFIC:
* OWL--notation
* RDF-notation
* topic-maps--notation,

lagKnlg'Program#cptIt497#

name::
* McsEngl.lagKnlg'Program@cptIt,

SPECIFIC

name::
* McsEngl.lagKnlg.specific@cptIt,
* McsEngl.lngKnl.specific@cptIt,

_SPECIFIC: lagKnl.Alphabetically:
* knllag.Access_Limited_Logic (ALL, Algernon system Univ of Texas)
* knllag.binary_based
* knllag.code4#ql:methodknowledgecode4#
* knllag.concept_maps#cptIt525.7#
* knllag.conceptual_graphs#cptItsoft515#
* knllag.CycL#cptIt517# (Cyc system)#cptIt517#
* knllag.human_readable
* knllag.humanNO_readable
* knllag.first_order_logic__method
* knllag.frame_based__method#cptItsoft475#
* knllag.knowledge_communication_method
* knllag.knowledge_management_method#cptItsoft525.1#
* knllag.knowledge_processing_method
* knllag.knowledge_representation_method#cptItsoft525.3#
* knllag.knowledge_resoning_method#cptItsoft485.3#
* knllag.lisp_based
* knllag.logic_method#cptItsoft525.6#
* knllag.machine_learning__method#cptItsoft358.1#
* knllag.machine_reasoning__method#cptItsoft485.3#
* knllag.machine_translation__method#cptItsoft57.1#
* knllag.MathML#cptItsoft441#
* knllag.natural_language_processing__method#cptIt359.1#
* knllag.ontology_method#cptItsoft511#
* knllag.prolog_based
* knllag.standard_method
* knllag.speech_to_text__method#cptItsoft540.2#
* knllag.text_based
* knllag.text_to_speech__method#cptItsoft541.1#
* knllag.visual
* knllag.XML_based

===

* knllag.CLASSIC KL-ONE
* knllag.CODE4-KR (prolog based)
* knllag.COMPUTATIONAL-LOGIC
* knllag.CONSTRAINTS,



* knllag.INCLUSION'HIERARCHIES

* knllag.KIF#cptIt563# (lisp based)#cptIt563: attSpe#
* knllag.KL-ONE-family-of-representation-languages#ql:kl'one'krl-*###
* knllag.KM (Knowledge Machine un texas austin) frame-based
* knllag.KQML
* knllag.LOOM KL-ONE

* knllag.MATHEMATICAL_KNOWLEDGE_REPRESENTATION#cptCore89.1: attSpe#
* knllag.MATHEMATICAL'LOGICS
* knllag.MINETO_MODEL_REPRESENTATION
* knllag.MODEL'BASED'REASONING
* knllag.ONTOLIGUA (lisp based)

* knllag.PROCEDURAL_REPRESENTATION'LANGUAGE,
* knllag.PRODUCTION RULES
* knllag.RELATIONAL_LANGUAGE,

lagKnlg.SPECIFIC-DIVISION.doing

_CREATED: {2013-12-24}

name::
* McsEngl.lagKnlg.SPECIFIC-DIVISION.doing@cptIt,

_SPECIFIC:
* knowledge-communication##
* knowledge-processing#ql:knllng.processing#
* knowledge-representation#ql:knllng.representation#

lagCmr.KNOWLEDGE.NO#cptIt204.16#

_CREATED: {2013-12-24}

name::
* McsEngl.lagCmr.KNOWLEDGE.NO@cptIt,
* McsEngl.computer-language.knowledgeNo@cptIt204.16,
* McsEngl.non-knowledge-computer-language@cptIt204.16,

_DESCRIPTION:
Non-knowledge-computer-language is a language that represents and processes text or hypertext.
[hmnSngo.2013-12-24]

lagCmr.MARKUP-LANGUAGE

_CREATED: {2011-08-31} {2011-08-30} {1998-12-13}

name::
* McsEngl.lagCmr.MARKUP-LANGUAGE@cptIt,
* McsEngl.conceptIt204.12,
* McsEngl.conceptIt525,
* McsEngl.markup-method@cptIt204.12, {2007-12-22}
* McsEngl.mcl@cptIt204.12, {2007-12-03}
* McsEngl.language.markup@cptIt204.12,
* McsEngl.lngMarkup@cptIt204.12,
* McsEngl.markup-language@cptIt,
* McsEngl.markup@cptIt204.12, {2011-08-31}
* McsEngl.markup-language@cptIt204.12,
* McsEngl.methodMarkup@cptIt204.12, {2011-08-31}
* McsEngl.mkplng@cptIt204.12, {2013-10-11}

=== _NOTES: History
The term markup is derived from the traditional publishing practice of "marking up" a manuscript, that is, adding symbolic printer's instructions in the margins of a paper manuscript. For centuries, this task was done by proofreaders who marked up text to indicate what typeface, style, and size should be applied to each part, and then handed off the manuscript to someone else for the tedious task of typesetting by hand. A familiar example of manual markup symbols still in use is proofreader's marks, which are a subset of larger vocabularies of handwritten markup symbols.
[http://en.wikipedia.org/wiki/Document_markup_language]

_GENERIC:
* COMPUTER_LANGUAGE#cptIt458#

DEFINITION

A markup language provides a way to combine a text and extra information about it. The extra information, including structure, layout, or other information, is expressed using markup, which is typically intermingled with the primary text. The best-known markup language in modern use is HTML (HyperText Markup Language), one of the foundations of the World Wide Web. Originally markup was used in the publishing industry in the communication of printed work between authors, editors, and printers.
[http://en.wikipedia.org/wiki/Markup_language]

In computerised document preparation, a method of adding information to the text indicating the logical components of a document, or instructions for layout of the text on the page or other information which can be interpreted by some automatic system.
[FOLDOC 1998feb] 1998dec13

lagMkp'Archetype

name::
* McsEngl.lagMkp'Archetype@cptIt,

lagMkp'DomainIn

name::
* McsEngl.lagMkp'DomainIn@cptIt,

* STRUCTURAL:
the markup-code denotes the structure of the document markuped, eg xml.

* PRESENTATIONAL:
the markup-code denotes how to present the document markuped, eg html <B>...</B>

lagMkp'Usage

name::
* McsEngl.lagMkp'Usage@cptIt,

Alternative usage
While the idea of markup language originated with text documents, there is an increasing usage of markup languages in areas like vector graphics, web services, content syndication, and user interfaces. Most of these are XML applications because it is a clean, well-formatted, and extensible language. The use of XML has also led to the possibility of combining multiple markup languages into a single profile, like XHTML+SMIL and XHTML+MathML+SVG[4]
[http://en.wikipedia.org/wiki/Markup_language]

lagMkp'Code

name::
* McsEngl.lagMkp'Code@cptIt,

lagMkp'DomainOut

name::
* McsEngl.lagMkp'DomainOut@cptIt,
* McsEngl.markup-code-i@cptIt,

_SPECIFIC:
* TAG (html, xml)
* CONTROL_CODE (RTF, TeX)

lagMkp'code'Document

name::
* McsEngl.lagMkp'code'Document@cptIt,

lagMkp'code'Tag

name::
* McsEngl.lagMkp'code'Tag@cptIt,

mark-up languages such as XBRL use tags to describe data; for example <Asset>1000</Asset> - the word Asset together with the brackets "<" and ">" is called a tag; there are opening tags: <…> and closing tags: </…>.
[http://www.ifrs.org/XBRL/Resources/Pages/Glossary.aspx]

lagMkp'Specification

name::
* McsEngl.lagMkp'Specification@cptIt,

lagMkp'spec.Document-object-model

_CREATED: {2010-09-27}

name::
* McsEngl.lagMkp'spec.Document-object-model@cptIt,
* McsEngl.conceptIt579,
* McsEngl.DOM@cptIt579,
* McsEngl.document-object-model@cptIt579,
====== lagoGreek:
* McsElln.ΜΟΝΤΕΛΟ-ΑΝΤΙΚΕΙΜΕΝΟΥ-ΕΓΓΡΑΦΩΝ@cptIt579,

DEFINITION

_DESCRIPTION:
This specification defines the Document Object Model Level 1, a platform- and language-neutral interface that allows programs and scripts to dynamically access and update the content, structure and style of documents. The Document Object Model provides a standard set of objects for representing HTML and XML documents, a standard model of how these objects can be combined, and a standard interface for accessing and manipulating them. Vendors can support the DOM as an interface to their proprietary data structures and APIs, and content authors can write to the standard DOM interfaces rather than product-specific APIs, thus increasing interoperability on the Web.
The goal of the DOM specification is to define a programmatic interface for XML and HTML. The DOM Level 1 specification is separated into two parts: Core and HTML. The Core DOM Level 1 section provides a low-level set of fundamental interfaces that can represent any structured document, as well as defining extended interfaces for representing an XML document. These extended XML interfaces need not be implemented by a DOM implementation that only provides access to HTML documents; all of the fundamental interfaces in the Core section must be implemented. A compliant DOM implementation that implements the extended XML interfaces is required to also implement the fundamental Core interfaces, but not the HTML interfaces. The HTML Level 1 section provides additional, higher-level interfaces that are used with the fundamental interfaces defined in the Core Level 1 section to provide a more convenient view of an HTML document. A compliant implementation of the HTML DOM implements all of the fundamental Core interfaces as well as the HTML interfaces.
[https://www.w3.org/TR/REC-DOM-Level-1/cover.html]
===
The Document Object Model (DOM) is a cross-platform and language-independent convention for representing and interacting with objects in HTML, XHTML, and XML documents.[1] The nodes of every document are organized in a tree structure, called the DOM tree. Objects in the DOM tree may be addressed and manipulated by using methods on the objects. The public interface of a DOM is specified in its application programming interface (API).
The history of the Document Object Model is intertwined with the history of the "browser wars" of the late 1990s between Netscape Navigator and Microsoft Internet Explorer, as well as with that of JavaScript and JScript, the first scripting languages to be widely implemented in the layout engines of web browsers.
[https://en.wikipedia.org/wiki/Document_Object_Model] 2015-10-11,
===
The Document Object Model (DOM) is an application programming interface (API) for valid HTML and well-formed XML documents. It defines the logical structure of documents and the way a document is accessed and manipulated. In the DOM specification, the term "document" is used in the broad sense - increasingly, XML is being used as a way of representing many different kinds of information that may be stored in diverse systems, and much of this would traditionally be seen as data rather than as documents. Nevertheless, XML presents this data as documents, and the DOM may be used to manage this data.
[http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/DOM3-Core.html#introduction-Introduction-h1]
===
The Document Object Model is a platform- and language-neutral interface that will allow programs and scripts to dynamically access and update the content, structure and style of documents. The document can be further processed and the results of that processing can be incorporated back into the presented page. This is an overview of DOM-related materials here at W3C and around the web.
[http://www.w3.org/DOM/]
===
The Document Object Model (DOM) is an API for manipulating HTML and XML documents. It provides a structural representation of the document, enabling you to modify its content and visual presentation by using a scripting language such as JavaScript.
[https://developer.mozilla.org/en/docs/DOM]

What is the DOM?
The DOM is a W3C (World Wide Web Consortium) standard.
The DOM defines a standard for accessing documents like HTML and XML:
"The W3C Document Object Model (DOM) is a platform and language-neutral interface that allows programs and scripts to dynamically access and update the content, structure, and style of a document."

The DOM is separated into 3 different parts / levels:

Core DOM - standard model for any structured document
XML DOM - standard model for XML documents
HTML DOM - standard model for HTML documents
The DOM defines the objects and properties of all document elements, and the methods (interface) to access them.
[http://www.w3schools.com/htmldom/dom_intro.asp]

The Document Object Model (DOM) is a cross-platform and language-independent convention for representing and interacting with objects in HTML, XHTML and XML documents.
[http://en.wikipedia.org/wiki/Document_Object_Model]

dom'node

name::
* McsEngl.dom'node@cptIt,

_DESCRIPTION:
A node can be twelve different things[1] - for HTML, only three are really interesting: element, TextNode and AttributeNode.
[http://www.onlinetools.org/articles/unobtrusivejavascript/chapter2.html]

dom'specification

name::
* McsEngl.dom'specification@cptIt,

_ADDRESS.WPG:
* http://www.w3.org/standards/techs/dom,

_DOM4:
* https://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#trees,

_DOM1:
Level 1 Document Object Model Specification
Version 1.0
W3C Working Draft 20 July, 1998
* http://www.w3.org/TR/WD-DOM/cover.html,
===
Document Object Model (DOM) Level 3 Core Specification
Version 1.0
W3C Recommendation 07 April 2004
* http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/DOM3-Core.html

dom'tool

name::
* McsEngl.dom'tool@cptIt,

_ADDRESS.WPG:
* http://software.hixie.ch/utilities/js/live-dom-viewer//

SPECIFIC

_SPECIFIC:
* HTML-DOM##
* XHTML-DOM##
* XML-DOM##

dom.EVOLUTING#cptCore546.171#

name::
* McsEngl.dom.EVOLUTING@cptIt,

2004.april: DOM3
DOM Level 3, the current release of the DOM specification, published in April 2004, added support for XPath and keyboard event handling, as well as an interface for serializing documents as XML.
[http://en.wikipedia.org/wiki/Document_Object_Model] 2010-10-01

2000 late: DOM2
DOM Level 2 was published in late 2000. It introduced the "getElementById" function as well as an event model and support for XML namespaces and CSS.
[http://en.wikipedia.org/wiki/Document_Object_Model] 2010-10-01

1998 late:
The initial DOM standard, known as "DOM Level 1," was recommended by W3C in late 1998. About the same time, Internet Explorer 5.0 shipped with limited support for DOM Level 1. DOM Level 1 provided a complete model for an entire HTML or XML document, including means to change any portion of the document. Non-conformant browsers such as Internet Explorer 4.x and Netscape 4.x were still widely used as late as 2000.
[http://en.wikipedia.org/wiki/Document_Object_Model] 2010-10-01

SPECIFIC

* lagMkp.specific,

_SPECIFIC: markup.Alphabetically:
* BML##
* document-markup
* DSSSL Document Style Semantics and Specification Language##
* HTML#cptItsoft568#
* HyTIME Hypermedia/Time-based Structuring Language##
* processing-markup
* SGML#cptIt133# Standard Generalized Markup Language#cptIt133#
* SMSL standard multimedia scripting language##
* SPDL Standard Page Description Language##
* data-representation-markup
* XHTML##
* XML#cptIt439#
* WIKITEXT#ql:wikitext-*###

_SPECIFIC_DIVISION.Doing:
* data-processing-markup#cptItsoft248.4#
* data-representation-markup#cptItsoft501.9#

lagMkp.BML

_CREATED: 1998dec13

name::
* McsEngl.lagMkp.BML@cptIt,
* McsEngl.conceptIt524,
* McsEngl.bean-markup-language@cptIt524,
* McsEngl.bml@cptIt524,

Hello,
I am the creator and architect of BML and also wrote most of the code. BML comes from IBM Research and is now available from IBM alphaWorks at http://www.alphaworks.ibm.com/formula/bml.
I joined this list a few days ago because I wanted to announce BML and also because I wanted to understand how BML and Coins relate (or not). I'm *so* glad this has been brought up already and will be replying to Bill's message shortly. Here's first a description of BML in my words:
BML is a markup language designed to describe the structure of (bean) component oriented programs in a directly executable form. The language allows you to describe what beans are to be created or looked up, how they are spsed to be configured (in terms of their property values, field values and other methods) and how they interact with other beans (in terms of events and event listeners). A BML document can be processed in one of two ways: by the BML "player" which takes a DOM representing a BML document and interprets it to "do" the described configurations / creations by making heavy use of Java reflection, or by the BML compiler which will take a BML document and generate equivalent Java code which, when compiled and run, will do the described things.
A few notes: - The player is very small - 35K jar file - and can be used even on a Web page using the Java plug-in. - While BML talks in terms of "beans", it can in fact handle any object, not just those that follows the beans conventions. - It makes *no* assumptions about the types of the beans, the type of events, the types of properties, etc.. It works by using a bunch of registries which provide type-specific (or whatever-specific) information.
- The BML implementations are carefully designed to be embeddable, with the ability to add new elements to the language or to change the behavior of the current BML elements.
- Using the above we have implemented (and are continuing to implement) various "value-added" elements that are optional, but useful for describing component oriented programs. A notable one is <add>, which allows you to create hierachies of arbitrary bean types using the same element.
If you've taken a look at BML and have comments / suggestions I'll be very glad to hear them! The BML license is not very conducive to making it usable for real things right now, but that'll be changing shortly.
Bye,
Sanjiva.
p.s.: My URL below is not-public; sorry.
------------------------------------------------------------------------------
Sanjiva Weerawarana, Ph.D.
Research Staff Member
IBM TJ Watson Research Center
Hawthorne, NY 10532
Tel: +1 914 784 7288 (t/l 863)
Fax: +1 914 784 6324 (t/l 863)
Email: sanjiva@watson.ibm.com
URL: http://lanka.watson.ibm.com/~sanjiva
[1998dec07]
===
A BML document is a component oriented program .. a program which says how to configure components and how to put them together to form the application. The BML processors take these documents (or rather, a standard DOM reprsenting them) and realizes the structure.
BML has *NOTHING* to do with XSL. (FYI, I am on the XSL Working Group for IBM.)
Wanting to create UIs via XSL transforms was certainly one of the original motivations for BML, and is certainly a valid *use* of BML - an XSL transform can generate a document that corresponds to the BML DTD.
[Sanjiva 1998dec07]

lagMkp.DSSSL (ISO/IEC 10179:1996)

name::
* McsEngl.lagMkp.DSSSL (ISO/IEC 10179:1996)@cptIt,
* McsEngl.conceptIt1018,
* McsEngl.DSSSL@cptIt1018,
* McsEngl.Document-Style-Semantics-and-Specification-Language@cptIt,

_GENERIC:
* standard#cptIt139#

_DESCRIPTION:
DSSSL is an international standard for associating processing with SGML documents. As you know, SGML itself is intended to allow the complete separation of the content of a document (text, structure, links), from the processing to be associated with it (usually formatting). So where a Word for Windows, Tex, or even LaTeX document would describe what a document looks like (in other words how a printer should "process" it), SGML documents would only describe the structure. Using DSSSL you can describe the processing of documents in a standard way. Since the two most common forms of document processing are formatting and transformation, DSSSL standardised these two processes first. Others may follow as they are needed. The first two are very powerful and many believe that DSSSL will "transform" (sorry) the world of SGML document processing.
[P.Prescod intro] 1998feb04
===
DSSSL is actually a full programming language, based on Scheme (a LISP dialect), and is very powerful. It can be used both as a stylesheet specifying fonts and positioning for the different elements and as a transformational language that can be used to transform documents from one DTD to another.
The most common use of DSSSL is to convert SGML documents to other formats better suited for presentation, like PDF (also known as Acrobat), PostScript, LaTeX, HTML or RTF. What the SGML WG is planning is to use DSSSL to specify how XML documents are to be displayed on screen.
[SOURCE: L.M. Garshol, XML INTRO, 1997aug14]
===
According to the ISO/IEC DIS 10179.2 Draft Standard, DSSSL was "designed to specify the processing of documents conforming to an SGML representation." The DSSSL specification contains two independent processes:
- the SGML Tree Transformation Process (STTP) and
- the SGML Tree Formatting Process (STFP).
Both of these processes can stand alone.
The SGML Tree Transformation Process (STTP) transforms one SGML document to another SGML document.
The SGML Tree Formatting Process (STFP) is the process of formatting a document. DSSSLite is a subset of STFP. DSSSLite is a very easy-to-understand solution to formatting of SGML information. DSSSLite is particularly suited to Electronic Display.
[http://navysgml.dt.navy.mil/dsssl.html]

SDQL

SDQL is simply that part of the larger DSSSL expression language that enables the accessing of properties of nodes in groves and the navigation of groves.  It uses the same syntax as the rest of DSSSL, that is a Scheme variant.  It is based on the basic grove data model (nodes and their properties) but has some built-in functions related to SGML (e.g., "gi", "att-string", etc.).  All the built-in functions are or can be defined in terms of primitives (e.g., node-property).  It includes some basic string-matching functions but does not attempt to provide any sort of complete full-text facility (which would be outside the stated scope of DSSSL in any case).
Note, however, that the syntax is largely arbitrary: what's important are the semantics of grove access.  Thus, you can expect XSL to include the functional equivalent (more or less) of SDQL even though it may provide an alternative syntax.
Cheers,
E.
-- <Address HyTime=bibloc> W. Eliot Kimber, Senior Consulting SGML Engineer Highland Consulting, a division of ISOGEN International Corp. 2200 N. Lamar St., Suite 230, Dallas, TX 95202.  214.953.0004 www.isogen.com </Address>

The parts of the DSSSL Standard

Prescod introduction 1997jul

DSSSL is divided into many different parts. This means that even if a part of the standard does not meet your current needs, the rest might.

1.1.1 Style Language
The style language provides a standardized, powerful language for describing the formatting of SGML documents. The DSSSL processors that I will discuss in this document implement the style language. You just download them from the Web, create an SGML document (with DTD) and a stylesheet, and execute the DSSSL processor. It will either create a formatted document in whatever wordprocessor or typesetting formats it supports, or else display the formatted result immediately. This tutorial covers only the style language. Transformation is creating a document that conforms to one DTD from one that conforms to another or changing the structure of a document within a single DTD.

1.1.2 Flow Objects
Flow objects provide a standard mechanism for describing the layout of a document. They represent layout constructs such as page sequences, paragraphs, hyperlinks and artwork. Flow objects have characteristics, such as a page sequence's margins, a paragraph's font size, a hyperlink's destination and a picture's height and width.
Usually you will create flow objects from within a style specification. But it might make sense to use the same layout model (the same set of flow objects) for systems that did not use the style language at all, for instance in formatting processes driven by a programming language like Perl or C++, or in word processors or browsers that did not support the full DSSSL Expression Language. If publishing tools share a common layout model, moving information from one tool to another may be an easier process in the future, even in environments that are not using SGML.

1.1.3 Transformation Language
The Transformation Language is a standard language for transforming SGML documents marked up according to one DTD into another. You could, for instance, transform a TEI document into DocBook or HTML. The Transformation Language is similar to the Style Language because they have a large common subset called the Expression Language.

1.1.4 The Document Model
DSSSL shares a document model with the recently modified HyTime standard. This model describes a document or a set of documents as "nodes" organized into a "grove". You can probably imagine how the elements in an SGML document could be construed as forming a tree, with larger, containing elements as the branches and smaller, contained elements as the leaves. The DSSSL/HyTime grove model extends this concept. Groves are trees of trees. Things like attribute values are expressed in trees attached to the main element tree and the DTD is a tree attached to the SGML document tree. Each branch or leaf in a tree is called a "node". Do not worry if you do not really understand all of that. DSSSL use does not depend on it. There are resources on the Web (www.sil.org/sgml/topics.html) where you can learn more about groves if you are interested.

1.1.5 The Query Language
The Query Language is for selecting and returning document components, just as SQL selects and returns particular rows from a database. The Query Language returns nodes from the DSSSL/HyTime document model described above. The Query Language is only available in DSSSL processors that support the "Query Feature".

dsssl'ResourceInfHmnn#cptResource843#

name::
* McsEngl.dsssl'ResourceInfHmnn@cptIt,

DSSSL LITE
http://www.falch.no/people/pepper/DSSSL-Lite/

DSSSList
The DSSSL user's mailing list. See http://www.mulberrytech.com/dsssl/dssslist.

dsssl'Tool

name::
* McsEngl.dsssl'Tool@cptIt,

Jade
James' DSSSL Engine. Jade is an implementation of the DSSSL style language. The current version is 0.8. See http://www.jclark.com/jade.

Version 0.3 of xslj, my XSL-to-DSSSL translator, is now available. This version includes a number of bug fixes (thanks for reports) and much improved HTML output when the CSS/HTML flow objects are used.
See http://www.ltg.ed.ac.uk/~ht/xslj.html for information on access, etc.
[{1997-11-22}]

lagMkp.HyTime (ISO-10744: 1992)

name::
* McsEngl.lagMkp.HyTime (ISO-10744: 1992)@cptIt,
* McsEngl.conceptIt1017,
* McsEngl.HyTime@cptIt,
* McsEngl.hytime@cptIt1017,
* McsEngl.Hypermedia/Time-based-Structuring-Language@cptIt,
* McsEngl.ISO10744-standard@cptIt,

_GENERIC:
STANDARD#cptIt139#
SGML#cptIt133#

_DESCRIPTION:
HyTime is a language for encoding the structure of hypermedia documents.
It is an extension of Standard Generalized Markup Language (SGML), which encodes the structure of text documents. HyTime is defined as an SGML document architecture. As such, it extends SGML by defining how composites of SGML constructs can be built to represent hypermedia structure.

HyTime inherits from SGML the ability to define
- multiple document models,
- open and integrated documents, and
- document structure independently of document presentation.

HyTime defines the following aspects of hypermedia document structure:
- addressing of document objects
- relationships between document objects
- numeric measurement of document objects
April 2, 1996 by Lloyd Rutledge
[http://dmsl.cs.uml.edu/standards/hytime.html]
===
HyTime is an ISO standard that defines an architecture for creating hypertext and hypermedia applications.
HyTime primarily addresses the problem of hyperlinking as a problem of addressing, in other words, locating objects in space or time. A key aspect of addressing is the use of queries to find things based on their properties.

HyTime is an SGML application, which means that it is designed using SGML as the notation language and defines a number of functions related directly to SGML constructs. The HyTime standard defines the HyQ query language as the recommended notation to use for queries within a HyTime context. HyQ is designed to directly reflect HyTime constructs and addressing methods and is therefore optimized for use within HyTime applications. HyQ is not tied to any particular retrieval or search engine and therefore represents an interchange language for queries that would then be interpreted into concrete queries using proprietary query languages or mechanisms.
[ftp://ftp.ifi.uio.no/pub/SGML/HyTime/HyQ-1.1.Kimber]

hytime'EVOLUTION#cptCore546.171#

name::
* McsEngl.hytime'EVOLUTION@cptIt,

In April of 1993, HyTime was received as International Standard ISO10744.

September, 1994. The First International HyTime Conference. Vancouver, B.C., Canada, 26-27 July, 1994. by Neill Kipp.

hytime'GROVE

name::
* McsEngl.hytime'GROVE@cptIt,

[http://www.sil.org/sgml/grovesKimber1.html 1997mar]

To oversimplify, DSSSL specifications operate on trees of nodes to create new trees (which may either represent a formated result, the "flow object tree" or a new SGML document {when doing transforms}). The nodes are organized into a specialized data structure we chose to call "groves" (because they are "independent trees and other stuff", which is more or less what a real-world grove is).

Technically, a grove is a directed graph of nodes (possibly cyclic when referential relationships are taken into account). Each node exhibits one or more "properties", which may be "atomic" values (strings, booleans, integers, etc.) or lists of nodes or references to nodes. (Thus a node is nothing more than a set of properties.)
Informally, a grove may be thought of as a "parse tree." In short, a grove is an ordinary "graph of nodes with properties" data structure specialized to meet the specific needs of the DSSSL and HyTime standards. Groves include special relationship types and some rules about how they can be constructed.

Groves are said to be "constructed" by a "grove construction process", which takes as input the result of parsing some data (e.g., an SGML document) and produces as output a grove of nodes (i.e., an abstract representation of the data structures and relationships described by the parsed data). In constructing an SGML grove, an SGML parser recognizes syntactic constructs, communicates those to the grove constructor, which then creates the appropriate node and/or properties in the grove. For example, when the parser sees a start tag, the grove constructor will create an "element" node. When the parser sees an attribute on the start tag, the grove constructor will create an "attributes" property for the element node, an attribute node within the attributes property (whose value is a node list), and so on.

You can create your own grove constructor using a tool like NSGMLS (part of SP package from James Clark). The output of NSGMLS is essentially a set of signals from the parser for each syntactic thing it saw. You can could then create a program (say in Perl), that created a literal grove in memory that you could then operate on. In other words, there's no magic in this grove thing: it's just normal computer science and data processing, abstracted a bit in its specification, specialized for SGML, and made implementation independent.

The node classes and properties for grove nodes are defined in a "property set definition document" (psdd), which is nothing more than a formal specification of the classes and their properties. The syntax and semantics of property set definition documents are defined in the soon-to-be-released corrected HyTime standard (ISO/IEC 10744:1992), but they're pretty obvious once you learn what all the attribute names mean.

The DSSSL standard contains the property set definition document for the SGML standard, which will also be in the corrected HyTime standard (and eventually in the revised SGML standard). In addition, the HyTime standard defines property sets for HyTime's semantic objects (the nodes a HyTime engine operates on after it as applied HyTime semantics to SGML documents and other data).
Property sets can be defined for any data notation and thus application-independent groves can be constructed according to those property sets. For example, given a property set for something like RTF it would be possible to build an "RTF grove" from Word documents. Once you had such a grove, you could apply grove-based processing to it, including DSSSL style specs and transforms, as well as HyTime location addressing and hyperlinking. However, there is no guarantee that the property set and grove mechanism is capable of expressing all aspects of any notation other than SGML.

Property sets and groves provide an implementation-independent data abstraction that disparate tools and specifications can communicate in terms of without the need for any tool to actually use that abstraction under the covers. For example, most SGML editors create their own unique tree view of SGML documents, which is what the editor then operates on. Today, each editor's tree view is different because the developers made different, sometimes arbitrary, choices about how to represent SGML documents in memory. The SGML data model is complex enough that there are many possible, equally-useful, ways to represent the result of parsing. However, because these tools all operate on SGML, their different views are similar enough that they could all provide an API that behaved as if they were using the SGML property set (and thus the tree structures that result from it) under the covers. This would have the advantage of providing a common access API for SGML documents that would be independent of the implementation choices each tool made. SGML document management systems could do the same thing.

[Hint: there's no difference between an SGML document manager that manages documents at the element level and an SGML editor except how the user interface looks. Any editor can be made into a document manager and any such document manager can be made into an editor.]
The HyTime standard also relies on groves and property sets in that all HyTime functionality is defined as operations on nodes in groves, rather than on the syntax of SGML documents. Thus, HyTime and DSSSL share the same fundamental abstract data view of SGML documents. This same abstract data view could be used by any other processor, standard or proprietary.

You can find out more about DSSSL and the SGML property set at James Clark's web site, http://www.jclark.com/dsssl

Every node (except the grove root) has exactly one origin. In groves, every node has exactly one origin node. A node is a _subnode_ of another node when the other node is its origin.

[This is a "parent child" relationship, but the grove design reserves the terms "parent" and "child" for those origin-to-subnode relationships that represent the "content" of nodes, as distinct from other properties that may contain subnodes but are not considered content by the semantics of the data notation from which the grove is constructed. In SGML, this makes it possible to clearly distinguish what we normally think of as the "content" of elements (data characters and subelements) from all the other properties that elements have, like attributes, markup, element types, and so on.

Each node class can designate a single "content" property. The content property may be either atomic, meaning that its value is a string, integer, boolean, etc. (or list thereof), or nodal, meaning that its value is a node list. When the value is nodal, the property is also said to be the "children" property of the node. Thus, in addition to being the origin of the nodes in the content property, the node is also the parent of the nodes in its content property and those nodes are its children.

Given this distinction between subnodes and the subset of subnodes that are also children, it should be clear that one can get two views of a grove: the "subnode tree", which includes all nodes in a grove and is defined by the origin-to-subnode relationships, and the "content tree" view, which includes all nodes that are the root of a content tree and the nodes in the content properties of those nodes. Note that there may be many discontiguous content trees in a grove.

For example, in the SGML property set, each element node has several subnode properties, including the attributes property and the content property.
The attributes property value is a node list of attribute nodes.
The content property is a node list of those nodes that can occur inside elements: datachars, elements, PIs, comments, etc. Both the attribute nodes in the attributes property and the nodes in the content property have the element as their origin, but only the nodes in the content property have the element as their parent. When you take the subnode tree view of the element, you will see all the nodes in all the subnode properties. When you take the content tree view, you will only see the nodes in the content property.

This distinction makes it easier to write processors, addresses, and queries that restrict themselves to the *semantic content* of the data, which is something most SGML processing needs to do. For example, in HyTime, tree addressing is normally applied to the content tree rooted at the document element--you don't want to have to account for all the attributes and other "non-content" properties of elements when calculating tree addresses. By having this fundamental distinction between content trees and other stuff, you don't have to build the distinction into the semantics of every address, query and processor.

By the same token, when you want to use tree addressing to get at attributes, you can do so by asking for the subnode tree instead of the content tree.

Finally, the property set can define a particular node as being the "principle tree root", meaning that it is the root of the content tree that should be used by default if a specific tree root is not specified. In SGML, this is, of course, the document element, which is the root of the element content tree.]

> I have come to assume that the axiom of extensionality is not assumed
> to hold, so that distinct sets may have exactly the same elements. Or
> did I miss something?

Yes. The nodes in a grove are ordered, such that every node is distinguished by being enumerated within the node list property that contains it. Thus the three apparently identical paragraphs above are actually distinguished by their position within the document.
In addition, the P element in the second section is distinguished from the first two by having a different origin property (it's origin is the Section element within which it occurs).

hytime'HYPERLINKING

name::
* McsEngl.hytime'HYPERLINKING@cptIt,

As stated in the introduction, one of the most important features of HyTime is its support for hyperlinking through the indirect addressing of information objects, in addition to the use of direct addressing as provided by SGML.
[SOURCE: Ferris 1995]

hytime'human#cptCore401#

name::
* McsEngl.hytime'human@cptIt,


David Barron, Professor, http://diana.ecs.soton.ac.uk/~dwb/cv.html,
John F. Buford
Leslie Carr
David G. Durand, graduate student, http://cs-pub.bu.edu/students/grads/dgd/Home.html,
Ralph Ferris
Neill Kipp, http://csgrad.cs.vt.edu/~nkipp/,
Maria da Graηa Campos Pimentel
Hans Holger Rath
Lloyd Rutledge http://web.cs.uml.edu/~lrutledg/

hytime'ResourceInfHmnn#cptResource843#

name::
* McsEngl.hytime'ResourceInfHmnn@cptIt,

http://dmsl.cs.uml.edu/standards/hytime.html

http://csgrad.cs.vt.edu/~nkipp/hytime.html

http://www.wpi.edu/~kal/hytimeex.html - size 1K - 9 Jun 95

http://www.phxdata.com/hytime.html
HyTime Application Development Guide in PDF

Distributed Multimedia Systems Laboratory Publication Page This site contains some papers on HyTime published by the Distributed Multimedia Systems Laboratory at the University of Massachusetts - Lowell.

HyTime Application Development Guide This guide introduces SGML and HyTime and describes a model for developing appplications that use them. It is written by Ralph Ferris of Fujitsu Open Systems Solutions, Inc. and edited by Victoria Taussig Newcomb of TechnoTeacher, Inc.

Making Hypermedia Work: A User's Guide to HyTime by Steve J. DeRose and David G. Durand The book described in this page is currently the only book published and available on HyTime.

An Object-Oriented Multimedia Database for a News-On-Demand Application This article demonstrates the use of HyTime for a news-on-demand service.

TechnoTeacher HyTime Conference Proceeding Site This site contains papers from the HyTime Summer Conferences in Vancouver and other conferences.

Understanding the HyTime HyQ Query Language A brief tutorial introduction to the HyQ language, by Elliot Kimber.

Altavista search results

Word count: HyTime:7195

Documents 11-20 of about 2000 matching some of the query terms; best matches first.

name::
* McsEngl.Documents 11-20 of about 2000 matching some of the query terms; best matches first.@cptIt,

comp.text.sgml Shadow Archive
Subject: Reply: HyTime Addresses of Marked Sections. Submitted to: COMP.TEXT.SGML. Submitted by: Len Bullard (bullardc@source.asset.com ) Date Of... http://www.let.ruu.nl/C+L/loeffen/archive/cts/a/1994/19940627.5 - size 5K - 4 Feb 96

comp.text.sgml Shadow Archive Subject: Reply: HyTime Addresses of Marked Sections. Submitted to: COMP.TEXT.SGML. Submitted by: Eliot Kimber (kimber@passage.com ) Date Of Submission: 26... http://www.let.ruu.nl/C+L/loeffen/archive/cts/a/1994/19940626.3 - size 9K - 4 Feb 96

No Title HyTime ?HyTime VERSION "ISO/IEC 10744:1992" HYQCNT=32 ?HyTime MODULE base ?HyTime MODULE measure dimref markfun ?HyTime MODULE locs ?HyTime MODULE links... http://star.cs.vu.nl/~jrvosse/HyTime/lynda.esis - size 8K - 17 Aug 95

comp.text.sgml: subject listing Subject: HyTime - how to link into another document ? HELP ! Submissions: Dex Smith, dd. Aug. 29, 1991 (73 lines) Back To Complete Subject Listing on... http://www.let.ruu.nl/C+L/loeffen/archive/cts/s/123.htm - size 478 bytes - 23 Feb 96

comp.text.sgml: subject listing Subject: HyTime - how to link into another document ? Submissions: Naito Hiroshi, dd. Aug. 22, 1991 (52 lines) Herman R. Silbiger, dd. Sept. 6, 1991 (127... http://www.let.ruu.nl/C+L/loeffen/archive/cts/s/120.htm - size 571 bytes - 23 Feb 96

HyTime DTD HyTime DTD. Hypermedia Time-based Structuring Language Catalog of HyTime Architectural Forms and HyTime SGML Specification Version 2.0, June 28, 1993, by... http://www.loria.fr/~bonhomme/DTD2HTML/HyTime/DTD-HyTime.html - size 2K - 9 Sep 95

<TAG>: Space and Time in HyTime October, 1992. Space and Time in HyTime. by Michel Biezunski. Bio: Michel Biezunski is a consultant for Electronic Documentation at Moderato in Paris,... http://www.sgml.com/tag/5100101.htm - size 1K - 3 Jan 96

Using HyTime as a basis for hypertext interchange Previous: Representing Microcosm links Up: Using HyTime to Represent Microcosm Linkbases Next: Conclusions. Using HyTime as a basis for hypertext... http://www.ecs.soton.ac.uk/rj/hiticstr/section3.6.html - size 3K - 8 Oct 93

HyTime HyTime. [Set] 1. 2. <<<Prev. HyTime: S. GML. -based Hypermedia Standard. Arose from need to mark up music. Set of ``meta DTDs'' Time and space... http://www.meta.cgl.uwaterloo.ca/Courses/ICR/HTML/hypermedia5-3-2.html - size 4K - 4 Apr 96

Documents 21-30 of about 2000 matching some of the query terms; best matches first.

name::
* McsEngl.Documents 21-30 of about 2000 matching some of the query terms; best matches first.@cptIt,

comp.text.sgml Shadow Archive Subject: Reply: HyTime and hypertext. Submitted to: COMP.TEXT.SGML. Submitted by: Jonathan Rosenberg (jxr@thumper.bellcore.com ) Date Of Submission: 09... http://www.let.ruu.nl/C+L/loeffen/archive/cts/a/1991/19910809.1 - size 1K - 4 Feb 96

comp.text.sgml Shadow Archive Subject: Reply: HyTime and hypertext. Submitted to: COMP.TEXT.SGML. Submitted by: Brad Might (jbm@infinity.hal.com ) Date Of Submission: 08 Aug 1991... http://www.let.ruu.nl/C+L/loeffen/archive/cts/a/1991/19910808.1 - size 2K - 4 Feb 96

comp.text.sgml Shadow Archive Subject: Reply: HyTime Architectural Forms: Question. Submitted to: COMP.TEXT.SGML. Submitted by: News manager - ulowell (usenet@ulowell.ulowell.edu )... http://www.let.ruu.nl/C+L/loeffen/archive/cts/a/1993/19930622.16 - size 4K - 4 Feb 96

CACM Nov. 1991: HyTime Hypermedia / Time-bsed Document Structuring Language HyTime Modules. http://ei.cs.vt.edu/papers/SMART95/CACMcov/HyTimeMods.html - size 168 bytes - 15 Oct 95

comp.text.sgml Shadow Archive Subject: HyTime Addresses of Marked Sections. Submitted to: COMP.TEXT.SGML. Submitted by: Len Bullard (bullardc@source.asset.com ) Date Of Submission: 24... http://www.let.ruu.nl/C+L/loeffen/archive/cts/a/1994/19940624.9 - size 3K - 4 Feb 96

WWW-Talk 1992: MIME vs. HyTime MIME vs. HyTime. jdanner@leland.stanford.edu Mon, 30 Nov 92 19:27:50 PST. Messages sorted by: [ date ][ thread ][ subject ][ author ] Next message: Dan... http://www.eit.com/goodies/lists/www.lists/www-talk.1992/0379.html - size 2K - 22 Apr 96

SGML: HyTime Guide Ralph Ferris: HyTime Application Development Guide. Path: msunews!uwm.edu!math.ohio-state.edu!howland.reston.ans.net!ix.netcom.com!netnews From:... http://www.sil.org/sgml/ferrisan.html - size 1K - 23 May 95

HyTime $B$N=hM}%b%G%k (J Next: $BBN7O7A. Up: HyTime $B$K$h$k%O%$%Q%j%s%/5-=R (J Previous: HyTime $B$K$h$k%O%$%Q%j%s%/5-=R (J. HyTime $B$N=hM}%b%G%k (J.... http://www.panasonic.co.jp/mgcs/tech/std/jbms/node28.html - size 3K - 16 Apr 96

HyTime $B$K$h$k%O%$%Q%j%s%/5-=R (J Next: HyTime $B$N=hM}%b%G%k (J Up: $BB?8@8l%O%$%QJ8=q$N5-=RK! (J Previous: $B8@8lFCDj$NJ}K!$N4+9p (J. HyTime $B$K$h$k%O%$%Q%j%s%/5-=R (J. ... http://www.panasonic.co.jp/mgcs/tech/std/jbms/node27.html - size 3K - 16 Apr 96

SGML: SGML/HyTime in SGML Subject: HyperText as it was meant to be Date: 28 Mar 1996 15:58:14 GMT<br> Now you can read about SGML/HyTime in an electronic document that is... http://www.sil.org/SGML/hyperGuidSGML.html - size 2K - 31 Mar 96

Documents 31-40 of about 2000 matching some of the query terms; best matches first.

name::
* McsEngl.Documents 31-40 of about 2000 matching some of the query terms; best matches first.@cptIt,

comp.text.sgml Shadow Archive Subject: HyTime Finite Coordinate Space Locations. Submitted to: COMP.TEXT.SGML. Submitted by: Eliot Kimber (drmacro@vnet.IBM.COM ) Date Of Submission: 18... http://www.let.ruu.nl/C+L/loeffen/archive/cts/a/1993/19930618.1 - size 15K - 4 Feb 96

comp.text.sgml: subject listing Subject: HyTime/SGML info wanted. Submissions: Arthur Pols, dd. Aug. 15, 1991 (21 lines) Carsten Bormann, dd. Aug. 16, 1991 (465 lines) Steve Sanderson,... http://www.let.ruu.nl/C+L/loeffen/archive/cts/s/117.htm - size 907 bytes - 23 Feb 96

comp.text.sgml: subject listing Subject: HyTime - how to link into another document? HELP! Submissions: Brad Might, dd. Aug. 8, 1991 (68 lines) Back To Complete Subject Listing on remote... http://www.let.ruu.nl/C+L/loeffen/archive/cts/s/115.htm - size 477 bytes - 23 Feb 96

comp.text.sgml: subject listing Subject: HyTime and hypertext. Submissions: Brad Might, dd. Aug. 8, 1991 (36 lines) Jonathan Rosenberg, dd. Aug. 9, 1991 (20 lines) Back To Complete... http://www.let.ruu.nl/C+L/loeffen/archive/cts/s/114.htm - size 541 bytes - 23 Feb 96

comp.text.sgml: subject listing Subject: HyTime: What BIG Projects/O. Submissions: Les Carr, dd. July 26, 1993 (10 lines) Eliot Kimber, dd. July 26, 1993 (15 lines) Marc Andreessen, dd.... http://www.let.ruu.nl/C+L/loeffen/archive/cts/s/1103.htm - size 724 bytes - 23 Feb 96

comp.text.sgml: subject listing Subject: HyTime Architectural Forms: Question. Submissions: News manager - ulowell, dd. June 22, 1993 (74 lines) Back To Complete Subject Listing on... http://www.let.ruu.nl/C+L/loeffen/archive/cts/s/1024.htm - size 477 bytes - 23 Feb 96

The HyTime Extension of SGML Previous: Document Type Definitions Up: SGML Previous Page: Document Type Definitions Next Page: Representation of Hypermedia Documents Using HyTime. The...

http://www.cs.purdue.edu/homes/markus/pdelab/report/subsubsection3.2.1.2.html - size 2K - 22 Feb 95
The HyTime Standard: Course at Hypertext '96 HOME | NEW | ABOUT PASSAGE | PRODUCTS AND SERVICES | TRAINING | PUBLICATIONS | SGML INFO | FEEDBACK. An Introduction to the HyTime Standard. W. Eliot...

http://www.passage.com/new/ht96wek.htm - size 2K - 6 Apr 96
HyTime DTD: Top element tree(s) HyTime DTD: Top element tree(s) HYDOC. HYFUNK. HYLEX. HYOP.

HYPD. HYQ. TIMEOFF. HYDOC. HYDOC | (I): activity axis batrule bibloc calspec clink dataloc...

http://www.loria.fr/~bonhomme/DTD2HTML/HyTime/TREE-HyTime.html - size 37K - 9 Sep 95
All elements in HyTime DTD All elements in HyTime DTD. abstime. accanch. acclink. acctype.

activity. axis. baton. batrule. bibloc. calspec. clink. dataloc. date.

descdef. desctab....

http://www.loria.fr/~bonhomme/DTD2HTML/HyTime/ALL-HyTime.html - size 5K - 9 Sep 95
[Prev] p. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [Next]


Top Elements in HyTime DTD Top Elements in HyTime DTD. hydoc. hyfunk. hylex. hyop. hypd. hyq.

timeoff. Top Element List All Element List Tree. HyTime DTD.

http://www.loria.fr/~bonhomme/DTD2HTML/HyTime/TOP-HyTime.html - size 802 bytes - 9 Sep 95
<TAG>: HyTime Engine Prototype Demonstrated at TechDoc Winter March, 1992. HyTime Engine Prototype Demonstrated at TechDoc Winter. by Editorial Staff. Abstract: No abstract available.Previous | Table of Contents |...

http://www.sgml.com/tag/5030801.htm - size 925 bytes - 3 Jan 96
<TAG>: GCA presents a special HyTime /SGML Seminar May, 1993. GCA presents a special HyTime /SGML Seminar. by Editorial Staff. Abstract: No abstract available.Previous | Table of Contents | Forward.

http://www.sgml.com/tag/6051201.htm - size 901 bytes - 3 Jan 96
Comp.text.sgml subject groups DSSSL. HyTime. FOSI's. SMSL. SMDL. HTML. Java. ESIS. ODA. TEI.

SPDL. PDF. C++ SmallTalk.

http://www.let.ruu.nl/departments/C+L/loeffen/archive/cts/sgroups.htm - size 778 bytes - 6 Mar 96
comp.text.sgml Shadow Archive Subject: HyTime problems. Submitted to: COMP.TEXT.SGML.

Submitted by: Jens Meggers (meggers@i4.informatik.rwth-aachen.de ) Date Of Submission: 30 Aug 1994...

http://www.let.ruu.nl/C+L/loeffen/archive/cts/a/1994/19940830.4 - size 2K - 4 Feb 96
comp.text.sgml Shadow Archive Subject: "Was: HyTime problems" <Hypermedia-Mail> Submitted to: COMP.TEXT.SGML. Submitted by: Steinar Bang (steinarb@falch.no ) Date Of Submission: 01...

http://www.let.ruu.nl/C+L/loeffen/archive/cts/a/1994/19940901.5 - size 1K - 4 Feb 96
HyTime CS4624 HyTime. HyTime is an ISO standard based on SGML for hypertext, hypermedia, and time-based multimedia performances.

Locations in: time, space,...

http://ei.cs.vt.edu/~mm/s96/sspace/HyTime_698.html - size 1K - 15 Jan 96
<TAG>: Is it High Time for HyTime ?

September, 1994. Is it High Time for HyTime ? Making Hypermedia Work, A User's Guide to HyTime , Steven J. DeRose and David G.

Durand, Kluwer Academic...

http://www.sgml.com/tag/7090102.htm - size 1K - 3 Jan 96

The First International HyTime Conference September, 1994. The First International HyTime Conference. Vancouver, B.C., Canada, 26-27 July, 1994. by Neill Kipp. Bio: Neill Kipp is the head of... http://www.sgml.com/tag/7090101.htm - size 1K - 3 Jan 96

SGML und HyTime Home. Zurόck. Index. Kontakt. Info. SGML und HyTime. 1. Einfόhrung in SGML. 1.0. SGML. Die SGML declaration. Die Document Type Definition. Das...

http://www.ifs.univie.ac.at/~b9205857/sgml/sgml.html3 - size 7K - 18 Dec 95


HyTime RENDITION Module RENDITION MODULE - Section: 11 - Page: 89. Object Modification - Clause: 11.1 - Page: 89. Wand and Modifier Rules - Clause: 11.1.1 - Page: 90-->...

http://www.sgmlopen.org/sgml/docs/library/renditin.htm - size 6K - 2 Sep 95
NLOK.VARIANTER: NLOK.VARIANTER: Attributes. HYTIME. HyTime architectural form.

HyTime-namn. Definition. HyTime attribute: Identifies the element or it's content as being...

http://info.admin.kth.se/SGML/Bibliotek/DTDer/FMVGrund-DTD/dtd2html/nlok.varianter.attr.html - size 4K - 28 Jun 95
HyTime MEASUREMENT Module MEASUREMENT MODULE - Section: 7 - Page: 38. Dimension Specification - Clause: 7.1.2 - Page: 39. <!element dimspec -- Dimension specification -- --...

http://www.sgmlopen.org/sgml/docs/library/measure.htm - size 11K - 2 Sep 95
The Previous: References Up: HyTime as a Descriptive Language for Object Composition Petri Net Models Next: About this document ...

Previous Page: References...

http://www.cs.purdue.edu/homes/markus/pdelab/report/section3.8.html - size 2K - 22 Feb 95
HyTime LOCATION Module LOCATION ADDRESS MODULE - Section: 8 - Page: 50. Location Source - Clause: 8.2.1 - Page: 52. <!attlist locsrc -- use: dataloc treeloc pathloc relloc...

http://www.sgmlopen.org/sgml/docs/library/location.htm - size 12K - 2 Sep 95
HyTime HYPERLINKS Module HYPERLINKS MODULE - Section: 9 - Page: 69. Independent Link - Clause: 9.2.1 - Page: 72. <!element ilink -- Independent link -- - O (%HyBrid;)* >...

http://www.sgmlopen.org/sgml/docs/library/linking.htm - size 3K - 2 Sep 95
HyTime Support Next: Text Entries Up: Overview Previous: SGML Declaration. HyTime Support. This document has some minimal HyTime support. The Hytime linking mechanisms...

http://ceresweb.ucdavis.edu/standards/Catalog/html/node9.html - size 2K - 20 Mar 96
ADR.INUTI: ADR.INUTI: Attributes. HYTIME. HyTime architectural form.

HyTime-namn. Definition. HyTime attribute: Identifies the element or it's content as being...

http://info.admin.kth.se/SGML/Bibliotek/DTDer/FMVGrund-DTD/dtd2html/adr.inuti.attr.html - size 873 bytes - 28 Jun 95
The HyTime Engine Previous: The HyQ Query Language Up: HyTime Previous Page: The HyQ Query Language Next Page: OCPN Model. The HyTime Engine.

The processing performed by...

http://www.cs.purdue.edu/homes/markus/pdelab/report/subsection3.2.4.html - size 2K - 22 Feb 95
Using HyTime to Represent Microcosm Linkbases Up: Using HyTime to Represent Microcosm Linkbases. Using HyTime to Represent Microcosm Linkbases. L. Carr, H. Davis and W. Hall....

http://www.ecs.soton.ac.uk/rj/hiticstr/hiticstr.html - size 1K - 8 Oct 93
[Prev] p. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [Next]
Alta Vista is hiring! · About Us · Legal · Tips · Add/Delete URL · Feedback · Text-Only
Copyright © 1996 Digital Equipment Corporation. All rights reserved.

DeRose; S.J. and D.G. Durand

name::
* McsEngl.DeRose; S.J. and D.G. Durand@cptIt,

Making Hypermedia Work: A User's Guide to HyTime
by Steve J. DeRose and David G. Durand

Table of contents
Contents i Foreword xi Conventions xv Acknowledgments xvii

PART I

1 Introduction 3
1.1 Purpose and scope of this book 6
1.2 What is HyTime for? 8
1.3 What can HyTime do? 9
1.4 How to use this book 10

2 Hypermedia Concepts 13
2.1 Introduction 13
2.2 Print examples of hyperdocuments 14
2.3 Documents and links 21
2.4 Open systems 27

3 Overview of SGML 35
3.1 What is SGML, really? 35
3.2 Parts of an SGML document 39
3.3 SGML basics 40
3.4 A sample SGML document 51
3.5 Optional SGML features 58
3.6 Formal public identifiers 61

4 HyTime Quick Start 65
4.1 Clink, the basic point-to-point link 65
4.2 Linking to destinations without IDs 67
4.3 HyTime locators 68
4.4 Graphic locations and geometry 70
4.5 Linking by searching 71
4.6 More complex link structures 72
4.7 HyTime and SGML element types 74

5 The Structure of HyTime 77
5.1 Basic HyTime concepts 77
5.2 Architectural forms 79
5.3 SGML issues in HyTime 90
5.4 HyTime's hyperdocument model 92
5.5 How a HyTime system fits together 94
5.6 HyTime declarations 97
5.7 The HyTime modules 99

PART II

6 Basic Measurement 103
6.1 Introduction to measurement 103
6.2 Geometric concepts 104
6.3 Architectural forms 105

7 Hyperlinks 109
7.1 Introduction 109
7.2 Basic Concepts 109
7.3 Architectural forms 114
7.4 Hyperlinks and webs 118

8 Locating Data Objects 121
8.1 Introduction 121
8.2 Naming, counting and querying 121
8.3 Named location addresses 123
8.4 Coordinate location addresses 131
8.5 Semantic locations 145
8.6 Creating robust pointers 151
8.7 Aggregates and spans 153

9 The HyTime Query Language 159
9.1 Purpose and basic capabilities 159
9.2 An example 160
9.3 HyQ syntax 162
9.4 The HyQ functions 163
9.5 HyQ and other query languages 186

10 Modifying a DTD for HyTime 189
10.1 Introduction 189
10.2 HTML and the World Wide Web 190
10.3 The DTD conversion 195
10.4 Evaluating a HyTime product 202
10.5 Summary 203

PART III

11 Lexical Types and Properties 207
11.1 Introduction 207
11.2 Introduction to lexical types 208
11.3 HyTime lextype type constraints 210
11.4 Defining lexical models 210
11.5 HyLex 213
11.6 Accessing public lexical types 220
11.7 HyTime properties 222
11.8 Property definition 227
11.9 Inherent property definitions 230

12 Extending HyTime 237
12.1 Introduction 237
12.2 HyQ extensions 238
12.3 Lexical types 240
12.4 Properties 241
12.5 Specific elements for media links 241
12.6 A protocol for hot spots on graphs 246
12.7 TEI 248

13 Advanced Measurement and Scheduling 253
13.1 Introduction 253
13.2 Units of measurement 254
13.3 Axes and finite coordinate spaces 257
13.4 Events and extents 260
13.5 Representing tables 267
13.6 Marker functions 271
13.7 Other features 273

14 The HyTime Base Module 275
14.1 Introduction 275
14.2 Entity trees 276
14.3 Base module option summaries 276
14.4 The all-id attribute form 280
14.5 The all-lex attribute form 284
14.6 The lexmodel architectural form 285
14.7 The lexord architectural form 285
14.8 The all-ref attribute form 287
14.9 The all-act 292
14.10 The any-dcn 293
14.11 The all-qual 294

APPENDIXES
Appendix A HyTime Meta-DTD 295
A.1 Base module (clause 6) 296
A.2 Measurement (clause 7) 301
A.3 Location address (clause 8) 305
A.4 Hyperlinks (clause 9) 309
A.5 Scheduling (clause 10) 310
A.6 Rendition (clause 11)
A.7 Useful types and notations 317 Measurement (annex A.5) 318
Appendix B Graphics Notations 321
Appendix C HyTime Reference Material 327
Bibliography 333
Glossary 341
Index 359

SGML OPEN

``SGML Open'' ``is a non-profit, international consortium of providers of products and services, dedicated to accelerating the further adoption, application and implementation of SGML, the international standard for open interchange of documents and structured information objects. SGML Open provides its members with an open forum to discuss market needs and directions, and to recommend guidelines for product interoperability. The consortium receives, coordinates and disseminates information describing SGML methodologies, technologies, and implementations.'' For more information, contact Mary Laplante, Executive Director, SGML Open, 218 Parliament Drive, Corapolis, Pennsylvania 15108 USA. http://www.sgmlopen.org

WWW PAGES

HyTime Pages
Robin Cover's SGML Web Page HyTime Entry
Neill Kipp's HyTime Page
TechnoTeacher's HyTime Page

hytime'TOOL

name::
* McsEngl.hytime'TOOL@cptIt,

hytime'BROWSER

name::
* McsEngl.hytime'BROWSER@cptIt,

``SoftQuad Panorama,'' a HyTime document editor/browser. (SoftQuad Inc., 56 Aberfoyle Crescent, Suite 810, Toronto, Ontario, CANADA M8X 2W4, +1 416 239 4801, fax +1 416 239 7105, linda@sq.com, Applelink: SoftQuad.)

hytime'Companies with HyTime Products

name::
* McsEngl.hytime'Companies with HyTime Products@cptIt,

Electronic Book Technologies, Inc. (EBT)

SoftQuad Inc.

Synex Information, AB

TechnoTeacher, Inc.

hytime'EDITOR

name::
* McsEngl.hytime'EDITOR@cptIt,

hytime'ENGINE

name::
* McsEngl.hytime'ENGINE@cptIt,

Validating compliance of HyTime-derived element instances to their base architectural forms is the responsibility of a ‘‘HyTime engine.’’ The use of the word ‘‘instances’’ in the preceding sentence should be noted: The HyTime engine is responsible for reporting HyTime errors only at the time they occur in the document. There is no requirement that the HyTime engine report DTD declarations that might allow non-HyTime compliant element instances to be created in a particular document. The responsibility for validating an element’s use with respect to the DTD belongs to the SGML parser - which has no knowledge of HyTime. Applications must be designed to deal with HyTime errors reported by the HyTime engine if and when they occur during HyTime processing, which can only occur after the SGML parser has completed its work.
[SOURCE: Ferris 1995]

``HyMinder,'' an SGML/HyTime engine. (TechnoTeacher, Inc., P. O. Box 23795 Rochester, New York 14692-3795 USA. hyminder@techno.com.)

``HyOctane,'' a HyTime engine. (Interactive Media Group, Center for Productivity Enhancement, University of Massachusetts--Lowell, One University Avenue, Lowell, Massachusetts 01854 USA. buford@uml.edu.)

hytime'HyMinder

name::
* McsEngl.hytime'HyMinder@cptIt,

[http://www.techno.com/HyMinder.html]
HyMinder System Product Information

What is HyMinder?
TechnoTeacher, Inc.'s HyMinder System is a C++ library which offers an easy-to-use and comprehensive API to the information contained in SGML/HyTime documents. It is designed for those who wish to write applications that can create and/or process hypermedia documents represented in SGML/HyTime as well as for those who wish to create object-oriented SGML applications or retrofit existing applications so that data can be interchanged in the form of SGML documents.
The HyMinder system allows programmers to regard each syntactic and semantic construct described by the SGML and HyTime standards as a persistent C++ object; all such objects can be randomly accessed and manipulated while in database form, and/or automatically exported as SGML/HyTime. Using the HyMinder system, the structures, attribute values, contents, etc. of several databased SGML/HyTime documents can be simultaneously and rapidly read, written, and/or altered.

What does HyMinder do?
The current version of the HyMinder System, 0.8.4, performs HyTime-specific tasks such as location address or query resolution, and hyperlink processing, providing anchor notification and inter- and intra-document traversal option information. Support for all of HyTime's facilities is planned.

Will it run on my machines?
Supported operating systems:
Linux Solaris 2.3 SunOS 4.1.3 Windows 3.1, 95, NT
Supported compilers:
GNU g++ 2.6.3 SPARCompiler C++ 4.0.1 Visual C++ 2.0 Borland C++ 4.5
Other support is planned; please make your needs known (send us mail!).

Licenses:
The terms and conditions of specific Developer Licenses and Application Licenses are contained in written agreements. (The information in this circular is subject to modification by changes, additions and deletions without notice.) Not shown in the fee schedules below are shipping fees, media charges (a nominal charge for each actual copy of the HyMinder library and documentation on magnetic media), applicable taxes, and the additional costs of optional technical and instructional services, if any.

Developer Licenses:
A HyMinder Developer License consists of the right to use the HyMinder library for the purpose of developing applications that contain and/or use the HyMinder engine, and for testing such applications prior to distribution or deployment for use. This nonexclusive, nontransferable license is good for a year at a time and allows for the use of the HyMinder library by one named person (or, alternatively, by one named machine to be used only by one person during any one period of time). Each Developer License is provided for one specific computer platform.

Pricing:
There is no license fee for HyMinder Developer Licenses; however, new licensees must purchase one year of support service in advance. Support for HyMinder Developer Licenses may be purchased annually for $5,500 plus $1,000 per developer (for a minimum first-year support fee of $6,500).

Developer License Support fees include the cost of maintenance, all updates and new releases, technical support, and ten Distributable End User Licenses.
Schedule of Developer License Support Fees: ----------------------------------------------------- $5,500 plus $1,000 per developer (minimum of $6,500) ===================================================== number of developers price per year 1 $ 6,500 2 $ 7,500 5 $ 10,500 10 $ 15,500 20 or more $ 25,000 -----------------------------------------------------


Unlimited Single Application Licenses:
A HyMinder Unlimited Single Application License consists of the right to incorporate all or any portion of the HyMinder library in an unlimited number of copies of exactly one application, a description of which forms part of the license agreement.

Pricing:
A HyMinder Unlimited Single Application License may be purchased for $65,000. Each new Application costs an additional $65,000, with the total cost of Application Licenses not to exceed $250,000 per licensee. A license for unlimited numbers of copies of an unlimited number of applications may be purchased for $250,000.
Schedule of Unlimited Single Application License Fees: ----------------------------------------------------- $65,000 per application ===================================================== number of applications price 1 $ 65,000 2 $130,000 3 $195,000 4 or more $250,000 -----------------------------------------------------
Note: The applicable Developer License Support Fee must be paid annually for the continuation of maintenance.

How can I get more info?
Internet: www-info@techno.com
main +1 716 389 0961 fax +1 716 389 0960
TechnoTeacher, Inc.
P.O. Box 23795 Rochester, New York 14692-3795 USA (courier: 3800 Monroe Avenue, Pittsford, NY 14534-1330 USA)
Note: Some of the foregoing names are trademarks of their respective owners.
Note: All amounts are shown in US dollars.
Last Modified: 10.04.1995 / vtn@techno.com

High Text

[http://www.hightext.com/whatsht.htm]
High Text Consulting Activities
High Text is a company based in Paris, France, that specializes in electronic document engineering.

We are working more specifically on applications based on the HyTime standard that we consider as a long-term vision for information structure management, and therefore as a base for modelling and expressing complex structures, either in the document or in the database environment.

We are now working on extending our expertise on DSSSL applications, because we consider this brand new ISO standard as extremely promising, for extending the usability of existing SGML applications. We welcome the convergence between DSSSL and HyTime as a starting point for exciting new, more powerful, unheard-of, information models and applications.

We consider our work as being primarily a help for teams of people who have decided to embark on the SGML wagon. We are working as well for helping people start implementing SGML applications as for helping those who have already invested in SGML and want to extend their applications to hyperdocument and database management.

As a consulting company, we have created and still are creating new applications, that we use to show ways to implement the ideas we are advocating. The first of these is called EnLIGHTeN, and is based on the Topic Map Architecture designed in the CApH group. We have plans to design and build other similar applications, and our current effort is to modularize them in order to facilitate their use in various contexts.

hytime'PARSER

name::
* McsEngl.hytime'PARSER@cptIt,

Topic Map Navigation

[http://www.hightext.com/sgmleu96.htm]
Tutorial
Friday, 17 May 1996
SGML Europe 96
Topic map navigation : a practical application of HyTime
Michel Biezunski, High Text, France

Topic Map Navigation is an SGML/HyTime-derived architecture. It is the first application that provides user-defined semantics and supports multiple document navigation. Users can create and maintain consistent electronic indices, glossaries, thesauri and tables of contents for multiple heterogeneous documents. Potential uses are: highly enriched technical documentation, Web management, database publishing, library cataloging, etc.
This tutorial is aimed at users who need to manage a web of documents and want to master the evolution and the meaning of links for documents that are constantly evolving and enriched. During the workshop, a Topic Map Browser that implements this architecture is presented.

For more information, email to: Minich96@aol.com

A User's Guide to HyTime FOREWORD Andy van Dam 1994

name::
* McsEngl.A User's Guide to HyTime FOREWORD Andy van Dam 1994@cptIt,

HyTime is the first official standard for describing the structure of time-based hypermedia documents. Its marketplace acceptance is yet to come. This book, presenting the first in-depth guide to the HyTime specification, both describes its key features and provides guidelines on how it is used. It has been written by two leading experts in the field who have had significant impact on its development and are experts in SGML, the prior standard that HyTime extends.
HyTime represents a confluence of two technical fields and the socio-politico-economic standards process. The two technical fields, hypertext/hypermedia and document processing based on declarative markup, have been maturing over the last three decades. The first researcher to build a hypertext system, Doug Engelbart, in the late '50's articulated his vision for computer systems that would augment human intellect and in the mid-'60's built NLS (the oNLine System) to realize that vision; this monumental system pioneered, among other features, outline editing, journaling, significant linking facilities, and mouse-based interaction with text and graphics on raster displays. In 1967 Theodor Nelson, coiner of the word hypertext, co-designed with me and my students the Hypertext Editing System, the first hypertext system to run on commercial computer and display equipment. These early hypertext systems allowed users not just to create and follow links, but also to do interactive editing and word processing far more sophisticated than was available via the line editors of the day, as well as to specify formatting codes for subsequent batch processing and printout. Linear document production, however, was a byproduct, not the main purpose of these interactive authoring and browsing systems. The second, much larger community worked on document production with increasingly sophisticated batch formatters. Here the leap forward was to replace procedural format codes and macros with declarative markup codes that separated the identification ("tagging") of document elements from their formatting, generalizing the commonly used format macros. In the 70's this idea was the focus of Charles Goldfarb's GML built at IBM and of Brian Reid's Ph.D. dissertation on Scribe at Carnegie-Mellon University.
While rich in functionality, both hypertext/hypermedia systems and document-production systems have been developed as closed, one-of-a-kind systems that force users to live on technology islands. Ted Nelson realized hypertext technology could make possible a universal, integrated super library or "docuverse;" however because of the lack of interoperability of today's closed systems, we have only "docuchaos." Standards, painful as they are to produce and implement and imperfect as they are by virtue of the politically charged process of compromise, at least have the virtue of being designed for interoperability. As one who has worked over several decades on 3D graphics standards, I am really pleased to see SGML taking off; already entire industry segments such as aerospace, telecommunications, and pharmaceuticals have agreed on DTDs (Document Type Definitions) that embody codes of practice for documentation in their industry, so that documents can be easily transmitted and exchanged, regardless of the systems used to author and present them.

The firm hand of the DOD has certainly played a useful role here, through the CALS initiative. On the other side of the spectrum, humanists, in the Text Encoding Initiative, have labored to produce a comprehensive DTD for data interchange in literary research. And most encouraging, vendors of word-processing software such as WordPerfect have announced support for SGML and are providing both import to and export from their proprietary formats. The key reason to prefer SGML as the exchange format over industry standards such as PostScript and RTF is that the latter describe merely formatting, not structures that can be presented on display media in a variety of ways; SGML is more powerful because it retains the vital information that describes the document not as a collection of typeset pages but as hierarchy of multi-media elements.
But the designers of the HyTime standard foresaw that SGML would not be powerful enough to deal with time-based multi/hypermedia "documents," since it lacked support for many aspects of rich hypertext and time-based media. HyTime's hypertext features are sufficiently complete to provide a superset of the features in many hypermedia publishing systems available today, including, for example, Brown's Intermedia system and the World Wide Web. It handles multimedia by providing detailed means for specifying coordinate systems and ranges, without specifying the representation, storage and presentation of the media themselves. It has features for scheduling and synchronizing these media as well, though they will probably not be available in the first HyTime engines. Thus HyTime will probably first be used primarily to encode hyperdocuments with text, sound, and 2D graphics and images. I hope that HyTime will open new areas of capability in synergy with industry proto-standards such as Apple's QuickTime that address related concerns.
Steve DeRose and Dave Durand are uniquely qualified to write the definitive book on HyTime. They are among the few with extensive experience in both hypermedia (since the late '70's) and in SGML (since the mid-'80's); a combination of expertise in both these areas still remarkably rare. Steve and Dave have published papers on SGML and mark-up theory. Steve is the chief architect of Electronic Book Technologies' DynaText system, the first commercially available SGML-based hypermedia publishing system, and wrote the SGML parser for that system. Both have been leaders in designing and documenting the hypertext part of the guidelines for the Text Encoding Initiative, as well as providing technical SGML advice to the project. Most importantly, at the first Hypertext Workshop in 1987 they advanced the first proposal for an SGML-based hypermedia system, and went on to influence the HyTime standard. Steve, for example, was a principal architect for HyQ, the query language of HyTime. Thus they write from deep experience and authority on HyTime, and have created a work that will be a key ingredient in the complex process of putting a standard into successful practice.
Andy van Dam
Providence, RI
January, 1994
[http://cs-pub.bu.edu/students/grads/dgd/foreword.html]

HyTime Application Development Guide (R. FERRIS 1995)

name::
* McsEngl.HyTime Application Development Guide (R. FERRIS 1995)@cptIt,

[http://www.phxdata.com/hytime.html]

PHOENIX DATA LABS
HyTime Application Development Guide
Version 1.2
May, 1995

We would like to express our appreciation to Ralph Ferris of Fujitsu Open Systems Solutions Inc, for allowing us to reproduce and present the HyTime Application Development Guide in PDF format, and for writing the guide in the first place.

Ralph has mentioned that some revisions and additions are forthcoming. We will publish those changes upon availability.

In discussions with others in the SGML community, the desire for this guide to be available in HTML format has been expressed. Provided there is adequate interest we will attempt to do so in the future, schedules permitting of course.

So why PDF in the first place? The primary reason is to facilitate publication of the guide for users without Postscript printing capabilities, and the added benefit of being able to view this manual in the original format style.

Additionally, the recent release of the PDF API for Netscape 2.0 will allow the user to view the manual within the native browser, provided your are running Windows 95 or NT. In the event you are not using these platforms, you can install the ADOBE AcroReader® viewer and configure it to spawn the external browser when the browser encounters a PDF file.Configuration instructions are available, as well as the AcroReader®
Cover COPYRIGHTS and TRADEMARKS Table of Contents Chapter 1 - Introduction Chapter 2 - SGML and HyTime Chapter 3 - Developing a Document Type Definition Chapter 4 - Basic HyTime Hyperlinks Chapter 5 - Addressing by Coordinate Position Chapter 6 - Addressing by Semantic Construct Chapter 7 - HyQ Query Language Chapter 8 - Combining HyTime Methods Configuration AcroReader®

Please contact Bill and Matt for additional Information... or email our information Auto Responder for general information.

Phoenix Data Labs 1600 W Camelback, Suite 2G Phoenix, AZ 85015 (602) 786-5365
Last updated on 2/25/96 2:30 PM

Cover

HyTime Application Development Guide

Version 1.2

May, 1995

Fujitsu Open Systems Solutions
3055 Orchard Drive
San Jose, California
95134-2022

TechnoTeacher, Inc.
P.O. Box 23795
Rochester, New York
14692-3795

Chapter 1: Introduction
Objectives of this Document

This document is the product of a joint effort by Fujitsu Open Systems Solutions, Inc. (FOSSI) and TechnoTeacher, Inc. (TTI). This first release is intended to:

Clarify the relationship between the Standard Generalized Markup Language (SGML), defined by ISO 8879, and the Hypermedia/Time-based Structuring Language (HyTime), defined by ISO 10744.

Show how HyTime constructs can be used to extend the basic capabilities provided by SGML.

Describe some of the basic features available in HyTime and provide examples of how they can be applied. In particular, this document will focus on those portions of the HyTime standard that are of immediate interest to producers of software technical documentation.

A future release of this document is planned that will add:

Descriptions of some additional HyTime features not covered in this first release. In particular, features important to multimedia applications of HyTime will be discussed.

Examples of how the concept of SGML ‘‘architectural forms,’’ on which HyTime is based, can be extended through the creation of additional architectural forms not provided by the HyTime stan-dard.

Discussions of on-going work in the development of SGML and HyTime applications by various industry work groups and research projects.

A discussion of HyTime application development using the MarkMinder/HyMinder tool kits from TTI.

Audience for this Document

This document is directed at two audiences:

Information Architects:
individuals who are responsible for defining the SGML/HyTime constructs that are used to mark up a given body of information.

Application Developers:
individuals who write programs that utilize the SGML/HyTime constructs defined by Information Architects.

Prerequisites

Readers of this document should have a basic knowledge of SGML; no prior knowledge of HyTime is assumed. Although relevant definitions of HyTime constructs are provided in this document, access to a copy of the standard is highly desirable for the additional explanatory material found there.

NOTE
Certain errors and omissions in the standard have been ‘‘unofficially’’ corrected by Dr. Charles Goldfarb in the document ‘‘Catalog of HyTime Architectural Forms and HyTime SGML Specification Version 2.0, June 28, 1993.’’ The corrections in this document are ‘‘unofficial’’ in the sense that they have not yet been adopted by the ISO/IEC committee on HyTime. However, adoption of these corrections when the HytIme standard once again comes up for review is anticipated. Therefore, the corrections in the aforementioned document have been incorporated in the current document.

Structure of this Document

This document is divided into eight chapters:

The first chapter is this ‘‘Introduction.’’

The second chapter, ‘‘SGML and HyTime’’ , begins by describing the basic features and capabilities of SGML and the advantages of using SGML markup over traditional formatting and word pro-cessing approaches. This chapter then goes on to explain how HyTime extends SGML’s capabili-ties, and gives an overview of HyTime’s structure.

The third chapter, ‘‘Developing a Document Type Definition’’ , explains the role of Information Architects and provides some suggestions on how they might approach the development of a DTD that supports HyTime constructs.

The fourth chapter, ‘‘Basic HyTime Hyperlinks’’ , first reviews SGML’s support for creating hyper-links, and then goes on to describe how HyTime extends these capabilities by adding support for indirect and external location addressing.

The fifth chapter, ‘‘Addressing by Coordinate Position’’ , introduces one of HyTime’s most power-ful features - its methodology for identifying anchors other than by means of previously assigned IDs. This chapter describes one technique, the use of coordinate locations.

The sixth chapter, ‘‘Addressing by Semantic Construct’’ , discusses another of HyTime’s non-ID based addressing methodologies: the use of semantic locations for locating objects. This discussion paves the way for the following chapter, where HyTime’s own query notation, HyQ, is discussed.

The seventh chapter, ‘‘HyQ Query Language’’ , describes HyTime’s own query notation, HyQ, and explains how all of HyTime’s location addressing facilities can be represented with HyQ queries.

The eighth chapter, ‘‘Combining HyTime Methods’’ , shows how to combine some of the methods shown in previous chapters to support a moderately complex technical documentation application.

Chapter 2: Relationship between SGML and HyTime
Basic Features and Capabilities of SGML

The Standard Generalized Markup Language (SGML), defined by ISO 8879, is a ‘‘meta’’ language. Typically, it is used to write specific languages that allow the unambiguous identification of information elements through the use of Generic Identifiers (GIs) and attributes.
- GIs specify the element type (e.g., paragraph, table, foreign expression).
- Attributes are used to differentiate between individual instances of a particular element by assigning qualifying property values to each instance.

A language definition expressed in SGML syntax is contained in a Document Type Definition (DTD). DTDs are generally written to reflect the requirements for a class of documents, e.g., software technical documentation. The DTD defines the structural elements that can be used to describe documents belonging to the class of documents for which it was written. The DTD also defines the allowed relationships between structural elements, i.e., which elements can be used as subelements within other elements, the properties (attributes) possessed by each element type, and the allowed values for these properties. When a document has been marked up in the language of a particular DTD, the document can be parsed by an SGML parser for conformance to the grammar defined by the DTD.

In summary, the advantages of using SGML markup over traditional formatting and word processing systems are that SGML:
- allows compliance with a defined logical structure to be validated automatically
- allows searches to be restricted to a specified set of information elements instead of the entire source
- allows writers to focus on the information content of their documents instead of how the documents are formatted
- allows information to be more readily filtered, interchanged, and reused, due to the absence of embedded, system-specific formatting information
- more readily supports the creation of browsers with flexible display features

In addition, SGML provides basic mechanisms for pointing to information objects from one location in a document to another, and for encapsulating multimedia objects and associating appropriate notation information with them. The latter capability is provided by SGML’s support for external data ENTITY, NOTATION, and data entity attribute declarations.

HyTime Extended Hypermedia Support

The Hypermedia/Time-based Structuring Language (HyTime), defined by ISO 10744, greatly augments the hypertext and multimedia support capabilities in ‘‘plain’’ SGML. In this document, the emphasis is placed on HyTime’s extensions to the basic support facilities in SGML for creating hypertext links. The SGML support facilities are based on direct addressing:
- unique identifiers (IDs) and references to unique identifiers (IDREFS)
- attributes whose assigned values are the names of entities

The IDREFS must all be resolvable within the same logical document.

To SGML’s direct addressing facilities, HyTime adds both indirect addressing facilities and facilities for pointing to to arbitrary locations in SGML documents, i.e., locations that are not identified by IDs. These facilities can be combined in an important technique for addressing information elements known as the ‘‘location ladder.’’ The use of location ladders also allows pointing to arbitrary locations in non-SGML documents, even if the author or user of a HyTime application does not have write access to these documents.

HyTime also provides a number of ‘‘built-in’’ constructs for supporting multimedia applications. These constructs will be described in a future release of this Guide.

Relationship between SGML and HyTime

HyTime has been variously described as:
- an application of SGML
- an extension of SGML
- the completion of SGML

All of these definitions are accurate from various perspectives. From the standpoint of the Information Architect engaged in drafting a new Document Type Definition (DTD):
- SGML, a meta-language, provides the syntax for writing the DTD.
- HyTime, an SGML application that uses SGML syntax, is defined by a ‘‘meta-DTD’’ that provides sets of rules used to govern the writing of a specific DTD.

HyTime Architectural Forms

The sets of rules in the HyTime meta-DTD are expressed by ‘‘architectural forms,’’ of which there are two kinds: ‘‘element type’’ and ‘‘attribute list.’’ When drawing up a new DTD, Information Architects use the element type architectural forms as ‘‘templates’’ for defining the elements in the DTD. From an object-oriented programming point of view, element type architectural forms provide base types from which specific element types are derived. An element type ‘‘inherits’’ content model constraints and the attributes of the HyTime element type architectural form to which it is specified as complying. Deriving specific element types from architectural forms is fundamental to the use of HyTime and is a large part of what is covered by this Guide.

NOTE
While HyTime is defined by a set of architectural forms, architectural forms are an SGML application that is not specific to HyTime. Other architectural forms, which may or may not be derived from HyTime architectural forms, can also be defined. The Conventions for the Application of HyTime (CApH) activity of the Graphics Communication Association Research Institute (GCARI) is in the process of defining a number of such architectural forms. The CApH can be contacted at caph@techno.com.

HyTime’s Structure

HyTime is structured as a set of modules that are included as needed for a particular application. There are six modules. Each module supports a set of HyTime architectural forms. The set of architectural forms supported by a particular module determines the facilities provided by that module.

HyTime Modules

Briefly, the six Hytime modules are:

Base Module
provides the minimum set of facilities for working with HyTime documents, plus many optional facilities.

Measurement Module
provides facilities for specifying the position and extent of objects, using application-specified standard measurement units or application-defined measurement units.

Location Address Module
provides facilities for associating IDs with objects at arbitrary locations. The locations can be addressed by name, coordinate position, or semantic construct.

Hyperlinks Module
provides facilities for explicitly specifying relationships between information elements, independent of the document hierarchy. When used in combination with the facilities provided by the Location Address Module, this module allows hyperlinks to be created between arbitrary information objects (not just local elements that have unique IDs).

Scheduling Module
allows the scheduling of information objects in relation to the coordinate axes of ‘‘finite coordinate spaces’’ and in relation to each other.

Rendition Module (απόδοσης κομάτι)
provides the means to represent the parameters governing the rendition process when the scheduling module is used.

Some parts of the ‘‘Base’’ module are always required. Use of the other modules is optional, depending on the HyTime facilities required by a particular document. The interdependencies between the HyTime modules is shown in Figure 2-1.

Figure 2-1: HyTime Module Dependencies:
DEPENDENT MODULES:
Base Module
 Location Address Module
 Measurement Module
   Scheduling Module
   Rendition Module
 Hyperlinks Module
DEPENDENT MODULES FOR SOME FEAURES:
Measurement Module
 Location Address Module
Scheduling Module
 Location Address Module
Location Address Module
 Hyperlinks Module

Validating HyTime Compliance

Validating compliance of HyTime-derived element instances to their base architectural forms is the responsibility of a ‘‘HyTime engine.’’ The use of the word ‘‘instances’’ in the preceding sentence should be noted: The HyTime engine is responsible for reporting HyTime errors only at the time they occur in the document. There is no requirement that the HyTime engine report DTD declarations that might allow non-HyTime compliant element instances to be created in a particular document. The responsibility for validating an element’s use with respect to the DTD belongs to the SGML parser - which has no knowledge of HyTime. Applications must be designed to deal with HyTime errors reported by the HyTime engine if and when they occur during HyTime processing, which can only occur after the SGML parser has completed its work.

Chapter 3: Developing a DTD
The Role of the Information Architect

The Information Architect is responsible for taking the requirements for using a given body of information and developing a Document Type Definition (DTD) that allows these requirements to be met by using SGML/HyTime markup. The requirements may be anything from very specific, e.g., compliance with the U.S. Department of Defense’s (DoD’s) IETM specifications, to a general set of customer requirements that leave many choices to the Information Architect. This Guide proceeds from the premise that a basic requirement in drafting the DTD is to support the on-line display of information. The next section discusses the implications of this requirement, as well as other requirements that the Information Architect may need to consider.

Requirements for Information Use

Before drafting a DTD to support on-line display, a decision has to be made as to the on-line presentation ‘‘philosophy’’. The basic choices are:

book orientation - The information will be presented following a book structure. This is the simplest and quickest approach, and has the advantage of being what users are most familiar with. However, it is also the least flexible.

IETM (task-based) orientation - ‘‘IETM’’ stands for Interactive Electronic Technical Manual. The term is often used in a general sense, although in the strictest sense it applies specifically to the set of specifications that were developed by the military services for DoD on-line technical manuals. DoD IETMs abandon the book model in favor of a selective approach to information display that depends on a set of input conditions and current status. This approach is extremely effective for maintenance, installation, and user guides, since it permits the display of only that information that is required under a particular set of circumstances.

hypermedia (multiple entry point) orientation - In a hypermedia presentation, the traditional front-to-back book structure is replaced by a set of ‘‘nodes’’ that are traversed [διασχίζονται] via links - paths that have been prearranged by the author. The nodes can be text, graphics, audio, or any other type of media; the nodes may also be references to material that is not directly reachable from the display system (off-line information). A key feature of a hypermedia system is that it is designed to be re-entrant: the user can start at any node and follow the links that lead out from that node as desired, rather than starting at the ‘‘beginning’’ and reading in a linear fashion to the ‘‘end.’’

In practice, many information systems can be expected to make use of a ‘‘core’’ set of materials to which an author or end-user has write access. This information will typically consist of information that is organized in a more or less traditional manner, i.e., using a front-to-back structure. At the same time, there will be a need to search through and link to other bodies of information that the author or user cannot modify. It is in these situations, as well as for IETMs and ‘‘pure’’ hypermedia systems, that the HyTime extensions to SGML are particularly useful.

Analyzing the Information Set

Currently, the starting point for many applications is to take an existing body of information, such as a book or set of books that has been formatted in a word processing or typesetting system, and retroactively [αντενεργώντας] express this information in SGML markup. In situations of this type, Information Architects first need to analyze the existing representation (formatting) as well as the content and organization of the material to determine:

- the elements comprising the material (e.g., parts, chapters, paragraphs, notes, tables, lists)

- the organization of the elements in the material (e.g., parts may contain chapters, chapters may contain sections)

This first step can be seen as gathering information about the material which is more or less explicitly available. The next step (which is frequently much more time consuming) concerns the determination of implicit usages:

- various terms or phrases for which a change in the font (e.g., italic or bold) or point size has been used to imply some special meaning (e.g., title, foreign word or phrase)

- changes in spacing which imply relationships between information elements (e.g., a note that fol-lows a table and is implied to apply to the table by a decrease in the usual inter-paragraph spacing)

Once the requirements for using the information have been defined and any existing material analyzed, the process of drafting the DTD can begin. In drafting the DTD, the information gathered in the preceding steps has to be considered from the standpoint of defining elements to express:
- document structure
- information content
- implicit linking

Expressing Document Structure

If no major reorganization of the existing material is planned, then the structural elements that were found in the analysis will generally be reflected directly in the DTD. In other words, if the original material was structured as parts, chapters, sections and paragraphs, then corresponding elements will be created in the DTD. However, if a major reorganization is planned, some of the original structural elements may be abandoned while new ones may need to be created. For example, if a maintenance manual is to be restructured as an IETM, many of the existing book-oriented elements will disappear. In their place, the Information Architect will need to derive new elements based on the task-oriented approach used by the IETM Content Data Model.

NOTE
The IETM Content Data Model is specified by ‘‘MIL-D-87269-IETMDB Revisible Data Base’’ . The IETM Content Data Model is not discussed further in this Guide.

Expressing Information Content

The original source material may contain certain words and phrases that have been variously emphasized by the use of bold, constant width, italic fonts or larger point size, or by having been placed in quotation marks. After identifying the intended meaning behind the special demarcation used for these words and phrases, the Information Architect needs to decide how much of their information content should be made explicit in the SGML elements created to contain them. For example, titles, new terms, and foreign words and phrases might all occur in quotation marks in the original document. The Information Architect might decide to create a separate element for each case. Alternatively, the Information Architect might create a Title element and combine the other two cases in an EmphasizedPhrase element.

In making these decisions, the Information Architect must keep in mind both future requirements as well as the problems associated with translating existing material. In many cases, implicit usages will need to be translated by hand, or if a global definition is applied programmatically for each font and the use of quotation marks, the translation will need to be reviewed on a case by case basis. This is because font changes and quotation marks are often used for multiple purposes. Their use is also frequently inconsistent. However, in the long term the most important consideration is the value of being able to distinguish the semantic roles of different elements. The more this distinction is made, the more precise the information that can be extracted automatically from the document. In the example just given, the use of individual NewTerm and ForeignPhrase elements enables targeted searches to be carried out for those occurrences. This is not the case if a collective EmphasizedPhrase element is used.

Expressing Link Relationships

A given source document will frequently contain references to other parts of the same document as well as to other documents. Some references may be general in nature, such as ‘‘Refer to the User’s Guide for more information.’’ Others may be much more specific, such as ‘‘see Note 3 on page 6.’’ An important part of the value of putting information on-line is the capability of supporting traversal between these references and their targets in the form of hypertext links. At the same time, if the on-line presentation philosophy calls for abandoning the page concept in favor of ‘‘information chunking’’ or the task approach used in IETMs, translating references to page numbers into hypertext links is no longer straightforward. A large part of the remainder of this Guide discusses the use of HyTime constructs and how they can be used to create flexible hyperlinks that solve this type of problem.

Applying HyTime Constructs

As mentioned in Chapter 1, HyTime architectural forms can be looked on as base types from which specific elements in a DTD are derived. This does not mean that every element in a DTD must be a subtype derived from a HyTime architectural form. Which elements in a particular DTD are derived from HyTime architectural forms will depend on the usage that the DTD is intended to support. The relationship between HyTime architectural forms, element declarations in a specific DTD, and the SGML markup that appears in a document instance is shown in Figure 3-1.

Figure 3-1: Deriving Element Types from Architectural Forms
Element Type Architectural (Form Element Base Type)
 Derived ELEMENT Type Declared in DTD
   Element Instance in Document
 Derived ELEMENT Type Declared in DTD
   Element Instance in Document

Element Type Architectural Forms

The element type architectural form both declares a ‘‘base’’ element type and associates attributes and their allowed values with that element type. Common attributes, defined by HyTime attribute list architectural forms in the Base module, may also be defined as needed for element types derived from these forms. Additional non-HyTime attributes can then be defined as a further means of sub-typing the element.

Attribute List Architectural Forms

The attribute list form consists only of an attribute list declaration. Some attribute list architectural forms define attributes for use with specified element type architectural forms. Attribute list forms of this type include a conventional comment starting with ‘‘use:’’; the element type form names with which the attributes may be used are then listed. Other attribute list forms define attributes that may be used with all element type architectural forms, as well as with HyTime/non-HyTime bridge element (HyBrid)-form elements, and are said to declare ‘‘common attributes.’’ The names of attribute list forms that declare common attributes are prefixed by ‘‘all-’’. Attribute list forms that declare common attributes are provided by the Base module.

Format of a HyTime Architectural Form Declaration

As stated previously, an element-type architectural form:
- declares a ‘‘base’’ (or in the language of the HyTime standard, a ‘‘meta’’) element type
- associates attributes and their allowed values with that ‘‘meta’’ element type

In a DTD instance, an element declaration and associated attribute list takes the form:


<!ELEMENT element_name tag_minimization (content_model) >
<!ATTLIST element_name attribute_name declared_value_prescription default_value
-- other attributes -- >

where one or more attribute names and associated values may appear in the attribute list. A HyTime element type architectural form has the same format, except that by convention the words ‘‘ELEMENT’’ and ‘‘ATTLIST’’ are not capitalized, to indicated the ‘‘meta’’ nature of these declarations. In addition, the first attribute in the attribute list is the mandatory HyTime attribute, whose value is the name of the element type form from which an element type is derived.

For example, the declaration for the element type form HyTime document (HyDoc), which provides HyTime features appropriate to a document, has the following format in the HyTime meta-DTD:


<!element HyDoc - O (content_model) >
<!attlist HyDoc HyTime NAME HyDoc
-- other attributes --
>

Note that the name of the ‘‘meta’’ element and the name assigned to the HyTime attribute are both HyDoc. As explained in the next section, when an element type is derived from a HyTime element type form, the value of the HyTime attribute is always the name of the form (HyDoc in this case), but the name (generic identifier) of the element type could be different.

NOTE
The SGML declarations that specify HyTime architectural forms generally include comments, referred to as ‘‘conventional comments’’, that attach various qualifiers to the architectural form definitions. These qualifiers often express normative lexical or referential constraints (i.e., constraints that are required for conformance to the HyTime standard) on syntax or usage that cannot be represented, except via comment, in the SGML syntax of the declarations. The former are expressed as lexical types (lextypes) -lexical models to which a given attribute value or element content must conform. The latter are expressed as ID reference element types (reftypes), that specify acceptable targets for given ID references (IDREF or IDREFS).

Deriving an Element Type

The rules for deriving an element type in a DTD instance (the actual DTD that is used to specify document markup) from a HyTime ‘‘meta’’ element are:

The element type name can be any name the author of the DTD thinks is appropriate. If only one element type is to be derived from the HyTime ‘‘meta’’ element, the DTD author may want to retain the name of the ‘‘meta’’ element as the name of the element type for clarity.

The content model of the element type can be more restrictive, but not less restrictive, than the content model of the ‘‘meta’’ element from which it is derived.

The element type must be assigned a HyTime attribute that identifies the ‘‘meta’’ element from which the element type is derived. (This is equivalent to saying that the name assigned to the HyTime attribute must be the same as that of the element type form from which the element type is derived.)

If an attribute in the attribute list for the ‘‘meta’’ element has a value of#REQUIRED, the attribute must be defined in the attribute list of the derived element type.

If an attribute in the attribute list for the ‘‘meta’’ element has a value of#IMPLIED, the attribute can be omitted from the attribute list of the derived element type if it is not needed.

If not specifically assigned in the attribute list of the element type, the values of attributes defined for the element type form from which the element type is derived will default to the default value assigned in the attribute list of the ‘‘meta’’ element.

For example, to declare the top level element for technical manuals to be techdoc, and to specify that techdoc is a HyTime-compliant element type, the declarations in the DTD would be:


<!ELEMENT techdoc - O (content_model) >
<!ATTLIST techdoc HyTime NAME HyDoc
-- other attributes --
>

HyDoc Content Model

The content model for the Hydoc element type form was not shown in the previous examples for the sake of clarity. With the content model, the declaration for the Hydoc element type form is:


<!-- HyTime Document --> <!--06.4 -->
<!-- This definition follows the revised version shown in the
Catalog of HyTime Architectural Forms and HyTime SGML Specification
Version 2.0, June 28, 1993 -->
<!element HyDoc - O (%HyBrid;)* +(%loc;|%link;|%resorce;) >


The parameter entities HyBrid, loc, link, and resorce expand to:


<!ENTITY % HyBrid -- HyBrid content (for use in content models) --
"fcs|HyBrid|sHyTime|#PCDATA"
>
<!ENTITY % loc -- Location address architectural forms --
"bibloc|nameloc|dataloc|treeloc|pathloc|listloc|relloc|proploc|notloc|fcsloc">
<!ENTITY % link -- Hyperlink architectural forms --
"clink|ilink">
<!ENTITY % resbase -- Resource architectural forms: base module --
"activity|dvlist|desctab|lexmodel|lexord|propdef|qltn|qpn">
<!ENTITY % resmeas -- Resource architectural forms: measurement module --
"dimspec|extent|extlist|dimref|markfun|measure">
<!ENTITY % resschd -- Resource architectural forms: scheduling module --
"axis|exrecon|calspec|mallobj">
<!ENTITY % resrend -- Resource architectural forms: rendition module --
"rendrule|batrule|modrule|wandrule|wndpatch|modpatch">
<!ENTITY % resorce -- Resource architectural forms: all modules --
"(%resbase;)|(%resmeas;)|(%resschd;)|(%resrend;)">

When declaring an element to conform to the HyDoc element type form, the content model for the element can be more constrained than that of the HyDoc element type form; it cannot be less constrained. This rule applies when declaring any element to conform to any architectural form. So using the example from the last section, the techdoc element might be declared as:

<!ELEMENT techdoc - O (frtmat,bdy,append*)+ +(%loc;|%link;|%resorce;) >

to restrict the content to frontmatter, body, and (optional) appendixes, which would then be defined. With this content model, the use of mixed content as permitted by the HyBrid parameter entity is no longer allowed; the techdoc content model is constrained to a specific set of subelements. Any of the inclusions that were retained from the HyDoc element type form (the loc, link, and resorce entities in this case) can also be restricted. For example, to restrict the elements conforming to location address architectural forms that can appear anywhere in techdoc to those of element types nameloc and pathloc, the loc parameter entity could be declared in the DTD as:

<!ENTITY % loc -- restricted list of location address architectural forms -- "nameloc|pathloc" >

The resorce parameter entity (and its component entities) could be similarly restricted or restructured to include only those features needed and supported for the techdoc element type. Alternatively, the use of the inclusion exception for the loc, link, and resorce entities could be eliminated altogether, and any desired elements that are included in the declarations of those entities only included as specifically needed in the content of the subelements of techdoc.

Declaring a HyTime Document

Declaring a document as HyTime conforming requires additions to the SGML declaration and the document prolog.

Minimum Changes to the SGML Declaration

The minimum changes to the SGML declaration are to replace:

FORMAL No
APPINFO None

with

FORMAL Yes
APPINFO "HyTime"

Minimum Set of Prolog Declarations

The minimum set of declarations that must appear in the prolog for a HyTime-compliant document are:

HyTime Version Declaration:
<?HyTime VERSION "ISO/IEC 10744:1992" HYQCNT=32 >

The HYQCNT parameter value represents the power of 2 which is the maximum number of quanta that an implementation will have to handle at any give time. The value shown (32) is both the default and the minimum for any use of HyTime.

HyTime Module Declaration(s):
In the simplest case, where only common attribute processing is required, only the base module must be declared:

<?HyTime MODULE base >

In many HyTime documents, other modules will be required. In the techdoc example, where the content module included the use of location address and hyperlink architectural forms, declarations for the locs and links modules are also required:

<?HyTime MODULE locs >
<?HyTime MODULE links >

Typically, optional facilities in one or more of the modules will also be required. For example, if contex-tual content validation is to be required in a clink, then the context option must be declared in the base module declaration:

<?HyTime MODULE base context >

To use the pathloc element type form, support for the measurement module, and the coordloc and multloc options to the locs module must be declared:

<?HyTime MODULE locs multloc coordloc >
<?HyTime MODULE measure >

Rules for Support Declarations

The general set of rules for adding HyTime support declarations to the prolog are:

If the facilities provided by a particular module are required, the name of that module must be included in the HyTime support declarations for a HyTime document.

The base module is always required by all HyTime documents and must always be declared.

Some modules provide optional as well as mandatory facilities. If optional facilities are required in a particular HyTime document, the optional facilities must also be named when the module is declared.

Some modules are inter-dependent, depending on what facilities in a particular module are needed. If facilities in one module are required to support the use of facilities in another module, the supporting module must also be declared. Any required optional facilities in the supporting module must be named. Module interdependencies were shown in Chapter 2, Figure 2-1.

NOTE
More detailed representation of the interdependencies between modules and module options may be found in the last section of each module’s clause in the HyTime standard; information about the dependencies of individual forms on specific modules or module options is to be found in the descriptions of the forms.

Example Set of Declarations Putting all of the example declarations for techdoc into a DTD, the result is:


<!-- SGML Declaration precedes the HyTime Support declarations -->
<!-- Only the required FORMAL and APPINFO declarations are shown here -->

FORMAL Yes
APPINFO "HyTime"

<!-- HyTime Document Prolog; follows the SGML Declaration -->
<!-- HyTime Support Declarations -->

<?HyTime VERSION "ISO/IEC 10744:1992" HYQCNT=32 >
<?HyTime MODULE base context >
<?HyTime MODULE locs pathloc multloc coordloc >
<?HyTime MODULE measure >
<?HyTime MODULE links >

<!-- SGML/HyTime DTD proper begins here -->

<!DOCTYPE techdoc [
<!ENTITY % loc "nameloc|pathloc" >
<!ENTITY % link -- Hyperlink architectural forms --
"clink|ilink">
<!ELEMENT techdoc - O (frtmat,bdy,append*)+ +(%loc;|%link;) >
<!ATTLIST techdoc HyTime NAME HyDoc
-- other attributes --
>
<!-- The following element and attribute list declarations are
required but not shown here -->
<!-- ELEMENT and ATTLIST declarations for frtmat,bdy, and append -->
<!-- ELEMENT and ATTLIST declarations for HyTime-derived elements: nameloc, pathloc, clink, and ilink -->
]>

Chapter 4: Basic HyTime Hyperlinks
Introduction

One of the most important features of HyTime is its support for indirect addressing, in addition to the direct addressing mechanism provided by SGML. This chapter first reviews the basic linking mechanism defined by SGML, and then goes on to describe the new features made available by HyTime. In the next chapter, indirect addressing will be combined with HyTime’s non ID-based location methods to create a powerful technique for object location known as ‘‘location ladders.’’

NOTE
Throughout this document, the term ‘‘linking’’ refers in all cases to ‘‘hypertext linking’’ (also known as ‘‘hyperlinking’’), never to the totally separate Link Process Definition (LPD) mechanism defined by SGML. Hyperlinking is here defined as the ‘‘explicit expression of semantic relationships and traversal rules between information objects.’’

SGML Support for Hyperlinking

SGML supports the creation of hyperlinks based on direct addressing. Links within a document are defined by assigning a unique identifier name (ID) to an element and referring to that element by means of its ID. The reference is made through an element that has been declared in the DTD for that purpose. In the DocBook© DTD, such an element is named XRef. The DocBook DTD also supplies an Anchor element that can be placed nearly anywhere in the document to serve as the target for an XRef. These declarations appear in the DocBook DTD as:


<!ELEMENT XRef - O EMPTY >
<!ATTLIST XRef
Linkend IDREF#REQUIRED
-- other attributes --
>
<!ELEMENT Anchor - O EMPTY >
<!ATTLIST Anchor Id ID#REQUIRED
-- other attributes --
>

The following is an example of how the XRef and Anchor elements might be used in the document instance:

For further information, see page <XREF LinkEnd=focus>.
<Sect3><Title>Input Focus</Title>
<Para>
<ANCHOR id=focus>
Clients can request notification that they have the input focus by selecting for FocusChange events on their top-level windows.

In the preceding example, the application would generate a page number that is printed in place of the <XREF LinkEnd=focus> entry that appears in the text.

The XREF element can only be used to link to one Anchor element, since the declared value prescription for its Linkend attribute is IDREF, not IDREFS. Were IDREFS used, a list of Anchor IDs could be assigned as the value of the Linkend attribute (which then would be more logically named Linkends).

SGML’s hyperlinking support capabilities can be summarized in this way:

References can only be made to the IDs of elements within the same document, i.e., within the same parsing context.

SGML cannot link to anything that is not an element, or to an element that does not have a unique identifier.

The references cannot be to a subdocument (since calling a subdocument causes a switch in parsing contexts).

HyTime Support for Hyperlinking

As stated in the introduction, one of the most important features of HyTime is its support for hyperlinking through the indirect addressing of information objects, in addition to the use of direct addressing as provided by SGML. HyTime’s indirect addressing mechanisms allow for the placement of link elements in documents separate from the documents whose information they point to. This capability supports:

The creation of one or more external documents containing a ‘‘web of links’’ to other documents, including documents to which the user does not have write access.

The separation of the writing task from the ‘‘link creation’’ task, so that the latter can be carried out if desired by a specialist in on-line documentation after the document itself has been written.

Simplified link maintenance, by concentrating the link elements in one location instead of scattering them across the document source files.

The use of external documents that contain the link elements offers an alternative means to methods such as embedded Universal Resource Locators (URLs) for maintaining links across complex bodies of information. (An appropriately designed tool could generate such external documents from source files containing URLs.) Embedding system-specific address information in documents makes them inherently more difficult, and consequently, more expensive to maintain than methods that isolate this information from the markup of the source files.

Indirect Addressing

HyTime’s indirect addressing mechanism is based on facilities for three kinds of addressing-- addressing by name, position, or semantic property. Indirect name addressing, perhaps the most basic of these facilities, is described in this section; its use in hyperlink support is demonstrated in the next section. Position and semantic address are discussed in subsequent chapters of this Guide.

HyTime’s indirect name addressing mechanism is based on the use of the named location address (nameloc) element type architectural form. Through the use of a nameloc-type element, i.e., an element instance conforming to the nameloc architectural form, a local ID can be associated with one or more local or remote objects. The objects themselves can either be named directly or otherwise specified through the use of location ladders or queries. The overall mechanism is shown in Figure 4-1. The architectural form for nameloc is shown in Figure 4-2.

Figure 4-1:
Hyperlinking Using the HyTime Indirect Addressing Mechanism

link element ----->nameloc element
nmlist or nmquery subelement ----->element or entity

Figure 4-2:
Named Location Address (nameloc) HyTime Architectural Form

<!-- Named Location Address --> <!--08.3.2.1 -->
<!element nameloc -- Assigns a local ID to one or more named
objects --
-- Constraint: name list derived from
content elements. --
- O (nmlist|nmquery)* >
<!attlist nameloc HyTime NAME nameloc
id ID#REQUIRED
-- multloc attributes --
-- spanloc attributes --
>

As shown by the architectural form, a nameloc-form element can contain name list (nmlist) or name list query (nmquery)-form elements. nmlist-form elements contain the IDs or entity names of named local or external elements or of declared local or external entities. nmquery-form elements contain queries that resolve to IDs or entity names. The architectural form for nmlist is shown in Figure 4-3. The use of the attributes for nmlist is discussed under the explanation of the first example later in this chapter. The use of nmquery-form elements is discussed in Chapter 7, ‘‘HyQ Query Language’’ .

NOTE
The multloc attributes of the nameloc element type form are used in some of the examples in this Guide, and are discussed later in this chapter. An explanation of the spanloc attributes, whose usage is not demonstrated in this Guide, may be found in Clause 8.2.3 of the HyTime standard.

Figure 4-3:
Name List (nmlist) HyTime Architectural Form

<!-- Name List Specification --> <!--08.3.2.2 -->
<!element nmlist -- List of local or external ID or entity names --
- O (#PCDATA) -- lextype(NAMES) -->
<!attlist nmlist HyTime NAME nmlist
nametype -- Entity names or IDs of elements --
(entity|element|unified) entity
obnames -- Objects treated as names? --
(obnames|nobnames) nobnames
docorsub -- SGML document or subdoc whose
prolog declares entities or elements
named in name list; initially the document
in which this occurs. --
ENTITY#IMPLIED -- Default: no change --
dtdorlpd -- Active DTD or LPDs for SGML document
entity. Base DTD if unspecified and
docorsub changed; no change if
unspecified and docorsub unchanged. --
-- lextype(DTD|LPD+) --
NAMES#IMPLIED -- Default: unchanged
or base --
>

HyTime Link-Type Elements

All of HyTime’s indirect addressing mechanisms can be seen as anchor-specification facilities, and as such they are available to the two link element type forms defined by HyTime:
- contextual links (clinks) and
- independent links (ilinks).

NOTE
In HyTime terminology, the term anchor is reserved for ‘‘An object (or aggregation of objects) that is linked by a hyperlink.’’ (HyTime standard,3 Definitions.) This is in contrast to the use of the term in HTML, where an ‘‘anchor’’ may either be a link element or an element used to create a named location:
<A HREF = "#whatever">A link to ‘‘whatever’’.</A>
<A NAME = "whatever">Whatever is here.</A>

Contextual Links

A contextual link is so named because it is (always) used in some intentional context within a document. That is, an element conforming to element type form contextual link (clink) can be placed anywhere within the document that a clink-form element is allowed in the DTD, and frequently includes some con-tent that, together with the clink itself, forms one anchor of the link. Typical content is a phrase, such as ‘‘See Figure 1,’’ which may be highlighted in an on-line presentation. The user might click on this highlighted phrase to access the target of the link. The link target (i.e., the remote anchor of the clink) is identified to the application by the value assigned to the clink element’s linkend attribute. This value is either that of the ID assigned to the remote anchor itself (direct addressing) or the ID of a location address element that eventually resolves to the address of the anchor (indirect addressing). When indirect addressing is used, a clink-form element need not reside in the same document as the anchor to which its linkend points.

A clink-form element expresses the common hyperlink semantic of ‘‘reference mark’’ (the clink itself) and ‘‘reference subject’’ (the target of the clink). This semantic is defined and fixed by the HyTime standard, as is the traversal behavior of the clink. Neither may be changed in a derived element type. The basic operation of the clink is summarized in Table 4-1.


Table 4-1: clink: Basic Use
________________________________________________________
HyTime-defined | Element | Example
Anchor roles | |
_________________________________________________________
Reference mark | clink element | <clink linkend=id-of-obj>content</>
Reference subject | link target | <anchor id=id-of-obj>content</>
________________________________________________________

The clink element:
- can be empty (no content inside the start and end tags) or even specified as EMPTY in the DTD (in which case no end tag is used) to identify a point in a document
- can be required to contain contextual content (i.e., contain content which would be valid for SGML parsing purposes, even if the start and end tags of the clink are disregarded), by setting the context common attribute to context

The remote anchor object:
- can be an aggregate
- can be located in any external document (or subdocument) by using indirect referencing through a nameloc-type element and including a refrange common attribute with a value of X (indicating exter-nal documents are ok) in the attribute list for the clink element (requires the exidrefs and refctl options of the base module)

NOTE
Indirect addressing must be used to achieve cross-document referencing. Using the ID/IDREF direct addressing mechanism supported by SGML for cross-document referencing will result in an SGML parsing error if there is no element in the current document with the same ID. Worse, if there is such an element, that element will (incorrectly) be regarded as the remote anchor.

Independent Links

An independent link is so named because the location of the link element is usually independent of the location of the targets (anchors) specified by its linkends. Elements conforming to the element type form independent link (ilink) have a linkends attribute that has a declared value prescription of IDREFS, so that ilink-form elements can point to multiple anchors. The anchors can be individual objects or multiple objects that are addressed as a group, and which serve collectively as a single anchor. Each anchor has its own semantic role in the link relationship, explicitly defined in the DTD in the anchrole attribute. This differs from the fixed and implicit roles of the anchors of a clink-form element. The ilink element type form also differs from the clink element type form in its potential traversal behaviors: The ilink architec-tural form has several attributes whose collective settings allow a variety of rules governing traversal to and from the anchors.

ilink-form elements can be placed anywhere within any document that the author finds convenient. (Adopting a convention as to where the ilink-form elements are placed is highly desirable to simplify readability and document maintenance.) Like clink-form elements, ilink-form elements can use location address elements to provide an indirect addressing mechanism. When indirect addressing is used, an ilink-form element need not reside in the same document as the anchors to which its linkends point. The basic operation of the ilink is summarized in Table 4-2.

Table 4-2: ilink: Basic Use
_______________________________________________________
User- | Element | Example
defined | |
Anchor | |
roles | |
_______________________________________________________
| ilink element |<ilink id=ilinkn linkends=id-of-obj1
| |...id-of-objn>content</>
Semantic 1| link target 1 |<anchor id=id-of-obj1>content</>
| | . . .
Semantic n| link target n |<anchor id=id-of-objn>content</> _ _______________________________________________________

Using HyTime Link-type Elements

This section provides examples of some of the ways in which element types that conform to HyTime clink or ilink element type forms can be used.

Example 1

The first example is based on the following set of conditions:

- The document to be marked up includes a figure followed by a warning that applies to the figure.

- The figure and the warning are not structurally connected, i.e., warnings are not included in the content model for figures (this is the case in the DocBook DTD).

- The figure is not to be displayed inline with the text, but will be displayed whenever the link is traversed.

- Since the warning and the figure are related, the warning is to be displayed with the figure when-ever a reference to the latter is selected.

The preceding conditions can be met through the use of a clink-form element, as shown in Figure 4-4.

Figure 4-4: Example 1 Implementation
<fnref linkend=figloc>
|
<nameloc id=figloc>
<nmlist>fig1 warn1</nmlist>
| |
<Figure id=fig1> <Warning id=warn1>

NOTE
In Figure 4-4, fnref is the clink-form element. If there were only one clink-form element in the DTD, then the element could have simply been called clink. In this case, fnref is one implementation of a clink-form element; others are assumed to exist in the DTD so that a differentiating name is needed.

The DTD declarations required by the example are shown in Figure 4-5. A sample of text marked up with these declarations is shown in Figure 4-6.

Figure 4-5: DTD Entries Required by clink Example

<?HyTime VERSION "ISO/IEC 10744:1992" HYQCNT=32 >
<?HyTime MODULE base context >
<?HyTime MODULE locs multloc >
<?HyTime MODULE links manyanch=2 >

<!DOCTYPE Book [

<!ENTITY % loc "nameloc" >

<!ELEMENT Book - O ((Chapter)+ +(%loc;)|fnref) >
<!ATTLIST Book HyTime NAME HyDoc
-- other attributes -- >
<!-- ELEMENT and ATTLIST declarations for Book sub-elements omitted -->

<!ELEMENT nameloc - O (nmlist)* >
<!ATTLIST nameloc HyTime NAME nameloc
id ID#REQUIRED
-- multloc attributes --
ordering (ordered|noorder) order
set (set|notset) notset
aggloc (aggloc|agglink|nagg) aggloc >

<!ELEMENT nmlist - O (#PCDATA) >
<!ATTLIST nmlist HyTime NAME nmlist
nametype (entity|element|unified) element
obnames (obnames|nobnames) nobnames
docorsub ENTITY#IMPLIED -- Default: no
change --
dtdorlpd NAMES#IMPLIED -- Default:
unchanged or base -- >

<!ELEMENT fnref - O (#PCDATA) >
<!ATTLIST fnref HyTime NAME clink
id ID#IMPLIED
linkend IDREF#REQUIRED
-- Common Attributes --
context (context|ncontext) context >

<!NOTATION EPS PUBLIC "+//ISBN 0-201-18127-4::Adobe
//NOTATION PostScript Language Ref.
Manual//EN" >
<!ENTITY ch1.fig1 SYSTEM "ch1.fig1" NDATA EPS>
]>

Figure 4-6: Example 1: SGML Document File Markup
<Book><Title>Installing Lawn Mower Engines</Title>
<Chapter><Title>Chapter 1</Title>
<Sect1><Title>Introduction</Title>
<Para>
Engine installation is shown in<fnref linkend=figloc>Figure 1</fnref>.
</Para>
<Figure id=fig1><Title>Engine Installation</Title>
<Graphic Entityref="ch1.fig1">
</Graphic>
</Figure>
<Warning id=warn1>
<Para>
Watch your fingers!
</Para>
</Warning>
<nameloc id=figloc>
<nmlist nametype=element obnames=nobnames>fig1 warn1</nmlist>
</nameloc>
</Sect1>
</Chapter>
</Book>

Explanation of Example 1

The nameloc element uses attributes from the multiple location (multloc) attribute list form. These attributes define how the name list contained in the nmlist (sub)element is to be handled by the application. The reasons for the values used for each attribute are as follows (see Figure 4-5):

the ordering attribute is assigned a value of order to indicate that the order of the IDs in the nmlist is significant. The figure is to be presented before the warning.

the set attribute is assigned a value of notset. There are no duplicate ids that need to be filtered to form an ordered set. Since this is the HyTime-defined default value of the set attribute, the set attri-bute specification could have been omitted.

the aggloc attribute is assigned a value of aggloc. The figure and the warning are to be treated as an aggregate object so that the nameloc ID will not be resolved to the IDs of the figure and the warning as the value of the fnref’s linkend attribute, which requires a single IDREF; instead, the IDs listed in the nmlist will be resolved only on traversal of the link.

The nmlist element has a total of four attributes. The reasons for the values used for each attribute are as follows:

the nametype attribute is assigned a value of element. This indicates the values in nmlist are ele-ment IDs. (Since element is the default value in the DTD, its specification could have been omitted.)

the obnames attribute is assigned a value of nobnames. This causes the names in nmlist to be resolved on traversal to the figure and warning elements. Were the value set to obnames, the names (strings) in nmlist would be returned as the link anchor, rather than the elements they point to.

The docorsub attribute identifies the SGML document entity or SGML subdocument entity in whose DTD the entities or elements named in the nmlist are declared or in which the listed elements occur. The default value is the current document, which is the case in this example. Because the default value is used, the docorsub attribute specification could have been omitted.

The dtdorlpd attribute identifies the current the DTD or LPD for parsing the SGML document entity. The default value is the base document’s DTD, which is the case in this example. Because the default value is used, the dtdorlpd attribute specification could have been omitted.

Use of the multloc attribute list form requires the multloc facilities of the location address module. This is specified by the HyTime support declaration:
<?HyTime MODULE locs multloc>

In this example the context common attribute is assigned the value context, indicating that the content of the clink is required to be contextually valid. Use of the context common attribute requires the context facilities of the base module. This is specified by the HyTime support declaration:
<?HyTime MODULE base context>

The use of HyTime link-form elements - clink in this case - requires the support of the links module. The anchor number constraint option manyanch is declared and assigned a value of two, to restrict the number of anchors a link can have to two.

NOTE
Unless manyanch is declared and assigned a specific value, a link can have any number of anchors greater than one.

Example 2

In Example 1, a clink-form element was used to point to a figure and a warning, which were treated as an aggregate object. The clink-form element, figure, and warning were all located in the same document. In this example, an ilink-form element is used to point to a table in one document and a note containing relevant information in a second document. The ilink-form element also points to itself as an anchor, because it itself plays a role in the relationship it expresses. The ilink-form element is contained in a third document that is independent of the other two. Placing the ilink-form element in a separate document allows the construction of a user-defined web of hypertext links, without needing to modify the original documents.

The implementation of this example is shown in Figure 4-7.

Figure 4-7: Example 2 Implementation

<tnref id=comment1 linkends="comment1 tabloc noteloc">Text of comment...</tnref>

<nameloc id=tabloc> <nameloc id=noteloc>
<nmlist>table1</nmlist> <nmlist>note1</nmlist>
<Table id=table1> <Note id=note1>

The DTDs and document source files needed to implement this example are shown in Figures 4-8 through 4-12.

Figure 4-8: Example 2: DTD for the Documents that Contain the Table and the Note

<!DOCTYPE Book [
<!ELEMENT Book - O (Chapter)+ >
<!-- ELEMENT and ATTLIST declarations for Book sub-elements omitted -->
]>

Figure 4-9: Source File Containing the Table
<Book><Title>Book with Table</Title>
<Chapter><Title>chapter 1</Title>
<Sect1><Title>Introduction</Title>
<Para> Table 1 provides some useful information. </Para>
<Table id=table1><Title>Table Title</Title>
<!-- Table text here -->
</Table>
</Sect1>
</Chapter>
</Book>

Figure 4-10: Source File Containing the Note
<Book><Title>Book with Note</Title>
<Chapter><Title>chapter 1</Title>
<Sect1><Title>Introduction</Title>
<Para> Lots of useful information. </Para>
<Note id=note1>
<Para> A note that readers of ‘‘Book with Table’’ should see when they read Table 1.
</Para>
</Note>
</Sect1>
</Chapter>
</Book>

Figure 4-11: DTD for the Resource Document 1

<?HyTime VERSION "ISO/IEC 10744:1992" HYQCNT=32 >
<?HyTime MODULE base exidrefs refctl >
<?HyTime MODULE locs >
<?HyTime MODULE links >

<!DOCTYPE resource [

<!ENTITY % loc "nameloc" >

<!ELEMENT resource - O (%loc;|tnref)+ >
<!ATTLIST resource HyTime NAME HyDoc
id ID#IMPLIED
boslevel NUMBER#IMPLIED >

<!ELEMENT nameloc - O (nmlist)* >
<!ATTLIST nameloc HyTime NAME nameloc
id ID#REQUIRED
>

<!ELEMENT nmlist - O (#PCDATA) >
<!ATTLIST nmlist HyTime NAME nmlist
nametype (entity|element|unified) element
obnames (obnames|nobnames) nobnames
docorsub ENTITY#IMPLIED -- Default: no
change --
dtdorlpd NAMES#IMPLIED -- Default:
unchanged or base --
refrange CDATA#FIXED "#ALL X"
>

<!-- Targets that will be allowed for linkends attribute of tnref element, as constrained by the reftype attribute of tnref -->
<!ELEMENT anchtype - - (tnref,table,note) >

<!-- Declarations for *tnref* independent link -->

<!ELEMENT tnref - O (#PCDATA) >
<!ATTLIST tnref HyTime NAME ilink
id ID#IMPLIED
anchrole CDATA#FIXED "link table note"
linkends IDREFS#REQUIRED
extra NAMES A
intra NAMES A
reftype CDATA#FIXED "linkends anchtype
#SEQ"
>

<!ENTITY firstdoc SYSTEM "/user/doc/firstdoc" CDATA SGML>

<!ENTITY secondoc SYSTEM "/user/doc/secondoc" CDATA SGML>
<!NOTATION SGML PUBLIC "+//ISO 8879:1986//NOTATION
Standard Generalized Markup Language//EN" >
]>

Figure 4-12: Source File for the Resource Document

<resource id=web1 boslevel=3 >
<tnref id=comment1 reftype="linkends anchtype" linkends="comment1 tabloc noteloc">Relates Table 1 in Book with Table, and Note in Book with Note</tnref>

<nameloc id=tabloc>
<nmlist nametype=element obnames=nobnames docorsub=firstdoc>table1
</nmlist>
</nameloc>

<nameloc id=noteloc>
<nmlist nametype=element obnames=nobnames docorsub=secondoc>note1
</nmlist>
</nameloc>

</resource>

Explanation of Example 2

The most important new feature in Example 2 is the use of an ilink-form element (tnref) in one document to point to elements in two external files. To accomplish this:

The HyTime support declaration for the base module must include the exidrefs and refctl options:

<?HyTime MODULE base exidrefs refctl >

The exidrefs option is required to support the referencing of IDs outside the resource document by the ilink element in the resource document (via the nameloc element). External traversal of links is specifically enabled by declaring support for the refctl option of the base module and assigning a value of X to the refrange common attribute of the resource document element, resource.

The tnref element points to two separate nameloc elements.

Each nameloc element contains a nmlist subelement.

Each nmlist subelement has a docorsub attribute that is assigned the name of an external entity.

The name of the entity assigned to the docorsub attribute is that of the external document entity con-taining the element whose ID is the content of the nmlist element:
<nmlist ... docorsub=firstdoc>table1</nmlist>

name of entity containing element with id of table1

The tnref element has several attributes that are not found on the clink-form element used in Example 1:

the anchrole attribute is assigned a value of "link table note". Each name in the list indicates the role of an anchor that the tnref link element can point to. There is one name on the list for each anchor. When IDs are specified in the linkends attribute of an ilink element-instance, they are listed to correspond to their roles as specified on the anchrole attribute. In this example, the IDs on the linkends attribute are comment1, tableloc, and noteloc, to correspond with the "link table note" values of the anchrole attribute.

Link traversal has been made non-restrictive in this example: the extra and intra attributes are both assigned a value of A. This value for both attributes allows free traversal to and from the anchors. Other possible values defined by HyTime for the intra and extra attributes allow restrictions to be placed selectively on traversal to and from the anchors of an ilink.

the value assigned to the reftype attribute is "linkends anchtype#SEQ". In this example, an ele-ment, anchtype, has been defined to provide a template for the reftype restriction. This restriction is imposed by associating anchtype with linkends in the specification of the reftype attribute. The use of the keyword#SEQ means that the IDREF list assigned to linkends must as whole conform to the content model of anchtype. If#SEQ were not used, each ID in the list would either have to be an anchtype element or an element whose content conformed to the anchtype content model.

Use of the reftype attribute from the all-refs attribute list form also requires the support of the refctl option of the base module.

Another new usage in Example 2 is the setting of the bounded object set (boslevel) level in the ‘‘resource’’ document. Specifying a boslevel of 3 indicates that the entities declared in this document, and any entities declared in those entities, will be included with this document when it is interchanged. In this way the resource document defines the membership of the hyperdocument. Since the traversable links between the members of the hyperdocument are also defined by the resource document, it must be opened and processed along with the other documents for the links to be active and the web it sets up to be available for traversal.

Once the resource document has been processed and the application informed of the documents belong-ing to the bounded object set and of the linkages between them, any of the three documents of the set can be used as the hub of the hyperdocument.

In practice, the user might open the hyperdocument inside of a browser by choosing ‘‘Book with Table’’ as its hub. The application would know the hyperdocument to which this document belongs, and for which it has link and anchor information; it would apply the anchor information, perhaps highlighting the table which is an anchor of the link in the resource document. This would cue the user that informa-tion relevant to that table was available, to which the user could traverse, e.g., by clicking on the highlighted anchor. Traversal might result in the popping up of the document ‘‘Book with Note’’ at the location of the relevant note, which might be highlighted to indicate that return traversal was available.

Referencing Multiple Locations

The multiple location (multloc) attribute list form provides attributes that allow associating certain properties with multiple location address elements, e.g., the nameloc elements used in the previous examples. The multloc attribute list form is shown in Figure 4-13.

Figure 4-13: multloc Attribute List Form
<!-- Multiple Location --> <!--08.2.2-->
<!attlist multloc -- use: nameloc dataloc treeloc pathloc
listloc relloc proploc notloc fcsloc --
ordering -- Is ordering of locations significant? --
(ordered|noorder) noorder
set -- Make multiple a set by ignoring duplicates --
(set|notset) notset
aggloc -- Are multiple locations an aggregate? --
(aggloc|agglink|nagg) nagg
>

The use of the multloc attributes was explained with the first example. The next section elaborates further on the use of the aggregate location (aggloc) attribute.

The aggregate location (aggloc) attribute is used with location address elements (e.g., nameloc-form ele-ments) to specify how multiple locations addressed by these elements are to be referenced when used as anchors of hyperlinks. As shown in Figure 4-13, The aggloc attribute can be assigned one of three values: aggloc, agglink, or nagg.

If a location address element has an aggloc attribute with an assigned value of nagg (the default), multiple locations addressed by the location address element are processed as separate linkends; the objects located by the element are treated as individual anchors.

If a location address element has an aggloc attribute with an assigned value of aggloc or agglink, multiple locations addressed by the location address element are processed as a single linkend; objects located by the element are treated as an aggregate anchor.

Multiple Locations as Anchors: aggloc-Type Aggregates

An example of how multiple locations are treated, depending on the value of the locating location address element’s aggloc attribute, is shown in Figure 4-14.

Figure 4-14: Individual and aggloc-Type Aggregate Anchors

<ilink linkends="notagg isagg" anchrole="role1 role2 role3#AGG"></ilink>

<nameloc id=notagg aggloc=nagg>
<nmlist>para1 para2</nmlist>

<nameloc id=isagg aggloc=aggloc>
<nmlist>table1 note1</nmlist>

<Para id=para1> <Para id=para2> <Table id=table1> <Note id=note1>

Table and Note are members of the nameloc aggregate anchor
Para1 and Para2 are separate anchors

There are two nameloc elements in the example in Figure 4-14.

The nameloc element that addresses para1 and para2 has an aggloc attribute whose assigned value is nagg. With this value, the nameloc element is treated as a reference to the individual Para elements identified by para1 and para2. Each Para element is considered to be a separate anchor when the linkends attribute value is processed, requiring a separate entry in the list of anchroles.

The nameloc element that addresses table1 and note1 has an aggloc attribute whose assigned value is aggloc. With this value, the nameloc element is considered to be an aggregate anchor when the linkends attribute value is processed, requiring exactly one entry in the list of anchroles.

The ilink’s anchrole attribute is assigned a value of "role1 role2 role3#AGG", indicating the roles of the three anchors that the ilink element can point to. The keyword#AGG follows role3 to indicate that role3 could be an aggloc (as in this example) or an agglink.

Traversal options for the example in Figure 4-14 are:

Between the Para elements

From the Table to either of the Para elements

From the Note to either of the Para elements

From either Para element to the Table and Note (i.e., the Table and the Note are retrieved together)

NOTE
In HyTime, traversal is allowed only between anchors. Since the members of an aggloc-type aggregate, in this case the Table and the Note, are considered to be an aggregate anchor, traversal between them is not allowed.

Multiple Locations as Anchors: agglink-Type Aggregates

Changing the value of the aggloc attribute for the nameloc element whose id=isagg to agglink results in the following:

- The nameloc element is both an anchor of the ilink and of itself as an agglink hyperlink.

- The Table and the Note (the member locations of the aggregate) are treated as individual anchors of the agglink nameloc.

Two categories of traversal are possible when an anchor of an ilink is an agglink:

- The traversal that is initiated from an anchor of the ilink to the agglink-type aggregate anchor (the nameloc element in this case).

- The traversal between the agglink-type aggregate and its members.

The traversal rules for these categories are explained in the following subsections.

Traversal to an agglink-type Aggregate Anchor

The rules for traversal to agglink-type aggregate anchors are indicated by the corresponding values of the aggtrav attribute of the ilink element that references the aggregate anchor as one of its linkends. An exam-ple is shown in Figure 4-15.

Figure 4-15: Individual and agglink-Type Aggregate Anchors

<ilink linkends="notagg isagg" anchrole="role1 role2 role3#AGG" aggtrav="mem"></ilink>

<nameloc id=notagg aggloc=nagg>
<nmlist>para1 para2</nmlist>

<nameloc id=isagg aggloc=agglink>
<nmlist>table1 note1</nmlist>

<Para id=para1> <Para id=para2> <Table id=table1> <Note id=note1>

Table and Note are members of the nameloc aggregate anchor
Para1 and Para2 are separate anchors

In the example, the aggtrav attribute has a value of mem, specifying ‘‘member’’ traversal. With this value, the traversal options for the example are:
- Between the Para elements (via the ilink)
- Between either Para element and the Table or the Note (i.e., individually, via the ilink)
- Between the Table and the Note (via the agglink)
- Between the Table or the Note and the agglink nameloc of which it is a member (via the agglink)

If the aggtrav attribute’s value were set to agg - specifying ‘‘aggregate’’ - instead, the traversal options would be:
- Between the Para elements
- Between either Para element and the (unresolved) agglink nameloc (via the ilink)
NOTE This traversal option is available because the aggtrav attribute of the referencing ilink is assigned a value of mem.
- Between the Table, the Note, and the agglink nameloc of which each is a member (via the agglink)

NOTE
An aggregate anchor may be the linkend of more than one ilink. If that is the case, it is the responsibility of the governing application to provide the user with an appropriate mechanism (e.g., a set of menus) for determining which ilink is being traversed. The applicable value of the selected ilink’s aggtrav attri-buted will govern the conditions of the traversal.

In addition to mem and agg, an aggtrav attribute may also be assigned a value of cor, specifying ‘‘correspondent’’ traversal. ‘‘Correspondent’’ traversal is typically used when an ilink links two (or more) agglink aggregates with the same number of members, whose members also ‘‘correspond’’ to each other. In Chapter 8, correspondent traversal is used to match command names on UNIX�-style manual pages with their volume numbers. A (somewhat simplified) example of the linking arrangement used to imple-ment the example in Chapter 8 is shown in Figure 4-16.

Figure 4-16: Traversal Between Corresponding Anchors

<NameVolLink linkends="agg1 agg2" anchrole="role1#AGG role2#AGG" aggtrav="cor" ></ilink>

<nameloc id=agg1 aggloc="agglink">
<nmlist>cmd1 cmd2</nmlist>

<nameloc id=agg2 aggloc="agglink">
<nmlist>manvol1 manvol2</nmlist>

<Cmd id="cmd1"> grep </Cmd>
<Cmd id="cmd2"> pipe </Cmd>
<ManVolNum id="manvol1"> (1V) </ManVolNum>
<ManVolNum id="manvol2"> (2V) </ManVolNum>

Traversal Between an agglink-type Aggregate and its Members

The rules governing the traversal that is possible between the agglink location address and its members (for example, the nameloc element, the Table and the Note in Figure 4-15) are defined in the HyTime stan-dard. These rules state that bidirectional traversal between an agglink location address and its members is possible, regardless of whether traversal was initiated from within the link or from outside the link. In the example in Figure 4-15, that means that bidirectional traversal between the nameloc element, the Table, and the Note elements (and any additional elements that were added to the name list) are all possible.

Figure 4-17 further illustrates the traversal rules when the value of a location address element’s aggloc attribute has been set to agglink, in this case a nameloc-form element. As shown in the figure, traversal is possible between the nameloc-form element, and any of the anchor elements. Traversal is also possible between adjacent anchor elements, and between the first and last anchor elements.

NOTE
It must be emphasized that the ‘‘anchor elements’’ have been so named for ease of reference in the figure. In HyTime, an element - or any other object - becomes an anchor by virtue of being linked to via a hyperlink element, and not because it has been given the name ‘‘anchor.’’

Figure 4-17: Traversing Aggregate Anchors

<nameloc aggloc="agglink"> <nmlist>First Next Last</nmlist> </nameloc>
|
<anchor id="Next"> ---
| |
<anchor id="Last"> |
| |
<anchor id="First">----

Chapter 5: Addressing by Coordinate Position
Introduction

In the examples in Chapter 4, links were established between element anchors that could be located by name (ID). HyTime also provides facilities for identifying locations that are not elements or that do not have assigned IDs. This chapter describes one of these techniques, the use of coordinate locations. The following chapter, ‘‘Addressing by Semantic Construct’’ , completes the discussion of non-ID based addressing by describing the use of semantic properties for locating information objects.

Coordinate Addressing and Coordinate Locations

Coordinate addressing is supported by the measurement module. Coordinate addressing means the capability to identify objects in terms of their positions and extents along an axis or range. Identifying positions on an axis requires an agreed means of measuring along the axis. In HyTime, all such measurements are expressed in terms of a base unit called the Standard Measurement Unit (SMU). In this chapter, all measurements are expressed in terms of an SMU that is a ‘‘generic quantum.’’

NOTE
The measurement module also supports the use of SMUs that have actual values, e.g., seconds or meters. SMUs with actual values are important in applications that use the scheduling module. The use of the scheduling module is not described in this release of the HyTime Application Development Guide.

Axis Markers

In HyTime, the values used to specify a dimension (position and extent) on an axis are referred to as ‘‘axis markers.’’ A dimension is specified using a pair of axis markers, or elements that resolve to a pair of axis markers. The combination of signs (positive or negative) for each marker’s value is used to determine where counting begins and in what direction. Axis marker counting directions are explained in Table 5-1.

Table 5-1: Axis Marker Counting Directions
_____________________________________________________
Sign of Marker 1 Counting Direction
_____________________________________________________
Positive Forward from the start of the range (1)
_____________________________________________________
Negative Marker 2 positive - Back from the end of
the range (-1)
Marker 2 negative - Back from Marker 2
_____________________________________________________
Sign of Marker 2 Counting Direction
_____________________________________________________
Positive Forward from Marker 1
_____________________________________________________
Negative Back from end of the range (-1)
_____________________________________________________

Some examples of the use of axis markers are shown in Figures 5-1 and 5-2.

Figure 5-1:
Coordinate Addressing of the Entire Addressable Range

Addressable Range 1 10

axis markers 1 -1
start of range end of range

NOTE
In the example shown in Figure 5-1, axis marker pairs of "-10 10" or "-10 -1" could also be used to denote the entire addressable range.

Figure 5-2:
Coordinate Addressing using Axis Markers

Addressable Range 1 4 6 10
4 3
axis markers first marker second marker

Addressable Range 1 4 6 10
-7 3
axis markers first marker second marker

Addressable Range 1 4 6 10
-3 -5
axis markers first marker second marker

Architectural Forms for Coordinate Locations

The location address module provides several architectural forms that support addressing by a coordinate position. This chapter provides examples of the element type forms used for locating nodes, strings, and tokens:
- tree location address treeloc
- path location address pathloc
- relative location address relloc
- data location address dataloc

NOTE
All of these forms use a location source (locsrc) attribute to establish a domain (for data locations) or a point of reference (for tree locations) within or in relation to which the position(s) of target quanta are specified.

Sample Document for Examples

A fragment of a document source file that has been marked up based on the DocBook DTD will be used as the basis for several of the following examples. This fragment is shown in Figure 5-3.

Figure 5-3: DOCBOOK-based Source File Fragment

<Book id=Book><Title>Graphical Programmer’s Guide</Title>
<Chapter ID=Chap1><Title>Graphical Programming</Title>
<Sect1><Title>Introduction</Title>
<Para>
<InformalTable>
<Graphic Entityref="ch1.table1"> </Graphic>
</InformalTable>
<InformalTable>
<Graphic Entityref="ch1.table2"> </Graphic>
</InformalTable>
<InformalTable>
<Graphic Entityref="ch1.table3"> </Graphic>
</InformalTable>
</Para>
</Sect1>
</Chapter>

Tree Location Address

The elements in the source file in Figure 5-3 have a structural relationship. This relationship can be viewed as a tree structure that begins with the Book element, as shown in Figure 5-4.

Figure 5-4: Structure of Source File Fragment (Tree Version)

Book (root of tree)
 Title
 Chapter (second child of Book)
   Title
   Sect1 (second child of Chapter)
     Title
     Para (second child of Sect1)
       InformalTable
         Graphic
       InformalTable
         Graphic
       InformalTable (third child of Para)
         Graphic (first child of InformalTable)

If each element in the diagram is viewed as a node, and the Book element is designated as the root of the tree, a given node can be specified by its relationship to the root node. This is the basis for addressing using the tree location address (treeloc) element type form. The definition of the treeloc element type form is shown in Figure 5-5.

Figure 5-5:
treeloc Architectural Form

<!-- Tree Location Address --> <!--08.4.2.4-->
<!element treeloc -- Locates nodes in a tree by classical
method --
-- Constraint: marklists are merged into a
single list that contains 1st markers only;
implied marker2 is 1 --
- O (marklist*) >
<!attlist treeloc HyTime NAME treeloc
id ID#REQUIRED
-- overrun attributes --
-- treecom attributes --
-- locsrc attributes --
-- multloc attributes --
-- spanloc attributes -->

As indicated in the treeloc definition, dimension specifications are denoted in treeloc-form elements by marklist-type elements. The pairing of axis markers in the case of the treeloc form is implicit, rather than explicit, so that for each marker there is an implied second marker with a value of 1. Each implicit marker pair selects one node from the range of children of the node that was most recently located, except that the first marker provides the first parent, which is the locsrc itself. On this basis, to locate the graphic in the third InformalTable, the markup would be:
<treeloc locsrc=Book><marklist>1 2 2 2 3 1</></treeloc>

Referring back to Figure 5-5, the interpretation of this entry is:
1 = Book
2 = second child of Book = Chapter
2 = second child of Chapter = Sect1
2 = second child of Sect1 = Para
3 = third child of Para = (third) InformalTable
1 = child of InformalTable = Graphic

Path Location Address

The treeloc element type form allows the identification of a single element in a tree structure through a parent/child relationship. To identify multiple elements, pathloc-type elements can be used. The definition of the pathloc element type form is shown in Figure 5-6.

Figure 5-6:
pathloc Architectural Form

<!-- Path Location Address -->
<!element pathloc -- Locates nodes in a tree viewed
as a path list --
-- Constraint: dimlists are merged into a single
list that resolves to pairs of dimspecs --
- O (dimlist*) >
<!attlist pathloc HyTime NAME pathloc
id ID#REQUIRED
-- overrun attributes --
-- treecom attributes --
-- locsrc attributes --
-- multloc attributes --
-- spanloc attributes -->

As indicated in the pathloc definition, the content model for pathloc-form elements is zero or more dimlist-type elements. The dimlist-type subelements of pathloc-type elements ultimately contain lists of marker pairs. The marker pairs are themselves used in pairs to locate groups of nodes within a tree viewed as a two-dimensional matrix. In this matrix, there are as many columns (or paths) as there are leaf nodes in the tree; and as many rows as there are levels of nesting, plus a row for the root level. To illustrate how this method is applied, Figure 5-4 is redrawn in Figure 5-7.


Figure 5-7:
Structure of Source File Fragment (Matrix Version)

         |-------------------------------------| located paths in range of leaves
Book  Book    Book    Book    Book    Book
|  |    |    |    |    |
Title  Chapter  Chapter  Chapter  Chapter  Chapter
 |    |    |    |    |
 Title    Sect1  Sect1  Sect1  Sect1
     |    |    |    |
     Title    Para    Para    Para
         |    |    |
         Table  Table  Table --------
         |    |    | located vertical range along each path
         Graphic  Graphic  Graphic ________

As an example, to locate all of the Table elements and their Graphic (sub)elements in Figure 5-7 by using a pathloc element, the markup would be:
<pathloc locsrc=Book><dimlist>4 3 5 2</></pathloc>

The interpretation of this entry is:

locsrc=Book: The dimension specifications will be interpreted relative to the Book node.

4: Starting at the left, count right four quanta; this marks the first path in the range of paths.

3: Starting from the location established in the preceding step, count right three quanta; this marks the last path in the range of paths to be located.

5: Starting with the root node, count down five quanta; this marks the beginning location for the vertical range along each path.

2: Starting with the location established in the preceding step, count down two quanta; this marks the limit of the vertical range. Since the first count occurs ‘‘in place,’’ all three Table elements and their Graphic (sub)elements are selected.

Another pathloc Example

The previous example showed how to use pathloc to locate nodes in a single tree. There may be cases where locating nodes in more than one tree is required. In that case, setting the appropriate dimension specifications depends on whether the trees are to be treated as separate or as combined. The value assigned to the tree combination attribute (treecom) determines whether multiple source trees are com-bined. The default value of this attribute is ntreecom, or ‘‘not combined.’’ To treat the trees as combined, the treecom attribute should be assigned a value of treecom. To serve as the basis for discussing these two usages, the structure of two books is shown in Figure 5-8. The matrix version of this example is shown in Figure 5-9.

Figure 5-8:
Using pathloc with Multiple Source Trees
Book1
 Title
 Chapter
   Title
   Sect1
     Title
     Para
     Para
Book2
 Title
 Chapter
   Title
   Sect1
     Title
     Para
     Para


Figure 5-9: Structure of pathloc Example 2
Book1  Book1  Book 1  Book1  Book1  Book2  Book2  Book2  Book2  Book2  1
|    |    |    |    |    |    |    |    |    |
Title    Chapter  Chapter  Chapter  Chapter  Title    Chapter  Chapter  Chapter  Chapter  2
   |    |    |    |        |    |    |    |
   Title    Sect1  Sect1  Sect1        Title    Sect1  Sect1  Sect1  3  |
       |    |    |            |    |    |      | <dimlist> 3 2
       Title    Para    Para            Title    Para    Para    4  |
1    2    3    4    5    6    7    8    9    10
       _______________________/            _______________________/
         <dimlist> 3 3                  <dimlist> 8 3

To locate the section (Sect1), section title (Title), and two paragraph (Para) elements in Book1, the follow-ing markup can be used:
<pathloc locsrc="Book1 Book2" treecom=treecom><dimlist>3 3 3 2</pathloc>

Figure 5-8 shows a dotted line connecting the structures of Book1 and Book2. This dotted line indicates a combined tree structure (treecom=treecom). With a combined tree structure, the dimension specification returns the section, section title and paragraphs from Book1 only. If the trees were treated individually (treecom=ntreecom) then the same dimension specification shown would indicate the sec-tion, section titles and paragraphs in both books. To indicate only the section, section title, and para-graphs in Book2 when using a combined tree, the markup would be:
<pathloc locsrc="Book1 Book2" treecom=treecom><dimlist>8 3 3 2</pathloc>

Relative Location Address

The first pathloc example used a pathloc element to select the Table elements and their subelements. The same objective can also be accomplished by using a relative location address (relloc)-form element. The definition of the relloc element type form is shown in Figure 5-10.

Figure 5-10: relloc Architectural Form
<!-- Relative Location Address -->
<!element relloc -- Locates nodes in a tree relative to a
starting node --
-- Constraint: dimlists are merged into a single
list that resolves to pairs of dimspecs --
- O (dimlist*) >
<!attlist relloc HyTime NAME relloc
id ID#REQUIRED
root -- Root of tree --
-- Constraint: 1 per starting node or
1 for all --
IDREFS#IMPLIED -- Default: document
root of each
starting node --
relation -- Relationship to starting node --
-- Constraint: des requires "pathloc"
option --
(anc|esib|ysib|des|parent|children) parent
-- overrun attributes --
-- locsrc attributes --
-- multloc attributes --
-- spanloc attributes -->

The content model for relloc-form elements is the same as for pathloc-form elements, although the HyTime processing of the content differs. relloc differs from pathloc in having root and relation attributes. Structural relationships of target nodes with respect to the node that is the locsrc are specified by the value given to the relation attribute. These relationships are:
- esib = elder siblings
- ysib = younger siblings
- anc = ancestors
- des = descendants

Each relationship category establishes a range of nodes within which target nodes are specified by the values on the dimlist. To illustrate how this method is applied, Figure 5-4 is shown again with some additions in Figure 5-11.

Figure 5-11: Structure of Source File Fragment (Relloc Version)
Book (root of tree)
 Title
 Chapter
   Title
   Sect1 parent of Para
     Title elder sibling of Para
     Para (locsrc in this example)
       InformalTable
         Graphic
       InformalTable
         Graphic
       InformalTable
         Graphic (first child of InformalTable)

With the the root and locsrc nodes selected as shown in the figure, the following relloc element instances would select the indicated nodes:
- <relloc locsrc=Para root=Book relation=esib>1 -1</relloc> -> Title (of Sect1)
- <relloc locsrc=Para root=Book relation=anc> -2 1</relloc> -> Chapter
- <relloc locsrc=Para root=Book relation=des>1 -1 2 -1</relloc> -> all three InformalTables and their Graphic sub(elements)

In the last example, the interpretation of the dimlist is identical to that for a pathloc whose location source is Para.

Data Location Address

The data location address (dataloc) element type form is used to define coordinate address elements in which the quantum is either a bit combination (e.g., a character) or a space-delimited token (e.g., a word). The architectural form for dataloc is shown in Figure 5-12.

Figure 5-12: dataloc Architectural Form
<!-- Data Location Address -->
<!element dataloc -- Locates string and token data objects
in data --
-- Constraint: dimlists are concatenated
into one list --
- O (dimlist*) >
<!attlist dataloc HyTime NAME dataloc
id ID#REQUIRED
quantum -- Data quantum: bit combination or token --
(str|norm|word|name|sint|date|time|utc) str
catsrc -- Concatenate multiple source objects into
a single object before applying dimlist to it --
(catsrc|catsrcsp|nocatsrc) nocatsrc
catres -- Concatenate results of applying dimlist, in
the order of the dimlist --
(catres|catressp|nocatres) nocatres
-- overrun attributes --
-- locsrc attributes --
-- multloc attributes --
-- spanloc attributes -->

To illustrate the use of dataloc, a fragment of a file in SGML markup is shown Figure 5-13.

Figure 5-13: DTD and Source File Fragments for dataloc Example

In DTD:
<!ELEMENT Para - - (#PCDATA|emp)* >

In source file:
<Para id=para1>
A short paragraph for demonstration purposes only.
<emp>However, it’s very important.</emp>
</Para>

To locate the last three words in the first sentence of the paragraph (‘‘demonstration purposes only’’) the entry for the dataloc element is:
- <treeloc id=tloc1 locsrc=para1><marklist>1 1</></>
- <dataloc locsrc=tloc1 quantum=word<dimlist>-3 3</></>

The interpretation of this entry is divided into two parts: the treeloc element and the dataloc element.

<treeloc id=tloc1 locsrc=para1><marklist>1 1</></>

- the treeloc element is assigned an id of tloc1 so that it can be referred to from the dataloc. In fact, this is the basis for a simple location ladder.

- the locsrc for the treeloc is para1. This means that the marklist is to be interpreted relative to the Para element.

- the dimension specification in the marklist element is 1 1. This value specifies the first child of the locsrc, i.e., the sentence ‘‘A short paragraph for demonstration purposes only.’’ In HyTime terminology, this sentence is considered as an unnamed or ‘‘pseudo-element’’ and is regarded as the first child of the Para element.

<dataloc locsrc=tloc1 quantum=word<dimlist>-3 3</></>

- locsrc=tloc1: the locsrc for the dataloc is the treeloc; the dimension specifications will be interpreted relative to the resolved treeloc, i.e., the pseudo-element first child of the treeloc’s location source, para1.

- quantum=word: the quanta addressed by the dimension specifications are word tokens. By using word instead of norm as the value for quantum, the ‘‘.’’ at the end of the sen-tence isn’t included (as long as ‘‘.’’ isn’t a name character in the concrete syntax). Alterna-tively, quantum=str could be used so that characters would be counted. The dimlist would need to be changed accordingly, i.e., to <dimlist>-27 -2</dimlist>.

Constructing a Location Ladder

Complicated, qualified addressing can be accomplished by chaining any number or type of location address elements as needed to identify a particular target. Address elements that have been connected in this way are said to constitute a ‘‘location ladder.’’ The section on dataloc included a very simple example of a location ladder. This section shows a more complex example, derived from Example 2 in Chapter 4.

As in the original example, this example requires that a table and a note, located in separate documents, be displayed together. Again as in the original example, the table and the note are to be referenced through an ilink that is in a third, ‘‘resource’’ document. The anchors of the ilink are also the same as before:

- The content of the ilink is a comment on the note’s contents, and the ilink refers back to itself so this information will be displayed when the link is traversed.

- The table is located as an element in an entity, (nmlist nametype=element).

- In a departure from the original example, the note element does not have an ID; it is located through a location ladder after the entity containing the note is identified (nmlist nametype=entity).

A diagram of the target implementation is shown in Figure 5-14. The DTDs and document source files needed to implement this example are shown in Figures 5-15 through 5-19.

Figure 5-14: Location Ladder Implementation

<tnref id=comment1 linkends=comment1 tabloc dloc>Note text ...</tnref>

<nameloc id=tabloc>
<nmlist nametype=element docorsub=firstdoc>table1</nmlist>

<Table id=table1>

<dataloc id=dloc1 locsrc=tloc1 quantum=word>
<dimlist>-8 1</dimlist>

word Table in Para element within Note element

<treeloc id=tloc1 locsrc=noteloc>
<marklist>1 2 2 3 1</marklist>
<nameloc id=noteloc>
<nmlist nametype=entity>secondoc</nmlist>
The document containing the note (identified as an entity named secondoc)

Figure 5-15: Example 2: DTD for the Documents that Contain the Table and the Note

<!DOCTYPE Book [
<!ELEMENT Book - O (Chapter)+ >
<!-- ELEMENT and ATTLIST declarations for Book sub-elements omitted -->
]>

Figure 5-16: Source File Containing the Table
<Book><Title>Book with Tables</Title>
<Chapter><Title>chapter 1</Title>
<Sect1><Title>Introduction</Title>
<Para>
Table 1 provides some useful information.
</Para>
<Table id=table1><Title>Table Title</Title>
<!-- Table text here -->
</Table>
<Table id=table2><Title>Table Title</Title>
<!-- Table text here -->
</Table>
</Sect1>
</Chapter>
</Book>

Figure 5-17: Source File Containing the Note

<Book><Title>Book with Note</Title>
<Chapter><Title>chapter 1</Title>
<Sect1><Title>Introduction</Title>
<Para>
Lots of useful information.
</Para>
<Note>
<Para>
A note that readers of ‘‘Book with Table’’ should see when they read Table 1.
</Para>
</Note>
</Sect1>
</Chapter>
</Book>

Figure 5-18: DTD for the Resource Document 1

<?HyTime VERSION "ISO/IEC 10744:1992" HYQCNT=32 >
<?HyTime MODULE base exidrefs refctl >
<?HyTime MODULE locs multloc >
<?HyTime MODULE links manyanch=3 >

<!DOCTYPE resource [
<!ENTITY % loc "nameloc|dataloc|treeloc|pathloc" >

<!ELEMENT resource - O (%loc;|tnref)+ >
<!ATTLIST resource HyTime NAME HyDoc
id ID#IMPLIED
boslevel NUMBER#IMPLIED >

<!ELEMENT nameloc - O (nmlist)* >
<!ATTLIST nameloc HyTime NAME nameloc
id ID#REQUIRED >

<!ELEMENT nmlist - O (#PCDATA) >
<!ATTLIST nmlist HyTime NAME nmlist
nametype (entity|element|unified) element
obnames (obnames|nobnames) nobnames
docorsub ENTITY#IMPLIED -- Default: no change --
dtdorlpd NAMES#IMPLIED -- Default: unchanged or base --
refrange CDATA#FIXED "#ALL X" >

<!ELEMENT treeloc - O (marklist*) >
<!ATTLIST treeloc HyTime NAME treeloc
id ID#REQUIRED
treecom (treecom|ntreecom) ntreecom
locsrc IDREFS#CURRENT >

<!ELEMENT marklist O O (#PCDATA) -- lextype(snzi*) -->
<!ATTLIST marklist HyTime NAME marklist >

<!ELEMENT dataloc - O (dimlist*) >
<!ATTLIST dataloc HyTime NAME dataloc
id ID#REQUIRED
quantum (str|norm|word|name|sint|date|time|utc) word
locsrc IDREFS#CURRENT >

<!ELEMENT dimlist O O (#PCDATA) -- lextype(snzi*) -->
<!ATTLIST dimlist HyTime NAME dimlist >

<!-- Targets that will be allowed for linkends attribute of tnref element, as constrained by the reftype attribute of tnref --> <!ELEMENT anchtype - - (tnref,table,note) >

<!-- Declarations for *tnref* independent link -->

<!ELEMENT tnref - O (#PCDATA) >
<!ATTLIST tnref HyTime NAME ilink
id ID#IMPLIED
anchrole CDATA#FIXED "link table note"
-- includes a role for self-reference, because
the content of the tnref element, which refers to
the table and note, is meant to be an anchor of
itself --
linkends IDREFS#REQUIRED
extra NAMES A
intra NAMES A
-- Common Attributes --
reftype CDATA#FIXED "linkends anchtype#SEQ">

<!ENTITY firstdoc SYSTEM "/user/doc/firstdoc" CDATA SGML>
<!ENTITY secondoc SYSTEM "/user/doc/secondoc" CDATA SGML>
<!NOTATION SGML PUBLIC "+//ISO 8879:1986//NOTATION
Standard Generalized Markup Language//EN" >
]>

Figure 5-19: Source file for the Resource Document

<resource id=web1 boslevel=3 >

<nameloc id=tabloc>
<nmlist nametype=element obnames=nobnames docorsub=firstdoc>table1
</nmlist>
</nameloc>

<nameloc id=noteloc>
<nmlist nametype=entity obnames=nobnames>secondoc
</nmlist>
</nameloc>

<treeloc id=tloc1 locsrc=noteloc><marklist>1 2 2 3 1</></>
-- locates note as content of 1st child (Para) of 3rd child (Note) of 2nd child (sect1) of 2nd child (Chapter) of Book --

<dataloc id=dloc1 locsrc=tloc1 quantum=word><dimlist>-8 1</></>
-- locates 8th word (Table) --

<tnref id=comment1 reftype="linkends anchtype" linkends="comment1 tabloc dloc1">Word should be plural (Tables).</tnref>

</resource>

Explanation of the Location Ladder Example

The most important new feature in this example is the use of a location ladder to identify a portion of the content of a Note element. Access to the Note element also differs in this example from that in Example 2: Since the Note is not identified by an ID, it is necessary as a first step to use an entity-type nameloc ele-ment to get the document in which the Note occurs. The location ladder is implemented by:

creating a nameloc element with an ID of noteloc

setting the attribute values of the nameloc’s nmlist subelement to nametype=entity, so that the con-tent of the nmlist element will be interpreted as the name of an entity

creating a treeloc element with:
-- An ID of tloc1.
-- A locsrc of noteloc (the ID assigned to the nameloc element used to locate the document entity containing the Note). The document containing the Note becomes the tree that is traversed via the treeloc element.
-- A marklist whose content is 1 2 2 3 1. This dimension specification locates the Note as the content of the 1st child (Para) of the 3rd child (Note) of the 2nd child (sect1) of the 2nd child (Chapter) of the Book element.

creating a dataloc element with:
-- An ID of dloc1.
-- A locsrc of tloc1 (the ID of the treeloc element). By assigning the ID of the treeloc element as the locsrc of the dataloc, the pseudo-element node to which the treeloc element resolves becomes the range within which the dataloc element selects quanta.
-- A quantum attribute whose value is word. This setting says that the values contained in the dataloc’s dimlist subelement are to be interpreted as applying to a particular kind of token, as opposed, e.g., to a bit combination.
-- A dimlist subelement whose content is -8 1. This dimension specification locates the 8th word token in the note, which is ‘‘Table’’.

After the location ladder has been set up, an ilink-type element, tnref, is instantiated, with:

An ID of comment1.

A reftype attribute whose value is "linkends anchtype", which provides a constraint template of (link,table,note) for the generic identifiers of the tnref’s linkends attribute ID list.

a linkends attribute whose values are "comment1 tabloc dloc" a content of ‘‘Word should be plural (Tables).’’

Example in Use

This example shows one method by which an editor might communicate with a writer in the process of reviewing a long document. In this case, an editor has identified one typographical error. In practice, the editor would probably make a number of comments and corrections. The writer would open the docu-ments under review, ‘‘Book with Table’’ and ‘‘Book with Note’’ as well as the ‘‘resource’’ document con-taining the comments. If the writer were to select the table anchor of the tnref link, both the note in the document ‘‘Book with Note’’ and the comment that makes up the content of the tnref element - ‘‘Word should be plural (Tables).’’ - would be displayed. By using the resource document, the writer could locate comments without having to look through the source documents. The writer would, however, have the option of browsing through any of the documents, selecting anchors for traversal from within each. For example, if the writer opened the document ‘‘Book with Note’’ and selected the note anchor of the tnref link, the table in the document ‘‘Book with Table’’ and the comment in the resource document would also be displayed.

Chapter 6: Addressing by Semantic Construct
Introduction

The preceding chapters have described HyTime features for locating objects by name and by position:
- named location addressing
- coordinate location addressing

This chapter will discuss the most useful of the semantic location address forms, property location address (proploc), which locates values of defined properties of information objects. The next chapter will demonstrate the way in which HyTime’s query notation, HyQ, incorporates HyTime’s location addressing features as query functions.

Property Location Element Types

The property location element type form (proploc) uses qualified property names (QPNs) to obtain the value of an attribute or other (user defined) property of an object. The default location source for a proploc is the previously specified element. The location source locsrc attribute can be used to set the location source as desired, so that a proploc can be used in a location ladder. The definition of the property loca-tion element type form is shown in Figure 6-1. A typical use of proploc-form elements is shown in Figure 6-2.

Figure 6-1: Example: proploc Architectural Form
<!-- Property Location Address --> <!--08.5.1-->
<!element proploc -- Locates attribute or other property --
- O (QPN|#PCDATA) -- lextype(QPN) -->
<!attlist proploc HyTime NAME proploc
id ID#REQUIRED
joint -- Joint property of relationship
of members of multiple locsrc? --
(joint|several) several
apropsrc -- Use additional property
source? -- (apropsrc|solesrc) solesrc
notprop -- If not a property of locsrc or
apropsrc? -- (error|empty|ignore)
ignore
-- locsrc attributes --
-- multloc attributes --
>

Figure 6-2: Example: Using proploc with a qpn Lexical Type

<procedure id=p46 level=expert>
<proploc id=q20 locsrc=p46>attval[level]</proploc>

In the example shown in Figure 6-2, the proploc element finds the value of the procedure element’s level attribute. This is accomplished by:
- assigning the ID of the procedure element as the value of the proploc element’s locsrc attribute
- using the qualified property name attval[level] to obtain the value of the level attribute, which in this case is expert

Qualified Property Names

A qualified property name (QPN) consists of a sequence of one or more property names.
Each property name can, as an option, be accompanied by
- a property set name (psn) attribute and
- a specifier for pro-perty (spec)-type element. (If it is not, the property is assumed to have been previously defined by the HyTime standard.) A QPN can be:
- an element of the element type form qualified property name (qpn)
- a character string conforming to the ‘‘qpn’’ lexical type

Referring back to Figure 6-2, the string attval[level] is a QPN because it conforms to the ‘‘qpn’’ lexical type, as defined in A.1.3 of the HyTime standard.

NOTE
To use the "qpn" lexical type, include the following declaration in the SGML declaration: ISO/IEC 10744:1992//TEXT Useful HyLex Lexical Types//EN

The qualified property name could also have been entered by using a qualified property name (qpn)-type element. The previous example modified to use a qpn-type element is shown in Figure 6-3. The architec-tural form for the qpn-type element and its subelements is shown in Figure 6-4.

Figure 6-3: Example: Using proploc with a qpn-type Element

<procedure id=p46 level=expert>

<proploc id=q20 locsrc=p46>
<qpn>
<pn psn=HTsem1>attval</pn>
<spec>level</spec>
</qpn>
</proploc>

Figure 6-4: qpn-type Element and Subelement Architectural Forms

<!-- Qualified Property Name --> <!--06.7.2-->
<!element qpn -- Qualified property name --
- O (pn, spec?)+ >
<!attlist qpn HyTime NAME qpn
id ID#REQUIRED >

<!-- Property Name --> <!--06.7.2-->
<!element pn -- Property name --
-- Constraint: must be a valid property name in
psn --
- O RCDATA -- lextype(PN) -- >
<!attlist pn HyTime NAME pn
psn -- Property set name --
-- lextype(NOTATION) --
NAME#IMPLIED -- Default: from qpnpsn --
>

<!-- Specifier for Property --> <!--06.7.2-->
<!element spec -- Specifier for property --
- O ((qpn|qltn)+|pval) >
<!attlist spec HyTime NAME spec >

<!-- Property Value --> <!--06.7.2-->
<!element pval -- Property value --
-- Constraint: must satisfy property --
- O RCDATA >
<!attlist pval HyTime NAME pval >

Explanation of Example in Figure 6-3

The example in Figure 6-3 is based on the use of a qpn-type element to obtain the value of the level attri-bute. The qpn element contains the following sub-elements:

pn
The pn element has a property set name attribute (psn) whose value is HTsem1. HTsem1 is a notation provided by HyTime that defines the basic SGML semantic constructs.

NOTE To use the HTsem1 notation, include the following declaration in the DTD: <!NOTATION HTsem1 PUBLIC "+//ISO/IEC 10744:1992//NOTATION HTsem1::SGML basic constructs//EN">

The pn element has a content of attval, signifying that the value of an attribute is the property to be obtained.

spec
the spec element has a content of level. Since this content meets the requirements for a qualified lexical type name, it satisfies the requirements of the spec content model. As in the first proploc example, the combination of the contents of the pn and spec elements (attval and level, respectively) form a qualified property name that indicates the value of a level attribute is to be found. Again, the value of the proploc’s locsrc attribute indicates the element the value of whose level attribute is to be retrieved.

Chapter 7: HyQ
The HyQ Notation

In previous chapters, HyTime’s location addressing facilities were accessed through corresponding element types. For example, to address a single node in a tree, an element based on the tree location address element type form (treeloc) was used. The HyTime standard defines a query data content notation, HyQ, that can be used to access all the location addressing facilities supported by HyTime. The basic features and requirements of the HyQ notation can be summarized as follows:

The HyQ notation is used to enter queries within a containing HyQ element. In other words, the content of a HyQ element is a query expressed in HyQ notation.

in place of using location address elements, HyQ queries access the location addressing facilities through functions. For example, instead of using a treeloc element a HyQ query is used to call the treeloc() function.

the DTD must include the HyTime support declaration for the location address module and include the ‘‘query’’ and ‘‘HyQ’’ options:
<?HyTime MODULE locs query HyQ >

the DTD must include the HyQ notation declaration:
<!NOTATION HyQ PUBLIC
"+//ISO/IEC 10744:1992//NOTATION HyTime Query
Notation//EN" >

Using HyQ

NOTE
For practical use on a large scale, queries (and the containing HyQ elements) should be automatically generated in response to user input rather than being coded by hand.

The HyTime standard gives several examples of the use of HyQ queries (A.3.4). They are repeated here (Figures 7-1 through 7-3 and Figure 7-5) with some modifications and analysis.

Figure 7-1: Locate all ‘‘equation’’ elements in a document

<!-- 1. Locate all "equation" elements in a document -->
<HyQ qdomain=mydoc>
Select(DOMTREE EQ(Proploc(CAND GI) "equation"))
</HyQ>

Analysis

The value of the qdomain attribute establishes the domain of the query.

The DOMTREE argument to the Select function says that the entire domain hierarchy will be searched.

The Proploc function returns the generic identifier (GI) of the current candidate (CAND) node. This value is (by default) returned in upper case.

The EQ function compares the generic identifier returned by the Proploc function to the string ‘‘equation’’ and returns a TRUE value if they are equal.

If the reference concrete syntax is in use (NAMECASE GENERAL YES), no match will occur because the GIs are returned in upper case, while the string being tested against (‘‘equation’’) is in lower case. To allow a match, the example could be changed so that the quantum for EQ is specified as NAME. With this change, all lower case letters will be converted to upper case, so that ‘‘EQUATION’’ (instead of ‘‘equation’’) will be used as the comparison string against the GIs returned by the Proploc function:
<HyQ qdomain=mydoc>
Select(DOMTREE EQ(NAME Proploc(CAND GI) "equation"))
</HyQ>

This change will be applied to the rest of the examples from the HyTime standard.

Figure 7-2: Named Query that can be Reused with an Argument

<!-- 2. Named query that can be reused with an argument to locate all elements of a specified element type. -->
<HyQ fn=hasgi>
Select(DOMTREE EQ(NAME Proploc(CAND GI) %1))
</HyQ>

Analysis

The fn attribute is used to assign a name to the function being defined.

The function takes one argument, the name of a generic identifier, that is passed to it as the value of %1.

The function can be called from another query by using the assigned name.

Figure 7-3: HyQ Location Ladder or Nested Query

<!-- 3. Locate the second "para" element in the document that occurs in a "body" element -->
<HyQ qdomain=mydoc>
Listloc(
Select(
Pathloc(Select(DOMTREE EQ(NAME Proploc(CAND
GI) "body")) 1 -1 2 -1)
EQ(NAME Proploc(CAND GI) "para") )
2 1 )
</HyQ>

A possible source file structure for Example 3 is shown in Figure 7-4. Figure 7-5 shows the nodes that are returned at successive stages in the operation of the query.

Figure 7-4: Possible Structure of Source File for Example 3

mydoc
 para
 body
   para
   sect
     para
     para

Figure 7-5:

Analysis

Using HyQ The value of the qdomain attribute establishes the domain of the query as the element, mydoc.

The DOMTREE argument to the inner Select() function says that the entire domain hierarchy will be searched.

The inner Select function locates all body elements in mydoc, using a Proploc function to return the GI of each node in the query domain, and an EQ function to test whether the GI equals "body".

The Pathloc function, using the nodes returned by the inner Select as a location source, chooses all the children of the body element (1 -1 selects all the leaf nodes; 2 -1 selects all nodes except the root node on each path designated by the leaf selection).

From the node list returned by the Pathloc, the outer Select function locates (via EQ and Proploc functions) each node whose GI equals "para".

The Listloc function, using the para elements returned by the outer Select as its location source node list, picks the second node from that list with its marker pair (2 1).

NOTE
An explanation of the list location address (listoc) element type form, whose usage is not detailed in this Guide, may be found in Clause 08.4.2.6 of the HyTime standard.

Figure 7-6: Using a Named Query

<!-- 4. Same as Query 3, but it uses named Query 2 ("hasgi") -->
<HyQ qdomain=mydoc>
Listloc(
UseQ(hasgi
Pathloc(UseQ(hasgi DOMTREE "body")
1 -1 2 -1)
"para" )
2 1 )
</HyQ>

<HyQ fn=hasgi>
Select(DOMTREE EQ(NAME Proploc(CAND GI) %1))
</HyQ>

Analysis
This query returns the same results as Query 3 by using the UseQ function to execute function calls to the named query hasgi, which encapsulates the functionality of its component functions, return-ing from the query domain or location source any node whose GI property equals a string passed to it as an argument. There are two calls to the hasgi query:

The first (inner) UseQ function call passes ‘‘body’’ as the argument to the hasgi function, which returns the BODY node on a node list as the result.

The second (outer) UseQ function call uses the nodes returned by the nested Pathloc as a query domain and passes ‘‘para’’ as the argument to the hasgi function, which returns the PARA nodes on a node list as the result.

Using HyQ The Listloc function then returns the second paragraph as the result of the entire query, as in the original example.

HyQ Functions

The HyQ functions are summarized in Tables 7-1 through 7-8 for reference.

Table 7-1: Assertions
_______________________________________________________
assert() Test assertion for evaluation to ‘‘TRUE’’ or ‘‘FALSE’’
_______________________________________________________
ah() User-defined assertion handler
_______________________________________________________
forall() Evaluates to ‘‘TRUE’’ if all nodes meet assertion Under conditions where an assertion is expected, evaluates to ‘‘TRUE’’ when a non-empty node list occurs, ‘‘FALSE’’ if the node list is empty exists()
_______________________________________________________

Table 7-2: Boolean Expressions
_______________________________________________________
and() Test Boolean AND and return true if all assertions are true
_______________________________________________________
not() Test Boolean NOT and return true if its assertion is false
_______________________________________________________
or() Test Boolean OR and return true if any of its assertions are true
_______________________________________________________

Table 7-3: Comparison
_____________________________________________
compare() Test ordering of nodes in lists
_____________________________________________
ordered() Tests if nodes are properly ordered
_____________________________________________

Table 7-4: Nodes
_______________________________________________________
count() Return number of quanta in an addressable range
_______________________________________________________ oo() Resolve an IDREF to the object it refers to (‘‘object of’’ the reference)
_______________________________________________________

Table 7-5: Node List
______________________________________
assign() Assigns a name to a node list
______________________________________
nlref() Resolves a name to a node list (node list reference)
______________________________________

Table 7-6: Node List Operations
_______________________________________________
create() Creates a node list
_______________________________________________
dataloc() Selects data from nodes _
_______________________________________________
diff() Finds the difference between node lists _
_______________________________________________
hitloc Returns a node list of data objects. Equivalent to using a mrkquery ele-ment as the content of a dataloc _
_______________________________________________
inter() Finds the intersection of node lists _
_______________________________________________
listloc() Picks nodes by position in a node list _
_______________________________________________
mkpair() Specifies a pair of axis markers, which are interpreted as a dimension specification _
_______________________________________________
nldefs() Nodelist-defining functions _
_______________________________________________
nlops() Nodelist-manipulating functions _
_______________________________________________
pathloc() Picks nodes from tree by paths _
_______________________________________________
proploc() Returns value of a property _
_______________________________________________
relloc() Picks nodes from a tree by their rela-tionship to a specified node _
_______________________________________________
sdiff() Takes the difference between two node lists, then takes the difference between the resulting node list and another node list; the process contin-ues until all the node lists on the argu-ment list have been processed _
_______________________________________________
select() Select nodes from list by assertion _
_______________________________________________
treeloc() Pick nodes from tree by position _
_______________________________________________
union() Union of Node Lists _
_______________________________________________

Table 7-7: Pattern Match
_______________________________________
hylex() Define a HyLex expression
_______________________________________
match() Returns a node list by pattern matching against node content
_______________________________________

Table 7-8: Query
__________________________________________
Query() The query body is an argument of the query (‘‘direct query’’)
__________________________________________
UseQ() The query body is specified by referring to the function name (fn) attribute of another query element (‘‘indirect query’’)
__________________________________________

Chapter 8: Combining HyTime Methods
Introduction

Previous chapters have shown the use of individual HyTime methods for locating and linking to information elements. This chapter shows how some of these methods can be combined to support a moderately complex application.

Requirements

This example calls for supporting an application that provides cascading menus for browsing UNIX manual pages. The intended operation is:

When the user clicks on a ‘‘Browse’’ button or similar selection mechanism, display a list of manual page names with their volume numbers.

When the user selects a particular manual page, display a list of choices that the user can select: Display the entire manual page or any of the major sections of the manual page.

The overall operation to be supported is shown in Figure 8-1.

Figure 8-1: Operations Supported by the Example
Manual Pages List of Choices
____________________________________________________
Browse----------> acct(1M)---------> Entire manual page
Button acct(2) Purpose
acct(4) Individual sections:
Synopsis
Description
Files
See Also
etc.

Considerations

Creating the menus requires first creating a list of all the command names on all the manual pages. There are several considerations:

the manual pages are divided among three documents:
- the User’s Reference Manual
- the Programmer’s Reference Manual
- the System Administrator’s Reference Manual

The same command name may appear in more than one manual.

Commands with the same name are differentiated by the volume number of the manual page they appear on.

A manual page may contain several commands; when several commands are described, the title of the manual page is generally not the same as the name of a specific command on the manual page.

Manual Page Structure

To understand the markup shown in the example, it is necessary to be familiar with the structure of manual pages, as defined by the DocBook DTD. In the DocBook DTD, RefEntry is used as the container element for a single manual page. The major sections (subelements) of a RefEntry are:

RefMeta, which has the subelements:
-- RefEntryTitle, whose content is the title of the manual page
-- ManVolNum, whose content is the volume number of the manual page

RefNameDiv, which has the subelements:
-- RefDescriptor, an optional element containing the name of the manual page when there is more than one command on the page
-- RefName, one or more of which may be present. Each RefName element has a Command subelement that contains the name of a command described on the manual page.
-- RefPurpose, whose content describes the general purpose of the command or commands on the manual page

RefSynopsisDiv, which contains a subelement, Synopsis. The content of the Synopsis element is a summary of the syntax of the command(s) on the manual page.

NOTE "Synopsis" differs from the section names that follow it in that the former is generic identifier, whereas sections are identified by title strings that give the name of the section. Consequently, the string SYNOPSIS has to be generated by the governing application.

RefSect1 is a container element for the major sections that follow the RefSynopsisDiv. Each RefSect1 element contains a Title subelement whose content is the name of the section. The number of sec-tions and their names are variable. A typical list is:
– DESCRIPTION
– FILES
– SEE ALSO
– DIAGNOSTICS
– NOTES

The RefEntry structure defined by the DocBook DTD is shown in Figure 8-2.

Figure 8-2: DocBook RefEntry Structure
RefEntry
 RefMeta
   RefEntryTitle
   ManVolNum
 RefNameDiv
   RefDescriptor
   (RefName Command)+
   RefPurpose
 RefSynopsisDiv
   Synopsis
 RefSect1
   Title
   Para

Setting Up the Example

In this example, a ‘‘resource’’ document is used for generating menus from reference pages in Reference Manuals. The resource document is designed to contain a set of HyQ queries that support the creation of links between each manual page document entity and the major sections of that page. Another HyQ query is then run to create a master list of commands.

Prolog and DTD for RefEntry Linking Example

The prolog and DTD for the RefEntry linking example are shown in Figure 8-3. The resource document for the example is shown in Figure 8-4.

Figure 8-3: Prolog and DTD for RefEntry Linking Example

<!-- HyTime support declarations in Prolog -->
<?HyTime VERSION "ISO/IEC 10744:1992" HYQCNT=32>
<?HyTime MODULE base refctl exidrefs>
<?HyTime MODULE locs multloc query HyQ mixcase>
<?HyTime MODULE links >

<!-- DTD for resource document begins here -->
<!DOCTYPE refresource [

<!NOTATION SGML PUBLIC
"+//ISO/IEC 8879:1986//NOTATION Standard Generalized Markup Language//EN">
<!NOTATION HyTime PUBLIC
"+//ISO/IEC 10744:1992//NOTATION Hypermedia/Time-based Structuring Language//EN">
<!NOTATION HyQ PUBLIC
"+//ISO/IEC 10744:1992//NOTATION HyTime Query Notation//EN">

<!-- Declare an entity for each RefEntry file, using the format of the following declaration -->

<!ENTITY refentrytitle.manvolnum SYSTEM "/mypath/refentrytitle.manvolnum" CDATA SGML>

<!ELEMENT RefResource - - (nameloc|ilink)* >
<!ATTLIST RefResource HyTime NAME HyDoc
id ID#IMPLIED -- Default: none --
boslevel -- Bounding level of HyTime
bounded object set when
document is a hub;
overridable at run time --
-- Constraint: 0=no limit; 1=root; 2 to N --
NUMBER#IMPLIED -- Default:
application BOS -- >

<!ELEMENT nameloc - - (nmlist|HyQ)+ >
<!ATTLIST nameloc HyTime NAME nameloc
set -- Make multiple a set by ignoring
duplicates --
(set|notset) notset
aggloc -- Are multiple locations an
aggregate? --
(aggloc|agglink|nagg) aggloc >

<!ELEMENT nmlist -- List of local or external ID or entity names --
- O (#PCDATA) -- lextype(NAMES) -->
<!ATTLIST nmlist HyTime NAME nmlist
nametype -- Entity names or IDs of elements --
(entity|element|unified) entity
obnames -- Objects treated as names? --
(obnames|nobnames) nobnames
refrange CDATA#FIXED "#ALL X" >

<!ELEMENT HyQ - O (#PCDATA) >
<!ATTLIST HyQ HyTime (nmquery|mrkquery) nmquery
qdomain -- Domain of the query --
-- Multiple is combined into a single tree --
-- Constraint: No HyTime reftype constraints --
IDREFS#IMPLIED -- Default: inherent in query --
notation -- Data content notation --
NAME#FIXED HyQ
refrange CDATA#FIXED "#ALL X" >

<!ELEMENT NameVolLink - O EMPTY -- used to link Command
names and Reference
Descriptors with the volume
numbers of their manual pages. It is
designed to be used as an anchor
of RefLink -->
<!ATTLIST NameVolLink
HyTime NAME#FIXED "ilink"
id ID#IMPLIED
anchrole -- lextype((NAME, s, (RNI, "AGG")?),
(s, NAME, s+, (RNI, "AGG")?)+) --
CDATA#FIXED "name#AGG manvolnum"
-- two linkends required --
linkends IDREFS#REQUIRED -- commonly uses
IDs of nameloc elements --
aggtrav -- lextype(("AGG"|"MEM"|"COR"),
(s, ("AGG"|"MEM"|"COR"))*) --
NAMES cor >

<!ELEMENT RefLink - O EMPTY -- makes a web of a RefEntry
1) the RefEntry, entire
2) the commands covered by the
RefEntry (anchor is a cor link of
commands to ManVolNum)
3) the purpose (short description)
4) the individual sections of the
RefEntry -->

<!ATTLIST RefLink
HyTime NAME#FIXED "ilink"
id ID#IMPLIED
anchrole -- lextype((NAME, s, (RNI, "AGG")?),
(s, NAME, s+, (RNI, "AGG")?)+) --
CDATA#FIXED "refpage commands purpose sections#AGG"
-- four linkends required --
linkends IDREFS#REQUIRED -- commonly uses IDs
of nameloc elements --
extra -- lextype(("E"|"I"|"A"|"N"|"P"),
(s, ("E"|"I"|"A"|"N"|"P"))*) --
NAMES A -- applies to all linkends --
intra -- lextype(("E"|"I"|"A"|"N"|"P"),
(s, ("E"|"I"|"A"|"N"|"P"))*) --
NAMES A -- applies to all linkends --
endterms -- Link end term information --
-- Constraint: one per anchor or one for all --
-- reftype(HyBrid) --
IDREFS#IMPLIED -- Default: none --
aggtrav -- lextype(("AGG"|"MEM"|"COR"),
(s, ("AGG"|"MEM"|"COR"))*) --
NAMES mem >
>

<!ELEMENT label - O (#PCDATA) >
<!ATTLIST label id ID#REQUIRED >
]>

Figure 8-4: Resource Document for RefEntry Linking Example

<RefResource>
<!-- For each RefEntry entity declared in the DTD , create an entity-type nameloc, using the format of the following declaration -->

<nameloc id=refentrytitle.manvolnum>
<nmlist>refentrytitle.manvolnum</nmlist>
</nameloc>

<!-- Find the RefMeta element, locate its children, and return the ManVolNum element for the manual page pointed to by the qdomain specification -->

<nameloc id=volnum><HyQ qdomain=refentrytitle.manvolnum>
Select( Relloc( Select( DOMTREE EQ( Proploc(
CAND GI EMPTY)"RefMeta"))
DOMROOT
children)
EQ( Proploc( CAND GI EMPTY) "ManVolNum"))</HyQ></nameloc>

<!-- Find the RefNameDiv element, locate its children, and return the RefDescriptor element (if present), and the Command element(s) -->

<nameloc id=cmds aggloc=agglink><HyQ qdomain=refentrytitle.manvolnum>
Select( Relloc( Select( DOMTREE EQ( Proploc(
CAND GI EMPTY)"RefNameDiv"))
DOMROOT
children)
or( EQ( Proploc( CAND GI EMPTY) "Command")
EQ( Proploc( CAND GI EMPTY) "RefDescriptor"))
</HyQ></nameloc>

<!-- Find the RefNameDiv element, locate its children, and return the RefPurpose element -->

<nameloc id=purpose><HyQ qdomain=refentrytitle.manvolnum>
Select( Relloc( Select( DOMTREE EQ( Proploc(
CAND GI EMPTY) "RefNameDiv"))
DOMROOT
children)
EQ( Proploc( CAND GI EMPTY) "RefPurpose"))</HyQ></nameloc>

<!-- EMPTY appears after GI in the Proplocs because using DOMTREE means that#PCDATA portions (with which an RE after a start tag could be confused, for example) are considered nodes without GIs; using the default IGNORE for the @notprop parameter of the query, those#PCDATA nodes will be returned. Using EMPTY means that they won’t be. -->

<!-- Find and return the RefSynopsisDiv element for a manual page -->
<nameloc id=synopdiv><HyQ qdomain=refentrytitle.manvolnum>

Select( DOMTREE EQ( Proploc( CAND GI EMPTY) "RefSynopsisDiv"))</nameloc>

<!-- Find and return the RefSect1 elements for a manual page -->

<nameloc id=refsect1s><HyQ qdomain=refentrytitle.manvolnum>
Select( DOMTREE EQ( Proploc( CAND GI EMPTY) "RefSect1"))</nameloc>

<!-- Group the RefSynopsisDiv and RefSect1 elements -->

<nameloc id=sections><nmlist nametype=element>synopdiv refsect1s</nameloc>

<!-- Use an ilink-form element to pair the Command(s) and/ or RefDescriptor element(s) in a RefEntry with the ManVolNum element of the RefEntry -->

<NameVolLink id=cmdnames linkends="cmds volnum">

<!-- Create label elements for endterms -->

<label id=pagelabel>entire manual page</label>
<label id=cmdslabel>commands</label>
<label id=purposelabel>purpose</label>
<label id=sectionslabel>individual sections</label>

<!-- For a given RefEntry, link the pieces of information about the RefEntry that were collected in the previous operations; use endterms to provide information about each anchor -->

<RefLink linkends="refentrytitle.manvolnum cmdnames purpose sections" endterms="pagelabel cmdslabel purposelabel sectionslabel">

<!-- For a master list of commands, collect all Commands by asking for the "commands" anchors of all RefLink elements that have been created. -->

<nameloc id=allcmds><HyQ> Proploc( Select( DOMTREE EQ( Proploc( CAND GI EMPTY)"reflink")) anchors[commands] ) </nameloc>

<!-- The application should sort the Command/ManVolNum pairs into alphabetical order prior to displaying them -->
</RefResource>

Explanation of the Prolog

The Prolog includes a support declaration for the HyTime Location Address Module that includes several options not used in previous examples:

<?HyTime MODULE locs multloc query HyQ mixcase>

- The query option is required so that the nameloc elements can contain the HyQ queries.

- The HyQ option is required to support the use of HyQ queries. (A NOTATION declaration for HyQ also appears in the DTD, and is likewise required for the use of HyQ queries.)

- The mixcase option is required to suppress the automatic folding of lowercase characters that is otherwise carried out when proploc returns element names as nodes inside a HyQ query. The suppression is necessary so that element names won’t be converted to all uppercase letters before being compared to the string they are being matched against.

Explanation of the DTD

The DTD contains entity declarations for all of the manual pages in the format:
<!ENTITY refentrytitle.manvolnum SYSTEM "/mypath/refentrytitle.manvolnum" CDATA SGML>

Following the entity declarations, the DTD declares six element types:

The RefResource element-type; the top level element for the resource document.

The nameloc and nmlist element-types, to support indirect addressing as described in previous chapters. A value of X is assigned to the refrange common attribute of RefResource to allow reso-lution to external locations, i.e., locations outside of the resource document.

The HyQ element-type, to support queries in HyQ notation, as described in Chapter 7.

The NameVolLink element, an ilink-form element used to pair Command names and Reference Descriptors with the volume numbers of their manual pages.

The RefLink, an ilink-form element used to provide non-hierarchical linkages between various com-ponents of a given manual page and the manual page as a whole. The components include the Command and RefDescriptor names (paired with the ManVolNum element of the manual page through the NameVolLink element), and the RefPurpose, Synopsis, and RefSect1 elements of the manual page that are collected through HyQ queries.

The label element, used to provide endterm information about each of RefLink’s anchors.

Explanation of the Resource Document

NOTE
There are two approaches to creating RefResource documents:
-- Create a separate RefResource document for each manual page, and then one that links all the separate RefResource documents.
-- Create a master RefResource document so that all of the manual pages can be processed from a single document.

The first approach is the more flexible, since manual pages may be added or deleted from a set of source files at any time.

The RefResource document begins with a comment instructing the document author to create an entity-type nameloc in the format:
<nameloc id=refentrytitle.manvolnum> <nmlist>refentrytitle.manvolnum</nmlist> </nameloc>

For example:
<nameloc id=acct.1m>
<nmlist>acct.1m</nmlist> </nameloc>

The nmlist elements’s nametype attribute defaults to entity in the DTD, so it does not need to be specified.

Following the instruction to create the entity-type namelocs is a series of nameloc elements containing HyQ queries:

The query in the first nameloc finds ManVolNum elements. A manual page entity is specified as the query domain; it is used as such by the innermost function of the query.

The body of the query operates as follows:
-- The innermost Select function initiates a search from the top of the manual page node tree (which begins with the RefEntry element) for the RefMeta element.
-- When the RefMeta element is found, the relloc function uses the DOMROOT children argument to restrict the search domain to the children of the RefMeta element.
-- The outermost Select function of the query returns the ManVolNum element as the con-tent of a node list.

The general operation of the queries in the second and third namelocs is the same as that of the first:
-- The second query finds and returns the Command element (if only one command is on the page) or the Command elements and the RefDescriptor element (which gives the gen-eral name of the manual page) if more than one element is described on the page.
-- The third query finds and returns the RefPurpose element in the same manner as the first query finds and returns the ManVolNum element; in this case, the RefNameDiv element is located first and its children searched for the RefPurpose element.

The fourth and fifth queries find and return the RefSynopsisDiv element and the RefSect1 elements, respectively.

The next entry in the RefResource files is a nameloc element with an ID of sections. This nameloc element contains a nmlist element whose content is the IDs (synopdiv and refsect1s) of the nameloc elements that contain the previous two queries. The result is to group the RefSynopsisDiv and the RefSect1 elements so that they can be referred to through a common ID. The nmlist element requires a nametype attribute with a value of element, because the default value of the nametype attribute in the DTD is entity.

The next entry uses a specialized ilink-form element, NameVolLink, to pair Command and RefDescriptor elements on a manual page with the ManVolNum element of the manual page. In the DTD, neither the extra and intra attributes that HyTime provides to express different traversal rules were defined. This means that the application defines the traversal rules for the link; in this case, the link is a purely rela-tional link, with no user traversal. In addition, the aggtrav attribute is set to cor, making the link a correspondent link, i.e., each Command or RefDescriptor element is matched up with the ManVolNum of the manual page.

Following the NameVolLink element, label elements are used to create endterms that are used by the RefLink element that follows. The endterms attribute is defined as taking one or more IDREFS as values and is used to point to descriptive information about the linkends that can be used by the application.

The RefLink element that follows the label elements has both linkends and endterms attributes that are assigned lists of IDs. The IDs assigned to the linkends attribute determine the anchors of the link. These IDs are:

refentrytitle.manvolnum: ID of the nameloc element whose nmlist element identifies the manual page entity

cmdnames: ID of the NameVolLink element that links the Command and/or RefDescriptor element(s) to the ManVolNum

purpose: ID of the nameloc element containing the HyQ query that returns the RefPurpose element

sections: ID of the nameloc element whose nmlist element lists the IDs of the nameloc elements con-taining the HyQ queries that returned the RefSynopsisDiv and RefSect1 elements. The#AGG key-word is required because the ‘‘sections’’ anchrole refers to an aggregate.

The IDs assigned to the endterms attribute point to label elements that provide descriptive information about the anchors on a ‘‘one for one’’ basis. These IDs are:

pagelabel: ID of the label element whose content is ‘‘entire manual page’’

cmdslabel: ID of the label element whose content is ‘‘commands’’

purposelabel: ID of the label element whose content is ‘‘purpose’’

sectionslabel: ID of the label element whose content is ‘‘individual sections’’

The last nameloc element contains a HyQ query that creates a master list of Command elements and their corresponding ManVolNum elements. The query works by asking for "commands" anchors of all RefLink elements that have been created:
<nameloc id=allcmds><HyQ>
Proploc( Select( DOMTREE EQ( Proploc(
CAND GI EMPTY)"RefLink"))
anchors[commands]
)
</nameloc>

To understand how this query works, it is necessary to recall that the anchrole attribute is defined for the RefLink element as:
anchrole CDATA#FIXED "refpage commands purpose sections#AGG"

There is one anchor role for each link end specified by the RefLink’s linkends attribute, listed in the same order. In this case, the commands anchor role corresponds to the cmdnames link end, which is the ID of the NameVolLink element that pairs the Command or RefDescriptor element(s) with their ManVolNum. Therefore, the qualified property name

anchors[commands]

argument to the Proploc function, when passed a RefLink element as a source node, will follow the cmdnames link end to the NameVolLink element, and return that element as a node on a node list.

NOTE
For this last HyQ query to work as written, there must be a way to specify one anchor from among all the anchors of a given link. A suitable qualifier exists: the anchrole. For the anchrole to be used as such a qualifier, however, a dspec attribute must be specified on the property definition of ‘‘anchors.’’ This is not the case in the current HyTime standard, which only defines anchors as:
<HyPD psn=HTsem2 HyTime pn=anchors>objects linked by a hylink</HyPD>

The definition required by this example is:
<HyPD psn=HTsem2 HyTime pn=anchors dspec=ANCHROLE>objects linked by a hylink</HyPD>

The need for this change will be proposed when the HyTime standard is up for revision. For now, the current omission of the dspec attribute is treated as an oversight error in the standard.

Tasks Performed by an Application

In practice, a user would see a list of manual page titles and command names, each paired with the volume number of its manual page. The application would be expected to:
- sort the command and manual page names into a single, alphabetized, list
- present this list with each name paired with its manvolnum, formatted appropriately (e.g. acct.1M or acct(1M))

When the user clicks on one of the pairs, traversal would ensue (via the label elements pointed to by the endterms) to the other anchors of the RefLink (of which the clicked-on pair’s NameVolLink was also an anchor). This process is unaffected by reorganizing the commands into an alphabetized master list such that a particular command is no longer adjacent to the other pairs of its NameVolLink (i.e., the names of the other commands that appear on the same manual page).

TechnoTeacher 1996

[http://www.techno.com/HyTime.html]
HyTime:
an international standard for valuable information


HyTime, SGML, etc.
"HyTime" is the nickname of the ISO/IEC International Standard 10744:1992, whose long name is "Hypermedia/Time-based Structuring Language." It provides a worldwide standard technical framework for integrated open hypermedia. Among other things, it forms the basis of the "SMDL" Standard Music Description Language (ISO/IEC Committee Draft 10743).
There is as yet only one authoritative reference work on HyTime: the HyTime standard itself. Copies of the standard can be obtained from your nation's standards organization. In the United States, this is:
American National Standards Institute (ANSI) 13th Floor, 11 West 42nd Street New York, New York 10036-8002 USA (tel: +1 212 642 4900 fax: +1 212 398 0023 Cable: Standards, New York, International Telex: 42 42 96 ANSI UI, D-U-N-S 07-329-4837
Last we heard, the ANSI price of the 10744 standard was $98. (Note: The standard is now undergoing an official "technical corrigendum" process which is expected to end around the beginning of 1996.)
Introductory articles about HyTime can be found in the November 1991 issue of Communications of the ACM, and in the July 1991 issue of IEEE Computer. Written prior to HyTime's final adoption, these articles are slightly inaccurate in some details but are still a good introduction.
One book about HyTime has appeared: Making Hypermedia Work, by Steven DeRose and David Durand, published by Wolters Kluwer. This book is well regarded in some respects, but some technical errors and a tendency to confuse addressing with linking diminish its usefulness as a reference work on the subject of HyTime. We are told that the authors have a new edition in the works that will appear shortly.
Another book is in press at this writing: Practical Hypermedia, by Eliot Kimber, published by Simon & Schuster. We have seen drafts of this book and we like what we have seen. It is likely to be reliable, since it appears in a series edited by Charles Goldfarb, who invented HyTime and chaired the HyTime committee. The main problem with this book has been the many publishing delays. Most recently, its appearance has been postponed so that it can reflect the results of the technical corrigendum process.
Finally, one excellent basic book is available free: A HyTime Application Development Guide. Written by Ralph Ferris of Fujitsu Open Systems Solutions, Inc. and edited by Victoria T. Newcomb of TechnoTeacher, Inc., it can be retrieved as printable PostScript files from TechnoTeacher's FTP site, ftp.techno.com, in the directory pub/HyTime/Application_Development_Guide.
Courses, workshops, and conferences on HyTime (and SGML, see below), as well as on other topics of interest to the information industry, are presented by the Graphic Communications Association (GCA). For more information, please contact the GCA at GCA 100 Daingerfield Road, 4th Floor Alexandria, Virginia 22314-2228 (tel: +1 703 519 8160, fax: +1 703 548 2867, Telex: 510-600-0899, Internet: mern@well.sf.ca.us) Among its many other SGML-related services and activities, the GCA publishes a directory of commercially available SGML tools, software, and services.
"SGML" is the nickname of the ISO/IEC International Standard 8879:1986, whose long name is "Standard Generalized Markup Language." SGML, which forms the basis of a number of standards including HyTime, allows all kinds of information to be interchanged among dissimilar information processing systems. In effect, HyTime extends SGML by providing a set of "SGML architectural forms," whose syntax and semantics are standardized by HyTime, and which allows system-independent expression of hyperlinks, information addresses, placement of information objects in time and space, etc.
The standard, authoritative reference work on SGML is Charles Goldfarb's The SGML Handbook, published by Oxford University Press. We highly recommend this book, which contains the verbatim text of the ISO 8879 standard itself, along with considerable explanatory text.
The "SGML Users' Group" is an international body which performs a number of important functions in promulgating the understanding and use of SGML, including sponsoring conferences and special interest groups, publishing public domain information, etc. To join the SGML Users' Group, contact Stephen G. Downie, Secretary, SGML Users' Group, c/o SoftQuad Inc., 56 Aberfoyle Cres., Suite 810, Toronto, Ontario, Canada M8X 2W4 (tel: +1 416 239 4801, fax: +1 416 239 7105) Other questions, concerns, and issues should be brought to the attention of Ms. Pamela L. Gennusa, President, International SGML Users Group, c/o Database Publishing Systems Ltd., 608 Delta Business Park, Great Western Way, Swindon, Wiltshire SN5 7XF, United Kingdom (tel: +44 793 512 515, fax: +44 793 512 516, Internet: plg@dpsl.co.uk)

"SGML SIGhyper" is the nickname of the SGML Users' Group's "Special Interest Group on Hypertext and Multimedia," which is the HyTime SIG. For more information about SGML SIGhyper, please contact Mr. Erik Naggum, Chairman, SGML SIGhyper, Naggum Software, Irisveien 12, POB 1570 Vika, 0118 Oslo, Norway (tel: +47 2295 0313, fax: +47 2216 2350, Internet: erik@naggum.no) SGML SIGhyper maintains an FTP site as part of its mission to promulgate information about HyTime. The FTP site is ftp.ifi.uio.no in the directory "pub/sgml/SIGhyper." This site is sponsored by the Department of Informatics at the University of Oslo, Norway. At this site can be found, among other things, free SGML parsers for a variety of platforms. These parsers are unsupported, and none of them support all the features of SGML, but they really do work and they are quite useful.

"comp.text.sgml" is a Usenet discussion group which is an absolute must for anyone who is serious about SGML or HyTime. If you cannot receive this news group in the usual way, you can request to have it forwarded to your e-mail address daily by writing to info@www.techno.com.
<TAG>, published monthly, is the only regular source of information for the SGML industry: articles, reviews, product news, tutorials, standards updates, user group information, case studies, and useful technical tips and information. <TAG> is designed to be an objective voice of the SGML community; it accepts no advertising and encourages frank and open debate on the issues faced by the information publisher. Please contact SGML Associates at +1 303 680 0875, fax: +1 303 680 4906, or Internet: tag@sgml.com.

"CApH" is the nickname of the GCA Research Institute's (GCA-RI) "Conventions for the Application of HyTime" activity. This is an open industrial design committee whose purpose is to develop and publish advisory documents showing how HyTime can be used in particular contexts to represent particular things, such as indexes based on knowledge bases, licensing information, tabular data, etc. etc. For more information about CApH, contact the GCA at the address given above.

The "Davenport Group" is a group of Unix system vendors and vendors of related hardware, software, and services, whose purposes include the creation of SGML-based conventions for representing online software documentation. Some public participation is permitted. For more information, please contact Terry Allen, c/o O'Reilly & Associates, Inc., 103A Morris Street, Sebastopol, California 95472 USA (tel: +1 800 998 9938 fax: +1 707 829 0104, Internet: terry@ora.com) or Ralph Ferris, c/o Fujitsu Open Systems Solutions, Inc., 6121 Hollis Street, Emeryville, California 94608-2092 USA (tel: +1 510 652 6200 x421, fax +1 510 652 5532, Internet: ralph@ossi.com)

SGML Open describes itself as "a non-profit, international consortium of providers of products and services, dedicated to accelerating the further adoption, application and implementation of SGML, the international standard for open interchange of documents and structured information objects. SGML Open provides its members with an open forum to discuss market needs and directions, and to recommend guidelines for product interoperability. The consortium receives, coordinates and disseminates information describing SGML methodologies, technologies, and implementations." For more information, contact John R. McFadden, Chairman, SGML Open c/o Exoterica Corporation 1545 Carling Avenue, Suite 400 Ottawa, Ontario, CANADA K1Z 8P9 (tel: +1 613 722 1700; fax +1 613 722 5706; john.mcfadden@exoterica.com)

Some Implementations of HyTime:
"HyMinder," a HyTime engine. TechnoTeacher, Inc. P. O. Box 23795 Rochester, New York 14692-3795 USA hyminder@techno.com

"HyOctane," a HyTime engine Interactive Media Group Center for Productivity Enhancement University of Massachusetts--Lowell One University Avenue, Lowell, Massachusetts 01854 USA buford@uml.edu

"SoftQuad Explorer," a HyTime document editor/browser SoftQuad Inc 56 Aberfoyle Crescent, Suite 810 Toronto, Ontario, CANADA M8X 2W4 tel: +1 416 239 4801 fax: +1 416 239 7105 linda@sq.com, Applelink: SoftQuad

Some HyTime consultants and other HyTime-related service providers:
Charles F. Goldfarb 13075 Paramount Drive Saratoga, CA 95070 USA, tel: +1 408 867 5553 fax: +1 408 867 1805 Goldfarb@SGMLsource.com High Text S.A.R.L.

5, rue d'Alsace 75010 Paris, FRANCE tel: +33 1 4205 9315 fax: +33 1 4205 9248 michel@hightext.com Martin Hensel Corporation 233 Needham Street Newton, Massachusetts 02164 USA +1 617 527 3230 fax +1 617 527 1929 mhensel@hensel.com Passage Systems Inc.

9971 Quail Boulevard, Suite 903 Austin, Texas 78758 USA tel: +1 512 339 1400 fax +1 512 339 3618 kimber@passage.com TechnoTeacher, Inc.

P.O. Box 23795 Rochester, New York 14692-3795 USA (courier: 3800 Monroe Avenue, Pittsford, NY 14534-1330 USA) tel: +1 716 389 0961 fax +1 716 389 0960 hyminder@techno.com

Last Modified: Jan 11 1996 / srn@techno.com

lagMkp.SMSL

name::
* McsEngl.lagMkp.SMSL@cptIt,
* McsEngl.conceptIt1021,
* McsEngl.SMSL@cptIt,
* McsEngl.smsl@cptIt1021,
* McsEngl.standard-multimedia-scripting-language@cptIt,

_GENERIC:
* STANDARD#cptIt139#

_DESCRIPTION:
SMSL . . ."Provides a standardized method for defining the constructs used in the script for an audiovisual presentation... Extends HyTime by providing SGML meta-DTD architectural forms for describing the object classes, virtual functions, messages, aggregates and class/data membership used in a multimedia presentation's script. Also contains a definitions for a starter-set of functions used by scripting languages. . . sponsored by ISO/IEC JTC1/SC18 WG8 . . . Still at committee draft stage (ISO/IEC CD 13240)"
[http://www.sil.org/sgml/gen-apps.html, APR. 1996]
===
SMSL supports all of the criteria for object-oriented languages, such as encapsulation, inheritance (including multiple inheritance), and polymorphism.
[Ferris overview]

ResourceInfHmn#cptResource843#

SGML WEB-PAGE:
http://www.sil.org/sgml/gen-apps.html

RALPH FERRIS OVERVIEW

From: ralph@ossi.com (Ralph Ferris)
Newsgroups: comp.text.sgml
Subject: Standard Multimedia Scripting Language (SMSL)
Date: 07 Jan 1995 00:34:03 MET
Organization: Fujitsu Open Systems Solutions, Inc.
Summary: An overview of the Standard Multimedia Scripting Language
Keywords: SMSL SGML HyTime ANSI ISO

The following is a brief overview of the proposed Standard Multimedia Scripting Language (SMSL). Participation in the ANSI X3V1 Task Group that will refine this proposal is invited! If you are interested, please contact me.
Ralph E. Ferris Project Manager, Electronic Publications Fujitsu Open Systems Solutions, Inc. (FOSSI), Engineering Services Phone: (408) 456-7806 Fax: (408) 456-7050 E-mail: ralph@ossi.com
A Davenport Group sponsor. For information on the Davenport Group see ftp://ftp.ora.com/pub/davenport/README.html or http://www.ora.com/davenport/README.html

Brief Overview of the Proposed Standard Multimedia Scripting Language

Introduction

The Standard Multimedia Scripting Language (SMSL) is an open scripting environment primarily targeted toward SGML/HyTime applications. SMSL does not describe a single standardized scripting language, rather it describes the interfaces required to bring new and existing languages into the SGML/HyTime arena. The initial proposal for SMSL was developed by Brian Markey of Permanent Wave Productions. Brian will present a full draft of the proposal at the meeting of ISO SC18/WG8, Document Description and Processing Languages, in February. Refinement of the draft proposal will be carried out by a Task Group of the ANSI X3V1 committee, the National Body that represents the U.S. in ISO SC18/WG8.

Description

The basic characteristics of the proposed SMSL standard are:

SMSL documents are created by adding SMSL architectural forms to HyTime documents.

SMSL will use architectural forms to define object classes from which element types can be derived. These classes could also be used to derive supporting constructs, for example, C++ header files.

For a given object class, default methods are defined as part of SMSL services; additional methods can be added, or existing methods can be overload. (This approach differs from the HyTime standard, which does not define methods as part of its architectural forms.) Note that the default "methods", which correspond to required SMSL services, only apply to classes which are derived from classes specified in the standard. Examples include "multimedia classes" and "user interface" classes. SMSL supports all of the criteria for object-oriented languages, such as encapsulation, inheritance (including multiple inheritance), and polymorphism.

Methods can be added or overloaded through the addition of scripts to a HyTime document. The content of the scripts could be in any defined notation, such as C++ or other programming language source code. The content of the scripts could even be binary code compiled for a given platform (although this approach is depreciated since its use runs counter to the application portability that SMSL is intended to support).

When the SMSL scripts are compiled and linked, the governing application invokes the proper processor on the script content, as identified by the notation specified for that content.

The output could be compiled files and an SGML ESIS file. In that case the combination of executables and SGML data files is the application.

Alternatively, instead of outputting binary code and an ESIS file, other approaches, such as creating an application that would be interpreted at runtime, could be used.

SMSL is intended to support "self-contained" applications, in which case, most of the processing is embedded in the scripts.

User interaction will take place through a variety of user interface objects, such as dialog boxes, movie players, sound players, text editors, windows, and graphics interpreters.

The SMSL services will rely on the operating system services to support the display of dialog boxes, as well as audio and video playback and any other system dependent services required by the application.

The SMSL services use an object (message passing) architecture. An overview of the SMSL application environment is provided in the following figure:

_____________________________________
| |
| SMSL Documents |
| |
| _____________ ________________ |
| | Scripts | | HyTime | |
| | | | Documents | |
| |____________ | |______________ | |
| ^ ^ |
| | | |
|______|___________________|_________ |
| |
| |
V V
___________ ________________________________
| User | | SMSL Services |
| Interface |<->| |
|__________ | |______________________________ |
^
|
|
V
___________________________
| |
| OS Services |
| - Dialog Box |
| - Audio Playback |
| - Video Playback |
| - Other |
|_________________________ |

Standard Multimedia Scripting Language (SMSL)
Application Environment

Rationale for the Standard Multimedia Scripting Language (SMSL)

The rationale behind developing the Standard Multimedia Scripting Language (SMSL) is to support the same kinds of capabilities in SGML authoring tools that are now available to users of multimedia authoring tools, and to do so within the SGML environment. Currently, SGML authoring tools support the creation of documents in SGML markup, including the addition of hyperlinks to entities containing graphics, audio, and video. However, unlike the user of multimedia authoring tools, the SGML tool user has no control over the placement of graphics and video or the duration of their display and the playing of any accompanying audio. SGML itself does not define the semantics for specifying the required parameters; HyTime, through its scheduling, measurement, and rendition modules, does.

SMSL will provide the means for building applications that exploit these features of HyTime by providing an object oriented interface between any programming language that can support the services required by SMSL and SGML/HyTime documents. Through the use of these applications, authors will be able to specify how an anchor is rendered when a link is selected; for example, authors could specify when and where a graphic is displayed.
Authors will also be able to specify an individual segment or segments of an audio or video file that is to be played. This capability will be extremely valuable in saving both the author's time and disk space, since otherwise separate entities with the appropriate audio or video fragments have to be created, and the author has to keep track of which ones to link to for what purpose.
An important use for these applications will be in developing interactive tutorials and maintenace manuals where different information is presented for different skill levels. For example, the video of an installation procedure would be played in full for the novice, while only selected segments would be played for intermediate users; yet other segments would be played for experts. The video would only have to be recorded and stored once, however, instead of being edited and stored multiple times; the required segments would be accessed through HyTime pointers. Other examples could be given that make use of other HyTime features.
To sum up then, SMSL will provide a key ingrediant in allowing SGML authors to go from writing "text with links to audio/visual add-ons" to creating true multimedia.

This page was last changed on Jan 25 1995, 16:19 by mfx@cs.tu-berlin.de. Comments and corrections welcome.

lagMkp.SPDL (ISO/IEC DIS 10180)

name::
* McsEngl.lagMkp.SPDL (ISO/IEC DIS 10180)@cptIt,
* McsEngl.conceptIt1019,
* McsEngl.SPDL@cptIt1019,
* McsEngl.Standard-Page-Description-Language@cptIt,

_GENERIC:
* STANDARD#cptIt139#

_DESCRIPTION:
Standard Page Description Language (SPDL) is under ISO Project JTC1.18.15.6.2, documented as ISO/IEC DIS 10180. According to WG8 Document#1789 (Annual Report of the Convenor of WG8 to SC18, 9-June-1995), "The SPDL project has delivered its final text to ISO for publication."
[http://www.sil.org/sgml/related.html]

Area covered

Formatted text files incorporating vector and raster graphics in a form suitable for processing on a compatible printer

Characteristics/description

SPDL has its origins in the desire to provide a complete set of standard interchange languages for all stages of the traditional publishing process.

SGML provides the language used in interchange at the authoring and editorial stages. DSSSL provides the language for specifying to the typesetter (formatter) how the document is to be composed and presented.

SPDL provides the language that enables the style and layout decisions of the formatter to be realised on a variety of imaging surfaces (screen, paper, film, etc).
The issue of the establishment of conformance criteria is, of course, one of the reasons for the development of an agreed International Standard. One of the benefits of SPDL, which provides an international reference version of the features provided in Level 2 of PostScript, is that it will set a standard against which conformance can be tested. As a result, interchange using the language will, at some defined level of functionality in the language, be reliable.

ResourceInfHmn#cptResource843#

COVER SGML-WEB-PAGE:
http://www.sil.org/sgml/related.html

Further details available from:
ISO or local national standards organisations

Further details can be obtained online from http://www.ornl.gov/sgml/WG8/wg8home.htm.

Sponsoring body and standard details

ISO/IEC JTC1/SC18 WG8

ISO/IEC 10180:1995 Information technology -- Text Communication -- Standard Page Description Language (SPDL)

Usage (Market segment and penetration)

The new SPDL standard, being effectively an international reference version of PostScript, is likely to benefit greatly from the already significant presence of PostScript across a large range of markets. In providing an ability to carry out conformance testing, this is likely to be welcomed and may lead to use as an interchange language on a scale that has not been seen with PostScript to date.

lagCmr.MODELING

_CREATED: {2012-03-06}

NAME

name::
* McsEngl.lagCmr.MODELING@cptIt,
* McsEngl.conceptIt447,
* McsEngl.computer-language.MODELING@cptIt,
* McsEngl.modeling-language@cptIt447,

DEFINITION

A modeling language is any artificial language that can be used to express information or knowledge or systems in a structure that is defined by a consistent set of rules. The rules are used for interpretation of the meaning of components in the structure.
[http://en.wikipedia.org/wiki/Modeling_language]

GENERIC

_GENERIC:
* method.computer#cptItsoft204#

SPECIFIC

Modelica

_CREATED: {2012-06-07}

name::
* McsEngl.conceptIt447.1,
* McsEngl.modelica@cptIt447.1, {2012-06-07}

Modelica is an object-oriented, declarative, multi-domain modeling language for component-oriented modeling of complex systems, e.g., systems containing mechanical, electrical, electronic, hydraulic, thermal, control, electric power or process-oriented subcomponents. The free Modelica language[1] is developed by the non-profit Modelica Association.[2] The Modelica Association also develops the free Modelica Standard Library[3] that contains about 1280 generic model components and 910 functions in various domains, as of version 3.2.
[http://en.wikipedia.org/wiki/Modelica]

_ATTRIBUTE:
Paradigm(s)  declarative language
Appeared in  1997
Stable release  3.3 (May 9, 2012[1])
Major implementations  AMESim, CATIA Systems, Dymola, JModelica.org, MapleSim, Wolfram SystemModeler, OpenModelica, Scicos, SimulationX, Vertex, Xcos
OS  Cross-platform
License  Modelica License Version 2
Website  www.modelica.org
[http://en.wikipedia.org/wiki/Modelica]

lagCmr.SERIALIZATION

_CREATED: {2013-12-25}

name::
* McsEngl.lagCmr.SERIALIZATION@cptIt,
* McsEngl.conceptIt204.17,
* McsEngl.data-interchange-language@cptIt, [json]
* McsEngl.lc.serialization-format@cptIt,
* McsEngl.serialization-format@cptIt,

_DESCRIPTION:
What Is Serialization?
Serialization is the process of storing an object, and it’s internal state at the point of serialization, in another medium so that it can be transported or retrieved at a later date. When the object is deserialized, the object is recreated with it’s internal state in tact.
[http://www.onegeek.com.au/projects/javascript-serialization]
===
The Xerox Network Systems Courier technology in the early 1980s influenced the first widely adopted standard. Sun Microsystems published the External Data Representation (XDR) in 1987.[4]

In the late 1990s, a push to provide an alternative to the standard serialization protocols started: XML was used to produce a human readable text-based encoding. Such an encoding can be useful for persistent objects that may be read and understood by humans, or communicated to other systems regardless of programming language. It has the disadvantage of losing the more compact, byte-stream-based encoding, but by this point larger storage and transmission capacities made file size less of a concern than in the early days of computing. Binary XML had been proposed as a compromise which was not readable by plain-text editors, but was more compact than regular XML. In the 2000s, XML was often used for asynchronous transfer of structured data between client and server in Ajax web applications.

JSON is a more lightweight plain-text alternative to XML which is also commonly used for client-server communication in web applications. JSON is based on JavaScript syntax, but is supported in other programming languages as well.

Another alternative, YAML, is effectively a superset of JSON and includes features that make it more powerful for serialization, more "human friendly," and potentially more compact. These features include a notion of tagging data types, support for non-hierarchical data structures, the option to structure data with indentation, and multiple forms of scalar data quoting.

Another human-readable serialization format is the property list format used in NeXTSTEP, GNUstep, and Mac OS X Cocoa.

For large volume scientific datasets, such as satellite data and output of numerical climate, weather, or ocean models, specific binary serialization standards have been developed, e.g. HDF, netCDF and the older GRIB.
[http://en.wikipedia.org/wiki/Data_serialization#Serialization_formats]

_SPECIFIC:
* binary-serialization-format
* binaryNo-serialization-format
* JSON#ql:json@cptIt554.6#
* XML#ql:xml@cptIt439#
* YAML#ql:yaml@cptIt501.15#

lagCmr.serialization.JavaScript

name::
* McsEngl.lagCmr.serialization.JavaScript@cptIt,
* McsEngl.js'algo.serialization@cptIt,
* McsEngl.js'serialization@cptIt,
* McsEngl.serialization.js@cptIt,

_ADDRESS.WPG:
* http://www.onegeek.com.au/projects/javascript-serialization: Any js object not only data as json.

lagCmr.serialization.JSON

_CREATED: {2011-08-31}

name::
* McsEngl.lagCmr.serialization.JSON@cptIt,
* McsEngl.conceptIt204.19,
* McsEngl.JavaScript-Object-Notation@cptIt554.6,
* McsEngl.JSON@cptIt,
* McsEngl.JSON-data-format@cptIt554.6, {2011-08-29}
* McsEngl.JSON-data-interchange-format@cptIt554.6, {2013-07-17}
* McsEngl.JSON-format@cptIt554.6, {2011-08-29}

_GENERIC:
* data##
* standard##
* human_readable__data_representation_method#cptItsoft501.12#

_DESCRIPTION:
JSON is a TEXT-FORMAT, which looks like the JavaScript literal-objects, and represents:
- 'json-strings': "a string"
- ''json-arrays': [1, 2]
- ''json-objects': {"name": value}
- ''json-numbers: 2, 3.4,
The outermost-whole construct is a json-object.
[hmnSngo.2014-08-01]
===
The JSON Data Interchange Format is defined in ECMA-404.
[http://people.mozilla.org/~jorendorff/es6-draft.html#sec-json-object]
===
JSON (JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to read and write. It is easy for machines to parse and generate. It is based on a subset of the JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999. JSON is a text format that is completely language independent but uses conventions that are familiar to programmers of the C-family of languages, including C, C++, C#, Java, JavaScript, Perl, Python, and many others. These properties make JSON an ideal data-interchange language.
[http://json.org/]
===
JSON (pronounced /'d?e?s?n/), or JavaScript Object Notation, is a lightweight text-based open standard designed for human-readable data interchange. It is derived from the JavaScript scripting language for representing simple data structures and associative arrays, called objects. Despite its relationship to JavaScript, it is language-independent, with parsers available for most languages.
The JSON format was originally specified by Douglas Crockford, and is described in RFC 4627. The official Internet media type for JSON is application/json. The JSON filename extension is .json.
The JSON format is often used for serializing and transmitting structured data over a network connection. It is primarily used to transmit data between a server and web application, serving as an alternative to XML.
[http://en.wikipedia.org/wiki/JSON] 2011-08-29
===
JSON is a subset of the object literal notation of JavaScript. Since JSON is a subset of JavaScript, it can be used in the language with no muss or fuss.
[http://www.json.org/js.html]
===
The JSON Data Interchange Format is described in RFC 4627 <http://www.ietf.org/rfc/rfc4627.txt>
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec15.12P1]
==
JSON, or JavaScript Object Notation, has become a popular alternative to XML for defining structured data using JavaScript. A sample JSON definition that stores some information about Bob may look like the following:

{
"name": "Bob Miller",
"age": 27,
"occupation": "Programmer",
"contact":{
"address": "253 Johnson Road",
"Home_Phone": "544-6443",
"Cell_Phone": "563-3566"
}
}

In strict JSON:
* All string values must be in double quotes (single quotes won't do).
* The name portion of each name/value pair must also be in double quotes.
* The value of a property cannot be a function or method.
[http://www.javascriptkit.com/jsref/json.shtml]

_JS_BUILT_IN:
JSON became a built-in feature of JavaScript when the ECMAScript Programming
Language Standard - Fifth Edition was adopted by the ECMA General Assembly
in December 2009.
[https://github.com/douglascrockford/JSON-js]

json'Archetype

name::
* McsEngl.json'Archetype@cptIt,
* McsEngl.json'data@cptIt,

json'archetype.COLLECTION.ORDERD.ARCHETYPE

name::
* McsEngl.json'archetype.COLLECTION.ORDERD.ARCHETYPE@cptIt,

_CODE.JSON:
* array#ql:json'code.array#

json'archetype.COLLECTION.ORDERD.NO.NAME-ARCHETYPE

name::
* McsEngl.json'archetype.COLLECTION.ORDERD.NO.NAME-ARCHETYPE@cptIt,

_CODE.JSON:
* object#ql:json'code.object#

json'archetype.Non-suported-datatype

name::
* McsEngl.json'archetype.Non-suported-datatype@cptIt,

_DESCRIPTION:
What is not yet supported:
* Arrays of arrays.
* Arrays that contain elements of different types. Ex: [ 100, { "foo": "bar" }, true, null ]
[http://labs.adobe.com/technologies/spry/samples/data_region/JSONDataSetSample.html]
===
JavaScript syntax defines several native data types not included in the JSON standard:[7] Date, Error, Math, Regular Expression, and Function. These JavaScript data types must be represented as some other data format, with the programs on both ends agreeing on how to convert between types. As of 2011, there are some defacto standards for e.g. converting between Date and String, but none universally recognized.[8][9] Other languages may have a different set of native types that must be serialized carefully to deal with this type of conversion.
[http://en.wikipedia.org/wiki/JSON]

json'Model (doc)

name::
* McsEngl.json'Model (doc)@cptIt,

json-doc'Unit

name::
* McsEngl.json-doc'Unit@cptIt,

_DESCRIPTION:
Any symbol used to build the-document.
===
{ } [ ] " , whitespace, char-symbol, number-symbol,
===
char:
any-Unicode-character-except-"-or-\-or-control-character
\"
\\
\/
\b
\f
\n
\r
\t
\u four-hex-digits
===
number:
int
int frac
int exp
int frac exp
int
digit
digit1-9 digits
- digit
- digit1-9 digits
frac
. digits
exp
e digits
digits
digit
digit digits
e
e
e+
e-
E
E+
E-

json'type

name::
* McsEngl.json'type@cptIt,
* McsEngl.json'type@cptIt,

_DESCRIPTION:
Type is the GENERIC entities the json-method uses.
[hmnSngo.2014-08-15]

_SPECIFIC:
1. array
2. boolean
3. null
4. number
5. object
6. string

_SPECIFIC:
* COLLECTION (array, object)
* COLLECTION.NO (boolean, null, number, string)

json'archetype.TYPE

name::
* McsEngl.json'archetype.TYPE@cptIt,
* McsEngl.data-structure-json@cptIt,

_DESCRIPTION:
JSON is built on two structures:

* A collection of name/value pairs. In various languages, this is realized as an object, record, struct, dictionary, hash table, keyed list, or associative array.
* An ordered list of values. In most languages, this is realized as an array, vector, list, or sequence.

These are universal data structures. Virtually all modern programming languages support them in one form or another. It makes sense that a data format that is interchangable with programming languages also be based on these structures.
[http://www.json.org//]

_SPECIFIC:
The types represented in JSON are strings, numbers, booleans, object, arrays, and null.
[http://www.json.org/fatfree.html]

json'value

name::
* McsEngl.json'value@cptIt,

_DESCRIPTION:
* instances of data-types,
* json'archetype.individual,
* json'archetype.instance,
* json'archetype.TYPE.NO
* json'archetype.value,
* json'value,

_DESCRIPTION:
Value is any INSTANCE of json-type.
[hmnSngo.2014-08-15]

_SPECIFIC:
* null, empty
* false, boolean
* true, boolean
* 25, number
* 0.3, number
* "foo", string
* [2, 3, 0], array
* {"name1": value1, "name2":value2}, object

json'unit

name::
* McsEngl.json'unit@cptIt,
* McsEngl.json'collection@cptIt,

_SPECIFIC:
1. boolean
2. null
3. number
4. string

json'unit.BOOLEAN

name::
* McsEngl.json'unit.BOOLEAN@cptIt,

json'archetype.BOOLEAN

name::
* McsEngl.json'archetype.BOOLEAN@cptIt,
* McsEngl.json'boolean@cptIt,

_DESCRIPTION:
You'll be glad to know that JSON has exactly two boolean values, and that they are true and false. If it had exactly zero boolean values, it wouldn't be a data format.
[http://www.json.org/fatfree.html]

_CODE:
* true
* false
===
> JSON.parse('{"ar":true}')
Object {ar: true}
> JSON.parse('{"ar":TRUE}')
SyntaxError: Unexpected token T

json'unit.NULL

name::
* McsEngl.json'unit.NULL@cptIt,

json'archetype.NONE

name::
* McsEngl.json'archetype.NONE@cptIt,
* McsEngl.json'archetype.null@cptIt,
* McsEngl.json'null@cptIt,

json'unit.NUMBER

name::
* McsEngl.json'unit.NUMBER@cptIt,
* McsEngl.json'number@cptIt,

_DESCRIPTION:
A number can be represented as integer, real, or floating point. JSON does not support octal or hex because it is minimal. It does not have values for NaN or Infinity because it does not want to be tied to any particular internal representation. Numbers are not quoted. It would be insane to require quotes around numbers.
[http://www.json.org/fatfree.html]

_PITFALL:
One potential pitfall of the free-form nature of JSON comes from the ability to write numbers as either numeric literals or quoted strings. For example, ZIP Codes in the northeastern U.S. begin with zeroes (for example, 07728 for Freehold, New Jersey). If written with quotes by one programmer but not by another, the leading zero could be dropped when exchanged between systems, when searched for within the same system, or when printed. In addition, postal codes in the U.S. are numbers but other countries use letters as well. This is a type of problem that the use of a JSON Schema (see below) is intended to reduce.
[http://en.wikipedia.org/wiki/JSON]

jsonn'archetype

name::
* McsEngl.jsonn'archetype@cptIt,
* McsEngl.json'archetype.NUMBER@cptIt,

_DESCRIPTION:
A number can be represented as integer, real#ql:number.real#, or floating point. JSON does not support octal or hex because it is minimal. It does not have values for NaN or Infinity because it does not want to be tied to any particular internal representation. Numbers are not quoted. It would be insane to require quotes around numbers.
[http://www.json.org/fatfree.html]

jsonn'code

name::
* McsEngl.jsonn'code@cptIt,

_CODE.JSON:
* 0.55,
* 55,

json'unit.STRING

name::
* McsEngl.json'unit.STRING@cptIt,
* McsEngl.json'string@cptIt,

_GRAMMAR:
* json-string#ql:json'gmr'string#

_DESCRIPTION:
A string is a sequence of zero or more characters wrapped in quotes with backslash escapement, the same notation used in most programming languages.
[http://www.json.org/fatfree.html]
===
Despite the widespread belief that JSON is a JavaScript subset, this is not the case. Specifically, JSON allows the Unicode line terminators U+2028 line separator and U+2029 paragraph separator to appear unescaped in quoted strings, while JavaScript does not.[8] This is a consequence of JSON disallowing only "control characters". This subtlety is important when generating JSONP.
[http://en.wikipedia.org/wiki/JSON] 2013-10-19.

_Value:
* "name",
* "Jack (\"Bee\") Nimble",

json'archetype.STRING

name::
* McsEngl.json'archetype.STRING@cptIt,

json'unitNo

name::
* McsEngl.json'unitNo@cptIt,
* McsEngl.json'collectionNo@cptIt,

_SPECIFIC:
* array
* object,

json'unitNO.ARRAY

name::
* McsEngl.json'unitNO.ARRAY@cptIt,
* McsEngl.json'array@cptIt,
* McsEngl.jsona@cptIt,

_DESCRIPTION:
The JSON array is an ordered collection of values separated by commas. The whole thing is wrapped in square brackets. It maps directly onto arrays, vectors, and lists.

These are examples of JSON arrays:
["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
[
[0, -1, 0],
[1, 0, 0],
[0, 0, 1]
]
[http://www.json.org/fatfree.html]

json'code.ARRAY

name::
* McsEngl.json'code.ARRAY@cptIt,

json'unitNo.OBJECT

name::
* McsEngl.json'unitNo.OBJECT@cptIt,
* McsEngl.json'key-value-data@cptIt,
* McsEngl.json'object@cptIt,
* McsEngl.jsono@cptIt,

_DESCRIPTION:
A JSON object is an unordered collection of key/value pairs. The keys are strings and the values are any of the JSON types. A colon separates the keys from the values, and comma separates the pairs. The whole thing is wrapped in curly braces. It maps directly onto objects, structs, records, and hashtables.
This is an example of a JSON object.
{
"name": "Jack (\"Bee\") Nimble",
"format": {
"type": "rect",
"width": 1920,
"height": 1080,
"interlace": false,
"frame rate": 24
}
}
[http://www.json.org/fatfree.html]

jsono'code

name::
* McsEngl.jsono'code@cptIt,

_CODE.JSON:
{
"k1": 1,
"k2": 2,
}

jsono'key-value-pair

name::
* McsEngl.jsono'key-value-pair@cptIt,
* McsEngl.jsono'pair@cptIt,

_Value:
{ "id": "5001", "type": "None" },
===
{
 color: "red",
 value: "#f00"
},

jsono'key#ql:json'gmr'string#

name::
* McsEngl.jsono'key@cptIt,

jsono'value#ql:json'gmr'value#

name::
* McsEngl.jsono'value@cptIt,

json'converting-to-html

name::
* McsEngl.json'converting-to-html@cptIt,

_ADDRESS.WPG:
* http://json.fastfrag.org/
* http://www.json2html.com//

json'grammar

name::
* McsEngl.json'grammar@cptIt,

json'gmr'object:
{}
{ members#ql:json'gmr'members# }

json'gmr'members:
pair
pair , members

json'gmr'pair:
string#ql:json'gmr'string# : value#ql:json'gmr'value#

json'gmr'value:
string#ql:json'gmr'string#
number#ql:json'gmr'number#
object#ql:json'gmr'object#
array#ql:json'gmr'array#
true
false
null

json'gmr'string:
""
" chars#ql:json'gmr'chars# "

json'gmr'chars:
char#ql:json'gmr'char#
char chars

json'gmr'char:
any-Unicode-character-
except-"-or-\-or-
control-character
\"
\\
\/
\b
\f
\n
\r
\t
\u four-hex-digits

json'gmr'number
int
int frac
int exp
int frac exp

json'gmr'int
digit
digit1-9 digits
- digit
- digit1-9 digits

json'gmr'frac
. digits

json'gmr'exp
e digits

json'gmr'digits
digit
digit digits

json'gmr'e
e
e+
e-
E
E+
E-

json'gmr'array
[]
[ elements ]

json'gmr'elements
value#ql:json'gmr'value#
value , elements

[http://www.json.org/]

json'JSON-js-object > Object.prototype

name::
* McsEngl.json'JSON-js-object > Object.prototype@cptIt,
* McsEngl.conceptIt554.4,
* McsEngl.jsJSON@cptIt,
* McsEngl.js'JSON@cptIt,
* McsEngl.js'JSON-object@cptIt,
* McsEngl.js'oJSON@cptIt,
* McsEngl.jsjson@cptIt,
* McsEngl.jsoJSON@cptIt, {2014-08-01}
* McsEngl.jso.JSON@cptIt,

_GENERIC:
* js-prebuilt-object#ql:js'object.prebuilt#,
===
> typeof JSON
"object"
> Object.getPrototypeOf(JSON)
Object {}

_ADDRESS.WPG:
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_native_JSON,

_DESCRIPTION:
Why not just:
JSON.parse(jsonString);
1   because it's not "safe". it's not supported in all browsers – vsync Oct 3 '11 at 13:01
1   I'm pretty sure it's safe for Node.js – Stephen Oct 18 '11 at 17:07
[http://stackoverflow.com/questions/45015/safely-turning-a-json-string-into-an-object]
===
Don't bother with that crap. If you're using jQuery just use:

jQuery.parseJSON( jsonString );

It's exactly what you're looking for

http://api.jquery.com/jQuery.parseJSON/
[http://stackoverflow.com/questions/45015/safely-turning-a-json-string-into-an-object]
===

_PROTOTYPE:
> Object.isPrototypeOf(JSON)
false
> Object.prototype.isPrototypeOf(JSON)
true

jsoJSON'member

name::
* McsEngl.jsoJSON'member@cptIt,

jsoJSON.MEMBER.FIREFOX:
Object.getOwnPropertyNames(JSON).sort()
["parse", "stringify", "toSource"]
Object.getOwnPropertyNames(JSON.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toSource", "toString", "unwatch", "valueOf", "watch"]

jsoJSON.MEMBER.CHROME:
Object.getOwnPropertyNames(JSON).sort()
["parse", "stringify"]
Object.getOwnPropertyNames(JSON.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

jsoJSON.parse(string)

name::
* McsEngl.jsoJSON.parse(string)@cptIt,
* McsEngl.jsjson'parse-method@cptIt,

_DESCRIPTION:

_CODE.LJS:
> var json = '{"result":true,"count":1}',
obj = JSON.parse(json);
undefined
> obj.count
1
> obj.result
true
===
> JSON.parse("[1,2,3]")
[1, 2, 3]
> JSON.parse('{"ar":[1,2,3]}')
Object {ar: Array[3]}
> JSON.parse('null')
null
===
>JSON.parse('true')
true
>JSON.stringify(JSON.parse('true'))
"true"

jsoJSON.stringify(jsobject)

name::
* McsEngl.jsoJSON.stringify(jsobject)@cptIt,

_ADDRESS.WPG:
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify,

_DESCRIPTION:
INPUT: a javascript OBJECT.
OUTPUT: a json-string.
[hmnSngo.2014-08-01]
===
Summary
The JSON.stringify() method converts a value to JSON, optionally replacing values if a replacer function is specified, or optionally including only the specified properties if a replacer array is specified.

Syntax
JSON.stringify(value[, replacer [, space]])

Parameters
value
The value to convert to a JSON string.
replacer
If a function, transforms values and properties encountered while stringifying;
if an array, specifies the set of properties included in objects in the final string.
A detailed description of the replacer function is provided in the javaScript guide article Using native JSON.
space
Causes the resulting string to be pretty-printed.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify]

_CODE.LJS:
> JSON.stringify({p1:true,p2:3})
"{"p1":true,"p2":3}"
===
> var json = '{"result":true,"count":1}', obj = JSON.parse(json);
undefined
> JSON.stringify(obj)
"{"result":true,"count":1}"

_CODE.LJS:
function censor(key, value) {
if (typeof value === "string") {
return undefined;
}
return value;
}
var foo = {foundation: "Mozilla", model: "box", week: 45, transport: "car", month: 7};
var jsonString = JSON.stringify(foo, censor);
//The resulting JSON string is {"week":45,"month":7}.

json'MIME-type

name::
* McsEngl.json'MIME-type@cptIt,

_DESCRIPTION:
The MIME type for JSON text is "application/json".
[http://en.wikipedia.org/wiki/JSON]

json'program.EDITOR

name::
* McsEngl.json'program.EDITOR@cptIt,
* McsEngl.json'editor@cptIt,

_ADDRESS.WPG:
* http://www.jsoneditoronline.org//

json'program.PARSER

name::
* McsEngl.json'program.PARSER@cptIt,
* McsEngl.json'parser@cptIt,

_DESCRIPTION:
A JSON parser will recognize only JSON text, rejecting all scripts. In browsers that provide native JSON support, JSON parsers are also much faster than eval. It is expected that native JSON support will be included in the next ECMAScript standard.
> var myObject = JSON.parse(myJSONtext, reviver);
[http://www.json.org/js.html]

js'JSON.parse()

name::
* McsEngl.js'JSON.parse()@cptIt,

_DESCRIPTION:
Deserializes JavaScript Object Notation (JSON) text to produce a JScript value.
[http://msdn.microsoft.com/en-us/library/cc836466%28VS.85%29.aspx]

Arguments
* text: Required. Valid JSON text.
* reviver: Optional. A function that filters and transforms the results. The deserialized object is traversed recursively, and the reviver function is called for each member of the object in post-order (every object is revived after all its members have been revived). For each member, the following occurs:
* If reviver returns a valid value, the member value is replaced with the value returned by reviver.
* If reviver returns what it received, the structure is not modified.
*If reviver returns null or undefined, the object member is deleted.
The reviver argument is often used to transform JSON representation of International Organization for Standardization (ISO) date strings into Coordinated Universal Time (UTC) format Date objects.

_CODE.LJS:
var jsontext = '{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}';
var contact = JSON.parse(jsontext);
var fullname = contact.surname + ", " + contact.firstname;
// The value of fullname is "Aaberg, Jesper"

json'program.STRINGIFIER

name::
* McsEngl.json'program.STRINGIFIER@cptIt,
* McsEngl.json'stringifier@cptIt,

_DESCRIPTION:
A JSON stringifier goes in the opposite direction, converting JavaScript data structures into JSON text. JSON does not support cyclic data structures, so be careful to not give cyclical structures to the JSON stringifier.
> var myJSONText = JSON.stringify(myObject, replacer);
If the stringify method sees an object that contains a toJSON method, it calls that method, and stringifies the value returned. This allows an object to determine its own JSON representation.

The stringifier method can take an optional array of strings. These strings are used to select the properties that will be included in the JSON text.

The stringifier method can take an optional replacer function. It will be called after the toJSON method (if there is one) on each of the values in the structure. It will be passed each key and value as parameters, and this will be bound to object holding the key. The value returned will be stringified.

Values that do not have a representation in JSON (such as functions and undefined) are excluded.

Nonfinite numbers are replaced with null. To substitute other values, you could use a replacer function like this:

function replacer(key, value) {
if (typeof value === 'number' && !isFinite(value)) {
return String(value);
}
return value;
}
Giving a corresponding reviver to JSON.parse can undo that.
[http://www.json.org/js.html]

js'JSON.stringify()

name::
* McsEngl.js'JSON.stringify()@cptIt,

_DESCRIPTION:
A JSON stringifier goes in the opposite direction, converting JavaScript data structures into JSON text. JSON does not support cyclic data structures, so be careful to not give cyclical structures to the JSON stringifier.

var myJSONText = JSON.stringify(myObject, replacer);
If the stringify method sees an object that contains a toJSON method, it calls that method, and stringifies the value returned. This allows an object to determine its own JSON representation.

The stringifier method can take an optional array of strings. These strings are used to select the properties that will be included in the JSON text.

The stringifier method can take an optional replacer function. It will be called after the toJSON method (if there is one) on each of the values in the structure. It will be passed each key and value as parameters, and this will be bound to object holding the key. The value returned will be stringified.

Values that do not have a representation in JSON (such as functions and undefined) are excluded.
[http://www.json.org/js.html]

json'program.VALIDATOR

name::
* McsEngl.json'program.VALIDATOR@cptIt,

_ADDRESS.WPG:
* http://jsonlint.com//

json'relation-to-JavaScript#ql:JavaScript'relation-to-json#

name::
* McsEngl.json'relation-to-JavaScript@cptIt,

json'relation-to-YAML#ql:json'relation-to-yaml#

name::
* McsEngl.json'relation-to-YAML@cptIt,

json'relation-to-XML

name::
* McsEngl.json'relation-to-XML@cptIt,

_DESCRIPTION:
The XML specification does not MATCH the data model for most programming languages which makes it slow and tedious for programmers to parse. Compared to JSON, XML has a low data-to-markup ratio which results in it being more difficult for humans to read and write.
[http://www.json.com/]

json'RPC

name::
* McsEngl.json'RPC@cptIt,
* McsEngl.jsonrpc@cptIt,
* McsEngl.json-remote-procedure-call@cptIt,

_DESCRIPTION:
JSON-RPC[edit]
JSON-RPC is an RPC protocol built on JSON, as a replacement for XML-RPC or SOAP. It is a simple protocol that defines only a handful of data types and commands. JSON-RPC allows for notifications (information sent to the server that do not require a response) and for multiple calls to be sent to the server that may be answered out of order. Example of a JSON-RPC 2.0 request and response using positional parameters.

--> {"jsonrpc": "2.0", "method": "subtract", "params": [42, 23], "id": 1}
<-- {"jsonrpc": "2.0", "result": 19, "id": 1}
[http://en.wikipedia.org/wiki/JSON]

json'shema

name::
* McsEngl.json'shema@cptIt,
* McsEngl.json-schema@cptIt,

_ADDRESS.WPG:
* http://json-schema.org//
* doc: http://spacetelescope.github.io/understanding-json-schema//

_DESCRIPTION:
There are several ways to verify the structure and data types inside a JSON object, much like an XML schema.

JSON Schema[10] is a specification for a JSON-based format for defining the structure of JSON data. JSON Schema provides a contract for what JSON data is required for a given application and how it can be modified, much like the XML Schema provides for XML. JSON Schema is intended to provide validation, documentation, and interaction control of JSON data. JSON Schema is based on the concepts from XML Schema, RelaxNG, and Kwalify, but is intended to be JSON-based, so that JSON data in the form of a schema can be used to validate JSON data, the same serialization/deserialization tools can be used for the schema and data, and it can be self descriptive.

JSON Schema is still an IETF draft,[11] but there are several validators currently available for different programming languages,[12] each with varying levels of conformance. Currently the most complete and compliant JSON Schema validator available is JSV.[13]

Example JSON Schema:

{
"name":"Product",
"properties":
{
"id":
{
"type":"number",
"description":"Product identifier",
"required":true
},
"name":
{
"description":"Name of the product",
"type":"string",
"required":true
},
"price":
{
"type":"number",
"minimum":0,
"required":true
},
"tags":
{
"type":"array",
"items":
{
"type":"string"
}
}
}
}
The JSON Schema above can be used to test the validity of the JSON code below:

{
"id": 1,
"name": "Foo",
"price": 123,
"tags": ["Bar","Eek"]
}
[http://en.wikipedia.org/wiki/JSON] 2011-08-31

jsonschema.EXAMPLE

name::
* McsEngl.jsonschema.EXAMPLE@cptIt,

Here is a basic example of a JSON Schema:

{
 "title": "Example Schema",
 "type": "object",
 "properties": {
   "firstName": {
     "type": "string"
   },
   "lastName": {
     "type": "string"
   },
   "age": {
     "description": "Age in years",
     "type": "integer",
     "minimum": 0
   }
 },
 "required": ["firstName", "lastName"]
}
[http://json-schema.org/examples.html]

json'resource

name::
* McsEngl.json'resource@cptIt,

_ADDRESS.WPG:
* Official: http://www.json.org//
* http://www.jsondata.com//

SPECIFIC

name::
* McsEngl.json'Example@cptIt,
* McsEngl.json.specific@cptIt,

_EXAMPLE:
{
"firstName": "John",
"lastName": "Smith",
"age": 25,
"address":
{
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": "10021"
},
"phoneNumber":
[
{
"type": "home",
"number": "212 555-1234"
},
{
"type": "fax",
"number": "646 555-4567"
}
]
}

json.Evoluting

name::
* McsEngl.json.Evoluting@cptIt,

{time.2002}:
A number of people independently discovered that JavaScript's object literals were an ideal format for transmitting object-oriented data across the network.
I made my own discovery in April of 2001 when I was CTO of State Software.
In 2002 I acquired the json.org domain and put up a page describing the format.
With no other effort on my part, JSON has been widely adopted by people who found that it made it a lot easier to produce distributed applications and services.
The original page has been translated into Chinese, French, German, Italian, Japanese, Korean, and Spanish.
JSON has been formalized in RFC 4627.
The MIME Media Type is application/json.
[http://www.json.org/fatfree.html]

lagCmr.SPECIFICATION (scl)

_CREATED: {2007-12-04}

NAME

name::
* McsEngl.lagCmr.SPECIFICATION (scl)@cptIt,
* McsEngl.conceptIt362,
* McsEngl.scl@cptIt362,
* McsEngl.specification-computer-language@cptIt362,
* McsEngl.specification-language@cptIt362,

DEFINITION

A specification language is a formal language used in computer science. Unlike most programming languages, which are directly executable formal languages used to implement a system, specification languages are used during system analysis, requirements analysis and design.

An example of a specification language is the Unified Modelling Language.

Specification languages are generally not directly executed. They describe the system at a much higher level than a programming language. Indeed, it is considered as an error if a requirement specification is cluttered with unnecessary implementation detail, because the specification is meant to describe the what, not the how.

A common fundamental assumption of many specification approaches is that programs are modelled as algebraic or model-theoretic structures that include a collection of sets of data values together with functions over those sets. This level of abstraction is commensurate with the view that the correctness of the input/output behaviour of a program takes precedence over all its other properties. In the property-oriented approach to specification (taken e.g. by CASL), specifications of programs consist mainly of logical axioms, usually in a logical system in which equality has a prominent role, describing the properties that the functions are required to satisfy - often just by their interrelationship. This is in contrast to so-called model-oriented specifications in frameworks like VDM and Z, which consist of a simple realization of the required behaviour.

Specifications must be subject to a process of refinement (the filling-in of implementation detail) before they can actually be implemented. The result of such a refinement process is an executable algorithm, which is either formulated in a programming language, or in an executable subset of the specification language at hand. For example, Hartmann pipelines, when properly applied, may be considered a dataflow specification which is directly executable. Another example is the Actor model which has no specific application content and must be specialized to be executable.

An important use of specification languages is enabling the creation of proofs of program correctness (see theorem prover).
[http://en.wikipedia.org/wiki/Specification_language] 2007-12-04

GENERIC

_GENERIC:
* method-software#cptItsoft204.2#
* SPECIFICATION_LANGUAGE#ql:specification'language-*###

SPECIFIC

Specific_concepts (level 3) =

ABSTRACT-MACHINE-NOTATION

Abstract Machine Notation (AMN) is a specification language and (abstract) programming language for specifying abstract machines in the B-Method, based on the mathematical theory of Generalised Substitutions.
[http://en.wikipedia.org/wiki/Abstract_Machine_Notation]

FORMAL-SPECIFICATION

name::
* McsEngl.formal'specification@cptIt362i,

A formal specification is a mathematical description of software or hardware that may be used to develop an implementation. It describes what the system should do, not (necessarily) how the system should do it. Given such a specification, it is possible to use formal verification techniques to demonstrate that a candidate system design is correct with respect to the specification. This has the advantage that incorrect candidate system designs can be revised before a major investment has been made in actually implementing the design. An alternative approach is to use provably correct refinement steps to transform a specification into a design, and ultimately into an actual implementation, that is correct by construction.

It is important to note that a design (or implementation) cannot ever be declared “correct” in isolation, but only “correct with respect to a given specification”. Whether the formal specification correctly describes the problem to be solved is a separate issue. It is also a difficult issue to address, since it ultimately concerns the problem constructing abstracted formal representations of an informal concrete problem domain, and such an abstraction step is not amenable to formal proof. However, it is possible to validate a specification by proving “challenge” theorems concerning properties that the specification is expected to exhibit. If correct, these theorems reinforce the specifiers understanding of the specification and its relationship with the underlying problem domain. If not, the specification probably needs to be changed to better reflect the domain understanding of those involved with producing (and implementing) the specification.

The Z notation is an example of a leading formal specification language. Others include the Specification Language(VDM-SL) of the Vienna Development Method and the Abstract Machine Notation (AMN) of the B-Method.
[http://en.wikipedia.org/wiki/Formal_specification]

INTERFACE-DESCRIPTION-LANGUAGE

name::
* McsEngl.idl@cptIt362,

_DESCRIPTION:
Interface Description Languages (IDL) are used to describe interfaces in a language- and machine-independent way. IDLs make it possible to define interfaces which can then be processed by tools to autogenerate language-dependent interface specifications
[https://developer.mozilla.org/en-US/docs/Mozilla/XPIDL]
===
An interface description language (or alternately, interface definition language), or IDL for short, is a specification language used to describe a software component's interface. IDLs describe an interface in a language-neutral way, enabling communication between software components that do not share a language – for example, between components written in C++ and components written in Java.

IDLs are commonly used in remote procedure call software. In these cases the machines at either end of the "link" may be using different operating systems and computer languages. IDLs offer a bridge between the two different systems.

Software systems based on IDLs include Sun's ONC RPC, The Open Group's Distributed Computing Environment, IBM's System Object Model, the Object Management Group's CORBA, Facebook's Thrift and WSDL for Web services.
[http://en.wikipedia.org/wiki/Interface_description_language]

SPECIFIC

_SPECIFIC:
* OMG-IDL##
* XPIDL: XPIDL is an Interface Description Language used to specify XPCOM interface classes.
https://developer.mozilla.org/en-US/docs/Mozilla/XPIDL/

lagCmr.STANDARD.NO

name::
* McsEngl.lagCmr.STANDARD.NO@cptIt,
* McsEngl.conceptIt204.4,

lagCmr.TimeML

_CREATED: {2013-12-25}

name::
* McsEngl.lagCmr.TimeML@cptIt,
* McsEngl.TimeML@cptIt,

_DESCRIPTION:
Markup Language for Temporal and Event Expressions
TimeML is a robust specification language for events and temporal expressions in natural language. It is designed to address four problems in event and temporal expression markup:
1. Time stamping of events (identifying an event and anchoring it in time);
2. Ordering events with respect to one another (lexical versus discourse properties of ordering);
3. Reasoning with contextually underspecified temporal expressions (temporal functions such as 'last week' and 'two weeks before');
4. Reasoning about the persistence of events (how long does an event or the outcome of an event last).
TimeML has been developed in the context of three AQUAINT workshops and projects. The 2002 TERQAS workshop set out to enhance natural language question answering systems to answer temporally-based questions about the events and entities in news articles. The first version of TimeML was defined and the TimeBank corpus was created as an illustration. TANGO was a follow-up workshop in which a graphical annotation tool was developed. Currently, the TARSQI project develops algorithms that tag events and time expressions in NL texts and temporally anchor and order the events.
[http://www.timeml.org/site/index.html]

lagCmr.TRANSFORMATION (trl)

_CREATED: {2007-12-04}

NAME

name::
* McsEngl.lagCmr.TRANSFORMATION (trl)@cptIt,
* McsEngl.conceptIt556,
* McsEngl.transformation'cpl@cptIt556, {2007-12-05}
* McsEngl.transformation'language@cptIt556,
* McsEngl.trl@cptIt556,

DEFINITION

A transformation language is a computer language designed to transform
- some input text in a certain formal language
- into a modified output text
that meets some specific goal.

Macro languages are a kind of transformation languages to transform a meta language into specific higher programming language like Java, C++, Fortran

In the Model Driven Engineering Technical Space, there are model transformation languages (MTLs), that take as input models conforming to a given metamodel and produce as output models conforming to a different metamodel. An example of such a language is the QVT OMG standard. There are also low-level languages such as the Lx family (see [1]) implemented by the bootstrapping method (see Bootstrapping (compilers)). The L0 language may be considered as assembler for transformation languages. There is also a high-level graphical language built on upon Lx called MOLA (see [2]).

There are a number of XML transformation languages. These include XSLT, XQuery, STX, FXT, XDuce, CDuce, HaXml, XMLambda, and FleXML.
[http://en.wikipedia.org/wiki/Transformation_language]

trl'Resource (input-document)

name::
* McsEngl.trl'Resource (input-document)@cptIt,

trl'DESTINATION (output-document)

name::
* McsEngl.trl'DESTINATION (output-document)@cptIt,

trl'SPECIFICATION

name::
* McsEngl.trl'SPECIFICATION@cptIt,

trl'GENERIC

_GENERIC:
* COMPUTER_LANGUAGE#cptIt458#

trl.SPECIFIC

name::
* McsEngl.trl.SPECIFIC@cptIt,

_SPECIFIC:#ql:_GENERIC cptIt556#,
* XML_TRANSFORMATION_LANGUAGE#ql:xml'transformation'language###

trl.TAMPLATE-PROCESSING

name::
* McsEngl.trl.TAMPLATE-PROCESSING@cptIt,
* McsEngl.tamplate-processing@cptIt556i,

_DESCRIPTION:
A template processor (also known as a template engine or a template parser) is software or a software component that is designed to combine one or more templates with a data model to produce one or more result documents.[1] [2] [3] For purposes of this article, a result document is any kind of formatted output, including documents, web pages, or source code, either in whole or in fragments.
[http://en.wikipedia.org/wiki/Template_processor]

Programming languages such as Perl, Python, Ruby, C, and Java support template processing either natively, or through add-on libraries and modules. JavaServer Pages,[5] and Active Server Pages[6] are examples of template engines designed specifically for web application development.
Moreover, template processing is sometimes included as a sub-feature of software packages like text editors, IDEs and relational database management systems.
[http://en.wikipedia.org/wiki/Template_processor]

trl'ENVIRONMENT#cptCore756#

name::
* McsEngl.trl'ENVIRONMENT@cptIt,

trl'IMPLEMENTATION

name::
* McsEngl.trl'IMPLEMENTATION@cptIt,
* McsEngl.transformation-engine@cptIt556i,

COMPILER:
a software compiler converts the source-code listing into a microprocessor-specific object-code, for execution on the target microprocessor.
[http://en.wikipedia.org/wiki/Hardware_description_language]

lagCmr.VISUAL

_CREATED: {2011-09-05}

name::
* McsEngl.conceptIt566,
* McsEngl.computer-language.graphical,
* McsEngl.computer-language.VISUAL,
* McsEngl.mdv@cptIt566,
* McsEngl.methodDataVisual@cptIt566,
* McsEngl.visual-data-method@cptIt566,

mdv'DEFINITION

Graphical modeling languages use a diagram technique with named symbols that represent concepts and lines that connect the symbols and represent relationships and various other graphical notation to represent constraints.
[http://en.wikipedia.org/wiki/Graphical_modeling_language#Graphical_modeling_languages]

SPECIFIC

_SPECIFIC:
* visual-pgmlng##

mdv.UML

_CREATED: {2011-09-05}

name::
* McsEngl.mdv.UML@cptIt,
* McsEngl.conceptIt566.1,
* McsEngl.UML@cptIt566.1,
* McsEngl.unified-modeling-language@cptIt566.1,

_DESCRIPTION:
Unified Modeling Language (UML) is a standardized general-purpose modeling language in the field of object-oriented software engineering. The standard is managed, and was created, by the Object Management Group.
UML includes a set of graphic notation techniques to create visual models of object-oriented software-intensive systems.
[http://en.wikipedia.org/wiki/Unified_Modeling_Language]

uml'Program

name::
* McsEngl.uml'Program@cptIt,

The most well-known UML modelling tool is IBM Rational Rose.[citation needed] Other tools include, in alphabetical order, ArgoUML, BOUML, Dia, Enterprise Architect, MagicDraw UML, PowerDesigner, Rational Rhapsody, Rational Software Architect, StarUML, and Umbrello. Some of popular development environments also offer UML modelling tools, e.g.: Eclipse, NetBeans, and Visual Studio.
[http://en.wikipedia.org/wiki/Unified_Modeling_Language]

DEFINITION

_DESCRIPTION:
Programing-language is a MAPPING-METHOD
of HUMAN-INFORMATION-PROCESSING (computation) a computer can do
to plcode a computer understands.
[hmnSngo.2014-02-02]

COMPUTER-LANGUAGE is a LANGUAGE that maps an "INFO"-PROCESS to an ALGORITHM and a PROGRAM.
[hmnSngo.2003-10-16]

A programming language is an artificial language that can be used to control the behavior of a machine, particularly a computer. Programming languages, like human languages, are defined through the use of syntactic and semantic rules, to determine structure and meaning respectively.
[http://en.wikipedia.org/wiki/Programming_language]

PROGRAMMING-LANGUAGE is a language (a system of rules and signs) that maps an ALGORITHM#cptIt458# to a PROGRAM#cptIt59#.
[hmnSngo.2001feb16]

COMPUTER LANGUAGE is an ARTIFICIAL HUMAN-LANGUAGE#cptCore93.1# that is used to program computers.
[NIKOS, OKT. 1996]

A formal language in which computer programs are written. The definition of a particular language consists of both
- {syntax} (how the various symbols of the language may be combined) and
- {semantics} (the meaning of the language constructs).
[FOLDOC 1998feb] {1998-04-30}

lcp'ARCHETYPE (problem)

name::
* McsEngl.lcp'ARCHETYPE (problem)@cptIt,
* McsEngl.lcp'archetype@cptIt, {2014-05-02}
* McsEngl.lcp'archonode.toplevel@cptIt, {2014-05-29}
* McsEngl.lcp'codeFirst@cptIt, {2014-09-21}
* McsEngl.lcp'problem@cptIt, {2016-11-12}
* McsEngl.lcp'semasio-view@cptIt, {2014-05-14}
* McsEngl.lcp'view@cptIt, {2014-05-02}
* McsEngl.lcparc@cptIt,
* McsEngl.lcparcho@cptIt,
* McsEngl.lcpcdf@cptIt,
* McsEngl.outermost-archonode@cptIt, {2014-05-29}
* McsEngl.topelevel-archonode@cptIt, {2014-05-29}
* McsEngl.problem.programing@cptIt, {2016-10-14}

_GENERIC:
* archetype#ql:archetype@cptCore#

lcparcho'Description

name::
* McsEngl.lcparcho'Description@cptIt,

_DESCRIPTION:
Lcp-archo is INFO-PROCESSING[1] we know and which[1] we want a-machine to do it[1].
[hmnSngo.2016-06-10]
===
Archo is an-info-processing-system a-computer can do, expressed in a-human-language.
[hmnSngo.2016-03-19]
===
Lcp-archetype is information-processing by A-HUMAN.
Lcp-algorithm is information-processing by A-COMPUTER.
[hmnSngo.2015-11-24]
===
CodeFirst is WHAT a programming-language manipulates|computes. This 'what' is natural-language-code (strings, numbers, math) and audio and images.
[hmnSngo.2014-09-21]
===
The archetype has whole-part structure, created by a human brain in a human-language.
[hmnSngo.2014-05-29]
===
Archetype I call any entity we map.
Algorithm I call a view of a worldview.
[hmnSngo.2014-05-02]
===
Lcp-archetype = lcp-algorithm
[hmnSngo.2014-03-08]
===
Lcp-archetype is the processing of human-information by a computer.
We DESCRIBE this processing in a natural-language's code with sentences.
We TRANSLATE this processing in a programming-language's code.
Computers began to compute NUMBERS.
Then added string manipulation, images and sounds.
Now it is time to compute concepts#ql:cpthmn@cptCore606.2#.
[hmnSngo.2014-02-15]

lcparcho'node

name::
* McsEngl.lcparcho'node@cptIt,
* McsEngl.lcp'archetypenode@cptIt, {2014-05-29}
* McsEngl.lcp'archonode@cptIt, {2014-05-29}
* McsEngl.lcp'semasio'node@cptIt,
* McsEngl.lcp'smsnode@cptIt,

_DESCRIPTION:
Semasionode is any node of a whole-part semasio-structure.
[hmnSngo.2014-05-16]
===
A major part of software engineering is building components that not only have well-defined and consistent APIs, but are also reusable. Components that are capable of working on the data of today as well as the data of tomorrow will give you the most flexible capabilities for building up large software systems.
[https://typescript.codeplex.com/wikipage?title=Generics%20in%20TypeScript&referringTitle=Documentation]

_SPECIFIC:
* boolean-archonode##
* toplevel-archonode##
* unit-archonode##

SPECIFIC

name::
* McsEngl.lcp'archetype.specific@cptIt,
* McsEngl.lcparcho.specific@cptIt,

_SPECIFIC:
* conceptBrain-archetype#linkL#
* global-archetype#ql:lcp'archetype.global#
* semasio-archetype#ql:lcp'archetype.semasio#
* semasio-view-archetype#linkL#
* semasio-worldview-archetype#linkL#
* view-archetype#linkL#
* worldview-archetype#linkL#

lcparcho.set (domainIN)

_CREATED: {2014-01-08}

name::
* McsEngl.lcparcho.set (domainIN)@cptIt,
* McsEngl.pgmlng'archetype-set@cptIt, {2014-01-27}
* McsEngl.pgmlng'domainIn@cptIt,
* McsEngl.pl'domainIn@cptIt, {2014-01-27}

_GENERIC:
* computing-language--domain#ql:cmrlng'domainin#

_DESCRIPTION:
Pl does not map|represent information. They map "information-processing-procedures" and include representations of information.
[hmnSngo.2014-01-27]
===
The set of all processing (behavior) of information a computer-machine can do, written not in a programing-language.
[hmnSngo.2014-01-15]

_CHARACTERISTIC:
* problem#linkL#

lcp'domainIn'PART

name::
* McsEngl.lcp'domainIn'PART@cptIt,

_EVOLUTING:
Programing-languages began by mapping NUMBER-PROCESSING.
Then added and TEXT, image and audio processing.
[hmnSngo.2014-01-27]

_PART:
* archetype (any)#linkL#
* algorithm#ql:pgmlng'algorithm#
* artificial-inteligence-domain##
* data-processing-domain##
* enterprise-architecture##
* knowledge-processing-domain##
* machine-learning-domain##
* machine-reasoning-domain##
* machine-translation-domain##
* natural-language-processing-domain##
* search-domain##
* service-oriented-architecture##
===
* symbol manipulation (lisp)
===
* information processing (IPL)

pgmng'domainIn'problem

name::
* McsEngl.pgmng'domainIn'problem@cptIt,
* McsEngl.computing-problem@cptIt,
* McsEngl.pgmng'problem@cptIt,
* McsEngl.problem.programming@cptIt,
* McsEngl.programming-problem@cptIt,

_DEFINITION:
ΠΡΟΒΛΗΜΑ είναι οποιαδήποτε ΚΑΤΑΣΤΑΣΗ για την αντιμετώπιση της οποίας καλούμαστε να ενεργήσουμε, να επιτύχουμε ένα στόχο.
[Αντωνάκος κα, "Ανάπτυξη εφαρμογών..." Γ' Λυκείου, 1999 α' έκδοση, 20]

_DESCRIPTION:
Algorithm is the SOLUTION of a computing-problem.
[hmnSngo.2014-01-19]

_PROBLEM_SPACE: SOLUTION_SPACE:
one of the challenges of object-oriented programming is to create a one-to-one mapping between the elements in the problem space (the place where the problem actually exists) and the solution space (the place where you’re modeling that problem, such as a computer).
[B. Eckel Thinking in Java 1998jan]

lcparcho.LANGUAGE-WORLDVIEW

name::
* McsEngl.lcparcho.LANGUAGE-WORLDVIEW@cptIt,
* McsEngl.language-worldview@cptIt,
* McsEngl.lcp'language-worldview@cptIt,
* McsEngl.lcp'worldview.language@cptIt,

_DESCRIPTION:
Every language supports a worldview by itself. This is the worldview of the language.
[hmnSngo.2014-05-16]

lcparcho.SEMASIO

name::
* McsEngl.lcparcho.SEMASIO@deleted,
* McsEngl.lcp'semasio@cptIt,

_DESCRIPTION:
The archetype, by itself, has a whole-part structure by construction, LIKE the semasio in a human lnaguage.
[hkmn-2014-05-29]
===
Semasio is any representation of archetype in a whole-part-structure which is mapped to code in order to communicate it with a machine.
[hmnSngo.2014-05-16]

_PART:
* semasio-relation
* semasio-node#ql:lcp'smsnode@cptIt#

_SPECIFIC:
* semasio-view (algo)#linkL#
* semasio-worlview#linkL#

lcparcho.WORLDVIEW

name::
* McsEngl.lcparcho.WORLDVIEW@cptIt,

lcp'MODEL (algorithm; doc)

_CREATED: {2011-12-19}last {2001-01-06} {2001-02-16}

name::
* McsEngl.lcp'MODEL (algorithm; doc)@cptIt,
* McsEngl.conceptCore478.1,
* McsEngl.conceptIt548,
* McsEngl.algoComputer@cptIt,
* McsEngl.algorithm-of-computer@cptIt,
* McsEngl.computer-algorithm@cptIt,
* McsEngl.programing-algorithm@cptIt,
* McsEngl.algorithm-in-computation@cptCore478.1,
* McsEngl.algorithm.computation@cptCore548,
* McsEngl.algorithm.computer@cptCore548,
* McsEngl.algorithm.programming@cptCore548,
* McsEngl.computating@cptIt, {2013-12-21}
* McsEngl.computation@cptIt, {2013-12-21}
* McsEngl.computation@cptCore478i,
* McsEngl.computational-process@cptCore478i,
* McsEngl.computer-algorithm@cptCore478i,
* McsEngl.computer-algorithm@cptIt,
* McsEngl.computing-algorithm@cptIt, {2014-01-19}
* McsEngl.computation-algorithm@cptCore478, {2008-01-06}
* McsEngl.computation-solution@cptCore478.1,
* McsEngl.data-machine-algorithm@cptCore478i, {2008-01-08}
* McsEngl.data-processing-solution@cptCore478i, {2008-01-08}

* McsEngl.algCmr@cptIt,
* McsEngl.lcp'algo@cptIt,
* McsEngl.lcp'algorithm@cptIt, {2014-02-21}
* McsEngl.lcpalgorithm@cptIt, {2014-02-20}
* McsEngl.lcp'archetype.view@cptIt, {2014-05-29}
* McsEngl.pgmlng'domainIn'algorithm@cptIt,
* McsEngl.programming-algorithm@cptCore548,

* McsEngl.domain-of-programing-language@cptIt,
* McsEngl.mdp'example@cptIt,
* McsEngl.mdp'Doing-with-language@cptIt,
* McsEngl.mdp'Usage@cptIt, {2011-09-25}
* McsEngl.pgmlng-DomainIn@cptIt,
* McsEngl.pl'usage@cptIt,
* McsEngl.problem-space-pl@cptIt,
* McsEngl.use-of-programing-language@cptIt,

* McsEngl.algorithm.programming@cptIt,
* McsEngl.mdp'Algorithm@cptIt,
* McsEngl.middle-domain-pl@cptIt, {2011-09-25}
* McsEngl.pl'algorithm@cptIt,
* McsEngl.pgmlng'algorithm@cptIt,
* McsEngl.lcpalgo@cptIt, {2014-02-20}
* McsEngl.cmralgo@cptIt, {2014-01-19}
* McsEngl.cagm@cptCore478.1,
* McsEngl.alg@cptCore548, {2007-12-23}

=== _NOTES: one of the challenges of object-oriented programming is to create a one-to-one mapping between the elements in the problem space (the place where the problem actually exists) and the solution space (the place where you’re modeling that problem, such as a computer).
[B. Eckel Thinking in Java 1998jan]
Computation is any type of calculation[1] or use of computing technology in information processing.[2][3] Computation is a process following a well-defined model understood and expressed as, for example, an algorithm, or a protocol.
The study of computation is paramount to the discipline of computer science.
[http://en.wikipedia.org/wiki/Computation]
====== lagoGreek:
* McsElln.ΑΛΓΟΡΙΘΜΟΣ-ΥΠΟΛΟΓΙΣΤΩΝ@cptIt,
* McsElln.υπολογισμός-υπολογιστών@cptIt,

_WHOLE:
* mdp-domainOut#ql:mdp'domainout#

DEFINITION

_DESCRIPTION:
· computer-algorithm is a-document describing an-archetype that a-machine understands.
· source-algorithm-of-a-programing-language is a-document describing an-archetype an intermediate virtual computer understands, using the-language's semantic-units.
· the-translator-of-the-language translates this source-algorithm to machine-algorithm-(program) which understands a-physical-machine.
[hmnSngo.2018-03-20]
===
Algorithm is the-mapping|representation|denotation of an-archetype a-computer can do, expressed using the-constructs of a-language.
Code is the-format of an-algorithm a-machine understands.
[hmnSngo.2016-06-10]
===
Algo is an-info-processing-system a-computer can do, expressed in ANY language, human or computer.
[hmnSngo.2016-03-19]
===
Computer-algorithm is created by 'translating' an-information-processing-system TO a computer information-processing-system, first in a-natural-language and then in a-programing-language.
[hmnSngo.2015-10-24]
===
Computer-algorithm is a SYSTEM of information processing we want a computer to do.
[hmnSngo.2015-04-30]
===
ALGORITHM is the-information-processing we want a computer to do.
[hmnSngo.2014-10-18]
===
Semasio-view is the outermost-node of a communication-instance with whole-part-structure we map to code AND is part of a worldview.
[hmnSngo.2014-05-16]
===
Semasio-view is the outermost-node of a communication-instance with whole-part structure.
[hmnSngo.2014-05-14]
===
A human-information processing task.
[hmnSngo.2014-03-12]
===
Programing-algorithm is a whole-part structure of expressing sequentially doings and relations (= statements) of the entities of the domainIn.
Thus we can express it in a human-language.
[hmnSngo.2014-02-23]
===
Programing-algorithm is a METHOD (in the head of a programer) of "data" (=domainOut) processing.
[hmnSngo.2011-12-19]
===
The "algorithm" is the REPRESENTATION of the "domainIn" in terms of the "tools" of a programming-language (datatypes, classes, functions, etc).
The actual-code, the program, is the domainOut.
[hmnSngo.2011-10-09]
===
In computer science the word algorithm is a synonym for the word procedure so a protocol is to communications what an algorithm is to mathematics.
[http://en.wikipedia.org/wiki/Communications_protocol]
===
one of the challenges of object-oriented programming is to create a one-to-one mapping between the elements in the problem space (the place where the problem actually exists) and the solution space (the place where you’re modeling that problem, such as a computer).
[B. Eckel Thinking in Java 1998jan]
===
The data_processing METHOD must first to be represented in a form that an individual "language" supports, ie with the datatypes of the language.
For example, in an object-oriented language, the programmer must construct the most APPROPRIATE classes that can represent correctly the "problem" (= the element of the domain, a computer wants to do it).
===
Computation is any type of calculation[1] or use of computing technology in information processing.[2][3] Computation is a process following a well-defined model understood and expressed as, for example, an algorithm, or a protocol.
The study of computation is paramount to the discipline of computer science.
[http://en.wikipedia.org/wiki/Computation]

COMPUTER_PROGRAM:
Algorithms are essential to the way computers process information, because a computer program is essentially an algorithm that tells the computer what specific steps to perform (in what specific order) in order to carry out a specified task, such as calculating employees’ paychecks or printing students’ report cards.
[http://en.wikipedia.org/wiki/Algorithm]

_DEFINITION:
The set of computer_algorithms#cptIt548# represented with programs.
[KasNik, 2007-12-28]

The set of "entities" a programing_language" represents: DATA_PROCESSING.
[KasNik, 2007-12-27]

Every pcl is used for something.

_DEFINITION:
A programing language MAPS a human-brainepto-model (about the processing of data) to a program. Like natural-languages the language-knower must interpret the input in a "mineto_model" (oo paradigm, structure paradigm, functional, logic etc) before the program creation.
[KasNik, 2007-12-05]
===
Every language uses some 'COMMANDS' to represent algorithms.
[nikkas 1999oct29]
===
* Computation_algorithm is a METHOD of data_processing by a machine real or imaginary. Implementing the machine, then this data_processing can be done.
[hmnSngo.2008-01-08_KasNik]

Computer_Algorithm is a METHOD (=knowledge of a precess) of data_processing a computer we want to do.
[hmnSngo.2007-12-26_KasNik]

Computer_Algorithm is the work (= data processing) a computer we want to do.
[hmnSngo.2007-12-23_KasNik]

COMPUTER-ALGORITHM is an ALGORITHM that process information that a computer can execute.
[hmnSngo.2001-02-16_nikkas]

Computation is a DATA processing activity that means something to a human.
[hmnSngo.2008-01-08_KasNik]

Computation is a general term for any type of information processing that can be represented mathematically. This includes phenomena ranging from simple calculations to human thinking. In a more narrow meaning, computation is a process following a well defined model that is understood and can be expressed in an algorithm, protocol, network topology, etc.
[http://en.wikipedia.org/wiki/Computation]

_OTHER:
J. A. Robinson: A program is a theory (in some logic) and computation is deduction from the theory.
N. Wirth: Program = data structure + algorithm
R. Kowalski: Algorithm = logic + control
[http://web.archive.org/web/20041028043137/http://cs.wwc.edu/~cs_dept/KU/PR/Prolog.html]

lcpalgo'ATTRIBUTE

name::
* McsEngl.lcpalgo'ATTRIBUTE@cptIt,

_ATTRIBUTE:
* ANALYSIS_OF_ALGORITHMS#ql:analysis_of_algorithms-*###
* ALGORITHM#cptCore564#
* COMPUTATION_ALGORITHM##
* ALGORITHM_DESIGN#ql:algorithm_design-*###

lcp'everything-is-an-object-vs-everything-is-an-expression

_CREATED: {2014-02-03}

name::
* McsEngl.lcp'everything-is-an-object-vs-everything-is-an-expression@cptIt,
* McsEngl.everything-is-an-object-vs-everything-is-an-expression@cptIt,

_DESCRIPTION:
Both are right but live in confusion.
"Everything is an object" say the oo-languages because they see the ARCHETYPE entities they are created and process. Everything are concepts inherited attributes from others, even the functions.
"Everthing is an expression" say the functional-languages because they see the structure of the CODE. We see that the NAMES of the archetype-concepts create structures (expresions, sentences, structure of sentences) which they call 'expressions'.
[hmnSngo.2014-02-03]

lcpalgo'command

name::
* McsEngl.lcpalgo'command@cptIt,
* McsEngl.command@cptIt,

* McsEngl.cmd@cptIt,
====== lagoGreek:
* McsElln.εντολή@cptIt,
* McsElln.ετλ@cptIt,

lcpalgo'COMMAND.SIMPLE

name::
* McsEngl.lcpalgo'COMMAND.SIMPLE@cptIt,

lcpalgo'COMMAND.COMPOUND

name::
* McsEngl.lcpalgo'COMMAND.COMPOUND@cptIt,

A compund-command is a command of commands.
[hmnSngo.2001-02-16_nikkas]

ΑΚΟΛΟΥΘΙΑ

name::
* McsElln.ΑΚΟΛΟΥΘΙΑ@cptIt,
* McsElln.ΑΚΟΛΟΥΘΙΑΚΗ-ΔΟΜΗ@cptIt,
* McsElln.ΔΙΑΔΟΧΗ@cptIt,

ΟΡΙΣΜΟΣ:
Στην ακολουθιακή δομή οι εντολές εκτελούνται η μία μετά την άλλη, μια φορά η καθεμία.
[Αντωνάκος κα, "Ανάπτυξη εφαρμογών..." Γ' Λυκείου, 1999 α' έκδοση, 75]

ΕΜΦΩΛΕΥΜΕΝΗ ΔΟΜΗ

name::
* McsEngl.nested-structure@cptIt,

SUBGENERAL:
* Επιλογή μέσα σε επανάληψη,
* Επιλογή μέσα σε επιλογή,
* Επανάληψη μέσα σε επανάληψη,
* Επανάληψη μέσα σε επιλογή,

ΕΠΑΝΑΛΗΨΗ (loop)

name::
* McsEngl.loop@cptIt,
* McsElln.ΒΡΟΧΟΣ@cptIt, [Παπακωνσταντίνου κα; Τεχνολογία Υπολογιστικών... Γ'Ε. Λυκείου, 1999 α'έκδοση, 274]
* McsElln.ΔΟΜΗ-ΕΠΑΝΑΛΗΨΗΣ@cptIt,
* McsElln.ΕΠΑΝΑΛΗΠΤΙΚΗ-ΔΟΜΗ@cptIt,

ΟΡΙΣΜΟΣ:
Στην επαναληπτική δομή μια ακολουθία εντολών εκτελείται μία ή περισσότερες φορές, ανάλογα με την τιμή μιας συνθήκης (ή μιας μεταβλητής).
[Αντωνάκος κα, "Ανάπτυξη εφαρμογών..." Γ' Λυκείου, 1999 α' έκδοση, 75]

ΟΣΟ-ΚΑΝΕ

ΟΣΟ <συνθήκη συνέχειας> ΚΑΝΕ
ομάδα εντολών;
ΤΕΛΟΣΟΣΟ

ΟΣΟ συνθήκη ΕΠΑΝΑΛΑΒΕ
εντολή-1
...
εντολή-ν
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
[Βακάλη κα, Ανάπτυξη Εφαρμογών γ' λυκείου, 1999 α' έκδοση, 174]

ΕΠΑΝΕΛΑΒΕ-ΜΕΧΡΙ

ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
εντολή-1
...
εντολή-ν
ΜΕΧΡΙΣ_ΟΤΟΥ λογική-έκφραση
[Βακάλη κα, Ανάπτυξη Εφαρμογών γ' λυκείου, 1999 α' έκδοση, 25]

Πολύ συχνά η ΙΔΙΑ επαναληπτική διαδικασία μπορεί να γραφεί εξίσου σωστά χρησιμοποιώντας είτε τη δομή ΟΣΟ...ΕΠΑΝΕΛΑΒΕ είτε τη δομή ΜΕΧΡΙΣ_ΟΤΟΥ και είναι προσωπική επιλογή του προγραμματιστή ποιά θα χρησιμοποιήσει. Υπάρχουν όμως περιπτώσεις όπου η χρήση της εντολής ΜΕΧΡΙΣ_ΟΤΟΥ οδηγεί σε απλούστερα και πιο ευκολονόητα προγράμματα. Γενικά σε περιπτώσεις όπου η επανάληψη θα συμβεί υποχρεωτικά μία φορά, είναι προτιμότερη η χρήση της ΜΕΧΡΙΣ_ΟΤΟΥ.
[Βακάλη κα, Ανάπτυξη Εφαρμογών γ' λυκείου, 1999 α' έκδοση, 176]

ΓΙΑ-ΜΕΧΡΙ-ΚΑΝΕ

name::
* McsElln.ΓΙΑ...ΑΠΟ...ΜΕΧΡΙ@cptIt, [Βακάλη κα, Ανάπτυξη Εφαρμογών γ'λυκείου, 1999 α'έκδοση, 178]

ΣΥΝΤΑΞΗ:
ΓΙΑ μεταβλητή ΑΠΟ τιμή1 ΜΕΧΡΙ τιμή2 ΜΕ ΒΗΜΑ τιμή3
εντολή-1
...
εντολή-ν
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
[Βακάλη κα, Ανάπτυξη Εφαρμογών γ' λυκείου, 1999 α' έκδοση, 179]

ΧΡΗΣΗ: όταν ο αριθμός των επαναλήψεων είναι γνωστός από την αρχή.
[Βακάλη κα, Ανάπτυξη Εφαρμογών γ' λυκείου, 1999 α' έκδοση, 178]

ΕΠΙΛΟΓΗ

name::
* McsEngl.condition@cptIt,
* McsElln.ΔΟΜΗ-ΕΠΙΛΟΓΗΣ@cptIt,
* McsElln.ΕΠΙΛΕΚΤΙΚΗ-ΔΟΜΗ@cptIt,

ΟΡΙΣΜΟΣ:
Στην επιλεκτική δομή οι εντολές χωρίζονται σε δύο ή περισσότερες ομάδες και εκτελούνται οι εντολές μιας μόνο ομάδας, ανάλογα με την τιμή μιας συνθήκης ή μιας μεταβλητής, ενώ αγνοούνται οι υπόλοιπες.
[Αντωνάκος κα, "Ανάπτυξη εφαρμογών..." Γ' Λυκείου, 1999 α' έκδοση, 75]

ΑΠΛΗ ΕΠΙΛΟΓΗ (if...then...else)

name::
* McsElln.ΑΠΛΗ ΕΠΙΛΟΓΗ (if...then...else)@cptIt,

ΑΝ <συνθήκη> ΤΟΤΕ
ομάδα εντολών 1;
ΑΛΛΙΩΣ
ομάδα εντολώς 2;
ΤΕΛΟΣΑΝ

ΠΕΡΙΟΡΙΣΜΕΝΗ ΕΠΙΛΟΓΗ (if...then)

name::
* McsElln.ΠΕΡΙΟΡΙΣΜΕΝΗ ΕΠΙΛΟΓΗ (if...then)@cptIt,

ΑΝ <συνθήκη> ΤΟΤΕ
ομάδα εντολών 1;
ΤΕΛΟΣΑΝ

ΠΟΛΛΑΠΛΗ ΕΠΙΛΟΓΗ

ΑΝΑΛΟΓΑ <μεταβλητη>
ΙΣΗΜΕ <τιμή1>
ομάδα εντολών 1;
ΙΣΗΜΕ <τιμή2>
ομάδα εντολών 2;
...
ΙΣΗΜΕ <τιμήν>
ομάδα εντολών ν;
ΤΕΛΟΣΑΝΑΛΟΓΑ

ΑΝ συνθήκη-1 ΤΟΤΕ
εντολή-1
...
εντολή-ν
ΑΛΛΙΩΣ_ΑΝ συνθήκη-2 ΤΟΤΕ
εντολή-1
...
εντολή-ν
...
ΑΛΛΙΩΣ
εντολή-1
...
εντολή-ν
ΤΕΛΟΣ_ΑΝ
[Βακάλη κα, Ανάπτυξη Εφαρμογών γ' λυκείου, 1999 α' έκδοση, 170]

ΕΠΙΛΕΞΕ έκφραση
ΠΕΡΙΠΤΩΣΗ λίστα_τιμών_1
εντολές_1
ΠΕΡΙΠΤΩΣΗ λίστα_τιμών_2
εντολές_2
....
ΠΕΡΙΠΤΩΣΗ ΑΛΛΙΩΣ
εντολές_αλλιώς
ΤΕΛΟΣ_ΕΠΙΛΟΓΩΝ
[Βακάλη κα, Ανάπτυξη Εφαρμογών γ' λυκείου, 1999 α' έκδοση, 172]

lcpalgo'constructor

name::
* McsEngl.lcpalgo'constructor@cptIt,

lcpalgo'data-structure

name::
* McsEngl.lcpalgo'data-structure@cptIt,

lcpalgo'dataNo-structure

name::
* McsEngl.lcpalgo'dataNo-structure@cptIt,
* McsEngl.lcpalgo'processing-structure@cptIt,

lcpalgo'cycle

name::
* McsEngl.lcpalgo'cycle@cptIt,

lcpalgo'decision

name::
* McsEngl.lcpalgo'decision@cptIt,

lcpalgo'decision.MULTICHOICE

name::
* McsEngl.lcpalgo'decision.MULTICHOICE@cptIt,

lcpalgo'data-and-dataNo-structure

name::
* McsEngl.lcpalgo'data-and-dataNo-structure@cptIt,
* McsEngl.lcpalgo'mixed-structure@cptIt,

lcpalgo'definiteness

name::
* McsEngl.lcpalgo'definiteness@cptIt,

lcpalgo'effectiveness

name::
* McsEngl.lcpalgo'effectiveness@cptIt,

lcpalgo'execution-state

_CREATED: {2014-01-25}

name::
* McsEngl.lcpalgo'execution-state@cptIt,
* McsEngl.computation-step@cptIt,
* McsEngl.execution-state-of-programming-language@cptIt,

_DESCRIPTION:
The "current continuation" or "continuation of the computation step" is the continuation that, from the perspective of running code, would be derived from the current point in a program's execution. The term continuations can also be used to refer to first-class continuations, which are constructs that give a programming language the ability to save the execution state at any point and return to that point at a later point in the program.
[http://en.wikipedia.org/wiki/Continuation]

lcpalgo'executor

name::
* McsEngl.lcpalgo'executor@cptIt,

lcpalgo'finitness

name::
* McsEngl.lcpalgo'finitness@cptIt,

_DESCRIPTION:
An lcpalgo must have an END.
[hmnSngo.2014-02-20]

lcpalgo'input

name::
* McsEngl.lcpalgo'input@cptIt,

CAL-INPUT is the information the user gives to a Computer-ALgorithm.
[hmnSngo.2001-02-16_nikkas]

lcpalgo'output

name::
* McsEngl.lcpalgo'output@cptIt,

_DESCRIPTION:
CAL-OUTPUT is the INFORMATION the algorithm gives to the user.
[hmnSngo.2001-02-16_nikkas]

lcpalgo'presentation

name::
* McsEngl.lcpalgo'presentation@cptIt,

lcpcode

_CREATED: ? {2013-10-15}

name::
* McsEngl.behavior-code@cptIt,
* McsEngl.lcp'code.PROCESSING@cptIt,
* McsEngl.lngPgm'code.PROCESSING.YESNO@cptIt,
* McsEngl.mdp'Processing-code@cptIt,
* McsEngl.pl'code.Processing-code@cptIt,
* McsEngl.pl'example@cptIt,
* McsEngl.pl'processing@cptIt,
* McsEngl.processing-and-non-processing-code-of-programming-language@cptIt, {2013-10-15}
* McsEngl.lcp'code.EXAMPLE@cptIt,
* McsEngl.pgmlng'example@cptIt,

_SiblingSpecific:
* data-code,
* mixed-code,

_DESCRIPTION:
It is code created using the api by a programmer.
[hmnSngo.2013-08-01]

_DESCRIPTION:
The processing-code is and REPRESENTATION-code but NOT the opposite.
[hmnSngo.2014-02-02]
===
It is code which is both processing (function) and non-processing (data). The classic example is the class|object code in ool.
[hmnSngo.2013-10-15]

_SPECIFIC:
* loop-statement
* program##
* subprogram##

lcpalgo'flawchart

name::
* McsEngl.lcpalgo'flawchart@cptIt,

lcpalgo'modelConcept

name::
* McsEngl.lcpalgo'modelConcept@cptIt,

lcpalgo'natural-language

name::
* McsEngl.lcpalgo'natural-language@cptIt,

lcpalgo'program#cptIt59#

name::
* McsEngl.lcpalgo'program@cptIt,

lcpalgo'programer#cptIt248.2#

name::
* McsEngl.lcpalgo'programer@cptIt,

The FIRST thing a programer must know is the algorithm he wants to MAP.
[hmnSngo.2007-12-23_KasNik]

lcpalgo'Syntax

name::
* McsEngl.lcpalgo'Syntax@cptIt,
* McsEngl.lagPgm'syntax@cptIt,
* McsEngl.syntax.programming-language@cptIt,

_DEFINITION:
In computer science, the syntax of a computer language is the set of rules that defines the combinations of symbols that are considered to be a correctly structured document or fragment in that language. This applies both to programming languages, where the document represents source code, and markup languages, where the document represents data. The syntax of a language defines its surface form.[1] Text-based computer languages are based on sequences of characters, while visual programming languages are based on the spatial layout and connections between symbols (which may be textual or graphical). Documents that are syntactically invalid are said to have a syntax error.
Syntax – the form – is contrasted with semantics – the meaning. In processing computer languages, semantic processing generally comes after syntactic processing, but in some cases semantic processing is necessary for complete syntactic analysis, and these are done together or concurrently. In a compiler, the syntactic analysis comprises the frontend, while semantic analysis comprises the backend (and middle end, if this phase is distinguished).
[http://en.wikipedia.org/wiki/Syntax_(programming_languages)]
===
Programming languages are characterized by their syntax and their semantics. The syntax of a language defines its user interface; If you understand a language’s syntax, you understand what it makes easy. The semantics of a language defines its capabilities; If you understand a language’s semantics, you understand what it does well.
[http://ristrettolo.gy/#about-this-book]
===
The structure of strings in some language. A language's syntax is described by a {grammar#ql:cl'grammar#}. For example, the syntax of a binary number could be expressed as
 binary_number = bit [ binary_number ]
 bit = "0" | "1"
meaning that a binary number is a bit optionally followed by a binary number and a bit is a literal zero or one digit.
[FOLDOC 1998feb] {1998-03-26}
===
* A programming language's surface form is known as its syntax.
[http://en.wikipedia.org/wiki/Programming_language]

Syntax
Every computer programming language has rules about how its commands and instructions should be written and in what order. These rules make-up its syntax.
The syntax of a programming language is checked by that language's compiler at compilation time.
[SOURCE: PC-GLOSSARY 1993]

ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Η ΤΗΡΗΣΗ ΤΩΝ ΚΑΝΟΝΩΝ (ΓΡΑΜΜΑΤΙΚΗ) ΤΗΣ ΓΛΩΣΣΑΣ, ΕΙΝΑΙ ΓΝΩΣΤΗ ΣΑΝ "ΣΥΝΤΑΞΗ" ΤΗΣ ΓΛΩΣΣΑΣ. ΟΤΑΝ ΚΑΤΑ ΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΔΗΜΙΟΥΡΓΗΣΕΤΕ ΜΙΑ ΠΡΟΤΑΣΗ ΤΗΝ ΟΠΟΙΑ ΔΕΝ ΜΠΟΡΕΙ ΝΑ ΜΕΤΑΦΡΑΣΕΙ Ο ΜΕΤΑΓΛΩΣΤΗΣ, ΤΟΤΕ ΕΧΟΥΜΕ ΕΝΑ ΣΥΝΤΑΚΤΙΚΟ ΣΦΑΛΜΑ.
[Rich-et-al, 1989, 12#cptResource463]

ΤΟ "ΣΥΝΤΑΚΤΙΚΟ" ΜΙΑΣ ΓΛΩΣΣΑΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΕΙΝΑΙ ΤΟ ΣΥΝΟΛΟ ΤΩΝ ΚΑΝΟΝΩΝ ΠΟΥ ΔΙΕΠΟΥΝ ΕΝΑ ΠΗΓΑΙΟ ΠΡΟΓΡΑΜΜΑ:
ΠΟΙΕΣ ΛΕΞΕΙΣ ΕΙΝΑΙ ΑΠΟΔΕΚΤΕΣ ΓΙΑ ΧΡΗΣΗ,
ΣΕ ΠΟΙΑ ΘΕΣΗ ΠΡΕΠΕΙ ΝΑ ΒΡΙΣΚΟΝΤΑΙ ΑΥΤΕΣ,
ΠΟΥ ΠΡΕΠΕΙ ΝΑ ΒΡΙΣΚΟΝΤΑΙ ΤΑ ΣΗΜΕΙΑ ΣΤΙΞΗΣ ΚΛΠ.
[Rich-et-al, 1989, 79#cptResource463]

As with many computer-oriented languages, the syntax of KIF is most easily described in three layers.
a) First, there are the basic characters of the language.
b) These characters can be combined to form lexemes.
c) Finally, the lexemes of the language can be combined to form grammatically legal expressions.
Although this layering is not strictly esential to the specification of KIF, it simplifies the description of the syntax by dealing with white space at the lexeme level and eliminating that detail from the expression level.
[KIF SPEC, M.R. GENESERETH, 1995mar] 1998feb22

PART:
Programming language syntax is usually defined using a combination of regular expressions (for lexical structure) and Backus-Naur Form (for grammatical structure).
[http://en.wikipedia.org/wiki/Programming_language]

lcp'GRAMMAR

name::
* McsEngl.lcp'GRAMMAR@cptIt,
* McsEngl.grammar'of'pcl@cptIt,

_DEFINITION:
A formal definition of the syntactic structure of a language (see {syntax}), normally given in terms of {production rule}s which specify the order of constituents and their sub-constituents in a {sentence} (a well-formed string in the language).
[FOLDOC 1998feb] {1998-03-26}

Grammar = set of rules

A formal grammar using a simple Extended Backus-Naur-Form#ql:bnf'notation_it516# (EBNF) notation. Each rule in the grammar defines one symbol, in the form
symbol ::= expression

This specification presents the syntax of the C# programming language using two grammars. The lexical grammar (§2.2.2) defines how Unicode characters are combined to form line terminators, white space, comments, tokens, and pre-processing directives. The syntactic grammar (§2.2.3) defines how the tokens resulting from the lexical grammar are combined to form C# programs.

lcp'Syntactic-sugar

name::
* McsEngl.lcp'Syntactic-sugar@cptIt,
* McsEngl.syntactic-sugar-in-programming@cptIt,
* McsEngl.syntactic-sugar@cptIt,

_DESCRIPTION:
In computer science, syntactic sugar is syntax within a programming language that is designed to make things easier to read or to express. It makes the language "sweeter" for human use: things can be expressed more clearly, more concisely, or in an alternative style that some may prefer.

For example, many programming languages provide special syntax for referencing and updating array elements. Abstractly, an array reference is simply a procedure of two arguments: an array and a subscript vector, which could be expressed as get_array(Array, vector(i,j)) . Instead, many languages provide special syntax like Array[i,j] . Similarly an array element update is abstractly something like set_array(Array, vector(i,j), value), but many languages provide syntax like Array[i,j] := value.

Specifically, a construct in a language is called syntactic sugar if it can be removed from the language without any effect on what the language can do: functionality and expressive power will remain the same. For instance, in the C language the a[i] notation is syntactic sugar for *(a + i) .[1]

Language processors, including compilers, static analyzers, and the like, often expand sugared constructs into more fundamental constructs before processing, a process sometimes called "desugaring".
[http://en.wikipedia.org/wiki/Syntactic_sugar]

lcpalgo'resource

name::
* McsEngl.lcpalgo'resource@cptIt,

_ADDRESS.WPG:
* dictionary: http://xlinux.nist.gov/dads///
* Rosetta Code is a programming chrestomathy site. The idea is to present solutions to the same task in as many different languages as possible, to demonstrate how languages are similar and different, and to aid a person with a grounding in one approach to a problem in learning another. Rosetta Code currently has 707 tasks, 114 draft tasks, and is aware of 534 languages, though we do not (and cannot) have solutions to every task in every language.
- http://rosettacode.org/wiki/Rosetta_Code,
* http://www.wseas.org/multimedia/journals/education/2012/55-346.pdf,
Description of the Basic Algorithm Blocks and Structures
Representation in Courses of Algorithm Development
* http://www.mta.ca/~rrosebru/oldcourse/263114/Dsa.pdf, datastructures and algorithms.

lcpalgo'value-table (ΠΙΝΑΚΑΣ ΤΙΜΩΝ)

name::
* McsEngl.lcpalgo'value-table (ΠΙΝΑΚΑΣ ΤΙΜΩΝ)@cptIt,

lcpalgo'variable

name::
* McsEngl.lcpalgo'variable@cptIt,

Human_data_processing DOES NOT have "variables".
Computer_data_processing DOES HAVE "variables".
The PROGRAM, a computer_data_processing method, has variables.
Then, depends on what you mean "algorithm", to have or not to have "variables".
[hmnSngo.2008-01-06_KasNik]

Algorithms does NOT have variables, programs have variables.
[hmnSngo.2007-12-23_KasNik]

CAL-VARIABLE is GENERAL-INFORMATION that the cal process. A ComputerALgorithm must use variables for 2 reasons:
a) a general-algorithm is more usefull than an algorithm who works for an individual information and
b) we create computer-algorithms to create programs that computers execute. But programs store internally the information in RAM-POSITIONS. We need the cal-variables to name these ram-positions.
[hmnSngo.2001-02-16_nikkas]

lcpalgo'VARIABLE.INPUT

name::
* McsEngl.lcpalgo'VARIABLE.INPUT@cptIt,

INPUT-VARIABLE is a variable that stores input-information.
[hmnSngo.2001-02-16_nikkas]

lcpalgo'VARIABLE.OUTPUT

name::
* McsEngl.lcpalgo'VARIABLE.OUTPUT@cptIt,

lcpalgo'VARIABLE.INTERNAL

name::
* McsEngl.lcpalgo'VARIABLE.INTERNAL@cptIt,

lcpalgo'GENERIC

name::
* McsEngl.lcpalgo'GENERIC@cptIt,

* METHOD#cptCore181.67#
* ALGORITHM_VIEW#cptCore564#
* Algorithm#cptIt458#

SPECIFIC

name::
* McsEngl.cagm.specific@cptIt,
* McsEngl.lpcalgo.specific@cptIt,

_SPECIFIC:
* OBJECT-ORIENTED-ALGORITHM (java, c++),
* STRUCTURED-PROGRAMMING-ALGORITHM (pascal, basic),

EXAMPLE: Euro_to_Drahma
1) Euro = 5
2) 5 x 340.75 = 1,703.75
3) Drahma = 1,703.75

1) Ask from user the Euros he wants to convert and hold it in a variable E
2) in variable D put E * 340.75
3) Show the result (D) to user from the RAM

_SPECIFIC:
* collection##
* collectionNo##
* image##
* information##
* mutable##
* mutableNo##
* named##
* namedNo##
* number##
* sound##
* string##
* type##

lcpalgo.SPECIFIC-DIVISION.presentation

name::
* McsEngl.lcpalgo.SPECIFIC-DIVISION.presentation@cptIt,

_SPECIFIC:
* conceptual-model#linkL#
* natural-language-text#linkL#
* pseudocode#linkL#
* flow chart|diagram#linkL#
* code.source (program)#linkL#
* code.binary#linkL#

lcpalgo.SPECIFIC-DIVISION.doing

name::
* McsEngl.lcpalgo.SPECIFIC-DIVISION.doing@cptIt,

_SPECIFIC:
* algorithm-archetype#linkL#
* information-archetype#linkL#
* mixed-archetype#linkL#

lcpalgo.SPECIFIC-DIVISION.collection

name::
* McsEngl.lcpalgo.SPECIFIC-DIVISION.collection@cptIt,

_SPECIFIC:
* collection-archetype#linkL#
* collectionNo-archetype#linkL#

lcpalgo.SPECIFIC-DIVISION.name

name::
* McsEngl.lcpalgo.SPECIFIC-DIVISION.name@cptIt,

_SPECIFIC:
* named-archetype#linkL#
* namedNo-archetype#linkL#

lcpalgo.SPECIFIC-DIVISION.changeability

name::
* McsEngl.lcpalgo.SPECIFIC-DIVISION.changeability@cptIt,

_SPECIFIC:
* changeable-archetype#linkL#
* changeableNo-archetype#linkL#

lcpalgo.SPECIFIC-DIVISION.generic

name::
* McsEngl.lcpalgo.SPECIFIC-DIVISION.generic@cptIt,

_SPECIFIC:
* type-archetype#linkL#
* typeNo-archetype#linkL#

lcpalgo.SPECIFIC-DIVISION.serialness

name::
* McsEngl.lcpalgo.SPECIFIC-DIVISION.serialness@cptIt,

Serial or parallel or distributed:
Algorithms are usually discussed with the assumption that computers execute one instruction of an algorithm at a time. Those computers are sometimes called serial computers. An algorithm designed for such an environment is called a serial algorithm, as opposed to parallel algorithms or distributed algorithms. Parallel algorithms take advantage of computer architectures where several processors can work on a problem at the same time, whereas distributed algorithms utilise multiple machines connected with a network. Parallel or distributed algorithms divide the problem into more symmetrical or asymmetrical subproblems and collect the results back together. The resource consumption in such algorithms is not only processor cycles on each processor but also the communication overhead between the processors. Sorting algorithms can be parallelized efficiently, but their communication overhead is expensive. Iterative algorithms are generally parallelizable. Some problems have no parallel algorithms, and are called inherently serial problems.
[http://en.wikipedia.org/wiki/Algorithm]

lcpalgo.ARITHMETIC

name::
* McsEngl.lcpalgo.ARITHMETIC@cptIt,
* McsEngl.lcpalgo.math@cptIt,

lcpalgo'math.INTEGER.RANDOM

name::
* McsEngl.lcpalgo'math.INTEGER.RANDOM@cptIt,

_CODE.LCS:
Problem
You'd like to get a random integer between two integers, inclusive.

Solution
Use the following function.

randomInt = (lower, upper=0) ->
start = Math.random()
if not lower?
[lower, upper] = [0, lower]
if lower > upper
[lower, upper] = [upper, lower]
return Math.floor(start * (upper - lower + 1) + lower)

(randomInt(1) for i in [0...10])
# => [0,1,1,0,0,0,1,1,1,0]

(randomInt(1, 10) for i in [0...10])
# => [7,3,9,1,8,5,4,10,10,8]
[http://coffeescriptcookbook.com/chapters/math/random-integer]

lcpalgo.Boolean

name::
* McsEngl.lcpalgo.Boolean@cptIt,

lcpalgo.CONCEPTUAL-MODEL

_CREATED: {2014-02-02}

name::
* McsEngl.lcpalgo.CONCEPTUAL-MODEL@cptIt,
* McsEngl.conceptual-model,
* McsEngl.domain-model@cptIt,

_DESCRIPTION:
A domain model in problem solving and software engineering is a conceptual model of all the topics related to a specific problem. It describes the various entities, their attributes, roles, and relationships, plus the constraints that govern the problem domain.
[http://en.wikipedia.org/wiki/Domain_model]
===
Conceptual model (computer science)
From Wikipedia, the free encyclopedia
A mental model captures ideas in a problem domain, while a conceptual model represents 'concepts' (entities) and relationships between them. A Conceptual model in the field of computer science is also known as a domain model. Conceptual modeling should not be confused with other modeling disciplines such as data modelling, logical modelling and physical modelling. The conceptual model is explicitly chosen to be independent of design or implementation concerns, for example, concurrency or data storage. The aim of a conceptual model is to express the meaning of terms and concepts used by domain experts to discuss the problem, and to find the correct relationships between different concepts. The conceptual model attempts to clarify the meaning of various, usually ambiguous terms, and ensure that problems with different interpretations of the terms and concepts cannot occur. Such differing interpretations could easily cause confusion amongst stakeholders, especially those responsible for designing and implementing a solution, where the conceptual model provides a key artifact of business understanding and clarity. Once the domain concepts have been modeled, the model becomes a stable basis for subsequent development of applications in the domain. The concepts of the conceptual model can be mapped into physical design or implementation constructs using either manual or automated code generation approaches. The realization of conceptual models of many domains can be combined to a coherent platform.

A conceptual model can be described using various notations, such as UML, ORM or OMT for object modelling, or IE or IDEF1X for Entity Relationship Modelling. In UML notation, the conceptual model is often described with a class diagram in which classes represent concepts, associations represent relationships between concepts and role types of an association represent role types taken by instances of the modelled concepts in various situations. In ER notation, the conceptual model is described with an ER Diagram in which entities represent concepts, cardinality and optionality represent relationships between concepts. Regardless of the notation used, it is important not to compromise the richness and clarity of the business meaning depicted in the conceptual model by expressing it directly in a form influenced by design or implementation concerns.

This is often used for defining different processes in a particular Company or Institute.

Literature[edit]
Fowler, Martin: Analysis Patterns, Reusable object models, Addison-Wesley Longman, 1997. ISBN 0-201-89542-0.
Stewart Robinson, Roger Brooks, Kathy Kotiadis, and Durk-Jouke Van Der Zee (Eds.): Conceptual Modeling for Discrete-Event Simulation, 2010. ISBN 978-1-4398-1037-8
David W. Embley, Bernhard Thalheim(Eds.): Handbook of Conceptual Modeling, 2011. ISBN 978-3-642-15864-3.
[http://en.wikipedia.org/wiki/Conceptual_model_(computer_science)] 2014-02-02

lcpalgo.Converting-datatype

name::
* McsEngl.lcpalgo.Converting-datatype@cptIt,

lcpalgo.COMPARISON

name::
* McsEngl.lcpalgo.COMPARISON@cptIt,

lcpalgo.D

name::
* McsEngl.lcpalgo.D@cptIt,

lcpalgo.DIRECTORY

name::
* McsEngl.lcpalgo.DIRECTORY@cptIt,

lcpalgo.directory.CREATION

name::
* McsEngl.lcpalgo.directory.CREATION@cptIt,

_ADDRESS.WPG:
* http://rosettacode.org/wiki/Create_a_file,

lcpalgo.Enterprise-architecture

_CREATED: {2014-01-19}

name::
* McsEngl.lcpalgo.Enterprise-architecture@cptIt,
* McsEngl.pgmlng'enterprise-architecture@cptIt,
* McsEngl.enterprise-architecture@cptIt,

_DESCRIPTION:
Enterprise architecture (EA) is "a well-defined practice for conducting enterprise analysis, design, planning, and implementation, using a holistic approach at all times, for the successful development and execution of strategy. Enterprise Architecture applies architecture principles and practices to guide organizations through the business, information, process, and technology changes necessary to execute their strategies. These practices utilize the various aspects of an enterprise to identify, motivate, and achieve these changes."[1]

Practitioners of EA call themselves enterprise architects. An enterprise architect is a person responsible for performing this complex analysis of business structure and processes and is often called upon to draw conclusions from the information collected. By producing this understanding, architects are attempting to address the goals of Enterprise Architecture: Effectiveness, Efficiency, Agility, and Durability.[2]
[http://en.wikipedia.org/wiki/Enterprise_architecture]

lcpalgo.F

name::
* McsEngl.lcpalgo.F@cptIt,

lcpalgo.FILE

name::
* McsEngl.lcpalgo.FILE@cptIt,

lcpalgo.file.CREATING

name::
* McsEngl.lcpalgo.file.CREATING@cptIt,

_ADDRESS.WPG:
* http://rosettacode.org/wiki/Create_a_file,

lcpalgo.file.DELETING

name::
* McsEngl.lcpalgo.file.DELETING@cptIt,

_ADDRESS.WPG:
* http://rosettacode.org/wiki/Delete_a_file,

lcpalgo.file.EXISTANCE

name::
* McsEngl.lcpalgo.file.EXISTANCE@cptIt,

_ADDRESS.WPG:
* http://rosettacode.org/wiki/Check_that_file_exists,

lcpalgo.file.READING

name::
* McsEngl.lcpalgo.file.READING@cptIt,

_ADDRESS.WPG:
* http://rosettacode.org/wiki/Delete_a_file,

lcpalgo.HTML-MANIPULATION

name::
* McsEngl.lcpalgo.HTML-MANIPULATION@cptIt,

lcpalgo.Operator#ql:pgmlng'operator#

name::
* McsEngl.lcpalgo.Operator@cptIt,

lcpalgo.REPRESENTATION#ql:datait.language.programing#

name::
* McsEngl.lcpalgo.REPRESENTATION@cptIt,
* McsEngl.conceptIt248.7,

lcpalgo.GUI

name::
* McsEngl.lcpalgo.GUI@cptIt,

lcpalgo.INTERFACING-DATABASE

name::
* McsEngl.lcpalgo.INTERFACING-DATABASE@cptIt,

lcpalgo.MANAGING-OTHER-PROGRAMS

name::
* McsEngl.lcpalgo.MANAGING-OTHER-PROGRAMS@cptIt,

lcpalgo.MARKDOWN-MANIPULATION#ql:markdown@cptIt501.16#

name::
* McsEngl.lcpalgo.MARKDOWN-MANIPULATION@cptIt,

lcpalgo.MODULAR

_CREATED: {2014-01-25}

name::
* McsEngl.lcpalgo.MODULAR@cptIt,
* McsEngl.modular-computer-algorithm@cptIt,

_DESCRIPTION:
Modular programming is a software design technique that emphasizes separating the functionality of a program into independent, interchangeable modules, such that each contains everything necessary to execute only one aspect of the desired functionality.[1] Conceptually, modules represent a separation of concerns, and improve maintainability by enforcing logical boundaries between components. Modules are typically incorporated into the program through interfaces.[2] A module interface expresses the elements that are provided and required by the module. The elements defined in the interface are detectable by other modules. The implementation contains the working code that corresponds to the elements declared in the interface.
[http://en.wikipedia.org/wiki/Modular_programming]

lcpalgo.PATTERN

name::
* McsEngl.lcpalgo.PATTERN@cptIt,
* McsEngl.design-pattern.pgmlng@cptIt,
* McsEngl.pgmlng'code.algorithm@cptIt,
* McsEngl.pgmlng'domainIn'pattern@cptIt,
* McsEngl.pgmlng'pattern@cptIt,
* McsEngl.plpattern@cptIt,

_DESCRIPTION:
Design_pattern is a GENERIC computing-algorithm.
[hmnSngo.2014-01-19]
===
A pattern is a reusable solution that can be applied to commonly occurring problems in software design - in our case - in writing JavaScript web applications. Another way of looking at patterns are as templates for how we solve problems - ones which can be used in quite a few different situations.
...
Patterns are not an exact solution. It’s important that we remember the role of a pattern is merely to provide us with a solution scheme. Patterns don’t solve all design problems nor do they replace good software designers, however, they do support them.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#whatisapattern]

plpattern'co-requisites

name::
* McsEngl.plpattern'co-requisites@cptIt,

_DESCRIPTION:
Co-requisites – what other patterns may be needed to support use of the pattern being described?
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#designpatternstructure]

plpattern'context

name::
* McsEngl.plpattern'context@cptIt,

_DESCRIPTION:
Context outline – the contexts in which the pattern is effective in responding to the users needs.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#designpatternstructure]

plpattern'evaluation

name::
* McsEngl.plpattern'evaluation@cptIt,

Criticism:
The concept of design patterns has been criticized in several ways.

The design patterns may just be a sign of some missing features of a given programming language (Java or C++ for instance). Peter Norvig demonstrates that 16 out of the 23 patterns in the Design Patterns book (that is primarily focused on C++) are simplified or eliminated (via direct language support) in Lisp or Dylan.[25] Related observations were made by Hannemann and Kiczales who implemented several of the 23 design patterns using an aspect-oriented programming language (AspectJ) and showed that code-level dependencies were removed from the implementations of 17 of the 23 design patterns and that aspect-oriented programming could simplify the implementations of design patterns.[26] See also Paul Graham's essay "Revenge of the Nerds".[27]

Moreover, inappropriate use of patterns may unnecessarily increase complexity.[28]
[http://en.wikipedia.org/wiki/Design_pattern_(computer_science)]

plpattern'problem-statement

name::
* McsEngl.plpattern'problem-statement@cptIt,

_DESCRIPTION:
Problem statement – a statement of the problem being addressed so we can understand the intent of the pattern.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#designpatternstructure]

plpattern'proto-pattern

name::
* McsEngl.plpattern'proto-pattern@cptIt,

_DESCRIPTION:
In studying design patterns, it's not irregular to come across the term "proto-pattern". What is this? Well, a pattern that has not yet been known to pass the "pattern"-ity tests is usually referred to as a proto-pattern. Proto-patterns may result from the work of someone that has established a particular solution that is worthy of sharing with the community, but may not have yet had the opportunity to have been vetted heavily due to its very young age.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#patternity]

plpattern'resource

name::
* McsEngl.plpattern'resource@cptIt,

GoF

_DESCRIPTION:
One of the first and arguably most iconic formal works published on design patterns in software engineering was a book in 1995 called Design Patterns: Elements Of Reusable Object-Oriented Software. This was written by Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides - a group that became known as the Gang of Four (or GoF for short).
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#introduction]

plpattern'solution

name::
* McsEngl.plpattern'solution@cptIt,

_DESCRIPTION:
Solution – a description of how the user’s problem is being solved in an understandable list of steps and perceptions.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#designpatternstructure]

plpattern'usage

name::
* McsEngl.plpattern'usage@cptIt,

_DESCRIPTION:
Known usage – is the pattern being used in the wild? If so, where and how?
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#designpatternstructure]

SPECIFIC

plpattern.ANTI-PATERN

name::
* McsEngl.plpattern.ANTI-PATERN@cptIt,
* McsEngl.bad-pattern.pgmlng@cptIt,

_DESCRIPTION:
an anti-pattern is a bad design that is worthy of documenting.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#antipatterns]

plpattern.ARCHITECTURAL-PATTERN

name::
* McsEngl.plpattern.ARCHITECTURAL-PATTERN@cptIt,

_DESCRIPTION:
An architectural pattern is a widely recognised and reused solution to a recurring design problem in the field of software architectures. The concept of an architectural pattern has a broader scope than the concept of design pattern. The architectural patterns address various issues in software engineering, such as computer hardware performance limitations, high availability and minimization of a business risk. Some architectural patterns have been implemented within software frameworks.
[http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science)]

plpattern.BEHAVIORAL

name::
* McsEngl.plpattern.BEHAVIORAL@cptIt,
* McsEngl.behavioral-pattern@cptIt,

_DESCRIPTION:
In software engineering, behavioral design patterns are design patterns that identify common communication patterns between objects and realize these patterns. By doing so, these patterns increase flexibility in carrying out this communication.

Examples of this type of design pattern include:

Chain of responsibility pattern: Command objects are handled or passed on to other objects by logic-containing processing objects
Command pattern: Command objects encapsulate an action and its parameters
"Externalize the Stack": Turn a recursive function into an iterative one that uses a stack[1]
Hierarchical visitor pattern: Provide a way to visit every node in a hierarchical data structure such as a tree
Interpreter pattern: Implement a specialized computer language to rapidly solve a specific set of problems
Iterator pattern: Iterators are used to access the elements of an aggregate object sequentially without exposing its underlying representation
Mediator pattern: Provides a unified interface to a set of interfaces in a subsystem
Memento pattern: Provides the ability to restore an object to its previous state (rollback)
Null Object pattern: Designed to act as a default value of an object
Observer pattern: aka Publish/Subscribe or Event Listener. Objects register to observe an event that may be raised by another object
Weak reference pattern: De-couple an observer from an observable[2]
Protocol stack: Communications are handled by multiple layers, which form an encapsulation hierarchy[3]
Scheduled-task pattern: A task is scheduled to be performed at a particular interval or clock time (used in real-time computing)
Single-serving visitor pattern: Optimise the implementation of a visitor that is allocated, used only once, and then deleted
Specification pattern: Recombinable business logic in a boolean fashion
State pattern: A clean way for an object to partially change its type at runtime
Strategy pattern: Algorithms can be selected on the fly
Template method pattern: Describes the program skeleton of a program
Visitor pattern: A way to separate an algorithm from an object
[http://en.wikipedia.org/wiki/Behavioral_pattern]

plpattern.CREATIONAL

name::
* McsEngl.plpattern.CREATIONAL@cptIt,
* McsEngl.creational-pattern@cptIt,

_DESCRIPTION:
In software engineering, creational design patterns are design patterns that deal with object creation mechanisms, trying to create objects in a manner suitable to the situation. The basic form of object creation could result in design problems or added complexity to the design. Creational design patterns solve this problem by somehow controlling this object creation.

Creational design patterns are composed of two dominant ideas. One is encapsulating knowledge about which concrete classes the system uses. Another is hiding how instances of these concrete classes are created and combined.[1]

Creational design patterns are further categorized into Object-creational patterns and Class-creational patterns, where Object-creational patterns deal with Object creation and Class-creational patterns deal with Class-instantiation. In greater details, Object-creational patterns defer part of its object creation to another object, while Class-creational patterns defer its object creation to subclasses.[2]

Five well-known design patterns that are parts of creational patterns are the

Abstract factory pattern, which provides an interface for creating related or dependent objects without specifying the objects' concrete classes.[3]
Builder pattern, which separates the construction of a complex object from its representation so that the same construction process can create different representation.
Factory method pattern, which allows a class to defer instantiation to subclasses.[4]
Prototype pattern, which specifies the kind of object to create using a prototypical instance, and creates new objects by cloning this prototype.
Singleton pattern, which ensures that a class only has one instance, and provides a global point of access to it.[5]
[http://en.wikipedia.org/wiki/Creational_pattern]

plpattern.EXAMPLE

name::
* McsEngl.plpattern.EXAMPLE@cptIt,

_DESCRIPTION:
Examples – an implementation of the pattern in a minimal form
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#designpatternstructure]

plpattern.OBJECT-ORIENTED

name::
* McsEngl.plpattern.OBJECT-ORIENTED@cptIt,
* McsEngl.object-oriented-pattern@cptIt,

_DESCRIPTION:
Object-oriented design patterns typically show relationships and interactions between classes or objects, without specifying the final application classes or objects that are involved.
[http://en.wikipedia.org/wiki/Design_pattern_(computer_science)]

plpattern.STRUCTURAL

name::
* McsEngl.plpattern.STRUCTURAL@cptIt,
* McsEngl.structural-pattern@cptIt,

_DESCRIPTION:
In software engineering, structural design patterns are design patterns that ease the design by identifying a simple way to realize relationships between entities.

Examples of Structural Patterns include:

Adapter pattern: 'adapts' one interface for a class into one that a client expects
Adapter pipeline: Use multiple adapters for debugging purposes.[1]
Retrofit Interface Pattern:[2][3] An adapter used as a new interface for multiple classes at the same time.
Aggregate pattern: a version of the Composite pattern with methods for aggregation of children
Bridge pattern: decouple an abstraction from its implementation so that the two can vary independently
Tombstone: An intermediate "lookup" object contains the real location of an object.[4]
Composite pattern: a tree structure of objects where every object has the same interface
Decorator pattern: add additional functionality to a class at runtime where subclassing would result in an exponential rise of new classes
Extensibility pattern: aka. Framework - hide complex code behind a simple interface
Facade pattern: create a simplified interface of an existing interface to ease usage for common tasks
Flyweight pattern: a high quantity of objects share a common properties object to save space
Pipes and filters: a chain of processes where the output of each process is the input of the next
Private class data pattern: restrict accessor/mutator access
Proxy pattern: a class functioning as an interface to another thing
[http://en.wikipedia.org/wiki/Structural_pattern]

lcpalgo.PHONETIC

name::
* McsEngl.lcpalgo.PHONETIC@cptIt,
* McsEngl.phonetic-algorithm@cptIt,

_DESCRIPTION:
A phonetic algorithm is an algorithm for indexing of words by their pronunciation. Most phonetic algorithms were developed for use with the English language; consequently, applying the rules to words in other languages might not give a meaningful result.
[http://en.wikipedia.org/wiki/Phonetic_algorithm]

lcpalgo.SEARCH

name::
* McsEngl.lcpalgo.SEARCH@cptIt,
* McsEngl.lcpalgo.query@cptIt,
* McsEngl.query-algorithm@cptIt,
* McsEngl.search-algorithm@cptIt,

_DESCRIPTION:
In computer science, a search algorithm is an algorithm for finding an item with specified properties among a collection of items. The items may be stored individually as records in a database; or may be elements of a search space defined by a mathematical formula or procedure, such as the roots of an equation with integer variables; or a combination of the two, such as the Hamiltonian circuits of a graph.
[http://en.wikipedia.org/wiki/Search_algorithm]

lcpalgo.SECUTITY

name::
* McsEngl.lcpalgo.SECUTITY@cptIt,

security-technology#cptIt302#

lcpalgo.AUTHENTICATING

name::
* McsEngl.lcpalgo.AUTHENTICATING@cptIt,

lcpalgo.HASHING

name::
* McsEngl.lcpalgo.HASHING@cptIt,

lcpalgo.Service-oriented-architecture

_CREATED: {2014-01-19}

name::
* McsEngl.lcpalgo.Service-oriented-architecture@cptIt,
* McsEngl.pgmlng'service-oriented-architecture@cptIt,
* McsEngl.service-oriented-architecture@cptIt,
* McsEngl.SOA@cptIt,

_DESCRIPTION:
Service-oriented architecture (SOA) is a software design and software architecture design pattern based on discrete pieces of software providing application functionality as services to other applications. This is known as Service-orientation. It is independent of any vendor, product or technology.[1]
A service is a self-contained unit of functionality, such as retrieving an online bank statement.[2] Services can be combined by other software applications to provide the complete functionality of a large software application.[3] SOA makes it easy for computers connected over a network to cooperate. Every computer can run an arbitrary number of services, and each service is built in a way that ensures that the service can exchange information with any other service in the network without human interaction and without the need to make changes to the underlying program itself.
[http://en.wikipedia.org/wiki/Service-oriented_architecture]

lcpalgo.TEXT

name::
* McsEngl.lcpalgo.TEXT@cptIt,

_SPECIFIC:
* string-manipulation#ql:lcp'string'doing#

lcpalgo.TIME

name::
* McsEngl.lcpalgo.TIME@cptIt,

_SPECIFIC:
* string-manipulation#ql:lcp'string'doing#

lcpalgo.YAML-MANIPULATION

name::
* McsEngl.lcpalgo.YAML-MANIPULATION@cptIt,

YAML#cptItsoft501.15#

lcpalgo'ARCHITECTURE-OF-MACHINE

_CREATED: {2017-03-09}

name::
* McsEngl.lcpalgo'ARCHITECTURE-OF-MACHINE@cptIt,
* McsEngl.lcpalgo'architecture@cptIt,

_DESCRIPTION:
The-semantic-units that every algorithm uses DEPEND on the-computer-architecture of the-machine on which will-be-executed.
The-architecture of a-high-level-language-algorithm is very simple:
- a-display
- a-non-persistent-storage
- a-persistent-storage.
- a-processor.
- data human readable,
- instructions human readable,
The-architecture of a-machine-language-algorithm is very complicated.
[hmnSngo.2017-03-09]

lcpalgo'Node

_CREATED: {2014-06-17}

name::
* McsEngl.lcpalgo'Node@cptIt,
* McsEngl.codenode@cptIt, {2014-06-17}
* McsEngl.lcp'codenode@cptIt,

_DESCRIPTION:
The code, like the archetype, has a whole-part-tree structure, comprised of nodes.
[hmnSngo.2014-06-17]

lcpalgo'UNIT

_CREATED: {2014-02-06} character ?

name::
* McsEngl.lcpalgo'UNIT@cptIt,
* McsEngl.lcpcode'unit@cptIt,

* McsEngl.character-pl@cptIt,
* McsEngl.character-of-programmingLanguage@cptIt,
* McsEngl.lcp'character@cptIt,
* McsEngl.lcp'code.CHARACTER@cptIt,
* McsEngl.lcp'code.unit@cptIt,
* McsEngl.lcp'code-unit@cptIt,
* McsEngl.lcp'unit-of-code@cptIt, {2014-02-20}
* McsEngl.lcp'unitA-of-codeA@cptIt, {2014-10-29}
* McsEngl.mdp'symbol@cptIt,
* McsEngl.pgmlng'character@cptIt,
* McsEngl.pgmlng'symbol@cptIt,
* McsEngl.symbol-of-computer'language@cptIt,
* McsEngl.lcpchr@cptIt,

_WHOLE:
* code-token#ql:lcp'code.token#

_DEFINITION:
The INDIVISIBLE entities of code.
[hmnSngo.2014-02-20]
===
The 'symbols' the language uses.
[hmnSngo.2000jul25]
===
With characters a language express and instructions and data.
[hmnSngo.2002-04-22]

lcp'DIGIT

name::
* McsEngl.lcp'DIGIT@cptIt,

lcp'LETTER

name::
* McsEngl.lcp'LETTER@cptIt,

lcp'SPECIAL-SYMBOL

name::
* McsEngl.lcp'SPECIAL-SYMBOL@cptIt,

lcp'SEPARATOR

name::
* McsEngl.lcp'SEPARATOR@cptIt,
* McsEngl.punctuator@cptIt,
* McsEngl.separator@cptIt,

The following nine ASCII characters are the Java separators (punctuators):
#jv'Separator#: one of
( ) { } [ ] ; , .
[lang spec, 1996aug]

lcp'ALPHABET

name::
* McsEngl.lcp'ALPHABET@cptIt,
* McsEngl.alphabet'of'programmingLanguage@cptIt,
* McsElln.Αλφάβητο-της-γλώσσας@cptIt,

_DEFINITION:
In computer science, an alphabet is a finite set of characters or digits. The most common alphabet is {0,1}, the binary alphabet. A finite string is a finite sequence of characters from an alphabet; for instance a binary string is a string drawn from the alphabet {0,1}. An infinite sequence of characters may be constructed from elements of an alphabet as well.
[http://en.wikipedia.org/wiki/Alphabet_%28computer_science%29]

ΟΡΙΣΜΟΣ:
Μια γλώσσα διαθέτει ένα δικό της σύνολο-χαρακτήρων με τους οποίους κτίζονται οι λέξεις και στη συνέχεια οι προτάσεις της γλώσσας. Το σύνολο αυτών των χαρακτήρων ονομάζεται αλφάβητο της γλώσσας.
[Αντωνάκος κα, "Ανάπτυξη εφαρμογών..." Γ' Λυκείου, 1999 α' έκδοση, 198]

lcpalgo'WORD

name::
* McsEngl.lcpalgo'WORD@cptIt,
* McsEngl.lcp'code.TOKEN@cptIt,
* McsEngl.lcp'token@cptIt,
* McsEngl.lcp'unitA-structure@cptIt, {2014-10-29}
* McsEngl.lcptoken@cptIt,
* McsEngl.pgmlng'token@cptIt,
* McsEngl.pl'token@cptIt,
* McsEngl.token@cptIt,
* McsEngl.token.pgmlng@cptIt,
* McsEngl.token-of-programming-language@cptIt,
* McsEngl.unit-structure.code-of-lcp@cptIt,
* McsEngl.lcp'code.lexeme@cptIt,
* McsEngl.lcp'word@cptIt,
* McsEngl.lexeme-of-computer-language@cptIt,
* McsEngl.pgmlng'lexeme@cptIt,
* McsEngl.token-of-programing-language@cptIt,

_WHOLE:
* atom#ql:lcp'code.atom#
* source-code,

_DESCRIPTION:
Token is a string of one or more characters, IDENTIFIABLE on ANY attribute, eg separatos, punctuators, operators, values?, names-reserved, names-custom, etc.
[hmnSngo.2014-03-29]
===
A token is a string of one or more characters that is significant as a group.
[http://en.wikipedia.org/wiki/Token_scanner#Token]
===
Tokens are the basic lexical building blocks of source code. Characters are combined into tokens according to the rules of the programming language. There are five classes of tokens: identifiers, reserved words, operators, separators, and constants.
[http://www.osdata.com/topic/language/program.htm]
===
Each token is a single atomic unit of the language, for instance a keyword, identifier or symbol name. The token syntax is typically a regular language, so a finite state automaton constructed from a regular expression can be used to recognize it.
[http://en.wikipedia.org/wiki/Compiler]
===
Tokens and Regular Expressions
Tokens are the basic building blocks of a programming
language: keywords, identifiers, numbers, punctuation
The first compiler phase (scanning) splits up the character
stream into tokens
Free-format language: program is a sequence of tokens and
position of tokens on page is unimportant
Fixed-format language: indentation and/or position of tokens on
page is significant (early Basic , Fortran , Haskell )
Case-sensitive language: upper- and lowercase are distinct (C,
C++ , Java )
Case-insensitive language: upper- and lowercase are identical
(Ada , Fortran , Pascal )
Tokens are described by regular expressions
[http://www.cs.fsu.edu/~engelen/courses/COP402001/notes3_4.pdf]

_DEFINITION:
Lexemes are combinations of characters.
[hmnSngo.2000jul25]

LEXICAL_ANALYSIS:
The process of converting characters into lexemes in called lexical analysis. The input to this process is a stream of characters, and the output is a stream of lexemes.
The function of a lexical analyzer is cyclic. It reads characters from the input string until it encounters a character that cannot be combined with previous characters to form a legal lexeme. When this happens, it outputs the lexeme corresponding to the previously read characters. It then starts the process over again with the new character. Whitespace causes a break in the lexical analysis process but otherwise is discarded.
[KIF SPEC, M.R. GENESERETH, 1995mar] 2000jul26

SPECIFIC

_SPECIFIC:
* constant##
* name.custom (identifier)##
* name.reserved#ql:pgmlng'reserved_word#
* separator##
===
There are five classes of tokens: identifiers, reserved words, operators, separators, and constants.
[http://www.osdata.com/topic/language/program.htm]

SPECIFIC:
** identifier,
** keyword,
** literal,
** reserved'word,

pgmlng'GLOSSARY (ΛΕΞΙΛΟΓΙΟ):
Οι ΛΕΞΕΙΣ που μπορεί να σχηματισθούν αποτελούν το ΛΕΞΙΛΟΓΙΟ της γλώσσας.
[Αντωνάκος κα, "Ανάπτυξη εφαρμογών..." Γ' Λυκείου, 1999 α' έκδοση, 199]

lcpalgo'SEMANTIC-UNIT (sut)

name::
* McsEngl.lcpalgo'SEMANTIC-UNIT (sut)@cptIt,
* McsEngl.atom.lcp@cptIt, {2014-02-09}
* McsEngl.semantic-unit@cptIt, {2016-11-12}
* McsEngl.smcunt@cptIt, {2016-11-12}
* McsEngl.pgmlng'atom-code@cptIt,
* McsEngl.pgmlng'instance-code@cptIt,
* McsEngl.lcp'archetype-unit@cptIt, {2014-02-19}
* McsEngl.lcp'atom@cptIt,
* McsEngl.lcp'semasio-unit@cptIt, {2014-10-29}
* McsEngl.lp'atom@cptIt,
* McsEngl.lpatom@cptIt,
* McsEngl.semantic-unit@cptIt, {2016-11-12}

* McsEngl.semunit.lcp@cptIt,

* McsEngl.lcp'conceptual-unit@cptIt, {2014-07-06}
* McsEngl.lcp'part-of-speech@cptIt, {2014-07-06}
* McsEngl.lcparchounit@cptIt, {2014-06-19}
* McsEngl.lcppos@cptIt, {2014-07-06}
* McsEngl.lcpunit.archetype@cptIt,
* McsEngl.lcpunit.algo@cptIt,
* McsEngl.semunit@cptIt, {2016-11-12}

_DESCRIPTION:
Units are the entities we use to create sentences.
[hmnSngo.2014-04-22]

_DESCRIPTION:
Atom is INDIVISIBLE code that MAPS to some archetype#ql:lcp'archetype#.
[hmnSngo.2014-02-09]
===
Atom is elementary code (not structure) that MAPS to some archetype#ql:lcp'archetype#.
[hmnSngo.2014-02-06]
===
The atoms are the NAMES of

SPECIFIC

_SPECIFIC:
* a  array
* b  boolean
* c  class
* d  function
* i    interface
* k  concept
* m  module
* n  number
* o  object
* r  regexp
* s  string
===
* null
* undefined

_SPECIFIC:
* boolean##
* identifier
* name.array
* name.function
* name.object
* name.variable
* null##
* number-literal##
* operator.function
* string-literal##
* undefined##

lcpalgo'sut.API

_CREATED: {2016-11-12}

name::
* McsEngl.lcpalgo'sut.API@cptIt,
* McsEngl.API@cptIt,
* McsEngl.Application-Programing-Interface@cptIt,
* McsEngl.lcpAPI@cptIt,

_DESCRIPTION:
API is the-set of semantic-units of an-algorithm.
It is-structured in three methods:
1. with a directory structure,
2. a whole-part structure,
3. a generic-specific structure.
[hmnSngo.2016-11-12]
===
On the most basic of levels an API is simply a way for one program to interact with another.
[https://codeburst.io/build-a-simple-twitter-bot-with-node-js-in-just-38-lines-of-code-ed92db9eb078]

lcpalgo'sut.GRAPHICAL-USER-INTERFACE#ql:gui.programing-language#

name::
* McsEngl.lcpalgo'sut.GRAPHICAL-USER-INTERFACE@cptIt,

lcpalgo'sut.BOOLEAN (lcpb)

_CREATED: {2014-05-16}

name::
* McsEngl.lcpalgo'sut.BOOLEAN (lcpb)@cptIt,
* McsEngl.bln-lcp@cptIt,
* McsEngl.lcp'boolean@cptIt,
* McsEngl.lcp'boolean-semasio-node@cptIt,
* McsEngl.lcp'smsnode.BOOLEAN@cptIt,
* McsEngl.lcp'smsboolean-node@cptIt,
* McsEngl.lcpb@cptIt,
* McsEngl.lcpboolean@cptIt,

_DESCRIPTION:
The 'true' and 'false'.
[hmnSngo.2014-08-22]
===
Smsboolean-node is any node which EVALUATED to a boolean-unit (true, false).
[hmnSngo.2014-05-16]

lcpalgo'sut.FUNCTION

name::
* McsEngl.lcpalgo'sut.FUNCTION@cptIt,
* McsEngl.lcp'archetype.subprogram@cptIt, {2014-02-20}
* McsEngl.lcp'SUBPROGRAM@cptIt,
* McsEngl.lcp'subprogram-archetype@cptIt, {2014-02-21}
* McsEngl.lcpaction@cptIt, {2014-04-06}
* McsEngl.lcpalgo.SUBPROGRAM@cptIt,
* McsEngl.lcpfunction@cptIt,
* McsEngl.lcpsubprogram@cptIt, {2014-02-20}
* McsEngl.calling-procedure-of-pcl@cptIt,
* McsEngl.function.programing@cptIt248i-(javaScript),
* McsEngl.function.pgmlng@cptIt,
* McsEngl.function-of-programingLanguage@cptIt,
* McsEngl.lcpfunction@cptIt, {2014-02-08}
* McsEngl.lcp'code.FUNCTION@cptIt,
* McsEngl.lcp'function@cptIt,
* McsEngl.lcp'subprogram-code@cptIt,
* McsEngl.lngPgm'code.function@cptIt,
* McsEngl.method-of-programing@cptIt, (java of class subroutine)
* McsEngl.mdp'function@cptIt, {2011-09-25}
* McsEngl.mdp'operation@cptIt,
* McsEngl.operation'of'computer'language@cptIt,
* McsEngl.pgmlng'processing.Calling-processing-code@cptIt,
* McsEngl.plfunction@cptIt, {2014-01-30}
* McsEngl.procedure-of-programingLanguage@cptIt,
* McsEngl.routine@cptIt,
* McsEngl.subroutine@cptIt,
* McsEngl.subprogram@cptIt, {2012-02-25}
* McsEngl.lcpf@cptIt,
* McsEngl.lcpd@cptIt,
* McsEngl.lcpfcn@cptIt,
* McsEngl.plfcn@cptIt, {2014-01-15}
* McsEngl.plfunction@cptIt, {2014-01-15}

DEFINITION

_DESCRIPTION:
Functions are VERBS created by the programmer.
Function definition is the creation SENTENCE.
Function execution|invocation is the SENTENCE which command a function to work.
[hmnSngo.2014-11-13]

_DEFINITION:
Plfunction is processing-code with input and output code.
[hmnSngo.2014-01-30]
===
SUBROUTINE is an operation we CALL for execution, which is stored in another place in the program.
[hmnSngo.2002-04-24]
===
The terminology for subroutines varies; they may alternatively be known as routines, procedures, functions (especially if they return results) or methods (especially if they belong to classes or type classes).
In the 1950s, computer memories were very small by current standards so subroutines were used primarily[citation needed] to reduce program size; a piece of code was written once and then used many times from various other places in the program.
Nowadays, subroutines are more frequently used to help make a program that is more structured, e.g. by isolating some particular algorithm or hiding some particular data access method. If many programmers are working on a single program, subroutines are one kind of modularity that can help split up the work.
[http://en.wikipedia.org/wiki/Control_flow] 2014-01-25

_DESCRIPTION:
Οι περισσότερες γλώσσες δομημένου προγραμματισμού ή με χαρακτηριστικά δομημένου προγραμματισμού υποστηρίζουν δύο είδη υποπρογραμμάτων: διαδικασίες και συναρτήσεις.
[Αντωνάκος κα, "Ανάπτυξη εφαρμογών..." Γ' Λυκείου, 1999 α' έκδοση, 217]

_EVALUATION_STRATEGY:
A programming language uses an evaluation strategy to determine when to evaluate the argument(s) of a function call (for function, also read: operation, method, or relation) and what kind of value to pass to the function. For example, call-by-worth/pass-by-reference specifies that a function application evaluates the argument before it proceeds to the evaluation of the function's body and that it passes two capabilities to the function, namely, the ability to look up the current value of the argument and to modify it via an assignment statement.[1] The notion of reduction strategy in lambda calculus is similar but distinct.

In practical terms, many modern programming languages have converged on a call-by-worth, pass-by-reference strategy for function calls (C#, Java). Some older languages, especially unsafe languages such as C++, combine several notions of parameter passing. Historically, call-by-value and call-by-name date back to Algol 60, a language designed in the late 1950s. Only purely functional languages such as Clean and Haskell use by-need.
[http://en.wikipedia.org/wiki/Evaluation_strategy]

lcpf'doing.DEFINING

name::
* McsEngl.lcpf'doing.DEFINING@cptIt,
* McsEngl.lcpfcn'definition@cptIt,
* McsEngl.lcpfcn'declaration@cptIt,
* McsEngl.lcpfcn'creating@cptIt,

lcpf'doing.EXECUTING

name::
* McsEngl.lcpf'doing.EXECUTING@cptIt,
* McsEngl.aplying.lcpfcn@cptIt,
* McsEngl.calling.lcpfcn@cptIt,
* McsEngl.executing.lcpfcn@cptIt,
* McsEngl.execution.lcpfcn@cptIt,
* McsEngl.function-calling@cptIt,
* McsEngl.function-infocation@cptIt,
* McsEngl.invokation.lcpfcn@cptIt,
* McsEngl.invoking.lcpfcn@cptIt,
* McsEngl.lcpfcn'aplying@cptIt,
* McsEngl.lcpfcn'call@cptIt,
* McsEngl.lcpfcn'calling@cptIt,
* McsEngl.lcpfcn'executing@cptIt,
* McsEngl.lcpfcn'execution@cptIt,
* McsEngl.lcpfcn'invocating@cptIt,
* McsEngl.lcpfcn'invocation@cptIt,
* McsEngl.subprogram'calling@cptIt,

_CODE.LCS:
functionname (argument)
functionname argument
== anonymous
(f(x)-> x)(5)

lcpf'evaluation-strategy

name::
* McsEngl.lcpf'evaluation-strategy@cptIt,

_DESCRIPTION:
A programming language uses an evaluation strategy to determine when to evaluate the argument(s) of a function call (for function, also read: operation, method, or relation) and what kind of value to pass to the function. For example, call-by-worth/pass-by-reference specifies that a function application evaluates the argument before it proceeds to the evaluation of the function's body and that it passes two capabilities to the function, namely, the ability to look up the current value of the argument and to modify it via an assignment statement.[1] The notion of reduction strategy in lambda calculus is similar but distinct.
In practical terms, many modern programming languages have converged on a call-by-worth, pass-by-reference strategy for function calls (C#, Java). Some older languages, especially unsafe languages such as C++, combine several notions of parameter passing. Historically, call-by-value and call-by-name date back to Algol 60, a language designed in the late 1950s. Only purely functional languages such as Clean and Haskell use by-need.
[http://en.wikipedia.org/wiki/Evaluation_strategy]

Call-by-reference

name::
* McsEngl.call-by-reference-evaluation@cptIt,
* McsEngl.pass-by-reference-evaluation@cptIt,

_DESCRIPTION:
In call-by-reference evaluation (also referred to as pass-by-reference), a function receives an implicit reference to a variable used as argument, rather than a copy of its value. This typically means that the function can modify (i.e. assign to) the variable used as argument—something that will be seen by its caller. Call-by-reference can therefore be used to provide an additional channel of communication between the called function and the calling function. The same effect can be emulated in languages like C by passing a pointer (not to be confused with call-by-reference), or in languages like Java by passing a holding object, that can be set by the caller. A call-by-reference language makes it more difficult for a programmer to track the effects of a function call, and may introduce subtle bugs.

Many languages support call-by-reference in some form or another, but comparatively few use it as a default, e.g. Perl. A few languages, such as C++, PHP, Visual Basic .NET, C# and REALbasic, default to call-by-value, but offer special syntax for call-by-reference parameters. C++ additionally offers call-by-reference-to-const. In purely functional languages there is typically no semantic difference between the two strategies (since their data structures are immutable, so there is no possibility for a function to modify any of its arguments), so they are typically described as call-by-value even though implementations frequently use call-by-reference internally for the efficiency benefits.

Even among languages that don't exactly support call-by-reference, many, including C and ML, support explicit references (objects that refer to other objects), such as pointers (objects representing the memory addresses of other objects), and these can be used to effect or simulate call-by-reference (but with the complication that a function's caller must explicitly generate the reference to supply as an argument).
Example that demonstrates call-by-reference in E:

def modify(var p, &q) {
p := 27# passed by value - only the local parameter is modified
q := 27# passed by reference - variable used in call is modified
}

? var a := 1
# value: 1
? var b := 2
# value: 2
? modify(a,&b)
? a
# value: 1
? b
# value: 27
[http://en.wikipedia.org/wiki/Evaluation_strategy]

lcpf'input

name::
* McsEngl.lcpf'input@cptIt,

lcpf'argument (input)

name::
* McsEngl.lcpf'argument (input)@cptIt,

_DESCRIPTION:
Argument is the VALUE of an input-variable (=parameter).
[hmnSngo.2014-02-08]

lcpf'parameter

name::
* McsEngl.lcpf'parameter@cptIt,

_DESCRIPTION:
In computer programming, a parameter is a special kind of variable, used in a subroutine to refer to one of the pieces of data provided as input to the subroutine.[1] These pieces of data are called arguments. An ordered list of parameters is usually included in the definition of a subroutine, so that, each time the subroutine is called, its arguments for that call can be assigned to the corresponding parameters.
Just as in standard mathematical usage, the argument is thus the actual value passed to a function, procedure, or routine (such as 37 in log(37)), whereas the parameter is a reference to that value inside the implementation of the function (log in this case). See the Parameters and arguments section for more information.
[http://en.wikipedia.org/wiki/Parameter_(computer_programming)]

lcpf'notation

name::
* McsEngl.lcpf'notation@cptIt,
* McsEngl.lcpf'name@cptIt,

_DESCRIPTION:
* Owner: which entity is member,
* Doing:
* Out:
* In:
* Boolean: out = boolean.
[hmnSngo.2014-11-02]
===
fOwnerOutNameInName
fCrlOtCtrlItElt
function of Control-entity, Output=control, Input=Element
[hmnSngo.2014-08-23]
===
fOwner...
IF needed we can put the 'owner' of the function.
[hmnSngo.2014-08-14]
===
* fDoing = when IO not important or obvious, [2014-07-06]
* fBDoing, B = boolean output, [2014-07-06]
* if ambiguity, then DoingInputOutput present, [2014-07-06]
===
* name = name_with_many_words
* fDnameInameOname
* fDnameIname
* fOnameDnameIname
* fInameDnameOname
* fInameDname
* fInameOname
[hmnSngo.2014-06-07]
===
* dName
[hmnSngo.2014-06-06]
===
fcnName
[hmnSngo.2012-01-13]
===
fnName
[hmnSngo.2012-01-13]

_OWNER:
* the owner, always after 'f'.
===
* fEdrDoing
===
* dArrDo
* dStgDo
* dOjtDo

_DOING:
* fDoing
* fDoingOutIn
* fOwnerDoingOutIn

_INPUT:
* fInName,

_RETURN:
* fOutName
===
* dRtnVariableFree

_RETURN_BOOLEAN:
* the 'is' relation, is omitted: fOwnerBproperty
[hmnSngo.2014-11-01]
===
* dBHas_properties
* dBIs_property
[hmnSngo.2014-06-06]
==
* fHas_properties,
* fIs_string,
===
* fBActive

lcpf'output

name::
* McsEngl.lcpf'output@cptIt,

lcpf'overloading

name::
* McsEngl.lcpf'overloading@cptIt,
* McsEngl.function-overloading@cptIt,
* McsEngl.method-overloading@cptIt,

_DESCRIPTION:
Function overloading or method overloading is a feature found in various programming languages such as Ada, C++, C#, D, and Java, that allows creating several methods with the same name which differ from each other in the type of the input and the output of the function. It is simply defined as the ability of one function to perform different tasks.

For example, doTask() and doTask(object O) are overloaded methods. To call the latter, an object must be passed as a parameter, whereas the former does not require a parameter, and is called with an empty parameter field. A common error would be to assign a default value to the object in the second method, which would result in an ambiguous call error, as the compiler wouldn't know which of the two methods to use.

Another appropriate example would be a Print(object O) method. In this case one might like the method to be different when printing, for example, text or pictures. The two different methods may be overloaded as Print(text_object T); Print(image_object P). If we write the overloaded print methods for all objects our program will "print", we never have to worry about the type of the object, and the correct function call again, the call is always: Print(something).
[http://en.wikipedia.org/wiki/Method_overloading]

lcpf'return-value (output)

name::
* McsEngl.lcpf'return-value (output)@cptIt,

lcpf'variable

name::
* McsEngl.lcpf'variable@cptIt,

_SPECIFIC:
* bound (local)
* free##
* freeNo##
* parameter#ql:lcpfunction'parameter#

lcpf'variable.FREE

name::
* McsEngl.lcpf'variable.FREE@cptIt,

_FREE_VARIABLE:
The function (y) -> x is interesting. It contains a free variable, x.10 A free variable is one that is not bound within the function. Up to now, we’ve only seen one way to “bind” a variable, namely by passing in an argument with the same name. Since the function (y) -> x doesn’t have an argument named x, the variable x isn’t bound in this function, which makes it “free.”
Now that we know that variables used in a function are either bound or free, we can bifurcate functions into those with free variables and those without:
Functions containing no free variables are called pure functions.
Functions containing one or more free variables are called closures.
[http://ristrettolo.gy/#if-functions-without-free-variables-are-pure-are-closures-impure]

SPECIFIC

name::
* McsEngl.lcpfcn.specific@cptIt,
* McsEngl.plfunction.specific@cptIt,

_SPECIFIC:
* builtIn#ql:lcpfunction.builtin#
* builtInNo#ql:lcpfunction.builtin.no#
* callback
* closure
* higher_order##
* named##
* namedNO##
* query
* recursive
* return##
* returnNo

lcpf.SPECIFIC-DIVISION.programer

name::
* McsEngl.lcpf.SPECIFIC-DIVISION.programer@cptIt,

_SPECIFIC:
* builtIn#ql:lcpfunction.builtin#
* builtInNo#ql:lcpfunction.builtin.no#

lcpf.BOOLEAN

name::
* McsEngl.lcpf.BOOLEAN@cptIt,
* McsEngl.boolean-function@cptIt,

_DESCRIPTION:
IF it returns a boolean.
[hmnSngo.2014-07-06]

_NOTATION:
* fBDoing
* fBIsEntity
* fBHasProperty
[hmnSngo.2014-07-06]

lcpf.BUILTIN

name::
* McsEngl.lcpf.BUILTIN@cptIt,
* McsEngl.build'in'subroutine@cptIt,

lcpf.BUILTIN.NO (custom)

name::
* McsEngl.lcpf.BUILTIN.NO (custom)@cptIt,
* McsEngl.custom-function.programming@cptIt,
* McsEngl.programmer-defined-function@cptIt,
* McsEngl.plfunction.USER-DEFINED@cptIt,
* McsEngl.user'defined'subroutine@cptIt,

lcpf.CALLBACK

name::
* McsEngl.lcpf.CALLBACK@cptIt,
* McsEngl.callback-function@cptIt,

_DEFINITION:
A callback is a function which you pass to an API to be called at a later time.

The most obvious case is an event handler in a GUI. Take Javascript as a very simple example:
<script>
function interact()
{
var name = prompt("What is your name?");
alert("Hi, " + name);
}
</script>
<button onclick="interact()">Interact</button>

Here, onclick="interact()" is telling Javascript to call the interact function when the button is clicked. In the code, we never actually call interact() ourselves. It's always done by the browser for us. We pass it the function and it calls it at a later time for us.

Another example is using Ajax in Javascript. In Ajax, there are three parts.
1. Send a query to the web server
2. Wait for the web server to respond
3. Process the web server's response
After step 1, our Javascript program idles. It sits patiently in the background, listening for an incoming call from the web server. When it gets one, what does the browser do? Answer: we have to pass it a callback in step 1 and it executes it in step 3.
[http://stackoverflow.com/questions/824234/what-is-a-callback-function]
===
* A callback function is a function that is passed to another function (in the form of a pointer to the callback function) so that the second function can call it. This is simply of way of making the second function more flexible without the second function needing to know a lot of stuff. By passing different callback functions, you can get different behaviour (different comparison rules, different formatting, different whatever). Nowadays it is more common in C++ to use function objects for this purpose rather than functions.
--
John Carson

JavaScript

java

Java's support of interfaces provides a mechanism by which we can get the equivalent of callbacks. The trick is to define a simple interface that declares the method we wish to be invoked.

For example, suppose we want to be notified when an event happens. We can define an interface:
public class EventNotifier
{
private InterestingEvent ie;
private boolean somethingHappened;
public EventNotifier (InterestingEvent event)
{
// Save the event object for later use.
ie = event;
// Nothing to report yet.
somethingHappened = false;
}
//...
public void doWork ()
{
// Check the predicate, which is set elsewhere.
if (somethingHappened)
{
// Signal the even by invoking the interface's method.
ie.interestingEvent ();
}
//...
}
// ...
}
[http://www.javaworld.com/javaworld/javatips/jw-javatip10.html]

lcpf.CLOSURE

name::
* McsEngl.lcpf.CLOSURE@cptIt,
* McsEngl.closure-programming@cptIt,

_DESCRIPTION:
Closures are functions that inherit the variables from their enclosing environment.
[http://nodetuts.com/pdf/handson-nodejs-sample.pdf]
===
_FREE_VARIABLE:
The function (y) -> x is interesting. It contains a free variable, x.10 A free variable is one that is not bound within the function. Up to now, we’ve only seen one way to “bind” a variable, namely by passing in an argument with the same name. Since the function (y) -> x doesn’t have an argument named x, the variable x isn’t bound in this function, which makes it “free.”
Now that we know that variables used in a function are either bound or free, we can bifurcate functions into those with free variables and those without:
Functions containing no free variables are called pure functions.
Functions containing one or more free variables are called closures.
[http://ristrettolo.gy/#if-functions-without-free-variables-are-pure-are-closures-impure]

lcpf.HIGHER-ORDER

name::
* McsEngl.lcpf.HIGHER-ORDER@cptIt,
* McsEngl.higher-order-plfcn@cptIt,

_DESCRIPTION:
Functions that accept other functions as arguments are called "higher-order functions".
[http://java.ociweb.com/mark/clojure/article.html#FP]
===
A higher-order function is a function that:
accepts another function as an argument, or
returns a function as a result.
[https://auth0.com/blog/glossary-of-modern-javascript-concepts/]

lcpf.NAMED

name::
* McsEngl.lcpf.NAMED@cptIt,
* McsEngl.named-plfcn@cptIt,

lcpf.NAMED.NO

name::
* McsEngl.lcpf.NAMED.NO@cptIt,
* McsEngl.anonymous-lcpfcn@cptIt,
* McsEngl.namedNo-plfcn@cptIt,

lcpf.QUERY

_CREATED: {2014-01-28}

name::
* McsEngl.lcpf.QUERY@cptIt,
* McsEngl.query-plfunction@cptIt,

lcpf.RECURSIVE

name::
* McsEngl.lcpf.RECURSIVE@cptIt,
* McsEngl.recursion'subroutine@cptIt,

_DESCRIPTION:
A powerful programming technique is recursion.
Recursion is often used when an algorithm or data structure is defined in terms of itself.
[Smalltalk Express Tutorial]

lcpf.RETURN

name::
* McsEngl.lcpf.RETURN@cptIt,
* McsEngl.function'subroutine@cptIt,
* McsEngl.lcpfcn.return@cptIt,
* McsEngl.lcpfcn.WITH-RETURN-VALUE@cptIt,

_DEFINITION:
FUNCTION: A subroutine that returns a value, like math functions.

lcpf.return.BOOLEAN

_CREATED: {2014-04-03}

name::
* McsEngl.lcpf.return.BOOLEAN@cptIt,
* McsEngl.lcpfcn.boolean@cptIt,

_NOTATION:
fB_invert,
fB_isarray,
fB_hasproperty,
[hmnSngo.2014-04-03]

lcpf.RETURN.NO

name::
* McsEngl.lcpf.RETURN.NO@cptIt,
* McsEngl.lcpfcn.returnNo@cptIt,
* McsEngl.lcpfcn.WITH-RETURN-VALUE.no@cptIt,

_DESCRIPTION:
Java used the 'void' keyword to denote this.

lcpf.STRUCTURED-PROGRAMING

name::
* McsEngl.lcpf.STRUCTURED-PROGRAMING@cptIt,

lcp'procedure-structured-programing

name::
* McsEngl.lcp'procedure-structured-programing@cptIt,
* McsEngl.subroutine@cptIt,
* McsElln.ΔΙΑΔΙΚΑΣΙΑ@cptIt,
* McsElln.ΥΠΟΡΟΥΤΙΝΑ@cptIt,

_DESCRIPTION:
Οι περισσότερες γλώσσες δομημένου προγραμματισμού ή με χαρακτηριστικά δομημένου προγραμματισμού υποστηρίζουν δύο είδη υποπρογραμμάτων: διαδικασίες και συναρτήσεις.
[Αντωνάκος κα, "Ανάπτυξη εφαρμογών..." Γ' Λυκείου, 1999 α' έκδοση, 217]
ΔΙΑΔΙΚΑΣΙΑ είναι ένας τύπος υποπρογράμματος που μπορεί να εκτελεί όλες τις λειτουργίες ενός προγράμματος.
[Βακάλη κα, Ανάπτυξη Εφαρμογών γ' λυκείου, 1999 α' έκδοση, 211]

lcp'function-structured-programing

name::
* McsEngl.lcp'function-structured-programing@cptIt,

_DESCRIPTION:
Οι περισσότερες γλώσσες δομημένου προγραμματισμού ή με χαρακτηριστικά δομημένου προγραμματισμού υποστηρίζουν δύο είδη υποπρογραμμάτων: διαδικασίες και συναρτήσεις.
[Αντωνάκος κα, "Ανάπτυξη εφαρμογών..." Γ' Λυκείου, 1999 α' έκδοση, 217]
ΣΥΝΑΡΤΗΣΗ είναι ένας τύπος υποπρογράμματος που υπολογίζει και επιστρέφει μόνο μία τιμή με το όνομά της (όπως οι μαθηματικές).
[Βακάλη κα, Ανάπτυξη Εφαρμογών γ' λυκείου, 1999 α' έκδοση, 211]

lcpalgo'sut.function.OPERATOR (lcpop)

name::
* McsEngl.lcpalgo'sut.function.OPERATOR (lcpop)@cptIt,
* McsEngl.lcp'code.OPERATOR@cptIt,
* McsEngl.lcp'operator@cptIt,
* McsEngl.lcpop@cptIt,
* McsEngl.lcpoperator@cptIt,
* McsEngl.lngPgm'code.operator@cptIt,
* McsEngl.operator-programmingLanguage@cptIt,
* McsEngl.pgmlng'Operator@cptIt,
* McsEngl.pl'operator@cptIt,
* McsEngl.plopr@cptIt,
====== lagoGreek:
* McsElln.ΤΕΛΕΣΤΗΣ@cptIt,
* McsElln.τελεστής@cptIt,

_GENERIC:
* plfunction#ql:lngpgm'function#

_DEFINITION:
* Programming languages generally have a set of operators that are similar to operators in mathematics: they are somehow special functions. In addition to arithmetic operations they often perform boolean operations on truth values and string operations on strings of text. Relational operators are used to test two values, such as equality if one value is greater than another. Unlike functions, operators often provide the primitive operations of the language, their name consists of punctuation rather than alphanumeric characters, and they have special infix syntax and irregular parameter passing conventions. The exact terminology, however, varies from language to language.
[http://en.wikipedia.org/wiki/Operator_%28programming%29]
===
* An OPERATOR is a SYMBOL that operates on one or more ARGUMENTS to produce a result.
[Harold course 1997spring]

lcpop'associetivity

name::
* McsEngl.lcpop'associetivity@cptIt,

_DESCRIPTION:
In programming languages and mathematical notation, the associativity (or fixity) of an operator is a property that determines how operators of the same precedence are grouped in the absence of parentheses. If an operand is both preceded and followed by operators (for example, "^ 4 ^"), and those operators have equal precedence, then the operand may be used as input to two different operations (i.e. the two operations indicated by the two operators). The choice of which operations to apply the operand to, is determined by the "associativity" of the operators. Operators may be left-associative (meaning the operations are grouped from the left), right-associative (meaning the operations are grouped from the right) or non-associative (meaning there is no defined grouping). The associativity and precedence of an operator is a part of the definition of the programming language; different programming languages may have different associativity and precedence for the same type of operator.

Consider the expression a ~ b ~ c. If the operator ~ has left associativity, this expression would be interpreted as (a ~ b) ~ c. If the operator has right associativity, the expression would be interpreted as a ~ (b ~ c). If the operator is non-associative, the expression might be a syntax error, or it might have some special meaning. Some mathematical operators have inherent associativity. For example, subtraction and division, as used in conventional math notation, are inherently left-associative. Addition and multiplication, by contrast, have no inherent associativity, though most programming languages define an associativity for these operations as well.

Many programming language manuals provide a table of operator precedence and associativity; see, for example, the table for C and C++.

The concept of notational associativity described here is related to, but different from the mathematical associativity. An operation that is mathematically associative, by definition requires no notational associativity (e.g. addition has the associative property, therefore it does not have to be either left associative or right associative). An operation that is not mathematically associative, however, must be notationally left-, right-, or non-associative (e.g. subtraction does not have the associative property, therefore it must have notational associativity).
[http://en.wikipedia.org/wiki/Operator_associativity]

lcpop'name-of-specifics

name::
* McsEngl.lcpop'name-of-specifics@cptIt,

_DESCRIPTION:
Some programming languages restrict operator symbols to special characters like + or := while others allow also names like div (e.g. Pascal).
[http://en.wikipedia.org/wiki/Operator_%28programming%29]

lcpop'operand

name::
* McsEngl.lcpop'operand@cptIt,
* McsEngl.operand.pgmlng@cptIt,

lcpop'overloading

name::
* McsEngl.lcpop'overloading@cptIt,

_DESCRIPTION:
Many languages only allow operators to be used for built-in types, but others allow existing operators to be used for user-defined types; this is known as operator overloading.
[http://en.wikipedia.org/wiki/Operator_%28programming%29]

lcpop'precedence

name::
* McsEngl.lcpop'precedence@cptIt,

_DESCRIPTION:
In mathematics and computer programming, the order of operations (sometimes called operator precedence) is a rule used to clarify which procedures should be performed first in a given mathematical expression.

For example, in mathematics and most computer languages multiplication is done before addition; in the expression 2 + 3 Χ 4, the answer is 14. Brackets, "( and ), { and }, or [ and ]", which have their own rules, may be used to avoid confusion, thus the preceding expression may also be rendered 2 + (3 Χ 4), but the brackets are unnecessary as multiplication still has precedence without them.

Since the introduction of modern algebraic notation, multiplication has taken precedence over addition.[1] Thus 3 + 4 Χ 5 = 4 Χ 5 + 3 = 23. When exponents were first introduced in the 16th and 17th centuries, exponents took precedence over both addition and multiplication and could be placed only as a superscript to the right of their base. Thus 3 + 52 = 28 and 3 Χ 52 = 75. To change the order of operations, originally a vinculum (an overline or underline) was used. Today, parentheses or brackets are used to explicitly denote precedence by grouping parts of an expression that should be evaluated first. Thus, to force addition to precede multiplication, we write (2 + 3) Χ 4 = 20, and to force addition to precede exponentiation, we write (3 + 5)2 = 64.
[http://en.wikipedia.org/wiki/Order_of_operations]

SPECIFIC

name::
* McsEngl.lcpop.specific@cptIt,

_SPECIFIC:
* builtin-operator##
* builtinN-operator##
* scope-resolution-operator##

lcpop.ASSIGNMENT

name::
* McsEngl.lcpop.ASSIGNMENT@cptIt,

:=
International Algebraic Language and ALGOL (1958 and 1960) therefore introduced ":=" for assignment, leaving the standard "=" available for equality, a convention followed by CPL, Algol W, BCPL, Simula, Algol 68, SETL, Pascal, Smalltalk, Modula2, Ada, Standard ML, OCaml, Eiffel, Delphi, Oberon, Dylan, VHDL, and several other languages.
[http://en.wikipedia.org/wiki/Relational_operator]

lcpop.BUILTIN

name::
* McsEngl.lcpop.BUILTIN@cptIt,

lcpop.BUILTIN.NO (custom)

name::
* McsEngl.lcpop.BUILTIN.NO (custom)@cptIt,

_DESCRIPTION:
Languages usually define a set of built-in operators, and in some cases allow user-defined operators.
...
The specification of a language will specify the syntax the operators it supports, while languages such as Prolog that support programmer-defined operators require that the syntax be defined by the programmer.
[http://en.wikipedia.org/wiki/Operator_%28programming%29]

lcpop.conditional

name::
* McsEngl.lcpop.conditional@cptIt,

Conditional operators (?:) are not supported, instead you should use a single line if/else statement.
[http://arcturo.github.io/library/coffeescript/02_syntax.html]

_CODE:
IF sentence-condition THEN sentence1 ELSE sentence2
sentence-condition ? sentence1 : sentence2

lcpop.ELEMENT-ACCESS-OPERATOR (.)

name::
* McsEngl.lcpop.ELEMENT-ACCESS-OPERATOR (.)@cptIt,
* McsEngl.part-access-operator@cptIt,

lcpop.operand.BINARY (2)

name::
* McsEngl.lcpop.operand.BINARY (2)@cptIt,

lcpop.operand.TERNARY (3)

name::
* McsEngl.lcpop.operand.TERNARY (3)@cptIt,
* McsEngl.pgmOpr.ternary@cptIt,
* McsEngl.ternary-operator@cptIt,

_DESCRIPTION:
In mathematics, a ternary operation is an n-ary operation with n = 3. A ternary operation on a set A takes any given three elements of A and combines them to form a single element of A. An example of a ternary operation is the product in a heap.

In computer science, a ternary operator (sometimes incorrectly called a tertiary operator) is an operator that takes three arguments. The arguments and result can be of different types. Many programming languages that use C-like syntax feature a ternary operator, ?:, which defines a conditional expression. Since this operator is often the only existing ternary operator in the language, it is sometimes simply referred to as "the ternary operator". In some languages, this operator is referred to as "the conditional operator".
[http://en.wikipedia.org/wiki/Ternary_operator]

lcpop.operand.UNARY (1)

name::
* McsEngl.lcpop.operand.UNARY (1)@cptIt,

_SPECIFIC:
* decrement##
* increment##

lcpop.RELATIONAL

name::
* McsEngl.lcpop.RELATIONAL@cptIt,
* McsEngl.relational-operator@cptIt,

_SPECIFIC:
* equals_to
* equals_to.no
* greater_than
* greater_than_or_equal_to
* less_than_or_equal_to

lcpop.SCOPE-RESOLUTION-OPERATOR

_CREATED: {2014-01-14}

name::
* McsEngl.lcpop.SCOPE-RESOLUTION-OPERATOR@cptIt,
* McsEngl.scope-resolution-operator@cptIt,

_DESCRIPTION:
In computer programming, scope is an enclosing context where values and expressions are associated. The scope resolution operator helps to identify and specify the context to which an identifier refers, particularly by specifying a namespace. The specific uses vary across different programming languages with the notions of scoping. In many languages the scope resolution operator is written ::.
In some languages, notably those influenced by Modula-3, including Python and Go, modules are objects, and scope resolution within modules is a special case of usual object member access, so the usual method operator . is used for scope resolution. Other languages, notably C++ and Ruby, feature both scope resolution and method access, which interact in various ways; see examples below.
[http://en.wikipedia.org/wiki/Scope_resolution_operator]

lcpop.syntax.INFIX

name::
* McsEngl.lcpop.syntax.INFIX@cptIt,

lcpop.syntax.POSTFIX

name::
* McsEngl.lcpop.syntax.POSTFIX@cptIt,

lcpop.syntax.PREFIX

name::
* McsEngl.lcpop.syntax.PREFIX@cptIt,

lcpalgo'sut.COLLECTION

name::
* McsEngl.lcpalgo'sut.COLLECTION@cptIt,
* McsEngl.lcp'collection@cptIt,
* McsEngl.lcpcollection@cptIt,

_DESCRIPTION:
A collection of archetypes.
[hmnSngo.2014-02-20]

lcpcollection'code

_CREATED: {2014-02-06}

name::
* McsEngl.lcpcollection'code@cptIt,
* McsEngl.lcp'archetype.container@cptIt,
* McsEngl.lcp'collection-of-code@cptIt,

_DESCRIPTION:
A collection of CODE on which we give a name.
[hmnSngo.2014-02-06]

SPECIFIC

_SPECIFIC:
* element 1 (variable)##
* element 2
* element 3
* element namevalue (object, class)
* element unique (set)
* ordered (array)#linkL#
* orderedNo

lcpalgo'sut.collection.ARRAY

name::
* McsEngl.lcpalgo'sut.collection.ARRAY@cptIt,
* McsEngl.lcp'array@cptIt,
* McsEngl.lcparray@cptIt,
* McsEngl.plvariable.ARRAY@cptIt,
* McsEngl.lcpa@cptIt,
* McsEngl.arr@cptIt,

_GENERIC:
* lcp-collection#ql:lcp'archetype.collection#

_DEFINITION:
Array an ORDERED collection of archetypes.
[hmnSngo.2014-03-08]
===
Arrays are a series of variables of the same type placed consecutively in memory that can be individually referenced by adding an index to a unique name.

lcparray'code

name::
* McsEngl.lcparray'code@cptIt,

_CODE.LJS:
> var arr =[n1, 2, {}]
> arr
[1, 2, Object]
===
> var arr=[1,"2"]
undefined
> arr[0]
1
> arr[1]
"2"

_CODE.PERL:
my @mixed = ("camel", 42, 1.23);

lcparray'doing

name::
* McsEngl.lcparray'doing@cptIt,

lcparray'doing.CONCATENATING

name::
* McsEngl.lcparray'doing.CONCATENATING@cptIt,

_CODE.LCS:
array1 = [1, 2, 3]
array2 = [4, 5, 6]
array3 = array1.concat array2
# => [1, 2, 3, 4, 5, 6]
[http://coffeescriptcookbook.com/chapters/arrays/concatenating-arrays]

lcpalgo'sut.collection.CLASS

name::
* McsEngl.lcpalgo'sut.collection.CLASS@cptIt,
* McsEngl.lcp'archetype.collection.variable@cptIt,
* McsEngl.lcp'associative-array@cptIt,
* McsEngl.lcp'class@cptIt,
* McsEngl.lcp'map@cptIt,
* McsEngl.lcp'name-value-pair-collection@cptIt,
* McsEngl.lcp'object@cptIt,
* McsEngl.lcp'variable-collection@cptIt,
* McsEngl.lcpclass@cptIt, {2014-02-22}
* McsEngl.lcpc@cptIt,
* McsEngl.lcpcls@cptIt,

_DESCRIPTION:
Lcp-class is a COLLECTION of named-archetypes (= variables) that INHERITES its ELEMENTS.
[hkmn-2014-02-22]

lcpclass'code

_CREATED: {2014-02-06}

name::
* McsEngl.lcpclass'code@cptIt,
* McsEngl.lcp'code.NAMECODES-(object; class)@cptIt,
* McsEngl.lcp'code.atomNo.NAMECODES@cptIt, {2014-02-06}
* McsEngl.lcp'code.atomNo.NAMESVALUES@cptIt,
* McsEngl.lcp'namecodes@cptIt, {2014-02-06}
* McsEngl.lcp'namecode-pairs@cptIt, {2014-02-06}
* McsEngl.lcp'namesvalues@cptIt, {2014-02-06}

_GENERIC:
* code-collection#ql:lcp'collection_of_code#

_SPECIFIC:
* definition-statement
* element-accessing-statement
* instance-creation-statement

lcpclass'element

name::
* McsEngl.lcpclass'element@cptIt,
* McsEngl.lcpclass'attribute@cptIt,
* McsEngl.lcpclass'field@cptIt,
* McsEngl.lcpclass'member@cptIt,
* McsEngl.lcpclass'property@cptIt,
* McsEngl.lcp'field@cptIt,
* McsEngl.lcp'property@cptIt,

lcpclass.INSTANCE

name::
* McsEngl.lcpclass.INSTANCE@cptIt,
* McsEngl.lcp'object@cptIt,

lcpalgo'sut.collection.INTERFACE

name::
* McsEngl.lcpalgo'sut.collection.INTERFACE@cptIt,
* McsEngl.lcp'interface@cptIt,
* McsEngl.lcpinterface@cptIt,
* McsEngl.lcpi@cptIt, {2014-05-29}

lcpalgo'sut.collection.OBJECT (lcpo)

name::
* McsEngl.lcpalgo'sut.collection.OBJECT (lcpo)@cptIt,
* McsEngl.lcp'object@cptIt,
* McsEngl.lcpalgo'sut.object@cptIt,
* McsEngl.lcpo@cptIt,
* McsEngl.lcpobt@cptIt,

lcpalgo'sut.COLLECTION.NO

name::
* McsEngl.lcpalgo'sut.COLLECTION.NO@cptIt,

_SPECIFIC:
* boolean##
* number##
* string##

lcpalgo'sut.CONCEPT

_CREATED: {2014-01-26}

name::
* McsEngl.lcpalgo'sut.CONCEPT@cptIt,
* McsEngl.computer-concept@cptIt, {2014-01-26}
* McsEngl.lcpk@cptIt, {2014-05-29}
* McsEngl.cmrcpt@cptIt, {2014-01-26}

_DESCRIPTION:
The HUMAN-INFORMATION a computer manages is comprised of:
- strings of a human-language.
- numbers
- digital images
- digital sounds
- structures of strings|numbers (arrays, trees, maps)
- algorithms of 'values'
- doings|relations on strings and numbers.
- doings|relations on bits.
- computer-concepts.
[hmnSngo.2014-01-26]

lcpalgo'sut.CONDITION

name::
* McsEngl.lcpalgo'sut.CONDITION@cptIt,

lcpalgo'BOOLEAN

_CREATED: {2014-03-16}

name::
* McsEngl.lcpalgo'BOOLEAN@cptIt,
* McsEngl.lcp'boolean@cptIt,
* McsEngl.lcpbln@cptIt, {2014-03-16}

_SPECIFIC:
* false
* true

lcpalgo'BOOLEAN-FUNCTION

name::
* McsEngl.lcpalgo'BOOLEAN-FUNCTION@cptIt,

lcpalgo'BOOLEAN-STATEMENT

_CREATED: {2014-04-06}

name::
* McsEngl.lcpalgo'BOOLEAN-STATEMENT@cptIt,
* McsEngl.lcpblnstatement@cptIt,

lcpalgo'sut.INFORMATION

name::
* McsEngl.lcpalgo'sut.INFORMATION@cptIt,

SPECIFIC

_SPECIFIC:
* audio##
* image##
* number##
* string##

lcpalgo'sut.NAME-VALUE-PAIR (lcpv)

_CREATED: {2014-02-20}

name::
* McsEngl.lcpalgo'sut.NAME-VALUE-PAIR (lcpv)@cptIt,
* McsEngl.lcp'algo.name-value-pair@cptIt,
* McsEngl.lcp'algo.variable@cptIt,
* McsEngl.lcp'named-sut@cptIt,
* McsEngl.lcp'name-binding@cptIt, [wikipedia] {2014-06-17}
* McsEngl.lcp'variable@cptIt,
* McsEngl.lcpv@cptIt,
* McsEngl.lcpvariable@cptIt,
* McsEngl.named-semantic-unit@cptIt, {2016-01-06}

_DESCRIPTION:
In programming languages, name binding is the association of entities (data and/or code) with identifiers.[1] An identifier bound to an object is said to reference that object. Machine languages have no built-in notion of identifiers, but name-object bindings as a service and notation for the programmer is implemented by programming languages. Binding is intimately connected with scoping, as scope determines which names bind to which objects – at which locations in the program code (lexically) and in which one of the possible execution paths (temporally).
Use of an identifier id in a context that establishes a binding for id is called a binding (or defining) occurrence. In all other occurrences (e.g., in expressions, assignments, and subprogram calls), an identifier stands for what it is bound to; such occurrences are called applied occurrences.
[http://en.wikipedia.org/wiki/Name_binding] 2014-06-17

lcparchonamed'code

name::
* McsEngl.lcparchonamed'code@cptIt,
* McsEngl.data-container-programming-language@cptIt, {2011-08-31}
* McsEngl.data-storage-programming-language@cptIt,
* McsEngl.field@cptIt, [inside classes, objects]
* McsEngl.langPgm'variable@cptIt, {2014-02-04}
* McsEngl.lcp'code.atomNo.NAMECODE@cptIt, {2014-01-06}
* McsEngl.lcp'code.atomNo.NAMEVALUE@cptIt,
* McsEngl.lcp'code.atomNo.VARIABLE@cptIt,
* McsEngl.lcp'code.NAMECODE@cptIt,
* McsEngl.lcp'name-code-pair@cptIt, {2014-02-06}
* McsEngl.lcp'namecode@cptIt, {2014-02-06}
* McsEngl.lcp'namevalue@cptIt, {2014-02-06}
* McsEngl.lcp'variable@cptIt,
* McsEngl.lp'variable@cptIt, {2014-02-04}
* McsEngl.namevalue@cptIt,
* McsEngl.mdp'Variable@cptIt,
* McsEngl.pl'variable@cptIt,
* McsEngl.pgmlng'variable@cptIt,
* McsEngl.variable@cptIt,
* McsEngl.variable-pl@cptIt, {2011-09-25}
* McsEngl.variable-programming-language@cptIt,
* McsEngl.plvariable@cptIt, {2014-01-17}

_GENERIC:
* code-structure#ql:lngpgm'code.atom.no#

_DEFINITION:
Variable is a name value association.
[hmnSngo.2014-01-08]
===
Variable is CODE (value) with a NAME and a storage-location.
[hmnSngo.2013-10-22]
===
* VARIABLE is a storage-location for INSTANCES of data-types#ql:cl'data'type# or POINTERS to data-types. In some languages a variable holds a unique data-type (we say they are strong-typed-languages), in others a variable can hold diferent data-types.
[hmnSngo.2002-04-30]
===
* Variables are typed storage locations. A variable of a primitive type holds a value of that exact primitive type. A variable of a class type can hold a null reference or a reference to an object whose type is that class type or any subclass of that class type. A variable of an interface type can hold a null reference or a reference to an instance of any class that implements the interface. A variable of an array type can hold a null reference or a reference to an array. A variable of class type Object can hold a null reference or a reference to any object, whether class instance or array.
[java spec 2.0, 2000]
===
A variable is a storage location.
===
There are 3 aspects to variables that need to be discussed
- Declaration Telling the system we want to use a variable with a specific name that can hold certain kinds of value.
- Assignment Telling the system we want to store a particular value in a variable.
- Accessing the value stored in a variable
===
In computer programming, a variable is a storage location and an associated symbolic name (an identifier) which contains some known or unknown quantity or information, a value. The variable name is the usual way to reference the stored value; this separation of name and content allows the name to be used independently of the exact information it represents. The identifier in computer source code can be bound to a value during run time, and the value of the variable may thus change during the course of program execution. Variables in programming may not directly correspond to the concept of variables in mathematics. The value of a computing variable is not necessarily part of an equation or formula as in mathematics. In computing, a variable may be employed in a repetitive process — assigned a value in one place, then used elsewhere, then reassigned a new value and used again in the same way (see iteration). Variables in computer programming are frequently given long names to make them relatively descriptive of their use, whereas variables in mathematics often have terse, one- or two-character names for brevity in transcription and manipulation.

A variable storage location may be referred by several different identifiers, a situation known as aliasing. Assigning a value to the variable using one of the identifiers will change the value that can be accessed through the other identifiers.

Compilers have to replace variables' symbolic names with the actual locations of the data. While a variable's name, type, and location often remain fixed, the data stored in the location may be changed during program execution.
[http://en.wikipedia.org/wiki/Variable_(computer_science)]
===
A variable is a symbolic name for an unspecified value in an expression or statement. A variable can be used in any situation where the data that it refers to can be used.
[http://homepages.gac.edu/~hvidsten/courses/FTS2012/javascriptRef.htm]

lcparchonamed'doing.declaration

name::
* McsEngl.lcparchonamed'doing.declaration@cptIt,

_Position:
An important difference between the C and C++ languages, is that in C++ we can declare variables anywhere in the source code, even between two executable sentences, and not only at the beginning of a block of instructions, like happens in C.
===
Declaration vs Definition: In Summary
A declaration provides basic attributes of a symbol: its type and its name. A definition provides all of the details of that symbol--if it's a function, what it does; if it's a class, what fields and methods it has; if it's a variable, where that variable is stored. Often, the compiler only needs to have a declaration for something in order to compile a file into an object file, expecting that the linker can find the definition from another file. If no source file ever defines a symbol, but it is declared, you will get errors at link time complaining about undefined symbols.
[http://www.cprogramming.com/declare_vs_define.html]

lcparchonamed'doing.initialization

name::
* McsEngl.lcparchonamed'doing.initialization@cptIt,

_DESCRIPTION:
When declaring a local variable, its value is undetermined by default. But you may want that a variable stores a concrete value since the moment in which it is declared. In order to do that, you have to append an equal sign followed by the value wanted to the variable declaration: type identifier = initial_value ; For example, if we want to declare an int variable called a that contains the value 0 since the moment in which it is declared, we could write:
int a = 0;
This way of initializating variables is known as c-like.

lcparchonamed'name

name::
* McsEngl.lcparchonamed'name@cptIt,
* McsEngl.lcparchoname@cptIt, {2014-06-17}
* McsEngl.pgmlng'variable'IDENTIFIER@cptIt,

lcparchoname'colliding

name::
* McsEngl.lcparchoname'colliding@cptIt,
* McsEngl.lcpachoname'clash@cptIt,
* McsEngl.lcparchoname'collision@cptIt,

lcparchoname'naming-convention

name::
* McsEngl.lcparchoname'naming-convention@cptIt,

lcparchonamed'namespace

_CREATED: {2014-06-19}

name::
* McsEngl.lcparchonamed'namespace@cptIt,
* McsEngl.lcparchnamespace@cptIt, {2014-06-19}

_DESCRIPTION:
As a rule, names in a namespace cannot have more than one meaning; that is, different meanings cannot share the same name in the same namespace. A namespace is also called a context, because the same name in different namespaces can have different meanings, each one appropriate for its namespace.
[http://en.wikipedia.org/wiki/Namespaces#In_programming_languages]

lcparchonamespace.LOCAL-GLOBAL-NAME

name::
* McsEngl.lcparchonamespace.LOCAL-GLOBAL-NAME@cptIt,

_DESCRIPTION:
In the Java programming language, identifiers that appear in namespaces have a short (local) name and a unique long "qualified" name for use outside the namespace.
[http://en.wikipedia.org/wiki/Namespaces#In_programming_languages]

lcparchonamespace.NAME

_CREATED: {2014-06-17}

name::
* McsEngl.lcparchonamespace.NAME@cptIt,
* McsEngl.lcparchonamed'namespace@cptIt,
* McsEngl.lcparchonamed'space-of-name@cptIt,
* McsEngl.lcpnamespace@cptIt,
* McsEngl.namespace.lcp@cptIt,
* McsEngl.space-of-name@cptIt,

_DESCRIPTION:
What's a namespace? I hear you ask. Well, it's kinda hard to explain. Not because they are especially complicated, but because every language does them differently. The concept is pretty straightforward, a namespace is a space or region, within a program, where a name (variable, class etc) is valid. We actually use this idea in everyday life. Suppose you work in a big company and there is a colleague called Joe. In the accounts department there is another guy called Joe who you see occasionally but not often. In that case you refer to your colleague as "Joe" and the other one as "Joe in Accounts". You also have a colleague called Susan and there is another Susan in Engineering with whom you work closely. When referring to them you might say "Our Susan" or "Susan from Engineering". Do you see how you use the department name as a qualifier? That's what namespaces do in a program, they tell both programmers and the translator which of several identical names is being referred to.

They came about because early programming languages (like BASIC) only had Global Variables, that is, ones which could be seen throughout the program - even inside functions. This made maintenance of large programs difficult since it was easy for one bit of a program to modify a variable without other parts of the program realizing it - this was called a side-effect. To get round this, later languages (including modern BASICs) introduced the concept of namespaces. (C++ has taken this to extremes by allowing the programmer to create their own namespaces anywhere within a program. This is useful for library creators who might want to keep their function names unique when mixed with libraries provided by another supplier)

Another term used to describe a namespace is scope. The scope of a name is the extent of a program whereby that name can be unambiguously used, for example inside a function or a module. A name's namespace is exactly the same as it's scope. There are a few very subtle differences between the terms but only a Computer Scientist pedant would argue with you, and for our purposes namespace and scope are identical.
[http://www.alan-g.me.uk/tutor/tutname.htm]
===
In general, a namespace is a container for a set of identifiers (also known as symbols, names).[1][2] Namespaces provide a level of indirection to specific identifiers, thus making it possible to distinguish between identifiers with the same exact name. For example, a surname could be thought of as a namespace that makes it possible to distinguish people who have the same first name. In computer programming, namespaces are typically employed for the purpose of grouping symbols and identifiers around a particular functionality.
[http://en.wikipedia.org/wiki/Namespaces]

lcparchonamespace'scope

name::
* McsEngl.lcparchonamespace'scope@cptIt,
* McsEngl.mdp'variable'Scope@cptIt,
* McsEngl.pl'variable'lifetime@cptIt,
* McsEngl.scope-variable@cptIt,
* McsEngl.variable'scope@cptIt,

_DESCRIPTION:
Variables are scoped at the function level in javascript. This is different to what you might be used to in a language like C# or Java where the variables are scoped to the block. What this means is if you declare a variable inside a loop or an if statement, it will be available to the entire function.
[http://helephant.com/2008/08/23/javascript-anonymous-functions//]

_SPECIFIC:
local or global variables.

lcparchonamespace.NAMES

_CREATED: {2014-06-17}

name::
* McsEngl.lcparchonamespace.NAMES@cptIt,
* McsEngl.lcparchonamed'names-of-space@cptIt,
* McsEngl.lcparchonamed'space-of-names@cptIt,
* McsEngl.lcpnames-space@cptIt, {2014-06-17}
* McsEngl.namesspace.lcp@cptIt, {2014-06-17}
* McsEngl.names-space.lcp@cptIt,

_DESCRIPTION:
Names_space is the unambigous NAMES in a space (node) in archetype.
[hmnSngo.2014-06-17]
===
Things to Remember
Scoping and Namespaces are different terms for the same thing.
The concepts are the same in every language but the precise rules can vary.
Python has 3 scopes - file (global), function (local) and built-in.
VBScript and JavaScript have 2 scopes - file (global) and function (local).
[http://www.alan-g.me.uk/tutor/tutname.htm]

lcparchonamed'resource

name::
* McsEngl.lcparchonamed'resource@cptIt,

_ADDRESS.WPG:
* http://rosettacode.org/wiki/Variables,

lcparchonamed'storage-location

name::
* McsEngl.lcparchonamed'storage-location@cptIt,

_DESCRIPTION:
A variable storage location may be referred by several different identifiers, a situation known as aliasing. Assigning a value to the variable using one of the identifiers will change the value that can be accessed through the other identifiers.
[http://en.wikipedia.org/wiki/Variable_(computer_science)]

lcparchonamed'value

name::
* McsEngl.lcparchonamed'value@cptIt,
* McsEngl.lcp'code.VALUE@cptIt,
* McsEngl.lcpvalue@cptIt,
* McsEngl.pgmlng'value@cptIt,
* McsEngl.value-of-variable@cptIt,
* McsEngl.variable'content@cptIt,
* McsEngl.pgmvalue@cptIt, {2014-01-14}

_WHOLE:
* variable#ql:pgmlng'variable#

_DESCRIPTION:
The CODE associated with a name.
[hmnSngo.2014-01-08]

lcparchonamed'type

name::
* McsEngl.lcparchonamed'type@cptIt,
* McsEngl.lcptype@cptIt,
* McsEngl.mdp'type@cptIt,

_DESCRIPTION:
The kind (type) of data a variable holds.
===
I can think of one language, Tcl, where everything is a string, but most languages have many types.
[Andrew Cooke, Introduction to Programming Languages, 1999-10-05]

pgmvalue'type-system#ql:type-system.pgmlng#

name::
* McsEngl.pgmvalue'type-system@cptIt,

SPECIFIC

name::
* McsEngl.plvariable.specific@cptIt,

_SPECIFIC:
* processing-value##
* processingNo-value##

lcparchonamed.CHANGEABLE

name::
* McsEngl.lcparchonamed.CHANGEABLE@cptIt,
* McsEngl.lcp'smsnode.unit.CHANGEABLE@cptIt,
* McsEngl.lcp'changeable-arhetype@cptIt,
* McsEngl.lcp'mutable-archetype@cptIt,
* McsEngl.lcp'constant@cptIt,
* McsEngl.lcp'changeable-named-archetype@cptIt,

_DESCRIPTION:
The name 'variable' began from changeable-named-archetypes and THEN used to name ALL named-archetypes.
[hmnSngo.2014-02-23]

lcparchonamed.CHANGEABLE.NO

name::
* McsEngl.lcparchonamed.CHANGEABLE.NO@cptIt,
* McsEngl.lcp'smsnode.unit.CHANGEABLE.NO@cptIt,
* McsEngl.lcp'changeableNo-arhetype@cptIt,
* McsEngl.lcp'immutable-archetype@cptIt,
* McsEngl.lcp'mutableNo-archetype@cptIt,
* McsEngl.lcp'constant@cptIt,
* McsEngl.lcp'non-changeable-named-archetype@cptIt,

_DESCRIPTION:
A constant is a named value, like a variable, except you can't change it.
[http://in.answers.yahoo.com/question/index?qid=20100114202307AAFsYFB]

_CODE.DART:
final name = 'Bob';

_SPECIFIC:
* constanct##
* number##

lcparchonamed.DATA#ql:pgmlng'code.data#

name::
* McsEngl.lcparchonamed.DATA@cptIt,

lcparchonamed.DATA.NO

_CREATED: {2013-12-20}

name::
* McsEngl.lcparchonamed.DATA.NO@cptIt,

lcparchonamed.DEFINED

name::
* McsEngl.lcparchonamed.DEFINED@cptIt,
* McsEngl.lcp'archonode.DEFINED@cptIt,
* McsEngl.lcp'defined-archonode@cptIt,

lcparchonamed.DEFINED.NO

name::
* McsEngl.lcparchonamed.DEFINED.NO@cptIt,
* McsEngl.lcp'archonode.DEFINED.NO@cptIt,
* McsEngl.lcp'definedNo-archonode@cptIt,
* McsEngl.lcp'undefined-archonode@cptIt,
* McsEngl.lcpundefined@cptIt,

_DESCRIPTION:
UNDEFINED I call:
1) uninitialized name.
2) use of an un-registered name.
[hmnSngo.2014-08-22]

code

name::
* McsEngl.lcp'atom.UNDEFINED@cptIt,
* McsEngl.lcp'undefined@cptIt,
* McsEngl.pl'undefined@cptIt,
* McsEngl.pgmlng'undefined@cptIt,

_DESCRIPTION:
'undefined' in JavaScript DENOTES an UNITIALIZED variable (= a created variable without any value). Dart by default initializes the created variables with the 'null' value and does not have the 'undefined' value!!!
[hmnSngo.2014-02-06]

_CODE.LJS:
Checking for undefined
if (typeof isUndefined === 'undefined') {
console.log('undefined');
}
[https://www.dartlang.org/docs/synonyms/]

_CODE.DART:
Checking for undefined
// Dart does not have a concept of undefined
[https://www.dartlang.org/docs/synonyms/]

lcparchonamed.FIRST-CLASS

_CREATED: {2014-01-13}

name::
* McsEngl.lcparchonamed.FIRST-CLASS@cptIt,
* McsEngl.first-class-entity@cptIt,
* McsEngl.first-class-citizen@cptIt,
* McsEngl.first-class-object@cptIt,
* McsEngl.first-class-value@cptIt,

_DESCRIPTION:
In programming language design, a first-class citizen (also object, entity, or value) in a given programming language is an entity which supports all the operations generally available to other entities. These operations typically include being passed as a parameter, returned from a function, and assigned to a variable.[1]
[http://en.wikipedia.org/wiki/First-class_object]

lcparchonamed.REFERENCE

name::
* McsEngl.lcparchonamed.REFERENCE@cptIt,

_DESCRIPTION:
* Value types differ from reference types in that variables of the value types directly contain their data, whereas variables of the reference types store references to objects. With reference types, it is possible for two variables to reference the same object, and thus possible for operations on one variable to affect the object referenced by the other variable. With value types, the variables each have their own copy of the data, and it is not possible for operations on one to affect the other.
[C# specification]

lcparchonamed.REFERENCE.NO

name::
* McsEngl.lcparchonamed.REFERENCE.NO@cptIt,

_DESCRIPTION:
* Value types differ from reference types in that variables of the value types directly contain their data, whereas variables of the reference types store references to objects. With reference types, it is possible for two variables to reference the same object, and thus possible for operations on one variable to affect the object referenced by the other variable. With value types, the variables each have their own copy of the data, and it is not possible for operations on one to affect the other.
[C# specification]

lcparchonamed.TYPE

_CREATED: {2016-01-06}

name::
* McsEngl.lcparchonamed.TYPE@cptIt,
* McsEngl.typevariable@cptIt,
* McsEngl.type-variable@cptIt,

_DESCRIPTION:
A-variable THE-NAME of which denotes its value.
[hmnSngo.2016-01-06]

lcpalgo'sut.NAME

_CREATED: {2014-01-08}

name::
* McsEngl.lcpalgo'sut.NAME@cptIt,
* McsEngl.conceptIt248.9,
* McsEngl.lngPgm'code.name@cptIt,
* McsEngl.pgmlng'codename@cptIt,
* McsEngl.pgmlng'name.code@cptIt,
* McsEngl.pgmlng'reference@cptIt, {2014-01-15}
* McsEngl.plname@cptIt,

_DESCRIPTION:
the identifier, a name that refers to some entity in the program,
[http://en.wikipedia.org/wiki/Scope_(computer_science)]

plname'doing

name::
* McsEngl.plname'doing@cptIt,

plname'doing.RENAMING

name::
* McsEngl.plname'doing.RENAMING@cptIt,

plname'doing.RESOLUTION

name::
* McsEngl.plname'doing.RESOLUTION@cptIt,
* McsEngl.pgmname-resolution@cptIt,

_DESCRIPTION:
Name resolution can refer to any process that further identifies an object or entity from an associated, not-necessarily-unique alphanumeric name:

In computer systems, it refers to the retrieval of the underlying numeric values corresponding to computer hostnames, account user names, group names, and other named entities;
In programming languages, it refers to the resolution of the tokens within program expressions to the intended program components;
In semantics and text extraction, it refers to the determination of the specific person, actor, or object a particular use of a name refers to.
[http://en.wikipedia.org/wiki/Name_resolution]

plname'resolution.DYNAMIC

name::
* McsEngl.plname'resolution.DYNAMIC@cptIt,

_DESCRIPTION:
In programming languages, name resolution can be performed either at compile time or at runtime. The former is called static name resolution, the latter is called dynamic name resolution.
[http://en.wikipedia.org/wiki/Name_resolution]

plname'resolution.STATIC

name::
* McsEngl.plname'resolution.STATIC@cptIt,

_DESCRIPTION:
In programming languages, name resolution can be performed either at compile time or at runtime. The former is called static name resolution, the latter is called dynamic name resolution.
[http://en.wikipedia.org/wiki/Name_resolution]

plname'doing.RESOLUTION.REVERSE

name::
* McsEngl.plname'doing.RESOLUTION.REVERSE@cptIt,
* McsEngl.reverse-pgmname-resolution@cptIt,

_DESCRIPTION:
The process of finding the name given an entity.
[hmnSngo.2014-01-15]

plname'entity

name::
* McsEngl.plname'entity@cptIt,

_SPECIFIC:
* api
* directory-entity
* file-entity
* filein-entity
* library
* internal
* internalNo
* module
* value

plname'scope

_CREATED: {2014-01-15}

name::
* McsEngl.plname'scope@cptIt,
* McsEngl.pgmlng'codename'scope@cptIt,

_DESCRIPTION:
In computer programming, the scope of an identifier is the part of a computer program where the identifier, a name that refers to some entity in the program, can be used to find the referred entity. Thus the scope is the context within the program in which an identifier is valid and can be resolved to find the entity associated with the identifier – when the entity is visible. Most commonly "scope" refers to when a given name can refer to a given variable or function – when a declaration has effect – but can also apply to other entities, such as types (or classes), functions, and labels. Scope is an important component of name resolution, which is in turn fundamental to language semantics. Name resolution (including scope) varies between programming languages, and within a programming language, varies by type of entity. Together with namespaces, scoping rules are crucial in modular programming, so a change in one part of the program does not break an unrelated part.

A fundamental distinction in scoping is what "context" means – whether name resolution depends on the location in the source code (lexical scope, static scope, which depends on the lexical context) or depends on the program state when the name is encountered (dynamic scope, which depends on the execution context or calling context). Lexical resolution can be determined at compile time, and is also known as early binding, while dynamic resolution can in general only be determined at run time, and thus is known as late binding. Most modern languages use lexical scoping for variables and functions, though de facto dynamic scoping is common in macro languages, which do not directly do name resolution.

In object-oriented programming, dynamic dispatch selects an object method at runtime, though whether the actual name binding is done at compile time or run time depends on the language. Further, even in lexically scoped languages, scope for closures can be confusing to the uninitiated, as these depend on the lexical context where the closure is defined, not where it is called.
[http://en.wikipedia.org/wiki/Scope_(computer_science)]

SPECIFIC

name::
* McsEngl.plname.specific@cptIt,

_SPECIFIC:
* custom-name#linkL#
* customNo-name#linkL#
* unique-name
* uniqueNo-name

lcpalgo.name.CUSTOM (identifier)

name::
* McsEngl.lcpalgo.name.CUSTOM (identifier)@cptIt,
* McsEngl.identifier-of-computer-language@cptIt,
* McsEngl.name.custom.pgmlng@cptIt,
* McsEngl.pgmlng'code.name.identifier@cptIt,
* McsEngl.pgmlng'custom-name@cptIt,
* McsEngl.pgmlng'identifier@cptIt,
* McsEngl.pgmlng'name.custom@cptIt,
* McsEngl.pl'identifier@cptIt,

_GENERIC:
* token#ql:pgmlng'token#

_DEFINITION:
In computer languages, identifiers are textual tokens (also called symbols) which name language entities. Some of the kinds of entities an identifier might denote include variables, types, labels, subroutines, and packages.
[http://en.wikipedia.org/wiki/Identifier]
===
Identifiers are the NAMES of variables, methods, classes, packages and interfaces. Unlike literals they are not the things themselves, just ways of referring to them. In the HelloWorld program, HelloWorld, String, args, main and System.out.println are identifiers.
Identifiers must be composed of
- letters,
- numbers,
- the underscore _ and
- the dollar sign $.
Identifiers may only begin with a letter, the underscore or a dollar sign.
[Harold course 1997spring]

lcp'identifier'binding

name::
* McsEngl.lcp'identifier'binding@cptIt,
* McsEngl.name-binding.pgmlng@cptIt,
* McsEngl.name-resolution.pgmlng@cptIt,
* McsEngl.pgmlng'binding@cptIt,
* McsEngl.pgmlng'name-binding@cptIt,
* McsEngl.pgmlng'name-resolution@cptIt,

_DESCRIPTION:
Determining which entity an identifier refers to is known as name resolution or name binding (particularly in object-oriented programming), and varies between languages. Given an identifier, the language (properly, the compiler or interpreter) checks all entities that are in scope for matches; in case of ambiguity (two entities with the same name, such as a global and local variable with the same name), the name resolution rules are used to distinguish them. Most frequently, name resolution relies on an "inner-to-outer" rule, such as the Python LEGB (Local, Enclosing, Global, Built-in) rule: names implicitly resolves to the narrowest relevant context. In some cases name resolution can be explicitly specified, such as by the global and nonlocal keywords in Python; in other cases the default rules cannot be overridden.
[http://en.wikipedia.org/wiki/Lexical_environment]
===
In programming languages the association of identifiers to a value is termed a definition. Program text is structured using block constructs and definitions can be local to a block. The localized association of an identifier to a value established by a definition is termed a binding and the region of program text in which a binding is effective is known as its scope.[24] The computational state is kept using two components: the environment, used as a record of identifier bindings, and the store, which is used as a record of the effects of assignments.[25]
[http://en.wikipedia.org/wiki/Communications_protocol]

lcp'identifier'collision

name::
* McsEngl.lcp'identifier'collision@cptIt,
* McsEngl.identifier-collision.pgmlng@cptIt,
* McsEngl.name-conflict.pgmlng@cptIt,

lcp'identifier'entity

name::
* McsEngl.lcp'identifier'entity@cptIt,

_DESCRIPTION:
Every identifier REFERS to an entity. In case of a variable, the 'entity' usually is called 'value'.
[hmnSngo.2013-11-02]

_SPECIFIC:
* directory-entity
* file-entity
* filein-entity

lcp'identifier'lifetime

name::
* McsEngl.lcp'identifier'lifetime@cptIt,

lcp'identifier'namespace

name::
* McsEngl.lcp'identifier'namespace@cptIt,
* McsEngl.namespace.pgmlng@cptIt,
* McsEngl.namespacing.pgmlng@cptIt,
* McsEngl.pgmlng'code.NAMESPACE@cptIt,
* McsEngl.pgmlng'namespace@cptIt,

_DESCRIPTION:
In many programming languages, namespacing is a technique employed to avoid collisions with other objects or variables in the global namespace.
[http://addyosmani.com/blog/essential-js-namespacing/]
==
In most programming languages we know the concept of namespaces (or packages). Namespaces allow us to group code and help us to avoid name-collisions.
[http://www.kenneth-truyers.net/2013/04/27/javascript-namespaces-and-modules/]

lcp'identifier'scope

name::
* McsEngl.lcp'identifier'scope@cptIt,
* McsEngl.environment.pgmlng@cptIt,
* McsEngl.lcp'scope@cptIt,
* McsEngl.pgmlng'scope@cptIt,
* McsEngl.scope.pgmlng@cptIt,
* McsEngl.scoping.pgmlng@cptIt,
* McsEngl.scope-programming@cptIt,

_DEFINITION:
The strict definition of the (lexical) "scope" of a name (identifier) is unambiguous – it is "the portion of source code in which a binding of a name with an entity applies" – and is virtually unchanged from its 1960 definition in the specification of ALGOL 60.
[http://en.wikipedia.org/wiki/Scope_(computer_science)#Definition] 2014-06-17
===
Scope is an enclosing context in which a variable is associated with a value.
[http://dmitrysoshnikov.com/ecmascript/es5-chapter-3-1-lexical-environments-common-theory/#scope]
===
Scope is a source-code level concept – identifiers in the source code are references to entities in the program – and is part of the behavior of a compiler or interpreter of a language.
[http://en.wikipedia.org/wiki/Lexical_environment]
===
A scope is a region of a program in which a variable is defined and accessible. Scopes can be nested inside of other scopes. Variables defined in a scope are not visible outside of the scope.
[http://javascript.crockford.com/tdop/tdop.html]

scope.DYNAMIC

name::
* McsEngl.scope.DYNAMIC@cptIt,
* McsEngl.dynamic-scope.pgmlng@cptIt,
* McsEngl.dynamic-scoping.pgmlng@cptIt,

_DESCRIPTION:
By contrast, in dynamic scoping (or dynamic scope), if a variable name's scope is a certain function, then its scope is the time-period during which the function is executing: while the function is running, the variable name exists, and is bound to its variable, but after the function returns, the variable name does not exist. This means that if function f invokes a separately defined function g, then under lexical scoping, function g does not have access to f's local variables (since the text of g is not inside the text of f), while under dynamic scoping, function g does have access to f's local variables (since the invocation of g is inside the invocation of f).
[http://en.wikipedia.org/wiki/Lexical_environment]

scope.STATIC (lexical)

name::
* McsEngl.scope.STATIC (lexical)@cptIt,
* McsEngl.lexical-scope.pgmlng@cptIt,
* McsEngl.lexical-scoping.pgmlng@cptIt,
* McsEngl.static-scope.pgmlng@cptIt,
* McsEngl.static-scoping.pgmlng@cptIt,

_DESCRIPTION:
Lexical scope vs. dynamic scope[edit]
A fundamental distinction in scoping is what "part of a program" means – whether name resolution depends on the location in the source code (lexical scope, static scope, which depends on the lexical context) or depends on the program state when the name is encountered (dynamic scope, which depends on the execution context or calling context). Lexical resolution can be determined at compile time, and is also known as early binding, while dynamic resolution can in general only be determined at run time, and thus is known as late binding. Most modern languages use lexical scoping for variables and functions, though dynamic scoping is used in some languages, notably some dialects of Lisp, some "scripting" languages like Perl, and some template languages.[c] Even in lexically scoped languages, scope for closures can be confusing to the uninitiated, as these depend on the lexical context where the closure is defined, not where it is called.
[http://en.wikipedia.org/wiki/Scope_(computer_science)#Lexical_scope_vs._dynamic_scope]
===
In lexical scoping (or lexical scope; also called static scoping or static scope), if a variable name's scope is a certain function, then its scope is the program text of the function definition: within that text, the variable name exists, and is bound to the variable's value, but outside that text, the variable name does not exist.
[http://en.wikipedia.org/wiki/Lexical_environment]

SPECIFIC

name::
* McsEngl.pgmlng'identifier.SPECIFIC@cptIt,

_SPECIFIC:
* global-identifier
* local-identifier

lcp'identifier.GLOBAL

name::
* McsEngl.lcp'identifier.GLOBAL@cptIt,
* McsEngl.fully-qualified-reference@cptIt,

_PERL:
package Red::Blue;
our $var = 'foo';
A fully qualified reference to the above variable would be $Red::Blue::var.
[http://michaux.ca/articles/javascript-namespacing]

lcp'identifier.LOCAL

name::
* McsEngl.lcp'identifier.LOCAL@cptIt,

lcp'identifier.NESTED

name::
* McsEngl.lcp'identifier.NESTED@cptIt,

_PERL:
In Perl, like Java, the idea of a namespace hierarchy is only for the benefit of the programmer, not the language. Programming Perl by Wall, Christiansen and Orwant explains
The double colon can be used to chain together identifiers in a package name: $Red::Blue::var. This means the $var belonging to the Red::Blue package. The Red::Blue package has nothing to do with any Red or Blue packages that might happen to exist. There is, a relationship between Red::Blue and Red or Blue may have meaning to the person writing or using the program, but it means nothing to Perl. (Well, other than the fact that, in the current implementation, the symbol table Red::Blue happens to be stored in the symbol table Red. But the Perl language makes no use of that directly.)
[http://michaux.ca/articles/javascript-namespacing]

lcp'identifier.PREFIX

name::
* McsEngl.lcp'identifier.PREFIX@cptIt,
* McsEngl.prefix-namespacing@cptIt,
* McsEngl.qualified-identifier@cptIt,

_DESCRIPTION:
Qualified identifiers[edit]
As we have seen, one of the key reasons for scope is that it helps prevent name collisions, by allowing identical identifiers to refer to distinct things, with the restriction that the identifiers must have separate scopes. Sometimes this restriction is inconvenient; when many different things need to be accessible throughout a program, they generally all need identifiers with global scope, so different techniques are required to avoid name collisions.

To address this, many languages offer mechanisms for organizing global identifiers. The details of these mechanisms, and the terms used, depend on the language; but the general idea is that a group of identifiers can itself be given a name — a prefix — and, when necessary, an entity can be referred to by a qualified identifier consisting of the identifier plus the prefix. Normally such identifiers will have, in a sense, two sets of scopes: a scope (usually the global scope) in which the qualified identifier is visible, and one or more narrower scopes in which the unqualified identifier (without the prefix) is visible as well. And normally these groups can themselves be organized into groups; that is, they can be nested.

Although many languages support this concept, the details vary greatly. Some languages have mechanisms, such as namespaces in C++ and C#, that serve almost exclusively to enable global identifiers to be organized into groups. Other languages have mechanisms, such as packages in Ada and structures in Standard ML, that combine this with the additional purpose of allowing some identifiers to be visible only to other members of their group. And object-oriented languages often allow classes or singleton objects to fulfill this purpose (whether or not they also have a mechanism for which this is the primary purpose). Furthermore, languages often meld these approaches; for example, Perl's packages are largely similar to C++'s namespaces, but optionally double as classes for object-oriented programming; and Java organizes its variables and functions into classes, but then organizes those classes into Ada-like packages.
[http://en.wikipedia.org/wiki/Lexical_environment]

lcpalgo.name.CUSTOM.NO (reserved)

name::
* McsEngl.lcpalgo.name.CUSTOM.NO (reserved)@cptIt,
* McsEngl.keyword-of-computer-langauge@cptIt,
* McsEngl.lcp'keyword@cptIt,
* McsEngl.mdp'keyword@cptIt,
* McsEngl.pgmlng'code.name.RESERVED@cptIt,
* McsEngl.pgmlng'keyword@cptIt,
* McsEngl.pgmlng'reserve-name@cptIt,
* McsEngl.pgmlng'reserved-word@cptIt,
* McsEngl.pl'keyword@cptIt,
* McsEngl.reserved-word-in-programing@cptIt,
====== lagoGreek:
* McsElln.ΔΕΣΜΕΥΜΕΝΗ-ΛΕΞΗ@cptIt,

_DEFINITION:
Keywords are reserved for their intended use and cannot be used by the programmer for variable or method names.
[Harold course 1997spring]
===
Κάποιες λέξεις έχουν μια συγκεκριμένη και προκαθορισμένη σημασία και ονομάζονται ΔΕΣΜΕΥΜΕΝΕΣ ΛΕΞΕΙΣ.
[Αντωνάκος κα, "Ανάπτυξη εφαρμογών..." Γ' Λυκείου, 1999 α' έκδοση, 199]

lcpalgo'sut.NAMED.NO

name::
* McsEngl.lcpalgo'sut.NAMED.NO@cptIt,
* McsEngl.lcp'namedNo-archetype@cptIt,
* McsEngl.lcp'primitive-archetype@cptIt, {2014-02-21}

_SPECIFIC:
* array.literal##
* boolean##
* function.anonymous##
* null##
* number##
* string##

lcpalgo'sut.NONE

_CREATED: {2014-02-23}

name::
* McsEngl.lcpalgo'sut.NONE@cptIt,
* McsEngl.lcp'archetype.null@cptIt,
* McsEngl.lcpnone@cptIt,
* McsEngl.lcpnull@cptIt,
* McsEngl.lcp'none-archetype@cptIt,

_DESCRIPTION:
None is the 'zero' information. 'Undefined' is un-initialized information. 'Reference_error' is the use of a name which is not register.
[hmnSngo.2014-08-22]

_TypeScritp:
Has 3 types for it:
* null
* undefined (unitialized variable)
* void (return for function)

lcpalgo'sut.NUMBER (lcpn)

name::
* McsEngl.lcpalgo'sut.NUMBER (lcpn)@cptIt,
* McsEngl.lcp'number@cptIt,
* McsEngl.lcpn@cptIt,
* McsEngl.nbr-lcp@cptIt,

lcpalgo'sut.REGULAR-EXPRESSION (lcpr)

name::
* McsEngl.lcpalgo'sut.REGULAR-EXPRESSION (lcpr)@cptIt,
* McsEngl.lcp'regexp@cptIt,
* McsEngl.lcp'regular-expression@cptIt,
* McsEngl.lcpr@cptIt,

lcpalgo'sut.STRING (lcps)

name::
* McsEngl.lcpalgo'sut.STRING (lcps)@cptIt,
* McsEngl.lcp'string@cptIt,
* McsEngl.lcp'string-archetype@cptIt,
* McsEngl.lcps@cptIt,
* McsEngl.lcpstg@cptIt, {2014-03-24}
* McsEngl.lcpstring@cptIt,
* McsEngl.stg@cptIt, {2014-03-24}
* McsEngl.str@cptIt,
* McsEngl.string@cptIt,
====== lagoGreek:
* McsElln.συμβολοσειρά@cptIt,

_DESCRIPTION:
Any TEXT of a human-language.
[hmnSngo.2014-08-22]

lcpstg'code

name::
* McsEngl.lcpstg'code@cptIt,
* McsEngl.lcp'atom.STRING@cptIt,
* McsEngl.lcp'string-code@cptIt,

lcpstg'doing

name::
* McsEngl.lcpstg'doing@cptIt,
* McsEngl.lcpalgo.string@cptIt,

lcpstg'doing.ID-GENERATING

name::
* McsEngl.lcpstg'doing.ID-GENERATING@cptIt,

_CODE.LCS:
uniqueId = (length=8) ->
id = ""
id += Math.random().toString(36).substr(2) while id.length < length
id.substr 0, length

uniqueId() # => n5yjla3b
uniqueId(2) # => 0d
uniqueId(20) # => ox9eo7rt3ej0pb9kqlke
uniqueId(40) # => xu2vo4xjn4g0t3xr74zmndshrqlivn291d584alj
[http://coffeescriptcookbook.com/chapters/strings/generating-a-unique-id]

lcpstg'doing.REPEATING

name::
* McsEngl.lcpstg'doing.REPEATING@cptIt,

_CODE.LCS:
# create a string of 10 foos
Array(11).join 'foo'

# => "foofoofoofoofoofoofoofoofoofoo"
[http://coffeescriptcookbook.com/chapters/strings/repeating]

lcpstg'doing.REPLACING-HTML-NAMED-ENTITIES

name::
* McsEngl.lcpstg'doing.REPLACING-HTML-NAMED-ENTITIES@cptIt,

_CODE.LCS:
Problem
You need to replace HTML tags with named entities:
<br/> => <br/>

Solution
htmlEncode = (str) ->
str.replace /[&<>"']/g, ($0) ->
"&" + {"&":"amp", "<":"lt", ">":"gt", '"':"quot", "'":"#39"}[$0] + ";"

htmlEncode('<a href="http://bn.com">Barnes & Noble</a>')
# => '<a href="http://bn.com">Barnes & Noble</a>'
[http://coffeescriptcookbook.com/chapters/regular_expressions/replacing-html-tags-with-html-named-entities]

_CODE.LJS:
> var fcnHe=function (str) {
return str.replace(/[&<>"']/g, function($0) {
return "&" + {
"&": "amp",
"<": "lt",
">": "gt",
'"': "quot",
"'": "#39"
}[$0] + ";";
});
}
undefined
> fcnHe("<br/>")
"<br/>"

lcpstg'doing.SPLITTING

name::
* McsEngl.lcpstg'doing.SPLITTING@cptIt,

_CODE.LCS:
"foo bar baz".split " "
# => [ 'foo', 'bar', 'baz' ]
[http://coffeescriptcookbook.com/chapters/strings/splitting-a-string]

lcpstg'doing.TOKENIZING

name::
* McsEngl.lcpstg'doing.TOKENIZING@cptIt,

_ADDRESS.WPG:
* http://rosettacode.org/wiki/Tokenize_a_string,

_CODE.LJS:
alert( "Hello,How,Are,You,Today".split(",").join(".") );

lcpstg'doing.TRIMMING-WHITESPACE

name::
* McsEngl.lcpstg'doing.TRIMMING-WHITESPACE@cptIt,

_CODE.LJS:
> " padded string ".replace(/^\s+|\s+$/g, "")
"padded string"

_CODE.LCS:
" padded string ".replace /^\s+|\s+$/g, ""
# => 'padded string'
[http://coffeescriptcookbook.com/chapters/strings/trimming-whitespace-from-a-string]

lcpalgo'sut.UNDEFINED (lcpu)

name::
* McsEngl.lcpalgo'sut.UNDEFINED (lcpu)@cptIt,
* McsEngl.lcp'undefined@cptIt,
* McsEngl.lcpu@cptIt,

lcpalgo'sut.MODULE (lcpm)

_CREATED: {2014-02-21}

name::
* McsEngl.lcpalgo'sut.MODULE (lcpm)@cptIt,
* McsEngl.lcp'archomodule@cptIt, {2014-06-19}
* McsEngl.lcp'module@cptIt,
* McsEngl.lcpm@cptIt,
* McsEngl.lcpmdl@cptIt,
* McsEngl.lcpmodule@cptIt,
* McsEngl.lcp'code-module@cptIt,
* McsEngl.lcp'module@cptIt,

_DESCRIPTION:
Module is a whole with archetype-units (strings, functions, objects, ...) with some functionality.
[hmnSngo.2014-06-22]
===
a module is a source code unit (normally a file) that provides some functionality. It contains things like functions and classes. Usually it exposes an API. A project typically contains multiple modules. So foo.js is a module, and so is foo.py, foo.c, etc.
[http://blog.startifact.com/posts/overwhelmed-by-javascript-dependencies.html]
===
* c++:#include
* c#: using
* java: import
* nodejs: require
===
Module is a code-collection, like a library, BUT inside a program.
[hmnSngo.2014-02-22]
===
Modules enable programmers to organize their code into components while avoiding naming conflicts.
[http://www.typescriptlang.org/Content/TypeScript%20Language%20Specification.pdf]

_DESCRIPTION:
Module is a-semantic-unit which
- can-be PART OF other modules and
- can-has AS PART other modules
with the-require()-function.
Like 'the-prototype-inheritance' mechanism which manages the GENERIC-SPECIFIC relations of the-semantic-units of an-API, modules is the-mechanism needed to manage the WHOLE-PART relations of the-semantic-units.
In contrast to objects, modules HAVE scope, ie its members see each other.
[http://synagonism.net/dirMiwMcs/dirTchInf/filMcsLjs.html#idLjnmdsc]
===
Module is a block of functionality.
[hmnSngo.2014-06-19]
===
Although this pattern [= one global object] is easy to use and perfectly valid for many tasks and scenarios there is one big disadvantage:
The one global instance is vulnerable. This means that anyone could access its internals. For example, the product has a property price and a method getPrice(). However, nothing prevents us from directly accessing the price property. We don’t want this, we want to expose only the method so we can control the access to our private variable.
To solve these problems we need to take a look at how can create modules that encapsulate certain data and behavior.
[http://www.kenneth-truyers.net/2013/04/27/javascript-namespaces-and-modules/]

lcp'archomodule'relation-to-namespace

name::
* McsEngl.lcp'archomodule'relation-to-namespace@cptIt,
* McsEngl.lcp'archonamespace'relation-to-module@cptIt,

_DESCRIPTION:
Namespacing is a method to name unambigously, moduling is a method to group functionality.
[hmnSngo.2014-06-19]
===
A module fulfills two purposes: First, it holds content, by mapping identifiers to values. Second, it provides a namespace for those identifiers, to prevent them from clashing with identifiers in other modules.
[http://www.2ality.com/2011/04/modules-and-namespaces-in-javascript.html]
===
In many programming languages, namespacing is a technique employed to avoid collisions with other objects or variables in the global namespace. They're also extremely useful for helping organize blocks of functionality in your application into easily manageable groups that can be uniquely identified.
[http://addyosmani.com/blog/essential-js-namespacing/]

lcpalgo'sut.MIXED (lcpx)

name::
* McsEngl.lcpalgo'sut.MIXED (lcpx)@cptIt,
* McsEngl.lcp'mixed@cptIt,
* McsEngl.lcpx@cptIt,

lcpalgo'sut.INSTANCE

name::
* McsEngl.lcpalgo'sut.INSTANCE@cptIt,
* McsEngl.lcpliteral@cptIt, {2014-02-23}

lcpliteral'code

name::
* McsEngl.lcpliteral'code@cptIt,
* McsEngl.data-literal.programing@cptIt,
* McsEngl.lcp'code.LITERAL@cptIt,
* McsEngl.lcp'literal@cptIt,
* McsEngl.literal@cptIt,
* McsEngl.pgmlng'code.literal@cptIt,
* McsEngl.pgmlng'literal@cptIt,

_DEFINITION:
Literal call source-code-representations of INSTANCES of simple-data-types.
[hmnSngo.2002-04-30]
===
In computer science, a literal is a notation for representing a fixed value in source code. Almost all programming languages have notations for atomic values such as integers, floating-point numbers, strings, and booleans; some also have notations for elements of enumerated types and compound values such as arrays, records, and objects.

In contrast to literals, variables or constants are symbols that can take on one of a class of fixed values, the constant being constrained not to change. Literals are often used to initialize variables, for example:
int a=1;
String s="cat";
In some object-oriented languages (like ECMAScript), objects can also be represented by literals. Methods of this object can be specified in the object literal using function literals. The brace notation below, which is also used for array literals, is typical for object literals:
{"cat","dog"}
{name:"cat",length:57}
[http://en.wikipedia.org/wiki/Literal_(computer_programming)]
===
A literal is a source code representation of a value.
[C# specification]
===
* Any notation for representing a value within programming language source code; for example, an object literal, string literal, or function literal.
[http://en.wikipedia.org/wiki/Literal]
===
However there are only seven kinds of literals, and one of those is not a primitive data type:
•boolean: true or false
•int: 89, -945, 37865
•long: 89L, -945L, 5123567876L
•float: 89.5f, -32.5f,
•double: 89.5, -32.5, 87.6E45
•char: 'c', '9', 't'
•String: "This is a string literal"
There are no short or byte literals.
[Harold Course 1997]
===
Literals or constants are the values we write in a conventional form whose value is obvious. In contrast to variables, literals (123, 4.3, “hi”) do not change in value. These are also called explicit constants or manifest constants. I have also seen these called pure constants, but I am not sure if that terminology is agreed on. At first glance one may think that all programming languages type their literals the same way. While there are a lot of common conventions in different languages there are some interesting differences.
[http://www.gavilan.edu/csis/languages/literals.html]
===
In computer science, a literal is a notation for representing a fixed value in source code. Almost all programming languages have notations for atomic values such as integers, floating-point numbers, strings, and booleans; some also have notations for elements of enumerated types and compound values such as arrays, records, and objects.

In contrast to literals, variables or constants are symbols that can take on one of a class of fixed values, the constant being constrained not to change. Literals are often used to initialize variables, for example, in the following, 1 is a literal and the three letter string in "cat" is a literal:

int a=1;
String s="cat";
In some object-oriented languages (like ECMAScript), objects can also be represented by literals. Methods of this object can be specified in the object literal using function literals. The brace notation below, which is also used for array literals, is typical for object literals:

{"cat","dog"}
{name:"cat",length:57}
[http://en.wikipedia.org/wiki/Literal_(computer_programming)]

lcp'literal-and-constant

name::
* McsEngl.lcp'literal-and-constant@cptIt,
* McsEngl.literal-and-constant@cptIt,
* McsEngl.pgmlng'constant-and-literal@cptIt,

_DESCRIPTION:
A literal is a-value typed into the source code, like 7 or "pizza".
A constant is a named value, like a variable, except you can't change it.
[http://in.answers.yahoo.com/question/index?qid=20100114202307AAFsYFB]

lcpalgo'sut.INSTANCE.NO

_CREATED: {2014-02-19}

name::
* McsEngl.lcpalgo'sut.INSTANCE.NO@cptIt,
* McsEngl.lcp'generic-archetype@cptIt,

_DESCRIPTION:
Generic archetype constructs.
[hmnSngo.2014-02-19]

_SPECIFIC:
* lcp-algorithm##
* lcp-collection##
* lcp-information##
* lcp-number##
* lcp-string##
* lcp-variable##

lcpalgo'SEMANTIC-UNIT-STRUCTURE

_CREATED: {2014-02-19}

name::
* McsEngl.lcpalgo'SEMANTIC-UNIT-STRUCTURE@cptIt,
* McsEngl.lcp'atom-structure@cptIt,
* McsEngl.lcpcode.EXPRESSION@cptIt,
* McsEngl.expression-of-computer-language@cptIt,
* McsEngl.lngPgm'expression@cptIt,
* McsEngl.lcp'expression@cptIt, {2014-02-05}
* McsEngl.pgmlng'expression@cptIt,

_WHOLE:
* statement#ql:pgmlng'statement#

_DEFINITION.SYNTHETIC:
Expression is a combination of variables and operators we use in statements.
[hmnSngo.2002-04-27]
===
EXPRESSIONS are combinations of lexemes#ql:cl'lexeme#.
[hmnSngo.2000jul24]
===
In most languages statements contrast with expressions in that statements do not return results and are executed solely for their side effects, while expressions always return a result and often do not have side effects at all. Among imperative programming languages, Algol 68 is one of the few in which a statement can return a result. In languages which mix imperative and functional styles, such as the Lisp family, the distinction between expressions and statements is not made: even expressions executed in sequential contexts solely for their side effects and whose return values are not used are considered 'expressions'. In purely functional programming, there are no statements; everything is an expression.
[http://en.wikipedia.org/wiki/Statement_%28programming%29]

WHOLE:
* statement#ql:statement_in_programing-*#

EXPRESSION'S-VALUE:
Most of the constructs that involve an expression ultimately require the expression to denote a value.

lcp'expression'relation-to-statement

name::
* McsEngl.lcp'expression'relation-to-statement@cptIt,
* McsEngl.pgmlng'statement'relation-to-expression@cptIt,

_DESCRIPTION:
In, most languages, statements contrast with expressions in that statements do not return results and are executed solely for their side effects, while expressions always return a result and often do not have side effects at all. Among imperative programming languages, Algol 68 is one of the few in which a statement can return a result. In languages which mix imperative and functional styles, such as the Lisp family, the distinction between expressions and statements is not made: even expressions executed in sequential contexts solely for their side effects and whose return values are not used are considered 'expressions'. In purely functional programming, there are no statements; everything is an expression.
[http://en.wikipedia.org/wiki/Statement_(programming)]

lcpalgo'SENTENCE (lcpstc)

_CREATED: {2014-04-06}

name::
* McsEngl.lcpalgo'SENTENCE (lcpstc)@cptIt,
* McsEngl.conceptIt248.8,
* McsEngl.lcp'semasio-sentence@cptIt, {2014-05-14}
* McsEngl.lcp'statement@cptIt,
* McsEngl.lcp'sentence@cptIt,
* McsEngl.lcpsentence@cptIt, {2014-04-13}
* McsEngl.lcpsmsstc@cptIt, {2014-05-15}
* McsEngl.lcpsmt@cptIt, {2014-04-06}
* McsEngl.lcpstatement@cptIt,
* McsEngl.lcpstc@cptIt, {2014-04-13}
* McsEngl.instruction'of'computer'language@cptIt,
* McsEngl.pgmlng'sentence@cptIt, {2014-01-08}
* McsEngl.pgmlng'statement@cptIt,
* McsEngl.plsentence@cptIt, {2014-01-24}
* McsEngl.programing-language-sentence@cptIt, {2014-01-24}
* McsEngl.programing-sentence@cptIt, {2014-01-08}
* McsEngl.sentence'of'computer'language@cptIt,
* McsEngl.sentence.pgmlng@cptIt248.8, {2014-01-08}
* McsEngl.statement-in-programing@cptIt,
* McsEngl.pl'stc@cptIt, {2014-01-28}
* McsEngl.plstc@cptIt, {2014-01-08}
* McsEngl.pgmstc@cptIt, {2014-01-08}
* McsEngl.stc.pgmlng@cptIt,
====== lagoGreek:
* McsElln.Πρόταση@cptIt,
* McsElln.ΟΔΗΓΙΑ.ΓΛΩΣΣΑΣ'ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ@cptIt248ι,

_WHOLE:
* computer-program#cptItsoft59#

_DEFINITION:
* In computer programming a statement can be thought of as the smallest standalone element of an imperative programming language. A program is formed by a sequence of one or more statements. A statement will have internal components (eg, expressions).
Many languages (eg, C) make a distinction between statements and definitions, with a statement only containing executable code and a definition declaring an identifier. A distinction can also be made between simple and compound statements; the latter may contain statements as components.
[http://en.wikipedia.org/wiki/Statement_%28programming%29]
===
* Specifically, the term command is used in imperative computer languages. These languages are called this, because statements in these languages are usually written in a manner similar to the imperative-mood#ql:mood.imperative@cptCore684.14# used in many natural languages. If one views a statement in an imperative language as being like a sentence in a natural language, then a command is generally like a verb in such a language.
[http://en.wikipedia.org/wiki/Command_%28computing%29]

Οι λέξεις και τα σύμβολα μιας γλώσσας συνδυάζονται κάτω από ένα πλέγμα αυστηρών συντακτικών-κανόνων (syntax rules), ώστε να αποδώσουν τις ΠΡΟΤΑΣΕΙΣ (sentences) που θα συνθέσουν το πρόγραμμα.
[Αντωνάκος κα, "Ανάπτυξη εφαρμογών..." Γ' Λυκείου, 1999 α' έκδοση, 199]

_DESCRIPTION:
Lcpstatement is a DOING or RELATION VERB#ql:smsverb@cptCore567.8# plus its arguments.
[hmnSngo.2014-04-11]

_CHANGE:
The syntax and semantics of statements is specified by the definition of the programming language. Most programming languages do not allow new statements to be created during program execution (Snobol 4 is a language that does), or existing statements to be modified (Lisp is well known for supporting self modifying code).
[http://en.wikipedia.org/wiki/Statement_%28programming%29]

lcpstc'node

name::
* McsEngl.lcpstc'node@cptIt,

lcpstc'nodeWhat

name::
* McsEngl.lcpstc'nodeWhat@cptIt,

lcpstc'nodeWho

name::
* McsEngl.lcpstc'nodeWho@cptIt,

lcpstc'nodeVerb

_CREATED: {2014-01-25}

name::
* McsEngl.lcpstc'nodeVerb@cptIt,
* McsEngl.lcpstc'predicate@cptIt,
* McsEngl.lcpstc'argumentNo@cptIt,

lcpstc'argument (predicateNo)

_CREATED: {2014-01-25}

name::
* McsEngl.lcpstc'argument (predicateNo)@cptIt,

SPECIFIC

name::
* McsEngl.lcpstc.specific@cptIt,

_SPECIFIC:
* definition##
* return##
* throw##

_SPECIFIC:
* doing-sentence
* relation-sentence
* simple-sentence
* simpleNo-sentence

_SPECIFIC:
Simple statements
* assignment: A := A + 1
* call: CLEARSCREEN()
* return: return 5;
* goto: goto 1
* assertion: assert(ptr != NULL);
Compound statements
* statement block: begin WRITE('Number? '); READLN(NUMBER); end
* if-statement: if A > 3 then WRITELN(A) else WRITELN("NOT YET") end
* switch-statement: switch (c) { case 'a': alert(); break; case 'q': quit(); break; }
* while-loop: while NOT EOF DO begin READLN end
* do-loop: do { computation(&i); } while (i < 10);
* for-loop: for A:=1 to 10 do WRITELN(A) end
[http://en.wikipedia.org/wiki/Statement_%28programming%29]

Οι προτάσεις μπορούν να είναι:
α) Δηλωτικές (Οι προτάσεις του τμήματος δηλώσεων)
β) Εντολές (statements) (Οι προτάσεις του σώματος του προγράμματος)
γ) Σχόλια (comments).
[Αντωνάκος κα, "Ανάπτυξη εφαρμογών..." Γ' Λυκείου, 1999 α' έκδοση, 200]

lcpstc.COMMENT

name::
* McsEngl.lcpstc.COMMENT@cptIt,
* McsEngl.comment.pgmlng@cptIt,
* McsEngl.lcp'atom.COMMENT@cptIt,
* McsEngl.lcp'unit.COMMENT@cptIt,
* McsEngl.lcp'comment-of-program@cptIt,
* McsEngl.lcp'comment@cptIt,

_DESCRIPTION:
Comments are atoms (= indivisible structures) that denote META information about the code.
[hmnSngo.2014-02-19]

_line_comment:
// ....
# perl, python, config-files,
# This is also a single line comment

_multiline_comment:
/* ... */ java, js,

lcpstc.DOING (function)

_CREATED: {2014-01-08}

name::
* McsEngl.lcpstc.DOING (function)@cptIt,
* McsEngl.pgmlng'command.SELECTION@cptIt,
* McsEngl.pgmstc.doing@cptIt,
* McsEngl.doing-pgmstc@cptIt,
* McsEngl.conditional'command@cptIt,
* McsEngl.conditional'structure@cptIt,
* McsEngl.condition-sentence-of-lagPgm@cptIt,
* McsEngl.test'command@cptIt,
* McsEngl.control'structure'of'computer'language@cptIt,
* McsElln.ΕΠΙΛΟΓΗ@cptIt,

_SPECIFIC:
* assigning-sentence
* function-call##
* simple-control##
* multi-control##

lcpstc.COMMAND (statement immediately execute)

name::
* McsEngl.lcpstc.COMMAND (statement immediately execute)@cptIt,
* McsEngl.mdp'command@cptIt,
* McsEngl.command'of'computer'language@cptIt,
* McsEngl.statement'of'computer'language@cptIt,
* McsEngl.mdp'statement.ACTION@cptIt,
====== lagoGreek:,
* McsElln.ΕΝΤΟΛΗ@cptIt248i,
* McsElln.εντολή.γλσπγμ@cptIt,

_DEFINITION:
** PROCEDURE is an instruction that denotes ACTION.
[hmnSngo.2002-05-11]
** OPERATION is an instruction that denotes procedures.
[hmnSngo.2002-05-08]
** Every program with its instructions, denotes procedures we want to do on data.

_DEFINITION:
COMMAND is an operation#ql:cl'operation# we immediatly perform.
[hmnSngo.2002-04-24]

Η συμβολική περιγραφή μιας ή περισσοτέρων προς εκτέλεση λειτουργιών σε μια γλώσσα προγραμματισμού ή σε ένα λειτουργικό σύστημα.
[Παπακωνσταντίνου κα, Τεχνολογία Υπολογιστικών... Γ' Ε. Λυκείου, 1999 α' έκδοση, 275]

Instruction
Programming languages have instruction sets, the complete listing of the instructions available to the programmer.
An instruction is a discrete step or statement in a computer program that tells the computer to do something. It can also identify data if required.
[SOURCE: PC-GLOSSARY 1993]

Mnemonic
A mnemonic is an abbreviated name for a computer instruction, such as JMP, ADD, CLR, STO, INIT. A mnemonic name for an instruction or an operation makes it easy to remember and convenient for the translator or programmer.
Assembly language source code consists of many different mnemonics which are translated or assembled into machine code.
[SOURCE: PC-GLOSSARY 1993]

lcpstc.dng.ASSINGMENT

name::
* McsEngl.lcpstc.dng.ASSINGMENT@cptIt,
* McsEngl.assingment-statement@cptIt,
* McsEngl.mdp'command.ASSIGNMENT@cptIt,
* McsEngl.assignment-statement@cptIt,
* McsEngl.assignment'command@cptIt,
* McsEngl.COMMAND.ASSIGNMENT@cptIt,
* McsElln.ΕΝΤΟΛΗ-ΑΝΤΙΚΑΤΑΣΤΑΣΗΣ@deleted, [Βιβλίο α'λυκείου 1998]
* McsElln.ΕΝΤΟΛΗ-ΕΚΧΩΡΗΣΗΣ@cptIt, [βιβλίο γ'λυκείου 1999]

_DEFINITION:
In computer science the assignment statement sets or re-sets the value stored in the storage location(s) denoted by a variable name. In most imperative computer programming languages the assignment statement is one of the basic statements.
The assignment statement often allows that the same variable name to contain different values at different times during program execution.
[http://en.wikipedia.org/wiki/Assignment_%28computer_science%29]

===
Common textual representations of the assignment include an equals sign (“=”) and “:=”. These two forms are typical of programming languages, such as C), that classify assignment as an infix operator.
variable = expression  Fortran, C, Java, Windows PowerShell, …
variable := expression  ALGOL, Pascal, Ada, Dylan, …

Other possibilities include a left arrow or a keyword.
variable <- expression  Objective Caml, S, R, ...
variable ? expression  APL
MOVE expression TO variable  COBOL
set variable to expression  AppleScript
[http://en.wikipedia.org/wiki/Assignment_%28computer_science%29]

_CODE.JAVA:
x = 3;

_CODE.BASIC:
10 LET X = 3

lcpstc.dng.BRANCHING

name::
* McsEngl.lcpstc.dng.BRANCHING@cptIt,
* McsEngl.lcpstc.branching@cptIt,

lcpstc.dng.DEFINITION

name::
* McsEngl.lcpstc.dng.DEFINITION@cptIt,
* McsEngl.declaration-of-computer-language@cptIt,
* McsEngl.lcpstc.definition@cptIt,

VARIABLE_DECLARATION:
int year;

FUNCTION_DECLARATION:
public String findFoo (arguments)

INPORT_DECLARATION:
import java.util.*;
#include <iostream.h>

lcpstc.dng.LOOP

name::
* McsEngl.lcpstc.dng.LOOP@cptIt,
* McsEngl.loop'command@cptIt,
* McsEngl.repetitive'structure@cptIt,
* McsEngl.iteration'control'flow@cptIt,
====== lagoGreek:
* McsElln.ΑΝΑΚΥΚΛΩΣΗ@cptIt,
* McsElln.ΒΡΟΧΟΣ@cptIt,
* McsElln.ΕΠΑΝΑΛΗΨΗ@cptIt,

lcpstc.dng.SEQUENCE

name::
* McsEngl.lcpstc.dng.SEQUENCE@cptIt,
* McsEngl.pgmlng'command.SEQUENCE@cptIt,
* McsEngl.sequencial'command@cptIt,

_DEFINITION:
SEQUENTIAL-COMMAND is a COMPOUND-COMMAND which are executed one after another.
[hmnSngo.2002-04-27]

lcpstc.RELATION

_CREATED: {2014-01-08}

name::
* McsEngl.lcpstc.RELATION@cptIt,
* McsEngl.pgmstc.relation@cptIt,
* McsEngl.relation-pgmstc@cptIt,

_DESCRITPION:
It is a sentece that express a RELATION of code.
[hmnSngo.2014-01-08]

_SPECIFIC:
* definition-plsentence##

lcpstc.rln.DEFINITION

name::
* McsEngl.lcpstc.rln.DEFINITION@cptIt,
* McsEngl.pldefinition@cptIt,
* McsEngl.lcpstc.definition@cptIt,

_GENERIC:
* relation-plsentence#ql:plstc.relation#

_DESCRIPTION:
In programming languages the association of identifiers to a value is termed a definition.
[http://en.wikipedia.org/wiki/Communications_protocol]

_CODE.LJS:
//entities
var runners, winner;
//function
var square = function(x) {
return x * x;
};
//array
var list = [1, 2, 3, 4, 5];
//object
var math = {
root: Math.sqrt,
square: square,
cube: function(x) {
return x * square(x);
}
};

lcpstc.SIMPLE

_CREATED: {2014-01-08}

name::
* McsEngl.lcpstc.SIMPLE@cptIt,
* McsEngl.pgmstc.simple@cptIt,
* McsEngl.simple-pgmstc@cptIt,
* McsEngl.pgmlng'command.SIMPLE@cptIt,
* McsEngl.simple'command@cptIt,

pgmlng'COMMAND.INPUT:

pgmlng'COMMAND.OUTPUT:

lcpstc.SIMPLE.NO (compound)

_CREATED: {2014-01-08}

name::
* McsEngl.lcpstc.SIMPLE.NO (compound)@cptIt,
* McsEngl.compound-pgmstc@cptIt,
* McsEngl.pgmstc.simpleNo@cptIt,
* McsEngl.simpleNo-pgmstc@cptIt,
* McsEngl.pgmlng'command.COMPOUND@cptIt,
* McsEngl.compound'command@cptIt,

_DEFINITION:
The commands that are comprised of other commands. eg loop, selection, sequence, ...

INSTRUCTION BLOCK:
in c++: A block of instructions is a group of instructions separated by semicolons (;) but grouped in a block delimited by curly bracket signs: { and }.

lcpstc.DEFINE

name::
* McsEngl.lcpstc.DEFINE@cptIt,
* McsEngl.lcpdefine@cptIt,

_STRUCTURE:
DEFINE##
{nodeNAME}
{nodeGENERIC}
{nodeVALUE}
===
DEFINE##
{argNAME}
{argGENERIC}
{argVALUE}

lcpstc.THROW

name::
* McsEngl.lcpstc.THROW@cptIt,
* McsEngl.lcpthrow@cptIt,

_STRUCTURE:
THROW## {argWhat}

lcpstc.WHILE

name::
* McsEngl.lcpstc.WHILE@cptIt,
* McsEngl.lcpwhile@cptIt,

_STRUCTURE:
WHILE#
{nodeBoolean}
{nodeDoing}

lcpalgo'SENTENCE-STRUCTURE (lcpstcs)

_CREATED: {2014-01-25}

name::
* McsEngl.lcpalgo'SENTENCE-STRUCTURE (lcpstcs)@cptIt,
* McsEngl.pgmlng'sentence-structure@cptIt,
* McsEngl.lcp'sentencestructure@cptIt,
* McsEngl.lcp'sscr@cptIt, {2014-05-16}
* McsEngl.lcpscsr@cptIt,
* McsEngl.lcpstcs@cptIt,

lcpstcs.CONTROL-FLOW

name::
* McsEngl.lcpstcs.CONTROL-FLOW@cptIt,
* McsEngl.lcp'control-flow@cptIt,
* McsEngl.lcp'control-structure@cptIt,
* McsEngl.lcp'flow-of-control@cptIt,
* McsEngl.lcp'control-structure@cptIt,
* McsEngl.pgmlng'Control-Structure@cptIt,
* McsEngl.plstc.CONTROL-STRUCTURE@cptIt,

_DESCRIPTION:
In computer science, control flow (or alternatively, flow of control) refers to the order in which the individual statements, instructions or function calls of an imperative or a declarative program are executed or evaluated.
Within an imperative programming language, a control flow statement is a statement whose execution results in a choice being made as to which of two or more paths should be followed. For non-strict functional languages, functions and language constructs exist to achieve the same result, but they are not necessarily called control flow statements.
The kinds of control flow statements supported by different languages vary, but can be categorized by their effect:
continuation at a different statement (unconditional branch or jump),
executing a set of statements only if some condition is met (choice - i.e., conditional branch),
executing a set of statements zero or more times, until some condition is met (i.e., loop - the same as conditional branch),
executing a set of distant statements, after which the flow of control usually returns (subroutines, coroutines, and continuations),
stopping the program, preventing any further execution (unconditional halt).
A set of statements is in turn generally structured as a block, which in addition to grouping also defines a lexical scope.
Interrupts and signals are low-level mechanisms that can alter the flow of control in a way similar to a subroutine, but usually occur as a response to some external stimulus or event (that can occur asynchronously), rather than execution of an 'in-line' control flow statement. Self-modifying code can also be used to affect control flow through its side effects, but does not usually involve an explicit control flow statement (an exception being the ALTER verb in COBOL[citation needed]).
At the level of machine or assembly language, control flow instructions usually work by altering the program counter. For some CPUs the only control flow instructions available are conditional or unconditional branch instructions (also called jumps).
[http://en.wikipedia.org/wiki/Control_flow]

_SPECIFIC:
* choice-node##
* loop-node##

lcpstcs.IF-THEN-ELSE

name::
* McsEngl.lcpstcs.IF-THEN-ELSE@cptIt,
* McsEngl.lcp'if-then-else@cptIt,
* McsEngl.lcpif@cptIt,
* McsEngl.lcpsmsstc.IF@cptIt,

_DESCRIPTION:
# The most basic form of *if* is a condition and an action.
[\File1a\lcpCpt\src\grammar.coffee]

_STRUCTURE:
IF#
{nodeTest}
{nodeThen}
{nodeElse}

_STRUCTURE:
IFTHENELSE#
{condition-statement}
{then-paragraph}
{else-paragraph}

name::
* McsEngl.lcp'conditional-statement@cptIt,
* McsEngl.pgmlng'if-then@cptIt,

_CODE.plCpt:
rlnIF
sentence-boolean
rlnTHEN
sentence
rlnELSE
sentence
[hmnSngo.2014-01-26]

_CODE.LISP:
"Special operators" (sometimes called "special forms") provide Lisp's control structure. For example, the special operator if takes three arguments. If the first argument is non-nil, it evaluates to the second argument; otherwise, it evaluates to the third argument. Thus, the expression
(if nil
(list 1 2 "foo")
(list 3 4 "bar"))
evaluates to (3 4 "bar").
[http://en.wikipedia.org/wiki/Lisp_(programming_language)]

lcp'MULTICONDITIONAL-STATEMENT

_CREATED: {2014-01-25}

name::
* McsEngl.lcp'MULTICONDITIONAL-STATEMENT@cptIt,
* McsEngl.case-statement@cptIt,
* McsEngl.multiway-brance@cptIt,
* McsEngl.switch-statement@cptIt,

_DESCRIPTION:
Switch statements (or case statements, or multiway branches) compare a given value with specified constants and take action according to the first constant to match. There is usually a provision for a default action ("else", "otherwise") to be taken if no match succeeds. Switch statements can allow compiler optimizations, such as lookup tables. In dynamic languages, the cases may not be limited to constant expressions, and might extend to pattern matching, as in the shell script example on the right, where the *) implements the default case as a glob matching any string. Case logic can also be implemented in functional form, as in SQL's decode statement.
[http://en.wikipedia.org/wiki/Control_flow]

_CODE.plCpt:
rlnSWITCH
multivalue-sentence
rlnWHEN "Mon"
sentence
rlnWHEN "Tue", "Wed"
sentence
rlnELSE
sentence
[hmnSngo.2014-01-26]

_CODE.ADA:
case someChar is
when 'a' => actionOnA;
when 'x' => actionOnX;
when 'y' | 'z' => actionOnYandZ;
when others => actionOnNoMatch;
end;
[http://en.wikipedia.org/wiki/Control_flow]

_CODE.LCS:
switch day
when "Mon" then go work
when "Tue" then go relax
when "Thu" then go iceFishing
when "Fri", "Sat"
if day is bingoDay
go bingo
go dancing
when "Sun" then go church
else go work
[]

_CODE.LJS:
switch (day) {
case "Mon":
go(work);
break;
case "Tue":
go(relax);
break;
case "Thu":
go(iceFishing);
break;
case "Fri":
case "Sat":
if (day === bingoDay) {
go(bingo);
go(dancing);
}
break;
case "Sun":
go(church);
break;
default:
go(work);
}

lcpstcs.LOOP.DO-WHILE

name::
* McsEngl.lcpstcs.LOOP.DO-WHILE@cptIt,
* McsEngl.lcp'dowhile@cptIt,
* McsEngl.lcp'dowhile-loop@cptIt,
* McsEngl.lcp'dowhile-statement@cptIt,
* McsEngl.lcpdowhile@cptIt,

_STRUCTURE:
DOWHILE#
{doing-paragraph}
{condition-statement}

lcpstcs.LOOP.WHILE-DO

name::
* McsEngl.lcpstcs.LOOP.WHILE-DO@cptIt,
* McsEngl.lcp'while@cptIt,
* McsEngl.lcp'while-loop@cptIt,
* McsEngl.lcp'while-statement@cptIt,
* McsEngl.lcpwhile@cptIt,

_STRUCTURE:
WHILEDO#
{condition-statement}
{doing-paragraph}

_DESCRIPTION:
In most computer programming languages, a while loop is a control flow statement that allows code to be executed repeatedly based on a given boolean condition. The while loop can be thought of as a repeating if statement.
The while construct consists of a block of code and a condition. The condition is evaluated, and if the condition is true, the code within the block is executed. This repeats until the condition becomes false. Because the while loop checks the condition before the block is executed, the control structure is often also known as a pre-test loop. Compare this with the do while loop, which tests the condition after the loop has executed.
[http://en.wikipedia.org/wiki/While_loop]

lcpstcs.TRY-CATCH

name::
* McsEngl.lcpstcs.TRY-CATCH@cptIt,
* McsEngl.lcp'try-catch@cptIt,

_STRUCTURE:
TRY {try-paragraph}
CATCH {catch-paragraph}
FINALLY {finally-paragraph}

_DESCRIPTION:
Marks a block of statements to try, and specifies a response, should an exception be thrown.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch]

lcpalgo'PARAGRAPH

name::
* McsEngl.lcpalgo'PARAGRAPH@cptIt,
* McsEngl.lcp'paragraph@cptIt,
* McsEngl.lcp'smsparagraph@cptIt,
* McsEngl.lcppgf@cptIt,

_DESCRIPTION:
relations of sentences, without title.
[hmnSngo.2014-04-13]

lcpalgo'TITLE-STRUCTURE

name::
* McsEngl.lcpalgo'TITLE-STRUCTURE@cptIt,
* McsEngl.lcp'titlestructure@cptIt,
* McsEngl.lcptlsr@cptIt,

lcpalgo.SPECIFIC

name::
* McsEngl.lcpalgo.SPECIFIC@cptIt,
* McsEngl.lngPgm'code.specific@cptIt,

_SPECIFIC: lagPgm'code.ALPHABETICALLY:
* API#ql:pgmlng'api#
* character (symbol),
* class,
* constant,
* data-code,
* expression,
* interface,
* lexeme,
* library,
* operator,
* processing-code,
* program,
* source-code##
* statement,
* variable,

lcpalgo.SPECIFIC-DIVISION.processing

_CREATED: {2014-01-30}

name::
* McsEngl.lcpalgo.SPECIFIC-DIVISION.processing@cptIt,

_SPECIFIC:
* data-code##
* processing-code##

lcpalgo.SPECIFIC-DIVISION.structure

_CREATED: {2014-01-30}

name::
* McsEngl.lcpalgo.SPECIFIC-DIVISION.structure@cptIt,

_SPECIFIC:
* atom-plcode##
* atomNo-plcode##

lcpalgo'ATOM.NO (structure)

name::
* McsEngl.lcpalgo'ATOM.NO (structure)@cptIt,
* McsEngl.code-strucute.lngPgm@cptIt, {2014-02-02}
* McsEngl.lngPgm'atomNo@cptIt,
* McsEngl.lngPgm'code-structure@cptIt,
* McsEngl.pgmlng'atomNo-code@cptIt,
* McsEngl.pgmlng'structure-of-code@cptIt,

_SPECIFIC:
* directory
* file
* namevalue (variable)
* namesvalues (class, object)
* orderedvalues (array)
* program
* sentence##
* sentence-structure##
* software-system##

lcpalgo.APPLICATION

_CREATED: {2011-09-03} {2012-01-22}

NAME

name::
* McsEngl.lcpalgo.APPLICATION@cptIt,
* McsEngl.conceptIt490,
* McsEngl.app@cptIt490, {2012-02-27}
* McsEngl.application@cptIt490, {2012-02-27}
* McsEngl.computer-application@cptIt490,
* McsEngl.program'SystemSoftware@cptIt490,
* McsEngl.software-application@cptIt490, {2012-04-12}
* McsEngl.software-system@cptIt490, {2011-09-03}
* McsEngl.sysSoft@cptIt490, {2011-09-03}
* McsEngl.systemSoftware@cptIt490, {2011-09-03}
* McsEngl.system.it.APPLICATION@cptIt,
* McsEngl.system.software@cptIt490, {2012-04-24}
* McsEngl.apn@cptIt490, {2013-08-01}
* McsEngl.sysItSft@cptIt490, {2012-05-05}
* McsEngl.sysSft@cptIt490, {2012-05-05}
====== lagoGreek:
* McsElln.εφαρμογη-λογισμικου@cptIt490, {2012-04-12}

DEFINITION

_DESCRIPTION:
Application is a-program used by a-user, not by a-computer or programmer.
[hmnSngo.2016-11-12]
===
It is a program[59] AND a collectionData managed by the program.
[hmnSngo.2011-09-03]

apn'definition.Whole

name::
* McsEngl.apn'definition.Whole@cptIt,

Application I call a program AND content managed with this program.
[hmnSngo.2012-01-22]

apn'GENERIC

_GENERIC:
* program#cptItsoft59#
* entity.whole.system.it#cptItsoft277#

apn'PART

name::
* McsEngl.apn'PART@cptIt,

_SPECIFIC:
* endUser-code#cptItsoft393.1#
* program#cptItsoft59#
===
* container-code,
* non-container-code,
===
* data-code,
* processing-code,
* mixed-code,

apn'Container-code

name::
* McsEngl.apn'Container-code@cptIt,

* programer-container,
* end-user--container,

apn'Data-code

name::
* McsEngl.apn'Data-code@cptIt,

apn'EVOLUTION#cptCore546.171#

name::
* McsEngl.apn'EVOLUTION@cptIt,

_2012-02-27:
merged this concept with "application[393]".

apn'EndUser-code

_CREATED: {2012-01-23}

name::
* McsEngl.apn'EndUser-code@cptIt,
* McsEngl.user-code@cptIt393.1,

_SPECIFIC:
* user-data-code#cptItsoft97#
* user-processing-code,
* user-mixed-code,

apn.SPECIFIC

name::
* McsEngl.apn.SPECIFIC@cptIt,

_SPECIFIC: sysSoft.Alphabetically:
* dictionary
* education,
* web-app#cptItsoft52#

lcpalgo.LIBRARY

_CREATED: {2014-02-21} {2014-01-15}

name::
* McsEngl.lcpalgo.LIBRARY@cptIt,
* McsEngl.lcp'library@cptIt,
* McsEngl.lcplbr@cptIt,

* McsEngl.lcp'collection-of-code@cptIt,
* McsEngl.lcp'code.LIBRARY@cptIt,
* McsEngl.lcp'worldview-code@cptIt,
* McsEngl.lcp'library@cptIt,
* McsEngl.pgmlng'library@cptIt,
* McsEngl.software-library@cptIt, [wikipedia]
* McsEngl.lcplbr@cptIt, {2015-11-20}
* McsEngl.lcplibrary@cptIt,
* McsEngl.pllibrary@cptIt,

_DESCRIPTION:
Library is code without an-entry-point of execution.
[hmnSngo.2016-11-12]
===
In computer science, a library is a collection of implementations of behavior, written in terms of a language, that has a well-defined interface by which the behavior is invoked.[clarification needed] In addition, the behavior is provided for reuse by multiple independent programs. A program invokes the library-provided behavior via a mechanism of the language. For example, in a simple imperative language such as C, the behavior in a library is invoked by using C's normal function-call. What distinguishes the call as being to a library, versus being to another function in the same program, is the way that the code is organized in the system.
Library code is organized in such a way that it can be used by multiple programs that have no connection to each other, while code that is part of a program is organized to only be used within that one program. This distinction can gain a hierarchical notion when a program grows large, such as a multi-million-line program. In that case, there may be internal libraries that are reused by independent sub-portions of the large program. The distinguishing feature is that a library is organized for the purposes of being reused by independent programs or sub-programs, and the user only needs to know the interface, and not the internal details of the library.

The value of a library is the reuse of the behavior. When a program invokes a library, it gains the behavior implemented inside that library without having to implement that behavior itself. Libraries encourage the sharing of code in a modular fashion, and ease the distribution of the code.

The behavior implemented by a library can be connected to the invoking program at different program lifecycle phases. If the code of the library is accessed during the build of the invoking program, then the library is called a static library. An alternative is to build the executable of the invoking program and distribute that, independently from the library implementation. The library behavior is connected after the executable has been invoked to be executed, either as part of the process of starting the execution, or in the middle of execution. In this case the library is called a dynamic library. A dynamic library can be loaded and linked as part of preparing a program for execution, by the linker. Alternatively, in the middle of execution, an application may explicitly request that a module be loaded.

Most compiled languages have a standard library although programmers can also create their own custom libraries. Most modern software systems provide libraries that implement the majority of system services. Such libraries have commoditized the services which a modern application requires. As such, most code used by modern applications is provided in these system libraries.
[http://en.wikipedia.org/wiki/Library_(computing)]

lcplbr'doing

name::
* McsEngl.lcplbr'doing@cptIt,

lcplbr'licence

name::
* McsEngl.lcplbr'licence@cptIt,

lcplbr'module

name::
* McsEngl.lcplbr'module@cptIt,
* McsEngl.module-code.pgmlng@cptIt, {2014-01-25}
* McsEngl.package.pgmlng@cptIt, {2014-01-25}

PlaneT

_DESCRIPTION:
PLaneT is Racket's centralized package distribution system. Here you will find user-contributed Racket packages along with instructions for using them.

The packages on this site are user-contributed and not part of Racket. Be aware that when you download one of them for use in your programs, you are installing software on your computer that could deliberately or accidentally harm your system. Do not require from PLaneT any packages you do not trust.

For more about how to use PLaneT and for instructions on turning your own code into packages, see the PLaneT documentation (also available in your local installation).

This page shows the latest versions of all available packages, sorted by category.

You can be notified when new packages are added by subscribing to the RSS feed or to the PLaneT-Announce mailing list.
[http://planet.racket-lang.org/]

lcplbr'nameSpecific

name::
* McsEngl.lcplbr'nameSpecific@cptIt,

lcplbr'path

name::
* McsEngl.lcplbr'path@cptIt,

lcplbr'programing-language-written

name::
* McsEngl.lcplbr'programing-language-written@cptIt,

lcplbr'Resource

name::
* McsEngl.lcplbr'Resource@cptIt,

_ADDRESS.WPG:
* https://libraries.io// Libraries.io monitors 1,898,680 open source libraries across 33 different package managers.
* http://www.programmableweb.com//
* https://razor.occams.info/blog/2014/02/10/what-makes-a-good-api//

lcplbr'API

name::
* McsEngl.lcplbr'API@cptIt,
* McsEngl.conceptIt80,
* McsEngl.api.library@cptIt,
* McsEngl.Application-Program-Interface.library@cptIt,
* McsEngl.library-api@cptIt,

_DESCRIPTION:
The term “API” is vague. It’s often used as short-hand to mean a web-based method for programmable access to a system. But “API” is just a way of saying “protocol”. There were APIs before there was an Internet. Merely having an “API” doesn’t mean an actual use case has been solved: you can make a protocol without it being any useful.
What makes an API good?
Let’s take the common case where you have a relatively static, large dataset that you want to provide read-only access to.
[https://razor.occams.info/blog/2014/02/10/what-makes-a-good-api/]
===
API, an abbreviation of application program interface, is a set of routines, protocols, and tools for building software applications. The API specifies how software components should interact and APIs are used when programming graphical user interface (GUI) components. A good API makes it easier to develop a program by providing all the building blocks. A programmer then puts the blocks together.
Types of APIs
There are many different types of APIs for operating systems, applications or for websites. Windows, for example, has many API sets that are used by system hardware and applications — when you copy and paste text from one application to another, it is the API that allows that to work.
Most operating environments, such as MS-Windows, provide an API so that programmers can write applications consistent with the operating environment. Today, APIs are also specified by websites. For example, Amazon or eBay APIs allow developers to use the existing retail infrastructure to create specialized web stores. Third-party software developers also use Web APIs to create software solutions for end-users.
[http://www.webopedia.com/TERM/A/API.html]
===
An application programming interface (API) specifies how some software components should interact with each other.

In addition to accessing databases or computer hardware, such as hard disk drives or video cards, an API can be used to ease the work of programming graphical user interface components. In practice, many times an API comes in the form of a library that includes specifications for routines, data structures, object classes, and variables. In some other cases, notably for SOAP and REST services, an API comes as just a specification of remote calls exposed to the API consumers.[1]

An API specification can take many forms, including an International Standard such as POSIX, vendor documentation such as the Microsoft Windows API, the libraries of a programming language, e.g., Standard Template Library in C++ or Java API. Web APIs are also a vital component of today's web fabric. An API differs from an application binary interface (ABI) in that an API is source code based while an ABI is a binary interface. For instance POSIX is an API, while the Linux Standard Base is an ABI.[2]
[http://en.wikipedia.org/wiki/API] {2014-01-16}

lcplbr'api'relation-to-library-framework

name::
* McsEngl.lcplbr'api'relation-to-library-framework@cptIt,

_DESCRIPTION:
API libraries and frameworks[edit]
An API is usually related to a software library: the API describes and prescribes the expected behavior while the library is an actual implementation of this set of rules. A single API can have multiple implementations (or none, being abstract) in the form of different libraries that share the same programming interface.
An API can also be related to a software framework: a framework can be based on several libraries implementing several APIs, but unlike the normal use of an API, the access to the behavior built into the framework is mediated by extending its content with new classes plugged into the framework itself. Moreover the overall program flow of control can be out of the control of the caller, and in the hands of the framework via inversion of control or a similar mechanism.[5][6]
[http://en.wikipedia.org/wiki/API]

lcplbr'api.PROCEDURAL-LANGUAGE

name::
* McsEngl.lcplbr'api.PROCEDURAL-LANGUAGE@cptIt,

_DESCRIPTION:
In most procedural languages, an API specifies a set of functions or routines that accomplish a specific task or are allowed to interact with a specific software component. This specification is presented in a human readable format in paper books, or in electronic formats like ebooks or as man pages. For example, the math API on Unix systems is a specification on how to use the mathematical functions included in the math library. Among these functions there is a function, named sqrt(), that can be used to compute the square root of a given number.
[http://en.wikipedia.org/wiki/API]

lcplbr'api.OOL

name::
* McsEngl.lcplbr'api.OOL@cptIt,

_DESCRIPTION:
The API in this case can be conceived of as the totality of all the methods publicly exposed by the classes (usually called the class interface). This means that the API prescribes the methods by which one interacts with/handles the objects derived from the class definitions.
More generally, one can see the API as the collection of all the kinds of objects one can derive from the class definitions, and their associated possible behaviors. Again: the use is mediated by the public methods, but in this interpretation, the methods are seen as a technical detail of how the behavior is implemented.
[http://en.wikipedia.org/wiki/API]

lcplbr'storage-location

name::
* McsEngl.lcplbr'storage-location@cptIt,

lcplbr'version

name::
* McsEngl.lcplbr'version@cptIt,

SPECIFIC

name::
* McsEngl.lcplbr.specific@cptIt,

_SPECIFIC:
* class-library##
* web-application-framework#ql:* web_application_framework@cptIt#

lcplbr.CLASS

name::
* McsEngl.lcplbr.CLASS@cptIt,
* McsEngl.class-library@cptIt,

_DESCRIPTION:
Class libraries are the rough OOP equivalent of older types of code libraries. They contain classes, which describe characteristics and define actions (methods) that involve objects. Class libraries are used to create instances, or objects with their characteristics set to specific values. In some OOP languages, like Java, the distinction is clear, with the classes often contained in library files (like Java's JAR file format) and the instantiated objects residing only in memory (although potentially able to be made persistent in separate files). In others, like Smalltalk, the class libraries are merely the starting point for a system image that includes the entire state of the environment, classes and all instantiated objects.
[http://en.wikipedia.org/wiki/Library_(computing)]

lcplbr.CORE

name::
* McsEngl.lcplbr.CORE@cptIt,
* McsEngl.conceptIt80,
* McsEngl.API.core.library@cptIt,
* McsEngl.api.pgmlng@cptIt80,
* McsEngl.Application-Program-Interface@cptIt,
* McsEngl.library'of'pgm@cptIt80,
* McsEngl.pgm'api@cptIt80,
* McsEngl.pgmlng'api@cptIt,
* McsEngl.pgmlng'core-library@cptIt,
* McsEngl.standard'library@cptIt80,
* McsEngl.lcplibraryCore@cptIt80, {2014-01-15}

lcplbrCore'DEFINITION

name::
* McsEngl.lcplbrCore'DEFINITION@cptIt,

Most programming languages have an associated core library (sometimes known as the 'Standard library', especially if it is included as part of the published language standard), which is conventionally made available by all implementations of the language. Core libraries typically include definitions for commonly used algorithms, data structures, and mechanisms for input and output.
A language's core library is often treated as part of the language by its users, although the designers may have treated it as a separate entity.
[http://en.wikipedia.org/wiki/Programming_language]

What are APIs?
Application Programming Interfaces
An Application Programming Interface (API) is a software interface that exposes access to some internal functionality of a piece of software for use by programmers, to get access to specific information, to trigger special behavior, or to perform some other action. The APIs that the WebApps WG develops are typically client-side script APIs, for use in browsers and similar user agents (as opposed to server-side APIs, for example).
[http://www.w3.org/2008/webapps/]

An API is an application programming interface, a set of FUNCTIONS or methods used to access some functionality.
[DOM 1997dec09]

API (library of classes, objects and methods)

API
A set of ROUTINES that an application uses to request and carry out lower-level services performed by a computer's operating system. For computers running a graphical user interface, an API manages an application's windows, icons, menus, and dialog boxes.
[Microsoft Developer Studio, 1996]

APIs are the tools that program developers use to access the functionality of a computer's operating system and the services of its peripheral devices.
Generally, APIs are system calls, routines, that allow programmers access to the services provided by the operating system. APIs can be used to manipulate files and directories, provide record locking and transaction tracking, semaphore control, interface to graphics adapters, and a wide variety of other services.
On a Local Area Network, an API such as IBM's NetBIOS, provides applications with a uniform means of requesting services from the lower levels of the network operating system.
[SOURCE: PC-GLOSSARY 1993]

Είναι υποπρογράμματα γενικής χρήσης.
[Αντωνάκος κα, "Ανάπτυξη εφαρμογών..." Γ' Λυκείου, 1999 α' έκδοση, 220]

SPECIFIC

VIM:
Lotus cc:Mail, Lotus Notes

MAPI:
MS-mail, Higgins.

lcplbr.CORE.NO (custom)

_CREATED: {2014-01-15}

name::
* McsEngl.lcplbr.CORE.NO (custom)@cptIt,
* McsEngl.pgmlng'library.coreNo@cptIt,
* McsEngl.pgmlng'library.custom@cptIt,

_DESCRIPTION:
Most compiled languages have a standard library although programmers can also create their own custom libraries.
[http://en.wikipedia.org/wiki/Library_(computing)]

lcplbr.DIRECTORY

name::
* McsEngl.lcplbr.DIRECTORY@cptIt,
* McsEngl.pgmlng'directory-code@cptIt,

lcplbr.doing.GRAPHICS

name::
* McsEngl.lcplbr.doing.GRAPHICS@cptIt,

_DESCRIPTION:
A graphics library is a program library designed to aid in rendering computer graphics to a monitor. This typically involves providing optimized versions of functions that handle common rendering tasks. This can be done purely in software and running on the CPU, common in embedded systems, or being hardware accelerated by a GPU, more common in PCs. By employing these functions, a program can assemble an image to be output to a monitor. This relieves the programmer of the task of creating and optimizing these functions, and allows them to focus on building the graphics program.
Examples
Cairo (graphics)
Mesa 3D
Clutter
MiniGL
Open Inventor
Openskia
emWin An Embedded Graphics Library
SFML
Simple DirectMedia Layer
[http://en.wikipedia.org/wiki/Graphics_library]

lcplbr.WIDGET

name::
* McsEngl.lcplbr.WIDGET@cptIt,
* McsEngl.GUI-toolkit@cptIt,
* McsEngl.widget-toolkit@cptIt,
* McsEngl.widget-library@cptIt,

_DESCRIPTION:
In computing, a widget toolkit, widget library, or GUI toolkit is a set of widgets for use in designing applications with graphical user interfaces (GUIs). The toolkit itself is a piece of software which is usually built on the top of an operating system, windowing system, or window manager and provides programs with an application programming interface (API), allowing them to make use of widgets. Each widget facilitates a specific user-computer interaction, and appears as a visible part of the computer's GUI. Widget toolkits can be either native or cross platform.

Widgets that are provided by a toolkit typically adhere to a unified design specification, including aesthetics, to lend a sense of overall cohesion among various parts of the application and between various applications within the GUI.

Widget toolkits also contain software to assist in the creation of window managers, as windows themselves are considered widgets. Some widgets support interaction with the user, for example labels, buttons, and check boxes. Others act as containers that group the widgets added to them, for example windows, panels, and tabs.

The graphical user interface of a program is commonly constructed in a cascading manner, with widgets being added directly to on top of existing widgets. In many implementations application windows are added directly to the desktop by the window manager, and can be stacked layered on top of each other through various means. Each window is associated with a particular application which controls the widgets added to its canvas, which can be watched and modified by their associated applications.

Most widget toolkits use event-driven programming as a model for interaction.[1] The toolkit handles user events, for example when the user clicks on a button. When an event is detected, it is passed on to the application where it is dealt with. The design of those toolkits has been criticized for promoting an oversimplified model of event-action, leading programmers to create error-prone, difficult to extend and excessively complex application code.[2] Finite State Machines and Hierarchical State Machines have been proposed as high-level models to represent the interactive state changes for reactive programs.

The look and feel of the widgets can be hard-coded in the toolkit, but some widget toolkit APIs decouple the look and feel from the definition of the widgets, allowing the widgets to be themed. (see pluggable look and feel).
[http://en.wikipedia.org/wiki/Widget_toolkit]

lcplbr.doing.MATH

name::
* McsEngl.lcplbr.doing.MATH@cptIt,

lcplbr.doing.MULTIMEDIA

name::
* McsEngl.lcplbr.doing.MULTIMEDIA@cptIt,

_DESCRIPTION:
A multimedia framework is a software framework that handles media on a computer and through a network. A good multimedia framework offers an intuitive API and a modular architecture to easily add support for new audio, video and container formats and transmission protocols. It is meant to be used by applications such as media players and audio or video editors, but can also be used to build videoconferencing applications, media converters and other multimedia tools.

In contrast to function libraries, a multimedia framework provides a run time environment for the media processing. Ideally such an environment provides execution contexts for the media processing blocks separated from the application using the framework. The separation supports the independent processing of multimedia data in a timely manner. These separate contexts can be implemented as threads.
[http://en.wikipedia.org/wiki/Multimedia_framework]

lcplbr.doing.NATURAL-LANGUAGE-PROCESSING

name::
* McsEngl.lcplbr.doing.NATURAL-LANGUAGE-PROCESSING@cptIt,

lcplbr.DYNAMIC (staticNo)

name::
* McsEngl.lcplbr.DYNAMIC (staticNo)@cptIt,
* McsEngl.dynamic-library@cptIt,

_DESCRIPTION:
An alternative is to build the executable of the invoking program and distribute that, independently from the library implementation. The library behavior is connected after the executable has been invoked to be executed, either as part of the process of starting the execution, or in the middle of execution. In this case the library is called a dynamic library. A dynamic library can be loaded and linked as part of preparing a program for execution, by the linker. Alternatively, in the middle of execution, an application may explicitly request that a module be loaded.
[http://en.wikipedia.org/wiki/Library_(computing)]

lcplbr.EXTERNAL

name::
* McsEngl.lcplbr.EXTERNAL@cptIt,
* McsEngl.lcp'external-code-collection@cptIt,

lcplbr.EXTERNAL.NO

name::
* McsEngl.lcplbr.EXTERNAL.NO@cptIt,
* McsEngl.lcp'externalNo-code-collection@cptIt,

lcplbr.FILE

name::
* McsEngl.lcplbr.FILE@cptIt,
* McsEngl.pgmlng'file-code@cptIt,

lcplbr.FILE-PART

name::
* McsEngl.lcplbr.FILE-PART@cptIt,
* McsEngl.lcp'library.file-part-code@cptIt,

lcplbr.licence.FREE

name::
* McsEngl.lcplbr.licence.FREE@cptIt,

lcplbr.REMOTE

name::
* McsEngl.lcplbr.REMOTE@cptIt,
* McsEngl.remote-library@cptIt,

_DESCRIPTION:
Another solution to the library issue comes from using completely separate executables (often in some lightweight form) and calling them using a remote procedure call (RPC) over a network to another computer. This approach maximizes operating system re-use: the code needed to support the library is the same code being used to provide application support and security for every other program. Additionally, such systems do not require the library to exist on the same machine, but can forward the requests over the network.
However, such an approach means that every library call requires a considerable amount of overhead. RPC calls are much more expensive than calling a shared library that has already been loaded on the same machine. This approach is commonly used in a distributed architecture that makes heavy use of such remote calls, notably client-server systems and application servers such as Enterprise JavaBeans.
[http://en.wikipedia.org/wiki/Library_(computing)]

lcplbr.STATIC (dynamicNo)

name::
* McsEngl.lcplbr.STATIC (dynamicNo)@cptIt,
* McsEngl.static-library@cptIt,

_DESCRIPTION:
The behavior implemented by a library can be connected to the invoking program at different program lifecycle phases. If the code of the library is accessed during the build of the invoking program, then the library is called a static library.
[http://en.wikipedia.org/wiki/Library_(computing)]

lcpalgo.PROGRAM (view)#cptIt59#

name::
* McsEngl.lcpalgo.PROGRAM (view)@cptIt,
* McsEngl.lcp'application@cptIt,
* McsEngl.pl'program@cptIt,
* McsEngl.pgmlng'program@cptIt,

lcpalgo.PACKAGE

_CREATED: {2014-06-22}

name::
* McsEngl.lcpalgo.PACKAGE@cptIt,
* McsEngl.lcppackage@cptIt,

_DESCRIPTION:
a package is a collection of one or more modules that is published somewhere so others may use it (this may be published on the internet, or internal to a project). It has metadata that describes the package, its version number, who wrote it, and what other published packages it depends on. In Python this information is in a file called setup.py, in JavaScript it's... well, it depends.

I'll note that Linux distributions also feature packages that can be installed. I'll call these deployment packages. Deployment packages for various reasons are not very convenient to develop against. This is why many languages such as Python or JavaScript or Ruby or Perl have language-specific package systems. I'm focusing on such development-oriented packaging systems here.
[http://blog.startifact.com/posts/overwhelmed-by-javascript-dependencies.html]

lcp'package-registry

name::
* McsEngl.lcp'package-registry@cptIt,

_DESCRIPTION:
A package registry is a system where packages can be registered so that others may find and download them. CPAN is the package registry for Perl code, for instance. Some of these systems allow manual download of packages through a web interface as well as automated downloads; Python's PyPI is the example I'm most familiar with. JavaScript has several package registries.
[http://blog.startifact.com/posts/overwhelmed-by-javascript-dependencies.html]

lcpalgo.PROJECT

name::
* McsEngl.lcpalgo.PROJECT@cptIt,
* McsEngl.lcpproject@cptIt,

_DESCRIPTION:
a project is the codebase I'm hacking on. It could be an application or a framework or a library. It's in hackable form, checked out from a version control repository such as git. You can check out jQuery or the Linux Kernel or Obviel as a project. A project can typically be used to generate one or more packages.
[http://blog.startifact.com/posts/overwhelmed-by-javascript-dependencies.html]

lcpalgo.HIGH-LEVEL-CODE (lcphcd sourcecode)

_CREATED: {2014-10-29} {2014-08-04}

name::
* McsEngl.lcpalgo.HIGH-LEVEL-CODE (lcphcd sourcecode)@cptIt,
* McsEngl.code-construct@cptIt,
* McsEngl.code.pgmlng@cptIt,
* McsEngl.codeA@cptIt, {2014-10-29}
* McsEngl.codeSrc@cptIt, {2014-11-13}
* McsEngl.mdp'code@cptIt,
* McsEngl.mdp'DomainOut@cptIt,
* McsEngl.pgmlng'code@cptIt,
* McsEngl.pl'code@cptIt,
* McsEngl.pl-code@cptIt, {2014-02-02}
* McsEngl.plcode@cptIt, {2014-02-02}
* McsEngl.codeSource@cptIt,
* McsEngl.source-code@cptIt,

_DESCRIPTION:
There are 2 codes in programming languages, the source-code and the binary-code. The binary-code is machine specific, the source-code MUST be NOT machine specific, but close to the algorithm (archetype) that denotes. IF we don't distiguish the 2 codes, confusion and ambiguities is the result.
For example, there is no variable. There is source-variable and binary-variable. The source-variable is a name-value association, the binary-variable is a part of RAM which contains a value and has a name|address.
[hmnSngo.2014-08-04]

_DEFINITION:
There are 2 codes in programming languages, the source-code and the binary-code. The binary-code is machine specific, the source-code MUST be NOT machine specific, but close to the algorithm (archetype) that denotes. IF we don't distiguish the 2 codes, confusion and ambiguities is the result.
For example, there is no variable. There is source-variable and binary-variable. The source-variable is a name-value association, the binary-variable is a part of RAM which contains a value and has a name|address.
[hmnSngo.2014-08-04]
The set of entities used to denote the entities of the domain.
[KasNik, 2007-12-27]

lcpcode'code-set

_CREATED: {2014-01-08}

name::
* McsEngl.lcpcode'code-set@cptIt,
* McsEngl.pgmlng'code-set@cptIt,
* McsEngl.pgmlng'domainOut@cptIt,

_PART:
* code#ql:pgmlng'code#
* computer-program#cptItsoft59#

lcpcode'documentation

name::
* McsEngl.lcpcode'documentation@cptIt,

lcpcode'documenting

name::
* McsEngl.lcpcode'documenting@cptIt,

_DESCRIPTION:
Documentation has traditionally been done twice - first there are comments documenting what a function does, and then this gets rewritten into a separate html or man page. And naturally, over time, they'll tend to diverge as the code gets updated and the separate documentation doesn't. Being able to generate the requisite polished documentation directly from the comments embedded in the source will not only cut the time in half needed to prepare documentation, it will make it much easier to keep the documentation in sync with the code. Ddoc is the specification for the D documentation generator.
[http://dlang.org/overview.html]

lcp'documentation-generator

name::
* McsEngl.lcp'documentation-generator@cptIt,

lcpcode'executing

name::
* McsEngl.lcpcode'executing@cptIt,
* McsEngl.execution-time.pgmlng@cptIt,
* McsEngl.runtime.pgmlng@cptIt,

lcpcode'maintaining

name::
* McsEngl.lcpcode'maintaining@cptIt,

lcpcode'modality

name::
* McsEngl.lcpcode'modality@cptIt,
* McsEngl.lcp'modality@cptIt,

_DESCRIPTION:
Most programming languages are purely textual; they use sequences of text including words, numbers, and punctuation, much like written natural languages. On the other hand, there are some programming languages which are more graphical in nature, using spatial relationships between symbols to specify a program.

lcpcode'parsing

name::
* McsEngl.lcpcode'parsing@cptIt,
* McsEngl.parsing-stage.pgmlng@cptIt,
* McsEngl.pgmlng'parsing-the-code@cptIt,

lcpcode'type-system

_CREATED: {2013-12-20}

name::
* McsEngl.lcpcode'type-system@cptIt,
* McsEngl.type-system.pgmlng@cptIt,

_DESCRIPTION:
In programming languages, a type system is a collection of rules that assign a property called a type to the various constructs—such as variables, expressions, functions or modules—a computer program is composed of.[1] The main purpose of a type system is to reduce bugs in computer programs[2] by defining interfaces between different parts of a computer program, and then checking that the parts have been connected in a consistent way. This checking can happen statically (at compile time), dynamically (at run time), or as a combination thereof.

An example of a simple type system is that of the C language. The portions of a C program are the function definitions. One function is invoked by another function. The interface of a function states the name of the function and a list of values that are passed to the function's code. The code of an invoking function states the name of the invoked, along with the names of variables that hold values to pass to it. During execution, the values are placed into temporary storage, then execution jumps to the code of the invoked function. The invoked function's code accesses the values and makes use of them. If the instructions inside the function are written with the assumption of receiving an integer value, but the calling code passed a floating-point value, then the wrong result will be computed by the invoked function. The C compiler checks the type declared for each variable sent, against the type declared for each variable in the interface of the invoked function. If the types do not match, the compiler throws a compile-time error.

In greater technical depth, a type-system associates a type with each computed value. By examining the flow of these values, a type system attempts to ensure or prove that no type errors can occur. The particular type system in question determines exactly what constitutes a type error, but in general the aim is to prevent operations expecting a certain kind of value from being used with values for which that operation does not make sense (logic errors); memory errors will also be prevented. Type systems are often specified as part of programming languages, and built into the interpreters and compilers for them; although the type system of a language can be extended by optional tools that perform additional kinds of checks using the language's original type syntax and grammar.

A compiler may also use the static type of a value to optimize the storage it needs and the choice of algorithms for operations on the value. In many C compilers the float data type, for example, is represented in 32 bits, in accord with the IEEE specification for single-precision floating point numbers. They will thus use floating-point-specific microprocessor operations on those values (floating-point addition, multiplication, etc.).

The depth of type constraints and the manner of their evaluation affect the typing of the language. A programming language may further associate an operation with varying concrete algorithms on each type in the case of type polymorphism. Type theory is the study of type systems, although the concrete type systems of programming languages originate from practical issues of computer architecture, compiler implementation, and language design.
[http://en.wikipedia.org/wiki/Type_system]

type#ql:pgmlng'value.type#

SPECIFIC

name::

_SPECIFIC:
Type safety
Dynamic type-checking
Static type-checking
Inferred vs. Manifest
Nominal vs. Structural
Dependent typing
Duck typing
Latent typing
Substructural typing
Uniqueness typing
Strong and weak typing
[http://en.wikipedia.org/wiki/Type_system]

lcpalgo.ASSEMBLY-CODE (lcpacd)

_CREATED: {2017-03-09}

name::
* McsEngl.lcpalgo.ASSEMBLY-CODE (lcpacd)@cptIt,

lcpalgo.BINARY-CODE (lcpbcd)

_CREATED: {2014-08-04}

name::
* McsEngl.lcpalgo.BINARY-CODE (lcpbcd)@cptIt,
* McsEngl.lcp'bcode@cptIt,
* McsEngl.lcp'binary-code@cptIt,
* McsEngl.lcp'codeBNR@cptIt,
* McsEngl.lcpbcd@cptIt, {2016-11-23}

* McsEngl.binary-code@cptIt,
* McsEngl.codeBinary@cptIt,
* McsEngl.codeB@cptIt, {2014-10-29}
* McsEngl.codeBnr@cptIt, {2014-11-13}

=== _NOTES: Binary is a better name than 'digital' because the information is not comprised of digits (= 0,1,2,3,4,5,6,7) but is binary comprised of 2 entities.
[hmnSngo.2014-08-04]

_DESCRIPTION:
There are 2 codes in programming languages, the source-code and the binary-code. The binary-code is machine specific, the source-code MUST be NOT machine specific, but close to the algorithm (archetype) that denotes. IF we don't distiguish the 2 codes, confusion and ambiguities is the result.
For example, there is no variable. There is source-variable and binary-variable. The source-variable is a name-value association, the binary-variable is a part of RAM which contains a value and has a name|address.
[hmnSngo.2014-08-04]

lcpalgo.TRINARY-CODE (trits)

name::
* McsEngl.lcpalgo.TRINARY-CODE (trits)@cptIt,

lcp'Evaluation

name::
* McsEngl.lcp'Evaluation@cptIt,

What are the top 3 languages to master (in order) to build a strong foundation in programming?
Ovi Dovi, Back-End Web Developer,
A simple but effective answer:
[Python]: Learn Python first. It’s known as a Introductory language and taught to beginners all over the world including top universities.
[C++] : Then learn C++ . After knowing C++, you’ll be like, ow, these are the stuffs that I taken for granted. They had to automate this complex stuffs in python for me, huh ?
[javaScript]: Then learn javaScript. Why you ask? Well, you gotta know how weird a language can be right?
Sometimes, one language might serve you till your death but knowing another might unfold your perception about any language. If you want to go deeper, learn C, the mother of em all, and the fastest. But with these three languages mentioned above, you can do anything, from web to cross platform software, Machine Learning, AI, Visualization, anything.
[https://www.quora.com/What-are-the-top-3-languages-to-master-in-order-to-build-a-strong-foundation-in-programming]

lcp'Human

name::
* McsEngl.lcp'Human@cptIt,

lcp'human.CREATOR

name::
* McsEngl.lcp'human.CREATOR@cptIt,
* McsEngl.pgmlng'creator@cptIt,
* McsEngl.designer'of'programmingLanguage@cptIt,

lcp'human.PROGRAMER

name::
* McsEngl.lcp'human.PROGRAMER@cptIt,
* McsEngl.conceptIt248.2,
* McsEngl.coder@cptIt,
* McsEngl.human.programer@cptIt,
* McsEngl.programer@cptIt,
* McsEngl.coder@cptIt,
* McsEngl.developer.program@cptIt,
* McsEngl.programmer@cptIt,
* McsEngl.user.programing-language@cptIt,
* McsEngl.analyst@cptIt,
* McsEngl.pgmlng'programer@cptIt,
* McsEngl.programmer@cptIt,
* McsEngl.software-engineer@cptIt,

* McsEngl.humanPmr@cptIt,

* McsEngl.conceptIt248.2,
* McsEngl.conceptIt533i,

_GENERIC:
* human.techInfo#ql:tchinf'human#

_DEFINITION:
Computer programmers are those who write computer software. Their job usually involves:
* Requirements analysis
* Specification
* Software architecture
* Coding
* Compilation
* Software testing
* Documentation
* Integration
* Maintenance
[http://en.wikipedia.org/wiki/Application_programming]
===
A programmer, computer programmer, developer, coder, or software engineer is a person who writes computer software. The term computer programmer can refer to a specialist in one area of computer programming or to a generalist who writes code for many kinds of software. One who practices or professes a formal approach to programming may also be known as a programmer analyst. A programmer's primary computer language (C, C++, C#, Java, Lisp, Python, etc.) is often prefixed to the above titles, and those who work in a web environment often prefix their titles with Web. The term programmer can be used to refer to a software developer, Web developer, mobile applications developer, embedded firmware developer, software engineer, computer scientist, or software analyst. However, members of these professions typically[citation needed] possess other software engineering skills, beyond programming; for this reason, the term programmer, or code monkey, is sometimes considered an insulting or derogatory oversimplification of these other professions.[1] This has sparked much debate amongst developers, analysts, computer scientists, programmers, and outsiders who continue to be puzzled at the subtle differences in the definitions of these occupations.[2][3][4][5][6]



Ada Lovelace, the first computer programmer.[7]
British countess and mathematician Ada Lovelace is considered the first computer programmer, as she was the first to write and publish an algorithm intended for implementation on Charles Babbage's analytical engine, in October 1842, intended for the calculation of Bernoulli numbers.[8] Lovelace was also the first person to comment on the potential for computers to be used for purposes other than computing calculations. Because Babbage's machine was never completed to a functioning standard in her time, she never saw her algorithm run.

The first person to run a program on a functioning modern electronically based computer was computer scientist Konrad Zuse, in 1941.

The ENIAC programming team, consisting of Kay McNulty, Betty Jennings, Betty Snyder, Marlyn Wescoff, Fran Bilas and Ruth Lichterman were the first regularly working programmers.[9][10]

International Programmers' Day is celebrated annually on 7 January.[11] In 2009, the government of Russia decreed a professional annual holiday known as Programmers' Day to be celebrated on 13 September (12 September in leap years). It had also been an unofficial international holiday before that.
[http://en.wikipedia.org/wiki/Programmer]

hmnPmr'resource

name::
* McsEngl.hmnPmr'resource@cptIt,

_ADDRESS.WPG:
* http://www.businessinsider.com/why-coders-get-into-religious-wars-over-programming-languages-2015-6,

hmnPmr.SPECIFIC

name::
* McsEngl.hmnPmr.SPECIFIC@cptIt,

Who Invented Computer Programming?
Ada Lovelace, the daughter of Lord Byron, is recognized for writing the first ever computer program, in the 1840s.

Ada Lovelace was the only legitimate child of the legendary English poet
Lord Byron, but he separated from his wife a month after Ada was born and
left England, so they never knew each other. In 1833, at age 17, Lovelace
met mathematician Charles Babbage, who had theorized a grand calculating
machine that he called the Analytical Engine. Spurred on by her scientific
education and smitten with the idea of a “computing machine,” Lovelace
published the first algorithm for this hypothetical machine, earning her
the title of the world’s first computer programmer.

Read More: http://www.wisegeek.com/who-invented-computer-programming.htm?m {2018-04-15}

lcp'IMPLEMENTOR

name::
* McsEngl.lcp'IMPLEMENTOR@cptIt,
* McsEngl.implementor'of'pcl@cptIt,

_DEFINITION:
A programming language implementation is a system for executing programs written in a programming language.
[http://en.wikipedia.org/wiki/Programming_language_implementation]

lcp'Issue

name::
* McsEngl.lcp'Issue@cptIt,

lcp'mistake

name::
* McsEngl.lcp'mistake@cptIt,

lcp'price

name::
* McsEngl.lcp'price@cptIt,

lcp'Semantics

name::
* McsEngl.lcp'Semantics@cptIt,
* McsEngl.semantics-of-pcl@cptIt,

_DEFINITION:
* The meaning given to a combination of symbols is handled by semantics.
[http://en.wikipedia.org/wiki/Programming_language]
===
Programming languages are characterized by their syntax and their semantics.
The syntax of a language defines its user interface; If you understand a language’s syntax, you understand what it makes easy.
The semantics of a language defines its capabilities; If you understand a language’s semantics, you understand what it does well.
[http://ristrettolo.gy/#about-this-book]
===
The meaning of a string in some language, as opposed to {syntax} which describes how symbols may be combined independent of their meaning.
The semantics of a programming language is a function from programs to answers. A program is a {closed term} and, in practical languages, an answer is a member of the syntactic category of values. The two main kinds are {denotational semantics} and {operational semantics}. (21 Jun 1995)
[FOLDOC 1998feb] {1998-03-26}

lcp'EXECUTION-SEMANTICS

name::
* McsEngl.lcp'EXECUTION-SEMANTICS@cptIt,

Execution semantics
Once data has been specified, the machine must be instructed to perform operations on the data. The execution semantics of a language defines how and when the various constructs of a language should produce a program behavior.
For example, the semantics may define the strategy by which expressions are evaluated to values, or the manner in which control structures conditionally execute statements.
[http://en.wikipedia.org/wiki/Programming_language]

lcp'Relation-to-natural-language

name::
* McsEngl.lcp'Relation-to-natural-language@cptIt,

_DESCRIPTION:
Both are 'maping-methods' with very diferent domainIns.
The domainIn of a natural-language is brainin-information.
The domainIn of a programing-language is algorithms (= processing of sensory-information).
[hmnSngo.2014-01-08]

lcp'resourceInfHmn#cptResource843#

name::
* McsEngl.lcp'resourceInfHmn@cptIt,

_ADDRESS.WPG:
* {2019-05-08} Federico-Tomassetti, https://tomassetti.me/how-to-create-programming-language/,
* https://tomassetti.me/resources-create-programming-languages/
* http://www.itworld.com/article/2842123/9-cutting-edge-programming-languages-worth-learning-now.html, 2014,
* http://rigaux.org/language-study/syntax-across-languages//
* http://worrydream.com/LearnableProgramming//
* http://progopedia.com/paradigm//
* http://en.literateprograms.org/LiteratePrograms:Welcome,
* Do slower programmers get there faster? http://jaxenter.com/slow-programming-112923.html,

The classic prototype-based OO language developed at Sun:
     http://self.sunlabs.com/
     A prototype-based, C++, constraint-based user interface system:
     http://www.cs.cmu.edu/Groups/amulet/amulet-home.html
     A bunch of variants on constraint-based languages and systems,      including Web layout:      (The hierarchy of constraints is especially useful for systems with      defaults and different constraint strengths)
     http://www.cs.washington.edu/research/constraints/
     Ken Meltsner 1997oct

lcp'rule

name::
* McsEngl.lcp'rule@cptIt,

THE GOLDEN RULE OF PROGRAMING:
"We never use an UNDEFINED name"
[hknm2014-07-18]

lcp'Specification

name::
* McsEngl.lcp'Specification@cptIt,
* McsEngl.specification'of'programing'lang@cptIt,

_DEFINITION:
The specification of a programming language is intended to provide a definition that language users and implementors can use to interpret the behavior of programs when reading their source code.
[http://en.wikipedia.org/wiki/Programming_language]

SPESIFEPTO:
A programming language specification can take several forms, including the following:
* An explicit definition of the syntax and semantics of the language. While syntax is commonly specified using a formal grammar, semantic definitions may be written in natural language (e.g., the C language), or a formal semantics (e.g., the Standard ML [16]and Scheme[17] specifications).
* A description of the behavior of a translator for the language (e.g., the C++ and Fortran). The syntax and semantics of the language has to be inferred from this description, which may be written in natural or a formal language.
* A model implementation, sometimes written in the language being specified (e.g., Prolog). The syntax and semantics of the language are explicit in the behavior of the model implementation.
[http://en.wikipedia.org/wiki/Programming_language]

Lexical_grammar
The specification of a programming language will include a set of rules, often expressed syntactically, specifying the set of possible character sequences that can form a token or lexeme. The whitespace characters are often ignored during lexical analysis.
[http://en.wikipedia.org/wiki/Token_%28parser%29]

lcp'Theory#attOth#

_CREATED: {2007-09-11}

name::
* McsEngl.lcp'Theory@cptIt,
* McsEngl.conceptIt566,
* McsEngl.plt@cptIt566,
* McsEngl.programming'language'theory@cptIt566,

Programming language theory (commonly known as PLT) is a branch of computer science that deals with the design, implementation, analysis, characterization, and classification of programming languages and programming language features. It is a multi-disciplinary field, both depending on (and in some cases affecting) mathematics, software engineering, linguistics, and even the cognitive sciences. It is a well-recognized branch of computer science, and as of 2006, an active research area, with results published in numerous journals dedicated to PLT, as well as in general computer science and engineering publications. Most undergraduate computer science programs require coursework in the topic.
[http://en.wikipedia.org/wiki/Programming_language_theory]

_Science:
In addition, PLT makes use of many other branches of mathematics, including computability theory, category theory, and set theory
[http://en.wikipedia.org/wiki/Programming_language_theory]

lcp'Tool

name::
* McsEngl.lcp'Tool@cptIt,
* McsEngl.developer-tool@cptIt,
* McsEngl.development-tool-of-programing-language@cptIt,
* McsEngl.lcp'program@cptIt,
* McsEngl.pgmlng'developer-tool@cptIt,
* McsEngl.pgmlng'development-tool@cptIt,
* McsEngl.pgmlng'Program-Development@cptIt,
* McsEngl.pgmlng'tool@cptIt,
* McsEngl.programming-tool@cptIt,
* McsEngl.software-development-tool@cptIt,
* McsEngl.pgmtool@cptIt,

_DESCRIPTION:
A programming tool or software development tool is a program or application that software developers use to create, debug, maintain, or otherwise support other programs and applications. The term usually refers to relatively simple programs, that can be combined together to accomplish a task, much as one might use multiple hand tools to fix a physical object.

The distinction between tools and applications is murky. For example, developers use simple databases (such as a file containing a list of important values) all the time as tools.[dubious – discuss] However a full-blown database is usually thought of as an application or software in its own right.

For many years, computer-assisted software engineering (CASE) tools were sought after. Successful tools have proven elusive.[citation needed] In one sense, CASE tools emphasized design and architecture support, such as for UML. But the most successful of these tools are IDEs.

The ability to use a variety of tools productively is one hallmark of a skilled software engineer.
[http://en.wikipedia.org/wiki/Programming_tool]

lcptool'resource

name::
* McsEngl.lcptool'resource@cptIt,

_ADDRESS.WPG:
* https://koding.com//
* https://zellwk.com/blog/choosing-a-build-tool//

SPECIFIC

* lcptool.specific,

_SPECIFIC:
* analyzer##
* api-doc-generator##
* build-tool##
* case-tool##
* compiler#cptItsoft401#
* dubugger#cptItsoft402#
* IDE#cptItsoft430#
* interpreter#cptItsoft513#
* parser#ql:pgmlng'parser#
* parser-generator##
* REPL##
* runtime##

lcptool.API-DOC-GENERATOR

_CREATED: {2016-11-12}

name::
* McsEngl.lcptool.API-DOC-GENERATOR@cptIt,
* McsEngl.api-doc-generator@cptIt,

* McsEngl.api-doc-generator@cptIt,

lcptool.Natural-Docs

name::
* McsEngl.lcptool.Natural-Docs@cptIt,
* McsEngl.Natural-Docs@cptIt,

_DESCRIPTION:
Natural Docs is an open-source documentation generator for multiple programming languages.  You document your code in a natural syntax that reads like plain English.  Natural Docs then scans your code and builds high-quality HTML documentation from it.
[http://www.naturaldocs.org/]
===
Natural Docs requires Perl 5.8 or higher to run.  If you’re using Linux or Mac OS X, you should already have it.  If you’re using Windows and haven’t installed it yet, you can get ActiveState’s ActivePerl for free.  There are free versions available for many other platforms as well.
[http://www.naturaldocs.org/download.html]

Syntax

_DESCRIPTION:
/*
Function: Multiply

Multiplies two integers.

Parameters:

x - The first integer.
y - The second integer.

Returns:

The two integers multiplied together.

See Also:

<Divide>
*/
int Multiply (int x, int y)
{ return x * y; };
[http://www.naturaldocs.org/documenting.html]

lcptool.CASE-TOOL

name::
* McsEngl.lcptool.CASE-TOOL@cptIt,
* McsEngl.conceptIt341,
* McsEngl.CASE-TOOL@cptIt,
* McsEngl.case-tool@cptIt341,
* McsEngl.computer-aided-software-engineering@cptIt,
* McsEngl.computer-program.CASE-TOOL@cptIt,
* McsEngl.program.system.casetool@cptIt341,

DEFINITION

Function 444-5.

"ΜΕ ΜΙΑ ΦΡΑΣΗ, ΘΑ ΜΠΟΡΟΥΣΑΜΕ ΝΑ ΠΟΥΜΕ ΟΤΙ CASE ΣΗΜΑΙΝΕΙ SOFTWARE AUTOMATION, ΤΟΝ ΑΥΤΟΜΑΤΙΣΜΟ ΔΗΛΑΔΗ ΤΗΣ ΔΙΑΔΙΚΑΣΙΑΣ ΠΑΡΑΓΩΓΗΣ ΛΟΓΙΣΜΙΚΟΥ ή ΑΛΛΙΩΣ, ΤΗ ΧΡΗΣΗ ΛΟΓΙΣΜΙΚΟΥ ΓΙΑ ΠΑΡΑΓΩΓΗ ΛΟΓΙΣΜΙΚΟΥ, ΣΕ ΟΛΕΣ ΤΙΣ ΦΑΣΕΙΣ ΤΟΥ ΚΥΚΛΟΥ ΖΩΗΣ ΤΟΥ ΤΕΛΕΥΤΑΙΟΥ, ΔΗΛΑΔΗ ΣΤΟ ΣΤΡΑΤΗΓΙΚΟ ΣΧΕΔΙΑΣΜΟ, ΣΤΗΝ ΑΝΑΛΥΣΗ, ΣΤΗ ΣΧΕΔΙΑΣΗ, ΣΤΗΝ ΥΛΟΠΟΙΗΣΗ ΚΑΙ ΣΥΝΤΗΡΗΣΗ, ΑΛΛΑ ΚΑΙ ΣΤΗ ΔΙΑΧΕΙΡΙΣΗ ΤΟΥ ΟΛΟΥ ΕΡΓΟΥ"
[RAM, SEP 1993, 60]

GENERIC

_GENERIC:
* PROGRAM#cptIt59#

SPECIFIC

PROGRAMS#ql:[Field program:case.tool]# {|4| CASE'TOOL}

TO ΑΚΡΩΝΥΜΙΟ ΦΑΙΝΕΤΑΙ ΟΤΙ ΠΡΩΤΟΧΡΗΣΙΜΟΠΟΙΗΘΗΚΕ ΑΠΟ ΤΟΝ JOHN MANLEY TO 1981.
[RAM, SEP 1993, 60]

lcptool.DEBUGGER

name::
* McsEngl.lcptool.DEBUGGER@cptIt,
* McsEngl.conceptIt402,
* McsEngl.DEBUGGER@cptIt,
* McsEngl.debugger@cptIt402,
* McsEngl.debugging@cptIt,
* McsEngl.pgmlng'debugger@cptIt,
* McsEngl.pgmtool.DEBUGGER@cptIt,
* McsElln.ΑΠΟΣΦΑΛΜΑΤΩΤΗΣ@cptIt,
* McsElln.ΑΠΟΣΦΑΛΜΑΤΩΣΗ@cptIt,
* McsElln.ΕΚΚΑΘΑΡΙΣΤΗΣ-ΛΑΘΩΝ@cptIt,

ΕΚΚΑΘΑΡΙΣΤΗΣ ΛΑΘΩΝ:
[Παπακωνσταντίνου κα, Τεχνολογία Υπολογιστικών... Γ' Ε. Λυκείου, 1999 α' έκδοση, 275]

DEFINITION

ΑΠΟΣΦΑΛΜΑΤΩΤΗΣ. ΒΟΗΘΗΤΙΚΟ ΠΡΟΓΡΑΜΜΑ ΠΟΥ ΣΥΝΗΘΩΣ ΠΑΡΕΧΕΤΑΙ ΜΕ ΤΙΣ ΣΥΓΧΡΟΝΕΣ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΚΑΙ ΚΑΘΙΣΤΑ ΑΠΟΔΟΤΙΚΗ ΤΗΝ ΕΡΕΥΝΑ ΓΙΑ ΤΟΝ ΕΝΤΟΠΙΣΜΟ ΛΟΓΙΚΩΝ ΛΑΘΩΝ ΣΕ ΕΝΑ ΠΡΟΓΡΑΜΜΑ.
[ΚΟΙΛΙΑΣ, 1993, 256#cptResource468]

lcptool.IDE

name::
* McsEngl.conceptIt430,
* McsEngl.application-builder-environment,
* McsEngl.application-development-environment,
* McsEngl.computer-program.INTEGRATED-DEVELOPMENT-ENVIRONMENT,
* McsEngl.development-program,
* McsEngl.idegrated-development-environment,
* McsEngl.IDE,
* McsEngl.language-program,
* McsEngl.program.computer-language@cptIt430,
* McsEngl.program.system.language@cptIt430,
* McsEngl.program.development-environment,
* McsEngl.programming-environment, 1999oct29,
* McsElln.ΣΥΣΤΗΜΑ-ΑΝΑΠΤΥΞΗΣ-ΕΦΑΡΜΟΓΩΝ,
* McsElln.ΠΑΚΕΤΟ-ΑΝΑΠΤΥΞΗΣ-ΕΦΑΡΜΟΓΩΝ,
* McsElln.ΠΡΟΓΡΑΜΜΑ-ΓΛΩΣΣΑΣ-ΠΡΟΓΡΑΜΑΤΙΣΜΟΥ,
* McsElln.ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ-ΠΕΡΙΒΑΛΛΟΝ,
* McsElln.ΠΕΡΙΒΑΛΛΟΝ-ΑΝΑΠΤΥΞΗΣ-ΕΦΑΡΜΟΓΩΝ,
* McsElln.ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ-ΠΕΡΙΒΑΛΛΟΝ, 1999oct28

ide'DEFINITION

PROGRAMMING ENVIRONMENT is the SET of programs a LANGUAGE uses to write programs. Programming-Tool I call each one of these programs.
[nikkas 1999oct29]

ΠΕΡΙΒΑΛΛΟΝ ΑΝΑΠΤΥΞΗΣ ΕΦΑΡΜΟΓΩΝ είναι ΠΡΟΓΡΑΜΜΑ-ΣΥΣΤΗΜΑΤΟΣ#cptIt331.1# με το οποίο γράφουμε ΠΡΓΡΑΜΜΑΤΑ (κάνει τη λειτουργία 444-7).
[hmnSngo.1995-03]

Function 444-7.

Είναι πρόγραμμα (σύνολο προγραμάτων) με τα οποία δημιουργούνται προγραματα (source programs), βάσει μιας γλώσας, ΚΑΙ με τα οποία ΜΕΤΑΦΡΑΖΟΝΤΑΙ σε κώδικα μηχανής (object programs).
[ΝΙΚΟΣ, ΣΕΠΤ. 1994]

ide'GENERIC

_GENERIC:
* SYSTEM_PROGRAM#cptIt331#
* PROGRAM#cptIt59#

ide'WHOLE

_WHOLE:
* programming_language#cptItsoft248#

ide'ognCompany#cptEconomy7#

name::
* McsEngl.ide'ognCompany@cptIt,

ide'EVOLUTION#cptCore546.171#

name::
* McsEngl.ide'EVOLUTION@cptIt,

ide'File#cptIt354#

name::
* McsEngl.ide'File@cptIt,

ide'Function#cptIt444#

name::
* McsEngl.ide'Function@cptIt,

language system-function# 444-7#

ide'InstallationcptIt162##

name::
* McsEngl.ide'InstallationcptIt162@cptIt,

ide'OPERATING-SYSTEMcptIt434##

name::
* McsEngl.ide'OPERATING-SYSTEMcptIt434@cptIt,

ide'PROGRAMMING TOOL

name::
* McsEngl.ide'PROGRAMMING TOOL@cptIt,

DEBUGGER#cptIt402#
EDITOR#cptIt991#

ΠΟΛΛΕΣ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΣΥΝΗΘΙΖΟΤΑΝ ΝΑ ΚΥΚΛΟΦΟΡΟΥΝ ΧΩΡΙΣ ΔΙΟΡΘΩΤΗ, ΚΙ ΕΤΣΙ ΘΑ ΕΠΡΕΠΕ ΕΣΕΙΣ ΝΑ ΕΧΕΤΕ ΤΟ ΔΙΚΟ-ΣΑΣ. Η ΠΛΑΤΙΑ ΔΙΑΔΟΣΗ ΟΜΩΣ ΤΩΝ turbo prolog , turbo pascal ΑΛΛΑΞΕ ΤΗ ΝΟΟΤΡΟΠΙΑ ΑΥΤΗ ΚΕ ΕΤΣΙ ΤΩΡΑ ΟΙ ΠΕΡΙΣΣΟΤΕΡΕΣ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΓΙΑ ΜΙΚΡΟΥΠΟΛΟΓΙΣΤΕΣ ΚΥΚΛΟΦΟΡΟΥΝ ΜΕ ΔΙΚΟ-ΤΟΥΣ ΔΙΟΡΘΩΤΗ
[Rich-et-al, 1989, 30#cptResource463]

LINKER

Linker
A linker is an executive program that connects different program segments so that they may be combined to form one executable program.
A linker program often can combine compiled object modules and assembled routines together, from different programming languages, to create a single program.
[SOURCE: PC-GLOSSARY 1993]

TRANSLATORS/ΜΕΤΑΓΛΩΤΙΣΤΕΣ
ASSEMBLERS/ΣΥΜΒΟΛΟΜΕΤΑΦΡΑΣΤΕΣ
COMPILER#cptIt401#

ΜΕΤΑΦΡΑΣΤΕΣ

Μεταφράζουν το ΠΗΓΑΙΟ ΠΡΟΓΡΑΜΜΑ σε ΑΝΤΙΚΕΙΜΕΝΟ ΠΡΟΓΡΑΜΑ.

INTERPRETERS/ΔΙΕΡΜΗΝΕΙΣ

ide'Price#cptEconomy541.44#

name::
* McsEngl.ide'Price@cptIt,

ide.measure#cptCore88#

name::
* McsEngl.ide.measure@cptIt,

Εχουν προταθεί ή συζητηθεί περίπου 2000 γλώσσες.
[ΔΗΜΗΤΡΙΟΥ-5, 1986, 86#cptResource168]

ide'Relation-to-editor

name::
* McsEngl.ide'Relation-to-editor@cptIt,

_DESCRIPTION:
Why use an IDE instead of an editor? The main reason is that an IDE can debug and sometimes profile your code. IDEs also have support for ALM systems, integrating with the likes of Git, GitHub, Mercurial, Subversion, and Perforce for version control. But as more editors add hooks to these systems, ALM support is becoming less of a differentiator.
[http://www.infoworld.com/article/3192844/application-development/review-the-6-best-javascript-ides.html]

ide'Version#cptIt471#

name::
* McsEngl.ide'Version@cptIt,

SPECIFIC

name::
* McsEngl.ide.specific@cptIt,

_SPECIFIC:
* BLOODSHED DEV-C++ (opensource)
* RAD
* VISUAL-PROGRAMMING-ENVIEINO#cptIt518#

GUI builders (visual programming environments) will become de rigeur for all development systems.
[B. Eckel Thinking in Java 1998jan]

ide.SPECIFIC-DIVISION.evoluting

name::
* McsEngl.ide.SPECIFIC-DIVISION.evoluting@cptIt,

_SPECIFIC:
machine language
assembly language
low level language
high level language
very high level language (fourth generation language, 4GL)

ide.GENERIC

name::
* McsEngl.ide.GENERIC@cptIt,

_SPECIFIC:
* C#cptIt540#
* COBOL#cptIt568#
* FORTRAN#cptIt618#
* LISP#cptIt360#
 COMMON LISP#cptIt572#
 XLISP#cptIt887#
* LOGO#cptIt677#
* OBJECT ORIENTED
 C++##
 MICROSOFT-VISUAL-BASIC#cptIt862#
 OBSYDIAN (BASIS Ltd)
* PASCAL#cptIt754#
* PL/1#cptIt769#
* PROLOG
* VISUAL C++#cptIt863#
* web-based--IDE,

ide.GENERIC.NO (instance)

name::
* McsEngl.ide.GENERIC.NO (instance)@cptIt,

_SPECIFIC:
* BORLAND-PASCAL#cptItsoft539#
* cloud9##
* MICROSOFT COBOL#cptIt699#
* MICROSOFT-VISUAL-BASIC#cptItsoft862#
* TURBO PROLOG#cptIt848#

ide.Cloud9

name::
* McsEngl.ide.Cloud9@cptIt,
* McsEngl.cloud9-IDE@cptIt430,

Cloud9 IDE is a web-based IDE that supports several programming languages, with a focus on JavaScript and HTML/CSS. It is fully written in JavaScript, and uses Node.js on the server side. As its editor component it uses the Ace editor.
[http://en.wikipedia.org/wiki/Cloud9_IDE]

_ADDRESS.WPG:
* http://cloud9ide.com//

lcptool.PARSER (token to node)

name::
* McsEngl.lcptool.PARSER (token to node)@cptIt,
* McsEngl.compiler'parser@cptIt,
* McsEngl.lcpparser@cptIt,
* McsEngl.parser@cptIt,
* McsEngl.parser.compiler@cptIt401,
* McsEngl.pgmlng'parser@cptIt,
* McsEngl.fmllng'parser@cptIt,
* McsEngl.parser-in-formalLanguage@cptCore1018i,
* McsEngl.parser.fmllng@cptIt,
* McsEngl.parsing-program-in-formalLanguage@cptCore1018i,
* McsEngl.syntactic-analyser-program@cptIt,

_DESCRIPTION:
In computer science and linguistics, parsing (more formally syntactic analysis) is the process of analyzing a sequence of tokens to determine its grammatical structure with respect to a given formal grammar.
A parser is the component of a compiler that carries out this task.
[http://en.wikipedia.org/wiki/Compiler]

_DESCRIPTION:
A parsing program applies the rules in reverse to determine whether a given string is a sentence that can be generated from S.
[Sowa, http://www.bestweb.net/~sowa/misc/mathw.htm, (2000-07-30)]

AST

name::
* McsEngl.abstract-syntax-tree@cptIt,
* McsEngl.AST@cptIt,

_DESCRIPTION:
No matter what programming language you’re using you’ll always need some piece of software which can take the source code and make the computer actually do something.
This software can be either an interpreter or a compiler.
No matter whether you’re using an interpreted language (JavaScript, Python, Ruby) or a compiled one (C#, Java, Rust), there’s always going to be one common part: parsing the source code as plain text to a data structure called abstract syntax tree (AST).
Not only do ASTs present the source code in a structured way but they also play a critical role in the semantic analysis where the compiler validates the correctness and proper usage of the program and the language elements.
[https://blog.sessionstack.com/how-javascript-works-parsing-abstract-syntax-trees-asts-5-tips-on-how-to-minimize-parse-time-abfcf7e8a0c8]

_ADDRESS.WPG:
* https://astexplorer.net/,

lcpparser'Parser-generator#ql:parser-generator@cptIt#

name::
* McsEngl.lcpparser'Parser-generator@cptIt,

SPECIFIC

name::
* McsEngl.lcpparser.specific@cptIt,

lcpparser.BOTTOM-UP

name::
* McsEngl.lcpparser.BOTTOM-UP@cptIt,

_DESCRIPTION:
In computer science, parsing reveals the grammatical structure of linear input text, as a first step in working out its meaning. Bottom-up parsing identifies and processes the text's lowest-level small details first, before its mid-level structures, and leaving the highest-level overall structure to last.

Bottom-up Versus Top-down[edit]

The bottom-up name comes from the concept of a parse tree, in which the most detailed parts are at the bushy bottom of the (upside-down) tree, and larger structures composed from them are in successively higher layers, until at the top or "root" of the tree a single unit describes the entire input stream. A bottom-up parse discovers and processes that tree starting from the bottom left end, and incrementally works its way upwards and rightwards.[1] A parser may act on the structure hierarchy's low, mid, and highest levels without ever creating an actual data tree; the tree is then merely implicit in the parser's actions. Bottom-up parsing lazily waits until it has scanned and parsed all parts of some construct before committing to what the combined construct is.



Typical parse tree for
A = B + C*2; D = 1


Bottom-up parse steps


Top-down parse steps
The opposite of this are top-down parsing methods, in which the input's overall structure is decided (or guessed at) first, before dealing with mid-level parts, leaving the lowest-level small details to last. A top-down parse discovers and processes the hierarchical tree starting from the top, and incrementally works its way downwards and rightwards. Top-down parsing eagerly decides what a construct is much earlier, when it has only scanned the leftmost symbol of that construct and has not yet parsed any of its parts. Left corner parsing is a hybrid method which works bottom-up along the left edges of each subtree, and top-down on the rest of the parse tree.

If a language grammar has multiple rules that may start with the same leftmost symbols but have different endings, then that grammar can be efficiently handled by a deterministic bottom-up parse but cannot be handled top-down without guesswork and backtracking. So bottom-up parsers handle a somewhat larger range of computer language grammars than do deterministic top-down parsers.

Bottom-up parsing is sometimes done by backtracking. But much more commonly, bottom-up parsing is done by a shift-reduce parser such as a LALR parser.

One of the earlier documentations of a bottom-up parser is "A Syntax-Oriented Translator" by Peter Zilahy Ingerman, published in 1966 by Academic Press, NY.

References[edit]

Jump up ^ Compilers: Principles, Techniques, and Tools (2nd Edition), by Alfred Aho, Monica Lam, Ravi Sethi, and Jeffrey Ullman, Prentice Hall 2006.
[http://en.wikipedia.org/wiki/Bottom-up_parsing]

lcpparser.bottomup.SHIFT-REDUCE

name::
* McsEngl.lcpparser.bottomup.SHIFT-REDUCE@cptIt,
* McsEngl.shift-reduce-parser@cptIt,

_DESCRIPTION:
In computer science, Shift-Reduce parsing is a category of efficient, table-driven bottom-up parsing methods for computer languages and other notations formally defined by a grammar. The parsing methods most commonly used today, LR parsing and its variations, are shift-reduce methods.[1] The precedence parsers used before the invention of LR parsing are also shift-reduce methods. All shift-reduce parsers have similar outward effects, in the incremental order in which they build a parse tree or call specific output actions. The outward actions of an LR parser are best understood by ignoring the arcane mathematical details of how LR parser tables are generated, and instead looking at the parser as just some generic shift-reduce method.
[http://en.wikipedia.org/wiki/Shift-reduce_parser]

lcpparser.bottomup.SIMPLE-PRECEDENCE

name::
* McsEngl.lcpparser.bottomup.SIMPLE-PRECEDENCE@cptIt,
* McsEngl.simple-precedence-parser@cptIt,

_DESCRIPTION:
In computer science, an operator precedence parser is a bottom-up parser that interprets an operator-precedence grammar. For example, most calculators use operator precedence parsers to convert from the human-readable infix notation relying on order of operations to a format that is optimized for evaluation such as Reverse Polish notation (RPN).

Edsger Dijkstra's shunting yard algorithm is commonly used to implement operator precedence parsers. Other algorithms include the precedence climbing method and the top down operator precedence method.[1]
[http://en.wikipedia.org/wiki/Operator-precedence_parser]

lcpparser.bottomup.SIMPLE-PRECEDENCE

name::
* McsEngl.lcpparser.bottomup.SIMPLE-PRECEDENCE@cptIt,
* McsEngl.simple-precedence-parser@cptIt,

_DESCRIPTION:
In computer science, a simple precedence parser is a type of bottom-up parser for context-free grammars that can be used only by simple precedence grammars.

The implementation of the parser is quite similar to the generic bottom-up parser. A stack is used to store a viable prefix of a sentential form from a rightmost derivation. Symbols \lessdot, \dot = and \gtrdot are used to identify the pivot, and to know when to Shift or when to Reduce.
[http://en.wikipedia.org/wiki/Simple_precedence_parser]

lcpparser.EARLEY

name::
* McsEngl.lcpparser.EARLEY@cptIt,

_DESCRIPTION:
In computer science, the Earley parser is an algorithm for parsing strings that belong to a given context-free language, though (depending on the variant) it may suffer problems with certain nullable grammars.[1] The algorithm, named after its inventor, Jay Earley, is a chart parser that uses dynamic programming; it is mainly used for parsing in computational linguistics. It was first introduced in his dissertation[2] (and later appeared in abbreviated, more legible form in a journal[3]).

Earley parsers are appealing because they can parse all context-free languages[discuss], unlike LR parsers and LL parsers, which are more typically used in compilers but which can only handle restricted classes of languages. The Earley parser executes in cubic time in the general case {O}(n^3), where n is the length of the parsed string, quadratic time for unambiguous grammars {O}(n^2), and linear time for almost all LR(k) grammars. It performs particularly well when the rules are written left-recursively.
[http://en.wikipedia.org/wiki/Earley_parser]

lcpparser.LR

name::
* McsEngl.lcpparser.LR@cptIt,
* McsEngl.LR-parser@cptIt,

_DESCRIPTION:
In computer science, LR parsers are a type of bottom-up parsers that efficiently handle deterministic context-free languages in guaranteed linear time.[1] The LALR parsers and the SLR parsers are common variants of LR parsers. LR parsers are often mechanically generated from a formal grammar for the language by a parser generator tool. They are very widely used for the processing of computer languages, more than other kinds of generated parsers.[citation needed]

The name LR is an acronym. The L means that the parser reads input text in one direction without backing up; that direction is typically Left to right within each line, and top to bottom across the lines of the full input file. (This is true for most parsers.) The R means that the parser produces a reversed Rightmost derivation; it does a bottom-up parse, not a top-down LL parse or ad-hoc parse. The name LR is often followed by a numeric qualifier, as in LR(1) or sometimes LR(k). To avoid backtracking or guessing, the LR parser is allowed to peek ahead at k lookahead input symbols before deciding how to parse earlier symbols. Typically k is 1 and is not mentioned. The name LR is often preceded by other qualifiers, as in SLR and LALR.

LR parsers are deterministic; they produce a single correct parse without guesswork or backtracking, in linear time. This is ideal for computer languages. But LR parsers are not suited for human languages which need more flexible but slower methods. Other parser methods (CYK algorithm, Earley parser, and GLR parser) that backtrack or yield multiple parses may take O(n2), O(n3) or even exponential time when they guess badly.

The above properties of L, R, and k are actually shared by all shift-reduce parsers, including precedence parsers. But by convention, the LR name stands for the form of parsing invented by Donald Knuth, and excludes the earlier, less powerful precedence methods (for example Operator-precedence parser).[1] LR parsers can handle a larger range of languages and grammars than precedence parsers or top-down LL parsing.[2] This is because the LR parser waits until it has seen an entire instance of some grammar pattern before committing to what it has found. An LL parser has to decide or guess what it is seeing much sooner, when it has only seen the leftmost input symbol of that pattern. LR is also better at error reporting. It detects syntax errors as early in the input stream as possible.
[http://en.wikipedia.org/wiki/LR(k)]

lcpparser.lr.CANONICAL

name::
* McsEngl.lcpparser.lr.CANONICAL@cptIt,

_DESCRIPTION:
In computer science, a canonical LR parser or LR(1) parser is an LR(k) parser for k=1, i.e. with a single lookahead terminal. The special attribute of this parser is that all LR(k) parsers with k>1 can be transformed into a LR(1) parser.[1] It can handle all deterministic context-free languages.[1] In the past this LR(k) parser has been avoided because of its huge memory requirements in favor of less powerful alternatives such as the LALR and the LL(1) parser. Recently, however, a "minimal LR(1) parser" whose space requirements are close to LALR parsers, is being offered by several parser generators.

Like most parsers, the LR(1) parser is automatically generated by compiler compilers like GNU Bison, MSTA, Menhir,[2] HYACC,[3] and LRSTAR.[4]
[http://en.wikipedia.org/wiki/Canonical_LR_parser]

lcpparser.lr.GLR

name::
* McsEngl.lcpparser.lr.GLR@cptIt,

_DESCRIPTION:
A GLR parser (GLR standing for "generalized LR", where L stands for "left-to-right" and R stands for "rightmost (derivation)") is an extension of an LR parser algorithm to handle nondeterministic and ambiguous grammars. First described in a 1984 paper by Masaru Tomita, it has also been referred to as a "parallel parser". Tomita presented five stages in his original work,[1] though in practice it is the second stage that is recognized as the GLR parser.

Though the algorithm has evolved since its original form, the principles have remained intact: Tomita's goal was to parse natural language text thoroughly and efficiently. Standard LR parsers cannot accommodate the nondeterministic and ambiguous nature of natural language, and the GLR algorithm can.
[http://en.wikipedia.org/wiki/GLR_parser]

lcpparser.lr.LALR

name::
* McsEngl.lcpparser.lr.LALR@cptIt,
* McsEngl.LALR-parser@cptIt,
* McsEngl.lcpparser.LALR@cptIt,
* McsEngl.look-ahead-left-right-parser@cptIt,

_DESCRIPTION:
The "(1)" denotes one-token lookahead, to resolve differences between rule patterns during parsing.
[http://en.wikipedia.org/wiki/LALR_parser]
===
In computer science, an LALR parser[a] or Look-Ahead LR parser is a simplified version of a Canonical LR parser, to parse (separate and analyze) a text according to a set of production rules specified by a formal grammar for a computer language. The LALR parser technique was invented by Frank DeRemer for his 1969 PhD dissertation, Practical Translators for LR(k) languages,[1] in order to address the practical difficulties of that time of implementing Canonical LR parsers. The simplification that takes place results in a parser with significantly reduced memory requirements but decreased language-recognition power.[1] However, this power is enough for many mainstream computer languages,[2] including Java,[3] though the reference grammars for many languages fails to be LALR due to being ambiguous.[2] The addition of some hand-written code, specific to the language being parsed, can improve the power of the LALR parser.

In practice LALR parsers are not written by hand, instead being automatically generated from the grammar by a LALR parser generator such as Yacc or GNU Bison. The automatically generated code may be augmented by hand-written code to augment the power of the resulting parser.
[http://en.wikipedia.org/wiki/LALR]

lcpparser.lr.SLR

name::
* McsEngl.lcpparser.lr.SLR@cptIt,
* McsEngl.simple-LR-parser@cptIt,
* McsEngl.SLR-parser@cptIt,

_DESCRIPTION:
In computer science, a Simple LR or SLR parser is a type of LR parser with small parse tables[disambiguation needed] and a relatively simple parser generator algorithm. As with other types of LR(1) parser, an SLR parser is quite efficient at finding the single correct bottom-up parse in a single left-to-right scan over the input stream, without guesswork or backtracking. The parser is mechanically generated from a formal grammar for the language.

SLR and the more-general methods LALR parser and Canonical LR parser have identical methods and similar tables at parse time; they differ only in the mathematical grammar analysis algorithms used by the parser generator tool. SLR and LALR generators create tables of identical size and identical parser states. SLR generators accept fewer grammars than do LALR generators like yacc and Bison. Many computer languages don't readily fit the restrictions of SLR, as is. Bending the language's natural grammar into SLR grammar form requires more compromises and grammar hackery. So LALR generators have become much more widely used than SLR generators, despite being somewhat more complicated tools. SLR methods remain a useful learning step in college classes on compiler theory.

SLR and LALR were both developed by Frank DeRemer as the first practical uses of Donald Knuth's LR parser theory. The tables created for real grammars by full LR methods were impractically large, larger than most computer memories of that decade, with 100 times or more parser states than the SLR and LALR methods.[citation needed]
[http://en.wikipedia.org/wiki/SLR_parser]

lcpparser.TOP-DOWN

name::
* McsEngl.lcpparser.TOP-DOWN@cptIt,
* McsEngl.top-down-parser@cptIt,

_DESCRIPTION:
In computer science, top-down parsing is a parsing strategy where one first looks at the highest level of the parse tree and works down the parse tree by using the rewriting rules of a formal grammar. LL parsers are a type of parser that uses a top-down parsing strategy.

Top-down parsing is a strategy of analyzing unknown data relationships by hypothesizing general parse tree structures and then considering whether the known fundamental structures are compatible with the hypothesis. It occurs in the analysis of both natural languages and computer languages.

Top-down parsing can be viewed as an attempt to find left-most derivations of an input-stream by searching for parse-trees using a top-down expansion of the given formal grammar rules. Tokens are consumed from left to right. Inclusive choice is used to accommodate ambiguity by expanding all alternative right-hand-sides of grammar rules.[1]

Simple implementations of top-down parsing do not terminate for left-recursive grammars, and top-down parsing with backtracking may have exponential time complexity with respect to the length of the input for ambiguous CFGs.[2] However, more sophisticated top-down parsers have been created by Frost, Hafiz, and Callaghan [3][4] which do accommodate ambiguity and left recursion in polynomial time and which generate polynomial-sized representations of the potentially exponential number of parse trees.
[http://en.wikipedia.org/wiki/Top-down_parsing]

lcpparser.topdown.LL

name::
* McsEngl.lcpparser.topdown.LL@cptIt,
* McsEngl.LL-parser@cptIt,

_DESCRIPTION:
In computer science, an LL parser is a top-down parser for a subset of the context-free grammars. It parses the input from Left to right, and constructs a Leftmost derivation of the sentence (hence LL, compared with LR parser that constructs a rightmost derivation). The class of grammars which are parsable in this way is known as the LL grammars.

An LL parser is called an LL(k) parser if it uses k tokens of lookahead when parsing a sentence. If such a parser exists for a certain grammar and it can parse sentences of this grammar without backtracking then it is called an LL(k) grammar. A language that has an LL(k) grammar is known as an LL(k) language. There are LL(k+n) languages that are not LL(k) languages.[1] A corollary of this is that not all context-free languages are LL(k) languages. An LL parser is called an LL(*) parser if it is not restricted to a finite k tokens of lookahead, but can make parsing decisions by recognizing whether the following tokens belong to a regular language (for example by means of a Deterministic Finite Automaton).

LL grammars, particularly LL(1) grammars, are of great practical interest, as parsers for these grammars are easy to construct, and many computer languages are designed to be LL(1) for this reason. LL parsers are table-based parsers, similar to LR parsers. LL grammars can alternatively be characterized as precisely those that can be parsed by a predictive parser – a recursive descent parser without backtracking – and these can be readily written by hand. This article is about the table-based parsers themselves; for formal properties of the grammar, see LL grammar, while for alternative parsing, see predictive parser.
[http://en.wikipedia.org/wiki/LL_parser]

LL(1)-grammar

name::
* McsEngl.LL-1-grammar@cptIt,

_DESCRIPTION:
The basic idea of a recursive descent parser is to use the current input symbol to decide which alternative to choose. Grammars which have the property that it is possible to do this are called LL(1) grammars.
[http://www.cs.nott.ac.uk/~psztxa/g51mal.2001/notes/node36.html]

lcpparser.RECURSIVE-ASCENT

name::
* McsEngl.lcpparser.RECURSIVE-ASCENT@cptIt,
* McsEngl.recrusive-ascent-parser@cptIt,

_DESCRIPTION:
In computer science, recursive ascent parsing is a technique for implementing an LALR parser which uses mutually-recursive functions rather than tables. Thus, the parser is directly encoded in the host language similar to recursive descent. Direct encoding usually yields a parser which is faster than its table-driven equivalent[1] for the same reason that compilation is faster than interpretation. It is also (nominally) possible to hand edit a recursive ascent parser, whereas a tabular implementation is nigh unreadable to the average human.

Recursive ascent was first described by Thomas Penello in his article "Very fast LR parsing". in 1986. He was not intending to create a hand-editable implementation of an LR parser, but rather a maintainable and efficient parser implemented in assembly language. The technique was later expounded upon by G.H. Roberts[2] in 1988 as well as in an article by Leermakers, Augusteijn, Kruseman Aretz[3] in 1992 in the journal Theoretical Computer Science. An extremely readable description of the technique was written by Morell and Middleton[4] in 2003. A good exposition can also be found in a TOPLAS article by Sperber and Thiemann.[5]

Recursive ascent has also been merged with recursive descent, yielding a technique known as recursive ascent/descent. This implementation technique is arguably easier to hand-edit due to the reduction in states and fact that some of these states are more intuitively top-down rather than bottom up. It can also yield some minimal performance improvements over conventional recursive ascent.[6]
[http://en.wikipedia.org/wiki/Recursive_ascent_parser]

lcpparser.RECURSIVE-DESCENT

name::
* McsEngl.lcpparser.RECURSIVE-DESCENT@cptIt,
* McsEngl.recrusive-descent-parser@cptIt,

_DESCRIPTION:
In computer science, a recursive descent parser is a kind of top-down parser built from a set of mutually recursive procedures (or a non-recursive equivalent) where each such procedure usually implements one of the production rules of the grammar. Thus the structure of the resulting program closely mirrors that of the grammar it recognizes.

A predictive parser is a recursive descent parser that does not require backtracking. Predictive parsing is possible only for the class of LL(k) grammars, which are the context-free grammars for which there exists some positive integer k that allows a recursive descent parser to decide which production to use by examining only the next k tokens of input. (The LL(k) grammars therefore exclude all ambiguous grammars, as well as all grammars that contain left recursion. Any context-free grammar can be transformed into an equivalent grammar that has no left recursion, but removal of left recursion does not always yield an LL(k) grammar.) A predictive parser runs in linear time.

Recursive descent with backtracking is a technique that determines which production to use by trying each production in turn. Recursive descent with backtracking is not limited to LL(k) grammars, but is not guaranteed to terminate unless the grammar is LL(k). Even when they terminate, parsers that use recursive descent with backtracking may require exponential time.

Although predictive parsers are widely used, and are frequently chosen if writing a parser by hand, programmers often prefer to use a table-based parser produced by a parser generator, either for an LL(k) language or using an alternative parser, such as LALR or LR. This is particularly the case if a grammar is not in LL(k) form, as transforming the grammar to LL to make it suitable for predictive parsing is involved. Predictive parsers can also be automatically generated, using tools like ANTLR.

Predictive parsers can be depicted using transition diagrams for each non-terminal symbol where the edges between the initial and the final states are labelled by the symbols (terminals and non-terminals) of the right side of the production rule.[1]
[http://en.wikipedia.org/wiki/Recursive_descent_parser]

lcptool.PARSER-GENERATOR (ppg)

name::
* McsEngl.lcptool.PARSER-GENERATOR (ppg)@cptIt,
* McsEngl.parser-generator@cptIt,
* McsEngl.program.parser-generator@cptIt,
* McsEngl.pgmlng'parser-generator@cptIt,

_DESCRIPTION:
In computer science, a compiler-compiler or compiler generator is a tool that creates a parser, interpreter, or compiler from some form of formal description of a language and machine. The earliest and still most common form of compiler-compiler is a parser generator, whose input is a grammar (usually in BNF) of a programming language, and whose generated output is the source code of a parser often used as a component of a compiler. Similarly, code generator-generators (such as JBurg) exist, but such tools have not yet reached maturity.
The ideal compiler-compiler takes a description of a programming language and a target instruction set architecture, and automatically generates a usable compiler from them. In practice, the state of the art has yet to reach this degree of sophistication and most compiler generators are not capable of handling semantic or target architecture information.
[http://en.wikipedia.org/wiki/Parser_generator]
===
There are tools, called parser generators, that can automatically generate a parser (in some programming language) from a grammar written in Backus-Naur form (e.g. Yacc - yet another compiler compiler).
[http://en.wikipedia.org/wiki/Parsing]

ppg'input

name::
* McsEngl.ppg'input@cptIt,
* McsEngl.grammar-file@cptIt,

ppg'output

name::
* McsEngl.ppg'output@cptIt,
* McsEngl.generated-parser@cptIt,

ppg'resource

name::
* McsEngl.ppg'resource@cptIt,

_ADDRESS.WPG:
* https://tomassetti.me/why-you-should-not-use-flex-yacc-and-bison/,
* http://en.wikipedia.org/wiki/Comparison_of_parser_generators,

SPECIFIC

name::
* McsEngl.ppg.specific@cptIt,

_SPECIFIC:
* Bison##
* Jison##
* PEG##

ppg.Bison

name::
* McsEngl.ppg.Bison@cptIt,
* McsEngl.Bison@cptIt,
* McsEngl.Bison-utility@cptIt,

_DESCRIPTION:
Bison is a general-purpose parser generator that converts an annotated context-free grammar into a deterministic LR or generalized LR (GLR) parser employing LALR(1) parser tables. As an experimental feature, Bison can also generate IELR(1) or canonical LR(1) parser tables. Once you are proficient with Bison, you can use it to develop a wide range of language parsers, from those used in simple desk calculators to complex programming languages.
Bison is upward compatible with Yacc: all properly-written Yacc grammars ought to work with Bison with no change. Anyone familiar with Yacc should be able to use Bison with little trouble. You need to be fluent in C or C++ programming in order to use Bison. Java is also supported as an experimental feature.
[https://www.gnu.org/software/bison/]
===
GNU bison, commonly known as Bison, is a parser generator that is part of the GNU Project. Bison reads a specification of a context-free language, warns about any parsing ambiguities, and generates a parser (either in C, C++, or Java) which reads sequences of tokens and decides whether the sequence conforms to the syntax specified by the grammar. Bison by default generates LALR parsers but can also create GLR parsers.[2]
In POSIX mode, Bison is compatible with yacc, but also has several improvements over this earlier program. flex, an automatic lexical analyser, is often used with Bison, to tokenise input data and provide Bison with tokens.
Bison was originally written by Robert Corbett in 1988.[citation needed] Later, in 1990, Robert Corbett wrote another parser generator named Berkeley Yacc. Bison was made Yacc-compatible by Richard Stallman.[citation needed]
Bison is free software and is available under the GNU General Public License, with an exception (discussed below) allowing its generated code to be used without triggering the copyleft requirements of the licence.
[http://en.wikipedia.org/wiki/GNU_bison]
===
Bison is a general-purpose parser generator that converts a grammar description for an LALR(1) context-free grammar into a C program to parse that grammar. Once you are proficient with Bison, you may use it to develop a wide range of language parsers, from those used in simple desk calculators to complex programming languages.

Bison is upward compatible with Yacc: all properly-written Yacc grammars ought to work with Bison with no change. Anyone familiar with Yacc should be able to use Bison with little trouble. You need to be fluent in C programming in order to use Bison or to understand this manual.

We begin with tutorial chapters that explain the basic concepts of using Bison and show three explained examples, each building on the last. If you don't know Bison or Yacc, start by reading these chapters. Reference chapters follow which describe specific aspects of Bison in detail.

Bison was written primarily by Robert Corbett; Richard Stallman made it Yacc-compatible. Wilfred Hansen of Carnegie Mellon University added multicharacter string literals and other features.

This edition corresponds to version 1.25 of Bison.
[http://dinosaur.compilertools.net/bison/bison_1.html#SEC1]

===
Flex and Bison are aging unix utilities that help you write very fast parsers for almost arbitrary file formats. Formally, they implement Look-Ahead-Left-Right (as opposed to "recursive descent") parsing of non-ambiguous context-free (as opposed to "natural language") grammars.

Why should you learn the Flex/Bison pattern syntax when you could just write your own parser? Well, several reasons. First, Flex and Bison will generate a parser that is virually guaranteed to be faster than anything you could write manually in a reasonable amount of time. Second, updating and fixing Flex and Bison source files is a lot easier than updating and fixing custom parser code. Third, Flex and Bison have mechanisms for error handling and recovery, which is something you definitely don't want to try to bolt onto a custom parser. Finally, Flex and Bison have been around for a long time, so they far freer from bugs than newer code.
[http://aquamentus.com/flex_bison.html]

bison'AST

name::
* McsEngl.bison'AST@cptIt,
* McsEngl.bison'abstract-syntactic-tree@cptIt,
* McsEngl.bison'syntactic-tree@cptIt,

_DESCRIPTION:
The end product of semantic parsing is an AST. As we will see, Bison is quite elegantly optimized to generate AST’s; it’s really only a matter of plugging our nodes into the grammar.
[http://gnuu.org/2009/09/18/writing-your-own-toy-compiler/4/]

bison'conflict

name::
* McsEngl.bison'conflict@cptIt,

_SPECIFIC:
it may not be able to decide (on the basis of the input read so far) which of two possible reductions (applications of a grammar rule) applies, or whether to apply a reduction or read more of the input and apply a reduction later in the input. These are known respectively as reduce/reduce conflicts (see Reduce/Reduce), and shift/reduce conflicts (see Shift/Reduce).
[http://www.gnu.org/software/bison/manual/bison.html#GLR-Parsers]

bison'FLEX

name::
* McsEngl.bison'FLEX@cptIt,
* McsEngl.FLEX@cptIt,

_DESCRIPTION:
Flex is a tool for generating scanners. A scanner, sometimes called a tokenizer, is a program which recognizes lexical patterns in text. The flex program reads user-specified input files, or its standard input if no file names are given, for a description of a scanner to generate. The description is in the form of pairs of regular expressions and C code, called rules. Flex generates a C source file named, "lex.yy.c", which defines the function yylex(). The file "lex.yy.c" can be compiled and linked to produce an executable. When the executable is run, it analyzes its input for occurrences of text matching the regular expressions for each rule. Whenever it finds a match, it executes the corresponding C code.
[http://flex.sourceforge.net/]
===
Flex (fast lexical analyzer generator) is a free software alternative to lex.[1] It is a computer program that generates lexical analyzers ("scanners" or "lexers").[2][3] It is frequently used with the free Bison parser generator. Unlike Bison, flex is not part of the GNU Project.[4]
[http://en.wikipedia.org/wiki/Flex_lexical_analyser]

bison'human

name::
* McsEngl.bison'human@cptIt,

_DESCRIPTION:
Bison was written originally by Robert Corbett. Richard Stallman made it Yacc-compatible. Wilfred Hansen of Carnegie Mellon University added multi-character string literals and other features.
[http://www.gnu.org/software/bison/manual/bison.html#Introduction]

bison'input (grammar)

name::
* McsEngl.bison'input (grammar)@cptIt,
* McsEngl.bison'grammar-file@cptIt,

_DESCRIPTION:
In order for Bison to parse a language, it must be described by a context-free grammar.
[http://www.gnu.org/software/bison/manual/bison.html#Concepts]
===
Outline of a Bison Grammar

A Bison grammar file has four main sections, shown here with the appropriate delimiters:

%{
C declarations
%}

Bison declarations

%%
Grammar rules
%%

Additional C code
Comments enclosed in `/* ... */' may appear in any of the sections.
[http://dinosaur.compilertools.net/bison/bison_6.html#SEC35]

bison'grammar'a.prologue

name::
* McsEngl.bison'grammar'a.prologue@cptIt,
* McsEngl.bison'grammar'prologue@cptIt,

_DESCRIPTION:
The prologue may define types and variables used in the actions. You can also use preprocessor commands to define macros used there, and use#include to include header files that do any of these things. You need to declare the lexical analyzer yylex and the error printer yyerror here, along with any other global identifiers used by the actions in the grammar rules.
[http://www.gnu.org/software/bison/manual/bison.html#Grammar-Layout]

bison'grammar'b.bison-declarations

name::
* McsEngl.bison'grammar'b.bison-declarations@cptIt,
* McsEngl.bison'declaration@cptIt,
* McsEngl.bison'grammar-declaration@cptIt,

_DESCRIPTION:
The Bison declarations declare the names of the terminal and nonterminal symbols, and may also describe operator precedence and the data types of semantic values of various symbols.
[http://www.gnu.org/software/bison/manual/bison.html#Grammar-Layout]

===
Bison Declaration Summary

Here is a summary of all Bison declarations:

%union
Declare the collection of data types that semantic values may have (see section The Collection of Value Types).
%token
Declare a terminal symbol (token type name) with no precedence or associativity specified (see section Token Type Names).
%right
Declare a terminal symbol (token type name) that is right-associative (see section Operator Precedence).
%left
Declare a terminal symbol (token type name) that is left-associative (see section Operator Precedence).
%nonassoc
Declare a terminal symbol (token type name) that is nonassociative (using it in a way that would be associative is a syntax error) (see section Operator Precedence).
%type
Declare the type of semantic values for a nonterminal symbol (see section Nonterminal Symbols).
%start
Specify the grammar's start symbol (see section The Start-Symbol).
%expect
Declare the expected number of shift-reduce conflicts (see section Suppressing Conflict Warnings).
%pure_parser
Request a pure (reentrant) parser program (see section A Pure (Reentrant) Parser).
%no_lines
Don't generate any#line preprocessor commands in the parser file. Ordinarily Bison writes these commands in the parser file so that the C compiler and debuggers will associate errors and object code with your source file (the grammar file). This directive causes them to associate errors with the parser file, treating it an independent source file in its own right.
%raw
The output file `name.h' normally defines the tokens with Yacc-compatible token numbers. If this option is specified, the internal Bison numbers are used instead. (Yacc-compatible numbers start at 257 except for single character tokens; Bison assigns token numbers sequentially for all tokens starting at 3.)
%token_table
Generate an array of token names in the parser file. The name of the array is yytname; yytname[i] is the name of the token whose internal Bison token code number is i. The first three elements of yytname are always "$", "error", and "$illegal"; after these come the symbols defined in the grammar file. For single-character literal tokens and literal string tokens, the name in the table includes the single-quote or double-quote characters: for example, "'+'" is a single-character literal and "\"<=\"" is a literal string token. All the characters of the literal string token appear verbatim in the string found in the table; even double-quote characters are not escaped. For example, if the token consists of three characters `*"*', its string in yytname contains `"*"*"'. (In C, that would be written as "\"*\"*\""). When you specify %token_table, Bison also generates macro definitions for macros YYNTOKENS, YYNNTS, and YYNRULES, and YYNSTATES:
YYNTOKENS
The highest token number, plus one.
YYNNTS
The number of non-terminal symbols.
YYNRULES
The number of grammar rules,
YYNSTATES
The number of parser states (see section Parser States).
[http://dinosaur.compilertools.net/bison/bison_6.html]

bison'declaration.START

name::
* McsEngl.bison'declaration.START@cptIt,
* McsEngl.bison'start-declaration@cptIt,

_DESCRIPTION:
The Start-Symbol

Bison assumes by default that the start symbol for the grammar is the first nonterminal specified in the grammar specification section. The programmer may override this restriction with the %start declaration as follows:

%start symbol

bison'declaration.TYPE

name::
* McsEngl.bison'declaration.TYPE@cptIt,
* McsEngl.bison'type-declaration@cptIt,

_DESCRIPTION:
Nonterminal Symbols

When you use %union to specify multiple value types, you must declare the value type of each nonterminal symbol for which values are used. This is done with a %type declaration, like this:

%type <type> nonterminal...
Here nonterminal is the name of a nonterminal symbol, and type is the name given in the %union to the alternative that you want (see section The Collection of Value Types). You can give any number of nonterminal symbols in the same %type declaration, if they have the same value type. Use spaces to separate the symbol names.

You can also declare the value type of a terminal symbol. To do this, use the same <type> construction in a declaration for the terminal symbol. All kinds of token declarations allow <type>.
[http://dinosaur.compilertools.net/bison/bison_6.html]

bison'declaration.UNION

name::
* McsEngl.bison'declaration.UNION@cptIt,
* McsEngl.bison'union-declaration@cptIt,

_DESCRIPTION:
[http://dinosaur.compilertools.net/bison/bison_6.html]

bison'grammar'c.grammar-rules

name::
* McsEngl.bison'grammar'c.grammar-rules@cptIt,
* McsEngl.bison'grammar-rule@cptIt,
* McsEngl.bison'rule@cptIt,

_DESCRIPTION:
The grammar rules define how to construct each nonterminal symbol from its parts.
[http://www.gnu.org/software/bison/manual/bison.html#Grammar-Layout]

===
The grammar rules also have an expression in Bison syntax. For example, here is the Bison rule for a C return statement. The semicolon in quotes is a literal character token, representing part of the C syntax for the statement; the naked semicolon, and the colon, are Bison punctuation used in every rule.

stmt: RETURN expr ';' ;
[http://www.gnu.org/software/bison/manual/bison.html#Grammar-in-Bison]
===
A Bison grammar rule has the following general form:

result: components...
;
where result is the nonterminal symbol that this rule describes and components are various terminal and nonterminal symbols that are put together by this rule (see section Symbols, Terminal and Nonterminal).

For example,

exp: exp '+' exp
;
says that two groupings of type exp, with a `+' token in between, can be combined into a larger grouping of type exp.
[http://dinosaur.compilertools.net/bison/bison_6.html]
===
Multiple rules for the same result can be written separately or can be joined with the vertical-bar character ‘|’ as follows:

result:
rule1-components...
| rule2-components...
...
;
[http://www.gnu.org/software/bison/manual/bison.html#Rules-Syntax]

bison'semantic-action

name::
* McsEngl.bison'semantic-action@cptIt,
* McsEngl.bison'grammar'action@cptIt,

_WHOLE:
* bison-rule#ql:bison'grammar_rule#

_DESCRIPTION:
In order to be useful, a program must do more than parse input; it must also produce some output based on the input. In a Bison grammar, a grammar rule can have an action made up of C statements. Each time the parser recognizes a match for that rule, the action is executed. See Actions.

Most of the time, the purpose of an action is to compute the semantic value of the whole construct from the semantic values of its parts.
[http://www.gnu.org/software/bison/manual/bison.html#Semantic-Actions]

bison'grammar'd.epilogue

name::
* McsEngl.bison'grammar'd.epilogue@cptIt,
* McsEngl.bison'grammar-epilogue@cptIt,

_DESCRIPTION:
The epilogue can contain any code you want to use. Often the definitions of functions declared in the prologue go here. In a simple program, all the rest of the program can go here.
[http://www.gnu.org/software/bison/manual/bison.html#Grammar-Layout]

bison'grammar'extension

name::
* McsEngl.bison'grammar'extension@cptIt,

_DESCRIPTION:
The source code for this calculator is named rpcalc.y. The ‘.y’ extension is a convention used for Bison grammar files.

bison'grammar'punctuation

name::
* McsEngl.bison'grammar'punctuation@cptIt,

The ‘%%’, ‘%{’ and ‘%}’ are punctuation that appears in every Bison grammar file to separate the sections.
[http://www.gnu.org/software/bison/manual/bison.html#Grammar-Layout]

bison'output (parser)

name::
* McsEngl.bison'output (parser)@cptIt,
* McsEngl.bison'generated-parser@cptIt,
* McsEngl.bison'parser@cptIt,
* McsEngl.bison'parser-implementation-file@cptIt,

_DESCRIPTION:
When you run Bison, you give it a Bison grammar file as input. The most important output is a C source file that implements a parser for the language described by the grammar. This parser is called a Bison parser, and this file is called a Bison parser implementation file. Keep in mind that the Bison utility and the Bison parser are two distinct programs: the Bison utility is a program whose output is the Bison parser implementation file that becomes part of your program.
[http://www.gnu.org/software/bison/manual/bison.html#Bison-Parser]

bison'parser'doing

name::
* McsEngl.bison'parser'doing@cptIt,

_DESCRIPTION:
The job of the Bison parser is to group tokens into groupings according to the grammar rules—for example, to build identifiers and operators into expressions. As it does this, it runs the actions for the grammar rules it uses.
[http://www.gnu.org/software/bison/manual/bison.html#Bison-Parser]

bison'parser'symbol

name::
* McsEngl.bison'parser'symbol@cptIt,

_DESCRIPTION:
all symbols defined in the Bison parser implementation file itself begin with ‘yy’ or ‘YY’.
[http://www.gnu.org/software/bison/manual/bison.html#Bison-Parser]

bison'relation-to-Yacc

name::
* McsEngl.bison'relation-to-Yacc@cptIt,

_DESCRIPTION:
Bison is upward compatible with Yacc: all properly-written Yacc grammars ought to work with Bison with no change. Anyone familiar with Yacc should be able to use Bison with little trouble. You need to be fluent in C or C++ programming in order to use Bison or to understand this manual. Java is also supported as an experimental feature.
[http://www.gnu.org/software/bison/manual/bison.html#Introduction]

bison'resource

name::
* McsEngl.bison'resource@cptIt,

_ADDRESS.WPG:
* http://dinosaur.compilertools.net/bison/index.html,
* http://www.gnu.org/software/bison/manual/bison.html,

bison'semantic-parser

name::
* McsEngl.bison'semantic-parser@cptIt,

bison'symbol

name::
* McsEngl.bison'symbol@cptIt,

_DESCRIPTION:
In the formal grammatical rules for a language, each kind of syntactic unit or grouping is named by a symbol. Those which are built by grouping smaller constructs according to grammatical rules are called nonterminal symbols; those which can't be subdivided are called terminal symbols or token types. We call a piece of input corresponding to a single terminal symbol a token, and a piece corresponding to a single nonterminal symbol a grouping.
[http://www.gnu.org/software/bison/manual/bison.html#Concepts]

bison'nonterminal-symbol

name::
* McsEngl.bison'nonterminal-symbol@cptIt,
* McsEngl.bison'grouping@cptIt,

_GENERIC (grouping):

_INSTANCE (semantic-value):

bison'start-symbol

name::
* McsEngl.bison'start-symbol@cptIt,

_DESCRIPTION:
One nonterminal symbol must be distinguished as the special one which defines a complete utterance in the language. It is called the start symbol. In a compiler, this means a complete input program. In the C language, the nonterminal symbol `sequence of definitions and declarations' plays this role.
[http://www.gnu.org/software/bison/manual/bison.html#Language-and-Grammar]

bison'terminal-symbol

name::
* McsEngl.bison'terminal-symbol@cptIt,
* McsEngl.bison'token@cptIt,

_DESCRIPTION:
The Bison representation for a terminal symbol is also called a token type. Token types as well can be represented as C-like identifiers. By convention, these identifiers should be upper case to distinguish them from nonterminals: for example, INTEGER, IDENTIFIER, IF or RETURN. A terminal symbol that stands for a particular keyword in the language should be named after that keyword converted to upper case. The terminal symbol error is reserved for error recovery.
A terminal symbol can also be represented as a character literal, just like a C character constant. You should do this whenever a token is just a single character (parenthesis, plus-sign, etc.): use that same character in a literal as the terminal symbol for that token.

A third way to represent a terminal symbol is with a C string constant containing several characters. See Symbols, for more information.
[http://www.gnu.org/software/bison/manual/bison.html#Grammar-in-Bison]

_DESCRIPTION:
A terminal symbol (also known as a token type) represents a class of syntactically equivalent tokens. You use the symbol in grammar rules to mean that a token in that class is allowed. The symbol is represented in the Bison parser by a numeric code, and the yylex function returns a token type code to indicate what kind of token has been read. You don't need to know what the code value is; you can use the symbol to stand for it.
[http://dinosaur.compilertools.net/bison/bison_6.html]
===
Terminal symbols are the smallest units of your grammar -- for our example here, integers like "15" are one of our terminal symbols. (But not the individual characters "1" and "5" that make it up.) Terminal symbols are the boundary between Flex and Bison: Flex sees the individual "1" and "5" characters but combines them into "15" before giving it to Bison.
[http://aquamentus.com/flex_bison.html]

_SEMANTIC_VALUE (individual):
A compiler is useless if it fails to distinguish between 4, 1 and 3989 as constants in the program! Therefore, each token in a Bison grammar has both a token type and a semantic value.
[http://www.gnu.org/software/bison/manual/bison.html#Semantic-Values]

_TOKEN_TYPE (generic):
A compiler is useless if it fails to distinguish between 4, 1 and 3989 as constants in the program! Therefore, each token in a Bison grammar has both a token type and a semantic value.
[http://www.gnu.org/software/bison/manual/bison.html#Semantic-Values]

bison'usage

name::
* McsEngl.bison'usage@cptIt,

_DESCRIPTION:
Stages in Using Bison


The actual language-design process using Bison, from grammar specification to a working compiler or interpreter, has these parts:

Formally specify the grammar in a form recognized by Bison (see section Bison Grammar Files). For each grammatical rule in the language, describe the action that is to be taken when an instance of that rule is recognized. The action is described by a sequence of C statements.
Write a lexical analyzer to process input and pass tokens to the parser. The lexical analyzer may be written by hand in C (see section The Lexical Analyzer Function yylex). It could also be produced using Lex, but the use of Lex is not discussed in this manual.
Write a controlling function that calls the Bison-produced parser.
Write error-reporting routines.
To turn this source code as written into a runnable program, you must follow these steps:

Run Bison on the grammar to produce the parser.
Compile the code output by Bison, as well as any other source files.
Link the object files to produce the finished product.
[http://dinosaur.compilertools.net/bison/bison_4.html#SEC14]

ppg.Jison

name::
* McsEngl.ppg.Jison@cptIt,
* McsEngl.cs'tool.Jison@cptIt,
* McsEngl.Jison@cptIt,

_DESCRIPTION:
Parsers help computers derive meaning from arbitrary text. And Jison helps you build parsers!

Jison is essentially a clone of the parser generator Bison (thus Yacc,) but in JavaScript. It includes its own lexical analyzer modeled after Flex.

It was originally created by Zach Carter to help study for a Compilers course.
[http://zaach.github.io/jison/about//]
===
Jison

npm install -g jison

If you intend to mess around with the actual grammar rules (in src/grammar.coffee), you'll need to install the Jison parser generator. CoffeeScript's parser is not hand-written; instead, Jison is used to convert the src/grammer.coffee grammar definition DSL into an LALR parser. This is equivalent to what Yacc/Bison does, but the resulting code is JavaScript rather than C.
[https://github.com/jashkenas/coffee-script/wiki/%5BHowto%5D-Hacking-on-the-CoffeeScript-Compiler#jison]
===
Briefly, Jison takes a JSON encoded grammar specification and outputs a JavaScript file capable of parsing the language described by that grammar specification. You can then use the generated script to parse inputs and accept, reject, or perform actions based on the input.
[http://ajaxian.com/archives/jison-build-parsers-in-javascript]
===
The process of parsing a language commonly involves two phases: lexical analysis (tokenizing) and parsing, which the Lex/Yacc and Flex/Bison combinations are famous for. Jison lets you specify a parser much like you would using Bison/Flex, with separate files for tokenization rules and for the language grammar, or with the tokenization rules embedded in the main grammar.
[http://zaach.github.io/jison/docs/]

jison'doing.executing

name::
* McsEngl.jison'doing.executing@cptIt,
* McsEngl.jison'executing@cptIt,

_DESCRIPTION:
Clone the github repository for examples:
git clone git://github.com/zaach/jison.git
> cd jison/examples
Now you're ready to generate some parsers:
> jison calculator.jison
This will generate calculator.js in your current working directory. This file can be used to parse an input file, like so:
echo "2^32 / 1024" > testcalc
> node calculator.js testcalc
This will print out 4194304.

===
When the lexical grammar resides in its own (.jisonlex) file, use that as the second argument to Jison, e.g.:
> node bin/jison examples/classy.jison examples/classy.jisonlex
[http://zaach.github.io/jison/docs/]

jison'doing.installing

name::
* McsEngl.jison'doing.installing@cptIt,
* McsEngl.jison'installing@cptIt,

_DESCRIPTION:
Jison can be installed for Node using npm

Using npm:

npm install jison -g
[http://zaach.github.io/jison/docs/]

jison'human

name::
* McsEngl.jison'human@cptIt,

Carter.Zach:
* Zach_Carter
* https://github.com/zaach/
* zcarter@mozilla.com
* http://twitter.com/zii

jison'input (grammar)

name::
* McsEngl.jison'input (grammar)@cptIt,
* McsEngl.jison'context-free-grammar@cptIt,
* McsEngl.jison'grammar-file@cptIt,

_DESCRIPTION:
Briefly, Jison takes a JSON encoded grammar or Bison style grammar and outputs a JavaScript file capable of parsing the language described by that grammar. You can then use the generated script to parse inputs and accept, reject, or perform actions based on the input.
[https://npmjs.org/package/jison]
===
Jison takes a context-free grammar as input and outputs a JavaScript file capable of parsing the language described by that grammar.
...
Like Bison, Jison can recognize languages described by LALR(1) grammars, though it also has modes for LR(0), SLR(1), and LR(1). It also has a special mode for generating LL(1) parse tables (requested by my professor,) and could be extended to generate a recursive descent parser for LL(k) languages in the future. But, for now, Jison is geared toward bottom-up parsing.
*LR(1) mode is currently not practical for use with anything other than toy grammars, but that is entirely a consequence of the algorithm used, and may change in the future.
[http://zaach.github.io/jison/docs/]

jison'lexical-analysis

name::
* McsEngl.jison'lexical-analysis@cptIt,
* McsEngl.jison'tokenizing@cptIt,

jison'output (parser)

name::
* McsEngl.jison'output (parser)@cptIt,
* McsEngl.jison'generated-parser@cptIt,
* McsEngl.jison'parser@cptIt,

_DESCRIPTION:
Jison takes a context-free grammar as input and outputs a JavaScript file capable of parsing the language described by that grammar.
[http://zaach.github.io/jison/docs/]

jison'project

name::
* McsEngl.jison'project@cptIt,

ProjectsUsingJison
CoffeeScript - unfancy JavaScript
handlebars.js
reflect.js - JavaScript parsing toolkit based on Mozilla's Parser API
jQuery.sheet
jsonlint - Check your JSON on the command-line or on a web page
Orderly.js
Tagmata
JSHC - Haskell implementation in JavaScript
ngn/apl - an APL interpreter in CoffeeScript
contextfree.js
Slogo - a multi-agent programmable modeling environment for WebGL
Karel Online - A web version of Karel, a didactic programming language where you program a robot
Roy - small functional language that compiles to JavaScript
EventSource - an EventSource client for Node.js
Serenade.js - client side js library with views compiled using Jison
NDoc - JavaScript documentation generator inspired by PDoc, with some extensions
proto2json - Google Protocol Buffers .proto files to JSON converter
hobbes - Interpreter for a subset of Java
velocity.js - Velocity template implementation in JavaScript
VexTab - A language for writing guitar tablature and music notation. Converted the original hand-rolled parser to Jison, and we now have something that is smaller, faster, and easier to maintain.
js-sequence-diagrams - Draws simple SVG sequence diagrams from textual representation of the diagram.
tablequeryjs - Use textual queries to filter tables.
cssparser.js - A parser that generates json matched with source css structure. (project page)
Byens Puls - Using Jison to parse custom data format and display train locations in capital region of Denmark. (project page)
TruthMachine - An on-line open-source Sentential Logic truth table generator, includes a Jison based parser for Sentential Logic sentences.
[https://github.com/zaach/jison/wiki/ProjectsUsingJison]

jison'resource

name::
* McsEngl.jison'resource@cptIt,

_ADDRESS.WPG:
* http://zaach.github.io/jison//
* http://cjihrig.com/blog/creating-a-javascript-parser//
* https://github.com/zaach/jison2json,
* https://github.com/zaach/json2jison,

ppg.Ohm

name::
* McsEngl.ppg.Ohm@cptIt,
* McsEngl.Ohm-parser-generator@cptIt,

_DESCRIPTION:
Ohm is a parser generator consisting of a library and a domain-specific language. You can use it to parse custom file formats or quickly build parsers, interpreters, and compilers for programming languages. The Ohm language is based on parsing expression grammars (PEGs), which are a formal way of describing syntax, similar to regular expressions and context-free grammars. The Ohm library provides a JavaScript interface (known as Ohm/JS) for creating parsers, interpreters, and more from the grammars you write.
Like its older sibling OMeta, Ohm supports object-oriented grammar extension. One thing that distinguishes Ohm from other parsing tools is that it completely separates grammars from semantic actions. In Ohm, a grammar defines a language, and semantic actions specify what to do with valid inputs in that language. Semantic actions are written in the host language -- e.g., for Ohm/JS, the host language is JavaScript. Ohm grammars, on the other hand, work without modification in any host language. This separation improves modularity, and makes both grammars and semantic actions easier to read and understand. Currently, JavaScript is the only host language, but as the API stabilizes, we hope to have implementations for other languages.
[https://github.com/cdglabs/ohm]

ppgOhm'Resource

name::
* McsEngl.ppgOhm'Resource@cptIt,

_ADDRESS.WPG:
* https://www.pubnub.com/blog/2016-08-30-javascript-parser-ohm-makes-creating-a-programming-language-easy//

ppg.PEG.js

name::
* McsEngl.ppg.PEG.js@cptIt,
* McsEngl.pegjs@cptIt,

_DESCRIPTION:
PEG.js is a simple parser generator for JavaScript that produces fast parsers with excellent error reporting. You can use it to process complex data or computer languages and build transformers, interpreters, compilers and other tools easily.
[http://pegjs.majda.cz/]

pegjs'human

name::
* McsEngl.pegjs'human@cptIt,

Majda.David:
* David_Majda
E-mail: david@majda.cz
WWW: http://majda.cz/
I live in Prague (the capital of the Czech Republic).
* twitter: @dmajda

pegjs'input (grammar)

name::
* McsEngl.pegjs'input (grammar)@cptIt,
* McsEngl.pegjs'grammar-file@cptIt,

pegjs'initializer

name::
* McsEngl.pegjs'initializer@cptIt,

_DESCRIPTION:
Rules can be preceded by an initializer — a piece of JavaScript code in curly braces (“{” and “}”). This code is executed before the generated parser starts parsing. All variables and functions defined in the initializer are accessible in rule actions and semantic predicates. Curly braces in the initializer code must be balanced.
[http://pegjs.majda.cz/documentation]

pegjs'rule

name::
* McsEngl.pegjs'rule@cptIt,

_DESCRIPTION:
integer "integer"
= digits:[0-9]+ { return parseInt(digits.join(""), 10); }
On the top level, the grammar consists of rules (in our example, there are five of them). Each rule has a name (e.g. integer) that identifies the rule, and a parsing expression (e.g. digits:[0-9]+ { return parseInt(digits.join(""), 10); }) that defines a pattern to match against the input text and possibly contains some JavaScript code that determines what happens when the pattern matches successfully. A rule can also contain human-readable name that is used in error messages (in our example, only the integer rule has a human-readable name).
[http://pegjs.majda.cz/documentation]

_EXAMPLE:
name "human-readable-name"
= parsing-expression
===
integer "integer"
= digits:[0-9]+ { return parseInt(digits.join(""), 10); }

_ATTRIBUTE:
* name##
* equality-sign##
* human-readable-name##
* parsing-expression##

pegjs'rule'much-result

name::
* McsEngl.pegjs'rule'much-result@cptIt,

_PEGJS'MUCH_RESULT:
One special case of parser expression is a parser action — a piece of JavaScript code inside curly braces (“{” and “}”) that takes match results of some of the the preceding expressions and returns a JavaScript value. This value is considered match result of the preceding expression (in other words, the parser action is a match result transformer).
[http://pegjs.majda.cz/documentation]

pegjs'rule'name

name::
* McsEngl.pegjs'rule'name@cptIt,

_PEGJS'NAME_OF_RULE:
Each rule has a name (e.g. integer) that identifies the rule,
...
A rule can also contain human-readable name that is used in error messages (in our example, only the integer rule has a human-readable name).
...
A rule name must be a JavaScript identifier.
...
If the rule has a human-readable name, it is written as a JavaScript string between the name and separating equality sign.
[http://pegjs.majda.cz/documentation]

pegjs'rule'parsing-expression

name::
* McsEngl.pegjs'rule'parsing-expression@cptIt,
* McsEngl.PEGJS'PARSING-EXPRESSION@cptIt,
* McsEngl.pegjs'expression@cptIt,

_DESCRIPTION:
Each rule has a name (e.g. integer) that identifies the rule, and a parsing expression (e.g. digits:[0-9]+ { return parseInt(digits.join(""), 10); }) that defines a pattern to match against the input text and possibly contains some JavaScript code that determines what happens when the pattern matches successfully.
[http://pegjs.majda.cz/documentation]

pegjs'rule'parser-action

name::
* McsEngl.pegjs'rule'parser-action@cptIt,

_PEGJS'PARSER_ACTION:
One special case of parser expression is a parser action — a piece of JavaScript code inside curly braces (“{” and “}”) that takes match results of some of the the preceding expressions and returns a JavaScript value. This value is considered match result of the preceding expression (in other words, the parser action is a match result transformer).
[http://pegjs.majda.cz/documentation]

pegjs'rule.START

name::
* McsEngl.pegjs'rule.START@cptIt,

_PEGJS'START_RULE:
The parsing starts at the first rule, which is also called the start rule.
[http://pegjs.majda.cz/documentation]

pegjs'installing

name::
* McsEngl.pegjs'installing@cptIt,

_DESCRIPTION:
Installation

Node.js

To use the pegjs command, install PEG.js globally:

$ npm install -g pegjs
To use the JavaScript API, install PEG.js locally:

$ npm install pegjs
If you need both the pegjs command and the JavaScript API, install PEG.js both ways.

Browser

Download the PEG.js library (regular or minified version).
[http://pegjs.majda.cz/documentation#installation]

pegjs'output (parser)

name::
* McsEngl.pegjs'output (parser)@cptIt,
* McsEngl.pegjs'parser@cptIt,

pegjs'projects-using

name::
* McsEngl.pegjs'projects-using@cptIt,

_ADDRESS.WPG:
* https://github.com/dmajda/pegjs/wiki/Projects-Using-PEG.js,

lcptool.TASK-RUNNER

name::
* McsEngl.lcptool.TASK-RUNNER@cptIt,
* McsEngl.task-runner-lcp@cptIt,

* McsEngl.build-program@cptIt,
* McsEngl.build-tool@cptIt,
* McsEngl.pgmtool.BUILD-TOOL@cptIt,
* McsEngl.prgImpl.BUILD-TOOL@cptIt,

_DESCRIPTION:
Build automation is the act of scripting or automating a wide variety of tasks that software developers do in their day-to-day activities including things like:
compiling computer source code into binary code
packaging binary code
running tests
deployment to production systems
creating documentation and/or release notes
[http://en.wikipedia.org/wiki/Build_automation]

_ADDRESS.WPG:
* http://en.wikipedia.org/wiki/List_of_build_automation_software,

lcptool.TRANSLATOR (implementor)

_CREATED: {2007-12-29}

name::
* McsEngl.lcptool.TRANSLATOR (implementor)@cptIt,
* McsEngl.conceptIt533,
* McsEngl.code-translator@cptIt, {2016-09-01}
* McsEngl.implementation'of'programmingLanguage@cptIt,
* McsEngl.lcptool.implementor@cptIt533, {2014-03-16}
* McsEngl.pl'translator@cptIt,
* McsEngl.prgImplementation@cptIt533, {2011-09-25}
* McsEngl.prgImpl@cptIt533, {2011-09-25}
* McsEngl.program'tool@cptIt533,
* McsEngl.program-translator@cptIt533,
* McsEngl.translator.program@cptIt533,
* McsEngl.pgmlng'implementation@cptIt,
* McsEngl.pgmtrans@cptIt533, {2013-12-22}
* McsEngl.programming-language-implementation-cpIt@cptIt,
* McsEngl.lcpimr@cptIt533, {2014-03-16}
* McsEngl.lcp'runtime-system@cptIt,
* McsEngl.run-time-system@cptIt,
* McsEngl.runtime@cptIt,
* McsEngl.runtime-environment@cptIt,
* McsEngl.runtime-system@cptIt,
====== lagoGreek:
* McsElln.ΜΕΤΑΦΡΑΣΤΗΣ-ΠΡΟΓΡΑΜΑΤΩΝ@cptIt533,

_DEFINITION:
An implementation of a programming language provides a way to execute that program on one or more configurations of hardware and software.
[http://en.wikipedia.org/wiki/Programming_language]
===
Distinguish this from Development Environments and Build Environments.

You will tend to find a hierarchy here.

Run time environment - Everything you need to execute a program, but no tools to change it.

Build environment- Given some code written by someone, everything you need to compile it or otherwise prepare an executable that you put into a Run time environment. Build environments are pretty useless unless you can see tests what you have built, so they often include Run too. In Build you can't actually modify the code.

Development environment - Everything you need to write code, build it and test it. Code Editors and other such tools. Typically also includes Build and Run.
[https://stackoverflow.com/a/3710234]

DEFINITION

Program_Translator is a program that translates a program from one programing_language to another.
[KasNik, 2007-12-29]

A programming language implementation is a system for executing programs written in a programming language.

There are two general approaches to programming language implementation:

Interpretation: An interpreter takes as input a program in some language, and performs the actions written in that language on some machine.
Compilation: A compiler takes as input a program in some language, and translates that program into some other language, which may serve as input to another interpreter or another compiler.
Notice that a compiler does not directly execute the program. Ultimately, in order to execute a program via compilation, it must be translated into a form that can serve as input to an interpreter.

When a piece of computer hardware can interpret a programming language directly, that language is called machine code. A so-called native code compiler is one that compiles a program into machine code. Actual compilation is often separated into multiple passes, like code generation (often for assembler language), assembling (generating native code), linking, loading and execution.

If a compiler of a given high level language produces another high level language, it is called translator (source to source translation), which is often useful to add extensions to existing languages or to exploit good and portable implementation of other language (for example C), simplifying development.

Many combinations of interpretation and compilation are possible, and many modern programming language implementations include elements of both. For example, the Smalltalk programming language is conventionally implemented by compilation into bytecode, which is then either interpreted or compiled by a virtual machine (most popular ways is to use JIT or AOT compiler compilation). This implementation strategy has been copied by many languages since Smalltalk pioneered it in the 1970s and 1980s.
[http://en.wikipedia.org/wiki/Programming_language_implementation]

_DESCRIPTION:
A run-time system (also called runtime system, runtime environment, or just runtime) implements the core behavior of a computer language. Every computer language implements[verification needed] some form of runtime system, whether the language is a compiled language, interpreted language, embedded domain-specific language, or is invoked via an API as is pthreads. In addition to the basic low-level behavior of the language, a runtime system may also implement higher-level behavior and even support type checking, debugging, or code generation and optimization.

Overview[edit]

As a simple example of a basic runtime, the runtime system of the C language is a particular set of instructions inserted into the executable image by the compiler. Among other things, these instructions manage the processor stack, create space for local variables, and copy function-call parameters onto the top of the stack. The reason this behavior is part of the runtime, as opposed to part of a keyword of the language, is that it is systematic, maintaining the state of the stack throughout a program's execution. The systematic behavior implements the execution model of the language, as opposed to implementing semantics that contribute to a particular computed result.

Another example, which illuminates the nature of a runtime system, is the case of using an application programming interface (API) to interact with a runtime. The calls to that API look the same as calls to a software library, however the runtime adds systematic behavior that implements an execution model. The API contains stub code that invokes the runtime, in contrast to a library which contains code that directly implements behavior. A person reading the code of a library would be able to understand the library's behavior by just knowing the language the library was written in. However, a person reading the code of the API that invokes a runtime would not be able to understand the behavior of the API call just by knowing the language the API was written in. They must also know the execution model implemented by the runtime system being invoked. This difference is what distinguishes an embedded-style language, such as posix threads, from a software library. Both posix-threads calls and library calls are invoked via an API, but posix-threads behavior cannot be understood in terms of the language being used. Rather, posix-threads calls bring into play an outside execution model, which is implemented by the posix-threads runtime.

Some compiled or interpreted languages provide an interface that allows application code to directly interact with the runtime system. An example is the Thread class in the Java language. Normally core aspects of a language's behavior such as task scheduling and resource management are not accessible in this fashion.

Higher level behaviors implemented by a run-time system may include tasks such as drawing text on the screen or making an Internet connection. It is often the case that operating systems provide these kinds of behaviors as well, and when available, the runtime is implemented as an abstraction layer, that translates the invocation of the runtime into an invocation of the operating system. This hides the complexity or variations in the services offered by different operating systems.

In the limit, the run-time system may provide services such as a P-code machine or virtual machine, that hide even the processor's instruction set. This is the approach followed by many interpreted languages such as AWK, and some languages like Java, which are meant to be compiled into some machine-independent pseudocode (bytecode). This arrangement greatly simplifies the task of language implementation and its adaptation to different machines, and allows sophisticated language features such as reflection. It also allows the same program to be executed on any machine without recompiling, a feature that has become very important since the diffusion of the World Wide Web.

A runtime may be modularized according to the proto-runtime approach.

History[edit]

Notable early examples of run-time systems are the interpreters for BASIC and Lisp. The latter included also a garbage collector. Forth is an early example of a language that was designed to be compiled into pseudocode; its run-time system was a virtual machine that interpreted that pseudocode. Another popular, if theoretical, example is Donald Knuth's MIX computer.

In C and later languages that supported dynamic memory allocation, the runtime also included a library that managed the program's memory pool.

In the object-oriented programming languages, the run-time system was often also responsible for dynamic type checking and resolving method references.
[http://en.wikipedia.org/wiki/Run-time_system]

lcpimr'GENERIC

_GENERIC:
* SYSTEM_PROGRAM#cptItsoft331#

SPECIFIC

lcpimr.specific,

SPESIFEPTO:
There are, broadly, two approaches to programming language implementation: compilation and interpretation. It is generally possible to implement a language using either technique.
[http://en.wikipedia.org/wiki/Programming_language]

lcpimr.COMPILER#cptIt401#

name::
* McsEngl.lcpimr.COMPILER@cptIt,

lcpimr.DECOMPILER

name::
* McsEngl.lcpimr.DECOMPILER@cptIt,
* McsEngl.decompiler@cptIt,

_DESCRIPTION:
A program that translates from a low level language to a higher level one is a decompiler.
[http://en.wikipedia.org/wiki/Compiler]

lcpimr.INTERPRETER

_CREATED: {2007-12-29}

name::
* McsEngl.lcpimr.INTERPRETER@cptIt,
* McsEngl.conceptIt533.1,
* McsEngl.conceptIt513,
* McsEngl.conceptIt513,
* McsEngl.lcp'interpreter@cptIt,
* McsEngl.interpreter-of-programing-language@cptIt,
* McsEngl.pl'interpreter@cptIt,
* McsEngl.interpreter@cptIt,
====== lagoGreek:
* McsElln.ΔΙΕΡΜΗΝΕΑΣ@cptIt513,

_DESCRIPTION:
In computer science, an interpreter is a computer program that executes, or performs, instructions written in a computer programming language. It is not to be confused with a command line interpreter.

Interpretation is one of the two major ways in which a programming language can be implemented, the other being compilation. The term interpreter may refer to the program that executes source code that has already been translated to some intermediate form, or it may refer to the program that performs both the translation and execution.

The Java virtual machine is an example of the former: Java source programs are compiled ahead of time and stored as machine-independent bytecode, which is then linked at run-time and executed by the virtual machine. Perl is an example of the latter, where the one interpreter translates Perl source into an intermediate in-memory bytecode to be executed in-place.

A language is an abstraction that is independent of its implementation in an interpreter or a compiler; the terms interpreted language or compiled language merely mean that the canonical implementation of that language is an interpreter or a compiler.

Many "interpreters" today include some element of compilation as well, such as a bytecode compiler, as found in Perl and Python. In such an arrangement, source code is compiled to a more efficient intermediate form, which is then interpreted.
[http://en.wikipedia.org/wiki/Interpreter_%28computing%29]

interpreter'lexer

name::
* McsEngl.interpreter'lexer@cptIt,

_DESCRIPTION:
A lexer takes a input a string of characters, and outputs a list of tokens.
[https://www.codeproject.com/articles/345888/how-to-write-a-simple-interpreter-in-javascript]

interpreter'parser

name::
* McsEngl.interpreter'parser@cptIt,

_DESCRIPTION:
The parser takes the list of tokens produced by the lexer as input, parses it according to some syntax rules, and outputs a representation of the syntactic structure called a parse tree.
{
operation: "/",
left: {
operation: "+",
left: 12,
right: 4
}
right: 6
}
This tends to be the most difficult part of the process.
[https://www.codeproject.com/articles/345888/how-to-write-a-simple-interpreter-in-javascript]

interpreter'evaluator

name::
* McsEngl.interpreter'evaluator@cptIt,

_DESCRIPTION:
The evaluator takes the parse tree produced by the parser and evaluates it.
[https://www.codeproject.com/articles/345888/how-to-write-a-simple-interpreter-in-javascript]

interpreter'resource

name::
* McsEngl.interpreter'resource@cptIt,

_ADDRESS.WPG:
* http://craftinginterpreters.com/
* https://www.codeproject.com/articles/345888/how-to-write-a-simple-interpreter-in-javascript,

lcpimr.REWRITER

name::
* McsEngl.lcpimr.REWRITER@cptIt,
* McsEngl.rewriter@cptIt,

_DESCRIPTION:
A language rewriter is usually a program that translates the form of expressions without a change of language.
[http://en.wikipedia.org/wiki/Compiler]

lcpimr.SOURCE-TO-SOURCE

name::
* McsEngl.lcpimr.SOURCE-TO-SOURCE@cptIt,
* McsEngl.language-translator@cptIt,
* McsEngl.source-to-source-translator@cptIt,
* McsEngl.source-to-source-compiler@cptIt,
* McsEngl.language-converter@cptIt,
* McsEngl.transcompiler@cptIt,
* McsEngl.trans-compiler@cptIt,
* McsEngl.transpiler@cptIt,
====== lagoGreek:
* McsElln.μέτα-μεταγλωτιστής@cptIt, {2013-12-22}

_DESCRIPTION:
A source-to-source compiler, transcompiler, or transpiler is a type of compiler that takes the source code of a programming language as its input and outputs the source code into another programming language. A source-to-source compiler translates between programming languages that operate at approximately the same level of abstraction, while a traditional compiler translates from a higher level programming language to a lower level programming language. For example, a source-to-source compiler may perform a translation of a program from Pascal to C. An automatic parallelizing compiler will frequently take in a high level language program as an input and then transform the code and annotate it with parallel code annotations (e.g., OpenMP) or language constructs (e.g. Fortran's forall statements).[1]

Another purpose of source-to-source-compiling is translating legacy code to use the next version of the underlying programming language or an API that breaks backward compatibility. It will perform automatic code refactoring which is useful when the programs to refactor are outside the control of the original implementer (for example, converting programs from Python 2 to Python 3, or converting programs from an old API to the new API) or when the size of the program makes it impractical or time consuming to refactor it by hand.

Transcompiler may either keep translated code as close to the source code as possible to ease development and debugging of the original source code, or else they may change so much the structure of the original code that the translated code does not look like the source code.[2]
[http://en.wikipedia.org/wiki/Transcompile]
===
A program that translates between high-level languages is usually called a language translator, source to source translator, or language converter.
[http://en.wikipedia.org/wiki/Compiler]

A "source-to-source compiler" is a type of compiler that takes a high level language as its input and outputs a high level language. For example, an automatic parallelizing compiler will frequently take in a high level language program as an input and then transform the code and annotate it with parallel code annotations (e.g. OpenMP) or language constructs (e.g. Fortran's DOALL statements).
Another purpose of source-to-source-compiling is translating legacy code to use the next version of the underlying programming language or an API that breaks backwards compatibility. Examples of this are seen in Python 3000 or Qt's qt3to4 tool.
[http://en.wikipedia.org/wiki/Source-to-source_compiler]

lcptool.translator.COMPILER

name::
* McsEngl.lcptool.translator.COMPILER@cptIt,
* McsEngl.conceptIt401,
* McsEngl.compiler@cptIt,
* McsEngl.compiler-of-programing-language@cptIt,
* McsEngl.pl'compiler@cptIt,
* McsEngl.program.compiler@cptIt401,
====== lagoGreek:
* McsElln.ΜΕΤΑΓΛΩΤΤΙΣΤΗΣ@cptIt,
* McsElln.ΜΕΤΑΦΡΑΣΤΗΣ@deleted,

=== _NOTES: ΜΕΤΑΓΛΩΤΤΙΣΤΗΣ, [βιβλίο γ' λυκείου "ανάπτυξη εφαρμογών" 1999 α' έκδοση]

DEFINITION

A compiler is a computer program (or set of programs) that translates text written in a computer language (the source language) into another computer language (the target language). The original sequence is usually called the source code and the output called object code. Commonly the output has a form suitable for processing by other programs (e.g., a linker), but it may be a human-readable text file.
[http://en.wikipedia.org/wiki/Compiler]

ΜΕΤΑΓΛΩΤΤΙΣΤΗΣ.
ΕΝΑ ΠΡΟΓΡΑΜΜΑ ΠΟΥ ΔΕΧΕΤΑΙ ΕΝΑ ΑΡΧΙΚΟ ΠΡΟΓΡΑΜΜΑ ΣΕ ΓΛΩΣΣΑ ΥΨΗΛΟΥ ΕΠΙΠΕΔΟΥ ΚΑΙ ΤΟ ΜΕΤΑΤΡΕΠΕΙ ΣΕ ΤΕΛΙΚΟ (OBJECT).
[ΚΟΙΛΙΑΣ, 1993, 255#cptResource468]

The syntax of a programming language is checked by that language's compiler at compilation time.
[SOURCE: PC-GLOSSARY 1993]

mike <noEmail@noSpam.net> wrote:
> This is probably a stupid question but can anyone tell me what language(s) > are used to create programming languages. For instance, what language was > "C" anc C++ written in? What hardware and software is needed to write a > programming language?

Writing a programming language is a complicated process. That being said, Pretty much Any language can be used to write a compiler for any other laguage.As long as it is able to write to a file (to create an executable file) and manipulate memory.
A compiler is usually made of two parts: a lexical analyser and a parser.
The lexical analyser grabs 'words' from your language's source code and passes them to the parser which 'understands' the language and generates the appropriate machine code.
LEX and YACC are popular tools for automating this process a bit.
LEX is a lexical analyser generator. you feed it a script describing the 'words' in the language and it outputs the source for the lexical analyser.
YACC is a parser generator. you feed it a script describing the grammar of the language and it outputs the source for the parser.
The output from LEX and YACC can then be compiled with whatever compiler you wish. The resulting application will (with a lot of work) be your new compiler.
Of course utilities like these aren't manditory to create a compiler, they just make it easier. Either one can be hand coded in the language of your choice. The original compilers were obvioiusly coded in assembly.
One of my teachers said he actually created an assembler in APL. Don't ask me why.
-- Remove "NOSPAM" from reply address to reply.
gerryb@NOSPAMSolutions.MB.CA http://personal.solutions.net/gerryb/
[Gerrry Beggs 1997aug19]

compiler'GENERIC

_GENERIC:
* PROGRAM_TRANSLATOR#cptItsoft533#

compiler'WHOLE

_WHOLE:
* INTEGRATED_DEVELOPMENT_ENVIRONMENT#cptItsoft430#

compiler'PART

name::
* McsEngl.compiler'PART@cptIt,

The elements of a compiler
Although "compiler" sounds like quite a technical term, it is just the name given to an application that converts source code to object code. The source code need not be a programming language, although that is certainly the most common thing to use - anything that converts input A to output B can be thought of as a compiler.

As far as we are concerned, compilers convert one language, such as PHP, into a form that can be executed. Compilers come in three parts: analysis, synthesis, and output. The first two of these can be subdivided further, but for now we'll consider them at this high level.

At the analysis stage, the source code is read in, and checked to make sure it is correct. At the synthesis stage, the source code is usually converted to "intermediate code" - a language form that is not human-readable like the source code, but not tied to a machine like the object code is. This intermediate code is then optimised for maximum performance and/or size. The final stage is output, where the intermediate code is converted to the target output, which may be an executable file, or may be an interpreted system of operation codes (opcodes).

The middle step, synthesis, is optional, and not all systems employ it. PHP, for example, converts straight from PHP script to its interpreted opcodes, with no middle step. As a result, it is not easy to optimise PHP codes. The advantage to having the synthesis stage, apart from the extra chance to do optimisation, is primarily that it keeps the source language and the destination executable well apart. If a compiler converted C++ directly to Windows .exe executable files, how would that compiler be ported to create Linux executables?

If an intermediate code system is in place, the same analysis stage ("front end") can be used for any target output, and, similarly, the same generation stage ("back end") can be used for any input - as long a source code can be converted to the intermediate code, it can be passed to the output stage for generation. This method is employed in the Microsoft Common Language Runtime - many .NET languages compile down to MS IL (Microsoft Intermediate Language), and there is one MS IL interpreter than can hotspot compile (that is, on the fly) to assembly from MS IL.

Despite the benefits of an analysis stage, we'll be missing out on it in this example as it's exceptionally heavy on theory and not really much to do with PHP. That leaves us with the analysis stage and the output stage.
[http://tuxradar.com/practicalphp/21/5/2]

compiler'ENVIRONMENT#cptCore756#

name::
* McsEngl.compiler'ENVIRONMENT@cptIt,

compiler'DOMAIN

name::
* McsEngl.compiler'DOMAIN@cptIt,

SOURCE_PROGRAM

SOURCE_PROGRAMING_LANGUAGE#cptItsoft248#

compiler'CODOMAIN

name::
* McsEngl.compiler'CODOMAIN@cptIt,

TARGET_PROGRAMING_LANGUAGE#cptItsoft248#

TARGET-PROGRAM

name::
* McsEngl.compiler-output@cptIt401i,
* McsEngl.generated-code-of-compiler@cptIt401i,
* McsEngl.target-program-of-compiler@cptIt401i,

compiler'IMPLEMENTATION

name::
* McsEngl.compiler'IMPLEMENTATION@cptIt,

compiler'DESIGN

name::
* McsEngl.compiler'DESIGN@cptIt,

compiler'code-generator

name::
* McsEngl.compiler'code-generator@cptIt,
* McsEngl.code'generator'of'compiler@cptIt401,

_DEFINITION:
In computer science, code generation is the process by which a compiler's code generator converts some internal representation of source code into a form (e.g., machine code) that can be readily executed by a machine (often a computer).
[http://en.wikipedia.org/wiki/Code_generation_%28compiler%29]

compiler'compiler-generator

name::
* McsEngl.compiler'compiler-generator@cptIt,

compiler'evoluting#cptCore546.171#

name::
* McsEngl.compiler'evoluting@cptIt,

1962:
The first self-hosting compiler -capable of compiling its own source code in a high-level language- was created for Lisp by Hart and Levin at MIT in 1962.[2] Since the 1970s it has become common practice to implement a compiler in the language it compiles, although both Pascal and C have been popular choices for implementation language. Building a self-hosting compiler is a bootstrapping problem -- the first such compiler for a language must be compiled either by a compiler written in a different language, or (as in Hart and Levin's Lisp compiler) compiled by running the compiler in an interpreter.
[http://en.wikipedia.org/wiki/Compiler]

1960:
COBOL was an early language to be compiled on multiple architectures, in 1960.[1]
[http://en.wikipedia.org/wiki/Compiler]

1957:
The FORTRAN team led by John Backus at IBM is generally credited as having introduced the first complete compiler, in 1957.
[http://en.wikipedia.org/wiki/Compiler]

1952:
The first compiler was written by Grace Hopper, in 1952, for the A-0 programming language.
[http://en.wikipedia.org/wiki/Compiler]

compiler'stage.Front-end-phase

name::
* McsEngl.compiler'stage.Front-end-phase@cptIt,
* McsEngl.front-end-phase@cptIt401i,

_DESCRIPTION:
Front end

The front end analyzes the source code to build an internal representation of the program, called the intermediate representation or IR. It also manages the symbol table, a data structure mapping each symbol in the source code to associated information such as location, type and scope. This is done over several phases, which includes some of the following:

1. Line reconstruction. Languages which strop their keywords or allow arbitrary spaces within identifiers require a phase before parsing, which converts the input character sequence to a canonical form ready for the parser. The top-down, recursive-descent, table-driven parsers used in the 1960s typically read the source one character at a time and did not require a separate tokenizing phase. Atlas Autocode, and Imp (and some implementations of Algol and Coral66) are examples of stropped languages whose compilers would have a Line Reconstruction phase.
2. Lexical analysis breaks the source code text into small pieces called tokens. Each token is a single atomic unit of the language, for instance a keyword, identifier or symbol name. The token syntax is typically a regular language, so a finite state automaton constructed from a regular expression can be used to recognize it. This phase is also called lexing or scanning, and the software doing lexical analysis is called a lexical analyzer or scanner.
3. Preprocessing. Some languages, e.g., C, require a preprocessing phase which supports macro substitution and conditional compilation. Typically the preprocessing phase occurs before syntactic or semantic analysis; e.g. in the case of C, the preprocessor manipulates lexical tokens rather than syntactic forms. However, some languages such as Scheme support macro substitutions based on syntactic forms.
4. Syntax analysis involves parsing the token sequence to identify the syntactic structure of the program. This phase typically builds a parse tree, which replaces the linear sequence of tokens with a tree structure built according to the rules of a formal grammar which define the language's syntax. The parse tree is often analyzed, augmented, and transformed by later phases in the compiler.
5. Semantic analysis is the phase in which the compiler adds semantic information to the parse tree and builds the symbol table. This phase performs semantic checks such as type checking (checking for type errors), or object binding (associating variable and function references with their definitions), or definite assignment (requiring all local variables to be initialized before use), rejecting incorrect programs or issuing warnings. Semantic analysis usually requires a complete parse tree, meaning that this phase logically follows the parsing phase, and logically precedes the code generation phase, though it is often possible to fold multiple phases into one pass over the code in a compiler implementation.
[http://en.wikipedia.org/wiki/Compiler]

compiler'stage.LINE-RECONSTRUCTION-PHASE

name::
* McsEngl.compiler'stage.LINE-RECONSTRUCTION-PHASE@cptIt,

_DESCRIPTION:
Line reconstruction. Languages which strop their keywords or allow arbitrary spaces within identifiers require a phase before parsing, which converts the input character sequence to a canonical form ready for the parser. The top-down, recursive-descent, table-driven parsers used in the 1960s typically read the source one character at a time and did not require a separate tokenizing phase. Atlas Autocode, and Imp (and some implementations of Algol and Coral66) are examples of stropped languages whose compilers would have a Line Reconstruction phase.
[http://en.wikipedia.org/wiki/Compiler]

compiler'stage.PREPROCESSING-PHASE

name::
* McsEngl.compiler'stage.PREPROCESSING-PHASE@cptIt,
* McsEngl.preprocessing@cptIt401i,

_DESCRIPTION:
Preprocessing. Some languages, e.g., C, require a preprocessing phase which supports macro substitution and conditional compilation. Typically the preprocessing phase occurs before syntactic or semantic analysis; e.g. in the case of C, the preprocessor manipulates lexical tokens rather than syntactic forms. However, some languages such as Scheme support macro substitutions based on syntactic forms.
[http://en.wikipedia.org/wiki/Compiler]

compiler'stage.BACK-END-PHASE

name::
* McsEngl.compiler'stage.BACK-END-PHASE@cptIt,
* McsEngl.back-end-phase@cptIt401i,

_DESCRIPTION:
Back end

The term back end is sometimes confused with code generator because of the overlapped functionality of generating assembly code. Some literature uses middle end to distinguish the generic analysis and optimization phases in the back end from the machine-dependent code generators.

The main phases of the back end include the following:

1. Analysis: This is the gathering of program information from the intermediate representation derived from the input. Typical analyses are data flow analysis to build use-define chains, dependence analysis, alias analysis, pointer analysis, escape analysis etc. Accurate analysis is the basis for any compiler optimization. The call graph and control flow graph are usually also built during the analysis phase.
2. Optimization: the intermediate language representation is transformed into functionally equivalent but faster (or smaller) forms. Popular optimizations are inline expansion, dead code elimination, constant propagation, loop transformation, register allocation or even automatic parallelization.
3. Code generation: the transformed intermediate language is translated into the output language, usually the native machine language of the system. This involves resource and storage decisions, such as deciding which variables to fit into registers and memory and the selection and scheduling of appropriate machine instructions along with their associated addressing modes (see also Sethi-Ullman algorithm).

Compiler analysis is the prerequisite for any compiler optimization, and they tightly work together. For example, dependence analysis is crucial for loop transformation.

In addition, the scope of compiler analysis and optimizations vary greatly, from as small as a basic block to the procedure/function level, or even over the whole program (interprocedural optimization). Obviously, a compiler can potentially do a better job using a broader view. But that broad view is not free: large scope analysis and optimizations are very costly in terms of compilation time and memory space; this is especially true for interprocedural analysis and optimizations.

The existence of interprocedural analysis and optimizations is common in modern commercial compilers from HP, IBM, SGI, Intel, Microsoft, and Sun Microsystems. The open source GCC was criticized for a long time for lacking powerful interprocedural optimizations, but it is changing in this respect. Another good open source compiler with full analysis and optimization infrastructure is Open64, which is used by many organizations for research and commercial purposes.

Due to the extra time and space needed for compiler analysis and optimizations, some compilers skip them by default. Users have to use compilation options to explicitly tell the compiler which optimizations should be enabled.
[http://en.wikipedia.org/wiki/Compiler]

compiler'stage.ANALYSIS

name::
* McsEngl.compiler'stage.ANALYSIS@cptIt,
* McsEngl.analysis.compiler@cptIt,
* McsEngl.compiler'analysis-phase@cptIt,

_DESCRIPTION:
Analysis
The analysis stage can be broken down into three sub-parts: lexical analysis, syntax analysis, and semantic analysis. The first stage reads the input script character by character to find tokens - parts of the script that are logical units by themselves. In PHP terms, a string is a token, as is a variable, a number, a brace, etc. As the lexical analyser (usually just called the lexer) finds tokens within a script, it returns them to the syntax analyser (parser), which makes sure that the script fits the syntax rules you have laid down. Finally, once the script has been tokenised and parsed, the semantic analyser kicks in to make sure the meaning of the script is valid.

Make sense? Right, onto the output stage...

Just kidding. You probably want some examples to clarify the above, and I wouldn't blame you!

The lexer scans through the input script looking for tokens to match. Consider the following line of pseudocode:

i = 10 * 10;
A lexer for that language would read it through and return the following:

VARIABLE ASSIGN_EQUALS NUMBER MULTIPLY NUMBER
The actual values i and 10 would get returned also for later use, along with the actual token types found. The parser has a long list of these tokens, and knows the order in which they are legally allowed to appear. For example, a parser might have the following two rules:

expression = NUMBER MULTIPLY NUMBER
statement = VARIABLE ASSIGN_EQUALS expression
Here you can see that the parser would know that an expression is a number multiplied by another number. Naturally this is a gross over-simplification, as there is a lot you can do other than just multiply two numbers together! However, notice also that the parser knows that a statement is a VARIABLE token followed by an ASSIGN_EQUALS token, followed by an expression. What happens if the lexer returns VARIABLE ASSIGN_EQUALS VARIABLE? Well, in the example above the parser would error out because it doesn't know how to handle that eventuality.

Think in terms of PHP for a moment. How often have you seen an error message like this one?

PHP Parse error: parse error, unexpected '='
That's PHP's parser in action, saying that it doesn't have a rule to match the = symbol in the current context.

Moving on, semantic analysis is there to decide whether the code is meaningful. For example, the following is syntactically correct in PHP, but semantically incorrect:

$foo = in_array($myvalue, $myarray, 1, 2, 3, 4, 5, 6, 7, 8);
In that example we pass in a value and an array to in_array(), but then eight other parameters. The whole line is syntactically correct - there function is perfectly formed, with all the commas and brackets in the right place - but semantically incorrect as in_array() only takes three parameters. Thus the code is essentially meaningless and a warning must be issued, like this:

PHP Warning: Wrong parameter count for in_array()
So, the three stages of analysis: check we have matching tokens, check the tokens fit together into valid groups, and check the overall code is actually meaningful.
[http://tuxradar.com/practicalphp/21/5/3]
===
1. Analysis: This is the gathering of program information from the intermediate representation derived from the input. Typical analyses are data flow analysis to build use-define chains, dependence analysis, alias analysis, pointer analysis, escape analysis etc. Accurate analysis is the basis for any compiler optimization. The call graph and control flow graph are usually also built during the analysis phase.
[http://en.wikipedia.org/wiki/Compiler]

compiler'stage.ANALYSIS.LEXICAL

name::
* McsEngl.compiler'stage.ANALYSIS.LEXICAL@cptIt,
* McsEngl.compiler'LEXICAL-ANALYSIS-PHASE@cptIt,
* McsEngl.lexical-analysis.compiler@cptIt,
* McsEngl.lexical-scanning.compiler@cptIt,
* McsEngl.lexing-phase@cptIt401i,
* McsEngl.scanning-phase@cptIt401i,

_DESCRIPTION:
Lexical analysis breaks the source code text into small pieces called tokens. Each token is a single atomic unit of the language, for instance a keyword, identifier or symbol name. The token syntax is typically a regular language, so a finite state automaton constructed from a regular expression can be used to recognize it. This phase is also called lexing or scanning, and the software doing lexical analysis is called a lexical analyzer or scanner.
[http://en.wikipedia.org/wiki/Compiler]

compiler'lexer-generator

name::
* McsEngl.compiler'lexer-generator@cptIt,
* McsEngl.lexer-generator@cptIt,

_DESCRIPTION:
Lexers are often generated by a lexer generator, analogous to parser generators, and such tools often come together. The most established is lex, paired with the yacc parser generator, and the free equivalents flex/bison. These generators are a form of domain-specific language, taking in a lexical specification – generally regular expressions with some markup – and outputting a lexer.

These tools yield very fast development, which is particularly important in early development, both to get a working lexer and because the language specification may be changing frequently. Further, they often provide advanced features, such as pre- and post-conditions which are hard to program by hand. However, automatically generated lexer may lack flexibility, and thus may require some manual modification or a completely manually written lexer.

Lexer performance is a concern, and optimization of the lexer is worthwhile, particularly in stable languages where the lexer is run very frequently (such as C or HTML). lex/flex-generated lexers are reasonably fast, but improvements of two to three times are possible using more tuned generators. Hand-written lexers are sometimes used, but modern lexer generators produce faster lexers than most hand-coded ones. The lex/flex family of generators uses a table-driven approach which is much less efficient than the directly coded approach.[dubious – discuss] With the latter approach the generator produces an engine that directly jumps to follow-up states via goto statements. Tools like re2c[3] and Quex have proven to produce engines that are between two to three times faster than flex produced engines.[citation needed] It is in general difficult to hand-write analyzers that perform better than engines generated by these latter tools.
[http://en.wikipedia.org/wiki/Lexer_generator]

compiler'lexical-analyzer (char -> token)

name::
* McsEngl.compiler'lexical-analyzer (char -> token)@cptIt,
* McsEngl.compiler'lexer@cptIt,
* McsEngl.lexer@cptIt,
* McsEngl.lexer.compiler@cptIt401,
* McsEngl.lexical-analyzer-of-compiler@cptIt401,

_DEFINITION:
A lexer forms the first phase of a compiler frontend in modern processing,[a] and is generally done in a single pass.
Lexers and parsers are most often used for compilers, but can be used for other computer language tools, such as prettyprinters or linters. A lexer itself can be divided into two stages: the scanner, which segments the input sequence into groups and categorizes these into token classes; and the evaluator, which converts the raw input characters into a processed value.
Lexers are generally quite simple, with most of the complexity deferred to the parser or semantic analysis phases, and can often be generated by a lexer generator, notably lex or derivatives. However, lexers can sometimes include some complexity, such as phrase structure processing to make input easier and simplify the parser, and may be written partially or completely by hand, either to support additional features or for performance.
[http://en.wikipedia.org/wiki/Token_(parser)#Applications] 2014-02-06
===
In computer science, lexical analysis is the process of converting a sequence of characters into a sequence of tokens. Programs performing lexical analysis are called lexical analyzers or lexers. A lexer consists of a scanner and a tokenizer.
[http://en.wikipedia.org/wiki/Compiler]

compiler'SCANNER

name::
* McsEngl.compiler'SCANNER@cptIt,
* McsEngl.scanner-of-compiler@cptIt401i,

_DESCRIPTION:
The first stage, the scanner, is usually based on a finite-state machine (FSM). It has encoded within it information on the possible sequences of characters that can be contained within any of the tokens it handles (individual instances of these character sequences are known as lexemes). For instance, an integer token may contain any sequence of numerical digit characters. In many cases, the first non-whitespace character can be used to deduce the kind of token that follows and subsequent input characters are then processed one at a time until reaching a character that is not in the set of characters acceptable for that token (this is known as the maximal munch rule, or longest match rule). In some languages,[which?] the lexeme creation rules are more complicated and may involve backtracking over previously read characters.
[http://en.wikipedia.org/wiki/Lexical_analysis]

compiler'TOKENIZER

name::
* McsEngl.compiler'TOKENIZER@cptIt,
* McsEngl.tokenizer@cptIt401i,

compiler'TOKEN

name::
* McsEngl.compiler'TOKEN@cptIt,

compiler'stage.ANALYSIS.SYNTAX (token => parse-tree)

name::
* McsEngl.compiler'stage.ANALYSIS.SYNTAX (token => parse-tree)@cptIt,
* McsEngl.compiler'SYNTAX-ANALYSIS-PHASE@cptIt,
* McsEngl.syntax-analysis@cptIt401i,

_DESCRIPTION:
Syntax analysis involves parsing the token sequence to identify the syntactic structure of the program. This phase typically builds a parse tree, which replaces the linear sequence of tokens with a tree structure built according to the rules of a formal grammar which define the language's syntax. The parse tree is often analyzed, augmented, and transformed by later phases in the compiler.
[http://en.wikipedia.org/wiki/Compiler]

compiler'stage.ANALYSIS.SEMANTIC (parse-tree => symbol-table)

name::
* McsEngl.compiler'stage.ANALYSIS.SEMANTIC (parse-tree => symbol-table)@cptIt,
* McsEngl.semantic-analysis@cptIt,
* McsEngl.compiler'SEMANTIC-ANALYSIS-PHASE@cptIt401i,

_DESCRIPTION:
Semantic analysis is the phase in which the compiler adds semantic information to the parse tree and builds the symbol table. This phase performs semantic checks such as type checking (checking for type errors), or object binding (associating variable and function references with their definitions), or definite assignment (requiring all local variables to be initialized before use), rejecting incorrect programs or issuing warnings. Semantic analysis usually requires a complete parse tree, meaning that this phase logically follows the parsing phase, and logically precedes the code generation phase, though it is often possible to fold multiple phases into one pass over the code in a compiler implementation.
[http://en.wikipedia.org/wiki/Compiler]

compiler'stage.ANALYSIS.SCANNERLESS

name::
* McsEngl.compiler'stage.ANALYSIS.SCANNERLESS@cptIt,
* McsEngl.lexerless-parsing@cptIt,
* McsEngl.scannerless-parsing@cptIt,

_DESCRIPTION:
In computer science, scannerless parsing (also called lexerless parsing) refers to the use of a single formalism to express both the lexical (word level syntax) and phrase level syntax used to parse a language: the lexical step and parsing step are combined.

This parsing strategy is suitable when a clear lexer–parser distinction is unneeded or unwanted. Examples of when this is appropriate include TeX, most wiki grammars, makefiles, simple per application control languages, and Perl 6.
[http://en.wikipedia.org/wiki/Scannerless_parsing]

compiler'stage.OPTIMIZATION

name::
* McsEngl.compiler'stage.OPTIMIZATION@cptIt,
* McsEngl.compiler'optimization-phase@cptIt401i,

_DESCRIPTION:
2. Optimization: the intermediate language representation is transformed into functionally equivalent but faster (or smaller) forms. Popular optimizations are inline expansion, dead code elimination, constant propagation, loop transformation, register allocation or even automatic parallelization.
[http://en.wikipedia.org/wiki/Compiler]

compiler'parser-generator#ql:parser-generator@cptIt#

name::
* McsEngl.compiler'parser-generator@cptIt,

compiler'OPERATION

name::
* McsEngl.compiler'OPERATION@cptIt,
* McsEngl.operation'of'compiler@cptIt401,

_DEFINITION:
A compiler is likely to perform many or all of the following operations:
lexical analysis,
preprocessing,
parsing,
semantic analysis,
code generation, and
code optimization.
[http://en.wikipedia.org/wiki/Compiler]

compiler'programing-language-compiling

name::
* McsEngl.compiler'programing-language-compiling@cptIt,

compiler'programing-language-written

name::
* McsEngl.compiler'programing-language-written@cptIt,

_DEFINITION:
The programing_language used to write the compiler.

_GENERIC:
* pgmlng#cptItsoft248#

_SPECIFIC:
Early compilers were written in assembly language.
The first self-hosting compiler — capable of compiling its own source code in a high-level language — was created for Lisp by Hart and Levin at MIT in 1962.[2] Since the 1970s it has become common practice to implement a compiler in the language it compiles, although both Pascal and C have been popular choices for implementation language. Building a self-hosting compiler is a bootstrapping problem -- the first such compiler for a language must be compiled either by a compiler written in a different language, or (as in Hart and Levin's Lisp compiler) compiled by running the compiler in an interpreter.
[http://en.wikipedia.org/wiki/Compiler]

compiler'resource

name::
* McsEngl.compiler'resource@cptIt,

_ADDRESS.WPG:
* https://github.com/jamiebuilds/the-super-tiny-compiler/blob/master/the-super-tiny-compiler.js,

SPECIFIC

name::
* McsEngl.compiler.specific@cptIt,

_SPECIFIC:
* https://github.com/thejameskyle/the-super-tiny-compiler, (javascript)

compiler.JIT

name::
* McsEngl.compiler.JIT@cptIt,
* McsEngl.compiler.Jit@cptIt,
* McsEngl.Jit-compiler@cptIt,

_DESCRIPTION:
work like an-interpreter, but optimize repeated code.

_ADDRESS.WPG:
* https://hacks.mozilla.org/2017/02/a-crash-course-in-just-in-time-jit-compilers/

lcptool.translator.compiler.BOTTOM-UP

name::
* McsEngl.lcptool.translator.compiler.BOTTOM-UP@cptIt,

lcptool.translator.compiler.NATIVE-CODE

name::
* McsEngl.lcptool.translator.compiler.NATIVE-CODE@cptIt,
* McsEngl.native'code'compiler@cptIt401,

_DEFINITION:
When a piece of computer hardware can interpret a programming language directly, that language is called machine code. A so-called native code compiler is one that compiles a program into machine code.
[http://en.wikipedia.org/wiki/Programming_language_implementation]

lcptool.translator.compiler.SELF-HOSTING

name::
* McsEngl.lcptool.translator.compiler.SELF-HOSTING@cptIt,
* McsEngl.self-hosting-compiler@cptIt401i,

_DESCRIPTION:
The first self-hosting compiler — capable of compiling its own source code in a high-level language — was created for Lisp by Hart and Levin at MIT in 1962.[2] Since the 1970s it has become common practice to implement a compiler in the language it compiles, although both Pascal and C have been popular choices for implementation language. Building a self-hosting compiler is a bootstrapping problem -- the first such compiler for a language must be compiled either by a compiler written in a different language, or (as in Hart and Levin's Lisp compiler) compiled by running the compiler in an interpreter.
[http://en.wikipedia.org/wiki/Compiler]

lcptool.translator.compiler.TOP-DOWN

name::
* McsEngl.lcptool.translator.compiler.TOP-DOWN@cptIt,

lcptool.translator.compiler.TRANSCOMPILER#ql:transcompiler@cptIt#

name::
* McsEngl.lcptool.translator.compiler.TRANSCOMPILER@cptIt,

lcptool.translator.REPL

_CREATED: {2013-12-18}

name::
* McsEngl.lcptool.translator.REPL@cptIt,
* McsEngl.read-eval-print-loop@cptIt,
* McsEngl.REPL@cptIt,

_DESCRIPTION:
A read–eval–print loop (REPL) is a simple, interactive computer programming environment. The term is most usually used to refer to a Lisp interactive environment, but can be applied to command line shells and similar environments for programming languages such as APL, BASIC, Clojure, F#, Factor, Haskell, J, Julia, Perl, PHP, Prolog, Python, R, Ruby, Scala, Smalltalk, Standard ML, Tcl, Javascript, et al. Synonyms include interactive toplevel and language shell.

In a REPL, the user enters one or more expressions (rather than an entire compilation unit), which are then evaluated, and the results displayed. The name read–eval–print loop comes from the names of the Lisp primitive functions which implement this functionality:

The read function accepts an expression from the user, and parses it into a data structure in memory. For instance, the user may enter the s-expression (+ 1 2 3), which is parsed into a linked list containing four data elements.
The eval function takes this internal data structure and evaluates it. In Lisp, evaluating an s-expression beginning with the name of a function means calling that function on the arguments that make up the rest of the expression. So the function + is called on the arguments 1 2 3, yielding the result 6.
The print function takes the result yielded by eval, and prints it out to the user. If it is a complex expression, it may be pretty-printed to make it easier to understand. In this example, though, the number 6 does not need much formatting to print.
REPLs facilitate exploratory programming and debugging because the read–eval–print loop is usually much faster than the classic edit-compile-run-debug cycle.
[http://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop]

repl'resource

name::
* McsEngl.repl'resource@cptIt,

_ADDRESS.WPG:
*

lcptool.TESTING

name::
* McsEngl.lcptool.TESTING@cptIt,

_DESCRIPTION:
* McsEngl.lcptool@cptIt,
* McsEngl.test_runner_tool_lcp@cptIt,
===
* test_runner_tool_cpt,
* testing_framework_cpt,
* testing.programing_cpt,

_DESCRIPTION:
Testing is an integral part of the software development process which helps improve the quality of the software. There are many types of testing involved like manual testing, integration testing, functional testing, load testing, unit testing, and other. In this article, we'll write our code following the rules of Test Driven Development (TDD).
[https://semaphoreci.com/community/tutorials/a-tdd-approach-to-building-a-todo-api-using-node-js-and-mongodb]

lcptest.END-TO-END

name::
* McsEngl.lcptest.END-TO-END@cptIt,
* McsEngl.end-to-end-testing@cptIt,

_DESCRIPTION:
Essentially, the test pyramid describes that you should write unit tests, integration tests and end-to-end tests as well. You should have more integration tests than end-to-end tests, and even more unit tests.
[https://blog.risingstack.com/node-hero-node-js-unit-testing-tutorial/]

lcptest.INTEGRATION

name::
* McsEngl.lcptest.INTEGRATION@cptIt,
* McsEngl.integration-test@cptIt,

_DESCRIPTION:
Integration Tests – demonstrate that different pieces of the system work together.
[https://www.teaching-materials.org/jasmine/#/2]
===
Integration tests focus on the interaction between software components. For web projects, this includes web browsers interacting with web services, though in this article we’ll simply focus on web services.
[https://medium.com/walmartlabs/use-easy-fix-to-run-integration-tests-like-unit-tests-834288ec446d#.794a94mob]

lcptest.UNIT

name::
* McsEngl.lcptest.UNIT@cptIt,
* McsEngl.unit-test@cptIt,

_DESCRIPTION:
Unit Tests verify that a relatively small piece of code is doing what it is intended to do.
They are narrow in scope and do not check outside systems.
[https://www.teaching-materials.org/jasmine/#/]
===
Unit tests are comparatively simple -- specific and granular, they narrowly target methods and functions in isolation
[https://medium.com/walmartlabs/use-easy-fix-to-run-integration-tests-like-unit-tests-834288ec446d#.794a94mob]

lcptest.QA

name::
* McsEngl.lcptest.QA@cptIt,
* McsEngl.qa-test@cptIt,

_DESCRIPTION:
QA Tests – product-oriented tests that focus on identifying "bugs" in software from the perspective of users. May be automated or manual.
[https://www.teaching-materials.org/jasmine/#/3]

lcptest.Regression-test

name::
* McsEngl.lcptest.Regression-test@cptIt,
* McsEngl.regression-test@cptIt,

_DESCRIPTION:
Regression Tests – product-oriented tests that make sure that new changes do not break mission-critical functionality that has already been built (logging in/out, checkout out).
[https://www.teaching-materials.org/jasmine/#/4]

lcp'User-interface

name::
* McsEngl.lcp'User-interface@cptIt,
* McsEngl.conceptIt248.3,
* McsEngl.lcpui@cptIt,
* McsEngl.language-user-interface@cptIt,
* McsEngl.user-interface.pgmlng@cptIt420,
====== lagoGreek:
* McsElln.ΔΙΕΠΑΦΗ-ΧΡΗΣΤΗ@cptIt,
* McsElln.ΠΕΡΙΒΑΛΛΟΝ-ΔΙΕΠΑΦΗΣ@cptIt,

=== _NOTES: ΔΙΕΠΑΦΗ ΧΡΗΣΤΗ:
* McsElln.Βακάλη κα@cptIt, Ανάπτυξη Εφαρμογών γ' λυκείου, 1999 α' έκδοση, 241
===
ΠΕΡΙΒΑΛΛΟΝ ΔΙΕΠΑΦΗΣ:
* McsElln.Αντωνάκος κα@cptIt, "Ανάπτυξη εφαρμογών..." Γ' Λυκείου, 1999 α' έκδοση

_SPECIFIC:
* program's-user_interface#cptIt420#
* webpage-ui##

lcp'ENVIRONMENT#cptCore756#

name::
* McsEngl.lcp'ENVIRONMENT@cptIt,

lcp'EVALUATION#cptCore546.107#

name::
* McsEngl.lcp'EVALUATION@cptIt,

lcp'ORGANIZATION#cptIt968#

name::
* McsEngl.lcp'ORGANIZATION@cptIt,

lcp'human

name::
* McsEngl.lcp'human@cptIt,

lcp'SCIENCE#cptCore406#

name::
* McsEngl.lcp'SCIENCE@cptIt,

_SCIENCE:
* theory-of-computation##
* programming-language-theory##

lcp'CHARACTERISTIC

name::
* McsEngl.lcp'CHARACTERISTIC@cptIt,

lcp'formal-language#cptCore1018#

name::
* McsEngl.lcp'formal-language@cptIt,

lcp'limitation

name::
* McsEngl.lcp'limitation@cptIt,

lcp'wrapper

name::
* McsEngl.lcp'wrapper@cptIt,
* McsEngl.pl'wrapper@cptIt,
* McsEngl.wrapper.programming@cptIt,

_DESCRIPTION:
In programming, a wrapper is a component which changes the interface of an existing component, in order to increase its compatibility with various other systems.

Because there are many types of databases, each with their own interface, a popular technique used in database programming is to create a wrapper which offers a common interface for database interaction. As an analogy, you can think of a database wrapper as an "interpreter" who knows all the different languages spoken by the different databases. So you can communicate to the "interpreter" in your own language, and it will take care of translating your request, obtain your result and translate it back in a language that you understand.
[http://www.phpobjectgenerator.com/php_code_generator/php_code_generator_wrapper.php]

lcp'doing

name::
* McsEngl.lcp'doing@cptIt,
* McsEngl.doing-of-language@cptIt,

lcp'doing.LEARNING

name::
* McsEngl.lcp'doing.LEARNING@cptIt,
* McsEngl.learning.pgmlng@cptIt,
* McsEngl.pgmlng'learning@cptIt,

lcp'doing.INTERNAL

name::
* McsEngl.lcp'doing.INTERNAL@cptIt,
* McsEngl.pgmlng'functing@cptIt,

_DEFINITION:
FUNCTIONS are the operations a language supporst. Don't confuse them with the procedures (function) a program has.

lcp'Error-handling

name::
* McsEngl.lcp'Error-handling@cptIt,

lcp'GARBAGE-COLLECTION

name::
* McsEngl.lcp'GARBAGE-COLLECTION@cptIt,
* McsEngl.garbage'collection@cptIt,
* McsEngl.automatic'memory'management@cptIt,

Manual memory management requires developers to manage the allocation and de-allocation of blocks of memory. Manual memory management is both time-consuming and difficult. In C#, automatic memory management is provided so that developers are freed from this burdensome task. In the vast majority of cases, automatic memory management increases code quality and enhances developer productivity without negatively impacting either expressiveness or performance.
[C# specification]

lcp'Inheritance

name::
* McsEngl.lcp'Inheritance@cptIt,

Multiple inheritance refers to a feature of some object-oriented programming languages in which a class can inherit behaviors and features from more than one superclass. This contrasts with single inheritance, where a class may inherit from only one superclass.
Languages that mostly support multiple inheritance are: Eiffel, C++, Python, Perl, and CLOS (LISP).
[http://en.wikipedia.org/wiki/Multiple_inheritance]

_ADDRESS.WPG:
* http://www.crockford.com/javascript/inheritance.html
Classical Inheritance in JavaScript
Douglas Crockford

lcp'doing.INSTALLING

_CREATED: {2013-12-22}

name::
* McsEngl.lcp'doing.INSTALLING@cptIt,
* McsEngl.pgmlng'installing@cptIt,

_DESCRIPTION:
The process of installing the needed programs to run the programs written in a programing-language.
[hmnSngo.2013-12-22]

lcp'doing.PROGRAMING-LIFE-CYCLE (pgmn)

_CREATED: {1999-10-29}

name::
* McsEngl.lcp'doing.PROGRAMING-LIFE-CYCLE (pgmn)@cptIt,
* McsEngl.pgmn@cptIt, {2016-11-17}
* McsEngl.programing@cptIt,

* McsEngl.software-engineering@cptIt, {2007-12-28}
* McsEngl.computer-programing@cptIt,
* McsEngl.pgmlng'programming-life-cycle@cptIt,
* McsEngl.program-development@cptIt,
* McsEngl.programming@cptIt533,
* McsEngl.programing@cptIt533,
* McsEngl.software-development-process@cptIt,
* McsEngl.software-engineering@cptIt,
* McsEngl.pgmng@cptIt,
* McsEngl.prgng@cptIt, {2013-03-25}
====== lagoGreek:
* McsElln.ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ@cptIt533,
* McsElln.ΤΕΧΝΟΛΟΓΙΑ-ΛΟΓΙΣΜΙΚΟΥ@cptIt,

=== _NOTES: Ο όρος 'τεχνολογία λογισμικού' (software engineering) εμφανίστηκε για πρώτη φορά σε ένα συνέδριο που διοργάνωσε η επιστημονική επιτροπή του ΝΑΤΟ το 1968.
[Αντωνάκος κα, "Ανάπτυξη εφαρμογών..." Γ' Λυκείου, 1999 α' έκδοση, 294]

_WHOLE:
* program-life-cycle#ql:cmrpgm'doing.evoluting#

_DEFINITION:
Computer programming (often shortened to programming) is a process that leads from an original formulation of a computing problem to executable programs. It involves activities such as analysis, understanding, and generically solving such problems resulting in an algorithm, verification of requirements of the algorithm including its correctness and its resource consumption, implementation (or coding) of the algorithm in a target programming language, testing, debugging, and maintaining the source code, implementation of the build system and management of derived artefacts such as machine code of computer programs. The algorithm is often only represented in human-parseable form and reasoned about using logic. Source code is written in one or more programming languages (such as C++, C#, Java, Python, Smalltalk, JavaScript, etc.). The purpose of programming is to find a sequence of instructions that will automate performing a specific task or solve a given problem. The process of programming thus often requires expertise in many different subjects, including knowledge of the application domain, specialized algorithms and formal logic.

Within software engineering, programming (the implementation) is regarded as one phase in a software development process.

There is an on-going debate on the extent to which the writing of programs is an art form, a craft, or an engineering discipline.[1] In general, good programming is considered to be the measured application of all three, with the goal of producing an efficient and evolvable software solution (the criteria for "efficient" and "evolvable" vary considerably). The discipline differs from many other technical professions in that programmers, in general, do not need to be licensed or pass any standardized (or governmentally regulated) certification tests in order to call themselves "programmers" or even "software engineers." Because the discipline covers many areas, which may or may not include critical applications, it is debatable whether licensing is required for the profession as a whole. In most cases, the discipline is self-governed by the entities which require the programming, and sometimes very strict environments are defined (e.g. United States Air Force use of AdaCore and security clearance). However, representing oneself as a "professional software engineer" without a license from an accredited institution is illegal in many parts of the world.

Another on-going debate is the extent to which the programming language used in writing computer programs affects the form that the final program takes.[citation needed] This debate is analogous to that surrounding the Sapir–Whorf hypothesis[2] in linguistics and cognitive science, which postulates that a particular spoken language's nature influences the habitual thought of its speakers. Different language patterns yield different patterns of thought. This idea challenges the possibility of representing the world perfectly with language, because it acknowledges that the mechanisms of any language condition the thoughts of its speaker community.
[http://en.wikipedia.org/wiki/Programing]
===
Software engineering (SE) is the application of a systematic, disciplined, quantifiable approach to the
- development,
- operation, and
- maintenance of software.[1]
1) IEEE Standard Glossary of Software Engineering Terminology,” IEEE std 610.12-1990, 1990.
[http://en.wikipedia.org/wiki/Software_engineering]
===
(COMPUTER) PROGRAMMING is the WORK of writting a computer-program#cptIt59.1#.
[1999oct29]
===
ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ είναι ο κλάδος εκείνος της επιστήμης της πληροφορικής που ασχολείται με την εφαρμογή μεθόδων, εργαλείων και διαδικασιών για την επίτευξη καθορισμένων απαιτήσεων ενός συστήματος λογισμικού.
[Αντωνάκος κα, "Ανάπτυξη εφαρμογών..." Γ' Λυκείου, 1999 α' έκδοση, 294]

pgmn'difficulty

name::
* McsEngl.pgmn'difficulty@cptIt,

_DESCRIPTION:
Programming is difficult. At its core, it is about managing complexity. Computer programs are the most complex things that humans make. Quality is a illusive and elusive.
[http://javascript.crockford.com/style1.html]

pgmn'EVOLUTING#cptCore546.171#

name::
* McsEngl.pgmn'EVOLUTING@cptIt,

_DESCRIPTION:
Requirements
Specification
Architecture
Construction
Design
Testing
Debugging
Deployment
Maintenance
[http://en.wikipedia.org/wiki/Software_development_process]
===
Ο "κύκλος ζωής λογισμικού" (software life cycle) περιλαμβάνει όλες τις ΦΑΣΕΙΣ από τις οποίες διέρχεται ένα πρόγραμμα από την ώρα της σύλληψής του ως ιδέα, έως τη στιγμή που το πρόγραμμα θα πάψει πλέον να χρησιμοποιείται.
Ανάλυση απαιτήσεων
Λογικός σχεδιασμός
Φυσικός σχεδιασμός
Ανάπτυξη προγραμμάτων
Λειτουργία - συντήρηση
[Αντωνάκος κα, "Ανάπτυξη εφαρμογών..." Γ' Λυκείου, 1999 α' έκδοση, 295]

pgmn'evoluting.PLANNING

name::
* McsEngl.pgmn'evoluting.PLANNING@cptIt,
* McsEngl.programing'planning@cptIt,

_DESCRIPTION:
Planning[edit]
Planning is an objective of each and every activity, where we want to discover things that belong to the project. An important task in creating a software program is extracting the requirements or requirements analysis.[1] Customers typically have an abstract idea of what they want as an end result, but do not know what software should do. Skilled and experienced software engineers recognize incomplete, ambiguous, or even contradictory requirements at this point. Frequently demonstrating live code may help reduce the risk that the requirements are incorrect.

Once the general requirements are gathered from the client, an analysis of the scope of the development should be determined and clearly stated. This is often called a scope document.

Certain functionality may be out of scope of the project as a function of cost or as a result of unclear requirements at the start of development. If the development is done externally, this document can be considered a legal document so that if there are ever disputes, any ambiguity of what was promised to the client can be clarified.
[http://en.wikipedia.org/wiki/Software_development_process]
At some stage in the process of developing any program you must analyse what "things" your program has to represent. These things might be shapes, people, employees, accounts etc., If you're a good programmer you will tackle this analysis phase early. Many people write bad software because they try to avoid doing any thorough analysis and try to jump straight to the coding stage. This trap often catches many first time programmers so if you are new to programming you should take heed of this warning.
[Javelin, 1997]

pgmn'evoluting.REQUIREMENTS-ANALYSIS

name::
* McsEngl.pgmn'evoluting.REQUIREMENTS-ANALYSIS@cptIt,
* McsEngl.pgm'analytic-phase@cptIt,
* McsEngl.programing'analytic-phase@cptIt,
* McsEngl.pgm'analytic-phase@cptIt,
* McsEngl.programing'analytic-phase@cptIt,
====== lagoGreek:
* McsElln.ανάλυση-απαιτήσεων@cptIt,

_DESCRIPTION:
Requirements analysis in systems engineering and software engineering, encompasses those tasks that go into determining the needs or conditions to meet for a new or altered product, taking account of the possibly conflicting requirements of the various stakeholders, analyzing, documenting, validating and managing software or system requirements.[2]

Requirements analysis is critical to the success of a systems or software project.[3] The requirements should be documented, actionable, measurable, testable, traceable, related to identified business needs or opportunities, and defined to a level of detail sufficient for system design.
[http://en.wikipedia.org/wiki/Requirements_analysis]

pgmn'evoluting.FUNCTIONAL-SPECIFICATION

name::
* McsEngl.pgmn'evoluting.FUNCTIONAL-SPECIFICATION@cptIt,
* McsEngl.functional-specification@cptIt,
* McsEngl.programing'functional-specification@cptIt,

_DESCRIPTION:
A functional specification (also, functional spec, specs, functional specifications document (FSD), functional requirements specification, or Program specification) in systems engineering and software development is the documentation that describes the requested behavior of an engineering system. The documentation typically describes what is needed by the system user as well as requested properties of inputs and outputs (e.g. of the software system). A functional specification is the more technical response onto a matching requirements document, e.g. the Product Requirement Document "PRD". Thus it picks up the results of the requirements analysis stage. On more complex systems multiple levels of functional specifications will typically nest to each other, e.g. on the system level, on the module level and on the level of technical details.
[http://en.wikipedia.org/wiki/Functional_specification]

pgmn'evoluting.IMPLEMENTING

name::
* McsEngl.pgmn'evoluting.IMPLEMENTING@cptIt,
* McsEngl.pgmlng'program-creating@cptIt,
* McsEngl.pgmng.creating@cptIt,
* McsEngl.programing'implementing@cptIt,

_DESCRIPTION:
Software construction is a software engineering discipline. It is the detailed creation of working, meaningful software through a combination of coding, verification, unit testing, integration testing, and debugging. It is linked to all the other software engineering disciplines, most strongly to software design and software testing.[1]
[http://en.wikipedia.org/wiki/Software_construction]

pgmn'SOFTWARE-ARCHITECTURE

name::
* McsEngl.pgmn'SOFTWARE-ARCHITECTURE@cptIt,
* McsEngl.software-architecture@cptIt,
* McsEngl.programing'software-architecture@cptIt,

_DESCRIPTION:
The word software architecture intuitively denotes the high level structures of a software system. It can be defined as the set of structures needed to reason about the software system, which comprise the software elements, the relations between them, and the properties of both elements and relations.[1]

The term software architecture also denotes the set of practices used to select, define or design a software architecture.

Finally, the term often denotes the documentation of a system's "software architecture". Documenting software architecture facilitates communication between stakeholders, captures early decisions about the high-level design, and allows reuse of design components between projects.[2]
[http://en.wikipedia.org/wiki/Software_architecture]

pgmn'DESIGN

name::
* McsEngl.pgmn'DESIGN@cptIt,
* McsEngl.coding-of-program@cptIt,
* McsEngl.programing'coding@cptIt,

_DESCRIPTION:
Software design is the process by which an agent creates a specification of a software artifact, intended to accomplish goals, using a set of primitive components and subject to constraints.[1] Software design may refer to either "all the activities involved in conceptualizing, framing, implementing, commissioning, and ultimately modifying complex systems" or "the activity following requirements specification and before programming, as ... [in] a stylized software engineering process."[2]

Software design usually involves problem solving and planning a software solution. This includes both low-level component and algorithm design and high-level, architecture design.
[http://en.wikipedia.org/wiki/Software_design]

pgmn'CODING

name::
* McsEngl.pgmn'CODING@cptIt,
* McsEngl.coding-of-program@cptIt,
* McsEngl.programing'coding@cptIt,

pgmn'COMPILE-TIME

name::
* McsEngl.pgmn'COMPILE-TIME@cptIt,
* McsEngl.compile-time-of-program@cptIt,
* McsEngl.programing'compile-time@cptIt,

pgmn'LINK-TIME

name::
* McsEngl.pgmn'LINK-TIME@cptIt,
* McsEngl.link-time-of-program@cptIt,
* McsEngl.programing'link-time@cptIt,

_DESCRIPTION:
In computer science, link time refers to either the operations performed by a linker (i.e. link time operations) or programming language requirements that must be met by compiled source code for it to be successfully linked (i.e. link time requirements).

The operations performed at link time usually include fixing up the addresses of externally referenced objects and functions, various kinds of cross module checks (e.g. type checks on externally visible identifiers and in some languages instantiation of template). Some optimizing compilers delay code generation until link time because it is here that information about a complete program is available to them.

The definition of a programming language may specify link time requirements that source code must meet to be successfully compiled (e.g. the maximum number of characters in an externally visible identifier that must be considered significant).

Link time occurs after compile time and before runtime (when a program is executed). In some programming languages it may be necessary for some compilation and linking to occur at runtime. Resolving external variables in a program is done at link time.
[http://en.wikipedia.org/wiki/Link_time]

pgmn'DOCUMENTING

name::
* McsEngl.pgmn'DOCUMENTING@cptIt,
* McsEngl.documenting-of-program@cptIt,
* McsEngl.programing'documenting@cptIt,

_DESCRIPTION:
Documenting the internal design of software for the purpose of future maintenance and enhancement is done throughout development. This may also include the writing of an API, be it external or internal. The software engineering process chosen by the developing team will determine how much internal documentation (if any) is necessary. Plan-driven models (e.g., Waterfall) generally produce more documentation than Agile models.
[http://en.wikipedia.org/wiki/Software_development_process]

pgmn'evoluting.DEBUGGING

name::
* McsEngl.pgmn'evoluting.DEBUGGING@cptIt,
* McsEngl.debugging@cptIt,
* McsEngl.programing.debugging@cptIt,

pgmn'evoluting.TESTING

name::
* McsEngl.pgmn'evoluting.TESTING@cptIt,
* McsEngl.pgmn'testing@cptIt,
* McsEngl.programing'testing@cptIt,
* McsEngl.software-testing@cptIt,
* McsEngl.testing.program@cptIt,

* McsEngl.cmrpgm'doing.TESTING@cptIt,
* McsEngl.pgm'Testing@cptIt,
* McsEngl.programing'testing@cptIt,
* McsEngl.testing.programing@cptIt,
* McsEngl.pgmtst@cptIt,
* McsEngl.software-testing@cptIt,

_DESCRIPTION:
What is Software Testing?
Software testing is the process of evaluation a software item to detect differences between given input and expected output. Testing assesses the quality of the product. Software testing is a process that should be done during the development process. In other words software testing is a verification and validation process.
[https://github.com/dwyl/learn-tdd#what-is-software-testing]
===
When a new product is released for testing to a company's own employees before exposing it outside the company, the product is said to be under alpha testing.
Beta testing then is the pre-testing of hardware or software products with selected typical customers to discover inadequate features or possible product enhancements before it is released to the general public.
[SOURCE: PC-GLOSSARY 1993]

pgmtstn'Tool#ql:lcptool.testing#

name::
* McsEngl.pgmtstn'Tool@cptIt,

SPECIFIC

_SPECIFIC:
* acceptance-testing##
* alpha-testing##
* beta-testing##
* manual-testing##
* unit-testing##

pgmtstn.TDD#ql:test-driving-development-cpt#

name::
* McsEngl.pgmtstn.TDD@cptIt,

pgmtstn.UNIT-TESTING

name::
* McsEngl.pgmtstn.UNIT-TESTING@cptIt,
* McsEngl.unit-testing@cptIt,

_DESCRIPTION:
Unit tests typically make up the majority of test suites. They test small units of code, typically a method or a function, in isolation. The key thing to remember is the in isolation aspect.
[https://www.codementor.io/nodejs/tutorial/unit-testing-nodejs-tdd-mocha-sinon]

_SPECIFIC:
* javascript-unit-testing#linkL#

pgmn'evoluting.DEPLOYING#ql:cmrpgm'doing.installation#

name::
* McsEngl.pgmn'evoluting.DEPLOYING@cptIt,

pgmn'evoluting.IMPROVING

name::
* McsEngl.pgmn'evoluting.IMPROVING@cptIt,
* McsEngl.pgm'improving@cptIt,
* McsEngl.programing'improving@cptIt,
* McsEngl.pgmng'evoluting.UPDATING@cptIt,
* McsEngl.pgm'updating@cptIt,
* McsEngl.pgm'upgrading@cptIt,
* McsEngl.pgmCmr'updating@cptIt,
* McsEngl.pgmCmr'upgrading@cptIt,

_DESCRIPTION:
New features are added in the program.
[hmnSngo.2013-07-31]
===
Bug fixes of the program.
[hmnSngo.2015-05-11]

SPECIFIC

_SPECIFIC:
* bugfix release
* feature release
* major release
* majorNo release

pgmn'evoluting.MAINTAINING

name::
* McsEngl.pgmn'evoluting.MAINTAINING@cptIt,
* McsEngl.pgm'maintaining@cptIt,
* McsEngl.pgm'supporting@cptIt,
* McsEngl.programing'maintaining@cptIt,

_DESCRIPTION:
It is the stage of supporting the program to be in a working state, with bug fixes for example or updating to work in a new environment, but NOT adding major new features.
[hmnSngo.2013-07-31]

cmrpgm'Maintenability

name::
* McsEngl.cmrpgm'Maintenability@cptIt,

pgmn'resource

name::
* McsEngl.pgmn'resource@cptIt,

_ADDRESS.WPG:
* http://www.alan-g.me.uk/tutor/tutcont.htm,

pgmn'style

name::
* McsEngl.pgmn'style@cptIt,

_NAME;
* McsEngl.coding-style@cptIt,
* McsEngl.programing'style@cptIt,
* McsEngl.programing-style@cptIt,

_DESCRIPTION:
The rules used to code.
[hmnSngo.2015-04-09]

_SPECIFIC:
* JavaScript#ql:js'coding_style#

SPECIFIC

_NAME;
* McsEngl.pgmn.specific@cptIt,
* McsEngl.pgmng.specific@cptIt,
* McsEngl.programing.specific@cptIt,

pgmn.METHODOLOGY

name::
* McsEngl.pgmn.METHODOLOGY@cptIt,
* McsEngl.program-development-methodology@cptIt,

_DESCRIPTION:
A software development methodology or system development methodology in software engineering is a framework that is used to structure, plan, and control the process of developing an information system. Common methodologies include
- waterfall,
- prototyping,
- iterative and incremental development,
- spiral development,
- rapid application development, and
- extreme programming. A methodology can also include aspects of the development environment (i.e. IDEs),
- model-based development,
- computer aided software development, and the
- utilization of particular frameworks (i.e. programming libraries or other tools).
[http://en.wikipedia.org/wiki/Software_development_methodology]

_SPECIFIC:
Methodologies
* Waterfall
* Prototype model
* Incremental
* Iterative
* V-Model
* Spiral
* Scrum
* Cleanroom
* RAD
* DSDM
* RUP
* XP
* Agile
* Lean
* Dual Vee Model
* TDD
* FDD
* DDD
[http://en.wikipedia.org/wiki/Software_development_methodology]

pgmn.PARADIGM

name::
* McsEngl.pgmn.PARADIGM@cptIt,
* McsEngl.programming-paradigm@cptIt,
* McsEngl.style-of-programming@cptIt,

_DESCRIPTION:
A programming paradigm is a fundamental style of programming regarding how solutions to problems are to be formulated in a programming language. (Compare with a methodology, which is a style of solving specific software engineering problems).
...
For instance, in object-oriented programming, programmers can think of a program as a collection of interacting objects, while in functional programming a program can be thought of as a sequence of stateless function evaluations. When programming computers or systems with many processors, process oriented programming allows programmers to think about applications as sets of processes acting upon logically shared data structures.
[http://en.wikipedia.org/wiki/Programming_paradigm]
===
A programming paradigm is a fundamental style of computer programming. (Compare with a methodology, which is a style of solving specific software engineering problems.) Paradigms differ in the concepts and abstractions used to represent the elements of a program (such as objects, functions, variables, constraints, etc.) and the steps that compose a computation (assignment, evaluation, continuations, data flows, etc.).
[http://en.wikipedia.org/wiki/Programming_paradigm]

_SPECIFIC:
Programming paradigms
Agent-oriented
Automata-based
Component-based
Flow-based
Pipelined
Concatenative
Concurrent computing
Relativistic programming
Data-driven
Declarative (contrast: Imperative)
Constraint
Functional
Dataflow
Cell-oriented (spreadsheets)
Reactive
Logic
Abductive logic
Answer set
Constraint logic
Functional logic
Inductive logic
Uncertain inference
Markov logic
Probabilistic logic
Event-driven
Service-oriented
Time-driven
Expression-oriented
Feature-oriented
Function-level (contrast: Value-level)
Generic
Imperative (contrast: Declarative)
Procedural
Language-oriented
Discipline-specific
Domain-specific
Grammar-oriented
Dialecting
Intentional
Metaprogramming
Automatic
Reflective
Attribute-oriented
Template
Policy-based
Non-structured (contrast: Structured)
Array (contrast: Scalar)
Iterative
Nondeterministic
Parallel computing
Process-oriented
Programming in the large/small
Semantic
Structured (contrast: Non-structured)
Modular (contrast: Monolithic)
Object-oriented
By separation of concerns:
Aspect-oriented
Role-oriented
Subject-oriented
Class-based
Prototype-based
Recursive
Value-level (contrast: Function-level)
[http://en.wikipedia.org/wiki/Programming_paradigm]

pgmn.AGILE-METHOD

name::
* McsEngl.pgmn.AGILE-METHOD@cptIt,

Agile software development is a group of software development methods based on iterative and incremental development, where requirements and solutions evolve through collaboration between self-organizing, cross-functional teams. It promotes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen interactions throughout the development cycle. The Agile Manifesto[1] introduced the term in 2001.
[http://en.wikipedia.org/wiki/Agile_software_development]

pgmn.CONCEPT

_CREATED: {2013-03-25}

name::
* McsEngl.pgmn.CONCEPT@cptIt,
* McsEngl.concept-programming,
* McsEngl.concept-programming,

_DESCRIPTION:
Concept programming is a language design philosophy that focuses on how we translate concepts in our head into physical artifacts such as programming language code. Concept programming attempts to make this task as simple and error-free as possible, which has a huge impact on language design.

Concept programming defines a number of pseudo-metrics:
Syntactic noise is the difference in appearance between code and concept For example, a semi-colon in C is syntactic noise, because it has no equivalent in the real world.
Semantic noise is the difference in behavior between code and concept. For example, an integer overflow is semantic noise, because it shows a divergence between the code int and the associated integer concept.
Bandwidth is the size of the concept domain that is covered by a given code construct. For example, a generic min function has a larger bandwidth than a function taking only int arguments.
Signal/noise ratio is the fraction of the code dedicated to expressing concepts, as opposed to expressing code-only concerns. For example, indiscriminate use of getters and setters tend to decrease the signal/noise ratio, as they add no functionality to the program. (Note: They are useful only for languages that break encapsulation because their syntax reveals the implementation, e.g. when method access and data member access use a different syntax.).
[http://xlr.sourceforge.net/node/22]

pgmn.EXTREEM-PROGRAMMING

name::
* McsEngl.pgmn.EXTREEM-PROGRAMMING@cptIt,
* McsEngl.extreme-programming@cptIt,

_DESCRIPTION:
Extreme Programming (XP) is a software development methodology which is intended to improve software quality and responsiveness to changing customer requirements. As a type of agile software development,[1][2][3] it advocates frequent "releases" in short development cycles, which is intended to improve productivity and introduce checkpoints at which new customer requirements can be adopted.

Other elements of Extreme Programming include: programming in pairs or doing extensive code review, unit testing of all code, avoiding programming of features until they are actually needed, a flat management structure, simplicity and clarity in code, expecting changes in the customer's requirements as time passes and the problem is better understood, and frequent communication with the customer and among programmers.[2][3][4] The methodology takes its name from the idea that the beneficial elements of traditional software engineering practices are taken to "extreme" levels. As an example, code reviews are considered a beneficial practice; taken to the extreme, code can be reviewed continuously, i.e. the practice of pair programming.

Critics have noted several potential drawbacks,[5] including problems with unstable requirements, no documented compromises of user conflicts, and a lack of an overall design specification or document.
[http://en.wikipedia.org/wiki/Extreme_Programming]

pgmn.MODEL-DRIVEN

_CREATED: {2014-02-02}

name::
* McsEngl.pgmn.MODEL-DRIVEN@cptIt,

_DESCRIPTION:
Model-driven engineering (MDE) is a software development methodology which focuses on creating and exploiting domain models (that is, abstract representations of the knowledge and activities that govern a particular application domain), rather than on the computing (f.e. algorithmic) concepts.
[http://en.wikipedia.org/wiki/Model-driven_development]

pgmn.MODULAR

name::
* McsEngl.pgmn.MODULAR@cptIt,
* McsEngl.modular-programming@cptIt,

_DESCRIPTION:
Modular programming is a software design technique that emphasizes separating the functionality of a program into independent, interchangeable modules, such that each contains everything necessary to execute only one aspect of the desired functionality.[1] Conceptually, modules represent a separation of concerns, and improve maintainability by enforcing logical boundaries between components. Modules are typically incorporated into the program through interfaces.[2] A module interface expresses the elements that are provided and required by the module. The elements defined in the interface are detectable by other modules. The implementation contains the working code that corresponds to the elements declared in the interface.
...
Traditional programming languages have been used to support modular programming since at least the 1960s. Modular programming is a loosely defined concept with no official definition. It is, in essence, simply a programming technique[dubious – discuss]. Exactly where "modularized" programming ends, and dynamically linked libraries or object-oriented programming starts in this context is subjective. It might be defined as the natural predecessor of OOP, or an evolutionary step beyond it, depending upon viewpoint.[citation needed][clarification needed]
[http://en.wikipedia.org/wiki/Modular_programming]

pgmn.OOP

name::
* McsEngl.pgmn.OOP@cptIt,
* McsEngl.oop@cptIt,

_DESCRIPTION:
Object-oriented programming is a style of coding that allows developers to group similar tasks into classes. This helps keep code following the tenet “don’t repeat yourself” (DRY) and easy-to-maintain.
One of the major benefits of DRY programming is that, if a piece of information changes in your program, usually only one change is required to update the code. One of the biggest nightmares for developers is maintaining code where data is declared over and over again, meaning any changes to the program become an infinitely more frustrating game of Where’s Waldo? as they hunt for duplicated data and functionality.
OOP is intimidating to a lot of developers because it introduces new syntax and, at a glance, appears to be far more complex than simple procedural, or inline, code. However, upon closer inspection, OOP is actually a very straightforward and ultimately simpler approach to programming.
[http://net.tutsplus.com/tutorials/php/object-oriented-php-for-beginners/]

_ATTRIBUTE:
* ool#ql:ool'api#

pgmn.PAIR

name::
* McsEngl.pgmn.PAIR@cptIt,
* McsEngl.pair-programming@cptIt,

[Wikitech-l] want to pair program more often?
Sumana Harihareswara <sumanah@wikimedia.org> Unsubscribe
2014-09-15 4:24 PM (5 minutes ago)

to Wikimedia
You should probably pair program more often. Here's why.

1) learning

Every single time I've pair programmed with someone, one of us has learned
stuff. About our tools, about a new way to look at a problem, about a
language feature, or something. Sometimes I've paired explicitly as a
teaching or learning technique, sometimes on more equal footing ("I'm the
domain expert for the problem but you're better at $framework than I am"),
or just to brainstorm or troubleshoot. At least one of us always comes out
smarter.

2) the tools are better than ever

https://lists.wikimedia.org/pipermail/teampractices/2014-July/thread.html
has some resources; don't dismiss pair programming just because you don't
live near other programmers.

3) pairing makes better code

"Pair Programming" by Laurie Williams (Ch. 17 in _Making Software: What
Really Works, and Why We Believe It_, ed. Andy Oram & Greg Wilson, O'Reilly
2011) reviews recent studies and finds that pair programming leads to
higher-quality code, and "reduced product risk due to improved knowledge
management". Some teams even tried pair programming as a replacement for
code review.

4) it's more egalitarian

As this list of status play behaviors points out
https://web.archive.org/web/20070216200742/http://greenlightwiki.com/improv/Status
, judging someone else's work -- even favorably! -- is a move that raises
your status and lowers theirs. This is one reason I have encouraged
EVERYONE who writes MediaWiki code to try their hand at code review, so
everyone can take turns -- everyone can be a teacher and critic.[0] If you
have found that code review feels adversarial or hierarchical, try
switching it up by asking to pair with a more experienced programmer,
getting your code review while you work together.

People who want to pair program more often on Wikimedia-related code: want
to use this thread to raise your hand? If people like the idea, we could
start doing something like http://www.pairprogramwith.me/ or
http://pear.growstuff.org/ to connect people up.


Sumana Harihareswara
Senior Technical Writer
Wikimedia Foundation

?[0] By the way, this great blog post
http://www.wordyard.com/2014/08/10/doing-is-knowing-sweet-jane-and-the-web/
makes a very strong point about how trying out an activity - like writing,
music, or coding? - gives you more expertise, empathy, and ability to
define yourself, and to judge the work of other people who do that
activity. I would argue this applies to code review as well.
_______________________________________________
Wikitech-l mailing list
Wikitech-l@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/wikitech-l

pgmn.POLITICS

name::
* McsEngl.pgmn.POLITICS@cptIt,

NCZOnline Newsletter - The Politics of Software
NCZOnline newsletter@nczonline.net via mail117.atl31.mcdlv.net
November 08, 2016
From nczonline.net, with love.
Hi everyone,
Today is election day in the United States, and while I can generally assure you that everyone is exhausted by the nearly two-year campaign, it's a good reminder that politics exist in every aspect of life, including software. And just as in governmental politics, the politics of software tend to fall into two camps: those who want to change things and those who want to keep things the same.

Those who want to changes things are those who are constantly proposing rewriting from scratch, evaluating new tools and frameworks, and pushing for to use different technologies. These developers favor learning and rely on the excitement and interest to keep them motivated at work. They are willing to take on more risk, especially when they perceive a big payoff for being right (and tend to downplay the negative effects if they are wrong). While most young and inexperienced developers fall into this category, age and experience are not the primary drivers -- it's much more about personality.

On the other side, you have those who want to keep things the same. These developers favor stability and predictibility so that they won't feel stressed in their day-to-day working lives. They are less willing to take risks when they know an approach that already works, and as such, are more likely to make incremental progress rather than large changes. While you find this approach more frequently in older, more experienced developers, it can also be found in younger, less experienced developers.

So which side is right? As with governmental politics, it's a mixture of both. If things are constantly changing, people feel unsettled and get burned out quickly; if things aren't changing, people grow frustrated at a lack of progress on solving everyday problems and inability to take advantage of new and emerging techniques and technologies. Every software development team (and other types of teams, as well) need a good mix of both personality types to succeed. It's the back and forth of debating of advantages and disadvantages of approaches that leads to a higher quality of solution.

Be well.

-N

pgmn.REWRITING

name::
* McsEngl.pgmn.REWRITING@cptIt,
* McsEngl.program.rewriting@cptIt,

NCZOnline Newsletter - Avoiding Rewrites
NCZOnline newsletter@nczonline.net via mail115.suw13.rsgsv.net
2015-09-01 7:01 PM (2 hours ago)
From nczonline.net, with love.
Hi everyone,

If you weren't around during the Netscape era of the Internet, then you probably don't know the whole story about how Internet Explorer became dominant. Many will point that it was anti-competitive practices, and that undoubtedly had something to do with it, but a missing part of the story is that Netscape had decided to completely rewrite their browser from scratch. That effort took far longer than anticipated and during that time Internet Explorer cemented its position in the market.

Joel Spolsky famous referred to this as the single worst mistake than any software company can make, and it's true. Rewriting from scratch cost Netscape everything, and it can do the same for you if you're not careful. Thankfully, in many places, incrementalism has gained a strong foothold and there are many well-read leaders who can quickly point out the Netscape failing as a reason not to do a big rewrite.

Unfortunately, this conversation still happens far too frequently in software, and especially in web development as the pace of technology makes people frantic. It's always tempting to think, "if I could just not deal with this legacy code, I could rewrite this in half the time!" This sentiment usually comes from the less experienced engineers who believe rewriting in the latest and greatest thing will yield significant gains over the crusty legacy code they are dealing with.

Do not fall into this trap. If the only solution to a problem is to rewrite it from scratch, you probably haven't looked close enough at the problem or the solution. Any plan that requires everything to be rewritten before it can be successful is already a failure.

I personally evaluate senior engineers on their ability to avoid rewriting things to make improvements. These are the engineers that will make the project successful. Evolution, not revolution, allows you to make progress without sacrificing what already works. Carve out a small piece, improve it, then move on to the next. Your company, your project, and your team will thank you.

Be well.

-N

pgmn.SPIRAL-MODEL

name::
* McsEngl.pgmn.SPIRAL-MODEL@cptIt,
* McsEngl.spiral-model-programming@cptIt,

_DESCRIPTION:
The spiral model is a software development process combining elements of both design and prototyping-in-stages, in an effort to combine advantages of top-down and bottom-up concepts. Also known as the spiral lifecycle model (or spiral development), it is a systems development method (SDM) used in information technology (IT). This model of development combines the features of the prototyping and the waterfall model. The spiral model is intended for large, expensive and complicated projects.
This should not be confused with the Helical model of modern systems architecture that uses a dynamic programming approach in order to optimise the system's architecture before design decisions are made by coders that would cause problems.
[http://en.wikipedia.org/wiki/Spiral_model]

pgmn.TDD (Test-Driven-Development)

name::
* McsEngl.pgmn.TDD (Test-Driven-Development)@cptIt,
* McsEngl.tdd@cptIt,
* McsEngl.test-driving-development@cptIt,

_DESCRIPTION:
Test-driven Development (TDD) is an approach to programming.
1. Write an automated (failing) test. This test will describe the desired behavior
2. Write a small amount of code that will make the test pass
3. Repeat
...
TDD recommends tests first before any code.
But it's good to remember the reason: maintainable, understandable, reliable code.
The most important thing is that you write tests – regardless of whether you choose to do so before, during, or after coding.
[https://www.teaching-materials.org/jasmine/#/12]
===
TDD is the practice of writing tests before an implementation to drive the design of your code. TDD is practiced in the following steps:
Write a test and watch it fail
Write the minimal amount of code to make that test pass
Repeat
[https://www.codementor.io/nodejs/tutorial/unit-testing-nodejs-tdd-mocha-sinon]
===
Test-driven development (TDD) is an evolutionary approach to development which combines test-first development where you write a test before you write just enough production code to fulfill that test and refactoring. In other words, it’s one way to think through your requirements or design before your write your functional code.
[https://github.com/dwyl/learn-tdd#what-is-tdd]
===
Project(s) without tests often end up looking like they are stuck together with duct tape ...
Change one part and the other stops working? "Fixing" one bug, creates another?
Wouldn't you prefer if everything was consistent and beautifully integrated?
What if everyone on your team worked like clock-work in a disciplined order... like a Formula 1 Crew ...
Test Driven Development (TDD) makes your team a well-oiled machine which means you can go faster.
Once you have a suite of tests that run on every change, you will begin to develop a whole other level of confidence in your codebase and will discover a new freedom to be creative without fear of "breaking" anything else; truly game-changing.
[https://github.com/dwyl/learn-tdd]
===
Test-driven development (TDD) , as many of you might know, is one of the main, agile development techniques. The genius of TDD lies in increased quality of code, faster development resulting from greater programmer confidence, and improved bug detection (duh!).

Historically, web apps have been hard to autotest, and developers relied heavily on manual testing. But, certain parts such as standalone services and REST API can be and should be tested thoroughly by the TDD. At the same time, rich user interface (UI) / user experience (UX) can be tested with headless browsers such as PhantomJS.

The behavior-driven development (BDD) concept is based on TDD. It differs from TDD in language, which encourages collaboration between product owners and programmers.
[https://webapplog.com/tdd/]

tdd'Code-coverage

name::
* McsEngl.tdd'Code-coverage@cptIt,
* McsEngl.code-coverage@cptIt,

_DESCRIPTION:
In computer programming, code coverage is a measure used to describe the degree to which the source code of a program is tested by a particular test suite.

In other words: if there is code in the codebase which is not "covered" by a test, it could potentially be a source of bugs or undesirable behaviour.

Read more: https://en.wikipedia.org/wiki/Code_coverage
[https://github.com/dwyl/learn-tdd#what-is-code-coverage]

_ADDRESS.WPG:
* https://github.com/dwyl/learn-istanbul,

tdd'Resource

name::
* McsEngl.tdd'Resource@cptIt,

_ADDRESS.WPG:
* https://github.com/dwyl/learn-tdd,
* https://github.com/nelsonic/practical-js-tdd,
* https://semaphoreci.com/community/tutorials/a-tdd-approach-to-building-a-todo-api-using-node-js-and-mongodb,

pgmn.BDD

name::
* McsEngl.pgmn.BDD@cptIt,
* McsEngl.BDD@cptIt,

_DESCRIPTION:
Behavior-driven Development (BDD) emerged out of TDD as an approach to programming that considers both business and technical needs.

From the developer perspective, BDD is a style of TDD that uses English in a natural way to describe expected behavior.
[https://www.teaching-materials.org/jasmine/#/14]

_SPECIFIC:
* Jasmine#ql:jasmine_test_tool#

pgmn.WATERFALL-MODEL

name::
* McsEngl.pgmn.WATERFALL-MODEL@cptIt,
* McsEngl.pgm'Waterfall-model@cptIt,

The waterfall model is a sequential design process, often used in software development processes, in which progress is seen as flowing steadily downwards (like a waterfall) through the phases of Conception, Initiation, Analysis, Design, Construction, Testing, Production/Implementation and Maintenance.
The waterfall development model originates in the manufacturing and construction industries: highly structured physical environments in which after-the-fact changes are prohibitively costly, if not impossible. Since no formal software development methodologies existed at the time, this hardware-oriented model was simply adapted for software development.[citation needed]
The first known presentation describing use of similar phases in software engineering was held by Herbert D. Benington at Symposium on advanced programming methods for digital computers on 29 June 1956.[1] This presentation was about the development of software for SAGE. In 1983 the paper was republished[2] with a foreword by Benington pointing out that the process was not in fact performed in strict top-down, but depended on a prototype.
The first formal description of the waterfall model is often cited as a 1970 article by Winston W. Royce,[3] though Royce did not use the term "waterfall" in this article. Royce presented this model as an example of a flawed, non-working model.[4] This, in fact, is how the term is generally used in writing about software development—to describe a critical view of a commonly used software practice.[5]
[http://en.wikipedia.org/wiki/Waterfall_model]

The waterfall model is a sequential design process, often used in software development processes, in which progress is seen as flowing steadily downwards (like a waterfall) through the phases of Conception, Initiation, Analysis, Design, Construction, Testing, Production/Implementation, and Maintenance.

The waterfall development model originates in the manufacturing and construction industries; highly structured physical environments in which after-the-fact changes are prohibitively costly, if not impossible. Since no formal software development methodologies existed at the time, this hardware-oriented model was simply adapted for software development.[1]

The first known presentation describing use of similar phases in software engineering was held by Herbert D. Benington at Symposium on advanced programming methods for digital computers on 29 June 1956.[2] This presentation was about the development of software for SAGE. In 1983 the paper was republished[3] with a foreword by Benington pointing out that the process was not in fact performed in strict top-down, but depended on a prototype.

The first formal description of the waterfall model is often cited as a 1970 article by Winston W. Royce,[4] [5] although Royce did not use the term "waterfall" in this article. Royce presented this model as an example of a flawed, non-working model.[6] This, in fact, is how the term is generally used in writing about software development—to describe a critical view of a commonly used software development practice.[7]
[http://en.wikipedia.org/wiki/Waterfall_model]

lcp'doing.SERIALIZATION

name::
* McsEngl.lcp'doing.SERIALIZATION@cptIt,
* McsEngl.data-serialization@cptIt,
* McsEngl.pgmlng'serialization@cptIt,
* McsEngl.serialization@cptIt,

_DESCRIPTION:
In computer science, in the context of data storage and transmission, serialization is the process of converting a data structure or object state into a format that can be stored (for example, in a file or memory buffer, or transmitted across a network connection link) and "resurrected" later in the same or another computer environment.[1] When the resulting series of bits is reread according to the serialization format, it can be used to create a semantically identical clone of the original object. For many complex objects, such as those that make extensive use of references, this process is not straightforward. Serialization of object oriented objects does not include any of their associated methods with which they were previously inextricably linked.

This process of serializing an object is also called deflating or marshalling an object.[2] The opposite operation, extracting a data structure from a series of bytes, is deserialization (which is also called inflating or unmarshalling).
[http://en.wikipedia.org/wiki/Data_serialization]

SDXF

SDXF (Structured Data eXchange Format) is a data serialization format defined by RFC 3072.

It allows arbitrary structured data of different types to be assembled together for exchanging between computers of different architectures.

The ability to arbitrarily structure data and serialize it into a self-describing format is reminiscent of XML, but SDXF is not a text format (as XML) — one cannot manipulate an SDXF structure with a text editor. The maximal length of a datum (composite as well as elementary) encoded using SDXF is 16777215 bytes (one less than 16 MiB).
[http://en.wikipedia.org/wiki/SDXF]

lcp'doing.TRANSLATING

name::
* McsEngl.lcp'doing.TRANSLATING@cptIt,
* McsEngl.pgmlng'translating@cptIt,
* McsEngl.translation-in-programing-language@cptIt,

lcp'Translator#cptIt533#

name::
* McsEngl.lcp'Translator@cptIt,

lcp'SOURCE-PROGRAM-EXECUTION

name::
* McsEngl.lcp'SOURCE-PROGRAM-EXECUTION@cptIt,

The first stage is the token generation, or lexical analysis, by which the input character stream is split into meaningful symbols defined by a grammar of regular expressions. For example, a calculator program would look at an input such as "12*(3+4)^2" and split it into the tokens 12, *, (, 3, +, 4, ), ^ and 2, each of which is a meaningful symbol in the context of an arithmetic expression. The parser would contain rules to tell it that the characters *, +, ^, ( and ) mark the start of a new token, so meaningless tokens like "12*" or "(3" will not be generated.

The next stage is parsing or syntactic analysis, which is checking that the tokens form an allowable expression. This is usually done with reference to a context-free grammar which recursively defines components that can make up an expression and the order in which they must appear. However, not all rules defining programming languages can be expressed by context-free grammars alone, for example type validity and proper declaration of identifiers. These rules can be formally expressed with attribute grammars.

The final phase is semantic parsing or analysis, which is working out the implications of the expression just validated and taking the appropriate action. In the case of a calculator, the action is to evaluate the expression; a compiler, on the other hand, would generate code. Attribute grammars can also be used to define these actions.
[http://en.wikipedia.org/wiki/Syntactic_Analysis]

lcp'doing.MAIN-FUNCTION

name::
* McsEngl.lcp'doing.MAIN-FUNCTION@cptIt,
* McsEngl.lcp'service@cptIt,
* McsEngl.lcp'usage@cptIt,

_DESCRIPTION:
What tasks the programs created with the language are doing.
[hmnSngo.2015-05-28]

lcp'GENERIC

_GENERIC:
* computer-language#cptItsoft204#
* data-method#cptIt204.6#
* MAPPING_METHOD of an algorithm to a program.
* language.human#cptCore93#
* FORMAL_LANGUAGE#cptCore1018#

SPECIFIC

name::
* McsEngl.lcp.specific@cptIt,
* McsEngl.lngPgm.specific@cptIt,
* McsEngl.pgmlng.specific@cptIt,
* McsEngl.mdp.SPECIFIC@cptIt,
* McsEngl.pl.specific@cptIt,

_SPECIFIC: lcp.Alphabetically:
=== lcp.a:
* APL#cptItsoft410#
* array-pgmlng#ql:prglng.array_language#
* assembly#ql:assembly_programming_language@cptIt#
* AWK#ql:awk'pcl@cptIt248i#
=== lcp.b:
* BASIC#cptIt353#
* binary-based (non-human-readable)
=== lcp.c:
* C#cptIt419#
* CPP (C++)#cptItsoft677#
* C'sharp##
* CLIPS#cptIt464#ql:"conceptit464"##
* COBOL#cptIt966#
* compiled#ql:"pgmlng.compiled"#
* Concurrent
* configuration-method
* Curly bracket
=== lcp.d:
* Dataflow
* Data_structured
* Data_oriented
* declarative#cptItsoft248.6#
* Domain-specific-pgmlng
=== lcp.e:
* educational-pgmlng#ql:pgmlng.educational#
* esoteric-pgmlng#ql:pgmlng.esoteric#
* extension
* event-driven-language##
=== lcp.f:
* first-generation-pgmlng #ql:"pgmlng.first_generation@cptIt"#
* forth-generation #sgn#
* FORTRAN-pgmlng#linkL#
* FUNCTIONAL#cptIt269#ql:"conceptit269"##
=== lcp.g:
* general-use => domain-specific-no#ql:pgmlng.general_purpose#
* glue-pgmlng#ql:pgmlng.glue#
* GO#cptItsoft1015#
=== lcp.h:
* HIGH'LEVEL LANGUAGE >> THIRD-GENERATION LANGUAGE#sgn#
* homoiconic-pgmlng#linkL#
=== lcp.i:
* IMPERATIVE LANGUAGE >> PROCEDURAL LANGUAGE#sgn#
* INTERPRETED LANGUAGE#sgn#
* IPL#linkL#
=== lcp.j:
* JAVA#cptItsoft1012#
=== lcp.k:
* knowledge-pgmlng#ql:"pgmlng.knowledge@cptIt"#
=== lcp.l:
* lambda-calculus-base-pgmlng#ql:pgmlng.lambda_calculus_based#
* LISP#cptIt360#
* LOGO#cptIt445#
* logic-pgmlng#ql:pgmlng.logic#
* low-level (second-generation)#ql:pgmlng.low_level#
=== lcp.m:
* Machine
* Macro
* Metaprogramming
* Multi-paradigm
* MACHINE LANGUAGE >> FIRST-GENERATION LANGUAGE#sgn#
* MODULAR
=== lcp.n:
* Non-English-based
=== lcp.o:
* OBJECT-ORIENTED-LANGUAGE#cptIt220#
* Off-side rule
=== lcp.p:
* PASCAL#cptItsoft1039#
* PERL#cptItsoft1056#
* probabilistic##
* procedural
* PROLOG#cptIt364#
* Prototype-based-pgmlng#ql:pgmlng.prototype_based#
=== lcp.q:
* query-method#cptItsoft437#
===
* RELATIONAL LANGUAGE
* REXX#cptIt438#
* Reflective
* Rule-based
=== lcp.s:
* SCRIPTING-LANGUAGE#cptIt512#
* second_generration##
* sed-pgmlng#ql:"pgmlng.sed@cptIt"#
* self-pgmlng#linkL#
* simulation#ql:"simulation_language@cptCore493.5"#
* structured##
* SQL
* Synchronous
* system-pgmlng##
=== lcp.t:
* template-pgmlng##
* text-based (human-readable)
* tiny-pgmlng##
* third-generation-pgmlng##
=== lcp.u:
* UNSTRUCTURE'PROGRAMMING
=== lcp.v:
* visual-pl#cptItsoft518#

There are three widely used programming paradigms there. Procedural programming, functional programming and object-oriented programming. Python supports both procedural and object-oriented programming. There is some limited support for f unctional programming too.
[http://zetcode.com/tutorials/pythontutorial/oop/]

_SPECIFIC:
A programming paradigm is a fundamental style of programming regarding how solutions to problems are to be formulated in a programming language. (Compare with a methodology, which is a style of solving specific software engineering problems).
[http://en.wikipedia.org/wiki/Programming_paradigm]
===
* DECLARATIVE_LANGUAGE#sgn#
* IMPERATIVE_LANGUAGE#sgn#
===
* OBJECT_ORIENTED_LANGUAGE#cptIt220#
===
* PARALLEL_PROGRAMMING
* NON_PARALLEL_PROGRAMMING
===
* STRUCTURED_PROGRAMMING#ql:"structured_programming_language-*"###
* NON STRUCTURED PROGRAMMING
===
* VALUE_LEVEL
* FUNCTION_LEVEL
===
* SCRIPTING_PROGRAMMING-LANGUAGE#cptIt512: attSpe#
===
* SCALAR_PROGRAMING##
* ARRAY_PROGRAMING##
===
* LIST_BASED_PROGRAMING

Resource

_ADDRESS.WPG:
* https://en.wikipedia.org/wiki/Programming_paradigm,

lcp.SPECIFIC-DIVISION.human-readability

name::
* McsEngl.lcp.SPECIFIC-DIVISION.human-readability@cptIt,

_SPECIFIC:
* TEXT_BASED (HUMAN_READABLE)
* BINARY_BASED (NONHUMAN_READABLE)

lcp.SPECIFIC-DIVISION.domain

name::
* McsEngl.lcp.SPECIFIC-DIVISION.domain@cptIt,

_SPECIFIC:
GENERAL_USE (general purpose/γενικού σκοπου)
 SCIENCE_ORIENTED_LANGUAGE
 BUSINESS_ORIENTED_LANGUAGE
SPECIFIC_USE:
 SYSTEM_PROGRAMMING
 ARTIFICIAL_INTELLIGENCE_LANGUAGE
 TEXT_BASED_PROCESSING##

lcp.SPECIFIC-DIVISION.abstracteness-from-machine

name::
* McsEngl.lcp.SPECIFIC-DIVISION.abstracteness-from-machine@cptIt,

_SPECIFIC:
* FIRST_GENERATION_LANGUAGE#sgn# (MACHINE language)
* SECOND_GENERATION LANGUAGE (ASSEMBLY, LOW LEVEL)
* THIRD_GENERATION LANGUAGE#sgn# (HIGH LEVEL)
* FORTH_GENERATION LANGUAGE#sgn# (VERY HIGH LEVEL language)
* FIFTH_GENERALTION LANGUAGE#sgn#
===
* low-level-pgmlng##
* medium-level-pgmlng##
* high-level-pgmlng##
===
Relative meaning:
The terms high-level and low-level are inherently relative. Some decades ago, the C language, and similar languages, were most often considered "high-level". Many programmers today might refer to C as low-level.
Assembly language may itself be regarded as a higher level (but often still one-to-one if used without macros) representation of machine code, as it supports concepts such as constants and (limited) expressions, sometimes even variables, procedures, and data structures. Machine code, in its turn, is inherently at a slightly higher level than the microcode or micro-operations used internally in many processors.
[http://en.wikipedia.org/wiki/Low-level_programming_language]

lcp.level.MACHINE

name::
* McsEngl.lcp.level.MACHINE@cptIt,
* McsEngl.1GL@cptIt,
* McsEngl.binary-language@cptIt,
* McsEngl.first-generation-pcl@cptIt,
* McsEngl.first-generation-computer-language@cptIt,
* McsEngl.first-generation-programming-language@cptIt,
* McsEngl.language.first-generation@cptIt,
* McsEngl.language.machine-language@cptIt,
* McsEngl.machine-language@cptIt,
* McsEngl.pgmlng.first-generation@cptIt,

=== _NOTES: "Machine code or machine language is a system of instructions and data directly executed by a computer's central processing unit".
[http://en.wikipedia.org/wiki/Machine_instruction] 2007-12-29
In this sentece we see the CONFUSION between the "language" and the "program" that exists in literarture.
[KasNik, 2007-12-29]

_DEFINITION:
The first-generation programming language, or 1GL, is machine code. It is the only language a microprocessor can understand directly. Currently, programmers almost never write programs directly in machine code, because not only does it (like assembly language) require attention to numerous details which a high-level language would handle automatically, but it also requires memorizing or looking up numerical codes for every instruction that is used. For this reason, second generation programming languages abstract the machine code one level.
[http://en.wikipedia.org/wiki/Low-level_programming_language]
===
In the early days of computers, computer memories were quite small. Programs had to be loaded in by toggling switches on a panel. In these days it was possible for a programmer to keep track of every memory location and every machine instruction in his or her head. Since computer memories were so small (often just a few hundred bytes) and the machines so slow, program efficiency was the primary concern. Any program was acceptable as long as it worked. Algorithms were very closely tied to the capabilities of the specific machine they ran on. This is called machine language programming. The toggling of individual memory locations (by switch or other means) is called a first-generation language, and we're being very liberal with the definition of language. In a first generation language there is almost no abstraction.
[E.R. HAROLD, Java Tutorial, {1996-11-20}]

Machine language
The programming language comprised of a set of unique machine codes that can be directly executed by a given computer is called its machine language.
Machine language is the lowest level of programming. It is written in a series of bits used to communicate primitive instructions to the computer.
Each type of computer has its own variety of machine language. Programmers rarely code in machine language because instructions and data must be in binary notation.
[SOURCE: PC-GLOSSARY 1993]

Τα προγράμματα γραμένα σε αυτή ΜΟΝΟ καταλαβαίνει το μηχάνημα.

Τα προγράμματα αυτά λέγονται OBJECT PROGRAMS or OBJECT CODE.

machine-code

_DESCRIPTION:
Machine code is the only language a microprocessor can process directly without a previous transformation. Currently, programmers almost never write programs directly in machine code, because it requires attention to numerous details which a high-level language would handle automatically, and also requires memorizing or looking up numerical codes for every instruction that is used. For this reason, second generation programming languages provide one abstraction level on top of the machine code.

Example: A function in 32-bit x86 machine code to calculate the nth Fibonacci number:
8B542408 83FA0077 06B80000 0000C383
FA027706 B8010000 00C353BB 01000000
B9010000 008D0419 83FA0376 078BD98B
C84AEBF1 5BC3
[http://en.wikipedia.org/wiki/Low-level_programming_language]

machine-language-and-COMPUTER-ARCHITECTURE

_DESCRIPTION:
Every computer architecture has its own machine language.
On this level, each instruction is simple enough to be executed using a relatively small number of electronic circuits.
Computers differ by the number and type of operations they support.
For example a new 64-bit machine would have different circuitry than a 32-bit machine.
They may also have different sizes and numbers of registers, and different representations of data types in storage.
While most general-purpose computers are able to carry out essentially the same functionality, the ways they do so differ; the corresponding assembly languages reflect these differences.
[http://en.wikipedia.org/wiki/Assembly_language#Assembler]

lcp.level.ASSEMBLY

name::
* McsEngl.lcp.level.ASSEMBLY@cptIt,
* McsEngl.assembly-language@cptIt,
* McsEngl.assembly-programming-language@cptIt,
* McsEngl.lagAsm@cptIt,
* McsEngl.language.assembly@cptIt,
* McsEngl.language.second'generation@cptIt,
* McsEngl.lasm@cptIt,
* McsEngl.lcp.assembly@cptIt, {2014-02-15}
* McsEngl.second-generation-computer-language@cptIt,
* McsEngl.second-generation-pcl@cptIt,
* McsEngl.second-generation-programming-language@cptIt,

_GENERIC:
* low-level-pgmlng#ql:low_level_pcl#

_DEFINITION:
As computers grew in power and memory, it was no longer possible for a programmer to keep track of what was happening at every location in the machine's physical memory. Card readers and assembly language were invented to make programming more feasible. In assembly language the programmer uses mnemonic codes like MOV to represent particular bit sequences. These codes mapped directly to individual instructions on the CPU, and memory was still addressed directly. One code meant exactly one CPPU instruction. (More modern assembly languages don't always map as directly to the CPU as the older ones did.) Algorithmically The philosophy of "Use whatever works" continued.
[E.R. HAROLD, Java Tutorial, {1996-11-20}]
===
Assembly language is used to write programs in terms of the basic operations of a processor.
[http://chortle.ccsu.edu/assemblytutorial/Chapter-01/ass01_1.html]
===
Assembly language
Generally speaking, each design of computer whether it be an IBM, Honeywell, Digital, or any other, has its own assembly language.
Assembly language is a low-level programming language that uses mnemonic instructions, such as STO for store and SUB for subtract, instead of binary numbers to represent the corresponding machine language instruction.
It is written to correspond to a specific computer's machine language.
An assembler is a program that translates the assembly language symbolic code into its equivalent machine code.
[SOURCE: PC-GLOSSARY 1993]
===
Υπάρχουν όμως και εφαρμογές που απαιτούν απόλυτο έλεγχο χρόνου και μηχανής. Αυτές γράφονται σε γλώσα assembly και τότε όλη αυτή η γνώση των εσωτερικών διεργασιών είναι πολύτιμη. Στην κατηγορία αυτή ανήκουν τα 2/3 των βιομηχανικών και τηλεπικοινωνιακών εφαρμογών.
[Γ. Β. ΘΕΟΔΩΡΟΥ. ΕΙΣΑΓΩΓΗ, 1986, 110]
===
In assembly languages, virtually every aspect of the machine is reflected in the program. Each statement represents a single machine instruction and programmers must deal with low-level details such as register allocation and procedure calling sequences. As a result, it is difficult to write and maintain large programs in assembly language.
[John K. Ousterhout {1997-11-14}] 1998feb20
===
Second-generation programming language is a generational way to categorize assembly languages. The term was coined to provide a distinction from higher level third-generation programming languages (3GL) such as COBOL and earlier machine code languages. Second-generation programming languages have the following properties:

The code can be read and written by a programmer. To run on a computer it must be converted into a machine readable form, a process called assembly.
The language is specific to a particular processor family and environment.
Second-generation languages are sometimes used in kernels and device drivers (though C is generally employed for this in modern kernels), but more often find use in extremely intensive processing such as games, video editing, graphic manipulation/rendering.

One method for creating such code is by allowing a compiler to generate a machine-optimized assembly language version of a particular function. This code is then hand-tuned, gaining both the brute-force insight of the machine optimizing algorithm and the intuitive abilities of the human optimizer.
[http://en.wikipedia.org/wiki/Second_generation_programming_language]

lasm'archetype

name::
* McsEngl.lasm'archetype@cptIt,

_DESCRIPTION:
· the-archetype of assembly is a-document of a-high-middle-level-language or human-info-processing.
· this will-be-translated in an-assembly-document, which the-assembly-compiler wil-translate to machine-document to be-executed by the-Cpu.
[hmnSngo.2018-03-18]

lasm'algorithm

name::
* McsEngl.lasm'algorithm@cptIt,

lasmalg'machine

name::
* McsEngl.lasmalg'machine@cptIt,

lasm'Architecture

name::
* McsEngl.lasm'Architecture@cptIt,

_DESCRIPTION:
The architecture of a computer is a logical description of its components and its basic operations.
[http://chortle.ccsu.edu/assemblytutorial/Chapter-01/ass01_1.html]
===
Each family of processor chip (MIPS, PIC, SPARC, Alpha, Motorola, Intel, et al.) has its own architecture.
[http://chortle.ccsu.edu/assemblytutorial/Chapter-01/ass01_2.html]
===
Architecture vs. Implementation

The architecture of a computer is a logical description of its components and its basic operations.

The MIPS family of computers all have the same assembly-level architecture. This means that all MIPS machines can be programmed using the same assembly language. The actual electronics that implement the architecture may differ greatly between versions of the chip. This is analogous to "car architecture". Two Jaguars may appear the same to a driver (same styling, same user controls, same operation) but have different components under the hood. The architecture is the same, but the implementation (and performance) is different. Keep this in mind as you visit the used car lots in Silicon Valley.

The architecture of a MIPS is different from the architecture of a Pentium. Both are Von Neumann machines, so they look the same in general, but the details of operation are completely different. They have different machine languages, and hence different assembly languages.
[http://chortle.ccsu.edu/assemblytutorial/Chapter-01/ass01_11.html]

lasm'memory (Ram)

name::
* McsEngl.lasm'memory (Ram)@cptIt,
* McsEngl.lasm'main-memory@cptIt,

_DESCRIPTION:
The bytes that make up the machine instructions of a program are stored in main memory and fetched into the processor as needed. Data is also kept in main memory. Keeping both data and instructions in main memory is one of the characteristics of a Von Neumann machine, the name for the basic design of most modern computers.
[http://chortle.ccsu.edu/assemblytutorial/Chapter-01/ass01_10.html]

lasm'Memory-address

name::
* McsEngl.lasm'Memory-address@cptIt,

_DESCRIPTION:
In the MIPS, as in most computers, each byte of main memory has an address.
An address is an integer that uniquely identifies the byte.
The addresses run from 0 up to about four billion.
However, on the MIPS, user programs and data (such as you will write) are restricted to the first two billion addresses.
[http://chortle.ccsu.edu/assemblytutorial/Chapter-01/ass01_10.html]
===
On a 32-bit processor, memory addresses are 32 bits wide and so the program counter (PC) holds a 32 bit address.
[http://chortle.ccsu.edu/assemblytutorial/Chapter-01/ass01_4.html]

lasm'Cpu

name::
* McsEngl.lasm'Cpu@cptIt,

lasm'Alu

name::
* McsEngl.lasm'Alu@cptIt,

lasm'register

name::
* McsEngl.lasm'register@cptIt,

_DESCRIPTION:
a register is a part of the processor that holds a bit pattern
When bit patterns are displayed in a book they are usually shown in groups of four
[http://chortle.ccsu.edu/assemblytutorial/Chapter-01/ass01_5.html]

lasm'PC (program-counter)

name::
* McsEngl.lasm'PC (program-counter)@cptIt,

_DESCRIPTION:
The program counter (PC) is part of the processor. It contains the address of the instruction in memory.
[http://chortle.ccsu.edu/assemblytutorial/Chapter-01/ass01_4.html]

lasm'Machine-instruction

name::
* McsEngl.lasm'Machine-instruction@cptIt,

_DESCRIPTION:
The layout of a machine instruction is part of the architecture of a processor chip. Without knowing the layout you can't tell what the instruction means. Even if you know the layout, it is hard to remember what the patterns mean and hard to write machine instructions.
[http://chortle.ccsu.edu/assemblytutorial/Chapter-01/ass01_6.html]

lasm'Doing

name::
* McsEngl.lasm'Doing@cptIt,

_DESCRIPTION:
Assembly language does match the problem when the problem is the operation of the computer system. Assembly language is used for operating systems, compilers, communications, low-level graphics, and other programs where the architecture of the processor must be visible. Often with these program the crucial parts are written in assembly and the rest in a high level language (usually C). The most common use of assembly language is in programming embedded systems. Here a processor chip is part of a machine built for a specific purpose. Examples are aviation electronics, communication satellites, DVD players, robots, automobile electronics, cell phones, and game consoles. MIPS chips are commonly used in these (and for this reason more MIPS chips are made each year than any other processor).
[http://chortle.ccsu.edu/assemblytutorial/Chapter-01/ass01_10.html]

lasmalg'Unit

name::
* McsEngl.lasmalg'Unit@cptIt,

lasmalg'Semantic-unit

name::
* McsEngl.lasmalg'Semantic-unit@cptIt,

lasmalg'Sentence

name::
* McsEngl.lasmalg'Sentence@cptIt,
* McsEngl.lasmalg'statement@cptIt,

_DESCRIPTION:
A statement in pure assembly language corresponds to one machine instruction. Assembly language is much easier to write than machine language. Here is the previous machine instruction and the assembly language that it corresponds to:
machine instruction    assembly language statement
0000 0001 0010 1011 1000 0000 0010 0000  add $t0,$t1,$t2
Enhanced assembly language includes additional convenience features. It has instructions (called pseudoinstructions) that correspond to several machine instructions.
[http://chortle.ccsu.edu/assemblytutorial/Chapter-01/ass01_6.html]

lasmalg'Program

name::
* McsEngl.lasmalg'Program@cptIt,

_DESCRIPTION:
An assembly language program describes exactly what the hardware should do, step by step, in terms of the basic operations of the hardware. In a high level programming language like C or Java a programmer is mostly unaware of computer architecture. The same source program can run (after compiling) on any processor family.
[http://chortle.ccsu.edu/assemblytutorial/Chapter-01/ass01_3.html]
===
An assembly language program consists of assembly language statements, statements that define data, and some additional information that helps in the translation. Here is a fragment of an assembly language program and its translation into bit patterns.
machine instructions   assembly statements
0011 0100 0000 0001 0000 0000 0000 1001 ori $1, $0, 9
0000 0000 0100 0001 0000 0000 0001 1000 mult $2, $1
0000 0000 0000 0000 0100 0000 0001 0010 mflo $8
0011 0100 0000 0001 0000 0000 0000 1001 ori $1, $0, 5
0000 0000 0100 0000 0000 0000 0100 1000 div $8, $1
[http://chortle.ccsu.edu/assemblytutorial/Chapter-01/ass01_7.html]

lasm'IDE#cptIt430#

name::
* McsEngl.lasm'IDE@cptIt,

An assembler is a program that translates the assembly language symbolic code into its equivalent machine code.

lasm'resource

name::
* McsEngl.lasm'resource@cptIt,

_ADDRESS.WPG:
* https://hacks.mozilla.org/2017/02/a-crash-course-in-assembly/
* The Art of Assembly Language: http://www.phatcode.net/res/260/files/html/AoATOC.html,

lasm.SPECIFIC

name::
* McsEngl.lasm.SPECIFIC@cptIt,

_SPECIFIC:
* EVM-assemply##

_SPECIFIC:
There is not just one language called "assembly language." Each processor family (such as Intel, VAX, MIPS, Alpha, ...) has its own machine instructions and a corresponding assembly language. MIPS assembly language is only for MIPS processors. The VAX assembly language is only for VAX processors. There is a different assembly language for IBM mainframe computers, and others for Intel-based PCs.

All processors follow the same basic machine cycle. (See above). The differences between processors are in the details of what operations are done in the "execute" phase of the basic machine cycle.

Assembly language describes computations in terms of the hardware of a particular processor. A high level computer programming language (ideally) describes computations in terms of the problem being solved . Since there are many types problems, there are many high level languages, each designed for particular types of problems. For example, object-oriented languages, describe computations in terms of the objects of the problem and operations with them.

It is much easier to program a computer in a high level language than in assembly language, especially when the programming language matches the problem. There will never be a universal programming language since no one language is best for all problems.
[http://chortle.ccsu.edu/assemblytutorial/Chapter-01/ass01_9.html]

lasm.EXTENDED

name::
* McsEngl.lasm.EXTENDED@cptIt,

_DESCRIPTION:
Even when assembly language is used it usually has been enhanced. Features are added to it to make it more programmer-friendly. This extended assembly language includes statements that correspond to several basic machine operations. The MIPS extended assembly language does this, but the processor chip is still visible.
[http://chortle.ccsu.edu/assemblytutorial/Chapter-01/ass01_1.html]

lasm.MIPS (lamips)

name::
* McsEngl.lasm.MIPS (lamips)@cptIt,
* McsEngl.lamips@cptIt,

lamips'Archetype

name::
* McsEngl.lamips'Archetype@cptIt,

lamips'Memory

name::
* McsEngl.lamips'Memory@cptIt,

_DESCRIPTION:
MIPS memory is an array of 2^32 bytes. Each byte has a 32-bit address. Each byte can hold an 8-bit pattern, one of the 256 possible 8-bit patterns. The addresses of MIPS main memory range from 0x00000000 to 0xFFFFFFFF.
However, user programs and data are restricted to the first 231 bytes. The last half of the address space is used for the operating system and for specialized purposes.
[http://chortle.ccsu.edu/assemblytutorial/Chapter-10/ass10_2.html]

lamips'Memory-address

name::
* McsEngl.lamips'Memory-address@cptIt,

_DESCRIPTION:
2^32 = 4,294,967,296 bytes = 0xFFFFFFFF
===
Εστω  μία  λέξη  στη  διεύθυνση  Α.  Ποιά  είναι  η  διεύθυνση  
της  επόμενης  λέξης;  
– A  +  4
– όχι  Α  +  1!  Πολύ  συνηθισμένο  λάθος.  
[http://ecourse.uoi.gr/pluginfile.php/83126/mod_resource/content/5/l03_MIPS_Intro.pdf]

lamips'Memory-not-available-to-user-programs

name::
* McsEngl.lamips'Memory-not-available-to-user-programs@cptIt,

_DESCRIPTION:
Although the address space is 32 bits, the top addresses from 0x80000000 to 0xFFFFFFFF are not available to user programs. They are used for the operating system and for ROM. When a MIPS chip is used in an embedded controller the control program exists in ROM in this upper half of the address space.
[http://chortle.ccsu.edu/assemblytutorial/Chapter-10/ass10_3.html]

lamips'Memory-text-part

name::
* McsEngl.lamips'Memory-text-part@cptIt,

_DESCRIPTION:
Text Segment: This holds the machine language of the user program (the text).
[http://chortle.ccsu.edu/assemblytutorial/Chapter-10/ass10_3.html]

lamips'Memory-data-part

name::
* McsEngl.lamips'Memory-data-part@cptIt,

_DESCRIPTION:
Data Segment: This holds the data that the program operates on.
Part of the data is static. This is data that is allocated by the assembler and whose size does not change as a program executes. Values in it do change; "static" means the size in bytes does not change during execution.
On top of the static data is the dynamic data. This is data that is allocated and deallocated as the program executes. In C programming, dynamic allocation and deallocation is done with malloc() and free().
[http://chortle.ccsu.edu/assemblytutorial/Chapter-10/ass10_3.html]

lamips'Memory-stack-part

name::
* McsEngl.lamips'Memory-stack-part@cptIt,

_DESCRIPTION:
Stack Segment: At the top of user address space is the stack. With high level languages, local variables and parameters are pushed and popped on the stack as procedures are activated and deactivated.
[http://chortle.ccsu.edu/assemblytutorial/Chapter-10/ass10_3.html]

lamips'Machine-instruction

name::
* McsEngl.lamips'Machine-instruction@cptIt,

_DESCRIPTION:
Machine Instructions: Machine instructions are thirty-two bits wide. Bit patterns specify the operation, the operands, and the destination for the result. Basic operations are arithmetic, logic, memory access, and control branches.
[http://chortle.ccsu.edu/assemblytutorial/Chapter-10/ass10_12.html]

lamips'Register

name::
* McsEngl.lamips'Register@cptIt,

_DESCRIPTION:
A register is a part of the processor that holds a bit pattern. Processors have many registers.
[http://chortle.ccsu.edu/assemblytutorial/Chapter-09/ass09_2.html]
===
The processor chip contains registers, which are electronic components that can store bit patterns. The processor interacts with memory by moving bit patterns between memory and its registers.

Load: a bit pattern starting at a designated address in memory is copied into a register inside the processor.
Store: a bit pattern is copied from a processor register to memory at a designated address.
Bit patterns are copied between the memory and the processor in groups of one, two, four, or eight contiguous bytes. When several bytes of memory are used in an operation, only the address of the first byte of the group is specified.
[http://chortle.ccsu.edu/assemblytutorial/Chapter-10/ass10_2.html]

Καταχωρητές  στον  MIPS  
! Προκαθορισμένος  αριθμός  καταχωρητών  
– κατασκευασμένοι  στο  υλικό.  Δεν  αλλάζουν!  
! Ο  MIPS  έχει  32  καταχωρητές  
– Αρχή  σχεδίασης:  το  μικρό  είναι  γρήγορο  
! Στον  MIPS  του  μαθήματος,  κάθε  καταχωρητής  έχει  
«πλάτος»  32  bit  
– 32bit  ονομάζονται  «λέξη»  (word)  
– το  βασικό  μέγεθος  με  το  οποίο  γίνονται  πράξεις  απευθείας  σε υλικό  
Για  να  αναφερθούμε  σε  έναν  καταχωρητή  χρειάζεται  
– είτε  ο  αριθμός  του,  από  0  ώς  31  
– είτε  το  όνομά  του  
! Στη  γλώσσα  assembly  του  MIPS  αναφορές  σε  καταχωρητή  
γίνονται  δίνοντας  το  σύμβολο  $  και  μετά  το  όνομα  (ή  τον  
αριθμό)  
– για  να  ξεχωρίζουν  από  τους  απλούς  αριθμούς  
! Παράδειγμα:
ΜΥΥ-402  Αρχιτεκτονική  Η/Υ 11
add  $8,  $2,  $3
Ονόματα  καταχωρητών
! Προτιμώνται  από  τους  απλούς  αριθμούς
! Υπάρχουν  κάποιες  συμβάσεις  στη  χρήση  των  καταχωρητών  
– που  αποτυπώνονται  στα  ονόματά  τους  
! Για  την  ώρα:  
– $t0  -  $t9      προσωρινές  τιμές  (temporary)  
– $s0  -  $s7    
[http://ecourse.uoi.gr/pluginfile.php/83126/mod_resource/content/5/l03_MIPS_Intro.pdf]

lamips'register.GENERAL

name::
* McsEngl.lamips'register.GENERAL@cptIt,

_DESCRIPTION:
The registers that are visible in assembly language are called general purpose registers and floating point registers. There are 32 general purpose registers. Each general purpose register holds a 32 bit pattern. In assembly language, these registers are named $0, $1, $2, ... , $31. There are 32 floating point registers. These are discussed in a later chapter.

One of the general purpose registers is hard-wired to always contain the value 0x00000000 (all zero bits).
[http://chortle.ccsu.edu/assemblytutorial/Chapter-10/ass10_4.html]

lamips'register.FLOATING

name::
* McsEngl.lamips'register.FLOATING@cptIt,

_DESCRIPTION:
The registers that are visible in assembly language are called general purpose registers and floating point registers. There are 32 general purpose registers. Each general purpose register holds a 32 bit pattern. In assembly language, these registers are named $0, $1, $2, ... , $31. There are 32 floating point registers. These are discussed in a later chapter.

One of the general purpose registers is hard-wired to always contain the value 0x00000000 (all zero bits).
[http://chortle.ccsu.edu/assemblytutorial/Chapter-10/ass10_4.html]

lamips'register.ZERO

name::
* McsEngl.lamips'register.ZERO@cptIt,

_DESCRIPTION:
The registers that are visible in assembly language are called general purpose registers and floating point registers. There are 32 general purpose registers. Each general purpose register holds a 32 bit pattern. In assembly language, these registers are named $0, $1, $2, ... , $31. There are 32 floating point registers. These are discussed in a later chapter.

One of the general purpose registers is hard-wired to always contain the value 0x00000000 (all zero bits).
[http://chortle.ccsu.edu/assemblytutorial/Chapter-10/ass10_4.html]

lamips'Word

name::
* McsEngl.lamips'Word@cptIt,

_DESCRIPTION:
Ο  MIPS  εσωτερικά  δουλεύει  με  λέξεις  (word)  32  bit  
[http://ecourse.uoi.gr/pluginfile.php/83126/mod_resource/content/5/l03_MIPS_Intro.pdf]

lamips'Algorithm

name::
* McsEngl.lamips'Algorithm@cptIt,

lamips'Label

name::
* McsEngl.lamips'Label@cptIt,

lamips'Sentence

name::
* McsEngl.lamips'Sentence@cptIt,

Σύνταξη εντολών:
πράξη      προορισμός,  1η  πηγή,  2η  πηγή
! Η  μορφή  των  εντολών  είναι  άκαμπτη  (rigid):
– πάντα  μία  πράξη,  3  τελεσταίοι  (operands)
– 1ος  τελεσταίος  είναι  ο  προορισμός  (deshnahon  operand)  
– 2ος  τελεσταίος  είναι  η  1η  πηγή  (1st source  operand)  
– 3ος  τελεσταίος  είναι  η  2η  πηγή  (2nd  source  operand)  
– η  σειρά  των  πηγών  έχει  σημασία  για  πράξεις  όπως  η  αφαίρεση  
! Γιατί  η  ακαμψία;  
– η  ομοιομορφία  απλοποιεί  την  υλοποίηση  
[http://ecourse.uoi.gr/pluginfile.php/83126/mod_resource/content/5/l03_MIPS_Intro.pdf]

lamips'sentence.LOAD-STORE-instruction

name::
* McsEngl.lamips'sentence.LOAD-STORE-instruction@cptIt,

Load / Store Instructions
load:

 lw  register_destination, RAM_source
#copy word (4 bytes) at source RAM location to destination register.

 lb  register_destination, RAM_source
#copy byte at source RAM location to low-order byte of destination register,
# and sign-e.g.tend to higher-order bytes

store word:

 sw  register_source, RAM_destination
#store word in source register into RAM destination

 sb  register_source, RAM_destination
#store byte (low-order) in source register into RAM destination

load immediate:

 li  register_destination, value
#load immediate value into destination register



example:
 .data
var1:  .word  23    # declare storage for var1; initial value is 23

 .text
__start:
 lw  $t0, var1    # load contents of RAM location into register $t0: $t0 = var1
 li  $t1, 5    # $t1 = 5 ("load immediate")
 sw  $t1, var1    # store contents of register $t1 into RAM: var1 = $t1
 done

lamips'sentence.ARITHMETIC-instruction

name::
* McsEngl.lamips'sentence.ARITHMETIC-instruction@cptIt,

Arithmetic Instructions
most use 3 operands
all operands are registers; no RAM or indirect addressing
operand size is word (4 bytes)
   add  $t0,$t1,$t2  # $t0 = $t1 + $t2; add as signed (2's complement) integers
   sub  $t2,$t3,$t4  # $t2 = $t3 Π $t4
   addi  $t2,$t3, 5  # $t2 = $t3 + 5; "add immediate" (no sub immediate)
   addu  $t1,$t6,$t7  # $t1 = $t6 + $t7; add as unsigned integers
   subu  $t1,$t6,$t7  # $t1 = $t6 + $t7; subtract as unsigned integers

   mult  $t3,$t4  # multiply 32-bit quantities in $t3 and $t4, and store 64-bit
         # result in special registers Lo and Hi: (Hi,Lo) = $t3 * $t4
   div  $t5,$t6  # Lo = $t5 / $t6 (integer quotient)
         # Hi = $t5 mod $t6 (remainder)
   mfhi  $t0    # move quantity in special register Hi to $t0: $t0 = Hi
   mflo  $t1    # move quantity in special register Lo to $t1: $t1 = Lo
         # used to get at result of product or quotient

   move  $t2,$t3  # $t2 = $t3
[http://logos.cs.uic.edu/366/notes/mips%20quick%20tutorial.htm]

 add  a,  b      #  a  =  a  +  b

lamips'sentence.DIRECTIVE

name::
* McsEngl.lamips'sentence.DIRECTIVE@cptIt,

lamips'glob

name::
* McsEngl.lamips'glob@cptIt,

_DESCRIPTION:
.globl main is another directive. It says that the identifier main will be used outside of this source file (that is, used "globally") as the label of a particular location in main memory.
[http://chortle.ccsu.edu/assemblytutorial/Chapter-09/ass09_12.html]

lamips'text

name::
* McsEngl.lamips'text@cptIt,

_DESCRIPTION:
.text is a directive. A directive is a statement that tells the assembler something about what the programmer wants, but does not itself result in any machine instructions. This directive tells the assembler that the following lines are ".text" -- source code for the program.
[http://chortle.ccsu.edu/assemblytutorial/Chapter-09/ass09_12.html]

lamips'sentence.SUDO-INSTRUCTION

name::
* McsEngl.lamips'sentence.SUDO-INSTRUCTION@cptIt,

lamips'PROGRAM

name::
* McsEngl.lamips'PROGRAM@cptIt,

_DESCRIPTION:
Template for a MIPS assembly language program:
# Comment giving name of program and description of function
# Template.s
# Bare-bones outline of MIPS assembly language program

.data # variable declarations follow this line
# ...

.text # instructions follow this line  

main: # indicates start of code (first instruction to execute)
# ...

# End of program, leave a blank line afterwards to make SPIM happy
[http://logos.cs.uic.edu/366/notes/mips%20quick%20tutorial.htm]
===
## Program to add two plus three
.text
.globl main

main:
ori $8,$0,0x2 # put two's comp. two into register 8
ori $9,$0,0x3 # put two's comp. three into register 9
addu $10,$8,$9 # add register 8 and 9, put result in 10

## End of file

lamips'Data-declarations

name::
* McsEngl.lamips'Data-declarations@cptIt,

_DESCRIPTION:
Data Declarations

format for declarations:

name:  storage_type  value(s)  
create storage for variable of specified type with given name and specified value
value(s) usually gives initial value(s); for storage type .space, gives number of spaces to be allocated
Note: labels always followed by colon ( : )

example
 
var1:    .word  3  # create a single integer variable with initial value 3
array1:    .byte  'a','b'  # create a 2-element character array with elements initialized
       # to a and b
array2:    .space  40  # allocate 40 consecutive bytes, with storage uninitialized
       # could be used as a 40-element character array, or a
       # 10-element integer array; a comment should indicate which!  
[http://logos.cs.uic.edu/366/notes/mips%20quick%20tutorial.htm]

lamips'Tool

name::
* McsEngl.lamips'Tool@cptIt,

lamips'MARS

name::
* McsEngl.lamips'MARS@cptIt,

_ADDRESS.WPG:
* http://courses.missouristate.edu/KenVollmar/MARS/index.htm,

lamips'Resource

name::
* McsEngl.lamips'Resource@cptIt,

_ADDRESS.WPG:
* http://spimsimulator.sourceforge.net//
* http://logos.cs.uic.edu/366/notes/mips%20quick%20tutorial.htm,
* {2015.08} http://chortle.ccsu.edu/assemblytutorial//

lcp.level.LOW

name::
* McsEngl.lcp.level.LOW@cptIt,
* McsEngl.lcp.level.low@cptIt,
* McsEngl.low-level-pcl@cptIt,
* McsEngl.low-level-programing-language@cptIt,

_DEFINITION:
In computer science, a low-level programming language is a language that provides little or no abstraction from a computer's microprocessor. The word "low" does not imply that the language is inferior to high-level programming languages but rather refers to the small or nonexistent amount of abstraction between the language and machine language; because of this, low-level languages are sometimes described as being "close to the hardware."
"High-level" and "low-level" are relative terms; a Java programmer might consider C to be a low-level language, whereas someone who writes assembly would consider C to be high-level.
Low-level programming languages are sometimes divided into two categories: first generation, and second generation.
[http://en.wikipedia.org/wiki/Low-level_programming_language]

_SPECIFIC:
Generally this refers to either machine code or assembly language.
...
Low-level programming languages are sometimes divided into two categories: first generation, and second generation.
[http://en.wikipedia.org/wiki/Low-level_programming_language]

lcp.level.MEDIUM

_CREATED: {2017-03-09}

name::
* McsEngl.lcp.level.MEDIUM@cptIt,
* McsEngl.medium-level-pcl@cptIt,
* McsEngl.medium-level-programing-language@cptIt,
* McsEngl.middle-level-programing-language@cptIt,
* McsEngl.lcp.level.medium@cptIt,

_DESCRIPTION:
In computer science, a high-level programming language is a programming language with strong abstraction from the details of the computer.
In comparison to low-level programming languages, it may use natural language elements, be easier to use, or may automate (or even hide entirely) significant areas of computing systems (e.g. memory management), making the process of developing a program simpler and more understandable relative to a lower-level language.
The amount of abstraction provided defines how "high-level" a programming language is.[1]
In the 1960s, high-level programming languages using a compiler were commonly called autocodes.[2]
Examples of autocodes are COBOL and Fortran.[3]
The first high-level programming language designed for computers was Plankalkόl, created by Konrad Zuse.[4]
However, it was not implemented in his time, and his original contributions were (due to World War II) largely isolated from other developments, although it influenced Heinz Rutishauser's language "Superplan" (and to some degree also Algol).
The first really widespread high-level language was Fortran, a machine independent development of IBM's earlier Autocode systems.
Algol, defined in 1958 and 1960, by committees of European and American computer scientists, introduced recursion as well as nested functions under lexical scope.
It was also the first language with a clear distinction between value and name-parameters and their corresponding semantics.[5]
Algol also introduced several structured programming concepts, such as the while-do and if-then-else constructs and its syntax was the first to be described by a formal method, Backus–Naur form (BNF).
During roughly the same period Cobol introduced records (also called structs) and Lisp introduced a fully general lambda abstraction in a programming language for the first time.
[https://en.wikipedia.org/wiki/High-level_programming_language]

lcp.level.HIGH

name::
* McsEngl.lcp.level.HIGH@cptIt,
* McsEngl.high-level-pcl@cptIt,
* McsEngl.high-level-programing-language@cptIt,
* McsEngl.lcp.level.high@cptIt,

_DESCRIPTION:
High-level-programing-language is a-programing-language that
- uses data and instrunctions similar to natural-languages and
- a-machine very abstract (display, storage, processor).
[hmnSngo.2017-03-09]

lcp.ARRAY-LANGUAGE

name::
* McsEngl.lcp.ARRAY-LANGUAGE@cptIt,
* McsEngl.array-pcl@cptIt,
* McsEngl.array-programming-language@cptIt,
* McsEngl.multidimensional-language@cptIt,
* McsEngl.vector-language@cptIt,

_DEFINITION:
In computer science, Array programming languages (also known as vector or multidimensional languages) generalize operations on scalars to apply transparently to vectors, matrices, and higher dimensional arrays.

APL, designed by Ken Iverson, was the first programming language to provide array programming capabilities.

The fundamental idea behind array programming is that operations apply at once to an entire set of values. This makes it a high-level programming model as it allows the programmer to think and operate on whole aggregates of data, without having to resort to explicit loops of individual scalar operations.
[http://en.wikipedia.org/wiki/Array_programming]

EXAMPLE:
To add to arrays:
- in non array languages:
PASCAL
for i:=1 to n do
for j:=1 to n do
a[i,j] := a[i,j] + b[i,j];
- in array_languages:
A := A + B

lcp.Configuration-method

name::
* McsEngl.lcp.Configuration-method@cptIt,
* McsEngl.configuration-file-format@cptIt458i,
* McsEngl.methodConfiguration@cptIt458i,

_DESCRIPTION:
It is a method for changing the processing-behavior of programs.
[hmnSngo.2011-08-31]

_SPECIFIC:
Recently, XML and YAML have become popular as configuration file formats. They have the advantages of having well-defined syntaxes, and tools to validate and verify the syntax of the files that are created in those formats.
...
Among the Unix variants, there are hundreds of configuration file formats. Each application or service may have a unique format. Historically, Unix operating system settings were often modified only by editing configuration files.
[http://en.wikipedia.org/wiki/Configuration_file]

lcp.DATA-STRUCTURED

_CREATED: {2014-01-19}

name::
* McsEngl.lcp.DATA-STRUCTURED@cptIt,
* McsEngl.data-structured-language@cptIt,

_DESCRIPTION:
In computing a data-structured language is a programming language in which the data structure is a main organizing principle, representation, model, for data and logic (code) alike, in which both are stored and operated upon, i.e., program data and logic are structured and operated on in the same way, by the same representation.

These are generally well suited to reflection and introspection, and are in some ways more consistent than many other languages. This makes them easier to learn, and to program in for those problems which naturally fit the language's data structure. Where this occurs, programming may become trivial. For those problems which do not naturally fit a language's data structure, programming may be no easier or even harder than in other languages.

In programs written in some data-structured languages, when an instance occurs of the type of data representation which forms the basis of the language, then such instance is treated as a special case of quoted program.

A similar concept based on consistency exists in some object-oriented languages, called "pure", which use a consistent object model: everything in them is treated uniformly as an object, from primitives such as characters and punctuation, all the way up to whole classes, prototypes, blocks, modules, etc.

Variants[edit]

Three main classes of data-structured languages exist, determined by the type of data structure on which they are based.

Array-based

A/A+
APL
J
K
Q
List-based

Joy
Lisp
Arc
Common Lisp
Dylan
Emacs Lisp
InterLisp
Logo
Scheme
ZetaLisp
Tcl
TRAC
Stack-based (open stacks)

Forth
Factor
Poplog via its implementation language POP-11
PostScript
Some languages can statically link data inline with instructions. These can be considered data-structured, in the most primitive way. Some Assembly languages can do this.

lcp.DECLARATIVE (what to do)

_CREATED: {1998-04-30}

name::
* McsEngl.lcp.DECLARATIVE (what to do)@cptIt,
* McsEngl.conceptIt248.6,
* McsEngl.declarative-langauge@cptIt248.6,
* McsEngl.discriptive-programing-language@cptIt, {2014-02-26}
* McsEngl.language.declarative@cptIt248.6,
* McsEngl.lcp.descriptive@cptIt,
* McsEngl.non-procedural-language@cptIt,
====== lagoGreek:
* McsElln.ΜΗ-ΔΙΑΔΙΚΑΣΙΑΚΗ-ΓΛΩΣΣΑ@cptIt, [Βακάλη κα, Ανάπτυξη Εφαρμογών γ'λυκείου, 1999 α'έκδοση, 128]

_DEFINITION:
Declarative programming describes what a program's logic accomplishes without describing how.
A very straightforward example of declarative programming can be demonstrated with SQL. We can query a database table (People) for people with the last name Smith like so:
SELECT * FROM People WHERE LastName = 'Smith'
This code is easy to read and describes what we want to accomplish. There is no description of how the result should be achieved. The computer takes care of that.
[https://auth0.com/blog/glossary-of-modern-javascript-concepts/]
===
In the introduction it has been said that Prolog is a declarative (or descriptive) language.
Programming in Prolog means describing the world.
[http://staff.science.uva.nl/~ulle/teaching/prolog/prolog.pdf]
===
Prolog is a programming language based on logic. Unlike other programming languages that you may have come across, it is declarative. This means that programmer attempts to describe what the problem is. This is different from procedural programming languages where the programmer describes how the problem is solved.
[http://www.computing.dcu.ie/~jhayes/Logic/tutorial1.html]
===
In computer science, declarative programming is a programming paradigm that expresses the logic of a computation without describing its control flow.[1] Many languages applying this style attempt to minimize or eliminate side effects by describing what the program should accomplish, rather than describing how to go about accomplishing it.[2] This is in contrast with imperative programming, which requires an explicitly provided algorithm.
Declarative programming often considers programs as theories of a formal logic, and computations as deductions in that logic space. Declarative programming has become of particular interest recently, as it may greatly simplify writing parallel programs.[3]
Common declarative languages include those of regular expressions, logic programming, and functional programming.
[http://en.wikipedia.org/wiki/Declarative_programming]
===
* Declarative languages describe a problem rather than defining a solution. Declarative programming stands in contrast to imperative programming via imperative programming languages, where serial orders (imperatives) are given to a computer. In addition to the examples given just below, all (pure) functional and logic-based programming languages are also declarative. In fact, "functional" and "logical" constitute the usual subcategories of the declarative category.
[http://en.wikipedia.org/wiki/Categorical_list_of_programming_languages#Declarative_languages]
===
A general term for a {relational language} or a {functional language}, as opposed to an {imperative language}.
Imperative (or procedural) languages specify explicit sequences of steps to follow to produce a result,
while declarative languages describe relationships between variables in terms of functions or {inference rule}s and the language executor ({interpreter} or {compiler}) applies some fixed {algorithm} to these relations to produce a result.
The most common examples of declarative languages are {logic programming languages} such as {Prolog} and {functional language}s like {Haskell}.
[FOLDOC 1998feb] {1998-04-30}

_SPECIFIC:
* FUNCTIONAL_LANGAUGE
* LOGIC_LANGUAGE
===
* ABSET
* Analytica
* Lustre
* MetaPost
* Prolog
* SQL#cptItsoft347#
* XSL Transformations

lcp.DISTRIBUTED

name::
* McsEngl.lcp.DISTRIBUTED@cptIt,

lcp.DOMAIN-SPECIFIC-PROGRAMING-LANGUAGE

name::
* McsEngl.lcp.DOMAIN-SPECIFIC-PROGRAMING-LANGUAGE@cptIt,
* McsEngl.domain-specific-programing-langauge@cptIt,
* McsEngl.DSL@cptIt,

_GENERIC:
* domain-specific-cmrlng#linkL#

_DESCRIPTION:
A domain-specific programming language (domain-specific language, DSL) is a programming language designed for, and intended to be useful for, a specific kind of task. This is in contrast to a general-purpose programming language, such as C or general-purpose modeling languages like UML. Examples of DSLs include spreadsheet macros, YACC grammars for creating parsers, regular expressions, Generic Eclipse Modeling System for creating diagramming languages, Csound, a language used to create audio files, and GraphViz, a language used to define and create visual representations for directed graphs. Creating a language such a DSL while developing a system is a way of Language Oriented Programming.

DSLs have also been called by various names:

* Little languages
* Macros (in reference to the macro feature found in spreadsheets, word processors, and other applications, and not to the powerful programming language macros, which are frequently employed to implement DSLs)
* Application languages
* Problem-oriented languages

DSLs focus on doing one kind of task well. For instance, GraphViz is designed to create images of graphs in a variety of formats, but GraphViz lacks the capability to perform some basic tasks, e.g., accessing a network socket, receiving additional user input, or manipulating strings.
[http://en.wikipedia.org/wiki/Domain-specific_programming_language]

SPECIFIC

name::
* McsEngl.lcp.dsl.specific@cptIt,

_SPECIFIC:

lcp.DOMAIN-SPECIFIC.NO (general-purpose)

name::
* McsEngl.lcp.DOMAIN-SPECIFIC.NO (general-purpose)@cptIt,
* McsEngl.general'purpose'programing'language@cptIt,
* McsEngl.pgmlng.general-purpose@cptIt,

lcp.domain.TEXT-PROCESSING

name::
* McsEngl.lcp.domain.TEXT-PROCESSING@cptIt,
* McsEngl.text-manipulation-language@cptIt, {2007-12-28}
* McsEngl.text-based-processing-programing-language@cptIt,
* McsEngl.text--processing-languagel@cptIt24ii,

_DESCRIPTION:
Text processing languages
The processing of text-based records is one of the oldest uses of scripting languages. Many, such as Unix's awk and, later, Perl, were originally designed to aid system administrators in automating tasks that involved Unix text-based configuration and log files. Perl is a special case -- originally intended as a report-generation language, it has grown into a full-fledged applications language in its own right.
* AWK
* Perl
* sed
* XSLT
[http://en.wikipedia.org/wiki/Scripting_language]

_SPECIFIC:
* AWK##
* PERL#cptIt#

* SNOBOL was widely used in the 1970s and 1980s as a text manipulation language in the humanities, but in recent years, its popularity has faded as newer languages such as Awk and Perl have made string manipulation by means of regular expressions popular; it is now mostly a special interest language used mainly by enthusiasts, and new implementations are rare.
[http://en.wikipedia.org/wiki/Snobol]

lcp.DYNAMICALLY-TYPED (runtime type check| staticNo)

name::
* McsEngl.lcp.DYNAMICALLY-TYPED (runtime type check| staticNo)@cptIt,
* McsEngl.dynamically-typed-pgmlng@cptIt,
* McsEngl.dynamic-pgmlng@cptIt,
* McsEngl.lcp.DYNAMICALLY-TYPED@cptIt,
* McsEngl.pgmlng.dynamically-typed@cptIt,
* McsEngl.dynamically'typed'programmingLanguage@cptIt,
* McsEngl.lcp.TYPED.NO@cptIt,
* McsEngl.lcp.dynamic@cptIt,
* McsEngl.untyped-programming-language@cptIt,
* McsEngl.lcp.STRONGLY-TYPED@cptIt,
* McsEngl.strongly-typed-programmingLanguage@cptIt,

_DESCRIPTION:
In the context of language semantics and type systems, static usually means “at compile time” or “without running a program,” while dynamic means “at runtime.”
[http://www.2ality.com/2014/10/typed-javascript.html]
===
In contrast, an untyped language, such as most assembly languages, allows any operation to be performed on any data, which are generally considered to be sequences of bits of various lengths.[12] High-level languages which are untyped include BCPL and some varieties of Forth.
[http://en.wikipedia.org/wiki/Programming_language]
===
The Java programming language is strongly typed, which means that every variable and every expression has a type that is known at compile time. Types limit the values that a variable (§2.5) can hold or that an expression can produce, limit the operations supported on those values, and determine the meaning of those operations. Strong typing helps detect errors at compile time.
[spec jvm 2, 1999]
===
However, historically, if the type of a value is known only at run-time; these languages are dynamically typed.
[http://en.wikipedia.org/wiki/Type_inference]
===
Dynamic programming language is a term used in computer science to describe a class of high-level programming languages which, at runtime, execute many common programming behaviors that static programming languages perform during compilation. These behaviors could include extension of the program, by adding new code, by extending objects and definitions, or by modifying the type system. These behaviors can be emulated in nearly any language of sufficient complexity, but dynamic languages provide direct tools to make use of them. Many of these features were first implemented as native features in the Lisp programming language.
Most dynamic languages are also dynamically typed, but not all are. Dynamic languages can be (but not always) frequently referred to as "scripting languages", though that article narrowly refers to languages specific to a given environment.
[http://en.wikipedia.org/wiki/Dynamic_programming_language]
===
As with type-inferred languages, dynamically typed languages do not require the programmer to write explicit type annotations on expressions. Among other things, this may permit a single variable to refer to values of different types at different points in the program execution. However, type errors cannot be automatically detected until a piece of code is actually executed, making debugging more difficult. Ruby, Lisp, JavaScript, and Python are dynamically typed.
[http://en.wikipedia.org/wiki/Programming_language]
===
A dynamic language is one where the type of the objects is only loosely bound to the way it was created. Objects may be created through a constructor method and inherit from a base class or a prototype but that doesn't mean that the object is locked for alterations.
Code can, at any time, add, remove or modify existing properties or methods of the objects. For that reason the base type of an object is less important in a dynamic language than it is in a statically typed language like Java or C#.
[http://www.learn-javascript-tutorial.com/ObjectOrientedJS.cfm#simple-obj]

_RELATION:
Most dynamic languages are also dynamically typed, but not all are.
[http://en.wikipedia.org/wiki/Dynamic_programming_language]

lcp.DYNAMICALLY-TYPED.NO (compiletime type check | static)

name::
* McsEngl.lcp.DYNAMICALLY-TYPED.NO (compiletime type check | static)@cptIt,
* McsEngl.statically-typed-language@cptIt,
* McsEngl.dynamicNo-pgmlng@cptIt,
* McsEngl.pgmlng.static@cptIt,
* McsEngl.lcp.TYPED@cptIt,
* McsEngl.typed-programming-language@cptIt,

* McsEngl.lcp.WEAK-TYPED@cptIt,
* McsEngl.weak-typed-programmingLanguage@cptIt,

_DESCRIPTION:
Weak typing allows a value of one type to be treated as another, for example treating a string as a number.[12] This can occasionally be useful, but it can also allow some kinds of program faults to go undetected at compile time.
[http://en.wikipedia.org/wiki/Programming_language]
===
In the context of language semantics and type systems, static usually means “at compile time” or “without running a program,” while dynamic means “at runtime.”
[http://www.2ality.com/2014/10/typed-javascript.html]
===
A language is typed if operations defined for one data type cannot be performed on values of another data type.[12] For example, "this text between the quotes" is a string. In most programming languages, dividing a number by a string has no meaning.
12. Andrew Cooke. An Introduction to Programming Languages. Retrieved on June 30, 2006.
[http://en.wikipedia.org/wiki/Programming_language]

lcp.EDUCATIONAL

name::
* McsEngl.lcp.EDUCATIONAL@cptIt,
* McsEngl.educational-programing-language@cptIt,
* McsEngl.pgmlng.educational@cptIt,

_DEFINITION:
An educational programming language is a programming language that is designed primarily as a learning instrument and not so much as a tool for writing real-world application programs.
[http://en.wikipedia.org/wiki/Educational_programming_language]

lcp.ESOTERIC

name::
* McsEngl.lcp.ESOTERIC@cptIt,
* McsEngl.esolang@cptIt,
* McsEngl.esoteric-pgmlng@cptIt,

_DESCRIPTION:
An esoteric programming language (sometimes shortened to esolang) is a programming language designed to test the boundaries of computer programming language design, as a proof of concept, or as a joke. The use of esoteric distinguishes these languages from programming languages that working developers use to write software. Usually, an esolang's creators do not intend the language to be used for mainstream programming, although some esoteric features, such as visuospatial syntax,[1] have inspired practical applications in the arts. Such languages are often popular among hackers and hobbyists.

Usability is rarely a goal for esoteric programming language designers—often it is quite the opposite. Their usual aim is to remove or replace conventional language features while still maintaining a language that is Turing-complete, or even one for which the computational class is unknown.
[http://en.wikipedia.org/wiki/Esoteric_programming_language]

lcp.EVENT-DRIVING

name::
* McsEngl.lcp.EVENT-DRIVING@cptIt,
* McsEngl.event-driven-programming@cptIt,
* McsEngl.event'driven'programming@cptIt1048,
* McsEngl.programming.event'driven@cptIt1048,
* McsElln.ΓΕΓΟΝΟΣΤΡΑΦΗΣ-ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ@cptIt,

_DEFINITION:
In the 1980's EVENT DRIVEN PROGRAMMING was popular. This style of programming should be very familiar to Macintosh and Windows programmers. In those environments program logic doesn't flow from the top to the bottom of the program as it does in most PROCEDURAL CODE. Rather the operating system collects EVENTS and the program responds to them. These events may be mouse clicks, keypresses, network data arriving on the Ethernet port, or any of about a dozen other possibilities. The operating system looks at each event, determines what program it was intended for, and places the event in the appropriate program's EVENT QUEUE.
Every application-program has an EVENT LOOP. This is just a while loop which loops continously. On every passthrough the loop the application retrieves the next event from event queue and responds accordingly.
[E.R. HAROLD, Java Tutorial, {1996-11-20}]

lcp.FUNCTION-LEVEL

name::
* McsEngl.lcp.FUNCTION-LEVEL@cptIt,
* McsEngl.function-level-pcl@cptIt,

_DEFINITION:
Function-level programming refers to one of the two contrasting programming paradigms identified by John Backus in his work on programs as mathematical objects, the other being value-level programming.

In his 1977 Turing award lecture, Backus set forth what he considered to be the need to switch to a different philosophy in programming language design:

"Programming languages appear to be in trouble. Each successive language incorporates, with a little cleaning up, all the features of its predecessors plus a few more. [...] Each new language claims new and fashionable features... but the plain fact is that few languages make programming sufficiently cheaper or more reliable to justify the cost of producing and learning to use them."

He designed FP to be the first programming language to specifically support the function-level programming style.

A function-level program is variable-free, since program variables, which are essential in value-level definitions, are not needed in function-level ones.

In the function-level style of programming, a program is built directly from programs that are given at the outset, by combining them with program-forming operations or functionals. Thus, in contrast with the value-level approach that applies the given programs to values to form a succession of values culminating in the desired result value, the function-level approach applies program-forming operations to the given programs to form a succession of programs culminating in the desired result program.

As a result, the function-level approach to programming invites study of the space of programs under program-forming operations, looking to derive useful algebraic properties of these program-forming operations. The function-level approach offers the possibility of making the set of programs a mathematical space by emphasizing the algebraic properties of the program-forming operations over the space of programs.

Another potential advantage of the function-level view is the ability to use only strict functions and thereby have bottom-up semantics, which are the simplest kind of all. Yet another is the existence of function level definitions that are not the lifted (that is, lifted from a lower value-level to a higher function-level) image of any existing value-level one: these (often terse) function-level definitions represent a more powerful style of programming not available at the value-level and, arguably, are often easier to understand and reason about.
[http://en.wikipedia.org/wiki/Function-level_programming]

lcp.FUNCTIONAL

_CREATED: {2011-10-04}

NAME

name::
* McsEngl.lcp.FUNCTIONAL@cptIt,
* McsEngl.conceptIt269,
* McsEngl.fl@cptIt269, {2011-10-04}
* McsEngl.functional-language@cptIt269, {2011-10-04}
* McsEngl.functional-programming-language@cptIt269, {2011-10-04}
* McsEngl.functional-language@cptIt458i,
* McsEngl.functional'programming'language@cptIt458i,
* McsEngl.language.functional@cptIt458i,

DEFINITION

_DEFINITION:
Opinions differ, even within the functional programming community, on the precise definition of what constitutes a functional programming language. However, here is a definition that, broadly speaking, represents the kind of languages that are discussed in comp.lang.functional:
Functional programming is a style of programming that emphasizes the evaluation of expressions, rather than execution of commands. The expressions in these language are formed by using functions to combine basic values. A functional language is a language that supports and encourages programming in a functional style.
[Frequently Asked Questions for comp.lang.functional]
===
In computer science, functional programming is a programming paradigm that treats computation as the evaluation of mathematical functions and avoids state and mutable data. It emphasizes the application of functions, in contrast to the imperative programming style, which emphasizes changes in state.[1] Functional programming has its roots in lambda calculus, a formal system developed in the 1930s to investigate function definition, function application, and recursion. Many functional programming languages can be viewed as elaborations on the lambda calculus.[1]

In practice, the difference between a mathematical function and the notion of a "function" used in imperative programming is that imperative functions can have side effects, changing the value of program state. Because of this they lack referential transparency, i.e. the same language expression can result in different values at different times depending on the state of the executing program. Conversely, in functional code, the output value of a function depends only on the arguments that are input to the function, so calling a function f twice with the same value for an argument x will produce the same result f(x) both times. Eliminating side effects can make it much easier to understand and predict the behavior of a program, which is one of the key motivations for the development of functional programming.[1]

Functional programming languages, especially purely functional ones, have largely been emphasized in academia rather than in commercial software development. However, prominent functional programming languages such as Scheme,[2][3][4][5] Clojure, Racket,[6] Erlang,[7][8][9] Objective Caml,[10][11] Haskell[12][13] and F#[14][15] have been used in industrial and commercial applications by a wide variety of organizations. Functional programming is also supported in some domain-specific programming languages like R (statistics),[16][17] Mathematica (symbolic math),[18] J and K (financial analysis)[citation needed] and XQuery/XSLT (XML).[19][20] Widespread domain-specific declarative languages like SQL and Lex/Yacc use some elements of functional programming, especially in eschewing mutable values.[21] Spreadsheets can also be viewed as functional programming languages.[22]

Programming in a functional style can also be accomplished in languages that aren't specifically designed for functional programming. For example, the imperative Perl programming language has been the subject of a book describing how to apply functional programming concepts.[23]
[http://en.wikipedia.org/wiki/Functional_programming]

_DESCRIPTION:
Συναρτησιακές γλώσσες (functional) όπου οι υπολογισμοί εκφράζονται ως εφαρμογές μαθηματικών συναρτήσεων, σε αντίθεση με τα άλλα είδη προγραμματισμού όπου οι υπολογισμοί εκφράζονται ως σειρές εντολών, όπου η κάθε μία αλλάζει με κάποιο τρόπο την κατάσταση του συστήματος. Θεωρητικό τους υπόβαθρο είναι ο λ-λογισμός. Χαρακτηριστικές συναρτησιακές γλώσσες είναι η Lisp, η Haskell και η OCaml.
[http://el.wikipedia.org/wiki/Γλώσσα_προγραμματισμού]

fl'GENERIC

_GENERIC:
* programming_language#cptItsoft248#

fl'ATTRIBUTE

name::
* McsEngl.fl'ATTRIBUTE@cptIt,

_ATTRIBUTE:
* Functional programming languages, such as Haskell, are not a sequence of statements and have no global state as imperative languages do.
[http://en.wikipedia.org/wiki/Imperative_programming]

* For instance, pure functional programming disallows the use of side-effects;
[http://en.wikipedia.org/wiki/Programming_paradigm]

pure-functions

A function is pure if:
it always returns the same output for the same input
AND
it has no side effect
In other words, pure functions map inputs to outputs.
The caller and the pure function may only communicate via arguments and return value:

// impure (using side effect instead of return value)
function addTaco(array) {
array.push("taco");
}

// impure (using shared variable instead of argument)
function addTaco() {
return [...globalArray, "taco"];
}

// pure
function addTaco(array) {
return [...array, "taco"];
}
[https://medium.com/@alexnault/functional-programming-with-javascript-in-3-tips-f282934947e5]

favor-immutability

// mutable
const bands = ["Metallica", "Queen"];
bands.push("Nirvana");

// immutable
const someBands = ["Metallica", "Queen"];
const bands = [...someBands, "Nirvana"];

[https://medium.com/@alexnault/functional-programming-with-javascript-in-3-tips-f282934947e5]

Favor-Declarative-Patterns

Declarative programming describes WHAT we want to achieve.
Imperative programming describes HOW we want to achieve it.
const names = ["Han", "Chewbacca", "Luke", "Leia"];

// imperative
const shortNames = [];
for (let i = 0; i < names.length; i++) {
if (names[i].length < 5) {
shortNames.push(names[i]);
}
}

// declarative
const shortNames = names.filter(name => name.length < 5);
[https://medium.com/@alexnault/functional-programming-with-javascript-in-3-tips-f282934947e5]

fl'expression

name::
* McsEngl.fl'expression@cptIt,

fl'Function

name::
* McsEngl.fl'Function@cptIt,

fl'function.Recursive

name::
* McsEngl.fl'function.Recursive@cptIt,
* McsEngl.fl'recursion@cptIt,

fl'use-in-industry

name::
* McsEngl.fl'use-in-industry@cptIt,

_DESCRIPTION:
Use in industry[edit]
Functional programming has long been popular in academia, but with few industrial applications.[54]:page 11 However, recently several prominent functional programming languages have been used in commercial or industrial systems. For example, the Erlang programming language, which was developed by the Swedish company Ericsson in the late 1980s, was originally used to implement fault-tolerant telecommunications systems.[8] It has since become popular for building a range of applications at companies such as T-Mobile, Nortel, Facebook, Ιlectricitι de France and WhatsApp.[7][9][55][56][57] The Scheme dialect of Lisp was used as the basis for several applications on early Apple Macintosh computers,[2][3] and has more recently been applied to problems such as training simulation software[4] and telescope control.[5] OCaml, which was introduced in the mid-1990s, has seen commercial use in areas such as financial analysis,[10] driver verification, industrial robot programming, and static analysis of embedded software.[11] Haskell, although initially intended as a research language,[13] has also been applied by a range of companies, in areas such as aerospace systems, hardware design, and web programming.[12][13]

Other functional programming languages that have seen use in industry include Scala (which is a hybrid functional-OO language and has support for both purely functional and imperative programming),[58] F#,[15][16] Lisp,[59] Standard ML,[60][61] and Clojure.[62]
[http://en.wikipedia.org/wiki/Functional_program]

SPECIFIC

fl.specific,

_SPECIFIC: ALPHABETICALLY:
* Clojure,
* Erlang,
* Haskell,
* F#,
* Haskell,
* Lisp#cptIt360#
* Objective Caml,
* Racket,
* Scheme,

_SPECIFIC:
Popular functional programming languages include Clojure, Common Lisp, Erlang, F#, Haskell, ML, OCaml, Scheme and Scala. Clojure and Scala were written to run on the Java Virtual Machine (JVM). Other functional programming languages that have implementations that run on the JVM include: Armed Bear Common Lisp (ABCL), OCaml-Java and Kawa (Scheme).
[http://java.ociweb.com/mark/clojure/article.html#FP]

fl'Haskell

name::
* McsEngl.fl'Haskell@cptIt,
* McsEngl.Haskell.programing-language@cptIt,

Haskel'resourse

name::
* McsEngl.Haskel'resourse@cptIt,

_ADDRESS.WPG:
* http://haskell-for-readers.nomeata.de/,

lcp.generation.FIRST#ql:machine_language#

name::
* McsEngl.lcp.generation.FIRST@cptIt,

lcp.generation.SECOND (assembly lasm)#ql:assembly-language#

name::
* McsEngl.lcp.generation.SECOND (assembly lasm)@cptIt,

lcp.generation.THIRD

name::
* McsEngl.lcp.generation.THIRD@cptIt,
* McsEngl.3GL@cptIt,
* McsEngl.third-generation-computer-language@cptIt,
* McsEngl.third-generation-pcl@cptIt,
* McsEngl.third-generation-programming-language@cptIt,
* McsEngl.language.third-generation@cptIt,

_DEFINITION:
Assembly language was still a bear to deal with, especially as related to arrays and storage in memory. Therefore the first high-level programming language, Fortran, was invented to spare programmers from the pains of dealing with keeping track of the location of their variables in memory. (It's interesting to note that this lesson has had to be learned again and again and again. The buggiest parts of C and C++ programs result from programmers being allowed to access arbitrary bytes of memory. Java has wisely removed this capability. 99 times out of a 100 you don't need it. A large part of training a C or C++ programmer to use Java, consists of covincing them of this fact.). Fortran was the first example of a third-generation language. In a third generation language you tell the computer the algorithms and data strcutures it should use to calculate the results you want; but you use more abstract logical and mathematical operators rather than directly manipulating addresses in memory and CPU instructions. In a third generation language, statements represent several machine instructions. Which instructions they represent may even depend on their context.
These languages may be compiled or interpreted. In either case your program code needs to be translated into equivalent machine instructions. This level of abstraction made considerably more powerful algorithms and data structures possible.
[E.R. HAROLD, Java Tutorial, {1996-11-20}]

2GL refers to assembly language programming, and 3GL then refers to all the third generation programming languages such as BASIC, COBOL, FORTRAN, Pascal, C, Ada, etc. where the source code is compiled to create an executable program file or application package.
[SOURCE: PC-GLOSSARY 1993]

EVALUATION#cptCore546.107#

Of all these languages there's no question that 3GL's have been the most successful by almost any measure. A number of different styles of 3GL programming and programming languages have sprung up, most learning from the experience and mistakes of its predecessors.
[E.R. HAROLD, Java Tutorial, {1996-11-20}]

SPECIFEINO

Java is a very advanced third generation language. Most of the other computer languages you're probably familiar with, Fortran, basic, C, C++, Cobol, Pascal, as well as most of the one's you're not familiar with (AppleScript, Frontier, Eiffel, Modula-3, ADA, PL/I, etc.) are also third-generation languages (or 3GL's for short).
[E.R. HAROLD, Java Tutorial, {1996-11-20}]

lcp.generation.FOURTH

name::
* McsEngl.lcp.generation.FOURTH@cptIt,
* McsEngl.4GL@cptIt,
* McsEngl.fourth-generation-computer-language@cptIt,
* McsEngl.forth-generation-pcl@cptIt,
* McsEngl.fourth-generation-programming-language@cptIt,
* McsEngl.language.fourth-generation@cptIt,

_DEFINITION:
When third generation languages were invented, they were supposed to make computers so easy to use even the CEO could write programs. This turned out not to be true. Fourth generation languages (or 4GL's for short) moved the abstraction level a step higher. In these languages you tell the computer what results you want rather telling it how to calculate those results. For instance you would ask for the total sales for the year, without specifying the loops necessary to sum all the sales of all the salespeople.
SQL is the most popular fourth generation language.
[E.R. HAROLD, Java Tutorial, {1996-11-20}]

_SPECIFIC:
SQL

lcp.generation.FIFTH

name::
* McsEngl.lcp.generation.FIFTH@cptIt,
* McsEngl.fifth-generation-pcl@cptIt,
* McsEngl.fith-generation-language@cptIt,
====== lagoGreek:
* McsEngl.5ης-ΓΕΝΝΙΑ-ΓΛΩΣΣΑ-ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ@cptIt,
* McsElln.ΓΛΩΣΣΑ-ΓΝΩΣΕΩΝ@cptIt,
* McsElln.ΦΥΣΙΚΗ-ΓΛΩΣΣΑ@cptIt,

_DEFINITION:
ΦΥΣΙΚΕΣ ΓΛΩΣΣΕΣ είναι οι γλώσσες της 5ης γεννιάς που μοιάζουν με τις φυσικές γλώσσες του ανθρώπου και βρίσκονται σε εξέλιξη.
Οι γλώσσες αυτές απαλλάσσουν το χρήστη, ιδίως τον μή ειδικό, από κουραστικές εντολές και ονοματολογίες δεδομένων...
Οι φυσικές γλώσσες είναι γνωστές και ως γλώσσες γνώσεων γιατί τις περισσότερες φορές χρησιμοποιούνται ως μέσα διαλογικής επικοινωνίας σε Συστήματα Βασισμένα στη Γνώση.
[Εφαρμογές Πληροφορικής-Υπολογιστών α' β' γ' ενιαίου λυκείου, α' έκδοση 1998, 102]

lcp.GLUE

name::
* McsEngl.lcp.GLUE@cptIt,
* McsEngl.lcp.glue@cptIt,

_DESCRIPTION:
A glue language is a programming language (usually an interpreted scripting language) that is designed or suited for writing glue code – code to connect software components. They are especially useful for writing and maintaining:

Custom commands for a command shell
Smaller programmes than those that are better implemented in a compiled language
"Wrapper" programmes for executables, like a batch file that moves or manipulates files and does other things with the operating system before or after running an application like a word processor, spreadsheet, data base, assembler, compiler, etc.
Scripts that may change
Rapid prototypes of a solution eventually implemented in another, usually compiled, language.
Glue language examples:

Erlang
Unix Shell scripts (ksh, csh, bash, sh and others)
Windows PowerShell
ecl
DCL
Scheme
JCL
m4
VBScript
JScript and JavaScript
AppleScript
Python
Ruby
Lua
Tcl
Perl
PHP
Pure
REXX
XSLT
Macro languages exposed to operating system or application components can serve as glue languages. These include Visual Basic for Applications, WordBasic, LotusScript, CorelScript, PerfectScript, Hummingbird Basic, QuickScript, SaxBasic, and WinWrap Basic. Other tools like awk can also be considered glue languages, as can any language implemented by an ActiveX WSH engine (VBScript, JScript and VBA by default in Windows and third-party engines including implementations of Rexx, Perl, Tcl, Python, XSLT, Ruby, Delphi, &c). A majority of applications can access and use operating system components via the object models or its own functions.

Other devices like programmable calculators may also have glue languages; the operating systems of PDAs such as Windows CE may have available native or third-party macro tools that glue applications together, in addition to implementations of common glue languages—including Windows NT, MS-DOS and some Unix shells, Rexx, PHP, and Perl. Depending upon the OS version, WSH and the default script engines (VBScript and JScript) are available.

Programmable calculators can be programmed in glue languages in three ways. For example, the Texas Instruments TI-92, by factory default can be programmed with a command script language. Inclusion of the scripting and glue language Lua in the TI-NSpire series of calculators could be seen as a successor to this. The primary on-board high-level programming languages of most graphing calculators (most often Basic variants, sometimes Lisp derivatives, and more uncommonly, C derivatives) in many cases can glue together calculator functions—such as graphs, lists, matrices, etc. Third-party implementations of more comprehensive Basic version that may be closer to variants listed as glue languages in this article are available—and attempts to implement Perl, Rexx, or various operating system shells on the TI and HP graphing calculators are also mentioned. PC-based C cross-compilers for some of the TI and HP machines used in conjunction with tools that convert betwixt C and Perl, Rexx, awk, as well as shell scripts to Perl, VBScript to and from Perl make it possible to write a programme in a glue language for eventual implementation (as a compiled programme) on the calculator.
[http://en.wikipedia.org/wiki/Glue_language]

lcp.HOMOICONIC

_CREATED: {2014-01-26}

name::
* McsEngl.lcp.HOMOICONIC@cptIt,
* McsEngl.homoiconic-programming-language@cptIt,

_DESCRIPTION:
Lisp was the first homoiconic programming language: the primary representation of program code is the same type of list structure that is also used for the main data structures. As a result, Lisp functions can be manipulated, altered or even created within a Lisp program without extensive parsing or manipulation of binary machine code. This is generally considered one of the primary advantages of the language with regard to its expressive power, and makes the language amenable to metacircular evaluation.
[http://en.wikipedia.org/wiki/Lisp_(programming_language)]

lcp.IMPERATIVE (how to do)

name::
* McsEngl.lcp.IMPERATIVE (how to do)@cptIt,
* McsEngl.imperative-programming-language@cptIt,

_DESCRIPTION:
Imperative programming describes how a program's logic works in explicit commands with statements that modify the program state.
[https://auth0.com/blog/glossary-of-modern-javascript-concepts/]
===
In computer science, imperative programming is a programming paradigm that describes computation in terms of statements that change a program state. In much the same way that imperative mood in natural languages expresses commands to take action, imperative programs define sequences of commands for the computer to perform.

The term is used in opposition to declarative programming, which expresses what the program should accomplish without prescribing how to do it in terms of sequences of actions to be taken. Functional and logic programming are examples of a more declarative approach.
[http://en.wikipedia.org/wiki/Imperative_programming]

lcp.INTERFACE

_CREATED: {2013-09-22}

name::
* McsEngl.lcp.INTERFACE@cptIt,
* McsEngl.interface-language@cptIt,
* McsEngl.user-interface-language@cptIt,

_SPECIFIC:
* XUL#ql:ffx'xul#

lc.GRAPHICAL-USER-INTERFACE-LANGUAGE

_CREATED: {2013-09-22}

name::
* McsEngl.lc.GRAPHICAL-USER-INTERFACE-LANGUAGE@cptIt,
* McsEngl.GUI-language@cptIt,

gui'component

name::
* McsEngl.gui'component@cptIt,

_SPECIFIC:
* button,
* menu,

lcp.INTERMEDIATE

name::
* McsEngl.lcp.INTERMEDIATE@cptIt,
* McsEngl.intermediate-pcl@cptIt,

_DEFINITION:
In computer science, an intermediate language is the language of an abstract machine designed to aid in the analysis of computer programs. The term comes from their use in compilers, where a compiler first translates the source code of a program into a form more suitable for code-improving transformations, as an intermediate step before generating object or machine code for a target machine. The design of an intermediate language typically differs from that of a practical machine language in three fundamental ways:
* Each instruction represents exactly one fundamental operation; e.g. "shift-add" addressing modes common in microprocessors are not present.
* Control flow information may not be included in the instruction set.
* The number of registers available may be large, even limitless.

A popular format for intermediate languages is three address code.

A variation in the meaning of this term, is those languages used as an intermediate language by some high-level programming languages which do not output object or machine code, but output the intermediate language only, to submit to a compiler for such language, which then outputs finished object or machine code. This is usually done to gain optimization much as treated above, or portability by using an intermediate language that has compilers for many processors and operating systems, such as C. Languages used for this fall in complexity between high-level languages and low-level languages, such as assembly languages.
[http://en.wikipedia.org/wiki/Intermediate_language]

lcp.INTERPRETED (compiledNo)

name::
* McsEngl.lcp.INTERPRETED (compiledNo)@cptIt,
* McsEngl.conceptIt248.10,
* McsEngl.language.interpreted@cptIt1042,
* McsEngl.interpreted-computer-language@cptIt,
* McsEngl.interpreted'computer'language@cptIt1042,
* McsEngl.pgmlng.compiledNo@cptIt,
* McsEngl.pgmlng.executable.human-readable@cptIt,
* McsEngl.pgmlng.interpreted@cptIt,

_DESCRIPTION:

evaluation#cptCore546.107#

one of the main disadvantages of an interpreted language: its lack of speed.
[DSWgroup TUTORIAL, 1996]

Interpreted languages provide rapid turnaround during development by eliminating compile times. Interpreters also make applications more flexible by allowing users to program the applications at run-time. For example, many synthesis and analysis tools for integrated circuits include a Tcl interpreter; users of the programs write Tcl scripts to specify their designs and control the operation of the tools. Interpreters also allow powerful effects to be achieved by generating code on the fly. For example, a Tcl-based Web browser can parse a Web page by translating the HTML for the page into a Tcl script using a few regular expression substitutions. It then executes the Tcl script to render the page on the screen.
[John K. Ousterhout {1997-11-14}] 1998feb20

program

Programs in interpreted languages[1] are not translated into machine code; however, their interpreter (which may be seen as an executor or processor) typically consists of directly executable machine code (generated from assembly and/or high level language source code).
[http://en.wikipedia.org/wiki/Machine_language]

SPECIFIC

_SPECIFIC:
List of frequently used interpreted languages[edit]

APL A vector oriented language using an unusual character set
J An APL variant in which tacit definition provides some of the benefits of compiling
ASP Web page scripting language
BASIC (although the original version, Dartmouth BASIC, was compiled, as are many modern BASICs)
thinBasic
ECMAScript
ActionScript (version 3.0 is not interpreted, that's why eval() function was removed)
E4X
JavaScript (first named Mocha, then LiveScript)
JScript
Equation manipulation and solving systems
GNU Octave
Interactive Data Language (IDL)
Mathematica
MATLAB
Euphoria Interpreted or compiled.
Forth (traditionally threaded interpreted)
Game Maker Language
Lava
Madness Script
Perl
PHP
PostScript
Python
Lisp
Logo
Scheme
MUMPS (traditionally interpreted, modern versions compiled)
REXX
Ruby
JRuby (A Java implementation of Ruby)
Seed7 Interpreted or compiled.
Smalltalk (pure object-orientation, originally from Xerox PARC, often supports debugging across machines.)
Bistro
Dolphin Smalltalk
F-Script
Little Smalltalk
Squeak
VisualAge
VisualWorks
Scripting languages
WebDNA
Spreadsheets
Excel stores formulas, interprets them from a tokenized format
S
R
Tcl
XOTcl
XMLmosaic An xml contained C# like programming language interpreted by a console application written in Visual Basic .NET
[http://en.wikipedia.org/wiki/Interpreted_language]

lcp.INTERPRETED.NO (compiled)

name::
* McsEngl.lcp.INTERPRETED.NO (compiled)@cptIt,
* McsEngl.compiled-pl@cptIt,

_DESCRIPTION:
A compiled language is a programming language whose implementations are typically compilers (translators which generate machine code from source code), and not interpreters (step-by-step executors of source code, where no pre-runtime translation takes place).
The term is somewhat vague; in principle any language can be implemented with a compiler or with an interpreter. A combination of both solutions is also increasingly common: a compiler can translate the source code into some intermediate form (often called bytecode), which is then passed to an interpreter which executes it.
[http://en.wikipedia.org/wiki/Compiled_language]

lcp.compiled'relation-to-interpreted

name::
* McsEngl.lcp.compiled'relation-to-interpreted@cptIt,
* McsEngl.pgmlng.interpreted'relation-to-compiled@cptIt,

_DESCRIPTION:
COMPILED_LANGUAGE vs INTERPRETED_LANGUAGE:
Higher-level programming languages are generally divided for convenience into compiled languages and interpreted languages. However, there is rarely anything about a language that requires it to be exclusively compiled, or exclusively interpreted. The categorization usually reflects the most popular or widespread implementations of a language — for instance, BASIC is thought of as an interpreted language, and C a compiled one, despite the existence of BASIC compilers and C interpreters.
There are exceptions. Some language specifications spell out that implementations must include a compilation facility; for example, Common Lisp. Other languages have features that are very easy to implement in an interpreter, but make writing a compiler much harder; for example, APL, SNOBOL4, and many scripting languages allow programs to construct arbitrary source code at runtime with regular string operations, and then execute that code by passing it to a special evaluation function. To implement these features in a compiled language, programs must usually be shipped with a runtime library that includes a version of the compiler itself.
[http://en.wikipedia.org/wiki/Compiler]

SPECIFIC

_SPECIFIC:
Some languages that are commonly considered to be compiled:

Ada
ALGOL
Algol 60
Algol 68
SMALL
BASIC
C
C++
Objective-C
C# (to bytecode)
D
CLEO
COBOL
Cobra
Common Lisp
Delphi
Eiffel
Sather
Ubercode
Factor (later versions)
Forth
Fortran
Go
Haskell
Haxe (to bytecode)
IBM RPG
Java (to bytecode)
JOVIAL
G
Lisp
Lush
Mercury
ML
Standard ML
Alice
OCaml
Modula-2
Modula-3
Open-URQ
PureBasic
Pascal
PL/I
Rust
Seed7
Visual Basic
Visual Foxpro
Visual Prolog
[http://en.wikipedia.org/wiki/Compiled_language]

lcp.COMPILED-TO-JavaScript

name::
* McsEngl.lcp.COMPILED-TO-JavaScript@cptIt,

_ADDRESS.WPG:
* https://github.com/jashkenas/coffee-script/wiki/List-of-languages-that-compile-to-JS,

lcp.KNOWLEDGE

_CREATED: {2014-02-05} {2011-09-02} {2011-08-31}

name::
* McsEngl.lcp.KNOWLEDGE@cptIt,
* McsEngl.conceptIt525.1,
* McsEngl.lagKnlg.Processing-and-Representation@cptIt,
* McsEngl.mkpr@cptIt525.1, {2011-09-02}
* McsEngl.krpm@cptIt525.1, {2011-08-31}
* McsEngl.knowledge-processing-and-representation-method@cptIt525.1, {2011-08-31}
* McsEngl.knowledge-representation-and-processing-method@cptIt525.1, {2011-08-31}
* McsEngl.knowledge-management-method@cptIt525.1,

* McsEngl.lagKnlg.REPRESENTATION.NO-(processing)@cptIt,
* McsEngl.mkp@cptIt525.2, {2011-09-02}
* McsEngl.knowledge-processing-language@cptIt525.2, {2011-08-31}
* McsEngl.knowledge-processing-method@cptIt525.2, {2011-08-31}
* McsEngl.knllng.processing@cptIt,
* McsEngl.pgmlng.knowledge@cptIt,

_GENERIC:
* knowledge-method#cptItsoft525#

_DESCRIPTION:
It is a method that manages (represents AND processess) knowledge (data exept text and hypertext).
[hmnSngo.2011-08-31]

mkpr.SPECIFIC

name::
* McsEngl.mkpr.SPECIFIC@cptIt,

_SPECIFIC: mkpr.Alphabetically:
* description-logic#cptItsoft560#
* frame-method#cptItsoft475#
* logic-method
* quering-method
* reasoning-method

mkpr'Knowledge-base

name::
* McsEngl.mkpr'Knowledge-base@cptIt,

mkpr'Program

name::
* McsEngl.mkpr'Program@cptIt,

mkpr'Reasoning-engine

name::
* McsEngl.mkpr'Reasoning-engine@cptIt,

mkpr'Resource

name::
* McsEngl.mkpr'Resource@cptIt,

Knowledge Representation and Reasoning
Logic meets Probability Theory
Lecture Notes 2010–2011
BSc Programme on AI, Nijmegen
Peter Lucas
iCIS, Radboud University Nijmegen
Email: peterl@cs.ru.nl
7th December, 2010
* http://www.cs.ru.nl/~peterl/teaching/KeR/summary.pdf

mkpr'User-interface

name::
* McsEngl.mkpr'User-interface@cptIt,

lcp.LAMBDA-CALCULUS-BASED

name::
* McsEngl.lcp.LAMBDA-CALCULUS-BASED@cptIt,
* McsEngl.lambda-caluclus-based-pcl@cptIt,

_DEFINITION:
Lambda calculus-based languages (such as Lisp, ISWIM, and Scheme) are in actual practice value-level languages, although they are not thus restricted by design.
[http://en.wikipedia.org/wiki/Value-level_programming]

_SPECIFIC:
* LISP
* ISWIM
* SCHEME

lcp.LIST-BASED

name::
* McsEngl.lcp.LIST-BASED@cptIt,
* McsEngl.list-based-pcl@cptIt,

_SPECIFIC:
list-based programming languages like Lisp and Scheme.
[http://en.wikipedia.org/wiki/Tree_programming]

lcp.LOGIC {1969; 1972}

name::
* McsEngl.lcp.LOGIC {1969; 1972}@cptIt,
* McsEngl.logic-programing-language@cptIt, {2007-12-28}
* McsEngl.language.logic@cptIt458i,
* McsEngl.logic'language@cptIt458i,
* McsEngl.logic'programing@cptIt458i,
* McsEngl.logic-programing@cptIt,
* McsEngl.logical'programing@cptIt458i,

_DEFINITION:
Logic programming (which might better be called logical programming by analogy with mathematical programming and linear programming) is, in its broadest sense, the use of mathematical logic for computer programming. In this view of logic programming, which can be traced at least as far back as John McCarthy's [1958] advice-taker proposal, logic is used as a purely declarative representation language, and a theorem-prover or model-generator is used as the problem-solver. The problem-solving task is split between the programmer, who is responsible only for ensuring the truth of programs expressed in logical form, and the theorem-prover or model-generator, which is responsible for solving problems efficiently.

However, logic programming, in the narrower sense in which it is more commonly understood, is the use of logic as both a declarative and procedural representation language. It is based upon the fact that a backwards reasoning theorem-prover applied to declarative sentences in the form of implications
B1 and … and Bn implies H
treats the implications as goal-reduction procedures
to show/solve H, show/solve B1 and … and Bn.
The programmer is responsible, not only for ensuring the truth of programs, but also for ensuring their efficiency. In many cases, to achieve efficiency, the programmer needs to be aware of and to exploit the problem-solving behavior of the theorem-prover. In this respect, logic programming is like conventional imperative programming, using programs to control the behaviour of a program executor. However, unlike imperative programs, which have only a procedural interpretation, logic programs also have a declarative, logical interpretation, which helps to ensure their correctness. Moreover, such programs, being declarative, are at a higher conceptual level than purely imperative programs; and their program executers, being theorem-provers, operate at a higher conceptual level than conventional compilers and interpreters.
[http://en.wikipedia.org/wiki/Logical_programming]

ATTRIBUTE:
Logical programming languages, like Prolog, are often thought of as defining "what" is to be computed, rather than "how" the computation is to take place, as an imperative programming language does.
[http://en.wikipedia.org/wiki/Imperative_programming]

lcpLogic'doing.EVOLUTING

name::
* McsEngl.lcpLogic'doing.EVOLUTING@cptIt,

{time.1969}:
However, the first proposal to use the clausal form of logic for representing computer programs was made by Cordell Green (1969). This used an axiomatization of a subset of LISP, together with a representation of an input-output relation, to compute the relation by simulating the execution of the program in LISP.
http://en.wikipedia.org/wiki/Logic_programming

Logic Programming is the proposal to implement systems using mathematical logic.
Perhaps the first published proposal to use mathematical logic for programming was John McCarthy’s Advice Taker paper.
[http://aaaipress.org/Papers/Symposia/Spring/2006/SS-06-08/SS06-08-003.pdf]

lcpLogic'resource

name::
* McsEngl.lcpLogic'resource@cptIt,

_ADDRESS.WPG:
* http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-29.html,

SPECIFIC

_SPECIFIC:
* PROLOG#cptItsoft364#

lcp.logic.ABDUCTIVE

name::
* McsEngl.lcp.logic.ABDUCTIVE@cptIt,
* McsEngl.abductive-logic-programing@cptIt,

_DESCRIPTION:
Abductive Logic Programming is an extension of normal Logic Programming that allows some predicates, declared as abducible predicates, to be incompletely defined. Problem solving is achieved by deriving hypotheses expressed in terms of the abducible predicates as solutions of problems to be solved. These problems can be either observations that need to be explained (as in classical abductive reasoning) or goals to be achieved (as in normal logic programming). It has been used to solve problems in Diagnosis, Planning, Natural Language and Machine Learning. It has also been used to interpret Negation as Failure as a form of abductive reasoning.
[http://en.wikipedia.org/wiki/Logic_programming]

lcp.logic.CONCURRENT

name::
* McsEngl.lcp.logic.CONCURRENT@cptIt,
* McsEngl.concurrent-logic-programing@cptIt,

_DESCRIPTION:
Keith Clark, Steve Gregory, Vijay Saraswat, Udi Shapiro, Kazunori Ueda, etc. developed a family of Prolog-like concurrent message passing systems using unification of shared variables and data structure streams for messages. Efforts were made to base these systems on mathematical logic, and they were used as the basis of the Japanese Fifth Generation Project (ICOT). However, the Prolog-like concurrent systems were based on message passing and consequently were subject to the same indeterminacy as other concurrent message-passing systems, such as Actors (see Indeterminacy in concurrent computation). Consequently, the ICOT languages were not based on logic in the sense that computational steps could not be logically deduced [Hewitt and Agha, 1988].

Concurrent constraint logic programming combines concurrent logic programming and constraint logic programming, using constraints to control concurrency. A clause can contain a guard, which is a set of constraints that may block the applicability of the clause. When the guards of several clauses are satisfied, concurrent constraint logic programming makes a committed choice to the use of only one.
[http://en.wikipedia.org/wiki/Logic_programming]

lcp.logic.CONSTRAINT

name::
* McsEngl.lcp.logic.CONSTRAINT@cptIt,
* McsEngl.constraint-logic-programing@cptIt,

_DESCRIPTION:
Constraint logic programming is an extension of normal Logic Programming that allows some predicates, declared as constraint predicates, to occur as literals in the body of clauses. These literals are not solved by goal-reduction using program clauses, but are added to a store of constraints, which is required to be consistent with some built-in semantics of the constraint predicates.

Problem solving is achieved by reducing the initial problem to a satisfiable set of constraints. Constraint logic programming has been used to solve problems in such fields as civil engineering, mechanical engineering, digital circuit verification, automated timetabling, air traffic control, and finance. It is closely related to abductive logic programming.
[http://en.wikipedia.org/wiki/Logic_programming]

lcp.logic.HIGHER-ORDER

name::
* McsEngl.lcp.logic.HIGHER-ORDER@cptIt,
* McsEngl.higher-order-logic-programing@cptIt,

_DESCRIPTION:
Several researchers have extended logic programming with higher-order programming features derived from higher-order logic, such as predicate variables. Such languages include the Prolog extensions HiLog and λProlog.
[http://en.wikipedia.org/wiki/Logic_programming]

lcp.logic.INDUCTIVE

name::
* McsEngl.lcp.logic.INDUCTIVE@cptIt,
* McsEngl.inductive-logic-programing@cptIt,

_DESCRIPTION:
Inductive logic programming is concerned with generalizing positive and negative examples in the context of background knowledge. Generalizations, as well as the examples and background knowledge, are expressed in logic programming syntax. Recent work in this area, combining logic programming, learning and probability, has given rise to the new field of statistical relational learning and probabilistic inductive logic programming.
[http://en.wikipedia.org/wiki/Logic_programming]

lcp.logic.LINEAR

name::
* McsEngl.lcp.logic.LINEAR@cptIt,
* McsEngl.linear-logic-programing@cptIt,

_DESCRIPTION:
Basing logic programming within linear logic has resulted in the design of logic programming languages that are considerably more expressive than those based on classical logic. Horn clause programs can only represent state change by the change in arguments to predicates. In linear logic programming, one can use the ambient linear logic to support state change. Some early designs of logic programming languages based on linear logic include LO [Andreoli & Pareschi, 1991], Lolli [Hodas & Miller, 1994], ACL [Kobayashi & Yonezawa, 1994], and Forum [Miller, 1996]. Forum provides a goal-directed interpretation of all of linear logic.
[http://en.wikipedia.org/wiki/Logic_programming]

lcp.logic.OBJECT-ORIENTED

name::
* McsEngl.lcp.logic.OBJECT-ORIENTED@cptIt,
* McsEngl.oo-logic-programing@cptIt,

_DESCRIPTION:
F-logic extends logic programming with objects and the frame syntax. A number of systems are based on F-logic, including Flora-2, FLORID, and a highly scalable commercial system Ontobroker.
[http://en.wikipedia.org/wiki/Logic_programming]

lcp.logic.TRANSACTION

name::
* McsEngl.lcp.logic.TRANSACTION@cptIt,
* McsEngl.transaction-logic-programing@cptIt,

_DESCRIPTION:
Transaction logic is an extension of logic programming with a logical theory of state-modifying updates. It has both a model-theoretic semantics and a procedural one. An implementation of a subset of Transaction logic is available in the Flora-2 system. Other prototypes are also available.
[http://en.wikipedia.org/wiki/Logic_programming]

lcp.MACRO

name::
* McsEngl.lcp.MACRO@cptIt,
* McsEngl.macro-computer-language@cptIt,

_DEFINITION:
A macro in computer science is a rule or pattern that specifies how a certain input sequence (often a sequence of characters) should be mapped to an output sequence (also often a sequence of characters) according to a defined procedure. The mapping process which instantiates a macro into a specific output sequence is known as macro expansion.
The term originated with macro-assemblers, where the idea is to make available to the programmer a sequence of computing instructions as a single program statement, making the programming task less tedious and less error-prone.[1]
[http://en.wikipedia.org/wiki/Macro_language]

Keyboard and mouse macros
Keyboard macros and mouse macros allow short sequences of keystrokes and mouse actions to be transformed into other, usually more time-consuming, sequences of keystrokes and mouse actions. In this way, frequently-used or repetitive sequences of keystrokes and mouse movements can be automated. Separate programs for creating these macros are called macro recorders.
[http://en.wikipedia.org/wiki/Macro_language]

Text substitution macros

Procedural macros
The PL/I programming language is unique in that PL/I macros are written in a subset of PL/I itself: the compiler executes "preprocessor statements" at compilation time, and the output of this execution forms part of the code that is compiled. The ability to use a familiar procedural language as the macro language gives power much greater than that of text substitution macros, at the expense of a larger and slower compiler.
Most assembly languages have less powerful procedural macro facilities, for example allowing a block of code to be repeated N times for loop unrolling; but these have a completely different syntax from the actual assembly language.
[http://en.wikipedia.org/wiki/Macro_language]

lcp.MARKUP

name::
* McsEngl.lcp.MARKUP@cptIt,
* McsEngl.conceptIt248.4,
* McsEngl.markup-processing-method@cptIt248.4, {2011-08-31}

_GENERIC:
* markup-method#cptItsoft204.12#

lcp.MICROLANGUAGE

_CREATED: {2007-12-29}

name::
* McsEngl.lcp.MICROLANGUAGE@cptIt,
* McsEngl.microlanguage@cptIt,

_DEFINITION:
Microlanguage is the MAPPING_METHOD of a machine_program#ql:machine_program-*# to a microprogram#ql:microprogram-*#.
[KasNik, 2007-12-27]

lcp.NETWORK

name::
* McsEngl.lcp.NETWORK@cptIt,
* McsEngl.network'programing'language@cptIt,
* McsEngl.network-programing-language@cptIt,
* McsEngl.netpl@cptIt,

_DESCRIPTION:
Historically, network programming has been error-prone, difficult, and complex.
The programmer had to know many details about the network and sometimes even the hardware. You usually needed to understand the various “layers” of the networking protocol, and there were a lot of different functions in each different networking library concerned with connecting, packing, and unpacking blocks of information; shipping those blocks back and forth; and handshaking. It was a daunting task.
However, the concept of networking is not so difficult. You want to get some information from that machine over there and move it to this machine here, or vice versa. It’s quite similar to reading and writing files, except that the file exists on a remote machine and the remote machine can decide exactly what it wants to do about the information you’re requesting or sending.
[B. Eckel Thinking in Java 1998jan]
===
The endpoint in an interprocess communication is called a socket, or a network socket for disambiguation. Since most communication between computers is based on the Internet Protocol, an almost equivalent term is Internet socket. The data transmission between two sockets is organised by communications protocols, usually implemented in the operating system of the participating computers. Application programs write to and read from these sockets. Therefore, network programming is essentially socket programming.
[http://en.wikipedia.org/wiki/Computer_network_programming]

netpl'doing.PROGRAMING

name::
* McsEngl.netpl'doing.PROGRAMING@cptIt,
* McsEngl.network-programming@cptIt,

netpl'domainIn

name::
* McsEngl.netpl'domainIn@cptIt,

_PART:
* computer-network#cptIt21#

lcp.OBJECT_ORIENTED

name::
* McsEngl.conceptIt220,
* McsEngl.concept-oriented-language, {2013-11-13}
* McsEngl.pl.Object-oriented@cptIt220,
* McsEngl.language.objectoriented@cptIt220,
* McsEngl.lngOO@cptIt220, {2011-08-29}
* McsEngl.object-based-language, {2013-10-24} [https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects]
* McsEngl.object-oriented-language@cptIt220,
* McsEngl.object oriented programming language,
* McsEngl.ool@cptIt220,
* McsEngl.oopl,
* McsElln.ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΓΛΩΣΣΑ/ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ,
* McsElln.ΟΝΤΟΚΕΝΤΡΙΚΗ ΓΛΩΣΣΑ,

ool'DEFINITION

TO 1989 ΟΛΟΙ ΜΙΛΟΥΝ ΓΙΑ OOP systems. ΤΑ ΣΥΣΤΗΜΑΤΑ ΑΥΤΑ ΠΡΟΤΡΕΠΟΥΝ ΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΤΗ ΣΤΗΝ ΕΠΑΝΑΧΡΗΣΙΜΟΠΟΙΗΣΗ ΤΩΝ ΗΔΗ ΥΠΑΡΧΟΝΤΩΝ ΡΟΥΤΙΝΩΝ ΠΑΡΑ ΤΗΝ ΚΩΔΙΚΟΠΟΙΗΣΗ ΝΕΩΝ... Ο ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΠΡΟΥΠΟΘΕΤΕΙ ΤΗΝ ΤΑΞΙΝΟΜΗΣΗ ΤΩΝ ΑΝΤΙΚΕΙΜΕΝΩΝ ΑΛΑΛΟΓΑ ΜΕ ΤΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ-ΤΟΥΣ.
[RAM, OCT 1989, 92]

A computer language is object-oriented if they support the four specific object properties called
- abstraction,
- polymorphism,
- inheritance, and
- encapsulation.
[IBM Smalltalk Tutorial]

ool'GENERIC

_GENERIC:
* programming_language#cptItsoft248#

ool'PART

name::
* McsEngl.ool'PART@cptIt,

_SPECIFIC:
* encapsulation,
* inheritance,
* polymorphism,

ool'ENVIRONMENT

name::
* McsEngl.ool'ENVIRONMENT@cptIt,

STRUCTURED-PROGRAMMING

On that is based the concept of object and object-oriented programming. In that data and functions are properties of the object, instead of the usual view of objects as function parameters in structured programming.

ool'code

name::
* McsEngl.ool'code@cptIt,

_GENERIC:
* pl-code#ql:pl'code#

ool'code.character-set#cptIt431#

name::
* McsEngl.ool'code.character-set@cptIt,

ool'code.input-element

name::
* McsEngl.ool'code.input-element@cptIt,

All entities that comprise a source file
- comments
- spaces
- data values ...

ool'code.API

name::
* McsEngl.ool'code.API@cptIt,
* McsEngl.ool'API@cptIt,
* McsEngl.ool'LIBRARY@cptIt,
* McsEngl.ool'CLASS'LIBRARY@cptIt,
* McsEngl.Application-Programming-Interface@cptIt,

ool'code.OBJECT (concept)

_CREATED: {2013-10-23}

name::
* McsEngl.ool'code.OBJECT (concept)@cptIt,
* McsEngl.object.ool@cptIt,
* McsEngl.ool'concept@cptIt,
* McsEngl.ool'object@cptIt,

_DESCRIPTION:
Object is information that contains other information with names, unordered.
[hmnSngo.2014-08-25]
===
Object in ool is a code-construction that contains processing-code (methods) and non-processing-code (data) which can inherit its members.
[hmnSngo.2013-10-23]
===
Objects are key to understanding object-oriented technology. Look around right now and you'll find many examples of real-world objects: your dog, your desk, your television set, your bicycle.
Real-world objects share two characteristics: They all have state and behavior. Dogs have state (name, color, breed, hungry) and behavior (barking, fetching, wagging tail). Bicycles also have state (current gear, current pedal cadence, current speed) and behavior (changing gear, changing pedal cadence, applying brakes). Identifying the state and behavior for real-world objects is a great way to begin thinking in terms of object-oriented programming.
[http://putka.upm.si/langref/javaTutorials/java/concepts/object.html]

ool'concept'characteristic

name::
* McsEngl.ool'concept'characteristic@cptIt,
* McsEngl.ool'characteristic@cptIt, {2013-11-13}
* McsEngl.ool'field@cptIt,
* McsEngl.ool'member@cptIt, [java]
* McsEngl.ool'object'member@cptIt,
* McsEngl.ool'property@cptIt, [ECMAScript]

* McsEngl.ool'chc@cptIt,

_DESCRIPTION:
A 'name-value pair'.
[hmnSngo.2013-11-16]

ool'chc'name

name::
* McsEngl.ool'chc'name@cptIt,

_DESCRIPTION:
* cpt_fcnName = function
* cpt_aName = array
* cpt_bName = boolean
* cpt_nName = number
* cpt_sName = string
[hmnSngo.2013-11-13]

SPECIFIC

name::
* McsEngl.ool'chc.specific@cptIt,

ool'chc.SPECIFIC-DIVISION.inheritance

name::
* McsEngl.ool'chc.SPECIFIC-DIVISION.inheritance@cptIt,

_SPECIFIC:
=== on generic ===
* inherited##
* inheritedNo##
=== on specific ===
* inheriting##
* inheritingNo

ool'chc.SPECIFIC-DIVISION.function

name::
* McsEngl.ool'chc.SPECIFIC-DIVISION.function@cptIt,

_SPECIFIC:
* method##
* methodNo##

ool'chc.SPECIFIC-DIVISION.access

name::
* McsEngl.ool'chc.SPECIFIC-DIVISION.access@cptIt,

_SPECIFIC:
* access-outside (public)##
* access-outsideNo (publicNo##

ool'chc.access.PUBLIC

name::
* McsEngl.ool'chc.access.PUBLIC@cptIt,
* McsEngl.ool'chc.public@cptIt,

ool'chc.access.PUBLIC.NO

name::
* McsEngl.ool'chc.access.PUBLIC.NO@cptIt,
* McsEngl.ool'chc.publicNo@cptIt,

ool'chc.FUNCTION (method)

name::
* McsEngl.ool'chc.FUNCTION (method)@cptIt,
* McsEngl.ool'code.METHOD@cptIt,
* McsEngl.ool'concept'characteristic.function@cptIt,
* McsEngl.ool'method@cptIt,
* McsEngl.ool'object'member.METHOD@cptIt,
* McsEngl.member-function@cptIt,

_DEFINITION:
The code that is associated with each message is called a method.
[IBM Smalltalk tutorial]

ool'chc.FUNCTION.NO

name::
* McsEngl.ool'chc.FUNCTION.NO@cptIt,
* McsEngl.ool'concept'characteristic.FUNCTION.NO@cptIt,
* McsEngl.ool'object'variable@cptIt,
* McsEngl.ool'object'property@cptIt,

ool'chc.INHERITED

name::
* McsEngl.ool'chc.INHERITED@cptIt,
* McsEngl.ool'concept'characteristic.INHERITED@cptIt,
* McsEngl.ool'object'inherited-characteristic@cptIt,

_DESCRIPTION:
A characteristic that its generic has too.
[hmnSngo.2013-11-16]

ool'chc.INHERITED.NO

name::
* McsEngl.ool'chc.INHERITED.NO@cptIt,
* McsEngl.ool'concept'characteristic.INHERITED.NO@cptIt,
* McsEngl.ool'object'non-inherited-characteristic@cptIt,

ool'chc.INHERITING

name::
* McsEngl.ool'chc.INHERITING@cptIt,
* McsEngl.ool'concept'characteristic.INHERITING@cptIt,
* McsEngl.ool'object'inheriting-characteristic@cptIt,

ool'chc.INHERITING.NO

name::
* McsEngl.ool'chc.INHERITING.NO@cptIt,
* McsEngl.ool'concept'characteristic.INHERITING.NO@cptIt,
* McsEngl.ool'object'non-inheriting-characteristic@cptIt,
* McsEngl.ool'static-characteristic@cptIt,

_DESCRIPTION:
It is not a characteristic of its specifics.
[hmnSngo.2013-11-16]
===
When you say something is static, it means that data or method is not tied to any particular object instance of that class.
[B. ECKEL, Thinking In Java, 1998jan]

ool'Real-world-object

name::
* McsEngl.ool'Real-world-object@cptIt,

_DESCRIPTION:
Real-world objects share two characteristics: They all have state and behavior. Dogs have state (name, color, breed, hungry) and behavior (barking, fetching, wagging tail).
[http://docs.oracle.com/javase/tutorial/java/concepts/object.html]

SPECIFIC

name::
* McsEngl.ool'concept.specific@cptIt,
* McsEngl.ool'object.specific@cptIt,

ool'concept.CLASS

name::
* McsEngl.ool'concept.CLASS@cptIt,
* McsEngl.ool'class@cptIt,
* McsEngl.ool'code.CLASS@cptIt,
* McsEngl.class.ool@cptIt220i,

_DEFINITION:
A class, for example, is like a blueprint for a house. It defines the shape of the house on paper, with relationships between the different parts of the house clearly defined and planned out, even though the house doesn’t exist.
An object, then, is like the actual house built according to that blueprint. The data stored in the object is like the wood, wires, and concrete that compose the house: without being assembled according to the blueprint, it’s just a pile of stuff. However, when it all comes together, it becomes an organized, useful house.
Classes form the structure of data and actions and use that information to build objects. More than one object can be built from the same class at the same time, each one independent of the others. Continuing with our construction analogy, it’s similar to the way an entire subdivision can be built from the same blueprint: 150 different houses that all look the same but have different
families and decorations inside.
[http://net.tutsplus.com/tutorials/php/object-oriented-php-for-beginners/]
===
CLASS is a GENERIC-CONSTRUCT that contains data-structures (variables) and operations.
[hmnSngo.2002-04-24]
===
A class is the implementation of an abstract data type (ADT). It defines attributes and methods which implement the data structure and operations of the ADT, respectively.

There are many definitions of type (and class and related concepts). Many authors define the terms as applied by their particular approach or language, however we shall proceed in the face of this diversity.
[Hathaway, Bod. Comp.Object FAQ v1.0.9, 2 Apr. 1996]

A type can be considered
- a set of values and
- a set of operations
on those values. This can insure type-safe programming. However, the representation of types (classes in OO) can be separated from the notion of type allowing many representations per type while still maintaining reasonable type-safety.
[Hathaway, Bod. Comp.Object FAQ v1.0.9, 2 Apr. 1996]

ool'class'DEFINITION

name::
* McsEngl.ool'class'DEFINITION@cptIt,

Is A Class An Object?

In C++ no, because C++ classes are not instances of an accessible class (a Meta-Class) and because C++ classes are not accessible to programs. Classes are objects in 3 Level Systems and above because classes are instances of meta-classes. But classes play a dual role, because objects can only be declared to be instances of a class (and class objects instances of a meta-class). In 1 Level (single-hierarchy) systems, all classes are objects.
[Hathaway, Bod. Comp.Object FAQ v1.0.9, 2 Apr. 1996]

The difference between an object and a class, in layspeak, is the difference between a building and its architectural plan; once you have a building, you can use it until its end; but if you have the building's architectural plan, you can build other buildings just like it or make major modifications to it.
[http://www.javaworld.com/javaworld/jw-03-1996/jw-03-javascript.intro.html, Rawn Shah]

ABSTRACT SPECIFIC-DIVISION

A class A is called abstract class if it is only used as a superclass for other classes. Class A only specifies properties. It is not used to create objects. Derived classes must define the properties of A.
[P. Mueller. Intro to OOP using C++, 18 Nov. 1996]

ABSTRACT DATA-TYPE
ELEMENTARY DATATYPE

Integers, characters, ...

What Is The Difference Between Static And Dynamic Typing?

Static typing refers to types declared in a program at compile-time, so no type information is available on objects at run-time. Dynamic typing uses the inherent types of polymorphic objects, keeping track of the types of objects at run-time.

Static typing is more efficient and reliable, but loses power.
[Hathaway, Bod. Comp.Object FAQ v1.0.9, 2 Apr. 1996]

ool'class'creating

name::
* McsEngl.ool'class'creating@cptIt,

Because inheritance is so important in object-oriented programming it is often highly emphasized, and the new programmer can get the idea that inheritance should be used everywhere. This can result in awkward and overcomplicated designs. Instead, you should first look to composition when creating new classes, since it is simpler and more flexible. If you take this approach, your designs will stay cleaner. It will be reasonably obvious when you need inheritance.
[B. Eckel Thinking in Java 1998jan]

ool'class'member

name::
* McsEngl.ool'class'member@cptIt,

ool'class'member.METHOD

name::
* McsEngl.ool'class'member.METHOD@cptIt,
* McsEngl.ool'method@cptIt,
* McsEngl.ool'mtd@cptIt, {2013-10-01}

_DESCRIPTION:
The behavior of class or its instances is defined using methods. Methods are subroutines with the ability to operate on objects or classes. These operations may alter the state of an object or simply provide ways of accessing it.[5] Many kinds of methods exist, but support for them varies across languages. Some types of methods are created and called by programmer code, while other special methods—such as constructors, destructors, and conversion operators—are created and called by compiler-generated code. A language may also allow the programmer to define and call these special methods.[6][7]
[http://en.wikipedia.org/wiki/Class_(computer_science)]

ool'class'member.METHOD.NO

name::
* McsEngl.ool'class'member.METHOD.NO@cptIt,
* McsEngl.ool'class-attribute@cptIt,
* McsEngl.ool'class-data-member@cptIt,
* McsEngl.ool'class-field@cptIt,
* McsEngl.ool'class-property@cptIt,
* McsEngl.ool'data-method@cptIt,
* McsEngl.ool'field@cptIt,
* McsEngl.ool'member-variable@cptIt,
* McsEngl.ool'property@cptIt,
* McsEngl.ool'variable-member@cptIt,

* McsEngl.property@JavaScript,
* McsEngl.ool'ppy@cptIt, {2013-10-01}

=== _NOTES: FIELD is the preferred term in Java.
MEMBER VARIABLE is the preferred term in C++.
[Harold LECTURE, 1997jan29]

_DESCRIPTION:
A class contains data field descriptions (or properties, fields, data members, or attributes). These are usually field types and names that will be associated with state variables at program run time; these state variables either belong to the class or specific instances of the class. In most languages, the structure defined by the class determines the layout of the memory used by its instances. Other implementations are possible: for example, objects in Python use associative key-value containers.[4]
Some programming languages support specification of invariants as part of the definition of the class, and enforce them through the type system. Encapsulation of state is necessary for being able to enforce the invariants of the class.
[http://en.wikipedia.org/wiki/Class_(computer_science)]
* Properties are the adjectives of JavaScript. They describe qualities of objects and, in some cases are writable (can be changed dynamically).
http://www.learn-javascript-tutorial.com/

ool'class.MIXIN

name::
* McsEngl.ool'class.MIXIN@cptIt,
* McsEngl.mixin.ool@cptIt,

_DESCRIPTION:
In object-oriented programming languages, a mixin is a class which contains a combination of methods from other classes. How such combination is done depends on language, but it is not by inheritance. If a combination contains all methods of combined classes it is equivalent to multiple inheritance.

Mixins encourage code reuse and avoid well-known pathologies associated with multiple inheritance.[1]

A mixin can also be viewed as an interface with implemented methods. When a class includes a mixin, the class implements the interface and includes, rather than inherits, all the mixin's attributes (fields, properties) and methods. They become part of the class during compilation. Mixins don't need to implement an interface. The advantage of implementing an interface is that in statically typed languages instances of the class may be passed as parameters to methods requiring that interface.

A mixin can defer definition and binding of methods until runtime, though attributes and instantiation parameters are still defined at compile time. This differs from the most widely used approach, that originated in the programming language Simula, of defining all attributes, methods and initialization at compile time.
[http://en.wikipedia.org/wiki/Mixin]

ool'class.SUPERCLASS-SUBCLASS

name::
* McsEngl.ool'class.SUPERCLASS-SUBCLASS@cptIt,
* McsEngl.superclass/subclass@cptIt,
* McsEngl.base-class/derived-class@cptIt,
* McsEngl.parent-class/subclass@cptIt,
* McsEngl.ancestor/subclass@cptIt,

ool'concept.INSTANCE

name::
* McsEngl.ool'concept.INSTANCE@cptIt,
* McsEngl.ool'object.instance@cptIt,

_DESCRIPTION:
It has NO other specifics.
[hmnSngo.2013-11-13]

ool'concept.INSTANCE.NO

name::
* McsEngl.ool'concept.INSTANCE.NO@cptIt,
* McsEngl.ool'object.instanceNo@cptIt,

ool'concept.INTERFACE

name::
* McsEngl.ool'concept.INTERFACE@cptIt,
* McsEngl.ool'code.INTERFACE@cptIt,
* McsEngl.ool'interface@cptIt,

_DEFINITION:
An Interface is a description of a Type that only focuses on Operations.
[ChiMu Java Guidelines 1998feb28]

ool'concept.SPECIFIC

name::
* McsEngl.ool'concept.SPECIFIC@cptIt,
* McsEngl.ool'object.specific@cptIt,

_DESCRIPTION:
It has a generic and other specifics.
[hmnSngo.2013-11-13]

ool'code.PROCESSING

name::
* McsEngl.ool'code.PROCESSING@cptIt,
* McsEngl.ool'Processing-code@cptIt,
* McsEngl.ool'example@cptIt,
* McsEngl.ool'processing@cptIt,

ool'code.PROCESSING.NO

name::
* McsEngl.ool'code.PROCESSING.NO@cptIt,
* McsEngl.ool'data@cptIt,

ool'code.VALUE

name::
* McsEngl.ool'code.VALUE@cptIt,
* McsEngl.ool'value@cptIt,

ool'code.VARIABLE

name::
* McsEngl.ool'code.VARIABLE@cptIt,
* McsEngl.attribute'of'ool@cptIt220i,
* McsEngl.feature'of'ool@cptIt220i,
* McsEngl.field'of'ool@cptIt220i,
* McsEngl.ool'variable@cptIt,

ool'variable'name

name::
* McsEngl.ool'variable'name@cptIt,

ool'variable'value

name::
* McsEngl.ool'variable'value@cptIt,

ool'variable'storage-location

name::
* McsEngl.ool'variable'storage-location@cptIt,

ool'variable.INSTANCE

name::
* McsEngl.ool'variable.INSTANCE@cptIt,
* McsEngl.instance-variable@cptIt,
* McsEngl.member-data@cptIt,

ool'value.DATA

name::
* McsEngl.ool'value.DATA@cptIt,

ool'value.DATA.NO

name::
* McsEngl.ool'value.DATA.NO@cptIt,

ool'value.INSTANCE

name::
* McsEngl.ool'value.INSTANCE@cptIt,

ool'value.INSTANCE.NO (type)

name::
* McsEngl.ool'value.INSTANCE.NO (type)@cptIt,

ool'value.PRIMITIVE

name::
* McsEngl.ool'value.PRIMITIVE@cptIt,

ool'value.PRIMITIVE.NO

name::
* McsEngl.ool'value.PRIMITIVE.NO@cptIt,

ool'COLLECTION'OF'OBJECTS

name::
* McsEngl.ool'COLLECTION'OF'OBJECTS@cptIt,

ool'EVALUATION#cptCore546.107#

name::
* McsEngl.ool'EVALUATION@cptIt,

Successful OOP languages incorporate not just language syntax and a compiler, but an entire development environment including a significant library of well-designed, easy to use objects.
[B. Eckel Thinking in Java 1998jan]

Reuse,
- quality,
- an emphasis on modeling the real world (or a "stronger equivalence" with the RW than other methodologies),
- a consistent and seamless OOA/OOD/OOP package,
- naturalness (our "object concept"),
- resistance to change,
- encapsulation and abstraction (higher cohesion/lower coupling), and etc.
[Hathaway, Bod. Comp.Object FAQ v1.0.9, 2 Apr. 1996]

_ADDRESS.WPG:
* https://www.quora.com/What-are-the-disadvantages-of-object-oriented-programming-languages, "You want a banana, but instead you get a gorilla holding the banana and the whole jungle with it."

ool'EVOLUTION#cptCore546.171#

name::
* McsEngl.ool'EVOLUTION@cptIt,

Simula was the first object-oriented language providing objects, classes, inheritance, and dynamic typing in 1967 (in addition to its Algol-60 subset).
It was intended as a conveyance of object-oriented design. Simula 1 was a simulation language, and the later general-purpose language Simula 67 is now referred to as simply Simula. Smalltalk was the next major contributor including classes, inheritance, a high-powered graphical environment and a powerful dynamic typing mechanism (although these existed to some extent in Simula). Self is somewhat of a Smalltalk-based next generation language, as is BETA a followup to Simula (by its original designers).
[Hathaway, Bod. Comp.Object FAQ v1.0.9, 2 Apr. 1996]

ool'doing#cptCore475#

name::
* McsEngl.ool'doing@cptIt,

ool'function.ENCAPSULATION

name::
* McsEngl.ool'function.ENCAPSULATION@cptIt,
* McsEngl.ool'encapsulation@cptIt,
* McsElln.ΕΝΘΥΛΑΚΩΣΗ@cptIt, [Βακάλη κα, Ανάπτυξη Εφαρμογών γ'λυκείου, 1999 α'έκδοση, 236]

_DEFINITION:
* encapsulation: objects combine together data and code in a way that hides implementation details. This makes it easier to manage large systems.
[John K. Ousterhout, Scripting: Higher Level Programming for the 21st Century, 1997-11-14]

The principle of hiding the used data structure and to only provide a well-defined interface is known as encapsulation.
[P. Mueller. Intro to OOP using C++, 18 Nov. 1996]

ool'domainIN

name::
* McsEngl.ool'domainIN@cptIt,

_GRAPHICAL_USER_INTERFACE:
For example, object-oriented programming was primarily fueled by the demands of graphical user interfaces.
[http://xlr.sourceforge.net/sites/default/files/XLRef.pdf]

ool'grammar

name::
* McsEngl.ool'grammar@cptIt,

Context-Free Grammar

A context-free grammar consists of a number of productions.
Each production has
- an abstract symbol called a nonterminal as its left-hand side, and
- a sequence of one or more nonterminal and terminal symbols as its right-hand side. For each grammar, the terminal symbols are drawn from a specified alphabet.
Starting from a sentence consisting of a single distinguished nonterminal, called the goal symbol, a given context-free grammar specifies a language, namely, the infinite set of possible sequences of terminal symbols that can result from repeatedly replacing any nonterminal in the sequence with a right-hand side of a production for which the nonterminal is the left-hand side.

Lexical Grammar

Syntactic Grammar

ool'Inheritance

name::
* McsEngl.ool'Inheritance@cptIt,
* McsEngl.conceptIt220.2,
* McsEngl.behavior-reuse@cptIt220.2, [wikipedia]
* McsEngl.inheritance.ool@cptIt,
* McsEngl.inheritance-ool@cptIt,
* McsEngl.ool'function.INHERITANCE@cptIt,
* McsEngl.ool'inheritance@cptIt,

_DESCRIPTION:
Inheritance is a relationship between classes where one class is the parent (base/superclass/ancestor/etc.) class of another. Inheritance provides programming by extension (as opposed to programming by reinvention [LaLonde 90]) and can be used as an is-a-kind-of (or is-a) relationship or for differential programming. Inheritance can also double for assignment compatibility (see section 2.7).
[Hathaway, Bod. Comp.Object FAQ v1.0.9, 2 Apr. 1996]

inheritance'Generic-code

name::
* McsEngl.inheritance'Generic-code@cptIt,

_Runtime_change:
As such, many prototype-based systems encourage the alteration of prototypes during run-time, whereas only very few class-based object-oriented systems (such as the dynamic object-oriented system, Common Lisp, Smalltalk, Python, Perl, or Ruby) allow classes to be altered during the execution of a program.
[http://en.wikipedia.org/wiki/Prototype-based_programming]

inheritance'Instance-code

name::
* McsEngl.inheritance'Instance-code@cptIt,
* McsEngl.ool'OBJECT-instance@cptIt,
* McsEngl.object-instance-ool@cptIt220i,

_DEFINITION:
An object is a region of storage with associated semantics. After the declaration `int i;', we say that `i is an object of type int'. In C++/OOP, `object' is usually used to mean `an instance of a class'. Thus a class defines the behavior of possibly many objects (instances).
[C++ FAQ]
===
* An object is an instance of a class. It can be uniquely identified by its name and it defines a state which is represented by the values of its attributes at a particular time.
===
ΕΝΑ ΑΝΤΙΚΕΙΜΕΝΟ ΣΥΜΠΛΗΡΩΝΕΙ ΤΗΝ ΑΠΛΗ ΕΝΝΟΙΑ ΜΙΑΣ ΜΕΤΑΒΛΗΤΗΣ, ΟΠΩΣ ΤΗΝ ΞΕΡΟΥΜΕ ΣΤΙΣ ΑΠΛΕΣ ΓΛΩΣΕΣ, ΜΕ ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ ΟΠΩΣ
- ΕΣΩΤΕΡΙΚΕΣ ΡΟΥΤΙΝΕΣ (PROCEDURES) ΚΑΙ
- ΤΗ ΔΥΝΑΤΟΤΗΤΑ ΕΠΙΚΟΙΝΩΝΙΑΣ ΜΕ ΑΛΛΑ ΑΝΤΙΚΕΙΜΕΝΑ.
ΤΑ ΠΕΡΙΕΧΟΜΕΝΑ ΤΩΝ ΑΝΤΙΚΕΙΜΕΝΩΝ ΟΡΙΖΟΝΤΑΙ ΜΟΝΟ ΓΙΑ ΤΟ ΙΔΙΟ ΤΟ ΑΝΤΙΚΕΙΜΕΝΟ ΚΑΙ ΜΠΟΡΟΥΝ ΝΑ ΤΑ ΑΛΛΑΞΟΥΝ ΜΟΝΟ ΟΙ ΡΟΥΤΙΝΕΣ ΠΟΥ ΤΟ ΣΥΝΟΔΕΥΟΥΝ.
ΚΑΜΜΙΑ ΕΞΩΤΕΡΙΚΗ ΡΟΥΤΙΝΑ ΔΕΝ ΜΠΟΡΕΙ ΝΑ "ΔΙΕΙΣΔΥΣΕΙ" ΣΤΟ ΑΝΤΙΚΕΙΜΕΝΟ ΟΥΤΕ ΝΑ ΤΟ ΑΛΛΞΕΙ. ΤΟ ΙΔΙΟ ΤΟ ΑΝΤΙΚΕΙΜΕΝΟ ΑΠΟΦΑΣΙΖΕΙ ΠΩΣ ΘΑ ΑΝΤΙΔΡΑΣΕΙ ΣΕ ΚΑΘΕ ΜΗΝΥΜΑ, ΚΑΛΕΣΜΑ ΜΕΣΩ ΜΙΑΣ ΡΟΥΤΙΝΑΣ.

ΟΙ ΡΟΥΤΙΝΕΣ ΠΟΥ ΔΗΛΩΝΟΝΤΑΙ ΣΤΟΝ ΟΡΙΣΜΟ ΤΟΥ ΑΝΤΙΚΕΙΜΕΝΟΥ ΛΕΓΟΝΤΑΙ ΜΕΘΟΔΟΙ.
Η ΡΟΗ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ ΑΠΟΤΕΛΕΙΤΑΙ ΑΠΟ ΤΗΝ ΕΠΙΚΟΙΝΩΝΙΑ ΤΩΝ ΑΝΤΙΚΕΙΜΕΝΩΝ ΜΕΣΩ ΤΩΝ ΜΗΝΥΜΑΤΩΝ.
[RAM, OCT 1989, 92]

SPECIFIC

inheritance.CLASS-BASED

name::
* McsEngl.inheritance.CLASS-BASED@cptIt,
* McsEngl.class-based-inheritance@cptIt,
* McsEngl.classical-inheritance@cptIt,

_DESCRIPTION:
In class-based inheritance, there's a clear distinction between the classes (or class objects) and the instances (or instance objects.) The classes define the behavior and structure of instance objects, which in turn simply contain instance data.

The examples below illustrate a class being defined and then used in two different class-based programming languages.

//java or C#
class Door{
public void open(){
//...code omitted
}
}
Door frontDoor = new Door();
frontDoor.open();

'Visual Basic
Class Door
Public Sub Open()
'...code omitted
End Sub
End Class

Dim frontDoor as new Door()
frontDoor.Open()
[http://www.learn-javascript-tutorial.com/Prototype-Based-Inheritance.cfm]

inheritance.DIFFERENTIAL

name::
* McsEngl.inheritance.DIFFERENTIAL@cptIt,

_DESCRIPTION:
Differential inheritance
From Wikipedia, the free encyclopedia
Differential Inheritance is a common inheritance model used by prototype-based programming languages such as JavaScript, Io and NewtonScript. It operates on the principle that most objects are derived from other, more general objects, and only differ in a few small aspects; while usually maintaining a list of pointers internally to other objects which the object differs from.

An Analogy[edit]

To think of differential inheritance, you think in terms of what is different. So for instance, when trying to describe to someone how Dumbo looks, you could tell them in terms of elephants: Think of an elephant. Now Dumbo is a lot shorter, has big ears, no tusks, a little pink bow and can fly. Using this method, you don't need to go on and on about what makes up an elephant, you only need to describe the differences; anything not explicitly different can be safely assumed to be the same.
[http://en.wikipedia.org/wiki/Differential_inheritance]

inheritance.PROTOTYPE-BASED

name::
* McsEngl.inheritance.PROTOTYPE-BASED@cptIt,
* McsEngl.prototypal-inheritance@cptIt,
* McsEngl.prototypical-inheritance@cptIt,
* McsEngl.prototype-based-inheritance@cptIt,

_WHOLE:
* prototype-based-language#ql:prototype_based_language_it220.1#

_DESCRIPTION:
Prototyping is a way to create objects by replicating another object (the so called prototype.) The new object may or may not have a link to the original object, depending on the language implementation. JavaScript maintains a link between the two as we will see shortly.
In prototype-based languages there's usually an operator to effect the object creation by copying another object. Surprisingly JavaScript does not offer such operator, which is often consider a design flaw of the language.
[http://www.learn-javascript-tutorial.com/Prototype-Based-Inheritance.cfm]

difference-with-classical-inheritance

One of the big differences between Classical (Object-Oriented) and Prototypal inheritance is that the former has an elegant mechanism for referring to the parent using the super keyword. It's often used in constructors to initialize the parent class with the supplied input parameters.
[http://www.htmlgoodies.com/html5/javascript/calling-parent-methods-in-javascript.html#fbid=886HRe2iTLZ]

inheritance.DYNAMIC

name::
* McsEngl.inheritance.DYNAMIC@cptIt,

Dynamic inheritance allows objects to change and evolve over time. Since base classes provide properties and attributes for objects, changing base classes changes the properties and attributes of a class. A previous example was a window changing into an icon and then back again, which involves changing a base class between a window and icon class.

More specifically, dynamic inheritance refers to the ability to add, delete, or change parents from objects (or classes) at run-time. Actors, CLOS, and Smalltalk provide dynamic inheritance in some form or other. Single hierarchy systems, such as Self, provide dynamic inheritance in the form of delegation [Ungar 87].
[Hathaway, Bod. Comp.Object FAQ v1.0.9, 2 Apr. 1996]

inheritance.MULTIPLE

name::
* McsEngl.inheritance.MULTIPLE@cptIt,

One important object-oriented mechanism is multiple inheritance. Multiple inheritance does not mean that multiple subclasses share the same superclass. It also does not mean that a subclass can inherit from a class which itself is a subclass of another class.
Multiple inheritance means that one subclass can have more than one superclass. This enables the subclass to inherit properties of more than one superclass and to ``merge'' their properties.
===
If class A inherits from more than one class, ie. A inherits from B1, B2, ..., Bn, we speak of multiple inheritance. This may introduce naming conflicts in A if at least two of its superclasses define properties with the same name.
[P. Mueller. Intro to OOP using C++, 18 Nov. 1996]

ool'INTEGRATED-DEVELOPMENT-ENVIRONMENT#cptIt430#

name::
* McsEngl.ool'INTEGRATED-DEVELOPMENT-ENVIRONMENT@cptIt,

ool'MESSAGE

name::
* McsEngl.ool'MESSAGE@cptIt,

A message is a request to an object to invoke one of its methods. A message therefore contains
the name of the method and
the arguments of the method.
[P. Mueller. Intro to OOP using C++, 18 Nov. 1996]

ool'ORGANIZATION#cptIt968#

name::
* McsEngl.ool'ORGANIZATION@cptIt,

ool'OMG#ql:ognomg#

name::
* McsEngl.ool'OMG@cptIt,

ool'POLYMORPHISM

name::
* McsEngl.ool'POLYMORPHISM@cptIt,
* McsEngl.ool'function.POLYMORPHISM@cptIt,
* McsEngl.ool'POLYMORPHISM@cptIt,

IMPORTANCE:
Polymorphism is the third essential feature of an object-oriented programming language, after
- data abstraction and
- inheritance.
[B. ECKEL, Thinking In Java, 1997aug18, 163]

Another benefit of separating implementaion from behavior is polymorphism.

Polymorphism allows two or more objects respond to the same message. A method called name could also be implemented for an object of the class Course. Even though the implementation of this name message may return a course number and a course title, its protocol is the same as the name message to the Student object.

Polymorphism allows a sending object to communicate with different objects in a consistant manner without worrying about how many different implementations of a message.
An analogy of polymorphism to daily life is how students response to a school bell.
[IBM Smalltalk Tutorial]

Every student knows the significant of the bell. When the bell (message) rings, however, it has its own meaning to different students (objects). Some students go home, some go to the library, and some go to other classes. Every student responds to the bell, but how they response to it might be different.

Polymorphism is a ubiquitous concept in object-oriented programming and is defined in many ways, so many definitions are presented from: Websters', Author, Strachey, Cardelli and Wegner, Booch, Meyer, Stroustrup, and Rumbaugh.
Polymorphism is often considered the most powerful facility of an OOPL.

"Poly" means "many" and "morph" means "form". The homograph polymorphism has many uses in the sciences, all referring to objects that can take on or assume many different forms. Computer Science refers to Strachey's original definitions of polymorphism, as divided into two major forms, parametric and ad-hoc. Cardelli and Wegner followup with another classification scheme, adding inclusion polymorphism for subtyping and inheritance.
[Hathaway, Bod. Comp.Object FAQ v1.0.9, 2 Apr. 1996]

ool'SEMANTICS

name::
* McsEngl.ool'SEMANTICS@cptIt,

ool'resourceInfHmn#cptResource843#

name::
* McsEngl.ool'resourceInfHmn@cptIt,

Lano, K. and H. Haughton, ed. OBJECT-ORIENTED SPECIFICATION CASE STUDIES. Prentice-Hall, ISBN 0-13-097015-8.

ool'Agrawal 91

name::
* McsEngl.ool'Agrawal 91@cptIt,

R. Agrawal et al. "Static Type Checking of Multi-Methods".
OOPSLA 91. Object-Oriented Programming Systems, Languages, and Applications. ACM Press. Addison Wesley.

Compile-time checking and optimizations for multi-methods.

ool'Aho 86

name::
* McsEngl.ool'Aho 86@cptIt,

Alfred V. Aho, Ravi Sethi, and Jeffrey D. Ullman. Compilers: Principles, Techniques, and Tools. Reading, MA: Addison-Wesley, 1986.

Authoritative, classic book on compilers and optimizations. Type chapter contains section on type inferencing (using ML as an example).

ool'Berard 93

name::
* McsEngl.ool'Berard 93@cptIt,

Edward V. Berard. Essays on Object-Oriented Software Engineering. Prentice Hall.

Many topics on OOSE, includes coverage of OO domain and requirements analysis.

ool'Black 86

name::
* McsEngl.ool'Black 86@cptIt,

A. Black et al. Object-Structure in the Emerald System. OOPSLA '86 Conference Proceedings, SIGPLAN Notices (Special Issue), Vol. 21, n0. 11, pp 78-86.

[I believe there is a more recent article, YTBI]
The original article on Emerald. OO language without inheritance but with abstract types and static subtype polymorphism. Also designed for distributed programming and reuse. See article for references: Jade on reuse [Raj 89]) and Distr. Prog.

ool'Black 87

name::
* McsEngl.ool'Black 87@cptIt,

A. Black, N. Hutchinson, E. Jul, H. Levyand L. Carter. Distribution and Abstract Types in Emerald, IEEE Transactions on Software Engineering, Vol. SE13, no. 1 Jam., pp 65-76.

Subtype polymorphism for distributed programming in Emerald [Black 86].

ool'Blair 89

name::
* McsEngl.ool'Blair 89@cptIt,

"Genericity vs Inheritance vs Delegation vs Conformance vs ..." Gordon Blair, John Gallagher and Javad Malik, Journal of Object Oriented Programming, Sept/Oct 1989, pp11-17.

Recommended by a reader, but the Author has yet to review this article.

ool'Boehm 86

name::
* McsEngl.ool'Boehm 86@cptIt,

B.W. Boehm. A Spiral Model of Software Development and Enhancement. Software Engineering Notes, Aug., vol. 11 (4), p 22.

Presents an alternative evolutionary approach to the strict waterfall software engineering life-cycle. Now a classic, most OO methodologies now emphasize the iterative or evolutionary approach to software development.

ool'Booch 87

name::
* McsEngl.ool'Booch 87@cptIt,

Grady Booch. Software Engineering with Ada. 2nd Ed. Benjamin Cummings.

Booch in his early years. Mostly object-based programming with Ada.

ool'Booch 87b

name::
* McsEngl.ool'Booch 87b@cptIt,

Grady Booch. Software Components With Ada, Structures, Tools, and Subsystems. Benjamin Cummings.

A taxonomy and collection of object-based components in Ada (includes code). Has many examples with generics.

ool'Booch 91

name::
* McsEngl.ool'Booch 91@cptIt,

Booch, Grady. Object-Oriented Design With Applications. Benjamin Cummings.

The often referred to book on OOD. Offers design notation and methodology. Brief coverage of OOA and elaborate OOD/P coverage in the applications. Good on basic principles and has case studies in Smalltalk, Object Pascal, C++, CLOS and Ada.
Also contains an *elaborate* classified bibliography on many areas of OO.

ool'Booch 94

name::
* McsEngl.ool'Booch 94@cptIt,

Grady Booch. Object-Oriented Analysis And Design With Applications, 2nd Ed. Benjamin Cummings. ISBN 0-8053-5340-2.

The next FAQ should be updated to the second edition. All examples are now in C++. Booch incorporates several other major methodologies including Wirf-Brock's CRC (Class-Responsibility-Collaboration) and Jacobson's Use- Cases.

ool'Cardelli 85

name::
* McsEngl.ool'Cardelli 85@cptIt,

L. Cardelli and P. Wegner. On Understanding Types, Data Abstraction, and Polymorphism. ACM Computing Surveys vol. 17 (4).

Long, classic article on Object-Oriented Types, Data Abstraction and Polymorphism. Formal coverage with a type system analysis model as well.

ool'Chambers 92

name::
* McsEngl.ool'Chambers 92@cptIt,

Craig Chambers. The Design and Implementation of the SELF Compiler, an Optimizing Compiler for Object-Oriented Programming Languages. Dept of Computer Science, Stanford University, March 1992.

Covers type optimizations for OO compilers. See Appendix E, PAPERS.

ool'Chambers 93

name::
* McsEngl.ool'Chambers 93@cptIt,

Craig Chambers. Predicate Classes. Proceedings ECOOP '93 O. Nierstrasz, LNCS 707. Springer-Verlag, Kaiserslautern, Germany July 1993 pp 268-296

"... an object is automatically an instance of a predicate class whenever it satisfies a predicate expression associated with the predicate class. The predicate expression can test the value or state of the object, thus supporting a form of implicit property-based classification that augments the explicit type-based classification provided by normal classes. By associating methods with predicate classes, method lookup can depend not only on the dynamic class of an argument but also on its dynamic value or state. [...] A version of predicate classes has been designed and implemented in the context of the Cecil language.
See Appendix E, PAPERS.

ool'de Champeaux 93

name::
* McsEngl.ool'de Champeaux 93@cptIt,

Dennis de Champeaux, Doug Lea, Penelope Faure. Object-Oriented System Development. Addison-Wesley, ISBN 0-201-56355-X.

Covers an integrated treatment of OOA and OOD. Takes serious the computational model of one thread per object. Gives more than usual attention to the OOA&D micro process. Presents a unique OOD language.

ool'Coad 91

name::
* McsEngl.ool'Coad 91@cptIt,

Peter Coad and Edward Yourdon. Object-Oriented Analysis, 2nd ed. Englewood Cliffs, NJ. Prentice Hall.

Coad and Yourdon's OO analysis method.

ool'Coad 91b

name::
* McsEngl.ool'Coad 91b@cptIt,

Peter Coad and Edward Yourdon. Object-Oriented Design. Englewood Cliffs, NJ. Prentice Hall.

Coad and Yourdon's OO design method.

ool'Coleman 94

name::
* McsEngl.ool'Coleman 94@cptIt,

Derek Coleman, et. al. Object-Oriented Development - The Fusion Method. Prentice-Hall Object-Oriented Series. ISBN 0-13-338823-9

Fusion is considered to be a second generation OOAD method in that it builds on successful components of a number of first generation methods (OMT, Booch, CRC, Objectory, etc). However, this has been done with the requirements of industrial software developers in mind. And so issues of traceability, management etc. have been taken into consideration and the Method provides full coverage from requirements through to code.

ool'Cook 90

name::
* McsEngl.ool'Cook 90@cptIt,

W.R. Cook, W.L.Hill, P.S. Canning. Inheritance Is Not Subtyping.
Appeared in [Hudak 90] and [Gunter 94].

Theoretical article on the separation between type and class, or as the authors state between implementation inheritance and subtyping.

ool'Coplien 92

name::
* McsEngl.ool'Coplien 92@cptIt,

James O. Coplien. Advanced C++ Programming Styles and Idioms. Addison Wesley.

Covers advanced C++ programming and performing other more advanced and dynamic styles of OO in C++.

ool'Colbert 89

name::
* McsEngl.ool'Colbert 89@cptIt,

E. Colbert. The Object-Oriented Software Development Method: a practical approach to object-oriented development. Tri-Ada Proc., New York.

Presents the Object-Oriented Software development method. Has emphasis on objects.

[ool'Cox 86;91]

name::
* McsElln.[ool'Cox 86;91]@cptIt,

Cox, Brad J. Object-Oriented Programming, An Evolutionary Approach. Addison Wesley.

The original book on Objective-C. Coverage on object-oriented design and programming. Also covers Objective-C implementation, even into object code. Objective-C... '91 AW by Pinson and Wiener provide another good text.

ool'Embley 92

name::
* McsEngl.ool'Embley 92@cptIt,

D.W. Embley, B.D. Kurtz, S.N. Woodfield. Object-Oriented Systems Analysis, A Model-Driven Approach. Yourdon Press/Prentice Hall, Englewood Cliffs, NJ.

Presents the Embley and Kurtz OO methodology.

ool'Garfinkel 93

name::
* McsEngl.ool'Garfinkel 93@cptIt,

Simson L. Garfinkel and Michael K. Mahoney. NeXTSTEP PROGRAMMING STEP ONE: Object-Oriented Applications. Springer-Verlag.

Introduction to the NextStep environment and applications development.

ool'Goldberg 83

name::
* McsEngl.ool'Goldberg 83@cptIt,

Adele Goldberg and David Robson. Smalltalk-80 The Language and Its Implementation. Addison Wesley.

The original book on Smalltalk. Covers implementation. Also known as "the Blue Book". Out of print. Superceded by [Goldberg ??].

ool'Goldberg ??

name::
* McsEngl.ool'Goldberg ??@cptIt,

Adele Goldberg and David Robson. Smalltalk-80: The Language. Addison-Wesley.

The "Purple Book". Omits the obsolete abstract virtual machine description from the Blue Book.

ool'Gunter 94

name::
* McsEngl.ool'Gunter 94@cptIt,

Carl A. Gunter and John C. Mitchell. Theoretical Aspects of Object- Oriented Programming. MIT Press. ISBN 0-262-07155-X.

Highly mathematical, formal coverage of object-oriented programming; primarily on typing.

ool'Harmon 93

name::
* McsEngl.ool'Harmon 93@cptIt,

Paul Harmon. Objects In Action: Commercial Applications Of Object- Oriented Technologies. Jan, 1993. A-W ISBN 0-201-63336-1.

Sponsored by the OMG to summarize the use of OO technology in industry and business, contains a brief history and summary of OO and many case studies.

ool'HOOD 89

name::
* McsEngl.ool'HOOD 89@cptIt,

HOOD Working Group. HOOD Reference Manual Issue 3.0. WME/89-173/JB. Hood User Manual Issue 3.0. WME/89-353/JB. European Space Agency.

Presnets the HOOD (Hierarchical Object-Oriented Design) OOSE methodology. From the European Space Agency. Based on Ada and object-based.

ool'Hudak 90

name::
* McsEngl.ool'Hudak 90@cptIt,

P. Hudak. Principles of Programming Languages. ACM Press, pp 125 -135.

Contains several articles, including [Cook 90].

ool'Hudak 92

name::
* McsEngl.ool'Hudak 92@cptIt,

Paul Hudak and Simon Peyton Jones. Haskell Report. SIGPLAN Notices. 1992, vol 27, no 5.

Haskell reference.

ool'Humphrey 89

name::
* McsEngl.ool'Humphrey 89@cptIt,

Watts Humphrey. Managing the Software Process. Addison Wesley. ISBN 0-201-18095-2

Sponsored by the Software Engineering Institute (SEI), the presented project management model is inspired by the work of Boehm, Brooks, Deming and Juran and represents a strong step in the direction of achieving 6 sigma defect rate prevention and optimizing the software development process for quality, productivity, and reliability. Presents the CMM, see section 1.21.

ool'Humphrey 95

name::
* McsEngl.ool'Humphrey 95@cptIt,

Watts S. Humphrey - "A Discipline for Software Engineering", 816 pp., $47.50, 1995, Addison-Wesley (1-800-824-7799) ISBN 0-201-54610-8

A scaled down version of [Humphrey 89] for individual software engineers. A new classic. See section 1.21.

[ool'IBM 90;91]

name::
* McsElln.[ool'IBM 90;91]@cptIt,

Various Documents from the IBM International Technical Centers: GG24-3647-00, GG24-3641-00, GG24-3566-00, GG24-3580-00.

Present IBM's OOSE methodology.

ool'ISO

name::
* McsEngl.ool'ISO@cptIt,

ISO Standards Compendium - ISO 9000 Quality Management, 5th edition. Switzerland. ISBN 92-67-10206-0.

The complete standard. 9000-3 discusses software and 9004 is a quality management standard.

ool'Jacobson 92

name::
* McsEngl.ool'Jacobson 92@cptIt,

Ivar Jacobson, et al. Object-Oriented Software Engineering - A Use Case Driven Approach. ACM Press/Addison Wesley.

Presents Jacobson's new OOSE methodology based on use cases.

ool'Jacobson 94

name::
* McsEngl.ool'Jacobson 94@cptIt,

Ivar Jacobson. Toward Mature Object Technology. ROAD, Vol. 1, No. 1, May-June. SIGS Publications.

Overview of OOSE's object-oriented approach. Includes specialized objects and layering for complexity management.

ool'Jones 92

name::
* McsEngl.ool'Jones 92@cptIt,

Rick Jones. Extended type checking in Eiffel. Journal of Object- Oriented Programming, May 1992 issue, pp.59-62.

Presents subtype polymorphic extension to Eiffel (static typing only).

ool'Jurik 92

name::
* McsEngl.ool'Jurik 92@cptIt,

John A. Jurik, Roger S. Schemenaur, "Experiences in Object Oriented Development," ACM 0-89791-529-1/92/0011-0189.

Presents the EVB OOSE methodology. Also: Barbara McAllister, Business Development, EVB Software Engineering, Inc., (301)695-6960, barb@evb.com.

ool'Kiczales 92

name::
* McsEngl.ool'Kiczales 92@cptIt,

Gregor Kiczales, Jim des Rivieres, Daniel G. Bobrow. The Art of the Metaobject Protocol. The MIT Press.

Reflection and Metaobject Protocols (MOPs). Uses a CLOS subset, Clossette, as a foundation.

ool'Kim 89

name::
* McsEngl.ool'Kim 89@cptIt,

Won Kim and Frederick Lochovsky Editors. Object-Oriented Concepts, Applications, and Databases.

Collection of articles on advanced OO and research systems.

ool'Krasner 88

name::
* McsEngl.ool'Krasner 88@cptIt,

G. E. Krasner and S. T. Pope. A Cookbook for Using the Model-View- Controller User Interface Paradigm in Smalltalk-80. JOOP, vol 1, no 3, August/ September, 1988, pp 26-49,

An early paper published on MVC.

ool'Lakoff 87

name::
* McsEngl.ool'Lakoff 87@cptIt,

George Lakoff. Women, Fire, and Dangerous Things: What Categories Reveal About The Mind. UOC Press.

An almost formal view of classification/categorization by the noted cognitive scientist, George Lakoff. His view blasts objectivism and contends to replace it with a subjectivist view, based on a study of humans, natural language, and concept formation.

ool'LaLonde 90

name::
* McsEngl.ool'LaLonde 90@cptIt,

Wilf R. LaLonde and John R. Pugh. Inside Smalltalk: Volume 1. Prentice Hall.

Good introduction to Smalltalk.

ool'LaLonde 90b

name::
* McsEngl.ool'LaLonde 90b@cptIt,

Wilf R. LaLonde and John R. Pugh. Inside Smalltalk: Volume 2. Prentice Hall.

Excellent coverage of MVC. However, it's based on ParcPlace Smalltalk-80, version 2.5, which is obsolete.

ool'Liskov 93

name::
* McsEngl.ool'Liskov 93@cptIt,

Barbara Liskov and Jeannette M. Wing. Specifications and Their use in Defining Subtypes. OOPSLA 93, pp 16-28. ASM SIGPLAN Notices, V 28, No 10, Oct. 1993. A-W ISBN 0-201-58895-1.

Specifications on Subtype hierarchies. Helps to insure the semantic integrity of a separate subtype system. See section 2.7.

ool'Madsen 93

name::
* McsEngl.ool'Madsen 93@cptIt,

Ole Lehrmann Madsen, Birger Moller-Pedersen, Kristen Nygaard: Object-oriented programming in the BETA programming language. Addison-Wesley, June 1993. ISBN 0 201 62430 3

The new and authoritative book on BETA, by the original designers. They are some of the same designers of the Simula languages, originating OO.

Also just announced:
Object-Oriented Environments: The Mjolner Approach Editors: Jorgen Lindskov Knudsen, Mats Lofgren, Ole Lehrmann Madsen, Boris Magnusson Prentice Hall: The Object-Oriented Series ISBN: 0-13-009291-6 (hbk)

ool'Martin 92

name::
* McsEngl.ool'Martin 92@cptIt,

James Martin and James J. Odell. Object-Oriented Analysis and Design, Prentice-Hall, Englewood Cliffs, NJ.

Its primary purpose is to indicate how information engineering (IE) can be evolved to accommodate OO. The analysis portion (starting at Chapter 15) attempts to go back to 'first principles' and is based on a formal foundation. Therefore, the IE aspect is not required. Emphasis is more on analysis than design.

ool'Meyer 88

name::
* McsEngl.ool'Meyer 88@cptIt,

Bertrand Meyer. Object-Oriented Software Construction. Prentice Hall. [Is there a new edition out?]

The original book on Eiffel. Coverage on object-oriented design and programming. Also:

ool'Meyer 92

name::
* McsEngl.ool'Meyer 92@cptIt,

Bertrand Meyer. Eiffel: The Language. Prentice Hall. Englewood Cliffs, NJ. 1992.

The definitive book on Eiffel by its author.

ool'Meyer 94

name::
* McsEngl.ool'Meyer 94@cptIt,

Bertrand Meyer. Reusable Software: The Base Object-Oriented Components Libraries.
The new Eiffel class Libraries.

ool'Mugridge 91

name::
* McsEngl.ool'Mugridge 91@cptIt,

Warwick B. Mugridge et al. Multi-Methods in a Statically-Typed Programming Language. Proc. ECOOP.

Efficient implementation of Multi-Methods.

ool'Murray 93

name::
* McsEngl.ool'Murray 93@cptIt,

Robert B. Murray. C++ Strategies and Tactics. Addison Wesley.

C++, has template examples.

ool'Nerson 92

name::
* McsEngl.ool'Nerson 92@cptIt,

Jean-Marc Nerson. Applying Object-Oriented Analysis and Design. CACM, 9/92.

Demonstrates the basics of the BON method/notation. Nerson: marc@eiffel.fr

ool'Paepcke 93

name::
* McsEngl.ool'Paepcke 93@cptIt,

Andreas Paepcke. Object-Oriented Programming: The CLOS Perspective. MIT Press. ISBN 0-262-16136-2.

CLOS, readable introduction to its metaobject protocol, comparisons with other languages, uses and methodology, and implementation. Develops a persistent object metaclass example.

ool'Raj 89

name::
* McsEngl.ool'Raj 89@cptIt,

R.K. Raj and H.M. Levy. A Compositional Model for Software Reuse. The Computer Journal, Vol 32, No. 4, 1989.

A novel approach aading reuse to Emerald [Black 86] without inheritance.

ool'Reenskaug 91

name::
* McsEngl.ool'Reenskaug 91@cptIt,

T. Reenskaug, et al. OORASS: seamless support for the creation and maintenance of object-oriented systems. Journal of Object-Oriented Programming, 5(6).

Presents the Object-Oriented Role Analysis, synthetic, and Structuring OOSE methodology.

ool'Reenskaug 95

name::
* McsEngl.ool'Reenskaug 95@cptIt,

T. Reenskaug, et al. WORKING WITH OBJECTS: The OOram Software Engineering Method Manning ISBN: 1-884777-10-4, PH ISBN: 0-13-452930-8.

Accolades: "...the authors take you on a journey through object techniques filled with examples. You will come away from this book enriched, with a sound understanding of OT-based abstractions for modeling programs." Richard Mark Soley, OMG "The first method that deals realistically with reuse, and one of the few that comes close to describing what I do when I design." Ralph Johnson, University of Illinois "...the first complete account of role-based methods that have proven to be a step forward in OO design and development."

ool'Rout 95

name::
* McsEngl.ool'Rout 95@cptIt,

T.T. Rout. Ed. Software Process Assessment: Theory and Practice. Proceedings, 2nd International SPICE Symposium. Australian Software Quality Research Institute, Brisbane, Australia., June 1 - 2, 1995. ISBN 0 86857 676 X.

Excellent coverage of the new SPICE standard: history, present details, goals.

ool'Royce 70

name::
* McsEngl.ool'Royce 70@cptIt,

W. W. Royce. Managing the Development of Large Software Systems. Proceedings of IEEE WESCON, August 1970.

Introduces the Waterfall Process Model.

ool'Rumbaugh 91

name::
* McsEngl.ool'Rumbaugh 91@cptIt,

Rumbaugh James, et al. Object-Oriented Modeling and Design. Prentice Hall.

The often referred to book on OOA/OOD. Introduces the Object Modeling Technique (OMT) OOA/D notation and methodology. Has case studies.

ool'Sciore 89

name::
* McsEngl.ool'Sciore 89@cptIt,

Edward Sciore. Object Specialization. ACM Transactions on Information Systems, Vol. 7, No. 2, April 1989, p 103.

A hybrid approach between delegation and classical OO.

ool'Selic 94

name::
* McsEngl.ool'Selic 94@cptIt,

Bran Selic, Garth Gullekson, and Paul T. Ward. Real-Time Object-Oriented Modeling. Published by John Wiley & Sons. ISBN 0-471-59917-4

OO method addresses complete lifecycle needs of real-time systems. Emphasizes executable models for early validation of requirements, architecture, and design combined with techniques for automatic generation of implementations. Specifically real-time with iterative and incremental development process. Single consistent graphical modeling concepts apply uniformly to OOA/D/I.

ool'Shlaer 88

name::
* McsEngl.ool'Shlaer 88@cptIt,

Sally Shlaer and Stephen J. Mellor. Object-Oriented Systems Analysis: Modeling the World in Data.

Credited as the first book proposing an OOA method.

ool'Shlaer 92

name::
* McsEngl.ool'Shlaer 92@cptIt,

Sally Shlaer and Stephen J. Mellor. Object Lifecycles: Modeling the World in States.

An addition to [Shlaer 88], provides dynamic modeling with a state- transition driven approach.

ool'Strachey 67

name::
* McsEngl.ool'Strachey 67@cptIt,

C. Strachey. Fundamental Concepts in programming languages. Lecture Notes for International Summer School in Computer Programming, Copenhagen, Aug.

Contains original, classical definition of polymorphism.

ool'Stroustrup 90

name::
* McsEngl.ool'Stroustrup 90@cptIt,

Ellis, M.A., Stroustrup. The Annotated C++ Reference Manual. Addison Wesley.

The ARM; the original and definitive book on C++. Serves as the ANSI base document for C++. Also covers C++ implementation. It is meant as a reference (including for compiler writers), not as a tutorial for beginners. Perhaps a better ref is [Stroustrup 91].

ool'Stroustrup 91

name::
* McsEngl.ool'Stroustrup 91@cptIt,

Stroustrup, B. The C++ Programming Language (2nd edition).

Has the ARM, better reference for the use of C++ (recommended by bs). Contains sections on object-oriented software engineering.

ool'Tasker 93

name::
* McsEngl.ool'Tasker 93@cptIt,

Dan Tasker. The Problem Space, Practical Techniques for Gathering & Specifying Requirements. ISBN: 0-646-12524-9. Avail only from author, dant@swdev.research.otc.com.au.

Object-oriented requirements definition. Hypertext. Uses Rumbaugh's OMT as a base. See also APPENDIX D.

ool'Ungar 87

name::
* McsEngl.ool'Ungar 87@cptIt,

D. Ungar and R.B. Smith. The Self Papers. [Entry To Be Completed]

The documents on Self; a delegation/prototyping language. Also covers Self implementation and optimization. See also APPENDIX E, PAPERS section.

ool'Wasserman 90

name::
* McsEngl.ool'Wasserman 90@cptIt,

A.I. Wasserman et al. The Object-Oriented Software Design Notation for Software Design Representation. IEEE Computer, 23(3).

Presents the Object-Oriented Structured Design (OOSD) OOSE methodology. Traditional structured techniques to OO, hybrid containing structured design and Booch.

ool'Wegner 87

name::
* McsEngl.ool'Wegner 87@cptIt,

Peter Wegner. "Dimensions of Object-Based Language Design", Proceedings of OOPSLA '87, October 4-8 1987, SIGPLAN Notices (Special Issue), V22, No 12, pp168-182, 1987.

ool'Wikstrom 87

name::
* McsEngl.ool'Wikstrom 87@cptIt,

Ake Wikstrom. Functional Programming Using Standard ML. Prentice Hall, ISBN 0-13-331661-0, 1987.

ML reference.

ool'Wilkie 93

name::
* McsEngl.ool'Wilkie 93@cptIt,

George Wilkie. Object-Oriented Software Engineering - The Professional Developer's Guide. Addison Wesley.

Covers OOSE, 11 popular analysis and design methodologies with examples, comparisons, and analysis, information systems (OODB), and case studies.

ool'Winter Partners

name::
* McsEngl.ool'Winter Partners@cptIt,

Winter Partners
A proprietary toolset (OSMOSYS) for OOA and OOD.

Winter Partners
London Office: Zurich Office: West Wing, The Hop Exchange 24a Southwark Street Florastrasse 44 London SE1 1TY CH-8008 Zurich England Switzerland Tel. +44-(0)71-357-7292 Tel. +41-(0)1-386-95 11 Fax. +44-(0)71-357-6650 Fax. +41-(0)1-386-95 00

ool'Wirfs-Brock 90

name::
* McsEngl.ool'Wirfs-Brock 90@cptIt,

Rebecca Wirfs-Brock, Brian Wilkerson, Lauren Wiener. Designing Object Oriented Software, Englewood Cliffs, NJ. Prentice Hall.

Presents a "Responsibility Driven Design" (RDD) with "Class, Responsibility, Collaboration" (CRC) technique, a modern and new OOA/OOD methodology.

ool'Yaoqing 93

name::
* McsEngl.ool'Yaoqing 93@cptIt,

Gao Yaoqing and Yuen Chung Kwong. A Survey of Implementations of Parallel, Concurrent, and Distributed Smalltalk. ACM SIGPLAN Notices. Vol 28, No. 9, Sept 93.

Covers implementations of Parallel, Concurrent, and Distributed Smalltalk.

ool'Yourdon 92

name::
* McsEngl.ool'Yourdon 92@cptIt,

Edward Yourdon. Decline and Fall of the American Programmer. YPCS.

Excellent coverage of modern software engineering practice and world-class software development organizations.

ool'standard#cptIt139#

name::
* McsEngl.ool'standard@cptIt,

ANSI

ISO

ool'syntax

name::
* McsEngl.ool'syntax@cptIt,

SPECIFIC

name::
* McsEngl.ool.specific@cptIt,

_SPECIFIC: ool.ALPHABETICALLY:
* C++#cptItsoft677#
* EIFFEL
* JAVA#cptItsoft1012#
* JavaScript#cptIt554#
* MooZ,
* Object-Z
* OOZE
* SIMULA
* SMALLTALK#cptItsoft1038#
* VDM++
* Z++

Hathaway; Comp.Object FAQ

name::
* McsEngl.Hathaway; Comp.Object FAQ@cptIt,

What Are The Major Object-Oriented Programming Languages Today?

Statically-Typed:
Add 1 To Cobol giving Cobol with Objects.
C++
Classic-Ada
Dragoon
Emerald/Jade
Java (comp.lang.java, http://java.sun.com/)
Object Pascal
Trellis/Owl

Dynamically-Typed:
Actors Languages
C+@
Flavors
Python (new WWW, see http://www.python.org/)
Self
Smalltalk

Both:
Actor
Ada95
BETA
C++ (With RTTI)
Cecil
CLOS
Eiffel
Modula-3
Objective-C(http://www.marble.com/people/dekorte/Objective-C/objc.html)
Sather
[Hathaway, Bod. Comp.Object FAQ v1.0.9, 2 Apr. 1996]

ool.PROTOTYPE-BASED

name::
* McsEngl.ool.PROTOTYPE-BASED@cptIt,
* McsEngl.conceptIt220.1,
* McsEngl.classless-programming@cptIt220.1,
* McsEngl.instance-based-programming@cptIt220.1,
* McsEngl.mdp.PROTOTYPE-BASED@cptIt,
* McsEngl.prototypal-programing-language@cptIt,
* McsEngl.prototypal-system@cptIt,
* McsEngl.prototypalism@cptIt,
* McsEngl.prototype-based-language@cptIt220.1,
* McsEngl.prototype-based-programming@cptIt220.1,
* McsEngl.prototype-oriented-programming@cptIt220.1,

_DESCRIPTION:
In a prototypal system, objects inherit from objects.
[http://javascript.crockford.com/prototypal.html]
===
Prototype-based programming is a style of object-oriented programming in which classes are not present, and behavior reuse (known as inheritance in class-based languages) is performed via a process of cloning existing objects that serve as prototypes. This model can also be known as classless, prototype-oriented or instance-based programming. Delegation is the language feature that supports prototype-based programming.
The first prototype-oriented programming language was Self developed by David Ungar and Randall Smith in the mid 1980s to research topics in object-oriented language design. Since the late 1990s, the classless paradigm has grown increasingly popular. Some current prototype-oriented languages are ECMAScript (and its implementations JavaScript, JScript and Flash's ActionScript), Cecil, NewtonScript, Io, MOO, REBOL, and Lisaac.
[http://en.wikipedia.org/wiki/Prototype-based_programming]

_SPECIFIC:
Some languages choose to offer object oriented programming through mechanisms other than classes. One such mechanism is prototyping. JavaScript, Self, Lua, ActionScript, Agora, Cecil and many other languages are prototype-based.
[http://www.learn-javascript-tutorial.com/Prototype-Based-Inheritance.cfm]

lcp.PROBABILISTIC

name::
* McsEngl.lcp.PROBABILISTIC@cptIt,
* McsEngl.PPL@cptIt,
* McsEngl.probabilistic-programming-language@cptIt,

_DESCRIPTION:
A probabilistic programming language (PPL) is a programming language specially designed to describe and infer with probabilistic models.

PPLs often extend from a basic language. The inventors' choices of underlying basic language depend on the similarity of their models to the basic language's ontology, as well as commercial considerations and personal preference. For instance, Infer.NET is based on .NET framework,[1] while PRISM extends from Prolog.[2] However, some PPLs such as BUGS and Stan define a self-contained language for their users to use, which is not obviously derived from a predecessor language.[3][4]

Currently there are several PPLs in active development, some of them have advanced to the beta stage. However because PRMs are new, up to year 2010 there have been no well-known software projects utilizing those languages.
[http://en.wikipedia.org/wiki/Probabilistic_programming_language]

lcp.PROCEDURAL

name::
* McsEngl.lcp.PROCEDURAL@cptIt,
* McsEngl.conceptIt248.1,
* McsEngl.imperative-language@cptIt,
* McsEngl.procedural-language@cptIt,
* McsEngl.procedural-programming@cptIt,
* McsEngl.procedural-programming-language@cptIt,
* McsEngl.procedural-computer-language@cptIt,
* McsEngl.procedural'language@cptIt1037,
====== lagoGreek:
* McsElln.ΑΛΓΟΡΙΘΜΙΚΗ-ΓΛΩΣΣΑ@cptIt,
* McsElln.ΔΙΑΔΙΚΑΣΙΑΚΗ-ΓΛΩΣΣΑ@cptIt,

=== _NOTES: ΑΛΓΟΡΙΘΜΙΚΗ ΓΛΩΣΣΑ: [Βακάλη κα, Ανάπτυξη εφαρμογών, γ' λυκείου, 1999 α' έκδοση, 128]

ΔΙΑΔΙΚΑΣΙΑΚΗ ΓΛΩΣΣΑ: [Βακάλη κα, Ανάπτυξη εφαρμογών, γ' λυκείου, 1999 α' έκδοση, 128]

_DEFINITION:
Conventional software programs are written as a series of tasks that the computer must perform, such as:
1. read a number
2. multiply the number by 10
4. display the number
5. etc..
This is often called procedural information.
[SOURCE: http://projects.technwledge.com/hpkb/intro.html (2000jul25)]

ΔΙΑΔΙΚΑΣΙΑΚΗ ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ είναι η γλώσσα προγραμματισμού που επιτρέπει να προσδιοριστεί ένα πρόγραμμα με τον ορισμό ενός συνόλου διαδικασιών. Οι διαδικασίες μπορούν να καλούν η μία την άλλη και καλούνται από το κύριο πρόγραμμα (το οποίο μπορεί να θεωρηθεί και το ίδιο διαδικασία). Οι περισσότερες γνωστές γλώσσες προγραμματισμού (Pascal, Basic, C, Fortran) είναι διαδικασιακές.
[Αντωνάκος κα, "Ανάπτυξη εφαρμογών..." Γ' Λυκείου, 1999 α' έκδοση, 57]

(Or "imperative language"). Used in contrast to {declarative language} to describe a language where the programmer specifies an explicit sequences of steps to follow to produce a result.
Some common examples of procedural languages include {Basic}, {Pascal}, {C} and {Modula-2}.
[FOLDOC 1998feb] {1998-04-30}

ΕΧΕΙ ΧΑΡΑΚΤΗΡΑ ΚΑΘΑΡΑ ΔΙΑΔΙΚΑΣΤΙΚΟ.

EVOLUTION#cptCore725#
1970-1979:
Procedural or structured programming was popular then.
[E.R. HAROLD, Java Tutorial, {1996-11-20}]

_GENERIC
* programming_language#cptItsoft248#
OBJECT-ORIENTED-LANGUAGE#ql:[Level CONCEPT:conceptIt220 rl?]##cptIt220#

_SPECIFIC:
C,
PASCAL
FORTRAN
COBOL
ALGOL
PL/1
APL
BASIC
PASCAL
C
MODULA-2
ADA

lcp.PROTOTYPE-BASED

name::
* McsEngl.lcp.PROTOTYPE-BASED@cptIt,
* McsEngl.prototype-based-programming-language@cptIt,

_DESCRIPTION:
Prototype-based programming languages[edit]

Main article: Prototype-based programming
Traditional class-based OO languages are based on a deep-rooted duality:

Classes define the basic qualities and behaviours of objects.
Object instances are particular manifestations of a class.
For example, suppose objects of the Vehicle class have a name and the ability to perform various actions, such as drive to work and deliver construction materials. Bob's car is a particular object (instance) of the class Vehicle, with the name "Bob's car". In theory one can then send a message to Bob's car, telling it to deliver construction materials.

This example shows one of the problems with this approach: Bob's car, which happens to be a sports car, is not able to carry and deliver construction materials (in any meaningful sense), but this is a capability that Vehicles are modelled to have. A more useful model arises from the use of subclassing to create specializations of Vehicle; for example Sports Car and Flatbed Truck. Only objects of the class Flatbed Truck need provide a mechanism to deliver construction materials; sports cars, which are ill suited to that sort of work, need only drive fast. However, this deeper model requires more insight during design, insight that may only come to light as problems arise.

This issue is one of the motivating factors behind prototypes. Unless one can predict with certainty what qualities a set of objects and classes will have in the distant future, one cannot design a class hierarchy properly. All too often the program would eventually need added behaviours, and sections of the system would need to be re-designed (or refactored) to break out the objects in a different way.[citation needed] Experience with early OO languages like Smalltalk showed that this sort of issue came up again and again. Systems would tend to grow to a point and then become very rigid, as the basic classes deep below the programmer's code grew to be simply "wrong". Without some way to easily change the original class, serious problems could arise.[citation needed]

Dynamic languages such as Smalltalk allowed for this sort of change via well-known methods in the classes; by changing the class, the objects based on it would change their behaviour. However, such changes had to be done very carefully, as other objects based on the same class might be expecting this "wrong" behavior: "wrong" is often dependent on the context. (This is one form of the fragile base class problem.) Further, in languages like C++, where subclasses can be compiled separately from superclasses, a change to a superclass can actually break precompiled subclass methods. (This is another form of the fragile base class problem, and also one form of the fragile binary interface problem.)

In Self, and other prototype-based languages, the duality between classes and object instances is eliminated.

Instead of having an "instance" of an object that is based on some "class", in Self one makes a copy of an existing object, and changes it. So Bob's car would be created by making a copy of an existing "Vehicle" object, and then adding the drive fast method, modelling the fact that it happens to be a Porsche 911. Basic objects that are used primarily to make copies are known as prototypes. This technique is claimed to greatly simplify dynamism. If an existing object (or set of objects) proves to be an inadequate model, a programmer may simply create a modified object with the correct behavior, and use that instead. Code which uses the existing objects is not changed.
[http://en.wikipedia.org/wiki/Self_(programming_language)]

lcp.PUNYCODE

_CREATED: {2014-03-11}

name::
* McsEngl.lcp.PUNYCODE@cptIt,
* McsEngl.bootstring@cptIt,
* McsEngl.punycode-method@cptIt,

_DESCRIPTION:
Bootstring represents an arbitrary sequence of code points (the
"extended string") as a sequence of basic code points (the "basic
string").
...
Punycode is a simple and efficient transfer encoding syntax designed
for use with Internationalized Domain Names in Applications (IDNA).
It uniquely and reversibly transforms a Unicode string into an ASCII
string. ASCII characters in the Unicode string are represented
literally, and non-ASCII characters are represented by ASCII
characters that are allowed in host name labels (letters, digits, and
hyphens). This document defines a general algorithm called
Bootstring that allows a string of basic code points to uniquely
represent any string of code points drawn from a larger set.
Punycode is an instance of Bootstring that uses particular parameter
values specified by this document, appropriate for IDNA.
[http://tools.ietf.org/html/rfc3492]

punycode'archetype

name::
* McsEngl.punycode'archetype@cptIt,
* McsEngl.puncode'extented-string@cptIt,

punycode'code

name::
* McsEngl.punycode'code@cptIt,
* McsEngl.puncode'basic-string@cptIt,

punycode'completeness

name::
* McsEngl.punycode'completeness@cptIt,

_DESCRIPTION:
Completeness: Every extended string (sequence of arbitrary code
points) can be represented by a basic string (sequence of basic
code points). Restrictions on what strings are allowed, and on
length, can be imposed by higher layers.
[http://tools.ietf.org/html/rfc3492]

punycode'reversibility

name::
* McsEngl.punycode'reversibility@cptIt,

_DESCRIPTION:
Reversibility: Any extended string mapped to a basic string can be recovered from that basic string.
[http://tools.ietf.org/html/rfc3492]

punycode'simplicity

name::
* McsEngl.punycode'simplicity@cptIt,

_DESCRIPTION:
Simplicity: The encoding and decoding algorithms are reasonably
simple to implement. The goals of efficiency and simplicity are
at odds; Bootstring aims at a good balance between them.
[http://tools.ietf.org/html/rfc3492]

punycode'technique

name::
* McsEngl.punycode'technique@cptIt,

_SPECIFIC:
The following sections describe the four techniques used in
Bootstring.
"Basic code point segregation" is a very simple and
efficient encoding for basic code points occurring in the extended
string: they are simply copied all at once.
"Insertion unsort coding" encodes the non-basic code points as deltas, and processes
the code points in numerical order rather than in order of
appearance, which typically results in smaller deltas.
The deltas are represented as "generalized variable-length integers", which use
basic code points to represent nonnegative integers.
The parameters of this integer representation are dynamically adjusted using "bias
adaptation", to improve efficiency when consecutive deltas have
similar magnitudes.
[http://tools.ietf.org/html/rfc3492]

lcp.QUERY (qcl)

_CREATED: {2007-12-05}

name::
* McsEngl.conceptIt437,
* McsEngl.methodQuery@cptIt437, {2011-08-31}
* McsEngl.query-computer-language@cptIt437,
* McsEngl.query-cpl@cptIt437,
* McsEngl.query-language@cptIt437,

qcl'DEFINITION

Query languages are computer languages used to make queries into databases and information systems.
[http://en.wikipedia.org/wiki/Query_language]

qcl'GENERIC

_GENERIC:
* method-data-processing#cptItsoft248#

DEFINITION

_DESCRIPTION:
Regexp is a query-language for strings.
[hmnSngo.2014-03-14]
===
In computing, a regular expression (abbreviated regex or regexp) is a sequence of characters that forms a search pattern, mainly for use in pattern matching with strings, or string matching, i.e. "find and replace"-like operations. The concept arose in the 1950s, when Kleene formalized the description of a regular language, and came into common use with the Unix text processing utilities ed, an editor, and grep (global regular expression print), a filter.

Each character in a regular expression is either understood to be a metacharacter with a special meaning, or a regular character with its literal meaning. Together, they can automatically identify textual material of a given pattern, or process a number of instances of it that can vary from a precise equality to a very general similarity of the pattern. The pattern sequence itself is an expression that is a statement in a language designed specifically to represent prescribed targets in the most concise and flexible way to direct the automation of text processing of general text files, specific textual forms, or of random input strings.

A very simple use of a regular expression would be to locate the same word spelled two different ways in a text editor, for example seriali[sz]e. A wildcard match can also achieve this, but wildcard matches differ from regular expressions in that wildcards are limited to what they can pattern (having fewer metacharacters and a simple language-base), whereas regular expressions are not. A usual context of wildcard characters is in globbing similar names in a list of files, whereas regular expressions are usually employed in applications that pattern-match text strings in general. For example, the simple regexp ^[ \t]+ matches excess whitespace at the beginning of a line. An advanced regexp used to match any numeral is ^[+-]?(\d+\.\d+|\d+\.|\.\d+|\d+)([eE][+-]?\d+)?$ . See Examples for more examples.



The Kleene star: "zero or more".
A regular expression processor processes a regular expression statement expressed in terms of a grammar in a given formal language, and with that examines the target text string, parsing it to identify substrings that are members of its language, the regular expressions.

Regular expressions are so useful in computing that the various systems to specify regular expressions have evolved to provide both a basic and extended standard for the grammar and syntax; modern regular expressions heavily augment the standard[citation needed]. Regular expression processors are found in several[vague] search engines, search and replace dialogs of several[vague] word processors and text editors, and in the command lines of text processing utilities, such as sed and AWK.

Many programming languages provide regular expression capabilities, some built-in, for example Perl, Ruby, AWK, and Tcl, and others via a standard library, for example .NET languages, Java, Python and C++ (since C++11). Most other languages offer regular expressions via a library.
[http://en.wikipedia.org/wiki/Regular_expression]

rgx'GENERIC

_GENERIC:
* query-computer-language##

rgx'archetype (subject-string)

name::
* McsEngl.rgx'archetype (subject-string)@cptIt,
* McsEngl.rearchetype@cptIt, {2014-03-15}
* McsEngl.rgxarchetype@cptIt, {2014-04-27}
* McsEngl.regexp'subject-string@cptIt,

_DESCRIPTION:
A regular expression is a pattern that is matched against a subject string from left to right.
[https://www.gnu.org/software/sed/manual/html_node/Regular-Expressions.html]

rgx'character

name::
* McsEngl.rgx'character@cptIt,
* McsEngl.rgxarchetype'character@cptIt,
* McsEngl.rgx'character@cptIt,
* McsEngl.rgxchr@cptIt,

_DESCRIPTION:
The string is an ordered set of computer-characters.

rgxchr'case

name::
* McsEngl.rgxchr'case@cptIt,

_DESCRIPTION:
The case (capital, small) of the characters.

rgxchr.generic

name::
* McsEngl.rgxchr.generic@cptIt,
* McsEngl.rgx'character-class@cptIt,
* McsEngl.rgxchr.generic@cptIt,

_DESCRIPTION:
A set of characters with common attributes.

_SPECIFIC:
* rgxchr.alpha      [[:alpha:]]  Letters
* rgxchr.alphaNo
* rgxchr.any      .
* rgxchr.digit [0-9]      \d
* rgxchr.digitNo      \D
* rgxchr.end      $
* rgxchr.range      [a-zA-Z0-9]
* rgxchr.start      ^
* rgxchr.whitespace [\r\n\t\f ]  \s
* rgxchr.whitespaceNo    \S
* rgxchr.word [a-zA-Z0-9_]    \w
* rgxchr.wordNo      \W
===
Character classes
[abc]  A single character of: a, b or c
[^abc]  A character except: a, b or c
[a-z]  A character in the range: a-z
[^a-z]  A character not in the range: a-z
[a-zA-Z]  A character in the range: a-z or A-Z :alnum:,  Letters and digits :ascii:,  Ascii codes 0-127 :blank:,  Space or tab only :cntrl:,  Control characters :digit:,  Decimal digits :graph:,  Visible characters (not space) :lower:,  Lowercase letters :print:,  Visible characters :punct:,  Visible punctuation characters :space:,  Whitespace :upper:,  Uppercase letters :word:,  Word characters :xdigit:,  Hexadecimal digits

_SPECIFIC:
Shorthand Character Classes
\d matches a single character that is a digit, \w matches a "word character" (alphanumeric characters plus underscore), and \s matches a whitespace character (includes tabs and line breaks). The actual characters matched by the shorthands depends on the software you're using. In modern applications, they include non-English letters and numbers.
[http://www.regular-expressions.info/quickstart.html]

rgxchr.genericNo

name::
* McsEngl.rgxchr.genericNo@cptIt,
* McsEngl.rgxchr.genericNo@cptIt,

_DESCRIPTION:
A set of characters with common attributes.

_SPECIFIC:
* rgxchr.Carriage_return  \r
* rgxchr.form_feed (ASCII 12)  \f
* rgxchr.Newline    \n
* rgxchr.Null character  \0
* rgxchr.Tab    \t

rgxchr.GROUP

name::
* McsEngl.rgxchr.GROUP@cptIt,
* McsEngl.rgxchr.group@cptIt,

_DESCRIPTION:
A part of the archetype-string.

Group construcs
(...)  Capture everything enclosed
(a|b)  Match either a or b
(?:...)  Match everything enclosed
(?=...)  Positive lookahead
(?!...)  Negative lookahead

rgxchr'lookaround

name::
* McsEngl.rgxchr'lookaround@cptIt,
* McsEngl.rgx'lookaround@cptIt,

_DESCRIPTION:
Lookaround
Lookaround is a special kind of group. The tokens inside the group are matched normally, but then the regex engine makes the group give up its match and keeps only the result. Lookaround matches a position, just like anchors. It does not expand the regex match.

q(?=u) matches the q in question, but not in Iraq. This is positive lookahead. The u is not part of the overall regex match. The lookahead matches at each position in the string before a u.

q(?!u) matches q in Iraq but not in question. This is negative lookahead. The tokens inside the lookahead are attempted, their match is discarded, and the result is inverted.

To look backwards, use lookbehind. (?<=a)b matches the b in abc. This is positive lookbehind. (?<!a)b fails to match abc.

You can use a full-fledged regular expression inside the lookahead. Most applications only allow fixed-length expressions in lookbehind.
[http://www.regular-expressions.info/quickstart.html]

rgxchr.position

name::
* McsEngl.rgxchr.position@cptIt,
* McsEngl.rgxarchetype'position-character@cptIt,
* McsEngl.rgxchr.position@cptIt,

_SPECIFIC:
* rgxchr.end    $
* rgxchr.end.absolute  \z  Absolute end of string
* rgxchr.start    ^
* rgxchr.start    \A  Start of string
* word_boundary    \b
* word_boundaryNo  \B

rgxchr.quantity

name::
* McsEngl.rgxchr.quantity@cptIt,
* McsEngl.regexp'char.quantity@cptIt,
* McsEngl.rgxarchetype'quantifier@cptIt,
* McsEngl.rgxchr.quantity@cptIt,

_DESCRIPTION:
A quantity of preceding-characters.

_SPECIFIC:
* rgxchr.between_x_y  a{3,6}  Between 3 and 6 of a
* rgxchr.one      a
* rgxchr.one_or_many  a+  One or more of a
* rgxchr.xquantity    a{3}  Exactly 3 of a
* rgxchr.xquantity_or_more  a{3,}  3 or more of a
* rgxchr.zero_or_many  a*  Zero or more of a
* rgxchr.zero_or_one  a?  Zero or one of a
===
a*  Greedy quantifier
a*?  Lazy quantifier
a*+  Possessive quantifier

double_previous_character_of_group:
([-+:])\1 //matches -- ++ ::

rgx'code (pattern)

name::
* McsEngl.rgx'code (pattern)@cptIt,
* McsEngl.recode@cptIt, {2014-03-15}
* McsEngl.regex@cptIt, {2015-04-23}
* McsEngl.regex'pattern@cptIt, {2015-04-23}
* McsEngl.regexp@cptIt, {2015-04-23}
* McsEngl.regexp'pattern@cptIt, {2015-04-23}
* McsEngl.rgxcode@cptIt,

_DESCRIPTION:
A regular expression is a pattern that is matched against a subject string from left to right.
[https://www.gnu.org/software/sed/manual/html_node/Regular-Expressions.html]
===
It is the query-string.

_SPECIFIC:
Regular Expressions quick reference
basic | complete reference | tips & tricks Detatch
.  Any single character
^  Start of string
$  End of string
[abc]  A single character of: a, b or c
[^abc]  A character except: a, b or c
[a-z]  A character in the range: a-z
[^a-z]  A character not in the range: a-z
[a-zA-Z]  A character in the range: a-z or A-Z
\s  Any whitespace character
\S  Any non-whitespace character
\d  Any digit
\D  Any non-digit
\w  Any word character
\W  Any non-word character
\b  A word boundary
\B  Non-word boundary
(...)  Capture everything enclosed
(a|b)  Match either a or b
a?  Zero or one of a
a*  Zero or more of a
a+  One or more of a
a{3}  Exactly 3 of a
a{3,}  3 or more of a
a{3,6}  Between 3 and 6 of a
[http://regex101.com/]

rgxcode'backreference

name::
* McsEngl.rgxcode'backreference@cptIt,
* McsEngl.regexp'backreference@cptIt,
* McsEngl.rgx'backreference@cptIt,

$1 $2 $n
replace group in patern.

rgxcode'flag

name::
* McsEngl.rgxcode'flag@cptIt,
* McsEngl.regexp'modifier@cptIt,

_CODE.LJS:
g modifier: global. All matches (don't return on first match)

i modifier: insensitive. Case insensitive match (ignores case of [a-zA-Z])

m modifier: multi-line. Causes ^ and $ to match the begin/end of each line (not only begin/end of string)

rgxcode'grouping

name::
* McsEngl.rgxcode'grouping@cptIt,

Grouping
Parentheses are used to define the scope and precedence of the operators (among other uses). For example, gray|grey and gr(a|e)y are equivalent patterns which both describe the set of "gray" or "grey".
[http://en.wikipedia.org/wiki/Regular_expression]

rgxcode'metacharacter

name::
* McsEngl.rgxcode'metacharacter@cptIt,

_DESCRIPTION:
Twelve characters have special meanings in regular expressions:
the backslash \,
the caret ^,
the dollar sign $,
the period or dot .,
the vertical bar or pipe symbol |,
the question mark ?,
the asterisk or star *,
the plus sign +,
the opening parenthesis (,
the closing parenthesis ),
the opening square bracket [, and
the opening curly brace {.
These special characters are often called "metacharacters".
If you want to use any of these characters as a literal in a regex, you need to escape them with a backslash. If you want to match 1+1=2, the correct regex is 1\+1=2. Otherwise, the plus sign has a special meaning.
[http://www.regular-expressions.info/quickstart.html]

rgx'implementation

name::
* McsEngl.rgx'implementation@cptIt,

_DESCRIPTION:
Implementations and running times[edit]

There are at least three different algorithms that decide if and how a given regular expression matches a string.

The oldest and fastest rely on a result in formal language theory that allows every nondeterministic finite automaton (NFA) to be transformed into a deterministic finite automaton (DFA). The DFA can be constructed explicitly and then run on the resulting input string one symbol at a time. Constructing the DFA for a regular expression of size m has the time and memory cost of O(2m), but it can be run on a string of size n in time O(n). An alternative approach is to simulate the NFA directly, essentially building each DFA state on demand and then discarding it at the next step. This keeps the DFA implicit and avoids the exponential construction cost, but running cost rises to O(m2n). The explicit approach is called the DFA algorithm and the implicit approach the NFA algorithm. Adding caching to the NFA algorithm is often called the "lazy DFA" algorithm, or just the DFA algorithm without making a distinction. These algorithms are fast, but using them for recalling grouped subexpressions, lazy quantification, and similar features is tricky.[14][15]

The third algorithm is to match the pattern against the input string by backtracking. This algorithm is commonly called NFA, but this terminology can be confusing. Its running time can be exponential, which simple implementations exhibit when matching against expressions like (a|aa)*b that contain both alternation and unbounded quantification and force the algorithm to consider an exponentially increasing number of sub-cases. This behavior can cause a security problem called Regular expression Denial of Service.

Although backtracking implementations only give an exponential guarantee in the worst case, they provide much greater flexibility and expressive power. For example, any implementation which allows the use of backreferences, or implements the various extensions introduced by Perl, must include some kind of backtracking. Some implementations try to provide the best of both algorithms by first running a fast DFA algorithm, and revert to a potentially slower backtracking algorithm only when a backreference is encountered during the match.
[http://en.wikipedia.org/wiki/Regular_expression]

rgx'program.tester

name::
* McsEngl.rgx'program.tester@cptIt,
* McsEngl.rgx'program@cptIt,

_ADDRESS.WPG:
* http://regex101.com//

rgx'resource

name::
* McsEngl.rgx'resource@cptIt,
* McsEngl.rgx'resource@cptIt,

_ADDRESS.WPG:
* http://regex101.com//
* http://www.regular-expressions.info/quickstart.html,

rgx'string

name::
* McsEngl.rgx'string@cptIt,

_DESCRIPTION:
Computer-programing-languages manage TEXT of human-languges. They don't understand the meaning of these texts. They see it as as sequence of symbols and they call it 'string'.
[hmnSngo.2015-04-23]

rgx'match-string

name::
* McsEngl.rgx'match-string@cptIt,

_DESCRIPTION:
The part of subject-string the-rgx-code matches.
[hmnSngo.2015-04-23]

rgx'replacement-string

name::
* McsEngl.rgx'replacement-string@cptIt,
* McsEngl.regexp'replacement-string@cptIt,

rgx'subject-string

name::
* McsEngl.rgx'subject-string@cptIt,
* McsEngl.regexp'subject-string@cptIt,

_DESCRIPTION:
A regular expression is a pattern that is matched against a subject string from left to right.
[https://www.gnu.org/software/sed/manual/html_node/Regular-Expressions.html]

rgx'line

name::
* McsEngl.rgx'line@cptIt,

_DESCRIPTION:
The lines in the subject-string.

SPECIFIC

name::
* McsEngl.rgx.specific@cptIt,
* McsEngl.rex.specific@cptIt,

rgx.digit:
* \d

rgx.whitespace:
* \s (javascript)

rgx.word:
* \w

rgx.GNU

name::
* McsEngl.rgx.GNU@cptIt,
* McsEngl.gnu-regexp@cptIt,

package gnu.regexp;
--------------------------------------------------------------------------------
Syntax and Usage Notes
This page was last updated on 8 October 1998

Brief Background

A regular expression consists of a character string where some characters are given special meaning with regard to pattern matching. Regular expressions have been in use from the early days of computing, and provide a powerful and efficient way to parse, interpret and search and replace text within an application.

Supported Syntax

Within a regular expression, the following characters have special meaning:

Positional Operators
^ matches at the beginning of a line1
$ matches at the end of a line2
\A matches the start of the entire string
\Z matches the end of the entire string

One-Character Operators
. matches any single character3
\d matches any decimal digit
\D matches any non-digit
\n matches a newline character
\r matches a return character
\s matches any whitespace character
\S matches any non-whitespace character
\t matches a horizontal tab character
\w matches any word (alphanumeric) character
\W matches any non-word (alphanumeric) character
\x matches the character x, if x is not one of the above listed escape sequences.

Character Class Operator
[abc] matches any character in the set a, b or c
[^abc] matches any character not in the set a, b or c
[a-z] matches any character in the range a to z, inclusive
A leading or trailing dash will be interpreted literally.

Within a character class expression, the following sequences have special meaning if the syntax bit RE_CHAR_CLASSES is on:
[:alnum:] Any alphanumeric character
[:alpha:] Any alphabetical character
[:blank:] A space or horizontal tab
[:cntrl:] A control character
[:digit:] A decimal digit
[:graph:] A non-space, non-control character
[:lower:] A lowercase letter
[:print:] Same as graph, but also space and tab
[:punct:] A punctuation character
[:space:] Any whitespace character, including newline and return
[:upper:] An uppercase letter
[:xdigit:] A valid hexadecimal digit

Subexpressions and Backreferences
(abc) matches whatever the expression abc would match, and saves it as a subexpression. Also used for grouping.
(?:...) pure grouping operator, does not save contents
(?#...) embedded comment, ignored by engine
\n where 0 < n < 10, matches the same thing the nth subexpression matched.

Branching (Alternation) Operator
a|b matches whatever the expression a would match, or whatever the expression b would match.

Repeating Operators
These symbols operate on the previous atomic expression.
? matches the preceding expression or the null string
* matches the null string or any number of repetitions of the preceding expression
+ matches one or more repetitions of the preceding expression
{m} matches exactly m repetitions of the one-character expression
{m,n} matches between m and n repetitions of the preceding expression, inclusive
{m,} matches m or more repetitions of the preceding expression

Stingy (Minimal) Matching
If a repeating operator (above) is immediately followed by a ?, the repeating operator will stop at the smallest number of repetitions that can complete the rest of the match.

Unsupported Syntax

Some flavors of regular expression utilities support additional escape sequences, and this is not meant to be an exhaustive list. In the future, gnu.regexp may support some or all of the following:

(?=...) positive lookahead operator (Perl5)
(?!...) negative lookahead operator (Perl5)
(?mods) inlined compilation/execution modifiers (Perl5)
\G end of previous match (Perl5)
\b word break positional anchor (Perl5)
\B non-word break positional anchor (Perl5)
\< start of word positional anchor (egrep)
\> end of word positional anchor (egrep)
[.symbol.] collating symbol in class expression (POSIX)
[=class=] equivalence class in class expression (POSIX)

Java Integration

In a Java environment, a regular expression operates on a string of Unicode characters, represented either as an instance of java.lang.String or as an array of the primitive char type. This means that the unit of matching is a Unicode character, not a single byte. Generally this will not present problems in a Java program, because Java takes pains to ensure that all textual data uses the Unicode standard.

Because Java string processing takes care of certain escape sequences, they are not implemented in gnu.regexp. You should be aware that the following escape sequences are handled by the Java compiler if found in the Java source:

\b backspace
\f form feed
\n newline
\r carriage return
\t horizontal tab
\" double quote
\' single quote
\\ backslash
\xxx character, in octal (000-377)
\uxxxx Unicode character, in hexadecimal (0000-FFFF)

In addition, note that the \u escape sequences are meaningful anywhere in a Java program, not merely within a singly- or doubly-quoted character string, and are converted prior to any of the other escape sequences. For example, the line gnu.regexp.RE exp = new gnu.regexp.RE("\u005cn"); would be converted by first replacing \u005c with a backslash, then converting \n to a newline. By the time the RE constructor is called, it will be passed a String object containing only the Unicode newline character.

The POSIX character classes (above), and the equivalent shorthand escapes (\d, \w and the like) are implemented to use the java.lang.Character static functions whenever possible. For example, \w and [:alnum:] (the latter only from within a class expression) will invoke the Java function Character.isLetterOrDigit() when executing. It is always better to use the POSIX expressions than a range such as [a-zA-Z0-9], because the latter will not match any letter characters in non-ISO 9660 encodings (for example, the umlaut character, "u").

Reference Material

Print Books and Publications
Friedl, Jeffrey E.F., Mastering Regular Expressions. O'Reilly & Associates, Inc., Sebastopol, California, 1997.

Software Manuals and Guides
Berry, Karl and Hargreaves, Kathryn A., GNU Info Regex Manual Edition 0.12a, 19 September 1992.
perlre(1) man page (Perl Programmer's Reference Guide)
regcomp(3) man page (GNU C)
gawk(1) man page (GNU utilities)
sed(1) man page (GNU utilities)
ed(1) man page (GNU utilities)
grep(1) man page (GNU utilities)
regexp(n) and regsub(n) man pages (TCL)

Notes
1 but see the REG_NOTBOL and REG_MULTILINE flags
2 but see the REG_NOTEOL and REG_MULTILINE flags
3 but see the REG_MULTILINE flag

rgx.JAVA#ql:jv'regex@cptItsoft1012.8#

name::
* McsEngl.rgx.JAVA@cptIt,

rgx.JS (ljsr)

name::
* McsEngl.rgx.JS (ljsr)@cptIt,
* McsEngl.Ljs'regexp@cptIt,
* McsEngl.Ljsr@cptIt,
* McsEngl.jsregexp@cptIt,
* McsEngl.javascript-regexpt-object@cptIt, {2014-03-19}
* McsEngl.js'regexp@cptIt,
* McsEngl.jso.regular-expression@cptIt,
* McsEngl.jsr-object@cptIt, {2014-07-27}
* McsEngl.jsobj.REGEXP@cptIt,
* McsEngl.lcpJs'regexp@cptIt,
* McsEngl.regex.javascript@cptIt,
* McsEngl.regexp.javascript@cptIt,
* McsEngl.jsr@cptIt,
* McsEngl.jsrgx@cptIt,
* McsEngl.jsrex@cptIt, {2014-03-19}
* McsEngl.jsre@cptIt, {2014-03-14}
====== lagoGreek:
* McsElln.τσ'κανονική-παράσταση@cptIt554,

_GENERIC:
* js-named-semantic-unit#ql:js'named_semantic_unit#

_ADDRESS.WPG:
* Regular Expression Builder http://www.monstaregex.com//

_DESCRIPTION:
Η κανονική παράσταση είναι ένα αλφαριθμητικό πρότυπο το οποίο μπορεί να αποτελείται από ένα συνδυασμό αλφαριθμητικών χαρακτήρων και κάποιων άλλων ειδικών χαρακτήρων.
[Λιακέας, Η γλώσσα JavaScript. 2002, 343]

_CODE.LJS:
var re = new RegExp("end");
var re = /end/;

έλεγχος:
======
re.test("blend"); //return true

jsr'GENERIC

_GENERIC:
> Object.getPrototypeOf(RegExp)
function Empty() {}
===
> toString.call(/re/)
"[object RegExp]"
===
> typeof /rex/
"object"
* js-prebuilt-object#ql:js'object.prebuilt#

jsr'character

name::
* McsEngl.jsr'character@cptIt,

ljsr.camelCase:
> 'back-color'.replace(/-(\D)/g, function (a, b) {return b.toUpperCase()})
"backColor"
> 'back-color'.replace(/-([a-zA-Z])/g, function (a, b) {return b.toUpperCase()})
"backColor"
> 'camelCase'.replace(/[A-Z]/g, function (a){return '-' + a.toLowerCase();});
"camel-case"

ljsr.char.any:
/b.t/  matches "bat", "bit", "bet" and so on except line-terminators.
   "b2t".match(/b.t/) //["b2t"]
   "b22t".match(/b.t/) //null

ljsr.char.one_or_more:
/\d+/  matches any string containing one or more digits,

ljsr.char.zero_or_more:
/\d*/  matches any string containing zero or more digits,

ljsr.char.zero_or_one:
/\d?/  matches any string containing zero or one digits,

ljsr.char.range.unicode_block (link#ql:idSblUcdblk#):
//greek-coptic 0x0370, 0x03FF,
===
if (ᾳβγabc'.match(/[\u0370-\u03FF]/i)) {
console.log(true);
} else {
console.log(false);
}
// true

ljsr.digits:
//matches only strings consisting entirely of digits. start/end one or more
/^\d+$/

ljsr.digits5:
//regular expression defining a 5 digit number
var re5digit=/^\d{5}$/

ljsr.digitsHexadecimal:
// matches a hexadecimal digit.
[0-9a-fA-F]

ljsr.digitsNo:
//matches subject-string with no digits.
[^0-9]

ljsr.email:
regexp = /[a-z0-9!$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)\b/
[http://javascript.info/tutorial/regexp-introduction]

ljsr.number:
To test if the user entered a number, use:
myString.match(/^\d+$/).

ljsr.string.beginning:
^   Only matches the beginning of a string.

ljsr.string.end:
$   Only matches the end of a string.

ljsr.whitespace:
whiteSpaceRegExp = /^\s*|\s*$/g;
rWhitespaceStart = /^[ \t\r\n]+/;
rWhitespaceEnd = /[ \t\r\n]+$/;
rWhitespaceAll = /[ \t\r\n]+/g;
rWhitespaceOnly = /^[ \t\r\n]+$/;

ljsr.word:
> 'x.x y\'y z-z'.match(/[\w\u2019\x27\-\.']+/g)
["x.x", "y'y", "z-z"]

ljsr.word_end:
// word-boundary: matches "ly" in "This is really cool."
/ly\b/

jsr'character.GROUP

name::
* McsEngl.jsr'character.GROUP@cptIt,

_CODE.LJS:
//(?:) IN A GROUP: EXCLUDE IT FROM RETURNING
> 'abc'.match( /(a)(b)(c)/ )
["abc", "a", "b", "c"]
> 'abc'.match( /(a)(?:b)(c)/ )
["abc", "a", "c"]
[http://javascript.info/tutorial/groups]

jsr'LOOKAHEAD

name::
* McsEngl.jsr'LOOKAHEAD@cptIt,

jsr.lookahead.POSITIVE:
Sometimes you want to look ahead of your match to see that the following pattern is ok. This won’t select the pattern though. To do this use “(?=)”.
//I only want numbers with a "-" after them..
str.match(/\d+(?=\-)/ig);
[http://trentrichardson.com/2012/07/13/5-must-know-javascript-regex-tips/]

jsr.lookhadead.NEGATIVE:
Same situation as#4, except we want to make sure the following pattern doesn’t match. To do this we use “(?!)”.
//I only want numbers without a "-" after them..
str.match(/\d+(?![0-9\-])/ig);
[http://trentrichardson.com/2012/07/13/5-must-know-javascript-regex-tips/]

jsr'character.QUANTITY

name::
* McsEngl.jsr'character.QUANTITY@cptIt,

jsr.quantity.one_or_more:
/\d+/  matches any string containing one or more digits,

jsr.quantity.zero_or_more:
/\d*/  matches any string containing zero or more digits,

jsr.quantity.zero_or_one:
/\d?/  matches any string containing zero or one digits,

jsr'code

name::
* McsEngl.jsr'code@cptIt,
* McsEngl.jsrcode@cptIt,
* McsEngl.jsrpattern@cptIt,
* McsEngl.jsr'pattern@cptIt,
* McsEngl.pattern.jsr@cptIt, /'patern/
* McsEngl.lcpJs'code.REGEXP@cptIt,

_DESCRIPTION:
The coded-string we want to find inside the 'subject-string#ql:js'regexp'subject_string#'.
[hmnSngo.2013-11-17]

_ADDRESS.WPG:
* http://www.javascriptkit.com/jsref/regexp.shtml
* http://www.javascriptkit.com/javatutors/redev2.shtml,

jsrcode.BRACKET.SQUARE:
* jsr'square_bracket_symbol,
Character Classes or Character Sets:
With a "character class", also called "character set", you can tell the regex engine to match only one out of several characters. Simply place the characters you want to match between square brackets. If you want to match an a or an e, use [ae].
- [0-9] matches a single digit between 0 and 9.
- [0-9a-fA-F] matches a single hexadecimal digit, case insensitively.
- [0-9a-fxA-FX] matches a hexadecimal digit or the letter X. Again, the order of the characters and the ranges does not matter.

Negated Character Classes
Typing a caret after the opening square bracket will negate the character class. The result is that the character class will match any character that is not in the character class. Unlike the dot, negated character classes also match (invisible) line break characters.

jsrcode.ASTERISK:
* jsr'asterisk_symbol,
* The asterisk or star tells the engine to attempt to match the preceding token zero or more times.

jsrcode.b:
\b   Matches any word boundary (test characters must exist at the beginning or end of a word within the string)   /ly\b/ matches "ly" in "This is really cool."

jsrcode.BACKSLAH:
* jsr'backslash_symbol,
Single_Backslah(\):
The regular expression \\ matches a single backslash. In JavaScript, this becomes re = /\\/ or re = new RegExp("\\\\").

jsrcode.caret:
* jsr'caret_symbol,
^   Only matches the beginning of a string.

jsrcode.d:
* jsr'd_symbol:
\d  

Matches a digit character. Equivalent to [0-9].

For example, /\d/ or /[0-9]/ matches '2' in "B2 is the suite number."
\D  

Matches any non-digit character. Equivalent to [^0-9].

For example, /\D/ or /[^0-9]/ matches 'B' in "B2 is the suite number."
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions]

jsrcode.DOLLAR:
* jsr'dollar_symbol,
$   Only matches the end of a string.

jsrcode.DOT:
* jsr'dot_symbol,
.   (Dot). Match any character except newline or another Unicode line terminator.   /b.t/ matches "bat", "bit", "bet" and so on.

jsrcode.Forward_Slash(/):
* jsr'slash_symbol,
Since forward slashes delimit the regular expression, any forward slashes that appear in the regex need to be escaped. E.g. the regex 1/2 is written as /1\/2/ in JavaScript.

jsrcode.LOOKAHEAD:
Negative lookahead is indispensable if you want to match something not followed by something else. When explaining character classes, I already explained why you cannot use a negated character class to match a "q" not followed by a "u". Negative lookahead provides the solution: q(?!u). The negative lookahead construct is the pair of round brackets, with the opening bracket followed by a question mark and an exclamation point. Inside the lookahead, we have the trivial regex u.

Positive lookahead works just the same. q(?=u) matches a q that is followed by a u, without making the u part of the match. The positive lookahead construct is a pair of round brackets, with the opening bracket followed by a question mark and an equals sign.
[http://www.regular-expressions.info/lookaround.html#lookahead]

jsrcode.PARENTHESIS:
* jsr'parenthesis_symbol,
(x)  
Matches 'x' and remembers the match, as the following example shows. The parentheses are called capturing parentheses.
The '(foo)' and '(bar)' in the pattern /(foo) (bar) \1 \2/ match and remember the first two words in the string "foo bar foo bar". The \1 and \2 in the pattern match the string's last two words. Note that \1, \2, \n are used in the matching part of the regex. In the replacement part of a regex the syntax $1, $2, $n must be used, e.g.: 'bar foo'.replace( /(...) (...)/, '$2 $1' ).

jsrcode.PLUS:
* jsr'plus_symbol,
+ The plus tells the engine to attempt to match the preceding token once or more.

jsrcode.QUESTION_MARK:
* jsr'question_mark:
? I already introduced one repetition operator or quantifier: the question mark. It tells the engine to attempt match the preceding token zero times or once, in effect making it optional.

jsrcode.s:
* jsr's_symbol,
\s  
Matches a single white space character, including space, tab, form feed, line feed. Equivalent to [ \f\n\r\t\v\u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000].
For example, /\s\w*/ matches ' bar' in "foo bar."

\S  
Matches a single character other than white space. Equivalent to [^ \f\n\r\t\v\u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000].
For example, /\S\w*/ matches 'foo' in "foo bar."
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions]

jsrcode.w:
* jsr'w_symbol,
* jsr.w,
w  a word character
W  NON word character
> 'str&#ingH2'.match(/\W+/);
["&#"]

jsrcode.WITH_COMMENTS:
rTrimContent = new RegExp([
'<span[^>]+data-pwp-bogus[^>]+>[\u200B\uFEFF]+<\\/span>', // Trim bogus spans like caret containers
'<div[^>]+data-pwp-bogus[^>]+><\\/div>', // Trim bogus divs like resize handles
'\\s?data-pwp-selected="[^"]+"' // Trim temporaty data-ph prefixed attributes like data-pwp-selected
].join('|'), 'gi');

jsr'doing.EVOLUTING

name::
* McsEngl.jsr'doing.EVOLUTING@cptIt,

_DESCRIPTION:
JavaScript 1.2+ has incorporated regular expressions.
[http://www.javascriptkit.com/javatutors/re.shtml]

jsr'modifier

name::
* McsEngl.jsr'modifier@cptIt,

_DESCRIPTION:
In JavaScript source code, a regular expression is written in the form of /pattern/modifiers where "pattern" is the regular expression itself, and "modifiers" are a series of characters indicating various options. The "modifiers" part is optional. This syntax is borrowed from Perl. JavaScript supports the following modifiers, a subset of those supported by Perl:

/g enables "global" matching. When using the replace() method, specify this modifier to replace all matches, rather than only the first one.
/i makes the regex match case insensitive.
/m enables "multi-line mode". In this mode, the caret and dollar match before and after newlines in the subject string.
You can combine multiple modifiers by stringing them together as in /regex/gim. Notably absent is an option to make the dot match line break characters.
[http://www.regular-expressions.info/javascript.html]

SPECIFIC

jsr.modifier.global:
* jsr'g_modifier,
* jsr'global_modifier,
* jsr.global_modifier:
/patern/g  all matches, rather than only the first one.

jsr.modifier.insensitive:
* jsr'i_modifier,
* jsr'insensitive_modifier,
* jsr.insensitive_modifier:
/patern/i  match case insensitive.

jsr.modifier.multiline:
* jsr'm_modifier,
* jsr'multiline_modifier,
* jsr.multiline_modifier:
/patern/m  "multi-line mode" caret / dollar match before and after newlines in the subject string.

jsr'object

name::
* McsEngl.jsr'object@cptIt,
* McsEngl.jsrgx'property@cptIt,

_PROPERTY:
> Object.getOwnPropertyNames(/re/).sort()
["global", "ignoreCase", "lastIndex", "multiline", "source"]
> Object.getOwnPropertyNames(/re/.__proto__).sort()
["compile", "constructor", "exec", "global", "ignoreCase", "lastIndex", "multiline", "source", "test", "toString"]
> Object.getOwnPropertyNames(/re/.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
> Object.getOwnPropertyNames(/re/.__proto__.__proto__.__proto__).sort()
TypeError: Object.getOwnPropertyNames called on non-object
===
> Object.getOwnPropertyNames(/\s/)
["source", "global", "ignoreCase", "multiline", "lastIndex"]
> Object.getOwnPropertyNames(new RegExp())
["source", "global", "ignoreCase", "multiline", "lastIndex"]
===
> Object.getOwnPropertyNames(/\s/.__proto__)
["source", "global", "ignoreCase", "multiline", "lastIndex", "constructor", "exec", "test", "toString", "compile"]
> Object.getOwnPropertyNames(RegExp.prototype)
["source", "global", "ignoreCase", "multiline", "lastIndex", "constructor", "exec", "test", "toString", "compile"]

jsr.global boolean

name::
* McsEngl.jsr.global boolean@cptIt,

_CODE.LJS:
> /re/.global
false
> /re/g.global
true

jsr.exec-function

name::
* McsEngl.jsr.exec-function@cptIt,
* McsEngl.jsexec@cptIt,
* McsEngl.jsr'exec@cptIt,

_DESCRIPTION:
The exec() method executes a search for a match in a specified string. Returns a result array, or null.
If you are executing a match simply to find true or false, use the RegExp.test() method or the String.search() method.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec]
===
The .exec() function returns an array. In the array, the first element (element 0) will contain the entire match, and then the subsequent elements contain the matched groups.
[http://stackoverflow.com/a/19713353]

_CODE.LJS:
> /ab/.exec("xabcdef ab2 3ab")
["ab"]
> (/\d/g).exec("xabcd3f ab2 ")
["3"]
> (/\d/g).exec("xabcdf ab ")
null
===
> /(\d+)([A-Za-z]+)/.exec("2xy.4xy.55xy")
["2xy", "2", "xy"]
> (/(\d+)([A-Za-z]+)/g).exec("2xy.4xy.55xy")
["2xy", "2", "xy"]
===
> /^([$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)([^\n\S]*:(?!:))?/.exec("switch : letter = str.charAt i")
["switch :", "switch", " :"]
===
> /([$A-Za-z_\x7f-\uffff])([$\w\x7f-\uffff]*)/.exec("letter = str.charAt i")
["letter", "l", "etter"]

jsr'method

name::
* McsEngl.jsr'method@cptIt,
* McsEngl.jsrgx'method@cptIt,

_SPECIFIC:
* exec
* test

jsr.source string

name::
* McsEngl.jsr.source string@cptIt,
* McsEngl.jsrgx'method@cptIt,

_CODE.LJS:
/\d/g.source
"\d"

jsr'test-function

name::
* McsEngl.jsr'test-function@cptIt,
* McsEngl.jsr.test@cptIt,

_CODE.LJS:
> /ab/.test("xxab")
true
> /ab/.test("xxxx")
false

jsr.toString-function

name::
* McsEngl.jsr.toString-function@cptIt,

_DESCRIPTION:
The toString() method returns a string representing the regular expression.

_CODE.LJS:
> /\d/g.toString()
"/\d/g"

jsr.FROM-CONSTRUCTOR

name::
* McsEngl.jsr.FROM-CONSTRUCTOR@cptIt,

_GENERIC:
typeof new RegExp('r')
"object"

_DESCRIPTION:
There are two ways to create a regular expression in JavaScript:

Using literal syntax
var reExample = /pattern/;

Using the RegExp() constructor
var reExample = new RegExp("pattern");
Assuming you know the regular expression pattern you are going to use, there is no real difference between the two; however, if you don't know the pattern ahead of time (e.g, you're retrieving it from a form), it can be easier to use the RegExp() constructor.
[http://www.learn-javascript-tutorial.com/RegularExpressions.cfm]

jsr.LITERAL

name::
* McsEngl.jsr.LITERAL@cptIt,

_GENERIC:
typeof /text/
"object"

_DESCRIPTION:
There are two ways to create a regular expression in JavaScript:

Using literal syntax
var reExample = /pattern/;

Using the RegExp() constructor
var reExample = new RegExp("pattern");
Assuming you know the regular expression pattern you are going to use, there is no real difference between the two; however, if you don't know the pattern ahead of time (e.g, you're retrieving it from a form), it can be easier to use the RegExp() constructor.
[http://www.learn-javascript-tutorial.com/RegularExpressions.cfm]
===
How to Use The JavaScript RegExp Object:
The easiest way to create a new RegExp object is to simply use the special regex syntax: myregexp = /regex/. If you have the regular expression in a string (e.g. because it was typed in by the user), you can use the RegExp constructor: myregexp = new RegExp(regexstring). Modifiers can be specified as a second parameter: myregexp = new RegExp(regexstring, "gims").

I recommend that you do not use the RegExp constructor with a literal string, because in literal strings, backslashes must be escaped. The regular expression \w+ can be created as
re = /\w+/ or as re = new RegExp("\\w+").
The latter is definitely harder to read. The regular expression \\ matches a single backslash. In JavaScript, this becomes re = /\\/ or re = new RegExp("\\\\").
[http://www.regular-expressions.info/javascript.html]

_PROPERTY:
> Object.getOwnPropertyNames(/text/).sort()
["global", "ignoreCase", "lastIndex", "multiline", "source"]
> Object.getOwnPropertyNames(/text/.__proto__).sort()
["compile", "constructor", "exec", "global", "ignoreCase", "lastIndex", "multiline", "source", "test", "toString"]
===
> Object.getOwnPropertyNames(new RegExp()).sort()
["global", "ignoreCase", "lastIndex", "multiline", "source"]
> Object.getOwnPropertyNames(Object.getPrototypeOf(new RegExp())).sort()
["compile", "constructor", "exec", "global", "ignoreCase", "lastIndex", "multiline", "source", "test", "toString"]

_CODE.LJS:

jsr'RegExp-function

name::
* McsEngl.jsr'RegExp-function@cptIt,
* McsEngl.jsfRegExp@cptIt,
* McsEngl.jsf.RegExp@cptIt,
* McsEngl.lcpJs'RegExp@cptIt,
* McsEngl.lcpJs'RegExp-function@cptIt,

_GENERIC:
* js-constructor-object#ql:js'object.constructor#
* jsrgx'CONSTRUCTOR,

_DESCRIPTION:
There are two ways to create a regular expression in JavaScript:

Using literal syntax
var reExample = /pattern/;

Using the RegExp() constructor
var reExample = new RegExp("pattern");
Assuming you know the regular expression pattern you are going to use, there is no real difference between the two; however, if you don't know the pattern ahead of time (e.g, you're retrieving it from a form), it can be easier to use the RegExp() constructor.
[http://www.learn-javascript-tutorial.com/RegularExpressions.cfm]

jsoRegExp.MEMBER:
> Object.getOwnPropertyNames(/text/).sort()
["global", "ignoreCase", "lastIndex", "multiline", "source"]
> Object.getOwnPropertyNames(/text/.__proto__).sort()
["compile", "constructor", "exec", "global", "ignoreCase", "lastIndex", "multiline", "source", "test", "toString"]
===
> Object.getOwnPropertyNames(new RegExp()).sort()
["global", "ignoreCase", "lastIndex", "multiline", "source"]
> Object.getOwnPropertyNames(Object.getPrototypeOf(new RegExp())).sort()
["compile", "constructor", "exec", "global", "ignoreCase", "lastIndex", "multiline", "source", "test", "toString"]
===
> Object.getOwnPropertyNames(RegExp.prototype).sort()
["compile", "constructor", "exec", "global", "ignoreCase", "lastIndex", "multiline", "source", "test", "toString"]

jsr'resource

name::
* McsEngl.jsr'resource@cptIt,

_ADDRESS.WPG:
* tester: http://regex101.com/#javascript,
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions,
* https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp,
* https://www.sitepoint.com/expressions-javascript//

jsr'string.match-function

name::
* McsEngl.jsr'string.match-function@cptIt,
* McsEngl.jsmatch@cptIt,
* McsEngl.jss.match@cptIt,
* McsEngl.lcpJs'match-method@cptIt,

_DESCRIPTION:
To test if a particular regex matches (part of) a string, you can call the strings's match() method:

if (myString.match(/regex/)) { /*Success!*/ }

If you want to verify user input, you should use anchors to make sure that you are testing against the entire string.
To test if the user entered a number, use: myString.match(/^\d+$/).
/\d+/ matches any string containing one or more digits,
but /^\d+$/ matches only strings consisting entirely of digits.
[http://www.regular-expressions.info/javascript.html]

_CODE.LJS:
> "[22].[44].[33].".match(/\d+/)
["22"]
> "[22].[44].[33].".match(/\d+/g)
["22", "44", "33"]

jsr'string.replace-function

name::
* McsEngl.jsr'string.replace-function@cptIt,
* McsEngl.lcpJs'replace-method@cptIt,
* McsEngl.jsstg'replace-method@cptIt,

_DESCRIPTION:
To do a search and replace with regexes, use the string's replace() method:
> myString.replace(/replaceme/g, "replacement").
Using the /g modifier makes sure that all occurrences of "replaceme" are replaced. The second parameter is an normal string with the replacement text.
[http://www.regular-expressions.info/javascript.html]

_CODE.LJS:
> "ABCDEF".replace(/CD/,'cd')
"ABcdEF"
===
> str.replace(/([^\\]|\\\\)\s*\n\s*$/, '$1')
===
> 'abcd'.replace(/b/,'\n')
"a
cd"
===
> 'abcd'.replace(/b/,'\\n')
"a\ncd"

jsr'string.split-function

name::
* McsEngl.jsr'string.split-function@cptIt,
* McsEngl.lcpJs'split-method@cptIt,

_DESCRIPTION:
Using a string's split() method allows you to split the string into an array of strings using a regular expression to determine the positions at which the string is splitted.
E.g. myArray = myString.split(/,/) splits a comma-delimited list into an array.
The comma's themselves are not included in the resulting array of strings.
[http://www.regular-expressions.info/javascript.html]

_CODE.LJS:
> "tinymce, util, Tools".split(/,/)
["tinymce", " util", " Tools"]
> "tinymce/util/Tools".split(/\//)
["tinymce", "util", "Tools"]
> "tinymce/util/Tools".split(/[.\/]/)
["tinymce", "util", "Tools"]

jsr'subject-string

name::
* McsEngl.jsr'subject-string@cptIt,

_DESCRIPTION:
The text inside which we search for a patern#ql:js'regexp'patern#.
[hmnSngo.2013-11-17]

jsr'type

name::
* McsEngl.jsr'type@cptIt,

_CODE.LJS:
> typeof /re/
"object"
> /re/.constructor === RegExp
true

SPECIFIC

name::
* McsEngl.jsr.specific@cptIt,

jsr-lang can have different implementations. These are its specifics.

rgx.PERL

name::
* McsEngl.rgx.PERL@cptIt,
* McsEngl.rgx.perl-compatible@cptIt,
* McsEngl.perl-compatible-regular-expressions@cptIt,

_DESCRIPTION:
PCRE - Perl Compatible Regular Expressions
The PCRE library is a set of functions that implement regular expression pattern matching using the same syntax and semantics as Perl 5. PCRE has its own native API, as well as a set of wrapper functions that correspond to the POSIX regular expression API. The PCRE library is free, even for building proprietary software.
PCRE was originally written for the Exim MTA, but is now used by many high-profile open source projects, including Apache, PHP, KDE, Postfix, Analog, and Nmap. PCRE has also found its way into some well known commercial products, like Apple Safari. Some other interesting projects using PCRE include Chicken, Ferite, Onyx, Hypermail, Leafnode, Askemos, and Wenlin.
[http://www.pcre.org/]
===
The Perl standard is still evolving in Perl 6, but the current set of symbols and syntax has become the de facto standard.
Largely because of its expressive power, many other utilities and programming languages have adopted syntax similar to Perl's — for example, Java, JavaScript, Python, Ruby, Microsoft's .NET Framework, and the W3C's XML Schema all use regular expression syntax similar to Perl's. Some languages and tools such as Boost and PHP support multiple regular expression flavors. Perl-derivative regular expression implementations are not identical, and all implement no more than a subset of Perl's features, usually those of Perl 5.0, released in 1994. With Perl 5.10, this process has come full circle with Perl incorporating syntactic extensions originally developed in PCRE and Python "Perl Regular Expression Documentation". perldoc.perl.org. Retrieved January 8, 2012..
[http://en.wikipedia.org/wiki/Regular_expression]

rgx.POSIX

name::
* McsEngl.rgx.POSIX@cptIt,

_DESCRIPTION:
The IEEE POSIX standard has three sets of compliance: BRE,[11] ERE, and SRE for Basic, Extended, and Simple Regular Expressions. SRE is deprecated,[12] in favor of BRE, as both provide backward compatibility. The subsection below covering the character classes applies to both BRE and ERE.

BRE and ERE work together. ERE adds ?, +,and |, and it removes the need to escape the metacharacters ( ) and { }, which are required in BRE. Furthermore, as long as the POSIX standard syntax for regular expressions is adhered to, there can be, and often is, additional syntax to serve specific (yet POSIX compliant) applications. Although POSIX.2 leaves some implementation specifics undefined, BRE and ERE provide a "standard" which has since been adopted as the default syntax of many tools, where the choice of BRE or ERE modes is usually a supported option. For example, GNU grep has the following options: "grep -E" for ERE, and "grep -G" for BRE (the default), and "grep -P" for Perl regular expressions.

Perl regular expressions have become the de facto standard, having a rich and powerful set of atomic expressions. Perl has no "basic" "extended" level, where the ( ) and { } may or may not have literal meanings. They are always metacharacters, as they are in "extended" mode for POSIX. To get their literal meaning, you escape them. Other metacharacters are known to be literal or symbolic based on context alone. Perl offers much more functionality: "lazy" regular expressions, backtracking, named capture groups, and recursive patterns, all of which are powerful additions to POSIX BRE/ERE. (See Lazy quantification below.)
[http://en.wikipedia.org/wiki/Regular_expression]

lcp.query.XPath

name::
* McsEngl.lcp.query.XPath@cptIt,
* McsEngl.xml-path-language@cptIt,
* McsEngl.xpath@cptIt437i,
* McsEngl.xph@cptIt, {2014-03-15}

_DESCRIPTION:
XPath is used to navigate through elements and attributes in an XML document.
XPath is a major element in W3C's XSLT standard - and XQuery and XPointer are both built on XPath expressions.
[http://www.w3schools.com/xpath/default.asp]
===
XPath, the XML Path Language, is a query language for selecting nodes from an XML document. In addition, XPath may be used to compute values (e.g., strings, numbers, or Boolean values) from the content of an XML document. XPath was defined by the World Wide Web Consortium (W3C).[1]
[http://en.wikipedia.org/wiki/XPath] 2014-03-15
===
XPath (XML Path Language) is an expression language for addressing portions of an XML document, or for computing values (strings, numbers, or boolean values) based on the content of an XML document. The current version of the language is XPath 2.0, but because version 1.0 is still the more widely-used version, this article describes XPath 1.0.

The XPath language is based on a tree representation of the XML document, and provides the ability to navigate around the tree, selecting nodes by a variety of criteria. In popular use (though not in the official specification), an XPath expression is often referred to simply as an XPath.

Originally motivated by a desire to provide a common syntax and behavior model between XPointer and XSLT, XPath has rapidly been adopted by developers as a small query language, and subsets are used in other W3C specifications such as XML Schema and XForms.
[http://en.wikipedia.org/wiki/XPath]

xpath'archetype

name::
* McsEngl.xpath'archetype@cptIt,

_DESCRIPTION:
XPath is a language for finding information in an XML document.
[http://www.w3schools.com/xpath/xpath_intro.asp]

xpath'atomic-value

name::
* McsEngl.xpath'atomic-value@cptIt,

_DESCRIPTION:
Atomic values are nodes with no children or parent.

Example of atomic values:
J K. Rowling
"en"
[http://www.w3schools.com/xpath/xpath_nodes.asp]

xpath'function

name::
* McsEngl.xpath'function@cptIt,

_SPECIFIC:
The following reference library defines the functions required for XPath 2.0, XQuery 1.0 and XSLT 2.0.
Accessor Functions

Name  Description
fn:node-name(node)  Returns the node-name of the argument node
fn:nilled(node)  Returns a Boolean value indicating whether the argument node is nilled
fn:data(item.item,...)  Takes a sequence of items and returns a sequence of atomic values
fn:base-uri()
fn:base-uri(node)  Returns the value of the base-uri property of the current or specified node
fn:document-uri(node)  Returns the value of the document-uri property for the specified node
Error and Trace Functions

Name  Description
fn:error()
fn:error(error)
fn:error(error,description)
fn:error(error,description,error-object)  Example: error(fn:QName('http://example.com/test', 'err:toohigh'), 'Error: Price is too high')
Result: Returns http://example.com/test#toohigh and the string "Error: Price is too high" to the external processing environment

fn:trace(value,label)  Used to debug queries
Functions on Numeric Values

Name  Description
fn:number(arg)  Returns the numeric value of the argument. The argument could be a boolean, string, or node-set
Example: number('100')
Result: 100

fn:abs(num)  Returns the absolute value of the argument
Example: abs(3.14)
Result: 3.14

Example: abs(-3.14)
Result: 3.14

fn:ceiling(num)  Returns the smallest integer that is greater than the number argument
Example: ceiling(3.14)
Result: 4

fn:floor(num)  Returns the largest integer that is not greater than the number argument
Example: floor(3.14)
Result: 3

fn:round(num)  Rounds the number argument to the nearest integer
Example: round(3.14)
Result: 3

fn:round-half-to-even()  Example: round-half-to-even(0.5)
Result: 0
Example: round-half-to-even(1.5)
Result: 2

Example: round-half-to-even(2.5)
Result: 2

Functions on Strings

Name  Description
fn:string(arg)  Returns the string value of the argument. The argument could be a number, boolean, or node-set
Example: string(314)
Result: "314"

fn:codepoints-to-string(int,int,...)  Returns a string from a sequence of code points
Example: codepoints-to-string(84, 104, 233, 114, 232, 115, 101)
Result: 'Th?r?se'

fn:string-to-codepoints(string)  Returns a sequence of code points from a string
Example: string-to-codepoints("Th?r?se")
Result: 84, 104, 233, 114, 232, 115, 101

fn:codepoint-equal(comp1,comp2)  Returns true if the value of comp1 is equal to the value of comp2, according to the Unicode code point collation (http://www.w3.org/2005/02/xpath-functions/collation/codepoint), otherwise it returns false
fn:compare(comp1,comp2)
fn:compare(comp1,comp2,collation)  Returns -1 if comp1 is less than comp2, 0 if comp1 is equal to comp2, or 1 if comp1 is greater than comp2 (according to the rules of the collation that is used)
Example: compare('ghi', 'ghi')
Result: 0

fn:concat(string,string,...)  Returns the concatenation of the strings
Example: concat('XPath ','is ','FUN!')
Result: 'XPath is FUN!'

fn:string-join((string,string,...),sep)  Returns a string created by concatenating the string arguments and using the sep argument as the separator
Example: string-join(('We', 'are', 'having', 'fun!'), ' ')
Result: ' We are having fun! '

Example: string-join(('We', 'are', 'having', 'fun!'))
Result: 'Wearehavingfun!'

Example:string-join((), 'sep')
Result: ''

fn:substring(string,start,len)
fn:substring(string,start)  Returns the substring from the start position to the specified length. Index of the first character is 1. If length is omitted it returns the substring from the start position to the end
Example: substring('Beatles',1,4)
Result: 'Beat'

Example: substring('Beatles',2)
Result: 'eatles'

fn:string-length(string)
fn:string-length()  Returns the length of the specified string. If there is no string argument it returns the length of the string value of the current node
Example: string-length('Beatles')
Result: 7

fn:normalize-space(string)
fn:normalize-space()  Removes leading and trailing spaces from the specified string, and replaces all internal sequences of white space with one and returns the result. If there is no string argument it does the same on the current node
Example: normalize-space(' The XML ')
Result: 'The XML'

fn:normalize-unicode()  
fn:upper-case(string)  Converts the string argument to upper-case
Example: upper-case('The XML')
Result: 'THE XML'

fn:lower-case(string)  Converts the string argument to lower-case
Example: lower-case('The XML')
Result: 'the xml'

fn:translate(string1,string2,string3)  Converts string1 by replacing the characters in string2 with the characters in string3
Example: translate('12:30','30','45')
Result: '12:45'

Example: translate('12:30','03','54')
Result: '12:45'

Example: translate('12:30','0123','abcd')
Result: 'bc:da'

fn:escape-uri(stringURI,esc-res)  Example: escape-uri("http://example.com/test#car", true())
Result: "http%3A%2F%2Fexample.com%2Ftest#car"
Example: escape-uri("http://example.com/test#car", false())
Result: "http://example.com/test#car"

Example: escape-uri ("http://example.com/~b?b?", false())
Result: "http://example.com/~b%C3%A9b%C3%A9"

fn:contains(string1,string2)  Returns true if string1 contains string2, otherwise it returns false
Example: contains('XML','XM')
Result: true

fn:starts-with(string1,string2)  Returns true if string1 starts with string2, otherwise it returns false
Example: starts-with('XML','X')
Result: true

fn:ends-with(string1,string2)  Returns true if string1 ends with string2, otherwise it returns false
Example: ends-with('XML','X')
Result: false

fn:substring-before(string1,string2)  Returns the start of string1 before string2 occurs in it
Example: substring-before('12/10','/')
Result: '12'

fn:substring-after(string1,string2)  Returns the remainder of string1 after string2 occurs in it
Example: substring-after('12/10','/')
Result: '10'

fn:matches(string,pattern)  Returns true if the string argument matches the pattern, otherwise, it returns false
Example: matches("Merano", "ran")
Result: true

fn:replace(string,pattern,replace)  Returns a string that is created by replacing the given pattern with the replace argument
Example: replace("Bella Italia", "l", "*")
Result: 'Be**a Ita*ia'

Example: replace("Bella Italia", "l", "")
Result: 'Bea Itaia'

fn:tokenize(string,pattern)  Example: tokenize("XPath is fun", "\s+")
Result: ("XPath", "is", "fun")
Functions for anyURI

Name  Description
fn:resolve-uri(relative,base)  
Functions on Boolean Values

Name  Description
fn:boolean(arg)  Returns a boolean value for a number, string, or node-set
fn:not(arg)  The argument is first reduced to a boolean value by applying the boolean() function. Returns true if the boolean value is false, and false if the boolean value is true
Example: not(true())
Result: false

fn:true()  Returns the boolean value true
Example: true()
Result: true

fn:false()  Returns the boolean value false
Example: false()
Result: false

Functions on Durations, Dates and Times

Component Extraction Functions on Durations, Dates and Times

Name  Description
fn:dateTime(date,time)  Converts the arguments to a date and a time
fn:years-from-duration(datetimedur)  Returns an integer that represents the years component in the canonical lexical representation of the value of the argument
fn:months-from-duration(datetimedur)  Returns an integer that represents the months component in the canonical lexical representation of the value of the argument
fn:days-from-duration(datetimedur)  Returns an integer that represents the days component in the canonical lexical representation of the value of the argument
fn:hours-from-duration(datetimedur)  Returns an integer that represents the hours component in the canonical lexical representation of the value of the argument
fn:minutes-from-duration(datetimedur)  Returns an integer that represents the minutes component in the canonical lexical representation of the value of the argument
fn:seconds-from-duration(datetimedur)  Returns a decimal that represents the seconds component in the canonical lexical representation of the value of the argument
fn:year-from-dateTime(datetime)  Returns an integer that represents the year component in the localized value of the argument
Example: year-from-dateTime(xs:dateTime("2005-01-10T12:30-04:10"))
Result: 2005

fn:month-from-dateTime(datetime)  Returns an integer that represents the month component in the localized value of the argument
Example: month-from-dateTime(xs:dateTime("2005-01-10T12:30-04:10"))
Result: 01

fn:day-from-dateTime(datetime)  Returns an integer that represents the day component in the localized value of the argument
Example: day-from-dateTime(xs:dateTime("2005-01-10T12:30-04:10"))
Result: 10

fn:hours-from-dateTime(datetime)  Returns an integer that represents the hours component in the localized value of the argument
Example: hours-from-dateTime(xs:dateTime("2005-01-10T12:30-04:10"))
Result: 12

fn:minutes-from-dateTime(datetime)  Returns an integer that represents the minutes component in the localized value of the argument
Example: minutes-from-dateTime(xs:dateTime("2005-01-10T12:30-04:10"))
Result: 30

fn:seconds-from-dateTime(datetime)  Returns a decimal that represents the seconds component in the localized value of the argument
Example: seconds-from-dateTime(xs:dateTime("2005-01-10T12:30:00-04:10"))
Result: 0

fn:timezone-from-dateTime(datetime)  Returns the time zone component of the argument if any
fn:year-from-date(date)  Returns an integer that represents the year in the localized value of the argument
Example: year-from-date(xs:date("2005-04-23"))
Result: 2005

fn:month-from-date(date)  Returns an integer that represents the month in the localized value of the argument
Example: month-from-date(xs:date("2005-04-23"))
Result: 4

fn:day-from-date(date)  Returns an integer that represents the day in the localized value of the argument
Example: day-from-date(xs:date("2005-04-23"))
Result: 23

fn:timezone-from-date(date)  Returns the time zone component of the argument if any
fn:hours-from-time(time)  Returns an integer that represents the hours component in the localized value of the argument
Example: hours-from-time(xs:time("10:22:00"))
Result: 10

fn:minutes-from-time(time)  Returns an integer that represents the minutes component in the localized value of the argument
Example: minutes-from-time(xs:time("10:22:00"))
Result: 22

fn:seconds-from-time(time)  Returns an integer that represents the seconds component in the localized value of the argument
Example: seconds-from-time(xs:time("10:22:00"))
Result: 0

fn:timezone-from-time(time)  Returns the time zone component of the argument if any
fn:adjust-dateTime-to-timezone(datetime,timezone)  If the timezone argument is empty, it returns a dateTime without a timezone. Otherwise, it returns a dateTime with a timezone
fn:adjust-date-to-timezone(date,timezone)  If the timezone argument is empty, it returns a date without a timezone. Otherwise, it returns a date with a timezone
fn:adjust-time-to-timezone(time,timezone)  If the timezone argument is empty, it returns a time without a timezone. Otherwise, it returns a time with a timezone
Functions Related to QNames

Name  Description
fn:QName()  
fn:local-name-from-QName()  
fn:namespace-uri-from-QName()  
fn:namespace-uri-for-prefix()  
fn:in-scope-prefixes()  
fn:resolve-QName()  
Functions on Nodes

Name  Description
fn:name()
fn:name(nodeset)  Returns the name of the current node or the first node in the specified node set
fn:local-name()
fn:local-name(nodeset)  Returns the name of the current node or the first node in the specified node set - without the namespace prefix
fn:namespace-uri()
fn:namespace-uri(nodeset)  Returns the namespace URI of the current node or the first node in the specified node set
fn:lang(lang)  Returns true if the language of the current node matches the language of the specified language
Example: Lang("en") is true for
<p xml:lang="en">...</p>

Example: Lang("de") is false for
<p xml:lang="en">...</p>

fn:root()
fn:root(node)  Returns the root of the tree to which the current node or the specified belongs. This will usually be a document node
Functions on Sequences

General Functions on Sequences

Name  Description
fn:index-of((item,item,...),searchitem)  Returns the positions within the sequence of items that are equal to the searchitem argument
Example: index-of ((15, 40, 25, 40, 10), 40)
Result: (2, 4)

Example: index-of (("a", "dog", "and", "a", "duck"), "a")
Result (1, 4)

Example: index-of ((15, 40, 25, 40, 10), 18)
Result: ()

fn:remove((item,item,...),position)  Returns a new sequence constructed from the value of the item arguments - with the item specified by the position argument removed
Example: remove(("ab", "cd", "ef"), 0)
Result: ("ab", "cd", "ef")

Example: remove(("ab", "cd", "ef"), 1)
Result: ("cd", "ef")

Example: remove(("ab", "cd", "ef"), 4)
Result: ("ab", "cd", "ef")

fn:empty(item,item,...)  Returns true if the value of the arguments IS an empty sequence, otherwise it returns false
Example: empty(remove(("ab", "cd"), 1))
Result: false

fn:exists(item,item,...)  Returns true if the value of the arguments IS NOT an empty sequence, otherwise it returns false
Example: exists(remove(("ab"), 1))
Result: false

fn:distinct-values((item,item,...),collation)  Returns only distinct (different) values
Example: distinct-values((1, 2, 3, 1, 2))
Result: (1, 2, 3)

fn:insert-before((item,item,...),pos,inserts)  Returns a new sequence constructed from the value of the item arguments - with the value of the inserts argument inserted in the position specified by the pos argument
Example: insert-before(("ab", "cd"), 0, "gh")
Result: ("gh", "ab", "cd")

Example: insert-before(("ab", "cd"), 1, "gh")
Result: ("gh", "ab", "cd")

Example: insert-before(("ab", "cd"), 2, "gh")
Result: ("ab", "gh", "cd")

Example: insert-before(("ab", "cd"), 5, "gh")
Result: ("ab", "cd", "gh")

fn:reverse((item,item,...))  Returns the reversed order of the items specified
Example: reverse(("ab", "cd", "ef"))
Result: ("ef", "cd", "ab")

Example: reverse(("ab"))
Result: ("ab")

fn:subsequence((item,item,...),start,len)  Returns a sequence of items from the position specified by the start argument and continuing for the number of items specified by the len argument. The first item is located at position 1
Example: subsequence(($item1, $item2, $item3,...), 3)
Result: ($item3, ...)

Example: subsequence(($item1, $item2, $item3, ...), 2, 2)
Result: ($item2, $item3)

fn:unordered((item,item,...))  Returns the items in an implementation dependent order
Functions That Test the Cardinality of Sequences

Name  Description
fn:zero-or-one(item,item,...)  Returns the argument if it contains zero or one items, otherwise it raises an error
fn:one-or-more(item,item,...)  Returns the argument if it contains one or more items, otherwise it raises an error
fn:exactly-one(item,item,...)  Returns the argument if it contains exactly one item, otherwise it raises an error
Equals, Union, Intersection and Except

Name  Description
fn:deep-equal(param1,param2,collation)  Returns true if param1 and param2 are deep-equal to each other, otherwise it returns false
Aggregate Functions

Name  Description
fn:count((item,item,...))  Returns the count of nodes
fn:avg((arg,arg,...))  Returns the average of the argument values
Example: avg((1,2,3))
Result: 2

fn:max((arg,arg,...))  Returns the argument that is greater than the others
Example: max((1,2,3))
Result: 3

Example: max(('a', 'k'))
Result: 'k'

fn:min((arg,arg,...))  Returns the argument that is less than the others
Example: min((1,2,3))
Result: 1

Example: min(('a', 'k'))
Result: 'a'

fn:sum(arg,arg,...)  Returns the sum of the numeric value of each node in the specified node-set
Functions that Generate Sequences

Name  Description
fn:id((string,string,...),node)  Returns a sequence of element nodes that have an ID value equal to the value of one or more of the values specified in the string argument
fn:idref((string,string,...),node)  Returns a sequence of element or attribute nodes that have an IDREF value equal to the value of one or more of the values specified in the string argument
fn:doc(URI)  
fn:doc-available(URI)  Returns true if the doc() function returns a document node, otherwise it returns false
fn:collection()
fn:collection(string)  
Context Functions

Name  Description
fn:position()  Returns the index position of the node that is currently being processed
Example: //book[position()<=3]
Result: Selects the first three book elements

fn:last()  Returns the number of items in the processed node list
Example: //book[last()]
Result: Selects the last book element

fn:current-dateTime()  Returns the current dateTime (with timezone)
fn:current-date()  Returns the current date (with timezone)
fn:current-time()  Returns the current time (with timezone)
fn:implicit-timezone()  Returns the value of the implicit timezone
fn:default-collation()  Returns the value of the default collation
fn:static-base-uri()  Returns the value of the base-uri
[http://www.w3schools.com/xpath/xpath_functions.asp]

xpath'item

name::
* McsEngl.xpath'item@cptIt,

_DESCRIPTION:
Definition: An item is either an atomic value or a node.
[http://www.w3.org/TR/xpath20/#dt-item]

xpath'node

name::
* McsEngl.xpath'node@cptIt,

_DESCRIPTION:
Definition: A node is an instance of one of the node kinds defined in [XQuery 1.0 and XPath 2.0 Data Model (Second Edition)].] Each node has a unique node identity, a typed value, and a string value. In addition, some nodes have a name. The typed value of a node is a sequence of zero or more atomic values. The string value of a node is a value of type xs:string. The name of a node is a value of type xs:QName. [Definition: In certain situations a value is said to be undefined (for example, the value of the context item, or the typed value of an element node). This term indicates that the property in question has no value and that any attempt to use its value results in an error.]
[http://www.w3.org/TR/xpath20/#dt-node]

xpath'node'identity

name::
* McsEngl.xpath'node'identity@cptIt,

xpath'node'name

name::
* McsEngl.xpath'node'name@cptIt,

xpath'node'string-value

name::
* McsEngl.xpath'node'string-value@cptIt,

xpath'node'typed-value

name::
* McsEngl.xpath'node'typed-value@cptIt,

SPECIFIC

_SPECIFIC:
In XPath, there are seven kinds of nodes: element, attribute, text, namespace, processing-instruction, comment, and document nodes.
XML documents are treated as trees of nodes. The topmost element of the tree is called the root element.
[http://www.w3schools.com/xpath/xpath_nodes.asp]

xpath'code

name::
* McsEngl.xpath'code@cptIt,
* McsEngl.xpath'expression@cptIt,

xphcode'return

name::
* McsEngl.xphcode'return@cptIt,

_DESCRIPTION:
An XPath expression returns either a node-set, a string, a Boolean, or a number.
[http://www.w3schools.com/xpath/xpath_operators.asp]

xpath'implementation

name::
* McsEngl.xpath'implementation@cptIt,

xpath'imp.JQUERY-PLUGIN

name::
* McsEngl.xpath'imp.JQUERY-PLUGIN@cptIt,

_ADDRESS.WPG:
* https://github.com/ilinsky/jquery-xpath//

lcp.query.XQUERY

_CREATED: {2014-03-15}

name::
* McsEngl.lcp.query.XQUERY@cptIt,
* McsEngl.xquery@cptIt,
* McsEngl.xqr@cptIt, {2014-03-15}

_DESCRIPTION:
XQuery is a standardized language for combining documents, databases, Web pages and almost anything else. It is very widely implemented. It is powerful and easy to learn.
XQuery is replacing proprietary middleware languages and Web Application development languages. XQuery is replacing complex Java or C++ programs with a few lines of code. XQuery is simpler to work with and easier to maintain than many other alternatives.
Do more with less.
[http://www.w3.org/XML/Query/]

xquery'archetype

name::
* McsEngl.xquery'archetype@cptIt,

_DESCRIPTION:
Here is an example of a question that XQuery could solve:
"Select all CD records with a price less than $10 from the CD collection stored in the XML document called cd_catalog.xml"
[http://www.w3schools.com/xquery/xquery_intro.asp]

xquery'function

name::
* McsEngl.xquery'function@cptIt,

xqrfcn.doc:
The doc() function is used to open the "books.xml" file:
doc("books.xml")

xquery'predicate

name::
* McsEngl.xquery'predicate@cptIt,
* McsEngl.xquery'where@cptIt,

_DESCRIPTION:
Predicates

XQuery uses predicates to limit the extracted data from XML documents.

The following predicate is used to select all the book elements under the bookstore element that have a price element with a value that is less than 30:

doc("books.xml")/bookstore/book[price<30]
[http://www.w3schools.com/xquery/xquery_example.asp]

xquery'return

name::
* McsEngl.xquery'return@cptIt,

_DESCRIPTION:
What information to return.

xquery'code

name::
* McsEngl.xquery'code@cptIt,

xquery'flwor

name::
* McsEngl.xquery'flwor@cptIt,

_DESCRIPTION:
FLWOR is an acronym for "For, Let, Where, Order by, Return".
The for clause selects all book elements under the bookstore element into a variable called $x.
The where clause selects only book elements with a price element with a value greater than 30.
The order by clause defines the sort-order. Will be sort by the title element.
The return clause specifies what should be returned. Here it returns the title elements.
...
Look at the following path expression:

doc("books.xml")/bookstore/book[price>30]/title
The expression above will select all the title elements under the book elements that are under the bookstore element that have a price element with a value that is higher than 30.

The following FLWOR expression will select exactly the same as the path expression above:

for $x in doc("books.xml")/bookstore/book
where $x/price>30
return $x/title
The result will be:

<title lang="en">XQuery Kick Start</title>
<title lang="en">Learning XML</title>
[http://www.w3schools.com/xquery/xquery_flwor.asp]

xquery'xpath

name::
* McsEngl.xquery'xpath@cptIt,

xquery'implementation

name::
* McsEngl.xquery'implementation@cptIt,

_DESCRIPTION:
It is the language-program that understands the code and ANSWERS the questions the code represents.
[hmnSngo.2014-03-15]

lcp.RACKET

name::
* McsEngl.Racket-language,

_DESCRIPTION:
Interesting Languages: Racket
federico@tomassetti.me
{2019-03-04}

Hi,

Finally a Racket we can all enjoy! This racket is not a criminal activity, but a language to create languages.

For example, you can create languages like Scribble, used to describe and generate documents.

Actually it is even more: a whole platform to design languages, including an IDE, a compiler that can create standalone executables, a system to distribute programs, etc.

Racket is a Lisp-derived language, so you can expect a lot of parentheses, macros and power. The particularity of Racket is that it is also designed with extensibility in mind, since it is expressly designed to create other languages. When we talk about macros we mean a feature that is able to transform a piece of code in something else. Basically a macro is a way to create transformations of the code similar to what the compiler does.

The origin of the language is in academia, and I know this will make some of you suspicious. We had the same feeling :) It can be a bit complex to use. However this also means it has a ton of documentation explaining everything from the principles necessary to use Racket to a reference of the language instructions. It is very thorough and includes many examples languages designed by their team. Racket can be used for anything from web applications to generate documents. This makes a great starting place if you want to create a few utility languages to help in your work.

One of our favorite example languages is datalog, a logic programming language like the more famous Prolog. This is to show that you could integrate wildly different DSLs into your project to serve different needs.

An example of a datalog program is the following.

In the first lines you define logical statements, like the fact that there are edges between a and b or d and a. The statement on the second line affirms that a path is equivalent to a corresponding edge. So, if there is an edge between a and b, there is also a path between a and b. The third line build on that, by saying that if two edges have a point in common, then there is path between them. The last line is a query for the program: it asks for any path given the previous statements.

The best place to start is the Quick introduction, there you can find whether the platform looks appealing to you.

Cheers,
Gabriele

_ADDRESS.WPG:
* https://docs.racket-lang.org/index.html,

lcp.REACTIVE

name::
* McsEngl.reactive-programing,

_DESCRIPTION:
Reactive programming is concerned with propagating and responding to incoming events over time, declaratively (describing what to do rather than how).
[https://auth0.com/blog/glossary-of-modern-javascript-concepts/#reactive-programming]

lcp.SCALAR

name::
* McsEngl.scalar-pcl,

_DEFINITION:
Scalar programming is a term used to refer to those programming approaches that do not follow the array programming paradigm.
The fundamental idea behind scalar programming is that operations apply to a single value at a time. This makes it a low-level programming model as it restricts the programmer to think and operate on the elemental constituents of data aggregates, and resorting to explicit loops of individual scalar operations to process the whole aggregates.
[http://en.wikipedia.org/wiki/Scalar_programming]

lcp.SCRIPTING (sl)

_CREATED: {1997-02-20}

name::
* McsEngl.conceptIt512,
* McsEngl.language.scripting@cptIt512,
* McsEngl.lngScr@cptIt512, {2011-08-29}
* McsEngl.pl.scripting@cptIt512,
* McsEngl.programing-language.SCRIPTING,
* McsEngl.scripting-language@cptIt512,
* McsEngl.scripting computer processing method, {2012-08-22}
* McsEngl.sl@cptIt512, {2011-09-25}
* McsElln.γλώσσα-συγγραφής-σεναρίων,

sl'DEFINITION

_DESCRIPTION:
A scripting language is a programming language that is used to manipulate, customise, and automate the facilities of an existing system. In such systems, useful functionality is already available through a user interface, and the scripting language is a mechanism for exposing that functionality to program control. In this way, the existing system is said to provide a host environment of objects and facilities, which completes the capabilities of the scripting language. A scripting language is intended for use by both professional and non-professional programmers.
[http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf, p12]
===
Scripting languages such as Perl and Tcl represent a very different style of programming than system-programming languages such as C or JavaTM. Scripting languages are designed for "gluing" applications; they use typeless approaches to achieve a higher level of programming and more rapid application development than system programming languages. Increases in computer speed and changes in the application mix are making scripting languages more and more important for applications of the future.
[John K. Ousterhout, Scripting: Higher Level Programming for the 21st Century, 1997-11-14] 1998feb20
===
In the old days, the distinction between languages was simple: they were either compiled, like C or Fortran, or interpreted, like BASIC. Compiled languages gave you speed and low-level access; interpreted languages were higher-level but slower.
Times change, and things aren't that simple anymore. Some language designers have taken to calling their creations ``scripting languages.'' By this, we guess they mean that their languages are interpreted and can be used to replace batch files and shell scripts, orchestrating the behavior of other programs and the underlying operating system. Perl, TCL, and Python have all been called scripting languages.
What exactly is a scripting language? Frankly we don't know if it's a distinction worth making. In Ruby, you can access all the underlying operating system features. You can do the same stuff in Ruby that you can in Perl or Python, and you can do it more cleanly. But Ruby is fundamentally different. It is a true programming language, too, with strong theoretical roots and an elegant, lightweight syntax. You could hack together a mess of ``scripts'' with Ruby, but you probably won't. Instead, you'll be more inclined to engineer a solution, to produce a program that is easy to understand, simple to maintain, and a piece of cake to extend and reuse in the future.
[http://ruby-doc.com/docs/ProgrammingRuby/]

sl'GENERIC

_GENERIC:
* programming_language#cptItsoft248#

sl'code

name::
* McsEngl.sl'code@cptIt,
* McsEngl.sl'Domain.Out@cptIt,

_SPECIFIC:
* character#ql:sl'character#,
* class,
* data-code,
* interface,
* operator,
* processing-code,
* program,
* statement,
* unit-of-code,
* variable,

For script (noncompiled or interpreted) program languages, such as JavaScript, the terms source code and object code do not apply since there is only one form of the code.
[http://searchsoa.techtarget.com/definition/source-code]

sl'Comment

name::
* McsEngl.sl'Comment@cptIt,

sl'Data

_CREATED: {2011-09-25}

name::
* McsEngl.sl'Data@cptIt,
* McsEngl.conceptIt512.1,

_Generic:
* code#ql:sl'code#

sl'data.SPECIFIC

name::
* McsEngl.sl'data.SPECIFIC@cptIt,

_SPECIFIC: Alphabetically:
* boolean,
* compound,
* compoundNo,
* js-data#ql:js'data#,
* key_value,
* number,
* php-data#ql:php'data#,
* string,
* value,

sl'data.Boolean

name::
* McsEngl.sl'data.Boolean@cptIt,

sl'data.Compound

name::
* McsEngl.sl'data.Compound@cptIt,

sl'data.CompoundNo

name::
* McsEngl.sl'data.CompoundNo@cptIt,

sl'data.Number

name::
* McsEngl.sl'data.Number@cptIt,

sl'data.String

name::
* McsEngl.sl'data.String@cptIt,

sl'data.Value

name::
* McsEngl.sl'data.Value@cptIt,

sl'Doing

name::
* McsEngl.sl'Doing@cptIt,

_SPECIFIC:
* javascript-doing
* php-doing#ql:php'doing#

sl'Domain.In

name::
* McsEngl.sl'Domain.In@cptIt,
* McsEngl.sl'usage@cptIt,

sl'EndUser-code

name::
* McsEngl.sl'EndUser-code@cptIt,

sl'evaluation#cptCore546.107#

name::
* McsEngl.sl'evaluation@cptIt,

To summarize, scripting languages are designed for gluing applications. They provide a higher level of programming than assembly or system programming languages, much weaker typing than system programming languages, and an interpreted development environment. Scripting languages sacrifice execution speed to improve development speed.
[John K. Ousterhout, Scripting: Higher Level Programming for the 21st Century, 1997-11-14]

sl'EVOLUTION#cptCore546.171#

name::
* McsEngl.sl'EVOLUTION@cptIt,

System programming languages were introduced as an alternative to assembly languages. In assembly languages, virtually every aspect of the machine is reflected in the program. Each statement represents a single machine instruction and programmers must deal with low-level details such as register allocation and procedure calling sequences. As a result, it is difficult to write and maintain large programs in assembly language.
[John K. Ousterhout, Scripting: Higher Level Programming for the 21st Century, 1997-11-14]

sl'Function

name::
* McsEngl.sl'Function@cptIt,
* McsEngl.sl'function@cptIt512i,
* McsEngl.sl'subroutine@cptIt,

_DEFINITION:
A function is a piece of code that sits dormant until it is referenced or called upon to do its "function". In addition to controllable execution, functions are also a great time saver for doing repetitive tasks.
Instead of having to type out the code every time you want something done, you can simply call the function multiple times to get the same effect. This benefit is also known as "code reusability".
[http://www.tizag.com/javascriptT/javascriptfunction.php]

sl'human

name::
* McsEngl.sl'human@cptIt,

sl'Parsing-the-code

name::
* McsEngl.sl'Parsing-the-code@cptIt,

sl'Performance

name::
* McsEngl.sl'Performance@cptIt,

Scripting languages are less efficient than system programming languages, in part because they use interpreters instead of compilers but also because their basic components are chosen for power and ease of use rather than an efficient mapping onto the underlying hardware. For example, scripting languages often use variable-length strings in situations where a system programming language would use a binary value that fits in a single machine word, and scripting languages often use hash tables where system programming languages use indexed arrays.
Fortunately, the performance of a scripting language isn't usually a major issue. Applications for scripting languages are generally smaller than applications for system programming languages, and the performance of a scripting application tends to be dominated by the performance of the components, which are typically implemented in a system programming language.
[John K. Ousterhout, Scripting: Higher Level Programming for the 21st Century, 1997-11-14]

sl'Processing-code

name::
* McsEngl.sl'Processing-code@cptIt,

_SPECIFIC:
* class,
* function,
* object,

sl'proc.Arithmetic

name::
* McsEngl.sl'proc.Arithmetic@cptIt,

sl'proc.Boolean

name::
* McsEngl.sl'proc.Boolean@cptIt,

sl'proc.Converting-datatype

name::
* McsEngl.sl'proc.Converting-datatype@cptIt,

sl'proc.Comparison

name::
* McsEngl.sl'proc.Comparison@cptIt,

sl'proc.Text

name::
* McsEngl.sl'proc.Text@cptIt,

sl'Program

name::
* McsEngl.sl'Program@cptIt,

_GENERIC:
* program#ql:program_it59#

_WHOLE:
* sl-application#ql:sl'application#

sl'Program-Development

name::
* McsEngl.sl'Program-Development@cptIt,

sl'Program-Implementation#cptIt533#

name::
* McsEngl.sl'Program-Implementation@cptIt,

sl'Interpreation

name::
* McsEngl.sl'Interpreation@cptIt,

Another key difference between scripting languages and system programming languages is that scripting languages are usually interpreted whereas system programming languages are usually compiled. Interpreted languages provide rapid turnaround during development by eliminating compile times. Interpreters also make applications more flexible by allowing users to program the applications at run-time. For example, many synthesis and analysis tools for integrated circuits include a Tcl interpreter; users of the programs write Tcl scripts to specify their designs and control the operation of the tools. Interpreters also allow powerful effects to be achieved by generating code on the fly. For example, a Tcl-based Web browser can parse a Web page by translating the HTML for the page into a Tcl script using a few regular expression substitutions. It then executes the Tcl script to render the page on the screen.
[John K. Ousterhout, Scripting: Higher Level Programming for the 21st Century, 1997-11-14]

sl'resourceInfHmn#cptResource843#

name::
* McsEngl.sl'resourceInfHmn@cptIt,

_SPECIFIC:
* http://hyperpolyglot.org/scripting,

Resources
The www.perl.com home page http://www.perl.com Sun Microsystems's Tcl page http://sunscript.sun.com/ Python language home page http://www.python.org CPAN http://www.perl.com/CPAN/ Jon Udell's BYTE Network Project http://www.byte.com/art/netcol/netproj.htm Simplified Wrapper and Interface Generator (SWIG) http://www.cs.utah.edu/~beazley/SWIG comp.lang.tcl FAQ launcher http://www.teraform.com/%7Elvirden/tcl-faq/ More information on choosing a scripting language http://starbase.neosoft.com/~claird/comp.lang.misc/portable_scripting.html Forth Online Resources Quick-Ref Card http://www.complang.tuwien.ac.at/forth/forl.html The Icon Programming Language http://www.cs.arizona.edu/icon S-lang ftp://space.mit.edu/pub/davis/slang The Rexx Language http://www2.hursley.ibm.com/Rexx Scheme Frequently Asked Questions http://www.cs.cmu.edu/Groups/AI/html/faqs/lang/scheme/part1/faq.html Yorick -- Basics http://www.physics.berkeley.edu/computing/yorick/yorick.html

sl'Software-system

name::
* McsEngl.sl'Software-system@cptIt,
* McsEngl.sl'application@cptIt,

_GENERIC:
* app#ql:app_it393#

_PART:
* content,
* program,

sl'Statement

name::
* McsEngl.sl'Statement@cptIt,
* McsEngl.sl'command@cptIt,

sl'Translation

name::
* McsEngl.sl'Translation@cptIt,

sl'Typeness

name::
* McsEngl.sl'Typeness@cptIt,

In order to simplify the task of connecting components, scripting languages tend to be typeless: all things look and behave the same so that they are interchangeable. For example, in Tcl or Visual Basic a variable can hold a string one moment and an integer the next. Code and data are often interchangeable, so that a program can write another program and then execute it on the fly. Scripting languages are often string-oriented, since this provides a uniform representation for many different things.
...It might seem that the typeless nature of scripting languages could allow errors to go undetected, but in practice scripting languages are just as safe as system programming languages. For example, an error will occur if the font size specified for the button example above is a non-integer string such as xyz. The difference is that scripting languages do their error checking at the last possible moment, when a value is used. Strong typing allows errors to be detected at compile-time, so the cost of run-time checks is avoided. However, the price to be paid for this efficiency is restrictions on how information can be used: this results in more code and less flexible programs.
[John K. Ousterhout, Scripting: Higher Level Programming for the 21st Century, 1997-11-14]

sl'Unit-of-code

name::
* McsEngl.sl'Unit-of-code@cptIt,

_Generic:
* code#ql:sl'code#

_SPECIFIC:
* data-code,
* processing-code,

sl'Alphabet-and-punctuation

name::
* McsEngl.sl'Alphabet-and-punctuation@cptIt,
* McsEngl.sl'Character@cptIt,
* McsEngl.sl'symbol@cptIt,

sl'Delimeter

name::
* McsEngl.sl'Delimeter@cptIt,
* McsEngl.sl'punctuation@cptIt,

sl'Expression

name::
* McsEngl.sl'Expression@cptIt,

sl'Identifier

name::
* McsEngl.sl'Identifier@cptIt,
* McsEngl.sl'name@cptIt,
* McsEngl.sl'word@cptIt,

sl'Keyword

name::
* McsEngl.sl'Keyword@cptIt,

sl'Token

name::
* McsEngl.sl'Token@cptIt,

_SPECIFIC:
* punctuation,
* word,

sl'Variable

name::
* McsEngl.sl'Variable@cptIt,

_Generic:
* code#ql:sl'code#

sl'Relation-to-SYSTEM-LANGUAGES

name::
* McsEngl.sl'Relation-to-SYSTEM-LANGUAGES@cptIt,
* McsEngl.script'and'program-relation@cptIt512,
* McsEngl.program'and'script-relation@cptIt512,

INTERPREATION:
Another key difference between scripting languages and system programming languages is that scripting languages are usually interpreted whereas system programming languages are usually compiled.
[John K. Ousterhout {1997-11-14}] 1998feb20

HIGHER-LEVEL:
Scripting languages are higher level than system programming languages, in the sense that a single statement does more work on average. A typical statement in a scripting language executes hundreds or thousands of machine instructions, whereas a typical statement in a system programming language executes about five machine instructions
[John K. Ousterhout {1997-11-14}] 1998feb20

SIMPLICITY:
Scripting languages are easier to learn because they have simpler syntax than system programming languages and because they omit complex features like objects and threads. For example, compare Visual Basic with Visual C++; few casual programmers would attempt to use Visual C++, but many have been able to build useful applications with Visual Basic.
[John K. Ousterhout {1997-11-14}] 1998feb20

ΔΙΑΦΟΡΑ ΜΕΤΑΞΥ ΣΕΝΑΡΙΟΥ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΟΣ:
Αντίθετα, οι εντολές που περιλαμβάνει ένα σενάριο γράφονται με έναν απλό συντάκτη κειμένου (text editor), και αντί να "περνούν" κατευθείαν στον επεξεργαστή για εκτέλεση, την εκτέλεσή τους αναλαμβάνει ένα άλλο πρόγραμμα - στην περίπτωση της JavaScript, το πρόγραμμα περιήγησης στο Διαδίκτυο (browser). Καταλαβαίνει κανείς ότι το να γράψει και να εκτελέσει ένα σενάριο είναι πολύ πιο εύκολη υπόθεση από το να γράψει και να εκτελέσει ένα πρόγραμμα, αν και η εκτέλεση του σεναρίου είναι πιο αργή από την εκτέλεση του προγράμματος.
[Λιακέας, Η γλώσσα JavaScript. 2002, 16]

SPECIFIC

name::
* McsEngl.sl.specific#cptCore768#@cptIt,

_SPECIFIC: sl.Alphabetically:
* AWK
* bash
* FORTH
* GUILE
* ICON
* JavaScript#cptItsoft554#
* LUA#cptItsoft96#
* PERL
* PHP#cptItsoft585#
* PYTHON#cptItsoft514#
* REXX
* sed
* S-LANG
* SCHEME
* TCL
* VisualBasic for Applications

sl.TEXT-PROCESSING-LANGUAGE

name::
* McsEngl.sl.TEXT-PROCESSING-LANGUAGE@cptIt,

_DESCRIPTION:
Text processing languages
The processing of text-based records is one of the oldest uses of scripting languages. Many, such as Unix's awk and, later, Perl, were originally designed to aid system administrators in automating tasks that involved Unix text-based configuration and log files. Perl is a special case -- originally intended as a report-generation language, it has grown into a full-fledged applications language in its own right.
* AWK
* Perl
* sed
* XSLT
[http://en.wikipedia.org/wiki/Scripting_language]

sl.VISUAL-BASIC

name::
* McsEngl.sl.VISUAL-BASIC@cptIt,
* McsEngl.visual-basic@cptIt512,

Visual Basic isn't really a scripting language; it was originally implemented as a simple system programming language, then modified to make it more suitable for scripting. Future scripting languages will be even better than those available today.
[John K. Ousterhout, Scripting: Higher Level Programming for the 21st Century, 1997-11-14]

sl.sed

name::
* McsEngl.sl.sed@cptIt,
* McsEngl.pgmlng.sed@cptIt,
* McsEngl.sed-pgmlng@cptIt,

_DESCRIPTION:
sed (stream editor) is a Unix utility that parses and transforms text, using a simple, compact programming language. sed was developed from 1973 to 1974 by Lee E. McMahon of Bell Labs,[1] and is available today for most operating systems.[2] sed was based on the scripting features of the interactive editor ed ("editor", 1971) and the earlier qed ("quick editor", 1965–66). sed was one of the earliest tools to support regular expressions, and remains in use for text processing, most notably with the substitution command. Other options for doing "stream editing" include AWK and Perl.
[http://en.wikipedia.org/wiki/Sed]

lcp.architecture.STACK-ORIENTED (lsop)

name::
* McsEngl.lcp.architecture.STACK-ORIENTED (lsop)@cptIt,
* McsEngl.lsop@cptIt,
* McsEngl.lcp.stack-oriented@cptIt,
* McsEngl.stack-based-programming-language@cptIt,
* McsEngl.stack-oriented-programming-language@cptIt,
* McsEngl.stack-oriented-pcl@cptIt,

_DESCRIPTION:
A stack-oriented programming language is one that relies on a stack machine model for passing parameters.
Several programming languages fit this description, notably Forth and PostScript, and also many Assembly languages (but on a much lower level).
Stack oriented programming languages operate upon one or more stacks, each of which may serve different purposes.
Because of this, programming constructs in other programming languages may need to be modified for use in a stack-oriented programming language.
Adding to this, some stack-oriented programming languages operate in Reverse Polish or postfix notation - that is, the arguments or parameters for some command are stated before the actual command itself.
For example, in RPN, one would say "2, 3, multiply" instead of "multiply, 2, 3" (prefix or Polish notation) or "2 multiply 3" (infix notation).
[http://en.wikipedia.org/wiki/Stack-oriented_programming_language]

lsop'Stack-computer#ql:stack-machine#

name::
* McsEngl.lsop'Stack-computer@cptIt,

lcp.STRUCTURED

name::
* McsEngl.lcp.STRUCTURED@cptIt,
* McsEngl.structured-programming-language@cptIt,

_DEFINITION:
Structured programming can be seen as a subset or subdiscipline of procedural programming, one of the major programming paradigms. It is most famous for removing or reducing reliance on the GOTO statement.
[http://en.wikipedia.org/wiki/Unstructured_programming]

structured programming: A technique for organizing and coding computer programs in which a hierarchy of modules is used, each having a single entry and a single exit point, and in which control is passed downward through the structure without unconditional branches to higher levels of the structure. Three types of control flow are used: sequential, test, and iteration.

structured programming disallows the use of goto.
[http://en.wikipedia.org/wiki/Programming_paradigm]

programing.STRUCTURED

name::
* McsEngl.programing.STRUCTURED@cptIt,
* McsEngl.pgmng.structured@cptIt,
* McsEngl.structured-programming@cptIt,

_DESCRIPTION:
Structured programming is a programming paradigm aimed on improving the clarity, quality, and development time of a computer program by making extensive use of subroutines, block structures and for and while loops—in contrast to using simple tests and jumps such as the goto statement which could lead to "spaghetti code" which is both difficult to follow and to maintain.

It emerged in the 1960s—particularly from work by Bφhm and Jacopini,[1] and a famous letter, Go To Statement Considered Harmful, from Edsger Dijkstra in 1968[2]—and was bolstered theoretically by the structured program theorem, and practically by the emergence of languages such as ALGOL with suitably rich control structures.
[http://en.wikipedia.org/wiki/Structured_programming]

lcp.SYSTEM (applicationNo)

name::
* McsEngl.lcp.SYSTEM (applicationNo)@cptIt,
* McsEngl.pgmlng.applicationNo@cptIt,
* McsEngl.system-programming-language@cptIt,
* McsEngl.language.system@cptIt513,
* McsEngl.system'language@cptIt513,

_DEFINITION:
System programming languages were designed for building data structures and algorithms from scratch, starting from the most primitive computer elements such as words of memory.
[John K. Ousterhout {1997-11-14}] 1998feb20

Systems programming (or system programming) is the activity of programming system software. The primary distinguishing characteristic of systems programming when compared to application programming is that application programming aims to produce software which provides services to the user (e.g. word processor), whereas systems programming aims to produce software which provides services to the computer hardware (e.g. disk defragmenter). It also requires a greater degree of hardware awareness.
[http://en.wikipedia.org/wiki/Systems_programming]

SIBLING:
* scripting-language#cptItsoft512#

lcp.SYSNTEM.NO (application)

_CREATED: {2014-01-18}

name::
* McsEngl.lcp.SYSNTEM.NO (application)@cptIt,

_DESCRIPTION:

lcp.TEMPLATE

name::
* McsEngl.lcp.TEMPLATE@cptIt,
* McsEngl.template-language@cptIt,

_DESCRIPTION:
A template processor (also known as a template engine or template parser) is a piece of software or a software component that is designed to combine one or more templates with a data model to produce one or more result documents.[1][2][3] The language that the templates are written in is known as a template language or templating language. For purposes of this article, a result document is any kind of formatted output, including documents, web pages, or source code (in source code generation), either in whole or in fragments. A template engine is ordinarily included as a part of a web template system or application framework, and may be used also as preprocessor or filter.
[http://en.wikipedia.org/wiki/Templating_language]

lcp.VALUE-LEVEL

name::
* McsEngl.lcp.VALUE-LEVEL@cptIt,
* McsEngl.value-level-mdp@cptIt,

_DEFINITION:
Value-level programs are those that describe how to combine various values (i.e., numbers, symbols, strings, etc.) to form other values until the final result values are obtained. New values are constructed from existing ones by the application of various value-to-value functions, such as addition, concatenation, matrix inversion, and so on.
Conventional, von Neumann programs are value-level: expressions on the right side of assignment statements are exclusively concerned with building a value that is then to be stored.
[http://en.wikipedia.org/wiki/Value-level_programming]

lcp.VISUAL

_CREATED: {1999-10-29}

NAME

name::
* McsEngl.lcp.VISUAL@cptIt,
* McsEngl.conceptIt518,
* McsEngl.GUI-builder@cptIt,
* McsEngl.visual-application-builder-environment@cptIt,
* McsEngl.visual-programming-environment@cptIt,
* McsEngl.programming.visual@cptIt518,
* McsElln.ΟΠΤΙΚΟΣ-ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ@cptIt,

DEFINITION

“Visual programming” first became successful – very successful – with Microsoft’s Visual Basic (VB), followed by a second-generation design in Borland’s Delphi (the primary inspiration for the Java Beans design). With these programming tools the components are represented visually, which makes sense since they usually display some kind of visual component such as a button or a text field. The visual representation, in fact, is often exactly the way the component will look in the running program. So part of the process of visual programming involves dragging a component from a pallet and dropping it onto your form. The application builder tool writes code as you do this, and that code will cause the component to be created in the running program.
Simply dropping the component onto a form is usually not enough to complete the program. Often, you must change the characteristics of a component, such as what color it is, what text is on it, what database it’s connected to, etc. Characteristics that can be modified at design time are referred to as properties. You can manipulate the properties of your component inside the application builder tool, and when you create the program this configuration data is saved so that it can be rejuvenated when the program is started.
By now you’re probably used to the idea that an object is more than characteristics; it’s also a set of behaviors. At design-time, the behaviors of a visual component are partially represented by events, meaning “Here’s something that can happen to the component.” Ordinarily, you decide what you want to happen when an event occurs by tying code to that event.Here’s the critical part: the application builder tool is able to dynamically interrogate (using reflection) the component to find out which properties and events the component supports.Once it knows what they are, it can display the properties and allow you to change those (saving the state when you build the program), and also display the events. In general, you do something like double clicking on an event and the application builder tool creates a code body and ties it to that particular event. All you have to do at that point is write the code that executes when the event occurs.
All this adds up to a lot of work that’s done for you by the application builder tool. As a result you can focus on what the program looks like and what it is supposed to do, and rely on the application builder tool to manage the connection details for you. The reason that visual programming tools have been so successful is that they dramatically speed up the process of building an application – certainly the user interface, but often other portions of the application as well.
[B. Eckel Thinking in Java 1998jan]

GENERIC

_GENERIC:
* programming_language#cptItsoft248#

SPECIFIC

_SPECIFIC:#ql:_GENERIC cptIt518#

lcp.instance.lcpCONCEPT

_CREATED: {2013-11-23}

name::
* McsEngl.lcp.instance.lcpCONCEPT@cptIt,
* McsEngl.lcpCepto@cptIt,

* McsEngl.pgmlng.CBSscript@cptIt,
* McsEngl.CBSscript@cptIt,
* McsEngl.cbsscript@cptIt,
* McsEngl.ConceptBrainSensible-script@cptIt,
* McsEngl.conceptscript,
* McsEngl.concept-pl, {2014-01-20}
* McsEngl.concept-script, {2013-11-26}
* McsEngl.CPTscript@cptIt, {2013-11-26}
* McsEngl.languageProgramingConcept@cptIt, {2014-02-04}
* McsEngl.lpConcept@cptIt, {2014-02-04}
* McsEngl.pgmlng.plConcept@cptIt, {2014-01-24}
* McsEngl.plConcept@cptIt, {2014-01-24}
* McsEngl.programing-language.concept@cptIt, {2014-01-24}
* McsEngl.scriptCbs@cptIt,
* McsEngl.lngCpt@cptIt, {2016-03-19}
* McsEngl.lcpSgm@cptIt, {2014-09-21}
* McsEngl.lcpCpt@cptIt, {2014-02-06}
* McsEngl.lpCpt@cptIt, {2014-02-04}
* McsEngl.lngPgmCpt@cptIt, {2014-02-04}
* McsEngl.pl.cpt@cptIt, {2014-01-27}
* McsEngl.plCpt@cptIt, {2014-01-24}
* McsEngl.cbspl@cptIt, {2014-01-19}
* McsEngl.cptpl@cptIt, {2014-01-19}
* McsEngl.cspt@cptIt, {2013-11-29}
* McsEngl.ctst@cptIt,
* McsEngl.cptspt@cptIt,
* McsEngl.cbsspt@cptIt,

_DESCRIPTION:
CBSscript is a concept-oriented-language (COL) with conceptBrainSensible(cbs)#ql:conceptbrainualsensorial@cptCore356# its main construct.
[hmnSngo.2013-11-23]

lcpCpt'codeFIRST

name::
* McsEngl.lcpCpt'codeFIRST@cptIt,
* McsEngl.lcpCpt'archetype@cptIt,
* McsEngl.lcpCptCdf@cptIt,

_DESCRIPTION:
Pgmlngs manipulate HUMAN-INFORMATION.
The first programing-languages (and computers) manipulated NUMBERS.
Next with Lisp-pgmlng manipulated TEXT (strings).
Next processed audio and images and structures of data and dataNo.
Now its time to process conceptBrains.
[hmnSngo.2014-01-30]

lcpCpt'archetype'code

name::
* McsEngl.lcpCpt'archetype'code@cptIt,
* McsEngl.lcpCpt'code.VALUE@cptIt,
* McsEngl.lcpCpt'value@cptIt,

_DESCRIPTION:
Value is any STRUCTURE of code, we assign to a name.
[hmnSngo.2014-01-25]

_SPECIFIC:
* (arr) array##
* (bln) boolean##
* (cpt) concept##
* (fcn) function##
* null##
* (nbr) number##
* (str) string##
* (tim) time##
* undefined##

lcpCpt'archetype'domainIn

name::
* McsEngl.lcpCpt'archetype'domainIn@cptIt,
* McsEngl.lcpCpt'archetype-set@cptIt,
* McsEngl.lcpCpt'domain.IN@cptIt,
* McsEngl.lcpCpt'domainIn@cptIt,

SPECIFIC

_SPECIFIC:
* knowledge-processing##
* natural-language-processing##
* quering##

lcpCpt.algo.Natural-language-understanding

name::
* McsEngl.lcpCpt.algo.Natural-language-understanding@cptIt,

_DESCRIPTION:
* to know the nameSemasios#ql:namesemasio@cptCore*# a language supports.
* to know the common conceptBrains of a language.
* to know worldviews of the language.

lcpCptCdf.QUERY

name::
* McsEngl.lcpCptCdf.QUERY@cptIt,

_DESCRIPTION:
The query_language will search 'name-value-pairs', ie characteristics, ie generic-specific-pairs.
[hmnSngo.2013-11-30]

lcpCptCdf'CONCEPT

name::
* McsEngl.lcpCptCdf'CONCEPT@cptIt,
* McsEngl.cbss'concept@cptIt,
* McsEngl.cbss@cptIt,
* McsEngl.lcpCpt'archetype-concept@cptIt, {2014-01-27}
* McsEngl.lcpCpt'code-concept@cptIt, {2014-01-27}
* McsEngl.lcpCpt'concept-code@cptIt,
* McsEngl.cptPl@cptIt, {2014-01-25}

_DESCRIPTION:
Archetype-concept is a conceptBrainSensible.
[hmnSngo.2014-01-27]

_DESCRIPTION:
PlConcepts are the representations of human-conceptBrains a pgmlng manages.
[hmnSngo.2014-01-25]
===
Everything is a cbss, a script-computer-construction that MAPS a conceptBrainHuman.
[hmnSngo.2013-11-24]
===
A 'concept' in cbsscript is a ConceptBrainHumanSensible.
[hmnSngo.2013-11-26]

cptPl'characteristic

name::
* McsEngl.cptPl'characteristic@cptIt,

_DESCRIPTION:
A characteristics of a cbss is a generic-specific-cbss-pair (name-value-pair).
[hmnSngo.2013-11-24]

_SPECIFIC:
* aArray
* bBoolean
* cConcept
* fFunction
* nNumber
* reRegular_expression
* sString

cptPl'chc.definition

name::
* McsEngl.cptPl'chc.definition@cptIt,

cptPl'chc.description

name::
* McsEngl.cptPl'chc.description@cptIt,

cptPl'chc.environment

name::
* McsEngl.cptPl'chc.environment@cptIt,

cptPl'chc.name

name::
* McsEngl.cptPl'chc.name@cptIt,
* McsEngl.cptPl'name@cptIt,

_NOTATION:
   lcpCpt    js
multiword:  xxx-yyy  xxx_yyy
specific:  xxx:yyy  xxx__yyy
specificNo  xxx.yyy    xxx.yyy
[hmnSngo.2013-11-30]
===
     ctst:      js:
* multiword:  xxx-yyy    xxx_yyy
* chc.specific:  xxxYyy, XXX.YYY  xxxYyy, XXX__YYY,
* chc.specificNo:  xxx'yyy      xxx.yyy
[hmnSngo.2013-11-27]
===
     cbsspt:    js:
* multiword:  xxx-yyy  xxx_yyy
* chc.specific:  xxxYyy    xxxYyy
* chc.specificNo:  xxx'yyy    xxx__yyy, xxx.yyy
[hmnSngo.2013-11-24]

cptPl'chc.part

name::
* McsEngl.cptPl'chc.part@cptIt,

cptPl'chc.specific

name::
* McsEngl.cptPl'chc.specific@cptIt,

cptPl'chc.whole

name::
* McsEngl.cptPl'chc.whole@cptIt,

SPECIFIC

name::
* McsEngl.cptPl.specific@cptIt,

_SPECIFIC:
* primitive##
* primitiveNo##

cptPl.SPECIFIC.DIVISION.instance

name::
* McsEngl.cptPl.SPECIFIC.DIVISION.instance@cptIt,

_SPECIFIC:
* instance##
* instanceNo##

cptPl.SPECIFIC.DIVISION.characteristic-quantity

name::
* McsEngl.cptPl.SPECIFIC.DIVISION.characteristic-quantity@cptIt,

_SPECIFIC:
* characteristicOne##
* characteristicMany##

cptPl.SPECIFIC.DIVISION.core-custom

name::
* McsEngl.cptPl.SPECIFIC.DIVISION.core-custom@cptIt,

_SPECIFIC:
* custom-conceptPl##
* customNo##

cptPl.SPECIFIC.DIVISION.doing

name::
* McsEngl.cptPl.SPECIFIC.DIVISION.doing@cptIt,

_SPECIFIC:
* doing##
* doingNo##

lcpCptCdf'cpt.INSTANCE (primitive)

_CREATED: {2014-01-24}

name::
* McsEngl.lcpCptCdf'cpt.INSTANCE (primitive)@cptIt,
* McsEngl.lcpCpt'code.cpt.primitive@cptIt,
* McsEngl.lcpCpt'instance-plconcept@cptIt,
* McsEngl.lcpCpt'primitive-plconcept@cptIt,

_DESCRIPTION:
Primitives are concepts that are comprised of only a name.
[hmnSngo.2014-01-21]

lcpCpt'primitive.BOOLEAN

_CREATED: {2014-01-24}

name::
* McsEngl.lcpCpt'primitive.BOOLEAN@cptIt,
* McsEngl.lcpCpt'boolean-primitive@cptIt,

_SPECIFIC:
* true:strong
* true
* true:weak
* true:false
* false:weak
* false
* false:strong

lcpCpt'primitive.DOING

_CREATED: {2014-01-24}

name::
* McsEngl.lcpCpt'primitive.DOING@cptIt,
* McsEngl.lcpCpt'doing-primitive@cptIt,

_SPECIFIC:
fcnSet (assign)
fcnSum(+)

lcpCpt'primitive.null

_CREATED: {2014-01-24}

name::
* McsEngl.lcpCpt'primitive.null@cptIt,
* McsEngl.lcpCpt'null@cptIt,

_DESCRIPTION:
When a 'characteristic' is initialized but we don't want to contain something. Contains the 'zero' concept.
[hmnSngo.2013-11-26]

lcpCpt'primitive.NUMBER

_CREATED: {2014-01-24}

name::
* McsEngl.lcpCpt'primitive.NUMBER@cptIt,
* McsEngl.lcpCpt'number-primitive@cptIt,

lcpCpt'primitive.RELATION

_CREATED: {2014-01-24}

name::
* McsEngl.lcpCpt'primitive.RELATION@cptIt,
* McsEngl.lcpCpt'relation-primitive@cptIt,

_SPECIFIC:
rlnIs_named (:=)

lcpCpt'primitive.STRING

_CREATED: {2014-01-24}

name::
* McsEngl.lcpCpt'primitive.STRING@cptIt,
* McsEngl.lcpCpt'string-primitive@cptIt,

lcpCpt'primitive.TIME

_CREATED: {2014-01-24}

name::
* McsEngl.lcpCpt'primitive.TIME@cptIt,
* McsEngl.lcpCpt'time-primitive@cptIt,

_NOTATION:
{2014}
{2014-01-24}

lcpCpt.primitive.undefined

name::
* McsEngl.lcpCpt.primitive.undefined@cptIt,

_DESCRIPTION:
When a 'characteristic' is decleared (created) without initialization, then automatically initialized with this concept.
[hmnSngo.2013-11-26]

lcpCptCdf'cpt.INSTANCE.NO (primitiveNo)

_CREATED: {2014-01-24}

name::
* McsEngl.lcpCptCdf'cpt.INSTANCE.NO (primitiveNo)@cptIt,
* McsEngl.lcpCpt'code.cpt.PRIMITIVE.NO@cptIt,
* McsEngl.lcpCpt'primitiveNo-concept@cptIt,

lcpCptCdf'cpt.CHARACTERISTIC.ONE

_CREATED: {2014-01-24}

name::
* McsEngl.lcpCptCdf'cpt.CHARACTERISTIC.ONE@cptIt,
* McsEngl.lcpCpt'code.cpt.NAMEVALUE@cptIt,
* McsEngl.lcpCpt'namevalue-concept@cptIt,

_NOTATION:
name := value
[hmnSngo.2014-01-24]

lcpCptCdf'cpt.CHARACTERISTIC.MANY (object)

_CREATED: {2014-01-24}

name::
* McsEngl.lcpCptCdf'cpt.CHARACTERISTIC.MANY (object)@cptIt,
* McsEngl.lcpCpt'code.cpt.NAMESVALUES@cptIt,
* McsEngl.lcpCpt@cptIt,
* McsEngl.lcpCpt'namesvalues-concept@cptIt,

_DESCRIPTION:
Namesvalues is a COLLECTION of many namevalue.
[hmnSngo.2014-01-24]

_NOTATION:
objName := { n1:=v1, n2:=v2}
[hmnSngo.2014-01-24]

lcpCptCdf'cpt.INDEXED-NAMESVALUES (array)

_CREATED: {2014-01-24}

name::
* McsEngl.lcpCptCdf'cpt.INDEXED-NAMESVALUES (array)@cptIt,
* McsEngl.lcpCpt'array@cptIt,
* McsEngl.lcpCpt'collection@cptIt,
* McsEngl.lcpCpt'collection-concept@cptIt,

_DESCRIPTION:
Collection

_NOTATION:
arrName := { v0, v1}
[hmnSngo.2014-01-24]

lcpCptCdf'cpt.ENTITY (variable)

_CREATED: {2014-01-25}

name::
* McsEngl.lcpCptCdf'cpt.ENTITY (variable)@cptIt,
* McsEngl.lcpCpt'entity-concept@cptIt,
* McsEngl.lcpCpt'ent@cptIt,

lcpCptCdf'cpt.BODY

_CREATED: {2014-01-24}

name::
* McsEngl.lcpCptCdf'cpt.BODY@cptIt,
* McsEngl.lcpCpt'body-concept@cptIt,
* McsEngl.lcpCpt'bdy@cptIt,

_DESCRIPTION:
Body-plconcept is a plconcept which is NOT pldoing nor plrelation.
[hmnSngo.2014-01-24]

lcpCptCdf'cpt.BODY.NO

_CREATED: {2014-01-25}

name::
* McsEngl.lcpCptCdf'cpt.BODY.NO@cptIt,
* McsEngl.lcpCpt'bodyNo-concept@cptIt,
* McsEngl.lcpCpt'bdyNo@cptIt,

lcpCptCdf'cpt.FUNCTION (doing)

_CREATED: {2014-01-01}

name::
* McsEngl.lcpCptCdf'cpt.FUNCTION (doing)@cptIt,
* McsEngl.cptfunction@cptIt, {2014-03-19}
* McsEngl.lcpCpt'function@cptIt,
* McsEngl.lcpCpt'code.cpt.DOING@cptIt,
* McsEngl.cptfcn@cptIt,
* McsEngl.lcpCpt'fcn@cptIt,

_DESCRIPTION:
Plfunction is a namevalue-concept with value processing-code.
[hmnSngo.2014-01-24]

_NOTATION:
fcnDefine fcnName typP1, typP2 ==> typReturn|null :=
 body
 //the last sentence is the return-value
 //if return is 'null' then the last sentence is not the return-value.
[hmnSngo.2014-02-11]
===
fcnDefine fcnName(args):
 body
 null //if function returns nothing
[hmnSngo.2014-02-08]
===
fcnName(args) := { body}
[hmnSngo.2014-01-24]

cptfcn'name

name::
* McsEngl.cptfcn'name@cptIt,

fcnIs_something:
RETURNS a boolean, after processing the input.

fcnRtnObtName:
RETURNS an object with 'name'.

fcnPrintLine:
prints on stdout a string.

cptfcn.ASSIGN

name::
* McsEngl.cptfcn.ASSIGN@cptIt,

_CODE.CPT:
fcnAssign## str1 'xxx'
--- _code.js:
str1 = 'xxx';

lcpCptCdf'cpt.FUNCTION.NO (doingNo)

_CREATED: {2014-01-25}

name::
* McsEngl.lcpCptCdf'cpt.FUNCTION.NO (doingNo)@cptIt,
* McsEngl.lcpCpt'doingNo-concept@cptIt,

lcpCptCdf'cpt.RELATION

_CREATED: {2014-01-24}

name::
* McsEngl.lcpCptCdf'cpt.RELATION@cptIt,
* McsEngl.lcpCpt'relation@cptIt,
* McsEngl.cptrln@cptIt,
* McsEngl.lcpCpt'rln@cptIt,

_CODE.CPT:
if# {} then# {} else# {}
if# ... then# ... else# ...
--- _code.js:
if () ? ... : ...

lcpCpt'codeSECOND

name::
* McsEngl.lcpCpt'codeSECOND@cptIt,
* McsEngl.cptcode@cptIt,
* McsEngl.lcpCpt'code@cptIt,

SPECIFIC

_SPECIFIC:
* atom-code##
* atomNo-code##
* data-code##
* dataNo-code##

lcpCptCds.ATOM.NO

name::
* McsEngl.lcpCptCds.ATOM.NO@cptIt,
* McsEngl.lcpCpt'atomNo-code@cptIt,
* McsEngl.lcpCpt'non-primitive-code@cptIt,

_SPECIFIC:
* file-code##
* sentence-code##
* view-code##
* worldview-code##

lcpCptCds.FILE

_CREATED: {2014-01-25}

name::
* McsEngl.lcpCptCds.FILE@cptIt,
* McsEngl.lcpCpt'file-code@cptIt,

lcpCptCds.VIEW (module|library)

name::
* McsEngl.lcpCptCds.VIEW (module|library)@cptIt,
* McsEngl.cbspt'view@cptIt,

_DESCRIPTION:
In order to organize a namespace we devide it in PARTS.
[hmnSngo.2013-11-24]

lcpCpt'file

name::
* McsEngl.lcpCpt'file@cptIt,

_EXTENSION:
.ctst
[hmnSngo.2013-11-26]
===
.cbss
[hmnSngo.2013-11-24]

lcpCptCds.WORLDVIEW (framework)

name::
* McsEngl.lcpCptCds.WORLDVIEW (framework)@cptIt,
* McsEngl.ctst'worldview@cptIt,

_DESCRIPTION:
It will support unique global-local names per human or group-of-humans.
[hmnSngo.2013-11-24]

lcpCpt'wv'ID

name::
* McsEngl.lcpCpt'wv'ID@cptIt,

_EXAMPLE:
synagonism.net/cbs/

lcpCpt'wv'module#ql:cbsspt'module#

name::
* McsEngl.lcpCpt'wv'module@cptIt,

SPECIFIC

name::
* McsEngl.cbsspt'ns.specific@cptIt,

lcpCpt'wv.OFFLINE

name::
* McsEngl.lcpCpt'wv.OFFLINE@cptIt,

_DESCRIPTION:
Every cbss-worldview is stored online at 'domain/cbss/' AND local on the creator's-machine or any user's-machine and exists automatic synchronization among them.
[hmnSngo.2013-11-24]

lcpCpt'wv.ONLINE

name::
* McsEngl.lcpCpt'wv.ONLINE@cptIt,

lcpCptCds.PARAGRAPH (block)

_CREATED: {2014-01-24}

name::
* McsEngl.lcpCptCds.PARAGRAPH (block)@cptIt,
* McsEngl.lcpCpt'plparagraph@cptIt,

lcpCptCds.SENTENCE-STRUCTURE

_CREATED: {2014-02-23}

name::
* McsEngl.lcpCptCds.SENTENCE-STRUCTURE@cptIt,
* McsEngl.lcpCpt'sentence-structure@cptIt,
* McsEngl.conjunction.lcpCpt@cptIt, {2014-03-07}
* McsEngl.cptsentencescr@cptIt,

cptsentencescr'conjunction

name::
* McsEngl.cptsentencescr'conjunction@cptIt,

_NOTATION:
rlnIf#
By setting# at the end, we understand that this is a conjunction and not a noun or verb.
The same with -a in langokamo.
[hmnSngo.2014-02-23]

lcpCptCds.SENTENCE

_CREATED: {2014-01-24}

name::
* McsEngl.lcpCptCds.SENTENCE@cptIt,
* McsEngl.cptsentence@cptIt, {2014-02-23}
* McsEngl.lcpCpt'code.SENTENCE@cptIt,
* McsEngl.lcpCpt'plsentence@cptIt,
* McsEngl.lcpCpt'sentence@cptIt,
* McsEngl.lcpCpt'sentence-code@cptIt,

_DESCRIPTION:
Plsentence is a REPRESENTATION of plconcept relations(= isequal, ifthen, ...) and doings(= function calls).
[hmnSngo.2014-01-24]

cptsentence'argument

_CREATED: {2014-01-25}

name::
* McsEngl.cptsentence'argument@cptIt,
* McsEngl.lcpCpt'argument-of-plsentence@cptIt,

_DESCRIPTION:
The arguments of the relations|doings of a sentence, which can have any value, are the arguments of the plsentence.
[hmnSngo.2014-01-25]

cptsentence'verb

_CREATED: {2014-01-25}

name::
* McsEngl.cptsentence'verb@cptIt,
* McsEngl.lcpCpt'plverb-of-plsentence@cptIt,
* McsEngl.plverb.lcpCpt@cptIt,
* McsEngl.verb.lcpCptIt@cptIt,

_DESCRIPTION:
Plverb is the relation or doing of a plsentence.
[hmnSngo.2014-01-25]

_NOTATION:
dngDefine##
rlnIs##
By setting## at the end, we understand that this is a verb and not a noun.
The same with -i in langokamo.
[hmnSngo.2014-02-23]

SPECIFIC

cptsentence.ASSIGNING

name::
* McsEngl.cptsentence.ASSIGNING@cptIt,

_CODE.CPT:
fcnSet
 name
 value
===
fcnSet nbrX 3
[hmnSngo.2014-02-08]

cptsentence.DOING

name::
* McsEngl.cptsentence.DOING@cptIt,

cptsentence.RELATION

name::
* McsEngl.cptsentence.RELATION@cptIt,

cptsentence.rln.BOOLEAN

_CREATED: {2014-01-25}

name::
* McsEngl.cptsentence.rln.BOOLEAN@cptIt,
* McsEngl.lcpCpt'boolean-plsentence@cptIt,

_DESCRIPTION:
Boolean-plsentence is a relation-plsentence we evaluate as true, false.
[hmnSngo.2014-01-25]

cptsentence.rln.DEFINITION

name::
* McsEngl.cptsentence.rln.DEFINITION@cptIt,

lcpCptCds.ATOM

name::
* McsEngl.lcpCptCds.ATOM@cptIt,
* McsEngl.lcpCpt'atom-code@cptIt,
* McsEngl.lcpCpt'instance-code@cptIt,
* McsEngl.lcpCpt'primitive-code@cptIt,

lcpCptCds'UNIT-STRUCTURE (token)

name::
* McsEngl.lcpCptCds'UNIT-STRUCTURE (token)@cptIt,
* McsEngl.cpttkn@cptIt, {2014-03-25}
* McsEngl.lcpCpt'token@cptIt,
* McsEngl.lcpCpt'unit-structure-of-code@cptIt,

_DESCRIPTION:
The identifiable 'words' SEPARATED entities of code: punctuation, whitespace, operators, keywords, names, comments, ...
[2014-03-25]

lcpCptCds'UNIT (symbol)

name::
* McsEngl.lcpCptCds'UNIT (symbol)@cptIt,
* McsEngl.cptchr@cptIt, {2014-03-25}
* McsEngl.lcpCpt'character@cptIt,
* McsEngl.lcpCpt'symbol@cptIt,
* McsEngl.lcpCpt'unit-of-code@cptIt,

_DESCRIPTION:
The unicode-characters we use to create the code.
[hmnSngo.2014-03-25]

lcpCpt'doing.EVOLUTING

name::
* McsEngl.lcpCpt'doing.EVOLUTING@cptIt,

{time.2014-09-20}
LangoKamo to become AND a programming-language.
[hmnSngo.2014-09-20]

{time.2014-04-15}:
idea: to use langokamo as lcpcpt, because it is parsed easily.

{time.2014-01-24}:
name: plConcept

{time.2013-11-23}:
=== the beginning:
CBSscript is a concept-oriented-language (COL) with conceptBrainSensible(cbs)#ql:conceptbrainualsensorial@cptCore356# its main construct.
[hmnSngo.2013-11-23]

lcpCpt'naming-system

name::
* McsEngl.lcpCpt'naming-system@cptIt,
* McsEngl.ctst'namespacing@cptIt,

_DESCRIPTION:
The support of unique-names globally and locally and per worldview.
[hmnSngo.2013-11-30]
===
Except of the naming per worldview, it must support and a global namespecing with unique names.
[hmnSngo.2013-11-26]
===
avoidance of NAMING-CONFLICTS.
[hmnSngo.2013-12-02]

lcpCpt'script-loader

name::
* McsEngl.lcpCpt'script-loader@cptIt,
* McsEngl.ctst'loader@cptIt,

lcpCpt'tool

name::
* McsEngl.lcpCpt'tool@cptIt,

lcpCpt'cptscript-to-JavaScript

name::
* McsEngl.lcpCpt'cptscript-to-JavaScript@cptIt,

lcpCpt'JavaScript-to-cptscript

name::
* McsEngl.lcpCpt'JavaScript-to-cptscript@cptIt,

lcp.instance.WebAssembly {2015}

_CREATED: {2015-06-20}

name::
* McsEngl.lcp.instance.WebAssembly {2015}@cptIt,
* McsEngl.lcpWebAssembly@cptIt,
* McsEngl.WebAssembly@cptIt,

* McsEngl.wasm@cptIt,
* McsEngl.lcpWa@cptIt,

_DESCRIPTION:
WebAssembly High-Level Goals

Define a portable, size- and load-time-efficient binary format to serve as a compilation target which can be compiled to execute at native speed by taking advantage of common hardware capabilities available on a wide range of platforms, including mobile and IoT.
Specify and implement incrementally:
a Minimum Viable Product (MVP) for the standard with roughly the same functionality as asm.js, primarily aimed at C/C++;
an effective and efficient polyfill library for the MVP that translates WebAssembly code into JavaScript in the client so that WebAssembly MVP can run on existing browsers;
a follow-up to the MVP which adds several more essential features; and
additional features, specified iteratively and prioritized by feedback and experience, including support for languages other than C/C++.
Design to execute within and integrate well with the existing Web platform:
maintain the versionless, feature-tested and backwards-compatible evolution story of the Web;
execute in the same semantic universe as JavaScript;
allow synchronous calls to and from JavaScript;
enforce the same-origin and permissions security policies;
access browser functionality through the same Web APIs that are accessible to JavaScript; and
define a human-editable text format that is convertible to and from the binary format, supporting View Source functionality.
Design to support non-browser embeddings as well.
Make a great platform:
build a new LLVM backend for WebAssembly and an accompanying clang port;
promote other compilers and tools targeting WebAssembly; and
enable other useful tooling.
[https://github.com/WebAssembly/design/blob/master/HighLevelGoals.md]

wasm'code.BINARY

name::
* McsEngl.wasm'code.BINARY@cptIt,
* McsEngl.wasm'binary-format@cptIt,

_DESCRIPTION:
A binary format provides efficiency: it reduces download size and accelerates decoding, thus enabling even very large codebases to have quick startup times. Towards that goal, the binary format will be natively decoded by browsers.
The binary format has an equivalent and isomorphic text format. Conversion from one format to the other is both straightforward and causes no loss of information in either direction.
[https://github.com/WebAssembly/design/blob/master/MVP.md#binary-format]

wasm'code.TEXT

name::
* McsEngl.wasm'code.TEXT@cptIt,
* McsEngl.wasm'text-format@cptIt,

_DESCRIPTION:
The text format provides readability to developers, and is isomorphic to the binary format.
[https://github.com/WebAssembly/design/blob/master/MVP.md#text-format]

wasm'specification

name::
* McsEngl.wasm'specification@cptIt,

_ADDRESS.WPG:
* https://webassembly.github.io/spec/core/_download/WebAssembly.pdf {2018-03-22}
<br>[<a href="https://webassembly.github.io/spec/core/_download/WebAssembly.pdf">https://webassembly.github.io/spec/core/_download/WebAssembly.pdf</a> {2018-03-22}]

wasm'resource

name::
* McsEngl.wasm'resource@cptIt,

_ADDRESS.WPG:
* http://webassembly.org/,
* https://developer.mozilla.org/en-US/docs/WebAssembly,
* https://research.mozilla.org/webassembly/,
* https://github.com/WebAssembly,
* http://www.cnet.com/news/the-secret-alliance-that-could-give-the-web-a-massive-speed-boost//
* https://github.com/WebAssembly/design/blob/master/HighLevelGoals.md,
=== SPEC:
* https://github.com/WebAssembly/spec/blob/master/papers/pldi2017.pdf,
<br>[<a href="https://github.com/WebAssembly/spec/blob/master/papers/pldi2017.pdf">https://github.com/WebAssembly/spec/blob/master/papers/pldi2017.pdf</a>]
=== TOOL:
* https://mbebenita.github.io/WasmExplorer/,

wasm.MVP

name::
* McsEngl.wasm.MVP@cptIt,

_DESCRIPTION:
Minimum Viable Product

As stated in the high-level goals, the first release aims at being a Minimum Viable Product (MVP). This means that there are important features we know we want and need, but are post-MVP; these are in a separate essential post-MVP features document. The MVP will contain features which are available today in modern web browsers and which perform well even on mobile devices, which leads to roughly the same functionality as asm.js.

This document explains the contents of the MVP at a high-level. There are also separate docs with more precise descriptions of:

Polyfill to JavaScript;
AST semantics;
Binary encoding;
Implementation in the browser and outside the browser.

Note: This content is still in flux and open for discussion.
[https://github.com/WebAssembly/design/blob/master/MVP.md]

lcp.instance.TypeScript {2012}

_CREATED: {2013-11-23}

name::
* McsEngl.lcp.instance.TypeScript {2012}@cptIt,
* McsEngl.TypeScript@cptIt,
* McsEngl.pgmlng.TypeScript@cptIt,
* McsEngl.TypeScript@cptIt,

* McsEngl.lcpTs@cptIt, {2014-02-04}

_DESCRIPTION:
TypeScript is a language for application-scale JavaScript development.
TypeScript is a typed superset of JavaScript that compiles to plain JavaScript.
Any browser. Any host. Any OS. Open Source.
[http://www.typescriptlang.org//]
===
TypeScript features are enforced only at compile-time.
[http://code.tutsplus.com/tutorials/getting-started-with-typescript--net-28890]

lcpTs'archetype

name::
* McsEngl.lcpTs'archetype@cptIt,

_GENERIC:
* lcp-archetype#ql:lcp'archetype#

_SPECIFIC:
* brainIn#linkL#
* langocode#linkL#
* semasio#linkL#
* view#linkL#
* worldview#linkL#

lcpTs'archetype.WORLDVIEW

name::
* McsEngl.lcpTs'archetype.WORLDVIEW@cptIt,

lcpTs'archetype.VIEW (algo)

name::
* McsEngl.lcpTs'archetype.VIEW (algo)@cptIt,

lcpTs'archetype.MODULE

name::
* McsEngl.lcpTs'archetype.MODULE@cptIt,
* McsEngl.tsmodule@cptIt,
* McsEngl.tsm@cptIt,
* McsEngl.tsmdl@cptIt,

tsmdl.EXTERNAL

name::
* McsEngl.tsmdl.EXTERNAL@cptIt,

_DESCRIPTION:
An exteral-module takes the name of the file it is strored.
[hmnSngo.2014-05-29]
===
TypeScript also has the concept of an external module. External modules are used in two cases: node.js and require.js. Applications not using node.js or require.js do not need to use external modules and can best be organized using the internal module concept outlined above.
In external modules, relationships between files are specified in terms of imports and exports at the file level. In TypeScript, any file containing a top-level import or export is considered an external module.
...
Trade-offs for External Modules
Just as there is a one-to-one correspondence between JS files and modules, TypeScript has a one-to-one correspondence between external module source files and their emitted JS files. One effect of this is that it's not possible to use the --out compiler switch to concatenate multiple external module source files into a single JavaScript file.
[https://typescript.codeplex.com/wikipage?title=Modules%20in%20TypeScript&referringTitle=Documentation]

/// <reference> to an external module

A common mistake is to try to use the /// <reference> syntax to refer to an external module file, rather than using import. To understand the distinction, we first need to understand the three ways that the compiler can locate the type information for an external module.

a) The first is by finding a .ts file named by an import x = require(...); declaration. That file should be an implementation file with top-level import or export declarations.

b) The second is by finding a .d.ts file, similar to above, except that instead of being an implementation file, it's a declaration file (also with top-level import or export declarations).

c) The final way is by seeing an "ambient external module declaration", where we 'declare' a module with a matching quoted name.
myModules.d.ts

// In a .d.ts file or .ts file that is not an external module:
declare module "SomeModule" {
export function fn(): string;
}
myOtherModule.ts

/// <reference path="myModules.d.ts" />
import m = require("SomeModule");

The reference tag here allows us to locate the declaration file that contains the declaration for the ambient external module. This is how the node.d.ts file that several of the TypeScript samples use is consumed, for example.
[https://typescript.codeplex.com/wikipage?title=Modules%20in%20TypeScript&referringTitle=Documentation]

tsmdl.INTERNAL

name::
* McsEngl.tsmdl.INTERNAL@cptIt,

_DESCRIPTION:
Internal-module wraps functionality (objects) to reduce the names in global-scope.
[hmnSngo.2014-05-29]

_SPECIFIC:
* file.one
* file.many

lcpTs'archetype.SENTENCE-STRUCTURE

name::
* McsEngl.lcpTs'archetype.SENTENCE-STRUCTURE@cptIt,

lcpTs'archetype.SENTENCE

name::
* McsEngl.lcpTs'archetype.SENTENCE@cptIt,

lcpTs'archetype.UNIT-STRUCTURE

name::
* McsEngl.lcpTs'archetype.UNIT-STRUCTURE@cptIt,

lcpTs'archetype.UNIT

_CREATED: {2014-05-27}

name::
* McsEngl.lcpTs'archetype.UNIT@cptIt,
* McsEngl.lcpTs'archetype-unit@cptIt,
* McsEngl.lcpTs'unit.archetype@cptIt,
* McsEngl.tsunit@cptIt,

_SPECIFIC:
For programs to be useful, we need to be able to work with some of the simplest units of data: numbers, strings, structures, boolean values, and the like. In TypeScript, we support much the same types as you would expected in JavaScript, with a convenient enumeration type thrown in to help things along.
[https://typescript.codeplex.com/wikipage?title=Basic%20Types%20in%20TypeScript&referringTitle=Documentation]

lcpTs'archetype.unit.ANY

name::
* McsEngl.lcpTs'archetype.unit.ANY@cptIt,
* McsEngl.tsany@cptIt,
* McsEngl.tstype.ANY@cptIt,

_DESCRIPTION:
Without adding any type hinting, variables in TypeScript are of the any type, which means they are allowed to contain any type of data, just like JavaScript.
[http://www.sitepen.com/blog/2013/12/31/definitive-guide-to-typescript/#basic-types]
===
All types in TypeScript are subtypes of a single top type called the Any type. The any keyword references this type. The Any type is the one type that can represent any JavaScript value with no constraints. All other types are categorized as primitive types, object types, or type parameters. These types introduce various static constraints on their values.
[http://www.typescriptlang.org/Content/TypeScript%20Language%20Specification.pdf]

lcpTs'archetype.unit.ARRAY

name::
* McsEngl.lcpTs'archetype.unit.ARRAY@cptIt,
* McsEngl.tsarray@cptIt,
* McsEngl.tstype.array@cptIt,

_DESCRIPTION:
TypeScript, like JavaScript, allows you to work with arrays of values. Array types can be written in one of two ways. In the first, you use the type of the elements followed by '[]' to denote an array of that element type:

var list:number[] = [1, 2, 3];

The second way uses a generic array type, Array<elemType>:

var list:Array<number> = [1, 2, 3];
[https://typescript.codeplex.com/wikipage?title=Basic%20Types%20in%20TypeScript&referringTitle=Documentation]

lcpTs'archetype.unit.CLASS

name::
* McsEngl.lcpTs'archetype.unit.CLASS@cptIt,
* McsEngl.lcpTs'class@cptIt,
* McsEngl.tsclass@cptIt,

_CODE.LJS:
We’ll start with a simple BankAccount class.
class BankAccount {
balance = 0;
deposit(credit: number) {
this.balance += credit;
return this.balance;
}
}
This class generates the following JavaScript code.
var BankAccount = (function () {
function BankAccount() {
this.balance = 0;
}
BankAccount.prototype.deposit = function(credit) {
this.balance += credit;
return this.balance;
};
return BankAccount;
})();
[http://www.typescriptlang.org/Content/TypeScript%20Language%20Specification.pdf]

tscls'instance

name::
* McsEngl.tscls'instance@cptIt,

_DESCRIPTION:
In the last line we construct an instance of the Greeter class using 'new'. This calls into the constructor we defined earlier, creating a new object with the Greeter shape, and running the constructor to initialize it.
[https://typescript.codeplex.com/wikipage?title=Classes%20in%20TypeScript&referringTitle=Documentation]

tscls'member

name::
* McsEngl.tscls'member@cptIt,

_SPECIFIC:
* constructor
* method
* property
This class has three members, a property called 'greeting', a constructor, and a method 'greet'.
[https://typescript.codeplex.com/wikipage?title=Classes%20in%20TypeScript&referringTitle=Documentation]

tscls'member.INSTANCE

name::
* McsEngl.tscls'member.INSTANCE@cptIt,

_DESCRIPTION:
Up to this point, we've only talked about the instance members of the class, those that show up on the object when its instantiated. We can also create static members of a class, those that are visible on the class itself rather than on the instances. In this example, we use 'static' on the origin, as it's a general value for all grids. Each instance accesses this value through prepending the name of the class. Similarly to prepending 'this.' in front of instance accesses, here we prepend 'Grid.' in front of static accesses.
[https://typescript.codeplex.com/wikipage?title=Classes%20in%20TypeScript&referringTitle=Documentation]

tscls'member.PRIVATE

name::
* McsEngl.tscls'member.PRIVATE@cptIt,

tscls'member.PUBLIC

name::
* McsEngl.tscls'member.PUBLIC@cptIt,

_DESCRIPTION:
You may have noticed in the above examples we haven't had to use the word 'public' to make any of the members of the class visible. Languages like C# require that each member be explicitly labelled 'public' to be visible. In TypeScript, each member is public by default.
[https://typescript.codeplex.com/wikipage?title=Classes%20in%20TypeScript&referringTitle=Documentation]

tscls'relation-to-interface

name::
* McsEngl.tscls'relation-to-interface@cptIt,

_DESCRIPTION:
Using a class as an interface

As we said in the previous section, a class declaration creates two things: a type representing instances of the class and a constructor function. Because classes create types, you can use them in the same places you would be able to use interfaces.

class Point {
x: number;
y: number;
}

interface Point3d extends Point {
z: number;
}
[https://typescript.codeplex.com/wikipage?title=Classes%20in%20TypeScript&referringTitle=Documentation]

lcpTs'archetype.unit.ENUM

name::
* McsEngl.lcpTs'archetype.unit.ENUM@cptIt,
* McsEngl.tsenum@cptIt,
* McsEngl.tstype.ENUM@cptIt,

_DESCRIPTION:
Enum Types
Enum types are distinct user defined subtypes of the Number primitive type. Enum types are declared using enum declarations (section 9.1) and referenced using type references (section 3.6.2).
Enum types are assignable to the Number primitive type, and vice versa, but different enum types are not assignable to each other.
[http://www.typescriptlang.org/Content/TypeScript%20Language%20Specification.pdf]
===
A helpful addition to the standard set of datatypes from JavaScript is the 'enum'. Like languages like C#, an enum is a way of giving more friendly names to sets of numeric values.

enum Color {Red, Green, Blue};
var c: Color = Color.Green;

By default, enums begin numbering their members starting at 0. You can change this by manually setting the value of one its members. For example, we can start the previous example at 1 instead of 0:

enum Color {Red = 1, Green, Blue};
var c: Color = Color.Green;

Or, even manually set all the values in the enum:

enum Color {Red = 1, Green = 2, Blue = 4};
var c: Color = Color.Green;

A handy feature of enums is that you can also go from a numeric value to the name of that value in the enum. For example, if we had the value 2 but weren't sure which that mapped to in the Color enum above, we could look up the corresponding name:

enum Color {Red = 1, Green, Blue};
var colorName: string = Color[2];

alert(colorName);
[https://typescript.codeplex.com/wikipage?title=Basic%20Types%20in%20TypeScript&referringTitle=Documentation]

lcpTs'archetype.unit.FUNCTION

name::
* McsEngl.lcpTs'archetype.unit.FUNCTION@cptIt,
* McsEngl.lpTs'function@cptIt,
* McsEngl.tsfunction@cptIt,
* McsEngl.tsfcn@cptIt,

_DESCRIPTION:
Functions are the fundamental building block of any applications in JavaScript. They're how you build up layers of abstraction, mimicking classes, information hiding, and modules. In TypeScript, while there are classes and modules, function still play the key role in describing how to 'do' things. TypeScript also adds some new capabilities to the standard JavaScript functions to make them easier to work with.
[https://typescript.codeplex.com/wikipage?title=Functions%20in%20TypeScript&referringTitle=Documentation]
TypeScript includes four major improvements to functions:
- optional parameters,
- default argument values,
- rest parameters, and
- fat arrow functions.
[http://www.sitepen.com/blog/2013/12/31/definitive-guide-to-typescript/#function-sugar]

tsfcn'parameter

name::
* McsEngl.tsfcn'parameter@cptIt,

_DESCRIPTION:
Unlike JavaScript, in TypeScript every parameter to a function is assumed to be required by the function. This doesn't mean that it isn't a 'null' value, but rather, when the function is called the compiler will check that the user has provided a value for each parameter. The compiler also assumes that these parameters are the only parameters that will be passed to the function. In short, the number of parameters to the function has to match the number of parameters the function expects.
...
In JavaScript, every parameter is considered optional, and users may leave them off as they see fit.
[https://typescript.codeplex.com/wikipage?title=Functions%20in%20TypeScript&referringTitle=Documentation]

tsfcn'parameter.optional

name::
* McsEngl.tsfcn'parameter.optional@cptIt,

_DESCRIPTION:
Optional parameters can now be defined by suffixing a parameter identifier with a question mark:

function getRange(max, min, exclusive?) {
// ...
}
Here, exclusive is an optional parameter. This is meaningless when talking about JavaScript, since all parameters are always optional, but in TypeScript, the compiler prohibits omitting typed arguments unless they are specified as optional or have a default value.

An optional parameter is essentially just a shorthand for specifying undefined as the default value for a parameter. Making a parameter optional with a different value as the default is as simple as assigning it within the parameters list instead of using the question mark shorthand:

function getRange(max, min = 0, exclusive = false) {
// ...
}
In this case, min is optional and will default to 0, and exclusive is optional and will default to false.
[http://www.sitepen.com/blog/2013/12/31/definitive-guide-to-typescript/#function-sugar]

tsfcn'parameter.rest

name::
* McsEngl.tsfcn'parameter.rest@cptIt,

_DESCRIPTION:
TypeScript also adds support for a final variadic ...rest parameter, which collects any extra arguments passed to the function into a single named array:

function publish(topic, ...args):void {
// ...
}
In this case, calling publish('/foo', 'a', 'b', 'c') would cause topic to be a string '/foo' and args to be an array [ 'a', 'b', 'c' ]. Note that using this feature adds an extra loop to your function that runs on each call to collect arguments into the rest parameter, so performance-critical code should continue to operate directly against the arguments object instead.
[http://www.sitepen.com/blog/2013/12/31/definitive-guide-to-typescript/#function-sugar]

tsfcn'type

name::
* McsEngl.tsfcn'type@cptIt,

_DESCRIPTION:
A function's type has the same two parts: the type of the arguments and the return type. When writing out the whole function type, both parts are required. We write out the parameter types just like a parameter list, giving each parameter a name and a type. This name is just to help with readability. We could have instead written:
var myAdd: (baseValue:number, increment:number)=>number =
function(x: number, y: number): number { return x+y; };
[https://typescript.codeplex.com/wikipage?title=Functions%20in%20TypeScript&referringTitle=Documentation]

tsfcn'type.return

name::
* McsEngl.tsfcn'type.return@cptIt,

_RETURN_TYPE:
TypeScript will infer from the following function definition that the function f has return type string.
function f() {
return "hello";
}
[http://www.typescriptlang.org/Content/TypeScript%20Language%20Specification.pdf]

tsfcn'variable.captured

name::
* McsEngl.tsfcn'variable.captured@cptIt,

_DESCRIPTION:
Just as in JavaScript, functions can return to variables outside of the function body. When they do so, they're said to 'capture' these variables.
While understanding how this works, and the trade-offs when using this technique, are outside of the scope of this article, having a firm understanding how this mechanic is an important piece of working with JavaScript and TypeScript.

var z = 100;

function addToZ(x, y) {
return x+y+z;
}
[https://typescript.codeplex.com/wikipage?title=Functions%20in%20TypeScript&referringTitle=Documentation]

tsfcn.FAT-ARROW

name::
* McsEngl.tsfcn.FAT-ARROW@cptIt,

_DESCRIPTION:
Finally, love it or hate it, TypeScript also includes support for the fat arrow function from EcmaScript 6. This new function type provides a new shorthand syntax, and also changes the way the this keyword works, so its value is taken from the nearest lexical scope rather than the caller context object like regular JavaScript functions:

var obj = {
fat: () => {
console.log(this);
},
regular: function () {
console.log(this);
}
};

obj.fat(); // logs `window`
obj.regular(); // logs `obj`
[http://www.sitepen.com/blog/2013/12/31/definitive-guide-to-typescript/#function-sugar]

tsfcn.NAMED

name::
* McsEngl.tsfcn.NAMED@cptIt,

_CODE.TS:
//Named function
function add(x, y) {
return x+y;
}

tsfcn.NAMED.NO

name::
* McsEngl.tsfcn.NAMED.NO@cptIt,
* McsEngl.tsfcn.anonymous@cptIt,

_CODE.TS:
//Anonymous function
var myAdd = function(x, y) { return x+y; };
[https://typescript.codeplex.com/wikipage?title=Functions%20in%20TypeScript&referringTitle=Documentation]

lcpTs'archetype.unit.INTERFACE

name::
* McsEngl.lcpTs'archetype.unit.INTERFACE@cptIt,
* McsEngl.lcpTs'interface@cptIt,
* McsEngl.tsinterface@cptIt,
* McsEngl.tsifc@cptIt,

=== _NOTES: In general, do not prefix interfaces with I (e.g. IColor). Because the concept of an interface in TypeScript is much more broad than in C# or Java, the IFoo naming convention is not broadly useful.
[https://typescript.codeplex.com/wikipage?title=Writing%20Definition%20%28.d.ts%29%20Files&referringTitle=Documentation]

_DESCRIPTION:
Interfaces are capable of describing the wide range of shapes that JavaScript objects can take.
[https://typescript.codeplex.com/wikipage?title=Interfaces%20in%20TypeScript&referringTitle=Documentation]
===
Programmers can give names to object types; we call named object types interfaces. For example, in the following code, an interface declares one required field (name) and one optional field (favoriteColor).
interface Friend {
name: string;
favoriteColor?: string;
}
)
[http://www.typescriptlang.org/Content/TypeScript%20Language%20Specification.pdf]

_CODE.TS:
interface Person {
firstname: string;
lastname: string;
}

tsifc'extending

name::
* McsEngl.tsifc'extending@cptIt,

_DESCRIPTION:
Like classes, interfaces can extend each other. This handles the task of copying the members of one interface into another, allowing you more freedom in how you separate your interfaces into reusable components.

interface Shape {
color: string;
}

interface Square extends Shape {
sideLength: number;
}

var square: Square;
square.color = "blue";
square.sideLength = 10;

An interface can extend multiple interfaces, creating a combination of all of the interfaces.
useful.
[https://typescript.codeplex.com/wikipage?title=Writing%20Definition%20%28.d.ts%29%20Files&referringTitle=Documentation]

tsifc.ARRAY-TYPE

name::
* McsEngl.tsifc.ARRAY-TYPE@cptIt,
* McsEngl.tsarray-interface@cptIt,
* McsEngl.tsarray-type-interface@cptIt,

Similarly to how we can use interfaces to describe function types, we can also describe array types. Array types have an 'index' type that describes the types allowed to index the object, along with the corresponding return type for accessing the index.

interface StringArray {
[index: number]: string;
}

var myArray: StringArray;
myArray = ["Bob", "Fred"];

There are two types of supported index types: string and number. It is possible to support both types of index, with the restriction that the type returned from the numeric index must be a subtype of the type returned from the string index.

While index signatures are a powerful way to describe the array and 'dictionary' pattern, they also enforce that all properties match their return type. In this example, the property does not match the more general index, and the type-checker gives an error:

interface Dictionary {
[index: string]: string;
length: number; // error, the type of 'length' is not a subtype of the indexer
}
[https://typescript.codeplex.com/wikipage?title=Interfaces%20in%20TypeScript&referringTitle=Documentation]

tsifc.CLASS-TYPE

name::
* McsEngl.tsifc.CLASS-TYPE@cptIt,
* McsEngl.tsclass-interface@cptIt,
* McsEngl.tsclass-type-interface@cptIt,

_DESCRIPTION:
One of the most common uses of interfaces in languages like C# and Java, that of explicitly enforcing that a class meets a particular contract, is also possible in TypeScript.

interface ClockInterface {
currentTime: Date;
}

class Clock implements ClockInterface {
currentTime: Date;
constructor(h: number, m: number) { }
}

You can also describe methods in an interface that are implemented in the class, as we do with 'setTime' in the below example:

interface ClockInterface {
currentTime: Date;
setTime(d: Date);
}

class Clock implements ClockInterface {
currentTime: Date;
setTime(d: Date) {
this.currentTime = d;
}
constructor(h: number, m: number) { }
}

Interfaces describe the public side of the class, rather than both the public and private side. This prohibits you from using them to check that a class also has particular types for the private side of the class instance.
[https://typescript.codeplex.com/wikipage?title=Interfaces%20in%20TypeScript&referringTitle=Documentation]

tsifc.FUNCTION-TYPE

name::
* McsEngl.tsifc.FUNCTION-TYPE@cptIt,
* McsEngl.tsfunction-interface@cptIt,
* McsEngl.tsfunction-type-interface@cptIt,

_DESCRIPTION:
Interfaces are capable of describing the wide range of shapes that JavaScript objects can take. In addition to describing an object with properties, interfaces are also capable of describing function types.

To describe a function type with an interface, we give the interface a call signature. This is like a function declaration with only the parameter list and return type given.

interface SearchFunc {
(source: string, subString: string): boolean;
}
Once defined, we can use this function type interface like we would other interfaces. Here, we show how you can create a variable of a function type and assign it a function value of the same type.

var mySearch: SearchFunc;
mySearch = function(source: string, subString: string) {
var result = source.search(subString);
if (result == -1) {
return false;
}
else {
return true;
}
}
[https://typescript.codeplex.com/wikipage?title=Interfaces%20in%20TypeScript&referringTitle=Documentation]

tsifc.HYBRID

name::
* McsEngl.tsifc.HYBRID@cptIt,

_DESCRIPTION:
As we mentioned earlier, interfaces can describe the rich types present in real world JavaScript. Because of JavaScript's dynamic and flexible nature, you may occasionally encounter an object that works as a combination of some of the types described above.

One such example is an object that acts as both a function and an object, with additional properties:

interface Counter {
(start: number): string;
interval: number;
reset(): void;
}

var c: Counter;
c(10);
c.reset();
c.interval = 5.0;
[https://typescript.codeplex.com/wikipage?title=Interfaces%20in%20TypeScript&referringTitle=Documentation]

lcpTs'archetype.unit.NONE

name::
* McsEngl.lcpTs'archetype.unit.NONE@cptIt,
* McsEngl.lcpTs'none@cptIt,
* McsEngl.tsnone@cptIt, {2014-02-23}

lcpTs'code.VOID

name::
* McsEngl.lcpTs'code.VOID@cptIt,
* McsEngl.tstype.VOID@cptIt,
* McsEngl.tsvoid@cptIt,

_DESCRIPTION:
void (i.e. null or undefined).
===
The Void Type
The Void type, referenced by the void keyword, represents the absence of a value and is used as the return type of functions with no return value.

The only possible values for the Void type are null and undefined. The Void type is a subtype of the Any type and a supertype of the Null and Undefined types, but otherwise Void is unrelated to all other types.

NOTE: We might consider disallowing declaring variables of type Void as they serve no useful purpose. However, because Void is permitted as a type argument to a generic type or function it is not feasible to disallow Void properties or parameters.
[http://www.typescriptlang.org/Content/TypeScript%20Language%20Specification.pdf]

lcpTs'archetype.unit.TYPE

name::
* McsEngl.lcpTs'archetype.unit.TYPE@cptIt,
* McsEngl.lcpTs'type@cptIt,
* McsEngl.tstype@cptIt, {2014-02-23}
* McsEngl.lcpTs'archetype.unit.NAMED@cptIt,
* McsEngl.lcpTs'variable@cptIt,
* McsEngl.tsvariable@cptIt,

_CODE.TS:
var user = "Jane User";

_DESCRIPTION:
All types in TypeScript are subtypes of a single top type called the Any type. The any keyword references this type. The Any type is the one type that can represent any JavaScript value with no constraints. All other types are categorized as primitive types, object types, or type parameters. These types introduce various static constraints on their values.
[http://www.typescriptlang.org/Content/TypeScript%20Language%20Specification.pdf]

tstype'anotation

name::
* McsEngl.tstype'anotation@cptIt,
* McsEngl.lcpTs'type-constraint@cptIt,
* McsEngl.tsvariable'type-annotation@cptIt,

_DESCRIPTION:
The basic syntax for adding type constraints to code in TypeScript looks like this:
function toNumber(numberString:string):number {
var num:number = parseFloat(numberString);
return num;
}
[http://www.sitepen.com/blog/2013/12/31/definitive-guide-to-typescript/#basic-types]
===
Types can be associated with variables through explicit type annotations, such as
var x: number;
[http://www.typescriptlang.org/Content/TypeScript%20Language%20Specification.pdf]
===
function greeter(person: string) {
return "Hello, " + person;
}
Type annotations in TypeScript are lightweight ways to record the intended contract of the function or variable. In this case, we intend the greeter function to be called with a single string parameter. We can try changing the call greeter to pass an array instead:
Re-compiling, you'll now see an error:
greeter.ts(7,26): Supplied parameters do not match any signature of call target
[http://www.typescriptlang.org/Tutorial/]

tstype'inference

name::
* McsEngl.tstype'inference@cptIt,

_DESCRIPTION:
To minimize the number of annotations needed for tools to become useful, the TypeScript type system makes extensive use of type inference. For example, from the following statement, TypeScript will infer that the variable ‘i’ has the type number.
var i = 0;
TypeScript will infer from the following function definition that the function f has return type string.
function f() {
return "hello";
}
...
Types can be associated with variables through explicit type annotations, such as
var x: number;
or through implicit type inference, as in
var x = 1;
[http://www.typescriptlang.org/Content/TypeScript%20Language%20Specification.pdf]

tstype'name

name::
* McsEngl.tstype'name@cptIt,
* McsEngl.tsidentifier@cptIt,
* McsEngl.tsname@cptIt,

tstype'value

name::
* McsEngl.tstype'value@cptIt,
* McsEngl.tsvalue@cptIt,

_DESCRIPTION:
Without adding any type hinting, variables in TypeScript are of the any type, which means they are allowed to contain any type of data, just like JavaScript.
[http://www.sitepen.com/blog/2013/12/31/definitive-guide-to-typescript/#basic-types]

tstype.GENERIC

name::
* McsEngl.tstype.GENERIC@cptIt,
* McsEngl.tsgenerictype@cptIt,

_DESCRIPTION:
TypeScript includes the concept of a generic type, which can be roughly thought of as a type that must include or reference another type in order to be complete. Two very common generic types that you will run into are Array and Promise.

The syntax of a generic type is GenericType<SpecificType>. For example, an “array of strings” type would be Array<string>, and a “promise that resolves to a number” type would be Promise<number>. Generic types may require more than one specific type, like Converter<TInput, TOutput>, but this is extremely uncommon. The placeholder types inside the angle brackets are called type parameters. Unlike non-generic object types, generic types can only be created as interfaces or classes.
[http://www.sitepen.com/blog/2013/12/31/definitive-guide-to-typescript/#generic-types]

tstype.PRIMITIVE

name::
* McsEngl.tstype.PRIMITIVE@cptIt,
* McsEngl.tsprimitive@cptIt,

_DESCRIPTION:
The primitive types are the Number, Boolean, String, Void, Null, and Undefined types along with user defined enum types. The number, boolean, string, and void keywords reference the Number, Boolean, String, and Void primitive types respectively. The Void type exists purely to indicate the absence of a value, such as in a function with no return value. It is not possible to explicitly reference the Null and Undefined types—only values of those types can be referenced, using the null and undefined literals.
[http://www.typescriptlang.org/Content/TypeScript%20Language%20Specification.pdf]

tstype.PRIMITIVE.NO

name::
* McsEngl.tstype.PRIMITIVE.NO@cptIt,
* McsEngl.tstype.complex@cptIt,
* McsEngl.tsprimitiveNo@cptIt,

_SPECIFIC:
* function##
* object##
===
In addition to the five primitive types, TypeScript allows complex types (like objects and functions) to be easily defined and used as type constraints.
[http://www.sitepen.com/blog/2013/12/31/definitive-guide-to-typescript/#object-types]

tstype.TYPE-PARAMETER

name::
* McsEngl.tstype.TYPE-PARAMETER@cptIt,

_DESCRIPTION:
A type parameter represents an actual type that the parameter is bound to in a generic type reference or a generic function call. Type parameters have constraints that establish upper bounds for their actual type arguments.
Since a type parameter represents a multitude of different type arguments, type parameters have certain restrictions compared to other types. In particular, a type parameter cannot be used as a base class or interface.
[http://www.typescriptlang.org/Content/TypeScript%20Language%20Specification.pdf]

lcpTs'archetype.unit.TYPE.NO (instance)

name::
* McsEngl.lcpTs'archetype.unit.TYPE.NO (instance)@cptIt,
* McsEngl.tsliteral@cptIt, {2014-02-23}

_DESCRIPTION:
Literals are typed as follows:

The type of the null literal is the Null primitive type.

The type of the literals true and false is the Boolean primitive type.

The type of numeric literals is the Number primitive type.

The type of string literals is the String primitive type.

The type of regular expression literals is the global interface type ‘RegExp’.
[http://www.typescriptlang.org/Content/TypeScript%20Language%20Specification.pdf]

lcpTs'code

name::
* McsEngl.lcpTs'code@cptIt,
* McsEngl.tscode@cptIt,

tscode'doing.DEVELOPING

name::
* McsEngl.tscode'doing.DEVELOPING@cptIt,

_DESCRIPTION:
TypeScript tools typically emit JavaScript upon file save, preserving the test, edit, refresh cycle commonly used in JavaScript development.
[http://www.typescriptlang.org/Content/TypeScript%20Language%20Specification.pdf]

tscode.EXPRESSION

name::
* McsEngl.tscode.EXPRESSION@cptIt,
* McsEngl.ts'expression@cptIt,

_DESCRIPTION:
Expressions are classified as values or references. References are the subset of expressions that are permitted as the target of an assignment. Specifically, references are combinations of identifiers (section 4.3), parentheses (section 4.7), and property accesses (section 4.10). All other expression constructs described in this chapter are classified as values.
[http://www.typescriptlang.org/Content/TypeScript%20Language%20Specification.pdf]

lcpTs'code'definition-file

name::
* McsEngl.lcpTs'code'definition-file@cptIt,
* McsEngl.tsdefinition-file@cptIt,
* McsEngl.tsdeclaration-file@cptIt,

_OVERVIEW:
When using an external JavaScript library, or new host API, you'll need to use a declaration file (.d.ts) to describe the shape of that library.
[https://typescript.codeplex.com/wikipage?title=Writing%20Definition%20%28.d.ts%29%20Files&referringTitle=Documentation]

lcpTs'code.PROGRAM

name::
* McsEngl.lcpTs'code.PROGRAM@cptIt,

tsprogram.EXAMPLE

name::
* McsEngl.tsprogram.EXAMPLE@cptIt,

_CODE.TS:
In your editor, type the following JavaScript code in greeter.ts:

function greeter(person: string) {
return "Hello, " + person;
}

var user = "Jane User";

document.body.innerHTML = greeter(user);

At the command line, run the TypeScript compiler:
> tsc greeter.ts

The result will be a file greeter.js which contains the same JavaScript that you fed in (Note: In current builds, formatting and comments are not fully preserved, this is temporary). We're up and running using TypeScript in our JavaScript app!
[http://www.typescriptlang.org/Tutorial//]

lcpTs'code.SENTENCE

name::
* McsEngl.lcpTs'code.SENTENCE@cptIt,

lcpTs'code.UNIT

name::
* McsEngl.lcpTs'code.UNIT@cptIt,

lcpTs'error

name::
* McsEngl.lcpTs'error@cptIt,

tserror.Cannot_resolve_referenced_file: 'greater.ts'.
error TS5007: Cannot resolve referenced file: 'greater.ts'.

tserror.external_module_XYZ_cannot_be_resolved
Fixes:
check if module path is case-sensitive - https://typescript.codeplex.com/workitem/2134

tserror.Supplied_parameters_do_not_match_any_signature of call target
greeter.ts(7,26): Supplied parameters do not match any signature of call target
// called a function with parameters with different type.

tserror.The_property_'s'_does_not_exist on value of type '{ f(): string; }'.
// the variable 's' is NOT an export variable

tserror.tsc.exe_exited_with_error_code_1:
Fixes:
check file-encoding is UTF-8 - https://typescript.codeplex.com/workitem/1587

lcpTs'evoluting

name::
* McsEngl.lcpTs'evoluting@cptIt,

{time.2014-05-13}:
TypeScript 1.0.1
May 13, 2014, Stable

{time.2014-04-02}:
TypeScript 1.0
Apr 2, 2014, Stable

lcpTs'relation-to-javascript

name::
* McsEngl.lcpTs'relation-to-javascript@cptIt,

_DESCRIPTION:
TypeScript is a syntactic sugar for JavaScript. TypeScript syntax is a superset of Ecmascript 5 (ES5) syntax. Every JavaScript program is also a TypeScript program.
[http://www.typescriptlang.org/Content/TypeScript%20Language%20Specification.pdf]

lcpTs'specification

name::
* McsEngl.lcpTs'specification@cptIt,

_ADDRESS.WPG:
* 2014.04.V1.0: http://www.typescriptlang.org/Content/TypeScript%20Language%20Specification.pdf,

_EVOLUTING:
* 2014-04-00: v1.0.
* 2013-11-18: v0.9.5.

TypeScript
Language Specification

Version 0.9.5

November 18, 2013

Microsoft is making this Specification available under the Open Web Foundation Final Specification Agreement Version 1.0 (“OWF 1.0”) as of October 1, 2012. The OWF 1.0 is available at http://www.openwebfoundation.org/legal/the-owf-1-0-agreements/owfa-1-0.

TypeScript is a trademark of Microsoft Corporation.

toc

_toc:
Table of Contents

1 Introduction ... 1
1.1 Ambient Declarations ... 3
1.2 Function Types ... 3
1.3 Object Types ... 4
1.4 Structural Subtyping ... 6
1.5 Contextual Typing ... 7
1.6 Classes ... 8
1.7 Enum Types ... 10
1.8 Overloading on String Parameters ... 11
1.9 Generic Types and Functions ... 12
1.10 Modules ... 13

2 Basic Concepts ... 17
2.1 Grammar Conventions ... 17
2.2 Namespaces and Named Types ... 17
2.3 Declarations ... 18
2.4 Scopes ... 20

3 Types ... 23
3.1 The Any Type ... 24
3.2 Primitive Types ... 24
3.2.1 The Number Type ... 24
3.2.2 The Boolean Type ... 25
3.2.3 The String Type ... 25
3.2.4 The Void Type ... 25
3.2.5 The Null Type ... 26
3.2.6 The Undefined Type ... 26
3.2.7 Enum Types ... 26
3.2.8 String Literal Types ... 26
3.3 Object Types ... 27
3.3.1 Named Type References ... 27
3.3.2 Array Types ... 27
3.3.3 Anonymous Types ... 27
3.3.4 Members ... 27
3.4 Type Parameters ... 28
3.4.1 Type Parameter Lists ... 28
3.4.2 Type Argument Lists ... 29
3.5 Named Types ... 30
3.5.1 Instance Types ... 31
3.6 Specifying Types ... 31
3.6.1 Predefined Types ... 31
3.6.2 Type References ............... 32
3.6.3 Type Queries ...................... 33
3.6.4 Type Literals ....................... 33
3.7 Object Type Literals .............. 35
3.7.1 Property Signatures......... 35
3.7.2 Call Signatures................... 36
3.7.3 Construct Signatures ...... 39
3.7.4 Index Signatures ............... 39
3.7.5 Method Signatures .......... 40
3.8 Type Relationships ................ 41
3.8.1 Apparent Type ................... 41
3.8.2 Type and Member Identity ... 42
3.8.3 Subtypes and Supertypes ..... 43
3.8.4 Assignment Compatibility .... 44
3.8.5 Contextual Signature Instantiation ... 45
3.8.6 Type Inference ................... 46
3.8.7 Recursive Types ................ 47
3.9 Widened Types ...................... 49
3.10 Best Common Type .............. 49

4 Expressions 51
4.1 Values and References ........ 51
4.2 The this Keyword ................... 51
4.3 Identifiers.................................. 52
4.4 Literals .. 52
4.5 Object Literals ......................... 52
4.6 Array Literals ........................... 54
4.7 Parentheses ............................. 54
4.8 The super Keyword ............... 54
4.8.1 Super Calls .......................... 54
4.8.2 Super Property Access ... 54
4.9 Function Expressions ........... 55
4.9.1 Standard Function Expressions ........... 56
4.9.2 Arrow Function Expressions . 56
4.9.3 Contextually Typed Function Expressions ... 57
4.10 Property Access ..................... 58
4.11 The new Operator ................. 59
4.12 Function Calls ......................... 59
4.12.1 Overload Resolution ....... 60
4.12.2 Type Argument Inference ..... 61
4.12.3 Grammar Ambiguities .... 63
4.13 Type Assertions ...................... 63
4.14 Unary Operators .................... 64 iii
4.14.1 The ++ and -- operators ....... 64
4.14.2 The +, –, and ~ operators ..... 65
4.14.3 The ! operator .................... 65
4.14.4 The delete Operator ........ 65
4.14.5 The void Operator ........... 65
4.14.6 The typeof Operator ....... 65
4.15 Binary Operators ................... 66
4.15.1 The *, /, %, –, <<, >>, >>>, &, ^, and | operators ... 66
4.15.2 The + operator .................. 66
4.15.3 The <, >, <=, >=, ==, !=, ===, and !== operators 67
4.15.4 The instanceof operator 67
4.15.5 The in operator ................. 67
4.15.6 The && operator .............. 67
4.15.7 The || operator ................... 68
4.16 The Conditional Operator .. 68
4.17 Assignment Operators ........ 69
4.18 The Comma Operator ......... 69
4.19 Contextually Typed Expressions .............. 69

5 Statements . 73
5.1 Variable Statements ............. 73
5.2 If, Do, and While Statements .... 74
5.3 For Statements ....................... 74
5.4 For-In Statements ................. 74
5.5 Continue Statements ........... 74
5.6 Break Statements .................. 75
5.7 Return Statements ................ 75
5.8 With Statements .................... 75
5.9 Switch Statements ................ 75
5.10 Throw Statements ................. 76
5.11 Try Statements ....................... 76

6 Functions .... 77
6.1 Function Declarations .......... 77
6.2 Function Overloads .............. 77
6.3 Function Implementations 78
6.4 Generic Functions ................. 80
6.5 Code Generation ................... 81

7 Interfaces .... 83
7.1 Interface Declarations ......... 83
7.2 Declaration Merging ............ 85
7.3 Interfaces Extending Classes ..... 85
7.4 Dynamic Type Checks ......... 86 iv

8 Classes ......... 87
8.1 Class Declarations ................. 87
8.1.1 Class Heritage Specification 88
8.1.2 Class Body ........................... 89
8.2 Members................................... 90
8.2.1 Instance and Static Members .............. 90
8.2.2 Accessibility ........................ 90
8.2.3 Inheritance and Overriding .. 90
8.2.4 Class Types ......................... 91
8.2.5 Constructor Function Types . 92
8.3 Constructor Declarations ... 93
8.3.1 Constructor Parameters . 94
8.3.2 Super Calls .......................... 95
8.3.3 Automatic Constructors 95
8.4 Property Member Declarations ............... 96
8.4.1 Member Variable Declarations ........... 97
8.4.2 Member Function Declarations .......... 98
8.4.3 Member Accessor Declarations ........ 100
8.5 Index Member Declarations .... 100
8.6 Code Generation ................. 101
8.6.1 Classes Without Extends Clauses ..... 101
8.6.2 Classes With Extends Clauses ............ 103

9 Enums ........ 107
9.1 Enum Declarations .............. 107
9.2 Enum Members .................... 107
9.3 Declaration Merging .......... 109
9.4 Code Generation ................. 109

10 Internal Modules ............................ 111
10.1 Module Declarations.......... 111
10.2 Module Body ........................ 112
10.3 Import Declarations ........... 113
10.4 Export Declarations ............ 114
10.5 Declaration Merging .......... 115
10.6 Code Generation ................. 117

11 Source Files and External Modules . 119
11.1 Source Files ............................ 119
11.1.1 Source Files Dependencies. 120
11.2 External Modules ................. 121
11.2.1 External Module Names ...... 122
11.2.2 External Import Declarations ............. 123
11.2.3 Export Declarations ....... 123 v
11.2.4 Export Assignments ...... 123
11.2.5 CommonJS Modules ..... 124
11.2.6 AMD Modules ................. 125
11.3 Code Generation ................. 126

12 Ambients... 127
12.1 Ambient Declarations ........ 127
12.1.1 Ambient Variable Declarations ......... 127
12.1.2 Ambient Function Declarations ........ 127
12.1.3 Ambient Class Declarations ............... 128
12.1.4 Ambient Enum Declarations .............. 128
12.1.5 Ambient Module Declarations .......... 129
12.1.6 Ambient External Module Declarations ..... 129

A Grammar ... 131
A.1 Types ... 131
A.2 Expressions ............................ 134
A.3 Statements ............................. 135
A.4 Functions ................................ 135
A.5 Interfaces ................................ 135
A.6 Classes 136
A.7 Enums . 137
A.8 Internal Modules ................. 138
A.9 Programs and External Modules ........... 139
A.10 Ambients ................................ 140
[http://www.typescriptlang.org/Content/TypeScript%20Language%20Specification.pdf]

1. Introduction

JavaScript applications such as web e-mail, maps, document editing, and collaboration tools are becoming an increasingly important part of the everyday computing. We designed TypeScript to meet the needs of the JavaScript programming teams that build and maintain large JavaScript programs. TypeScript helps programming teams to define interfaces between software components and to gain insight into the behavior of existing JavaScript libraries. TypeScript also enables teams to reduce naming conflicts by organizing their code into dynamically-loadable modules. TypeScript’s optional type system enables JavaScript programmers to use highly-productive development tools and practices: static checking, symbol-based navigation, statement completion, and code re-factoring.

TypeScript is a syntactic sugar for JavaScript. TypeScript syntax is a superset of Ecmascript 5 (ES5) syntax. Every JavaScript program is also a TypeScript program. The TypeScript compiler performs only file-local transformations on TypeScript programs and does not re-order variables declared in TypeScript. This leads to JavaScript output that closely matches the TypeScript input. TypeScript does not transform variable names, making tractable the direct debugging of emitted JavaScript. TypeScript optionally provides source maps, enabling source-level debugging. TypeScript tools typically emit JavaScript upon file save, preserving the test, edit, refresh cycle commonly used in JavaScript development.

TypeScript syntax includes several proposed features of Ecmascript 6 (ES6), including classes and modules. Classes enable programmers to express common object-oriented patterns in a standard way, making features like inheritance more readable and interoperable. Modules enable programmers to organize their code into components while avoiding naming conflicts. The TypeScript compiler provides module code generation options that support either static or dynamic loading of module contents.

TypeScript also provides to JavaScript programmers a system of optional type annotations. These type annotations are like the JSDoc comments found in the Closure system, but in TypeScript they are integrated directly into the language syntax. This integration makes the code more readable and reduces the maintenance cost of synchronizing type annotations with their corresponding variables.

The TypeScript type system enables programmers to express limits on the capabilities of JavaScript objects, and to use tools that enforce these limits. To minimize the number of annotations needed for tools to become useful, the TypeScript type system makes extensive use of type inference. For example, from the following statement, TypeScript will infer that the variable ‘i’ has the type number.

var i = 0;

TypeScript will infer from the following function definition that the function f has return type string.

function f() {
return "hello";
}

To benefit from this inference, a programmer can use the TypeScript language service. For example, a code editor can incorporate the TypeScript language service and use the service to find the members of a string object as in the following screen shot.


In this example, the programmer benefits from type inference without providing type annotations. Some beneficial tools, however, do require the programmer to provide type annotations. In TypeScript, we can express a parameter requirement as in the following code fragment.

function f(s: string) {
return s;
}

f({}); // Error
f("hello"); // Ok

This optional type annotation on the parameter ‘s’ lets the TypeScript type checker know that the programmer expects parameter ‘s’ to be of type ‘string’. Within the body of function ‘f’, tools can assume ‘s’ is of type ‘string’ and provide operator type checking and member completion consistent with this assumption. Tools can also signal an error on the first call to ‘f’, because ‘f’ expects a string, not an object, as its parameter. For the function ‘f’, the TypeScript compiler will emit the following JavaScript code:

function f(s) {
return s;
}

In the JavaScript output, all type annotations have been erased. In general, TypeScript erases all type information before emiting JavaScript.

Ambient Declarations
An ambient declaration introduces a variable into a TypeScript scope, but has zero impact on the emitted JavaScript program. Programmers can use ambient declarations to tell the TypeScript compiler that some other component will supply a variable. For example, by default the TypeScript compiler will print an error for uses of undefined variables. To add some of the common variables defined by browsers, a TypeScript programmer can use ambient declarations. The following example declares the ‘document’ object

supplied by browsers. Because the declaration does not specify a type, the type ‘any’ is inferred. The type ‘any’ means that a tool can assume nothing about the shape or behavior of the document object. Some of the examples below will illustrate how programmers can use types to further characterize the expected behavior of an object.

declare var document;
document.title = "Hello"; // Ok because document has been declared

In the case of ‘document’, the TypeScript compiler automatically supplies a declaration, because TypeScript by default includes a file ‘lib.d.ts’ that provides interface declarations for the built-in JavaScript library as well as the Document Object Model.

The TypeScript compiler does not include by default an interface for jQuery, so to use jQuery, a programmer could supply a declaration such as:

declare var $;

Section 1.3 provides a more extensive example of how a programmer can add type information for jQuery and other libraries.

Function Types
Function expressions are a powerful feature of JavaScript. They enable function definitions to create closures: functions that capture information from the lexical scope surrounding the function’s definition. Closures are currently JavaScript’s only way of enforcing data encapsulation. By capturing and using environment variables, a closure can retain information that cannot be accessed from outside the closure. JavaScript programmers often use closures to express event handlers and other asynchronous callbacks, in which another software component, such as the DOM, will call back into JavaScript through a handler function.

TypeScript function types make it possible for programmers to express the expected signature of a function. A function signature is a sequence of parameter types plus a return type. The following example uses function types to express the callback signature requirements of an asynchronous voting mechanism.

function vote(candidate: string, callback: (result: string) => any) {
// ...
}

vote("BigPig",
function(result: string) {
if (result === "BigPig") {
// ...
}
}
);

In this example, the second parameter to ‘vote’ has the function type


(result: string) => any

which means the second parameter is a function returning type ‘any’ that has a single parameter of type ‘string’ named ‘result’.

Section 3.7.2 provides additional information about function types.

Object Types
TypeScript programmers use object types to declare their expectations of object behavior. The following code uses an object type literal to specify the return type of the ‘MakePoint’ function.

var MakePoint: () => {
x: number; y: number;
};

Programmers can give names to object types; we call named object types interfaces. For example, in the following code, an interface declares one required field (name) and one optional field (favoriteColor).

interface Friend {
name: string;
favoriteColor?: string;
}

function add(friend: Friend) {
var name = friend.name;
}

add({ name: "Fred" }); // Ok
add({ favoriteColor: "blue" }); // Error, name required
add({ name: "Jill", favoriteColor: "green" }); // Ok

TypeScript object types model the diversity of behaviors that a JavaScript object can exhibit. For example, the jQuery library defines an object, ‘$’, that has methods, such as ‘get’ (which sends an Ajax message), and fields, such as ‘browser’ (which gives browser vendor information). However, jQuery clients can also call ‘$’ as a function. The behavior of this function depends on the type of parameters passed to the function.

The following code fragment captures a small subset of jQuery behavior, just enough to use jQuery in a simple way.

interface JQuery {
text(content: string);
}

interface JQueryStatic {
get(url: string, callback: (data: string) => any);

(query: string): JQuery;
}

declare var $: JQueryStatic;

$.get("http://mysite.org/divContent",
function (data: string) {
$("div").text(data);
}
);

The ‘JQueryStatic’ interface references another interface: ‘JQuery’. This interface represents a collection of one or more DOM elements. The jQuery library can perform many operations on such a collection, but in this example the jQuery client only needs to know that it can set the text content of each jQuery element in a collection by passing a string to the ‘text’ method. The ‘JQueryStatic’ interface also contains a method, ‘get’, that performs an Ajax get operation on the provided URL and arranges to invoke the provided callback upon receipt of a response.

Finally, the ‘JQueryStatic’ interface contains a bare function signature

(query: string): JQuery;

The bare signature indicates that instances of the interface are callable. This example illustrates that TypeScript function types are just special cases of TypeScript object types. Specifically, function types are object types that contain only a call signature, but no properties. For this reason we can write any function type as an object type literal. The following example uses both forms to describe the same type.

var f: { (): string; };
var sameType: () => string = f; // Ok
var nope: () => number = sameType; // Error: type mismatch

We mentioned above that the ‘$’ function behaves differently depending on the type of its parameter. So far, our jQuery typing only captures one of these behaviors: return an object of type ‘JQuery’ when passed a string. To specify multiple behaviors, TypeScript supports overloading of function signatures in object types. For example, we can add an additional call signature to the ‘JQueryStatic’ interface.

(ready: () => any): any;

This signature denotes that a function may be passed as the parameter of the ‘$’ function. When a function is passed to ‘$’, the jQuery library will invoke that function when a DOM document is ready. Because TypeScript supports overloading, tools can use TypeScript to show all available function signatures with their documentation tips and to give the correct documentation once a function has been called with a particular signature.

A typical client would not need to add any additional typing but could just use a community-supplied typing to discover (through statement completion with documentation tips) and verify (through static checking) correct use of the library, as in the following screen shot.


Section 3.3 provides additional information about object types.

Structural Subtyping
Object types are compared structurally. For example, in the code fragment below, class ‘CPoint’ matches interface ‘Point’ because ‘CPoint’ has all of the required members of ‘Point’. A class may optionally declare that it implements an interface, so that the compiler will check the declaration for structural compatibility. The example also illustrates that an object type can match the type inferred from an object literal, as long as the object literal supplies all of the required members.

interface Point {
x: number;
y: number;
}

function getX(p: Point) {
return p.x;
}

class CPoint {
x: number;
y: number;
constructor(x: number, y: number) {
this.x = x;
this.y = y;
}
}

getX(new CPoint(0, 0)); // Ok, fields match

getX({ x: 0, y: 0, color: "red" }); // Extra fields Ok

getX({ x: 0 }); // Error: supplied parameter does not match


See section 3.8 for more information about type comparisons.

Contextual Typing
Ordinarily, TypeScript type inference proceeds “bottom-up”: from the leaves of an expression tree to its root. In the following example, TypeScript infers ‘number’ as the return type of the function ‘mul’ by flowing type information bottom up in the return expression.

function mul(a: number, b: number) {
return a * b;
}

For variables and parameters without a type annotation or a default value, TypeScript infers type ‘any’, ensuring that compilers do not need non-local information about a function’s call sites to infer the function’s return type. Generally, this bottom-up approach provides programmers with a clear intuition about the flow of type information.

However, in some limited contexts, inference proceeds “top-down” from the context of an expression. Where this happens, it is called contextual typing. Contextual typing helps tools provide excellent information when a programmer is using a type but may not know all of the details of the type. For example, in the jQuery example, above, the programmer supplies a function expression as the second parameter to the ‘get’ method. During typing of that expression, tools can assume that the type of the function expression is as given in the ‘get’ signature and can provide a template that includes parameter names and types.

$.get("http://mysite.org/divContent",
function (data) {
$("div").text(data); // TypeScript infers data is a string
}
);

Contextual typing is also useful for writing out object literals. As the programmer types the object literal, the contextual type provides information that enables tools to provide completion for object member names.

Section 4.19 provides additional information about contextually typed expressions.

Classes
JavaScript practice has at least two common design patterns: the module pattern and the class pattern. Roughly speaking, the module pattern uses closures to hide names and to encapsulate private data, while the class pattern uses prototype chains to implement many variations on object-oriented inheritance mechanisms. Libraries such as ‘prototype.js’ are typical of this practice.

This section and the module section below will show how TypeScript emits consistent, idiomatic JavaScript code to implement classes and modules that are closely aligned with the current ES6 proposal. The goal of TypeScript’s translation is to emit exactly what a programmer would type when implementing a class or module unaided by a tool. This section will also describe how TypeScript infers a type for each class

declaration. We’ll start with a simple BankAccount class.

class BankAccount {
balance = 0;
deposit(credit: number) {
this.balance += credit;
return this.balance;
}
}

This class generates the following JavaScript code.

var BankAccount = (function () {
function BankAccount() {
this.balance = 0;
}
BankAccount.prototype.deposit = function(credit) {
this.balance += credit;
return this.balance;
};
return BankAccount;
})();

This TypeScript class declaration creates a variable named ‘BankAccount’ whose value is the constructor function for ‘BankAccount’ instances. This declaration also creates an instance type of the same name. If we were to write this type as an interface it would look like the following.

interface BankAccount {
balance: number;
deposit(credit: number): number;
}

If we were to write out the function type declaration for the ‘BankAccount’ constructor variable, it would have the following form.

var BankAccount: new() => BankAccount;

The function signature is prefixed with the keyword ‘new’ indicating that the ‘BankAccount’ function must be called as a constructor. It is possible for a function’s type to have both call and constructor signatures. For example, the type of the built-in JavaScript Date object includes both kinds of signatures.

If we want to start our bank account with an initial balance, we can add to the ‘BankAccount’ class a constructor declaration.

class BankAccount {
balance: number;
constructor(initially: number) {

this.balance = initially;
}
deposit(credit: number) {
this.balance += credit;
return this.balance;
}
}

This version of the ‘BankAccount’ class requires us to introduce a constructor parameter and then assign it to the ‘balance’ field. To simplify this common case, TypeScript accepts the following shorthand syntax.

class BankAccount {
constructor(public balance: number) {
}
deposit(credit: number) {
this.balance += credit;
return this.balance;
}
}

The ‘public’ keyword denotes that the constructor parameter is to be retained as a field. Public is the default visibility for class members, but a programmer can also specify private visibility for a class member. Private visibility is a design-time construct; it is enforced during static type checking but does not imply any runtime enforcement.

TypeScript classes also support inheritance, as in the following example.

class CheckingAccount extends BankAccount {
constructor(balance: number) {
super(balance);
}
writeCheck(debit: number) {
this.balance -= debit;
}
}

In this example, the class ‘CheckingAccount’ derives from class ‘BankAccount’. The constructor for ‘CheckingAccount’ calls the constructor for class ‘BankAccount’ using the ‘super’ keyword. In the emitted JavaScript code, the prototype of ‘CheckingAccount’ will chain to the prototype of ‘BankingAccount’.

TypeScript classes may also specify static members. Static class members become properties of the class constructor.

Section 8 provides additional information about classes.

Enum Types

TypeScript enables programmers to summarize a set of numeric constants as an enum type. The example below creates an enum type to represent operators in a calculator application.

enum Operator {
ADD,
DIV,
MUL,
SUB
}

function compute(op: Operator, a: number, b: number) {
console.log("the operator is" + Operator[op]);
// ...
}

In this example, the compute function logs the operator ‘op’ using a feature of enum types: reverse mapping from the enum value (‘op’) to the string corresponding to that value. For example, the declaration of ‘Operator’ automatically assigns integers, starting from zero, to the listed enum members. Section 9 describes how programmers can also explicitly assign integers to enum members, and can use any string to name an enum member.

If all enum members have explicitly assigned literal integers, or if an enum has all members automatically assigned, the TypeScript compiler will emit for an enum member a JavaScript constant corresponding to that member’s assigned value (annotated with a comment). This improves performance on many JavaScript engines.

For example, the ‘compute’ function could contain a switch statement like the following.

switch (op) {
case Operator.ADD:
// execute add
break;
case Operator.DIV:
// execute div
break;
// ...
}

For this switch statement, the compiler will generate the following code.

switch (op) {
case 0 /* Operator.ADD */ :
// execute add
break;
case 1 /* Operator.DIV */ :
// execute div

break;
// ...
}

JavaScript implementations can use these explicit constants to generate efficient code for this switch statement, for example by building a jump table indexed by case value.

Overloading on String Parameters
An important goal of TypeScript is to provide accurate and straightforward types for existing JavaScript programming patterns. To that end, TypeScript includes generic types, discussed in the next section, and overloading on string parameters, the topic of this section.

JavaScript programming interfaces often include functions whose behavior is discriminated by a string constant passed to the function. The Document Object Model makes heavy use of this pattern. For example, the following screen shot shows that the ‘createElement’ method of the ‘document’ object has multiple signatures, some of which identify the types returned when specific strings are passed into the method.


The following code fragment uses this feature. Because the ‘span’ variable is inferred to have the type ‘HTMLSpanElement’, the code can reference without static error the ‘isMultiline’ property of ‘span’.

var span = document.createElement("span");
span.isMultiLine = false; // OK: HTMLSpanElement has an 'isMultiline' property


In the following screen shot, a programming tool combines information from overloading on string parameters with contextual typing to infer that the type of the variable ‘e’ is ‘MouseEvent’ and that therefore ‘e’ has a ‘clientX’ property.


Section 3.7.2.4 provides details on how to use string literals in function signatures.


Generic Types and Functions
Like overloading on string parameters, generic types make it easier for TypeScript to accurately capture the behavior of JavaScript libraries. Because they enable type information to flow from client code, through library code, and back into client code, generic types may do more than any other TypeScript feature to support detailed API descriptions.

To illustrate this, let’s take a look at part of the TypeScript interface for the built-in JavaScript array type. You can find this interface in the ‘lib.d.ts’ file that accompanies a TypeScript distribution.

interface Array<T> {
reverse(): T[];
sort(compareFn?: (a: T, b: T) => number): T[];
// ...
}

Interface definitions, like the one above, can have one or more type parameters. In this case the ‘Array’ interface has a single parameter, ‘T’, that defines the element type for the array. The ‘reverse’ method returns an array with the same element type. The sort method takes an optional parameter, ‘compareFn’, whose type is a function that takes two parameters of type ‘T’ and returns a number. Finally, sort returns an array with element type ‘T’.

Functions can also have generic parameters. For example, the array interface contains a ‘map’ method, defined as follows:

map<U>(func: (value: T, index: number, array: T[]) => U, thisArg?: any): U[];

The map method, invoked on an array ‘a’ with element type ‘T’, will apply function ‘func’ to each element of ‘a’, returning a value of type ‘U’.

The TypeScript compiler can often infer generic method parameters, making it unnecessary for the programmer to explicitly provide them. In the following example, the compiler infers that parameter ‘U’ of the map method has type ‘string’, because the function passed to map returns a string.

function numberToString(a: number[]) {
var stringArray = a.map(v => v.toString());
return stringArray;
}

The compiler infers in this example that the ‘numberToString’ function returns an array of strings.

In TypeScript, classes can also have type parameters. The following code declares a class that implements a linked list of items of type ‘T’. This code illustrates how programmers can constrain type parameters to extend a specific type. In this case, the items on the list must extend the type ‘NamedItem’. This enables the programmer to implement the ‘log’ function, which logs the name of the item.

interface NamedItem {

name: string;
}

class List<T extends NamedItem> {
next: List<T> = null;

constructor(public item: T) {
}

insertAfter(item: T) {
var temp = this.next;
this.next = new List(item);
this.next.next = temp;
}

log() {
console.log(this.item.name);
}

// ...
}

Section 3.5 provides further information about generic types.

Modules
Classes and interfaces support large-scale JavaScript development by providing a mechanism for describing how to use a software component that can be separated from that component’s implementation. TypeScript enforces encapsulation of implementation in classes at design time (by restricting use of private members), but cannot enforce encapsulation at runtime because all object properties are accessible at runtime. Future versions of JavaScript may provide private names which would enable runtime enforcement of private members.

In the current version of JavaScript, the only way to enforce encapsulation at runtime is to use the module pattern: encapsulate private fields and methods using closure variables. The module pattern is a natural way to provide organizational structure and dynamic loading options by drawing a boundary around a software component. A module can also provide the ability to introduce namespaces, avoiding use of the global namespace for most software components.

The following example illustrates the JavaScript module pattern.

(function(exports) {
var key = generateSecretKey();
function sendMessage(message) {
sendSecureMessage(message, key);
}
exports.sendMessage = sendMessage;
})(MessageModule);

This example illustrates the two essential elements of the module pattern: a module closure and a module object. The module closure is a function that encapsulates the module’s implementation, in this case the variable ‘key’ and the function ‘sendMessage’. The module object contains the exported variables and functions of the module. Simple modules may create and return the module object. The module above takes the module object as a parameter, ‘exports’, and adds the ‘sendMessage’ property to the module object. This augmentation approach simplifies dynamic loading of modules and also supports separation of module code into multiple files.

The example assumes that an outer lexical scope defines the functions ‘generateSecretKey’ and ‘sendSecureMessage’; it also assumes that the outer scope has assigned the module object to the variable ‘MessageModule’.

TypeScript modules provide a mechanism for succinctly expressing the module pattern. In TypeScript, programmers can combine the module pattern with the class pattern by nesting modules and classes within an outer module.

The following example shows the definition and use of a simple module.

module M {
var s = "hello";
export function f() {
return s;
}
}

M.f();
M.s; // Error, s is not exported

In this example, variable ‘s’ is a private feature of the module, but function ‘f’ is exported from the module and accessible to code outside of the module. If we were to describe the effect of module ‘M’ in terms of interfaces and variables, we would write

interface M {
f(): string;
}

var M: M;

The interface ‘M’ summarizes the externally visible behavior of module ‘M’. In this example, we can use the same name for the interface as for the initialized variable because in TypeScript type names and variable names do not conflict: each lexical scope contains a variable declaration space and type declaration space (see section 2.3 for more details).

Module ‘M’ is an example of an internal module, because it is nested within the global module (see section 10 for more details). The TypeScript compiler emits the following JavaScript code for this module.

var M;
(function(M) {
var s = "hello";

function f() {
return s;
}
M.f = f;
})(M||(M={}));

In this case, the compiler assumes that the module object resides in global variable ‘M’, which may or may not have been initialized to the desired module object.

TypeScript also supports external modules, which are files that contain top-level export and import directives. For this type of module the TypeScript compiler will emit code whose module closure and module object implementation vary according to the specified dynamic loading system, for example, the Asynchronous Module Definition system.

2. Basic Concepts

The remainder of this document is the formal specification of the TypeScript programming language and is intended to be read as an adjunct to the ECMAScript Language Specification (specifically, the ECMA-262 Standard, 5th Edition). This document describes the syntactic grammar added by TypeScript along with the compile-time processing and type checking performed by the TypeScript compiler, but it only minimally discusses the run-time behavior of programs since that is covered by the ECMAScript specification.

Grammar Conventions
The syntactic grammar added by TypeScript language is specified throughout this document using the existing conventions and production names of the ECMAScript grammar. In places where TypeScript augments an existing grammar production it is so noted. For example:

CallExpression: ( Modified )

super ( ArgumentListopt )
super . IdentifierName

The ‘( Modified )’ annotation indicates that an existing grammar production is being replaced, and the ‘…’ references the contents of the original grammar production.

Namespaces and Named Types
TypeScript supports named types that can be organized in hierarchical namespaces. Namespaces are introduced by module declarations and named types are introduced by class, interface, and enum declarations. Named types are denoted by qualified names that extend from some root module (possibly the global module) to the point of their declaration. The example

module X {
export module Y {
export interface Z { }
}
export interface Y { }
}

declares two interface types with the qualified names ‘X.Y.Z’ and ‘X.Y’ relative to the root module in which ‘X’ is declared.

In a qualified type name all identifiers but the last one refer to namespaces and the last identifier refers to a named type. Named type and namespace names are in separate declaration spaces and it is therefore possible for a named type and a namespace to have the same name, as in the example above.

The hierarchy formed by namespace and named type names partially mirrors that formed by module instances and members. The example

module A {

export module B {
export class C { }
}
}

introduces a named type with the qualified name ‘A.B.C’ and also introduces a constructor function that can be accessed using the expression ‘A.B.C’. Thus, in the example

var c: A.B.C = new A.B.C();

the two occurrences of ‘A.B.C’ in fact refer to different entities. It is the context of the occurrences that determines whether ‘A.B.C’ is processed as a type name or an expression.

Declarations
Declarations introduce names in the declaration spaces to which they belong. It is an error to have two names with same spelling in the same declaration space. Declaration spaces exist as follows:

The global module and each external or internal module has a declaration space for variables (including functions, modules, class constructor functions, and enum objects), a declaration space for named types (classes, interfaces, and enums), and a declaration space for namespaces (containers of named types). Every declaration (whether local or exported) in a module contributes to one or more of these declaration spaces.

Each external or internal module has a declaration space for exported members, a declaration space for exported named types, and a declaration space for exported namespaces. All export declarations in the module contribute to these declaration spaces. Each internal module’s export declaration spaces are shared with other internal modules that have the same root module and the same qualified name starting from that root module.

Each class declaration has a declaration space for instance members, a declaration space for static members, and a declaration space for type parameters.

Each interface declaration has a declaration space for members and a declaration space for type parameters. An interface’s declaration space is shared with other interfaces that have the same root module and the same qualified name starting from that root module.

Each enum declaration has a declaration space for its enum members. An enum’s declaration space is shared with other enums that have the same root module and the same qualified name starting from that root module.

Each function declaration (including constructor, member function, and member accessor declarations) and each function expression has a declaration space for variables (parameters, local variables, and local functions) and a declaration space for

type parameters.

Each object literal has a declaration space for its properties.

Each object type literal has a declaration space for its members.

Top-level declarations in a source file with no top-level import or export declarations belong to the global module. Top-level declarations in a source file with one or more top-level import or export declarations belong to the external module represented by that source file.

An internal module declaration contributes a namespace name (representing a container of types) and possibly a member name (representing the module instance) to the containing module. A class declaration contributes both a member name (representing the constructor function) and a type name (representing the class type) to the containing module. An interface declaration contributes a type name to the containing module. An enum declaration contributes both a member name (representing the enum object) and a type name (representing the enum type) to the containing module. Any other declaration contributes a member name to the declaration space to which it belongs.

The parent module of an entity is defined as follows:

The parent module of an entity declared in an internal module is that internal module.

The parent module of an entity declared in an external module is that external module.

The parent module of an entity declared in the global module is the global module.

The parent module of an external module is the global module.

The root module of an entity is defined as follows:

The root module of a non-exported entity is the entity’s parent module.

The root module of an exported entity is the root module of the entity’s parent module.

Intuitively, the root module of an entity is the outermost module body from within which the entity is reachable.

Interfaces, enums, and internal modules are “open ended,” meaning that interface, enum, and internal module declarations with the same qualified name relative to a common root are automatically merged. For further details, see sections 7.2, 9.3, and 10.5.

Namespace, type, and member names exist in separate declaration spaces. Furthermore, declarations of non-instantiated modules (modules that contain only interfaces or modules at all levels of nesting) do not introduce a member name in their containing declaration space. This means that the following is permitted, provided module ‘X’ contains only interface or module declarations at all levels of nesting:

module M {
module X { ... } // Namespace
interface X { ... } // Type
var X; // Member

}

If module ‘X’ above was an instantiated module (section 10.1) it would cause a member ‘X’ to be introduced in ‘M’. This member would conflict with the variable ‘X’ and thus cause an error.

Instance and static members in a class are likewise in separate declaration spaces. Thus the following is permitted:

class C {
x: number; // Instance member
static x: string; // Static member
}

Scopes
The scope of a name is the region of program text within which it is possible to refer to the entity declared by that name without qualification of the name. The scope of a name depends on the context in which the name is declared. The contexts are listed below in order from outermost to innermost:

The scope of an entity declared in the global module is the entire program text.

The scope of an entity declared in an external module is the source file of that external module.

The scope of an exported entity declared in an internal module is the body of that module and every internal module with the same root and the same qualified name relative to that root.

The scope of a non-exported entity declared within an internal module declaration is the body of that internal module declaration.

The scope of a type parameter declared in a class or interface declaration is that entire declaration, including constraints, extends clause, implements clause, and declaration body, but not including static member declarations.

The scope of a member declared in an enum declaration is the body of that declaration and every enum declaration with the same root and the same qualified name relative to that root.

The scope of a type parameter declared in a call or construct signature is that entire signature declaration, including constraints, parameter list, and return type. If the signature is part of a function implementation, the scope includes the function body.

The scope of a parameter, local variable, or local function declared within a function declaration (including a constructor, member function, or member accessor declaration) or function expression is the body of that function declaration or function expression.


Scopes may overlap, for example through nesting of modules and functions. When the scopes of two entities with the same name overlap, the entity with the innermost declaration takes precedence and access to the outer entity is either not possible or only possible by qualifying its name.

When an identifier is resolved as a TypeName (section 3.6.2), only classes, interfaces, enums, and type parameters are considered and other entities in scope are ignored.

When an identifier is resolved as a ModuleName (section 3.6.2), only modules are considered and other entities in scope are ignored.

When an identifier is resolved as a PrimaryExpression (section 4.3), only instantiated modules (section 10.1), classes, enums, functions, variables, and parameters are considered and other entities in scope are ignored.

Note that class and enum members are never directly in scope—they can only be accessed by applying the dot (‘.’) operator to a class instance or enum object. This even includes members of the current instance in a constructor or member function, which are accessed by applying the dot operator to this.

As the rules above imply, locally declared entities in an internal module are closer in scope than exported entities declared in other module declarations for the same internal module. For example:

var x = 1;
module M {
export var x = 2;
console.log(x); // 2
}
module M {
console.log(x); // 2
}
module M {
var x = 3;
console.log(x); // 3
}

3. Types

TypeScript adds optional static types to JavaScript. Types are used to place static constraints on program entities such as functions, variables, and properties so that compilers and development tools can offer better verification and assistance during software development. TypeScript’s static compile-time type system closely models the dynamic run-time type system of JavaScript, allowing programmers to accurately express the type relationships that are expected to exist when their programs run and have those assumptions pre-validated by the TypeScript compiler. TypeScript’s type analysis occurs entirely at compile-time and adds no run-time overhead to program execution.

All types in TypeScript are subtypes of a single top type called the Any type. The any keyword references this type. The Any type is the one type that can represent any JavaScript value with no constraints. All other types are categorized as primitive types, object types, or type parameters. These types introduce various static constraints on their values.

The primitive types are the Number, Boolean, String, Void, Null, and Undefined types along with user defined enum types. The number, boolean, string, and void keywords reference the Number, Boolean, String, and Void primitive types respectively. The Void type exists purely to indicate the absence of a value, such as in a function with no return value. It is not possible to explicitly reference the Null and Undefined types—only values of those types can be referenced, using the null and undefined literals.

The object types are all class, interface, array, and literal types. Class and interface types are introduced through class and interface declarations and are referenced by the name given to them in their declarations. Class and interface types may be generic types which have one or more type parameters. Literal types are written as object, array, function, or constructor type literals and are used to compose new types from other types.

Declarations of modules, classes, properties, functions, variables and other language entities associate types with those entities. The mechanism by which a type is formed and associated with a language entity depends on the particular kind of entity. For example, a module declaration associates the module with an anonymous type containing a set of properties corresponding to the exported variables and functions in the module, and a function declaration associates the function with an anonymous type containing a call signature corresponding to the parameters and return type of the function. Types can be associated with variables through explicit type annotations, such as

var x: number;

or through implicit type inference, as in

var x = 1;

which infers the type of ‘x’ to be the Number primitive type because that is the type of the value used to initialize ‘x’.

The Any Type
The Any type is used to represent any JavaScript value. A value of the Any type supports the same operations as a value in JavaScript and minimal static type checking is performed for operations on Any values. Specifically, properties of any name can be accessed through an Any value and Any values can be

called as functions or constructors with any argument list.

The any keyword references the Any type. In general, in places where a type is not explicitly provided and TypeScript cannot infer one, the Any type is assumed.

The Any type is a supertype of all types.

Some examples:

var x: any; // Explicitly typed
var y; // Same as y: any
var z: { a; b; }; // Same as z: { a: any; b: any; }

function f(x) { // Same as f(x: any): void
console.log(x);
}

Primitive Types
The primitive types are the Number, Boolean, String, Void, Null, and Undefined types and all user defined enum types.

The Number Type
The Number primitive type corresponds to the similarly named JavaScript primitive type and represents double-precision 64-bit format IEEE 754 floating point values.

The number keyword references the Number primitive type and numeric literals may be used to write values of the Number primitive type.

For purposes of determining type relationships (section 3.8) and accessing properties (section 4.10), the Number primitive type behaves as an object type with the same properties as the global interface type ‘Number’.

Some examples:

var x: number; // Explicitly typed
var y = 0; // Same as y: number = 0
var z = 123.456; // Same as z: number = 123.456
var s = z.toFixed(2); // Property of Number interface

The Boolean Type
The Boolean primitive type corresponds to the similarly named JavaScript primitive type and represents logical values that are either true or false.

The boolean keyword references the Boolean primitive type and the true and false literals reference the two Boolean truth values.

For purposes of determining type relationships (section 3.8) and accessing properties (section 4.10), the Boolean primitive type behaves as an object type with the same properties as the global

interface type ‘Boolean’.

Some examples:

var b: boolean; // Explicitly typed
var yes = true; // Same as yes: boolean = true
var no = false; // Same as no: boolean = false

The String Type
The String primitive type corresponds to the similarly named JavaScript primitive type and represents sequences of characters stored as Unicode UTF-16 code units.

The string keyword references the String primitive type and string literals may be used to write values of the String primitive type.

For purposes of determining type relationships (section 3.8) and accessing properties (section 4.10), the String primitive type behaves as an object type with the same properties as the global interface type ‘String’.

Some examples:

var s: string; // Explicitly typed
var empty = ""; // Same as empty: string = ""
var abc = 'abc'; // Same as abc: string = "abc"
var c = abc.charAt(2); // Property of String interface

The Void Type
The Void type, referenced by the void keyword, represents the absence of a value and is used as the return type of functions with no return value.

The only possible values for the Void type are null and undefined. The Void type is a subtype of the Any type and a supertype of the Null and Undefined types, but otherwise Void is unrelated to all other types.

NOTE: We might consider disallowing declaring variables of type Void as they serve no useful purpose. However, because Void is permitted as a type argument to a generic type or function it is not feasible to disallow Void properties or parameters.

The Null Type
The Null type corresponds to the similarly named JavaScript primitive type and is the type of the null literal.

The null literal references the one and only value of the Null type. It is not possible to directly reference the Null type itself.

The Null type is a subtype of all types, except the Undefined type. This means that null is considered a valid value for all primitive types, object types, and type parameters, including even the Number and Boolean primitive types.

Some examples:


var n: number = null; // Primitives can be null
var x = null; // Same as x: any = null
var e: Null; // Error, can't reference Null type

The Undefined Type
The Undefined type corresponds to the similarly named JavaScript primitive type and is the type of the undefined literal.

The undefined literal denotes the value given to all uninitialized variables and is the one and only value of the Undefined type. It is not possible to directly reference the Undefined type itself.

The undefined type is a subtype of all types. This means that undefined is considered a valid value for all primitive types, object types, and type parameters.

Some examples:

var n: number; // Same as n: number = undefined
var x = undefined; // Same as x: any = undefined
var e: Undefined; // Error, can't reference Undefined type

Enum Types
Enum types are distinct user defined subtypes of the Number primitive type. Enum types are declared using enum declarations (section 9.1) and referenced using type references (section 3.6.2).

Enum types are assignable to the Number primitive type, and vice versa, but different enum types are not assignable to each other.

String Literal Types
Specialized signatures (section 3.7.2.4) permit string literals to be used as types in parameter type annotations. String literal types are permitted only in that context and nowhere else.

All string literal types are subtypes of the String primitive type.

Object Types
The object types include references to class and interface types as well as anonymous object types created by a number of constructs such as object literals, function declarations, and module declarations. Object types are composed from properties, call signatures, construct signatures, and index signatures, collectively called members.

Named Type References
Type references (section 3.6.2) to class and interface types are classified as object types. Type references to generic class and interface types include type arguments that are substituted for the type parameters of the class or interface to produce an actual object type.


Array Types
Array types represent JavaScript arrays. Array types are type references (section 3.6.2) created from the generic interface type ‘Array’ in the global module. Array type literals (section 3.6.4) provide a shorthand notation for creating such references.

Array literals (section 4.6) may be used to create values of array types.

Anonymous Types
Several constructs in the TypeScript language introduce new anonymous object types:

Function and constructor type literals (section 3.6.4).

Object type literals (section 3.7).

Object literals (section 4.5).

Function expressions (section 4.9) and function declarations (6.1).

Constructor function types created by class declarations (section 8.2.5).

Module instance types created by module declarations (section 10.3).

Members
Every object type is composed from zero or more of the following kinds of members:

Properties, which define the names and types of the properties of objects of the given type. Property names are unique within their type.

Call signatures, which define the possible parameter lists and return types associated with applying call operations to objects of the given type.

Construct signatures, which define the possible parameter lists and return types associated with applying the new operator to objects of the given type.

Index signatures, which define type constraints for properties in the given type. An object type can have at most one string index signature and one numeric index signature.

Properties are either public or private and are either required or optional:

Properties in a class declaration may be designated public or private, while properties declared in other contexts are always considered public. Private members are only accessible within the class body containing their declaration, as described in section 8.2.2, and private properties match only themselves in subtype and assignment compatibility checks, as described in section 3.8.


Properties in an object type literal or interface declaration may be designated required or optional, while properties declared in other contexts are always considered required. Properties that are optional in the target type of an assignment may be omitted from source objects, as described in section 3.8.4.

Call and construct signatures may be specialized (section 3.7.2.4) by including parameters with string literal types. Specialized signatures are used to express patterns where specific string values for some parameters cause the types of other parameters or the function result to become further specialized.

Type Parameters
A type parameter represents an actual type that the parameter is bound to in a generic type reference or a generic function call. Type parameters have constraints that establish upper bounds for their actual type arguments.

Since a type parameter represents a multitude of different type arguments, type parameters have certain restrictions compared to other types. In particular, a type parameter cannot be used as a base class or interface.

Type Parameter Lists
Class, interface, and function declarations may optionally include lists of type parameters enclosed in < and > brackets. Type parameters are also permitted in call signatures of object, function, and constructor type literals.

TypeParameters:
< TypeParameterList >

TypeParameterList:
TypeParameter
TypeParameterList , TypeParameter

TypeParameter:
Identifier Constraintopt

Constraint:
extends Type

Type parameter names must be unique. A compile-time error occurs if two or more type parameters in the same TypeParameterList have the same name.

The scope of a type parameter extends over the entire declaration with which the type parameter list is associated, with the exception of static member declarations in classes.

Each type parameter has an associated type parameter constraint that establishes an upper bound for type arguments. Omitting a constraint corresponds to specifying the global interface type ‘Object’. Type parameters may be referenced in type parameter constraints within the same type parameter list, including even constraint declarations that occur to the left of the type parameter.


The base constraint of a type parameter T is defined as follows:

If T has no declared constraint, T’s base constraint is the global interface type ‘Object’.

If T’s declared constraint is a type parameter, T’s base constraint is that of the type parameter.

Otherwise, T’s base constraint is T’s declared constraint.

In the example

interface G<T, U extends V, V extends Function> { }

the base constraint of ‘T’ is ‘Object’ and the base constraint of ‘U’ and ‘V’ is ‘Function’.

For purposes of determining type relationships (section 3.8), type parameters appear to be subtypes of their base constraint. Likewise, in property accesses (section 4.10), new operations (section 4.11), and function calls (section 4.12), type parameters appear to have the members of their base constraint, but no other members.

It is an error for a type parameter to directly or indirectly be a constraint for itself. For example, both of the following declarations are invalid:

interface A<T extends T> { }

interface B<T extends U, U extends T> { }

Type Argument Lists
A type reference (section 3.6.2) to a generic type must include a list of type arguments enclosed in angle brackets and separated by commas. Similarly, a call (section 4.12) to a generic function may explicitly include a type argument list instead of relying on type inference.

TypeArguments:
< TypeArgumentList >

TypeArgumentList:
TypeArgument
TypeArgumentList , TypeArgument

TypeArgument:
Type

Type arguments correspond one-to-one with type parameters of the generic type or function being referenced. A type argument list is required to specify exactly one type argument for each corresponding type parameter, and each type argument is required to satisfy the constraint of its corresponding type parameter. A type argument satisfies a type parameter constraint if the type argument is assignable to (section 3.8.4) the constraint type once type arguments are substituted for type parameters.

Given the declaration


interface G<T extends U, U extends Array<V>, V extends Function> { }

a type reference of the form ‘G<A, B, C>’ requires ‘A’ to be assignable to ‘B’, ‘B’ to be assignable to ‘Array<C>’, and ‘C’ to be assignable to ‘Function’.

The process of substituting type arguments for type parameters in a generic type or generic signature is known as instantiating the generic type or signature. Instantiation of a generic type or signature can fail if the supplied type arguments do not satisfy the constraints of their corresponding type parameters.

Named Types
Class, interface, and enum types are named types that are introduced through class declarations (section 8.1), interface declarations (section 7.1), and enum declarations (9.1). Class and interface types may have type parameters and are then called generic types. Conversely, named types without type parameters are called non-generic types.

Interface declarations only introduce named types, whereas class declarations introduce named types and constructor functions that create instances of implementations of those named types. The named types introduced by class and interface declarations have only minor differences (classes can’t declare optional members and interfaces can’t declare private members) and are in most contexts interchangeable. In particular, class declarations with only public members introduce named types that function exactly like those created by interface declarations.

Named types are referenced through type references (section 3.6.2) that specify a type name and, if applicable, the type arguments to be substituted for the type parameters of the named type.

Named types are technically not types—only references to named types are. This distinction is particularly evident with generic types: Generic types are “templates” from which multiple actual types can be created by writing type references that supply type arguments to substitute in place of the generic type’s type parameters. This substitution process is known as instantiating a generic type. Only once a generic type is instantiated does it denote an actual type.

TypeScript has a structural type system, and therefore an instantiation of a generic type is indistinguishable from an equivalent manually written expansion. For example, given the declaration

interface Pair<T1, T2> { first: T1; second: T2; }

the type reference

Pair<string, Entity>

is indistinguishable from the type

{ first: string; second: Entity; }

Instance Types
Each named type has an associated actual type known as the instance type. For a non-generic type, the instance type is simply a type reference to the non-generic type. For a generic type, the instance type is an instantiation of the generic type where each of the type arguments is the corresponding type parameter.

Since the instance type uses the type parameters it can be used only where the type parameters are in scope—that is, inside the declaration of the generic type. Within the constructor and instance member functions of a class, the type of this is the instance type of the class.

The following example illustrates the concept of an instance type:

class G<T> { // Introduce type parameter T
self: G<T>; // Use T as type argument to form instance type
f() {
this.self = this; // self and this are both of type G<T>
}
}

Specifying Types
Types are specified either by referencing their keyword or name, by querying expression types, or by writing type literals which compose other types into new types.

Type:
PredefinedType
TypeReference
TypeQuery
TypeLiteral

Predefined Types
The any, number, boolean, string, and void keywords reference the Any type and the Number, Boolean, String, and Void primitive types respectively.

PredefinedType:
any
number
boolean
string
void

The predefined type keywords are reserved and cannot be used as names of user defined types.

Type References
A type reference references a named type or type parameter through its name and, in the case of a generic type, supplies a type argument list.

TypeReference:
TypeName TypeArgumentsopt


TypeName:
Identifier
ModuleName . Identifier

ModuleName:
Identifier
ModuleName . Identifier

A TypeReference consists of a TypeName that a references a named type or type parameter. A reference to a generic type must be followed by a list of TypeArguments (section 3.4.2).

Resolution of a TypeName consisting of a single identifier is described in section 2.4.

Resolution of a TypeName of the form M.N, where M is a ModuleName and N is an Identifier, proceeds by first resolving the module name M. If the resolution of M is successful and the resulting module contains an exported named type N, then M.N refers to that member. Otherwise, M.N is undefined.

Resolution of a ModuleName consisting of a single identifier is described in section 2.4.

Resolution of a ModuleName of the form M.N, where M is a ModuleName and N is an Identifier, proceeds by first resolving the module name M. If the resolution of M is successful and the resulting module contains an exported module member N, then M.N refers to that member. Otherwise, M.N is undefined.

A type reference to a generic type is required to specify exactly one type argument for each type parameter of the referenced generic type, and each type argument must be assignable to (section 3.8.4) the constraint of the corresponding type parameter or otherwise an error occurs. An example:

interface A { a: string; }

interface B extends A { b: string; }

interface C extends B { c: string; }

interface G<T, U extends B> {
x: T;
y: U;
}

var v1: G<A, C>; // Ok
var v2: G<{ a: string }, C>; // Ok, equivalent to G<A, C>
var v3: G<A, A>; // Error, A not valid argument for U
var v4: G<G<A, B>, C>; // Ok
var v5: G<any, any>; // Ok
var v6: G<any>; // Error, wrong number of arguments
var v7: G; // Error, no arguments


A type argument is simply a Type and may itself be a type reference to a generic type, as demonstrated by ‘v4’ in the example above.

As described in section 3.5, a type reference to a generic type G designates a type wherein all occurrences of G’s type parameters have been replaced with the actual type arguments supplied in the type reference. For example, the declaration of ‘v1’ above is equivalent to:

var v1: {
x: { a: string; }
y: { a: string; b: string; c: string };
};

Type Queries
A type query obtains the type of an expression.

TypeQuery:
typeof TypeQueryExpression

TypeQueryExpression:
Identifier
TypeQueryExpression . IdentifierName

A type query consists of the keyword typeof followed by an expression. The expression is restricted to a single identifier or a sequence of identifiers separated by periods. The expression is processed as an identifier expression (section 4.3) or property access expression (section 4.10), the widened type (section 3.9) of which becomes the result. Similar to other static typing constructs, type queries are erased from the generated JavaScript code and add no run-time overhead.

Type queries are useful for capturing anonymous types that are generated by various constructs such as object literals, function declarations, and module declarations. For example:

var a = { x: 10, y: 20 };
var b: typeof a;

Above, ‘b’ is given the same type as ‘a’, namely ‘{ x: number; y: number; }’.

Type Literals
Type literals compose other types into new anonymous types.

TypeLiteral:
ObjectType
ArrayType
FunctionType
ConstructorType

ArrayType:
PredefinedType [ ]

TypeReference [ ]
ObjectType [ ]
ArrayType [ ]

FunctionType:
TypeParametersopt ( ParameterListopt ) => Type

ConstructorType:
new TypeParametersopt ( ParameterListopt ) => Type

Object type literals are the primary form of type literals and are described in section 3.7. Array, function, and constructor type literals are simply shorthand notations for other types:

Type literal

Equivalent form

T [ ]

Array < T >

< TParams > ( Params ) => Result

{ < TParams > ( Params ) : Result }

new < TParams > ( Params ) => Result

{ new < TParams > ( Params ) : Result }


As the table above illustrates, an array type literal is shorthand for a reference to the generic interface type ‘Array’ in the global module, a function type literal is shorthand for an object type containing a single call signature, and a constructor type literal is shorthand for an object type containing a single construct signature. Note that function and constructor types with multiple call or construct signatures cannot be written as function or constructor type literals but must instead be written as object type literals.

In order to avoid grammar ambiguities, array type literals permit only a restricted set of notations for the element type. Specifically, an ArrayType cannot start with a TypeQuery, FunctionType, or ConstructorType. To use one of those forms for the element type, an array type must be written using the ‘Array<T>’ notation. For example, the type

() => string[]

denotes a function returning a string array, not an array of functions returning string. The latter can be expressed using ‘Array<T>’ notation

Array<() => string>

or by writing the element type as an object type literal

{ (): string }[]

Object Type Literals
An object type literal defines an object type by specifying the set of members that are statically considered to be present in instances of the type. Object type literals can be given names using interface declarations but are otherwise anonymous.


ObjectType:
{ TypeBodyopt }

TypeBody:
TypeMemberList ;opt

TypeMemberList:
TypeMember
TypeMemberList ; TypeMember

TypeMember:
PropertySignature
CallSignature
ConstructSignature
IndexSignature
MethodSignature

The members of an object type literal are specified as a combination of property, call, construct, index, and method signatures. The signatures are separated by semicolons and enclosed in curly braces.

Property Signatures
A property signature declares the name and type of a property member.

PropertySignature:
PropertyName ?opt TypeAnnotationopt

PropertyName:
IdentifierName
StringLiteral
NumericLiteral

The PropertyName production, reproduced above from the ECMAScript grammar, permits a property name to be any identifier (including a reserved word), a string literal, or a numeric literal. String literals can be used to give properties names that are not valid identifiers, such as names containing blanks. Numeric literal property names are equivalent to string literal property names with the string representation of the numeric literal, as defined in the ECMAScript specification.

The PropertyName of a property signature must be unique within its containing type. If the property name is followed by a question mark, the property is optional. Otherwise, the property is required.

If a property signature omits a TypeAnnotation, the Any type is assumed.

Call Signatures
A call signature defines the type parameters, parameter list, and return type associated with applying a call operation (section 4.12) to an instance of the containing type. A type may overload call operations by defining multiple different call signatures.


CallSignature:
TypeParametersopt ( ParameterListopt ) TypeAnnotationopt

A call signature that includes TypeParameters (section 3.4.1) is called a generic call signature. Conversely, a call signature with no TypeParameters is called a non-generic call signature.

As well as being members of object type literals, call signatures occur in method signatures (section 3.7.5), function expressions (section 4.9), and function declarations (section 6.1).

An object type containing call signatures is said to be a function type.

It is an error for a type to declare multiple call signatures that are considered identical (section 3.8.2) or differ only in their return types.

Type Parameters
Type parameters (section 3.4.1) in call signatures provide a mechanism for expressing the relationships of parameter and return types in call operations. For example, a signature might introduce a type parameter and use it as both a parameter type and a return type, in effect describing a function that returns a value of the same type as its argument.

The scope of a type parameter extends over the entire call signature in which the type parameter is introduced. Thus, type parameters may be referenced in type parameter constraints, parameter types, and return type annotations in their associated call signature.

Type arguments (section 3.4.2) for call signature type parameters may be explicitly specified in a call operation or may, when possible, be inferred (section 4.12.2) from the types of the regular arguments in the call. An instantiation of a generic call signature for a particular set of type arguments is the call signature formed by replacing each type parameter with its corresponding type argument.

Some examples of call signatures with type parameters:

<T>(x: T): T

A function taking an argument of any type, returning a value of that same type.

<T>(x: T, y: T): T[]

A function taking two values of the same type, returning an array of that type.

<T, U>(x: T, y: U): { x: T; y: U; }

A function taking two arguments of different types, returning an object with properties ‘x’ and ‘y’ of those types.

<T, U>(a: T[], f: (x: T) => U): U[]

A function taking an array of one type and a function argument, returning an array of another type, where the function argument takes a value of the first array element type and returns a value of the second array element type.


Parameter List

A signature’s parameter list consists of zero or more required parameters, followed by zero or more optional parameters, finally followed by an optional rest parameter.

ParameterList:
RequiredParameterList
OptionalParameterList
RestParameter
RequiredParameterList , OptionalParameterList
RequiredParameterList , RestParameter
OptionalParameterList , RestParameter
RequiredParameterList , OptionalParameterList , RestParameter

RequiredParameterList:
RequiredParameter
RequiredParameterList , RequiredParameter

RequiredParameter:
PublicOrPrivateopt Identifier TypeAnnotationopt
Identifier : StringLiteral

PublicOrPrivate:
public
private

OptionalParameterList:
OptionalParameter
OptionalParameterList , OptionalParameter

OptionalParameter:
PublicOrPrivateopt Identifier ? TypeAnnotationopt
PublicOrPrivateopt Identifier TypeAnnotationopt Initialiser

RestParameter:
... Identifier TypeAnnotationopt

Parameter names must be unique. A compile-time error occurs if two or more parameters have the same name.

A parameter is permitted to include a public or private modifier only if it occurs in the parameter list of a ConstructorImplementation (section 8.3.1).

A parameter with a type annotation is considered to be of that type. A type annotation for a rest parameter must denote an array type.

A parameter with no type annotation or initializer is considered to be of type any, unless it is a rest parameter, in which case it is considered to be of type any[].


When a parameter type annotation specifies a string literal type, the containing signature is a specialized signature (section 3.7.2.4). Specialized signatures are not permitted in conjunction with a function body, i.e. the FunctionExpression, FunctionImplementation, MemberFunctionImplementation, and ConstructorImplementation grammar productions do not permit parameters with string literal types.

A parameter can be marked optional by following its name with a question mark (?) or by including an initializer. The form that includes an initializer is permitted only in conjunction with a function body, i.e. only in a FunctionExpression, FunctionImplementation, MemberFunctionImplementation, or ConstructorImplementation grammar production.

Return Type
If present, a call signature’s return type annotation specifies the type of the value computed and returned by a call operation. A void return type annotation is used to indicate that a function has no return value.

When a call signature with no return type annotation occurs in a context without a function body, the return type is assumed to be the Any type.

When a call signature with no return type annotation occurs in a context that has a function body (specifically, a function implementation, a member function implementation, or a member accessor declaration), the return type is inferred from the function body as described in section 6.3.

Specialized Signatures
When a parameter type annotation specifies a string literal type (section 3.2.8), the containing signature is considered a specialized signature. Specialized signatures are used to express patterns where specific string values for some parameters cause the types of other parameters or the function result to become further specialized. For example, the declaration

interface Document {
createElement(tagName: "div"): HTMLDivElement;
createElement(tagName: "span"): HTMLSpanElement;
createElement(tagName: "canvas"): HTMLCanvasElement;
createElement(tagName: string): HTMLElement;
}

states that calls to ‘createElement’ with the string literals “div”, “span”, and “canvas” return values of type ‘HTMLDivElement’, ‘HTMLSpanElement’, and ‘HTMLCanvasElement’ respectively, and that calls with all other string expressions return values of type ‘HTMLElement’.

When writing overloaded declarations such as the one above it is important to list the non-specialized signature last. This is because overload resolution (section 4.12.1) processes the candidates in declaration order and picks the first one that matches.

Every specialized call or construct signature in an object type must be a subtype of at least one non-specialized call or construct signature in the same object type (where a call signature A is considered a subtype of another call signature B if an object type containing only A would be a subtype of an object type containing only B). For example, the ‘createElement’ property in the example above is of a type that contains three specialized signatures, all of which are subtypes of the non-specialized signature in the type.


Construct Signatures
A construct signature defines the parameter list and return type associated with applying the new operator (section 4.11) to an instance of the containing type. A type may overload new operations by defining multiple construct signatures with different parameter lists.

ConstructSignature:
new TypeParametersopt ( ParameterListopt ) TypeAnnotationopt

The type parameters, parameter list, and return type of a construct signature are subject to the same rules as a call signature.

A type containing construct signatures is said to be a constructor type.

It is an error for a type to declare multiple construct signatures that are considered identical (section 3.8.2) or differ only by their return types.

Index Signatures
An index signature defines a type constraint for properties in the containing type.

IndexSignature:
[ Identifier : string ] TypeAnnotation
[ Identifier : number ] TypeAnnotation

There are two kinds of index signatures:

String index signatures, specified using index type string, define type constraints for all properties and numeric index signatures in the containing type. Specifically, in a type with a string index signature of type T, all properties and numeric index signatures must have types that are subtypes of T.

Numeric index signatures, specified using index type number, define type constraints for all numerically named properties in the containing type. Specifically, in a type with a numeric index signature of type T, all numerically named properties must have types that are subtypes of T.

A numerically named property is a property whose name is a valid numeric literal. Specifically, a property with a name N for which ToNumber(N) is not NaN, where ToNumber is the abstract operation defined in ECMAScript specification.

An object type can contain at most one string index signature and one numeric index signature.

Index signatures affect the determination of the type that results from applying a bracket notation property access to an instance of the containing type, as described in section 4.10.

Method Signatures
A method signature is shorthand for declaring a property of a function type.


MethodSignature:
PropertyName ?opt CallSignature

If the identifier is followed by a question mark, the property is optional. Otherwise, the property is required. Only object type literals and interfaces can declare optional properties.

A method signature of the form

PropName < TypeParamList > ( ParamList ) : ReturnType

is equivalent to the property declaration

PropName : { < TypeParamList > ( ParamList ) : ReturnType }

A literal type may overload a method by declaring multiple method signatures with the same name but differing parameter lists. Overloads must either all be required (question mark omitted) or all be optional (question mark included). A set of overloaded method signatures correspond to a declaration of a single property with a type composed from an equivalent set of call signatures. Specifically

PropName < TypeParamList1 > ( ParamList1 ) : ReturnType1 ;
PropName < TypeParamList2 > ( ParamList2 ) : ReturnType2 ;

PropName < TypeParamListn > ( ParamListn ) : ReturnTypen ;

is equivalent to

PropName : {
< TypeParamList1 > ( ParamList1 ) : ReturnType1 ;
< TypeParamList2 > ( ParamList2 ) : ReturnType2 ;

< TypeParamListn > ( ParamListn ) : ReturnTypen ; }

In the following example of an object type

{
func1(x: number): number; // Method signature
func2: (x: number) => number; // Function type literal
func3: { (x: number): number }; // Object type literal
}

the properties ‘func1’, ‘func2’, and ‘func3’ are all of the same type, namely an object type with a single call signature taking a number and returning a number. Likewise, in the object type

{
func4(x: number): number;
func4(s: string): string;
func5: {

(x: number): number;
(s: string): string;
};
}

the properties ‘func4’ and ‘func5’ are of the same type, namely an object type with two call signatures taking and returning number and string respectively.

Type Relationships
Types in TypeScript have identity, subtype, supertype, and assignment compatibility relationships as defined in the following sections.

For purposes of determining type relationships, all object types appear to have the members of the ‘Object’ interface unless those members are hidden by members with the same name in the object types, and object types with one or more call or construct signatures appear to have the members of the ‘Function’ interface unless those members are hidden by members with the same name in the object types. Apparent types (section 3.8.1) that are object types appear to have these extra members as well.

Apparent Type
In certain contexts a type appears to have the characteristics of a related type called the type’s apparent type. Specifically, a type’s apparent type is used when determining subtype, supertype, and assignment compatibility relationships, as well as in the type checking of property accesses (section 4.10), new operations (section 4.11), and function calls (section 4.12).

The apparent type of a type T is defined as follows:

If T is the primitive type Number, Boolean, or String, the apparent type of T is the augmented form (as defined below) of the global interface type ‘Number’, ‘Boolean’, or ‘String’.

if T is an enum type, the apparent type of T is the augmented form of the global interface type ‘Number’.

If T is an object type, the apparent type of T is the augmented form of T.

if T is a type parameter, the apparent type of T is the augmented form of the base constraint (section 3.4.1) of T.

Otherwise, the apparent type of T is T itself.

The augmented form of an object type T adds to T those members of the global interface type ‘Object’ that aren’t hidden by members in T. Furthermore, if T has one or more call or construct signatures, the augmented form of T adds to T the members of the global interface type ‘Function’ that aren’t hidden by members in T. Members in T hide ‘Object’ or ‘Function’ interface members in the following manner:

A property hides an ‘Object’ or ‘Function’ property with the same name.

A call signature hides an ‘Object’ or ‘Function’ call signature with the same number of

parameters and identical parameter types in the respective positions.

A construct signature hides an ‘Object’ or ‘Function’ construct signature with the same number of parameters and identical parameter types in the respective positions.

An index signature hides an ‘Object’ or ‘Function’ index signature with the same parameter type.

In effect, a type’s apparent type is a subtype of the ‘Object’ or ‘Function’ interface unless the type defines members that are incompatible with those of the ‘Object’ or ‘Function’ interface—which, for example, occurs if the type defines a property with the same name as a property in the ‘Object’ or ‘Function’ interface but with a type that isn’t a subtype of that in the ‘Object’ or ‘Function’ interface.

Some examples:

var o: Object = { x: 10, y: 20 }; // Ok
var f: Function = (x: number) => x * x; // Ok
var err: Object = { toString: 0 }; // Error

The last assignment is an error because the apparent type of the object literal has a ‘toString’ method that isn’t compatible with that of ‘Object’.

Type and Member Identity
Two types are considered identical when

they are both the Any type,

they are the same primitive type,

they are the same type parameter, or

they are object types with identical sets of members.

Two members are considered identical when

they are public properties with identical names, optionality, and types,

they are private properties originating in the same declaration and having identical types,

they are identical call signatures,

they are identical construct signatures, or

they are index signatures of identical kind with identical types.

Two call or construct signatures are considered identical when they have the same number of type parameters and, considering those type parameters pairwise identical, have identical type parameter constraints, identical number of parameters with identical kind (required, optional or rest) and types, and identical return types.


Note that, except for primitive types and classes with private members, it is structure, not naming, of types that determines identity. Also, note that parameter names are not significant when determining identity of signatures.

Private properties match only if they originate in the same declaration and have identical types. Two distinct types might contain properties that originate in the same declaration if the types are separate parameterized references to the same generic class. In the example

class C<T> { private x: T; }

interface X { f(): string; }

interface Y { f(): string; }

var a: C<X>;
var b: C<Y>;

the variables ‘a’ and ‘b’ are of identical types because the two type references to ‘C’ create types with a private member ‘x’ that originates in the same declaration, and because the two private ‘x’ members have types with identical sets of members once the type arguments ‘X’ and ‘Y’ are substituted.

Subtypes and Supertypes
S is a subtype of a type T, and T is a supertype of S, if one of the following is true, where S’ denotes the apparent type (section 3.8.1) of S:

S and T are identical types.

T is the Any type.

S is the Undefined type.

S is the Null type and T is not the Undefined type.

S is an enum type and T is the primitive type Number.

S is a string literal type and T is the primitive type String.

S and T are type parameters, and S is directly or indirectly constrained to T.

S’ and T are object types and, for each member M in T, one of the following is true:

M is a property and S’ contains a property N where

M and N have the same name,

the type of N is a subtype of that of M,

M and N are both public or both private, and


if M is a required property, N is also a required property.

M is an optional property and S’ contains no property of the same name as M.

M is a non-specialized call or construct signature and S’ contains a call or construct signature N where

the signatures are of the same kind (call or construct),

the number of non-optional parameters in N is less than or equal to that of M,

N can be successfully instantiated in the context of M (section 3.8.5),

each parameter type in the instantiation of N is a subtype or supertype of the corresponding parameter type in M for parameter positions that are present in both signatures, and

the result type of M is Void, or the result type of the instantiation of N is a subtype of that of M.

M is a string index signature of type U and S’ contains a string index signature of a type that is a subtype of U.

M is a numeric index signature of type U and S’ contains a string or numeric index signature of a type that is a subtype of U.

When comparing call or construct signatures, parameter names are ignored and rest parameters correspond to an unbounded expansion of optional parameters of the rest parameter element type.

Note that specialized call and construct signatures (section 3.7.2.4) are not significant when determining subtype and supertype relationships.

Also note that type parameters are not considered object types. Thus, the only subtypes of a type parameter T are T itself and other type parameters that are directly or indirectly constrained to T.

Assignment Compatibility
Types are required to be assignment compatible in certain circumstances, such as expression and variable types in assignment statements and argument and parameter types in function calls.

S is assignable to a type T, and T is assignable from S, if one of the following is true, where S’ denotes the apparent type (section 3.8.1) of S:

S and T are identical types.

S or T is the Any type.


S is the Undefined type.

S is the Null type and T is not the Undefined type.

S or T is an enum type and the other is the primitive type Number.

S and T are type parameters, and S is directly or indirectly constrained to T.

S’ and T are object types and, for each member M in T, one of the following is true:

M is a property and S’ contains a property N where

M and N have the same name,

the type of N is assignable to that of M,

M and N are both public or both private, and

if M is a required property, N is also a required property.

M is an optional property and S’ contains no property of the same name as M.

M is a non-specialized call or construct signature and S’ contains a call or construct signature N where,

the signatures are of the same kind (call or construct),

the number of non-optional parameters in N is less than or equal to that of M,

N can be successfully instantiated in the context of M (section 3.8.5),

each parameter type in the instantiation of N is assignable to or from the corresponding parameter type in M for parameter positions that are present in both signatures, and

the result type of M is Void, or the result type of the instantiation of N is assignable to that of M.

M is a string index signature of type U and S’ contains a string index signature of a type that is assignable to U.

M is a numeric index signature of type U and S’ contains a string or numeric index signature of a type that is assignable to U.

When comparing call or construct signatures, parameter names are ignored and rest parameters correspond to an unbounded expansion of optional parameters of the rest parameter element type.


Note that specialized call and construct signatures (section 3.7.2.4) are not significant when determining assignment compatibility.

The assignment compatibility and subtyping rules differ only in that

the Any type is assignable to, but not a subtype of, all types, and

the primitive type Number is assignable to, but not a subtype of, all enum types.

The assignment compatibility rules imply that, when assigning values or passing parameters, optional properties must either be present and of a compatible type, or not be present at all. For example:

function foo(x: { id: number; name?: string; }) { }

foo({ id: 1234 }); // Ok
foo({ id: 1234, name: "hello" }); // Ok
foo({ id: 1234, name: false }); // Error, name of wrong type
foo({ name: "hello" }); // Error, id required but missing

Contextual Signature Instantiation
In sections 3.8.3 and 3.8.4, to determine whether a call or construct signature A is a subtype of or assignable to a call or construct signature B, A is instantiated in the context of B. If A is a non-generic signature, the result of this process is simply A. Otherwise, type arguments for A are inferred from B producing an instantiation of A that can be related to B:

Using the process described in 3.8.6, inferences for A’s type parameters are made from each parameter type in B to the corresponding parameter type in A for those parameter positions that are present in both signatures, where rest parameters correspond to an unbounded expansion of optional parameters of the rest parameter element type.

The inferred type argument for each type parameter is the best common type (section 3.10) of the set of inferences made for that type parameter.

Provided all inferred type arguments satisfy their corresponding type parameter constraints, the result is an instantiation of A with the inferred type arguments.

Otherwise, A cannot be instantiated in the context of B and the process is unsuccessful.

Given the declarations

var f: (x: string) => string[];
var g: <T>(x: T) => T[];

the assignment ‘f = g’ causes the signature of ‘g’ to be instantiated in the context of the signature of ‘f’, which causes inferences for ‘T’ to be made from the parameter type ‘string’ to the parameter type ‘T’,

ultimately producing an assignment compatible instantiation of ‘g’ with the type argument ‘string’.

Changing the example to

var f: (x: { a: string; b: number }) => {}[];
var g: <T>(x: { a: T; b: T }) => T[];

inferences for ‘T’ are now made from the parameter type ‘{ a: string; b: number }’ to the parameter type { a: T; b: T }’, leading to inferences of ‘string’ and ‘number’ for ‘T’. The best common type of those two types is the empty object type, which becomes the type argument for the resulting assignment compatible instantiation of ‘g’.

In the example

var f: <T>(x: T, y: T) => { x: T; y: T };
var g: <U, V>(x: U, y: V) => { x: U; y: V };

the assignment ‘f = g’ causes ‘T’ to be inferred for both ‘U’ and ‘V’, thus producing an assignment compatible instantiation of ‘g’. The reverse assignment ‘g = f’ leads to inferences of ‘U’ and ‘V’ for ‘T’, producing an instantiation of ‘f’ with the empty object type as an argument, and since an empty object type is not assignable to a type parameter, the assignment is an error.

Type Inference
In certain contexts, inferences for a given set of type parameters are made from a type S, in which those type parameters do not occur, to another type T, in which those type parameters do occur. Inferences consist of a set of candidate type arguments collected for each of the type parameters. The inference process recursively relates S and T to gather as many inferences as possible:

If T is one of the type parameters for which inferences are being made, S is added to the set of inferences for that type parameter.

Otherwise, if S and T are object types, then for each member M in T:

If M is a property and S contains a property N with the same name as M, inferences are made from the type of N to the type of M.

If M is a call signature, no other call signatures exist in T, exactly one call signature N exists in S, N is non-generic, and the number of required parameters in N is greater than or equal to that of M, then inferences are made from parameter types in N to parameter types in the same position in M, and from the return type of N to the return type of M.

If M is a construct signature, no other construct signatures exist in T, exactly one construct signature N exists in S, N is non-generic, and the number of required parameters in N is greater than or equal to that of M, then inferences are made from parameter types in N to parameter types in the same position in M, and from the return type of N to the return type of M.


If M is a string index signature and S contains a string index signature N, inferences are made from the type of N to the type of M.

If M is a numeric index signature and S contains a numeric index signature N, inferences are made from the type of N to the type of M.

Recursive Types
Classes and interfaces can reference themselves in their internal structure, in effect creating recursive types with infinite nesting. For example, the type

interface A { next: A; }

contains an infinitely nested sequence of ‘next’ properties. Types such as this are perfectly valid but require special treatment when determining type relationships. Specifically, when comparing types S and T for a given relationship (identity, subtype, or assignability), the relationship in question is assumed to be true for every directly or indirectly nested occurrence of the same S and the same T (where same means originating in the same declaration and, if applicable, having identical type arguments). For example, consider the identity relationship between ‘A’ above and ‘B’ below:

interface B { next: C; }

interface C { next: D; }

interface D { next: B; }

To determine whether ‘A’ and ‘B’ are identical, first the ‘next’ properties of type ‘A’ and ‘C’ are compared. That leads to comparing the ‘next’ properties of type ‘A’ and ‘D’, which leads to comparing the ‘next’ properties of type ‘A’ and ‘B’. Since ‘A’ and ‘B’ are already being compared this relationship is by definition true. That in turn causes the other comparisons to be true, and therefore the final result is true.

When this same technique is used to compare generic type references, two type references are considered the same when they originate in the same declaration and have identical type arguments.

In certain circumstances, generic types that directly or indirectly reference themselves in a recursive fashion can lead to infinite series of distinct instantiations. For example, in the type

interface List<T> {
data: T;
next: List<T>;
owner: List<List<T>>;
}

‘List<T>’ has a member ‘owner’ of type ‘List<List<T>>’, which has a member ‘owner’ of type ‘List<List<List<T>>>’, which has a member ‘owner’ of type ‘List<List<List<List<T>>>>’ and so on, ad infinitum. Since type relationships are determined structurally, possibly exploring the constituent types to their full depth, in order to determine type relationships involving infinitely expanding generic types it is necessary to introduce a mechanism that terminates the recursion.


Within a generic class or interface G, type references contained in declared or inherited members are classified as follows

A type reference without type arguments or with type arguments that do not reference any of G’s type parameters is classified as a closed type reference.

A type reference that references any of G’s type parameters in a type argument is classified as an open type reference.

A type reference which, directly or indirectly, references G through open type references and which contains a wrapped form of any of G’s type parameters in one or more type arguments is classified as an infinitely expanding type reference. A type is said to wrap a type parameter if it references the type parameter but isn’t simply the type parameter itself.

A type is said to originate in an infinitely expanding type reference if it was created (by instantiation of a generic class or interface) from an infinitely expanding type reference (in that generic class or interface).

When comparing two types S and T for identity (section 3.8.2), subtype (section 3.8.3), and assignability (section 3.8.4) relationships, if either type originates in an infinitely expanding type reference and the other is not the Any, Null, or Undefined type, S and T are not compared by the rules in the preceding sections. Instead, for the relationship to be considered true,

S and T must both be type references to the same named type, and

the relationship in question must be true for each corresponding pair of type arguments in the type argument lists of S and T.

Likewise, when making type inferences (section 3.8.6) from a type S to a type T, if either type originates in an infinitely expanding type reference, then

if S and T are type references to the same named type, inferences are made from each type argument in S to each type argument in T,

otherwise, no inferences are made.

Referring to the example above, the ‘List<T>’ type reference in the ‘next’ property is classified as an open type reference and the ‘List<List<T>>’ type reference in the ‘owner’ property is classified as an infinitely expanding type reference.

Widened Types
In several situations TypeScript infers types from context, alleviating the need for the programmer to explicitly specify types that appear obvious. For example

var name = "Steve";

infers the type of ‘name’ to be the String primitive type since that is the type of the value used to initialize it. When inferring the type of a variable, property or function result from an expression, the widened form

of the source type is used as the inferred type of the target. The widened form of a type is the type in which all occurrences of the Null and Undefined types have been replaced with the type any.

The following example shows the results of widening types to produce inferred variable types.

var a = null; // var a: any
var b = undefined; // var b: any
var c = { x: 0, y: null };   // var c: { x: number, y: any }
var d = [ null, undefined ]; // var d: any[]

Best Common Type
In some cases a best common type needs to be inferred from a set of types. In particular, return types of functions with multiple return statements and element types of array literals are found this way.

For an empty set of types, the best common type is an empty object type (the type {}).

For a non-empty set of types { T1, T2, …, Tn }, the best common type is the one Tx in the set that is a supertype of every Tn. It is possible that no such type exists or more than one such type exists, in which case the best common type is an empty object type.

4. Expressions

This chapter describes the manner in which TypeScript provides type inference and type checking for JavaScript expressions. TypeScript’s type analysis occurs entirely at compile-time and adds no run-time overhead to expression evaluation.

TypeScript’s typing rules define a type for every expression construct. For example, the type of the literal 123 is the Number primitive type, and the type of the object literal { a: 10, b: "hello" } is { a: number; b: string; }. The sections in this chapter describe these rules in detail.

In addition to type inference and type checking, TypeScript augments JavaScript expressions with the following constructs:

Optional parameter and return type annotations in function expressions.

Default parameter values and rest parameters in function expressions.

Arrow function expressions.

Super calls and member access.

Type assertions.

Unless otherwise noted in the sections that follow, TypeScript expressions and the JavaScript expressions generated from them are identical.

Values and References
Expressions are classified as values or references. References are the subset of expressions that are permitted as the target of an assignment. Specifically, references are combinations of identifiers (section 4.3), parentheses (section 4.7), and property accesses (section 4.10). All other expression constructs described in this chapter are classified as values.

The this Keyword
The type of this in an expression depends on the location in which the reference takes place:

In a constructor, instance member function, instance member accessor, or instance member variable initializer, this is of the class instance type of the containing class.

In a static member function or static member accessor, the type of this is the constructor function type of the containing class.

In a function declaration or a standard function expression, this is of type Any.

In the global module, this is of type Any.

In all other contexts it is a compile-time error to reference this.


In the body of an arrow function expression, references to this are rewritten in the generated JavaScript code, as described in section 4.9.2.

Identifiers
When an expression is an Identifier, the expression refers to the most nested module, class, enum, function, variable, or parameter with that name whose scope (section 2.4) includes the location of the reference. The type of such an expression is the type associated with the referenced entity:

For a module, the object type associated with the module instance.

For a class, the constructor type associated with the constructor function object.

For an enum, the object type associated with the enum object.

For a function, the function type associated with the function object.

For a variable, the type of the variable.

For a parameter, the type of the parameter.

An identifier expression that references a variable or parameter is classified as a reference. An identifier expression that references any other kind of entity is classified as a value (and therefore cannot be the target of an assignment).

Literals
Literals are typed as follows:

The type of the null literal is the Null primitive type.

The type of the literals true and false is the Boolean primitive type.

The type of numeric literals is the Number primitive type.

The type of string literals is the String primitive type.

The type of regular expression literals is the global interface type ‘RegExp’.

Object Literals
Object literals are extended to support type annotations in get and set accessors.

PropertyAssignment: ( Modified )
PropertyName : AssignmentExpression
PropertyName CallSignature { FunctionBody }
GetAccessor
SetAccessor


GetAccessor:
get PropertyName ( ) TypeAnnotationopt { FunctionBody }

SetAccessor:
set PropertyName ( Identifier TypeAnnotationopt ) { FunctionBody }

The type of an object literal is an object type with the set of properties specified by the property assignments in the object literal. A get and set accessor may specify the same property name, but otherwise it is an error to specify multiple property assignments for the same property.

A property assignment of the form

PropertyName CallSignature { FunctionBody }

is simply shorthand for

PropertyName : function CallSignature { FunctionBody }

Each property assignment in an object literal is processed as follows:

If the object literal is contextually typed and the contextual type contains a property with a matching name, the property assignment is contextually typed by the type of that property.

Otherwise, if the object literal is contextually typed, the contextual type contains a numeric index signature, and the property assignment specifies a numeric property name, the property assignment is contextually typed by the type of the numeric index signature.

Otherwise, if the object literal is contextually typed and the contextual type contains a string index signature, the property assignment is contextually typed by the type of the string index signature.

Otherwise, the property assignment is processed without a contextual type.

The type of a property introduced by a property assignment of the form Name : Expr is the widened form (section 3.9) of the type of Expr.

A get accessor declaration is processed in the same manner as an ordinary function declaration (section 6.1) with no parameters. A set accessor declaration is processed in the same manner as an ordinary function declaration with a single parameter and a Void return type. When both a get and set accessor is declared for a property:

If both accessors include type annotations, the specified types must be identical.

If only one accessor includes a type annotation, the other behaves as if it had the same type annotation.


If neither accessor includes a type annotation, the inferred return type of the get accessor becomes the parameter type of the set accessor.

If a get accessor is declared for a property, the return type of the get accessor becomes the type of the property. If only a set accessor is declared for a property, the parameter type (which may be type Any if no type annotation is present) of the set accessor becomes the type of the property.

When an object literal is contextually typed by a type that includes a string index signature of type T, the resulting type of the object literal includes a string index signature with the widened form of the best common type of T and the types of the properties declared in the object literal. Likewise, when an object literal is contextually typed by a type that includes a numeric index signature of type T, the resulting type of the object literal includes a numeric index signature with the widened form of the best common type of T and the types of the numerically named properties (section 3.7.4) declared in the object literal.

Array Literals
In the absence of a contextual type, the type of an array literal is C[], where C is the Undefined type (section 3.2.6) if the array literal is empty, or the best common type of the element expressions if the array literal is not empty.

When an array literal is contextually typed (section 4.19) by an object type containing a numeric index signature of type T, each element expression is contextually typed by T and the type of the array literal is the best common type of T and the types of the element expressions.

Parentheses
A parenthesized expression

( Expression )

has the same type and classification as the Expression itself. Specifically, if the contained expression is classified as a reference, so is the parenthesized expression.

The super Keyword
The super keyword can be used in expressions to reference base class properties and the base class constructor.

CallExpression: ( Modified )

super ( ArgumentListopt )
super . IdentifierName

Super Calls
Super calls consist of the keyword super followed by an argument list enclosed in parentheses. Super calls are only permitted in constructors of derived classes, as described in section 8.3.2.

A super call invokes the constructor of the base class on the instance referenced by this. A super call is

processed as a function call (section 4.12) using the construct signatures of the base class constructor function type as the initial set of candidate signatures for overload resolution. Type arguments cannot be explicitly specified in a super call. If the base class is a generic class, the type arguments used to process a super call are always those specified in the extends clause that references the base class.

The type of a super call expression is Void.

The JavaScript code generated for a super call is specified in section 8.6.2.

Super Property Access
A super property access consists of the keyword super followed by a dot and an identifier. Super property accesses are used to access base class member functions from derived classes and are permitted in contexts where this (section 4.2) references a derived class instance or a derived class constructor function. Specifically:

In a constructor, instance member function, instance member accessor, or instance member variable initializer where this references a derived class instance, a super property access is permitted and must specify a public instance member function of the base class.

In a static member function or static member accessor where this references the constructor function object of a derived class, a super property access is permitted and must specify a public static member function of the base class.

Super property accesses are not permitted in other contexts, and it is not possible to access other kinds of base class members in a super property access. Note that super property accesses are not permitted inside standard function expressions nested in the above constructs because this is of type Any in such function expressions.

Super property accesses are typically used to access overridden base class member functions from derived class member functions. For an example of this, see section 8.4.2.

The JavaScript code generated for a super property access is specified in section 8.6.2.

Function Expressions
Function expressions are extended from JavaScript to optionally include parameter and return type annotations, and a new compact form, called arrow function expressions, is introduced.

FunctionExpression: ( Modified )
function Identifieropt CallSignature { FunctionBody }

AssignmentExpression: ( Modified )

ArrowFunctionExpression

ArrowFunctionExpression:
ArrowFormalParameters => Block
ArrowFormalParameters => AssignmentExpression


ArrowFormalParameters:
CallSignature
Identifier

The terms standard function expression and arrow function expression are used to refer to the FunctionExpression and ArrowFunctionExpression forms respectively. When referring to either, the generic term function expression is used.

The type of a function expression is an object type containing a single call signature with parameter and return types inferred from the function expression’s signature and body.

The descriptions of function declarations provided in section 6.1 apply to function expressions as well, except that function expressions do not support overloading.

Standard Function Expressions
Standard function expressions are function expressions written with the function keyword. The type of this in a standard function expression is the Any type.

Standard function expressions are transformed to JavaScript in the same manner as function declarations (see section 6.5).

Arrow Function Expressions
TypeScript supports arrow function expressions, a new feature planned for ECMAScript 6. Arrow function expressions are a compact form of function expressions that omit the function keyword and have lexical scoping of this.

An arrow function expression of the form

ArrowFormalParameters => AssignmentExpression

is exactly equivalent to

ArrowFormalParameters => { return AssignmentExpression ; }

Furthermore, arrow function expressions of the forms

Identifier => Block
Identifier => AssignmentExpression

are exactly equivalent to

( Identifier ) => Block
( Identifier ) => AssignmentExpression

Thus, the following examples are all equivalent:

(x) => { return Math.sin(x); }
(x) => Math.sin(x)
x => { return Math.sin(x); }

x => Math.sin(x)

A function expression using the function keyword introduces a new dynamically bound this, whereas an arrow function expression preserves the this of its enclosing context. Arrow function expressions are particularly useful for writing callbacks, which otherwise often have an undefined or unexpected this.

In the example

class Messenger {
message = "Hello World";
start() {
setTimeout(() => alert(this.message), 3000);
}
};
var messenger = new Messenger();
messenger.start();

the use of an arrow function expression causes the callback to have the same this as the surrounding ‘start’ method. Writing the callback as a standard function expression it becomes necessary to manually arrange access to the surrounding this, for example by copying it into a local variable:

class Messenger {
message = "Hello World";
start() {
var _this = this;
setTimeout(function() { alert(_this.message); }, 3000);
}
};
var messenger = new Messenger();
messenger.start();

The TypeScript compiler applies this type of transformation to rewrite arrow function expressions into standard function expressions.

A construct of the form

< Identifier > ( ParamList ) => { ... }

could be parsed as an arrow function expression with a type parameter or a type assertion applied to an arrow function with no type parameter. It is resolved as the former, but parentheses can be used to select the latter meaning:

< Identifier > ( ( ParamList ) => { ... } )

Contextually Typed Function Expressions
Function expressions with no type parameters and no parameter or return type annotations (but possibly with optional parameters and default parameter values) are contextually typed in certain circumstances, as described in section 4.19.


When a function expression is contextually typed by a function type T, the function expression is processed as if it had explicitly specified parameter type annotations as they exist in T. Parameters are matched by position and need not have matching names. If the function expression has fewer parameters than T, the additional parameters in T are ignored. If the function expression has more parameters than T, the additional parameters are all considered to have type Any.

Furthermore, when a function expression is contextually typed by a function type T, expressions in contained return statements (section 5.7) are contextually typed by T’s return type.

Property Access
A property access uses either dot notation or bracket notation. A property access expression is always classified as a reference.

A property access uses an object’s apparent type (section 3.8.1) to determine its properties. Furthermore, in a property access, an object’s apparent type includes the properties that originate in the ‘Object’ or ‘Function’ global interface types, as described in section 3.3.

A dot notation property access of the form

ObjExpr . Name

where ObjExpr is an expression and Name is an identifier (including, possibly, a reserved word), is used to access the property with the given name on the given object. A dot notation property access is processed as follows at compile-time:

If ObjExpr is of type Any, any Name is permitted and the property access is of type Any.

Otherwise, if Name denotes a property member in the apparent type of ObjExpr, the property access is of the type of that property.

Otherwise, the property access is invalid and a compile-time error occurs.

A bracket notation property access of the form

ObjExpr [ IndexExpr ]

where ObjExpr and IndexExpr are expressions, is used to access the property with the name computed by the index expression on the given object. A bracket notation property access is processed as follows at compile-time:

If IndexExpr is a string literal or a numeric literal and ObjExpr’s apparent type has a property with the name given by that literal (converted to its string representation in the case of a numeric literal), the property access is of the type of that property.

Otherwise, if ObjExpr’s apparent type has a numeric index signature and IndexExpr is of type Any, the Number primitive type, or an enum type, the property access is of the type of that index signature.


Otherwise, if ObjExpr’s apparent type has a string index signature and IndexExpr is of type Any, the String or Number primitive type, or an enum type, the property access is of the type of that index signature.

Otherwise, if IndexExpr is of type Any, the String or Number primitive type, or an enum type, the property access is of type Any.

Otherwise, the property access is invalid and a compile-time error occurs.

The new Operator
A new operation has one of the following forms:

new ConstructExpr

new ConstructExpr ( Args )

where ConstructExpr is an expression and Args is an argument list. The first form is equivalent to supplying an empty argument list. ConstructExpr must be of type Any or of an object type with one or more construct or call signatures. The operation is processed as follows at compile-time:

If ConstructExpr is of type Any, Args can be any argument list and the result of the operation is of type Any.

If ConstructExpr’s apparent type (section 3.8.1) is an object type with one or more construct signatures, the expression is processed in the same manner as a function call, but using the construct signatures as the initial set of candidate signatures for overload resolution. The result type of the function call becomes the result type of the operation.

If ConstructExpr’s apparent type is an object type with no construct signatures but one or more call signatures, the expression is processed as a function call. A compile-time error occurs if the result of the function call is not Void. The type of the result of the operation is Any.

Function Calls
Function calls are extended from JavaScript to optionally include type arguments.

Arguments: ( Modified )
TypeArgumentsopt ( ArgumentListopt )

A function call takes one of the forms

FuncExpr ( Args )

FuncExpr < TypeArgs > ( Args )


where FuncExpr is an expression of a function type or of type Any, TypeArgs is a type argument list (section 3.4.2), and Args is an argument list.

If FuncExpr is of type Any, or of an object type that has no call signatures but is a subtype of the Function interface, the call is an untyped function call. In an untyped function call no TypeArgs are permitted, Args can be any argument list, no contextual types are provided for the argument expressions, and the result is always of type Any.

If FuncExpr’s apparent type (section 3.8.1) is a function type, the call is a typed function call. TypeScript employs overload resolution in typed function calls in order to support functions with multiple call signatures. Furthermore, TypeScript may perform type argument inference to automatically determine type arguments in generic function calls.

Overload Resolution
The purpose of overload resolution in a function call is to ensure that at least one signature is applicable, to provide contextual types for the arguments, and to determine the result type of the function call, which could differ between the multiple applicable signatures. Overload resolution has no impact on the run-time behavior of a function call. Since JavaScript doesn’t support function overloading, all that matters at run-time is the name of the function.

The compile-time processing of a typed function call consists of the following steps:

First, a list of candidate signatures is constructed from the call signatures in the function type in declaration order. For classes and interfaces, inherited signatures are considered to follow explicitly declared signatures in extends clause order.

A non-generic signature is a candidate when

the function call has no type arguments, and

the signature is applicable with respect to the argument list of the function call.

A generic signature is a candidate in a function call without type arguments when

type inference (section 4.12.2) succeeds in inferring a list of type arguments,

the inferred type arguments satisfy their constraints, and

once the inferred type arguments are substituted for their associated type parameters, the signature is applicable with respect to the argument list of the function call.

A generic signature is a candidate in a function call with type arguments when

The signature has the same number of type parameters as were supplied

in the type argument list,

the type arguments satisfy their constraints, and

once the type arguments are substituted for their associated type parameters, the signature is applicable with respect to the argument list of the function call.

If the list of candidate signatures is empty, the function call is an error.

Otherwise, if the candidate list contains one or more signatures for which the type of each argument expression is a subtype of each corresponding parameter type, the return type of the first of those signatures becomes the return type of the function call.

Otherwise, the return type of the first signature in the candidate list becomes the return type of the function call.

A signature is said to be an applicable signature with respect to an argument list when

the number of arguments is not less than the number of required parameters,

the number of arguments is not greater than the number of parameters, and

for each argument expression e and its corresponding parameter P, when e is contextually typed (section 4.19) by the type of P, no errors ensue and the type of e is assignable to (section 3.8.4) the type of P.

Type Argument Inference
Given a signature < T1 , T2 , … , Tn > ( p1 : P1 , p2 : P2 , … , pm : Pm ), where each parameter type P references zero or more of the type parameters T, and an argument list ( e1 , e2 , … , em ), the task of type argument inference is to find a set of type arguments A1…An to substitute for T1…Tn such that the argument list becomes an applicable signature.

The inferred type argument for a particular type parameter is the widened form (section 3.9) of the best common type (section 3.10) of a set of candidate types. In order to compute candidate types, the argument list is processed as follows:

Initially all inferred type arguments are considered unfixed with an empty set of candidate types.

Proceeding from left to right, each argument expression e is inferentially typed by its corresponding parameter type P, possibly causing some inferred type arguments to become fixed, and candidate type inferences (section 3.8.6) are made for unfixed inferred type arguments from the type computed for e to P.

The process of inferentially typing an expression e by a type T is the same as that of contextually typing e by T, with the following exceptions:


Where expressions contained within e would be contextually typed, they are instead inferentially typed.

Where a contextual type would be included in a candidate set for a best common type (such as when inferentially typing an object or array literal), an inferential type is not.

When a function expression is inferentially typed (section 4.9.3) and a type assigned to a parameter in that expression references type parameters for which inferences are being made, the corresponding inferred type arguments to become fixed and no further candidate inferences are made for them.

If e is an expression of a function type that contains exactly one generic call signature and no other members, and T is a function type with exactly one non-generic call signature and no other members, then any inferences made for type parameters referenced by the parameters of T’s call signature are fixed and, if e’s call signature can successfully be instantiated in the context of T’s call signature (section 3.8.5), e’s type is changed to a function type with that instantiated signature.

In the example

function choose<T>(x: T, y: T): T {
return Math.random() < 0.5 ? x : y;
}

var x = choose("Five", 5);

inferences for ‘T’ in the call to ‘choose’ are made as follows: For the first parameter, an inference is made from type ‘string’ to ‘T’. For the second parameter, an inference is made from type ‘number’ to ‘T’. Since the best common type (section 3.10) of ‘string’ and ‘number’ is the empty object type, the call to ‘choose’ is equivalent to

var x = choose<{}>("Five", 5);

and the resulting type of ‘x’ is therefore the empty object type. Note that had both arguments been of type ‘string’ or ‘number’, ‘x’ would have been of that type.

In the example

function map<T, U>(a: T[], f: (x: T) => U): U[] {
var result: U[] = [];
for (var i = 0; i < a.length; i++) result.push(f(a[i]));
return result;
}

var names = ["Peter", "Paul", "Mary"];
var lengths = map(names, s => s.length);


inferences for ‘T’ and ‘U’ in the call to ‘map’ are made as follows: For the first parameter, inferences are made from the type ‘string[]’ (the type of ‘names’) to the type ‘T[]’, inferring ‘string’ for ‘T’. For the second parameter, inferential typing of the arrow expression ‘s => s.length’ causes ‘T’ to become fixed such that the inferred type ‘string’ can be used for the parameter ‘s’. The return type of the arrow expression can then be determined, and inferences are made from the type ‘(s: string) => number’ to the type ‘(x: T) => U’, inferring ‘number’ for ‘U’. Thus the call to ‘map’ is equivalent to

var lengths = map<string, number>(names, s => s.length);

and the resulting type of ‘lengths’ is therefore ‘number[]’.

In the example

function zip<S, T, U>(x: S[], y: T[], combine: (x: S) => (y: T) => U): U[] {
var len = Math.max(x.length, y.length);
var result: U[] = [];
for (var i = 0; i < len; i++) result.push(combine(x[i])(y[i]));
return result;
}

var names = ["Peter", "Paul", "Mary"];
var ages = [7, 9, 12];
var pairs = zip(names, ages, s => n => ({ name: s, age: n }));

inferences for ‘S’, ‘T’ and ‘U’ in the call to ‘zip’ are made as follows: Using the first two parameters, inferences of ‘string’ for ‘S’ and ‘number’ for ‘T’ are made. For the third parameter, inferential typing of the outer arrow expression causes ‘S’ to become fixed such that the inferred type ‘string’ can be used for the parameter ‘s’. When a function expression is inferentially typed, its return expression(s) are also inferentially typed. Thus, the inner arrow function is inferentially typed, causing ‘T’ to become fixed such that the inferred type ‘number’ can be used for the parameter ‘n’. The return type of the inner arrow function can then be determined, which in turn determines the return type of the function returned from the outer arrow function, and inferences are made from the type ‘(s: string) => (n: number) => { name: string; age: number }’ to the type ‘(x: S) => (y: T) => R’, inferring ‘{ name: string; age: number }’ for ‘R’. Thus the call to ‘zip’ is equivalent to

var pairs = zip<string, number, { name: string; age: number }>(
names, ages, s => n => ({ name: s, age: n }));

and the resulting type of ‘pairs’ is therefore ‘{ name: string; age: number }[]’.

Grammar Ambiguities
The inclusion of type arguments in the Arguments production (section 4.12) gives rise to certain ambiguities in the grammar for expressions. For example, the statement

f(g<A, B>(7));


could be interpreted as a call to ‘f’ with two arguments, ‘g < A’ and ‘B > (7)’. Alternatively, it could be interpreted as a call to ‘f’ with one argument, which is a call to a generic function ‘g’ with two type arguments and one regular argument.

The grammar ambiguity is resolved as follows: In a context where one possible interpretation of a sequence of tokens is an Arguments production, if the initial sequence of tokens forms a syntactically correct TypeArguments production and is followed by a ‘(‘ token, then the sequence of tokens is processed an Arguments production, and any other possible interpretation is discarded. Otherwise, the sequence of tokens is not considered an Arguments production.

This rule means that the call to ‘f’ above is interpreted as a call with one argument, which is a call to a generic function ‘g’ with two type arguments and one regular argument. However, the statements

f(g < A, B > 7);

f(g < A, B > +(7));

are both interpreted as calls to ‘f’ with two arguments.

Type Assertions
TypeScript extends the JavaScript expression grammar with the ability to assert a type for an expression:

UnaryExpression: ( Modified )

< Type > UnaryExpression

A type assertion expression consists of a type enclosed in < and > followed by a unary expression. Type assertion expressions are purely a compile-time construct. Type assertions are not checked at run-time and have no impact on the emitted JavaScript (and therefore no run-time cost). The type and the enclosing < and > are simply removed from the generated code.

In a type assertion expression of the form < T > e, e is contextually typed (section 4.19) by T and the resulting type of e is required to be assignable to or from T, or otherwise a compile-time error occurs. The type of the result is T.

Type assertions check for assignment compatibility in both directions. Thus, type assertions allow type conversions that might be correct, but aren’t known to be correct. In the example

class Shape { ... }

class Circle extends Shape { ... }

function createShape(kind: string): Shape {
if (kind === "circle") return new Circle();
...
}

var circle = <Circle> createShape("circle");


the type annotations indicate that the ‘createShape’ function might return a ‘Circle’ (because ‘Circle’ is a subtype of ‘Shape’), but isn’t known to do so (because its return type is ‘Shape’). Therefore, a type assertion is needed to treat the result as a ‘Circle’.

As mentioned above, type assertions are not checked at run-time and it is up to the programmer to guard against errors, for example using the instanceof operator:

var shape = createShape(shapeKind);
if (shape instanceof Circle) {
var circle = <Circle> shape;
...
}

Unary Operators
The subsections that follow specify the compile-time processing rules of the unary operators. In general, if the operand of a unary operator does not meet the stated requirements, a compile-time error occurs and the result of the operation defaults to type Any in further processing.

The ++ and -- operators
These operators, in prefix or postfix form, require their operand to be of type Any, the Number primitive type, or an enum type, and classified as a reference (section 4.1). They produce a result of the Number primitive type.

The +, –, and ~ operators
These operators permit their operand to be of any type and produce a result of the Number primitive type.

The unary + operator can conveniently be used to convert a value of any type to the Number primitive type:

function getValue() { ... }

var n = +getValue();

The example above converts the result of ‘getValue()’ to a number if it isn’t a number already. The type inferred for ‘n’ is the Number primitive type regardless of the return type of ‘getValue’.

The ! operator
The ! operator permits its operand to be of any type and produces a result of the Boolean primitive type.

Two unary ! operators in sequence can conveniently be used to convert a value of any type to the Boolean primitive type:

function getValue() { ... }

var b = !!getValue();


The example above converts the result of ‘getValue()’ to a Boolean if it isn’t a Boolean already. The type inferred for ‘b’ is the Boolean primitive type regardless of the return type of ‘getValue’.

The delete Operator
The ‘delete’ operator takes an operand of any type and produces a result of the Boolean primitive type.

The void Operator
The ‘void’ operator takes an operand of any type and produces the value ‘undefined’. The type of the result is the Undefined type (3.2.6).

The typeof Operator
The ‘typeof’ operator takes an operand of any type and produces a value of the String primitive type. In positions where a type is expected, ‘typeof’ can also be used in a type query (section 3.6.3) to produce the type of an expression.

var x = 5;
var y = typeof x; // Use in an expression
var z: typeof x; // Use in a type query

In the example above, ‘x’ is of type ‘number’, ‘y’ is of type ‘string’ because when used in an expression, ‘typeof’ produces a value of type string (in this case the string “number”), and ‘z’ is of type ‘number’ because when used in a type query, ‘typeof’ obtains the type of an expression.

Binary Operators
The subsections that follow specify the compile-time processing rules of the binary operators. In general, if the operands of a binary operator do not meet the stated requirements, a compile-time error occurs and the result of the operation defaults to type any in further processing. Tables that summarize the compile-time processing rules for operands of the Any type, the Boolean, Number, and String primitive types, and all object types and type parameters (the Object column in the tables) are provided.

The *, /, %, –, <<, >>, >>>, &, ^, and | operators
These operators require their operands to be of type Any, the Number primitive type, or an enum type. Operands of an enum type are treated as having the primitive type Number. If one operand is the null or undefined value, it is treated as having the type of the other operand. The result is always of the Number primitive type.



Any

Boolean

Number

String

Object

Any

Number



Number





Boolean











Number

Number



Number





String











Object













The + operator
The binary + operator requires both operands to be of the Number primitive type or an enum type, or at least one of the operands to be of type Any or the String primitive type. Operands of an enum type are treated as having the primitive type Number. If one operand is the null or undefined value, it is treated as having the type of the other operand. If both operands are of the Number primitive type, the result is of the Number primitive type. If one or both operands are of the String primitive type, the result is of the String primitive type. Otherwise, the result is of type Any.



Any

Boolean

Number

String

Object

Any

Any

Any

Any

String

Any

Boolean

Any





String



Number

Any



Number

String



String

String

String

String

String

String

Object

Any





String




A value of any type can converted to the String primitive type by adding an empty string:

function getValue() { ... }

var s = getValue() + "";

The example above converts the result of ‘getValue()’ to a string if it isn’t a string already. The type inferred for ‘s’ is the String primitive type regardless of the return type of ‘getValue’.

The <, >, <=, >=, ==, !=, ===, and !== operators
These operators require one operand type to be identical to or a subtype of the other operand type. The result is always of the Boolean primitive type.



Any

Boolean

Number

String

Object

Any

Boolean

Boolean

Boolean

Boolean

Boolean

Boolean

Boolean

Boolean







Number

Boolean



Boolean





String

Boolean





Boolean



Object

Boolean







Boolean



The instanceof operator
The instanceof operator requires the left operand to be of type Any, an object type, or a type parameter type, and the right operand to be of type Any or a subtype of the ‘Function’ interface type. The result is always of the Boolean primitive type.

Note that object types containing one or more call or construct signatures are automatically subtypes of the ‘Function’ interface type, as described in section 3.3.

The in operator
The in operator requires the left operand to be of type Any, the String primitive type, or the Number primitive type, and the right operand to be of type Any, an object type, or a type parameter type. The result is always of the Boolean primitive type.

The && operator
The && operator permits the operands to be of any type and produces a result of the same type as the second operand.



Any

Boolean

Number

String

Object

Any

Any

Boolean

Number

String

Object

Boolean

Any

Boolean

Number

String

Object

Number

Any

Boolean

Number

String

Object

String

Any

Boolean

Number

String

Object

Object

Any

Boolean

Number

String

Object



The || operator
The || operator permits the operands to be of any type.

If the || expression is contextually typed (section 4.19), the operands are contextually typed by the same type and the result is of the best common type (section 3.10) of the contextual type and the two operand types.

If the || expression is not contextually typed, the right operand is contextually typed by the type of the left operand and the result is of the best common type of the two operand types.



Any

Boolean

Number

String

Object

Any

Any

Any

Any

Any

Any

Boolean

Any

Boolean

{ }

{ }

{ }

Number

Any

{ }

Number

{ }

{ }

String

Any

{ }

{ }

String

{ }

Object

Any

{ }

{ }

{ }

Object



The Conditional Operator
In a conditional expression of the form

Cond ? Expr1 : Expr2

the Cond expression may be of any type.

If the conditional expression is contextually typed (section 4.19), Expr1 and Expr2 are contextually typed by the same type and the result is of the best common type (section 3.10) of the contextual type and the types of Expr1 and Expr2. An error occurs if the best common type is not identical to at least one of the three candidate types.

If the conditional expression is not contextually typed, the result is of the best common type of the types of Expr1 and Expr2. An error occurs if the best common type is not identical to at least one of the two candidate types.

Assignment Operators
An assignment of the form

VarExpr = ValueExpr

requires VarExpr to be classified as a reference (section 4.1). ValueExpr is contextually typed (section 4.19) by the type of VarExpr, and the type of ValueExpr must be assignable to (section 3.8.4) the type of VarExpr, or otherwise a compile-time error occurs. The result is a value with the type of ValueExpr.

A compound assignment of the form

VarExpr Operator= ValueExpr

where Operator= is of the compound assignment operators

*= /= %= += -= <<= >>= >>>= &= ^= |=

is subject to the same requirements, and produces a value of the same type, as the corresponding non-compound operation. A compound assignment furthermore requires VarExpr to be classified as a reference (section 4.1) and the type of the non-compound operation to be assignable to the type of VarExpr.

The Comma Operator
The comma operator permits the operands to be of any type and produces a result that is of the same

type as the second operand.

Contextually Typed Expressions
In certain situations, parameter and return types of function expressions are automatically inferred from the contexts in which the function expressions occur. For example, given the declaration

var f: (s: string) => string;

the assignment

f = function(s) { return s.toLowerCase(); }

infers the type of the ‘s’ parameter to be the String primitive type even though there is no type annotation to that effect. The function expression is said to be contextually typed by the variable to which it is being assigned. Contextual typing occurs in the following situations:

In variable and member declarations with a type annotation and an initializer, the initializer expression is contextually typed by the type of the variable or property.

In return statements, if the containing function includes a return type annotation, return expressions are contextually typed by that return type. Otherwise, if the containing function is contextually typed by a type T, return expressions are contextually typed by T’s return type.

In typed function calls, argument expressions are contextually typed by their parameter types.

In type assertions, the expression is contextually typed by the indicated type.

In || operator expressions without a contextual type, the right hand expression is contextually typed by the type of the left hand expression.

In assignment expressions, the right hand expression is contextually typed by the type of the left hand expression.

In contextually typed object literals, property assignments are contextually typed by their property types.

In contextually typed array literals, element expressions are contextually typed by the array element type.

In contextually typed || operator expressions, the operands are contextually typed as well.

In contextually typed conditional operator expressions, the operands are contextually typed as well.

Contextual typing of an expression e by a type T proceeds as follows:


If e is an ObjectLiteral and T is an object type, e is processed with the contextual type T, as described in section 4.5.

If e is an ArrayLiteral and T is an object type with a numeric index signature, e is processed with the contextual type T, as described in section 4.6.

If e is a FunctionExpression or ArrowFunctionExpression with no type parameters and no parameter or return type annotations, T is a function type with exactly one call signature and T’s call signature is non-generic, then any inferences made for type parameters referenced by the parameters of T’s call signature are fixed (section 4.12.2) and e is processed with the contextual type T, as described in section 4.9.3.

If e is a || operator expression and T is an object type, e is processed with the contextual type T, as described in section 4.15.7.

If e is a conditional operator expression and T is an object type, e is processed with the contextual type T, as described in section 4.16.

Otherwise, e is processed without a contextual type.

The rules above require expressions be of the exact syntactic forms specified in order to be processed as contextually typed constructs. For example, given the declaration of the variable ‘f’ above, the assignment

f = s => s.toLowerCase();

causes the function expression to be contextually typed, inferring the String primitive type for ‘s’. However, simply enclosing the construct in parentheses

f = (s => s.toLowerCase());

causes the function expression to be processed without a contextual type, now inferring ‘s’ and the result of the function to be of type Any as no type annotations are present.

In the following example

interface EventObject {
x: number;
y: number;
}

interface EventHandlers {
mousedown?: (event: EventObject) => void;
mouseup?: (event: EventObject) => void;
mousemove?: (event: EventObject) => void;
}


function setEventHandlers(handlers: EventHandlers) { ... }

setEventHandlers({
mousedown: e => { startTracking(e.x, e.y); },
mouseup: e => { endTracking(); }
});

the object literal passed to ‘setEventHandlers’ is contextually typed to the ‘EventHandlers’ type. This causes the two property assignments to be contextually typed to the unnamed function type ‘(event: EventObject) => void’, which in turn causes the ‘e’ parameters in the arrow function expressions to automatically be typed as ‘EventObject’.

5. Statements

This chapter describes the static type checking TypeScript provides for JavaScript statements. TypeScript itself does not introduce any new statement constructs.

Variable Statements
Variable statements are extended to include optional type annotations.

VariableDeclaration: ( Modified )
Identifier TypeAnnotationopt Initialiseropt

VariableDeclarationNoIn: ( Modified )
Identifier TypeAnnotationopt InitialiserNoInopt

TypeAnnotation:
: Type

A variable declaration introduces a variable with the given name in the containing declaration space. The type associated with a variable is determined as follows:

If the declaration includes a type annotation, the stated type becomes the type of the variable. If an initializer is present, the initializer expression is contextually typed (see section 4.19) by the stated type and must be assignable to the stated type, or otherwise a compile-time error occurs.

If the declaration includes an initializer but no type annotation, the widened type (see section 3.9) of the initializer expression becomes the type of the property.

If the declaration includes neither a type annotation nor an initializer, the type of the variable becomes the Any type.

TODO: Specify what type results when a variable initializer directly or indirectly references the variable it is initializing.

Multiple declarations for the same variable name in the same declaration space are permitted, provided that each declaration associates the same type with the variable.

Below are some examples of variable declarations and their associated types.

var a; // any
var b: number; // number
var c = 1; // number
var d = { x: 1, y: "hello" }; // { x: number; y: string; }
var e: any = "test"; // any

The following is permitted because all declarations of the single variable ‘x’ associate the same type

(Number) with ‘x’.

var x = 1;
var x: number;
if (x == 1) {
var x = 2;
}

In the following example, all five variables are of the same type, ‘{ x: number; y: number; }’.

interface Point { x: number; y: number; }

var a = { x: 0, y: <number> undefined };
var b: Point = { x: 0; y: undefined };
var c = <Point> { x: 0, y: undefined };
var d: { x: number; y: number; } = { x: 0, y: undefined };
var e = <{ x: number; y: number; }> { x: 0, y: undefined };

If, Do, and While Statements
Expressions controlling ‘if’, ‘do’, and ‘while’ statements can be of any type (and not just type Boolean).

For Statements
Variable declarations in ‘for’ statements are extended in the same manner as variable declarations in variable statements (section 5.1).

For-In Statements
In a ‘for-in’ statement of the form

for (Var in Expr) Statement

Var must be an expression classified as a reference of type Any or the String primitive type, and Expr must be an expression of type Any, an object type, or a type parameter type.

In a ‘for-in’ statement of the form

for (var VarDecl in Expr) Statement

VarDecl must be a variable declaration without a type annotation that declares a variable of type Any, and Expr must be an expression of type Any, an object type, or a type parameter type.

Continue Statements
A ‘continue’ statement is required to be nested, directly or indirectly (but not crossing function boundaries), within an iteration (‘do’, ‘while’, ‘for’, or ‘for-in’) statement. When a ‘continue’ statement includes a target label, that target label must appear in the label set of an enclosing (but not crossing function boundaries) iteration statement.


Break Statements
A ‘break’ statement is required to be nested, directly or indirectly (but not crossing function boundaries), within an iteration (‘do’, ‘while’, ‘for’, or ‘for-in’) or ‘switch’ statement. When a ‘break’ statement includes a target label, that target label must appear in the label set of an enclosing (but not crossing function boundaries) statement.

Return Statements
It is an error for a ‘return’ statement to occur outside a function body. Specifically, ‘return’ statements are not permitted at the global level or in module bodies.

A ‘return’ statement without an expression returns the value ‘undefined’ and is permitted in the body of any function, regardless of the return type of the function.

When a ‘return’ statement includes an expression, if the containing function includes a return type annotation, the return expression is contextually typed (section 4.19) by that return type and must be of a type that is assignable to the return type. Otherwise, if the containing function is contextually typed by a type T, Expr is contextually typed by T’s return type.

In a function implementation without a return type annotation, the return type is inferred from the ‘return’ statements in the function body, as described in section 6.3.

In the example

function f(): (x: string) => number {
return s => s.length;
}

the arrow expression in the ‘return’ statement is contextually typed by the return type of ‘f’, thus giving type ‘string’ to ‘s’.

With Statements
Use of the ‘with’ statement in TypeScript is an error, as is the case in ECMAScript 5’s strict mode. Furthermore, within the body of a ‘with’ statement, TypeScript considers every identifier occurring in an expression (section 4.3) to be of the Any type regardless of its declared type. Because the ‘with’ statement puts a statically unknown set of identifiers in scope in front of those that are statically known, it is not possible to meaningfully assign a static type to any identifier.

Switch Statements
In a ‘switch’ statement, each ‘case’ expression must be of a type that is assignable to or from (section 3.8.4) the type of the ‘switch’ expression.

Throw Statements
The expression specified in a ‘throw’ statement can be of any type.


Try Statements
The variable introduced by a ‘catch’ clause of a ‘try’ statement is always of type Any. It is not possible to include a type annotation in a ‘catch’ clause.

6. Functions

TypeScript extends JavaScript functions to include type parameters, parameter and return type annotations, overloads, default parameter values, and rest parameters.

Function Declarations
Function declarations consist of an optional set of function overloads followed by an actual function implementation.

FunctionDeclaration: ( Modified )
FunctionOverloadsopt FunctionImplementation

FunctionOverloads:
FunctionOverload
FunctionOverloads FunctionOverload

FunctionOverload:
function Identifier CallSignature ;

FunctionImplementation:
function Identifier CallSignature { FunctionBody }

A function declaration introduces a function with the given name in the containing declaration space. Function overloads, if present, must specify the same name as the function implementation. If a function declaration includes overloads, the overloads determine the call signatures of the type given to the function object and the function implementation signature must be assignable to that type. Otherwise, the function implementation itself determines the call signature. Function overloads have no other effect on a function declaration.

Function Overloads
Function overloads allow a more accurate specification of the patterns of invocation supported by a function than is possible with a single signature. The compile-time processing of a call to an overloaded function chooses the best candidate overload for the particular arguments and the return type of that overload becomes the result type the function call expression. Thus, using overloads it is possible to statically describe the manner in which a function’s return type varies based on its arguments. Overload resolution in function calls is described further in section 4.12.

Function overloads are purely a compile-time construct. They have no impact on the emitted JavaScript and thus no run-time cost.

The parameter list of a function overload cannot specify default values for parameters. In other words, an overload may use only the ? form when specifying optional parameters.

It is an error to declare multiple function overloads that are considered identical (section 3.8.2) or differ only in their return types.


The following is an example of a function with overloads.

function attr(name: string): string;
function attr(name: string, value: string): Accessor;
function attr(map: any): Accessor;
function attr(nameOrMap: any, value?: string): any {
if (nameOrMap && typeof nameOrMap === "string") {
// handle string case
}
else {
// handle map case
}
}

Note that each overload and the final implementation specify the same identifier. The type of the local variable ‘attr’ introduced by this declaration is

var attr: {
(name: string): string;
(name: string, value: string): Accessor;
(map: any): Accessor;
};

Note that the signature of the actual function implementation is not included in the type.

Function Implementations
A function implementation without a return type annotation is said to be an implicitly typed function. The return type of an implicitly typed function f is inferred from its function body as follows:

If there are no return statements with expressions in f’s function body, the inferred return type is Void.

Otherwise, if f’s function body directly references f or references any implicitly typed functions that through this same analysis reference f, the inferred return type is Any.

Otherwise, the inferred return type is the widened form (section 3.9) of the best common type (section 3.10) of the types of the return statement expression in the function body, ignoring return statements with no expressions. A compile-time error occurs if the best common type isn’t one of the return statement expression types (i.e. if the best common type is an empty type).

TODO: Clarify exact meaning of “through this same analysis”.

In the example


function f(x: number) {
if (x <= 0) return x;
return g(x);
}

function g(x: number) {
return f(x - 1);
}

the inferred return type for ‘f’ and ‘g’ is Any because the functions reference themselves through a cycle with no return type annotations. Adding an explicit return type ‘number’ to either breaks the cycle and causes the return type ‘number’ to be inferred for the other.

An explicitly typed function returning a non-void type must have at least one return statement somewhere in its body. An exception to this rule is if the function implementation consists of a single ‘throw’ statement.

The type of ‘this’ in a function implementation is the Any type.

In the signature of a function implementation, a parameter can be marked optional by following it with an initializer. An optional parameter with an initializer but no type annotation has its type inferred from the initializer. Specifically, the type of such a parameter is the widened form of the type of the initializer expression.

Initializer expressions are evaluated in the scope of the function body but are not permitted to reference local variables and are only permitted to access parameters that are declared to the left of the parameter they initialize.

For each parameter with an initializer, a statement that substitutes the default value for an omitted argument is included in the generated JavaScript, as described in section 6.5. The example

function strange(x: number, y = x * 2, z = x + y) {
return z;
}

generates JavaScript that is equivalent to

function strange(x, y, z) {
if (typeof y === "undefined") { y = x * 2; }
if (typeof z === "undefined") { z = x + y; }
return z;
}

In the example

var x = 1;
function f(a = x) {
var x = "hello";
}


the local variable ‘x’ is in scope in the parameter initializer (thus hiding the outer ‘x’), but it is an error to reference it because it will always be uninitialized at the time the parameter initializer is evaluated.

Generic Functions
A function implementation may include type parameters in its signature (section 3.7.2.1) and is then called a generic function. Type parameters provide a mechanism for expressing relationships between parameter and return types in call operations. Type parameters have no run-time representation—they are purely a compile-time construct.

Type parameters declared in the signature of a function implementation are in scope in the signature and body of that function implementation.

The following is an example of a generic function:

interface Comparable<T> {
localeCompare(other: T): number;
}

function compare<T extends Comparable<T>>(x: T, y: T): number {
if (x == null) return y == null ? 0 : -1;
if (y == null) return 1;
return x.localeCompare(y);
}

Note that the ‘x’ and ‘y’ parameters are known to be subtypes of the constraint ‘Comparable<T>’ and therefore have a ‘compareTo’ member. This is described further in section 3.4.1.

The type arguments of a call to a generic function may be explicitly specified in a call operation or may, when possible, be inferred (section 4.12.2) from the types of the regular arguments in the call. In the example

class Person {
name: string;
localeCompare(other: Person) {
return compare(this.name, other.name);
}
}

the type argument to ‘compare’ is automatically inferred to be the String type because the two arguments are strings.

Code Generation
A function declaration generates JavaScript code that is equivalent to:

function <FunctionName>(<FunctionParameters>) {
<DefaultValueAssignments>

<FunctionStatements>
}

FunctionName is the name of the function (or nothing in the case of a function expression).

FunctionParameters is a comma separated list of the function’s parameter names.

DefaultValueAssignments is a sequence of default property value assignments, one for each parameter with a default value, in the order they are declared, of the form

if (typeof <Parameter> === "undefined") { <Parameter> = <Default>; }

where Parameter is the parameter name and Default is the default value expression.

FunctionStatements is the code generated for the statements specified in the function body.

7. Interfaces

Interfaces provide the ability to name and parameterize object types and to compose existing named object types into new ones.

Interfaces have no run-time representation—they are purely a compile-time construct. Interfaces are particularly useful for documenting and validating the required shape of properties, objects passed as parameters, and objects returned from functions.

Because TypeScript has a structural type system, an interface type with a particular set of members is considered identical to, and can be substituted for, another interface type or object type literal with an identical set of members (see section 3.8.2).

Class declarations may reference interfaces in their implements clause to validate that they provide an implementation of the interfaces.

Interface Declarations
An interface declaration declares a new named type (section 3.5) by introducing a type name in the containing module.

InterfaceDeclaration:
interface Identifier TypeParametersopt InterfaceExtendsClauseopt ObjectType

InterfaceExtendsClause:
extends ClassOrInterfaceTypeList

ClassOrInterfaceTypeList:
ClassOrInterfaceType
ClassOrInterfaceTypeList , ClassOrInterfaceType

ClassOrInterfaceType:
TypeReference

The Identifier of an interface declaration may not be one of the predefined type names (section 3.6.1).

An interface may optionally have type parameters (section 3.4.1) that serve as placeholders for actual types to be provided when the interface is referenced in type references. An interface with type parameters is called a generic interface. The type parameters of a generic interface declaration are in scope in the entire declaration and may be referenced in the InterfaceExtendsClause and ObjectType body.

An interface can inherit from zero or more base types which are specified in the InterfaceExtendsClause. The base types must be type references to class or interface types.

An interface has the members specified in the ObjectType of its declaration and furthermore inherits all base type members that aren’t hidden by declarations in the interface:


A property declaration hides a public base type property with the same name.

A call signature declaration hides a base type call signature that is identical when return types are ignored.

A construct signature declaration hides a base type construct signature that is identical when return types are ignored.

A string index signature declaration hides a base type string index signature.

A numeric index signature declaration hides a base type numeric index signature.

The following constraints must be satisfied by an interface declaration or otherwise a compile-time error occurs:

An interface declaration may not, directly or indirectly, specify a base type that originates in the same declaration. In other words an interface cannot, directly or indirectly, be a base type of itself, regardless of type arguments.

An interface cannot declare a property with the same name as an inherited private property.

Inherited properties with the same name must be identical (section 3.8.2).

All properties of the interface must satisfy the constraints implied by the index signatures of the interface as specified in section 3.7.4.

The instance type (section 3.5.1) of the declared interface must be a subtype (section 3.8.3) of each of the base type references.

An interface is permitted to inherit identical members from multiple base types and will in that case only contain one occurrence of each particular member.

Below is an example of two interfaces that contain properties with the same name but different types:

interface Mover {
move(): void;
getStatus(): { speed: number; };
}

interface Shaker {
shake(): void;
getStatus(): { frequency: number; };
}

An interface that extends ‘Mover’ and ‘Shaker’ must declare a new ‘getStatus’ property as it would otherwise inherit two ‘getStatus’ properties with different types. The new ‘getStatus’ property must be

declared such that the resulting ‘MoverShaker’ is a subtype of both ‘Mover’ and ‘Shaker’:

interface MoverShaker extends Mover, Shaker {
getStatus(): { speed: number; frequency: number; };
}

Since function and constructor types are just object types containing call and construct signatures, interfaces can be used to declare named function and constructor types. For example:

interface StringComparer { (a: string, b: string): number; }

This declares type ‘StringComparer’ to be a function type taking two strings and returning a number.

Declaration Merging
Interfaces are “open-ended” and interface declarations with the same qualified name relative to a common root (as defined in section 2.3) contribute to a single interface.

When a generic interface has multiple declarations, all declarations must have identical type parameter lists, i.e. identical type parameter names with identical constraints in identical order.

In an interface with multiple declarations, the extends clauses are merged into a single set of base types and the bodies of the interface declarations are merged into a single object type.

Interfaces Extending Classes
When an interface type extends a class type it inherits the members of the class but not their implementations. It is as if the interface had declared all of the members of the class without providing an implementation. Interfaces inherit even the private members of a base class. When a class containing private members is the base type of an interface type, that interface type can only be implemented by that class or a descendant class. For example:

class Control {
private state: any;
}

interface SelectableControl extends Control {
select(): void;
}

class Button extends Control {
select() { }
}

class TextBox extends Control {
select() { }
}

class Image extends Control {

}

class Location {
select() { }
}

In the above example, ‘SelectableControl’ contains all of the members of ‘Control’, including the private ‘state’ property. Since ‘state’ is a private member it is only possible for descendants of ‘Control’ to implement ‘SelectableControl’. This is because only descendants of ‘Control’ will have a ‘state’ private member that originates in the same declaration, which is a requirement for private members to be compatible (section 3.8).

Within the ‘Control’ class it is possible to access the ‘state’ private member through an instance of ‘SelectableControl’. Effectively, a ‘SelectableControl’ acts like a ‘Control’ that is known to have a ‘select’ method. The ‘Button’ and ‘TextBox’ classes are subtypes of ‘SelectableControl’ (because they both inherit from ‘Control’ and have a ‘select’ method), but the ‘Image’ and ‘Location’ classes are not.

Dynamic Type Checks
TypeScript does not provide a direct mechanism for dynamically testing whether an object implements a particular interface. Instead, TypeScript code can use the JavaScript technique of checking whether an appropriate set of members are present on the object. For example, given the declarations in section 7.1, the following is a dynamic check for the ‘MoverShaker’ interface:

var obj: any = getSomeObject();
if (obj && obj.move && obj.shake && obj.getStatus) {
var moverShaker = <MoverShaker> obj;
...
}

If such a check is used often it can be abstracted into a function:

function asMoverShaker(obj: any): MoverShaker {
return obj && obj.move && obj.shake && obj.getStatus ? obj : null;
}

8. Classes

TypeScript supports classes that are closely aligned with those proposed for ECMAScript 6, and includes extensions for instance and static member declarations and properties declared and initialized from constructor parameters.

NOTE: TypeScript currently doesn’t support class expressions or nested class declarations from the ECMAScript 6 proposal.

Class Declarations
Class declarations introduce named types and provide implementations of those types. Classes support inheritance, allowing derived classes to extend and specialize base classes.

ClassDeclaration:
class Identifier TypeParametersopt ClassHeritage { ClassBody }

A ClassDeclaration declares a class type and a constructor function, both with the name given by Identifier, in the containing module. The class type is created from the instance members declared in the class body and the instance members inherited from the base class. The constructor function is created from the constructor declaration, the static member declarations in the class body, and the static members inherited from the base class. The constructor function initializes and returns an instance of the class type.

The Identifier of a class declaration may not be one of the predefined type names (section 3.6.1).

A class may optionally have type parameters (section 3.4.1) that serve as placeholders for actual types to be provided when the class is referenced in type references. A class with type parameters is called a generic class. The type parameters of a generic class declaration are in scope in the entire declaration and may be referenced in the ClassHeritage and ClassBody.

The following example introduces both a named type called ‘Point’ (the class type) and a member called ‘Point’ (the constructor function) in the containing module.

class Point {
constructor(public x: number, public y: number) { }
public length() { return Math.sqrt(this.x * this.x + this.y * this.y);
static origin = new Point(0, 0);
}

The ‘Point’ type is exactly equivalent to

interface Point {
x: number;
y: number;
length(): number;
}


The ‘Point’ member is a constructor function whose type corresponds to the declaration

var Point: {
new(x: number, y: number): Point;
origin: Point;
};

The context in which a class is referenced distinguishes between the class instance type and the constructor function. For example, in the assignment statement

var p: Point = new Point(10, 20);

the identifier ‘Point’ in the type annotation refers to the class instance type, whereas the identifier ‘Point’ in the new expression refers to the constructor function object.

Class Heritage Specification
The heritage specification of a class consists of optional extends and implements clauses. The extends clause specifies the base class of the class and the implements clause specifies a set of interfaces for which to validate the class provides an implementation.

ClassHeritage:
ClassExtendsClauseopt ImplementsClauseopt

ClassExtendsClause:
extends ClassType

ClassType:
TypeReference

ImplementsClause:
implements ClassOrInterfaceTypeList

A class that includes an extends clause is called a derived class, and the class specified in the extends clause is called the base class of the derived class. When a class heritage specification omits the extends clause, the class does not have a base class. However, as is the case with every object type, type references (section 3.3.1) to the class will appear to have the members of the global interface type named ‘Object’ unless those members are hidden by members with the same name in the class.

The following constraints must be satisfied by the class heritage specification or otherwise a compile-time error occurs:

If present, the type reference specified in the extends clause must denote a class type. Furthermore, the TypeName part of the type reference is required to be a reference to the class constructor function when evaluated as an expression.

A class declaration may not, directly or indirectly, specify a base class that originates in the same declaration. In other words a class cannot, directly or indirectly, be a base

class of itself, regardless of type arguments.

The instance type (section 3.5.1) of the declared class must be a subtype (section 3.8.3) of the base type reference and each of the type references listed in the implements clause.

The constructor function type created by the class declaration must be a subtype of the base class constructor function type, ignoring construct signatures.

The following example illustrates a situation in which the first rule above would be violated:

class A { a: number; }

module Foo {
var A = 1;
class B extends A { b: string; }
}

When evaluated as an expression, the type reference ‘A’ in the extends clause doesn’t reference the class constructor function of ‘A’ (instead it references the local variable ‘A’).

The only situation in which the last two constraints above are violated is when a class overrides one or more base class members with incompatible new members.

Note that because TypeScript has a structural type system, a class doesn’t need to explicitly state that it implements an interface—it suffices for the class to simply contain the appropriate set of instance members. The implements clause of a class provides a mechanism to assert and validate that the class contains the appropriate sets of instance members, but otherwise it has no effect on the class type.

Class Body
The class body consists of zero or more constructor or member declarations. Statements are not allowed in the body of a class—they must be placed in the constructor or in members.

ClassBody:
ClassElementsopt

ClassElements:
ClassElement
ClassElements ClassElement

ClassElement:
ConstructorDeclaration
PropertyMemberDeclaration
IndexMemberDeclaration

The body of class may optionally contain a single constructor declaration. Constructor declarations are described in section 8.3.

Member declarations are used to declare instance and static members of the class. Property member

declarations are described in section 8.4 and index member declarations are described in section 8.5.

Members
The members of a class consist of the members introduced through member declarations in the class body and the members inherited from the base class.

Instance and Static Members
Members are either instance members or static members.

Instance members are members of the class type (section 8.2.4) and its associated instance type. Within constructors, instance member functions, and instance member accessors, the type of this is the instance type (section 3.5.1) of the class.

Static members are declared using the static modifier and are members of the constructor function type (section 8.2.5). Within static member functions and static member accessors, the type of this is the constructor function type.

Class type parameters cannot be referenced in static member declarations.

Accessibility
Property members have either public or private accessibility. The default is public accessibility, but property member declarations may include a public or private modifier to explicitly specify the desired accessibility.

Public property members can be accessed everywhere, but private property members can be accessed only within the class body that contains their declaration. Any attempt to access a private property member outside the class body that contains its declaration results in a compile-time error.

Private accessibility is enforced only at compile-time and serves as no more than an indication of intent. Since JavaScript provides no mechanism to create private properties on an object, it is not possible to enforce the private modifier in dynamic code at run-time. For example, private accessibility can be defeated by changing an object’s static type to Any and accessing the member dynamically.

Inheritance and Overriding
A derived class inherits all members from its base class it doesn’t override. Inheritance means that a derived class implicitly contains all non-overridden members of the base class. Both public and private property members are inherited, but only public property members can be overridden.

A property member in a derived class is said to override a property member in a base class when the derived class property member has the same name and kind (instance or static) as the base class property member. The type of an overriding property member must be a subtype (section 3.8.3) of the type of the overridden property member, or otherwise a compile-time error occurs.

Base class instance member functions can be overridden by derived class instance member functions, but not by other kinds of members.

Base class instance member variables and accessors can be overridden by derived class instance member variables and accessors, but not by other kinds of members.


Base class static property members can be overridden by derived class static property members of any kind as long as the types are compatible, as described above.

An index member in a derived class is said to override an index member in a base class when the derived class index member is of the same index kind (string or numeric) as the base class index member. The type of an overriding index member must be a subtype (section 3.8.3) of the type of the overridden index member, or otherwise a compile-time error occurs.

Class Types
A class declaration declares a new named type (section 3.5) called a class type. Within the constructor and member functions of a class, the type of this is the instance type (section 3.5.1) of this class type. The class type has the following members:

A property for each instance member variable declaration in the class body.

A property of a function type for each instance member function declaration in the class body.

A property for each uniquely named instance member accessor declaration in the class body.

A property for each constructor parameter declared with a public or private modifier.

An index signature for each instance index member declaration in the class body.

All base class instance type property or index members that are not overridden in the class.

All instance property members (including those that are private) of a class must satisfy the constraints implied by the index members of the class as specified in section 3.7.4.

In the example

class A {
public x: number;
public f() { }
public g(a: any) { return undefined; }
static s: string;
}

class B extends A {
public y: number;
public g(b: boolean) { return false; }
}

the instance type of ‘A’ is


interface A {
x: number;
f: () => void;
g: (a: any) => any;
}

and the instance type of ‘B’ is

interface B {
x: number;
y: number;
f: () => void;
g: (b: boolean) => boolean;
}

Note that static declarations in a class do not contribute to the class type and its instance type—rather, static declarations introduce properties on the constructor function object. Also note that the declaration of ‘g’ in ‘B’ overrides the member inherited from ‘A’.

Constructor Function Types
The type of the constructor function introduced by a class declaration is called the constructor function type. The constructor function type has the following members:

If the class contains no constructor declaration and has no base class, a single construct signature with no parameters, having the same type parameters as the class and returning the instance type of the class.

If the class contains no constructor declaration and has a base class, a set of construct signatures with the same parameters as those of the base class constructor function type following substitution of type parameters with the type arguments specified in the base class type reference, all having the same type parameters as the class and returning the instance type of the class.

If the class contains a constructor declaration with no overloads, a construct signature with the parameter list of the constructor implementation, having the same type parameters as the class and returning the instance type of the class.

If the class contains a constructor declaration with overloads, a set of construct signatures with the parameter lists of the overloads, all having the same type parameters as the class and returning the instance type of the class.

A property for each static member variable declaration in the class body.

A property of a function type for each static member function declaration in the class body.


A property for each uniquely named static member accessor declaration in the class body.

A property named ‘prototype’, the type of which is an instantiation of the class type with type Any supplied as a type argument for each type parameter.

All base class constructor function type properties that are not overridden in the class.

Every class automatically contains a static property member named ‘prototype’, the type of which is the containing class with type Any substituted for each type parameter.

The example

class Pair<T1, T2> {
constructor(public item1: T1, public item2: T2) { }
}

class TwoArrays<T> extends Pair<T[], T[]> { }

introduces two named types corresponding to

interface Pair<T1, T2> {
item1: T1;
item2: T2;
}

interface TwoArrays<T> {
item1: T[];
item2: T[];
}

and two constructor functions corresponding to

var Pair: {
new <T1, T2>(item1: T1, item2: T2): Pair<T1, T2>;
}

var TwoArrays: {
new <T>(item1: T[], item2: T[]): TwoArrays<T>;
}

Note that the construct signatures in the constructor function types have the same type parameters as their class and return the instance type of their class. Also note that when a derived class doesn’t declare a constructor, type arguments from the base class reference are substituted before construct signatures are propagated from the base constructor function type to the derived constructor function type.

Constructor Declarations

A constructor declaration declares the constructor function of a class.

ConstructorDeclaration:
ConstructorOverloadsopt ConstructorImplementation

ConstructorOverloads:
ConstructorOverload
ConstructorOverloads ConstructorOverload

ConstructorOverload:
PublicOrPrivateopt constructor ( ParameterListopt ) ;

ConstructorImplementation:
PublicOrPrivateopt constructor ( ParameterListopt ) { FunctionBody }

A class may contain at most one constructor declaration. If a class contains no constructor declaration, an automatic constructor is provided, as described in section 8.3.3.

Overloads and the implementation of a constructor may include a public or private accessibility modifier, but only public constructors are supported and private constructors result in an error.

If a constructor declaration includes overloads, the overloads determine the construct signatures of the type given to the constructor function object, and the constructor implementation signature must be assignable to that type. Otherwise, the constructor implementation itself determines the construct signature. This exactly parallels the way overloads are processed in a function declaration (section 6.2).

The function body of a constructor is permitted to contain return statements. If return statements specify expressions, those expressions must be of types that are assignable to the instance type of the class.

The type parameters of a generic class are in scope and accessible in a constructor declaration.

Constructor Parameters
Similar to functions, only the constructor implementation (and not constructor overloads) can specify default value expressions for optional parameters. It is a compile-time error for such default value expressions to reference this. For each parameter with a default value, a statement that substitutes the default value for an omitted argument is included in the JavaScript generated for the constructor function.

A parameter of a ConstructorImplementation may be prefixed with a public or private modifier. This is called a parameter property declaration and is shorthand for declaring a property with the same name as the parameter and initializing it with the value of the parameter. For example, the declaration

class Point {
constructor(public x: number, public y: number) {
// Constructor body
}
}


is equivalent to writing

class Point {
public x: number;
public y: number;
constructor(x: number, y: number) {
this.x = x;
this.y = y;
// Constructor body
}
}

Super Calls
Super calls (section 4.8.1) are used to call the constructor of the base class. A super call consists of the keyword super followed by an argument list enclosed in parentheses. For example:

class ColoredPoint extends Point {
constructor(x: number, y: number, public color: string) {
super(x, y);
}
}

Constructors of classes with no extends clause may not contain super calls, whereas constructors of derived classes must contain at least one super call somewhere in their function body. Super calls are not permitted outside constructors or in local functions inside constructors.

The first statement in the body of a constructor must be a super call if both of the following are true:

The containing class is a derived class.

The constructor declares parameter properties or the containing class declares instance member variables with initializers.

In such a required super call, it is a compile-time error for argument expressions to reference this.

Initialization of parameter properties and instance member variables with initializers takes place immediately at the beginning of the constructor body if the class has no base class, or immediately following the super call if the class is a derived class.

Automatic Constructors
If a class omits a constructor declaration, an automatic constructor is provided.

In a class with no extends clause, the automatic constructor has no parameters and performs no action other than executing the instance member variable initializers (section 8.4.1), if any.

In a derived class, the automatic constructor has the same parameter list (and possibly overloads) as the base class constructor. The automatically provided constructor first forwards the call to the base class

constructor using a call equivalent to

BaseClass.apply(this, arguments);

and then executes the instance member variable initializers, if any.

Property Member Declarations
Property member declarations can be member variable declarations, member function declarations, or member accessor declarations.

PropertyMemberDeclaration:
MemberVariableDeclaration
MemberFunctionDeclaration
MemberAccessorDeclaration

Member declarations without a static modifier are called instance member declarations. Instance property member declarations declare properties in the class instance type (section 8.2.4), and must specify names that are unique among all instance property member and parameter property declarations in the containing class, with the exception that instance get and set accessor declarations may pairwise specify the same name.

Member declarations with a static modifier are called static member declarations. Static property member declarations declare properties in the constructor function type (section 8.2.5), and must specify names that are unique among all static property member declarations in the containing class, with the exception that static get and set accessor declarations may pairwise specify the same name.

Note that the declaration spaces of instance and static property members are separate. Thus, it is possible to have instance and static property members with the same name.

Except for overrides, as described in section 8.2.3, it is an error for a derived class to declare a property member with the same name and kind (instance or static) as a base class member.

Every class automatically contains a static property member named ‘prototype’, the type of which is an instantiation of the class type with type Any supplied as a type argument for each type parameter. It is an error to explicitly declare a static property member with the name ‘prototype’.

Below is an example of a class containing both instance and static property member declarations:

class Point {
constructor(public x: number, public y: number) { }
public distance(p: Point) {
var dx = this.x - p.x;
var dy = this.y - p.y;
return Math.sqrt(dx * dx + dy * dy);
}
static origin = new Point(0, 0);
static distance(p1: Point, p2: Point) { return p1.distance(p2); }

}

The class instance type ‘Point’ has the members:

interface Point {
x: number;
y: number;
distance(p: Point);
}

and the constructor function ‘Point’ has a type corresponding to the declaration:

var Point: {
new(x: number, y: number): Point;
origin: Point;
distance(p1: Point, p2: Point): number;
}

Member Variable Declarations
A member variable declaration declares an instance member variable or a static member variable.

MemberVariableDeclaration:
PublicOrPrivateopt staticopt PropertyName TypeAnnotationopt Initialiseropt ;

The type associated with a member variable declaration is determined in the same manner as an ordinary variable declaration (see section 5.1).

An instance member variable declaration introduces a member in the class instance type and optionally initializes a property on instances of the class. Initializers in instance member variable declarations are executed once for every new instance of the class and are equivalent to assignments to properties of this in the constructor. In an initializer expression for an instance member variable, this is of the class instance type.

A static member variable declaration introduces a property in the constructor function type and optionally initializes a property on the constructor function object. Initializers in static member variable declarations are executed once when the containing program or module is loaded.

Initializer expressions for instance member variables are evaluated in the scope of the class constructor body but are not permitted to reference parameters or local variables of the constructor. This effectively means that entities from outer scopes by the same name as a constructor parameter or local variable are inaccessible in initializer expressions for instance member variables.

Since instance member variable initializers are equivalent to assignments to properties of this in the constructor, the example

class Employee {
public name: string;
public address: string;
public retired = false;

public manager: Employee = null;
public reports: Employee[] = [];
}

is equivalent to

class Employee {
public name: string;
public address: string;
public retired: boolean;
public manager: Employee;
public reports: Employee[];
constructor() {
this.retired = false;
this.manager = null;
this.reports = [];
}
}

Member Function Declarations
A member function declaration declares an instance member function or a static member function.

MemberFunctionDeclaration:
MemberFunctionOverloadsopt MemberFunctionImplementation

MemberFunctionOverloads:
MemberFunctionOverload
MemberFunctionOverloads MemberFunctionOverload

MemberFunctionOverload:
PublicOrPrivateopt staticopt PropertyName CallSignature ;

MemberFunctionImplementation:
PublicOrPrivateopt staticopt PropertyName CallSignature { FunctionBody }

A member function declaration is processed in the same manner as an ordinary function declaration (section 6), except that in a member function this has a known type.

All overloads of a member function must have the same accessibility (public or private) and kind (instance or static).

An instance member function declaration declares a property in the class instance type and assigns a function object to a property on the prototype object of the class. In the body of an instance member function declaration, this is of the class instance type.

A static member function declaration declares a property in the constructor function type and assigns a function object to a property on the constructor function object. In the body of a static member function

declaration, the type of this is the constructor function type.

A member function can access overridden base class members using a super property access (section 4.8.2). For example

class Point {
constructor(public x: number, public y: number) { }
public toString() {
return "x=" + this.x + " y=" + this.y;
}
}

class ColoredPoint extends Point {
constructor(x: number, y: number, public color: string) {
super(x, y);
}
public toString() {
return super.toString() + " color=" + this.color;
}
}

In a static member function, this represents the constructor function object on which the static member function was invoked. Thus, a call to ‘new this()’ may actually invoke a derived class constructor:

class A {
a = 1;
static create() {
return new this();
}
}

class B extends A {
b = 2;
}

var x = A.create(); // new A()
var y = B.create(); // new B()

Note that TypeScript doesn’t require or verify that derived constructor functions are subtypes of base constructor functions. In other words, changing the declaration of ‘B’ to

class B extends A {
constructor(public b: number) { }
}

does not cause errors in the example, even though the call to the constructor from the ‘create’ function doesn’t specify an argument (thus giving the value ‘undefined’ to ‘b’).


Member Accessor Declarations
A member accessor declaration declares an instance member accessor or a static member accessor.

MemberAccessorDeclaration:
PublicOrPrivateopt staticopt GetAccessor
PublicOrPrivateopt staticopt SetAccessor

Get and set accessors are processed in the same manner as in an object literal (section 4.5), except that a contextual type is never available in a member accessor declaration.

Accessors for the same member name must specify the same accessibility.

An instance member accessor declaration declares a property in the class instance type and defines a property on the prototype object of the class with a get or set accessor. In the body of an instance member accessor declaration, this is of the class instance type.

A static member accessor declaration declares a property in the constructor function type and defines a property on the constructor function object of the class with a get or set accessor. In the body of a static member accessor declaration, the type of this is the constructor function type.

Get and set accessors are emitted as calls to ‘Object.defineProperty’ in the generated JavaScript, as described in section 8.6.1.

Index Member Declarations
An index member declaration introduces an index signature (section 3.7.4) in the class instance type.

IndexMemberDeclaration:
IndexSignature ;

Index member declarations have no body and cannot specify an accessibility modifier.

A class declaration can have at most one string index member declaration and one numeric index member declaration. All instance property members of a class must satisfy the constraints implied by the index members of the class as specified in section 3.7.4.

It is not possible to declare index members for the static side of a class.

Note that it is seldom meaningful to include a string index signature in a class because it constrains all instance properties of the class. However, numeric index signatures can be useful to control the element type when a class is used in an array-like manner.

Code Generation
This section describes the structure of the JavaScript code generated from TypeScript classes.

Classes Without Extends Clauses

A class with no extends clause generates JavaScript equivalent to the following:

var <ClassName> = (function () {
function <ClassName>(<ConstructorParameters>) {
<DefaultValueAssignments>
<ParameterPropertyAssignments>
<MemberVariableAssignments>
<ConstructorStatements>
}
<MemberFunctionStatements>
<StaticVariableAssignments>
return <ClassName>;
})();

ClassName is the name of the class.

ConstructorParameters is a comma separated list of the constructor’s parameter names.

DefaultValueAssignments is a sequence of default property value assignments corresponding to those generated for a regular function declaration, as described in section 6.5.

ParameterPropertyAssignments is a sequence of assignments, one for each parameter property declaration in the constructor, in order they are declared, of the form

this.<ParameterName> = <ParameterName>;

where ParameterName is the name of a parameter property.

MemberVariableAssignments is a sequence of assignments, one for each instance member variable declaration with an initializer, in the order they are declared, of the form

this.<MemberName> = <InitializerExpression>;

where MemberName is the name of the member variable and InitializerExpression is the code generated for the initializer expression.

ConstructorStatements is the code generated for the statements specified in the constructor body.

MemberFunctionStatements is a sequence of statements, one for each member function declaration or member accessor declaration, in the order they are declared.

An instance member function declaration generates a statement of the form

<ClassName>.prototype.<MemberName> = function (<FunctionParameters>) {
<DefaultValueAssignments>
<FunctionStatements>
}


and static member function declaration generates a statement of the form

<ClassName>.<MemberName> = function (<FunctionParameters>) {
<DefaultValueAssignments>
<FunctionStatements>
}

where MemberName is the name of the member function, and FunctionParameters, DefaultValueAssignments, and FunctionStatements correspond to those generated for a regular function declaration, as described in section 6.5.

A get or set instance member accessor declaration, or a pair of get and set instance member accessor declarations with the same name, generates a statement of the form

Object.defineProperty(<ClassName>.prototype, "<MemberName>", {
get: function () {
<GetAccessorStatements>
},
set: function (<ParameterName>) {
<SetAccessorStatements>
},
enumerable: true,
configurable: true
};

and a get or set static member accessor declaration, or a pair of get and set static member accessor declarations with the same name, generates a statement of the form

Object.defineProperty(<ClassName>, "<MemberName>", {
get: function () {
<GetAccessorStatements>
},
set: function (<ParameterName>) {
<SetAccessorStatements>
},
enumerable: true,
configurable: true
};

where MemberName is the name of the member accessor, GetAccessorStatements is the code generated for the statements in the get acessor’s function body, ParameterName is the name of the set accessor parameter, and SetAccessorStatements is the code generated for the statements in the set accessor’s function body. The ‘get’ property is included only if a get accessor is declared and the ‘set’ property is included only if a set accessor is declared.

StaticVariableAssignments is a sequence of statements, one for each static member variable declaration

with an initializer, in the order they are declared, of the form

<ClassName>.<MemberName> = <InitializerExpression>;

where MemberName is the name of the static variable, and InitializerExpression is the code generated for the initializer expression.

Classes With Extends Clauses
A class with an extends clause generates JavaScript equivalent to the following:

var <ClassName> = (function (_super) {
__extends(<ClassName>, _super);
function <ClassName>(<ConstructorParameters>) {
<DefaultValueAssignments>
<SuperCallStatement>
<ParameterPropertyAssignments>
<MemberVariableAssignments>
<ConstructorStatements>
}
<MemberFunctionStatements>
<StaticVariableAssignments>
return <ClassName>;
})(<BaseClassName>);

In addition, the ‘__extends’ function below is emitted at the beginning of the JavaScript source file. It copies all properties from the base constructor function object to the derived constructor function object (in order to inherit static members), and appropriately establishes the ‘prototype’ property of the derived constructor function object.

var __extends = this.__extends || function(d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function f() { this.constructor = d; }
f.prototype = b.prototype;
d.prototype = new f();
}

BaseClassName is the class name specified in the extends clause.

If the class has no explicitly declared constructor, the SuperCallStatement takes the form

_super.apply(this, arguments);

Otherwise the SuperCallStatement is present if the constructor function is required to start with a super call, as discussed in section 8.3.2, and takes the form

_super.call(this, <SuperCallArguments>)

where SuperCallArguments is the argument list specified in the super call. Note that this call precedes the

code generated for parameter properties and member variables with initializers. Super calls elsewhere in the constructor generate similar code, but the code generated for such calls will be part of the ConstructorStatements section.

A super property access in the constructor, an instance member function, or an instance member accessor generates JavaScript equivalent to

_super.prototype.<PropertyName>

where PropertyName is the name of the referenced base class property. When the super property access appears in a function call, the generated JavaScript is equivalent to

_super.prototype.<PropertyName>.call(this, <Arguments>)

where Arguments is the code generated for the argument list specified in the function call.

A super property access in a static member function or a static member accessor generates JavaScript equivalent to

_super.<PropertyName>

where PropertyName is the name of the referenced base class property. When the super property access appears in a function call, the generated JavaScript is equivalent to

_super.<PropertyName>.call(this, <Arguments>)

where Arguments is the code generated for the argument list specified in the function call.

9. Enums

An enum type is a distinct subtype of the Number primitive type with an associated set of named constants that define the possible values of the enum type.

Enum Declarations
An enum declaration declares an enum type and an enum object in the containing module.

EnumDeclaration:
enum Identifier { EnumBodyopt }

The enum type and enum object declared by an EnumDeclaration both have the name given by the Identifier of the declaration. The enum type is a distinct subtype of the Number primitive type. The enum object is a variable of an anonymous object type containing a set of properties, all of the enum type, corresponding to the values declared for the enum type in the body of the declaration. The enum object’s type furthermore includes a numeric index signature with the signature ‘[x: number]: string’.

The Identifier of an enum declaration may not be one of the predefined type names (section 3.6.1).

The example

enum Color { Red, Green, Blue }

declares a subtype of the Number primitive type called ‘Color’ and introduces a variable ‘Color’ with a type that corresponds to the declaration

var Color: {
[x: number]: string;
Red: Color;
Green: Color;
Blue: Color;
};

The numeric index signature reflects a “reverse mapping” that is automatically generated in every enum object, as described in section 9.4. The reverse mapping provides a convenient way to obtain the string representation of an enum value. For example

var c = Color.Red;
console.log(Color[c]); // Outputs "Red"

Enum Members
The body of an enum declaration defines zero or more enum members which are the named values of the enum type. Each enum member has an associated numeric value of the primitive type introduced by the enum declaration.


EnumBody:
ConstantEnumMembers ,opt
ConstantEnumMembers , EnumMemberSections ,opt
EnumMemberSections ,opt

ConstantEnumMembers:
PropertyName
ConstantEnumMembers , PropertyName

EnumMemberSections:
EnumMemberSection
EnumMemberSections , EnumMemberSection

EnumMemberSection:
ConstantEnumMemberSection
ComputedEnumMember

ConstantEnumMemberSection:
PropertyName = IntegerLiteral
PropertyName = IntegerLiteral , ConstantEnumMembers

ComputedEnumMember:
PropertyName = AssignmentExpression

Enum members are either constant members or computed members. Constant members have known constant values that are substituted in place of references to the members in the generated JavaScript code. Computed members have values that are computed at run-time and not known at compile-time. No substitution is performed for references to computed members.

The body of an enum declaration consists of an optional ConstantEnumMembers production followed by any number of ConstantEnumMemberSection or ComputedEnumMember productions.

If present, the initial ConstantEnumMembers production introduces a series of constant members with consecutive integral values starting at the value zero.

A ConstantEnumMemberSection introduces one or more constant members with consecutive integral values starting at the specified constant value.

A ComputedEnumMember introduces a computed member with a value computed by an expression.

Expressions specified for computed members must produce values of type Any, the Number primitive type, or an enum type.

In the example

enum Test {

A,
B,
C = Math.floor(Math.random() * 1000),
D = 10,
E
}

‘A’, ‘B’, ‘D’, and ‘E’ are constant members with values 0, 1, 10, and 11 respectively, and ‘C’ is a computed member.

In the example

enum Style {
None = 0,
Bold = 1,
Italic = 2,
Underline = 4,
Emphasis = Bold | Italic,
Hyperlink = Bold | Underline
}

the first four members are constant members and the last two are computed members. Note that computed member declarations can reference other enum members without qualification. Also, because enums are subtypes of the Number primitive type, numeric operators, such as the bitwise OR operator, can be used to compute enum values.

Declaration Merging
Enums are “open-ended” and enum declarations with the same qualified name relative to a common root (as defined in section 2.3) define a single enum type and contribute to a single enum object.

It isn’t possible for one enum declaration to continue the automatic numbering sequence of another, and when an enum type has multiple declarations, only one declaration is permitted to omit a value for the first member.

Code Generation
An enum declaration generates JavaScript equivalent to the following:

var <EnumName>;
(function (<EnumName>) {
<EnumMemberAssignments>
})(<EnumName>||(<EnumName>={}));

EnumName is the name of the enum.

EnumMemberAssignments is a sequence of assignments, one for each enum member, in order they are declared, of the form


<EnumName>[<EnumName>["<MemberName>"] = <Value>] = "<MemberName>";

where MemberName is the name of the enum member and Value is the assigned constant value or the code generated for the computed value expression.

For example, the ‘Color’ enum example from section 9.1 generates the following JavaScript:

var Color;
(function (Color) {
Color[Color["Red"] = 0] = "Red";
Color[Color["Green"] = 1] = "Green";
Color[Color["Blue"] = 2] = "Blue";
})(Color||(Color={}));

10. Internal Modules

An internal module is a named container of statements and declarations. An internal module represents both a namespace and a singleton module instance. The namespace contains named types and other namespaces, and the singleton module instance contains properties for the module’s exported members. The body of an internal module corresponds to a function that is executed once, thereby providing a mechanism for maintaining local state with assured isolation.

Module Declarations
An internal module declaration declares a namespace name and, in the case of an instantiated module, a member name in the containing module.

ModuleDeclaration:
module IdentifierPath { ModuleBody }

IdentifierPath:
Identifier
IdentifierPath . Identifier

Internal modules are either instantiated or non-instantiated. A non-instantiated module is an internal module containing only interface types and other non-instantiated modules. An instantiated module is an internal module that doesn’t meet this definition. In intuitive terms, an instantiated module is one for which a module object instance is created, whereas a non-instantiated module is one for which no code is generated.

When a module identifier is referenced as a ModuleName (section 3.6.2) it denotes a container of module and type names, and when a module identifier is referenced as a PrimaryExpression (section 4.3) it denotes the singleton module instance. For example:

module M {
export interface P { x: number; y: number; }
export var a = 1;
}

var p: M.P; // M used as ModuleName
var m = M; // M used as PrimaryExpression
var x1 = M.a; // M used as PrimaryExpression
var x2 = m.a; // Same as M.a
var q: m.P; // Error

Above, when ‘M’ is used as a PrimaryExpression it denotes an object instance with a single member ‘a’ and when ‘M’ is used as a ModuleName it denotes a container with a single type member ‘P’. The final line in the example is an error because ‘m’ is a variable which cannot be referenced in a type name.

If the declaration of ‘M’ above had excluded the exported variable ‘a’, ‘M’ would be a non-instantiated module and it would be an error to reference ‘M’ as a PrimaryExpression.


An internal module declaration that specifies an IdentifierPath with more than one identifier is equivalent to a series of nested single-identifier internal module declarations where all but the outermost are automatically exported. For example:

module A.B.C {
export var x = 1;
}

corresponds to

module A {
export module B {
export module C {
export var x = 1;
}
}
}

Module Body
The body of an internal module corresponds to a function that is executed once to initialize the module instance.

ModuleBody:
ModuleElementsopt

ModuleElements:
ModuleElement
ModuleElements ModuleElement

ModuleElement:
Statement
exportopt VariableDeclaration
exportopt FunctionDeclaration
exportopt ClassDeclaration
exportopt InterfaceDeclaration
exportopt EnumDeclaration
exportopt ModuleDeclaration
exportopt ImportDeclaration

Each module body has a declaration space for local variables (including functions, modules, class constructor functions, and enum objects), a declaration space for local named types (classes, interfaces, and enums), and a declaration space for local namespaces (containers of named types). Every declaration (whether local or exported) in a module contributes to one or more of these declaration spaces.

Import Declarations

Import declarations are used to create local aliases for entities in other modules.

ImportDeclaration:
import Identifier = EntityName ;

EntityName:
ModuleName
ModuleName . Identifier

An EntityName consisting of a single identifier is resolved as a ModuleName and is thus required to reference an internal module. The resulting local alias references the given internal module and is itself classified as an internal module.

An EntityName consisting of more than one identifier is resolved as a ModuleName followed by an identifier that names one or more exported entities in the given module. The resulting local alias has all the meanings and classifications of the referenced entity or entities. (As many as three distinct meanings are possible for an entity name—namespace, type, and member.) In effect, it is as if the imported entity or entities were declared locally with the local alias name.

In the example

module A {
export interface X { s: string }
export var X: X;
}

module B {
interface A { n: number }
import Y = A; // Alias only for module A
import Z = A.X; // Alias for both type and member A.X
var v: Z = Z;
}

within ‘B’, ‘Y’ is an alias only for module ‘A’ and not the local interface ‘A’, whereas ‘Z’ is an alias for all exported meanings of ‘A.X’, thus denoting both an interface type and a variable.

If the ModuleName portion of an EntityName references an instantiated module, the ModuleName is required to reference the module instance when evaluated as an expression. In the example

module A {
export interface X { s: string }
}

module B {
var A = 1;
import Y = A;
}


‘Y’ is a local alias for the non-instantiated module ‘A’. If the declaration of ‘A’ is changed such that ‘A’ becomes an instantiated module, for example by including a variable declaration in ‘A’, the import statement in ‘B’ above would be an error because the expression ‘A’ doesn’t reference the module instance of module ‘A’.

When an import statement includes an export modifier, all meanings of the local alias are exported.

Export Declarations
An export declaration declares an externally accessible module member. An export declaration is simply a regular declaration prefixed with the keyword export.

Exported class, interface, and enum types can be accessed as a TypeName (section 3.6.2) of the form M.T, where M is a reference to the containing module and T is the exported type name. Likewise, as part of a TypeName, exported modules can be accessed as a ModuleName of the form M.N, where M is a reference to the containing module and N is the exported module.

Exported variable, function, class, enum, module, and import alias declarations become properties on the module instance and together establish the module’s instance type. This unnamed type has the following members:

A property for each exported variable declaration.

A property of a function type for each exported function declaration.

A property of a constructor type for each exported class declaration.

A property of an object type for each exported enum declaration.

A property of an object type for each exported instantiated module declaration.

A property for each exported import alias that references a variable, function, class, enum, or instantiated module.

An exported member depends on a (possibly empty) set of named types (section 3.5). Those named types must be at least as accessible as the exported member, or otherwise an error occurs.

The named types upon which a member depends are the named types occurring in the transitive closure of the directly depends on relationship defined as follows:

A variable directly depends on the Type specified in its type annotation.

A function directly depends on each Type specified in a parameter or return type annotation.

A class directly depends on each Type specified as a type parameter constraint, each TypeReference specified as a base class or implemented interface, and each Type specified in a constructor parameter type annotation, member variable type annotation, member function parameter or return type annotation, member accessor

parameter or return type annotation, or index signature type annotation.

An interface directly depends on each Type specified as a type parameter constraint, each TypeReference specified as a base interface, and the ObjectType specified as its body.

A module directly depends on its exported members.

A Type or ObjectType directly depends on every TypeReference that occurs within the type at any level of nesting.

A TypeReference directly depends on the type it references and on each Type specified as a type argument.

A named type T having a root module R (section 2.3) is said to be at least as accessible as a member M if

R is the global module or an external module, or

R is an internal module in the parent module chain of M.

In the example

interface A { x: string; }

module M {
export interface B { x: A; }
export interface C { x: B; }
export function foo(c: C) { … }
}

the ‘foo’ function depends upon the named types ‘A’, ‘B’, and ‘C’. In order to export ‘foo’ it is necessary to also export ‘B’ and ‘C’ as they otherwise would not be at least as accessible as ‘foo’. The ‘A’ interface is already at least as accessible as ‘foo’ because it is declared in a parent module of foo’s module.

Declaration Merging
Internal modules are “open-ended” and internal module declarations with the same qualified name relative to a common root (as defined in section 2.3) contribute to a single module. For example, the following two declarations of a module outer might be located in separate source files.

File a.ts:

module outer {
var local = 1; // Non-exported local variable
export var a = local; // outer.a
export module inner {
export var x = 10; // outer.inner.x

}
}

File b.ts:

module outer {
var local = 2; // Non-exported local variable
export var b = local; // outer.b
export module inner {
export var y = 20; // outer.inner.y
}
}

Assuming the two source files are part of the same program, the two declarations will have the global module as their common root and will therefore contribute to the same module instance, the instance type of which will be:

{
a: number;
b: number;
inner: {
x: number;
y: number;
};
}

Declaration merging does not apply to local aliases created by import declarations. In other words, it is not possible have an import declaration and a module declaration for the same name within the same module body.

Declaration merging also extends to internal module declarations with the same qualified name relative to a common root as a function, class, or enum declaration:

When merging a function and an internal module, the type of the function object is merged with the instance type of the module. In effect, the overloads or implementation of the function provide the call signatures and the exported members of the module provide the properties of the combined type.

When merging a class and an internal module, the type of the constructor function object is merged with the instance type of the module. In effect, the overloads or implementation of the class constructor provide the construct signatures, and the static members of the class and exported members of the module provide the properties of the combined type. It is an error to have static class members and exported module members with the same name.

When merging an enum and an internal module, the type of the enum object is

merged with the instance type of the module. In effect, the members of the enum and the exported members of the module provide the properties of the combined type. It is an error to have enum members and exported module members with the same name.

When merging a non-ambient function or class declaration and a non-ambient internal module declaration, the function or class declaration must be located prior to the internal module declaration in the same source file. This ensures that the shared object instance is created as a function object. (While it is possible to add properties to an object after its creation, it is not possible to make an object “callable” after the fact.)

The example

interface Point {
x: number;
y: number;
}

function point(x: number, y: number): Point {
return { x: x, y: y };
}

module point {
export var origin = point(0, 0);
export function equals(p1: Point, p2: Point) {
return p1.x == p2.x && p1.y == p2.y;
}
}

var p1 = point(0, 0);
var p2 = point.origin;
var b = point.equals(p1, p2);

declares ‘point’ as a function object with two properties, ‘origin’ and ‘equals’. Note that the module declaration for ‘point’ is located after the function declaration.

Code Generation
An internal module generates JavaScript code that is equivalent to the following:

var <ModuleName>;
(function(<ModuleName>) {
<ModuleStatements>
})(<ModuleName>||(<ModuleName>={}));

where ModuleName is the name of the module and ModuleStatements is the code generated for the statements in the module body. The ModuleName function parameter may be prefixed with one or more

underscore characters to ensure the name is unique within the function body. Note that the entire module is emitted as an anonymous function that is immediately executed. This ensures that local variables are in their own lexical environment isolated from the surrounding context. Also note that the generated function doesn’t create and return a module instance, but rather it extends the existing instance (which may have just been created in the function call). This ensures that internal modules can extend each other.

An import statement generates code of the form

var <Alias> = <EntityName>;

This code is emitted only if the imported entity is referenced as a PrimaryExpression somewhere in the body of the importing module. If an imported entity is referenced only as a TypeName or ModuleName, nothing is emitted. This ensures that types declared in one internal module can be referenced through an import alias in another internal module with no run-time overhead.

When a variable is exported, all references to the variable in the body of the module are replaced with

<ModuleName>.<VariableName>

This effectively promotes the variable to be a property on the module instance and ensures that all references to the variable become references to the property.

When a function, class, enum, or module is exported, the code generated for the entity is followed by an assignment statement of the form

<ModuleName>.<EntityName> = <EntityName>;

This copies a reference to the entity into a property on the module instance.

11. Source Files and External Modules

TypeScript implements external modules that are closely aligned with those proposed for ECMAScript 6 and supports code generation targeting CommonJS and AMD module systems.

NOTE: TypeScript currently doesn’t support the full proposed capabilities of the ECMAScript 6 import and export syntax. We expect to align more closely on the syntax as the ECMAScript 6 specification evolves.

Source Files
A TypeScript program consists of one or more source files that are either implementation source files or declaration source files. Source files with extension ‘.ts’ are ImplementationSourceFiles containing statements and declarations. Source files with extension ‘.d.ts’ are DeclarationSourceFiles containing declarations only. Declaration source files are a strict subset of implementation source files.

SourceFile:
ImplementationSourceFile
DeclarationSourceFile

ImplementationSourceFile:
ImplementationElementsopt

ImplementationElements:
ImplementationElement
ImplementationElements ImplementationElement

ImplementationElement:
ModuleElement
ExportAssignment
exportopt ExternalImportDeclaration
exportopt AmbientDeclaration

DeclarationSourceFile:
DeclarationElementsopt

DeclarationElements:
DeclarationElement
DeclarationElements DeclarationElement

DeclarationElement:
exportopt InterfaceDeclaration
exportopt ImportDeclaration
ExportAssignment
exportopt ExternalImportDeclaration
exportopt AmbientDeclaration


When a TypeScript program is compiled, all of the program’s source files are processed together. Statements and declarations in different source files can depend on each other, possibly in a circular fashion. By default, a JavaScript output file is generated for each implementation source file in a compilation, but no output is generated from declaration source files.

The source elements permitted in a TypeScript implementation source file are a superset of those supported by JavaScript. Specifically, TypeScript extends the JavaScript grammar’s existing VariableDeclaration (section 5.1) and FunctionDeclaration (section 6.1) productions, and adds InterfaceDeclaration (section 7.1), ClassDeclaration (section 8.1), EnumDeclaration (section 9.1), ModuleDeclaration (section 10.1), ImportDeclaration (section 10.3), ExternalImportDeclaration (section 11.2.2), ExportAssignment (section 11.2.4), and AmbientDeclaration (section 12.1) productions.

Declaration source files are restricted to contain declarations only. Declaration source files can be used to declare the static type information associated with existing JavaScript code in an adjunct manner. They are entirely optional but enable the TypeScript compiler and tools to provide better verification and assistance when integrating existing JavaScript code and libraries in a TypeScript application.

Implementation and declaration source files that contain no import or export declarations form the single global module. Entities declared in the global module are in scope everywhere in a program. Initialization order of the source files that make up the global module ultimately depends on the order in which the generated JavaScript files are loaded at run-time (which, for example, may be controlled by <script/> tags that reference the generated JavaScript files).

Implementation and declaration source files that contain at least one external import declaration, export assignment, or top-level exported declaration are considered separate external modules. Entities declared in an external module are in scope only in that module, but exported entities can be imported into other modules using import declarations. Initialization order of external modules is determined by the module loader being and is not specified by the TypeScript language. However, it is generally the case that non-circularly dependent modules are automatically loaded and initialized in the correct order.

External modules can additionally be declared using AmbientModuleDeclarations in the global module that directly specify the external module names as string literals. This is described further in section 12.1.6.

Source Files Dependencies
The TypeScript compiler automatically determines a source file’s dependencies and includes those dependencies in the program being compiled. The determination is made from “reference comments” and external import declarations as follows:

A comment of the form /// <reference path="…"/> adds a dependency on the source file specified in the path argument. The path is resolved relative to the directory of the containing source file.

An external import declaration that specifies a relative external module name (section 11.2.1) resolves the name relative to the directory of the containing source file. If a source file with the resulting path and file extension ‘.ts’ exists, that file is added as a dependency. Otherwise, if a source file with the resulting path and file extension ‘.d.ts’

exists, that file is added as a dependency.

An external import declaration that specifies a top-level external module name (section 11.2.1) resolves the name in a host dependent manner (typically by resolving the name relative to a module name space root or searching for the name in a series of directories). If a source file with extension ‘.ts’ or ‘.d.ts’ corresponding to the reference is located, that file is added as a dependency.

Any files included as dependencies in turn have their references analyzed in a transitive manner until all dependencies have been determined.

External Modules
External modules are separately loaded bodies of code referenced using external module names. External modules can be likened to functions that are loaded and executed once to initialize their associated module instance. Entities declared in an external module are private and inaccessible elsewhere unless they are exported.

External modules are written as separate source files that contain at least one external import declaration, export assignment, or top-level exported declaration. Specifically, if a source file contains at least one

ExternalImportDeclaration,

ExportAssignment,

top-level exported VariableDeclaration,

top-level exported FunctionDeclaration,

top-level exported ClassDeclaration,

top-level exported InterfaceDeclaration,

top-level exported EnumDeclaration,

top-level exported ModuleDeclaration,

top-level exported ImportDeclaration, or

top-level exported AmbientDeclaration,

that source file is considered an external module; otherwise, the source file is considered part of the global module.

Below is an example of two external modules written in separate source files.

File main.ts:

import log = require("log");
log.message("hello");


File log.ts:

export function message(s: string) {
console.log(s);
}

The import declaration in the ‘main’ module references the ‘log’ module and compiling the ‘main.ts’ file causes the ‘log.ts’ file to also be compiled as part of the program. At run-time, the import declaration loads the ‘log’ module and produces a reference to its module instance through which it is possible to reference the exported function.

TypeScript supports two patterns of JavaScript code generation for external modules: The CommonJS Modules pattern (section 11.2.5), typically used by server frameworks such as node.js, and the Asynchronous Module Definition (AMD) pattern (section 11.2.6), an extension to CommonJS Modules that permits asynchronous module loading, as is typical in browsers. The desired module code generation pattern is selected through a compiler option and does not affect the TypeScript source code. Indeed, it is possible to author external modules that can be compiled for use both on the server side (e.g. using node.js) and on the client side (using an AMD compliant loader) with no changes to the TypeScript source code.

External Module Names
External modules are identified and referenced using external module names. The following definition is aligned with that provided in the CommonJS Modules 1.0 specification.

An external module name is a string of “terms” delimited by forward slashes.

External module names may not have file-name extensions like “.js”.

External module names may be “relative” or “top-level”. An external module name is “relative” if the first term is “.” or “..”.

Top-level names are resolved off the conceptual module name space root.

Relative names are resolved relative to the name of the module in which they occur.

For purposes of resolving external module references, TypeScript associates a file path with every external module. The file path is simply the path of the module’s source file without the file extension. For example, an external module contained in the source file ‘\src\lib\io.ts’ has the file path ‘C:/src/lib/io’ and an external module contained in the source file ‘\src\ui\editor.d.ts’ has the file path ‘C:/src/ui/editor’.

An external module name in an import declaration is resolved as follows:

If the import declaration specifies a relative external module name, the name is resolved relative to the directory of the referencing module’s file path. The program must contain a module with the resulting file path or otherwise an error occurs. For example, in a module with the file path ‘C:/src/ui/main’, the external module names ‘./editor’ and ‘../lib/io’ reference modules with the file paths ‘C:/src/ui/editor’ and ‘C:/src/lib/io’.


If the import declaration specifies a top-level external module name and the program contains an AmbientExternalModuleDeclaration (section 12.1.6) with a string literal that specifies that exact name, then the import declaration references that ambient external module.

If the import declaration specifies a top-level external module name and the program contains no AmbientExternalModuleDeclaration (section 12.1.6) with a string literal that specifies that exact name, the name is resolved in a host dependent manner (for example by considering the name relative to a module name space root). If a matching module cannot be found an error occurs.

External Import Declarations
External import declarations are used to import external modules and create local aliases by which they may be referenced.

ExternalImportDeclaration:
import Identifier = ExternalModuleReference ;

ExternalModuleReference:
require ( StringLiteral )

The string literal specified in an ExternalModuleReference is interpreted as an external module name (section 11.2.1).

An external import declaration introduces a local identifier that references a given external module. The local identifier becomes an alias for, and is classified exactly like, the entity or entities exported from the referenced external module. Specifically, if the referenced external module contains no export assignment the identifier is classified as a module, and if the referenced external module contains an export assignment the identifier is classified exactly like the entity or entities named in the export assignment.

Export Declarations
An external module that contains no export assignment (section 11.2.4) exports an entity classified as a module. Similarly to an internal module, export declarations (section 10.4) in the external module are used to declare the members of this entity.

Unlike a non-instantiated internal module (section 10.1), an external module containing only interface types and non-instantiated internal modules still has a module instance associated with it, albeit one with no members.

If an external module contains an export assignment it is an error for the external module to also contain export declarations. The two types of exports are mutually exclusive.

Export Assignments
An export assignment designates a module member as the entity to be exported in place of the external module itself.


ExportAssignment:
export = Identifier ;

The Identifier of an export assignment must name one or more entities declared at the top level in the external module. When an external module containing an export assignment is imported, the local alias introduced by the external import declaration takes on all meanings of the identifier named in the export assignment.

It is an error for an external module to contain more than one export assignment.

Assume the following example resides in the file ‘point.ts’:

export = Point;

class Point {
constructor(public x: number, public y: number) { }
static origin = new Point(0, 0);
}

When ‘point.ts’ is imported in another external module, the import alias references the exported class and can be used both as a type and as a constructor function:

import Pt = require("point");

var p1 = new Pt(10, 20);
var p2 = Pt.origin;

Note that there is no requirement that the import alias use the same name as the exported entity.

CommonJS Modules
The CommonJS Modules definition specifies a methodology for writing JavaScript modules with implied privacy, the ability to import other modules, and the ability to explicitly export members. A CommonJS compliant system provides a ‘require’ function that can be used to synchronously load other external modules to obtain their singleton module instance, as well as an ‘exports’ variable to which a module can add properties to define its external API.

The ‘main’ and ‘log’ example from section 11.2 above generates the following JavaScript code when compiled for the CommonJS Modules pattern:

File main.js:

var log = require("log");
log.message("hello");

File log.js:

exports.message = function(s) {
console.log(s);

}

An external import declaration is represented in the generated JavaScript as a variable initialized by a call to the ‘require’ function provided by the module system host. A variable declaration and ‘require’ call is emitted for a particular imported module only if the imported module is referenced as a PrimaryExpression somewhere in the body of the importing module. If an imported module is referenced only as a ModuleName or TypeQueryExpression, nothing is emitted.

TODO: Runtime dependency generation works transitively, i.e. if ‘bar’ is a module alias that references a module alias ‘foo’ and ‘bar’ is referenced in a value position, then ‘foo’ is considered referenced in a value position too.

An example:

File geometry.ts:

export interface Point { x: number; y: number };

export function point(x: number, y: number): Point {
return { x: x, y: y };
}

File game.ts:

import g = require("geometry");
var p = g.point(10, 20);

The ‘game’ module references the imported ‘geometry’ module in an expression (through its alias ‘g’) and a ‘require’ call is therefore included in the emitted JavaScript:

var g = require("geometry");
var p = g.point(10, 20);

Had the ‘game’ module instead been written to only reference ‘geometry’ in a type position

import g = require("geometry");
var p: g.Point = { x: 10, y: 20 };

the emitted JavaScript would have no dependency on the ‘geometry’ module and would simply be

var p = { x: 10, y: 20 };

AMD Modules
The Asynchronous Module Definition (AMD) specification extends the CommonJS Modules specification with a pattern for authoring asynchronously loadable modules with associated dependencies. Using the AMD pattern, modules are emitted as calls to a global ‘define’ function taking an array of dependencies, specified as external module names, and a callback function containing the module body. The global ‘define’ function is provided by including an AMD compliant loader in the application. The loader arranges to asynchronously load the module’s dependencies and, upon completion, calls the callback function passing resolved module instances as arguments in the order they were listed in the dependency array.


The “main” and “log” example from above generates the following JavaScript code when compiled for the AMD pattern.

File main.js:

define(["require", "exports", "log"], function(require, exports, log) {
log.message("hello");
}

File log.js:

define(["require", "exports"], function(require, exports) {
exports.message = function(s) {
console.log(s);
}
}

The special ‘require’ and ‘exports’ dependencies are always present. Additional entries are added to the dependencies array and the parameter list as required to represent imported external modules. Similar to the code generation for CommonJS Modules, a dependency entry is generated for a particular imported module only if the imported module is referenced as a PrimaryExpression somewhere in the body of the importing module. If an imported module is referenced only as a ModuleName, no dependency is generated for that module.

Code Generation
TODO: Finish this section.

12 Ambients

Ambient declarations are used to provide static typing over existing JavaScript code. Ambient declarations differ from regular declarations in that no JavaScript code is emitted for them. Instead of introducing new variables, functions, classes, enums, or modules, ambient declarations provide type information for entities that exist “ambiently” and are included in a program by external means, for example by referencing a JavaScript library in a <script/> tag.

TODO: Finish this chapter.

Ambient Declarations
Ambient declarations are written using the declare keyword and can declare variables, functions, classes, enums, internal modules, or external modules.

AmbientDeclaration:
declare AmbientVariableDeclaration
declare AmbientFunctionDeclaration
declare AmbientClassDeclaration
declare AmbientEnumDeclaration
declare AmbientModuleDeclaration
declare AmbientExternalModuleDeclaration

Ambient declarations are only permitted at the top-level in a source file (section 11.1).

Ambient Variable Declarations
An ambient variable declaration introduces a variable in the containing declaration space.

AmbientVariableDeclaration:
var Identifier TypeAnnotationopt ;

An ambient variable declaration may optionally include a type annotation. If no type annotation is present, the variable is assumed to have type Any.

An ambient variable declaration does not permit an initializer expression to be present.

Ambient Function Declarations
An ambient function declaration introduces a function in the containing declaration space.

AmbientFunctionDeclaration:
function Identifier CallSignature ;

Ambient functions may be overloaded by specifying multiple ambient function declarations with the same name, but it is an error to declare multiple overloads that are considered identical (section 3.8.2) or differ only in their return types.

Ambient function declarations cannot specify a function bodies and do not permit default parameter

values.

Ambient Class Declarations
An ambient class declaration declares a class instance type and a constructor function in the containing module.

AmbientClassDeclaration:
class Identifier TypeParametersopt ClassHeritage { AmbientClassBody }

AmbientClassBody:
AmbientClassBodyElementsopt

AmbientClassBodyElements:
AmbientClassBodyElement
AmbientClassBodyElements AmbientClassBodyElement

AmbientClassBodyElement:
AmbientConstructorDeclaration
AmbientPropertyMemberDeclaration
IndexSignature

AmbientConstructorDeclaration:
constructor ( ParameterListopt ) ;

AmbientPropertyMemberDeclaration:
PublicOrPrivateopt staticopt PropertyName TypeAnnotationopt ;
PublicOrPrivateopt staticopt PropertyName CallSignature ;

Ambient Enum Declarations
An ambient enum declaration declares an enum type and an enum object in the containing module.

AmbientEnumDeclaration:
enum Identifier { AmbientEnumBodyopt }

AmbientEnumBody:
AmbientEnumMemberList ,opt

AmbientEnumMemberList:
AmbientEnumMember
AmbientEnumMemberList , AmbientEnumMember

AmbientEnumMember:
PropertyName
PropertyName = IntegerLiteral

An AmbientEnumMember that includes an IntegerLiteral value is considered a constant member. An AmbientEnumMember with no IntegerLiteral value is considered a computed member.

Ambient Module Declarations
An ambient module declaration declares an internal module.

AmbientModuleDeclaration:
module IdentifierPath { AmbientModuleBody }

AmbientModuleBody:
AmbientModuleElementsopt

AmbientModuleElements:
AmbientModuleElement
AmbientModuleElements AmbientModuleElement

AmbientModuleElement:
exportopt AmbientVariableDeclaration
exportopt AmbientFunctionDeclaration
exportopt AmbientClassDeclaration
exportopt InterfaceDeclaration
exportopt AmbientEnumDeclaration
exportopt AmbientModuleDeclaration
exportopt ImportDeclaration

Except for ImportDeclarations, AmbientModuleElements always declare exported entities regardless of whether they include the optional export modifier.

Ambient External Module Declarations
An AmbientExternalModuleDeclaration declares an external module. This type of declaration is permitted only in the global module. The StringLiteral must specify a top-level external module name. Relative external module names are not permitted.

AmbientExternalModuleDeclaration:
module StringLiteral { AmbientExternalModuleBody }

AmbientExternalModuleBody:
AmbientExternalModuleElementsopt

AmbientExternalModuleElements:
AmbientExternalModuleElement
AmbientExternalModuleElements AmbientExternalModuleElement

AmbientExternalModuleElement:
AmbientModuleElement
ExportAssignment
exportopt ExternalImportDeclaration


An ExternalImportDeclaration in an AmbientExternalModuleDeclaration may reference other external modules only through top-level external module names. Relative external module names are not permitted.

If an ambient external module declaration includes an export assignment, it is an error for any of the declarations with the module to specify an export modifier. If an ambient external module declaration contains no export assignment, entities declared in the module are exported regardless of whether their declarations include the optional export modifier.

A. Grammar

name::
* McsEngl.A. Grammar@cptIt,

This appendix contains a summary of the grammar found in the main document. As described in section 2.1, the TypeScript grammar is a superset of the grammar defined in the ECMAScript Language Specification (specifically, the ECMA-262 Standard, 5th Edition) and this appendix lists only productions that are new or modified from the ECMAScript grammar.

Types
TypeParameters:
< TypeParameterList >

TypeParameterList:
TypeParameter
TypeParameterList , TypeParameter

TypeParameter:
Identifier Constraintopt

Constraint:
extends Type

Type:
PredefinedType
TypeReference
TypeQuery
TypeLiteral

PredefinedType:
any
number
boolean
string
void

TypeReference:
TypeName TypeArgumentsopt

TypeName:
Identifier
ModuleName . Identifier

ModuleName:
Identifier

ModuleName . Identifier

TypeArguments:
< TypeArgumentList >

TypeArgumentList:
TypeArgument
TypeArgumentList , TypeArgument

TypeArgument:
Type

TypeQuery:
typeof TypeQueryExpression

TypeQueryExpression:
Identifier
TypeQueryExpression . IdentifierName

TypeLiteral:
ObjectType
ArrayType
FunctionType
ConstructorType

ArrayType:
PredefinedType [ ]
TypeReference [ ]
ObjectType [ ]
ArrayType [ ]

FunctionType:
TypeParametersopt ( ParameterListopt ) => Type

ConstructorType:
new TypeParametersopt ( ParameterListopt ) => Type

ObjectType:
{ TypeBodyopt }

TypeBody:
TypeMemberList ;opt

TypeMemberList:
TypeMember
TypeMemberList ; TypeMember


TypeMember:
PropertySignature
CallSignature
ConstructSignature
IndexSignature
MethodSignature

PropertySignature:
PropertyName ?opt TypeAnnotationopt

PropertyName:
IdentifierName
StringLiteral
NumericLiteral

CallSignature:
TypeParametersopt ( ParameterListopt ) TypeAnnotationopt

ParameterList:
RequiredParameterList
OptionalParameterList
RestParameter
RequiredParameterList , OptionalParameterList
RequiredParameterList , RestParameter
OptionalParameterList , RestParameter
RequiredParameterList , OptionalParameterList , RestParameter

RequiredParameterList:
RequiredParameter
RequiredParameterList , RequiredParameter

RequiredParameter:
PublicOrPrivateopt Identifier TypeAnnotationopt
Identifier : StringLiteral

PublicOrPrivate:
public
private

OptionalParameterList:
OptionalParameter
OptionalParameterList , OptionalParameter

OptionalParameter:

PublicOrPrivateopt Identifier ? TypeAnnotationopt
PublicOrPrivateopt Identifier TypeAnnotationopt Initialiser

RestParameter:
... Identifier TypeAnnotationopt

ConstructSignature:
new TypeParametersopt ( ParameterListopt ) TypeAnnotationopt

IndexSignature:
[ Identifier : string ] TypeAnnotation
[ Identifier : number ] TypeAnnotation

MethodSignature:
PropertyName ?opt CallSignature

Expressions
PropertyAssignment: ( Modified )
PropertyName : AssignmentExpression
PropertyName CallSignature { FunctionBody }
GetAccessor
SetAccessor

GetAccessor:
get PropertyName ( ) TypeAnnotationopt { FunctionBody }

SetAccessor:
set PropertyName ( Identifier TypeAnnotationopt ) { FunctionBody }

CallExpression: ( Modified )

super ( ArgumentListopt )
super . IdentifierName

FunctionExpression: ( Modified )
function Identifieropt CallSignature { FunctionBody }

AssignmentExpression: ( Modified )

ArrowFunctionExpression

ArrowFunctionExpression:
ArrowFormalParameters => Block
ArrowFormalParameters => AssignmentExpression


ArrowFormalParameters:
CallSignature
Identifier

Arguments: ( Modified )
TypeArgumentsopt ( ArgumentListopt )

UnaryExpression: ( Modified )

< Type > UnaryExpression

Statements
VariableDeclaration: ( Modified )
Identifier TypeAnnotationopt Initialiseropt

VariableDeclarationNoIn: ( Modified )
Identifier TypeAnnotationopt InitialiserNoInopt

TypeAnnotation:
: Type

Functions
FunctionDeclaration: ( Modified )
FunctionOverloadsopt FunctionImplementation

FunctionOverloads:
FunctionOverload
FunctionOverloads FunctionOverload

FunctionOverload:
function Identifier CallSignature ;

FunctionImplementation:
function Identifier CallSignature { FunctionBody }

Interfaces
InterfaceDeclaration:
interface Identifier TypeParametersopt InterfaceExtendsClauseopt ObjectType

InterfaceExtendsClause:
extends ClassOrInterfaceTypeList

ClassOrInterfaceTypeList:

ClassOrInterfaceType
ClassOrInterfaceTypeList , ClassOrInterfaceType

ClassOrInterfaceType:
TypeReference

Classes
ClassDeclaration:
class Identifier TypeParametersopt ClassHeritage { ClassBody }

ClassHeritage:
ClassExtendsClauseopt ImplementsClauseopt

ClassExtendsClause:
extends ClassType

ClassType:
TypeReference

ImplementsClause:
implements ClassOrInterfaceTypeList

ClassBody:
ClassElementsopt

ClassElements:
ClassElement
ClassElements ClassElement

ClassElement:
ConstructorDeclaration
PropertyMemberDeclaration
IndexMemberDeclaration

ConstructorDeclaration:
ConstructorOverloadsopt ConstructorImplementation

ConstructorOverloads:
ConstructorOverload
ConstructorOverloads ConstructorOverload

ConstructorOverload:
PublicOrPrivateopt constructor ( ParameterListopt ) ;

ConstructorImplementation:
PublicOrPrivateopt constructor ( ParameterListopt ) { FunctionBody }


PropertyMemberDeclaration:
MemberVariableDeclaration
MemberFunctionDeclaration
MemberAccessorDeclaration

MemberVariableDeclaration:
PublicOrPrivateopt staticopt PropertyName TypeAnnotationopt Initialiseropt ;

MemberFunctionDeclaration:
MemberFunctionOverloadsopt MemberFunctionImplementation

MemberFunctionOverloads:
MemberFunctionOverload
MemberFunctionOverloads MemberFunctionOverload

MemberFunctionOverload:
PublicOrPrivateopt staticopt PropertyName CallSignature ;

MemberFunctionImplementation:
PublicOrPrivateopt staticopt PropertyName CallSignature { FunctionBody }

MemberAccessorDeclaration:
PublicOrPrivateopt staticopt GetAccessor
PublicOrPrivateopt staticopt SetAccessor

IndexMemberDeclaration:
IndexSignature ;

Enums
EnumDeclaration:
enum Identifier { EnumBodyopt }

EnumBody:
ConstantEnumMembers ,opt
ConstantEnumMembers , EnumMemberSections ,opt
EnumMemberSections ,opt

ConstantEnumMembers:
PropertyName
ConstantEnumMembers , PropertyName

EnumMemberSections:
EnumMemberSection
EnumMemberSections , EnumMemberSection


EnumMemberSection:
ConstantEnumMemberSection
ComputedEnumMember

ConstantEnumMemberSection:
PropertyName = IntegerLiteral
PropertyName = IntegerLiteral , ConstantEnumMembers

ComputedEnumMember:
PropertyName = AssignmentExpression

Internal Modules
ModuleDeclaration:
module IdentifierPath { ModuleBody }

IdentifierPath:
Identifier
IdentifierPath . Identifier

ModuleBody:
ModuleElementsopt

ModuleElements:
ModuleElement
ModuleElements ModuleElement

ModuleElement:
Statement
exportopt VariableDeclaration
exportopt FunctionDeclaration
exportopt ClassDeclaration
exportopt InterfaceDeclaration
exportopt EnumDeclaration
exportopt ModuleDeclaration
exportopt ImportDeclaration

ImportDeclaration:
import Identifier = EntityName ;

EntityName:
Identifier
ModuleName . Identifier


Programs and External Modules
SourceFile:
ImplementationSourceFile
DeclarationSourceFile

ImplementationSourceFile:
ImplementationElementsopt

ImplementationElements:
ImplementationElement
ImplementationElements ImplementationElement

ImplementationElement:
ModuleElement
ExportAssignment
exportopt ExternalImportDeclaration
exportopt AmbientDeclaration

DeclarationSourceFile:
DeclarationElementsopt

DeclarationElements:
DeclarationElement
DeclarationElements DeclarationElement

DeclarationElement:
ExportAssignment
exportopt InterfaceDeclaration
exportopt ImportDeclaration
exportopt ExternalImportDeclaration
exportopt AmbientDeclaration

ExternalImportDeclaration:
import Identifier = ExternalModuleReference ;

ExternalModuleReference:
require ( StringLiteral )

ExportAssignment:
export = Identifier ;

Ambients

AmbientDeclaration:
declare AmbientVariableDeclaration
declare AmbientFunctionDeclaration
declare AmbientClassDeclaration
declare AmbientEnumDeclaration
declare AmbientModuleDeclaration
declare AmbientExternalModuleDeclaration

AmbientVariableDeclaration:
var Identifier TypeAnnotationopt ;

AmbientFunctionDeclaration:
function Identifier CallSignature ;

AmbientClassDeclaration:
class Identifier TypeParametersopt ClassHeritage { AmbientClassBody }

AmbientClassBody:
AmbientClassBodyElementsopt

AmbientClassBodyElements:
AmbientClassBodyElement
AmbientClassBodyElements AmbientClassBodyElement

AmbientClassBodyElement:
AmbientConstructorDeclaration
AmbientPropertyMemberDeclaration
IndexSignature

AmbientConstructorDeclaration:
constructor ( ParameterListopt ) ;

AmbientPropertyMemberDeclaration:
PublicOrPrivateopt staticopt PropertyName TypeAnnotationopt ;
PublicOrPrivateopt staticopt PropertyName CallSignature ;

AmbientEnumDeclaration:
enum Identifier { AmbientEnumBodyopt }

AmbientEnumBody:
AmbientEnumMemberList ,opt

AmbientEnumMemberList:
AmbientEnumMember
AmbientEnumMemberList , AmbientEnumMember


AmbientEnumMember:
PropertyName
PropertyName = IntegerLiteral

AmbientModuleDeclaration:
module IdentifierPath { AmbientModuleBody }

AmbientModuleBody:
AmbientModuleElementsopt

AmbientModuleElements:
AmbientModuleElement
AmbientModuleElements AmbientModuleElement

AmbientModuleElement:
exportopt AmbientVariableDeclaration
exportopt AmbientFunctionDeclaration
exportopt AmbientClassDeclaration
exportopt InterfaceDeclaration
exportopt AmbientEnumDeclaration
exportopt AmbientModuleDeclaration
exportopt ImportDeclaration

AmbientExternalModuleDeclaration:
module StringLiteral { AmbientExternalModuleBody }

AmbientExternalModuleBody:
AmbientExternalModuleElementsopt

AmbientExternalModuleElements:
AmbientExternalModuleElement
AmbientExternalModuleElements AmbientExternalModuleElement

AmbientExternalModuleElement:
AmbientModuleElement
ExportAssignment
exportopt ExternalImportDeclaration
[chrome-extension://gbkeegbaiigmenfmjfclcdgdpimamgkj/views/app.html]

lcpTs'resource

name::
* McsEngl.lcpTs'resource@cptIt,

_ADDRESS.WPG:
* http://www.typescriptlang.org//
* http://typescript.codeplex.com//
* https://www.npmjs.org/package/typescript,
* http://www.typescriptlang.org/Playground//
===
* http://stackoverflow.com/questions/tagged/typescript,
* https://typescript.codeplex.com/documentation?referringTitle=TypeScript%20Documentation,
* http://www.typescriptlang.org/samples//
* http://www.sitepen.com/blog/2013/12/31/definitive-guide-to-typescript//
* http://www.sitepen.com/blog/2013/12/31/typescript-cheat-sheet//

lcpTs'tool

name::
* McsEngl.lcpTs'tool@cptIt,

lcpTs'compiler

name::
* McsEngl.lcpTs'compiler@cptIt,
* McsEngl.ts'compiler@cptIt,
* McsEngl.tscompiler@cptIt,
* McsEngl.TypeScript-compiler@cptIt,
* McsEngl.tsc@cptIt,

_INSTALLING:
> npm install -g typescript

_RUN:
> tsc filename.ts

--noImplicitAny:
When compiling, using the --noImplicitAny command-line flag will also prevent any accidental implicit any types from sneaking into your code (i.e. areas where the compiler is not smart enough to figure out the correct type).
[http://www.sitepen.com/blog/2013/12/31/definitive-guide-to-typescript/#basic-types]

--out:
tsc --out sample.js file1.ts file2.ts
concatenates input files in one output file.

tsc'building

name::
* McsEngl.tsc'building@cptIt,

1: download code:
https://typescript.codeplex.com/SourceControl/latest#README.txt,

2: jake local

lcp.instance.Dart {2011}

_CREATED: {2011-10-11}

name::
* McsEngl.conceptIt446,
* McsEngl.dart@cptIt446,
* McsEngl.languageDart@cptIt446,
* McsEngl.lcpDart, {2014-02-23}
* McsEngl.pl.dart,
* McsEngl.plDart, {2014-01-30}
* McsEngl.programing-language.Dart,

lcpDart'DEFINITION

_DESCRIPTION:
Dart is a class-based, single-inheritance, pure object-oriented programming language. Dart is optionally typed (13) and supports reied generics and interfaces.
[http://www.dartlang.org/docs/spec/dartLangSpec.pdf]
===
Dart is a new class-based programming language for creating structured web applications. Developed with the goals of simplicity, efficiency, and scalability, the Dart language combines powerful new language features with familiar language constructs into a clear, readable syntax.
[http://www.dartlang.org/docs/technical-overview/index.html]

lcpDart'GENERIC

_GENERIC:
* ool#cptItsoft220#

lcpDart'archetype (domainIn)

name::
* McsEngl.lcpDart'archetype (domainIn)@cptIt,
* McsEngl.lcpDart'domainIn-characteristic@cptIt,

lcpDart'archetype-set

name::
* McsEngl.lcpDart'archetype-set@cptIt,

lcpDart'archetype.ALGORITHM

name::
* McsEngl.lcpDart'archetype.ALGORITHM@cptIt,
* McsEngl.dartalgo@cptIt,
* McsEngl.lcpDart'code.DATA.NO-(processing)@cptIt,
* McsEngl.lcpDart'operation-code@cptIt,
* McsEngl.lcpDart'processing-code@cptIt,

dartalgo.Arithmetic

name::
* McsEngl.dartalgo.Arithmetic@cptIt,

dartalgo.Boolean

name::
* McsEngl.dartalgo.Boolean@cptIt,

dartalgo.Converting-datatype

name::
* McsEngl.dartalgo.Converting-datatype@cptIt,

dartalgo.Comparison

name::
* McsEngl.dartalgo.Comparison@cptIt,

dartalgo.Function#ql:dartfunction@cptIt#

name::
* McsEngl.dartalgo.Function@cptIt,

dartalgo.TEXT

name::
* McsEngl.dartalgo.TEXT@cptIt,

It is possible to embed expressions within string literals, such that the these
expressions are evaluated, and the resulting values are converted into strings
and concatenated with the enclosing string. This process is known as string
interpolation
[http://www.dartlang.org/docs/spec/dartLangSpec.pdf]

lcpDart'archetype.algorithm.FUNCTION

name::
* McsEngl.lcpDart'archetype.algorithm.FUNCTION@cptIt,
* McsEngl.dart'function@cptIt,
* McsEngl.dartfunction@cptIt,
* McsEngl.lcpDart'code.atomNo.FUNCTION@cptIt,

_WHOLE:
* program,

_DESCRIPTION:
Functions abstract over executable actions.
...
A function literal is an object that encapsulates an executable unit of code.
[http://www.dartlang.org/docs/spec/dartLangSpec.pdf]

dartfunction'doing.CREATING

name::
* McsEngl.dartfunction'doing.CREATING@cptIt,

_DESCRIPTION:
// Define a function.
printNumber(num aNumber) {
print('The number is $aNumber.'); // Print to the console.
}
...
For functions that contain just one expression, you can use a shorthand syntax:
printNumber(number) => print('The number is $number.');
[https://www.dartlang.org/docs/dart-up-and-running/contents/ch02.html]

dartfunction'output

name::
* McsEngl.dartfunction'output@cptIt,

_DESCRIPTION:
All functions return a value. If no return value is specified, the statement return null; is implicitly appended to the function body.
[https://www.dartlang.org/docs/dart-up-and-running/contents/ch02.html]

SPECIFIC

dartfunction.specific

_SPECIFIC:
* instance-method
* nested-function
* static-method
* top-level-function##

Dart supports top-level functions (such as main()), as well as functions tied to a class or object (static and instance methods, respectively). You can also create functions within functions (nested or local functions).
[https://www.dartlang.org/docs/dart-up-and-running/contents/ch02.html]

dartfunction.MAIN

name::
* McsEngl.dartfunction.MAIN@cptIt,

_DESCRIPTION:
Every app must have a top-level main() function, which serves as the entrypoint to the app. The main() function returns void and has an optional List<String> parameter for arguments.
[https://www.dartlang.org/docs/dart-up-and-running/contents/ch02.html]

lcpDart'archetype.collection.CLASS

name::
* McsEngl.lcpDart'archetype.collection.CLASS@cptIt,
* McsEngl.lcpDart'code.atomNo.CLASS@cptIt,
* McsEngl.lcpDart'class@cptIt,
* McsEngl.dartclass@cptIt,

_GENERIC:
* atomNo-code#linkL#

_WHOLE:
* program,

_DESCRIPTION:
A class defines the form and behavior of a set of objects which are its instances.
A class has constructors, instance members and static members. The in-
stance members of a class are its instance methods, getters, setters and instance
variables. The static members of a class are its static methods, getters, setters
and static variables.
Every class has a single superclass except class Object which has no superclass. A class may implement a number of interfaces by declaring them in its
implements clause (7.9).
[http://www.dartlang.org/docs/spec/dartLangSpec.pdf]

dartclass'constructor

name::
* McsEngl.dartclass'constructor@cptIt,
* McsEngl.lcpDart'constructor@cptIt,

dartclass'field

name::
* McsEngl.dartclass'field@cptIt,
* McsEngl.dart'field@cptIt,
* McsEngl.dart'instance-variable@cptIt,

dartclass'method

name::
* McsEngl.dartclass'method@cptIt,
* McsEngl.dart'method@cptIt,

dartclass'method.INSTANCE

name::
* McsEngl.dartclass'method.INSTANCE@cptIt,
* McsEngl.dart'instance-method@cptIt,

dartclass'method.STATIC

name::
* McsEngl.dartclass'method.STATIC@cptIt,
* McsEngl.dart'static-method@cptIt,

SPECIFIC

* dartclass.specific,

dartclass.ABSTRACT

name::
* McsEngl.dartclass.ABSTRACT@cptIt,

_DESCRIPTION:
Abstract Classes
Use the abstract modifier to define an abstract class—a class that can’t be instantiated. Abstract classes are useful for defining interfaces, often with some implementation. If you want your abstract class to appear to be instantiable, define a factory constructor.

Abstract classes often have abstract methods. Here’s an example of declaring an abstract class that has an abstract method:

// This class is declared abstract and thus can't be instantiated.
abstract class AbstractContainer {
// ...Define constructors, fields, methods...

void updateChildren(); // Abstract method.
}
The following class isn’t abstract, and thus can be instantiated even though it defines an abstract method:

class SpecializedContainer extends AbstractContainer {
// ...Define more constructors, fields, methods...

void updateChildren() {
// ...Implement updateChildren()...
}
// Abstract method causes a warning but doesn't prevent instantiatation.
void doSomething();
}
[https://www.dartlang.org/docs/dart-up-and-running/contents/ch02.html]

dartclass.INSTANCE

name::
* McsEngl.dartclass.INSTANCE@cptIt,
* McsEngl.dart'object@cptIt,
* McsEngl.dartobject@cptIt,

_DESCRIPTION:
Everything you can place in a variable is an object, and every object is an instance of a class. Even numbers, functions, and null are objects. All objects inherit from the Object class.
[https://www.dartlang.org/docs/dart-up-and-running/contents/ch02.html]

dartobject'member

name::
* McsEngl.dartobject'member@cptIt,

_DESCRIPTION:
Objects have members consisting of functions and data (methods and instance variables, respectively).
[https://www.dartlang.org/docs/dart-up-and-running/contents/ch02.html]

lcpDart'achetype.collection.MAP

name::
* McsEngl.lcpDart'achetype.collection.MAP@cptIt,
* McsEngl.lcpDart'data.Map@cptIt,
* McsEngl.dart'map@cptIt,

_DESCRIPTION:
Maps
In general, a map is an object that associates keys and values. Both keys and values can be any type of object. Each key occurs only once, but you can use the same value multiple times. Dart support for maps is provided by map literals and the Map type.

Here are a couple of simple Dart maps, created using map literals:

var gifts = {
// Keys Values
'first' : 'partridge',
'second' : 'turtledoves',
'fifth' : 'golden rings'
};

var nobleGases = {
// Keys Values
2 : 'helium',
10 : 'neon',
18 : 'argon',
};
You can create the same objects using a Map constructor:

var gifts = new Map();
gifts['first'] = 'partridge';
gifts['second'] = 'turtledoves';
gifts['fifth'] = 'golden rings';

var nobleGases = new Map();
nobleGases[2] = 'helium';
nobleGases[10] = 'neon';
nobleGases[18] = 'argon';
Add a new key-value pair to an existing map just as you would in JavaScript:

var gifts = { 'first': 'partridge' };
gifts['fourth'] = 'calling birds'; // Add a key-value pair
Retrieve a value from a map the same way you would in JavaScript:

var gifts = { 'first': 'partridge' };
assert(gifts['first'] == 'partridge');
If you look for a key that isn’t in a map, you get a null in return:

var gifts = { 'first': 'partridge' };
assert(gifts['fifth'] == null);
Use .length to get the number of key-value pairs in the map:

var gifts = { 'first': 'partridge' };
gifts['fourth'] = 'calling birds';
assert(gifts.length == 2);
For more information about maps, see the section called “Generics” and the section called “Maps”.
[https://www.dartlang.org/docs/dart-up-and-running/contents/ch02.html]
===
A map literal denotes a map from strings to objects.
[http://www.dartlang.org/docs/spec/dartLangSpec.pdf]

lcpDart'archetype.NAMED (variable)

name::
* McsEngl.lcpDart'archetype.NAMED (variable)@cptIt,
* McsEngl.dartvariable@cptIt,
* McsEngl.lcpDart'code.atomNo.VARIABLE@cptIt,
* McsEngl.lcpDart'variable@cptIt,

_GENERIC:
* atomNo-code##

_DESCRIPTION:
variables are named-archetypes which are NOT functions.
[hmnSngo.2014-02-23]
===
Variables are storage locations in memory.
[http://www.dartlang.org/docs/spec/dartLangSpec.pdf]
===
var
A way to declare a variable without specifying its type.
[https://www.dartlang.org/docs/dart-up-and-running/contents/ch02.html]

dartvariable'doing.CREATING

name::
* McsEngl.dartvariable'doing.CREATING@cptIt,
* McsEngl.dart'variable'creating@cptIt,
* McsEngl.dart'variable'defining@cptIt,

_CODE.DART:
var number = 3;

dartvariable'doing.USING

name::
* McsEngl.dartvariable'doing.USING@cptIt,
* McsEngl.dart'variable'using@cptIt,

dartvariable'name

name::
* McsEngl.dartvariable'name@cptIt,
* McsEngl.dart'custom-name-of-code@cptIt,
* McsEngl.dart'identifier@cptIt,

_DESCRIPTION:
valid Dart identifier (i.e. doesn’t start with digits and isn’t a reserved word).
[https://www.dartlang.org/docs/dart-up-and-running/contents/ch04-tools-pub.html]
===
Unlike Java, Dart doesn’t have the keywords public, protected, and private. If an identifier starts with an underscore (_), it’s private to its library. For details, see the section called “Libraries and Visibility”.
Identifiers can start with a letter or _, followed by any combination of those characters plus digits.
[https://www.dartlang.org/docs/dart-up-and-running/contents/ch02.html]

dartvariable'type

name::
* McsEngl.dartvariable'type@cptIt,

_DESCRIPTION:
You have the option of adding static types to your variable declarations:
String name = 'Bob';
Adding types is a way to clearly express your intent. Tools such as compilers and editors can use these types to help you, by providing code completion and early warnings for bugs and code completion.
[https://www.dartlang.org/docs/dart-up-and-running/contents/ch02.html]
===
Specifying static types (such as num in the preceding example) clarifies your intent and enables static checking by tools, but it’s optional. (You might notice when you’re debugging your code that variables with no specified type get a special type: dynamic.)
[https://www.dartlang.org/docs/dart-up-and-running/contents/ch02.html]

dartvariable'value

name::
* McsEngl.dartvariable'value@cptIt,

_DESCRIPTION:
Everything you can place in a variable is an object, and every object is an instance of a class. Even numbers, functions, and null are objects. All objects inherit from the Object class.
[https://www.dartlang.org/docs/dart-up-and-running/contents/ch02.html]

SPECIFIC

_SPECIFIC:
* instance-variable (field, property)
* static-variable
* top-level-variable##
===
Dart supports top-level variables, as well as variables tied to a class or object (static and instance variables). Instance variables are sometimes known as fields or properties.
[https://www.dartlang.org/docs/dart-up-and-running/contents/ch02.html]

dartvariable.FINAL

name::
* McsEngl.dartvariable.FINAL@cptIt,

_DESCRIPTION:
Final variables
final name = 'Bob';

// you can combine types and final
final String name = 'Bob';

// Trying to reassign a final variable raises an error
name = 'Alice';
// ERROR: cannot assign value to final variable

// JavaScript: no support
[https://www.dartlang.org/docs/synonyms/]
===
Final and Const
If you never intend to change a variable, use final or const, either instead of var or in addition to a type. A final variable can be set only once; a const variable is a compile-time constant.

A local, top-level, or class variable that’s declared as final is initialized the first time it’s used:

final name = 'Bob'; // Or: final String name = 'Bob';
// name = 'Alice'; // Uncommenting this results in an error
Note

Lazy initialization of final variables helps apps start up faster.

Use const for variables that you want to be compile-time constants. If the const variable is at the class level, mark it static const. (Instance variables can’t be const.) Where you declare the variable, set the value to a compile-time constant such as a literal, a const variable, or the result of an arithmetic operation on constant numbers:

const bar = 1000000; // Unit of pressure (in dynes/cm2)
const atm = 1.01325 * bar; // Standard atmosphere
[https://www.dartlang.org/docs/dart-up-and-running/contents/ch02.html]

lcpDart'archetype.NUMBER

name::
* McsEngl.lcpDart'archetype.NUMBER@cptIt,
* McsEngl.lcpDart'data.Number@cptIt,
* McsEngl.dart'number@cptIt,

_DESCRIPTION:
A numeric literal is either a decimal or hexadecimal integer of arbitrary size, or
a decimal double.
[http://www.dartlang.org/docs/spec/dartLangSpec.pdf]

num
A type. Some of the other built-in types are String, int, and bool.

42
A number literal. Literals are a kind of compile-time constant.
[https://www.dartlang.org/docs/dart-up-and-running/contents/ch02.html]

lcpDart'archetype.STRING

name::
* McsEngl.lcpDart'archetype.STRING@cptIt,
* McsEngl.dartstring@cptIt,
* McsEngl.lcpDart'data.String@cptIt,
* McsEngl.lcpDart'string@cptIt,

_DESCRIPTION:
A string is a sequence of valid unicode code points.
[http://www.dartlang.org/docs/spec/dartLangSpec.pdf]

_CODE.DART:
'...' (or "...")
A string literal.

dartstring'code

name::
* McsEngl.dartstring'code@cptIt,
* McsEngl.dartstring'litteral@cptIt,

_DESCRIPTION:
For example, 'this is a string' is a string literal,
[https://www.dartlang.org/docs/dart-up-and-running/contents/ch02.html]

dartstring'interpolation

name::
* McsEngl.dartstring'interpolation@cptIt,

_DESCRIPTION:
$variableName (or ${expression})
String interpolation: including a variable or expression’s string equivalent inside of a string literal.
[https://www.dartlang.org/docs/dart-up-and-running/contents/ch02.html]

lcpDart'code (domainOut)

name::
* McsEngl.lcpDart'code (domainOut)@cptIt,
* McsEngl.dart'code@cptIt,
* McsEngl.dartcode@cptIt,

dart'code'problem

name::
* McsEngl.dart'code'problem@cptIt,

_SPECIFIC:
Dart tools can report two kinds of problems: warnings and errors. Warnings are just indications that your code might not work, but they don’t prevent your program from executing. Errors can be either compile-time or run-time. A compile-time error prevents the code from executing at all; a run-time error results in an exception being raised while the code executes.
[https://www.dartlang.org/docs/dart-up-and-running/contents/ch02.html]

lcpDart'code-set

name::
* McsEngl.lcpDart'code-set@cptIt,
* McsEngl.dart'domain.Out@cptIt,
* McsEngl.dart'domainOut@cptIt,

SPECIFIC

_SPECIFIC:
* unit-of-code,

lcpDart'code'parsing

name::
* McsEngl.lcpDart'code'parsing@cptIt,

dartcode.ANNOTATION

name::
* McsEngl.dartcode.ANNOTATION@cptIt,
* McsEngl.dart'annotation@cptIt,

_DESCRIPTION:
Use metadata to give additional information about your code. A metadata annotation begins with the character @, followed by either a reference to a compile-time constant (such as deprecated) or a call to a constant constructor.

Three annotations are available to all Dart code: @deprecated, @override, and @proxy. For examples of using @override and @proxy, see the section called “Extending a Class”.
[https://www.dartlang.org/docs/dart-up-and-running/contents/ch02.html]

lcpDart'Expression

name::
* McsEngl.lcpDart'Expression@cptIt,
* McsEngl.dart'expression@cptIt,

_DESCRIPTION:
Sometimes it matters whether something is an expression or a statement, so we’ll be precise about those two words.
[https://www.dartlang.org/docs/dart-up-and-running/contents/ch02.html]
===
An expression is a fragment of Dart code that can be evaluated at run time to yield a value, which is always an object. Every expression has an associated static type (13.1). Every value has an associated dynamic type (13.2).
[http://www.dartlang.org/docs/spec/dartLangSpec.pdf]

lcpDart'Operator

name::
* McsEngl.lcpDart'Operator@cptIt,

Operators are instance methods with special names.
[http://www.dartlang.org/docs/spec/dartLangSpec.pdf]

lcpDart'code.ATOM.NO (structure)

name::
* McsEngl.lcpDart'code.ATOM.NO (structure)@cptIt,
* McsEngl.dart'atomNo-code@cptIt,
* McsEngl.dart'structure-code@cptIt,

_SPECIFIC:
* class#linkL#
* data-atomNo
* dataNo-atomNo
* function#ql:dart'function#
* variable#linkL#

lcpDart'code.atomNo.API

name::
* McsEngl.lcpDart'code.atomNo.API@cptIt,
* McsEngl.dart'api@cptIt,

_ADDRESS.WPG:
* https://api.dartlang.org/docs/channels/stable/latest/index.html,

lcpDart'code.LIBRARY

name::
* McsEngl.lcpDart'code.LIBRARY@cptIt,
* McsEngl.dart'library@cptIt,
* McsEngl.dartlibrary@cptIt,

_WHOLE:
* program,

_DESCRIPTION:
Dart programs are organized in a modular fashion into units called libraries
(12). Libraries are units of encapsulation and may be mutually recursive.
[http://www.dartlang.org/docs/spec/dartLangSpec.pdf]

dartlibrary'creating

name::
* McsEngl.dartlibrary'creating@cptIt,

Define a library
// declares the following is in the animals library
library animals;

class Dog {
noise() => 'BARK!';
}
//JavaScript
// No native implementation.
// Consider require.js and AMD
[https://www.dartlang.org/docs/synonyms/]

dartlibrary'part

name::
* McsEngl.dartlibrary'part@cptIt,

_DESCRIPTION:
The first file, ballgame.dart, declares the ballgame library, imports other libraries it needs, and specifies that ball.dart and util.dart are parts of this library:

library ballgame;

import 'dart:html';
// ...Other imports go here...

part 'ball.dart';
part 'util.dart';

// ...Code might go here...
The second file, ball.dart, implements part of the ballgame library:

part of ballgame;

// ...Code goes here...
The third file, util.dart, implements the rest of the ballgame library:

part of ballgame;

// ...Code goes here...
[https://www.dartlang.org/docs/dart-up-and-running/contents/ch02.html]

dartlibrary'using

name::
* McsEngl.dartlibrary'using@cptIt,

Use a library
import 'animals.dart';
var fido = new Dog();

// prefixes are supported to avoid namespace collisions
import 'animals.dart' as pets;
var fido = new pets.Dog();
[https://www.dartlang.org/docs/synonyms/]

SPECIFIC

_SPECIFIC:
Libraries
args
crypto
custom_element
dart:async
dart:collection
dart:convert
dart:core
dart:html
dart:indexed_db
dart:io
dart:isolate
dart:js
dart:math
dart:mirrors
dart:svg
dart:typed_data
dart:web_audio
dart:web_gl
dart:web_sql
fixnum
http
http_server
intl
json
logging
mime
observe
path
polymer
polymer_expressions
sequence_zip
serialization
source_maps
template_binding
unittest
unmodifiable_collection
utf
[https://api.dartlang.org/docs/channels/stable/latest/index.html]

dartlibrary.DART-CORE

name::
* McsEngl.dartlibrary.DART-CORE@cptIt,
* McsEngl.dart:core-library@cptIt,
* McsEngl.dart'core-library@cptIt,

_DESCRIPTION:
dart:core library
Built-in types, collections, and other core functionality for every Dart program.

This library is automatically imported.

Some classes in this library, such as String and num, support Dart's built-in data types. Other classes, such as List and Map, provide data structures for managing collections of objects. And still other classes represent commonly used types of data such as URIs, dates and times, and errors.
[https://api.dartlang.org/docs/channels/stable/latest/dart_core.html]
===
The Dart core library provides a small but critical set of built-in functionality. This library is automatically imported into every Dart program.
The dart:core library defines the num, int, and double classes, which have some basic utilities for working with numbers.
[https://www.dartlang.org/docs/dart-up-and-running/contents/ch03.html]

dartlibrary.DART:HTML

name::
* McsEngl.dartlibrary.DART:HTML@cptIt,
* McsEngl.lcpDart'html-library@cptIt,

_DESCRIPTION:
Dart’s HTML library, which contains key classes and functions for programming the DOM.
[https://www.dartlang.org/docs/tutorials/connect-dart-html/]

lcpDart'code.DATA (processingNo)

name::
* McsEngl.lcpDart'code.DATA (processingNo)@cptIt,
* McsEngl.dart'data@cptIt,

lcpDart'data.List (array)

name::
* McsEngl.lcpDart'data.List (array)@cptIt,
* McsEngl.dart'array@cptIt,
* McsEngl.dart'list@cptIt,

A list literal denotes a list, which is an integer indexed collection of objects.
[http://www.dartlang.org/docs/spec/dartLangSpec.pdf]

lcpDart'data.Null

name::
* McsEngl.lcpDart'data.Null@cptIt,
* McsEngl.lcpDart'set@cptIt,

lcpDart'data.SET

name::
* McsEngl.lcpDart'data.SET@cptIt,
* McsEngl.lcpDart'set@cptIt,

_DESCRIPTION:
Sets (collections of unique items)
var fruits = new Set();
fruits.add('oranges');
fruits.add('apples');
fruits.length // == 2

fruits.add('oranges'); // duplicate of existing item
fruits.length // == 2
// JavaScript no native JavaScript equivalent
[https://www.dartlang.org/docs/synonyms/]

lcpDart'code.PACKAGE

name::
* McsEngl.lcpDart'code.PACKAGE@cptIt,
* McsEngl.dart'package@cptIt,
* McsEngl.lcpDart'package@cptIt,

_DESCRIPTION:
A Dart package is simply a directory containing any number of Dart libraries and a list of the library dependencies. A package can also contain resources for its libraries, such as documentation, tests, and images. If your app uses one or more packages, then your app itself must be a package.
[https://www.dartlang.org/docs/dart-up-and-running/contents/ch04-tools-pub.html]

_PART:
* library,

lcpDart'package'asset

name::
* McsEngl.lcpDart'package'asset@cptIt,

_DESCRIPTION:
Asset
Learn more about assets ?
A resource—Dart, HTML, JavaScript, CSS, image, or anything else—intended to be part of a deployed package. The package can be a web app, a package used by a web app, or any other package that benefits from a build step. Tools such as pub serve and pub build take source assets (such as an HTML file, a CSS file, and several Dart files) and produce generated assets (such as the same HTML and CSS files, plus a single JavaScript file).

Assets fall into four groups, with some overlap:

Source asset: An actual, authored file on disk that pub build and pub serve can find and use.
Generated asset: An asset (possibly the output of a transformer) that’s either served by pub serve or saved to disk by pub build.
Input asset: An asset that is the input to a transformer. An input asset might be a source asset, or it might be the output of a transformer in a previous phase.
Output asset: An asset that is created by a transformer. An output asset might be a generated asset, or it might be the input to a transformer in a later phase.
[http://pub.dartlang.org/doc/glossary.html#asset]

lcpDart'package'dependency

name::
* McsEngl.lcpDart'package'dependency@cptIt,

_DESCRIPTION:
Dependency
Another package that your package relies on. If your package wants to import code from some other package, that package must be a dependency. Dependencies are specified in your package’s pubspec and described here.
[http://pub.dartlang.org/doc/glossary.html#dependency]

Immediate dependency
A dependency that your package directly uses itself. The dependencies you list in your pubspec are your package’s immediate dependencies. All other dependencies are transitive dependencies.
[http://pub.dartlang.org/doc/glossary.html#immediate-dependency]

lcpDart'package'doing.CREATING

name::
* McsEngl.lcpDart'package'doing.CREATING@cptIt,
* McsEngl.dart'package'creating@cptIt,

lcpDart'package'doing.PUBLISHING

name::
* McsEngl.lcpDart'package'doing.PUBLISHING@cptIt,
* McsEngl.dart'package'publishing@cptIt,

_DESCRIPTION:
Pub isn’t just for using other people’s packages. It also allows you to share your packages with the world. Once you’ve written some useful code and you want everyone else to be able to use it, just run:

$ pub publish
Pub will check to make sure that your package follows the pubspec format and package layout conventions, and then upload your package to pub.dartlang.org. Then any Pub user will be able to download it or depend on it in their pubspecs. For example, if you just published version 1.0.0 of a package named transmogrify, then they can write:

dependencies:
transmogrify: ">= 1.0.0 < 2.0.0"
Keep in mind that publishing is forever. As soon as you publish your awesome package, users will be able to depend on it. Once they start doing that, removing the package would break theirs. To avoid that, pub strongly discourages deleting packages. You can always upload new versions of your package, but old ones will continue to be available for users that aren’t ready to upgrade yet.
[http://pub.dartlang.org/doc/#publishing-a-package]

lcpDart'package'doing.UPDATING

name::
* McsEngl.lcpDart'package'doing.UPDATING@cptIt,
* McsEngl.dart'package'updating@cptIt,
* McsEngl.dart'package'upgrading@cptIt,

_DESCRIPTION:
Upgrading a dependency
Learn more about pub upgrade ?
The first time you get a new dependency for your package, pub will download the latest version of it that’s compatible with your other dependencies. It then locks your package to always use that version by creating a lockfile. This is a file named pubspec.lock that pub creates and stores next to your pubspec. It lists the specific versions of each dependency (immediate and transitive) that your package uses.

If this is an application package, you will check this file into source control. That way, everyone hacking on your app ensures they are using the same versions of all of the packages. This also makes sure you use the same versions of stuff when you deploy your app to production.

When you are ready to upgrade your dependencies to the latest versions, do:

$ pub upgrade
This tells pub to regenerate the lockfile using the newest available versions of your package’s dependencies. If you only want to upgrade a specific dependency, you can specify that too:

$ pub upgrade transmogrify
This upgrades transmogrify to the latest version but leaves everything else the same.
[http://pub.dartlang.org/doc/#upgrading-a-dependency]

lcpDart'package'doing.USING

name::
* McsEngl.lcpDart'package'doing.USING@cptIt,
* McsEngl.dart'package'doing.installing@cptIt,
* McsEngl.dart'package'installing@cptIt,
* McsEngl.dart'package'using@cptIt,

_DESCRIPTION:
To use a package that’s on pub.dartlang.org:

1. Create a pubspec.yaml file (if one doesn’t already exist) and list the package as dependency. For example, to use the web_ui package in an app, put this in a top-level file named pubspec.yaml:
name: my_app
dependencies:
web_ui: any

2. Run pub get, either on the command line or through the Dart Editor menu: Tools > Pub Get.

3. Import one or more libraries from the package:
import 'package:web_ui/web_ui.dart';
[http://pub.dartlang.org/doc/]

To use a library that’s in a Dart package, you need to do the following:

Create a pubspec (a file that lists package dependencies and includes other metadata, such as a name for your package).

Use pub to get your package's dependencies.

Import the library.
[https://www.dartlang.org/docs/dart-up-and-running/contents/ch04-tools-pub.html]

lcpDart'importing-library

name::
* McsEngl.lcpDart'importing-library@cptIt,

_DESCRIPTION:
Importing Libraries from Packages
To import libraries found in packages, use the package: prefix:

import 'package:js/js.dart' as js;
import 'package:intl/intl.dart';
The Dart runtime takes everything after package: and looks it up within the packages directory for your app.
[https://www.dartlang.org/docs/dart-up-and-running/contents/ch04-tools-pub.html]

lcpDart'package.library.public

name::
* McsEngl.lcpDart'package.library.public@cptIt,

_DESCRIPTION:
Public libraries
enchilada/
lib/
enchilada.dart
tortilla.dart
Many packages are library packages: they define Dart libraries that other packages can import and use. These public Dart library files go inside a directory called lib.

Most packages define a single library that users can import. In that case, its name should usually be the same as the name of the package, like enchilada.dart in the example here. But you can also define other libraries with whatever names make sense for your package.

When you do, users can import these libraries using the name of the package and the library file, like so:

import "package:enchilada/enchilada.dart";
import "package:enchilada/tortilla.dart";
If you feel the need to organize your public libraries, you can also create subdirectories inside lib. If you do that, users will specify that path when they import it. Say you have a file hierarchy like this:

enchilada/
lib/
some/
path/
olives.dart
Users will import olives.dart like:

import "package:enchilada/some/path/olives.dart";
Note that only libraries should be in lib. Entrypoints—Dart scripts with a main() function—cannot go in lib. If you place a Dart script inside lib, you will discover that any package: imports it contains don’t resolve. Instead, your entrypoints should go in the appropriate entrypoint directory.
[http://pub.dartlang.org/doc/package-layout.html#public-libraries]

lcpDart'package'location (source)

name::
* McsEngl.lcpDart'package'location (source)@cptIt,
* McsEngl.dart'package'source@cptIt,

_DESCRIPTION:
A package can live anywhere. For example, some packages are on GitHub. The Dart team publishes packages at pub.dartlang.org, and we hope you will, too.
[https://www.dartlang.org/docs/dart-up-and-running/contents/ch04-tools-pub.html]
===
Source
A kind of place that pub can get packages from. A source isn’t a specific place like pub.dartlang.org or some specific Git URL. Each source describes a general procedure for accessing a package in some way. For example, “git” is one source. The git source knows how to download packages given a Git URL. There are a few different supported sources.
[http://pub.dartlang.org/doc/glossary.html#source]

lcpDart'system-cache

name::
* McsEngl.lcpDart'system-cache@cptIt,

System cache
When pub gets a remote package, it downloads it into a single “system cache” directory maintained by pub. When it generates a “packages” directory for a package, that only contains symlinks to the real packages in the system cache. On Mac and Linux, this directory defaults to ~/.pub-cache. On Windows, it goes in AppData\Roaming\Pub\Cache.

This means you only have to download a given version of a package once and can then reuse it in as many packages as you would like. It also means you can delete and regenerate your “packages” directory without having to access the network.
[http://pub.dartlang.org/doc/glossary.html#system-cache]

lcpDart'package'pub-tool

name::
* McsEngl.lcpDart'package'pub-tool@cptIt,
* McsEngl.dart'pub@cptIt,
* McsEngl.dart'pub-tool@cptIt,

_DESCRIPTION:
Pub is the package manager for Dart. You can use pub to manage third party dependencies for your Dart app. The pub tool currently supports downloading packages from git repositories, and will eventually support downloads from pub.dartlang.org.
[http://www.drdobbs.com/open-source/dart-build-html5-apps-fast/240005631?pgno=3]

lcpDart'package'pubspec.yaml

name::
* McsEngl.lcpDart'package'pubspec.yaml@cptIt,
* McsEngl.dart'pubspec.yaml@cptIt,

_DESCRIPTION:
Every package will have a pubspec, a file named pubspec.yaml, in the root directory of the package. That’s what makes it a package.
[http://pub.dartlang.org/doc/package-layout.html]
===
To use a package, your application must define a pubspec that lists dependencies and their download locations. The pubspec is a file named pubspec.yaml, and it must be in the top directory of your application.

Here is an example of a pubspec that specifies the locations of two packages. First, it points to the js package that’s hosted on pub.dartlang.org, and then it points to the intl package in the Dart SDK:

name: my_app
dependencies:
js: any
intl: any
[https://www.dartlang.org/docs/dart-up-and-running/contents/ch04-tools-pub.html]

_ADDRESS.WPG:
* format: http://pub.dartlang.org/doc/pubspec.html,

lcpDart'package'readme-file

name::
* McsEngl.lcpDart'package'readme-file@cptIt,

_DESCRIPTION:
README
enchilada/
README.md
One file that’s very common in open source is a README file that describes the project. This is especially important in pub. When you upload to pub.dartlang.org, your README will be shown on the page for your package. This is the perfect place to introduce people to your code.

If your README ends in .md, .markdown, or .mdown, it will be parsed as Markdown so you can make it as fancy as you like.
[http://pub.dartlang.org/doc/package-layout.html]

lcpDart'package'structure

name::
* McsEngl.lcpDart'package'structure@cptIt,

_STRUCTURE:
To give you a picture of the whole enchilada, here’s what a complete package (conveniently named enchilada) that uses every corner of these guidelines would look like:

enchilada/
pubspec.yaml
pubspec.lock *
README.md
LICENSE
asset/
guacamole.css
benchmark/
make_lunch.dart
packages/ **
bin/
enchilada
packages/ **
doc/
getting_started.md
example/
lunch.dart
packages/ **
lib/
enchilada.dart
tortilla.dart
src/
beans.dart
queso.dart
packages/ **
test/
enchilada_test.dart
tortilla_test.dart
packages/ **
tool/
generate_docs.dart
web/
index.html
main.dart
style.css
[http://pub.dartlang.org/doc/package-layout.html]

SPECIFIC

_SPECIFIC:
A package in pub is a directory that contains Dart code and any other stuff that goes along with it like resources, tests, and docs. Frameworks and reusable libraries are obviously packages, but applications are too. If your app wants to use pub packages, it needs to be a package too.
[http://pub.dartlang.org/doc/]

lcpDart'package.APPLICATION

name::
* McsEngl.lcpDart'package.APPLICATION@cptIt,

_DESCRIPTION:
Application package
A package that is not intended to be used as a library. Application packages may have dependencies on other packages, but are never depended on themselves. They are usually meant to be run directly, either on the command line or in a browser. The opposite of an application package is a library package.

Application packages should check their lockfiles into source control, so that everyone working on the application and every location the application is deployed has a consistent set of dependencies. Because their dependencies are constrained by the lockfile, application packages usually specify any for their dependencies’ version constraints.
[http://pub.dartlang.org/doc/glossary.html#application-package]

lcpDart'package.LIBRARY

name::
* McsEngl.lcpDart'package.LIBRARY@cptIt,

_DESCRIPTION:
Library package
A package that other packages will depend on. Library packages may have dependencies on other packages and may be dependencies themselves. They may also include scripts that will be run directly. The opposite of a library package is an application package.

Library packages should not check their lockfile into source control, since they should support a range of dependency versions. Their immediate dependencies’ version constraints should be as wide as possible while still ensuring that the dependencies will be compatible with the versions that were tested against.

Since semantic versioning requires that libraries increment their major version numbers for any backwards incompatible changes, library packages will usually require their dependencies’ versions to be greater than or equal to the versions that were tested and less than the next major version. So if your library depended on the (fictional) transmogrify package and you tested it at version 1.2.1, your version constraint would be ">=1.2.1 <2.0.0".
[http://pub.dartlang.org/doc/glossary.html#library-package]

lcpDart'package.REMOTE

name::
* McsEngl.lcpDart'package.REMOTE@cptIt,

lcpDart'code.PROGRAM

name::
* McsEngl.lcpDart'code.PROGRAM@cptIt,
* McsEngl.dartprogram@cptIt,
* McsEngl.dartpgm@cptIt, {2014-02-23}

_PART:
* library,

dartprgm'executing

name::
* McsEngl.dartprgm'executing@cptIt,

Dart programs may be executed in one of two modes: production mode or checked mode.
In production mode, static type annotations (13.1) have absolutely no effect on execution.
In checked mode, assignments are dynamically checked, and certain violations of the type system raise exceptions at run time
[http://www.dartlang.org/docs/spec/dartLangSpec.pdf]

You can run Dart apps on the command line using the Dart VM. Your app can use files, directories, and sockets in standalone Dart VM apps. Also included is an HTTP server and client, and a Web socket server and client. One of the goals of the Dart project is to enable end-to-end Dart applications, running on both the client and the server.
[http://www.drdobbs.com/open-source/dart-build-html5-apps-fast/240005631?pgno=3]

dartpgm'development

name::
* McsEngl.dartpgm'development@cptIt,

dartpgm.EXAMPLE

name::
* McsEngl.dartpgm.EXAMPLE@cptIt,

_CODE.DART:
// Define a function.
printNumber(num aNumber) {
print('The number is $aNumber.'); // Print to the console.
}

// This is where the app starts executing.
main() {
var number = 42; // Declare and initialize a variable.
printNumber(number); // Call a function.
}
[https://www.dartlang.org/docs/dart-up-and-running/contents/ch02.html]

lcpDart'code.SENTENCE

name::
* McsEngl.lcpDart'code.SENTENCE@cptIt,
* McsEngl.dart'sentence@cptIt,

dartsentence.assert

name::
* McsEngl.dartsentence.assert@cptIt,
* McsEngl.lcpDart'assert@cptIt,

_DESCRIPTION:
Use an assert statement to disrupt normal execution if a boolean condition is false. You can find examples of assert statements throughout this tour. Here are some more:

assert(text != null); // Make sure the variable has a non-null value.
assert(number < 100); // Make sure the value is less than 100.
assert(urlString.startsWith('https')); // Make sure this is an HTTPS URL.

Note
Assert statements work only in checked mode. They have no effect in production mode.

Inside the parentheses after assert, you can put any expression that resolves to a boolean value or to a function. If the expression’s value or function’s return value is true, the assertion succeeds and execution continues. If it's false, the assertion fails and an exception (an AssertionError) is thrown.
[https://www.dartlang.org/docs/dart-up-and-running/contents/ch02.html]

dartsentence.import

name::
* McsEngl.dartsentence.import@cptIt,
* McsEngl.lcpDart'import@cptIt,

_DESCRIPTION:
The import directive imports the specified library, making all of the classes and functions in that library available to your program.
[https://www.dartlang.org/docs/tutorials/connect-dart-html/]

lcpDart'code.ATOM

name::
* McsEngl.lcpDart'code.ATOM@cptIt,
* McsEngl.dart'atom-code@cptIt,
* McsEngl.dart'structureNo-code@cptIt,

_SPECIFIC:
* data-atom
* dataNo-atom
* number-atom

lcpDart'atom.COMMENT

name::
* McsEngl.lcpDart'atom.COMMENT@cptIt,
* McsEngl.lcpDart'code.COMMENT@cptIt,
* McsEngl.dart'comment@cptIt,

_DESCRIPTION:
// This is a comment.
Alternatively, use /* ... */.

lcpDart'atom.IDENTIFIER#ql:dartvariable'name#

name::
* McsEngl.lcpDart'atom.IDENTIFIER@cptIt,

lcpDart'atom.KEYWORD

name::
* McsEngl.lcpDart'atom.KEYWORD@cptIt,
* McsEngl.lcpDart'keyword@cptIt,
* McsEngl.dart'reserved-word@cptIt,

_DESCRIPTION:
Keywords
Table 2.1, “Dart keywords” lists the words that the Dart language treats specially.

Table 2.1. Dart keywords

abstract *  continue  extends  implements *  part *  throw
as *  default  factory *  import *  rethrow  true
assert  do  false  in  return  try
break  dynamic *  final  is  set *  typedef *
case  else  finally  library *  static *  var
catch  enum  for  new  super  void
class  export *  get *  null  switch  while
const  external *  if  operator *  this  with

In the keyword table, words with an asterisk (*) are built-in identifiers. Although you should generally treat built-in identifiers like reserved words, the only real restriction is that you can't use a built-in identifier as the name of a class or type. Having built-in identifiers enables easier porting from JavaScript to Dart. For example, say some JavaScript code has a variable named factory; you don't have to rename it when you port the code to Dart.
[https://www.dartlang.org/docs/dart-up-and-running/contents/ch02.html]

_SPECIFIC:
* dart'abstract_keyword_BI
* dart'as_keyword_BI
* dart'assert_keyword
* dart'break_keyword
* dart'case_keyword
* dart'catch_keyword
* dart'class_keyword
* dart'const_keyword
* dart'continue_keyword
* dart'default_keyword
* dart'do_keyword
* dart'dynamic_keyword_BI
* dart'else_keyword
* dart'enum_keyword
* dart'export_keyword_BI
* dart'extends_keyword
* dart'external_keyword_BI
* dart'factory_keyword_BI
* dart'false_keyword
* dart'final_keyword
* dart'finally_keyword
* dart'for_keyword
* dart'get_keyword_BI
* dart'if_keyword
* dart'implements_keyword_BI
* dart'import_keyword_BI
* dart'in_keyword
* dart'is_keyword
* dart'library_keyword_BI
* dart'new_keyword
* dart'null_keyword
* dart'operator_keyword_BI
* dart'part_keyword_BI
* dart'rethrow_keyword
* dart'return_keyword
* dart'set_keyword_BI
* dart'static_keyword_BI
* dart'super_keyword
* dart'switch_keyword
* dart'this_keyword
* dart'throw_keyword
* dart'true_keyword
* dart'try_keyword
* dart'typedef_keyword_BI
* dart'var_keyword
* dart'void_keyword
* dart'while_keyword
* dart'with_keyword
===
* dart'keyword.abstract_BI
* dart'keyword.as_BI
* dart'keyword.assert
* dart'keyword.break
* dart'keyword.case
* dart'keyword.catch
* dart'keyword.class
* dart'keyword.const
* dart'keyword.continue
* dart'keyword.default
* dart'keyword.do
* dart'keyword.dynamic_BI
* dart'keyword.else
* dart'keyword.enum
* dart'keyword.export_BI
* dart'keyword.extends
* dart'keyword.external_BI
* dart'keyword.factory_BI
* dart'keyword.false
* dart'keyword.final
* dart'keyword.finally
* dart'keyword.for
* dart'keyword.get_BI
* dart'keyword.if
* dart'keyword.implements_BI
* dart'keyword.import_BI
* dart'keyword.in
* dart'keyword.is
* dart'keyword.library_BI
* dart'keyword.new
* dart'keyword.null
* dart'keyword.operator_BI
* dart'keyword.part_BI
* dart'keyword.rethrow
* dart'keyword.return
* dart'keyword.set_BI
* dart'keyword.static_BI
* dart'keyword.super
* dart'keyword.switch
* dart'keyword.this
* dart'keyword.throw
* dart'keyword.true
* dart'keyword.try
* dart'keyword.typedef_BI
* dart'keyword.var
* dart'keyword.void
* dart'keyword.while
* dart'keyword.with

lcpDart'atom.NULL

name::
* McsEngl.lcpDart'atom.NULL@cptIt,
* McsEngl.dart'null-object@cptIt,
* McsEngl.dart'object.Null@cptIt,

lcpDart'atom.SYMBOL

name::
* McsEngl.lcpDart'atom.SYMBOL@cptIt,
* McsEngl.dart'symbol@cptIt,

_DESCRIPTION:
Symbols
A Symbol object represents an operator or identifier declared in a Dart program. You might never need to use symbols, but they're invaluable for APIs that refer to identifiers by name, because minification changes identifier names but not identifier symbols.

To get the symbol for an identifier, use a symbol literal, which is just# followed by the identifier:
#radix // The symbol literal for an identifier named 'radix'.
#bar // The symbol literal for an identifier named 'bar'.
[https://www.dartlang.org/docs/dart-up-and-running/contents/ch02.html]

lcpDart'code.UNIT

name::
* McsEngl.lcpDart'code.UNIT@cptIt,

lcpDart'doing.EVOLUTING

name::
* McsEngl.lcpDart'doing.EVOLUTING@cptIt,

{time.2014-01-16}
1.1.1 (January 16, 2014; 12 days ago)

lcpDart'human

name::
* McsEngl.lcpDart'human@cptIt,

Lars Bak
Kasper Lund
When we joined Google and entered the fascinating world of web browser development more than six years ago, the web was a different place. It was clear that a new breed of web apps was emerging, but the performance of the underlying platform left much to be desired. Given our background in designing and implementing virtual machines, building a high performance JavaScript engine seemed like an interesting challenge. It was. We implemented the V8 JavaScript engine from scratch and shipped it as part of Google Chrome in 2008, and we are very proud of the positive performance impact our work seems to have had on the entire browser industry.

Even though recent performance gains in web browsers have shattered most limits on how large and complex web apps can be, building large, high-performance web apps remains hard. Without good abstraction mechanisms and clean semantics, developers often end up with complex and convoluted code. Naturally, this problem gets exacerbated as the codebase grows. We designed the Dart programming language to solve this exact problem, and we hope that programmers will be more productive as a result.

Over the past year, we have read and written a lot of Dart code, and it is very satisfying to see how Dart inspires programmers to strive for concise, elegant programs. There is something very enjoyable about incrementally transforming prototypes into maintainable production software through refactorings and adding type annotations—and it definitely feels like Dart as a language scales well from small experiments to large projects with lots of code.

Dart: Up and Running is a practical guide that introduces the Dart programming language and teaches you how to build Dart applications. We hope you will enjoy the book and Dart.
[https://www.dartlang.org/docs/dart-up-and-running/contents/foreword.html]

lcpDart'relation-to-JavaScript

name::
* McsEngl.lcpDart'relation-to-JavaScript@cptIt,

_ADDRESS.WPG:
* https://www.dartlang.org/docs/synonyms//
* http://terrainformatica.com/sciter/js-dart-tis.htm,

lcpDart'Resource

name::
* McsEngl.lcpDart'Resource@cptIt,

_ADDRESS.WPG:
* home: http://www.dartlang.org//
* http://try.dartlang.org//
* https://api.dartlang.org/docs/channels/stable/latest//
* https://plus.google.com/+dartlang/posts,
* https://code.google.com/p/dart//
* https://twitter.com/dart_lang,
=== TUTORIAL:
* https://www.dartlang.org/docs/dart-up-and-running/contents/index.html,
=== BLOG:
* http://dzenanr.github.io//

Guidelines
For HOWTO questions, consider asking on StackOverflow.
If you can phrase your question as "how do I do X?" then StackOverflow is the place for you.

For bug reports and feature requests, file a new issue at www.dartbug.com/new.

For Dart with HTML questions, see the web@dartlang.org group, which has links and resources in its welcome message.
If your question is about how to use Dart with HTML, try StackOverflow first.

For Dart Editor questions, use the editor@dartlang.org group.
If you are reporting a bug or a crash, use the "SEND FEEDBACK" button in the Editor itself, or use www.dartbug.com/new.

For questions about dart2js development, use the compiler-dev@dartlang.org group.
For everything else that doesn’t fit any of the above, use the misc@dartlang.org group.

Resources:
Official Dart Homepage
Issue Tracker
Dart Project Hosting
GitHub Organization
#dartlang on Google+
#dartlang on Twitter
#dart on freenode
[https://groups.google.com/a/dartlang.org/forum/#!forum/misc]

lcpDart'tool

name::
* McsEngl.lcpDart'tool@cptIt,

lcpDart'tool.DARTIUM

name::
* McsEngl.lcpDart'tool.DARTIUM@cptIt,
* McsEngl.lcpDart'dartium@cptIt,
* McsEngl.dartium@cptIt,

_DESCRIPTION:
Dartium is a special build of Chromium that includes the Dart VM. Using Dartium means you don't have to compile your code to JavaScript until you're ready to test on other browsers.
[https://www.dartlang.org/tools/dartium/]

lcpDart'tool.dart2js

name::
* McsEngl.lcpDart'tool.dart2js@cptIt,
* McsEngl.lcpDart'dart2js@cptIt,
* McsEngl.dart2js@cptIt,
* McsEngl.dart-to-JavaScript-compiler@cptIt,

_DESCRIPTION:
The dart2js tool, a Dart to JavaScript compiler, is the key component that enables Dart apps to run anywhere on the Web. The compiler targets ES5 JavaScript, and is itself written in Dart.
[http://www.drdobbs.com/open-source/dart-build-html5-apps-fast/240005631?pgno=3]

Basic Usage
Here’s an example of compiling a Dart file to JavaScript:
dart2js --out=test.js test.dart
[https://www.dartlang.org/docs/dart-up-and-running/contents/ch04-tools-dart2js.html]

lcpDart'tool.pub (package manager)#ql:dart'pub#

name::
* McsEngl.lcpDart'tool.pub (package manager)@cptIt,

lcpDart'tool.SDK

name::
* McsEngl.lcpDart'tool.SDK@cptIt,
* McsEngl.dart'sdk@cptIt,

_DESCRIPTION:
The Dart SDK, which is bundled with the Dart Editor, contains three principal tools: the Dart VM (dart), the package manager (pub), and the compiler to JavaScript (dart2js).
[http://www.drdobbs.com/open-source/dart-build-html5-apps-fast/240005631?pgno=3]

lcp.instance.OPA {2011} (web)

_CREATED: {2013-12-21}

name::
* McsEngl.lcp.instance.OPA {2011} (web)@cptIt,
* McsEngl.lcp.opa@cptIt,
* McsEngl.pl.opa@cptIt,
* McsEngl.plOpa@cptIt,
* McsEngl.opa@cptIt,
* McsEngl.opalang@cptIt,

_DESCRIPTION:
Opa handles all aspects of web programming: frontend (client code), backend (server code) and database queries are all written in one consistent language and compiled to standards of the web: JavaScript frontend, Node.js backend and MongoDB for the database. Other targets are planned, making Opa a gateway to web programming.
[https://github.com/MLstate/opalang/wiki/A-tour-of-Opa#wiki-full-stack]
===
Paradigm(s)  multi-paradigm: functional, imperative
Appeared in  2011
Developer    MLstate
Stable release  1.1.0 (stable) (February 13, 2013; 9 months ago[1])
Typing discipline  static, strong, inferred
Influenced by  OCaml, Erlang, JavaScript
OS      Linux, Mac OS X, Windows
License    MIT License, AGPLv3
Website    opalang.org
Opa is an open source programming language for developing scalable web applications.

It can be used for both client-side and server-side scripting, where complete programs are written in Opa and subsequently compiled to Nodejs on the server and JavaScript on the client, with the compiler automating all communication between the two.[2][3] Opa implements strong, static typing, which can be helpful in protecting against security issues such as SQL injections and cross-site scripting attacks.[4]

The language was first officially presented at the OWASP conference in 2010,[5] and the source code was released on GitHub[6] in June 2011, under a GNU Affero General Public License. Later, the license changed to the MIT license for the framework part (library) and AGPL for the compiler so that applications written in Opa can be released under any license, proprietary or open source.
[http://en.wikipedia.org/wiki/Opa_(programming_language)]

plOpa'code.program

name::
* McsEngl.plOpa'code.program@cptIt,

_DESCRIPTION:
The traditional Hello world program, producing a web server that serves a static page with "Hello, web!" as its content, can be written in Opa as:[18]

Server.start(Server.http,
{ title: "Hello"
, page: function() { <h1>Hello, web!</h1> }
}
)
It can be compiled to a stand-alone executable JS file with:

opa hello_web.opa
Running the resulting executable JS file launches the web application:

./hello_web.js
[http://en.wikipedia.org/wiki/Opa_(programming_language)]

lcp.instance.ROY {2011}

_CREATED: {2013-12-21}

name::
* McsEngl.conceptIt278,
* McsEngl.programing-language.ROY,
* McsEngl.roy-lang,
* McsEngl.plRoy, {2014-01-29}
* McsEngl.roylng,

plRoy'DEFINITION

_DESCRIPTION:
Roy is an experimental programming language that targets JavaScript. It tries to meld JavaScript semantics with some features common in static functional languages:
Damas-Hindley-Milner type inference
Whitespace significant syntax
Simple tagged unions
Pattern matching
Structural typing
Monad syntax
Try the current version below. The code is on GitHub. Follow @roylangjs for news on development.
[http://roy.brianmckenna.org/]

plRoy'resource

name::
* McsEngl.plRoy'resource@cptIt,

_ADDRESS.WPG:
* http://roy.brianmckenna.org//
* https://github.com/pufuwozu/roy,

lcp.instance.Rust {2010}

_CREATED: {2016-03-29}

name::
* McsEngl.lcp.instance.Rust {2010}@cptIt,
* McsEngl.Lrst@cptIt,
* McsEngl.lagRst@cptIt,
* McsEngl.lagRust@cptIt,
* McsEngl.lcpRust@cptIt,
* McsEngl.lcpRst@cptIt,
* McsEngl.rust-lang@cptIt,

* McsEngl.rust-language@cptIt,
* McsEngl.lngRst@cptIt,

_DESCRIPTION:
Rust is a general-purpose, multi-paradigm, compiled programming language developed by Mozilla Research.[12] It is designed to be a "safe, concurrent, practical language",[13] supporting pure-functional, imperative-procedural, and object-oriented styles.
The language grew out of a personal project by Mozilla employee Graydon Hoare. Mozilla began sponsoring the project in 2009[13] and announced it in 2010.[14] The same year, work shifted from the initial compiler (written in OCaml) to the self-hosting compiler written in Rust.[15] Known as rustc, it successfully compiled itself in 2011.[16] rustc uses LLVM as its back end.
The first numbered pre-alpha release of the Rust compiler occurred in January 2012.[17] Rust 1.0, the first stable release, was released on May 15, 2015.[18]
Although its development is sponsored by Mozilla, it is an open community project. The design of the language has been refined through the experiences of writing the Servo[19] web browser layout engine and the Rust compiler. A large portion of current commits are from community members.[20]
The language is believed to take its name from the rust family of fungi.[21]
[https://en.wikipedia.org/wiki/Rust_(programming_language)]

lagRst'resource

name::
* McsEngl.lagRst'resource@cptIt,

_ADDRESS.WPG:
* https://www.rust-lang.org//
=== LEARNING:
* https://doc.rust-lang.org/book//

lcp.instance.CoffeeScript {2009} (lcs)

_CREATED: {2013-08-24}

name::
* McsEngl.lcp.instance.CoffeeScript {2009} (lcs)@cptIt,
* McsEngl.CoffeeScript@cptIt,
* McsEngl.lcs@cptIt, {2016-08-26}
* McsEngl.lcpCs@cptIt, {2014-02-06}
* McsEngl.lpCs@cptIt, {2014-02-05}
* McsEngl.cs@cptIt, {2013-12-02}
* McsEngl.cfst@cptIt, {2013-11-27}
* McsEngl.csrt@cptIt,

_ADDRESS.WPG:
* <script type=”text/javascript” src=”http://github.com/jashkenas/coffee-script/raw/master/extras/coffee-script.js”></script>
*

_DESCRIPTION:
CoffeeScript is a programming language that transcompiles to JavaScript. The language adds syntactic sugar inspired by Ruby, Python and Haskell[1] to enhance JavaScript's brevity and readability, adding sophisticated features like list comprehension and pattern matching. CoffeeScript compiles predictably to JavaScript and programs can be written with less code, typically 1/3 fewer lines, with no effect on runtime performance.[3] Since March 16, 2011, CoffeeScript has been on GitHub's list of most-watched projects,[4] and as of today[when?] is the tenth most popular language on GitHub.[5]
The language has a relatively large following in the Ruby community. CoffeeScript support is included in Ruby on Rails version 3.1.[6] Additionally, Brendan Eich has referenced CoffeeScript as an influence on his thoughts about the future of JavaScript.[7][8]
Paradigm(s)  Multi-paradigm: prototype-based, functional, imperative, scripting
Appeared in  2009
Designed by  Jeremy Ashkenas
Developer    Jeremy Ashkenas, et al.
Stable release  1.6.3 (June 2, 2013; 2 months ago)
Influenced by  Haskell,[1] JavaScript, Perl, Python,[1] Ruby,[1] YAML[2]
Influenced    MoonScript
OS      Cross-platform
License    MIT License
Usual filename extensions  .coffee
coffeescript.org
[http://en.wikipedia.org/wiki/Coffeescript] 2013-08-24,
===
CoffeeScript is a little language that compiles down to JavaScript. The syntax is inspired by Ruby and Python, and implements many features from those two languages. This book is designed to help you learn CoffeeScript, understand best practices and start building awesome client side applications. The book is little, only five chapters, but that's rather apt as CoffeeScript is a little language too.

This book is completely open source, and was written by Alex MacCaw (or @maccman) with great contributions from David Griffiths, Satoshi Murakami, and Jeremy Ashkenas.

If you have any errata or suggestions, please don't hesitate to open a ticket on the book's GitHub page. Readers may also be interested in JavaScript Web Applications by O'Reilly, a book I authored that explores rich JavaScript applications and moving state to the client side.

So let's dive right into it; why is CoffeeScript better than writing pure JavaScript? Well for a start, there's less code to write - CoffeeScript is very succinct, and takes white-space into account. In my experience this reduces code by a third to a half of the original pure JavaScript. In addition, CoffeeScript has some neat features, such as array comprehensions, prototype aliases and classes that further reduce the amount of typing you need to do.

More importantly though, JavaScript has a lot of skeletons in its closet which can often trip up inexperienced developers. CoffeeScript neatly sidesteps these by only exposing a curated selection of JavaScript features, fixing many of the language's oddities.

CoffeeScript is not a superset of JavaScript, so although you can use external JavaScript libraries from inside CoffeeScript, you'll get syntax errors if you compile JavaScript as-is, without converting it. The compiler converts CoffeeScript code into its counterpart JavaScript, there's no interpretation at runtime.

First to get some common fallacies out the way. You will need to know JavaScript in order to write CoffeeScript, as runtime errors require JavaScript knowledge. However, having said that, runtime errors are usually pretty obvious, and so far I haven't found mapping JavaScript back to CoffeeScript to be an issue. The second problem I've often heard associated with CoffeeScript is speed; i.e. the code produced by the CoffeeScript compiler would run slower than its equivalent written in pure JavaScript. In practice though, it turns out this isn't a problem either. CoffeeScript tends to run as fast, or faster than hand-written JavaScript.

What are the disadvantages of using CoffeeScript? Well, it introduces another compile step between you and your JavaScript. CoffeeScript tries to mitigate the issue as best it can by producing clean and readable JavaScript, and with its server integrations which automate compilation. The other disadvantage, as with any new language, is the fact that the community is still small at this point, and you'll have a hard time finding fellow collaborators who already know the language. CoffeeScript is quickly gaining momentum though, and its IRC list is well staffed; any questions you have are usually answered promptly.

CoffeeScript is not limited to the browser, and can be used to great effect in server side JavaScript implementations, such as Node.js. Additionally, CoffeeScript is getting much wider use and integration, such as being a default in Rails 3.1. Now is definitely the time to jump on the CoffeeScript train. The time you invest in learning about the language now will be repaid by major time savings later.

Initial setup

One of the easiest ways to initially play around with the library is to use it right inside the browser. Navigate to http://coffeescript.org and click on the Try CoffeeScript tab. The site uses a browser version of the CoffeeScript compiler, converting any CoffeeScript typed inside the left panel to JavaScript in the right panel.

You can also convert JavaScript back to CoffeeScript using the js2coffee project, especially useful when migrating JavaScript projects to CoffeeScript.

In fact, you can use the browser-based CoffeeScript compiler yourself, by including this script in a page, marking up any CoffeeScript script tags with the correct type.

<script src="http://jashkenas.github.com/coffee-script/extras/coffee-script.js" type="text/javascript" charset="utf-8"></script>
<script type="text/coffeescript">
# Some CoffeeScript
</script>
Obviously, in production, you don't want to be interpreting CoffeeScript at runtime as it'll slow things up for your clients. Instead CoffeeScript offers a Node.js compiler to pre-process CoffeeScript files.

To install it, first make sure you have a working copy of the latest stable version of Node.js, and npm (the Node Package Manager). You can then install CoffeeScript with npm:

npm install -g coffee-script
This will give you a coffee executable. If you execute it without any command line options, it'll give you the CoffeeScript console, which you can use to quickly execute CoffeeScript statements. To pre-process files, pass the --compile option.

coffee --compile my-script.coffee
If --output is not specified, CoffeeScript will write to a JavaScript file with the same name, in this case my-script.js. This will overwrite any existing files, so be careful you're not overwriting any JavaScript files unintentionally. For a full list of the command line options available, pass --help.

As you can see above, the default extension of CoffeeScript files is .coffee. Amongst other things, this will allow text editors like TextMate to work out which language the file contains, giving it the appropriate syntax highlighting. By default, TextMate doesn't include support for CoffeeScript, but you can easily install the bundle to do so.

If all this compilation seems like a bit of an inconvenience and bother, that's because it is. We'll be getting onto ways to solve this by automatically compiling CoffeeScript files, but first lets take a look at the language's syntax.
[http://arcturo.github.io/library/coffeescript/01_introduction.html]

lcs'Model (algorithm)

name::
* McsEngl.lcs'Model (algorithm)@cptIt,
* McsEngl.lcsalgo@cptIt,
* McsEngl.lcpCs'ALGORITHM@cptIt,
* McsEngl.csalgo@cptIt,

lcs'algo'node

_CREATED: {2014-04-02}

name::
* McsEngl.lcs'algo'node@cptIt,
* McsEngl.cs-construct@cptIt, {2014-04-02}
* McsEngl.cs-part-of-code@cptIt, {2014-04-02}
* McsEngl.csnode@cptIt, {2014-04-02}

_SPECIFIC:
* algo#linkL#
===
* array#linkL#
* boolean#linkL#
* class#linkL#
* comment#linkL#
* function#linkL#
* none#linkL#
* nuber#linkL#
* object#linkL#
* regexp#linkL#

lcsalgo'UNIT

name::
* McsEngl.lcsalgo'UNIT@cptIt,
* McsEngl.cscodeunit@cptIt,

SPECIFIC

_SPECIFIC:
* bit
* bitAudio##
* bitImage##
* bitCharacter##

lcs'codeunit.CHARACTER

name::
* McsEngl.lcs'codeunit.CHARACTER@cptIt,
* McsEngl.chr.cs@cptIt,
* McsEngl.chr.lcpCs@cptIt,
* McsEngl.cschr@cptIt,

 ; cschr.9; cschr.u0009; cschr.CHARACTER_TABULATION;
===
whitespace

; cschr.32; cschr.u0020; cschr.SPACE;
===
whitespace

!; cschr.33; cschr.u0021; cschr.EXCLAMATION_MARK;
===
boolean not function

"; cschr.34; cschr.u0022; cschr.QUOTATION_MARK;

#; cschr.35; cschr.u0023; cschr.NUMBER_SIGN;
===
# comment
===
#{message}
string interpolation

$; cschr.36; cschr.u0024; cschr.DOLLAR_SIGN;
===
regexp end of string.

%; cschr.37; cschr.37;%; cschr.u0025; cschr.PERCENT_SIGN;

&; cschr.38; cschr.u0026; cschr.AMPERSAND;
===
&& boolean and function

'; cschr.39; cschr.u0027; cschr.APOSTROPHE;

(; cschr.40; cschr.u0028; cschr.LEFT_PARENTHESIS;

); cschr.41; cschr.u0029; cschr.RIGHT_PARENTHESIS;

*; cschr.42; cschr.u002A; cschr.ASTERISK;

+; cschr.43; cschr.u002B; cschr.PLUS_SIGN;

,; cschr.44; cschr.u002C; cschr.COMMA;

-; cschr.45; cschr.u002D; cschr.HYPHEN_MINUS;

.; cschr.46; cschr.u002E; cschr.FULL_STOP;

/; cschr.47; cschr.u002F; cschr.SOLIDUS;
===
math division function

:; cschr.58; cschr.u003A; cschr.COLON;
===
object key value separation

;; cschr.59; cschr.u003B; cschr.SEMICOLON;

<; cschr.60; cschr.u003C; cschr.LESS_THAN_SIGN;

=; cschr.61; cschr.u003D; cschr.EQUALS_SIGN;

>; cschr.62; cschr.u003E; cschr.GREATER_THAN_SIGN;

?; cschr.63; cschr.u003F; cschr.QUESTION_MARK;
===
existential operator

@; cschr.64; cschr.u0040; cschr.COMMERCIAL_AT;
===
this keyword

[; cschr.91; cschr.u005B; cschr.LEFT_SQUARE_BRACKET;

\; cschr.92; cschr.REVERSE_SOLIDUS, cschr.u005C:
===
consumed = \
@identifierToken() or
# line continuation.

]; cschr.93; cschr.u005D; cschr.RIGHT_SQUARE_BRACKET;

^; cschr.94; cschr.u005E; cschr.CIRCUMFLEX_ACCENT;
===
regexp begin of string|line

_; cschr.95; cschr.u005F; cschr.LOW_LINE;

`; cschr.96; cschr.u0060; cschr.GRAVE_ACCENT; cschr.backtick:
===
embend javascript
[http://coffeescript.org/#embedded]

{; cschr.123; cschr.u007B; cschr.LEFT_CURLY_BRACKET;

|; cschr.124; cschr.u007C; cschr.VERTICAL_LINE;
===
|| boolean or function
===
regexp or

}; cschr.125; cschr.u007D; cschr.RIGHT_CURLY_BRACKET;
===
object punctuation

~; cschr.126; cschr.u007E; cschr.TILDE;

lcsalgo'WORD

name::
* McsEngl.lcsalgo'WORD@cptIt,
* McsEngl.cstoken@cptIt,
* McsEngl.cstkn@cptIt,
* McsEngl.lcsalgo'UNIT-STRUCTURE-(token)@cptIt,

cstkn.KEYWORD

name::
* McsEngl.cstkn.KEYWORD@cptIt,
* McsEngl.cskeyword@cptIt,
* McsEngl.lcpCs'keyword@cptIt,
* McsEngl.lcpCs'code.RESERVED-WORD@cptIt,

_DESCRIPTION:
In JavaScript, you can't use reserved words, like class, as properties of an object, without quoting them as strings. CoffeeScript notices reserved words used as keys in objects and quotes them for you, so you don't have to worry about it (say, when using jQuery).
[http://coffeescript.org/#objects_and_arrays]

_SPECIFIC:
'__bind'
'__extends'
'__hasProp'
'__indexOf'
'__slice'
'and'
'arguments'
'break'
'by'
'case'
'catch'
'class'
'const'
'continue'
'debugger'
'default'
'delete'
'do'
'else'
'enum'
'eval'
'export'
'extends'
'false'
'finally'
'for'
'function'
'if'
'implements'
'import'
'in'
'instanceof'
'interface'
'is'
'isnt'
'let'
'loop'
'native'
'new'
'no'
'not'
'null'
'of'
'off'
'on'
'or'
'package'
'private'
'protected'
'public'
'return'
'static'
'super'
'switch'
'then'
'this'
'throw'
'true'
'try'
'typeof'
'undefined'
'unless'
'until'
'var'
'void'
'when'
'while'
'with'
'yes'
'yield'

COFFEE_JS:
'true', 'false', 'null', 'this'
'new', 'delete', 'typeof', 'in', 'instanceof'
'return', 'throw', 'break', 'continue', 'debugger'
'if', 'else', 'switch', 'for', 'while', 'do', 'try', 'catch', 'finally'
'class', 'extends', 'super'

COFFEE:
'undefined', 'then', 'unless', 'until', 'loop', 'of', 'by', 'when'

lcs'keyword.THIS

name::
* McsEngl.lcs'keyword.THIS@cptIt,
* McsEngl.csthis-symbol@cptIt,
* McsEngl.lcpCs'at-symbol@cptIt,

_DESCRIPTION:
As a shortcut for this.property, you can use @property.
[http://coffeescript.org/#operators]

cstkn.OPERATOR

name::
* McsEngl.cstkn.OPERATOR@cptIt,
* McsEngl.csoperator@cptIt,
* McsEngl.lcpCs'code.OPERATOR@cptIt,
* McsEngl.lcpCs'operator@cptIt,
* McsEngl.lcpCs'statement'operator@cptIt,

lcs'operator.AMBERSAND (&)

name::
* McsEngl.lcs'operator.AMBERSAND (&)@cptIt,
* McsEngl.csoperator.ambersand@cptIt,

_CODE.LCS:
dEq 2, (10 & 3)

lcs'operator.and (&&)

name::
* McsEngl.lcs'operator.and (&&)@cptIt,
* McsEngl.csand@cptIt,
* McsEngl.lcpCs'and@cptIt,

_DESCRIPTION:
and  &&

lcs'operator.AT-SYMBOL (@)

name::
* McsEngl.lcs'operator.AT-SYMBOL (@),
* McsEngl.lcpCs'at-symbol@cptIt,

_DESCRIPTION:
The "at" sign @ is shorthand for saying this.
[http://coffeescriptcookbook.com/chapters/strings/uppercasing-a-string]

lcs'operaror.by

name::
* McsEngl.lcs'operaror.by@cptIt,
* McsEngl.csby@cptIt,

_CODE.LCS:
for v in test by 2 then v
---
var v, _i, _len;
for (_i = 0, _len = test.length; _i < _len; _i += 2) {
v = test[_i];
v;
}

lcs'operator.CONDITIONAL (? :)

name::
* McsEngl.lcs'operator.CONDITIONAL (? :)@cptIt,
* McsEngl.lcpCs'conditional-operator@cptIt,

_DESCRIPTION:
Conditional operators (?:) are not supported, instead you should use a single line if/else statement.
[http://arcturo.github.io/library/coffeescript/02_syntax.html]

_CODE.LCS:
eldest = if 24 > 21 then "Liz" else "Ike"
--- _CODE.LJS:
eldest = 24 > 21 ? "Liz" : "Ike";

lcs'operator.DIVISION.FLOOR (//)

name::
* McsEngl.lcs'operator.DIVISION.FLOOR (//)@cptIt,
* McsEngl.csdouble-slash@cptIt,
* McsEngl.csfloor-division-operator@cptIt,

_DESCRIPTION:
a // b  Math.floor(a / b)

lcs'operator.DOUBLE-COLON (::)

name::
* McsEngl.lcs'operator.DOUBLE-COLON (::)@cptIt,
* McsEngl.lcpCs'double-colon@cptIt,

_DESCRIPTION:
The double-colon :: is shorthand for saying .prototype.
[http://coffeescriptcookbook.com/chapters/strings/uppercasing-a-string]

lcs'operator.EXISTENTIAL (?)

name::
* McsEngl.lcs'operator.EXISTENTIAL (?)@cptIt,
* McsEngl.cs'existential-operator@cptIt,
* McsEngl.csexistential@cptIt,
* McsEngl.cssoaks@cptIt,
* McsEngl.lcpCs'existential-operator@cptIt,

_DESCRIPTION:
It's a little difficult to check for the existence of a variable in JavaScript. if (variable) ... comes close, but fails for zero, the empty string, and false. CoffeeScript's existential operator ? returns true unless a variable is null or undefined, which makes it analogous to Ruby's nil?
[http://coffeescript.org/#operators]
===
The existential operator (covered below), gives you a reliable way to figure out where to add them; if you're targeting both CommonJS and the browser: exports ? this
[http://coffeescript.org/#lexical-scope]

_CODE.LCS:
msg ? "str"
---
if (typeof msg !== "undefined" && msg !== null) {
msg;
} else {
"str";
};
===
msg? "str"
---
if (typeof msg === "function") {
msg("str");
}
===
a?.b (= a.b if a?)
--- _code.js:
if (typeof a !== "undefined" && a !== null) {
a.b;
}

lcs'operator.in

name::
* McsEngl.lcs'operator.in@cptIt,
* McsEngl.csin@cptIt,
* McsEngl.lcpCs'in@cptIt,

_DESCRIPTION:
in  no JS equivalent
[http://coffeescript.org/#operators]

_CODE.LCS:
2 in [0, 1, 2, 3] //true
'stg' in [0, 1, 2, 'stg'] //true
===
isStatement: ->
@value in ['break', 'continue', 'debugger']
--- _CODE.LJS:
isStatement: function() {
var _ref;
return (_ref = this.value) === 'break' || _ref === 'continue' || _ref === 'debugger';
}
===
string in array
---
var __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };

__indexOf.call(array, string) >= 0;

lcs'operator.is

name::
* McsEngl.lcs'operator.is@cptIt,
* McsEngl.csis@cptIt,
* McsEngl.lcpCs'is@cptIt,

_DESCRIPTION:
In CoffeeScript, we test whether two values are identical with the is operator, and whether they are not identical with the isnt operator:
 2 is 2
   #=> true
   
 'hello' isnt 'goodbye'
   #=> true
[http://ristrettolo.gy/#values-and-identity]

lcs'operator.isnt

name::
* McsEngl.lcs'operator.isnt@cptIt,
* McsEngl.csisnt@cptIt,
* McsEngl.lcpCs'isnt@cptIt,
* McsEngl.lcpCs'operator.is-not@cptIt,

_DESCRIPTION:
In CoffeeScript, we test whether two values are identical with the is operator, and whether they are not identical with the isnt operator:
 2 is 2
   #=> true
   
 'hello' isnt 'goodbye'
   #=> true
[http://ristrettolo.gy/#values-and-identity]

lcs'operator.isnt-undefined (?)

name::
* McsEngl.lcs'operator.isnt-undefined (?)@cptIt,
* McsEngl.lcpCs'isnt-undefined@cptIt,
* McsEngl.lcpCs'operator.question-mark@cptIt,

_DESCRIPTION:
undefined isnt undefined
#=> false
'undefined' isnt undefined
#=> true
false isnt undefined
#=> true
This is so common that a shortcut is provided, the suffix operator ?:
undefined?
#=> false
'undefined'?
#=> true
false?
#=> true
[http://ristrettolo.gy/#undefined]

lcs'operator.modulo (%%)

name::
* McsEngl.lcs'operator.modulo (%%)@cptIt,
* McsEngl.csmodulo-operator@cptIt,

_DESCRIPTION:
a %% b  (a % b + b) % b

lcs'operator.of

name::
* McsEngl.lcs'operator.of@cptIt,
* McsEngl.csof@cptIt,
* McsEngl.lcpCs'of@cptIt,

_DESCRIPTION:
of  in#ql:jsin#
===
check if this property exists in an object or this index in an array.

_CODE.LCS:
> 1 of [2,3]
true
> 1 of [1]
false
===
> 1 of {1:2}
true

lcs'operator.POWER (**)

name::
* McsEngl.lcs'operator.POWER (**)@cptIt,
* McsEngl.csdouble-asterisk@cptIt,
* McsEngl.lcpCs'power-operator@cptIt,

_DESCRIPTION:
a ** b  Math.pow(a, b)

lcs'operator.SEMICOLON (;)

name::
* McsEngl.lcs'operator.SEMICOLON (;)@cptIt,
* McsEngl.lcpCs'semicolon@cptIt,

_DESCRIPTION:
First, the basics: CoffeeScript uses significant whitespace to delimit blocks of code. You don't need to use semicolons ; to terminate expressions, ending the line will do just as well (although semicolons can still be used to fit multiple expressions onto a single line).
[http://coffeescript.org/#language]

cstkn.significant-whitespace

name::
* McsEngl.cstkn.significant-whitespace@cptIt,
* McsEngl.lcpCs'significant-whitespace@cptIt,

_DESCRIPTION:
CoffeeScript uses significant whitespace to delimit blocks of code. You don't need to use semicolons ; to terminate expressions, ending the line will do just as well (although semicolons can still be used to fit multiple expressions onto a single line). Instead of using curly braces { } to surround blocks of code in functions, if-statements, switch, and try/catch, use indentation.
You don't need to use parentheses to invoke a function if you're passing arguments. The implicit call wraps forward to the end of the line or block expression.
console.log sys.inspect object ==> console.log(sys.inspect(object));
[http://coffeescript.org/]

cstkn.TERMINAL

name::
* McsEngl.cstkn.TERMINAL@cptIt,
* McsEngl.csterminal@cptIt,
* McsEngl.cstml@cptIt,

_SPECIFIC:

lcsalgo'SEMANTIC-UNIT (sut)

name::
* McsEngl.lcsalgo'SEMANTIC-UNIT (sut)@cptIt,

lcs'algo'unit.ARRAY (lcsa)

name::
* McsEngl.lcs'algo'unit.ARRAY (lcsa)@cptIt,
* McsEngl.csarr@cptIt,
* McsEngl.csarray@cptIt,
* McsEngl.lcpCs'array@cptIt,
* McsEngl.lcpCs'value.ARRAY@cptIt,

* McsEngl.lcsa@cptIt,

_CODE.LCS:
> [1,2,3]
[
1
2
3
]
===
coffee> arr=[b:1,a:2,100]
[ { b: 1, a: 2 }, 100 ]
===
> [1,2,3][...-1]
[1,2]
===
nums = [1, 2, 3]
list = [a = 0, nums..., b = 4]
eq 0, a
eq 4, b
arrayEq [0,1,2,3,4], list

lcsa'range

name::
* McsEngl.lcsa'range@cptIt,
* McsEngl.csrange@cptIt,
* McsEngl.lcpCs'range@cptIt,

_DESCRIPTION:
Ranges are declared by two integer separated by two periods, wrapped in square brackets.

days = [1..7]

Ranges aren’t a standard object type in Javascript so they get compiled down to arrays.

To get a sub-section of an array you can pass in a range too. Want to get days from tuesday_to_friday where Monday is 1 and Sunday is 7? Since arrays are indexed zero-based, we’d start at 1 and end at 4.

days = [1..7]

tuesday_to_friday = days[1..4]

You can replace whole sections of arrays in a similar way too.

The following…

days[1..4] = ["Tuesday", "Wednesday","Thursday", "Friday"]

Modifies the days array to be [ 1, 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 6, 7 ].

You can use ranges to countdown too for example [10..0] would be 10 to 0.
[http://blog.teamtreehouse.com/the-absolute-beginners-guide-to-coffeescript, 2013-01-31]

_NODE: linkL#ql:csnds'range#

_TOKEN: linkL#ql:csgmr'range#

_CODE.LCS:
arrayEq [1, 2, 3] , [1..3] //inclusive
===
arrayEq [1, 2, 3] , [1...4] //exclusise
===
arrayEq [5, 4, 3, 2] , [5..2]
===
arrayEq [4, 3, 2], [4...1]
===
[a, b] = [1, 3]
arrayEq [1, 2, 3], [a..b]
===
[a, b] = [1, 3]
arrayEq [2, 3, 4, 5, 6], [(a+1)..2*b]
===
down = [99..0]
eq 100, (len = down.length)

lcsa'slicing

name::
* McsEngl.lcsa'slicing@cptIt,
* McsEngl.csslice@cptIt,
* McsEngl.csslicing@cptIt,
* McsEngl.lcpCs'slice@cptIt,

_CODE.LCS:
aShared = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

arrayEq [7, 8, 9] , aShared[7..9] //inclunded
arrayEq [7, 8] , aShared[7...9] //exlunded
arrayEq [2, 3, 4, 5], aShared[2...6]
===
[a, b] = [1, 4]
arrayEq [1, 2, 3, 4], aShared[a..b]
arrayEq [1, 2, 3] , aShared[a...b]
===
test "unbounded slicing", ->
arrayEq [7, 8, 9] , aShared[7..]
arrayEq [8, 9] , aShared[-2..]
arrayEq [9] , aShared[-1...]
arrayEq [0, 1, 2] , aShared[..2]
arrayEq [0, 1, 2] , aShared[...3]

arrayEq [0, 1, 2, 3], aShared[..-7]
arrayEq [0, 1, 2, 3, 4, 5, 6, 7, 8], aShared[..-2]
arrayEq [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], aShared[..-1]
arrayEq [0, 1, 2, 3, 4, 5, 6, 7, 8], aShared[...-1]

lcsa'splicing

name::
* McsEngl.lcsa'splicing@cptIt,
* McsEngl.cssplice@cptIt,
* McsEngl.cssplicing@cptIt,
* McsEngl.lcpCs'splice@cptIt,

_DESCRIPTION:
Splicing is slicing with assignment (destructuring).

_CODE.LCS:
ary = [0..9]
ary[5..9] = [0, 0, 0]
dEqArray [0, 1, 2, 3, 4, 0, 0, 0], ary

lcs'algo'unit.BOOLEAN (lcsb)

name::
* McsEngl.lcs'algo'unit.BOOLEAN (lcsb)@cptIt,
* McsEngl.csbln@cptIt,
* McsEngl.csboolean@cptIt,

* McsEngl.lcsb@cptIt,

_SPECIFIC:
* false
* true

lcs'algo'BOOLEAN-EXPRESSION

name::
* McsEngl.lcs'algo'BOOLEAN-EXPRESSION@cptIt,

_SPECIFIC:

lcs'algo'unit.CLASS

name::
* McsEngl.lcs'algo'unit.CLASS@cptIt,
* McsEngl.cscls@cptIt,
* McsEngl.csclass@cptIt,
* McsEngl.lcpCs'class@cptIt,

cscls'code

name::
* McsEngl.cscls'code@cptIt,

_CODE.LCS:
class Animal
constructor: (@name) ->

move: (meters) ->
alert @name + " moved#{meters}m."

class Snake extends Animal
move: ->
alert "Slithering..."
super 5
===
var Animal, Horse, Snake, sam, tom,
__hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };

Animal = (function() {
function Animal(name) {
this.name = name;
}

Animal.prototype.move = function(meters) {
return alert(this.name + (" moved " + meters + "m."));
};

return Animal;

})();

Snake = (function(_super) {
__extends(Snake, _super);

function Snake() {
return Snake.__super__.constructor.apply(this, arguments);
}

Snake.prototype.move = function() {
alert("Slithering...");
return Snake.__super__.move.call(this, 5);
};

return Snake;

})(Animal);
[http://coffeescript.org/#classes]

cscls'super

name::
* McsEngl.cscls'super@cptIt,
* McsEngl.cssuper@cptIt,

_CODE.LCS:
class Animal
constructor: (@name) ->

move: (meters) ->
alert @name + " moved#{meters}m."

class Snake extends Animal
move: ->
alert "Slithering..."
super 5
[http://coffeescript.org/#classes]

lcs'algo'unit.FUNCTION (lcsf)

name::
* McsEngl.lcs'algo'unit.FUNCTION (lcsf)@cptIt,
* McsEngl.cfst'function@cptIt,
* McsEngl.csfunction@cptIt,
* McsEngl.lcpCs'code.function@cptIt,
* McsEngl.lcpCs'function@cptIt,
* McsEngl.csfcn@cptIt,

_GENERIC:
* lcp-function#ql:lcp'function#

_DESCRIPTION:
Functions are values that can be part of expressions, returned from other functions, and so forth.
Functions are reference values.
Functions are applied to arguments.
The arguments are passed by sharing, which is also called “pass by value.”
Function bodies have zero or more expressions.
Function application evaluates to the value of the last expression evaluated or undedfined.
Function application creates a scope. Scopes are nested and free variable references closed over.
Variables can shadow variables in an enclosing scope.
[http://ristrettolo.gy/#summary]

_CODE.COFFEE:
func = -> "bar"
===>
var func;
func = function() {
return "bar";
};
[http://arcturo.github.io/library/coffeescript/02_syntax.html]
===
square = (x) -> x * x
===>
var square;
square = function(x) {
return x * x;
};
===
fill = (container, liquid = "coffee") ->
"Filling the#{container} with#{liquid}..."
===>
var fill;

fill = function(container, liquid) {
if (liquid == null) {
liquid = "coffee";
}
return "Filling the " + container + " with " + liquid + "...";
};
[http://coffeescript.org/#literals]

lcsf'body

name::
* McsEngl.lcsf'body@cptIt,

_DESCRIPTION:
When we define a function, we write the arguments it expects to the left of the -> and an optional expression to the right. This expression is called the function’s body. Like this:
(args) -> body
[http://ristrettolo.gy/#functions-with-no-arguments]

lcsf'doing.DEFINING

name::
* McsEngl.lcsf'doing.DEFINING@cptIt,

lcsf'doing.EXECUTING

name::
* McsEngl.lcsf'doing.EXECUTING@cptIt,
* McsEngl.lcsf'ivocation@cptIt,
* McsEngl.lcsf'ivoke@cptIt,
* McsEngl.lcsf'calling@cptIt,

=== _NOTES: Every time a function is invoked (“invoked” is a synonym for “applied to zero or more arguments”),
[http://ristrettolo.gy/#variables-and-bindings]
===
"applying the function to the argument"
[http://ristrettolo.gy/#variables-and-bindings]

_DESCRIPTION:
When we call functions with parameters, the parentheses around the parameter (or argument) list is optional.
> hello "Jane" # prints "Hello, Jane!"
However, when we call a function without any parameters, we must still supply the parentheses.
> hello() # The parentheses are required
[http://tutorials.jumpstartlab.com/topics/javascript/coffeescript.html]

_CALL_BY_VALUE:
Like most contemporary programming languages, CoffeeScript uses the “call by value” evaluation strategy. That’s a $2.75 way of saying that when you write some code that appears to apply a function to an expression or expressions, CoffeeScript evaluates all of those expressions and applies the functions to the resulting value(s).
So when you write:
((diameter) -> diameter * 3.14159265)(1 + 1)
#=> 6.2831853
What happened internally is that the expression 1 + 1 was evaluated first, resulting in 2. Then our circumference function was applied to 2.
[http://ristrettolo.gy/#call-by-value]

_CODE.LCS:
fcn()
===
fcn arg
===
((diameter) -> diameter * 3.14159265)(2)
#=> 6.2831853
===
functionname (argument)
functionname argument
===
fcnRun str, filename: 'Cakefile'
--- _code.js:
fcnRun(str, {
filename: 'Cakefile'
});

lcsf'environment

name::
* McsEngl.lcsf'environment@cptIt,

_DESCRIPTION:
To understand how closures are evaluated, we need to revisit environments. As we’ve said before, all functions are associated with an environment. We also hand-waved something when describing our environment. Remember that we said the environment for ((x) -> (y) -> x)(1) is {x: 1, ...} and that the environment for ((y) -> x)(2) is {y: 2, ...}? Let’s fill in the blanks!
The environment for ((y) -> x)(2) is actually {y: 2, '..': {x: 1, ...}}. '..' means something like “parent” or “enclosure” or “super-environment.” It’s (x) ->’s environment, because the function (y) -> x is within (x) ->’s body. So whenever a function is applied to arguments, its environment always has a reference to its parent environment.
And now you can guess how we evaluate ((y) -> x)(2) in the environment {y: 2, '..': {x: 1, ...}}. The variable x isn’t in (y) ->’s immediate environment, but it is in its parent’s environment, so it evaluates to 1 and that’s what ((y) -> x)(2) returns even though it ended up ignoring its own argument.
[http://ristrettolo.gy/#its-always-the-environment]

lcsf'input

name::
* McsEngl.lcsf'input@cptIt,

lcsf'argument

name::
* McsEngl.lcsf'argument@cptIt,
* McsEngl.lcsf'input@cptIt,
* McsEngl.lcsf'parameter@cptIt,

=== _NOTES: Some folks call the arguments the inputs to a function.
[http://ristrettolo.gy/#applying-functions]
===
arguments (often called “parameters”).
[http://ristrettolo.gy/#fargs]

_DESCRIPTION:
Functions may also have default values for arguments. Override the default value by passing a non-null argument.

fill = (container, liquid = "coffee") ->
"Filling the#{container} with#{liquid}..."

var fill;

fill = function(container, liquid) {
if (liquid == null) {
liquid = "coffee";
}
return "Filling the " + container + " with " + liquid + "...";
};
[http://coffeescript.org/#language]

lcsf'parameter

name::
* McsEngl.lcsf'parameter@cptIt,

lcs'splat

name::
* McsEngl.lcs'splat@cptIt,
* McsEngl.cssplat@cptIt,

_DESCRIPTION:
A splat is a convenient way to accept multiple values as arguments to methods.

In the following example we want to award kudos points to a group of forum users for the number of posts in a given week.

The first person gets 10 points, the second gets 6, the third gets 2 and every one else will get a single point.

Let’s create a function, giveKudos With first, second, and third as parameters. For the rest well use a splat, which is the name of the variable followed by 3 periods. Within the giveKudos method let’s call an unimplemented addKudosToUser which takes two parameters, the user and the points to be added. We’re not going to worry about the implementation it’s just for illustrative purposes.


giveKudos = (first, second, third, rest...) ->
addKudosToUser first, 10
addKudosToUser second, 6
addKudosToUser third, 2

Next we can use a for in to loop over the rest.


giveKudos = (first, second, third, rest...) ->
addKudosToUser first, 10
addKudosToUser second, 6
addKudosToUser third, 2
for user in rest
addKudosToUser user, 1

Given we have an array of users:


users = ["Pasan", "Amit", "Jim", "Andrew", "Allison", "Jason", "A.J."]

We want Pasan to get 10 points, Amit to get 6, Jim to get 2 and then the rest to get 1.

We need to pass in users with the periods in to the method to properly assign the array values to the parameters like this:


giveKudos users...

Without these periods, users get’s assigned to the first parameter and undefined to the rest.
[http://blog.teamtreehouse.com/the-absolute-beginners-guide-to-coffeescript, 2013-01-31]

_CODE.LCS:
test "splats", ->
arrayEq [0, 1, 2], (((splat...) -> splat) 0, 1, 2)
arrayEq [2, 3], (((_, _1, splat...) -> splat) 0, 1, 2, 3)
arrayEq [0, 1], (((splat..., _, _1) -> splat) 0, 1, 2, 3)
arrayEq [2], (((_, _1, splat..., _2) -> splat) 0, 1, 2, 3)
===
a = [6, 9]
9 in [3, a...] //true
9 in [3, a] //false
===
ary = [0..9]
ary[5..9] = [0, 0, 0]
dEqArray [0, 1, 2, 3, 4, 0, 0, 0], ary

lcsf'return

name::
* McsEngl.lcsf'return@cptIt,

_CODE.LCS:
fcnTHIS = -> this
---
var fcnTHIS;
fcnTHIS = function() {
return this;
};
===
fcnNEGATE = -> @negated = not @negated; this
--- _code.js:
var fcnNEGATE;
fcnNEGATE = function() {
this.negated = !this.negated;
return this;
};

lcsf'signature

name::
* McsEngl.lcsf'signature@cptIt,

_DESCRIPTION:
You can indent the body instead of putting it on the same line. Let’s introduce a new term: (x) -> is the function’s signature, and x is its body, just as we’ve mentioned before.
[http://ristrettolo.gy/#closures]

lcsf'variable

name::
* McsEngl.lcsf'variable@cptIt,

_FREE_VARIABLE:
The function (y) -> x is interesting. It contains a free variable, x.10 A free variable is one that is not bound within the function. Up to now, we’ve only seen one way to “bind” a variable, namely by passing in an argument with the same name. Since the function (y) -> x doesn’t have an argument named x, the variable x isn’t bound in this function, which makes it “free.”
Now that we know that variables used in a function are either bound or free, we can bifurcate functions into those with free variables and those without:
Functions containing no free variables are called pure functions.
Functions containing one or more free variables are called closures.
[http://ristrettolo.gy/#if-functions-without-free-variables-are-pure-are-closures-impure]

_SPECIFIC:
* bound (local)
* free
* parameter

SPECIFIC

lcsf.ANONYMOUS

name::
* McsEngl.lcsf.ANONYMOUS@cptIt,

_CODE.LCS:
COFFEE_ALIASES = (key for key of objCOFFEE_ALIAS)
---
var COFFEE_ALIASES, key;

COFFEE_ALIASES = (function() {
var _results;
_results = [];
for (key in objCOFFEE_ALIAS) {
_results.push(key);
}
return _results;
})();

lcsf.BOUND

name::
* McsEngl.lcsf.BOUND@cptIt,
* McsEngl.csbound-function@cptIt,

_DESCRIPTION:
# `=>` is for functions bound to the current value of *this*.
[\File1a\lcpCpt\src\grammar.coffee]

lcsf.CLOSURE

name::
* McsEngl.lcsf.CLOSURE@cptIt,

_DESCRIPTION:
The function (y) -> x is interesting. It contains a free variable, x.10 A free variable is one that is not bound within the function. Up to now, we’ve only seen one way to “bind” a variable, namely by passing in an argument with the same name. Since the function (y) -> x doesn’t have an argument named x, the variable x isn’t bound in this function, which makes it “free.”
Now that we know that variables used in a function are either bound or free, we can bifurcate functions into those with free variables and those without:
Functions containing no free variables are called pure functions.
Functions containing one or more free variables are called closures.
[http://ristrettolo.gy/#if-functions-without-free-variables-are-pure-are-closures-impure]

_CODE.LCS:
((x) ->
(y) ->
x
)(1)(2)
#=> 1
[http://ristrettolo.gy/#closures]

lcsf.EXAMPLE

name::
* McsEngl.lcsf.EXAMPLE@cptIt,

_CODE.LCS:
===
fcn1 = (para) -> para
---
var fcn1;
fcn1 = function(para) {
return para;
};
===
coffee> -> 2
[Function]
coffee> (->2)
[Function]
coffee> (->2)(1)
2
coffee> (->2)()
2
===
fcn1: (@comment) ->
---
({
fcn1: function(comment) {
this.comment = comment;
}
});
===
unwrap : -> @body
---
unwrap: function() {
return this.body;
}

lcsf.FACTORIAL

name::
* McsEngl.lcsf.FACTORIAL@cptIt,

_CODE.LCS:
factorial = (x) ->
if x then x * factorial x - 1 else 1

lcs'algo'unit.NONE

name::
* McsEngl.lcs'algo'unit.NONE@cptIt,
* McsEngl.csnone@cptIt,

_DESCRIPTION:
It's a little difficult to check for the existence of a variable in JavaScript. if (variable) ... comes close, but fails for zero, the empty string, and false. CoffeeScript's existential operator ? returns true unless a variable is null or undefined, which makes it analogous to Ruby's nil?
[http://coffeescript.org/#operators]

lcs'algo'unit.NUMBER

name::
* McsEngl.lcs'algo'unit.NUMBER@cptIt,
* McsEngl.csnumber@cptIt,

lcs'algo'unit.OBJECT

name::
* McsEngl.lcs'algo'unit.OBJECT@cptIt,
* McsEngl.csobt@cptIt,
* McsEngl.csobj@cptIt,
* McsEngl.csobject@cptIt,
* McsEngl.lcpCs'object@cptIt,
* McsEngl.lcpCs'value.OBJECT@cptIt,

_DESCRIPTION:
CoffeeScript also provides objects. The word “object” is loaded in programming circles, due to the widespread use of the term “object-oriented programming” that was coined by Alan Kay but has since come to mean many, many things to many different people.
In CoffeeScript, Objects15 are values that can store other values by name (including functions). The most common syntax for creating an object is simple:
{ year: 2012, month: 6, day: 14 }
[http://ristrettolo.gy/#references-and-objects]

_CODE.LCS:
# Objects:
math =
root: Math.sqrt
square: square
cube: (x) -> x * square x
===
obj = {name, description, action}
--- _code.js:
var obj;

obj = {
name: name,
description: description,
action: action
};
===
obj = a: b: nonce
---
obj = {a: {b: nonce}}

csobt'name

name::
* McsEngl.csobt'name@cptIt,

_DESCRIPTION:
If the name is an alphanumeric string conforming to the same rules as names of variables, there’s a simplified syntax for accessing the values:
{ year: 2012, month: 6, day: 14 }['day'] is
{ year: 2012, month: 6, day: 14 }.day
#=> true
[http://ristrettolo.gy/#references-and-objects]

csobt.IMPLICIT

name::
* McsEngl.csobt.IMPLICIT@cptIt,

_CODE.LCS:
dTest 'inline implicit object literals within multiline implicit object literals', ->
x =
a: aa: 0
b: 0
dEq 0, x.b
dEq 0, x.a.aa

lcs'algo'unit.REGEXP

name::
* McsEngl.lcs'algo'unit.REGEXP@cptIt,
* McsEngl.csregexp@cptIt,

csregexp.BLOCK

name::
* McsEngl.csregexp.BLOCK@cptIt,

_DESCRIPTION:
Block Regular Expressions
Similar to block strings and comments, CoffeeScript supports block regexes — extended regular expressions that ignore internal whitespace and can contain comments and interpolation. Modeled after Perl's /x modifier, CoffeeScript's block regexes are delimited by /// and go a long way towards making complex regular expressions readable. To quote from the CoffeeScript source:

OPERATOR = /// ^ (
?: [-=]> # function
| [-+*/%<>&|^!?=]= # compound assign / compare
| >>>=? # zero-fill right shift
| ([-+:])\1 # doubles
| ([&|<>])\2=? # logic / shift
| \?\. # soak access
| \.{2,3} # range or splat
) ///


var OPERATOR;

OPERATOR = /^(?:[-=]>|[-+*\/%<>&|^!?=]=|>>>=?|([-+:])\1|([&|<>])\2=?|\?\.|\.{2,3})/;
load
[http://coffeescript.org/#regexes]

lcs'algo'unit.STRING (lcss)

name::
* McsEngl.lcs'algo'unit.STRING (lcss)@cptIt,
* McsEngl.csstg@cptIt,
* McsEngl.csstr@cptIt,
* McsEngl.csstring@cptIt,

* McsEngl.lcss@cptIt,

_DESCRIPTION:
STRINGS
Strings are declared with quotes like in most other languages.
first_name = "Marty"

To join or concatenate strings, you can list them one after another with a plus symbol in between, like this:
full_name = first_name + " McFly"

You can also include the hash symbol (#), followed by curly braces, and within those the string variable.
full_name = "#{first_name} McFly"

The above two examples would create the string Marty McFly.

The latter type of string interpolation only works when you use double quotes. If you use single-quotes the text is displayed “as is”. Single quote strings are literal strings.


full_name = '#{first_name} McFly'

So the above will be the string of#{first_name} McFly. This mirrors behavior.
[http://blog.teamtreehouse.com/the-absolute-beginners-guide-to-coffeescript]
===
String interpolation

CoffeeScript brings Ruby style string interpolation to JavaScript. Double quotes strings can contain#{} tags, which contain expressions to be interpolated into the string.


favourite_color = "Blue. No, yel..."
question = "Bridgekeeper: What... is your favourite color?
Galahad:#{favourite_color}
Bridgekeeper: Wrong!
"

As you can see in the example above, multiline strings are also allowed, without having to prefix each line with a +:
[http://arcturo.github.io/library/coffeescript/02_syntax.html]

lcss'interpolation

name::
* McsEngl.lcss'interpolation@cptIt,

_DESCRIPTION:
Coffeescript includes string interpolation, much like Ruby. So instead of ("Hi my name is" + name "."), you can type ("Hi, my name is#{name}.") Much nicer.

_CODE.LCS:
code = "#{code}#{if @negated then '==' else '!='} null"

lcss'slice-method

name::
* McsEngl.lcss'slice-method@cptIt,

_CODE.LCS:
string[1...-1]
--- _code.js:
string.slice(1, -1);

lcss.BLOCK

name::
* McsEngl.lcss.BLOCK@cptIt,

_DESCRIPTION:
Block strings can be used to hold formatted or indentation-sensitive text (or, if you just don't feel like escaping quotes and apostrophes). The indentation level that begins the block is maintained throughout, so you can keep it all aligned with the body of your code.

html = """
<strong>
cup of coffeescript
</strong>
"""

var html;
html = "<strong>\n cup of coffeescript\n</strong>";

Double-quoted block strings, like other double-quoted strings, allow interpolation.
[http://coffeescript.org/#strings]

lcss.DOUBLE-QUOTED

name::
* McsEngl.lcss.DOUBLE-QUOTED@cptIt,

_DESCRIPTION:
Double-quoted strings allow for interpolated values, using#{ ... }
[http://coffeescript.org/#strings]

_CODE.LCS:
author = "Wittgenstein"
quote = "A picture is a fact. --#{ author }"
sentence = "#{ 22 / 7 } is a decent approximation of p"

var author, quote, sentence;
author = "Wittgenstein";
quote = "A picture is a fact. -- " + author;
sentence = "" + (22 / 7) + " is a decent approximation of p";
[http://coffeescript.org/#strings]

lcss.MULTILINE

name::
* McsEngl.lcss.MULTILINE@cptIt,

_DESCRIPTION:
Multiline strings are allowed in CoffeeScript. Lines are joined by a single space unless they end with a backslash. Indentation is ignored.

mobyDick = "Call me Ishmael. Some years ago --
never mind how long precisely -- having little
or no money in my purse, and nothing particular
to interest me on shore, I thought I would sail
about a little and see the watery part of the
world..."
var mobyDick;
mobyDick = "Call me Ishmael. Some years ago -- never mind how long precisely -- having little or no money in my purse, and nothing particular to interest me on shore, I thought I would sail about a little and see the watery part of the world...";
[http://coffeescript.org/#strings]

lcss.SINGLE-QUOTED

name::
* McsEngl.lcss.SINGLE-QUOTED@cptIt,

_DESCRIPTION:
single-quoted strings are literal.
[http://coffeescript.org/#strings]

lcsalgo'sut.UNDEFINED (lcsu)

name::
* McsEngl.lcsalgo'sut.UNDEFINED (lcsu)@cptIt,
* McsEngl.lcpCs'undefined@cptIt,
* McsEngl.lcpCs'value.undefined@cptIt,

_DESCRIPTION:
undefined is a value that means “I don’t have a value.” But it’s still a value :-)
[http://ristrettolo.gy/#undefined]

lcs'algo'unit.NAME-VALUE-PAIR (lcsv; variable)

name::
* McsEngl.lcs'algo'unit.NAME-VALUE-PAIR (lcsv; variable)@cptIt,
* McsEngl.csvariable@cptIt,
* McsEngl.lcpCs'variable@cptIt,

_DESCRIPTION:
Variables in CoffeeScript don’t require the keyword var. Simply name your variable, an equals sign, and then the value.
year = 1985
speed = 88
[http://blog.teamtreehouse.com/the-absolute-beginners-guide-to-coffeescript]

csvariable'doing.ASSIGNMENT

name::
* McsEngl.csvariable'doing.ASSIGNMENT@cptIt,
* McsEngl.csvariable'binding@cptIt,

csvariable'doing.REASSIGNMENT

name::
* McsEngl.csvariable'doing.REASSIGNMENT@cptIt,

csvariable'value

name::
* McsEngl.csvariable'value@cptIt,
* McsEngl.lcpCs'value@cptIt,
* McsEngl.lcpCs'code.value@cptIt,

_DESCRIPTION:

_SPECIFIC:
* array##
* boolean##
* class##
* function##
* number##
* object##
* reference-type##
* string##
* undefined##
* value-type##
===
Strings, numbers, and booleans are examples of what CoffeeScript calls “value” or “primitive” types. We’ll use both terms interchangeably.
[http://ristrettolo.gy/#value-types]
In CoffeeScript, functions are values, but they are also much more than simple numbers, strings, or even complex data structures like trees or maps. Functions represent computations to be performed. Like numbers, strings, and arrays, they have a representation in CoffeeScript.
[http://ristrettolo.gy/#as-little-as-possible-about-functions-but-no-less]
You recall that we have two types of values with respect to identity: Value types and reference types. Value types share the same identity if they have the same contents.Reference types do not.
[http://ristrettolo.gy/#functions-and-identities]

lcsalgo'PHRASE (lcsfrs)

name::
* McsEngl.lcsalgo'PHRASE (lcsfrs)@cptIt,

lcsalgo'SENTENCE (lcsstc)

name::
* McsEngl.lcsalgo'SENTENCE (lcsstc)@cptIt,
* McsEngl.csstatement@cptIt,
* McsEngl.lcpCs'statement@cptIt,
* McsEngl.lcpCs'sentence@cptIt,
* McsEngl.csstc@cptIt, {2014-03-19}
* McsEngl.lcs'algo'STATEMENT@cptIt,
* McsEngl.csstatement@cptIt,

_DESCRIPTION:
because statements know how to return results.
[\File1a\lcpCpt\src\nodes.coffee]

_SPECIFIC:
* control-statement##
* definition##
* pure##
* Literal 'break', 'continue', 'debugger'
* return##

lcsstc'relation-to-expression

name::
* McsEngl.lcsstc'relation-to-expression@cptIt,

_RETURN:
# If we need to return the result, and
# it's an expression, simply return it.
# If it's a statement, ask the statement to do so.
[\File1a\lcpCpt\src\nodes.coffee]

lcsstc.ASSIGNMENT.DESTRUCTURING

name::
* McsEngl.lcsstc.ASSIGNMENT.DESTRUCTURING@cptIt,
* McsEngl.destructuring-assignment@cptIt,

_DESCRIPTION:
To make extracting values from complex arrays and objects more convenient, CoffeeScript implements ECMAScript Harmony's proposed destructuring assignment syntax. When you assign an array or object literal to a value, CoffeeScript breaks up and matches both sides against each other, assigning the values on the right to the variables on the left. In the simplest case, it can be used for parallel assignment:

theBait = 1000
theSwitch = 0
[theBait, theSwitch] = [theSwitch, theBait]
---

var theBait, theSwitch, _ref;

theBait = 1000;

theSwitch = 0;

_ref = [theSwitch, theBait], theBait = _ref[0], theSwitch = _ref[1];
[http://coffeescript.org/#destructuring]

lcs'algo'BOOLEAN-STATEMENT

name::
* McsEngl.lcs'algo'BOOLEAN-STATEMENT@cptIt,

_SPECIFIC:
* blnunt AND blnunt
* blnunt OR blnunt
* boolean-function#linkL#

lcsstc.DEFINITION

_CREATED: {2014-02-08}

name::
* McsEngl.lcsstc.DEFINITION@cptIt,
* McsEngl.lcpCs'declaration@cptIt,
* McsEngl.lcpCs'definition@cptIt,

lcsstc.COMMENT

name::
* McsEngl.lcsstc.COMMENT@cptIt,
* McsEngl.cscomment@cptIt,

_CODE.LCS:
# comment
===
###
block comment
###

cscomment.BLOCK

name::
* McsEngl.cscomment.BLOCK@cptIt,

_DESCRIPTION:
Sometimes you'd like to pass a block comment through to the generated JavaScript. For example, when you need to embed a licensing header at the top of a file. Block comments, which mirror the syntax for block strings, are preserved in the generated code.

###
SkinnyMochaHalfCaffScript Compiler v1.0
Released under the MIT License
###



/*
SkinnyMochaHalfCaffScript Compiler v1.0
Released under the MIT License
*/
[http://coffeescript.org/#strings]

lcsstc.CONDITIONAL

name::
* McsEngl.lcsstc.CONDITIONAL@cptIt,
* McsEngl.lcpCs'conditional-statement@cptIt,

_STRUCTURE:
{nodeBoolean}
{actionThen}
{actionElse}

_NODE: linkL#ql:csnds'if#

_TOKEN: linkL#ql:csgmr'if#

lcs'sentence.IF

name::
* McsEngl.lcs'sentence.IF@cptIt,
* McsEngl.csif@cptIt,
* McsEngl.lcpCs'if@cptIt,

_CODE.LCS:
mood = greatlyImproved if singing
--- _CODE.LJS:
if (singing) {
mood = greatlyImproved;
}
===
number = -42 if opposite

lcs'sentence.if-else

name::
* McsEngl.lcs'sentence.if-else@cptIt,
* McsEngl.lcpCs'if-else@cptIt,

_CODE.LCS:
if happy and knowsIt
clapsHands()
chaChaCha()
else
showIt()
=== _CODE.LJS:
if (happy && knowsIt) {
clapsHands();
chaChaCha();
} else {
showIt();
}

lcs'sentence.if-then-else

name::
* McsEngl.lcs'sentence.if-then-else@cptIt,
* McsEngl.lcpCs'if-then-else@cptIt,

_CODE.LCS:
date = if friday then sue else jill
=== _CODE.LJS:
date = friday ? sue : jill;

lcsstc.CONTROL-FLOW

name::
* McsEngl.lcsstc.CONTROL-FLOW@cptIt,
* McsEngl.lcpCs'control-flow-statement@cptIt,

_SPECIFIC:
# * Conditionals
# * Loops
# * For
# * While
# * Until
# * Loop
# * Switch
# * Throw

lcsstc.FOR

name::
* McsEngl.lcsstc.FOR@cptIt,
* McsEngl.csdo@cptIt,
* McsEngl.csfor@cptIt,
* McsEngl.lcpCs'for@cptIt,
* McsEngl.lcpCs'for-in@cptIt,
* McsEngl.lcpCs'do@cptIt,
* McsEngl.lcpCs'for-statement@cptIt,

_DESCRIPTION:
CoffeeScript provides the do keyword, which immediately invokes a passed function, forwarding any arguments.
[http://coffeescript.org/#loops]

_GENERIC:
* loop-statement#ql:csstatement.loop#

_CODE.LCS:
//doing FOR v IN array
eat food for food in ['toast', 'cheese', 'wine']
---> _CODE.LJS:
var food, _i,_len, _ref;
_ref = ['toast', 'cheese', 'wine'];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
food = _ref[_i];
eat(food);
}
[http://coffeescript.org/]
===
sum *= num for num in arguments
--- _code.js:
var num, _i, _len;
for (_i = 0, _len = arguments.length; _i < _len; _i++) {
num = arguments[_i];
sum *= num;
}

_CODE.LCS:
//FOR v IN array
// doing
for filename in list
do (filename) ->
fs.readFile filename, (err, contents) ->
compile filename, contents.toString()
--- CODE.JS:
var filename, _fn, _i, _len;
_fn = function(filename) {
return fs.readFile(filename, function(err, contents) {
return compile(filename, contents.toString());
});
};
for (_i = 0, _len = list.length; _i < _len; _i++) {
filename = list[_i];
_fn(filename);
}
===
for i in [1...9]
doing()
---
var i, _i;
for (i = _i = 1; _i < 9; i = ++_i) {
doing();
}
===
languages = ["CoffeeScript", "JavaScript", "Ruby"]
for lang, i in languages
alert "#{i} =#{lang}"
===
for v in test by 2 then v
---
var v, _i, _len;
for (_i = 0, _len = test.length; _i < _len; _i += 2) {
v = test[_i];
v;
}
===
for v in test when true then v
---
var v, _i, _len;
for (_i = 0, _len = test.length; _i < _len; _i++) {
v = test[_i];
if (true) {
v;
}
}

_CODE.LCS:
//FOR k,i IN array
===
break for [tag], i in @aTokens when tag isnt 'TERMINATOR'
---
var i, tag, _i, _len, _ref;
_ref = this.aTokens;
for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
tag = _ref[i][0];
if (tag !== 'TERMINATOR') {
break;
}
}
===
for v, i in test then i
===
for v, i in test
i

_CODE.LCS:
//FOR k,v OF object doing
for key, val of obj2
...
---
var key, val;
for (key in obj2) {
val = obj2[key];
...;
}

_CODE.LCS:

lcsstc.unless

name::
* McsEngl.lcsstc.unless@cptIt,
* McsEngl.csunless@cptIt,
* McsEngl.lcpCs'unless@cptIt,

_CODE.LCS:
unless answer is no
alert "Hello CoffeeScript!"
--- _code.js:
if (answer !== false) {
alert("Hello CoffeeScript!");
}
===
letTheWildRumpusBegin() unless answer is no
---
if (answer !== false) {
letTheWildRumpusBegin();
}
===
return fcnFind_cake_dir parent unless parent is dir
---
if (parent !== dir) {
return fcnFind_cake_dir(parent);
}

lcsstc.LOOP

name::
* McsEngl.lcsstc.LOOP@cptIt,
* McsEngl.csloop@cptIt,
* McsEngl.lcpCs'loop@cptIt,
* McsEngl.lcpCs'loop-statement@cptIt,

_CODE.LCS:
dTest "Basic `loop`", ->
i = 5
list = []
loop
i -= 1
break if i is 0
list.push i * 2
ok list.join(' ') is '8 6 4 2'
[\File1a\lcpCpt\test\control_flow.coffee]

_SPECIFIC:
* for##
* while##

lcsstc.PURE

name::
* McsEngl.lcsstc.PURE@cptIt,

_DESCRIPTION:
# Pure statements which cannot be expressions.
NodeStatement: [
dRule 'NodeSmtReturn'
dRule 'NodeSmtComment'
dRule 'TknBREAKCONTINUE', -> new cLiteral $1
[\File1a\lcpCpt\src\grammar.coffee]

lcsstc.RETURN

name::
* McsEngl.lcsstc.RETURN@cptIt,
* McsEngl.csreturn@cptIt,

_DESCRIPTION:
# A `return` is a *pureStatement* -- wrapping it in a closure wouldn't
# make sense.

lcsstc.SWITCH

name::
* McsEngl.lcsstc.SWITCH@cptIt,
* McsEngl.csswitch@cptIt,
* McsEngl.lcpCs'switch-statement@cptIt,

_STRUCTURE:
{VARIABLENAME}
{VALUE1}{ACTION1}
{VALUE2}{ACTION2}

{VALUE.DEFAULT}{ACTION.DEFAULT}

_CLASS: linkL#ql:csnds'switch#

_TOKEN: linkL#ql:csgmr'switch#

lcsstc.SWITCH

name::
* McsEngl.lcsstc.SWITCH@cptIt,
* McsEngl.cswhen@cptIt,
* McsEngl.lcpCs'switch@cptIt,
* McsEngl.lcpCs'then@cptIt,
* McsEngl.lcpCs'when@cptIt,
* McsEngl.lcpCs'else@cptIt,

_CODE.LJS:
switch day
when "Mon" then go work
when "Tue" then go relax
when "Thu" then go iceFishing
when "Fri", "Sat"
if day is bingoDay
go bingo
go dancing
when "Sun" then go church
else go work
--- _CODE.LJS:
switch (day) {
case "Mon":
go(work);
break;
case "Tue":
go(relax);
break;
case "Thu":
go(iceFishing);
break;
case "Fri":
case "Sat":
if (day === bingoDay) {
go(bingo);
go(dancing);
}
break;
case "Sun":
go(church);
break;
default:
go(work);
}
loadrun: false
===
switch string
when ' ' then 'space'
when '\n' then 'newline'
when '\t' then 'tab'
else string
---
switch (string) {
case ' ':
'space';
break;
case '\n':
'newline';
break;
case '\t':
'tab';
break;
default:
string;
}

_CODE.LCS:
switch num
when 2, 4, 6
true
when 1, 3, 5
false
--- _code.js
switch (num) {
case 2:
case 4:
case 6:
return true;
case 1:
case 3:
case 5:
return false;
}

lcsstc.THROW

name::
* McsEngl.lcsstc.THROW@cptIt,
* McsEngl.csthrow@cptIt,
* McsEngl.lcpCs'throw-statement@cptIt,

_NODE: linkL#ql:csnds'throw#

_CODE.LCS:
throw new Error 'failed'

lcsstc.TRY-CATCH

name::
* McsEngl.lcsstc.TRY-CATCH@cptIt,
* McsEngl.cscatch@cptIt,
* McsEngl.cstry@cptIt,

_CODE.LCS:
Try/catch statements are just about the same as JavaScript (although they work as expressions).

try
allHellBreaksLoose()
catsAndDogsLivingTogether()
catch error
print error
finally
cleanUp()
---
var error;

try {
allHellBreaksLoose();
catsAndDogsLivingTogether();
} catch (_error) {
error = _error;
print(error);
} finally {
cleanUp();
}

_CODE.jEdit:
try
rewatch()
compile()
catch err
removeSource(source, base)
compileJoin()
//if after catch there is NO 'error', sidekick does not work.

lcsstc.UNTIL

name::
* McsEngl.lcsstc.UNTIL@cptIt,
* McsEngl.lcpCs'until-statement@cptIt,

_GENERIC:
* loop-statement#ql:csstatement.loop#

lcsstc.WHILE

name::
* McsEngl.lcsstc.WHILE@cptIt,
* McsEngl.cswhile@cptIt,
* McsEngl.lcpCs'node.WHILE@cptIt,
* McsEngl.while-loop.cs@cptIt,
* McsEngl.while-statement.cs@cptIt,

_GENERIC:
* loop-statement#ql:csstatement.loop#

WHILE#
Condition-node
Doing-node

_TOKEN: linkL#ql:csgmr'while#

_CLASS: linkL#ql:csnds'while#

_CODE.LCS:
while i -= 1 when i % 2 is 0
i * 2
--- _code.js:
while (i -= 1) {
if (i % 2 === 0) {
i * 2;
}--}

lcsalgo'SECTION

name::
* McsEngl.lcsalgo'SECTION@cptIt,
* McsEngl.lcsblock@cptIt,
* McsEngl.lcsparagraph@cptIt,
* McsEngl.lcssection@cptIt,
* McsEngl.csblock@cptIt,

lcsalgo'Code

name::
* McsEngl.lcsalgo'Code@cptIt,
* McsEngl.cscode@cptIt,

lcs'code.COMMENT

name::
* McsEngl.lcs'code.COMMENT@cptIt,
* McsEngl.cfst'comment@cptIt,
* McsEngl.cscomment@cptIt,
* McsEngl.lcpCs'comment@cptIt,

_DESCRIPTION:
Comments are in the same format as Ruby comments, starting with a hash character.

# A comment
Multiline comments are also supported, and are brought forward to the generated JavaScript. They're enclosed by three hash characters.


###
A multiline comment, perhaps a LICENSE.
###
[http://arcturo.github.io/library/coffeescript/02_syntax.html]

lcs'code.COMPREHENSION

name::
* McsEngl.lcs'code.COMPREHENSION@cptIt,
* McsEngl.lcpCs'comprehension@cptIt,

_ADDRESS.WPG:
* http://openmymind.net/2012/1/15/Understanding-CoffeeScript-Comprehensions//

lcs'code.DESTRUCTURING-ASSIGNMENT

name::
* McsEngl.lcs'code.DESTRUCTURING-ASSIGNMENT@cptIt,
* McsEngl.csdestructuring@cptIt,
* McsEngl.lcpCs'assignment.destructuring@cptIt,
* McsEngl.lcpCs'destructuring-assignment@cptIt,

_DESCRIPTION:
To make extracting values from complex arrays and objects more convenient, CoffeeScript implements ECMAScript Harmony's proposed destructuring assignment syntax. When you assign an array or object literal to a value, CoffeeScript breaks up and matches both sides against each other, assigning the values on the right to the variables on the left.
[http://coffeescript.org/#destructuring]
===
Loading exports from a module efficiently:

Thanks to Coffeescript's destructuring assignments capability, you don't have to write code that looks like this:

MyClass = require("./my_class").MyClass

you can simply write

{MyClass} = require("./my_class")

and it will do the same thing. You can even pull out multiple exports (i.e. {MyClass1,MyClass2}) at a time, though this doesn't come up for me that often.
[http://blog.maxaller.name/2011/10/coffeescript-in-node-js/]

_CODE.LCS:
* csobt'destructuring:
# object
{comment, here} = obj
--- _code.js:
var comment, here;
comment = obj.comment, here = obj.here;

===
* csarr'destructuring:
# array
[comment, here] = arr
--- _code.js:
var comment, here;
comment = arr[0], here = arr[1];

===
//destructuring the exception object
try
missing.object
catch {message}
message
---
var message;
try {
missing.object;
} catch (_error) {
message = _error.message;
message;
}

lcs'code.EXPRESSION

name::
* McsEngl.lcs'code.EXPRESSION@cptIt,
* McsEngl.cfst'expression@cptIt,
* McsEngl.lcpCs'expression@cptIt,

_DESCRIPTION:
Almost everything is an expression in CoffeeScript, for example if, switch and for which have no return value in JavaScript do in CoffeeScript.
[http://en.wikipedia.org/wiki/CoffeeScript]
===
All values are expressions. ...
Let’s try this as well with something else the computer understands easily:
"CoffeeScript" + " " + "Ristretto"
#=> "CoffeeScript Ristretto"
These are “strings,” values featured in almost every contemporary computer language. We see that “strings” are values, and you can make an expression out of strings and an operator +. Since strings are values, they are also expressions by themselves. But strings with operators are not values, they are expressions. Now we know what was missing with our “coffee grounds plus hot water” example. The coffee grounds were a value, the boiling hot water was a value, and the “plus” operator between them made the whole thing an expression that was not a value.
[http://ristrettolo.gy/#values-and-expressions]

lcs'expression'doing.EVALUATION

name::
* McsEngl.lcs'expression'doing.EVALUATION@cptIt,
* McsEngl.lcpCs'expression'evaluation@cptIt,

SPECIFIC

_CODE:
# All the different types of expressions in our language. The basic unit of
# CoffeeScript is the **Expression** -- everything that can be an expression
# is one. Blocks serve as the building blocks of many other rules, making
# them somewhat circular.
Expression: [
o 'Value'
o 'Invocation'
o 'Code'
o 'Operation'
o 'Assign'
o 'If'
o 'Try'
o 'While'
o 'For'
o 'Switch'
o 'Class'
o 'Throw'
]
[\pgmWEB\pgmCoffee\coffee-script\src\grammar.coffee]

_SPECIFIC:
Expressions consist either of
* representations of values (like 3.14159265, true, and undefined),
* operators that combine expressions (like 3 + 2), and some special forms like
* [1, 2, 3] for creating arrays out of expressions and
* (arguments) ->body-expression for creating functions.
[http://ristrettolo.gy/#a-quick-summary-of-functions-and-bodies]

lcs'code.REFERENCE-TYPE

name::
* McsEngl.lcs'code.REFERENCE-TYPE@cptIt,
* McsEngl.lcpCs'reference-type@cptIt,

_DESCRIPTION:
What about reference types? CoffeeScript cannot place a copy of an array or object in an environment, because the copy would not be identical to the original. So instead, CoffeeScript does not place reference values in any environment. CoffeeScript places references to reference types in environments, and when the value needs to be used, CoffeeScript uses the reference to obtain the original.
Because many references can share the same value, and because CoffeeScript passes references as arguments, CoffeeScript can be said to implement “call by sharing” semantics. Call by sharing is generally understood to be a specialization of call by value, and it explains why some values are known as value types and other values are known as reference types.
[http://ristrettolo.gy/#call-by-sharing]

_SPECIFIC:
* array##
* object##

lcs'code.ATOM.NO

name::
* McsEngl.lcs'code.ATOM.NO@cptIt,
* McsEngl.lcpCs'atomNo@cptIt,

_SPECIFIC:
* assignment##
* definition##

lcs'code.ATOM

name::
* McsEngl.lcs'code.ATOM@cptIt,
* McsEngl.lcpCs'atom@cptIt,
* McsEngl.lcpCs'code.VALUE-TYPE@cptIt,

_DESCRIPTION:
When CoffeeScript binds a name to a value type value, it makes a copy of the value and places the copy in the environment. As you recall, value types like strings and numbers are identical to each other if they have the same content. So CoffeeScript can make as many copies of strings, numbers, or booleans as it wishes.
[http://ristrettolo.gy/#call-by-sharing]

_SPECIFIC:
* boolean##
* identifier
* name.array
* name.function
* name.object
* name.variable
* null##
* number-literal##
* operator.function
* string-literal##
* undefined##

lcs'Error

name::
* McsEngl.lcs'Error@cptIt,
* McsEngl.cserror@cptIt,

cserror.cannot_call_super_outside_of_an_instance_method:
\File1a\lcpCpt\src\nodes.coffee:277:21: error: cannot call super outside of an instance method.
if o.scope then super o, level else @fTranslateAlgo o
=> when changed 'generated' to 'bGenerated'.

cserror.unexpected_indentation:
\File1a\lcpCpt\src\browser.coffee:12:1: error: unexpected indentation
options.bare ?= on
=> when changed 'INDENT'

lcs'Evaluation

name::
* McsEngl.lcs'Evaluation@cptIt,

_FUNCTION:
CoffeeScript Ristretto is first and foremost about a book about programming with functions, because its flexible and powerful functions are what make the CoffeeScript programming language so capable, and what CoffeeScript does well.
[http://ristrettolo.gy/#about-this-book]
===
CoffeeScript has become increasingly popular over the last couple of years due to its adoption by the Node.js and Rails communities.
[http://blog.teamtreehouse.com/the-absolute-beginners-guide-to-coffeescript, 2013-01-31]

lcs'advantangeNo

name::
* McsEngl.lcs'advantangeNo@cptIt,

_EXTRA_COMPILE_STEP:
What are the disadvantages of using CoffeeScript? Well, it introduces another compile step between you and your JavaScript. CoffeeScript tries to mitigate the issue as best it can by producing clean and readable JavaScript, and with its server integrations which automate compilation.
[http://arcturo.github.io/library/coffeescript/01_introduction.html]

_COMMUNITY:
The other disadvantage, as with any new language, is the fact that the community is still small at this point, and you'll have a hard time finding fellow collaborators who already know the language. CoffeeScript is quickly gaining momentum though, and its IRC list is well staffed; any questions you have are usually answered promptly.
[http://arcturo.github.io/library/coffeescript/01_introduction.html]

lcs'human

name::
* McsEngl.lcs'human@cptIt,

Ashkenas.Jeremy

name::
* McsEngl.Ashkenas.Jeremy@cptIt,
* McsEngl.Jeremy-Ashkenas@cptIt,

_DESCRIPTION:
Designed by  Jeremy Ashkenas
Developer    Jeremy Ashkenas, et al.
===
Jeremy Ashkenas is the creator of the CoffeeScript programming language, the Backbone.js JavaScript framework, and the Underscore.js JavaScript library. [1] [2] [3] Ashkenas has been a speaker at numerous conferences and events. He is currently working at Interactive News at the NYTimes and DocumentCloud.[4]
[http://en.wikipedia.org/wiki/Jeremy_Ashkenas]

_ADDRESS.WPG:
* jashkenas@gmail.com,
* http://ashkenas.com//
* http://github.com/jashkenas,
* https://twitter.com/jashkenas,

lcs'relation-to-JavaScript

name::
* McsEngl.lcs'relation-to-JavaScript@cptIt,
* McsEngl.JavaScript'relation-to-CoffeeScript@cptIt,

_DESCRIPTION:
CoffeeScript is not a superset of JavaScript, so although you can use external JavaScript libraries from inside CoffeeScript, you'll get syntax errors if you compile JavaScript as-is, without converting it. The compiler converts CoffeeScript code into its counterpart JavaScript, there's no interpretation at runtime.
[http://arcturo.github.io/library/coffeescript/01_introduction.html]

lcs'Resource

name::
* McsEngl.lcs'Resource@cptIt,

_ADDRESS.WPG:
* http://coffeescript.org//
* https://github.com/jashkenas/coffee-script/wiki,
* https://github.com/polarmobile/coffeescript-style-guide,
* http://coffeescriptcafe.com//
* https://www.codeschool.com/courses/coffeescript,
===
* http://blog.teamtreehouse.com/the-absolute-beginners-guide-to-coffeescript,

lcs'book

name::
* McsEngl.lcs'book@cptIt,
* McsEngl.lcpCs'resource.book@cptIt,

_ADDRESS.WPG:
* free: The Little Book on CoffeeScript: http://arcturo.github.io/library/coffeescript//
* free: cs cookbook: http://coffeescriptcookbook.com//
* Smooth CoffeeScript, http://autotelicum.github.io/Smooth-CoffeeScript//
* CoffeeScript: Accelerated JavaScript Development,
* Programming in CoffeeScript, http://my.safaribooksonline.com/book/-/9780132946155,
By: Mark Bates
Publisher: Addison-Wesley Professional
Pub. Date: May 24, 2012
* cheat sheets at Cheatography.
* http://ristrettolo.gy//

lcs'Tool

name::
* McsEngl.lcs'Tool@cptIt,

SPECIFIC

_SPECIFIC:
* cake##
* cs2js##
* compiler##
* jison##
* js2coffee##

_CoffeeScript_to_JavaScript:
* http://cs2js.nodejitsu.com//

lcstool.js2Coffee

name::
* McsEngl.lcstool.js2Coffee@cptIt,

_JavaScript_to_CoffeeScript:
* http://js2coffee.org//
===
JS2Coffee
Is a very well done reverse JavaScript-to-CoffeeScript compiler. It's not going to be perfect (infer what your JavaScript classes are, when you need bound functions, and so on...) — but it's a great starting point for converting simple scripts.
[http://coffeescript.org/#resources]

lcstool.amCoffee

name::
* McsEngl.lcstool.amCoffee@cptIt,

_DESCRIPTION:
A CoffeeScript version of the Chrome Console.
Features:
- Type using CoffeeScript
- Formatted outputs
- Auto-complete
- Command history

Use it the way you use the original console, but with Coffee!

New in 1.1.0:
- Layouts for console functions
- Auto-complete for strings
- Support for node objects
- Settings

GitHub Repository:
https://github.com/auiWorks/amCoffee
[https://chrome.google.com/webstore/detail/amcoffee/eohnbihebhopoapemdbbodaiaagpogik]

lcstool.CoffeeDoc

name::
* McsEngl.lcstool.CoffeeDoc@cptIt,
* McsEngl.CoffeeDoc@cptIt,

_DESCRIPTION:
CoffeeDoc
An API documentation generator for CoffeeScript

CoffeeDoc is a simple API documentation generator for CoffeeScript. It reads python-style docstrings in your CoffeeScript class and function definitions, passes them through Markdown and outputs the result as easy to read HTML.

Thanks to apgwoz, CoffeeDoc can also generate wiki pages for Github!

CoffeeDoc can also return your documentation as JSON, so you can run it through an external documentation system such as Sphinx.

CoffeeDoc is inspired by the excellent Docco, and is intended for projects that require more structured API documentation.
[https://github.com/omarkhan/coffeedoc]

lcstool.COMPILER

name::
* McsEngl.lcstool.COMPILER@cptIt,
* McsEngl.lcscompiler@cptIt,

_DESCRIPTION:
Source Code
Use bin/coffee to test your changes,
bin/cake test to run the test suite,
bin/cake build to rebuild the CoffeeScript compiler, and
bin/cake build:parser to regenerate the Jison parser if you're working on the grammar.
[http://coffeescript.org/#resources]

lcstool.Jison#ql:jison@cptIt#

name::
* McsEngl.lcstool.Jison@cptIt,

lcstool.CAKE

name::
* McsEngl.lcstool.CAKE@cptIt,
* McsEngl.cfst'cake@cptIt,
* McsEngl.cscake@cptIt,
* McsEngl.lcpCs'cake@cptIt,

_DESCRIPTION:
cake is coffee's little sister (or so I picture things). If you installed CoffeeScript using npm then you should already have access to it.
[https://github.com/jashkenas/coffee-script/wiki/%5BHowTo%5D-Compiling-and-Setting-Up-Build-Tools]

_cake:
Running cake without any arguments, you get a list of all available tasks and their description.

_cake_task:

cscake'Cakefile

name::
* McsEngl.cscake'Cakefile@cptIt,

cscake'task

name::
* McsEngl.cscake'task@cptIt,

_DESCRIPTION:
task 'taskname' 'task description' ->
body of task

Define the task as say:hello:

task 'say:hello', 'Description of task', ->
console.log 'Hello World!'

Save and exit back to the shell. Next, let's run our newly created task:

$ cake say:hello
Hello World!
[https://github.com/jashkenas/coffee-script/wiki/%5BHowTo%5D-Compiling-and-Setting-Up-Build-Tools]

build task:
{exec} = require 'child_process'
task 'build', 'Build project from src/*.coffee to lib/*.js', ->
exec 'coffee --compile --output lib/ src/', (err, stdout, stderr) ->
throw err if err
console.log stdout + stderr

The build task launches the command we used earlier and waits for it to complete. Upon successful compilation it prints any output (nothing usually so add your own indicators) or throws an exception should coffee have exited with a status code greater than 0 indicating a compilation failure.
[https://github.com/jashkenas/coffee-script/wiki/%5BHowTo%5D-Compiling-and-Setting-Up-Build-Tools]

Concatenate Files with -j or --join flag of the coffeescript compiler:

A simple way to concatenate coffee files into a single javascript file in a specific order can be done with a Cakefile:

{exec} = require "child_process"

listOfFiles = "src/main.coffee src/littleTest.coffee src/outro.coffee"

task "watch", "Build project from src/*.coffee to lib/*.js", ->
exec " coffee -w -j app.js -c -o lib/ " + listOfFiles, (err, stdout, stderr) ->
throw err if err
console.log stdout + stderr

Simply enter your list of coffee files in your desired order as a string (in this case listOfFiles) and invoke the watch task and your coffee files are concatenated into a single file app.js (which you can change of course) in the order you specified.
[https://github.com/jashkenas/coffee-script/wiki/%5BHowTo%5D-Compiling-and-Setting-Up-Build-Tools]

lcs'tool.IMPLEMENTOR

name::
* McsEngl.lcs'tool.IMPLEMENTOR@cptIt,
* McsEngl.cfst'compiler@cptIt,
* McsEngl.coffeescript-implementor@cptIt,
* McsEngl.cscompiler@cptIt,
* McsEngl.csimr@cptIt,
* McsEngl.lcpCs'compiler@cptIt,
* McsEngl.lcpCs'installing@cptIt,
* McsEngl.lcpCs'tool.COMPILER@cptIt,

_ADDRESS.WPG:
* https://github.com/jashkenas/coffee-script/wiki/%5BHowto%5D-Hacking-on-the-CoffeeScript-Compiler,

{time.2009}
On December 13, 2009, Jeremy Ashkenas made the first Git commit of CoffeeScript with the comment: "initial commit of the mystery language."[11] The compiler was written in Ruby.
[http://en.wikipedia.org/wiki/CoffeeScript]
===
CoffeeScript is self-hosting. This means that the CoffeeScript compiler is written in.... CoffeeScript. If that makes your head hurt, welcome to the world of compilers and language translators :)
[https://github.com/jashkenas/coffee-script/wiki/%5BHowto%5D-Hacking-on-the-CoffeeScript-Compiler]

cscompiler'building

name::
* McsEngl.cscompiler'building@cptIt,

> node bin/coffee -v
runs local compiler

> cake build:full:
on root directory.
runs and the tests.

changing the grammar:
1) cake build:full: (will return error)
2) cake build:parser:
3) cake build:full: (no errors)

changing ONE file and get errors:
1) on src dir: coffee -c file.coffee
2) replace the file.js and put on /lib/coffee-script

cscompiler.BROWSER

name::
* McsEngl.cscompiler.BROWSER@cptIt,
* McsEngl.lcpCs'browser-compiler@cptIt,
* McsEngl.lcpCs'compiler.browser@cptIt,
* McsEngl.lcpCs'core-compiler@cptIt,
* McsEngl.lcpCs'browser-compiler@cptIt,
* McsEngl.lcpCs'core-compiler@cptIt,

_DESCRIPTION:
* http://coffeescript.org/extras/coffee-script.js,
* http://jashkenas.github.com/coffee-script/extras/coffee-script.js,

_DESCRIPTION:
One of the easiest ways to initially play around with the library is to use it right inside the browser. Navigate to http://coffeescript.org and click on the Try CoffeeScript tab. The site uses a browser version of the CoffeeScript compiler, converting any CoffeeScript typed inside the left panel to JavaScript in the right panel.

You can also convert JavaScript back to CoffeeScript using the js2coffee project, especially useful when migrating JavaScript projects to CoffeeScript.

In fact, you can use the browser-based CoffeeScript compiler yourself, by including this script in a page, marking up any CoffeeScript script tags with the correct type.
<script src="http://jashkenas.github.com/coffee-script/extras/coffee-script.js" type="text/javascript" charset="utf-8"></script>
<script type="text/coffeescript">
# Some CoffeeScript
</script>
[http://arcturo.github.io/library/coffeescript/01_introduction.html]

cscompiler.nodeJS

name::
* McsEngl.cscompiler.nodeJS@cptIt,
* McsEngl.cfst'compiler.nodejs@cptIt,
* McsEngl.lcpCs'command-line-compiler@cptIt,
* McsEngl.lcpCs'compiler.nodejs@cptIt,
* McsEngl.lcpCs'executing@cptIt,
* McsEngl.lcpCs'nodejs-compiler@cptIt,

_INSTALLING:
npm install -g coffee-script

_UPDATE:
* run again: npm install -g coffee-script

_coffee:
Using coffee on the command-line allows you to compile a directory recursively and output all resulting JavaScript files to another directory while preserving the structure.
[https://github.com/jashkenas/coffee-script/wiki/%5BHowTo%5D-Compiling-and-Setting-Up-Build-Tools]
==== local-compiler:
node bin/coffee -v

_coffee_help:
Usage: coffee [options] path/to/script.coffee -- [args]

If called without options, `coffee` will run your script.

-b, --bare compile without a top-level function wrapper
-c, --compile compile to JavaScript and save as .js files
-e, --eval pass a string from the command line as input
-h, --help display this help message
-i, --interactive run an interactive CoffeeScript REPL
-j, --join concatenate the source CoffeeScript before compiling
-m, --map generate source map and save as .map files
-n, --nodes print out the parse tree that the parser produces
--nodejs pass options directly to the "node" binary
-o, --output set the output directory for compiled JavaScript
-p, --print print out the compiled JavaScript
-s, --stdio listen for and compile scripts over stdio
-l, --literate treat stdio as literate style coffee-script
-t, --tokens print out the tokens that the lexer/rewriter produce
-v, --version display the version number
-w, --watch watch scripts for changes and rerun commands

_coffee_compile:
-c, --compile compile to JavaScript and save as .js files
===
$ coffee --compile --output lib/ src/
The above command will compile all src/*.coffee files to lib/*.js.
===
The following command will compile all your .coffee files in a folder called coffeescripts to .js files in a parallel tree structure in the javascripts folder.
coffee -o javascripts/ -c coffeescripts/
Warning
The option -c means to compile and -o means the output folder. Note the ordering is output then compile. This is because if you switch the order it doesn’t work!

_coffee_join:
-j, --join concatenate the source CoffeeScript before compiling
===
Joining Files:
You can also compile all your .coffee files down to a single JavaScript file. This will reduce the number of HTTP request a browser has to make and improve performance. To do this use the -j option like so:

coffee -j javascripts/app.js -c coffeescripts/*.coffee

The * is a wildcard operator.
[http://blog.teamtreehouse.com/the-absolute-beginners-guide-to-coffeescript]

_coffee_eval:
-e, --eval pass a string from the command line as input
===
> coffee -e "console.log 2+3"
5
===
> coffee --print --bare --eval "f= ->55"
var f;

f = function() {
return 55;
};
===
> coffee -ep "f=(x,y)->x+y"
(function() {
var f;

f = function(x, y) {
return x + y;
};

}).call(this);

_coffee_output:
-o, --output set the output directory for compiled JavaScript
===
$ coffee --compile --output lib/ src/
The above command will compile all src/*.coffee files to lib/*.js.

cscompiler.REPL

name::
* McsEngl.cscompiler.REPL@cptIt,
* McsEngl.lcpCs'repl@cptIt,
* McsEngl.coffeescript'repl@cptIt,
* McsEngl.lcpCs'repl@cptIt,
* McsEngl.lcpCs'tool.repl@cptIt,

_DESCRIPTION:
Start the CoffeeScript REPL (Ctrl-D to exit, Ctrl-V for multi-line): coffee
then: coffee>

cscompiler'source

name::
* McsEngl.cscompiler'source@cptIt,

_FILE:
* browser.coffee  3.2kB
* cake.coffee  3.6kB
* coffee-script.coffee  10.8kB
* command.coffee  14.6kB
* grammar.coffee  25.1kB
* helpers.coffee  7.0kB
* index.coffee  111B
* lexer.coffee  32.7kB
* nodes.coffee  83.1kB
* optparse.coffee  4.1kB
* register.coffee  1.8kB
* repl.coffee  4.9kB
* rewriter.coffee  18.0kB
* scope.litcoffee  4.0kB
* sourcemap.litcoffee  6.2kB

csimr.coffee-script.coffee

name::
* McsEngl.csimr.coffee-script.coffee@cptIt,
* McsEngl.cscfs@cptIt,

_DESCRIPTION:
# CoffeeScript can be used both
# on the server, as a command-line compiler based on Node.js/V8,
# or to run CoffeeScript directly in the browser.
# This module contains the main entry functions for
# tokenizing, parsing, and compiling source CoffeeScript into JavaScript.
[\File1a\lcpCpt\src\coffee-script.coffee]

csimr.command.coffee

name::
* McsEngl.csimr.command.coffee@cptIt,
* McsEngl.cscmd@cptIt,

_DESCRIPTION:
# The `coffee` utility.
[\File1a\lcpCpt\src\command.coffee]

csimr.grammar.coffee

name::
* McsEngl.csimr.grammar.coffee@cptIt,
* McsEngl.csgmr@cptIt,
* McsEngl.csimr.gmr@cptIt,

csimr.gmr'Accesor, csgmr'Accessor:
# The general group of accessors into an object,
# by property, by prototype or by array index or slice.
===
_whl: SimpleAssignable#ql:csgmr'SimpleAssignable#,
===
_spc:
o '. Identifier', -> new Access $2
o '?. Identifier', -> new Access $2, 'soak'
o ':: Identifier', -> [LOC(1)(new Access new clsLiteral('prototype')), LOC(2)(new Access $2)]
o '?:: Identifier', -> [LOC(1)(new Access new clsLiteral('prototype'), 'soak'), LOC(2)(new Access $2)]
o '::', -> new Access new clsLiteral 'prototype'
o 'Index'

csimr.gmr'AlphaNumeric, csgmr'AlphaNumeric:
# Alphanumerics are separated from the other **clsLiteral** matchers because
# they can also serve as keys in object literals.
===
_gnc: Literal#ql:csgmr'Literal#, ObjAssignable#ql:csgmr'ObjAssignable#,
===
o 'NUMBER', -> new clsLiteral $1
o 'STRING', -> new clsLiteral $1

csimr.gmr'ArgList, csgmr'ArgList:
# The **ArgList** is both
# the list of objects passed into a function call,
# as well as the contents of an array literal
# (i.e. comma-separated expressions). Newlines work as well.
===
_whl: Arguments#ql:csgmr'arguments#, Array,
===
o 'Arg#ql:csgmr'Arg#', -> [$1]
o 'ArgList , Arg', -> $1.concat $3
o 'ArgList OptComma TERMINATOR Arg', -> $1.concat $4
o 'INDENT ArgList OptComma OUTDENT', -> $2
o 'ArgList OptComma INDENT ArgList OptComma OUTDENT', -> $1.concat $4
================================================
csimr.gmr'Arg, csgmr'Arg:
# Valid arguments are Blocks or Splats.
===
_whl: ArgList#ql:csgmr'arglist#,
===
o 'Expression'
o 'Splat#ql:csgmr'splat#'
o '...', -> new Expansion#ql:csnds'expansion#

csimr.gmr'Array, csgmr'Array:
# The array literal.
===
_gnc: ParamVar#ql:csgmr'ParamVar#, Assignable, ForValue,
===
_spc:
o '[ ]', -> new Arr []
o '[ ArgList#ql:csgmr'ArgList# OptComma ]', -> new Arr $2

csimr.gmr'Assign, csgmr'Assign:
# Assignment of a variable, property, or index to a value.
===
_gnc: Expression#ql:csgmr'expression#,
===
_spc:
o 'Assignable = Expression', -> new Assign $1, $3
o 'Assignable = TERMINATOR Expression', -> new Assign $1, $4
o 'Assignable = INDENT Expression OUTDENT', -> new Assign $1, $4

csimr.gmr'Assignable, csgmr'Assignable:
# Everything that can be assigned to.
===
_gnc: Value#ql:csgmr'value#,
===
_whl: Assign#ql:csgmr'Assign#,
===
_spc:
o 'SimpleAssignable#ql:csgmr'SimpleAssignable#'
o 'Array#ql:csgmr'Array#', -> new Value $1
o 'Object#ql:csgmr'object#', -> new Value $1
================================================
csimr.gmr'SimpleAssignable, csgmr'SimpleAssignable:
# Variables and properties that can be assigned to.
===
_gnc: Assignable#ql:csgmr'Assignable#,
===
_whl: exnClass, exnOperation,
===
o 'Identifier#ql:csgmr'Identifier#', -> new Value $1
o 'Value Accessor#ql:csgmr'Accessor#', -> $1.add $2
o 'Invocation#ql:csgmr'Invocation# Accessor', -> new Value $1, [].concat $2
o 'ThisProperty'

csimr.gmr'Block, csgmr'Block:
# An indented block of expressions. Note that the [cRewriter](rewriter.html)
# will convert some postfix forms into blocks for us, by adjusting the
# token stream.
===
_who: Catch#ql:csgmr'Catch#, Class, Code#ql:csgmr'code#, For, If, IfBlock#ql:csimr.gmr'If#, Loop, Switch, Try, When#ql:csimr.gmr'When#, While,
===
_prt:
o 'INDENT OUTDENT', -> new Block#ql:csnds'block#
o 'INDENT Body#ql:csgmr'Body# OUTDENT', -> $2

csimr.gmr'Class, csgmr'Class:
_gnc: Expression#ql:csgmr'expression#,
===
_spc:
o 'CLASS', -> new Class
o 'CLASS Block', -> new Class null, null, $2
o 'CLASS EXTENDS Expression', -> new Class null, $3
o 'CLASS EXTENDS Expression Block', -> new Class null, $3, $4
o 'CLASS SimpleAssignable', -> new Class $2
o 'CLASS SimpleAssignable Block', -> new Class $2, null, $3
o 'CLASS SimpleAssignable EXTENDS Expression', -> new Class $2, $4
o 'CLASS SimpleAssignable EXTENDS Expression Block', -> new Class $2, $4, $5

csimr.gmr'Code, csgmr'Code, csgmr'exnFunction:
# The **Code** node is the function literal.
# It's defined by an indented block of **Block** preceded
# by a function arrow, with an optional parameter-list.
===
_gnc: Expression#ql:csgmr'expression#,
===
_spc:
o 'PARAM_START ParamList#ql:csgmr'ParamList# PARAM_END FuncGlyph Block', -> new Code#ql:csnds'code# $2, $5, $4
o 'FuncGlyph Block', -> new Code [], $2, $1
================================================
csimr.gmr'ParamList, csgmr'ParamList:
# The list of parameters that a function accepts can be of any length.
ParamList: [
o '', -> []
o 'Param', -> [$1]
o 'ParamList , Param', -> $1.concat $3
o 'ParamList OptComma TERMINATOR Param', -> $1.concat $4
o 'ParamList OptComma INDENT ParamList OptComma OUTDENT', -> $1.concat $4
================================================
csimr.gmr'Param, csgmr'Param:
# A single parameter in a function definition can be ordinary, or a splat
# that hoovers up the remaining arguments.
o 'ParamVar#ql:csgmr'ParamVar#', -> new Param $1
o 'ParamVar ...', -> new Param $1, null, on
o 'ParamVar = Expression', -> new Param $1, $3
o '...', -> new Expansion
================================================
csimr.gmr'ParamVar, csgmr'ParamVar:
# Function Parameters
===
o 'Identifier#ql:csgmr'Identifier#'
o 'ThisProperty#ql:csgmr'ThisProperty#'
o 'Array'
o 'Object'
================================================
csimr.gmr'FuncGlyph, csgmr'FuncGlyph:
# CoffeeScript has two different symbols for functions.
# `->` is for ordinary functions, and
# `=>` is for functions bound to the current value of *this*.
_who: Code,
o '->', -> 'func'
o '=>', -> 'boundfunc'

csimr.gmr'Expression, csgmr'Expression:
===
_gnc: Line#ql:csgmr'line#,
===
_spc:
o 'Value#ql:csimr.gmr'Value#'
o 'Invocation#ql:csgmr'Invocation#'
o 'Code#ql:csgmr'code#'
o 'Operation#ql:csgmr'operation#'
o 'Assign#ql:csgmr'assign#'
o 'If#ql:csgmr'if#'
o 'Try#ql:csgmr'try#'
o 'While#ql:csgmr'while#'
o 'For#ql:csimr.gmr'for#'
o 'Switch#ql:csgmr'switch#'
o 'Class#ql:csgmr'class#'
o 'Throw#ql:csgmr'throw#'

csimr.gmr'For, csgmr'For:
_gnc: Expression#ql:csgmr'expression#,
===
_spc:
o 'Statement#ql:csimr.gmr'statement# ForBody', -> new For#ql:csimr.nds'for# $1, $2
o 'Expression#ql:csimr.gmr'expression# ForBody', -> new For $1, $2
o 'ForBody Block', -> new For $2, $1
================================================
csimr.gmr'ForBody, csgmr'ForBody:
o 'FOR Range', -> source: LOC(2) new Value($2)
o 'ForStart ForSource', -> $2.own = $1.own; $2.name = $1[0]; $2.index = $1[1]; $2
================================================
csimr.gmr'ForStart, csgmr'ForStart:
o 'FOR ForVariables', -> $2
o 'FOR OWN ForVariables', -> $3.own = yes; $3
================================================
csimr.gmr'ForVariables, csgmr'ForVariables:
# An array or range comprehension has variables for the current element
# and (optional) reference to the current index. Or, *key, value*, in the case
# of object comprehensions.
o 'ForValue', -> [$1]
o 'ForValue , ForValue', -> [$1, $3]
================================================
csimr.gmr'ForValue, csgmr'ForValue:
# An array of all accepted values for a variable inside the loop.
# This enables support for pattern matching.
o 'Identifier'
o 'ThisProperty'
o 'Array', -> new Value $1
o 'Object', -> new Value $1
================================================
csimr.gmr'ForSource:
# The source of a comprehension is an array or object with an optional guard
# clause. If it's an array comprehension, you can also choose to step through
# in fixed-size increments.
===
o 'FORIN Expression', -> source: $2
o 'FOROF Expression', -> source: $2, object: yes
o 'FORIN Expression WHEN Expression', -> source: $2, guard: $4
o 'FOROF Expression WHEN Expression', -> source: $2, guard: $4, object: yes
o 'FORIN Expression BY Expression', -> source: $2, step: $4
o 'FORIN Expression WHEN Expression BY Expression', -> source: $2, guard: $4, step: $6
o 'FORIN Expression BY Expression WHEN Expression', -> source: $2, step: $4, guard: $6

csimr.gmr'Switch, csgmr'Switch:
_gnc: Expression#ql:csgmr'expression#,
===
_prt:
o 'SWITCH Expression INDENT Whens OUTDENT', -> new Switch $2, $4
o 'SWITCH Expression INDENT Whens ELSE Block OUTDENT', -> new Switch $2, $4, $6
o 'SWITCH INDENT Whens OUTDENT', -> new Switch null, $3
o 'SWITCH INDENT Whens ELSE Block OUTDENT', -> new Switch null, $3, $5
================================================
csimr.gmr'Whens, csgmr'Whens:
o 'When'
o 'Whens When', -> $1.concat $2
===
===
csimr.gmr'When, csgmr'When:
# An individual **When** clause, with action.
When: [
o 'LEADING_WHEN SimpleArgs#ql:csgmr'SimpleArgs# Block', -> [[$2, $3]]
o 'LEADING_WHEN SimpleArgs Block TERMINATOR', -> [[$2, $3]]

=========================================================================

csimr.gmr'Identifier, csgmr'Identifier:
# A literal identifier, a variable name or property.
===
_gnc: ObjAssignable#ql:csgmr'ObjAssignable#, ParamVar, SimpleAssignable, ForValue,
===
_whl: Accessor, ThisProperty, Catch,
===
_spc:
o 'IDENTIFIER', -> new clsLiteral $1

csimr.gmr'If, csgmr'If:
# The full complement of *if* expressions, including postfix one-liner
# *if* and *unless*.
===
_gnc: Expression#ql:csgmr'expression#,
===
_spc:
o 'IfBlock'
o 'IfBlock ELSE Block', -> $1.addElse $3
o 'Statement POST_IF Expression', -> new If $3, LOC(1)(Block.wrap [$1]), type: $2, statement: true
o 'Expression POST_IF Expression', -> new If $3, LOC(1)(Block.wrap [$1]), type: $2, statement: true
================================================
csimr.grm'IfBlock, csgrm'IfBlock:
# The most basic form of *if* is a condition and an action. The following
# if-related rules are broken up along these lines in order to avoid
# ambiguity.
IfBlock: [
o 'IF Expression Block', -> new cIf $2, $3, type: $1
o 'IfBlock ELSE IF Expression Block', -> $1.addElse LOC(3,5) new cIf $4, $5, type: $3

csimr.gmr'Index, csgmr'Index:
# Indexing into an object or array using bracket notation.
===
_gnc:
===
o 'INDEX_START IndexValue INDEX_END', -> $2
o 'INDEX_SOAK Index', -> extend $2, soak : yes
================================================
csimr.gmr'IndexValue, csgmr'IndexValue:
===
_whl: Index,
===
o 'Expression', -> new Index $1
o 'Slice#ql:csgmr'Slice#', -> new Slice#ql:csnds'slice# $1
================================================
csimr.gmr'Slice, csgmr'Slice:
# Array slice literals.
===
_gnc: IndexValue,
===
o 'Expression RangeDots#ql:csgmr'RangeDots# Expression', -> new Range $1, $3, $2
o 'Expression RangeDots', -> new Range $1, null, $2
o 'RangeDots Expression', -> new Range null, $2, $1
o 'RangeDots', -> new Range null, null, $1

csimr.gmr'Invocation, csgmr'Invocation:
# Ordinary function invocation, or a chained series of calls.
===
_gnc: Expression#ql:csgmr'expression#,
===
_whl: SimpleAssignable#ql:csgmr'SimpleAssignable#,
===
_spc:
o 'exnValue OptFuncExist#ql:csgmr'OptFuncExist# Arguments#ql:csgmr'Arguments#', -> new Call $1, $3, $2
o 'Invocation OptFuncExist Arguments', -> new Call $1, $3, $2
o 'SUPER', -> new Call 'super', [new clsSplat new clsLiteral 'arguments']
o 'SUPER Arguments', -> new Call 'super', $2
================================================
csimr.gmr'OptFuncExist, csgmr'OptFuncExist:
# An optional existence check on a function.
===
_whl: exnInvocation
===
_spc:
o '', -> no
o 'FUNC_EXIST', -> yes
================================================
csimr.gmr'Arguments, csgmr'Arguments:
# The list of arguments to a function call.
===
_whl: exnInvocation#ql:csgmr'Invocation#,
===
o 'CALL_START CALL_END', -> []
o 'CALL_START ArgList#ql:csgmr'arglist# OptComma CALL_END', -> $2

csimr.gmr'Literal, csgmr'Literal:
# All of our immediate values. Generally these can be passed straight
# through and printed to JavaScript.
===
_gnc: Value#ql:csgmr'value#,
===
_spc:
o 'AlphaNumeric#ql:csgmr'AlphaNumeric#'
o 'JS', -> new clsLiteral#ql:csnds'literal# $1
o 'REGEX', -> new clsLiteral $1
o 'DEBUGGER', -> new clsLiteral $1
o 'UNDEFINED', -> new clsUndefined
o 'NULL', -> new clsNull
o 'BOOL', -> new clsBool $1

csimr.gmr'Loop, csgmr'Loop:
_gnc: While,
===
_spc:
o 'LOOP Block', -> new While(LOC(1) new clsLiteral 'true').addBody $2
o 'LOOP Expression', -> new While(LOC(1) new clsLiteral 'true').addBody LOC(2) Block.wrap [$2]

csimr.gmr'Object, csgmr'Object:
# In CoffeeScript, an object literal is simply a list of assignments.
===
_gnc: ParamVar#ql:csgmr'ParamVar#, Assignable#ql:csgmr'Assignable#, ForValue#ql:csgmr'ForValue#,
===
_whl: Catch#ql:csgmr'Catch#,
===
_prt:
o '{ AssignList#ql:csgmr'AssignList# OptComma#ql:csgmr'OptComma# }', -> new Obj $2, $1.generated
================================================
csimr.gmr'AssignList, csgmr'AssignList:
# Assignment of properties within an object literal can be separated by
# comma, as in JavaScript, or simply by newline.
o '', -> []
o 'AssignObj', -> [$1]
o 'AssignList , AssignObj', -> $1.concat $3
o 'AssignList OptComma TERMINATOR AssignObj', -> $1.concat $4
o 'AssignList OptComma INDENT AssignList OptComma OUTDENT', -> $1.concat $4
================================================
csimr.gmr'AssignObj, csgmr'AssignObj:
# Assignment when it happens within an object literal. The difference from
# the ordinary **Assign** is that these allow numbers and strings as keys.
===
o 'ObjAssignable', -> new Value $1
o 'ObjAssignable : Expression', -> new Assign LOC(1)(new Value($1)), $3, 'object'
o 'ObjAssignable :
INDENT Expression OUTDENT', -> new Assign LOC(1)(new Value($1)), $4, 'object'
o 'smtComment'
================================================
csimr.gmr'ObjAssignable, csgmr'ObjAssignable:
===
_whl: AssignObj#ql:csgmr'AssignObj#,
===
o 'Identifier#ql:csgmr'identifier#'
o 'AlphaNumeric'
o 'ThisProperty#ql:csgmr'thisproperty#'

csimr.gmr'Operation, csgmr'Operation:
# Arithmetic and logical operators, working on one or more operands.
# Here they are grouped by order of precedence. The actual precedence rules
# are defined at the bottom of the page. It would be shorter if we could
# combine most of these rules into a single generic
# *Operand OpSymbol Operand* -type rule, but in order to make
# the precedence binding possible, separate-rules are necessary.
===
_gnc: Expression#ql:csgmr'Expression#,
===
_spc:
o 'UNARY Expression', -> new Op $1 , $2
o 'UNARY_MATH Expression', -> new Op $1 , $2
o '- Expression', (-> new Op '-', $2), prec: 'UNARY_MATH'
o '+ Expression', (-> new Op '+', $2), prec: 'UNARY_MATH'

o '-- SimpleAssignable', -> new Op '--', $2
o '++ SimpleAssignable', -> new Op '++', $2
o 'SimpleAssignable --', -> new Op '--', $1, null, true
o 'SimpleAssignable ++', -> new Op '++', $1, null, true

# [The existential operator](http://jashkenas.github.com/coffee-script/#existence).
o 'Expression ?', -> new clsExistence $1

o 'Expression + Expression', -> new Op '+' , $1, $3
o 'Expression - Expression', -> new Op '-' , $1, $3

o 'Expression MATH Expression', -> new Op $2, $1, $3
o 'Expression ** Expression', -> new Op $2, $1, $3
o 'Expression SHIFT Expression', -> new Op $2, $1, $3
o 'Expression COMPARE Expression', -> new Op $2, $1, $3
o 'Expression LOGIC Expression', -> new Op $2, $1, $3
o 'Expression RELATION Expression', ->
if $2.charAt(0) is '!'
new Op($2[1..], $1, $3).invert()
else
new Op $2, $1, $3

o 'SimpleAssignable COMPOUND_ASSIGN
Expression', -> new Assign $1, $3, $2
o 'SimpleAssignable COMPOUND_ASSIGN
INDENT Expression OUTDENT', -> new Assign $1, $4, $2
o 'SimpleAssignable COMPOUND_ASSIGN TERMINATOR
Expression', -> new Assign $1, $4, $2
o 'SimpleAssignable EXTENDS Expression', -> new Extends $1, $3

csimr.gmr'OptComma, csgmr'OptComma:
# An optional, trailing comma.
===
_whl: ParamList, Object, AssignList, Arguments, Array, ArgList
===
o ''
o ','

csimr.gmr'Range, csgmr'Range:
===
_gnc: Value#ql:csgmr'value#,
===
_whl: ForBody#ql:csgmr'ForBody#,
===
_spc:
o '[ Expression#ql:csgmr'Expression# RangeDots Expression ]', -> new Range $2, $4, $3

csimr.gmr'RangeDots, csgmr'RangeDots:
# Inclusive and exclusive range dots.
===
_whl: Range#ql:csgmr'Range#, Slice,
===
_spc:
o '..', -> 'inclusive'
o '...', -> 'exclusive'

csimr.gmr'Root, csgmr'Root:
# The **Root** is the top-level node in the syntax tree.
# Since we parse bottom-up, all parsing must END here.
===
_spc:
o '', -> new Block
o 'Body#ql:csgmr'body#'
================================================
csimr.gmr'Body, csgmr'Body:
# Any list of statements and expressions, separated by line breaks or semicolons.
===
_gnc: Root#ql:csgmr'root#,
===
_who: Block#ql:csgmr'block#,
===
_spc:
o 'Line#ql:csgmr'line#', -> Block.wrap [$1]
o 'Body TERMINATOR Line', -> $1.push $3
o 'Body TERMINATOR'
================================================
csimr.gmr'Line, csgmr'Line:
# Block and statements, which make up a line in a body.
===
_gnc: Body#ql:csgmr'body#,
===
_whl: Body#ql:csgmr'body#,
===
_spc:
o 'Expression#ql:csgmr'expression#'
o 'Statement#ql:csgmr'statement#'

csimr.gmr'SimpleArgs, csgmr'SimpleArgs:
# Just simple, comma-separated, required arguments (no fancy syntax). We need
# this to be separate from the **ArgList** for use in **Switch** blocks, where
# having the newlines wouldn't make sense.
===
o 'Expression'
o 'SimpleArgs , Expression', -> [].concat $1, $3

csimr.gmr'Splat, csgmr'Splat:
# A splat that occurs outside of a parameter list.
===
_gnc: Arg,
===
_spc:
o 'Expression ...', -> new clsSplat $1
===

csimr.gmr'Statement, csgmr'Statement:
# Pure statements which cannot be expressions.
_gnc: Line#ql:csgmr'line#,
===
_spc:
o 'Return#ql:csimr.gmr'Return#'
o 'Comment#ql:csimr.gmr'Comment#'
o 'STATEMENT', -> new clsLiteral#ql:csnds'literal# $1

csimr.gmr'Comment, csgmr'Comment:
o 'HERECOMMENT', -> new Comment $1

csimr.gmr'Return, csgmr'Return:
o 'RETURN Expression#ql:csgmr'expression#', -> new Return $2
o 'RETURN', -> new Return

csimr.gmr'ThisProperty, csgmr'ThisProperty:
# A reference to a property on *this*.
===
_gnc: ObjAssignable#ql:csgmr'ObjAssignable#, ParamVar, SimpleAssignable#ql:csgmr'SimpleAssignable#, ForValue#ql:csgmr'ForValue#,
===
o '@ Identifier', -> new Value LOC(1)(new clsLiteral('this')), [LOC(2)(new Access($2))], 'this'

csimr.gmr'Throw, csgmr'Throw:
_gnc: Expression#ql:csgmr'expression#,
===
_prt:
o 'THROW Expression', -> new Throw#ql:csnds'throw# $2

csimr.gmr'Try, csgmr'Try:
_gnc: Expression#ql:csgmr'expression#,
===
_prt:
o 'TRY Block', -> new Try $2
o 'TRY Block Catch', -> new Try $2, $3[0], $3[1]
o 'TRY Block FINALLY Block', -> new Try $2, null, null, $4
o 'TRY Block Catch FINALLY Block', -> new Try $2, $3[0], $3[1], $5
================================================
csimr.gmr'Catch, csgmr'Catch:
# A catch clause names its error and runs a block of code.
===
_whl: exnTry#ql:csgmr'try#,
===
_prt:
o 'CATCH Identifier Block', -> [$2, $3]
o 'CATCH Object#ql:csgmr'object# Block', -> [LOC(2)(new Value($2)), $3]
o 'CATCH Block', -> [null, $2]

csimr.gmr'Value, csgmr'Value:
# The types of things that can be treated as values --
# assigned to, invoked as functions, indexed into, named as a class, etc.
===
_gnc: Expression#ql:csgmr'expression#,
===
_spc:
o 'Assignable#ql:csgmr'assignable#'
o 'Literal#ql:csgmr'literal#', -> new Value#ql:csimr.nds'value# $1
o 'Parenthetical#ql:csgmr'parenthetical#', -> new Value $1
o 'Range#ql:csgmr'range#', -> new Value $1
o 'This#ql:csgmr'This#'
================================================
csimr.gmr'Parenthetical, csgmr'Parenthetical:
===
_gnc: Value#ql:csgmr'value#,
===
o '( Body )', -> new clsParenths $2
o '( INDENT Body OUTDENT )', -> new clsParenths $3
================================================
csimr.gmr'This, csgmr'This:
# A reference to the *this* current object.
===
_gnc: Value#ql:csgmr'value#,
===
o 'THIS', -> new Value new clsLiteral 'this'
o '@', -> new Value new clsLiteral 'this'

csimr.gmr'While, csgmr'While:
_gnc: Expression#ql:csgmr'expression#,
===
_spc:
o 'WhileSource#ql:csgmr'WhileSource# Block', -> $1.addBody $2
o 'Statement WhileSource', -> $2.addBody LOC(1) Block.wrap([$1])
o 'Expression WhileSource', -> $2.addBody LOC(1) Block.wrap([$1])
o 'Loop', -> $1

csimr.gmr'WhileSource, csgmr'WhileSource:
# The condition portion of a while loop.
WhileSource: [
o 'WHILE Expression', -> new cWhile $2
o 'WHILE Expression WHEN Expression', -> new cWhile $2, guard: $4
o 'UNTIL Expression', -> new cWhile $2, invert: true
o 'UNTIL Expression WHEN Expression', -> new cWhile $2, invert: true, guard: $4

csimr.lexer.coffee

name::
* McsEngl.csimr.lexer.coffee@cptIt,
* McsEngl.cslxr@cptIt,

cslxr'TOKEN

name::
* McsEngl.cslxr'TOKEN@cptIt,
* McsEngl.cstkn@cptIt,

_DESCRIPTION:
[tknname, value, {first_line, first_column, last_line, last_column}]

cstkn.SYMBOL:
[= =]
[. .]
[[ []
[, ,]
[{ {]
[: :]
[: :]
[} }]
[] ]]

cstkn.BOOL:
[BOOL true]

cstkn.CALL_END:
[CALL_END )]

cstkn.CALL_START:
[CALL_START (]

cstkn.IDENTIFIER:
[IDENTIFIER a]
[IDENTIFIER b]
[IDENTIFIER bln]
[IDENTIFIER console]
[IDENTIFIER log]

cstkn.FORIN:
[FORIN in]

cstkn.NUMBER:
[NUMBER 1]
[NUMBER 2]

cstkn.STATEMENT:
[break, continue], [lexer155]

cstkn.STRING:

cstkn.TERMINATOR:
[TERMINATOR ;]
[TERMINATOR \n]
`;` and newlines are both treated as a `TERMINATOR`

csimr.nodes.coffee

name::
* McsEngl.csimr.nodes.coffee@cptIt,
* McsEngl.cs-ast-node@cptIt,
* McsEngl.cs-node-syntax@cptIt,
* McsEngl.cs-syntax-node@cptIt,
* McsEngl.cssnd@cptIt,

csimr.nds'Base, csnds'Base, csnds'cNode:
* statementNo

csimr.nds'Access extends Base, csnds'Access:
# A `.` access into a property of a value, or the `::` shorthand for
# an access into the object's prototype.

csimr.nds'Arr extends Base, csnds'Arr:
# An array literal.

csimr.nds'Assign extends Base, csnds'Assign:
# The **Assign** is used to assign a local variable to value, or to set the
# property of an object -- including within object literals.
===
> a=[1,2]
cAssign
cValue "a"
cValue
cArr
cValue "1"
cValue "2"
===
> o={p1:1,p2:2}
cAssign
cValue "o"
cValue
cObj
cAssign
cValue "p1"
cValue "1"
cAssign
cValue "p2"
cValue "2"

csimr.nds'Block extends Base, csnds'Block:
# The block is the list of expressions that forms the body of an
# indented block of code -- the implementation of a function,
# a clause in an `if`, `switch`, or `try`, and so on...
===
* statement: if one expression is statement.

csimr.nds'Bool extends Base, csnds'Bool:
constructor: (@val) ->
isAssignable: fcnNO
isComplex: fcnNO
compileNode: -> [@makeCode @val]

csimr.nds'Call extends Base, csnds'Call:
# Node for a function invocation. Takes care of converting `super()` calls into
# calls against the prototype's function of the same name.
===
> console.log 1
Call
Value "console"
Access "log"
Value "1"
===
> console.log fcn1 2, 3
cCall
cValue "console"
cAccess "log"
cCall
cValue "fcn1"
cValue "2"
cValue "3"

csimr.nds'Class extends Base, csnds'Class:

csimr.nds'Code extends Base, csnds'Code, csnds'cFunction:
# A function definition. This is the only node that creates a new cScope.
# When for the purposes of walking the contents of a function body, the Code
# has no *children* -- they're within the inner scope.
===
> fcn1 = (p1, p2) -> p1 + p2
cAssign
cValue "fcn1"
cCode
cParam "p1"
cParam "p2"
cBlock
cOp +
cValue "p1"
cValue "p2"
=== function in object
> o={a:1,b:(n)->n+1}
cAssign
cValue "b"
cCode
cParam "n"
cBlock
cOp +
cValue "n"
cValue "1"

csimr.nds'Comment extends Base, csnds'Comment:
===
_statement: yes
===

csimr.nds'Existence extends Base, csnds'Existance:
'Expression ?'
# Checks a variable for existence -- not *null* and not *undefined*. This is
# similar to `.nil?` in Ruby, and avoids having to consult a JavaScript truth
# table.

csimr.nds'Expansion extends Base, csnds'Expansion:
# Used to skip values inside an array destructuring (pattern matching) or
# parameter list.

csimr.nds'Extends extends Base, csnds'Extends:
o 'SimpleAssignable EXTENDS Expression', -> new Extends $1, $3
# Node to extend an object's prototype with an ancestor object.

csimr.nds'If extends Base, csnds'If:
# *If/else* statements. Acts as an expression by pushing down requested returns
# to the last line of each clause.
# Single-expression **Ifs** are compiled into conditional operators if possible,
# because ternaries are already proper expressions, and don't need conversion.
===
_statement: if its bodies is statment or toplevel
===
If
Value
Bool
Block
Value "1"
Block
Value "2"

csimr.nds'In extends Base, csnds'IN:

csimr.nds'Index extends Base, csnds'Index:

csimr.nds'Literal extends Base, csnds'Literal:
# Literals are static values that can be passed through directly into
# JavaScript without translation, such as: strings, numbers, `true`, `false`, `null`...
===
_statement: if value in ['break', 'continue', 'debugger']
===
_token: query#ql:csgmr'* literal#, query-class#ql:csgmr'* clsliteral#,
TknSTATEMENT, TknIDENTIFIER, TknNUMBER, TknSTRING

csimr.nds'Obj extends Base, csnds'Obj:
o '{ AssignList OptComma }', -> new cObj $2, $1.generated

csimr.nds'Op extends Base, csnds'Op:
# Simple Arithmetic and logical operations. Performs some conversion from
# CoffeeScript operations into their JavaScript equivalents.
===
_gmr: exnOperation#ql:csgmr'operation#

csimr.nds'Param extends Base, csnds'Param:
# the parameters of a function.
===
> fcn1 = (p1, p2) ->
> p1 + p2
cAssign
cValue "fcn1"
cCode
cParam "p1"
cParam "p2"
cBlock
cOp +
cValue "p1"
cValue "p2"

csimr.nds'Parenths extends Base, csnds'Pars:
# An extra set of parentheses, specified explicitly in the source.
# At one time we tried to clean up the results by detecting and
# removing redundant parentheses, but no longer --
# you can put in as many as you please.
#
# Parentheses are a good way to force any statement to become an expression.

csimr.nds'Range extends Base, csnds'Range:
# A range literal. Ranges can be used to extract portions (slices) of arrays,
# to specify a range for comprehensions, or as a value, to be expanded into the
# corresponding array of integers at runtime.

csimr.nds'Return extends Base, csnds'Return:
# A return statement from a function body.
o 'RETURN Expression', -> new Return $2
o 'RETURN', -> new Return
# A `return` is a *pureStatement* -- wrapping it in a closure wouldn't
# make sense.
===
_statement: yes
===

csimr.nds'Slice extends Base, csnds'Slice:
# Array slice literals.
# An array slice literal. Unlike JavaScript's `Array#slice`, the second parameter
# specifies the index of the end of the slice, just as the first parameter
# is the index of the beginning.

csimr.nds'Splat extends Base, csnds'Splat:
# A splat, either as a parameter to a function, an argument to a call,
# or as part of a destructuring assignment.

csimr.nds'Switch extends Base, csnds'Switch:
# A JavaScript *switch* statement.
# Converts into a returnable expression on-demand.
===
_statement: yes
===

csimr.nds'Throw extends Base, csnds'Throw:
# Simple node to throw an exception.
===
_statement: yes
===
o 'THROW Expression', -> new cThrow $2

csimr.nds'Try extends Base, csnds'Try:
===
_statement: yes
===

csimr.nds'Value extends Base, csnds'Value:
# A value, variable or literal or parenthesized, indexed or dotted into,
# or vanilla.
=== fcn
> console.log fcn1 2, 3
cCall
cValue "console"
cAccess "log"
cCall
cValue "fcn1"
cValue "2"
cValue "3"
=== obj
> o={a:1,b:2}
cAssign
cValue "o"
cValue
cObj
cAssign
cValue "a"
cValue "1"
cAssign
cValue "b"
cValue "2"

csimr.nds'While extends Base, csnds'While:
# A while loop, the only sort of low-level loop exposed by CoffeeScript. From
# it, all other loops can be manufactured. Useful in cases where you need more
# flexibility or more speed than a comprehension can provide.
===
_statement: yes
===
while num -= 1
"little monkeys, jumping on the bed."
While
Assign
Value "num"
Value "1"
Block
Value ""little monkeys, jumping on the bed.""

csimr.nds'For extends While, csnds'For:

csimr.nds'Code_fragment, csnds'Code_fragment:

csimr.parser.js

name::
* McsEngl.csimr.parser.js@cptIt,
* McsEngl.csparser@cptIt,

cssymbol (141 = 78 tnl + 63):
csimr.psr.symbols_: {
"$accept":0,
"$end":1
"Root":3,
"Body":4,
"Line":5,
"Expression":7,
"Statement":8,
"smtReturn":9,
"smtComment":10,
"exnValue":12,
"exnInvocation":13,
"exnCode":14,
"exnOperation":15,
"exnAssign":16,
"exnIf":17,
"exnTry":18,
"exnWhile":19,
"exnFor":20,
"exnSwitch":21,
"exnClass":22,
"exnThrow":23,
"Block":24,
"Identifier":27,
"AlphaNumeric":29,
"Literal":32,
"Assignable":39,
"AssignObj":41,
"ObjAssignable":42,
"ThisProperty":44,
"ParamList":48,
"FuncGlyph":50,
"OptComma":53,
"Param":55,
"ParamVar":56,
"Array":58,
"Object":59,
"Splat":60,
"SimpleAssignable":61,
"Accessor":62,
"Parenthetical":63,
"Range":64,
"This":65,
"Index":70,
"IndexValue":72,
"Slice":75,
"AssignList":77,
"OptFuncExist":81,
"Arguments":82,
"ArgList":87,
"RangeDots":92,
"Arg":94,
"SimpleArgs":95,
"Catch":97,
"WhileSource":103,
"Loop":107,
"ForBody":109,
"ForStart":111,
"ForSource":112,
"ForVariables":113,
"ForValue":115,
"Whens":120,
"When":122,
"IfBlock":124,


"error":2,
"TERMINATOR":6,
"STATEMENT":11,
"INDENT":25,
"OUTDENT":26,
"IDENTIFIER":28,
"NUMBER":30,
"STRING":31,
"JS":33,
"REGEX":34,
"DEBUGGER":35,
"UNDEFINED":36,
"NULL":37,
"BOOL":38,
"=":40,
":":43,
"RETURN":45,
"HERECOMMENT":46,
"PARAM_START":47,
"PARAM_END":49,
"->":51,
"=>":52,
",":54,
"...":57,
".":66,
"?.":67,
"::":68,
"?::":69,
"INDEX_START":71,
"INDEX_END":73,
"INDEX_SOAK":74,
"{":76,
"}":78,
"CLASS":79,
"EXTENDS":80,
"SUPER":83,
"FUNC_EXIST":84,
"CALL_START":85,
"CALL_END":86,
"THIS":88,
"@":89,
"[":90,
"]":91,
"..":93,
"TRY":96,
"FINALLY":98,
"CATCH":99,
"THROW":100,
"(":101,
")":102,
"WHILE":104,
"WHEN":105,
"UNTIL":106,
"LOOP":108,
"FOR":110,
"OWN":114,
"FORIN":116,
"FOROF":117,
"BY":118,
"SWITCH":119,
"ELSE":121,
"LEADING_WHEN":123,
"IF":125,
"POST_IF":126,
"UNARY":127,
"UNARY_MATH":128,
"-":129,
"+":130,
"--":131,
"++":132,
"?":133,
"MATH":134,
"**":135,
"SHIFT":136,
"COMPARE":137,
"LOGIC":138,
"RELATION":139,
"COMPOUND_ASSIGN":140,
}

csimr.psr.sbl.ordered:
"cssbl.$accept"      0,
"cssbl.$end"      1
"cssbl.("        101,
"cssbl.)"        102,
"cssbl.**"        135,
"cssbl.+"        130,
"cssbl.++"        132,
"cssbl.,"        54,
"cssbl.-"        129,
"cssbl.--"        131,
"cssbl.->"        51,
"cssbl.."        66,
"cssbl..."        93,
"cssbl...."        57,
"cssbl.:"        43,
"cssbl.::"        68,
"cssbl.="        40,
"cssbl.=>"        52,
"cssbl.?"        133,
"cssbl.?."        67,
"cssbl.?::"        69,
"cssbl.@"        89,
"cssbl.["        90,
"cssbl.]"        91,
"cssbl.{"        76,
"cssbl.}"        78,
"cssbl.Accessor"      62,
"cssbl.AlphaNumeric"    29,
"cssbl.Arg"        94,
"cssbl.ArgList"      87,
"cssbl.Arguments"      82,
"cssbl.Array"      58,
"cssbl.AssignList"      77,
"cssbl.AssignObj"      41,
"cssbl.Assignable"      39,
"cssbl.BOOL"      38,  ['TRUE', 'FALSE']
"cssbl.BY"        118,
"cssbl.Block"      24,
"cssbl.Body"      4,
"cssbl.CALL_END"    86,
"cssbl.CALL_START"    85,
"cssbl.CATCH"      99,
"cssbl.CLASS"      79,
"cssbl.COMPARE"      137,  ['==', '!=', '<', '>', '<=', '>=']
"cssbl.COMPOUND_ASSIGN"  140,  [ '-=', '+=', '/=', '*=', '%=', '||=', '&&=', '?=', '<<=', '>>=', '>>>=' '&=', '^=', '|=', '**=', '//=', '%%=']
"cssbl.Catch"      97,
"cssbl.DEBUGGER"    35,
"cssbl.ELSE"      121,
"cssbl.error"      2,
"cssbl.exnAssign"      16,
"cssbl.exnClass"      22,
"cssbl.exnCode"      14,
"cssbl.exnFor"      20,
"cssbl.exnIf"      17,
"cssbl.exnInvocation"    13,
"cssbl.exnOperation"    15,
"cssbl.exnSwitch"      21,
"cssbl.exnThrow"      23,
"cssbl.exnTry"      18,
"cssbl.exnValue"      12,
"cssbl.exnWhile"      19,
"cssbl.EXTENDS"      80,
"cssbl.Expression"      7,
"cssbl.FINALLY"      98,
"cssbl.FOR"      110,
"cssbl.FORIN"      116,
"cssbl.FOROF"      117,
"cssbl.FUNC_EXIST"    84,
"cssbl.ForBody"      109,
"cssbl.ForSource"      112,
"cssbl.ForStart"      111,
"cssbl.ForValue"      115,
"cssbl.ForVariables"    113,
"cssbl.FuncGlyph"      50,
"cssbl.HERECOMMENT"    46,
"cssbl.IDENTIFIER"    28,
"cssbl.IF"        125,
"cssbl.INDENT"      25,
"cssbl.INDEX_END"    73,
"cssbl.INDEX_SOAK"    74,
"cssbl.INDEX_START"    71,
"cssbl.Identifier"      27,
"cssbl.IfBlock"      124,
"cssbl.Index"      70,
"cssbl.IndexValue"      72,
"cssbl.JS"        33,
"cssbl.LEADING_WHEN"    123,
"cssbl.LOGIC"      138,  ['&&', '||', '&', '|', '^']
"cssbl.LOOP"      108,
"cssbl.Line"        5,
"cssbl.Literal"      32,
"cssbl.Loop"      107,
"cssbl.MATH"      134,  ['*', '/', '%', '//', '%%']
"cssbl.NULL"      37,
"cssbl.NUMBER"      30,
"cssbl.OUTDENT"      26,
"cssbl.OWN"      114,
"cssbl.ObjAssignable"    42,
"cssbl.Object"      59,
"cssbl.OptComma"      53,
"cssbl.OptFuncExist"    81,
"cssbl.PARAM_END"    49,
"cssbl.PARAM_START"    47,
"cssbl.POST_IF"      126,
"cssbl.Param"      55,
"cssbl.ParamList"      48,
"cssbl.ParamVar"      56,
"cssbl.Parenthetical"    63,
"cssbl.REGEX"      34,
"cssbl.RELATION"      139,  ['IN', 'OF', 'INSTANCEOF']
"cssbl.RETURN"      45,
"cssbl.Range"      64,
"cssbl.RangeDots"      92,
"cssbl.Root"      3,
"cssbl.SHIFT"      136,  ['<<', '>>', '>>>']
"cssbl.STATEMENT"    11,
"cssbl.smtComment"    10,
"cssbl.smtReturn"      9,
"cssbl.STRING"      31,
"cssbl.SUPER"      83,
"cssbl.SWITCH"      119,
"cssbl.SimpleArgs"      95,
"cssbl.SimpleAssignable"    61,
"cssbl.Slice"      75,
"cssbl.Splat"      60,
"cssbl.Statement"      8,
"cssbl.TERMINATOR"    6,
"cssbl.THIS"      88,
"cssbl.THROW"      100,
"cssbl.TRY"      96,
"cssbl.This"        65,
"cssbl.ThisProperty"    44,
"cssbl.UNARY"      127,
"cssbl.UNARY_MATH"    128,
"cssbl.UNDEFINED"    36,
"cssbl.UNTIL"      106,
"cssbl.WHEN"      105,
"cssbl.WHILE"      104,
"cssbl.When"      122,
"cssbl.Whens"      120,
"cssbl.WhileSource"    103,

csterminal (78):
csimr.psr.terminals_: {
2:"error",
6:"TERMINATOR",
11:"STATEMENT",
25:"INDENT",
26:"OUTDENT",
28:"IDENTIFIER",
30:"NUMBER",
31:"STRING",
33:"JS",
34:"REGEX",
35:"DEBUGGER",
36:"UNDEFINED",
37:"NULL",
38:"BOOL",
40:"=",
43:":",
45:"RETURN",
46:"HERECOMMENT",
47:"PARAM_START",
49:"PARAM_END",
51:"->",
52:"=>",
54:",",
57:"...",
66:".",
67:"?.",
68:"::",
69:"?::",
71:"INDEX_START",
73:"INDEX_END",
74:"INDEX_SOAK",
76:"{",
78:"}",
79:"CLASS",
80:"EXTENDS",
83:"SUPER",
84:"FUNC_EXIST",
85:"CALL_START",
86:"CALL_END",
88:"THIS",
89:"@",
90:"[",
91:"]",
93:"..",
96:"TRY",
98:"FINALLY",
99:"CATCH",
100:"THROW",
101:"(",
102:")",
104:"WHILE",
105:"WHEN",
106:"UNTIL",
108:"LOOP",
110:"FOR",
114:"OWN",
116:"FORIN",
117:"FOROF",
118:"BY",
119:"SWITCH",
121:"ELSE",
123:"LEADING_WHEN",
125:"IF",
126:"POST_IF",
127:"UNARY",
128:"UNARY_MATH",
129:"-",
130:"+",
131:"--",
132:"++",
133:"?",
134:"MATH",
135:"**",
136:"SHIFT",
137:"COMPARE",
138:"LOGIC",
139:"RELATION",
140:"COMPOUND_ASSIGN"
}

csimr.rewriter.coffee

name::
* McsEngl.csimr.rewriter.coffee@cptIt,
* McsEngl.csrwr@cptIt,

lcs.EVOLUTING {2009-}

name::
* McsEngl.lcs.EVOLUTING {2009-}@cptIt,
* McsEngl.lcpCs'evoluting@cptIt,
* McsEngl.lcpCs'version@cptIt,

{time.2015}:
1.10.0 — SEPTEMBER 3, 2015
[http://coffeescript.org/#changelog]

{time.2014}:
* 1.7.1 – January 29, 2014

{time.2013}:
1.6.3 – JUNE 2, 2013
Stable release  1.6.3 (June 2, 2013; 2 months ago)

{time.2009}:
0.1.0 – DEC 24, 2009
Initial CoffeeScript release.
[http://coffeescript.org/#resources]
===
On December 13, 2009, Jeremy Ashkenas made the first Git commit of CoffeeScript with the comment: "initial commit of the mystery language."[11] The compiler was written in Ruby.
[http://en.wikipedia.org/wiki/CoffeeScript]

lcp.instance.GO {2009}

_CREATED: {2009-11-11}

name::
* McsEngl.conceptItsoft1015,
* McsEngl.golang,
* McsEngl.go-programing-language,
* McsEngl.lcp.go,
* McsEngl.go-lag@cptItsoft1015,
* McsEngl.pl.go@cptIt1015, {2014-01-29}
* McsEngl.programing-language.go@cptIt1015,
* McsEngl.golg, {2016-03-19}

golg'DEFINITION

a systems programming language
expressive, concurrent, garbage-collected
[http://golang.org/] 2009-11-11

Go, also called golang, is a programming language initially developed at Google[6] in 2007 by Robert Griesemer, Rob Pike, and Ken Thompson.[2] It is a statically-typed language with syntax loosely derived from that of C, adding automatic memory management, type safety, some dynamic-typing capabilities, additional built-in types such as variable-length arrays and key-value maps, and a large standard library. Beyond that broad category, Go is defined by:

A syntax and environment adopting patterns more common in dynamic languages:[7]
Concise variable declaration and initialization through type inference (x := 0 not int x = 0;)
Fast compilation times[8]
Remote package management (go get)[9] and online package documentation[10]
Distinctive approaches to particular problems
Built-in concurrency primitives: light-weight processes (goroutines), channels, and the select statement
An interface system in place of virtual inheritance, and type embedding instead of non-virtual inheritance
A toolchain that, by default, produces statically linked native binaries without external dependencies
A desire to keep the language specification simple enough to hold in a programmer's head,[11][12] in part by omitting features common to similar languages:
No type inheritance
No method or operator overloading
No circular dependencies among packages
No pointer arithmetic
No assertions
No generic programming
The language was announced in November 2009 and is now used in some of Google's production systems.[13] Go's "gc" compiler targets the Linux, Mac OS X, FreeBSD, OpenBSD, Plan 9, and Microsoft Windows operating systems and the i386, amd64, and ARM processor architectures.[14] A second compiler, gccgo, is a GCC frontend.[15][16]
Paradigm(s)  compiled, concurrent, imperative, structured
Appeared in  2009
Designed by  Robert Griesemer
Rob Pike
Ken Thompson
Developer  Google Inc.
Stable release  version 1.2[1] (1 December 2013; 56 days ago)
Typing discipline  strong, static, inferred
Major implementations  gc (8g, 6g, 5g), gccgo
Influenced by  C, Limbo, Modula, Newsqueak, Oberon, Pascal,[2] Python
Implementation language  C, Go
OS  Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, MS Windows, Plan 9[3]
License  BSD-style[4] + Patent grant[5]
Usual filename extensions  .go
Website  golang.org
[http://en.wikipedia.org/wiki/Go_(programming_language)] 2014-01-29

golg'GENERIC

_GENERIC:
* OBJECT-ORIENTED-LANGUAGE#cptIt220#
* programming-language#cptItsoft248#

golg'algorithm

name::
* McsEngl.golg'algorithm@cptIt,
* McsEngl.goalgo@cptIt,

_GENERIC:
* programing-algorithm#ql:algo@cptCore564#

golg'archetype

name::
* McsEngl.golg'archetype@cptIt,

golg'code.API

name::
* McsEngl.golg'code.API@cptIt,

golg'code.program

name::
* McsEngl.golg'code.program@cptIt,
* McsEngl.gopgm@cptIt,

gopgm.HELLO-WORLD

name::
* McsEngl.gopgm.HELLO-WORLD@cptIt,

_CODE.GO:
// You can edit this code!
// Click here and start typing.
package main

import "fmt"

func main() {
 fmt.Println("Hello, ??")
}

golg'DEVELOPMENT-PROGRAM (TOOL)#cptIt430#

name::
* McsEngl.golg'DEVELOPMENT-PROGRAM (TOOL)@cptIt,

golg'human

name::
* McsEngl.golg'human@cptIt,

hmn.Griesemer.Robert:
* go designer.

hmn.Pike.Rob:
* go designer.

hmn.Thompson.Ken:
* go designer.

golg'price#cptEconomy541.44#

name::
* McsEngl.golg'price@cptIt,

open source

golg'security

name::
* McsEngl.golg'security@cptIt,

golg'ResourceInfHmnn#cptResource843#

name::
* McsEngl.golg'ResourceInfHmnn@cptIt,

_ADDRESS.WPG:
* http://golang.org//

golg'documentation

name::
* McsEngl.golg'documentation@cptIt,

_ADDRESS.WPG:
* https://golang.org/doc//

golg'speed

name::
* McsEngl.golg'speed@cptIt,

Go compilers produce fast code fast. Typical builds take a fraction of a second yet the resulting programs run nearly as quickly as comparable C or C++ code.
[http://golang.org]

golg.EVOLUTING#cptCore546.171#

name::
* McsEngl.golg.EVOLUTING@cptIt,

{time.2009-11-10}:
=== RELEASE
Google on Tuesday [2009-11-10] released a new open source programming language called Go that's optimized for applications designed for massive scalability and multi-processor systems.
[http://www.informationweek.com/shared/printableArticle.jhtml;jsessionid=ERGO5A1GBHU4PQE1GHPCKHWATMY32JVN?articleID=221601138] 2009-11-11

{time.2007}:
Go began in 2007 as a group 20% project -- Google allows its workers to spend 20% of their time pursuing projects outside of their job responsibilities. In addition to Pike, contributors include Google engineers Robert Griesemer, Ken Thompson, Ian Taylor, and Russ Cox.
[http://www.informationweek.com/shared/printableArticle.jhtml;jsessionid=ERGO5A1GBHU4PQE1GHPCKHWATMY32JVN?articleID=221601138] 2009-11-11

golg.version

name::
* McsEngl.golg.version@cptIt,

{time.2016-02-17}:
=== version 1.6
The latest Go release, version 1.6, arrives six months after 1.5. Most of its changes are in the implementation of the language, runtime, and libraries. There are no changes to the language specification. As always, the release maintains the Go 1 promise of compatibility. We expect almost all Go programs to continue to compile and run as before.
The release adds new ports to Linux on 64-bit MIPS and Android on 32-bit x86; defined and enforced rules for sharing Go pointers with C; transparent, automatic support for HTTP/2; and a new mechanism for template reuse.
[https://golang.org/doc/go1.6]

{time.2015.08}:
=== Go 1.5 (August 2015)

{time.2014.12}:
=== Go 1.4 (December 2014)

{time.2014.06}:
=== Go 1.3 (June 2014)

{time.2013.12}:
=== Go 1.2 (December 2013)

{time.2013.05}:
=== Go 1.1 (May 2013)

{time.2012.03}:
=== Go 1 (March 2012)

lcp.instance.CLOJURE {2007}

_CREATED: {2014-01-26}

name::
* McsEngl.lcp.instance.CLOJURE {2007}@cptIt,
* McsEngl.clojure@cptIt,
* McsEngl.clojure.pl@cptIt,
* McsEngl.pgmlng.clojure@cptIt,
* McsEngl.pl.clojure@cptIt,

_DESCRIPTION:
Clojure (pronounced like "closure"[3]) is a dialect of the Lisp programming language created by Rich Hickey. Clojure is a functional general-purpose language, and runs on the Java Virtual Machine, Common Language Runtime, and JavaScript engines. Like other Lisps, Clojure treats code as data and has a sophisticated macro system.
Clojure's focus on programming with immutable values and explicit progression-of-time constructs are intended to facilitate the development of more robust programs, particularly multithreaded ones.
[http://en.wikipedia.org/wiki/Clojure]

clojure'code.ATOM

name::
* McsEngl.clojure'code.ATOM@cptIt,
* McsEngl.clojure'atom@cptIt,

_GENERIC:
* clojure-expression##

_DESCRIPTION:
Atoms are like the primitive types in other languages.
[http://moxleystratton.com/clojure/clojure-tutorial-for-the-non-lisp-programmer]

clojure'atom.BOOLEAN

name::
* McsEngl.clojure'atom.BOOLEAN@cptIt,
* McsEngl.clojure'boolean@cptIt,

_DESCRIPTION:
Here’s another atom:
user=> true
true
Clojure supports boolean TRUE and FALSE values, represented as true and false respectively.
[http://moxleystratton.com/clojure/clojure-tutorial-for-the-non-lisp-programmer]

clojure'atom.KEYWORD

name::
* McsEngl.clojure'atom.KEYWORD@cptIt,
* McsEngl.clojure'keyword@cptIt,

_DESCRIPTION:
Keywords are like symbols, except that they do not bind to an arbitrary value. They always bind to themselves. Keywords always start with a colon (“`:“`). Here are some keywords:

user=> :a
:a
user=> :_123
:_123
user=> :KEY
:KEY
[http://moxleystratton.com/clojure/clojure-tutorial-for-the-non-lisp-programmer]

clojure'atom.NIL

name::
* McsEngl.clojure'atom.NIL@cptIt,
* McsEngl.clojure'nil@cptIt,

_DESCRIPTION:
Here is another important atom:
user=> nil
nil
This is Clojure’s name for no-value, or null. It resolves to Java’s null value.
[http://moxleystratton.com/clojure/clojure-tutorial-for-the-non-lisp-programmer]

clojure'atom.NUMBER

name::
* McsEngl.clojure'atom.NUMBER@cptIt,
* McsEngl.clojure'number@cptIt,

_DESCRIPTION:
user=> 5
5
The number 5 is evaluated and the result is displayed.
[http://moxleystratton.com/clojure/clojure-tutorial-for-the-non-lisp-programmer]

clojure'atom.STRING

name::
* McsEngl.clojure'atom.STRING@cptIt,
* McsEngl.clojure'string@cptIt,

_DESCRIPTION:
Here is a Clojure string:
user=> "Hello, world!"
"Hello, world!"
Clojure strings follow the same rules as Java strings, so for instance, "\t" represents the ASCII TAB character. The Java API is the primary way to make calculations on a string.
[http://moxleystratton.com/clojure/clojure-tutorial-for-the-non-lisp-programmer]

clojure'atom.SYMBOL

name::
* McsEngl.clojure'atom.SYMBOL@cptIt,
* McsEngl.clojure'symbol@cptIt,

_DESCRIPTION:
Symbols are stand-in names for values. They’re sort of like what you would call a constant in other languages. Clojure doesn’t have variables. And unlike other languages, Clojure makes a distinction between a symbol and its value.

When a symbol is evaluated, its value is returned:
user=> *file*
"NO_SOURCE_PATH"
user=> *compile-path*
"classes"
user=> *clojure-version*
{:major 1, :minor 3, :incremental 0, :qualifier nil}
user=> *command-line-args*
nil
user=> +
#<core$_PLUS_ clojure.core$_PLUS_@6d581e80>
The above shows some of Clojure’s built-in symbols. By convention, built-in symbols begin and end with ‘*’ if they bind to data. The last symbol shown “+” is a built-in function.
[http://moxleystratton.com/clojure/clojure-tutorial-for-the-non-lisp-programmer]

clojure'code.EXPRESSION

name::
* McsEngl.clojure'code.EXPRESSION@cptIt,
* McsEngl.clojure'expression@cptIt,

_SPECIFIC:
* atom##
* list##
===
There are two categories of Clojure expressions, atoms and lists.
[http://moxleystratton.com/clojure/clojure-tutorial-for-the-non-lisp-programmer]

clojure'code.FUNCTION

name::
* McsEngl.clojure'code.FUNCTION@cptIt,
* McsEngl.clojure'function@cptIt,

_DESCRIPTION:
Functions are just a kind of object that can be called.
[http://moxleystratton.com/clojure/clojure-tutorial-for-the-non-lisp-programmer]
===
A Quick Comparison

In C-like languages, a function call might look something like this:

do_something_with(value1, value2)
In Clojure, the same function call would look like this:

(do-something-with value1 value2)
Here, Clojure’s syntax differs in these ways:

The opening parenthesis is to the left of the function name.
There are no commas delimiting the function parameters.
By convention, words in a function name are separated by dashes.
There’s not a huge difference.

Here’s how adding two values might look in a C-like language:

value1 + value2
And here’s how it would look in Clojure:

(+ value1 value2)
In C, the plus operator goes in between the two operands. In Clojure, the operator is always first, and there can be any number of operands. In this way, there is no syntactic difference between operators and function calls. They are the same. This is a thematic difference between Clojure and non-Lisp languages: Clojure is more simple.
[http://moxleystratton.com/clojure/clojure-tutorial-for-the-non-lisp-programmer]

clojure'fcn'name-of-specific

name::
* McsEngl.clojure'fcn'name-of-specific@cptIt,

_DESCRIPTION:
Every function has a fully-qualified name. For example, a function named “my-func” defined in your project’s my-proj/src/my_proj/core.clj file would have a fully-qualified name of “my-proj.core/my-func”. The part before the slash (“my-proj.core”) is the namespace of the function.

If you call my-func from somewhere within that core.clj file, you can just call it by its simple unqualified name (“my-func”); you don’t have to fully-qualify it. But if you want to call my-func from code in some other file, you have to somehow tell Clojure that you’re talking about the my-proj.core/my-func function. (We’ll get to details on how to do that later, in the chapter on managing and using libraries.)

The only exception to that rule is: you don’t need to fully-qualify Clojure’s built-in function names in order to call them. Although their namespace is clojure.core, they’re always available by their short names. For example, you can always call (println "hi") instead of (clojure.core/println "hi").
[http://www.unexpected-vortices.com/clojure/brief-beginners-guide/the-language.html]

clojure'fcn'doing.CREATING

name::
* McsEngl.clojure'fcn'doing.CREATING@cptIt,

_DESCRIPTION:
The defn macro defines a function. Its arguments are the function name, an optional documentation string (displayed by the doc macro), the parameter list (specified with a vector that can be empty) and the function body. The result of the last expression in the body is returned. Every function returns a value, but it may be nil.
[http://java.ociweb.com/mark/clojure/article.html#DefiningFunctions]

* clojure'defn:
DEFN
Functions can be created using defn:

user=> (defn election-year? [year]
(zero? (rem year 4)))
#'user/election-year?
user=> (election-year? 2007)
false
user=> (election-year? 2008)
true
user=>
Functions are just a kind of object that can be called.

The first argument to a defn is the function’s name, which becomes a symbol bound to the function. The second argument is the function’s argument list. Argument lists are always represented by a vector. The remaining arguments of defn can be one or more expressions. The result of the last expression is used as the function’s return value.
[http://moxleystratton.com/clojure/clojure-tutorial-for-the-non-lisp-programmer]

clojure'fcn'doing.DOCUMENTING

name::
* McsEngl.clojure'fcn'doing.DOCUMENTING@cptIt,

_DESCRIPTION:
DOCUMENTING A FUNCTION
There are multiple ways to add documentation to a function. Here is the easiest:

user=> (defn plus-one
"Returns a number one greater than x"
[x]
(+ x 1))
#'user/plus-one
user=> (doc plus-one)
-------------------------
user/plus-one
([x])
Returns a number one greater than x
nil
Here is another way:

user=> (defn plus-one
{:doc "Returns a number one greater than x"}
[x]
(+ x 1))
#'user/plus-one
user=> (doc plus-one)
-------------------------
user/plus-one
([x])
Returns a number one greater than x
nil
[http://moxleystratton.com/clojure/clojure-tutorial-for-the-non-lisp-programmer]

SPECIFIC

clojure'fcn.ANONYMOUS

name::
* McsEngl.clojure'fcn.ANONYMOUS@cptIt,

_DESCRIPTION:
* clojure.fn:
USING FN
Anonymous functions can be created using fn:

user=> (fn [x] (+ x 1))
user.eval__2384$fn__2386@c4b579
user=> ((fn [x] (+ x 1)) 9)
10
Since functions are just objects, they can be bound to a symbol (assigned to a variable):

user=> (def plus-one
(fn [x] (+ x 1)))
#'user/plus-one
user=> (plus-one 9)
10
The defn form is just a macro that turns its contents into a def + fn combination.
[http://moxleystratton.com/clojure/clojure-tutorial-for-the-non-lisp-programmer]

clojure'code.LIBRARY

name::
* McsEngl.clojure'code.LIBRARY@cptIt,

_DESCRIPTION:
Clojure programs typically rely on external libraries in order to run. If you’re writing such a Clojure program, your users would of course need to have these libraries available in order to run your program.

Clojure libraries may make use of and rely on other libraries. If you’re writing such a Clojure library, other programmers who would like to use your library would need some way to install it as well as install any other libs that yours depends upon.

The way these issues are handled with Clojure is:

A Clojure application is typically distributed as a jar file which includes all of the app’s dependencies, including the Clojure jar itself.

A Clojure library is distributed by itself as a jar file. In practice, libraries are available at and automatically fetched from Clojars or Maven Central (or some other repository) by the Leiningen tool (see below), which also recursively fetches any dependencies.
[http://www.unexpected-vortices.com/clojure/brief-beginners-guide/libs-management-and-use.html]

clojure'library'repository

name::
* McsEngl.clojure'library'repository@cptIt,

_DESCRIPTION:
There are two main repositories for Clojure libraries: Clojure Contrib, and Clojars. We’ll look at Clojure Contrib.
[http://moxleystratton.com/clojure/clojure-tutorial-for-the-non-lisp-programmer]

clojure'code.LIST

name::
* McsEngl.clojure'code.LIST@cptIt,
* McsEngl.clojure'list@cptIt,

_GENERIC:
* clojure-expression#ql:clojure'expression#

_DESCRIPTION:
Lists are comprised of an opening and closing parenthesis, and zero or more elements. Each element is separated by whitespace or commas.
Lists can be both a data structure and a functional call form. When used as a function call, the first element of the lists is a function. Any remaining elements in the list are the function’s arguments.
...
Although the list can be used to perform operations, it can also be used to represent data. There is an important consequence of code and data sharing the same syntax: code can be manipulated as if it were data because it is data.
[http://moxleystratton.com/clojure/clojure-tutorial-for-the-non-lisp-programmer]

SPECIFIC

* closure'list.specific,

_SPECIFIC:

closure'list.DATA

name::
* McsEngl.closure'list.DATA@cptIt,
* McsEngl.closure'data-list@cptIt,

_DESCRIPTION:
One way to use lists simply as data is to use Clojure’s built-in operation, list:

user=> (list 1 2 3)
(1 2 3)
user=> (list a b c)
(a b c)
user=> (list "one" "two" "three")
("one" "two" "three")
List items can be atoms, other lists, or other data structures that are part of Clojure.

user=> (list :foo (list 1 2 3) [4 5 6])
(:foo (1 2 3) [4 5 6])
Clojure also has a short-cut syntax for creating a list as data. Just prepend the list with a single-quote character:

user=> '(1 2 3)
(1 2 3)
Creating a list this way has a slightly different effect. The list items are left unevaluated. They can be undefined, and Clojure won’t complain.
[http://moxleystratton.com/clojure/clojure-tutorial-for-the-non-lisp-programmer]

closure'list.FORM

name::
* McsEngl.closure'list.FORM@cptIt,
* McsEngl.closure'form@cptIt,

_DESCRIPTION:
When a list is used to perform an operation, it is called a form. The function element of the form is referred to as the operator. Strictly, it isn’t always a function. There are three kinds of forms: functions, macros, and special forms.
[http://moxleystratton.com/clojure/clojure-tutorial-for-the-non-lisp-programmer]

closure'form.DOC

name::
* McsEngl.closure'form.DOC@cptIt,
* McsEngl.closure'doc@cptIt,

_DESCRIPTION:
THE DOC FORM
Nearly all the forms in Clojure have built-in documentation. To quickly find out about a form, pass the form’s name to the doc form:

user=> (doc first)
-------------------------
clojure/first
([coll])
Returns the first item in the collection. Calls seq on its
argument. If coll is nil, returns nil.
nil
[http://moxleystratton.com/clojure/clojure-tutorial-for-the-non-lisp-programmer]

clojure'code.MACRO

name::
* McsEngl.clojure'code.MACRO@cptIt,

clojure'code.MAP

name::
* McsEngl.clojure'code.MAP@cptIt,

_DESCRIPTION:
Maps and Sets

In addition to lists as a data type, Clojure provides syntax for defining maps and sets.

Maps define a set of unique key-value pairs:

user=> {"a" 1, "b" 2, "c" 3}
{"a" 1, "b" 2, "c" 3}
The map above maps the string "a" to the number 1, "b" to the number 2, and "c" to the number 3. The commas between each pair are optional, to enhance readability of the code. Clojure treats the commas nearly the same as whitespace. You can put commas anywhere between elements of an expression:

user=> {"a" 1 "b" 2 "c" 3}
{"a" 1, "b" 2, "c" 3}
user=> {"a", 1, "b", 2, "c", 3}
{"a" 1, "b" 2, "c" 3}
user=> {"a" 1 ,"b" 2 ,"c" 3}
{"a" 1, "b" 2, "c" 3}
Notice that Clojure REPL adds commas to the formatted return value.

Once a map is defined, its values can be looked up from key values using the get form:

user=> (get {"a" 1, "b" 2, "c" 3} "a")
1
user=> (get {"a" 1, "b" 2, "c" 3} "b")
2
user=> (get {"a" 1, "b" 2, "c" 3} "c")
3
user=> (get {"a" 1, "b" 2, "c" 3} "d")
nil
However, there’s a shortcut for this:

user=> ({"a" 1, "b" 2, "c" 3} "a")
1
user=> ({"a" 1, "b" 2, "c" 3} "b")
2
user=> ({"a" 1, "b" 2, "c" 3} "c")
3
user=> ({"a" 1, "b" 2, "c" 3} "d")
nil
Similar to Vectors and lists, Maps can be used as functions of their keys.

There is yet a third way to get a value from a key:

user=> (:a {:a 1, :b 2, :c 3})
1
user=> (:b {:a 1, :b 2, :c 3})
2
user=> (:c {:a 1, :b 2, :c 3})
3
user=> (:d {:a 1, :b 2, :c 3})
nil
It’s important to get familiar with the last two usages, as they are commonly used in Clojure programs.
[http://moxleystratton.com/clojure/clojure-tutorial-for-the-non-lisp-programmer]

clojure'code.VARIABLE

name::
* McsEngl.clojure'code.VARIABLE@cptIt,
* McsEngl.clojure'variable@cptIt,

_DESCRIPTION:
DEF
To bind a symbol to a value, use the def form:

user=> (def x 5)
#'user/x
user=> x
5
user=> (+ 5 x)
10
user=> (def my-list '(1 2 3))
#'user/my-list
user=> my-list
(1 2 3)
user=> (last my-list)
3
There a a few things going on when a variable is created. What gets returned from def is a var, which is a an object that holds a value, such as 5. Also, a symbol is created, and that symbol is bound to the var.
[http://moxleystratton.com/clojure/clojure-tutorial-for-the-non-lisp-programmer]

clojure'code.VECTOR

name::
* McsEngl.clojure'code.VECTOR@cptIt,
* McsEngl.clojure'vector@cptIt,

_GENERIC:
* data##

_DESCRIPTION:
The vector is another data structure, similar to a list. Vectors are zero-based arrays. They can contain any value, and any mix of value types, just like lists. Here are a few examples:

user=> [1 2 3]
[1 2 3]
user=> [:a 0 "hello"]
[:a 0 "hello"]
user=> []
[]
The nice thing about vectors is you don’t have to do anything special to use them as data as you do with lists.

Other languages give you a handy syntax for getting an array’s element by its index. So, how is this accomplished with Clojure’s vectors? Perform an operation:

user=> ([7 8 9] 2)
9
Here, we fetch the value at index 2, which is 9. The vector itself is the operator of the form. This may seem a little weird at first, but eventually it makes a lot of sense. Its argument is 2. The general form for this operation is (vector index). Compare this with JavaScript, which is similar:

[7, 8, 9][2]
You can use the same operation on vectors as we did earlier with lists:

user=> (first [7 8 9])
7
user=> (last [7 8 9])
9
user=> (rest [7 8 9])
(8 9)
That last one was a bit unexpected. It didn’t return a vector. It looks like a list instead.
[http://moxleystratton.com/clojure/clojure-tutorial-for-the-non-lisp-programmer]

clojure'doing.RUNNING

name::
* McsEngl.clojure'doing.RUNNING@cptIt,

Running
How do I run Clojure code in a file?
java -cp /path/to/the/clojure.jar clojure.main /path/to/your/code.clj
How do I start a Clojure REPL (console)?
java -cp /path/to/the/clojure.jar clojure.main
[http://dev.clojure.org/display/doc/FAQ]

clojure'relation-to-java

name::
* McsEngl.clojure'relation-to-java@cptIt,

_DESCRIPTION:
A particular strength of Clojure is how easily it allows you to use Java. Although you don’t need to know Java to use Clojure, it helps, because whenever you need a library which Clojure doesn’t have, you can easily enough use the Java solution right from your Clojure code.

A terminology note: Java has “arrays” (a fixed-size, sequential, indexable, mutable data structure). When you hear “array”, it’s the Java kind. The Clojure indexable data structure is called “vector”.
[http://www.unexpected-vortices.com/clojure/brief-beginners-guide/the-language.html]

clojure'resource

name::
* McsEngl.clojure'resource@cptIt,

_ADDRESS.WPG:
* http://clojure.org//
* http://clojure-doc.org//
* http://clojuredocs.org/quickref/Clojure%20Core,
===
* try clojure: http://tryclj.com/
=== LIBRARY
* http://clojars.org/repo//
=== TUTORIAL:
* http://moxleystratton.com/clojure/clojure-tutorial-for-the-non-lisp-programmer,

clojure'tool

name::
* McsEngl.clojure'tool@cptIt,

clojure'tool.clooj-IDE

name::
* McsEngl.clojure'tool.clooj-IDE@cptIt,

_DESCRIPTION:
A fast and easy way to get started with Clojure is to download and run Clooj. Clooj is an Integrated Development Environment for Clojure.
* firefox https://github.com/arthuredelstein/clooj#readme,
[http://moxleystratton.com/clojure/clojure-tutorial-for-the-non-lisp-programmer]

clojure'tool.LEININGEN

name::
* McsEngl.clojure'tool.LEININGEN@cptIt,
* McsEngl.leiningen@cptIt,

_DESCRIPTION:
The ideal way to import libraries is to use a packaging tool called Leiningen.
[http://moxleystratton.com/clojure/clojure-tutorial-for-the-non-lisp-programmer]

lcp.instance.HAXE (lhx) {2005}

_CREATED: {2014-02-21}

name::
* McsEngl.lcp.instance.HAXE (lhx) {2005}@cptIt,
* McsEngl.lcp.haxe@cptIt,
* McsEngl.lcpHaxe@cptIt,
* McsEngl.Haxe@cptIt,

* McsEngl.lhx@cptIt, {2015-07-05}
* McsEngl.lhx@cptIt,

_DESCRIPTION:
Haxe is an open-source high-level multiplatform programming language and compiler that can produce applications and source code for many different platforms from a single code-base.[1] Code written in the Haxe language can be source-to-source compiled into Adobe Flash applications, JavaScript programs, C++ standalone applications (to some extent),[2] PHP, Apache CGI, and NodeJS server-side applications.[3][4]

Haxe includes a set of common functionality that is supported across all platforms, such as numeric data types, text, arrays, binary and some common file formats.[3] Haxe also includes platform-specific API, but as of 2012, it only supports a subset of the functionality available in each platform,[5] with only the Flash platform API fully usable. Haxe can also compile to Neko code, which runs in the Neko runtime created by the same developer.

Haxe was developed by Nicolas Cannasse and other contributors, and was named Haxe because it was short, simple, and "has an X inside", which the author humorously asserts is necessary to make any new technology a success.[6] Haxe is pronounced "hex"[7] (/h?ks/),[8] although the authors of the only published book on the language pronounce it "hacks".[9]
[http://en.wikipedia.org/wiki/Haxe]

lhx'resource

name::
* McsEngl.lhx'resource@cptIt,

_ADDRESS.WPG:
* http://haxe.org//

lhx.tool.compiler

name::
* McsEngl.lhx.tool.compiler@cptIt,

_DESCRIPTION:
The haxe compiler is written in the OCaml language
[http://haxe.org/doc/build]

lcp.instance.SCALA {2003}

_CREATED: {2013-12-22}

name::
* McsEngl.lcp.instance.SCALA {2003}@cptIt,
* McsEngl.pgmlng.scala@cptIt,
* McsEngl.scala@cptIt,
* McsEngl.scala.pl@cptIt,
* McsEngl.pl.scala@cptIt,

_DESCRIPTION:
Scala (/'sk??l?/ skah-l?) is an object-functional programming and scripting language for general software applications, statically typed, designed to concisely express solutions in an elegant,[6] type-safe and lightweight (low ceremonial) manner. Scala has full support for functional programming (including currying, pattern matching, algebraic data types, lazy evaluation, tail recursion, immutability, etc.). It cleans up what are often considered poor design decisions in Java (such as type erasure, checked exceptions, the non-unified type system) and adds a number of other features designed to allow cleaner, more concise and more expressive code to be written.[5]

It is intended to be compiled to Java bytecode, so the resulting executable runs on the JVM, and Java libraries can be used directly in Scala code and vice-versa. Like Java, Scala is statically typed and object-oriented, and uses a curly-brace syntax reminiscent of C. Unlike Java, Scala has many features of functional programming languages like Scheme, Standard ML and Haskell, including anonymous functions, type inference, list comprehensions (known in Scala as "for-comprehensions"), lazy initialization, extensive language and library support for avoiding side-effects, for pattern matching, case classes, delimited continuations, higher-order types, and much better support for covariance and contravariance. Scala has a unified type system (as in C#, but unlike in Java), where all types, including primitive types like integer and boolean, are subclasses of the type Any. Scala likewise has other features present in C# but not Java, including anonymous types, operator overloading, optional parameters, named parameters, raw strings (that may be multi-line in Scala), and no checked exceptions.

The name Scala is a portmanteau of "scalable" and "language", signifying that it is designed to grow with the demands of its users. James Strachan, the creator of Groovy, described Scala as a possible successor to Java.[7][8]
[http://en.wikipedia.org/wiki/Scala_(programming_language)]

plScl'code.CLASS

name::
* McsEngl.plScl'code.CLASS@cptIt,
* McsEngl.plScl'class@cptIt,

_DESCRIPTION:
Unified Types
In contrast to Java, all values in Scala are objects (including numerical values and functions). Since Scala is class-based, all values are instances of a class. The diagram below illustrates the class hierarchy.
Scala Class Hierarchy
The superclass of all classes scala.Any has two direct subclasses scala.AnyVal and scala.AnyRef representing two different class worlds: value classes and reference classes. All value classes are predefined; they correspond to the primitive types of Java-like languages. All other classes define reference types. User-defined classes define reference types by default; i.e. they always (indirectly) subclass scala.AnyRef. Every user-defined class in Scala implicitly extends the trait scala.ScalaObject. Classes from the infrastructure on which Scala is running (e.g. the Java runtime environment) do not extend scala.ScalaObject. If Scala is used in the context of a Java runtime environment, then scala.AnyRef corresponds to java.lang.Object. Please note that the diagram above also shows implicit conversions called views between the value classs.
[http://docs.scala-lang.org/tutorials/tour/unified-types.html]

plScl'class.INSTANCE

name::
* McsEngl.plScl'class.INSTANCE@cptIt,

_DESCRIPTION:
instance
An instance, or class instance, is an object, a concept that exists only at run time.
[http://docs.scala-lang.org/glossary/]

plScl'code.VALUE

name::
* McsEngl.plScl'code.VALUE@cptIt,
* McsEngl.plScl'value@cptIt,

_DESCRIPTION:
value
The result of any computation or expression in Scala is a value, and in Scala, every value is an object. The term value essentially means the image of an object in memory (on the JVM’s heap or stack).
[http://docs.scala-lang.org/glossary/]

plScl'code.VARIABLE

name::
* McsEngl.plScl'code.VARIABLE@cptIt,
* McsEngl.plScl'variable@cptIt,

_DESCRIPTION:
variables
var x = 5  variable
GOOD val x = 5
BAD x=6  constant
var x: Double = 5  explicit type
[http://docs.scala-lang.org/cheatsheets/]

plScl'variable.FREE

name::
* McsEngl.plScl'variable.FREE@cptIt,

_DESCRIPTION:
free variable
A free variable of an expression is a variable that’s used inside the expression but not defined inside the expression. For instance, in the function literal expression (x: Int) => (x, y), both variables x and y are used, but only y is a free variable, because it is not defined inside the expression.
[http://docs.scala-lang.org/glossary/]

plScl'resource

name::
* McsEngl.plScl'resource@cptIt,

_ADDRESS.WPG:
* spec: http://www.scala-lang.org/files/archive/nightly/pdfs/ScalaReference.pdf,
=== tutorial:
* http://tutorials.jenkov.com/scala/index.html,

lcp.instance.XL {2000}

_CREATED: {2013-03-25}

name::
* McsEngl.lcp.instance.XL {2000}@cptIt,
* McsEngl.pgmlng.XL@cptIt,
* McsEngl.XL-pgmlng@cptIt,

_DESCRIPTION:
XL stands for "Extensible Language". It's a programming language designed to address the challenges faced by programmers today. It addresses these challenges not by adding language features, but by making it easy and safe for any programmer to add features themselves.
To illustrate its flexibility, XL currently exists in two main dialects:
XL2 is an imperative, statically-compiled, strongly-typed programming language with generics.
XLR is a functional, dynamically-compiled, dynamically-typed programming language with higher-order functions.
Both languages share the same syntax and meta-programming model.
[http://xlr.sourceforge.net/language]

xl'human

name::
* McsEngl.xl'human@cptIt,

human.Dinechin.Christophe.de

name::
* McsEngl.human.Dinechin.Christophe.de@cptIt,

Christophe de Dinechin
Taodyne SAS, 1300 Route des Cretes, Sophia Antipolis, France

xl'resource

name::
* McsEngl.xl'resource@cptIt,

_ADDRESS.WPG:
* http://xlr.sourceforge.net//
* http://xlr.sourceforge.net/sites/default/files/XLRef.pdf,

xl.XLR

_CREATED: {2014-01-20}

name::
* McsEngl.xl.XLR@cptIt,
* McsEngl.XLR.pgmlng@cptIt,

=== _NOTES: XLR actually stands for “eXtensible1 Language and Runtime”
[http://xlr.sourceforge.net/sites/default/files/XLRef.pdf]

_DESCRIPTION:
XLR is a dynamic language based on meta-programming, i.e. programs that manipulate programs. It is designed to enable a natural syntax similar to imperative languages descending from Algol (e.g. C, Pascal, Ada, Modula), while preserving the power and expressiveness of homoiconic languages descending from Lisp (i.e. languages where programs are data).
[http://xlr.sourceforge.net/sites/default/files/XLRef.pdf]

xlr'code.OPERATOR

name::
* McsEngl.xlr'code.OPERATOR@cptIt,
* McsEngl.xlr'operator@cptIt,
* McsEngl.xlr'operator-symbol@cptIt,
* McsEngl.xlr'opr@cptIt,

xlr'opr.TREE-REWRITE

name::
* McsEngl.xlr'opr.TREE-REWRITE@cptIt,

_SPECIFIC:
There is a very small set of tree rewrite operators that are given special meaning in XLR and
treated specially by the XLR compiler:
• Rewrite declarations are used to declare operations. They roughly play the role of functions, operator or macro declarations in other programming languages. A rewrite declaration takes the general form Pattern->Implementation and indicates that any tree
matching Pattern should be rewritten as Implementation.
• Data declarations identify data structures in the program. Data structures are nothing
more than trees that need no further rewrite. A data declaration takes the general form
of data Pattern. Any tree matching Pattern will not be rewritten further.
• Type declarations de?ne the type of variables. Type declarations take the general form of
an in?x colon operator Name:Type, with the name of the variable on the left, and the
type of the variable on the right.
• Guards limit the validity of rewrite or data declarations. They use an in?x when with a
boolean expression on the right of when, i.e. a form like Declaration when Condition.
• Assignment change the value associated to a binding. Assignments take the form
Reference := Value, where Reference identi?es the binding to change.
• Sequence operators indicate the order in which computations must be performed. XLR
has two in?x sequence operators, the semi-colon ; and the new-line NEWLINE.
• Index operators perform particular kinds of tree rewrites similar in usage to “structures”
or “arrays” in other programming languages. The notations Reference.Field and
Reference[Index] are used to refer to individual elements in a data structure. These are
only convenience notations for speci?c kinds of tree rewrites, see Section 3.1.7.
[http://xlr.sourceforge.net/sites/default/files/XLRef.pdf]

xlr'code.VALUE

name::
* McsEngl.xlr'code.VALUE@cptIt,

_SPECIFIC:
Any XLR program or data can be represented with just 8 data types: integer, real, text, name, infix, prefix, posfix and block.
...
XL0 trees consist of
four literal node types (integer, real, text and symbol) and
four structured node types (prefix, postfix, infix and block).
[http://xlr.sourceforge.net/sites/default/files/XLRef.pdf]

xlr'value.ATOMIC

name::
* McsEngl.xlr'value.ATOMIC@cptIt,

_DESCRIPTION:
Four literal node types represent atomic values, i.e. values which cannot be decomposed into
smaller units from an XLR point of view. They are:
1. Integer constants
2. Real constants
3. Text literals
4. Symbols and names
[http://xlr.sourceforge.net/sites/default/files/XLRef.pdf]

xlr'code.XL0

name::
* McsEngl.xlr'code.XL0@cptIt,

_DESCRIPTION:
XLR source text is encoded using UTF-8. Source code is parsed into a an abstract syntax tree format known as XL0.
[http://xlr.sourceforge.net/sites/default/files/XLRef.pdf]

lcp.instance.OCaml {1996}

_CREATED: {2014-02-21}

name::
* McsEngl.lcp.instance.OCaml {1996}@cptIt,
* McsEngl.lcp.OCaml@cptIt,
* McsEngl.lcpOcaml@cptIt,

_DESCRIPTION:
Paradigm(s)  multi-paradigm: imperative, functional, object-oriented
Appeared in  1996
Developer  INRIA
Stable release  4.01.0 (September 12, 2013; 5 months ago)
Typing discipline  static, strong, inferred
Dialects  F#, JoCaml, MetaOCaml, OcamlP3l
Influenced by  Caml Light, Standard ML
Influenced  F#, Scala, ATS, Opa, Rust
Implementation language  OCaml and C
OS  Cross-platform
License  Q Public License (compiler)
LGPL (library)
Website  ocaml.org, caml.inria.fr
OCaml (/o?'kζm?l/ oh-kam-?l), originally known as Objective Caml, is the main implementation of the Caml programming language, created by Xavier Leroy, Jιrτme Vouillon, Damien Doligez, Didier Rιmy and others in 1996. OCaml extends the core Caml language with object-oriented constructs.

OCaml's toolset includes an interactive top level interpreter, a bytecode compiler, and an optimizing native code compiler. It has a large standard library that makes it useful for many of the same applications as Python or Perl, as well as robust modular and object-oriented programming constructs that make it applicable for large-scale software engineering. OCaml is the successor to Caml Light. The acronym CAML originally stood for Categorical Abstract Machine Language, although OCaml abandons this abstract machine.[1]

OCaml is a free open source project managed and principally maintained by INRIA. In recent years, many new languages have drawn elements from OCaml, most notably F# and Scala.
[http://en.wikipedia.org/wiki/Ocaml]

meta-info

page-wholepath: https://synagonism.net / dirFolioViews / FvMcsIt / FvMcsIt3