From 6a340b9a13049e9836312653e185bfb8f3762c1d Mon Sep 17 00:00:00 2001
From: "Paolo G. Giarrusso"
Date: Thu, 10 Sep 2015 18:13:32 +0200
Subject: [PATCH 1/7] Refactor: move editors->string
Now this is where drracket:tool^ is available.
---
handin-client/client-gui.rkt | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/handin-client/client-gui.rkt b/handin-client/client-gui.rkt
index f2b1d7e..49f9d90 100644
--- a/handin-client/client-gui.rkt
+++ b/handin-client/client-gui.rkt
@@ -708,15 +708,6 @@
(define handin-icon (scale-by-half (in-this-collection "icon.png")))
-(define (editors->string editors)
- (let* ([base (make-object editor-stream-out-bytes-base%)]
- [stream (make-object editor-stream-out% base)])
- (write-editor-version stream base)
- (write-editor-global-header stream)
- (for ([ed (in-list editors)]) (send ed write-to-file stream))
- (write-editor-global-footer stream)
- (send base get-bytes)))
-
(define (string->editor! str defs)
(let* ([base (make-object editor-stream-in-bytes-base% str)]
[stream (make-object editor-stream-in% base)])
@@ -738,6 +729,15 @@
(dynamic-require `(lib "updater.rkt" ,this-collection-name) 'bg-update)
void))
+ (define (editors->string editors)
+ (let* ([base (make-object editor-stream-out-bytes-base%)]
+ [stream (make-object editor-stream-out% base)])
+ (write-editor-version stream base)
+ (write-editor-global-header stream)
+ (for ([ed (in-list editors)]) (send ed write-to-file stream))
+ (write-editor-global-footer stream)
+ (send base get-bytes)))
+
(define tool-button-label (bitmap-label-maker button-label/h handin-icon))
(define (make-new-unit-frame% super%)
From 5a844d3c0ebb22b3dcc1ddf51dad669be8b145e9 Mon Sep 17 00:00:00 2001
From: "Paolo G. Giarrusso"
Date: Thu, 10 Sep 2015 14:13:08 +0200
Subject: [PATCH 2/7] Refactoring: specialize API
Now editors->string knows it's only ever called with two arguments.
---
handin-client/client-gui.rkt | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/handin-client/client-gui.rkt b/handin-client/client-gui.rkt
index 49f9d90..24c85eb 100644
--- a/handin-client/client-gui.rkt
+++ b/handin-client/client-gui.rkt
@@ -729,12 +729,12 @@
(dynamic-require `(lib "updater.rkt" ,this-collection-name) 'bg-update)
void))
- (define (editors->string editors)
+ (define (editors->string definitions interactions)
(let* ([base (make-object editor-stream-out-bytes-base%)]
[stream (make-object editor-stream-out% base)])
(write-editor-version stream base)
(write-editor-global-header stream)
- (for ([ed (in-list editors)]) (send ed write-to-file stream))
+ (for ([ed (in-list (list definitions interactions))]) (send ed write-to-file stream))
(write-editor-global-footer stream)
(send base get-bytes)))
@@ -793,8 +793,8 @@
[callback
(lambda (button)
(let ([content (editors->string
- (list (get-definitions-text)
- (get-interactions-text)))])
+ (get-definitions-text)
+ (get-interactions-text))])
(new handin-frame%
[parent this]
[content content]
From 85a04ac921998d92662729d4ff0f19a9ba9817ab Mon Sep 17 00:00:00 2001
From: "Paolo G. Giarrusso"
Date: Mon, 7 Sep 2015 22:23:26 +0200
Subject: [PATCH 3/7] Hand in language info
Fix plt/handin#17 by loading the language metadata from the DrRacket
configuration and prepending it to a clone of the definitions editor
before serializing this clone.
Warning: This hard-codes the module name to `'handin`, which doesn't
sound very good.
---
handin-client/client-gui.rkt | 19 +++++++++++++++++--
1 file changed, 17 insertions(+), 2 deletions(-)
diff --git a/handin-client/client-gui.rkt b/handin-client/client-gui.rkt
index 24c85eb..c056053 100644
--- a/handin-client/client-gui.rkt
+++ b/handin-client/client-gui.rkt
@@ -729,12 +729,27 @@
(dynamic-require `(lib "updater.rkt" ,this-collection-name) 'bg-update)
void))
+ (define (get-lang-prefix modname)
+ (let* ([pref (preferences:get (drracket:language-configuration:get-settings-preferences-symbol))]
+ [lang (drracket:language-configuration:language-settings-language pref)]
+ [settings (drracket:language-configuration:language-settings-settings pref)])
+ (send lang get-metadata modname settings)))
+
+ (define (with-fake-header editor)
+ (let ([new-editor (send editor copy-self)]
+ [text (get-lang-prefix 'handin)])
+ (when text
+ (send new-editor set-position 0)
+ (send new-editor insert-port (open-input-string text)))
+ new-editor))
+
(define (editors->string definitions interactions)
(let* ([base (make-object editor-stream-out-bytes-base%)]
- [stream (make-object editor-stream-out% base)])
+ [stream (make-object editor-stream-out% base)]
+ [definitions-with-fake-header (with-fake-header definitions)])
(write-editor-version stream base)
(write-editor-global-header stream)
- (for ([ed (in-list (list definitions interactions))]) (send ed write-to-file stream))
+ (for ([ed (in-list (list definitions-with-fake-header interactions))]) (send ed write-to-file stream))
(write-editor-global-footer stream)
(send base get-bytes)))
From bf7341c5e91e004fce60efcdd6587ab4ceddff78 Mon Sep 17 00:00:00 2001
From: "Paolo G. Giarrusso"
Date: Sun, 4 Oct 2015 20:42:58 +0200
Subject: [PATCH 4/7] Refactor new code
---
handin-client/client-gui.rkt | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/handin-client/client-gui.rkt b/handin-client/client-gui.rkt
index c056053..4dcc59c 100644
--- a/handin-client/client-gui.rkt
+++ b/handin-client/client-gui.rkt
@@ -730,9 +730,9 @@
void))
(define (get-lang-prefix modname)
- (let* ([pref (preferences:get (drracket:language-configuration:get-settings-preferences-symbol))]
- [lang (drracket:language-configuration:language-settings-language pref)]
- [settings (drracket:language-configuration:language-settings-settings pref)])
+ (let* ([lang-settings (preferences:get (drracket:language-configuration:get-settings-preferences-symbol))]
+ [lang (drracket:language-configuration:language-settings-language lang-settings)]
+ [settings (drracket:language-configuration:language-settings-settings lang-settings)])
(send lang get-metadata modname settings)))
(define (with-fake-header editor)
From 1348760243d9b989acb8a71d8a6f7a8f82652960 Mon Sep 17 00:00:00 2001
From: "Paolo G. Giarrusso"
Date: Sun, 4 Oct 2015 20:44:15 +0200
Subject: [PATCH 5/7] Get language header correctly
---
handin-client/client-gui.rkt | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/handin-client/client-gui.rkt b/handin-client/client-gui.rkt
index 4dcc59c..9d2c614 100644
--- a/handin-client/client-gui.rkt
+++ b/handin-client/client-gui.rkt
@@ -729,15 +729,15 @@
(dynamic-require `(lib "updater.rkt" ,this-collection-name) 'bg-update)
void))
- (define (get-lang-prefix modname)
- (let* ([lang-settings (preferences:get (drracket:language-configuration:get-settings-preferences-symbol))]
+ (define (get-lang-prefix modname editor)
+ (let* ([lang-settings (send editor get-next-settings)]
[lang (drracket:language-configuration:language-settings-language lang-settings)]
[settings (drracket:language-configuration:language-settings-settings lang-settings)])
(send lang get-metadata modname settings)))
(define (with-fake-header editor)
(let ([new-editor (send editor copy-self)]
- [text (get-lang-prefix 'handin)])
+ [text (get-lang-prefix 'handin editor)])
(when text
(send new-editor set-position 0)
(send new-editor insert-port (open-input-string text)))
From 9bc3bc78c9cdec531a1fd17a8c459d6bf6310627 Mon Sep 17 00:00:00 2001
From: "Paolo G. Giarrusso"
Date: Sun, 4 Oct 2015 23:27:03 +0200
Subject: [PATCH 6/7] Refactor: move string->editor! in unit scope
---
handin-client/client-gui.rkt | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/handin-client/client-gui.rkt b/handin-client/client-gui.rkt
index 9d2c614..ae7303c 100644
--- a/handin-client/client-gui.rkt
+++ b/handin-client/client-gui.rkt
@@ -708,16 +708,6 @@
(define handin-icon (scale-by-half (in-this-collection "icon.png")))
-(define (string->editor! str defs)
- (let* ([base (make-object editor-stream-in-bytes-base% str)]
- [stream (make-object editor-stream-in% base)])
- (read-editor-version stream base #t)
- (read-editor-global-header stream)
- (send* defs (begin-edit-sequence #f)
- (erase) (read-from-file stream)
- (end-edit-sequence))
- (read-editor-global-footer stream)))
-
(define tool@
(unit
(import drracket:tool^)
@@ -753,6 +743,16 @@
(write-editor-global-footer stream)
(send base get-bytes)))
+ (define (string->editor! str defs)
+ (let* ([base (make-object editor-stream-in-bytes-base% str)]
+ [stream (make-object editor-stream-in% base)])
+ (read-editor-version stream base #t)
+ (read-editor-global-header stream)
+ (send* defs (begin-edit-sequence #f)
+ (erase) (read-from-file stream)
+ (end-edit-sequence))
+ (read-editor-global-footer stream)))
+
(define tool-button-label (bitmap-label-maker button-label/h handin-icon))
(define (make-new-unit-frame% super%)
From 638aba20999c9f35c4e19d5b5f0a03827f4a8ed6 Mon Sep 17 00:00:00 2001
From: "Paolo G. Giarrusso"
Date: Sun, 4 Oct 2015 23:50:06 +0200
Subject: [PATCH 7/7] Restore language on retrieval
This uses many internal APIs, but I don't see how to do that otherwise.
I already simplified significantly the code (as done elsewhere in the
handin-client), removing various calls to internal APIs in the process.
---
handin-client/client-gui.rkt | 21 +++++++++++++++++++--
1 file changed, 19 insertions(+), 2 deletions(-)
diff --git a/handin-client/client-gui.rkt b/handin-client/client-gui.rkt
index ae7303c..a7f18b2 100644
--- a/handin-client/client-gui.rkt
+++ b/handin-client/client-gui.rkt
@@ -2,6 +2,7 @@
(require racket/class racket/unit racket/file racket/gui/base net/sendurl
mrlib/switchable-button mrlib/bitmap-label drracket/tool framework
+ drracket/private/auto-language
"info.rkt" "client.rkt" "this-collection.rkt")
(provide tool@)
@@ -743,14 +744,30 @@
(write-editor-global-footer stream)
(send base get-bytes)))
+ ; Adapted from
+ ; https://github.com/racket/drracket/blob/a2f8efc910ffd5e0992279ff59bfe7145598d5ba/drracket/drracket/private/unit.rkt#L619-L643
+ (define (guess-language defs)
+ (let-values ([(matching-language settings)
+ (pick-new-language
+ defs
+ (drracket:language-configuration:get-languages)
+ #f #f)])
+ (when matching-language
+ (send defs set-next-settings
+ (drracket:language-configuration:language-settings
+ matching-language
+ settings)
+ #f))))
+
(define (string->editor! str defs)
(let* ([base (make-object editor-stream-in-bytes-base% str)]
[stream (make-object editor-stream-in% base)])
(read-editor-version stream base #t)
(read-editor-global-header stream)
(send* defs (begin-edit-sequence #f)
- (erase) (read-from-file stream)
- (end-edit-sequence))
+ (erase) (read-from-file stream))
+ (guess-language defs)
+ (send defs end-edit-sequence)
(read-editor-global-footer stream)))
(define tool-button-label (bitmap-label-maker button-label/h handin-icon))