{
internal class EXamlCreateDPObject : EXamlCreateObject
{
- public EXamlCreateDPObject(EXamlContext context, object value, TypeReference type, string prefix) : base(context, null, type)
+ public EXamlCreateDPObject(EXamlContext context, object value, TypeReference type, string subfix) : base(context, null, type)
{
this.value = value;
- this.prefix = prefix;
+ this.subfix = subfix;
}
internal override string Write()
string ret = String.Format("({0} ({1} {2}))\n",
eXamlContext.GetValueString((int)EXamlOperationType.CreateDPObject),
- eXamlContext.GetValueString(value.ToString() + prefix),
+ eXamlContext.GetValueString(value.ToString() + subfix),
eXamlContext.GetValueString(eXamlContext.GetTypeIndex(Type)));
return ret;
}
private object value;
- private string prefix;
+ private string subfix;
}
}
if (0 < longStrings.Length)
{
- ret += String.Format("({0} ({1}))\n",
- GetValueString((int)EXamlOperationType.GetLongString),
- GetValueString(longStrings));
+ ret += String.Format("/{0}\n", longStrings);
}
return ret;
foreach (var thick in xywh)
{
- if (thick.EndsWith("dp") || thick.EndsWith("px"))
+ if (null != NodeILExtensions.GetDPValueSubFix(thick))
{
return null;
}
foreach (var thick in thickness)
{
- if (thick.EndsWith("dp") || thick.EndsWith("px"))
+ if (null != NodeILExtensions.GetDPValueSubFix(thick))
{
return null;
}
foreach (var thick in thickness)
{
- if (thick.EndsWith("dp") || thick.EndsWith("px"))
+ if (null != NodeILExtensions.GetDPValueSubFix(thick))
{
return null;
}
foreach (var thick in thickness)
{
- if (thick.EndsWith("dp") || thick.EndsWith("px"))
+ if (null != NodeILExtensions.GetDPValueSubFix(thick))
{
return null;
}
foreach (var thick in xywh)
{
- if (thick.EndsWith("dp") || thick.EndsWith("px"))
+ if (null != NodeILExtensions.GetDPValueSubFix(thick))
{
return null;
}
foreach (var thick in thickness)
{
- if (thick.EndsWith("dp") || thick.EndsWith("px"))
+ if (null != NodeILExtensions.GetDPValueSubFix(thick))
{
return null;
}
foreach (var thick in thickness)
{
- if (thick.EndsWith("dp") || thick.EndsWith("px"))
+ if (null != NodeILExtensions.GetDPValueSubFix(thick))
{
return null;
}
foreach (var thick in thickness)
{
- if (thick.EndsWith("dp") || thick.EndsWith("px"))
+ if (null != NodeILExtensions.GetDPValueSubFix(thick))
{
return null;
}
return null;
}
+ private static string[] dpValueSubFixes = { "dp", "sp", "pt", "px"};
+ internal static string GetDPValueSubFix(string valueStr)
+ {
+ foreach (var subFix in dpValueSubFixes)
+ {
+ if (valueStr.EndsWith(subFix))
+ {
+ return subFix;
+ }
+ }
+
+ return null;
+ }
+
public static object GetBaseValue(this ValueNode node, EXamlContext context, TypeReference targetTypeRef)
{
var str = (string)node.Value;
if ("System.String" != targetTypeRef.FullName)
{
- if (str.EndsWith("dp"))
- {
- var value = GetBaseValue(context, str.Substring(0, str.Length - "dp".Length), targetTypeRef);
- ret = new EXamlCreateDPObject(context, value, targetTypeRef, "dp");
- }
- else if (str.EndsWith("px"))
+ string subFix = GetDPValueSubFix(str);
+
+ if (null != subFix)
{
- var value = GetBaseValue(context, str.Substring(0, str.Length - "px".Length), targetTypeRef);
- ret = new EXamlCreateDPObject(context, value, targetTypeRef, "px");
+ var value = GetBaseValue(context, str.Substring(0, str.Length - subFix.Length), targetTypeRef);
+ ret = new EXamlCreateDPObject(context, value, targetTypeRef, subFix);
}
}
yield return Instruction.Create(OpCodes.Ldc_I4, SByte.Parse(str, CultureInfo.InvariantCulture));
else if (targetTypeRef.FullName == "System.Int16")
{
- if (str.EndsWith("dp") || str.EndsWith("px"))
+ if (null != GetDPValueSubFix(str))
{
var insOfDPValue = GetDPValue(module, node, targetTypeRef, str);
{
globalDataList.LongStrings = opInfo[0] as string;
};
+
+ createOperations[(int)EXamlOperationType.CreateDPObject] = (GlobalDataList globalDataList, List<object> opInfo) =>
+ {
+ var operation = new CreateDPObject(globalDataList, opInfo);
+ globalDataList.Operations.Add(operation);
+ };
}
}
}
var globalDataList = new GlobalDataList();
Action currentAction = new RootAction(globalDataList);
+ var rootAction = currentAction;
- foreach (char c in xaml)
+ int index = 0;
+
+ for (; index < xaml.Length; index++)
+ {
+ var c = xaml[index];
+
+ if (currentAction == rootAction && '/' == c)
+ {
+ break;
+ }
+ else
+ {
+ currentAction = currentAction.DealChar(c);
+ }
+ }
+
+ for (index++; index < xaml.Length; index++)
{
- currentAction = currentAction.DealChar(c);
+ globalDataList.LongStrings += xaml[index];
}
foreach (var op in globalDataList.PreLoadOperations)
--- /dev/null
+/*
+ * Copyright(c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ *
+ */
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Reflection;
+using System.Text;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Binding;
+using Tizen.NUI.Binding.Internals;
+using Tizen.NUI.Xaml;
+
+namespace Tizen.NUI.EXaml
+{
+ internal class CreateDPObject : Operation
+ {
+ public CreateDPObject(GlobalDataList globalDataList, List<object> operationInfos)
+ {
+ this.valueStr = operationInfos[0] as string;
+ this.typeIndex = (int)operationInfos[1];
+ this.globalDataList = globalDataList;
+ }
+
+ private GlobalDataList globalDataList;
+
+ public void Do()
+ {
+ if (0 > typeIndex)
+ {
+ object dpValue = null;
+
+ switch (typeIndex)
+ {
+ case -3:
+ dpValue = Convert.ToInt16(GraphicsTypeManager.Instance.ConvertScriptToPixel(valueStr));
+ break;
+
+ case -4:
+ dpValue = Convert.ToInt32(GraphicsTypeManager.Instance.ConvertScriptToPixel(valueStr));
+ break;
+
+ case -5:
+ dpValue = Convert.ToInt64(GraphicsTypeManager.Instance.ConvertScriptToPixel(valueStr));
+ break;
+
+ case -7:
+ dpValue = Convert.ToUInt16(GraphicsTypeManager.Instance.ConvertScriptToPixel(valueStr));
+ break;
+
+ case -8:
+ dpValue = Convert.ToUInt32(GraphicsTypeManager.Instance.ConvertScriptToPixel(valueStr));
+ break;
+
+ case -9:
+ dpValue = Convert.ToUInt64(GraphicsTypeManager.Instance.ConvertScriptToPixel(valueStr));
+ break;
+
+ case -15:
+ dpValue = Convert.ToSingle(GraphicsTypeManager.Instance.ConvertScriptToPixel(valueStr));
+ break;
+
+ case -16:
+ dpValue = Convert.ToDouble(GraphicsTypeManager.Instance.ConvertScriptToPixel(valueStr));
+ break;
+ }
+
+ if (null == dpValue)
+ {
+ throw new Exception($"Can't convert {valueStr} to DP value of typeIndex {typeIndex}");
+ }
+
+ globalDataList.GatheredInstances.Add(dpValue);
+ }
+ else
+ {
+ var type = globalDataList.GatheredTypes[typeIndex];
+ throw new Exception($"Can't convert DP value of type {type.FullName}");
+ }
+ }
+
+ private int typeIndex;
+ private string valueStr;
+ }
+}