모듈:ImportProtein

Module:ImportProtein

현지의 p = {}  기능. p.주된 ()     ----초기 프레임 파라미터를 설정합니다.    현지의 디버깅 로그=" } }"    현지의 args=.args    현지의 부모=.부모 취득()    현지의 파지={}    한다면 부모 그리고나서 파지=부모.args 끝.    현지의 높이=args.높이 또는 파지.높이 또는 "50"    현지의 =args. 또는 파지. 또는 "600"    현지의 배경=args.배경 또는 파지.배경 또는 "#333333"    현지의 텍스트=args.텍스트 또는 파지.텍스트 또는 25 -- 모티브에서 수직으로 아래로 표시할 범례 텍스트의 문자    현지의 대형 전용 영역=args.대형 전용 영역 또는 파지.대형 전용 영역 또는 20    현지의 텍스트=톤수(텍스트) --숫자 이외에는 의미가 없다.    현지의 표 출력=args.표 출력 또는 파지.표 출력 또는 "메가와트" 결국 테이블을 레전드로 삼기로 결심했다고 생각합니다.(기존에는 억제하기 위해 "default"로 설정)    한다면 표 출력=="아니요" 그리고나서 표 출력=제로 끝.    현지의 =args. 또는 파지. 또는 4 -- 세로 텍스트로 덮어쓸 수 없다고 태그 붙이는 픽셀 수.    현지의 비디오 카드={} --- vclaim [ true ]의 경우 해당 픽셀이 캡처됩니다.    현지의 vprotest='' --- 공백으로 구분되지 않은 위치 목록    현지의 노우키=args.노우키 또는 파지.노우키         ----이러한 파라미터는 테이블로 처리할 필요가 있는 텍스트를 송신합니다.     ----include는 모든 것을 포함하기 위해 제로입니다.존재하는 경우는, 그 안에 있는 것만이 사용됩니다.     ----포맷은 「I want only this」(임의의 정크) 「 and this」등입니다.단점 주의 - 잘못된 인용문은 템플릿 전체를 망칠 수 있습니다.    현지의 포함하다=args.포함하다 또는 파지.포함하다 또는 "모두"    한다면 포함하다 == "모두" 그리고나서 포함하다 = 제로 끝.    현지의 포함하다={}    한다면 포함하다 그리고나서       위해서 i  .스트링.gmatch(포함하다,[[%"(.-)%"]]) 하다          포함하다[i]=1       끝.    끝.     ----region region은 기능이 너무 많아 개별적으로 메모할 수 없는 섹션을 정의합니다.     ----대신 새로운 텍스트로 그룹화합니다.     ---- 형식은 xx 입니다.yy: "이 텍스트 사용"    현지의 치환 지역=args.치환 지역 또는 파지.치환 지역 또는 ""    현지의 트리플레이스 영역={}       트리플레이스 영역.s={};트리플레이스 영역.e={};트리플레이스 영역.t={}       위해서 i,j,k  .스트링.gmatch(치환 지역,[[(%d+)%%(%d+):%(-)%"]) 하다           table.insert(트리플레이스 영역.s,톤수(i));table.insert(트리플레이스 영역.e,톤수(j));table.insert(트리플레이스 영역.t,스트링(k))       끝.     ----「이것에 대해서 잊는다」(무시 사이에 끼어 있다)는 제외합니다.     ----이것에 의해, 테이블이나 이러한 종류의 모티브에도 물건이 표시되지 않게 됩니다.    현지의 제외하다=args.제외하다 또는 파지.제외하다 또는 "" --이러한 빈 배열은 나중에 무시됩니다.    현지의 문자 포함={}    위해서 i  .스트링.gmatch(제외하다,[[%"(.-)%"]]) 하다       문자 포함[i]=1    끝.     ----「이것은 구질구질한 모티브 이름입니다」(무시 사이의 junk)를 사용합니다.대신 /note 엔트리를 사용합니다.    현지의 사용법=args.사용법 또는 파지.사용법 또는 ""    현지의 송곳니={}    위해서 i  .스트링.gmatch(사용법,[[%"(.-)%"]]) 하다       송곳니[i]=1    끝.     ----「이 문구가 마음에 들지 않는다」라고 치환합니다.그게 내가 원하는 거야." (이들 사이의 모든 것이 무시됨)    현지의 대체물=args.대체물 또는 파지.대체물 또는 ""    현지의 치환하다={}    위해서 i,j  .스트링.gmatch(대체물,[[%"(.-)%":%"(.-)%"]]) 하다       치환하다[i]=j    끝.     ---- toprow "이 모티브를 수직 주석 없이 맨 위 행에 배치합니다."     ----있는 경우, 특정 특징만을 색상별로 표시하도록 그래픽의 상부를 정의합니다.대개 나선형, 시트, 회전 등입니다.    현지의 토폴로지 텍스트=args.맨 위 행 또는 파지.맨 위 행 또는 ""    현지의 탑로우={}    현지의 상행 높이=0 --누군가가 존재하지 않는 한 높이는 없습니다.    현지의 맨 위 행 -- 맨 위 행에 실제로 어떤 것이 있는지 마킹하기 위한 부울    위해서 i  .스트링.gmatch(토폴로지 텍스트,[[%"(.-)%"]]) 하다       탑로우[i]=1;맨 위 행=진실의    끝.    한다면 맨 위 행 그리고나서 상행 높이=args.상행 높이 또는 파지.상행 높이 또는 10 끝.     ----단백질 시퀀스 파일이 있는지 확인하고 CDS의 시작점과 끝점을 확인합니다.    현지의 파일=args.파일 또는 파지.파일    한다면 것은 아니다.(파일) 그리고나서 돌아가다 "오류: 'file=일부 잘라 붙여 넣은 NCBI 단백질 배열'을 사용하여 도표화할 단백질을 입력합니다." 끝.    현지의 CDS 부팅, CDSend = .스트링.경기(파일,단백질%s-(%d+)%(%d+)%(%d+))    CDS 부팅=톤수(CDS 부팅);CDSend=톤수(CDSend)    한다면 ((CDS 부팅< >1) 또는 (CDSend< >1)) 그리고나서 돌아가다 [[오류: 모듈에서 "Protein: "start amino acid" 행이 필요합니다.CDS를 정의하기 위해 "end amino acid"를 선택합니다.] 끝.    현지의 CDS 폭=CDSend-CDS 부팅     ----사이트와 지역을 검색하여 교환하여 고유한 구분자를 만듭니다.     ----이러한 모든 섹션이 메인루프에서 개별적으로 처리될 수 있도록 합니다.    파일 = .스트링.서브(파일,"사이트 %s+",'##S') -- 입력에 파이프 문자가 없습니다.그렇지 않으면 목이 졸려 버립니다.    파일 = .스트링.서브(파일,"지역 %s+",'##R')    파일 = .스트링.서브(파일,"$"," ## ") --- EOF에서 마지막 기능을 닫습니다.     ----다른 모티브에 사용할 색상 세트를 로드합니다.     ----Unicode 구분자는 모두 변경합니다.형식에 대한 기대는 없습니다.    현지의 컬러 페이지=.직함.신규("템플릿:ImportProtein/DefaultColors")    현지의 내용    현지의 색.={}    한다면 컬러 페이지 그리고나서        내용=컬러 페이지.컨텐츠의 취득(컬러 페이지)        한다면 내용 그리고나서           위해서 x  .스트링.gmatch(내용,(%S+)) 하다               table.insert(색.,x)           끝.        끝.    끝.    한다면 #색.< >1 그리고나서 색.={"#000055","#000099","#0000CC","#0000FF","#550055","#550099","#5500CC","#5500FF","#990055","#990099","#9900CC","#9900FF","#CC0055","#CC0099","#CC00CC","#CC00FF","#FF0000","#FF0055","#FF0099","#FF00CC","#FF00FF","#005555","#005599","#0055CC","#0055FF","#55555","#555599","#5555CC","#5555FF","#995555","#995599","#9955CC","#9955FF","#CC5555","#CC5599","#CC55CC","#CC55FF","#FF5500","#FF555","#FF5599","#FF55CC","#FF55FF"} 끝.    현지의 주장하다={};현지의 넥스트 컬러=1 --루프 전체에서 특정 nkey에 할당된 색상을 추적합니다.        ----출력 파일과 그래픽 파일을 시작합니다.    현지의 산출량    현지의 레전드="" -- 위 표에 표시된 맨 위 행 엔트리의 범례만 해당됩니다.    한다면 표 출력=="실패" 그리고나서 산출량=[[{ class="compatible mw-compatible mw-compatible" style="width:]..  .. [px;"] .. "\n" .. [[!colspan=4 단백질 특징 목록] .. "\n" .. [[ -]] 또 다른 한다면 표 출력=="불가침" 그리고나서 산출량=[[{ class="completible collapsible" style="width:]..  .. [px;"] .. "\n" .. [[!colspan=4 단백질 특징 목록] .. "\n" .. [[ -]] 또 다른 산출량=[[{ class="불합격"]] 끝. 끝.    현지의 그래픽스=[[<div style=" 위치: 표시; 배경색:].. 배경 .. [[;폭:]] ..  .. [[px; 높이:]] .. 높이 .. [px;">]     ----메인 루프 ----     ----특징을 하나씩 살펴보고 "output"(표/표)과 "table"(표/표)로 마크다운합니다(상자 및 수직 주석).     ----이것은 정렬하는 기능의 배열을 작성하는 것이 아니라, 1회만 작성하는 것에 주의해 주세요.     ----예를 들어 인접한 모티브의 위치를 자동으로 좌우로 변경할 수 있는 쉬운 방법이 없습니다.     ----물론 출력을 배열하여 소급 처리할 수 있습니다.이것을 정렬 가능한 함수 테일 호출 배열로 만들 수도 있습니다.(머리가 아파)    위해서 특징, 범위  .스트링.gmatch(파일,"# (.-) #") 하다        현지의 t=.스트링.경기(특징,"^(%a)") -- S 또는 R은 이전 검색/바꾸기에 배치되어 있습니다.        현지의 s=.스트링.경기(특징,"%d+") --첫 번째 번호는 사이트 또는 지역의 시작입니다.        현지의 e=.스트링.경기(특징,"^.%s-%d+%%(%d+)") 또는 s -- xx의 두 번째 숫자..yy range; 이것은 갱신해야 합니다!          한다면 s 그리고나서            ----모티브와 주석으로 사용할 이름을 결정합니다.           현지의 n,c           한다면 t=='R' 그리고나서 n=.스트링.경기(특징,[[/region_name=%(".")%"]) 끝.           한다면 t=='S' 그리고나서 n=.스트링.경기(특징,[[ / site _ type = % ( . ) % " ]) 끝.           n=스트링(n)           한다면 송곳니[n] 그리고나서 n=.스트링.경기(특징,[[/note=%(-)%"]) 또는 n 끝.           n=스트링(n)           n=.스트링.경기(n,"^%s+(.+)%s+$") 또는 n -- 공백 공간을 없애다           n=.스트링.서브(n,"\n"," ") 또는 n -- 회선 피드를 삭제합니다.           n=스트링(n) 내가 편집증적이야?           한다면 치환하다[n] 그리고나서 n=스트링(치환하다[n]) 끝.           n = .스트링.경기(n,"(.+)%.") 또는 n --어디서나 볼 수 있는 최종 기간은 필요 없습니다.            ----이름(n)에서 괄호로 묶인 것을 제외한n키를 꺼냅니다.            ----각 고유 nkey는 앞으로 사용하는 고유의 색상을 주장할 수 있습니다.           현지의 =.스트링.경기(n,"(.+)[%.;,%(%[]") 또는 n           현지의 새로운 색채=거짓의; -- 이것은 새로운 색상입니까(그렇다면 맨 위 행의 경우 범례에 추가합니다).           한다면 주장하다[] 그리고나서 c=주장하다[] 또 다른 c=색.[넥스트 컬러];주장하다[]=c;넥스트 컬러=넥스트 컬러+1;새로운 색채=진실의 끝.           현지의 c스타일=[[style="color:] .. c .. [[;" ]]            ----모티브를 표시할지를 결정해, CDS에 잘라냅니다.           현지의 쇼티스모티프=진실의           s=톤수(s);e=톤수(e)           한다면 s< >CDS 부팅 그리고나서 s=CDS 부팅 끝.           한다면 e>CDSend 그리고나서 e=CDSend 끝.           한다면 s==CDS 부팅 그리고. e==CDSend 그리고나서 쇼티스모티프=제로 끝.           한다면 포함하다 그리고나서 한다면 것은 아니다. (포함하다[n]) 그리고나서 쇼티스모티프=제로 끝. 끝. -- include가 설정되어 있는데 n이 없는 경우 테이블 또는 그래픽에 추가하지 마십시오.           한다면 제외하다 그리고나서 한다면 문자 포함[n] 그리고나서 쇼티스모티프=제로 끝. 끝. -- exclude가 설정되어 있고 n이 그 안에 있는 경우 추가하지 않습니다.           한다면 쇼티스모티프 그리고나서               ---- 범례의 테이블 출력을 업데이트합니다.              한다면 스트링(t)=='R' 그리고나서 산출량 = 산출량 .. "\n" .. c스타일 .. "지역\n" 또 다른 산출량 = 산출량 .. "\n" .. c스타일 .. 「사이트\n" 끝.              산출량 = 산출량 .. c스타일 .. 스트링(s) .. "\n" .. c스타일 .. 스트링(e) .. "\n" .. c스타일 .. n .. "\n-"               ----그래픽 표시 갱신:먼저 블록이 큰지 아닌지를 판단하고, 블록 내부에 주석을 붙입니다.              =.스트링.후보선수(,1,텍스트) -- 그래픽을 위해 문자열을 잘라냅니다(기본값 25자).              현지의 큰.              현지의 왼쪽 상자=math.floor(*톤수(s)/CDS 폭)              현지의 상자 폭=math.floor(*톤수(e)/CDS 폭)-왼쪽 상자              한다면 상자 폭>8*톤수(.스트링.()) 그리고나서 큰.=진실의 또 다른 큰.=제로 끝.               ----그 후 가로 또는 세로 표시를 합니다.              현지의 수직의 -- 그려진 블록의 높이 부분 문자열              현지의 주석="" -- 큰 블록의 텍스트 내용              한다면 탑로우[n] 그리고나서                 수직의=스트링(상행 높이)                 한다면 새로운 색채 그리고나서 레전드=레전드..[[<span style="background-color:] .. c .. [;">&nbsp;&nbsp;/span>] ..  .. "\n" 끝.                 =""              또 다른                 한다면 큰. 그리고나서                     수직의=스트링(높이-상행 높이)                     한다면 맨 위 행 그리고나서 수직의=수직의 .. "px;top:" .. 스트링(상행 높이) 끝.                     주석="'''" ..  .."'''"                     ="" -- 세로 텍스트 표시 없음                 또 다른 수직의=스트링(math.floor(높이) - 상행 높이 - 대형 전용 영역) .. "px;top:" .. 스트링(상행 높이 + 대형 전용 영역)                     =.스트링.서브(,"(.)",%1 <br />) --텍스트를 세로로 합니다.                 끝.              끝.              현지의 z=10000-1*상자 폭 --- 큰 요소 앞에 있는 작은 요소              한다면 것은 아니다.(큰.) 그리고나서 z=z+10000 끝. --- 배면에 큰 요소가 안정적으로 배치되어 있습니다.                -- 단백질 직사각형 안에 그림을 그립니다.              그래픽스 = 그래픽스 .. [[ <div style=" 위치: 절대; 절대: 숨김; z-index:] .. z .. [[;왼쪽:]] .. 왼쪽 상자 .. [[px;border-top:0px;border-botter-bottom:0px;border-left:1px;border-right:1px;border-style:솔리드;border-color:]].. c .. [[;background-color : ]].. c .. [[;폭:]] .. 상자 폭 .. [[px; 높이:]] .. 수직의 .. [[px;text-align:center;"> .. 주석 .. [</div>]                -- 그 아래 수직으로 주석을 그립니다.                -- 텍스트가 없는 경우 전혀 수행하지 않음(nkey==맨 위 행 등)              한다면 것은 아니다. (=="") 그리고나서                   -- 우선 치환 지역인지 아닌지를 판단합니다.- 치환 지역일 경우 그리지 마십시오.                 현지의 찢어진 곳;현지의 =1                 하는 동안에 트리플레이스 영역.s[] 하다                    현지의 rs=트리플레이스 영역.s[]                    현지의 참조.=트리플레이스 영역.e[]                    한다면 s>=rs 그리고. e<=>참조. 그리고나서 찢어진 곳=진실의;브레이크. 끝.                    =+1                 끝.                           한다면 것은 아니다. 찢어진 곳 그리고. 것은 아니다. 큰. 그리고나서                      --- 피쳐의 중앙에 vt를 배치한 후 그 주위에 픽셀을 하나씩 배치합니다.                     --- 청구된 픽셀을 그리지 말고 맨 아래에 이의를 제기합니다.                    현지의 VT=math.floor(왼쪽 상자+상자 폭/2 - 2) -- 세로 텍스트의 가로 위치                    한다면 것은 아니다. 비디오 카드[VT] 그리고나서                       위해서 i = VT-,VT+,1 하다                           비디오 카드[i]=진실의                       끝.                       그래픽스 = 그래픽스 .. [[<span style=" 위치:absolute;text-align:center;줄 높이:90%;줄 크기:85%;줄 크기:85%;줄 크기:text:z-index:100;왼쪽:]] .. VT .. [[px;상단:]] .. math.floor(높이+5) .. [px;">] ..  .. [</span>]                       또 다른 vprotest=vprotest .. s .. "-" .. e .. " "                    끝. -- (toprow[n]가 아닌 경우)                 끝. -- (vclaim이 아닌 경우)              끝. -- (treplace가 아닌 경우)           끝. -- (showthismotif의 경우)        끝. -- (s의 경우)    끝. -- 기능, 범위     --- 루프에서 벗어났습니다.- 이제 사용자 텍스트를 기반으로 선택한 대체 영역에 대한 주석을 그립니다.    현지의 =1       하는 동안에 트리플레이스 영역.s[] 하다          현지의 rs=트리플레이스 영역.s[]          현지의 참조.=트리플레이스 영역.e[]          현지의 rt=.스트링.서브(.스트링.후보선수(트리플레이스 영역.t[],1,텍스트),"(.)",%1 <br />) --텍스트를 세로로 합니다.          현지의 왼쪽 상자=math.floor(*톤수(rs)/CDS 폭)          현지의 상자 폭=math.floor(*톤수(참조.)/CDS 폭)-왼쪽 상자          현지의 VT = math.floor(왼쪽 상자+상자 폭/2 -2) -- 이 공식은 위와 동기화해야 하는데, 상수를 정의하는 것은 어리석은 것 같습니다.           -- 이것은 vClaim을 무시합니다.이것은 사용자 입력이므로 필드의 위치를 변경할 수 있습니다.          그래픽스 = 그래픽스 .. [[<span style=" 위치:absolute;text-align:center;줄 높이:90%;줄 크기:85%;줄 크기:85%;줄 크기:text:z-index:100;왼쪽:]] .. VT .. [[px;상단:]] .. math.floor(높이+5) .. [px;">] .. rt .. [</span>]          =+1       끝.    한다면 것은 아니다.(표 출력) 그리고나서 산출량 = "" 끝.    한다면 레전드 == "" 그리고나서 또 다른 레전드 = [[<div style="너비:]....[;">] .. [["맨 위 행:" ]"] .. 레전드 .. [</div>] 끝.    한다면 vprotest == "" 그리고나서 또 다른 vprotest = "위에 표시되지 않은 수직 주석 중첩: " .. vprotest .. "''" 끝.    한다면 디버깅 로그 == " } }" 그리고나서 디버깅 로그="" 또 다른 디버깅 로그 = 디버깅 로그 .. "\n" 끝.    한다면 텍스트>2 그리고나서 텍스트=텍스트-2 끝. --거기서 테이블을 시작하기 위해 필요한 추가 반환을 보충합니다.    현지의 산출량 = [=[{ style="width:]=]....[px;"] .. "\n".. 그래픽스 .. [[/div><div style="라인 높이:90%;크기:85%;] .. .스트링.대표자("\n",텍스트) .. "/div>" .. 레전드 .. vprotest .. "\n" .. 산출량 .. "\n}\n" .. 디버깅 로그 .. " }\n"    한다면 노우키 그리고나서 산출량 = .전처리(,"<pre><nowiki>"..산출량.."</nowiki></pre>") 끝.    돌아가다 산출량  끝.  돌아가다 p