Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
mowyw writes your websites - a simple offline CMS
Perl CSS
tree: 52f3521bf7

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.


mowyw - mowyw writes your websites (or: Moritz writes your websites ;-)

For license of this file see the notice at the end of the file

moc is an offline CMS, that means it process sources files and generates
output files from them, usually HTML files, but php files and others are
possible as well (with some limitations though).

Version 0.0.3 and before used only double square brackets 
(like [[include foo]]), but I noticed that double closing square brackets 
are part of a typical CDATA declaration in xml files (and xhtml) like this:
<style type="text/css">
	CSS Declarations

Now tripple square brackets (like [[[include foo]]]) are used.


choose an empty directory, and there create the three directories 

The `source/' directory contains the source files that will be processed by
mowyw. Each file in the `source/' directory is mapped to one file in the 
`online/'  directory. You should not write files into the `online/' directory
since they may be deleted or overwritten, and you should not modify existing
files in that directory since all changes are lost during the next run.
All files that might be included by others (including menus) should be in the
`includes' directory.

Now place a file index.html (or whatever you want it to be called) in the
'source/' directory.

If all your HTML files have a common header/footer, you may want to place them
in in the files `includes/header' and `includes/footer'.

For example `inlcudes/header' may contain

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

<html xmlns="" xml:lang="en">
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<link rel="stylesheet" type="text/css" media="screen, projection" href="style.css" />
<link rel="stylesheet" type="text/css" media="print" href="print.css" />

and `inlcudes/footer' may contain


and perhaps an additional footer line to be displayed in all pages.

Now write some content in the file `source/index.html' and then run mowyw.
You should get an output like that:

Processing File 'source/index.html'... DONE.

Now point your browser at source/index.html and see if it worked.
Files not ending in .html, .htm, .shtml, .xhtml etc. are not processed, just


So far mowyw didn't do much work for you, it just added header and footer
sections to all html files.
But it can do more for you: includes. 
Just use the line

[[[include foo]]]

in your files, and the line will be replaced with the  content of the file 
`includes/foo'. It works pretty much like #inlcude "includes/foo" with a C pre
processor or <!-- #include virtual="includes/foo"--> with Server Side Includes


Suppose you want to write a navigation menu in your html files that look like

 +-- foo
 +-- bar
 +-- baz
and if you click on foo, a sub menu opens:

 +-- foo
 |   |
 |   +-foo1
 |   +-foo2
 |   +-foo3
 +-- bar
 +-- baz

The way you do this with mowyw is simple:
create a file called `includes/menu-navigation' and fill it with something
like this:

<div class="menu">
	[[[item foo <li><a href="foo.html" {{class="#active"}}>foo</a> 
			<li><a href="foo1">foo1</a></li>
			<li><a href="foo2">foo2</a></li>
	[[[item bar <li><a href="bar.html" {{class="#active"}}>bar</a></li>]]]
	[[[item baz <li><a href="baz.html" {{class="#active"}}>baz</a></li>]]]

now in your file foo.html, you use the line
[[[menu navigation foo]]].
This line will be replaced by mowyw with:

<div class="menu">
	<li><a href="foo.html" class="#active">foo</a> 
			<li><a href="foo1">foo1</a></li>
			<li><a href="foo2">foo2</a></li>
	<li><a href="bar.html" >bar</a></li>
	<li><a href="baz.html" >baz</a></li>

Each menu item looks like this: [[[item label1 some_text]]]. If it is called as
[[[menu label1]]] it will produce some_text, and all double curly brackets {{ }}
are simply stripped, but the text between them remains.
If it is called with a different name, say [[[menu label2]]], the curly brackets
and the text between them are stripped.


If your website includes string like [[[ or ]]] etc., you can use the
verbatim-construct to prevent it from parsing:

[[[verbatim foobarbaz]]]
Things here inbetween will be printed out exactly as they stand here, you can
safely write things like 
"in perl6 [...] returns array refs:
my $a = [2, [4, 5, [8, 9,10]]];"
note that the ']]]' will not cause any harm.
[[[endverbatim foobarbaz]]]

the name in the verbatim and in the endverbatim-package have to agree exactly
and my consist of alphabetic characters and numbers.


If you include a line like this:
[[[option no-header]]]
the header is _not_ prepended as usual.
You can achieve the following functionality for the footer with the line
[[[option no-footer]]]

 * Currently mowyw is not very flexible in many ways, for example files
   outside the `include/' directory can't be included.

	This README file is covered by the GPL (2 or later), however
	the code examples in this file are public domain, e.g. you may use it
	however you like.
	The program mowyw is published under the GPL, for details see the
Something went wrong with that request. Please try again.