Σάββατο, 14 Δεκεμβρίου 2019

Αναθεώρηση 3 έκδοση 9.9

Μια μικρή αναθεώρηση ανέβηκε που διορθώνει ένα πρόβλημα στην Ένωση() ή Cons().

πχ
Ν=ενωση((1,2,3), (4,5,6))
Τύπωσε Ν

δίνει ένα πίνακα με έξι στοιχεία:  1   2   3   4   5  6


Παράλληλα υπάρχει σε αναμονή η αναθεώρηση με τον διερμηνευτή που διαβάζει ένα πρόγραμμα και το μετατρέπει σε ενδιάμεσο κώδικα (προς το παρόν ότι έχει δημοσιευθεί μέχρι και τη τρέχουσα έκδοση δουλεύει με άμεση εκτέλεση, ενώ χρησιμοποιεί κάποιες φορές το "κοίταγμα μπροστά" ή look ahead, το οποίο βρίσκει που τερματίζουν  οι εκφράσεις, η που βρίσκεται το σημείο μεταφοράς της ροής (πχ σε μια Ενώ .... Τέλος Ενώ να βρει το τέλος, ή σε μια Ενώ που ακολουθεί ένα μπλοκ εντολών, να βρει το τέλος του μπλοκ). Θα προχωρήσω αυτή την αναθεώρηση αφού τελειώσω το παρακάτω:

Ετοιμάζω μια νέα αναθεώρηση, που θα πάρει καιρό. Σε αυτήν ασχολούμαι με δυο θέματα: Την χρήση RTL κειμένου (right to left) με αραβικά και ισραηλινά γράμματα. Έχω πετύχει ήδη την αλλαγή του διορθωτή προγράμματος ώστε ο δρομέας να κινείται ανάλογα με το κείμενο. Εδώ να επισημάνω ότι είναι διαφορετικό πράγμα να έχεις διορθωτή για γλώσσες με γραφή από  δεξιά προς τα αριστερά από το να έχεις ταυτόχρονα και τα δυο ήδη μαζί. Οι εντολές της γλώσσας είναι στα αγγλικά και στα ελληνικά οπότε πρέπει να γράφονται από αριστερά προς τα δεξιά (LTR κείμενο). Επίσης ένα άλλο θέμα είναι οι αριθμοί μετά από κείμενο με αραβικά ή ισραηλινά γράμματα. Οι αριθμοί γράφονται με τα νούμερα με τη σειρά που πρέπει αλλά όλο το νούμερο γράφεται προς τα αριστερά! Αν οι χαρακτήρες πριν το νούμερο είναι ελληνικοί θα γραφτούν δεξιά! Ένας τρόπος που σκέφθηκα για να ξεπεράσω το πρόβλημα του τι πρέπει να αντιμετωπιστεί ως RTL κείμενο, είναι η χρήση του χρωματισμού, που είχε ο διορθωτής. Έτσι μια παράγραφος κόβεται σε χρωματισμένο κείμενο και κάθε κοψιά αντιμετωπίζεται ξεχωριστά από κάθε άλλη. Επειδή ο διορθωτής έχει μια λειτουργία (με το F11) που αποχρωματίζει το κείμενο, στη νέα μη δημοσιευμένη αναθεώρηση δείχνει μεν αποχρωματοποιημένο το κείμενο, αλλά εσωτερικά συνεχίζει να είναι, για να "προστατέψει" τα κοψίματα. Αν δεν το έκανε αυτό τότε υπήρχε περίπτωση να γυρίσουν κάποια μέρη του κειμένου με παρουσία RTL κειμένου σε άλλες θέσεις από αυτές που θα θέλαμε να είναι (και είναι όταν είναι φανερό το χρώμα).

Επίσης άλλαξα τον τρόπο εμφάνισης του κειμένου στο διορθωτή (εσωτερικά) με χρήση άλλων ρουτινών του λειτουργικού, και τώρα δεν χρειάζεται όπως έκανα πριν όταν είχαμε tab χαρακτήρα, να τυπώνουμε κάθε ξεχωριστό χρώμα από την αρχή με χρήση "παράθυρου" εμφάνισης. Όταν υπήρχαν πολλά χωριστά κομμάτια, και το tab στην αρχή της γραμμής έπεφτε η ταχύτητα, και φαίνονταν τουλάχιστον σε μένα που καταλάβαινα!

Δυσκολεύτηκα πολύ να βρω πως δουλεύει το σύστημα με τις μεταθέσεις λέξεων στο RTL, και μάλιστα υπάρχει διαφορά μεταξύ αραβικών και ισραηλινών σε σχέση με τα σύμβολα των  πράξεων, των αριθμών και της τελείας, για τα δεκαδικά! Αποφάσισα να το φτάσω σε ένα σημείο, γιατί αλλιώς δεν θα το τελειώσω ποτέ. Υπάρχουν μια σειρά συναρτήσεων του λειτουργικού που ακόμα δεν έχω χρησιμοποιήσει και αυτές υποτίθεται ότι κάνουν τις δυο λειτουργίες, να λένε που θα πάει ο δρομέας για συγκεκριμένο χαρακτήρα, και το ανάποδο, εκεί που δείχνουμε να πάει ο δρομέας να μας δώσει το χαρακτήρα ως αριθμός από την αρχή της γραμμής ή παραγράφου. Έτσι έφτιαξα δικές μου οι οποίες δουλεύουν (επίσης δουλεύουν και με με κάποια αραβικά που "γυρνάνε" πίσω δηλαδή ενώ ξεκινάνε από το 1000 και τερματίζουν στο 1007 pixel το τελείωμά τους είναι στο 1005 για να δέσει με τον επόμενο χαρακτήρα!  (κάπως έτσι, το περιέγραψα στο περίπου). Οπότε τώρα ξεκινάμε το δρομέα με το βελάκι (πχ το αριστερό) και αυτός αρχίζει να κάνει τα παλαβά του ανάλογα με το κείμενο. Όταν για παράδειγμα πατάμε το Backspace όλοι ξέρουμε ότι σβήνει προς τα "πίσω", το οποίο στο LTR είναι προς τα αριστερά, ενώ στο RTL είναι προς τα δεξιά. Επίσης όταν γράφουμε RTL λέξεις ο δρομέας πάει προς το αριστερά. Έχουμε λοιπόν έναν δρομέα που πηγαίνει αφού αναγνωρίσει το "έδαφος".


Στο αλφαριθμητικό η σειρά που γράφονται οι χαρακτήρες έχουν να κάνουν με την ίδια σειρά που πληκτρολογούμε, έτσι ο δεύτερος χαρακτήρας θα είναι πάντα μετά τον πρώτο. Αυτό που αλλάζει είναι το πως εμφανίζονται ανάλογα με το κείμενο. Στην εμφάνιση υποθέτουμε έναν δρομέα. Όμως ο πρώτος χαρακτήρας που θα εμφανιστεί αριστερά μπορεί να είναι κάποιος άλλος από τον πρώτο στο αλφαριθμητικό και όχι υποχρεωτικά ο τελευταίος. Γίνονται "αναδιπλώσεις" όταν έχουμε εναλλαγή RTL σε LTR.

Έχω φτιάξει την Τύπωσε έτσι ώστε όταν το κείμενο έχει RTL χαρακτήρες να το εμφανίζει με αναλογική γραφή εκεί που θα έπρεπε να εμφανίζει τον έναν χαρακτήρα κάτω από τον άλλο, ή όπως λέμε κάθε χαρακτήρας να έχει εμφάνιση σε θέση χαρακτήρα στην κάνναβο των χαρακτήρων στην οθόνη. Αυτό γίνεται γιατί υπάρχουν λέξεις που δεν μπορούν να σπαστούν σε χαρακτήρες, πρέπει να γραφούν με αναλογική γραφή.

Επίσης έχω φτιάξει την Αναφορά να δουλεύει σωστά, με το RTL και το TAB. Υπάρχει ακόμα θέμα με την στοίχιση και από τις δυο πλευρές κειμένου RTL. Παλαιότερα η στοίχιση γίνονταν με σπάσιμο των λέξεων και εμπλουτισμό με διαστήματα, κατά την εμφάνιση. Με το RTL η σειρά εμφάνισης αλλάζει, οπότε αφήνω το σύστημα να το κάνει (βρήκα και έναν τρόπο να ορίζω το μήκος και τον αριθμό παρεμβολών διαστήματος), αλλά δεν δουλεύει όταν στο κείμενο υπάρχει RTL κείμενο (σαν να το ακυρώνει). Οπότε στην επόμενη αναθεώρηση δεν θα έχουμε πλήρη στοίχιση αν στη γραμμή έχουμε χαρακτήρες RTL (μέχρι να βρω κάποια άλλη λύση).

Επίσης πρέπει να φτιάξω την δυνατότητα για RTL κείμενο και για τα στοιχεία φορμών (Edit Box), με μια ιδιότητα για να έχουμε στοίχιση από δεξιά (και να δουλεύει και η μετάθεση του δρομέα με το δείκτη του ποντικιού, με δεξιά στοίχιση). Ενώ στο διορθωτή προγράμματος θέλουμε να έχουμε αριστερή στοίχιση με κάθε τύπο φοράς γραφής, στα στοιχεία που εισάγουν κείμενο ή προβάλουν κείμενο στις φόρμες θέλουμε να έχουμε δεξιά στοίχιση! Θα μπορούμε όμως να βάλουμε ακόμα και με αριστερή στοίχιση λέξεις RTL. Τα σύμβολα στις φόρμες για κλείσιμο, μεγιστοποίηση και ελαχιστοποίηση ήδη μπορούμε να τα έχουμε δεξιά (εξ ορισμού) ή αριστερά (με επιλογή).

Στην εισαγωγή αλφαριθμητικών ακόμα και σε αυτήν την αναθεώρηση, όταν εισάγουμε με μη αναλογική γραφή, δεν αλλάζει η φορά εισαγωγής. Εδώ ίσως το αλλάξω. Δεν το έχω αποφασίσει ακόμα. Μπορούμε να χρησιμοποιήσουμε


Επίσης ένα δεύτερο θέμα σε αυτήν την μη δημοσιευμένη αναθεώρηση είναι οι βάσεις δεδομένων. Έχω ήδη γράψει μια υποτυπώδη παραλλαγή των βάσεων δεδομένων για την μνήμη, όπου δεν χρησιμοποιώ το ADO (το σύστημα που δίνουν τα windows για βάσεις δεδομένων). Σκοπός μου αρχικά ήταν να αλλάξω το τρόπο καταχώρησης της βοήθειας με ένα δικό μου σύστημα βάσης δεδομένων, γιατί παρατήρησα ότι στα Windows 10, σε μια περίπτωση δεν δούλεψε η βοήθεια, ενώ δούλευαν προγράμματα που χρησιμοποιούσαν αρχεία της access. Αυτό με έκανε να καταλάβω ότι δεν μπορώ να εμπιστευθώ το σύστημα της Access (2007) στα Windows 10. Κατά την υλοποίηση άρχισα να σκέφτομαι ότι μπορώ να κάνω δική μου βάση, με πολλούς πίνακες, με ταξινομήσεις και άλλα πολλά. Έφτιαξα μια παραλλαγή της λίστας με Hash πίνακα (ή πίνακα με συνάρτηση κατακερματισμού), όπου υπάρχουν δυο πίνακες hash, δηλαδή διπλά κλειδιά για την ίδια εγγραφή. Έχω σκοπό να γράψω μια SQL με τα βασικά και να μην εξαρτιέται η Μ2000 από την Access.

Καλές Γιορτές και Καλή Χρονιά!

Γιώργος Καρράς


Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου