2009-03-23 5 views
1

Comment est-ce que je fais les contrôles de l'interface graphique Cocoa d'Apple et non automatiquement les lignes "flip" qui contiennent du texte de droite à gauche (comme l'arabe)?Comment empêcher le moteur de mise en page de texte OS X de "retourner" automatiquement des lignes avec du texte de droite à gauche?

Voici mon cas de test, où je prévois de garder les astérisques (**) au début des lignes quand ils sont imprimés à l'écran:

#import <Foundation/Foundation.h> 

int main(int argc, char *argv[]) 
{ 
    NSAutoreleasePool *autoReleasePool = [[NSAutoreleasePool alloc] init]; 

    NSString *str1 = @"** english first then arabic تجر\n"; 
    NSString *str2 = @"** تجر arabic first then english\n"; 
    [str1 writeToFile:@"/dev/stdout" atomically:NO encoding:NSUTF8StringEncoding error:NULL]; 
    [str2 writeToFile:@"/dev/stdout" atomically:NO encoding:NSUTF8StringEncoding error:NULL]; 

    [autoReleasePool release]; 
    return 0; 
} 

Quand je lance ce dans Terminal.app je reçois:

$ gcc -framework Foundation test.m 
$ ./a.out 
** english first then arabic تجر 
arabic first then english تجر ** 

En iTerm, cependant, les lignes ne sont pas "flipped":

$ gcc -framework Foundation test.m 
$ ./a.out 
** english first then arabic تجر 
** تجر arabic first then english  

Sur la base d'un examen superficiel du code d'iTerm, il semble que cela soit dû au traitement «manuel» caractère par caractère d'iTerm de la sortie et à l'utilisation (présumée) par Terminal.app des API de disposition de chaîne native. Y a-t-il un moyen d'empêcher ce "flippage" de se produire en utilisant, par exemple, NSTextView pour afficher ces types de chaînes? Je n'ai trouvé aucune réponse dans la documentation d'Apple.

Je cours un anglais Mac OS 10.5.6 avec l'anglais comme langue n ° 1 dans la liste sous Préférences Système> International> Langue.

Répondre

2

Avez-vous essayé:

[nstextviewobj setBaseWritingDirection:NSWritingDirectionLeftToRight]; 

Cette méthode est la classe parente NSText.

+0

Ha! Une solution si simple - maintenant je me sens bête d'avoir manqué ça. Merci beaucoup! :) – hasseg