כללי פוסט שפרסמתי בנושא סטים של אופן טייפ

  • הוסף לסימניות
  • #1
  • הוסף לסימניות
  • #2
מחקר קטן על "סטים" של אופן טייפ

שלום!

[אזהרה — פוסט טכני ביותר]

שאלני חבר, האם ניתן לבטל סט של אופן טייפ מתוצאות חיפוש מסויים. (היה צורך לבטל ההגדר של "שווא נע" משמות הוויה)

אז בדקתי.

וגיליתי שהדבר מסובך עד להחריד….

ואסכם מה שהעלתי:

בהתחלה הייתי משוכנע שזה יהיה קל, לבטל יש קבוע לכל סט, ו"נדליק" או "נכבה" משהו כזה:

myArray[index].otfStylisticSets1=false;
התברר שאין כאלו קבועים.

אז חשבתי אולי זה מערך, משהו כזה:

myArray[index].otfStylisticSets=[1,3,18]
;
כאשר המספרים אלו מספרי הסטים.

טוב,
גם זה לא.

אז חפשתי ומצאתי שיש הגדרה כזו בלבד:
myArray[index].otfStylisticSet​
ועליה לקבל רק מספר. ותו לא!
איך מספר יכיל את כל סוגי הסטים?!

בדקתי מהם המספרים של הסטים על ידי הסקריפט הפשוט הבא:
PHP:
alert(app.activeDocument.selection[0].otfStylisticSets);
והתברר לי שהם כפולות של 2!

למשל, סט 1 זה 2, סט 2 זה 4, סט 3 זה 8! וכן הלאה.

למעשה זה מספרי הסטים:

1. 2
2. 4
3. 8
4. 16
5. 32
6. 64
7. 128
8. 256
9. 512
10. 1024
11. 2048
12. 4096
13. 8192
14. 16384
15. 32768
16. 65536
17. 131072
18. 262144
19. 524288
20. 1048576

את זה מצאתי בקלות על ידי הסקריפט הזה:
PHP:
var num=2;

var myPars=app.activeDocument.selection[0].parentStory.paragraphs.everyItem().getElements();

myPars[0].otfStylisticSets=num;

myPars[0].contents=num+"\t"+myPars[0].contents;

for (i=1; i<myPars.length; i++){ 

if(num==1048576){num=1;}

num=num*2;

myPars[i].otfStylisticSets=num;

myPars[i].contents=num+"\t"+myPars[i].contents;

}

כעת התברר שקל מאד להחיל סטים על ידי חיבור המספרים זה עם זה.

נניח אם רצוני להחיל סט 2 וסט 3, עלי לכתוב ככה: ;(myPars.
otfStylisticSets=12//=(4+8

טוב, ולבקשתו של חברי: כתבתי את הסקריפט הזה:

PHP:
var num= prompt("הזן מספר סט לפי החישוב, 1 הוא 2 2 הוא 4 וכן הלאה","");

(!num)?exit():"";

var oldArray=app.activeDocument.findGrep(true);

for (i=0; i<oldArray.length; i++){ 

oldArray[i].otfStylisticSets=oldArray[i].otfStylisticSets-(num*1);

}
דא עקא, חייבים לדייק מאד. ולחפש רק טקסט שידוע שיש לו סט רצוי. שרוצים להחסיר אותו.

כי אם נחפש למשל סתם טקסט, וננסה לבטל ממנו סט שאין לו כלל, זה יהרוס את המספר של הסט שלו, כי המסר שיקבל לא יהיה מתאים לשום סט, וזה ישבש את כל העסק…

הערה: כל שימוש בקוד המופיע בפוסט הוא באחריות המשתמש בלבד.
 
  • הוסף לסימניות
  • #3
אחדד את מה שקורה פה. זה פטנט עתיק ונפוץ. מדובר כמובן במספרים בינריים, כאשר כל ביט משמש כדגל: 1 = דלוק, 0 = כבוי.
לכן, להפעיל את אופציות 1, 3 ו-6, צריך את המספר הבינרי הזה:
100101.

את המספר הזה אפשר למצוא בקלות (ולמעשה אין צורך למצוא אותו כלל כי נוח יותר להשתמש בו כך):
PHP:
parseInt("100101", 2)

ומאחר שמדובר במספרים בינריים, אפשר לכבות דגל על ידי השימוש ב-AND בינרי, ולהפעיל אותו ע"י השימוש ב-OR בינרי.

למשל, אם נרצה להפעיל את הדגל (flag) ה-5 בסמפר לעיל, אפשר פשוט לעשות את זה כך:
PHP:
parseInt("100101", 2) | parseInt("10000", 2)

וכדי להבין את התוצאה (שזה נותן את המספר 53), נקנוורט לבינרי:
PHP:
Number(53).toString(2)
ונקבל
PHP:
110101

ורואים שהגדל החמישי הופעל.

לכבות את הדגל הששי, למשל:
PHP:
parseInt("110101", 2) & parseInt("011111", 2)

נותן את התוצאה 21, שזה בעצם:
PHP:
Number(21).toString(2)
דהיינו:10101 (הספרה הששית איננה, כי היא שווה 0).
 
  • הוסף לסימניות
  • #4
לא הבנתי מילה, אבל- אולי אפשר לעשות בדיקה האם מופיע סט. לא?
 
  • הוסף לסימניות
  • #5
תודה על ההבהרות
 
  • הוסף לסימניות
  • #6
נכתב ע"י eliezer;2003720:
זה אפשרי כמובן אבל דורש חשבון מסןבך בעיני.
אינני בקיא די בחשבון כדי לדעת כיצד לבדוק מתוך מספר גדול מה היסודות שלו ממספרים של כפולות 2...

שוב, בגלל שזה בינרי, זה קל מאוד:

נקח את המספר 87256167 לדוגמה (זה מה שיצא לי במקלדת). האם הדגל ה-7 דלוק פה? זה קל מאוד:

PHP:
Binary(87256167 & parseInt("1000000", 2))

נותן את התשובה TRUE. אם כן, הדגל דלוק. (נסה עם המספר 87256103) ותקבל FALSE.

ליתר ביאור: המספר
87256167
בבינרי הוא:
101001100110110110001100111
כדי לדעת את המצב של הביט ה-7, עושים AND בינרי כזה:
PHP:
101001100110110110001100111
&
000000000000000000001000000
---------------------------
000000000000000000001000000

מאחר ש-AND נותן תוצאה חיובית רק במקרה ששתי המספרים הם 1, זה נותן את התשובה המבוקשת (זאת אומרת, אם התשובה איננה 0, הביט היה במצב של 1.)
 
  • הוסף לסימניות
  • #7
אני מבין שמשתמשים בביטים של הבינארי כמעין מערך של בוליאניים. אבל איך בפועל מנהלים זאת עוד לא הבנתי לאשורו.

למעשה אסכם, בפועל הרוצה לבטל סט. יכול להשתמש בסקריפט שהעלתי. ובטבלה המצורפת בפוסט. זה אמור להיות למעשה די קל.
רק הכרחי בחיפוש לחפש תוצאות של סטים של אופן טייפ או טקסט שבוודאות מוחלים עליו כאלו. ולא טקסט סתמי. או שאין עליו הסט שמבטלים.

לא כדאי לבדוק זאת אפילו עם הרעיון שציינת כי כדי לבדוק התוצאות יש לעבור תו תו לבדוק זאת.
לכן יותר פשוט להודיע למשתמש שחובה עליו לדעת מה הוא עושה...

תודה שוב על ביאוריך המפורטים.
 

פרוגבוט

תוכן שיווקי
פרסומת

הצטרפות לניוזלטר

איזה כיף שהצטרפתם לניוזלטר שלנו!

מעכשיו, תהיו הראשונים לקבל את כל העדכונים, החדשות, ההפתעות בלעדיות, והתכנים הכי חמים שלנו בפרוג!

לוח מודעות

הפרק היומי

הפרק היומי! כל ערב פרק תהילים חדש. הצטרפו אלינו לקריאת תהילים משותפת!


תהילים פרק כה

אלְדָוִד אֵלֶיךָ יי נַפְשִׁי אֶשָּׂא:באֱלֹהַי בְּךָ בָטַחְתִּי אַל אֵבוֹשָׁה אַל יַעַלְצוּ אֹיְבַי לִי:גגַּם כָּל קוֶֹיךָ לֹא יֵבֹשׁוּ יֵבֹשׁוּ הַבּוֹגְדִים רֵיקָם:דדְּרָכֶיךָ יי הוֹדִיעֵנִי אֹרְחוֹתֶיךָ לַמְּדֵנִי:ההַדְרִיכֵנִי בַאֲמִתֶּךָ וְלַמְּדֵנִי כִּי אַתָּה אֱלֹהֵי יִשְׁעִי אוֹתְךָ קִוִּיתִי כָּל הַיּוֹם:וזְכֹר רַחֲמֶיךָ יי וַחֲסָדֶיךָ כִּי מֵעוֹלָם הֵמָּה:זחַטֹּאות נְעוּרַי וּפְשָׁעַי אַל תִּזְכֹּר כְּחַסְדְּךָ זְכָר לִי אַתָּה לְמַעַן טוּבְךָ יי:חטוֹב וְיָשָׁר יי עַל כֵּן יוֹרֶה חַטָּאִים בַּדָּרֶךְ:טיַדְרֵךְ עֲנָוִים בַּמִּשְׁפָּט וִילַמֵּד עֲנָוִים דַּרְכּוֹ:יכָּל אָרְחוֹת יי חֶסֶד וֶאֱמֶת לְנֹצְרֵי בְרִיתוֹ וְעֵדֹתָיו:יאלְמַעַן שִׁמְךָ יי וְסָלַחְתָּ לַעֲוֹנִי כִּי רַב הוּא:יבמִי זֶה הָאִישׁ יְרֵא יי יוֹרֶנּוּ בְּדֶרֶךְ יִבְחָר:יגנַפְשׁוֹ בְּטוֹב תָּלִין וְזַרְעוֹ יִירַשׁ אָרֶץ:ידסוֹד יי לִירֵאָיו וּבְרִיתוֹ לְהוֹדִיעָם:טועֵינַי תָּמִיד אֶל יי כִּי הוּא יוֹצִיא מֵרֶשֶׁת רַגְלָי:טזפְּנֵה אֵלַי וְחָנֵּנִי כִּי יָחִיד וְעָנִי אָנִי:יזצָרוֹת לְבָבִי הִרְחִיבוּ מִמְּצוּקוֹתַי הוֹצִיאֵנִי:יחרְאֵה עָנְיִי וַעֲמָלִי וְשָׂא לְכָל חַטֹּאותָי:יטרְאֵה אוֹיְבַי כִּי רָבּוּ וְשִׂנְאַת חָמָס שְׂנֵאוּנִי:כשָׁמְרָה נַפְשִׁי וְהַצִּילֵנִי אַל אֵבוֹשׁ כִּי חָסִיתִי בָךְ:כאתֹּם וָיֹשֶׁר יִצְּרוּנִי כִּי קִוִּיתִיךָ:כבפְּדֵה אֱלֹהִים אֶת יִשְׂרָאֵל מִכֹּל צָרוֹתָיו:
נקרא  2  פעמים
למעלה