Skip to content
This repository
tree: 2742b2ee65
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

executable file 91 lines (74 sloc) 2.845 kb
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
//
// _MiscMergeIncludeCommand.m
//
// Written by Don Yacktman and Carl Lindberg
//
// Copyright 2001-2004 by Don Yacktman and Carl Lindberg.
// All rights reserved.
//
// This notice may not be removed from this source code.
//
// This header is included in the MiscKit by permission from the author
// and its use is governed by the MiscKit license, found in the file
// "License.rtf" in the MiscKit distribution. Please refer to that file
// for a list of all applicable permissions and restrictions.
//

#import "_MiscMergeIncludeCommand.h"
#import <Foundation/NSString.h>
//#import <Foundation/NSUtilities.h>
#import "MiscMergeTemplate.h"
#import "MiscMergeCommandBlock.h"
#import "MiscMergeEngine.h"

@implementation _MiscMergeIncludeCommand

- (void)dealloc
{
    [commandBlock release];
    [super dealloc];
}

- (BOOL)parseFromScanner:(NSScanner *)aScanner template:(MiscMergeTemplate *)template
{
    NSString *filename;
    NSString *resolvedFilename;
    NSString *fileString = nil;
    NSString *startDelim = nil;
    NSString *endDelim = nil;

    [self eatKeyWord:@"include" fromScanner:aScanner isOptional:NO];
    filename = [self getArgumentStringFromScanner:aScanner toEnd:NO];
    startDelim = [self getArgumentStringFromScanner:aScanner toEnd:NO];

    if ( [startDelim length] > 0 ) {
        endDelim = [self getArgumentStringFromScanner:aScanner toEnd:NO];

        if ( [endDelim length] == 0 ) {
            [template reportParseError:@"%@: Must specify an end delimiter if specifying a start delimiter.", [self class]];
            startDelim = nil;
        }
    }

    resolvedFilename = [template resolveTemplateFilename:filename];

    NSError *error = nil;
    if ([resolvedFilename length] > 0)
        fileString = [NSString stringWithContentsOfFile:resolvedFilename encoding:NSASCIIStringEncoding error:&error];

    if (fileString)
    {
        MiscMergeTemplate *newTemplate = [[[template class] alloc] init];

        if ( startDelim != nil )
            [newTemplate setStartDelimiter:startDelim endDelimiter:endDelim];
        else
            [newTemplate setStartDelimiter:[template startDelimiter] endDelimiter:[template endDelimiter]];
        
        [newTemplate setFilename:resolvedFilename];
        [newTemplate setDelegate:[template delegate]];
        [newTemplate parseString:fileString];
        commandBlock = [[newTemplate topLevelCommandBlock] retain];
        [newTemplate release];
    }
    else
    {
        [template reportParseError:@"%@: Could not load from file '%@' because %@", [self class], resolvedFilename, [error localizedDescription]];
    }

    return YES;
}

- (MiscMergeCommandExitType)executeForMerge:(MiscMergeEngine *)aMerger
{
    if (commandBlock)
        return [aMerger executeCommandBlock:commandBlock];
    return MiscMergeCommandExitNormal;
}

@end

Something went wrong with that request. Please try again.