feat: improve error handling and dictionary syntax
-
Twig ~ string concatenation now supported
-
NSString gains a -matches: method for simple and readable regexp match
-
NSLog() can now be used to print trace info to stderr
-
You can now say
defined(x)
in addition todefined( "x")
-
Enhanced error reporting and handling
- Improve parser warning/error method signatures for better error context
- Make error messages more scrutable with better formatting
- Add line number and column information to error output
-
Add modern dictionary initialization syntax
- Support @{ key: value } style dictionary initialization
- Maintain backwards compatibility with comma-separated syntax
- Update parser to handle both syntaxes
-
Improve variable handling and constants
- Add new MulleLocals class and protocol for local variables
- Support write-protected constants like NSAscending
- Keep compatibility with NSMutableDictionary
-
Add single-letter class language extensions
- Special handling for single letter class names
- Enable bash-like substitution syntax (e.g. [S:"foo/b/x"])
- Extend template language capabilities
-
Fix comparison and whitespace handling
- Fix nil == nil to return YES instead of NO
- Allow nil >= object comparisons
- Optimize whitespace handling between %} and comments
- the parser and warning method signature has changed, as well as the default output of MulleScion when handling them. This makes errors much more scrutable.
- allows @{ key: value} NSDictionay initialization (the old comma list will still work, though, but there its { value, key }
- compile fix for COSMOPOLITAN
- new class (and protoocl) MulleLocals to supply local variables. This has the advantage over the NSMutableDictionary (which is still compatible), that you write protect some constants such as NSAscending
- NEW FEATURE: single letter classes. Classes whose name are a single letter receive special treatment. This allows a form of language extension with classes. e.g. foo="abcde" [S:"foo/b/x"] could be used like a bash substitution
- fix white{%%} space being consumed by %}
- nil == nil now returns YES and not NO, also comparisons of the form nil >= object are valid
- in syntax like %} {# #} the space between the %} and the comment {# is deemed not worth preserving anymore
__FILE__
now keeps the complete filename and not just the lastPathComponent- added
apply
,endapply
for some cheap twig compatibility - add apply/endapply as a synonym for filter
- implement missing parent() function/macro for blocks
- add exists class as a pseudo command
- API CHANGE some methods now take an additional searchPath for the {%includes %} search
- you can now say {% includes optionally ... %}
- LANGUAGE CHANGE binary and ternary expressions require parenthesized expressions, if there is a possibility for ambiguity
- Various small improvements
- moved generic headers into src/generic
- Various small improvements
- Various small improvements
- Various small improvements
- new mulle-sde project structure
- split off from mulle-kybernetik/MulleScion
- Various small improvements
- updated mulle-sde, improved versioning
chamged versioning to three digits for mulle-project
- tested against mulle-objc 0.15
- migration from bootstrap to mulle-sde
- adapt to changes in mulle-configuration
- fix build problem with new mulle-configuration
There is an option that allows specifying includes via the environment like
so:
MULLESCION_ALLOW_GETENV_INCLUDES="YES" MY_INCLUDE="foo.scion" mulle-scion bar.scion none
and then in bar.scion
use {% includes MY_INCLUDE %}
. This looks obscure,
but I needed it to wrap code around existing templates.
- MULLESCION_.. environment variables now are of the YES/NO variety.
- fix missing menu due to change of root dox
- fix podspec version
- add dump of includes for debugging
- clarify usage output
- add nexti/previ to for loop dictionary.
- modernized tests a little bit to be compatible with mulle-tests also improved CmakeLists.txt slightly
- Bool fix from Hannes Tribus
<hons82@...com>
- IOS/ARC fixes from Hannes Tribus
<hons82@...com>
- Some portability fixes for MulleFoundation
-
Added a podspec fix from Hannes Tribus
<hons82@...com>
-
Fixed an obvious KVC bug, in a code path that was probably never used
-
Some support for MulleFoundation merged in
-
Added local variable FOUNDATION
-
Use a fork of google-toolbox for html escaping/unescaping
-
Use mulle-configuration for compilation
-
--version prints version and exits
- Experimental Travis CI integration on Github.
- Improvements in project structure due to better
mulle-bootstrap
- Fixed a bug, where
endfilter
did not respect the options setting of the returning filter. This could create havoc on plaintext, when your filter just specified (output).
- Made mulle-scion brew compatible. You can now brew it. As I wanted to use mulle-scion to produce brew formulae, I needed some options in the way mulle-scion is called.
** It is now possible to do this:
echo '--- {{ VALUE }} ---' | mulle-scion - keyvalue - VALUE="xxx"
which produces predicatably
--- xxx ---
- Templates can be passed in via stdin and the replacement values can be given as key=value arguments. This makes mulle-scion even more convenient to use in shell scripts.
brew install https://www.mulle-kybernetik.com/software/formulae/mulle-scion.rb
-
There are now "hidden" environment variables WWW_ROOT, WWW_PORT, WWW_PLIST for the webserver.
-
The way libraries are created and headers are written has been standardized and improved. There is some support for a future "mulle-bootstrap", in case you are wondering what the .bootstrap folder does.
Redesigned the "convenience interface". Sorry but I just disliked the
proliferation of code, that separated NSURL and NSString by type. I used the
power of ObjC and simplified this without having to resort to degenerics ;)
In other words the +descriptionWithTemplateURL:
method family is gone, just use
+descriptionWithTemplateFile:
with either NSString or NSURL.
I apparently goofed up the documentation in 1851 and made an incompatible change so that mulle-scion choked up on its own documentation templates. Ahem. That has been fixed, so that MulleScion now skips all scion tags, that are immediately followed by a backtick ` or a backquote . This ought to be harmless in my opinion, but results may vary.
*** BIG CHANGE!!! FILTER REDESIGNED ***
I decided to convert the documentation from ASCII into markdown. For that I needed a markdown filter. As it turns out, none of the libraries I found are able to do incremental rendering (bummer). This meant, that the markdown filter had to buffer all incoming strings until the endfilter was reached. That broke a lot of stuff.
On a positive note, you can now nest filters and can tweak them a little with optional parameters.
*** BIG CHANGE!!! ELSEFOR INSTEAD OF ELSE IN FOR-ENDFOR ***
I messed up, when I "designed" aka hacked in the {% for else endfor %} feature it doesn't work, when there is a {% if else endif %} contained in the loop. So else needs to be renamed to elsefor in this case.
To keep in sync with the archive version, the version nr. has been bumped to 1851.
-
Improved the dependencyTable generation, by ignoring syntax errors.
-
The documentation is now in markdown format. With some hacking effort the builtin webserver can now show the "Results" much nicer.
-
Stole a CSS to make it look more nicey, nicey.
-
Improved the LICENSE detail.
-
Made it more possible to call a macro from a macro, which failed in some cases.
-
There is now a hidden convert feature on includes, which allows to preprocess the data. convert > parse > print > filter
*** This can break archived templates on iOS, regenerate them ***
- mulle-scion has now a -z option to output compiled templates. While testing I found out, that when I use NSKeyedArchiver it's actually slower than parsing plain text and uses more space - even compressed.
Compile plaintext * 100
-rw-r--r-- 1 nat _lpoperator 198016 Oct 9 17:00 big.scion
real 0m8.528s
Compile unkeyed * 100
-rw-r--r-- 1 nat wheel 75983 Oct 9 17:25 /tmp/unkeyed.scionz
real 0m8.680s
Compile keyed * 100
-rw-r--r-- 1 nat wheel 750347 Oct 9 17:25 /tmp/keyed.scionz
real 0m25.497s
-
If you are on iOS it's most likely better to not use archives and caching!
-
Fix erroneous trace output, which was always happening.
-
Fix bug, where "for i in nil" would iterate once
-
Fix bug, where MulleScionNull was passed as invocation argument
*** This can break currently working templates, that contain unnoticed syntax errors! ***
-
the parser doesn't allow garbage inside mulle-scion tags anymore. It used to parse {{ x = #<%$/&> }} because everything after "x " was ignored, but it was just too confusing in real life use.
-
simplified expansion of function functionality a bit. added NSStringFromRange to builtin-functions
-
added some NSURL methods for opening templates, which is more convenient on iOS
-
made built-in function in principle expandable to support user-written functions
- added a podspec
-
allow # comments within {% %}
-
added log command for debugging
-
mulle-scion now builds into /usr/local/bin in Release setting
-
the demo webserver root is now /tmp/MulleScionDox
-
fixed requires dox
-
made requires a single line command, like include or extends, just because it "felt right"
-
remove some extraneous debug output and runtime warnings
-
new scheme "Show Documentation in Browser"
-
updated documentation a bit regarding multi-line commands
-
outsourced NSObject+MulleGraphviz because I need it in other code too and the dependency on MulleScion was annoying.
-
fixed some bad code in commandline tool, that reads the property list
- add ARGV parsage to mulle-scion. Now you can use mulle-scion as an awk replacement in other shell scripts, if you so desire.
-
bunch of fixes. Added an example how to write a non-plist datasource, in this case using CoreData.
-
added a requires keyword for dynamic loading of bundles from within a scion script (experimental)
-
renamed to MulleScion, because now it's more than just a template engine, it's also somewhat useful as a little standalone Obj-C interpreter. Also MulleScionTemplates was just too long.
-
The MulleScionConvenience has been renamed to just MulleScion.
-
There is now some rudimentary tracing support available. Just going to become better over time.
-
{{ }} can now be placed inside {% %} which makes templates with a lot of logic and little output that much more managable.
-
used google-toolbox-code for htmlEscapedString, which now adds some Apache2 Licensing terms to this project. Or say #define NO_APACHE_LICENSE and get the old crufty functionality back.
-
the repository on github will be only pushed to for "releases" the continous development is going to happen on Mulle kybernetiK.
mulle: http://www.mulle-kybernetik.com/software/git/MulleScionTemplates/
github: https://github.com/mulle-nat/MulleScionTemplates/
-
your compiled scionz files are incompatible now. Throw them away and rebuild your caches
-
you used to be able to have random trash after valid scion code, which was nice for documentation. That doesn't work anymore in most cases
-
you can now write multiline scripts, but some keywords need still to be enclosed as singles in {% %} like macro, block, endblock, extends and maybe some others
-
there are the beginnings of a test suite, check out the tests folder. there is a simple shellscript that runs the tests
-
lots of smaller fixes, whose content one might glean from the git comments
- your scionz files are incompatible now. Throw them away and rebuild the caches