Class.ScriptDocument 인스턴스는 Studio 스크립트 편집기의 문서의 프록시입니다. 그것은 편집기에서 열린 문서의 상태를 나타내며, 표시는 코드를 실행하는 것보다 읽기 및 편집이 더
스크립트 편집기 자체가 존재하며 다른 스레드에서 DataModel 변경하지만, ScriptDocument 은 스크립트 편집기를 업데이트하지만, 그것은 열린 스크립트 편집기를
Class.ScriptDocument 이 있는 경우 스크립트 편집기에서 문서를 열 수 있습니다. 모든 ScriptDocument 인스턴스에는 ScriptEditorService 가 부모로 지정되어 있습니다. 각 인스턴스는 다음 코딩 규칙을 준수합니다.
- 모든 텍스트는 ScriptDocument 에 있는 UTF-8 인코딩됩니다.
- 모든 라인 인덱스는 1-인덱싱됩니다.
- 모든 캐릭터 인덱스는 1인덱싱되며 UTF-8 바이트이므로 글래프ェ마가 아닌 동일한 경고가 적용됩니다. TextBox.CursorPosition에서 동일한 경고가 적용됩니다: 많은 유니코드 문자가 하나 이상의 바이트를 차지합니다.
- 모든 범위는 시작 위치와 끝 위치가 모두 포함되므로 시작 == 끝은 빈 범위를 나타냅니다.
모든 ScriptDocument API는 플러그인 수준 보안에 있습니다.
요약
메서드
지정된 줄의 텍스트를 반환합니다. 인수를 제공하지 않으면 현재 커서 위치의 줄을 반환합니다.
문서에 있는 줄 수를 반환합니다.
기본 LuaSourceContainer 인스턴스를 반환합니다, 있는 경우 nil 그렇지 않으면.
선택 항목이 없으면 편집기에서 텍스트를 가져오거나 빈 문자열을 가져옵니다.Gets the text selected in the editor, or an empty string if there is no selection.
스크립트 편집기의 마지막 선택을 형식: CursorLine, CursorChar, AnchorLine, AnchorChar 로 반환합니다. 스크립트 편집기에 선택이 없으면 CursorLine == AnchorLine 및 CursorChar == AnchorChar .
커서 위치의 크기를 가져옵니다. 편집기에 선택이 없으면 동일한 값이 됩니다.
커서 위치의 작은 값을 가져옵니다. 편집기에 선택 항목이 없으면 동일합니다.
- GetText(startLine : number?,startCharacter : number?,endLine : number?,endCharacter : number?):string
열린 편집기에서 텍스트를 반환합니다.
편집기 변경에 표시된 줄 번호를 반환합니다.
에디터에 텍스트가 선택되었는지 여부를 반환합니다.
Class.ScriptDocument 가 명령 바를 나타내면 진실로 반환합니다.
이 문서와 관련된 편집기의 요청이 닫다. 편집기가 요청에 응답할 때까지 현재 스레드를 생성합니다.
- EditTextAsync(newText : string,startLine : number,startCharacter : number,endLine : number,endCharacter : number):Tuple
새 텍스트를 사용하여 지정된 범위의 텍스트를 ( startLine , startColumn )에서 ( endLine , 1> endColumn1> )에 대체합니다.
- ForceSetSelectionAsync(cursorLine : number,cursorCharacter : number,anchorLine : number?,anchorCharacter : number?):Tuple
편집기에서 커서 선택을 인수 값으로 설정하도록 요청합니다.
- RequestSetSelectionAsync(cursorLine : number,cursorCharacter : number,anchorLine : number?,anchorCharacter : number?):Tuple
편집기에서 커서 선택을 인수 값으로 설정하도록 요청합니다.
이벤트
- SelectionChanged(positionLine : number,positionCharacter : number,anchorLine : number,anchorCharacter : number):RBXScriptSignal
텍스트 변경 후 즉시 발생하는 스크립트 문서 변경 시 발생합니다.Fires when the ScriptDocument changes, including immediately after a text change.
편집기에서 표시된 줄 번호가 변경될 때 발생합니다.
속성
메서드
GetLine
지정된 줄의 텍스트를 반환합니다. 인수를 제공하지 않으면 현재 커서 위치의 줄을 반환합니다.
매개 변수
반환
코드 샘플
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
scriptDocument.SelectionChanged:Connect(function(positionLine, positionCharacter, anchorLine, anchorCharacter)
print(`Selected: Line {positionLine}, Char {positionCharacter}`)
print(`Anchor: Line {anchorLine}, Char {anchorCharacter}`)
local lineText = scriptDocument:GetLine(positionLine)
print(`Selected line text: {lineText}`)
end)
else
print("No scripts open")
end
GetLineCount
활성 문서의 줄 수를 반환합니다.
반환
코드 샘플
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
local lineCount = scriptDocument:GetLineCount()
print(`The script has {lineCount} lines!`)
else
print("No scripts open")
end
GetScript
기본 LuaSourceContainer 인스턴스를 반환합니다, 있는 경우 nil 그렇지 않으면.
반환
코드 샘플
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
local openScript = scriptDocument:GetScript()
print(`Currently open script: {openScript:GetFullName()}`)
else
print("No scripts open")
end
GetSelectedText
선택 항목이 없으면 편집기에서 텍스트를 가져오거나 빈 문자열을 가져옵니다.Gets the text selected in the editor, or an empty string if there is no selection.
반환
코드 샘플
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
scriptDocument.SelectionChanged:Connect(function()
if scriptDocument:HasSelectedText() then
local selectedText = scriptDocument:GetSelectedText()
print(`Currently selected text: {selectedText}`)
else
print("No text currently selected")
end
end)
else
print("No scripts open")
end
GetSelection
스크립트 편집기의 마지막 선택을 형식: CursorLine, CursorChar, AnchorLine, AnchorChar 로 반환합니다. 스크립트 편집기에 선택이 없으면 CursorLine == AnchorLine 및 CursorChar == AnchorChar .
반환
커서 라인, 커서 캐릭터, 앵커 라인, 앵커 캐릭터.
GetSelectionEnd
커서 위치의 크기를 가져옵니다. 편집기에 선택이 없으면 동일한 값이 됩니다.
반환
코드 샘플
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
local startLine, startCharacter = scriptDocument:GetSelectionStart()
local endLine, endCharacter = scriptDocument:GetSelectionEnd()
print(`Selection start: Line {startLine}, Char {startCharacter}`)
print(`Selection end: Line {endLine}, Char {endCharacter}`)
else
print("No scripts open")
end
GetSelectionStart
커서 위치의 작은 값을 가져옵니다. 편집기에 선택 항목이 없으면 동일합니다.
반환
코드 샘플
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
local startLine, startCharacter = scriptDocument:GetSelectionStart()
local endLine, endCharacter = scriptDocument:GetSelectionEnd()
print(`Selection start: Line {startLine}, Char {startCharacter}`)
print(`Selection end: Line {endLine}, Char {endCharacter}`)
else
print("No scripts open")
end
GetText
열린 편집기에서 텍스트를 반환합니다. 0, 2 또는 4 인수로 호출해야 합니다.
- 0개의 인수로 호출하면 열린 편집기의 모든 콘텐츠를 가져옵니다.
- 2개의 인수로 호출되면 문서 시작 위치(startLine , startColumn )의 텍스트를 가져옵니다.
- 4개의 인수로 호출되면 문서 시작 위치(startLine, startColumn,)에 텍스트를 가져와 종료 위치(endLine, 1> startColumn1>,)에 텍스트를 가져옵니다.
매개 변수
반환
코드 샘플
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
local text = scriptDocument:GetText()
print(`Script contents: {text}`)
else
print("No scripts open")
end
GetViewport
편집기 변경에서 현재 표시되는 줄 번호를 반환합니다. 편집기는 시작 라인과 끝 라인 사이의 줄을 표시합니다, 포함. 첫 번째 줄은 부분적으로만 표시될 수 있습니다. 예를 들어, 마지막 줄의 상위 픽셀만 화면에 표시될 수 있습니다. 또한, 코드 폴딩은 시작 라인과 끝 라인 사이의 줄
반환
코드 샘플
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
local firstLine, lastLine = scriptDocument:GetViewport()
print(`Currently viewing lines {firstLine} to {lastLine}`)
else
print("No scripts open")
end
HasSelectedText
에디터에 텍스트가 선택되었는지 여부를 반환합니다.
반환
코드 샘플
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
scriptDocument.SelectionChanged:Connect(function()
if scriptDocument:HasSelectedText() then
local selectedText = scriptDocument:GetSelectedText()
print(`Currently selected text: {selectedText}`)
else
print("No text currently selected")
end
end)
else
print("No scripts open")
end
IsCommandBar
Class.ScriptDocument 가 명령 바를 나타내면 진실로 반환합니다. 명령 바에는 이 API에서 특별한 규칙 및 제한이 있습니다.
- Studio는 플러그인을 실행하기 전에 명령 바를 만들므로 데이터 모델 사이에서 Studio가 닫힌 상태에서 열린 이벤트를 다시 열지는 않지만 항상 열린 상태로 재설정됩니다.
- 보안 이유로 EditTextAsync로 명령 바를 편집할 수 없습니다.
반환
코드 샘플
--!nocheck
-- Run the following code in the Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if document:IsCommandBar() then
print("Command bar document:", document)
end
end
CloseAsync
편집기가 이 문서와 관련된 요청을 닫다. 편집기가 요청에 응답할 때까지 현재 스레드를 생성합니다. 함수가 성공하면 반환(true, null)이 됩니다. 함수가 실패하면 설명(문자열)이 문제의 설명으로 표시됩니다.
이 함수는 명령 바를 닫을 수 없습니다.
반환
코드 샘플
--!nocheck
-- Run the following code in the Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
local documents = ScriptEditorService:GetScriptDocuments()
local scriptDocument
-- Find the first open script document
for _, document in documents do
-- The Command Bar can't be closed, so don't select it
if not document:IsCommandBar() then
scriptDocument = document
break
end
end
if scriptDocument then
local success, err = scriptDocument:CloseAsync()
if success then
print(`Closed {scriptDocument.Name}`)
else
warn(`Failed to close {scriptDocument.Name} because: {err}`)
end
else
print("No open scripts")
end
EditTextAsync
편집에 대한 응답을 편집에 대한 리플리케이션으로 작성하는 경우 범위의 텍스트를 ( startLine ,
함수가 성공하면 ( true , nil )을 반환합니다.
함수가 오류를 던져 버리면:
- 범위가 유효하지 않은.
- 범위는 유니코드 문자를 잘라냈습니다, 예를 들어 유니코드 문자의 일부만 바꿀 수 있습니다.
- 새 텍스트 자체에는 유효하지 않은 UTF-8이 포함되어 있습니다.
함수가 실패하면 ( false, string ) 이 반환됩니다. 문자열은 문제에 대한 설명입니다. 가장 일반적인 오류 유형은 버전 불일치입니다. 이는 편집기가 EditTextAsync 와 동기화되지 않은 동안 ScriptDocument 를 시도하는 경우에 발생합니다. 이 경우 편집을 다
매개 변수
반환
ForceSetSelectionAsync
편집기에서 커서 선택을 값 집합으로 설정하도록 요청합니다. 모든 앵커 인수는 패스해야 하거나 아닙니다. 아무 것도 패스되지 않으면 편집기는 커서를 기본값으
매개 변수
반환
코드 샘플
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
-- Get the text on the cursor's current line
local cursorLine = scriptDocument:GetSelection()
local lineText = scriptDocument:GetLine(cursorLine)
-- Force select the entire line of text
local success, err = scriptDocument:ForceSetSelectionAsync(cursorLine, 1, cursorLine, #lineText + 1)
if success then
print("Set selection!")
else
print(`Failed to set selection because: {err}`)
end
else
print("No scripts open")
end
RequestSetSelectionAsync
편집기에서 커서 선택을 인수 값으로 설정하도록 요청합니다. 모든 앵커 인수는 패스해야 하거나 아닙니다. 아무 것도 패스되지 않으면 커서가 해당 앵커 인수와 동일하게 설정됩니다. 편집기는 문서 콘텐
매개 변수
반환
코드 샘플
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
-- Get the text on the cursor's current line
local cursorLine = scriptDocument:GetSelection()
local lineText = scriptDocument:GetLine(cursorLine)
-- Force select the entire line of text
local success, err = scriptDocument:RequestSetSelectionAsync(cursorLine, 1, cursorLine, #lineText + 1)
if success then
print("Set selection!")
else
print(`Failed to set selection because: {err}`)
end
else
print("No scripts open")
end
이벤트
SelectionChanged
텍스트 변경 후 즉시 발생하는 스크립트 문서 변경 시 발생합니다.Fires when the ScriptDocument changes, including immediately after a text change.
매개 변수
코드 샘플
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
scriptDocument.SelectionChanged:Connect(function(positionLine, positionCharacter, anchorLine, anchorCharacter)
print(`Selected: Line {positionLine}, Char {positionCharacter}`)
print(`Anchor: Line {anchorLine}, Char {anchorCharacter}`)
local lineText = scriptDocument:GetLine(positionLine)
print(`Selected line text: {lineText}`)
end)
else
print("No scripts open")
end
ViewportChanged
편집기에서 표시된 줄 번호가 변경될 때 발생합니다. 자세한 내용은 ScriptDocument.GetViewport 를 참조하십시오.
매개 변수
코드 샘플
--!nocheck
--[[
To run:
1. Ensure Output view is open
2. Run the below code in the Command Bar
3. Scroll up and down in the opened Script window
Print statements from the ViewportChanged event will appear in the Output
]]
local Workspace = game:GetService("Workspace")
local ScriptEditorService = game:GetService("ScriptEditorService")
-- Create text that spans many lines
local dummyText = string.rep("-- Dummy Text\n", 60)
-- Create a script containing the dummy text and open it
local otherScript = Instance.new("Script")
otherScript.Source = dummyText
otherScript.Parent = Workspace
local success, err = ScriptEditorService:OpenScriptDocumentAsync(otherScript)
if not success then
warn(`Failed to open script because: {err}`)
return
end
-- Get a reference to the opened script
local scriptDocument = ScriptEditorService:FindScriptDocument(otherScript)
local function onViewportChanged(startLine: number, endLine: number)
print(`Script Viewport Changed - startLine: {startLine}, endLine: {endLine}`)
end
-- Connect the ViewportChanged event to the function above that prints the start and end line of the updated viewport
scriptDocument.ViewportChanged:Connect(onViewportChanged)