Skip to content

Latest commit

 

History

History
319 lines (259 loc) · 6.21 KB

README.md

File metadata and controls

319 lines (259 loc) · 6.21 KB

Alt text

Sweet (current version - 0.6.6)

A Sweet Language, that compiles for HTML.

Description

Sweet is a pre-compiled language based on Ruby and Python. Sweet makes possible to use all the class, defs, conditionals, global and local variables power of server-side languages, defining blocks by indentation like Python in your Sweet HTML markup. It comes with a SIC ( Sweet Interactive Console ) the you can test your code and ideas before really right and compile it.

Features

  • Clear and simple syntax
  • Defining blocks using indentation
  • Include of external files
  • Watch folders with sweet files
  • Support to Class, Def, Conditionals, Constants and Variables
  • Just If conditional for now ( without else )
  • Local and Global Variables ( down / uppercase eg. lol / Lol )
  • Constants ( TRUE, FALSE, NIL )
  • SIC ( Sweet Interactive Console )
  • Automatically return of the last value of Def
  • Multiple scopes
  • A small and cool extension ".s"

Installation

Sweet is available through Rubygems and can be installed via:

$ gem install sweet-lang

Usage

For help

sweet -h

For watch a folder

sweet -w ./

For compile a file

sweet -c [FILENAME].s

For SIC ( Sweet Interactive Console )

sweet - o

##Syntax

There is a lot to discuss and show about sweet syntax, I think the best for learn it, is take a look at the examples, but there is details that should be showed.

Including sweet external files

In sweet you can include external files to be compile in anywhere you want to in your code, there is page with an example in wiki:https://github.com/joaomdmoura/sweet/wiki/Include-of-external-sweet-files/

<~ [PATH/TO/FILE].s

The include feature also support logic, so you can have a sweet file with all your classes and def's, and then, include it on your sweet major file.

##Examples

A Basic example

Sweet have to be simple, then we start thinking a new way to write a clean and smart syntax that compiles to HTML So just a few tips:

  • Forget '>', '<', '/','attribute="value"'.
  • Attributes are defined without ' " ' ( eg. type=password )
  • You can use shortcuts to "id" and "class" attributes ( eg. #myid / .myclass )
  • You blocks will be defined by indentation, so start to make a clean code.
  • String must have ' " '.
  • There is no more inline content, everything is indented.

This is a basic.s ( A Sweet file ) basic.s

html
	head
		title
			"A Sweet basic demostration"
	body
		h1 #title
			"Welcome to Sweet"
		h2 .subtitle
			"Hope you enjoy it"

When we compile it

sweet -c basic.s

It becomes basic.html

<html>
	<head>
		<title>
			A Sweet basic demostration
		</title>
	</head>
	<body>
		<h1 id='title'>
			Welcome to Sweet
		</h1>
		<h2 class='subtitle'>
			Hope you enjoy it
		</h2>
	</body>
</html>

A Medium example

After a Really clean, smart and easy to use precompiled language we should make it INSANE!, then we bring to Sweet a little bit of server-side development to open your mind to impossible:

  • Now you have Class, there is no excuse to a not organized code anymore
  • Def's ( functions ), exactly like ruby
  • Conditionals ( just if for now, without else, sorry about that )
  • Multiple scopes ( everytime you indent your code you have a new scope )
  • Local variables ( accessible just in the current scope )
  • Global variables ( accessible everywhere )
  • Constants ( TRUE, FALSE, NIL )

Remember

  • A variable can't have a name of a tag

This is a medium.s ( A Sweet file ) medium.s

Var1 = "A Sweet medium demostration"
Var2 = "Welcome to Sweet"
Var3 = "Hope you keep enjoing it"

def sweet_content( easy )
	if easy
		"It isn't getting hard, is getting sweet!"

html
	head
		title
			print( Var1 )
	body
		h1 #title
			print( Var2 )
		h2 .subtitle
			print( Var3 )
		div
			content = sweet_content( true )
			print( content )

When we compile it

sweet -c medium.s

It becomes medium.html

<html >
	<head >
		<title >
			A Sweet medium demostration
		</title>
	</head>
	<body >
		<h1 id='title'>
			Welcome to Sweet
		</h1>
		<h2 class='subtitle'>
			Hope you keep enjoing it
		</h2>
		<div >
			It isn't getting hard, is getting sweet!
		</div>
	</body>
</html>

A Sweet ( hard ) example

Let's stop jooking is time to take it to a next level, this isn't a hard example, cuz Sweet isn't hard, it was made to be simple. We will just use all the features together in one .s file.

This is a hard.s ( A Sweet file ) hard.s

class Sweet
	def get_user(admin)
		if admin
			"Jonh Doe"
	
	def get_status(usr)
		if usr
			"Logged"
	
Sweet = Sweet.new

Var1 = "A Sweet hard demostration"
Var2 = "Welcome to Sweet"
Var3 = "Hope you keep enjoing it"

html
	head
		title
			print( Var1 )
	body
		h1 #title
			print( Var2 )
		h2 .subtitle
			print( Var3 )
		div #user
			ul #content
				li .name
					Code_def = Sweet.get_user(true)
					print (Code_def)
				li .status
					code_def = Sweet.get_status(Code_def)
					print (code_def)
		div #logout
			a href=logout
				"Do you wanna logout"
		div #login
			form action=login #form
				input type=text #email

When we compile it

sweet -c hard.s

It becomes hard.html

<html >
	<head >
		<title >
			A Sweet hard demostration
		</title>
	</head>
	<body >
		<h1 id='title'>
			Welcome to Sweet
		</h1>
		<h2 class='subtitle'>
			Hope you keep enjoing it
		</h2>
		<div id='user'>
			<ul id='content'>
				<li class='name'>
					Jonh Doe
				</li>
				<li class='status'>
					Logged
				</li>
			</ul>
		</div>
		<div id='logout'>
			<a href='logout'>
				Do you wanna logout
			</a>
		</div>
		<div id='login'>
			<form action='login' id='form'>
				<input type='text' id='email' />
			</form>
		</div>
	</body>
</html>

This is it!

Well, this is Sweet i really hope you enjoy and use it a lot, I'm still working on it so dont be shy, let me know if something get wrong opening a issue, then i can fix it and we help each other ;) All examples are in examples folder.

Mailing List

A place to talk about it.

http://groups.google.com/group/sweet-lang