2014-04-08 11 views
0

TLF에 링크를 삽입하려고합니다. 일반적으로 당신은 단순히 단순히여러 XML 태그에 걸쳐 문자열 일치 색인에 대한 정규식

var linkElement:LinkElement = textArea.textFlow.interactionManager.applyLink(...); 

문제를 사용하는 것, 즉 내가 그것을 완전히 완전히, 단락과 목록 항목에 걸쳐 금지 다르게 서식있는 텍스트 (굵게, 기울임 꼴 등), 또는 하늘을 가로 질러 걸쳐있는 링크를 만드는 경우 충돌 및 화상. 링크 형식이 완전히 손실되고 목록 구조가 무너집니다.

addChild()를 통해 LinkElement를 추가하는 것만으로도 텍스트의 서식과 구조를 유지할 수 없습니다.

interactionManager.cutTextScrap (...)으로 selection의 textFlow를 추출하고 interactionManager.applyLink (...)로 LinkElement에 래핑 한 다음 다시 붙여 넣어 ... 또한 엉망으로 만듭니다. .

그래서 내 자신의 링크 삽입 루틴을 만들어야합니다.

1) 캐릭터

2) TextFlow의 문자열

내에서 선택의 시작과 끝 인덱스를 찾기 위해 TextFlow의 태그를 변환 : 내가하기로 결심했습니다 무엇

은에있다 3) 개시 인덱스에서 다음 문자열을 삽입 :

</span><a href="[hrefVar]" target="[targetVar]"><span> 

4) 종료 인덱스에서 다음 문자열을 삽입 :

</span></a><span> 

5) 텍스트 영역

그리고 짜잔에 대한 TextFlow 객체로 TextFlow의 문자열을 다시 변환! 인스턴트 RTF 링크!

유일한 문제는 ... 어떻게 결과가 여러 태그에 걸쳐 퍼질 수 있는지 XML 마크 업 내에서 문자열 일치에 대한 시작 및 끝 인덱스를 찾을 수있는 정규식 분석 구문을 작성하는 것입니다. TextFlow를 경우 예를 들어

(약칭 함) :

<TextFlow><p><span>Lorem Ip</span><span fontWeight="bold">sum do</span><span> 
lor sit am</span><span fontStyle="italic">et, consectetur adipiscing elit. 
</span></p></TextFlow> 

말, 예를 들어, 사용자가 선택한 "Ipsum 제품의 슬픔은 AMET 앉아"링크로 변환 할 수 있습니다.

<TextFlow><p><span>Lorem </span><a href="http://www.google.ca" target="_blank"> 
<span>Ip</span><span fontWeight="bold">sum do</span><span>lor sit am</span> 
<span fontStyle="italic">et</span></a><span>, consectetur adipiscing elit. 
</span></p></TextFlow> 
: 최종 결과는 다음과 같습니다 그래서 나는 위의 3에 표시된 문자열) & 4)를 삽입 한 다음 해당 RTF 마크 업 내에서 "AMET 앉아 Ipsum 제품의 슬픔", 그리고 첫 번째와 마지막 인덱스를 찾을 필요

은 서식 스타일을 일부 잃어 버릴 수 있지만 나중에 텍스트 서식을 구문 분석하여 수정할 수 있습니다.

내가 무엇이 필요한지 2 단계를 수행 할 정규 표현식입니다.

태그 사이의 텍스트를 제거하고 제거 된 textflow 텍스트에서 선택한 텍스트의 문자열 일치를 찾는 방법을 알고 있지만 원본 내에서 일치 인덱스를 찾는 방법은 알지 못합니다. unstripped) textflow 문자열입니다.

누구나?

답변

0

IMHO 더 좋은 방법은 정규 표현식으로 가려고하는 대신 문자열을 통과하는 것입니다. 여기에 더러운 방법에 대한 아이디어가 있습니다.이 코드는 개선해야하지만 어쨌든 방향을 제시 할 수도 있습니다. 그래서 주요 목표는 태그를 "버리고"텍스트와 일치시킬 수 있지만 프로세스 내에서 전달 된 많은 문자를 계산합니다.

//This code might need revision for not to get <and> symbols as fake tags starting and finishing points, also reseting searchwhen text not completly done. 

var sourceStr:String = '<TextFlow><p><span>Lorem Ip</span><span fontWeight="bold">sum do</span><span>lor sit am</span><span fontStyle="italic">et, consectetur adipiscing elit.</span></p></TextFlow>'; 
var searchStr:String = "Lorem Ipsum d"; 
var indexes:Object = firstLast(sourceStr, searchStr); 

trace(indexes.startIndex,indexes.finishIndex); 


function firstLast(sourceStr:String, searchStr:String):Object 
{ 
    var indexCounter:int = -1; 

    var searchFlag:Boolean = true; 
    var searchPos:int = 0; 

    var searchChar:String; 
    var sourceChar:String; 

    var startIndex:int; 
    var finishIndex:int; 

    for (var i:int = 0; i < sourceStr.length; i++) 
    { 
     indexCounter++; 


     sourceChar = sourceStr.substr(i, 1); 
     if (sourceChar == "<") 
     { 
      searchFlag = false; 

     } 
     else if (sourceChar == ">") 
     { 
      searchFlag = true; 
     } 

     if (!searchFlag) 
     { 
      continue; 
     } 

     searchChar = searchStr.substr(searchPos, 1);  
     if (sourceChar == searchChar) 
     { 
      if (searchPos == 0) 
      { 
       startIndex = indexCounter; 
      } 
      if (searchPos == searchStr.length - 1) 
      { 
       finishIndex = indexCounter; 
      } 
      searchPos++; 
     } 


    } 

    return { startIndex:startIndex, finishIndex:finishIndex }; 

}