diff --git a/app/src/processing/app/Base.java b/app/src/processing/app/Base.java
index c4a25bb90..06b01c083 100644
--- a/app/src/processing/app/Base.java
+++ b/app/src/processing/app/Base.java
@@ -55,9 +55,9 @@ import processing.data.StringList;
public class Base {
// Added accessors for 0218 because the UpdateCheck class was not properly
// updating the values, due to javac inlining the static final values.
- static private final int REVISION = 262;
+ static private final int REVISION = 263;
/** This might be replaced by main() if there's a lib/version.txt file. */
- static private String VERSION_NAME = "0262"; //$NON-NLS-1$
+ static private String VERSION_NAME = "0263"; //$NON-NLS-1$
/** Set true if this a proper release rather than a numbered revision. */
/**
diff --git a/app/src/processing/app/Language.java b/app/src/processing/app/Language.java
index 1a8564bcb..b4a1925e7 100644
--- a/app/src/processing/app/Language.java
+++ b/app/src/processing/app/Language.java
@@ -95,6 +95,7 @@ public class Language {
"el", // Greek
"es", // Spanish
"fr", // French, Français
+ "it", // Italiano, Italian
"ja", // Japanese
"ko", // Korean
"nl", // Dutch, Nederlands
diff --git a/app/src/processing/app/ui/Editor.java b/app/src/processing/app/ui/Editor.java
index 5a4969e5a..d45a5d447 100644
--- a/app/src/processing/app/ui/Editor.java
+++ b/app/src/processing/app/ui/Editor.java
@@ -2136,13 +2136,26 @@ public abstract class Editor extends JFrame implements RunnerListener {
// log("Commented: " + commented);
- // This is the line start offset of the first line, which is added to
- // all other lines while adding a comment. Required when commenting
+ // This is the min line start offset of the selection, which is added to
+ // all lines while adding a comment. Required when commenting
// lines which have uneven whitespaces in the beginning. Makes the
// commented lines look more uniform.
int lso = Math.abs(textarea.getLineStartNonWhiteSpaceOffset(startLine)
- textarea.getLineStartOffset(startLine));
+ if (!commented) {
+ // get min line start offset of all selected lines
+ for (int line = startLine+1; line <= stopLine; line++) {
+ String lineText = textarea.getLineText(line);
+ if (lineText.trim().length() == 0) {
+ continue; //ignore blank lines
+ }
+ int so = Math.abs(textarea.getLineStartNonWhiteSpaceOffset(line)
+ - textarea.getLineStartOffset(line));
+ lso = Math.min(lso, so);
+ }
+ }
+
for (int line = startLine; line <= stopLine; line++) {
int location = textarea.getLineStartNonWhiteSpaceOffset(line);
String lineText = textarea.getLineText(line);
diff --git a/build/shared/lib/languages/PDE_it.properties b/build/shared/lib/languages/PDE_it.properties
new file mode 100644
index 000000000..20e6113ba
--- /dev/null
+++ b/build/shared/lib/languages/PDE_it.properties
@@ -0,0 +1,589 @@
+Annulla
+
+# ---------------------------------------
+# Language: Italiano (Italian) (it)
+# ---------------------------------------
+
+
+# ---------------------------------------
+# Menu
+
+# | File | Edit | Sketch | Debug | Tools | Help |
+# | File |
+menu.file = File
+menu.file.new = Nuovo
+menu.file.open = Apri...
+menu.file.recent = Apri Recenti
+menu.file.sketchbook = Cartelle degli Sketch...
+menu.file.sketchbook.empty = Cartella degli Sketch vuota
+menu.file.examples = Esempi...
+menu.file.close = Chiudi
+menu.file.save = Salva
+menu.file.save_as = Salva con nome...
+menu.file.export_application = Esporta Applicazione...
+menu.file.page_setup = Imposta Pagina
+menu.file.print = Stampa...
+menu.file.preferences = Preferenze...
+menu.file.quit = Esci
+
+# | File | Edit | Sketch | Debug | Tools | Help |
+# | Edit |
+menu.edit = Modifica
+menu.edit.undo = Annulla
+menu.edit.redo = Ripeti
+menu.edit.action.addition = addizione
+menu.edit.action.deletion = cancellazione
+menu.edit.cut = Taglia
+menu.edit.copy = Copia
+menu.edit.copy_as_html = Copia come HTML
+menu.edit.paste = Incolla
+menu.edit.select_all = Seleziona Tutto
+menu.edit.auto_format = Formattazione Automatica
+menu.edit.comment_uncomment = Commenta/Rimuovi commento
+menu.edit.increase_indent = Aumenta Indentazione
+menu.edit.decrease_indent = Diminuisci Indentazione
+menu.edit.find = Trova...
+menu.edit.find_next = Trova Successivo
+menu.edit.find_previous = Trova Puccessivo
+menu.edit.use_selection_for_find = Trova Testo Selezionato
+
+# | File | Edit | Sketch | Debug | Tools | Help |
+# | Sketch |
+menu.sketch.run = Esegui
+menu.sketch.present = Presenta
+menu.sketch.tweak = Tweak
+menu.sketch.stop = Stop
+# ---
+menu.library = Importa Libreria...
+menu.library.add_library = Aggiungi Libreria...
+menu.library.contributed = Librerie di terze parti
+menu.library.no_core_libraries = modalità senza librerie di default
+# ---
+menu.sketch = Sketch
+menu.sketch.show_sketch_folder = Apri cartella dello Sketch
+menu.sketch.add_file = Aggiungi File...
+
+# | File | Edit | Sketch | Debug | Tools | Help |
+# | Debug |
+menu.debug = Debug
+menu.debug.enable = Abilitare Debugger
+menu.debug.disable = Disabilitare Debugger
+#menu.debug.show_debug_toolbar = Show Debug Toolbar
+#menu.debug.debug = Debug
+#menu.debug.stop = Stop
+# ---
+menu.debug.toggle_breakpoint = Toggle Breakpoint
+#menu.debug.list_breakpoints = List breakpoints
+# ---
+# used for both menus and toolbars
+menu.debug.step = Step
+menu.debug.step_into = Step Avanti
+menu.debug.step_out = Step Indietro
+menu.debug.continue = Continua
+# ---
+#menu.debug.print_stack_trace = Print Stack Trace
+#menu.debug.print_locals = Print Locals
+#menu.debug.print_fields = Print Fields
+#menu.debug.print_source_location = Print Source Location
+#menu.debug.print_threads = Print Threads
+# ---
+#menu.debug.variable_inspector = Variable Inspector
+menu.debug.show_variables = Mostra Variabili
+menu.debug.hide_variables = Nascondi Variabili
+#menu.debug.show_sketch_outline = Show Sketch Outline
+#menu.debug.show_tabs_list = Show Tabs List
+
+# | File | Edit | Sketch | Debug | Tools | Help |
+# | Tools |
+menu.tools = Strumenti
+menu.tools.color_selector = Selezionatore dei colori...
+menu.tools.create_font = Crea Font...
+menu.tools.archive_sketch = Archivia Sketch
+menu.tools.fix_the_serial_lbrary = Ripara la "Serial Library"
+menu.tools.install_processing_java = Installa "processing-java"
+menu.tools.add_tool = Aggiungi Strumento...
+
+# | File | Edit | Sketch | Debug | Tools | Help |
+# | Help |
+menu.help = Aiuto
+menu.help.welcome = Benvenuto in Processing 3
+menu.help.about = Riguardo a Processing
+menu.help.environment = Ambiente di Sviluppo
+menu.help.reference = Guida di Riferimento
+menu.help.find_in_reference = Cerca nella Guida
+menu.help.libraries_reference = Guida delle Librerie
+menu.help.tools_reference = Guida degli Strumenti
+menu.help.empty = (vuoto)
+menu.help.online = Online
+menu.help.getting_started = Primi Passi
+menu.help.getting_started.url = http://processing.org/learning/gettingstarted/
+menu.help.troubleshooting = Risoluzione dei Problemi
+menu.help.troubleshooting.url = http://wiki.processing.org/w/Troubleshooting
+menu.help.faq = Domande Frequenti
+menu.help.faq.url = http://wiki.processing.org/w/FAQ
+menu.help.foundation = La Processing Foundation
+menu.help.foundation.url = http://processing.org/foundation/
+menu.help.visit = Visita Processing.org
+menu.help.visit.url = http://processing.org/
+
+
+# ---------------------------------------
+# Basics
+
+# Buttons
+prompt.yes = Si
+prompt.no = No
+prompt.cancel = Cancella
+prompt.ok = Ok
+prompt.browse = Naviga
+prompt.export = Esporta
+
+
+# ---------------------------------------
+# Frames
+
+# Open (Frame)
+open = Apri uno sketch di Processing...
+
+# Save (Frame)
+save = Salva la cartella degli sketch con nome...
+save.title = Vuoi salvare le modifiche di %s
prima di chiudere?
+save.hint = Se non salverai, le tue modifiche verranno perse.
+save.btn.save = Salva
+save.btn.dont_save = Non salvare
+
+# Close (Frame) also used to prompt on non-OS X machines
+close.unsaved_changes = Salvare le modifiche di %s?
+
+# Preferences (Frame)
+preferences = Preferenze
+preferences.button.width = 80
+preferences.requires_restart = richiede il riavvio di Processing
+preferences.sketchbook_location = Percorso della cartella degli sketch
+preferences.sketchbook_location.popup = Percorso della cartella degli sketch
+preferences.language = Lingua
+preferences.editor_and_console_font = Font dell'Editor e della Console
+preferences.editor_and_console_font.tip = Scegli il font usato dall'Editor e dalla Console.
Solo font monospaced (larghezza fissa) possono essere usati,
sebbene la lista possa essere imperfetta.
+preferences.editor_font_size = Dimensione del font dell'Editor
+preferences.console_font_size = Dimensione del font della Console
+preferences.zoom = Scala dell'interfaccia
+preferences.zoom.auto = Automatica
+preferences.background_color = Colore di sfondo durante la modalità "Presenta"
+preferences.background_color.tip = Scegli il colore di sfondo durante la modalità "Presenta".
Questa modalità è utilizzata per mostrare uno sketch a tutto schermo;
è accessibile dal menù Sketch.
+preferences.use_smooth_text = Usa un font semplice nell'Editor
+preferences.enable_complex_text_input = Abilita la possibilità di usare caratteri complessi
+preferences.enable_complex_text_input_example = per esempio Giapponese
+preferences.continuously_check = Controlla continuamente la presenza di errori
+preferences.show_warnings = Mostra Avvisi
+preferences.code_completion = Completamento del codice con
+preferences.trigger_with = Abilita con
+preferences.cmd_space = spazio
+preferences.suggest_imports = Suggerisci il codice di import
+preferences.increase_max_memory = Aumenta la massima memoria disponibile a
+preferences.delete_previous_folder_on_export = Elimina le cartelle precedenti dopo l'export
+preferences.check_for_updates_on_startup = Consenti di controllare la presenza di aggiornamenti (vedi le FAQ per le informazioni condivise)
+preferences.run_sketches_on_display = Esegui Sketch nel monitor
+preferences.run_sketches_on_display.tip = Stabilisce il monitor nel quale gli sketch vengono inizalmente visualizzati.
Come al solito, se la finestra dello sketch viene spostata, si riaprirà nella
stessa posizione, tuttavia quando si esegue nella modalità "Presenta"
(tutto schermo), questo monitor verrà sempre utilizzato.
+preferences.automatically_associate_pde_files = Associa automaticamente i file .pde con Processing
+preferences.launch_programs_in = Lancia programmi in
+preferences.launch_programs_in.mode = modalità
+preferences.file = Più preferenze possono essere modificate nel file
+preferences.file.hint = modificalo solo quando Processing non è aperto
+
+# Sketchbook Location (Frame)
+sketchbook_location = Seleziona la nuova posizione della cartella degli Sketch
+
+# Sketchbook (Frame)
+sketchbook = Cartella degli Sketch
+sketchbook.tree = Cartella degli Sketch
+
+# Examples (Frame)
+examples.title = %s Esempi
+examples.add_examples = Aggiungi Esempi...
+examples.libraries = Librerie di terze parti
+examples.core_libraries = Librarie
+examples.contributed = Esempi di terze parti
+
+# Export (Frame)
+export = Opzioni di esportazione
+export.platforms = Piattaforme
+export.options = Opzioni
+export.options.present = Modalità "Presenta"
+export.options.show_stop_button = Mostra il bottone di Stop
+export.description.line1 = Esporta come applicazione creerà
+export.description.line2 = delle applicazioni esegubili per la piattaforma scelta.
+export.unsaved_changes = Salvare le modifiche prima di esportare?
+export.notice.cancel.unsaved_changes = Esportazione cancellata, prima di eseguirlo è necessario salvare.
+export.notice.exporting = Esportando l'applicazione
+export.notice.exporting.done = Esportazione eseguita.
+export.notice.exporting.error = Errore durante l'esportazione.
+export.notice.exporting.cancel = Esportazione come applicazione cancellata.
+export.tooltip.macosx = L'esportazione per Mac OS X è disponibile solo su Mac OS X
+export.full_screen = Tutto Schermo
+export.embed_java = Embed Java
+export.embed_java.for = Embed Java for
+export.code_signing = Code Signing
+export.messages.is_read_only = Sketch è in modalità di sola lettura
+export.messages.is_read_only.description = Alcuni files sono in modalità sola lettura, quindi dovrai\nsalvare lo Sketch in un'altra posizione\ne provare di nuovo.
+export.messages.cannot_export = Non è possibile esportare
+export.messages.cannot_export.description = Non puoi esportare uno Sketch che non è ancora stato salvato.
+
+# Find (Frame)
+find = Trova
+find.find = Trova:
+find.replace_with = Sostituisci con:
+find.ignore_case = Ignora maiuscole / minuscole
+find.all_tabs = Cerca in tutte le schede
+find.wrap_around = Prosegui dall'inizio
+find.btn.replace_all = Sostituisci tutto
+find.btn.replace = Sostituisci
+find.btn.replace_and_find = Trova e sostituisci
+find.btn.previous = Trova precedente
+find.btn.find = Trova
+
+# Find in reference (Frame)
+find_in_reference = Trova nella guida
+
+# File (Frame)
+file = Seleziona un'immagine o un altro file da copiare nel tuo sketch
+
+# Create Font (Frame)
+create_font = Crea un Font
+create_font.label = Usa questo strumento per creare dei font bitmap per il tuo programma.\nSeleziona un font e la dimensione, poi clicca su 'Ok' per generare il font.\nSarà aggiunto alla cartella dei dati del tuo sketch.
+create_font.size = Dimensione
+create_font.smooth = Caratteri semplici
+create_font.characters = Caratteri...
+create_font.character_selector = Selezionatore dei caratteri
+create_font.character_selector.label = I caratteri di default includono gran parte dei caratteri bitmap per Mac OS\ne Windows Latin scripts. Includere tutti i caratteri può\nrichiedere una grande quantità di memoria per tutti i bitmap.\nPEr un controllo maggiore puoi selezionare ogni specifico blocco Unicode.
+create_font.default_characters = Caratteri di default
+create_font.all_characters = Tutti i caratteri
+create_font.specific_unicode = Blocchi specifici Unicode
+create_font.filename = Nome del file
+
+# Color Selector (Frame)
+color_selector = Selezionatore dei colori
+
+# Archive Sketch (Frame)
+archive_sketch = Archivia sketch come...
+
+# Tweak Mode
+tweak_mode = Modalità Tweak
+tweak_mode.save_before_tweak = Per favore salva lo sketch prima di avviare la modalità Tweak.
+tweak_mode.keep_changes.line1 = Salvare le modifiche?
+tweak_mode.keep_changes.line2 = Hai cambiato alcuni valori nello sketch. Vuoi salvare le modifiche?
+
+# DebugTray
+debugger.name = Nome
+debugger.value = Valore
+debugger.type = Tipo
+
+# ---------------------------------------
+# Toolbars
+
+# [Run/Present] [Stop] [New] [Open] [Save]
+toolbar.run = Esegui
+toolbar.present = Presenta
+toolbar.stop = Stop
+toolbar.debug = Debug
+# ---
+toolbar.new = Nuovo
+toolbar.open = Apri
+toolbar.save = Salva
+# toolbar.export_application = Export Application
+toolbar.add_mode = Aggiungi modalità...
+
+# [Debug] [Continue] [Step] [Stop] [Toggle Breakpoints] [Variable Inspector]
+#toolbar.debug.continue = Continue
+#toolbar.debug.step = Step
+#toolbar.debug.step_into = Step Into
+#toolbar.debug.stop = Stop
+#toolbar.debug.toggle_breakpoints = Toggle Breakpoint
+#toolbar.debug.variable_inspector = Variable Inspector
+
+
+# ---------------------------------------
+# Editor
+
+# [Tab1] [Tab2] [v]
+editor.header.new_tab = Nuova scheda
+editor.header.rename = Rinomina
+editor.header.delete = Elimina
+editor.header.previous_tab = Scheda precedente
+editor.header.next_tab = Scheda successiva
+editor.header.delete.warning.title = No.
+editor.header.delete.warning.text = Non puoi eliminare la scheda principale del tuo unico sketch aperto..
+
+# PopUp menu
+editor.popup.jump_to_declaration = Vai alla Dichiarazione
+editor.popup.show_usage = Mostra utilizzo...
+editor.popup.rename = Rinomina...
+
+# Tabs
+editor.tab.new = Nuovo Nome
+editor.tab.new.description = Nome del nuovo file
+editor.tab.rename = Nuovo Nome
+editor.tab.rename.description = Nuovo nome del file
+
+# Sketch
+editor.sketch.rename.description = Nuovo nome dello scketch
+
+editor.status.autoformat.no_changes = Nessuna modifica necessaria per l'Auto Format.
+editor.status.autoformat.finished = Auto Format terminato.
+editor.status.find_reference.select_word_first = Per prima cosa selezionare una parola da trovare nella guida.
+editor.status.find_reference.not_available = Nessuna referenza disponibile per "%s".
+editor.status.drag_and_drop.files_added.0 = Nessun file aggiunto allo sketch.
+editor.status.drag_and_drop.files_added.1 = Un file aggiunto allo sketch.
+editor.status.drag_and_drop.files_added.n = %d file aggiunti allo sketch.
+editor.status.saving = Salvataggio...
+editor.status.saving.done = Salvataggio eseguito.
+editor.status.saving.canceled = Salvataggio annullato.
+editor.status.printing = Stampa in corso...
+editor.status.printing.done = Stampa eseguita.
+editor.status.printing.error = Errore durante la stampa.
+editor.status.printing.canceled = Stampa annullata.
+editor.status.copy_as_html = Il codice formattato in HTML è stato copiato.
+editor.status.debug.busy = Debugger occupato...
+editor.status.debug.halt = Debugger bloccato.
+editor.status.archiver.create = Creato archivio "%s".
+editor.status.archiver.cancel = Archivio sketch annullato.
+
+# Errors
+editor.status.warning = Avviso
+editor.status.error = Errore
+editor.status.error_on = Errore su "%s"
+editor.status.missing.default = Manca "%c"
+editor.status.missing.semicolon = Manca un punto e virgola ";"
+editor.status.missing.left_sq_bracket = Manca parentesi quadra sinistra "["
+editor.status.missing.right_sq_bracket = Manca parentesi quadra destra "]"
+editor.status.missing.left_paren = Manca parentesi sinistra "("
+editor.status.missing.right_paren = Manca parentesi destra ")"
+editor.status.missing.left_curly_bracket = Manca parentesi graffa sinistra "{"
+editor.status.missing.right_curly_bracket = Manca parentesi graffa destra "}"
+editor.status.missing.add = Considera di aggiungere "%s"
+editor.status.reserved_words = "color" e "int" sono parole riservate e non possono essere usate come nome di una variabile
+editor.status.undefined_method = La funzione "%s(%s)" non esiste
+editor.status.undefined_constructor = Il costruttore "%s(%s)" non esiste
+editor.status.empty_param = La funzione "%s()" non richiede alcun parametro
+editor.status.wrong_param = La funzione "%s()" si aspetta dei parametri come: "%s(%s)"
+editor.status.undef_global_var = La variabile globale "%s" non esiste
+editor.status.undef_class = La classe "%s" non esiste
+editor.status.undef_var = La variabile "%s" non esiste
+editor.status.undef_name = Il nome "%s" non può essere riconosciuto
+editor.status.type_mismatch = Errore di battitura, "%s" non combacia con "%s"
+editor.status.unused_variable = Il valore della variabile locale "%s" non è usato
+editor.status.uninitialized_variable = La variabile locale "%s" potrebbe non essere stata inizializzata
+editor.status.no_effect_assignment = L'assegnazione alla variabile "%s" non ha effetto
+editor.status.hiding_enclosing_type = La classe "%s" non può avere lo stesso nome del tuo sketch o della classe che la contiene
+
+# Footer buttons
+editor.footer.errors = Errori
+editor.footer.errors.problem = Problemi
+editor.footer.errors.tab = Tab
+editor.footer.errors.line = Linea
+editor.footer.console = Console
+
+# New handler
+new.messages.is_read_only = Lo sketch è in modalità sola lettura.
+new.messages.is_read_only.description = Alcuni files sono in sola lettura, quindi devi\nsalvare lo sketch in un'altra cartella,\ne provare di nuovo.
+
+# Rename handler
+rename.messages.is_untitled = Sketch senza nome
+rename.messages.is_untitled.description = Che ne dici di salvare lo sketch\nprima di provare a rinominarlo?
+rename.messages.is_modified = Per favore salva lo sketch prima di rinominarlo.
+rename.messages.is_read_only = Lo sketch è in modalità sola lettura.
+rename.messages.is_read_only.description = Alcuni files sono in sola lettura, quindi devi\nsalvare lo sketch in un'altra cartella,\ne provare di nuovo.
+
+# Naming handler
+name.messages.problem_renaming = Problema con nuovo nome
+name.messages.starts_with_dot.description = Il nome non può iniziare con un punto.
+name.messages.invalid_extension.description = ".%s" non è un'estensione valida.
+name.messages.main_java_extension.description = La prima tab non può essere un file .%s.\n(Potrebbe essere il caso che tu passi a un\n"vero" ambiente di sviluppo.)
+name.messages.new_sketch_exists = No
+name.messages.new_sketch_exists.description = Un file chiamato "%s" esiste già in\n"%s"
+name.messages.new_folder_exists = Impossibile rinominare
+name.messages.new_folder_exists.description = Putroppo uno sketch (o cartella) chiamato "%s" esiste già.
+name.messages.error = Errore
+name.messages.no_rename_folder.description = Impossibile rinominare la cartella dello sketch.
+name.messages.no_rename_file.description = Impossibile rinominare "%s" in "%s"
+name.messages.no_create_file.description = Impossibile creare il file "%s"\nin "%s"
+
+# Delete handler
+delete.messages.cannot_delete = Impossibile eliminare
+delete.messages.cannot_delete.description = Non puoi eliminare uno sketch che non è stato salvato.
+delete.messages.cannot_delete.file = Impossibile
+delete.messages.cannot_delete.file.description = Impossibile eliminare
+delete.messages.is_read_only = Lo sketch è in modalità sola lettura.
+delete.messages.is_read_only.description = Alcuni files sono in sola lettura, quindi devi\nsalvare lo sketch in un'altra cartella,\ne provare di nuovo.
+
+# Save handler
+save_file.messages.is_read_only = Lo sketch è in modalità sola lettura.
+save_file.messages.is_read_only.description = Alcuni files sono in sola lettura, quindi devi\nsalvare questo sketch in un'altra cartella.
+save_file.messages.sketch_exists = Impossibile salvare
+save_file.messages.sketch_exists.description = Uno sketch con il nome\n“%s” esiste già.
+save_file.messages.tab_exists = No
+save_file.messages.tab_exists.description = Non puoi salvare lo sketch come "%s"\npoichè lo sketch ha già una tab con quel nome.
+save_file.messages.recursive_save = Sei amico di Borges
+save_file.messages.recursive_save.description = Non puoi salvare lo sketch in una cartella\ndentro se stessa: andrebbe avanti all'infinito.
+
+# Add handler
+add_file.messages.is_read_only = Lo sketch è in modalità sola lettura.
+add_file.messages.is_read_only.description = Alcuni files sono in sola lettura, quindi devi\nsalvare lo sketch in un'altra cartella,\ne provare di nuovo.
+add_file.messages.confirm_replace = Sostituire l'esitente versione di %s?
+add_file.messages.error_adding = Errore aggiungendo il file
+add_file.messages.cannot_delete.description = Impossibile eliminare il corrente file '%s'.
+add_file.messages.cannot_add.description = Impossibile aggiungere '%s' allo sketch.
+add_file.messages.same_file = Non puoi fregarmi
+add_file.messages.same_file.description = Questo file è già stato copiato nella\nquale tu stavic cercando di aggiugnerlo.\nNon lo farò.
+
+# Temp folder creator
+temp_dir.messages.bad_build_folder = Errore nella compilazione della cartella
+temp_dir.messages.bad_build_folder.description = Impossibile trovare una cartella dove compilare lo sketch.
+
+# Ensure Existance
+ensure_exist.messages.missing_sketch = Sketch scomparso.
+ensure_exist.messages.missing_sketch.description = Cartella dello sketch scomparsa.\nProverò a ri-salvarla nella stessa location,\nma qualsiasi cosa eccetto il codice verrà persa.
+ensure_exist.messages.unrecoverable = Impossibile ri-salvare lo sketch.
+ensure_exist.messages.unrecoverable.description = Impossibile ri-salvare correttamente lo sketch. Potresti incontrare qualche problema,\ne potrebbe essere l'ora di copiare e incollare il codice in un altro editor di testo.
+
+# Check name
+check_name.messages.is_name_modified = Il nome dello sketch deve essere modificato. Il nome può consistere solo di\ncaratteri e numeri ASCII (ma non può cominciare con un numero).\nInoltre devono essere di lunghezza inferiore ai 64 caratteri.
+
+# ---------------------------------------
+# Contributions
+
+# Contribution Panel
+contrib = Manager dei Contributi
+contrib.manager_title.update = Manager degli Aggiornamenti
+contrib.manager_title.mode = Manager delle Modalità
+contrib.manager_title.tool = Manager degli Strumenti
+contrib.manager_title.library = Manager della Libreria
+contrib.manager_title.examples = Manager degli esempi
+contrib.category = Categoria:
+contrib.filter_your_search = Filtra la tua ricerca...
+contrib.show_only_compatible.mode = Mostra solo modalità compatibili
+contrib.show_only_compatible.tool = Mostra solo strumenti compatibili
+contrib.show_only_compatible.library = Mostra solo librerie compatibili
+contrib.show_only_compatible.examples = Mostra solo esempi compatibili
+contrib.show_only_compatible.update = Mostra solo aggiornamenti compatibili
+contrib.restart = Riavvia Processing
+contrib.unsaved_changes = Sono presenti modifiche non salvate
+contrib.unsaved_changes.prompt = Sei sicuro di voler riavviare Processing senza salvare le modifiche?
+contrib.messages.remove_restart = Per favore riavvia Processing per finire di rimuovere questo componente.
+contrib.messages.install_restart = Per favore riavvia Processing per finire di installare questo componente.
+contrib.messages.update_restart = Per favore riavvia Processing per finire di aggiornare questo componente.
+contrib.errors.list_download = Impossibile scaricare la lista dei contributi disponibili.
+contrib.errors.list_download.timeout = Connessione interrotta durante il download della lista dei contributi.
+contrib.errors.download_and_install = Errore durante il download e l'installazione di %s.
+contrib.errors.description_unavailable = Descrizione non disponibile.
+contrib.errors.malformed_url = Il link ottenuto da Processing.org non è valido.\nPuoi comunque installare la libreria manualmente visitando\nil suo sito web.
+contrib.errors.needs_repackage = %s necessita di ricreare il suo pacchetto secondo le %s lineeguida.
+contrib.errors.no_contribution_found = Impossibile trovare un %s nel file scaricato.
+contrib.errors.overwriting_properties = Errore sovrascrivendo il file .properties.
+contrib.errors.install_failed = Installazione fallita
+contrib.errors.update_on_restart_failed = L'aggiornamento al riavvio di %s è fallito.
+contrib.errors.temporary_directory = Impossibile scrivere nella cartella temporanea.
+contrib.errors.contrib_download.timeout = Connessione interrotta durante il download di %s.
+contrib.errors.no_internet_connection = Sembra che tu non sia connesso a Internet.
+contrib.status.downloading_list = Scaricando la lista dei contributi...
+contrib.status.connecting = Connettendosi...
+contrib.status.done = Fatto.
+contrib.all = Tutti
+contrib.undo = Annulla
+contrib.remove = Rimuovi
+contrib.install = Installa
+contrib.progress.installing = Installando
+contrib.progress.starting = Inizializzando
+contrib.progress.downloading = Scaricando
+contrib.download_error = Errore durante il download del contributo.
+contrib.unsupported_operating_system = Il tuo sistema operativo sembra non essere supportato. Dovresti visitare %s della libreria per maggiori informazioni.
+contrib.category.3d = 3D
+contrib.category.animation = Animazione
+contrib.category.data = Dati
+contrib.category.geometry = Geometria
+contrib.category.gui = GUI
+contrib.category.hardware = Hardware
+contrib.category.i_o = I/O
+contrib.category.math = Matematica
+contrib.category.simulation = Simulazione
+contrib.category.sound = Suono
+contrib.category.typography = Tipografia
+contrib.category.utilities = Utilità
+contrib.category.video_vision = Video & Grafica
+contrib.category.other = Altro
+
+# Install on Startup
+contrib.startup.errors.download_install = Errore durante il download e installazione di %s
+contrib.startup.errors.temp_dir = Impossibile scrivere nella cartella temporanea durante il download e installazione di %s
+contrib.startup.errors.new_marker = Il selezionatore dei contributi non aggiornato sembra non essere compatibile con %s. Dovresti installarlo manualmente per poterlo aggiornare...
+
+# Install on Import
+contrib.import.dialog.title = Librerie mancanti disponibili
+contrib.import.dialog.primary_text = Le seguenti librerie importate sono disponibili per il download, ma non sono state installate.
+contrib.import.dialog.secondary_text = Vorresti installarle ora?
+contrib.import.progress.download = Scaricando %s...
+contrib.import.progress.install = Installando %s...
+contrib.import.progress.done = %s è stato installato.
+contrib.import.progress.final_list = LE seguenti librerie sono state installate:
+contrib.import.errors.link = Errore: la libreria %s ha uno strano link di download.
+
+# ---------------------------------------
+# Warnings
+
+warn.delete = Elimina
+warn.delete.sketch = Sei sicuro di voler eliminare questo sketch?
+warn.delete.file = Sei sicuro di voler eliminare "%s"?
+warn.cannot_change_mode.title = Impossibile cambiare modalità
+warn.cannot_change_mode.body = Impossibile cambiare modalità,\npoichè la modalità "%s" non è compatibile con quella corrente.
+
+
+# ---------------------------------------
+# Update Check
+
+update_check = Aggiorna
+update_check.updates_available.core = Una nuova versione di Processing è disponibile,\nvuoi visitare la pagina di download del sito di Processing?
+update_check.updates_available.contributions = Ci sono aggiornamenti disponibili per alcuni dei contributi installati,\nvorresti aprire il gestore dei contributi ora?
+
+# ---------------------------------------
+# Color Chooser
+
+color_chooser = Selezionatore dei colori
+color_chooser.select = Seleziona
+
+# ---------------------------------------
+# Movie Maker
+
+movie_maker = Creatore di filmati
+movie_maker.title = QuickTime Movie Maker
+movie_maker.blurb = Questo strumento crea un filmato QuickTime a partire da una sequenza di immagini.
Per evitare artifatti causati dalla ri-compressone di immagini in video,
usa immagini TIFF, TGA (da Processing), o PNG come sorgenti.
Immagini TIFF e TGA verranno scritte più rapidamente, ma richiederanno più memoria:
saveFrame("frames/####.tif");
saveFrame("frames/####.tga");
Le immagini PNG sono più piccole, ma il tuo sketch verrà eseguito più lentamente:
saveFrame("frames/####.png");
This codice è basato su QuickTime Movie Maker 1.5.1 2011-01-17.
Copyright © 2010-2011 Werner Randelshofer. Tutti i diritti riservati
+movie_maker.image_folder_help_label = Trascina una cartella con immagini dentro il campo qui sotto:
+movie_maker.choose_button = Scegli...
+movie_maker.select_image_folder = Seleziona la cartella con le immagini...
+movie_maker.sound_file_help_label = Trascina un file audio nel campo qui sotto (.au, .aiff, .wav, .mp3):
+movie_maker.select_sound_file = Seleziona un file audio...
+
+movie_maker.create_movie_button = Crea filmato...
+movie_maker.save_dialog_prompt = Salva filmato come...
+movie_maker.width = Larghezza:
+movie_maker.height = Altezza:
+movie_maker.compression = Compressione:
+movie_maker.compression.animation = Animazione
+movie_maker.compression.jpeg = JPEG
+movie_maker.compression.png = PNG
+movie_maker.framerate = Fotogrammi al secondo:
+movie_maker.orig_size_button = Stessa dimensione degli originali
+movie_maker.orig_size_tooltip = Seleziona questa opzione se la cartalla contiene già fotogrammi della dimensione desiderata.
+
+movie_maker.error.avoid_tiff = Prova immagini TGA o PNG al posto di TIFF.
+movie_maker.error.badnumbers = Larghezza e altezza devono essere numeri interi positivi; il numero di fotogrammi al secondo deve essere un numero positivo.
+movie_maker.error.cannot_read = Impossibile leggere %s.
+movie_maker.error.cannot_read_maybe_bad = Impossibile leggere %s; potrebbe non andare bene.
+movie_maker.error.movie_failed = Creazione del filmato QuickTime fallita.
+movie_maker.error.need_input = Dovresti specificare la cartella con i file delle immagini o dei suoni, o entrambe.
+movie_maker.error.no_images_found = Nessun file immagine trovato.
+movie_maker.error.sorry = Mi dispiace
+movie_maker.error.unknown_tga_format = Sconosciuto formato di file .tga per %s.
+
+movie_maker.progress.creating_file_name = Creando %s.
+movie_maker.progress.creating_output_file = Creando il file di output
+movie_maker.progress.initializing = Inizializzando...
+movie_maker.progress.processing = Processando %s.
diff --git a/build/shared/lib/languages/languages.txt b/build/shared/lib/languages/languages.txt
index 5f60ed0dc..1cd66572b 100644
--- a/build/shared/lib/languages/languages.txt
+++ b/build/shared/lib/languages/languages.txt
@@ -11,6 +11,7 @@ en # English, English
el # Greek
es # Spanish
fr # French, Français, Langue française
+it # Italiano, Italian
ja # Japanese
ko # Korean
nl # Dutch, Nederlands
diff --git a/build/shared/revisions.txt b/build/shared/revisions.txt
index 1c2cac02a..4898a80d2 100644
--- a/build/shared/revisions.txt
+++ b/build/shared/revisions.txt
@@ -1,3 +1,42 @@
+PROCESSING 3.3.5 (REV 0262) - 23 June 2017
+
+Fixes for a couple problems introduced in the last release.
+
+
+[ everything that went bad ]
+
++ Console window was only remembering two lines of text
+ because of a name collision in the preferences handling.
+ https://github.com/processing/processing/issues/5110
+
++ Something went wrong with the 64-bit Linux release:
+ "libjli.so: cannot open shared object file: No such file or directory"
+ https://github.com/processing/processing/issues/5111
+
++ "Could not parse -1 for --display" message on some Windows machines
+ https://github.com/processing/processing/issues/5118
+ https://github.com/processing/processing/pull/5141
+
+
+[ some new things hopefully going good ]
+
++ Fix a NullPointerException that showed up with textWidth() and OpenGL
+ https://github.com/processing/processing/issues/5137
+ https://github.com/processing/processing/pull/5138
+
++ Per request, use native file choosers by default on Linux. I'm told
+ that the default Linux file choosers have grown up in the last decade.
+ I'm trusting the person who is making that claim and making them default.
+ https://github.com/processing/processing/issues/5122
+ To get the old behavior in the Editor, change preferences.txt to say:
+ chooser.files.native = false
+ Or in your code, add this line:
+ useNativeSelect = false;
+
+
+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
+
+
PROCESSING 3.3.4 (REV 0261) - 3 June 2017
Several useful bug fixes and improvements. Some big, many small.
diff --git a/core/done.txt b/core/done.txt
index d8a7e7d0a..5468d84ff 100644
--- a/core/done.txt
+++ b/core/done.txt
@@ -1,3 +1,12 @@
+0262 (3.3.5)
+X default to using native select on all platforms
+
+contrib
+X Add defaultFontOrDeath to OpenGL textWidth
+X https://github.com/processing/processing/issues/5137
+X https://github.com/processing/processing/pull/5138
+
+
0261 (3.3.4)
X add exec() with StringList options
X start to add stub for shell() function
diff --git a/core/src/processing/core/PApplet.java b/core/src/processing/core/PApplet.java
index a74383910..8cee0232e 100644
--- a/core/src/processing/core/PApplet.java
+++ b/core/src/processing/core/PApplet.java
@@ -3550,15 +3550,25 @@ public class PApplet implements PConstants {
* Same as exec() above, but prefixes the call with a shell.
*/
static public int shell(StringList stdout, StringList stderr, String... args) {
- if (platform == WINDOWS) {
- throw new RuntimeException("Not yet implemented.");
- }
- String shell = System.getenv("SHELL"); // or just /bin/sh?
+ String shell;
+ String runCmd;
StringList argList = new StringList();
- for (String arg : args) {
- argList.append(shellQuoted(arg));
+ if (platform == WINDOWS) {
+ shell = System.getenv("COMSPEC");
+ runCmd = "/C";
+ } else {
+ shell = "/bin/sh";
+ runCmd = "-c";
+ // attempt emulate the behavior of an interactive shell
+ // can't use -i or -l since the version of bash shipped with macOS does not support this together with -c
+ // also we want to make sure no motd or similar gets returned as stdout
+ argList.append("if [ -f /etc/profile ]; then . /etc/profile >/dev/null 2>&1; fi;");
+ argList.append("if [ -f ~/.bash_profile ]; then . ~/.bash_profile >/dev/null 2>&1; elif [ -f ~/.bash_profile ]; then . ~/.bash_profile >/dev/null 2>&1; elif [ -f ~/.profile ]; then ~/.profile >/dev/null 2>&1; fi;");
}
- return exec(stdout, stderr, shell, "-c", argList.join(" "));
+ for (String arg : args) {
+ argList.append(arg);
+ }
+ return exec(stdout, stderr, shell, runCmd, argList.join(" "));
}
diff --git a/core/todo.txt b/core/todo.txt
index c29d29bf3..e35a4695a 100644
--- a/core/todo.txt
+++ b/core/todo.txt
@@ -1,9 +1,10 @@
-0262 (3.3.5 or 3.4)
-X default to using native select on all platforms
+0263 (3.3.6 or 3.4)
-_ shell discussion with gohai
-_ https://github.com/processing/processing/pull/5082
+contrib
+X shell discussion with gohai
+X https://github.com/processing/processing/pull/5082
+
_ add separator option to loadTable()
_ https://github.com/processing/processing/issues/5068
diff --git a/done.txt b/done.txt
index e8f8f435a..527961f6e 100644
--- a/done.txt
+++ b/done.txt
@@ -1,3 +1,17 @@
+0262 (3.3.5 or 3.4)
+X use native Linux file choosers by default
+X https://github.com/processing/processing/issues/5122
+X Console window losing text
+X https://github.com/processing/processing/issues/5110
+X Linux 64-bit issues
+X https://github.com/processing/processing/issues/5111
+
+contrib
+X display=-1 regression ("could not parse" message)
+X https://github.com/processing/processing/issues/5118
+X https://github.com/processing/processing/pull/5141
+
+
0261 (3.3.4)
X redo console handling to not use Timer, fixing freeze-up problems
o https://github.com/processing/processing/pull/4935
diff --git a/java/src/processing/mode/java/JavaBuild.java b/java/src/processing/mode/java/JavaBuild.java
index e9f84170d..7e474b574 100644
--- a/java/src/processing/mode/java/JavaBuild.java
+++ b/java/src/processing/mode/java/JavaBuild.java
@@ -53,6 +53,7 @@ import processing.core.PApplet;
import processing.core.PConstants;
import processing.data.StringList;
import processing.data.XML;
+import processing.mode.java.pdex.SourceUtils;
import processing.mode.java.preproc.PdePreprocessor;
import processing.mode.java.preproc.PreprocessorResult;
import processing.mode.java.preproc.SurfaceInfo;
@@ -281,27 +282,30 @@ public class JavaBuild {
//System.out.println(java.getAbsolutePath());
// System.out.println(bigCode);
- if (msg.contains("expecting RCURLY")) {
- //if (msg.equals("expecting RCURLY, found 'null'")) {
- // This can be a problem since the error is sometimes listed as a line
- // that's actually past the number of lines. For instance, it might
- // report "line 15" of a 14 line program. Added code to highlightLine()
- // inside Editor to deal with this situation (since that code is also
- // useful for other similar situations).
- throw new SketchException("Found one too many { characters " +
- "without a } to match it.",
- errorFile, errorLine, re.getColumn(), false);
- }
+ if (msg.contains("expecting RCURLY") || msg.contains("expecting LCURLY")) {
+ for (int i = 0; i < sketch.getCodeCount(); i++) {
+ SketchCode sc = sketch.getCode(i);
+ if (sc.isExtension("pde")) {
+ String s = sc.getProgram();
+ int[] braceTest = SourceUtils.checkForMissingBraces(
+ SourceUtils.scrubCommentsAndStrings(s) + "\n", 0, s.length()+1);
+ if (braceTest[0] == 0) continue;
- if (msg.contains("expecting LCURLY")) {
- System.err.println(msg);
- String suffix = ".";
- String[] m = PApplet.match(msg, "found ('.*')");
- if (m != null) {
- suffix = ", not " + m[1] + ".";
+ // Completely ignoring the errorFile/errorLine given since it's
+ // likely to be the wrong tab. For the same reason, I'm not showing
+ // the result of PApplet.match(msg, "found ('.*')") on missing
+ // LCURLY.
+ throw new SketchException(braceTest[0] > 0
+ ? "Found one too many { characters without a } to match it."
+ : "Found one too many } characters without a { to match it.",
+ i, braceTest[1], braceTest[2], false);
+ }
}
- throw new SketchException("Was expecting a { character" + suffix,
- errorFile, errorLine, re.getColumn(), false);
+ // If we're still here, there's the right brackets, just not in the
+ // right place. Passing on the original error.
+ throw new SketchException(
+ msg.replace("LCURLY", "{").replace("RCURLY", "}"),
+ errorFile, errorLine, re.getColumn(), false);
}
if (msg.indexOf("expecting RBRACK") != -1) {
diff --git a/java/src/processing/mode/java/pdex/SourceUtils.java b/java/src/processing/mode/java/pdex/SourceUtils.java
index 9e575af88..8e9968f99 100644
--- a/java/src/processing/mode/java/pdex/SourceUtils.java
+++ b/java/src/processing/mode/java/pdex/SourceUtils.java
@@ -333,43 +333,57 @@ public class SourceUtils {
static public List checkForMissingBraces(StringBuilder p, int[] tabStartOffsets) {
List problems = new ArrayList<>(0);
- tabLoop: for (int tabIndex = 0; tabIndex < tabStartOffsets.length; tabIndex++) {
+ for (int tabIndex = 0; tabIndex < tabStartOffsets.length; tabIndex++) {
int tabStartOffset = tabStartOffsets[tabIndex];
int tabEndOffset = (tabIndex < tabStartOffsets.length - 1) ?
tabStartOffsets[tabIndex + 1] : p.length();
- int depth = 0;
- int lineNumber = 0;
- for (int i = tabStartOffset; i < tabEndOffset; i++) {
- char ch = p.charAt(i);
- switch (ch) {
- case '{':
- depth++;
- break;
- case '}':
- depth--;
- break;
- case '\n':
- lineNumber++;
- break;
- }
- if (depth < 0) {
- JavaProblem problem =
- new JavaProblem("Found one too many } characters without { to match it.",
- JavaProblem.ERROR, tabIndex, lineNumber, 8);
- problem.setPDEOffsets(i - tabStartOffset, i - tabStartOffset + 1);
- problems.add(problem);
- continue tabLoop;
- }
- }
- if (depth > 0) {
+ int[] braceResult = checkForMissingBraces(p, tabStartOffset, tabEndOffset);
+ if (braceResult[0] != 0) {
JavaProblem problem =
- new JavaProblem("Found one too many { characters without } to match it.",
- JavaProblem.ERROR, tabIndex, lineNumber - 1, 8);
- problem.setPDEOffsets(tabEndOffset - tabStartOffset - 2, tabEndOffset - tabStartOffset - 1);
- problems.add(problem);
+ new JavaProblem(braceResult[0] < 0
+ ? "Found one too many } characters without { to match it."
+ : "Found one too many { characters without } to match it.",
+ JavaProblem.ERROR, tabIndex, braceResult[1], 8);
+ problem.setPDEOffsets(braceResult[3], braceResult[3] + 1);
+ problems.add(problem);
}
}
return problems;
}
+
+ /**
+ * Checks a single code fragment (such as a tab) for non-matching braces.
+ * Broken out to allow easy use in JavaBuild.
+ * @param c Program code scrubbed of comments and string literals.
+ * @param start Start index, inclusive.
+ * @param end End index, exclusive.
+ * @return {@code int[4]} Depth at which the loop stopped, followed by the
+ * line number, column, and string index (within the range) at which
+ * an error was found, if any.
+ */
+ static public int[] checkForMissingBraces(CharSequence c, int start, int end) {
+ int depth = 0;
+ int lineNumber = 0;
+ int lineStart = start;
+ for (int i = start; i < end; i++) {
+ char ch = c.charAt(i);
+ switch (ch) {
+ case '{':
+ depth++;
+ break;
+ case '}':
+ depth--;
+ break;
+ case '\n':
+ lineNumber++;
+ lineStart = i;
+ break;
+ }
+ if (depth < 0) {
+ return new int[] {depth, lineNumber, i - lineStart, i - start};
+ }
+ }
+ return new int[] {depth, lineNumber - 1, end - lineStart - 2, end - start - 2};
+ }
}
diff --git a/todo.txt b/todo.txt
index 7ea239fc7..027bf9a54 100755
--- a/todo.txt
+++ b/todo.txt
@@ -1,21 +1,24 @@
-0262 (3.3.5 or 3.4)
-X use native Linux file choosers by default
-X https://github.com/processing/processing/issues/5122
+0263 (3.3.6 or 3.4)
-_ Console window losing text
-_ https://github.com/processing/processing/issues/5110
-_ console.lines was set to 2?
-_ Linux 64-bit issues
-_ https://github.com/processing/processing/issues/5111
-_ display=-1 regression? ("could not parse" message)
-_ https://github.com/processing/processing/issues/5118
-
-_ detect errors from curved quotation marks
-_ https://github.com/processing/processing/issues/5133
+contrib
+X add Italian translation
+X https://github.com/processing/processing/pull/5169
contrib
_ console hiding button?
_ https://github.com/processing/processing/pull/5115
+_ make "loadXML(String)" handle "file not found"
+_ https://github.com/processing/processing/pull/5144
+_ detect errors from curved quotation marks
+_ https://github.com/processing/processing/issues/5133
+_ https://github.com/processing/processing/pull/5152
+
+
+_ make setting the window icon automatic, based on files in local dirs
+_ https://github.com/processing/processing/issues/5123
+_ need to make this work behind the scenes instead
+_ create icon.png or have an 'icons' folder with multiple sizes
+
_ sketch.properties not being written if initial mode is p5.js?
_ when creating a sketch within non-Java mode, should write the settings file