Main
====

@todo describe


#### The main class for Develoop

    class Main
      C: ªC
      toString: -> "[object #{@C}]"

      constructor: (config={}) ->




Properties
----------


#### `pegjs <xx>`
Xx. @todo describe

        @pegjs = PEG


#### `aceGrammar <xx>`
Xx. @todo describe

        @aceGrammar = AceGrammar


#### `helpers <array of Directories and Files>`
Xx. @todo describe

        @helpers = []


#### `languages <array of Directories and Files>`
Xx. @todo describe

        @languages = []


#### `oopish <array of Directories and Files>`
The top level of the build and development utilities. 

        @oopish = []


#### `project <array of Directories and Files>`
The top level of the developer’s project. 

        @project = []




Init
----

Initialize the instance. 

        @init()




Methods
-------


#### `init()`

Xx. @todo describe

      init: ->
        @helpers.push new File @,
          title: 'Add'
          label: 'add.js'
          notes: ['Adds two numbers together']
          value: (x, y) -> x+y

        @helpers.push new File @,
          title: 'Increment'
          label: 'inc.js'
          notes: ['Adds 1 to a number']
          value: (x) -> x+1

        @helpers.push new File @,
          title: 'Foo'
          label: 'foo.js'
          notes: ['Adds 1 to a number']
          value: (x) -> 'foo'

        @helpers.push new File @,
          title: 'Bar'
          label: 'bar.js'
          notes: ['Adds 1 to a number']
          editable: true
          value: (x) -> 'bar'


##### Languages

        @languages.push new Directory @,
          title: 'Markdown'
          label: 'markdown'
          notes: ['Simple text markup']
          files: [
            new File @,
              title: 'Bold'
              label: 'bold.js'
              notes: ['Bold text']
              value: """
                function md_bold(input) {
                }

              """
            new File @,
              title: 'Italic'
              label: 'italic.js'
              notes: ['Italic text']
              value: """
                function md_italic(input) {
                }

              """
          ]

        @languages.push new Directory @,
          title: 'Oopish'
          label: 'oopish'
          notes: ['A little language which compiles to ES6']
          files: [
            new File @,
              title: '.Item'
              label: 'Item.js'
              notes: ['The Item class']
              value: """
                function item_js(input) {
                }

              """
            new File @,
              title: '.List'
              label: 'List.js'
              notes: ['The List class']
              editable: true
              value: """
                function list_js(input) {
                }

              """
          ]


##### Oopish compiler and highlighter

        @oopish.push new Directory @,
          title: 'Build'
          label: 'build'
          notes: ['Destination for compiled development and build utilities, so do not edit these files directly']
          files: [
            new File @,
              title: 'Oopish Compiler'
              label: 'oopish-compiler.js'
              notes: ['A parser and compiler generated by PEG.js from pegjs-helpers.js and pegjs-rules.pegjs']
              value: """
                function peg$parse(input) {
                }

              """
            new File @,
              title: 'Minified Oopish Compiler'
              label: 'oopish-compiler.min.js'
              notes: ['Minified parser and compiler, with no comments or test']
              value: """
                function peg$parse(i){};
              """
            new File @,
              title: 'Oopish Compiler With Tests'
              label: 'oopish-compiler.test.js'
              notes: ['A parser and compiler generated by PEG.js, with tests']
              value: """
                function peg$parse(input) {
                }
                console.assert('abc', 123);

              """
            new File @,
              title: 'Oopish Highlighter'
              label: 'oopish-highlighter.js'
              notes: ['A parser and syntax highlighter generated by AceGrammar, to be used by ACE']
              value: """
                //// Mode generated by Develoop 0.0.7

                modeGrammar = {
                }

              """
            new File @,
              title: 'Minified Oopish Highlighter'
              label: 'oopish-highlighter.min.js'
              notes: ['Minified parser and syntax highlighter, with no comments or test']
              value: """
                modeGrammar={}
              """
            new File @,
              title: 'Oopish Highlighter With Tests'
              label: 'oopish-highlighter.test.js'
              notes: ['A parser and syntax highlighter generated by AceGrammar, with tests']
              value: """
                //// Mode generated by Develoop 0.0.7

                modeGrammar = {
                }

                console.assert('abc', 123);

              """
          ]

        @oopish.push new Directory @,
          title: 'Documentation'
          label: 'doc'
          notes: ['Documentation for the Oopish IDE and programming language, in Markdown format']
          files: [
            new File @,
              title: 'oopish_md'
              label: 'oopish.md'
              notes: ['An introduction to the Oopish programming language']
              value: """
                Oopish
                ======

              """
          ]

        @oopish.push new Directory @,
          title: 'Source'
          label: 'src'
          notes: ['Source code for development and build utilities']
          files: [
            new File @,
              title: 'Compiler Helpers'
              label: 'compiler-helpers.js'
              notes: ['Becomes the initializer section at the top of the PEG.js compiler-source']
              editable: true
              value: """
                //// Initializer generated by Develoop
                var someHelper = function () { return 'ok'; };

              """
            new File @,
              title: 'Compiler Rules'
              label: 'compiler-rules.pegjs'
              notes: ['Becomes the main rules section of the PEG.js compiler-source']
              editable: true
              value: """
                //// Rules generated by Develoop
                string_char 'String Character'
                  = "\\\\" char:. { return "\\\\" + char; }
                  / .
                ;

              """
            new File @,
              title: 'Highlighter Helpers'
              label: 'highlighter-helpers.js'
              notes: ['Becomes a library section for the AceGrammar highlighter-source']
              editable: true
              value: """
                //// Grammar helpers generated by Develoop 0.0.7
                var someHelper = function () { return 'ok'; };

              """
            new File @,
              title: 'Highlighter Rules'
              label: 'highlighter-rules.js'
              notes: ['Becomes the main rules section for the AceGrammar highlighter-source']
              editable: true
              value: """
                //// Grammar rules generated by Develoop 0.0.7

                modeGrammar = {
                }

              """
          ]

        @oopish.push new Directory @,
          title: 'Test'
          label: 'test'
          notes: ['Source of language unit tests and performance benchmarks']
          files: [
            new File @,
              title: 'Test 01-01: Helper `add()`'
              label: 'test-01-01-add.litcoffee'
              notes: ['Tests for the `add` helper']
              value: """
                Test 01-01: Helper `add()`
                ==========================

              """
            new File @,
              title: 'Test 01-02: Helper `increment()`'
              label: 'test-01-02-inc.litcoffee'
              notes: ['Tests for the `increment` helper']
              value: """
                Test 01-02: Helper `increment()`
                ================================

              """
            new File @,
              title: 'Test 02-01: Language `Markdown`'
              label: 'test-02-01-md.litcoffee'
              notes: ['Tests for the `Markdown` language, as a whole']
              value: """
                Test 02-01: Language `Markdown`
                ================================

              """
            new File @,
              title: 'Test 02-02: Markdown Feature `A`'
              label: 'test-02-02-a.litcoffee'
              notes: ['Tests for the Markdown `A` feature']
              value: """
                Test 02-02: Markdown Feature `A`
                ================================

              """
          ]

        @oopish.push new File @,
          title: 'Read Me'
          label: 'README.md'
          notes: ['An introduction to Oopish']
          editable: true
          value: """
            Oopish
            ======

            A little language which compiles to ES6. 

            """

        @oopish.push new File @,
          title: 'Package'
          label: 'package.json'
          notes: ['Metadata about Oopish, in standard NPM format']
          editable: true
          value: """
            {
              "name":        "oopish",
              "version":     "0.0.1",
              "description": "A little language which compiles to ES6",
              "main":        "build/oopish-compiler.js"
            }
            """




##### Example Project

        @project.push new Directory @,
          title: 'Build'
          label: 'build'
          notes: ['Destination for compiled project files, so do not edit these files directly']
          files: [
            new File @,
              title: 'My Project'
              label: 'my-project.js'
              notes: ['The standard compiled JavaScript, with comments but no tests']
              value: """
                //// My Project v0.0.1

                var abc = 123;
                console.log(abc);

              """
            new File @,
              title: 'My Project ES6'
              label: 'my-project.es6.js'
              notes: ['Standard compiled ES6 JavaScript, with comments but no tests']
              value: """
                //// My Project v0.0.1

                var abc = 123;
                console.log(abc);

              """
            new File @,
              title: 'Minified My Project'
              label: 'my-project.min.js'
              notes: ['Minified compiled JavaScript, with no comments or test']
              value: """
                var abc=123;console.log(abc);
              """
            new File @,
              title: 'My Project With Tests'
              label: 'my-project.test.js'
              notes: ['The standard compiled JavaScript, with comments and unit tests']
              value: """
                //// My Project v0.0.1'

                var abc = 123;
                console.log(abc);

                //// Some tests in here...
                console.assert(abc, 456);

              """
          ]

        @project.push new Directory @,
          title: 'Documentation'
          label: 'doc'
          notes: ['Project documentation, in Markdown format']
          files: [
            new File @,
              title: 'my_project_md'
              label: 'my-project.md'
              notes: ['An introduction to the MyProject example project']
              value: """
                MyProject
                =========

              """
          ]

        @project.push new Directory @,
          title: 'Source'
          label: 'src'
          notes: ['Uncompiled source project files, in the order they should be concatenated']
          files: [
            new File @,
              title: 'Main'
              label: 'Main.oopish.md'
              notes: ['The main point of entry for the program']
              editable: true
              value: """
                Main
                ====

                abc = 123
                console.log abc

              """
            new File @,
              title: 'Useful'
              label: 'Useful.oopish.md'
              notes: ['A useful class']
              editable: true
              value: """
                Useful
                ======

                class Useful
                  constructor() ->
                    console.log 'The `Useful` class is ok!'

              """
          ]

        @project.push new Directory @,
          title: 'Test'
          label: 'test'
          notes: ['Source of project unit tests and performance benchmarks']
          files: [
            new File @,
              title: 'Test 01: Main'
              label: 'test-01-main.oopish.md'
              notes: ['Tests for the Main class']
              value: """
                Test 01: Main
                =============

              """
            new File @,
              title: 'Test 02: Useful'
              label: 'test-02-useful.oopish.md'
              notes: ['Tests for the Useful class']
              value: """
                Test 02: Useful
                ===============

              """
          ]

        @project.push new File @,
          title: 'Read Me'
          label: 'README.md'
          notes: ['An introduction to the project']
          editable: true
          value: """
            Example Project
            ===============

            An example Develoop project. 

            """

        @project.push new File @,
          title: 'Package'
          label: 'package.json'
          notes: ['Metadata about the project, in standard NPM format']
          editable: true
          value: """
            {
              "name":        "my-project",
              "version":     "0.0.1",
              "description": "An example Develoop project",
              "main":        "build/my-project.js"
            }
            """


Functions
---------


#### `xx()`
- `xx <xx>`  Xx 

Xx. @todo describe

    xx = (xx) ->



