/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% %
% SSS CCC RRRR III PPPP TTTTT TTTTT OOO K K EEEE N N %
% S C R R I P P T T O O K K E NN N %
% SSS C RRRR I PPPP T T O O KK EEE N N N %
% S C R R I P T T O O K K E N NN %
% SSSS CCC R RR III P T T OOO K K EEEE N N %
% %
% TTTTT EEEEE SSSSS TTTTT %
% T E SS T %
% T EEE SSS T %
% T E SS T %
% T EEEEE SSSSS T %
% %
% Perform "Magick" on Images via the Command Line Interface %
% %
% Dragon Computing %
% Anthony Thyssen %
% January 2012 %
% %
% %
% Copyright 1999-2019 ImageMagick Studio LLC, a non-profit organization %
% dedicated to making software imaging solutions freely available. %
% %
% You may not use this file except in compliance with the License. You may %
% obtain a copy of the License at %
% %
% https://imagemagick.org/script/license.php %
% %
% Unless required by applicable law or agreed to in writing, software %
% distributed under the License is distributed on an "AS IS" BASIS, %
% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. %
% See the License for the specific language governing permissions and %
% limitations under the License. %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Test the raw tokanization of the ScriptToken Subroutines
%
% This actually uses very little of the magic core functions
% and in fact creates a completely stand-alone program by substituting
% required MagickCore with direct system equivelents.
%
% Build
% cc script-token-test.c -o script-token-test
%
% For testing see script-token-test.sh
%
*/
/* System Replacement for MagickWand includes */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <errno.h>
/* Defines to replace MagickWand / MagickCore defintions */
#define MagickPathExtent 4096
#define MagickFalse 0
#define MagickTrue 1
#define MagickBooleanType int
#define AcquireMagickMemory(s) malloc(s)
#define RelinquishMagickMemory(p) (free(p),NULL)
#define ResizeMagickMemory(p,s) realloc(p,s)
#define ResetMagickMemory(p,b,s) memset(p,b,s)
#define StringToLong(s) strtol(s,(char **) NULL,10)
#define LocaleCompare(p,q) strcasecmp(p,q)
#define LocaleNCompare(p,q,l) strncasecmp(p,q,l)
#define WandSignature 0xabacadabUL
#define fopen_utf8(p,q) fopen(p,q)
#define WandExport
/* Include the actual code for ScriptToken functions */
#define SCRIPT_TOKEN_TESTING 1 /* Prevent MagickWand Includes */
#include "../script-token.h"
#include "../script-token.c"
/* Test program to report what tokens it finds in given input file/stream */
int main(int argc, char *argv[])
{
ScriptTokenInfo
*token_info;
token_info = AcquireScriptTokenInfo( (argc>1) ? argv[1] : "-" );
if (token_info == (ScriptTokenInfo *) NULL) {
printf("Script Open Failure : %s\n", strerror(errno));
return(1);
}
while (1) {
if( GetScriptToken(token_info) == MagickFalse )
break;
if( strlen(token_info->token) > INITAL_TOKEN_LENGTH-1 ) {
token_info->token[INITAL_TOKEN_LENGTH-4] = '.';
token_info->token[INITAL_TOKEN_LENGTH-3] = '.';
token_info->token[INITAL_TOKEN_LENGTH-2] = '.';
token_info->token[INITAL_TOKEN_LENGTH-1] = '\0';
}
printf("l=%d, c=%d, stat=%d, len=%d, token=\"%s\"\n",
token_info->token_line, token_info->token_column,
token_info->status, token_info->length, token_info->token);
}
switch( token_info->status ) {
case TokenStatusOK:
break;
case TokenStatusEOF:
printf("EOF Found\n");
break;
case TokenStatusBadQuotes:
/* Ensure last token has a sane length for error report */
if( strlen(token_info->token) > INITAL_TOKEN_LENGTH-1 ) {
token_info->token[INITAL_TOKEN_LENGTH-4] = '.';
token_info->token[INITAL_TOKEN_LENGTH-3] = '.';
token_info->token[INITAL_TOKEN_LENGTH-2] = '.';
token_info->token[INITAL_TOKEN_LENGTH-1] = '\0';
}
printf("Bad Quotes l=%d, c=%d token=\"%s\"\n",
token_info->token_line,token_info->token_column, token_info->token);
break;
case TokenStatusMemoryFailed: /* token is invalid */
printf("Out of Memory l=%d, c=%d\n",
token_info->token_line,token_info->token_column);
break;
case TokenStatusBinary: /* token is invalid */
printf("Binary Char at l=%d, c=%d\n",
token_info->curr_line,token_info->curr_column);
break;
}
/* Clean up */
token_info = DestroyScriptTokenInfo(token_info);
return(0);
}