/*************************************************************************
*
* ADOBE SYSTEMS INCORPORATED
* Copyright 2000-2002 Adobe Systems Incorporated 
* All Rights Reserved

* NOTICE: Adobe permits you to use, modify, and distribute 
* this file in accordance with the terms of the Adobe license 
* agreement accompanying it. If you have received this file 
* from a source other than Adobe, then your use, modification, 
* or distribution of it requires the prior written permission 
* of Adobe.
*
**************************************************************************/

/*************************************************************************
* ChangeCaps C library code

* C functions to change the case of text sent to it by the Change Caps JavaScript
code.

**************************************************************************/


#include "JSA.h"

#include <string.h>
#include <ctype.h>



JSA_INIT;

static void capFirst(int argc, JSValue *argv, JSValue returnValue)
{
	char* myString;
	myString = JSAValueToString(argv[0]);
	myString[0] = toupper(myString[0]);			// myString[0] gets first character
	JSAStringToValue(returnValue, myString);
}


static void unCapFirst(int argc, JSValue *argv, JSValue returnValue)
{
	char* myString;
	myString = JSAValueToString(argv[0]);
	myString[0] = tolower(myString[0]);
	JSAStringToValue(returnValue, myString);
}

static void capAll(int argc, JSValue *argv, JSValue returnValue)
{
	char* myString;
	myString = JSAValueToString(argv[0]);
	int n = strlen(myString);
	for(int i = 0; i<=n; ++i)
	{
		myString[i] = toupper(myString[i]);
	}
	JSAStringToValue(returnValue, myString);
}

static void unCapAll(int argc, JSValue *argv, JSValue returnValue)
{
	char* myString;
	myString = JSAValueToString(argv[0]);
	int n = strlen(myString);
	for(int i = 0; i<=n; ++i)
	{
		myString[i] = tolower(myString[i]);
	}
	JSAStringToValue(returnValue, myString);
}

static void capLead(int argc, JSValue *argv, JSValue returnValue)
{
	char* myString;
	int n;
	myString = JSAValueToString(argv[0]);
	myString[0] = toupper(myString[0]);  // cap first letter
	n = strlen(myString);
	for(int i = 0; i<=n; ++i)
	{
		if (isspace(myString[i]))	// find white space
		{
			myString[i+1] = toupper(myString[i+1]);
		}
	}
	JSAStringToValue(returnValue, myString);
}

static void unCapLead(int argc, JSValue *argv, JSValue returnValue)
{
	char* myString;
	myString = JSAValueToString(argv[0]);
	myString[0] = tolower(myString[0]);  // cap first letter
	int n = strlen(myString);
	for(int i = 0; i<=n; ++i)
	{
		if (isspace(myString[i]))	// find white space 
		{
			myString[i+1] = tolower(myString[i+1]);
		}
	}
	JSAStringToValue(returnValue, myString);
}

void JSAMain()
{
	JSARegisterFunction("capFirst",capFirst);
	JSARegisterFunction("capAll",capAll);
	JSARegisterFunction("capLead",capLead);
	JSARegisterFunction("unCapFirst",unCapFirst);
	JSARegisterFunction("unCapAll",unCapAll);
	JSARegisterFunction("unCapLead",unCapLead);
}



// optional, may be omitted
void JSAEXPORT JSAExit(void)
{}

