/*
* program in java
* source code from tredy
* alqueue@hotmail.com
* 2010.10.19 v1.0 final
*
* it's a parse class developed for .ADM in Windows
* with Registrypol.java together, it simply work!!!
* Thank God! Give up Windows GPO should be a good choice!
*/
import java.util.*;
import java.lang.*;
class JMarkup
{
String m_strDoc;
int m_iPosStrings;
int m_iPos;
public static final int ANY=0,CATEGORY=1,POLICY=2,PART=3,ITEMLIST=4,ACTIONLIST=5,ACTIONLISTON=6,ACTIONLISTOFF=7,SUGGESTIONS=8;
Stack<Integer> tags = new Stack<Integer>();
/*
* Populates the JMarkup object from a string and parses it
*/
public JMarkup(String strDoc){
m_strDoc = strDoc;
m_iPosStrings = m_strDoc.indexOf("[strings]");
if(m_iPosStrings<0)
m_iPosStrings = m_strDoc.length();
ResetPos();
}
/*
* Resets the current main position to before the first sibling
*/
public void ResetMainPos(){
try{
Integer iPos = tags.pop();
Integer iMainPos = tags.pop();
m_iPos = iPos.intValue();
tags.push(iPos);
tags.push(iPos);
}catch( EmptyStackException ee){
ResetPos();
}
}
/*
* Resets the current position to the start of the document
*/
public void ResetPos(){
Integer iPos = new Integer(0);
while(!tags.empty()){
iPos = tags.pop();
m_iPos = iPos.intValue();
}
m_iPos = x_FindNearestElem(0,m_iPosStrings);
tags.push(new Integer(m_iPos));
tags.push(new Integer(m_iPos));
}
/*
* intrinsic function
* Locates next element, matching tag name
*/
private int x_FindNearestElem(int iPosBegin,int iPosEnd){
int iPos = iPosEnd;
int iPosTemporary;
iPosTemporary = iPosBegin;
while(true){
iPosTemporary = m_strDoc.indexOf(GetTagName(CATEGORY),iPosTemporary);
if(iPosTemporary < 0) break;
if(IsBeginTags(iPosTemporary,GetTagName(CATEGORY).length()))break;
iPosTemporary = iPosTemporary+GetTagName(CATEGORY).length();
}
if(iPosTemporary > 0 &&
iPosTemporary < iPos)
iPos = iPosTemporary;
iPosTemporary = iPosBegin;
while(true){
iPosTemporary = m_strDoc.indexOf(GetTagName(POLICY),iPosTemporary);
if(iPosTemporary < 0) break;
if(IsBeginTags(iPosTemporary,GetTagName(POLICY).length()))break;
iPosTemporary = iPosTemporary+GetTagName(POLICY).length();
}
if(iPosTemporary > 0 &&
iPosTemporary < iPos)
iPos = iPosTemporary;
iPosTemporary = iPosBegin;
while(true){
iPosTemporary = m_strDoc.indexOf(GetTagName(PART),iPosTemporary);
if(iPosTemporary < 0) break;
if(IsBeginTags(iPosTemporary,GetTagName(PART).length()))break;
iPosTemporary = iPosTemporary+GetTagName(PART).length();
}
if(iPosTemporary > 0 &&
iPosTemporary < iPos)
iPos = iPosTemporary;
iPosTemporary = iPosBegin;
while(true){
iPosTemporary = m_strDoc.indexOf(GetTagName(ITEMLIST),iPosTemporary);
if(iPosTemporary < 0) break;
if(IsBeginTags(iPosTemporary,GetTagName(ITEMLIST).length()))break;
iPosTemporary = iPosTemporary+GetTagName(ITEMLIST).length();
}
if(iPosTemporary > 0 &&
iPosTemporary < iPos)
iPos = iPosTemporary;
iPosTemporary = iPosBegin;
while(true){
iPosTemporary = m_strDoc.indexOf(GetTagName(ACTIONLIST),iPosTemporary);
if(iPosTemporary < 0) break;
if(IsBeginTags(iPosTemporary,GetTagName(ACTIONLIST).length()))break;
iPosTemporary = iPosTemporary+GetTagName(ACTIONLIST).length();
}
if(iPosTemporary > 0 &&
iPosTemporary < iPos)
iPos = iPosTemporary;
iPosTemporary = iPosBegin;
while(true){
iPosTemporary = m_strDoc.indexOf(GetTagName(ACTIONLISTON),iPosTemporary);
if(iPosTemporary < 0) break;
if(IsBeginTags(iPosTemporary,GetTagName(ACTIONLISTON).length()))break;
iPosTemporary = iPosTemporary+GetTagName(ACTIONLISTON).length();
}
if(iPosTemporary > 0 &&
iPosTemporary < iPos)
iPos = iPosTemporary;
iPosTemporary = iPosBegin;
while(true){
iPosTemporary = m_strDoc.indexOf(GetTagName(ACTIONLISTOFF),iPosTemporary);
if(iPosTemporary < 0) break;
if(IsBeginTags(iPosTemporary,GetTagName(ACTIONLISTOFF).length()))break;
iPosTemporary = iPosTemporary+GetTagName(ACTIONLISTOFF).length();
}
if(iPosTemporary > 0 &&
iPosTemporary < iPos)
iPos = iPosTemporary;
iPosTemporary = iPosBegin;
while(true){
iPosTemporary = m_strDoc.indexOf(GetTagName(SUGGESTIONS),iPosTemporary);
if(iPosTemporary < 0) break;
if(IsBeginTags(iPosTemporary,GetTagName(SUGGESTIONS).length()))break;
iPosTemporary = iPosTemporary+GetTagName(SUGGESTIONS).length();
}
if(iPosTemporary > 0 &&
iPosTemporary < iPos)
iPos = iPosTemporary;
return iPos;
}
/*
* intrinsic function
* Determines if document has a end tag name between the given two position
*/
private boolean x_IsExistEndTags(int iPosBegin,int iPosEnd){
int iPos = iPosEnd;
int iPosTemporary;
iPosTemporary = iPosBegin;
while(true){
iPosTemporary = m_strDoc.indexOf(GetTagName(CATEGORY),iPosTemporary);
if(iPosTemporary < 0) break;
if(IsEndTags(iPosTemporary,GetTagName(CATEGORY).length()))break;
iPosTemporary = iPosTemporary+GetTagName(CATEGORY).length();
}
if(iPosTemporary > 0 &&
iPosTemporary < iPos)
iPos = iPosTemporary;
iPosTemporary = iPosBegin;
while(true){
iPosTemporary = m_strDoc.indexOf(GetTagName(POLICY),iPosTemporary);
if(iPosTemporary < 0) break;
if(IsEndTags(iPosTemporary,GetTagName(POLICY).length()))break;
iPosTemporary = iPosTemporary+GetTagName(POLICY).length();
}
if(iPosTemporary > 0 &&
iPosTemporary < iPos)
iPos = iPosTemporary;
iPosTemporary = iPosBegin;
while(true){
iPosTemporary = m_strDoc.indexOf(GetTagName(PART),iPosTemporary);
if(iPosTemporary < 0) break;
if(IsEndTags(iPosTemporary,GetTagName(PART).length()))break;
iPosTemporary = iPosTemporary+GetTagName(PART).length();
}
if(iPosTemporary > 0 &&
iPosTemporary < iPos)
iPos = iPosTemporary;
iPosTemporary = iPosBegin;
while(true){
iPosTemporary = m_strDoc.indexOf(GetTagName(ITEMLIST),iPosTemporary);
if(iPosTemporary < 0) break;
if(IsEndTags(iPosTemporary,GetTagName(ITEMLIST).length()))break;
iPosTemporary = iPosTemporary+GetTagName(ITEMLIST).length();
}
if(iPosTemporary > 0 &&
iPosTemporary < iPos)
iPos = iPosTemporary;
iPosTemporary = iPosBegin;
while(true){
iPosTemporary = m_strDoc.indexOf(GetTagName(ACTIONLIST),iPosTemporary);
if(iPosTemporary < 0) break;
if(IsEndTags(iPosTemporary,GetTagName(ACTIONLIST).length()))break;
iPosTemporary = iPosTemporary+GetTagName(ACTIONLIST).length();
}
if(iPosTemporary > 0 &&
iPosTemporary < iPos)
iPos = iPosTemporary;
iPosTemporary = iPosBegin;
while(true){
iPosTemporary = m_strDoc.indexOf(GetTagName(ACTIONLISTON),iPosTemporary);
if(iPosTemporary < 0) break;
if(IsEndTags(iPosTemporary,GetTagName(ACTIONLISTON).length()))break;
iPosTemporary = iPosTemporary+GetTagName(ACTIONLISTON).length();
}
if(iPosTemporary > 0 &&
iPosTemporary < iPos)
iPos = iPosTemporary;
iPosTemporary = iPosBegin;
while(true){
iPosTemporary = m_strDoc.indexOf(GetTagName(ACTIONLISTOFF),iPosTemporary);
if(iPosTemporary < 0) break;
if(IsEndTags(iPosTemporary,GetTagName(ACTIONLISTOFF).length()))break;
iPosTemporary = iPosTemporary+GetTagName(ACTIONLISTOFF).length();
}
if(iPosTemporary > 0 &&
iPosTemporary < iPos)
iPos = iPosTemporary;
iPosTemporary = iPosBegin;
while(true){
iPosTemporary = m_strDoc.indexOf(GetTagName(SUGGESTIONS),iPosTemporary);
if(iPosTemporary < 0) break;
if(IsEndTags(iPosTemporary,GetTagName(SUGGESTIONS).length()))break;
iPosTemporary = iPosTemporary+GetTagName(SUGGESTIONS).length();
}
if(iPosTemporary > 0 &&
iPosTemporary < iPos)
iPos = iPosTemporary;
return (iPos!=iPosEnd);
}
/*
* Go "into" current main position element such that it becomes the current parent position
*/
public boolean IntoElem(){
Integer iPos = tags.pop();
tags.push(new Integer(m_iPos));
int iPosTemporary = x_FindChildElem();
if(iPosTempor
windows AD 活动目录编程指南
4星 · 超过85%的资源 需积分: 9 100 浏览量
2010-10-20
10:42:54
上传
评论 2
收藏 5.23MB RAR 举报
alqueue
- 粉丝: 3
- 资源: 13
- 1
- 2
- 3
前往页