⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smartindent.c

📁 nedit 是一款linux下的开发源码的功能强大的编辑器
💻 C
📖 第 1 页 / 共 5 页
字号:
	    XmNtopAttachment, XmATTACH_WIDGET,	    XmNtopWidget, lmForm,	    XmNbottomAttachment, XmATTACH_WIDGET,	    XmNbottomWidget, okBtn, NULL);     	    /* XmNmarginWidth, 0, XmNmarginHeight, 0, XmNseparatorOn, False,    	    XmNspacing, 3, XmNsashIndent, -2, */    initForm = XtVaCreateManagedWidget("initForm", xmFormWidgetClass,	    pane, NULL);    initLbl = XtVaCreateManagedWidget("initLbl", xmLabelGadgetClass, initForm,    	    XmNlabelString, s1=XmStringCreateSimple(    	     "Language Specific Initialization Macro Commands and Definitions"),    	    XmNmnemonic, 'I', NULL);    XmStringFree(s1);    n = 0;    XtSetArg(args[n], XmNeditMode, XmMULTI_LINE_EDIT); n++;    XtSetArg(args[n], XmNrows, 5); n++;    XtSetArg(args[n], XmNcolumns, 80); n++;    XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;    XtSetArg(args[n], XmNtopWidget, initLbl); n++;    XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;    XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;    XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;    SmartIndentDialog.initMacro = XmCreateScrolledText(initForm,    	    "initMacro", args, n);    AddMouseWheelSupport(SmartIndentDialog.initMacro);    XtManageChild(SmartIndentDialog.initMacro);    RemapDeleteKey(SmartIndentDialog.initMacro);    XtVaSetValues(initLbl, XmNuserData, SmartIndentDialog.initMacro, NULL);    newlineForm = XtVaCreateManagedWidget("newlineForm", xmFormWidgetClass,	    pane, NULL);    newlineLbl = XtVaCreateManagedWidget("newlineLbl", xmLabelGadgetClass,    	    newlineForm,    	    XmNlabelString, s1=XmStringCreateSimple("Newline Macro"),    	    XmNmnemonic, 'N', NULL);    XmStringFree(s1);    XtVaCreateManagedWidget("newlineArgsLbl", xmLabelGadgetClass,    	    newlineForm, XmNalignment, XmALIGNMENT_END,    	    XmNlabelString, s1=XmStringCreateSimple(	       "($1 is insert position, return indent request or -1)"),	    XmNrightAttachment, XmATTACH_FORM, NULL);    XmStringFree(s1);    n = 0;    XtSetArg(args[n], XmNeditMode, XmMULTI_LINE_EDIT); n++;    XtSetArg(args[n], XmNrows, 5); n++;    XtSetArg(args[n], XmNcolumns, 80); n++;    XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;    XtSetArg(args[n], XmNtopWidget, newlineLbl); n++;    XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;    XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;    XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;    SmartIndentDialog.newlineMacro = XmCreateScrolledText(newlineForm,    	    "newlineMacro", args, n);    AddMouseWheelSupport(SmartIndentDialog.newlineMacro);    XtManageChild(SmartIndentDialog.newlineMacro);    RemapDeleteKey(SmartIndentDialog.newlineMacro);    XtVaSetValues(newlineLbl, XmNuserData, SmartIndentDialog.newlineMacro,NULL);    modifyForm = XtVaCreateManagedWidget("modifyForm", xmFormWidgetClass,	    pane, NULL);    modifyLbl = XtVaCreateManagedWidget("modifyLbl", xmLabelGadgetClass,    	    modifyForm, XmNlabelString,s1=XmStringCreateSimple("Type-in Macro"),    	    XmNmnemonic, 'M', NULL);    XmStringFree(s1);    XtVaCreateManagedWidget("modifyArgsLbl", xmLabelGadgetClass,    	    modifyForm, XmNalignment, XmALIGNMENT_END,    	    XmNlabelString, s1=XmStringCreateSimple(	        "($1 is position, $2 is character just inserted)"),	    XmNrightAttachment, XmATTACH_FORM, NULL);    XmStringFree(s1);    n = 0;    XtSetArg(args[n], XmNeditMode, XmMULTI_LINE_EDIT); n++;    XtSetArg(args[n], XmNrows, 5); n++;    XtSetArg(args[n], XmNcolumns, 80); n++;    XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;    XtSetArg(args[n], XmNtopWidget, modifyLbl); n++;    XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;    XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;    XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;    SmartIndentDialog.modMacro = XmCreateScrolledText(modifyForm,    	    "modifyMacro", args, n);    AddMouseWheelSupport(SmartIndentDialog.modMacro);    XtManageChild(SmartIndentDialog.modMacro);    RemapDeleteKey(SmartIndentDialog.modMacro);    XtVaSetValues(modifyLbl, XmNuserData, SmartIndentDialog.modMacro, NULL);    /* Set initial default button */    XtVaSetValues(form, XmNdefaultButton, okBtn, NULL);    XtVaSetValues(form, XmNcancelButton, dismissBtn, NULL);        /* Handle mnemonic selection of buttons and focus to dialog */    AddDialogMnemonicHandler(form, FALSE);        /* Fill in the dialog information for the selected language mode */    setSmartIndentDialogData(findIndentSpec(lmName));    SetLangModeMenu(SmartIndentDialog.lmOptMenu,SmartIndentDialog.langModeName);        /* Realize all of the widgets in the new dialog */    RealizeWithoutForcingPosition(SmartIndentDialog.shell);}static void destroyCB(Widget w, XtPointer clientData, XtPointer callData){    XtFree(SmartIndentDialog.langModeName);    SmartIndentDialog.shell = NULL;}static void langModeCB(Widget w, XtPointer clientData, XtPointer callData){    char *modeName;    int i, resp;    static smartIndentRec emptyIndentSpec = {NULL, NULL, NULL, NULL};    smartIndentRec *oldMacros, *newMacros;	        /* Get the newly selected mode name.  If it's the same, do nothing */    XtVaGetValues(w, XmNuserData, &modeName, NULL);    if (!strcmp(modeName, SmartIndentDialog.langModeName))    	return;    /* Find the original macros */    for (i=0; i<NSmartIndentSpecs; i++)    	if (!strcmp(SmartIndentDialog.langModeName,SmartIndentSpecs[i]->lmName))	    break;    oldMacros = i == NSmartIndentSpecs ? &emptyIndentSpec : SmartIndentSpecs[i];        /* Check if the macros have changed, if so allow user to apply, discard,       or cancel */    newMacros = getSmartIndentDialogData();    if (indentSpecsDiffer(oldMacros, newMacros))    {        resp = DialogF(DF_QUES, SmartIndentDialog.shell, 3, "Smart Indent",                "Smart indent macros for language mode\n"                "%s were changed.  Apply changes?", "Apply", "Discard",                "Cancel", SmartIndentDialog.langModeName);        if (resp == 3)        {            SetLangModeMenu(SmartIndentDialog.lmOptMenu,            SmartIndentDialog.langModeName);            return;        } else if (resp == 1)        {            if (checkSmartIndentDialogData())            {                if (oldMacros == &emptyIndentSpec)                {                    SmartIndentSpecs[NSmartIndentSpecs++]                            = copyIndentSpec(newMacros);                } else                {                    freeIndentSpec(oldMacros);                    SmartIndentSpecs[i] = copyIndentSpec(newMacros);                }            } else            {                SetLangModeMenu(SmartIndentDialog.lmOptMenu,                SmartIndentDialog.langModeName);                return;            }        }    }    freeIndentSpec(newMacros);        /* Fill the dialog with the new language mode information */    SmartIndentDialog.langModeName = XtNewString(modeName);    setSmartIndentDialogData(findIndentSpec(modeName));}static void lmDialogCB(Widget w, XtPointer clientData, XtPointer callData){    EditLanguageModes();}static void commonDialogCB(Widget w, XtPointer clientData, XtPointer callData){    EditCommonSmartIndentMacro();}static void okCB(Widget w, XtPointer clientData, XtPointer callData){    /* change the macro */    if (!updateSmartIndentData())    	return;        /* pop down and destroy the dialog */    XtDestroyWidget(SmartIndentDialog.shell);}static void applyCB(Widget w, XtPointer clientData, XtPointer callData){    /* change the patterns */    updateSmartIndentData();}	static void checkCB(Widget w, XtPointer clientData, XtPointer callData){    if (checkSmartIndentDialogData())        DialogF(DF_INF, SmartIndentDialog.shell, 1, "Macro compiled",                "Macros compiled without error", "Dismiss");}	static void restoreCB(Widget w, XtPointer clientData, XtPointer callData){   int i;   smartIndentRec *defaultIS;        /* Find the default indent spec */    for (i=0; i<N_DEFAULT_INDENT_SPECS; i++)    {        if (!strcmp(SmartIndentDialog.langModeName,                DefaultIndentSpecs[i].lmName))        {            break;        }    }    if (i == N_DEFAULT_INDENT_SPECS)    {        DialogF(DF_WARN, SmartIndentDialog.shell, 1, "Smart Indent",                "There are no default indent macros\nfor language mode %s",                "Dismiss", SmartIndentDialog.langModeName);        return;    }    defaultIS = &DefaultIndentSpecs[i];        if (DialogF(DF_WARN, SmartIndentDialog.shell, 2, "Discard Changes",            "Are you sure you want to discard\n"            "all changes to smart indent macros\n"            "for language mode %s?", "Discard", "Cancel",            SmartIndentDialog.langModeName) == 2)    {        return;    }        /* if a stored version of the indent macros exist, replace them, if not,       add a new one */    for (i=0; i<NSmartIndentSpecs; i++)    	if (!strcmp(SmartIndentDialog.langModeName,SmartIndentSpecs[i]->lmName))	    break;    if (i < NSmartIndentSpecs) {     	freeIndentSpec(SmartIndentSpecs[i]);   	SmartIndentSpecs[i] = copyIndentSpec(defaultIS);    } else    	SmartIndentSpecs[NSmartIndentSpecs++] = copyIndentSpec(defaultIS);       /* Update the dialog */    setSmartIndentDialogData(defaultIS);}	static void deleteCB(Widget w, XtPointer clientData, XtPointer callData){    int i;        if (DialogF(DF_WARN, SmartIndentDialog.shell, 2, "Delete Macros",            "Are you sure you want to delete smart indent\n"            "macros for language mode %s?", "Yes, Delete", "Cancel",            SmartIndentDialog.langModeName) == 2)    {        return;    }    /* if a stored version of the pattern set exists, delete it from the list */    for (i=0; i<NSmartIndentSpecs; i++)    	if (!strcmp(SmartIndentDialog.langModeName,SmartIndentSpecs[i]->lmName))	    break;    if (i < NSmartIndentSpecs) {     	freeIndentSpec(SmartIndentSpecs[i]);   	memmove(&SmartIndentSpecs[i], &SmartIndentSpecs[i+1],   	    	(NSmartIndentSpecs-1 - i) * sizeof(smartIndentRec *));    	NSmartIndentSpecs--;    }        /* Clear out the dialog */    setSmartIndentDialogData(NULL);}static void dismissCB(Widget w, XtPointer clientData, XtPointer callData){    /* pop down and destroy the dialog */    XtDestroyWidget(SmartIndentDialog.shell);}static void helpCB(Widget w, XtPointer clientData, XtPointer callData){    Help(HELP_SMART_INDENT);}static int checkSmartIndentDialogData(void){    char *widgetText, *errMsg, *stoppedAt;    Program *prog;        /* Check the initialization macro */    if (!TextWidgetIsBlank(SmartIndentDialog.initMacro)) {	widgetText =ensureNewline(XmTextGetString(SmartIndentDialog.initMacro));	if (!CheckMacroString(SmartIndentDialog.shell, widgetText,		"initialization macro", &stoppedAt)) {    	    XmTextSetInsertionPosition(SmartIndentDialog.initMacro,		    stoppedAt - widgetText);	    XmProcessTraversal(SmartIndentDialog.initMacro, XmTRAVERSE_CURRENT);	    XtFree(widgetText);	    return False;	}	XtFree(widgetText);    }        /* Test compile the newline macro */    if (TextWidgetIsBlank(SmartIndentDialog.newlineMacro))    {        DialogF(DF_WARN, SmartIndentDialog.shell, 1, "Smart Indent",                "Newline macro required", "Dismiss");        return False;    }    widgetText = ensureNewline(XmTextGetString(SmartIndentDialog.newlineMacro));    prog = ParseMacro(widgetText, &errMsg, &stoppedAt);    if (prog == NULL) { 	ParseError(SmartIndentDialog.shell, widgetText, stoppedAt,    	    	"newline macro", errMsg);     	XmTextSetInsertionPosition(SmartIndentDialog.newlineMacro,		stoppedAt - widgetText);	XmProcessTraversal(SmartIndentDialog.newlineMacro, XmTRAVERSE_CURRENT);  	XtFree(widgetText);    	return False;    }    XtFree(widgetText);    FreeProgram(prog);        /* Test compile the modify macro */    if (!TextWidgetIsBlank(SmartIndentDialog.modMacro)) {    	widgetText = ensureNewline(XmTextGetString(SmartIndentDialog.modMacro));    	prog = ParseMacro(widgetText, &errMsg, &stoppedAt);	if (prog == NULL) {    	    ParseError(SmartIndentDialog.shell, widgetText, stoppedAt,    	    	    "modify macro", errMsg);     	    XmTextSetInsertionPosition(SmartIndentDialog.modMacro,		    stoppedAt - widgetText);	    XmProcessTraversal(SmartIndentDialog.modMacro, XmTRAVERSE_CURRENT);    	    XtFree(widgetText);    	    return False;    	}    	XtFree(widgetText);	FreeProgram(prog);    }    return True;}static smartIndentRec *getSmartIndentDialogData(void){    smartIndentRec *is;        is = (smartIndentRec *)XtMalloc(sizeof(smartIndentRec));    is->lmName = XtNewString(SmartIndentDialog.langModeName);    is->initMacro = TextWidgetIsBlank(SmartIndentDialog.initMacro) ? NULL :	    ensureNewline(XmTextGetString(SmartIndentDialog.initMacro));    is->newlineMacro = TextWidgetIsBlank(SmartIndentDialog.newlineMacro) ? NULL:	    ensureNewline(XmTextGetString(SmartIndentDialog.newlineMacro));    is->modMacro = TextWidgetIsBlank(SmartIndentDialog.modMacro) ? NULL :	    ensureNewline(XmTextGetString(SmartIndentDialog.modMacro));    return is;}static void setSmartIndentDialogData(smartIndentRec *is){    if (is == NULL) {	XmTextSetString(SmartIndentDialog.initMacro, "");	XmTextSetString(SmartIndentDialog.newlineMacro, "");	XmTextSetString(SmartIndentDialog.modMacro, "");    } else {	if (is->initMacro == NULL)	    XmTextSetString(SmartIndentDialog.initMacro, "");	else

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -