
assert(web.layout);
var dll = ..web.layout.dll;

namespace web.layout;

class element{
	ctor (he,addref = true ) {
		this.handle = he;
		this.state = state(this);
		this.style = style(this);
		if( he && addref ){
			UseElement(he);
		}
		..table.add_gc(this,"release");
	}
	@_metaProperty;
}

import web.layout.element.state;
import web.layout.element.style
namespace element{
	var element_t = ..web.layout.element;
  	var value_t = ..web.layout.value;
  	
	_metaProperty = ..util.metaProperty(
		_eq = function(ele){
			return owner.handle == ele.handle;
		};
		set = function (name, value) {
			SetAttributeByName(owner[["handle"]], name, value ?..string.toUnicode(tostring(value)) : "" );
		};
		get = function (name) {
			var re, value, len;
			
			if (type(name) != type.number)
				re, value = GetAttributeByName(owner[["handle"]], name);
			else
				re, name, value = GetNthAttribute(owner[["handle"]], name + 1);
			
			if ( ! value) return;
			value = ..string.fromUnicode(value,0,true); 
			return value;
		};
		innerText = {
			_set = function (value) {
				value = ..string.fromto(value, 0, 65001) : "";
				SetElementInnerText(owner[["handle"]], value, #value);
			}
			_get = function () {
				var re, p = GetElementInnerText(owner[["handle"]]);
				if ( ! p) return;
				return ..string.fromto(..raw.tostring(p));
			}
		};
		innerHTML = {
			_set = function (html) {
				html = ..string.fromto(html, 0, 65001) : "";
				SetElementHtml(owner[["handle"]], html, #html, 0/*_SIH_REPLACE_CONTENT*/);
			}
			_get = function () {
				var re, p = GetElementHtml(owner[["handle"]], , false);
				if ( ! p) return;
				return ..string.fromto(..raw.tostring(p));
			}
		};
		outerHTML = {
			_get = function () {
				var re, p = GetElementHtml(owner[["handle"]], , true);
				if ( ! p) return;
				return ..string.fromto(..raw.tostring(p));
			}
		};
		index = function(){ 
        	var ret,index = GetElementIndex(owner[["handle"]],0);
        	return index;
      	};
		valid = {
      		_get = function(){
      			return owner[["handle"]]
      		} 
      	};
      	getValue = function(){ 
      		var re, val = ControlGetValue( owner[["handle"]],value_t() ); 
      		if( re = 0/*_HL_HV_OK*/ ){ 
      			return val;
      		}
      	};
      	setValue = function(v,units=0,dataType){ 
      		var val = owner.getValue();
      		if( !val ){
      			val = ..web.layout.value(v,units,dataType)
      		}
      		else {
      			val.setValue(v,units,dataType);
      		}
      		owner.getValue(); 
      		ControlSetValue(owner[["handle"]], val); 
      		val.clear();
      	};
		value = {
			_set = function (v) { 
				owner.setValue(v);
			}
			_get = function () { 
				var val = owner.getValue() 
				if( val ){
					var ret = val.value;
					val.clear();
					return ret;
				};
			}
		};
		insert = function (he, ind = -1) { 
			return InsertElement(he[["handle"]] : he, owner[["handle"]], ind) == 0/*_HLDOM_OK*/;
		};
		append = function (he){ 
			return owner.insert(he,0x7FFFFFFF);
		}; 
		modifyState = function (state = 0, clear = 0, update = true) { 
			return SetElementState(owner[["handle"]], state, clear, update);
		};
		getState = function (state=~0) { 
			var re, st = GetElementState(owner[["handle"]], 0);
			return st & state;
		};
		visitElement = function (tagName, attrName, attrValue, depth = 0) { 
			var ele; 
			var callback_c = ..raw.tostdcall( function(he, param){
				ele = element_t(he);
			} , "int(pointer he, pointer)"); 
			if( 0/*_HLDOM_OK*/ = VisitElements(owner[["handle"]], tagName, attrName, ..string.toUnicode(attrValue), callback_c,  , depth) )
				return ele;
		};
		visitElements = function (tagName, attrName, attrValue, depth = 0) { 
			var eles = {}; 
			var callback_c = ..raw.tostdcall( function(he, param){
				..table.push( eles,element_t(he) );
			} , "int(pointer he, pointer)"); 
			if( 0/*_HLDOM_OK*/ = VisitElements(owner[["handle"]], tagName, attrName, ..string.toUnicode(attrValue), callback_c,  , depth) ) 
				return eles;
		};
		queryElements = function(cssSelectors){ 
			var eles = {}; 
			var callback_c = ..raw.tostdcall( function(he, param){
				..table.push( eles,element_t(he) );
			} , "int(pointer he, pointer)");
			if( 0/*_HLDOM_OK*/ = SelectElements(owner[["handle"]],cssSelectors,callback_c) )
				return eles; 
		};  
		queryParent = function(cssSelectors,depth=0){ 
			var ret,heFound =  SelectParent(owner[["handle"]],cssSelectors,depth) 
			if(ret==0) return element_t(heFound);  
		};
		getElementById = function (id) { 
			return owner.visitElement(, "id", id) : owner.visitElement(, "name", id) ;
		}
		getElementsByName = function (name) { 
			return owner.visitElements(, "name", name);
		}; 
		getElementsByTagName = function (tag) {
			return owner.visitElements(tag);
		}; 
		update = function( remeasure ){
          	UpdateElement(owner[["handle"]], remeasure ); 
      	};
      	updateEx = function( mode ){
          	UpdateElementEx(owner[["handle"]], mode); 
       	};
      	root = function(){
			var p = owner.parent();
			if(p)return p.root();
			return owner;
		};
		parent = function(){
			var ret,parent =  GetParentElement(owner[["handle"]] );
			if(ret==0) return element_t(parent);
		};
		child = function( index = 0 ){ 
        	var ret,child = GetNthChild(owner[["handle"]], index );
        	if(!ret) return element_t(child);
      	};
      	children = function( ){
        	var ret,count = GetChildrenCount(owner[["handle"]],0 );
        	return count;
      	}; 
		previous = function(){
        	var idx = owner.index();
        	if(!idx)return;
        	
        	var p = owner.parent() ;
        	if( p && p.valid ){ 
        		return p.child(idx-1);
        	}
      	} ;  	
      	next = function(){
      		var idx = owner.index()+1; 
        	var p = owner.parent() ;
        	if( idx >= pel.children() )return;
        	
        	if( p && p.valid ){ 
        		return p.child(idx+1);
        	} 
      	};
		postEvent = function( event_code, reason = 0, heSource){
			return 0 == PostEvent(owner[["handle"]], event_code, heSource? heSource[["handle"]]: heSource, reason);
        	assert(ret == 0);
		};
		sendEvent = function(event_code, reason=0, heSource){
        	var ret,handled = SendEvent(owner[["handle"]], event_code, heSource[["handle"]]: heSource, reason, false); 
        	return ret && handled;
		}; 
		scrollToView = function(toTopOfView,smooth){
			 var flags = 0;
        	if(toTopOfView) flags |= 0x01;
        	if(smooth) flags |= 0x10;
        	ScrollToView(owner.handle,flags);
		}; 
		getScrollInfo = function(){
			var ret,pos,rect,size = GetScrollInfo(owner.handle,::POINT(),::RECT(),::SIZE() )
			if(ret==0/*_HLDOM_OK*/){
				return { pos = pos; rect = rect; size = size; }
			}
		};
		setScrollPos = function(x=0,y=0,smooth){ 
			var pt = ::POINT(x,y);
			SetScrollPos(owner.handle,x,y,smooth );
		};
		release = function(){
			if( owner.handle ){
				var ret = UnuseElement(owner.handle)
				owner.handle = null;
				return ret;
			}
		}; 
		delete = function(){
			if( owner.handle ){
				return DeleteElement(owner.handle)
			}
		}
		
	); 
	namespace _metaProperty{
		getAttribute =	get;
		setAttribute =	set; 
	};
	 
	VALUE = class {
		INT t;
		INT u;
		LONG d; 
	} 
  	VALUE_UNIT_TYPE = { 
  		"em";"ex";"pr";"sp";"";"";"px";"in";"cm";"mm";"pt";"pc";"dip";"";"color";"url";"symbol";
  		 ["in"]=8;pr=3;["%"]=3;sp=4;["%%"]=4;reserved3=14;em=1;cm=9;px=7;color=15;ex=2;symbol=65535;url=16;dip=13;pc=12;pt=11;mm=10
  	};
  	

	GetAttributeByName = dll.api("HTMLayoutGetAttributeByName","int(POINTER he,pointer name,pointer& p_value)");
	SetAttributeByName = dll.api("HTMLayoutSetAttributeByName","int(POINTER he,pointer name,pointer value)");
	GetAttributeCount = dll.api("HTMLayoutGetAttributeCount","int(POINTER he,INT& p_count)");
	GetNthAttribute = dll.api("HTMLayoutGetNthAttribute","int(POINTER he,INT n,pointer& p_name,pointer& p_value)");
	InsertElement = dll.api("HTMLayoutInsertElement","int(POINTER he,pointer  hparent,INT index)"); 
	GetParentElement = dll.api("HTMLayoutGetParentElement","int(POINTER he,pointer& p_parent_he)");
	GetChildrenCount = dll.api("HTMLayoutGetChildrenCount","int(POINTER he,INT& count)");
	GetNthChild = dll.api("HTMLayoutGetNthChild","int(POINTER he,INT n,pointer& he)");
	GetElementText = dll.api("HTMLayoutGetElementText","int(POINTER he,pointer& characters,INT& length)");
	GetElementHtml = dll.api("HTMLayoutGetElementHtml","int(POINTER he,pointer& utf8bytes,bool outer)");
	GetElementHtmlCB = dll.api("HTMLayoutGetElementHtmlCB","int(POINTER he,bool outer,pointer cb,pointer cb_param)");
	GetElementInnerText = dll.api("HTMLayoutGetElementInnerText","int(POINTER he,pointer& utf8bytes)");
	SetElementInnerText = dll.api("HTMLayoutSetElementInnerText","int(POINTER he,pointer utf8bytes,INT length)");
	GetElementInnerText16 = dll.api("HTMLayoutGetElementInnerText16","int(POINTER he,string& utf16bytes)");
	SetElementInnerText16 = dll.api("HTMLayoutSetElementInnerText16","int(POINTER he,pointer utf16bytes,INT length)");
	GetElementInnerTextCB = dll.api("HTMLayoutGetElementInnerTextCB","int(POINTER he,pointer cb,pointer cb_param)"); 
	ClearAttributes = dll.api("HTMLayoutClearAttributes","int(POINTER he)");
	GetElementIndex = dll.api("HTMLayoutGetElementIndex","int(POINTER he,INT& p_index)");
	GetElementType = dll.api("HTMLayoutGetElementType","int(POINTER he,string& p_type)");
	
	GetElementLocation = dll.api("HTMLayoutGetElementLocation","int(POINTER he,struct& p_location,INT areas)");
	ScrollToView = dll.api("HTMLayoutScrollToView","int(POINTER he,INT flags)");
	UpdateElement = dll.api("HTMLayoutUpdateElement","int(POINTER he,bool remeasure)");
	UpdateElementEx = dll.api("HTMLayoutUpdateElementEx","int(POINTER he,INT flags)");
	SetCapture = dll.api("HTMLayoutSetCapture","int(POINTER he)");
	SetEventRoot = dll.api("HTMLayoutSetEventRoot","int(POINTER he,pointer& phePrevRoot)");
	GetElementHwnd = dll.api("HTMLayoutGetElementHwnd","int(POINTER he,int& p_hwnd,bool rootWindow)");
	CombineURL = dll.api("HTMLayoutCombineURL","int(POINTER he,pointer szUrlBuffer,INT UrlBufferSize)");
	VisitElements = dll.api("HTMLayoutVisitElements","int(POINTER he,pointer tagName,pointer attributeName,pointer attributeValue,pointer callback,pointer param,INT depth)");
	SelectElements = dll.api("HTMLayoutSelectElements","int(POINTER he,string CSS_selectors,pointer callback,pointer param)");

	SelectParent = dll.api("HTMLayoutSelectParent","int(POINTER he,string selector,INT depth,pointer& heFound)"); 
	SetElementHtml = dll.api("HTMLayoutSetElementHtml","int(POINTER he,pointer html,INT htmlLength,INT where)");
	DeleteElement = dll.api("HTMLayoutDeleteElement","int(POINTER he)");
	GetElementUID = dll.api("HTMLayoutGetElementUID","int(POINTER he,INT& puid)");
	GetElementState = dll.api("HTMLayoutGetElementState","int(POINTER he,INT& pstateBits)");
	SetElementState = dll.api("HTMLayoutSetElementState","int(POINTER he,INT stateBitsToSet,INT stateBitsToClear,bool updateView)");
	
	CloneElement = dll.api("HTMLayoutCloneElement","int(POINTER he,pointer& phe)"); 
	DetachElement = dll.api("HTMLayoutDetachElement","int(POINTER he)");
	SetTimer = dll.api("HTMLayoutSetTimer","int(POINTER he,INT milliseconds)");
	SetTimerEx = dll.api("HTMLayoutSetTimerEx","int(POINTER he,INT millisecond,INT timerId)");
	AttachEventHandler = dll.api("HTMLayoutAttachEventHandler","int(POINTER he,pointer pep,pointer tag)");
	DetachEventHandler = dll.api("HTMLayoutDetachEventHandler","int(POINTER he,pointer pep,pointer tag)");
	
	SendEvent = dll.api("HTMLayoutSendEvent","int(POINTER he,INT appEventCode,pointer heSource,INT reason,bool& handled)");
	PostEvent = dll.api("HTMLayoutPostEvent","int(POINTER he,INT appEventCode,pointer heSource,INT reason)");
	CallBehaviorMethod = dll.api("HTMLayoutCallBehaviorMethod","int(POINTER he,struct& params)");
	RequestElementData = dll.api("HTMLayoutRequestElementData","int(POINTER he,pointer url,INT dataType,int initiator)");
	HttpRequest = dll.api("HTMLayoutHttpRequest","int(POINTER he,pointer url,INT dataType,INT requestType,struct requestParams,INT nParams)");
	GetScrollInfo = dll.api("HTMLayoutGetScrollInfo","int(POINTER he,struct& scrollPos,struct& viewRect,struct& contentSize)");
	SetScrollPos = dll.api("HTMLayoutSetScrollPos","int(POINTER he,int x,int y,bool smooth)");
	GetElementIntrinsicWidths = dll.api("HTMLayoutGetElementIntrinsicWidths","int(POINTER he,INT& pMinWidth,INT& pMaxWidth)");
	GetElementIntrinsicHeight = dll.api("HTMLayoutGetElementIntrinsicHeight","int(POINTER he,INT forWidth,INT& pHeight)");
	IsElementVisible = dll.api("HTMLayoutIsElementVisible","int(POINTER he,bool& pVisible)");
	IsElementEnabled = dll.api("HTMLayoutIsElementEnabled","int(POINTER he,bool& pEnabled)");
	SortElements = dll.api("HTMLayoutSortElements","int(POINTER he,INT firstIndex,INT lastIndex,pointer cmpFunc,pointer cmpFuncParam)");
	SwapElements = dll.api("HTMLayoutSwapElements","int(POINTER he1,pointer he2)");
	TraverseUIEvent = dll.api("HTMLayoutTraverseUIEvent","int(INT evt,pointer eventCtlStruct,bool& bOutProcessed)");
	ProcessUIEvent = dll.api("HTMLayoutProcessUIEvent","int(POINTER he,INT evt,pointer eventCtlStruct,bool& bOutProcessed)");
	ControlGetType = dll.api("HTMLayoutControlGetType","int(POINTER he,INT& pType)");
	ControlGetValue = dll.api("HTMLayoutControlGetValue","int(POINTER he,struct& pVal)");
	ControlSetValue = dll.api("HTMLayoutControlSetValue","int(POINTER he,struct pVal)");
	Enumerate = dll.api("HTMLayoutEnumerate","int(POINTER he,pointer pcb,pointer p,bool forward)");
	GetCharacterRect = dll.api("HTMLayoutGetCharacterRect","int(POINTER he,int pos,struct& outRect)");
	ElementSetExpando = dll.api("HTMLayoutElementSetExpando","int(POINTER he,struct pExpando)");
	ElementGetExpando = dll.api("HTMLayoutElementGetExpando","int(POINTER he,pointer ppExpando)");
	MoveElement = dll.api("HTMLayoutMoveElement","int(POINTER he,INT xView,INT yView)");
	MoveElementEx = dll.api("HTMLayoutMoveElementEx","int(POINTER he,INT xView,INT yView,INT width,INT height)");
	AnimateElement = dll.api("HTMLayoutAnimateElement","int(POINTER he,pointer pAnimator,pointer animatorParam)");
	EnqueueMeasure = dll.api("HTMLayoutEnqueueMeasure","int(POINTER he)");
	ParseValue = dll.api("HTMLayoutParseValue","int(pointer text,INT textLength,INT mode,struct pVal)");
	RangeCreate = dll.api("HTMLayoutRangeCreate","int(POINTER he,int& pRange,bool outer)");
	RangeFromSelection = dll.api("HTMLayoutRangeFromSelection","int(POINTER he,int& pRange)");
	RangeFromPositions = dll.api("HTMLayoutRangeFromPositions","int(POINTER he,int& pStart,int& pEnd)");
	RangeRelease = dll.api("HTMLayoutRangeRelease","int(int range)");
	RangeAdvancePos = dll.api("HTMLayoutRangeAdvancePos","int(int range,INT cmd,int& c,struct& pPos)");
	RangeToHtml = dll.api("HTMLayoutRangeToHtml","int(int range,pointer pHtmlUtf8Bytes,INT& numBytes)");
	RangeReplace = dll.api("HTMLayoutRangeReplace","int(int range,pointer pHtmlUtf8Bytes,INT numBytes)");
	RangeInsertHtml = dll.api("HTMLayoutRangeInsertHtml","int(int[] pPos,pointer pHtmlUtf8Bytes,INT numBytes)");
	RangeIsEmpty = dll.api("HTMLayoutRangeIsEmpty","int(int range,bool& pResult)");
	
	UseElement = dll.api("HTMLayout_UseElement","int(POINTER he)");
	UnuseElement = dll.api("HTMLayout_UnuseElement","int(POINTER he)");
}
 
/**intellisense()
web.layout.element() = !layoutEle.
!layoutEle.outerHTML = 节点HTML源码
!layoutEle.innerHTML = 节点内部HTML源码
!layoutEle.innerText = 设置或者获取文本
!layoutEle.modifyState(.(要增加的状态,要取消的状态) = 设置状态，以 _ELEMENT_STATE_BITS_ 开头的常量表示指定状态
!layoutEle.getState(htmlayout.ELEMENT_STATE_BITS.__) = 是否有某个状态，以 _ELEMENT_STATE_BITS_ 开头的常量表示指定状态　
!layoutEle.visitElement(.(节点类型,属性名,属性值,深度) = 查找第一个符合的节点，所有参数都可空
!layoutEle.visitElements(.(节点类型,属性名,属性值,深度) = 查找所有符合的节点，所有参数都可空
!layoutEle.queryElements = @.queryElements("标签名[属性名='属性值']__/*支持CSS选择器语法*/")
!layoutEle.queryParent("标签名[属性名='属性值']__/*支持CSS选择器语法*/") = 在父节点中查找节点,可选使用参数二指定向上搜索级别
!layoutEle.getElementsByName ("__") = 根据 name 查找节点集合
!layoutEle.getElementById("__") = 根据ID查找节点\n如果未找到，尝试使用name查找 
!layoutEle.getElementsByTagName("__") = 根据HTML标签名查找节点集合
!layoutEle.visitElement() = !layoutEle.
!layoutEle.getElementById() = !layoutEle.
!layoutEle.setAttribute("hide","true")  = 修改属性\n也可以直接写 ele.属性名字 = "值"
!layoutEle.getAttribute("hide")  = 获取属性,返回值为字符串类型.\n也可以直接写 var 返回值=ele.属性名字
!layoutEle.id = 节点ID
!layoutEle.value = 读写控件值,\n可选值类型:字符串值,数值,时间值等,\n可选使用web.layout.value 对象赋值
!layoutEle.getValue() = 返回控件值对象( web.layout.value 对象 )\n!web_layout_value.
!layoutEle.setValue(.(值,单位,类型) = 值可选使用字符串,数值,时间值,或 web.layout.value 对象,\n单位为可选参数,值类型(使用 _HL_T_ 前缀常量表示)为可选参数
!layoutEle.name = 节点name属性
!layoutEle.insert(__/*节点*/) = 插入子节点  
!layoutEle.append(__/*节点*/) = 追加到最后一个子节点  
!layoutEle.valid = 节点是否有效
!layoutEle.index = 节点在父节点child子节点集合中的索引位置
!layoutEle.update() = 更新;
!layoutEle.update(true) = 更新,\n重新计算元素的尺寸
!layoutEle.updateEx( 0x8000__/*_HL_REDRAW_NOW*/ ) = 更新;\n并调用::UpdateWindow 刷新窗口
!layoutEle.root() = 根节点
!layoutEle.parent() = 获取父节点\n!layoutEle.
!layoutEle.child(0__/*索引*/) = 获取子节点
!layoutEle.child() = !layoutEle.
!layoutEle.children() = 获取子节点数目\n!layoutEle.
!layoutEle.previous() = 上一个兄弟节点\n!layoutEle.	
!layoutEle.next() = 下一个兄弟节点\n!layoutEle.
!layoutEle.postEvent(.(事件ID,选项,源节点) = 触发事件,不等待返回,参数二,参数三为可选参数
!layoutEle.sendEvent(.(事件ID,选项,源节点) = 触发事件,并等待返回,参数二,参数三为可选参数 
!layoutEle.scrollToView(.(滚动到顶部,平滑效果) = 滚动上层视图节点滚动条
!layoutEle.release() = 释放节点对象
!layoutEle.style = 样式\n!htmlayout_style.
!layoutEle.getScrollInfo() = 获取滚动条信息\n!layoutEleScrollInfo.
!layoutEleScrollInfo.pos = !point.
!layoutEleScrollInfo.rect = !rect.
!layoutEleScrollInfo.size = !size.
!layoutEle.setScrollPos(.(x,y,平滑效果) = x,y皆可省略,默认值为0
end intellisense**/

/**intellisense()
_HLDOM_OK=@0/*_HLDOM_OK*/
_HLDOM_INVALID_HWND=@1/*_HLDOM_INVALID_HWND*/
_HLDOM_INVALID_HANDLE=@2/*_HLDOM_INVALID_HANDLE*/
_HLDOM_PASSIVE_HANDLE=@3/*_HLDOM_PASSIVE_HANDLE*/
_HLDOM_INVALID_PARAMETER=@4/*_HLDOM_INVALID_PARAMETER*/
_HLDOM_OPERATION_FAILED=@5/*_HLDOM_OPERATION_FAILED*/
_HLDOM_OK_NOT_HANDLED=@-1/*_HLDOM_OK_NOT_HANDLED*/
_HL_T_UNDEFINED=@0/*_HL_T_UNDEFINED*/
_HL_T_NULL=@1/*_HL_T_NULL*/
_HL_T_BOOL=@2/*_HL_T_BOOL*/
_HL_T_INT=@3/*_HL_T_INT*/
_HL_T_FLOAT=@4/*_HL_T_FLOAT*/
_HL_T_STRING=@5/*_HL_T_STRING*/
_HL_T_DATE=@6/*_HL_T_DATE*/
_HL_T_CURRENCY=@7/*_HL_T_CURRENCY*/
_HL_T_LENGTH=@8/*_HL_T_LENGTH*/
_HL_T_ARRAY=@9/*_HL_T_ARRAY*/
_HL_T_MAP=@0xA/*_HL_T_MAP*/
_HL_T_FUNCTION=@0xB/*_HL_T_FUNCTION*/
_HL_T_BYTES=@0xC/*_HL_T_BYTES*/
_HL_T_OBJECT=@0xD/*_HL_T_OBJECT*/
_HL_T_DOM_OBJECT=@0xE/*_HL_T_DOM_OBJECT*/
_HL_HV_OK_TRUE=@-1/*_HL_HV_OK_TRUE*/
_HL_HV_OK=@0/*_HL_HV_OK*/
_HL_HV_BAD_PARAMETER=@1/*_HL_HV_BAD_PARAMETER*/
_HL_HV_INCOMPATIBLE_TYPE=@2/*_HL_HV_INCOMPATIBLE_TYPE*/
_HL_UT_EM=@1/*_HL_UT_EM*/
_HL_UT_EX=@2/*_HL_UT_EX*/
_HL_UT_PR=@3/*_HL_UT_PR*/
_HL_UT_SP=@4/*_HL_UT_SP*/
_HL_UT_PX=@7/*_HL_UT_PX*/
_HL_UT_IN=@8/*_HL_UT_IN*/
_HL_UT_CM=@9/*_HL_UT_CM*/
_HL_UT_MM=@0xA/*_HL_UT_MM*/
_HL_UT_PT=@0xB/*_HL_UT_PT*/
_HL_UT_PC=@0xC/*_HL_UT_PC*/
_HL_UT_DIP=@0xD/*_HL_UT_DIP*/
_HL_UT_COLOR=@0xF/*_HL_UT_COLOR*/
_HL_UT_URL=@0x10/*_HL_UT_URL*/
_HL_UT_SYMBOL=@0xFFFF/*_HL_UT_SYMBOL*/
_HL_RESET_STYLE_THIS=@0x20/*_HL_RESET_STYLE_THIS*/
_HL_RESET_STYLE_DEEP=@0x10/*_HL_RESET_STYLE_DEEP*/
_HL_MEASURE_INPLACE=@1/*_HL_MEASURE_INPLACE*/
_HL_MEASURE_DEEP=@2/*_HL_MEASURE_DEEP*/
_HL_REDRAW_NOW=@0x8000/*_HL_REDRAW_NOW*/
end intellisense**/
