From f930bf1df4c3c155d151f1c733c2064ccd6f5380 Mon Sep 17 00:00:00 2001 From: MarkT Date: Sat, 27 Nov 2004 20:02:51 +0000 Subject: [PATCH] Added semi-intelligent text parser for XMLs - so that numeric properties on entities are no longer stored as strings instead. This was SVN commit r1409. --- source/gui/CInput.cpp | 1 + source/scripting/JSConversions.cpp | 21 +++++++++++++++++++++ source/scripting/JSConversions.h | 4 ++-- source/scripting/JSSerialization.h | 1 + source/scripting/ScriptableObject.h | 2 +- source/simulation/BaseEntity.cpp | 4 ++-- 6 files changed, 28 insertions(+), 5 deletions(-) diff --git a/source/gui/CInput.cpp b/source/gui/CInput.cpp index f62d285981..2c1dfd463c 100755 --- a/source/gui/CInput.cpp +++ b/source/gui/CInput.cpp @@ -241,6 +241,7 @@ void CInput::HandleMessage(const SGUIMessage &Message) // Now get the height of the font. CFont *font=NULL; font = new CFont("Console"); + float spacing = font->GetLineSpacing(); float height = font->GetHeight(); diff --git a/source/scripting/JSConversions.cpp b/source/scripting/JSConversions.cpp index 22296c0652..5d9569f0f4 100755 --- a/source/scripting/JSConversions.cpp +++ b/source/scripting/JSConversions.cpp @@ -3,6 +3,7 @@ #include "Entity.h" #include "ObjectManager.h" #include "scripting/JSInterface_Vector3D.h" +#include "Parser.h" // HEntity @@ -239,3 +240,23 @@ template<> jsval ToJSVal( const jsval& Native ) return( Native ); } +// String->JSVal + +jsval JSParseString( const CStrW& Native ) +{ + CParser stringParser; + stringParser.InputTaskType( "string", "_$value_" ); + CParserLine result; + result.ParseString( stringParser, (CStr)Native ); + bool boolResult; int intResult; float floatResult; + if( result.GetArgBool( 0, boolResult ) ) + return( BOOLEAN_TO_JSVAL( boolResult ) ); + if( result.GetArgInt( 0, intResult ) ) + { + if( INT_FITS_IN_JSVAL( intResult ) ) + return( ToJSVal( intResult ) ); + } + if( result.GetArgFloat( 0, floatResult ) ) + return( ToJSVal( floatResult ) ); + return( ToJSVal( Native ) ); +} \ No newline at end of file diff --git a/source/scripting/JSConversions.h b/source/scripting/JSConversions.h index 84ef37da46..374b9c2535 100755 --- a/source/scripting/JSConversions.h +++ b/source/scripting/JSConversions.h @@ -143,8 +143,8 @@ template<> jsval ToJSVal( CStrW& Native ); template<> jsval ToJSVal( const jsval& Native ); +// Intelligent CStrW->JSVal conversion - - +jsval JSParseString( const CStrW& String ); #endif diff --git a/source/scripting/JSSerialization.h b/source/scripting/JSSerialization.h index 9db93f1510..17cb615480 100755 --- a/source/scripting/JSSerialization.h +++ b/source/scripting/JSSerialization.h @@ -1,6 +1,7 @@ // Functions for (de)serialization of jsvals // // Mark Thompson (mark@wildfiregames.com / mot20@cam.ac.uk) +// WIP, not yet functional #include "Network/Serialization.h" #include "JSConversions.h" diff --git a/source/scripting/ScriptableObject.h b/source/scripting/ScriptableObject.h index f84e7e01c5..08f4287e72 100755 --- a/source/scripting/ScriptableObject.h +++ b/source/scripting/ScriptableObject.h @@ -658,7 +658,7 @@ public: void AddProperty( CStrW PropertyName, CStrW Value ) { - AddProperty( PropertyName, ToJSVal( Value ) ); + AddProperty( PropertyName, JSParseString( Value ) ); } void AddProperty( CStrW PropertyName, GetFn Getter, SetFn Setter = NULL ) { diff --git a/source/simulation/BaseEntity.cpp b/source/simulation/BaseEntity.cpp index e75a9dff64..11909b36ef 100755 --- a/source/simulation/BaseEntity.cpp +++ b/source/simulation/BaseEntity.cpp @@ -201,7 +201,7 @@ void CBaseEntity::XMLLoadProperty( const CXeromyces& XeroFile, const XMBElement& { if( !Existing->m_Intrinsic ) LOG( WARNING, LOG_CATEGORY, "CBaseEntity::XMLAddProperty: %s already defined for %s. Property trees will be merged.", PropertyName.c_str(), m_Tag.c_str() ); - Existing->Set( ToJSVal( Source.getText() ) ); + Existing->Set( JSParseString( Source.getText() ) ); Existing->m_Inherited = false; } else @@ -229,7 +229,7 @@ void CBaseEntity::XMLLoadProperty( const CXeromyces& XeroFile, const XMBElement& if( Existing ) { - Existing->Set( ToJSVal( Attribute.Value ) ); + Existing->Set( JSParseString( Attribute.Value ) ); Existing->m_Inherited = false; } else