uint1 MCScreenDC::fontnametocharset(const char *oldfontname) { // MW-2006-06-09: [[ Bug 3670 ]] Fixed length buffer can cause a crash char fname[256]; strncpy(fname, oldfontname, 255); fname[255] = '\0'; char *sptr = fname; if ((sptr = strchr(fname, ',')) != NULL) *sptr = '\0'; short ffamilyid; //font family ID StringPtr reqnamePascal = c2pstr(fname); GetFNum(reqnamePascal, &ffamilyid); return MCS_langidtocharset(FontToScript(ffamilyid)); }
char *MCScreenDC::charsettofontname(uint1 charset, const char *oldfontname) { char *fname = new char[255]; strcpy(fname, oldfontname); char *sptr = fname; if ((sptr = strchr(fname, ',')) != NULL) *sptr = '\0'; char *tmpname = strclone(fname);//make a copy of the font name short ffamilyid; //font family ID StringPtr reqnamePascal = c2pstr(tmpname); GetFNum(reqnamePascal, &ffamilyid); delete tmpname; if (FontToScript(ffamilyid) != MCS_charsettolangid(charset)) { GetFontName(GetScriptVariable(MCS_charsettolangid(charset), smScriptAppFond), (unsigned char *)fname); p2cstr((unsigned char *)fname); } return fname; }
char * TclMacGetFontEncoding( int fontId) { int script, lang; char *name; Map *mapPtr; script = FontToScript(fontId); lang = GetScriptVariable(script, smScriptLang); name = NULL; if (script == smRoman) { for (mapPtr = romanMap; mapPtr->strKey != NULL; mapPtr++) { if (mapPtr->numKey == lang) { name = mapPtr->strKey; break; } } } else if (script == smCyrillic) { for (mapPtr = cyrillicMap; mapPtr->strKey != NULL; mapPtr++) { if (mapPtr->numKey == lang) { name = mapPtr->strKey; break; } } } if (name == NULL) { for (mapPtr = scriptMap; mapPtr->strKey != NULL; mapPtr++) { if (mapPtr->numKey == script) { name = mapPtr->strKey; break; } } } return name; }
// ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ // ¥ WEFastSetStyle // ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ // Sets the style without making an undo entry and can effect any text range, not just the selection OSErr WEFastSetStyle( WEStyleMode mode, const TextStyle *ts, SInt32 inStart, SInt32 inEnd, WEHandle hWE) { WEPtr pWE; WEActionHandle hAction; ScriptCode fontScript; Boolean saveWELock; OSErr err; // lock the WE record saveWELock = _WESetHandleLock((Handle) hWE, true); pWE = *hWE; // return an error code if this instance is read-only err = weReadOnlyErr; if (BTST(pWE->features, weFReadOnly)) { goto cleanup; } // stop any ongoing inline input session WEStopInlineSession(hWE); if (BTST(pWE->features, weFMonoStyled)) { // MONOSTYLED TEXT // apply the change to the whole text, not just to the selection range if ((err = _WESetStyleRange(0, pWE->textLength, mode, (WETextStyle *) ts, hWE)) != noErr) { goto cleanup; } // invalidate the null style record BCLR(pWE->flags, weFUseNullStyle); // redraw the text if ((err = _WERedraw(0, pWE->textLength, hWE)) != noErr) { goto cleanup; } } else if (inStart == inEnd) { // MULTISTYLED TEXT; NULL SELECTION // first make sure the nullStyle field contains valid information _WESynchNullStyle(hWE); // apply style changes to the nullStyle record _WECopyStyle((WETextStyle *) ts, &pWE->nullStyle.runStyle, pWE->nullStyle.runStyle.tsFace, mode); // special case: if this instance is empty, propagate the // change to the style table (this avoids some subtle problems) if (pWE->textLength == 0) { if ((err = _WESetStyleRange(0, 0, weDoAll + weDoReplaceFace, &pWE->nullStyle.runStyle, hWE)) != noErr) { goto cleanup; } } #if !WASTE_NO_SYNCH // if the font was altered, synchronize the keyboard script if (BTST(pWE->flags, weFNonRoman) && (mode & weDoFont)) { fontScript = FontToScript(pWE->nullStyle.runStyle.tsFont); if (fontScript != GetScriptManagerVariable(smKeyScript)) { KeyScript(fontScript); } } #endif } else { // MULTISTYLED TEXT; NON-EMPTY SELECTION // increment modification count pWE->modCount++; // check for "smart" font modes if (BTST(pWE->flags, weFNonRoman) && ((mode & weDoSmartFont) == weDoSmartFont)) { if ((err = _WESmartSetFont(mode, ts, hWE)) != noErr) { goto cleanup; } mode &= ~weDoFont; } // set the style of the selection range if ((err = _WESetStyleRange(inStart,inEnd, mode, (WETextStyle *) ts, hWE)) != noErr) { goto cleanup; } // and redraw the text if ((err = _WERedraw(inStart,inEnd, hWE)) != noErr) { goto cleanup; } } // clear the result code err = noErr; cleanup: // unlock the WE record _WESetHandleLock((Handle) hWE, saveWELock); // return result code return err; }