node package manager

boxomojo

NOt ready.

This is still being developed. It is not on the npm directory yet.

Boxomojo allows users to run code from other people in your web-page. It does not compile to JavaScript. Instead, it is run by JavaScript. It sandboxes that code. (eg an alternative to Adsafe).

shell> npm install boxomojo

In a string or a file:

#!!!
  This is a comment.
  This does not place anything on the stack.
  Anything between "#!!!", "!!!" is dropped
  during parsing.
!!!

#! This is also another comment.
#! It ends at the end of the line.
#! It gets dropped during parsing, just like #!!! !!!
#! Note the space: "#!_Note_the_space"

#! Calculation
1 + 2 + 3


#!!!
  Defining a variable:
    1) In other words: place the string, "One", on a stack.
    2) Execute "=" as a function that grabs the previous
    item, "One", and the proceding item, the number 1.
    3) Save as a variable.
!!!

"My-Var" = 100


#!!!

      ( )   Anything between the parenthesis is run in a separete stack
            and the last value is returned.
            It is equivalent to: run { [<>] update: ^[]^  }

      [ ]   A list. Known as Array in other languages. (This is not a linked
            list. It is named "list" because Boxomojo is meant for humans,
            not programmers.)

      { }   Anonymous function.

     w[ ]w  A box. Think of it a Hash/Dictionary that is also an object.
            Example:
            {
               a = "some val"
               b = "other val"
               c = 123
            }


      "s"       String. Delimiters:  " "
     &[ ]&      String. Example:  &[ my "crazy" $!@#%^&* 'string' ]&

 "^"string"^"   String escaping: ^"   "^
&[ ^&[ ]&^ ]&   String escaping: ^&[ ]&^

    [<>]    Inside box. Known as "local scope" in other languages.
    ^[]^    Outside box.

!!!

"One" = 1

if ( One =? 1 ) {
  "Result" = "it works"
} else {
  "Result" = "Boxomojo does not work"
}

"Array"           = [ 0 1 2 3 4 ]
"Optional Commas" = [ 0 , 1 , 2 ]
"Adding Arrays"   = [ 1 2 3 ] + [ 4 5 6 ]

"Number Names" = w[
  "Zero" = 0
  "One"  = 1
  "Two"  = 2
]w

"to-number" = {
   "Number Names" : Left_Stack_Pop
}


"Zero" to-number

In your JavaScript code:

var Boxomojo = require('boxomojo').Boxomojo;
var box = Boxomojo.new( YOUR_FACTOR_SCRIPT_STRING );
box.run();
box.Returns;  // ===> Returns an Array. Treat it as a stack.
box.Vars;     // ===> Returns an Object (aka Hash).

British Airways

The Adventures of Buckaroo Banzai

The Awesomeness of Factor

  • Function definitions: "my_function" = { print "a" }

  • Function call routes: Called "Multiple Dispatching", "Function Overloading" in other languages. "+" can_also_do "+_for_cars" =f { Args: [ Car? | Car? ] [ "car_a" | "car_b" ]

    #!  Your code here.
    

    }

Previous Name:
Factor_Script

Inspiration:
The Factor General Purpose Programming Language.

Written, Produced, and Directed:
by reading, pacing around, and thinking.