static void menu_cb_runSelection (EDITOR_ARGS) { EDITOR_IAM (ScriptEditor); if (my interpreter -> running) Melder_throw (U"The script is already running (paused). Please close or continue the pause or demo window."); autostring32 text = GuiText_getSelection (my textWidget); if (text.peek() == NULL) Melder_throw (U"No text selected."); structMelderFile file = { 0 }; if (my name [0]) { Melder_pathToFile (my name, & file); MelderFile_setDefaultDir (& file); } Melder_includeIncludeFiles (& text); int npar = Interpreter_readParameters (my interpreter, text.peek()); if (npar) { /* * Pop up a dialog box for querying the arguments. */ forget (my argsDialog); my argsDialog = Interpreter_createForm (my interpreter, my d_windowForm, NULL, args_ok_selectionOnly, me, true); UiForm_do (my argsDialog, false); } else { autoPraatBackground background; if (my name [0]) MelderFile_setDefaultDir (& file); Interpreter_run (my interpreter, text.peek()); } }
static void menu_cb_run (ScriptEditor me, EDITOR_ARGS_DIRECT) { if (my interpreter -> running) Melder_throw (U"The script is already running (paused). Please close or continue the pause or demo window."); autostring32 text = GuiText_getString (my textWidget); trace (U"Running the following script (1):\n", text.peek()); structMelderFile file = { 0 }; if (my name [0]) { Melder_pathToFile (my name, & file); MelderFile_setDefaultDir (& file); } Melder_includeIncludeFiles (& text); int npar = Interpreter_readParameters (my interpreter.get(), text.peek()); if (npar) { /* * Pop up a dialog box for querying the arguments. */ my argsDialog = autoUiForm (Interpreter_createForm (my interpreter.get(), my d_windowForm, nullptr, args_ok, me, false)); UiForm_do (my argsDialog.get(), false); } else { autoPraatBackground background; if (my name [0]) MelderFile_setDefaultDir (& file); trace (U"Running the following script (2):\n", text.peek()); Interpreter_run (my interpreter.get(), text.peek()); } }
static void args_ok (UiForm sendingForm, int /* narg */, Stackel /* args */, const char32 * /* sendingString */, Interpreter /* interpreter */, const char32 * /* invokingButtonTitle */, bool /* modified */, void *void_me) { iam (ScriptEditor); autostring32 text = GuiText_getString (my textWidget); structMelderFile file = { 0 }; if (my name [0]) { Melder_pathToFile (my name, & file); MelderFile_setDefaultDir (& file); } Melder_includeIncludeFiles (& text); Interpreter_getArgumentsFromDialog (my interpreter.get(), sendingForm); autoPraatBackground background; if (my name [0]) MelderFile_setDefaultDir (& file); Interpreter_run (my interpreter.get(), text.peek()); }
static void args_ok_selectionOnly (UiForm sendingForm, int /* narg */, Stackel /* args */, const char32 * /* sendingString */, Interpreter /* interpreter */, const char32 * /* invokingButtonTitle */, bool /* modified */, void *void_me) { iam (ScriptEditor); autostring32 text = GuiText_getSelection (my textWidget); if (! text.peek()) Melder_throw (U"No text is selected any longer.\nPlease reselect or click Cancel."); structMelderFile file = { 0 }; if (my name [0]) { Melder_pathToFile (my name, & file); MelderFile_setDefaultDir (& file); } Melder_includeIncludeFiles (& text); Interpreter_getArgumentsFromDialog (my interpreter, sendingForm); autoPraatBackground background; if (my name [0]) MelderFile_setDefaultDir (& file); Interpreter_run (my interpreter, text.peek()); }
static void args_ok (UiForm sendingForm, int narg_dummy, Stackel args_dummy, const char32 *sendingString_dummy, Interpreter interpreter_dummy, const char32 *invokingButtonTitle, bool modified_dummy, I) { iam (ScriptEditor); (void) narg_dummy; (void) args_dummy; (void) sendingString_dummy; (void) interpreter_dummy; (void) invokingButtonTitle; (void) modified_dummy; autostring32 text = GuiText_getString (my textWidget); structMelderFile file = { 0 }; if (my name [0]) { Melder_pathToFile (my name, & file); MelderFile_setDefaultDir (& file); } Melder_includeIncludeFiles (& text); Interpreter_getArgumentsFromDialog (my interpreter, sendingForm); autoPraatBackground background; if (my name [0]) MelderFile_setDefaultDir (& file); Interpreter_run (my interpreter, text.peek()); }
static void args_ok_selectionOnly (UiForm sendingForm, int narg_dummy, Stackel args_dummy, const char32 *sendingString_dummy, Interpreter interpreter_dummy, const char32 *invokingButtonTitle, bool modified_dummy, I) { iam (ScriptEditor); (void) narg_dummy; (void) args_dummy; (void) sendingString_dummy; (void) interpreter_dummy; (void) invokingButtonTitle; (void) modified_dummy; autostring32 text = GuiText_getSelection (my textWidget); if (text.peek() == NULL) Melder_throw (U"No text is selected any longer.\nPlease reselect or click Cancel."); structMelderFile file = { 0 }; if (my name [0]) { Melder_pathToFile (my name, & file); MelderFile_setDefaultDir (& file); } Melder_includeIncludeFiles (& text); Interpreter_getArgumentsFromDialog (my interpreter, sendingForm); autoPraatBackground background; if (my name [0]) MelderFile_setDefaultDir (& file); Interpreter_run (my interpreter, text.peek()); }
int HyperPage_script (I, double width_inches, double height_inches, const wchar_t *script) { iam (HyperPage); wchar_t *text = Melder_wcsdup_f (script); Interpreter interpreter = Interpreter_createFromEnvironment (NULL); double topSpacing = 0.1, bottomSpacing = 0.1, minFooterDistance = 0.0; kGraphics_font font = my font; int size = my fontSize; double true_width_inches = width_inches * ( width_inches < 0.0 ? -1.0 : size / 12.0 ); double true_height_inches = height_inches * ( height_inches < 0.0 ? -1.0 : size / 12.0 ); if (! my printing) { my d_y -= ( my previousBottomSpacing > topSpacing ? my previousBottomSpacing : topSpacing ) * size / 12.0; if (my d_y > PAGE_HEIGHT + true_height_inches || my d_y < PAGE_HEIGHT - SCREEN_HEIGHT) { my d_y -= true_height_inches; } else { my d_y -= true_height_inches; Graphics_setFont (my g, font); Graphics_setFontStyle (my g, 0); Graphics_setFontSize (my g, size); my d_x = true_width_inches > my rightMargin ? 0 : 0.5 * (my rightMargin - true_width_inches); Graphics_setWrapWidth (my g, 0); long x1DCold, x2DCold, y1DCold, y2DCold; Graphics_inqWsViewport (my g, & x1DCold, & x2DCold, & y1DCold, & y2DCold); double x1NDCold, x2NDCold, y1NDCold, y2NDCold; Graphics_inqWsWindow (my g, & x1NDCold, & x2NDCold, & y1NDCold, & y2NDCold); { if (my praatApplication == NULL) my praatApplication = Melder_calloc_f (structPraatApplication, 1); if (my praatObjects == NULL) my praatObjects = Melder_calloc_f (structPraatObjects, 1); if (my praatPicture == NULL) my praatPicture = Melder_calloc_f (structPraatPicture, 1); theCurrentPraatApplication = (PraatApplication) my praatApplication; theCurrentPraatApplication -> batch = true; // prevent creation of editor windows theCurrentPraatApplication -> topShell = theForegroundPraatApplication. topShell; // needed for UiForm_create () in dialogs theCurrentPraatObjects = (PraatObjects) my praatObjects; theCurrentPraatPicture = (PraatPicture) my praatPicture; theCurrentPraatPicture -> graphics = my g; // has to draw into HyperPage rather than Picture window theCurrentPraatPicture -> font = font; theCurrentPraatPicture -> fontSize = size; theCurrentPraatPicture -> lineType = Graphics_DRAWN; theCurrentPraatPicture -> colour = Graphics_BLACK; theCurrentPraatPicture -> lineWidth = 1.0; theCurrentPraatPicture -> arrowSize = 1.0; theCurrentPraatPicture -> x1NDC = my d_x; theCurrentPraatPicture -> x2NDC = my d_x + true_width_inches; theCurrentPraatPicture -> y1NDC = my d_y; theCurrentPraatPicture -> y2NDC = my d_y + true_height_inches; Graphics_setViewport (my g, theCurrentPraatPicture -> x1NDC, theCurrentPraatPicture -> x2NDC, theCurrentPraatPicture -> y1NDC, theCurrentPraatPicture -> y2NDC); Graphics_setWindow (my g, 0.0, 1.0, 0.0, 1.0); long x1DC, y1DC, x2DC, y2DC; Graphics_WCtoDC (my g, 0.0, 0.0, & x1DC, & y2DC); Graphics_WCtoDC (my g, 1.0, 1.0, & x2DC, & y1DC); Graphics_resetWsViewport (my g, x1DC, x2DC, y1DC, y2DC); Graphics_setWsWindow (my g, 0, width_inches, 0, height_inches); theCurrentPraatPicture -> x1NDC = 0; theCurrentPraatPicture -> x2NDC = width_inches; theCurrentPraatPicture -> y1NDC = 0; theCurrentPraatPicture -> y2NDC = height_inches; Graphics_setViewport (my g, theCurrentPraatPicture -> x1NDC, theCurrentPraatPicture -> x2NDC, theCurrentPraatPicture -> y1NDC, theCurrentPraatPicture -> y2NDC); { // scope autoMelderProgressOff progress; autoMelderWarningOff warning; autoMelderSaveDefaultDir saveDir; if (! MelderDir_isNull (& my rootDirectory)) { Melder_setDefaultDir (& my rootDirectory); } try { Interpreter_run (interpreter, text); } catch (MelderError) { if (my scriptErrorHasBeenNotified) { Melder_clearError (); } else { Melder_flushError (NULL); my scriptErrorHasBeenNotified = true; } } } Graphics_setLineType (my g, Graphics_DRAWN); Graphics_setLineWidth (my g, 1.0); Graphics_setArrowSize (my g, 1.0); Graphics_setColour (my g, Graphics_BLACK); /*Graphics_Link *paragraphLinks; long numberOfParagraphLinks = Graphics_getLinks (& paragraphLinks); if (my links) for (long ilink = 1; ilink <= numberOfParagraphLinks; ilink ++) { HyperLink link = HyperLink_create (paragraphLinks [ilink]. name, paragraphLinks [ilink]. x1, paragraphLinks [ilink]. x2, paragraphLinks [ilink]. y1, paragraphLinks [ilink]. y2); Collection_addItem (my links, link); }*/ theCurrentPraatApplication = & theForegroundPraatApplication; theCurrentPraatObjects = & theForegroundPraatObjects; theCurrentPraatPicture = & theForegroundPraatPicture; } Graphics_resetWsViewport (my g, x1DCold, x2DCold, y1DCold, y2DCold); Graphics_setWsWindow (my g, x1NDCold, x2NDCold, y1NDCold, y2NDCold); Graphics_setViewport (my g, 0, 1, 0, 1); Graphics_setWindow (my g, 0, 1, 0, 1); Graphics_setTextAlignment (my g, Graphics_LEFT, Graphics_BOTTOM); } } else { Graphics_setFont (my ps, font); Graphics_setFontStyle (my ps, 0); Graphics_setFontSize (my ps, size); my d_y -= my d_y == PAPER_TOP - TOP_MARGIN ? 0 : ( my previousBottomSpacing > topSpacing ? my previousBottomSpacing : topSpacing ) * size / 12.0; my d_y -= true_height_inches; if (my d_y < PAPER_BOTTOM + BOTTOM_MARGIN + minFooterDistance) { Graphics_nextSheetOfPaper (my ps); if (my d_printingPageNumber) my d_printingPageNumber ++; HyperPage_initSheetOfPaper (me); Graphics_setFont (my ps, font); Graphics_setFontSize (my ps, size); my d_y -= true_height_inches; } my d_x = 3.7 - 0.5 * true_width_inches; if (my d_x < 0) my d_x = 0; Graphics_setWrapWidth (my ps, 0); long x1DCold, x2DCold, y1DCold, y2DCold; Graphics_inqWsViewport (my ps, & x1DCold, & x2DCold, & y1DCold, & y2DCold); double x1NDCold, x2NDCold, y1NDCold, y2NDCold; Graphics_inqWsWindow (my ps, & x1NDCold, & x2NDCold, & y1NDCold, & y2NDCold); { if (my praatApplication == NULL) my praatApplication = Melder_calloc_f (structPraatApplication, 1); if (my praatObjects == NULL) my praatObjects = Melder_calloc_f (structPraatObjects, 1); if (my praatPicture == NULL) my praatPicture = Melder_calloc_f (structPraatPicture, 1); theCurrentPraatApplication = (PraatApplication) my praatApplication; theCurrentPraatApplication -> batch = true; theCurrentPraatApplication -> topShell = theForegroundPraatApplication. topShell; // needed for UiForm_create () in dialogs theCurrentPraatObjects = (PraatObjects) my praatObjects; theCurrentPraatPicture = (PraatPicture) my praatPicture; theCurrentPraatPicture -> graphics = my ps; theCurrentPraatPicture -> font = font; theCurrentPraatPicture -> fontSize = size; theCurrentPraatPicture -> lineType = Graphics_DRAWN; theCurrentPraatPicture -> colour = Graphics_BLACK; theCurrentPraatPicture -> lineWidth = 1.0; theCurrentPraatPicture -> arrowSize = 1.0; theCurrentPraatPicture -> x1NDC = my d_x; theCurrentPraatPicture -> x2NDC = my d_x + true_width_inches; theCurrentPraatPicture -> y1NDC = my d_y; theCurrentPraatPicture -> y2NDC = my d_y + true_height_inches; Graphics_setViewport (my ps, theCurrentPraatPicture -> x1NDC, theCurrentPraatPicture -> x2NDC, theCurrentPraatPicture -> y1NDC, theCurrentPraatPicture -> y2NDC); Graphics_setWindow (my ps, 0.0, 1.0, 0.0, 1.0); long x1DC, y1DC, x2DC, y2DC; Graphics_WCtoDC (my ps, 0.0, 0.0, & x1DC, & y2DC); Graphics_WCtoDC (my ps, 1.0, 1.0, & x2DC, & y1DC); long shift = (long) (Graphics_getResolution (my ps) * true_height_inches) + (y1DCold - y2DCold); Graphics_resetWsViewport (my ps, x1DC, x2DC, y1DC + shift, y2DC + shift); Graphics_setWsWindow (my ps, 0, width_inches, 0, height_inches); theCurrentPraatPicture -> x1NDC = 0; theCurrentPraatPicture -> x2NDC = width_inches; theCurrentPraatPicture -> y1NDC = 0; theCurrentPraatPicture -> y2NDC = height_inches; Graphics_setViewport (my ps, theCurrentPraatPicture -> x1NDC, theCurrentPraatPicture -> x2NDC, theCurrentPraatPicture -> y1NDC, theCurrentPraatPicture -> y2NDC); { // scope autoMelderProgressOff progress; autoMelderWarningOff warning; autoMelderSaveDefaultDir saveDir; if (! MelderDir_isNull (& my rootDirectory)) { Melder_setDefaultDir (& my rootDirectory); } try { Interpreter_run (interpreter, text); } catch (MelderError) { Melder_clearError (); } } Graphics_setLineType (my ps, Graphics_DRAWN); Graphics_setLineWidth (my ps, 1.0); Graphics_setArrowSize (my ps, 1.0); Graphics_setColour (my ps, Graphics_BLACK); theCurrentPraatApplication = & theForegroundPraatApplication; theCurrentPraatObjects = & theForegroundPraatObjects; theCurrentPraatPicture = & theForegroundPraatPicture; } Graphics_resetWsViewport (my ps, x1DCold, x2DCold, y1DCold, y2DCold); Graphics_setWsWindow (my ps, x1NDCold, x2NDCold, y1NDCold, y2NDCold); Graphics_setViewport (my ps, 0, 1, 0, 1); Graphics_setWindow (my ps, 0, 1, 0, 1); Graphics_setTextAlignment (my ps, Graphics_LEFT, Graphics_BOTTOM); } my previousBottomSpacing = bottomSpacing; forget (interpreter); Melder_free (text); return 1; }