Browse code

Allow "secret" converter in includes. Need to document this sometime. Made filters nestable. Also supports stateful filters. Redid the documentation which is now much nicer.

Nat! authored on 19-02-2015 22:41:00
Showing 83 changed files
... ...
@@ -30,7 +30,52 @@ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30 30
 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31 31
 POSSIBILITY OF SUCH DAMAGE.
32 32
 
33
-
34
-The HTML escape code is governed by an Apache License, Version 2.0 
33
+------------------------------
34
+MulleScion (Library) uses HTML escape code by Google,
35
+which is governed by an Apache License, Version 2.0
35 36
 
36 37
 http://www.apache.org/licenses/
38
+
39
+
40
+------------------------------
41
+mulle-scion (Executable) uses the MIT licensed mongoose Webserver
42
+
43
+// Copyright (c) 2004-2012 Sergey Lyubka
44
+//
45
+// Permission is hereby granted, free of charge, to any person obtaining a copy
46
+// of this software and associated documentation files (the "Software"), to deal
47
+// in the Software without restriction, including without limitation the rights
48
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
49
+// copies of the Software, and to permit persons to whom the Software is
50
+// furnished to do so, subject to the following conditions:
51
+//
52
+// The above copyright notice and this permission notice shall be included in
53
+// all copies or substantial portions of the Software.
54
+//
55
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
56
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
57
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
58
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
59
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
60
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
61
+// THE SOFTWARE.
62
+
63
+------------------------------
64
+mulle-scion (Executable) uses the ISCL licensed hoedown library
65
+
66
+Copyright (c) 2008, Natacha Porté
67
+Copyright (c) 2011, Vicent Martí
68
+Copyright (c) 2014, Xavier Mendez, Devin Torres and the Hoedown authors
69
+Permission to use, copy, modify, and distribute this software for any
70
+purpose with or without fee is hereby granted, provided that the above
71
+copyright notice and this permission notice appear in all copies.
72
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
73
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
74
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
75
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
76
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
77
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
78
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
79
+
80
+------------------------------
81
+
... ...
@@ -175,6 +175,7 @@
175 175
 		414A436F19040B530020C6FF /* self.scion in CopyFiles */ = {isa = PBXBuildFile; fileRef = 41B07E24182001800003B67F /* self.scion */; };
176 176
 		414A437019040B530020C6FF /* verbatim.scion in CopyFiles */ = {isa = PBXBuildFile; fileRef = 41DD56A516E397D800C4D68A /* verbatim.scion */; };
177 177
 		414A437119040B530020C6FF /* while.scion in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4121DAF916DCFD9D00BFD60C /* while.scion */; };
178
+		415C401E1A9641010072B73A /* __demo.scion in CopyFiles */ = {isa = PBXBuildFile; fileRef = 415C401D1A9641010072B73A /* __demo.scion */; };
178 179
 		415DA59C182BBB3B00F654F7 /* GTMDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 415DA59B182BBB3B00F654F7 /* GTMDefines.h */; };
179 180
 		41665B4918D70804005DF9BF /* NSData+ZLib.m in Sources */ = {isa = PBXBuildFile; fileRef = 4121DB0116DD251900BFD60C /* NSData+ZLib.m */; };
180 181
 		41665B4B18D70811005DF9BF /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 41665B4A18D70811005DF9BF /* libz.dylib */; };
... ...
@@ -185,12 +186,25 @@
185 186
 		41912E4D19C08147006B7183 /* MulleScionPrintingException.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 41D6DEA316DE32A9004833D6 /* MulleScionPrintingException.h */; };
186 187
 		41912E4E19C08155006B7183 /* MulleScionPrintingException.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 41D6DEA316DE32A9004833D6 /* MulleScionPrintingException.h */; };
187 188
 		41AC169B182D3CD700F2C8D8 /* NSObject+MulleScionDescription.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 41764BAA16DA5E1600560FCF /* NSObject+MulleScionDescription.h */; };
189
+		41AE2D7E1A925817009E21CB /* __scion_style.scion in CopyFiles */ = {isa = PBXBuildFile; fileRef = 41AE2D7D1A92580D009E21CB /* __scion_style.scion */; };
188 190
 		41AEA207182D097300840887 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 41764B8F16DA511200560FCF /* Foundation.framework */; };
189 191
 		41AEA21B182D0A3A00840887 /* MulleScionObjectModel+Graphviz.m in Sources */ = {isa = PBXBuildFile; fileRef = 41AEA1F3182D089E00840887 /* MulleScionObjectModel+Graphviz.m */; };
190 192
 		41AEA22B182D20FB00840887 /* libMulleScionGraphviz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 41AEA214182D097300840887 /* libMulleScionGraphviz.a */; };
191 193
 		41B07E261820215A0003B67F /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = 41DEE8A117DF22190042A439 /* README.md */; };
192 194
 		41B07E271820215A0003B67F /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = 414A842816E52DF50084AE1E /* LICENSE */; };
193 195
 		41C5E05F16DE6A5D00132904 /* MulleScionParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 41764B9E16DA51A200560FCF /* MulleScionParser.m */; };
196
+		41CFAFFE1A93E1E500B0783A /* autolink.c in Sources */ = {isa = PBXBuildFile; fileRef = 41CFAFF51A93E1E500B0783A /* autolink.c */; };
197
+		41CFAFFF1A93E1E500B0783A /* buffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 41CFAFF61A93E1E500B0783A /* buffer.c */; };
198
+		41CFB0001A93E1E500B0783A /* document.c in Sources */ = {isa = PBXBuildFile; fileRef = 41CFAFF71A93E1E500B0783A /* document.c */; };
199
+		41CFB0011A93E1E500B0783A /* escape.c in Sources */ = {isa = PBXBuildFile; fileRef = 41CFAFF81A93E1E500B0783A /* escape.c */; };
200
+		41CFB0021A93E1E500B0783A /* html_blocks.c in Sources */ = {isa = PBXBuildFile; fileRef = 41CFAFF91A93E1E500B0783A /* html_blocks.c */; };
201
+		41CFB0031A93E1E500B0783A /* html_smartypants.c in Sources */ = {isa = PBXBuildFile; fileRef = 41CFAFFA1A93E1E500B0783A /* html_smartypants.c */; };
202
+		41CFB0041A93E1E500B0783A /* html.c in Sources */ = {isa = PBXBuildFile; fileRef = 41CFAFFB1A93E1E500B0783A /* html.c */; };
203
+		41CFB0051A93E1E500B0783A /* stack.c in Sources */ = {isa = PBXBuildFile; fileRef = 41CFAFFC1A93E1E500B0783A /* stack.c */; };
204
+		41CFB0061A93E1E500B0783A /* version.c in Sources */ = {isa = PBXBuildFile; fileRef = 41CFAFFD1A93E1E500B0783A /* version.c */; };
205
+		41CFB0091A93E1FA00B0783A /* Hoedown.m in Sources */ = {isa = PBXBuildFile; fileRef = 41CFB0081A93E1FA00B0783A /* Hoedown.m */; };
206
+		41CFB00C1A93E21800B0783A /* Hoedown+MulleScionPrinting.m in Sources */ = {isa = PBXBuildFile; fileRef = 41CFB00B1A93E21800B0783A /* Hoedown+MulleScionPrinting.m */; };
207
+		41CFB00F1A93E28F00B0783A /* NSData+Hoedown.m in Sources */ = {isa = PBXBuildFile; fileRef = 41CFB00E1A93E28F00B0783A /* NSData+Hoedown.m */; };
194 208
 		41D6DEDA16DE509E004833D6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 41764B8F16DA511200560FCF /* Foundation.framework */; };
195 209
 		41D6DEE516DE50ED004833D6 /* MulleScionDataSourceProtocol.m in Sources */ = {isa = PBXBuildFile; fileRef = 41D6DEA716DE3374004833D6 /* MulleScionDataSourceProtocol.m */; };
196 210
 		41D6DEE616DE50EF004833D6 /* NSObject+MulleScionDescription.m in Sources */ = {isa = PBXBuildFile; fileRef = 41764BAB16DA5E1600560FCF /* NSObject+MulleScionDescription.m */; };
... ...
@@ -237,6 +251,7 @@
237 251
 		41EC014C182D303500A17DBD /* MulleScionObjectModel+Parsing.m in Sources */ = {isa = PBXBuildFile; fileRef = 410C7FD516E0CF5A00DC2465 /* MulleScionObjectModel+Parsing.m */; };
238 252
 		41EC014D182D303500A17DBD /* MulleScionObjectModel+BlockExpansion.m in Sources */ = {isa = PBXBuildFile; fileRef = 410C7FD216E0CE4100DC2465 /* MulleScionObjectModel+BlockExpansion.m */; };
239 253
 		41EC014E182D303500A17DBD /* MulleScionObjectModel+MacroExpansion.m in Sources */ = {isa = PBXBuildFile; fileRef = 4178D2FC16DFD2D4001C9FB0 /* MulleScionObjectModel+MacroExpansion.m */; };
254
+		41F02ACB1A94DA06005F2E97 /* NSString+TrimTextFromExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = 41F02ACA1A94DA06005F2E97 /* NSString+TrimTextFromExamples.m */; };
240 255
 		41F0CDD718296888000057D5 /* NSFileHandle+MulleOutputFileHandle.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F0CDD318296756000057D5 /* NSFileHandle+MulleOutputFileHandle.h */; settings = {ATTRIBUTES = (Public, ); }; };
241 256
 		41F12D4016E25B9100120E63 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 41764B8F16DA511200560FCF /* Foundation.framework */; };
242 257
 		41F12D4116E25B9F00120E63 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 4121DB0316DD2B6900BFD60C /* libz.dylib */; };
... ...
@@ -543,6 +558,7 @@
543 558
 				414A435819040B530020C6FF /* __page.scion in CopyFiles */,
544 559
 				414A435919040B530020C6FF /* __scion_page.scion in CopyFiles */,
545 560
 				414A435A19040B530020C6FF /* __scion_footer.scion in CopyFiles */,
561
+				41AE2D7E1A925817009E21CB /* __scion_style.scion in CopyFiles */,
546 562
 				414A435B19040B530020C6FF /* properties.plist in CopyFiles */,
547 563
 				414A435C19040B530020C6FF /* !_Introduction.scion in CopyFiles */,
548 564
 				414A435D19040B530020C6FF /* Formatting_Options.scion in CopyFiles */,
... ...
@@ -551,6 +567,7 @@
551 567
 				414A436019040B530020C6FF /* #!.scion in CopyFiles */,
552 568
 				414A436119040B530020C6FF /* [].scion in CopyFiles */,
553 569
 				414A436219040B530020C6FF /* |.scion in CopyFiles */,
570
+				415C401E1A9641010072B73A /* __demo.scion in CopyFiles */,
554 571
 				414A436319040B530020C6FF /* block.scion in CopyFiles */,
555 572
 				414A436419040B530020C6FF /* define.scion in CopyFiles */,
556 573
 				414A436519040B530020C6FF /* dot.scion in CopyFiles */,
... ...
@@ -670,6 +687,7 @@
670 687
 		410C7FD516E0CF5A00DC2465 /* MulleScionObjectModel+Parsing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MulleScionObjectModel+Parsing.m"; sourceTree = "<group>"; };
671 688
 		411EEA9A182D30B600361ADF /* libMulleScionPrinter.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libMulleScionPrinter.a; sourceTree = BUILT_PRODUCTS_DIR; };
672 689
 		411EEAB5182D311F00361ADF /* libMulleScionFoundation.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libMulleScionFoundation.a; sourceTree = BUILT_PRODUCTS_DIR; };
690
+		411F77F71A94A29B00307651 /* Hoedown+MulleScionPrinting.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Hoedown+MulleScionPrinting.h"; sourceTree = "<group>"; };
673 691
 		411F98AD16E0FBE600738250 /* Global_Variables.scion */ = {isa = PBXFileReference; lastKnownFileType = text; name = Global_Variables.scion; path = ../dox/Global_Variables.scion; sourceTree = "<group>"; };
674 692
 		4121DAF116DCE0FB00BFD60C /* for.scion */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = for.scion; path = ../dox/for.scion; sourceTree = "<group>"; };
675 693
 		4121DAF916DCFD9D00BFD60C /* while.scion */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = while.scion; path = ../dox/while.scion; sourceTree = "<group>"; };
... ...
@@ -698,6 +716,7 @@
698 716
 		414A842516E528890084AE1E /* MulleScionDataFlow.graffle */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = MulleScionDataFlow.graffle; sourceTree = "<group>"; };
699 717
 		414A842616E5288A0084AE1E /* MulleScionDataFlow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = MulleScionDataFlow.png; sourceTree = "<group>"; };
700 718
 		414A842816E52DF50084AE1E /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; };
719
+		415C401D1A9641010072B73A /* __demo.scion */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = __demo.scion; sourceTree = "<group>"; };
701 720
 		415DA598182BBB0000F654F7 /* GTMNSString+HTML.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "GTMNSString+HTML.h"; path = "../google-toolbox-for-mac/Foundation/GTMNSString+HTML.h"; sourceTree = "<group>"; };
702 721
 		415DA599182BBB0000F654F7 /* GTMNSString+HTML.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "GTMNSString+HTML.m"; path = "../google-toolbox-for-mac/Foundation/GTMNSString+HTML.m"; sourceTree = "<group>"; };
703 722
 		415DA59B182BBB3B00F654F7 /* GTMDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GTMDefines.h; path = "../google-toolbox-for-mac/GTMDefines.h"; sourceTree = "<group>"; };
... ...
@@ -728,6 +747,7 @@
728 747
 		4178D2FB16DFD2D4001C9FB0 /* MulleScionObjectModel+MacroExpansion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MulleScionObjectModel+MacroExpansion.h"; sourceTree = "<group>"; };
729 748
 		4178D2FC16DFD2D4001C9FB0 /* MulleScionObjectModel+MacroExpansion.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MulleScionObjectModel+MacroExpansion.m"; sourceTree = "<group>"; };
730 749
 		4190DC6C16DEC5F400FC4471 /* filter.scion */ = {isa = PBXFileReference; lastKnownFileType = text; name = filter.scion; path = ../dox/filter.scion; sourceTree = "<group>"; };
750
+		41AE2D7D1A92580D009E21CB /* __scion_style.scion */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = __scion_style.scion; sourceTree = "<group>"; };
731 751
 		41AEA1F3182D089E00840887 /* MulleScionObjectModel+Graphviz.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MulleScionObjectModel+Graphviz.m"; sourceTree = "<group>"; };
732 752
 		41AEA214182D097300840887 /* libMulleScionGraphviz.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libMulleScionGraphviz.a; sourceTree = BUILT_PRODUCTS_DIR; };
733 753
 		41B07E24182001800003B67F /* self.scion */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = self.scion; sourceTree = "<group>"; };
... ...
@@ -735,6 +755,27 @@
735 755
 		41C04B2C182D2C2D00CD973E /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
736 756
 		41CCC55C18254FB00081FA1C /* tests */ = {isa = PBXFileReference; lastKnownFileType = folder; path = tests; sourceTree = "<group>"; };
737 757
 		41CD2F0D181FE17300FBBEB4 /* INSTALL */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = INSTALL; sourceTree = "<group>"; };
758
+		41CFAFEE1A93E1E500B0783A /* autolink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = autolink.h; sourceTree = "<group>"; };
759
+		41CFAFEF1A93E1E500B0783A /* buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = buffer.h; sourceTree = "<group>"; };
760
+		41CFAFF01A93E1E500B0783A /* document.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = document.h; sourceTree = "<group>"; };
761
+		41CFAFF11A93E1E500B0783A /* escape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = escape.h; sourceTree = "<group>"; };
762
+		41CFAFF21A93E1E500B0783A /* html.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = html.h; sourceTree = "<group>"; };
763
+		41CFAFF31A93E1E500B0783A /* stack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stack.h; sourceTree = "<group>"; };
764
+		41CFAFF41A93E1E500B0783A /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = "<group>"; };
765
+		41CFAFF51A93E1E500B0783A /* autolink.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = autolink.c; sourceTree = "<group>"; };
766
+		41CFAFF61A93E1E500B0783A /* buffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = buffer.c; sourceTree = "<group>"; };
767
+		41CFAFF71A93E1E500B0783A /* document.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = document.c; sourceTree = "<group>"; };
768
+		41CFAFF81A93E1E500B0783A /* escape.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = escape.c; sourceTree = "<group>"; };
769
+		41CFAFF91A93E1E500B0783A /* html_blocks.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = html_blocks.c; sourceTree = "<group>"; };
770
+		41CFAFFA1A93E1E500B0783A /* html_smartypants.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = html_smartypants.c; sourceTree = "<group>"; };
771
+		41CFAFFB1A93E1E500B0783A /* html.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = html.c; sourceTree = "<group>"; };
772
+		41CFAFFC1A93E1E500B0783A /* stack.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stack.c; sourceTree = "<group>"; };
773
+		41CFAFFD1A93E1E500B0783A /* version.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = version.c; sourceTree = "<group>"; };
774
+		41CFB0071A93E1FA00B0783A /* Hoedown.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Hoedown.h; sourceTree = "<group>"; };
775
+		41CFB0081A93E1FA00B0783A /* Hoedown.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Hoedown.m; sourceTree = "<group>"; };
776
+		41CFB00B1A93E21800B0783A /* Hoedown+MulleScionPrinting.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "Hoedown+MulleScionPrinting.m"; sourceTree = "<group>"; };
777
+		41CFB00D1A93E28F00B0783A /* NSData+Hoedown.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSData+Hoedown.h"; sourceTree = "<group>"; };
778
+		41CFB00E1A93E28F00B0783A /* NSData+Hoedown.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSData+Hoedown.m"; sourceTree = "<group>"; };
738 779
 		41D6DEA316DE32A9004833D6 /* MulleScionPrintingException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MulleScionPrintingException.h; sourceTree = "<group>"; };
739 780
 		41D6DEA416DE32A9004833D6 /* MulleScionPrintingException.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MulleScionPrintingException.m; sourceTree = "<group>"; };
740 781
 		41D6DEA716DE3374004833D6 /* MulleScionDataSourceProtocol.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MulleScionDataSourceProtocol.m; sourceTree = "<group>"; };
... ...
@@ -769,6 +810,8 @@
769 810
 		41EA51AE16E505A800D3B0AD /* __scion_macros.scion */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = __scion_macros.scion; sourceTree = "<group>"; };
770 811
 		41EC0149182D301A00A17DBD /* libMulleScionParser.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libMulleScionParser.a; sourceTree = BUILT_PRODUCTS_DIR; };
771 812
 		41EC7F951821BE3900142613 /* #!.scion */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "#!.scion"; sourceTree = "<group>"; };
813
+		41F02AC91A94DA06005F2E97 /* NSString+TrimTextFromExamples.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+TrimTextFromExamples.h"; sourceTree = "<group>"; };
814
+		41F02ACA1A94DA06005F2E97 /* NSString+TrimTextFromExamples.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+TrimTextFromExamples.m"; sourceTree = "<group>"; };
772 815
 		41F0CDD318296756000057D5 /* NSFileHandle+MulleOutputFileHandle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSFileHandle+MulleOutputFileHandle.h"; sourceTree = "<group>"; };
773 816
 		41F0CDD418296756000057D5 /* NSFileHandle+MulleOutputFileHandle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSFileHandle+MulleOutputFileHandle.m"; sourceTree = "<group>"; };
774 817
 		41F12D4416E274D100120E63 /* MulleScionNull.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MulleScionNull.h; sourceTree = "<group>"; };
... ...
@@ -971,6 +1014,7 @@
971 1014
 				41DD56B516E3F7A600C4D68A /* MulleScionObjectModel+MulleMongoose.h */,
972 1015
 				41DD56B616E3F7A600C4D68A /* MulleScionObjectModel+MulleMongoose.m */,
973 1016
 				4121DB0816DD410D00BFD60C /* MulleScionLibrary */,
1017
+				41CFAFED1A93E18500B0783A /* hoedown */,
974 1018
 				41CD1AB818E98595003A7191 /* Graphviz */,
975 1019
 				41DCAF6E16DE557100C5A74E /* MulleScion-Info.plist */,
976 1020
 				41B727041908F4FC004343E9 /* MulleScion.podspec */,
... ...
@@ -988,11 +1032,13 @@
988 1032
 				41DD56A716E39BF200C4D68A /* index.scion */,
989 1033
 				41DD56B416E3E95C00C4D68A /* _wrapper.scion */,
990 1034
 				41EA51AE16E505A800D3B0AD /* __scion_macros.scion */,
1035
+				415C401D1A9641010072B73A /* __demo.scion */,
991 1036
 				41DD56AD16E3D1FF00C4D68A /* __scion_banner.scion */,
992 1037
 				41DD56A916E3CF3F00C4D68A /* __scion_navigation.scion */,
993 1038
 				41DD56AA16E3CFF300C4D68A /* __page.scion */,
994 1039
 				41DD56AB16E3D14100C4D68A /* __scion_page.scion */,
995 1040
 				41DD56AC16E3D15C00C4D68A /* __scion_footer.scion */,
1041
+				41AE2D7D1A92580D009E21CB /* __scion_style.scion */,
996 1042
 				4121DB0B16DD5E0B00BFD60C /* !_Introduction.scion */,
997 1043
 				4121DAFE16DD048800BFD60C /* Formatting_Options.scion */,
998 1044
 				411F98AD16E0FBE600738250 /* Global_Variables.scion */,
... ...
@@ -1047,6 +1093,37 @@
1047 1093
 			name = Graphviz;
1048 1094
 			sourceTree = "<group>";
1049 1095
 		};
1096
+		41CFAFED1A93E18500B0783A /* hoedown */ = {
1097
+			isa = PBXGroup;
1098
+			children = (
1099
+				41CFB0071A93E1FA00B0783A /* Hoedown.h */,
1100
+				41CFB0081A93E1FA00B0783A /* Hoedown.m */,
1101
+				411F77F71A94A29B00307651 /* Hoedown+MulleScionPrinting.h */,
1102
+				41CFB00B1A93E21800B0783A /* Hoedown+MulleScionPrinting.m */,
1103
+				41F02AC91A94DA06005F2E97 /* NSString+TrimTextFromExamples.h */,
1104
+				41F02ACA1A94DA06005F2E97 /* NSString+TrimTextFromExamples.m */,
1105
+				41CFB00D1A93E28F00B0783A /* NSData+Hoedown.h */,
1106
+				41CFB00E1A93E28F00B0783A /* NSData+Hoedown.m */,
1107
+				41CFAFEE1A93E1E500B0783A /* autolink.h */,
1108
+				41CFAFEF1A93E1E500B0783A /* buffer.h */,
1109
+				41CFAFF01A93E1E500B0783A /* document.h */,
1110
+				41CFAFF11A93E1E500B0783A /* escape.h */,
1111
+				41CFAFF21A93E1E500B0783A /* html.h */,
1112
+				41CFAFF31A93E1E500B0783A /* stack.h */,
1113
+				41CFAFF41A93E1E500B0783A /* version.h */,
1114
+				41CFAFF51A93E1E500B0783A /* autolink.c */,
1115
+				41CFAFF61A93E1E500B0783A /* buffer.c */,
1116
+				41CFAFF71A93E1E500B0783A /* document.c */,
1117
+				41CFAFF81A93E1E500B0783A /* escape.c */,
1118
+				41CFAFF91A93E1E500B0783A /* html_blocks.c */,
1119
+				41CFAFFA1A93E1E500B0783A /* html_smartypants.c */,
1120
+				41CFAFFB1A93E1E500B0783A /* html.c */,
1121
+				41CFAFFC1A93E1E500B0783A /* stack.c */,
1122
+				41CFAFFD1A93E1E500B0783A /* version.c */,
1123
+			);
1124
+			path = hoedown;
1125
+			sourceTree = "<group>";
1126
+		};
1050 1127
 		41D6DE9F16DE28B8004833D6 /* MulleScionPrinter */ = {
1051 1128
 			isa = PBXGroup;
1052 1129
 			children = (
... ...
@@ -1665,9 +1742,22 @@
1665 1742
 			isa = PBXSourcesBuildPhase;
1666 1743
 			buildActionMask = 2147483647;
1667 1744
 			files = (
1745
+				41CFB00F1A93E28F00B0783A /* NSData+Hoedown.m in Sources */,
1668 1746
 				41764B9316DA511200560FCF /* main.m in Sources */,
1747
+				41CFAFFF1A93E1E500B0783A /* buffer.c in Sources */,
1748
+				41CFB0001A93E1E500B0783A /* document.c in Sources */,
1749
+				41CFB0091A93E1FA00B0783A /* Hoedown.m in Sources */,
1750
+				41CFB0031A93E1E500B0783A /* html_smartypants.c in Sources */,
1751
+				41CFB0061A93E1E500B0783A /* version.c in Sources */,
1669 1752
 				41DD569F16E376F600C4D68A /* mongoose.c in Sources */,
1670 1753
 				41DD56A216E376FF00C4D68A /* MulleMongoose.m in Sources */,
1754
+				41CFB0041A93E1E500B0783A /* html.c in Sources */,
1755
+				41CFB00C1A93E21800B0783A /* Hoedown+MulleScionPrinting.m in Sources */,
1756
+				41CFAFFE1A93E1E500B0783A /* autolink.c in Sources */,
1757
+				41CFB0021A93E1E500B0783A /* html_blocks.c in Sources */,
1758
+				41CFB0051A93E1E500B0783A /* stack.c in Sources */,
1759
+				41CFB0011A93E1E500B0783A /* escape.c in Sources */,
1760
+				41F02ACB1A94DA06005F2E97 /* NSString+TrimTextFromExamples.m in Sources */,
1671 1761
 				41DD56B716E3F7A700C4D68A /* MulleScionObjectModel+MulleMongoose.m in Sources */,
1672 1762
 			);
1673 1763
 			runOnlyForDeploymentPostprocessing = 0;
... ...
@@ -2181,7 +2271,7 @@
2181 2271
 			buildSettings = {
2182 2272
 				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
2183 2273
 				CLANG_WARN_INT_CONVERSION = YES;
2184
-				CURRENT_PROJECT_VERSION = 1849.0;
2274
+				CURRENT_PROJECT_VERSION = 1851.0;
2185 2275
 				DYLIB_COMPATIBILITY_VERSION = 1848.0;
2186 2276
 				DYLIB_CURRENT_VERSION = "$(CURRENT_PROJECT_VERSION)";
2187 2277
 				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
... ...
@@ -2213,7 +2303,7 @@
2213 2303
 			buildSettings = {
2214 2304
 				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
2215 2305
 				CLANG_WARN_INT_CONVERSION = YES;
2216
-				CURRENT_PROJECT_VERSION = 1849.0;
2306
+				CURRENT_PROJECT_VERSION = 1851.0;
2217 2307
 				DYLIB_COMPATIBILITY_VERSION = 1848.0;
2218 2308
 				DYLIB_CURRENT_VERSION = "$(CURRENT_PROJECT_VERSION)";
2219 2309
 				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
... ...
@@ -2284,7 +2374,7 @@
2284 2374
 			buildSettings = {
2285 2375
 				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
2286 2376
 				CLANG_WARN_INT_CONVERSION = YES;
2287
-				CURRENT_PROJECT_VERSION = 1849.0;
2377
+				CURRENT_PROJECT_VERSION = 1851.0;
2288 2378
 				DYLIB_COMPATIBILITY_VERSION = 1848.0;
2289 2379
 				DYLIB_CURRENT_VERSION = "$(CURRENT_PROJECT_VERSION)";
2290 2380
 				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
... ...
@@ -72,6 +72,18 @@
72 72
             isEnabled = "YES">
73 73
          </CommandLineArgument>
74 74
       </CommandLineArguments>
75
+      <EnvironmentVariables>
76
+         <EnvironmentVariable
77
+            key = "MULLESCION_DUMP_FILEPATHS"
78
+            value = ""
79
+            isEnabled = "YES">
80
+         </EnvironmentVariable>
81
+         <EnvironmentVariable
82
+            key = "MULLESCION_DUMP_MACROS"
83
+            value = ""
84
+            isEnabled = "YES">
85
+         </EnvironmentVariable>
86
+      </EnvironmentVariables>
75 87
       <AdditionalOptions>
76 88
       </AdditionalOptions>
77 89
    </LaunchAction>
... ...
@@ -14,8 +14,9 @@ engine for PHP"
14 14
  
15 15
 * **Reasonably 
16 16
 Fast** :      *MulleScion* can compile templates into a compressed 
17
-               archive format. Loading such an archive is lots faster than 
18
-               parsing. A compiled template is read-only, you can use it many 
17
+               archive format. Loading such an archive ought to be lots faster 
18
+               than parsing (but because the parse is so fast, maybe isn't).
19
+               A compiled template is read-only, you can use it many 
19 20
                times to render different output from different input.
20 21
 
21 22
 * **Secure** :   *MulleScion* has hooks so your application can ensure 
... ...
@@ -63,8 +64,8 @@ This is the general architecture of *MulleScion*
63 64
 ![](/dox/MulleScionDataFlow.png "Data Flow Sketch")
64 65
 ![](http://www.mulle-kybernetik.com/software/git/MulleScion/raw/master/dox/MulleScionDataFlow.png "Data Flow Sketch")
65 66
 
66
-*MulleScion* is currently still pretty much a "happy path" project, but 
67
-it is being used in a commercial project. 
67
+*MulleScion* is happily used in a commercial project and has gone through 
68
+enough iterations to pronounce it "ready for production". 
68 69
 
69 70
 TOOLS
70 71
 =============
... ...
@@ -77,17 +78,18 @@ DOCUMENTATION
77 78
 =============
78 79
 
79 80
 Virtually all the documentation is contained in example **.scion** templates 
80
-in the `dox`folder. For each command or feature there should be a separate 
81
-template file that documents it. mulle-scion, the command line utility, contains 
82
-a small quickly hacked together webserver that can present the documentation 
83
-using *MulleScion* itself.
81
+in the `dox` folder. For each command or feature there should be a separate 
82
+template file that documents it. **mulle-scion**, the command line utility,
83
+contains  a small quickly hacked together webserver that can present the 
84
+documentation using *MulleScion* itself.
85
+
84 86
 In Xcode just run `Show Documentation in Webserver` and it should setup the 
85 87
 webserver and open your browser to the right address.
86 88
 
87 89
 MulleScion is very similar to TWIG, so you can glean much of relevance from 
88 90
 <http://twig.sensiolabs.org>. If you see a feature in TWIG but don't see it in 
89 91
 the tests file, it's likely not there (but it's probably easily achieved some 
90
-other way (define, macro, ObjC category on NSString).
92
+other way (using a `define` or a `macro` or an ObjC category on **NSString**).
91 93
 
92 94
 
93 95
 LIMITATIONS
... ...
@@ -1,6 +1,17 @@
1
-
2 1
 1851.0
3 2
 
3
+*** BIG CHANGE!!! FILTER REDESIGNED ***
4
+
5
+I decided to convert the documentation from ASCII into markdown. For that I
6
+needed a markdown filter. As it turns out, none of the libraries I found are
7
+able to do incremental rendering (bummer). This means, that the markdown filter
8
+I needed had to buffer all incoming strings until the endfilter was reached.
9
+That broke a lot of stuff.
10
+
11
+On a positive note, you can now nest filters and can tweak them a little with
12
+optional parameters.
13
+
14
+
4 15
 *** BIG CHANGE!!! ELSEFOR INSTEAD OF ELSE IN FOR-ENDFOR ***
5 16
 
6 17
 I messed up, when I "designed" aka hacked in the {% for else endfor %} feature
... ...
@@ -11,6 +22,16 @@ To keep in sync with the archive version, the version nr. has been bumped to
11 22
 1851.
12 23
 
13 24
 
25
+Improved the dependencyTable generation, by ignoring syntax errors.
26
+
27
+The documentation is now in a somewhat proprietary markdown format, because
28
+I use ```` instead of ```, but it should be harmless. With some hacking effort
29
+the builtin webserver can now show the "Results" much nicer.
30
+
31
+Stole a CSS to make it look more nicey, nicey.
32
+
33
+Improved the LICENSE detail.
34
+
14 35
 
15 36
 1848.11
16 37
 
... ...
@@ -1,113 +1,125 @@
1
-# Give it a try
1
+### Give it a try
2 2
 
3
-To try out these examples compile the project and put mulle-scion into your path.
3
+To try out an example, compile the project and put ``mulle-scion`` into your ``$PATH``.
4 4
 It's a commandline program.
5 5
 
6
-Run this example with:
6
+Run an example file like ``set.scion``
7 7
 
8
-   mulle-scion '!_Introduction.scion' properties.plist
8
+	mulle-scion 'dox/set.scion' 'dox/properties.plist'
9 9
 
10 10
 
11
-# General Structure
11
+## General Structure
12 12
 
13
-Comments are enclosed in '{' '#' and '#' '}'
13
+Comments are enclosed in ``{#`` and ``#}``.
14 14
 
15
-Expressions, i.e. values that produce output are enclosed in '{' '{' and '}' '}'
15
+Expressions, i.e. values that produce output are enclosed in ``{{`` and ``}}``.
16 16
 
17
-Commands are enclosed in '{' '%' and  '%' '}'. You can have multiple commands, 
18
-if you separate them with semicolons. Commands do not produce output. Everything
19
-between commends, expressions and commands is copied verbatim to the output.
17
+Commands are enclosed in ``{%`` and  ``%}``. You can have multiple commands, 
18
+if you separate them with semicolons or newlines. Commands do not produce
19
+output. Everything between comments, expressions and commands is copied verbatim
20
+to the output.
20 21
 
21 22
 
22
-# Commands
23
+### Commands
23 24
 
24
-MulleScion has a small assortment of logic commands like
25
-if else endif, for endfor, while endwhile together with various preprocessing
26
-commands like define, block and template. Look at the documentation of each
25
+**MulleScion** has a small assortment of logic commands like
26
+``if else endif``, ``for endfor``, ``while endwhile`` together with various preprocessing
27
+commands like ``define``, ``block`` and ``template``. Look at the documentation of each
27 28
 keyword for more information
28 29
 
29 30
 
30
-# Expressions
31
+### Expressions
31 32
 
32
-In a MulleScion template expressions are filled with properties from an object.
33
+In a **MulleScion** template expressions are filled with properties from an object.
33 34
 That object can be anything NSObject based. The data is accessed through 
34 35
 key value coding. Anything between two curly brackets '{' is called an 
35 36
 expression. The expresssion is evaluated and the resulting value is added to 
36 37
 the output.
37 38
 
38
-....
39
+#### Example 1
40
+````
39 41
 name={{ name }}
40
-....
42
+````
41 43
 
42 44
 Expressions can be postprocessed with pipes.
43 45
 
44
-....
46
+#### Example 2
47
+````
45 48
 when={{ name | lowercaseString }}
46
-....
49
+````
47 50
 
48 51
 Pipes can also contain ObjC calls with parameters, where the left side of the
49 52
 pipe is substituted for self in the right side.
50 53
 
51
-....
52
-when={{ name | [self stringByReplacingOccurrencesOfString:@" 1848" withString:@""] }}
53
-....
54 54
 
55
+#### Example 3
56
+````
57
+when={{ name | [self stringByReplacingOccurrencesOfString:@" 1848" withString:@""] }}
58
+````
55 59
 
60
+## Key Value Coding
56 61
 
57
-# Key Value Coding
62
+As that can become unwieldy, you can use a ``define`` to make common calls nicer to read.
58 63
 
59
-As that can becomen unwieldy, you can use a define to make common calls nicer to read.
60
-....
64
+#### Example 4
65
+````
61 66
 {% define no1848 = [self stringByReplacingOccurrencesOfString:@" 1848"
62
-                                                     withString:@""] %}
67
+                                                   withString:@""] %}
63 68
 when={{ name | no1848 }}
64
-....
69
+````
70
+
65 71
 
66
-You have full key value coding available. With for loops can you iterate over
67
-collections just like NSEnumerator (it is in an NSEnumerator internally :))
72
+You have full key value coding available. With ``for`` loops can you iterate over
73
+collections just like **NSEnumerator** (it is in an **NSEnumerator** internally :))
68 74
 
69
-....
75
+
76
+
77
+#### Example 5
78
+````
70 79
 The bag contains {{ bag.@count }} entries
71 80
 {% if defined( "bag") %}
72
- {% for item in [bag allKeys] %}
81
+{% for item in [bag allKeys] %}
73 82
    {{ [bag objectForKey:item] }}
74
- {% endfor %}
83
+{% endfor %}
75 84
 {% endif %}
76
-...
85
+````
77 86
 
78 87
 But with dots separated by spaces you can do even more complicated KVC.
79 88
 
80 89
 
81
-# Multiline commands
90
+## Multiline commands
82 91
 
83
-You can place multiple commands within one'{' '%' and  '%' '}'container. 
92
+You can place multiple commands within one ``{%`` and  ``%}`` container.
84 93
 Separate the commands with semicolon or newlines. For convenience you can mix
85
-output expressions '{' '{' '}' '}' with commands. The above example then could
94
+output expressions ``{{`` ``}}`` with commands. The above example then could
86 95
 be written equivalently as
87 96
 
88
-....
97
+
98
+#### Example 6
99
+````
89 100
 The bag contains {{ bag.@count }} entries
90
-{% 
91
-  if defined( "bag")
92
-     for item in [bag allKeys]
93
-        {{ @"   " }} {{ [bag objectForKey:item] }} {{ @"\n" }}
94
-     endfor
95
-  endif 
96
- %}
97
-...
101
+{%
102
+   if defined( "bag")
103
+      for item in [bag allKeys]
104
+         {{ @"   " }} {{ [bag objectForKey:item] }} {{ @"\n" }}
105
+      endfor
106
+   endif
107
+%}
108
+````
98 109
 
99 110
 Not all commands may appear in multiline commands. You can use
100 111
 
101
-block/endblock
102
-define
103
-extends
104
-includes
105
-macro
106
-requires
107
-verbatim
112
+* ``block/endblock``
113
+* ``define``
114
+* ``extends``
115
+* ``includes``
116
+* ``macro``
117
+* ``requires``
118
+* ``verbatim``
108 119
 
109 120
 only in single line commands.
110 121
 
122
+<cite>See [properties.plist](properties.plist) for the values used in this example.</cite>
111 123
 
112 124
 
113 125
 
... ...
@@ -1,15 +1,18 @@
1 1
 #! /usr/local/bin/mulle-scion
2
-{# #}
3
-You can make scion files into unix script files, if you use the mulle-scion
2
+
3
+You can use scion files as unix script files, if you use the `mulle-scion`
4 4
 command and prefix your script file and make it executable
5 5
 
6
-#! /usr/local/bin/mulle-scion
6
+	#! /usr/local/bin/mulle-scion
7 7
 
8
-There are two environment variables MULLESCION_VERBATIM_INCLUDE_HASHBANG and
9
-MULLESCION_NO_HASHBANG to turn this feature off.
8
+There are two environment variables `MULLESCION_VERBATIM_INCLUDE_HASHBANG` and
9
+`MULLESCION_NO_HASHBANG` to turn this feature off. This might be useful, if you
10
+want to produce shell scripts using **MulleScion**.
10 11
 
11 12
 Lets run a simple example.
12 13
 
14
+#### Example
15
+````
13 16
 {%
14 17
    file  = [NSFileHandle fileHandleForReadingAtPath:@"/etc/hostconfig"];
15 18
    data  = [file readDataToEndOfFile];
... ...
@@ -35,3 +38,4 @@ hostconfig:
35 38
 {% for key in [[dict allKeys] sortedArrayUsingSelector:@selector( compare:)] %}
36 39
    {{ key }} = {{ dict[ key] }}
37 40
 {% endfor %}
41
+````
... ...
@@ -1,9 +1,17 @@
1
-{% [NSDateFormatter setDefaultFormatterBehavior:1000] %}
2
-{% [NSNumberFormatter setDefaultFormatterBehavior:1000] %}
3
-{# #}
4
-{% MulleScionDateFormat = @"--%y/%m/%d--" %}
1
+#### Example 1
2
+````
3
+{%
4
+   [NSDateFormatter setDefaultFormatterBehavior:1000]
5
+   [NSNumberFormatter setDefaultFormatterBehavior:1000]
6
+
7
+   MulleScionDateFormat = @"--%y/%m/%d--"
8
+%}
5 9
 {{ [NSDate date] }}
6
-{# and output a number #}
10
+````
11
+
12
+#### Example 2
13
+````
7 14
 {% MulleScionNumberFormat = @"#0.00" %}
8 15
 {{ [NSNumber numberWithDouble:0.1234] }}
16
+````
9 17
 
... ...
@@ -1,64 +1,53 @@
1
-Formatting Variables
2
-==================
3
-MulleScionDateFormatter         A NSDateFormatter object to use for number 
4
-                                formatting
5
-MulleScionNumberFormatter       A NSNumberFormatter object to use for number 
6
-                                formatting
7
-MulleScionDateFormat            The dateString to use for the NSDateFormatter
8
-                                formatting
9
-MulleScionNumberFormat          The formatString to use for the NSNumberFormatter
10
-                                formatting
11
-MulleScionLocale                The NSLocale to use for NSDate and NSNumber
12
-MulleScionNilDescription        What to print in place of a nil value
13
-MulleScionStringLength          If defined the maximum string length to output 
14
-                                for any string value in expressions.
15
-MulleScionStringEllipsis        If string gets truncated by 
16
-                                MulleScionStringLength what to print at the end
17
-                                to indicate truncation
1
+### Formatting Variables
2
+
3
+Name                              | Description
4
+----------------------------------|-----------------------------------
5
+``MulleScionDateFormatter``       | A **NSDateFormatter** object to use for number formatting
6
+``MulleScionNumberFormatter``     | A **NSNumberFormatter** object to use for number formatting
7
+``MulleScionDateFormat``          | The format string to use for the **NSDateFormatter** formatting
8
+``MulleScionNumberFormat``        | The format string to use for the **NSNumberFormatter** formatting
9
+``MulleScionLocale``              | The **NSLocale** to use for **NSDate** and **NSNumber**
10
+``MulleScionNilDescription``      | What to print in place of a **nil** value
11
+``MulleScionStringLength``        | If defined: the maximum string length to output for any string value in expressions.
12
+``MulleScionStringEllipsis``      | If string gets truncated by **MulleScionStringLength** what to print at the end to indicate truncation
13
+
14
+
15
+### Internal Variables
16
+
17
+Name                              | Description
18
+----------------------------------|-----------------------------------
19
+``__OUTPUT__``                    | The object output gets rendered to
20
+``__FILE__``                      | The current template file
21
+``__LINE__``                      | The current line in the template file
22
+``__FUNCTION__``                  | The currently executing function
23
+``__FILTER__``                    | The currently installed filter chain
24
+``__FILTER_STACK__``              | The previous filters chain
25
+``__FILTER_MODE__``               | The currently installed filter mode
26
+``__FILTER_MODE_STACK__``         | The previous filters chain modes
27
+``__SELF_REPLACEMENT__``          | The object that the identifier 'self' gets replaced with
28
+
29
+### Predefined Variables
30
+
31
+
32
+A small selection of **Foundation** constants is predefined for convenience.
33
+
34
+* ``NSNotFound``
35
+* ``NSOrderedAscending``
36
+* ``NSOrderedDescending``
37
+* ``NSOrderedSame``
38
+* ``NSASCIIStringEncoding``
39
+* ``NSISOLatin1StringEncoding``
40
+* ``NSMacOSRomanStringEncoding``
41
+* ``NSUTF32StringEncoding``
42
+* ``NSUTF8StringEncoding``
43
+* ``NSUnicodeStringEncoding``
44
+
45
+
46
+### Variables available through **mulle-scion**
47
+
48
+Name                              | Description
49
+----------------------------------|-----------------------------------
50
+``MulleScionRootTemplate``        | available when printing with mulle-scion, it's the path of the template from the command line
51
+``MulleScionPropertyListName``    | available when printing with mulle-scion, it's the path of the property list from the command line
52
+``__ARGV__``                      | command line arguments passed
18 53
 
19
-Internal Variables
20
-==================
21
-
22
-__OUTPUT__                      The object output gets rendered to
23
-__FILE__                        The current template file 
24
-__LINE__                        The current line in the template file
25
-__FUNCTION__                    The currently executing function 
26
-__FILTER__                      The currently installed filter chain
27
-__FILTER_STACK__                The previous filter chains
28
-__SELF_REPLACEMENT__            The object that the identifier 'self' gets 
29
-                                replaced with
30
-__SHOULD_FILTER_PLAINTEXT__     The filter will be applied to plain text (default 
31
-                                is YES, for Twig compatibility.)
32
-
33
-__ARGV__                        (Optional) command line arguments passed in 
34
-                                by mulle-scion
35
-
36
-Predefined Variables
37
-====================
38
-
39
-A small selection of Foundation constants is predefined for convenience.
40
-
41
-NSNotFound
42
-
43
-NSOrderedAscending
44
-NSOrderedDescending
45
-NSOrderedSame
46
-
47
-NSASCIIStringEncoding
48
-NSISOLatin1StringEncoding
49
-NSMacOSRomanStringEncoding
50
-NSUTF32StringEncoding
51
-NSUTF8StringEncoding
52
-NSUnicodeStringEncoding
53
-
54
-
55
-Variables available through mulle-scion
56
-=======================================
57
-
58
-MulleScionRootTemplate		available when printing with mulle-scion, it's 
59
-                                the path of the template from the command line 
60
-
61
-                      
62
-MulleScionPropertyListName	available when printing with mulle-scion, it's 
63
-                                the path of the property list from the command 
64
-                                line                     
... ...
@@ -1,6 +1,10 @@
1 1
 For those special moments, when you really want to do string operations in
2
-the template and you need NSRange: there is a NSMakeRange function built in:
2
+the template and you need **NSRange**: there is a **NSMakeRange** function
3
+built in.
3 4
 
5
+#### Example
6
+````
4 7
 {{ [@"VfL Bochum 1848" substringWithRange:NSMakeRange( 4, 6)] }}
5 8
 {# stupid pet tricks, achived by a category on NSValue #}
6
-{{ [@"VfL Bochum 1848" rangeOfString:@"18"].location }}
7 9
\ No newline at end of file
10
+{{ [@"VfL Bochum 1848" rangeOfString:@"18"].location }}
11
+````
... ...
@@ -1,10 +1,18 @@
1
-Within MulleScion you can use regular Objective-C method call syntax.
1
+Within **MulleScion** you can use regular Objective-C method call syntax.
2 2
 
3
+#### Example 1
4
+````
3 5
 {{ [NSDate date] }}
6
+````
4 7
 
5 8
 But you can also use '[' ']' in the "modern" way, to access dictonaries and
6
-array. So if you don't want to write objectAtIndex: and objectForKey: you 
7
-can also use
9
+array. So if you don't want to write `objectAtIndex:` or `objectForKey:` you
10
+can also use:
8 11
 
9
-{{ bag[ "a" ] }}
10
-{{ list[ 1] }}
12
+#### Example 2
13
+````
14
+{{ bag[ "a" ] }}  # where bag is a NSDictionary
15
+{{ list[ 1] }}    # where list is a NSArray
16
+````
17
+
18
+<cite>See [properties.plist](properties.plist) for the values used in this example.</cite>
11 19
new file mode 100644
... ...
@@ -0,0 +1,3 @@
1
+{% block demo %}
2
+Here is just some plaintext and {{ @"an expression" }}
3
+{% endblock %}
0 4
\ No newline at end of file
... ...
@@ -2,9 +2,10 @@
2 2
    <head>
3 3
        <title>{% block scion_title %}MulleScion{% endblock %}</title>
4 4
         {% block scion_header_additions %}{% endblock %}
5
+        {% block scion_style %}{% endblock %}
5 6
    </head>
6 7
    <body>
7 8
      {% block scion_body %}{% endblock %}
8 9
      {% block scion_footer %}{% endblock %}
9 10
    </body>
10
-</html>
11 11
\ No newline at end of file
12
+</html>
... ...
@@ -1,6 +1,6 @@
1
-<table width="100%" height=72 bgcolor="black" border=0 valign="center">
2
-  <tr>
3
-  <td><a href="http://www.mulle-kybernetik.com"><img src="http://www.mulle-kybernetik.com/pix/GenericMulleIcon64.png"></a></td>
4
-  <td><H1><font color="white">MulleScion</font>/H1></td>
1
+<table width="100%" height=72 border=0 valign="center">
2
+  <tr style="border: 0px">
3
+  <td style="border: 0px"><a href="http://www.mulle-kybernetik.com"><img src="http://www.mulle-kybernetik.com/pix/GenericMulleIcon64.png"></a></td>
4
+  <td style="border: 0px"><h1>MulleScion</h1></td>
5 5
  </tr>
6 6
 </table>
... ...
@@ -8,4 +8,19 @@
8 8
  <table>
9 9
   {% for file in file_list %}{{ file#.header }}<a href="{{ file | urlEscapedString }}{{ wrapper }}">{{ [file isEqualToString:@"dot.scion"] ? @"." : [file stringByDeletingPathExtension] }}</a>{{ file#.footer }}{% endfor %}
10 10
  </table>
11
-{% endmacro %}
12 11
\ No newline at end of file
12
+{% endmacro %}
13
+
14
+
15
+{% macro wrapper_navigation_extension( templatename) %}
16
+   {%
17
+      dependencyTable = [MulleScionTemplate dependencyTableOfFile:templatename];
18
+      value           = dependencyTable[ templatename];
19
+      if [value count]
20
+         result = [[value allObjects] sortedArrayUsingSelector:@selector( compare:)]
21
+   %}
22
+       <hr>
23
+       {% html_file_list_table( file_list=result) %}
24
+   {% endif %}
25
+{% endmacro %}
26
+
27
+
... ...
@@ -1,12 +1,20 @@
1 1
 {% extends "__page.scion" %}
2 2
 
3
+{% block scion_style %}{% includes "__scion_style.scion" %}{% endblock %}
4
+
3 5
 {% block scion_body %}
4
-{% block scion_banner %}{% includes "__scion_banner.scion" %}{% endblock %}
5
-<p>
6
-{% block scion_navigation %}{% includes "__scion_navigation.scion" %}{% endblock %}
7
-{% block scion_navigation_extension %}{% endblock %}
8
-<hr>
9
-{% block scion_contents %}no contents{% endblock %}
6
+<div id="wrap">
7
+  {% block scion_banner %}{% includes "__scion_banner.scion" %}{% endblock %}
8
+ <p>
9
+ <div id="nav">
10
+  {% block scion_navigation %}{% includes "__scion_navigation.scion" %}{% endblock %}
11
+  {% block scion_navigation_extension %}{% endblock %}
12
+ </div>
13
+ <hr>
14
+ <div id="main">
15
+   {% block scion_contents %}no contents{% endblock %}
16
+ </div>
17
+</div>
10 18
 {% endblock %}
11 19
 
12 20
 {% block scion_footer %}{% includes "__scion_footer.scion" %}{% endblock %}
... ...
@@ -1,61 +1,309 @@
1
+{# "github2": stolen css from Macdown, which stole it from Mou, which possibly
2
+              got inspired by github
3
+#}
1 4
 <style type="text/css" media="screen, print, projection">
2
-	body,
3
-	html {
4
-		margin:0;
5
-		padding:0;
6
-		color:#000;
7
-		background:#a7a09a;
8
-	}
9
-	#wrap {
10
-		width:750px;
11
-		margin:0 auto;
12
-		background:#99c;
13
-	}
14
-	#header {
15
-    	padding:5px 10px;
16
-		background:#ddd;
17
-	}
18
-	h1 {
19
-	    margin:0;
5
+body {
6
+  font-family: Helvetica, arial, sans-serif;
7
+  font-size: 14px;
8
+  line-height: 1.6;
9
+  padding-top: 10px;
10
+  padding-bottom: 10px;
11
+  background-color: white;
12
+  padding: 30px; }
13
+
14
+body > *:first-child {
15
+  margin-top: 0 !important; }
16
+body > *:last-child {
17
+  margin-bottom: 0 !important; }
18
+
19
+a {
20
+  color: #4183C4; }
21
+a.absent {
22
+  color: #cc0000; }
23
+a.anchor {
24
+  display: block;
25
+  padding-left: 30px;
26
+  margin-left: -30px;
27
+  cursor: pointer;
28
+  position: absolute;
29
+  top: 0;
30
+  left: 0;
31
+  bottom: 0; }
32
+
33
+h1, h2, h3, h4, h5, h6 {
34
+  margin: 20px 0 10px;
35
+  padding: 0;
36
+  font-weight: bold;
37
+  -webkit-font-smoothing: antialiased;
38
+  cursor: text;
39
+  position: relative; }
40
+
41
+h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor, h5:hover a.anchor, h6:hover a.anchor {
42
+  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA09pVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoMTMuMCAyMDEyMDMwNS5tLjQxNSAyMDEyLzAzLzA1OjIxOjAwOjAwKSAgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OUM2NjlDQjI4ODBGMTFFMTg1ODlEODNERDJBRjUwQTQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OUM2NjlDQjM4ODBGMTFFMTg1ODlEODNERDJBRjUwQTQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo5QzY2OUNCMDg4MEYxMUUxODU4OUQ4M0REMkFGNTBBNCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo5QzY2OUNCMTg4MEYxMUUxODU4OUQ4M0REMkFGNTBBNCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsQhXeAAAABfSURBVHjaYvz//z8DJYCRUgMYQAbAMBQIAvEqkBQWXI6sHqwHiwG70TTBxGaiWwjCTGgOUgJiF1J8wMRAIUA34B4Q76HUBelAfJYSA0CuMIEaRP8wGIkGMA54bgQIMACAmkXJi0hKJQAAAABJRU5ErkJggg==) no-repeat 10px center;
43
+  text-decoration: none; }
44
+
45
+h1 tt, h1 code {
46
+  font-size: inherit; }
47
+
48
+h2 tt, h2 code {
49
+  font-size: inherit; }
50
+
51
+h3 tt, h3 code {
52
+  font-size: inherit; }
53
+
54
+h4 tt, h4 code {
55
+  font-size: inherit; }
56
+
57
+h5 tt, h5 code {
58
+  font-size: inherit; }
59
+
60
+h6 tt, h6 code {
61
+  font-size: inherit; }
62
+
63
+h1 {
64
+  font-size: 28px;
65
+  color: black; }
66
+
67
+h2 {
68
+  font-size: 24px;
69
+  border-bottom: 1px solid #cccccc;
70
+  color: black; }
71
+
72
+h3 {
73
+  font-size: 18px; }
74
+
75
+h4 {
76
+  font-size: 16px; }
77
+
78
+h5 {
79
+  font-size: 14px; }
80
+
81
+h6 {
82
+  color: #777777;
83
+  font-size: 14px; }
84
+
85
+p, blockquote, ul, ol, dl, li, table, pre {
86
+  margin: 15px 0; }
87
+
88
+hr {
89
+  background: transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAECAYAAACtBE5DAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OENDRjNBN0E2NTZBMTFFMEI3QjRBODM4NzJDMjlGNDgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OENDRjNBN0I2NTZBMTFFMEI3QjRBODM4NzJDMjlGNDgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4Q0NGM0E3ODY1NkExMUUwQjdCNEE4Mzg3MkMyOUY0OCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo4Q0NGM0E3OTY1NkExMUUwQjdCNEE4Mzg3MkMyOUY0OCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PqqezsUAAAAfSURBVHjaYmRABcYwBiM2QSA4y4hNEKYDQxAEAAIMAHNGAzhkPOlYAAAAAElFTkSuQmCC) repeat-x 0 0;
90
+  border: 0 none;
91
+  color: #cccccc;
92
+  height: 4px;
93
+  padding: 0;
94
+}
95
+
96
+body > h2:first-child {
97
+  margin-top: 0;
98
+  padding-top: 0; }
99
+body > h1:first-child {
100
+  margin-top: 0;
101
+  padding-top: 0; }
102
+  body > h1:first-child + h2 {
103
+    margin-top: 0;
104
+    padding-top: 0; }
105
+body > h3:first-child, body > h4:first-child, body > h5:first-child, body > h6:first-child {
106
+  margin-top: 0;
107
+  padding-top: 0; }
108
+
109
+a:first-child h1, a:first-child h2, a:first-child h3, a:first-child h4, a:first-child h5, a:first-child h6 {
110
+  margin-top: 0;
111
+  padding-top: 0; }
112
+
113
+h1 p, h2 p, h3 p, h4 p, h5 p, h6 p {
114
+  margin-top: 0; }
115
+
116
+li p.first {
117
+  display: inline-block; }
118
+li {
119
+  margin: 0; }
120
+ul, ol {
121
+  padding-left: 30px; }
122
+
123
+ul :first-child, ol :first-child {
124
+  margin-top: 0; }
125
+
126
+dl {
127
+  padding: 0; }
128
+  dl dt {
129
+    font-size: 14px;
130
+    font-weight: bold;
131
+    font-style: italic;
132
+    padding: 0;
133
+    margin: 15px 0 5px; }
134
+    dl dt:first-child {
135
+      padding: 0; }
136
+    dl dt > :first-child {
137
+      margin-top: 0; }
138
+    dl dt > :last-child {
139
+      margin-bottom: 0; }
140
+  dl dd {
141
+    margin: 0 0 15px;
142
+    padding: 0 15px; }
143
+    dl dd > :first-child {
144
+      margin-top: 0; }
145
+    dl dd > :last-child {
146
+      margin-bottom: 0; }
147
+
148
+blockquote {
149
+  border-left: 4px solid #dddddd;
150
+  padding: 0 15px;
151
+  color: #777777; }
152
+  blockquote > :first-child {
153
+    margin-top: 0; }
154
+  blockquote > :last-child {
155
+    margin-bottom: 0; }
156
+
157
+table {
158
+  padding: 0;border-collapse: collapse; }
159
+  table tr {
160
+    border-top: 1px solid #cccccc;
161
+    background-color: white;
162
+    margin: 0;
163
+    padding: 0; }
164
+    table tr:nth-child(2n) {
165
+      background-color: #f8f8f8; }
166
+    table tr th {
167
+      font-weight: bold;
168
+      border: 1px solid #cccccc;
169
+      margin: 0;
170
+      padding: 6px 13px; }
171
+    table tr td {
172
+      border: 1px solid #cccccc;
173
+      margin: 0;
174
+      padding: 6px 13px; }
175
+    table tr th :first-child, table tr td :first-child {
176
+      margin-top: 0; }
177
+    table tr th :last-child, table tr td :last-child {
178
+      margin-bottom: 0; }
179
+
180
+img {
181
+  max-width: 100%; }
182
+
183
+span.frame {
184
+  display: block;
185
+  overflow: hidden; }
186
+  span.frame > span {
187
+    border: 1px solid #dddddd;
188
+    display: block;
189
+    float: left;
190
+    overflow: hidden;
191
+    margin: 13px 0 0;
192
+    padding: 7px;
193
+    width: auto; }
194
+  span.frame span img {
195
+    display: block;
196
+    float: left; }
197
+  span.frame span span {
198
+    clear: both;
199
+    color: #333333;
200
+    display: block;
201
+    padding: 5px 0 0; }
202
+span.align-center {
203
+  display: block;
204
+  overflow: hidden;
205
+  clear: both; }
206
+  span.align-center > span {
207
+    display: block;
208
+    overflow: hidden;
209
+    margin: 13px auto 0;
210
+    text-align: center; }
211
+  span.align-center span img {
212
+    margin: 0 auto;
213
+    text-align: center; }
214
+span.align-right {
215
+  display: block;
216
+  overflow: hidden;
217
+  clear: both; }
218
+  span.align-right > span {
219
+    display: block;
220
+    overflow: hidden;
221
+    margin: 13px 0 0;
222
+    text-align: right; }
223
+  span.align-right span img {
224
+    margin: 0;
225
+    text-align: right; }
226
+span.float-left {
227
+  display: block;
228
+  margin-right: 13px;
229
+  overflow: hidden;
230
+  float: left; }
231
+  span.float-left span {
232
+    margin: 13px 0 0; }
233
+span.float-right {
234
+  display: block;
235
+  margin-left: 13px;
236
+  overflow: hidden;
237
+  float: right; }
238
+  span.float-right > span {
239
+    display: block;
240
+    overflow: hidden;
241
+    margin: 13px auto 0;
242
+    text-align: right; }
243
+
244
+code, tt {
245
+  margin: 0 2px;
246
+  padding: 0 5px;
247
+  white-space: nowrap;
248
+  border: 1px solid #eaeaea;
249
+  background-color: #f8f8f8;
250
+  border-radius: 3px; }
251
+
252
+pre code {
253
+  margin: 0;
254
+  padding: 0;
255
+  white-space: pre;
256
+  border: none;
257
+  background: transparent; }
258
+
259
+.highlight pre {
260
+  background-color: #f8f8f8;
261
+  border: 1px solid #cccccc;
262
+  font-size: 13px;
263
+  line-height: 19px;
264
+  overflow: auto;
265
+  padding: 6px 10px;
266
+  border-radius: 3px; }
267
+
268
+pre {
269
+  background-color: #f8f8f8;
270
+  border: 1px solid #cccccc;
271
+  font-size: 13px;
272
+  line-height: 19px;
273
+  overflow: auto;
274
+  padding: 6px 10px;
275
+  border-radius: 3px; }
276
+  pre code, pre tt {
277
+    background-color: transparent;
278
+    border: none; }
279
+
280
+sup {
281
+    font-size: 0.83em;
282
+    vertical-align: super;
283
+    line-height: 0;
284
+}
285
+* {
286
+	-webkit-print-color-adjust: exact;
287
+}
288
+@media screen and (min-width: 914px) {
289
+    body {
290
+        width: 854px;
291
+        margin:0 auto;
20 292
     }
21
-	#nav {
22
-		padding:5px 10px;
23
-		background:#c99;
24
-	}
25
-	#nav ul {
26
-		margin:0;
27
-		padding:0;
28
-		list-style:none;
29
-	}
30
-	#nav li {
31
-		display:inline;
32
-		margin:0;
33
-		padding:0;
293
+}
294
+@media print {
295
+	table, pre {
296
+		page-break-inside: avoid;
34 297
 	}
35
-	#main {
36
-		float:left;
37
-		width:480px;
38
-		padding:10px;
39
-		background:#9c9;
40
-	}
41
-	h2 {
42
-		margin:0 0 1em;
43
-	}
44
-	#sidebar {
45
-		float:right;
46
-		width:230px;
47
-		padding:10px;
48
-		background:#99c;
49
-	}
50
-	#footer {
51
-		clear:both;
52
-		padding:5px 10px;
53
-		background:#cc9;
54
-	}
55
-	#footer p {
56
-		margin:0;
57
-    }
58
-	* html #footer {
59
-		height:1px;
298
+	pre {
299
+		word-wrap: break-word;
60 300
 	}
301
+}
302
+#left {
303
+}
304
+#right {
305
+   margin-top: 100px;
306
+   background:#fcfcfc
307
+}
308
+
61 309
 	</style>
... ...
@@ -1,21 +1,37 @@
1 1
 {% extends "__scion_page.scion" %}
2 2
 
3 3
 {% block scion_contents %}
4
-<h2>Scion File</h2>
5
-<pre>{% filter htmlEscapedString %}{% includes verbatim "{$ WRAPPED_TEMPLATE $}" %}{% endfilter %}</pre>
6
-<h2>Results</h2>
7
-<pre>{% includes "{$ WRAPPED_TEMPLATE $}" %}</pre>
4
+   {% log @"producing left..." %}
5
+   <div id="left">
6
+      {% block scion_contents_left %}{% endblock %}
7
+   </div>
8
+
9
+   {% log @"producing right..." %}
10
+   <div id="right">
11
+      {% block scion_contents_right %}{% endblock %}
12
+   </div>
13
+{% endblock %}
14
+
15
+
16
+{% block scion_contents_left %}
17
+   <h2>{{ @"{$ WRAPPED_TEMPLATE $}" | stringByDeletingPathExtension }}</h2>
18
+   {% filter [Hoedown htmlEscapedFilter] %}
19
+   {% includes verbatim "{$ WRAPPED_TEMPLATE $}" %}
20
+   {% endfilter %}
21
+{% endblock %}
22
+
23
+
24
+{% block scion_contents_right %}
25
+   <h2>Results</h2>
26
+   <blockquote>
27
+   This is the output <b>MulleScion</b> generates from the examples above.
28
+   </blockquote>
29
+   {% filter [Hoedown regularFilter] %}
30
+   {% includes trimmedTextFromExamplesData "{$ WRAPPED_TEMPLATE $}" %}
31
+   {% endfilter %}
8 32
 {% endblock %}
9 33
 
10 34
 
11 35
 {% block scion_navigation_extension %}
12
- {##}
13
- {% dependencyTable = [MulleScionTemplate dependencyTableOfFile:"{$ WRAPPED_TEMPLATE $}"];
14
-   value = dependencyTable[ "{$ WRAPPED_TEMPLATE $}"];
15
-  %}
16
- {% if [value count] %}
17
-  {% result = [[value allObjects] sortedArrayUsingSelector:@selector( compare:)] %}
18
-  <hr>
19
-  {{ html_file_list_table( file_list=result) }}
20
- {% endif %}
36
+   {% wrapper_navigation_extension( "{$ WRAPPED_TEMPLATE $}") %}
21 37
 {% endblock %}
... ...
@@ -1,14 +1,22 @@
1
-A block marks marks a span of template content. It has an identifier.
1
+A `block` marks a span of template content. It has an identifier. If the block
2
+isn't referenced anywhere else, nothing special happens and the contents are
3
+simply output.
2 4
 
5
+#### Example 1
6
+````
3 7
 {% block myblock %}Like so my block{% endblock %}
8
+````
4 9
 
5
-A block can share an identifier, but this is more often than not a mistake :)
10
+A `block` can share it's identifier, but this is more often than not a mistake :)
6 11
 
12
+#### Example 2
13
+````
7 14
 {% block myblock %}Like this is so my other block{% endblock %}
15
+````
8 16
 
9
-On it's own a block contents are rendered as given into the template output. 
10
-Only in conjunction with "extends" does the block reveal its true use.
17
+On it's own a `block`s contents are rendered as given into the template output.
18
+Only in conjunction with [`extends`](extends.scion?wrapper=_wrapper.scion) does
19
+the `block` reveal its true usefulness.
11 20
 
12
-
13
-Can block/endblock be used in multi-line statements ? Preferably not.
21
+Can `block`/`endblock` be used in multi-line statements ? Preferably not.
14 22
 
... ...
@@ -1,15 +1,16 @@
1
-Define is something that is not in TWIG. A define is similiar to a preprocessor
2
-#define in C, the value gets substituted into the expression.
3
-Subsitution is only within template brackets. Substitution is done during the
4
-compilation of the template. 
5
-
1
+A `define` is similiar to a preprocessor `#define` in **C**, the value gets
2
+substituted into the expression. Subsitution is only within template brackets.
3
+Substitution is done during the compile stage of the template.
6 4
 
5
+#### Example 1
6
+````
7 7
 {% define PC = [self stringByReplacingOccurrencesOfString:@"S04"
8 8
                                                withString:@"***"] %}
9
-                                                 
9
+
10 10
 {% filter PC %}
11
-  VfL vs. S04 = 4:0
11
+   VfL vs. S04 = 4:0
12 12
 {% endfilter %}
13
+````
13 14
 
14
-Define is a command, that can not appear in multi-line statements.
15
-
15
+`define` is a command, that can not appear in multi-line statements.
16
+`define` is something that is not in TWIG.
... ...
@@ -1,15 +1,24 @@
1 1
 Dots between identifiers without spaces are your usual key value coding 
2 2
 keypath. 
3 3
 
4
+#### Example 1
5
+````
4 6
 {{ bag.a }}
7
+````
5 8
 
6 9
 If you leave spaces between the dots, the functionality expands, so
7 10
 that you can interpose arbitrary objects
8 11
 
12
+#### Example 2
13
+````
9 14
 {# Then you can also interpose methods if you want  #}
10
-{% z = [NSDictionary dictionaryWithObject:@"VfL Bochum 1848" forKey:@"c"] %}
11
-{% y = [NSDictionary dictionaryWithObject:z forKey:@"b"] %}
12
-{% x = [NSDictionary dictionaryWithObject:y forKey:@"a"] %}
13
-{{ x . a . b .c }}
15
+{%
16
+   z = [NSDictionary dictionaryWithObject:@"VfL Bochum 1848" forKey:@"c"]
17
+   y = [NSDictionary dictionaryWithObject:z forKey:@"b"]
18
+   x = [NSDictionary dictionaryWithObject:y forKey:@"a"]
19
+   {{ x . a . b .c }}
20
+   {{ x . a . [self objectForKey:@"b"] . c }}
21
+%}
22
+````
14 23
 
15
-{{ x . a . [self objectForKey:@"b"] . c }}
24
+<cite>See [properties.plist](properties.plist) for the values used in this example.</cite>
... ...
@@ -1,16 +1,31 @@
1
-Extends is a special kind of "includes". After the file to extend has been 
2
-included normal template parsing is suspended and only blocks and other 
3
-includes and extends statements are processed.
1
+`extends` is a special kind of [`includes`](/includes.scion?wrapper=_wrapper.scion).
2
+After the file to extend has been opened, normal template parsing is suspended
3
+and only blocks and other includes and extends statements are processed.
4 4
 
5
-Whenever a block is found in this state, the block is recorded for later
6
-substitution of previously read blocks in the non-suspended state. The last read
7
-block therefore wins. This in effect provides a form of template inheritance.
5
+Whenever a [`block`](/includes.scion?wrapper=_wrapper.scion) is found in this state,
6
+the block is recorded for later substitution of previously read blocks in the
7
+non-suspended state. The last read block therefore wins. This in effect provides
8
+a form of template inheritance.
8 9
 
9
-Whenever another "extends" command is found. Regular template processing resumes
10
+Whenever another `extends` command is found. Regular template processing resumes
10 11
 again, so that the extends command can perform an include (See first step).
11 12
 
12
-{% extends "block.scion" %}