// ĠCopyright Ġ 2 0 0 0 - 2 0 2 1 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ package Ġtraining . dsl Ċ Ċ import Ġcom . intellij . openapi . application . Modal ity State Ċ import Ġcom . intellij . util . concurrency . annotations . Requires Ed t Ċ import Ġorg . intellij . lang . annotations . Language Ċ import Ġorg . jetbrains . annotations . N ls Ċ Ċ @ Learning Dsl Ċ abstract Ġclass ĠLess on Context Ġ: ĠLearning Dsl Base Ġ{ ĊĠ Ġ/** ĊĠĠ Ġ* ĠStart Ġa Ġnew Ġtask Ġin Ġa Ġlesson Ġcontext ĊĠĠ Ġ*/ ĊĠ Ġ@ Requires Ed t ĊĠ Ġopen Ġfun Ġtask ( task Content : ĠTask Context . () Ġ-> ĠUnit ) Ġ= ĠUnit ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThere Ġwill Ġnot Ġbe Ġany Ġfreeze Ġin ĠGUI Ġthread . ĊĠĠ Ġ* ĠThe Ġcontinuation Ġof Ġthe Ġscript Ġwill Ġbe Ġscheduled Ġwith Ġthe Ġ[ delay Millis ] ĊĠĠ Ġ*/ ĊĠ Ġopen Ġfun Ġwait Before Continue ( delay Millis : ĠInt ) Ġ= ĠUnit ĊĊĠ Ġ/// ĠSH ORT CUT S Ġ/// ĊĊĠ Ġfun Ġprepare Runtime Task ( modal ity State : ĠMod ality State ? Ġ= ĠMod ality State . any (), Ġpreparation : ĠTask Runtime Context . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġtask Ġ{ ĊĠĠĠĠĠ Ġadd Future Step Ġ{ ĊĠĠĠĠĠĠĠ Ġtask Invoke Later ( modal ity State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġpreparation () ĊĠĠĠĠĠĠĠĠĠ Ġcomplete Step () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĠDescribe Ġa Ġsimple Ġtask : Ġjust Ġone Ġaction Ġrequired Ġ*/ ĊĠ Ġfun Ġaction Task ( action : ĠString , Ġ@ N ls ĠgetText : ĠTask Context .( action : ĠString ) Ġ-> ĠString ) Ġ{ ĊĠĠĠ Ġtask Ġ{ ĊĠĠĠĠĠ Ġtext ( getText ( action )) ĊĠĠĠĠĠ Ġtrigger ( action ) ĊĠĠĠĠĠ Ġtest Ġ{ Ġactions ( action ) Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġtext (@ Language (" HTML ") Ġ@ N ls Ġtext : ĠString ) Ġ= Ġtask Ġ{ Ġtext ( text ) Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠJust Ġshortcut Ġto Ġwrite Ġaction Ġname Ġonce ĊĠĠ Ġ* Ġ@ see Ġtask ĊĠĠ Ġ*/ ĊĠ Ġfun Ġtask ( action : ĠString , Ġtask Content : ĠTask Context .( action : ĠString ) Ġ-> ĠUnit ) Ġ= Ġtask Ġ{ ĊĠĠĠ Ġtask Content ( action ) ĊĠ Ġ} ĊĊĠ Ġ/** ĠSelect Ġtext Ġin Ġeditor Ġ*/ ĊĠ Ġfun Ġselect ( start Line : ĠInt , Ġstart Column : ĠInt , Ġend Line : ĠInt , Ġend Column : ĠInt ) Ġ= Ġprepare Runtime Task Ġ{ ĊĠĠĠ Ġselect ( start Line , Ġstart Column , Ġend Line , Ġend Column ) ĊĠ Ġ} ĊĊĠ Ġopen Ġfun Ġcaret ( offset : ĠInt ) Ġ= Ġprepare Runtime Task Ġ{ ĊĠĠĠ Ġcaret ( offset ) ĊĠ Ġ} ĊĊĠ Ġ/** ĠNOTE : Ġ Ġ[ line ] Ġand Ġ[ column ] Ġstarts Ġfrom Ġ 1 Ġnot Ġfrom Ġzero . ĠSo Ġthese Ġparameters Ġshould Ġbe Ġsame Ġas Ġin Ġeditors . Ġ*/ ĊĠ Ġopen Ġfun Ġcaret ( line : ĠInt , Ġcolumn : ĠInt ) Ġ= Ġprepare Runtime Task Ġ{ ĊĠĠĠ Ġcaret ( line , Ġcolumn ) ĊĠ Ġ} ĊĊĠ Ġopen Ġfun Ġcaret ( text : ĠString , Ġselect : ĠBoolean Ġ= Ġfalse ) Ġ= Ġprepare Runtime Task Ġ{ ĊĠĠĠ Ġcaret ( text , Ġselect ) ĊĠ Ġ} ĊĊĠ Ġopen Ġfun Ġcaret ( position : ĠLess on Sample Position ) Ġ= Ġprepare Runtime Task Ġ{ ĊĠĠĠ Ġcaret ( position ) ĊĠ Ġ} ĊĊĠ Ġopen Ġfun Ġprepare Sample ( sample : ĠLess on Sample ) Ġ= Ġprepare Runtime Task Ġ{ ĊĠĠĠ Ġset Sample ( sample ) ĊĠ Ġ} Ċ } Ċ