-
Notifications
You must be signed in to change notification settings - Fork 60
/
MGTemplateEngine.h
104 lines (90 loc) · 4.28 KB
/
MGTemplateEngine.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
//
// MGTemplateEngine.h
//
// Created by Matt Gemmell on 11/05/2008.
// Copyright 2008 Instinctive Code. All rights reserved.
//
// Keys in blockInfo dictionaries passed to delegate methods.
#define BLOCK_NAME_KEY @"name" // NSString containing block name (first word of marker)
#define BLOCK_END_NAMES_KEY @"endNames" // NSArray containing names of possible ending-markers for block
#define BLOCK_ARGUMENTS_KEY @"args" // NSArray of further arguments in block start marker
#define BLOCK_START_MARKER_RANGE_KEY @"startMarkerRange" // NSRange (as NSValue) of block's starting marker
#define BLOCK_VARIABLES_KEY @"vars" // NSDictionary of variables
#define TEMPLATE_ENGINE_ERROR_DOMAIN @"MGTemplateEngineErrorDomain"
@class MGTemplateEngine;
@protocol MGTemplateEngineDelegate <NSObject>
@optional
- (void)templateEngine:(MGTemplateEngine *)engine blockStarted:(NSDictionary *)blockInfo;
- (void)templateEngine:(MGTemplateEngine *)engine blockEnded:(NSDictionary *)blockInfo;
- (void)templateEngineFinishedProcessingTemplate:(MGTemplateEngine *)engine;
- (void)templateEngine:(MGTemplateEngine *)engine encounteredError:(NSError *)error isContinuing:(BOOL)continuing;
@end
// Keys in marker dictionaries returned from Matcher methods.
#define MARKER_NAME_KEY @"name" // NSString containing marker name (first word of marker)
#define MARKER_TYPE_KEY @"type" // NSString, either MARKER_TYPE_EXPRESSION or MARKER_TYPE_MARKER
#define MARKER_TYPE_MARKER @"marker"
#define MARKER_TYPE_EXPRESSION @"expression"
#define MARKER_ARGUMENTS_KEY @"args" // NSArray of further arguments in marker, if any
#define MARKER_FILTER_KEY @"filter" // NSString containing name of filter attached to marker, if any
#define MARKER_FILTER_ARGUMENTS_KEY @"filterArgs" // NSArray of filter arguments, if any
#define MARKER_RANGE_KEY @"range" // NSRange (as NSValue) of marker's range
@protocol MGTemplateEngineMatcher <NSObject>
@required
- (id)initWithTemplateEngine:(MGTemplateEngine *)engine;
- (void)engineSettingsChanged; // always called at least once before beginning to process a template.
- (NSDictionary *)firstMarkerWithinRange:(NSRange)range;
@end
#import "MGTemplateMarker.h"
#import "MGTemplateFilter.h"
@interface MGTemplateEngine : NSObject {
@public
NSString *markerStartDelimiter; // default: {%
NSString *markerEndDelimiter; // default: %}
NSString *expressionStartDelimiter; // default: {{
NSString *expressionEndDelimiter; // default: }}
NSString *filterDelimiter; // default: | example: {{ myVar|uppercase }}
NSString *literalStartMarker; // default: literal
NSString *literalEndMarker; // default: /literal
@private
NSMutableArray *_openBlocksStack;
NSMutableDictionary *_globals;
int _outputDisabledCount;
int _templateLength;
NSMutableDictionary *_filters;
NSMutableDictionary *_markers;
NSMutableDictionary *_templateVariables;
BOOL _literal;
@public
NSRange remainingRange;
id <MGTemplateEngineDelegate> delegate;
id <MGTemplateEngineMatcher> matcher;
NSString *templateContents;
}
@property(retain) NSString *markerStartDelimiter;
@property(retain) NSString *markerEndDelimiter;
@property(retain) NSString *expressionStartDelimiter;
@property(retain) NSString *expressionEndDelimiter;
@property(retain) NSString *filterDelimiter;
@property(retain) NSString *literalStartMarker;
@property(retain) NSString *literalEndMarker;
@property(assign, readonly) NSRange remainingRange;
@property(assign) id <MGTemplateEngineDelegate> delegate; // weak ref
@property(retain) id <MGTemplateEngineMatcher> matcher;
@property(retain, readonly) NSString *templateContents;
// Creation.
+ (NSString *)version;
+ (MGTemplateEngine *)templateEngine;
// Managing persistent values.
- (void)setObject:(id)anObject forKey:(id)aKey;
- (void)addEntriesFromDictionary:(NSDictionary *)dict;
- (id)objectForKey:(id)aKey;
// Configuration and extensibility.
- (void)loadMarker:(NSObject <MGTemplateMarker> *)marker;
- (void)loadFilter:(NSObject <MGTemplateFilter> *)filter;
// Utilities.
- (NSObject *)resolveVariable:(NSString *)var;
- (NSDictionary *)templateVariables;
// Processing templates.
- (NSString *)processTemplate:(NSString *)templateString withVariables:(NSDictionary *)variables;
- (NSString *)processTemplateInFileAtPath:(NSString *)templatePath withVariables:(NSDictionary *)variables;
@end