Translation of the PunyInform cheep scenery extension

In English, the pronoun ‘it’ is gender neutral. In French this is not the case, so I need to know the gender of the target object in order to assign the pronouns correctly.

I’ve added a CS_FEMALE constant and done the necessary transformations which seems to work. However, I don’t know what to do with the _CSMatchNameList() function, which contains a CS_THEM, and whether it needs to be adapted.

Extracts of code to display changes made:

Constant CS_IT = 504;
Constant CS_THEM = 505;
Constant CS_FEMALE = 506;

[ _CSFindID
    if(_val == CS_THEM or CS_FEMALE)
        _i++;
    if(_val == CS_THEM or CS_FEMALE)
        _val = _arr-->++_i;

[ _ParseCheapScenery
    if(_sw1 == CS_THEM  or CS_FEMALE) {
        CSDATA-->CSDATA_PRONOUN_TEMP = CS_THEM;
        if (_sw1 == CS_FEMALE)
            CSDATA-->CSDATA_PRONOUN_TEMP = CS_FEMALE;
        _i++;
        _sw1 = _arr-->_i;
    }

Object CheapScenery "objet"
    with
        article ARTICLE_UN,
        parse_name [ _ret;
            cs_match_id = 0;
            CSData-->CSDATA_MATCH_LENGTH = 0;
            _ret = _ParseCheapScenery(location, cheap_scenery, wn);
            if(CSDATA-->CSDATA_PRONOUN == CS_THEM) {
                give self pluralname;
                if(le_obj == self) { l_obj = 0; le_obj = 0; }
                else if(la_obj == self) { l_obj = 0; la_obj = 0; }
            } else {
                if(CSDATA-->CSDATA_PRONOUN == CS_FEMALE) {
                    give self female;
                    la_obj = self;
                    if (le_obj == self) le_obj = 0;
                }
                else {
                    give self ~female;
                    if (la_obj == self) la_obj = 0;
                }
                give self ~pluralname;
#ifdef PUNYINFORM_MAJOR_VERSION;
                if(les_obj == self) les_obj = 0;
#Endif;
            }
            return _ret;
        ],
        react_after [;
            Go:
                if(l_obj == self) l_obj = 0;
#ifdef PUNYINFORM_MAJOR_VERSION;
                if(les_obj == self) les_obj = 0;
#Endif;
        ],

Is there anything to change here?

[_CSMatchNameList p_arr p_count _w _matched _base;
    if((_w-> #dict_par1) & 4) CSDATA-->CSDATA_PRONOUN_TEMP = CS_THEM;
        _w = NextWord();

The Spanish translation has this covered.

Diff the file to the English distribution.

The code you ask about says “if the dictionary word has the plural flag set, make this a CS_THEM match”. There is no corresponding female flag for dictionary words, so there’s nothing to add or change there.

Thank you.

1 Like