Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWade Brainerd <wadetb@gmail.com>2009-10-28 02:18:22 (GMT)
committer Wade Brainerd <wadetb@gmail.com>2009-10-28 02:18:22 (GMT)
commit5bce688733859ac8c3d3b0be9a79beb1f07d2ba2 (patch)
treeee29a31dd9ba162de010bd95e09a22fd950e8681
parentc2bfc92bb4e6364640856d2cffc55a33e93abe19 (diff)
Differentiate Key and Text steps. Key steps are presented one key a time, indicating which finger is used. Text steps are traditional text copying. Key steps can be created using the Lesson Editor.
Updated the English lessons to use Key steps. Added a little spacer between lines in Text steps. Translation updates.
-rw-r--r--editlessonlistscreen.py2
-rw-r--r--editlessonscreen.py17
-rwxr-xr-xlessonbuilder.py70
-rw-r--r--lessons/en_US.lessons2
-rw-r--r--lessonscreen.py165
-rw-r--r--locale/ne_NP/LC_MESSAGES/org.laptop.community.TypingTurtle.mobin7105 -> 0 bytes
-rw-r--r--locale/ne_NP/activity.linfo2
-rw-r--r--po/TypingTurtle.pot253
8 files changed, 331 insertions, 180 deletions
diff --git a/editlessonlistscreen.py b/editlessonlistscreen.py
index 7fa5a9f..af67020 100644
--- a/editlessonlistscreen.py
+++ b/editlessonlistscreen.py
@@ -183,7 +183,7 @@ class EditLessonListScreen(gtk.VBox):
lesson['name'] = ''
lesson['description'] = ''
lesson['type'] = 'normal'
- lesson['steps'] = [ { 'instructions':'', 'text':'' } ]
+ lesson['steps'] = [ { 'mode':'text', 'instructions':'', 'text':'' } ]
lesson['medals'] = [
{ 'name': 'bronze', 'wpm': 15, 'accuracy': 70, 'score': 3000 },
{ 'name': 'silver', 'wpm': 20, 'accuracy': 80, 'score': 4500 },
diff --git a/editlessonscreen.py b/editlessonscreen.py
index 879416e..642c83f 100644
--- a/editlessonscreen.py
+++ b/editlessonscreen.py
@@ -124,6 +124,17 @@ class EditLessonScreen(gtk.VBox):
steplabel.set_alignment(0.0, 0.5)
steplabel.set_padding(10, 0)
+ # Build the step type combo box.
+ stepbox.typecombo = gtk.combo_box_new_text()
+ stepbox.typecombo.append_text(_('Keys'))
+ stepbox.typecombo.append_text(_('Words'))
+
+ steptype = step.get('mode', 'text')
+ if steptype == 'key':
+ stepbox.typecombo.set_active(0)
+ elif steptype == 'text':
+ stepbox.typecombo.set_active(1)
+
# Build the tool buttons.
delstepbtn = gtk.Button()
delstepbtn.add(sugar.graphics.icon.Icon(icon_name='list-remove'))
@@ -145,6 +156,7 @@ class EditLessonScreen(gtk.VBox):
btnbox = gtk.HBox()
btnbox.pack_start(steplabel, False, False)
+ btnbox.pack_start(stepbox.typecombo, expand=False, padding=10)
btnbox.pack_end(addstepbtn, False, False)
btnbox.pack_end(delstepbtn, False, False)
btnbox.pack_end(moveupbtn, False, False)
@@ -445,6 +457,11 @@ class EditLessonScreen(gtk.VBox):
buf = sb.texttext.get_buffer()
step['text'] = buf.get_text(buf.get_start_iter(), buf.get_end_iter())
+ if sb.typecombo.get_active() == 0:
+ step['mode'] = 'key'
+ elif sb.typecombo.get_active() == 1:
+ step['mode'] = 'text'
+
steps.append(step)
self.lesson['steps'] = steps
diff --git a/lessonbuilder.py b/lessonbuilder.py
index 76dd3ae..7f85c1c 100755
--- a/lessonbuilder.py
+++ b/lessonbuilder.py
@@ -231,7 +231,7 @@ def make_random_words(words, required_keys, keys, count):
text += random.choice(words) + ' '
return text.strip()
-def make_step(instructions, mode, text):
+def make_step(instructions, mode, text, type='text'):
step = {}
step['instructions'] = instructions
step['text'] = text
@@ -326,40 +326,42 @@ def build_key_steps(
% { 'keynames': keynames },
'key', '\n'))
- for letter in new_keys:
- key, state, group = kb.get_key_state_group_for_letter(letter)
-
- if not key:
- error("There is no key combination in the current keymap for the '%s' letter. " % letter + \
- "Are you sure the keymap is set correctly?\n")
-
- try:
- finger = FINGERS[key['key-finger']]
- except:
- error("The '%s' letter (scan code %x) does not have a finger assigned." % (letter, key['key-scan']))
-
- if state == gtk.gdk.SHIFT_MASK:
- # Choose the finger to press the SHIFT key with.
- if key['key-finger'][0] == 'R':
- shift_finger = FINGERS['LP']
- else:
- shift_finger = FINGERS['RP']
-
- instructions = _('Press and hold the SHIFT key with your %(finger)s finger, ') % { 'finger': shift_finger }
- instructions += _('then press the %(letter)s key with your %(finger)s finger.') % { 'letter': letter, 'finger': finger }
-
- elif state == gtk.gdk.MOD5_MASK:
- instructions = _('Press and hold the ALTGR key, ')
- instructions += _('then press the %(letter)s key with your %(finger)s finger.') % { 'letter': letter, 'finger': finger }
-
- elif state == gtk.gdk.SHIFT_MASK | gtk.gdk.MOD5_MASK:
- instructions = _('Press and hold the ALTGR and SHIFT keys, ')
- instructions += _('then press the %(letter)s key with your %(finger)s finger.') % { 'letter': letter, 'finger': finger }
-
- else:
- instructions = _('Press the %(letter)s key with your %(finger)s finger.') % { 'letter': letter, 'finger': finger }
+# for letter in new_keys:
+# key, state, group = kb.get_key_state_group_for_letter(letter)
+#
+# if not key:
+# error("There is no key combination in the current keymap for the '%s' letter. " % letter + \
+# "Are you sure the keymap is set correctly?\n")
+#
+# try:
+# finger = FINGERS[key['key-finger']]
+# except:
+# error("The '%s' letter (scan code %x) does not have a finger assigned." % (letter, key['key-scan']))
+#
+# if state == gtk.gdk.SHIFT_MASK:
+# # Choose the finger to press the SHIFT key with.
+# if key['key-finger'][0] == 'R':
+# shift_finger = FINGERS['LP']
+# else:
+# shift_finger = FINGERS['RP']
+#
+# instructions = _('Press and hold the SHIFT key with your %(finger)s finger, ') % { 'finger': shift_finger }
+# instructions += _('then press the %(letter)s key with your %(finger)s finger.') % { 'letter': letter, 'finger': finger }
+#
+# elif state == gtk.gdk.MOD5_MASK:
+# instructions = _('Press and hold the ALTGR key, ')
+# instructions += _('then press the %(letter)s key with your %(finger)s finger.') % { 'letter': letter, 'finger': finger }
+#
+# elif state == gtk.gdk.SHIFT_MASK | gtk.gdk.MOD5_MASK:
+# instructions = _('Press and hold the ALTGR and SHIFT keys, ')
+# instructions += _('then press the %(letter)s key with your %(finger)s finger.') % { 'letter': letter, 'finger': finger }
+#
+# else:
+# instructions = _('Press the %(letter)s key with your %(finger)s finger.') % { 'letter': letter, 'finger': finger }
+#
+# steps.append(make_step(instructions, 'key', letter))
- steps.append(make_step(instructions, 'key', letter))
+ steps.append(make_step(_("Let\'s learn the new keys."), 'key', ''.join(new_keys) * 4))
steps.append(make_step(
get_congrats() + _('Practice typing the keys you just learned.'),
diff --git a/lessons/en_US.lessons b/lessons/en_US.lessons
index cfd3a49..ff71555 100644
--- a/lessons/en_US.lessons
+++ b/lessons/en_US.lessons
@@ -1 +1 @@
-{"lessons": [{"name": "Welcome", "steps": [{"text": " ", "instructions": "Hihowahyah! Ready to learn the secret of fast typing?\nThe secret is: Always use the correct finger to press each key!\n\nTo begin learning, place your hands on the keyboard just like the picture below.\nWhen you're ready, press the SPACE bar with your thumb!"}, {"text": " ", "instructions": "Good job! The SPACE bar makes a space between words.\n\nPress the SPACE bar again with your thumb."}, {"text": "\n", "instructions": "Now I'll teach you the second key, ENTER. That's the big square key near your right little finger.\n\nReach your right little finger over and press ENTER."}, {"text": "\n", "instructions": "Great! When typing, the ENTER key makes a new line.\n\nPress the ENTER key again with your right little finger."}], "type": "normal", "order": 0, "medals": [{"wpm": 0, "score": 3000, "name": "bronze", "accuracy": 25}, {"wpm": 0, "score": 4500, "name": "silver", "accuracy": 50}, {"wpm": 0, "score": 6000, "name": "gold", "accuracy": 100}], "description": "Click Start Lesson to begin your typing adventure."}, {"name": "The Home Row", "steps": [{"text": "\n", "instructions": "In this lesson, you will learn the a, s, d, f, g, h, j, k and l keys.\n\nPress the ENTER key when you are ready to begin!"}, {"text": "a", "instructions": "Press the a key with your left little finger."}, {"text": "s", "instructions": "Press the s key with your left ring finger."}, {"text": "d", "instructions": "Press the d key with your left middle finger."}, {"text": "f", "instructions": "Press the f key with your left index finger."}, {"text": "g", "instructions": "Press the g key with your left index finger."}, {"text": "h", "instructions": "Press the h key with your right index finger."}, {"text": "j", "instructions": "Press the j key with your right index finger."}, {"text": "k", "instructions": "Press the k key with your right middle finger."}, {"text": "l", "instructions": "Press the l key with your right ring finger."}, {"text": "ss kk jj dd kk kk ll ll jj aa hh ff ss ll hh aa ff dd ss aa gg gg ll hh dd ff ff ss aa aa gg ss jj kk gg ff kk dd aa ss ll hh gg jj ff jj aa jj jj hh gg dd ff ff ll dd gg gg ll gg", "instructions": "You did it! Practice typing the keys you just learned."}, {"text": "lf ja da sk gl lf ha sk ad sk ls ld ss fa hh as ad af la ld sk sk ad fl af ls ag fl ka ga fa da ll sl dd ff aj hl lg lg ga al sa ga gl ak ll sa la gl ah af ja sl aj lf ll af dd ah", "instructions": "Nice work. Now put the keys together into pairs."}, {"text": "had sad gash fa la hah shad halala gaff hag falls gal sash aha ask shad falls gaga glad hag fad had skald sad gag gash halal ah glass alfalfa shh algal slag shag glass shh flask lag gas shall dash has shh flak ah gas shh flak lag ala la sad flash falls slag la slag shall shah salsa", "instructions": "Nice work. Time to type real words."}], "type": "normal", "order": 1, "medals": [{"wpm": 15, "score": 3000, "name": "bronze", "accuracy": 70}, {"wpm": 20, "score": 4500, "name": "silver", "accuracy": 80}, {"wpm": 25, "score": 6000, "name": "gold", "accuracy": 90}], "description": "This lesson teaches you the a, s, d, f, g, h, j, k and l keys \nin the middle of the keyboard.\nThese keys are called the Home Row."}, {"description": "Practice the home row keys in this exciting game!\nDon't let any balloons get by!", "length": 60, "words": ["alga", "shall", "skald", "slag", "saga", "ah", "shh", "ad", "hash", "fall", "gad", "ala", "jag", "salsa", "ha", "falls", "dash", "flag", "half", "ask", "lash", "halala", "fa", "flak", "gag", "all", "ash", "alfalfa", "sh", "dada", "sash", "shad", "hajj", "haj", "halal", "shag", "lag", "gash", "slash", "gal", "algal", "glass", "gall", "has", "hah", "sag", "sass", "gala", "hall", "sal", "as", "flash", "hag", "dad", "flask", "gaff", "had", "shah", "dahl", "add", "ssh", "la", "lass", "gas", "ska", "gaga", "salad", "fad", "glad", "alas", "sad", "aha", "lad"], "type": "balloon", "order": 2, "medals": [{"wpm": 15, "score": 3000, "name": "bronze", "accuracy": 70}, {"wpm": 20, "score": 4500, "name": "silver", "accuracy": 80}, {"wpm": 25, "score": 6000, "name": "gold", "accuracy": 90}], "name": "Home Row Balloons"}, {"name": "The Top Row", "steps": [{"text": "\n", "instructions": "In this lesson, you will learn the q, w, e, r, t, y, u, i, o and p keys.\n\nPress the ENTER key when you are ready to begin!"}, {"text": "q", "instructions": "Press the q key with your left little finger."}, {"text": "w", "instructions": "Press the w key with your left ring finger."}, {"text": "e", "instructions": "Press the e key with your left middle finger."}, {"text": "r", "instructions": "Press the r key with your left index finger."}, {"text": "t", "instructions": "Press the t key with your left index finger."}, {"text": "y", "instructions": "Press the y key with your right index finger."}, {"text": "u", "instructions": "Press the u key with your right index finger."}, {"text": "i", "instructions": "Press the i key with your right middle finger."}, {"text": "o", "instructions": "Press the o key with your right ring finger."}, {"text": "p", "instructions": "Press the p key with your right little finger."}, {"text": "ee oo ii ee oo oo pp oo ii qq uu rr ww pp yy qq rr ee ww qq tt tt pp yy rr rr tt ww qq ww yy ww uu oo yy tt oo rr qq ww pp uu tt ii tt ii ww ii ii uu tt ee tt tt pp ee tt tt pp tt", "instructions": "You did it! Practice typing the keys you just learned."}, {"text": "uo se iq yf ku uq op yg aq yh to ua wp ju qe fw ae ej ri ua yg yk ar lr eq tp ee oe pw ke ji ik uy yo iw ok gi ph ud ud hi fu tu hu kr dp ta wd rl ke eu eo si yr gu uq uw ei ir ew", "instructions": "Nice work. Now pair the keys together with the letters you already know."}, {"text": "stereo shears lawyer effort toga hoary shyer lift otiosely wisely towel appetite purr patella quietly roguery waft paralyse outage fleet grate hopeless jiff tuff toe starry stet regulate starfish starless seller salted drake patty thresher wort rewrote topple polite egotist outwit pipe palish spotless wailful regalia giggler pear flaky paddler stet harpy adore drowsy", "instructions": "Nice work. Time to type real words using all your letters!"}], "type": "normal", "order": 3, "medals": [{"wpm": 15, "score": 3000, "name": "bronze", "accuracy": 70}, {"wpm": 20, "score": 4500, "name": "silver", "accuracy": 80}, {"wpm": 25, "score": 6000, "name": "gold", "accuracy": 90}], "description": "This lesson teaches you the q, w, e, r, t, y, u, i, o and p keys \non the top row of the keyboard."}, {"description": "Time to practice the home row and top row keys together.\nTry to pop all the balloons!", "length": 60, "words": ["hurl", "fortieth", "rush", "regatta", "flushed", "tragedy", "salaried", "goggle", "papoose", "wraith", "sprawl", "dug", "litre", "polyp", "toehold", "whish", "fit", "faddist", "reorder", "sateless", "thready", "populist", "lagger", "furrow", "flatware", "wildly", "graffiti", "reflow", "fell", "pulpit", "though", "welder", "platelet", "health", "pouter", "fatuity", "auditor", "surly", "deftly", "holiday", "rehire", "apathy", "tattered", "steeped", "prairie", "wild", "deflated", "foyer", "thru", "spy", "swart", "story", "dahlia", "flog", "odiously", "preterit", "purity", "defy", "warily", "ileal", "fridge", "pad", "laity", "dallier", "soiled", "total", "wellhead", "pesewa", "hail", "fright", "ashes", "twirly", "twittery", "quarter", "leprosy", "despair", "resale", "tawdrily", "pother", "flasher", "digress", "rigor", "rootlet", "aloft", "geyser", "soft", "flooded", "tolerate", "deplete", "haul", "wake", "reggae", "flakily", "worship", "soggily", "sweetly", "droop", "floppily", "pedestal", "irate", "foresee", "threader", "repute", "flowery", "guiltily", "parasol", "tow", "fire", "gulf", "data", "heiress", "wooled", "lilt", "japery", "thwart", "fugally", "wisp", "shipper", "par", "right", "raster", "leaded", "rug", "rufous", "pleased", "fetidly", "grouser", "thyroid", "flora", "equalise", "flier", "purdah", "arguer", "askew", "lessee", "fried", "prose", "duper", "rewire", "spoils", "futilely", "yodeller", "gyrate", "hist", "sweep", "striated", "gagger", "littoral", "dowse", "lustrate", "yurt", "hothead", "show", "arrester", "dowdy", "desire", "statute", "profit", "fail", "keelhaul", "allege", "upstate", "reaper", "its", "eureka", "wight", "dire", "to", "grouter", "toil", "softie", "sailor", "outsold", "weakfish", "pupil", "yapper", "hug", "prod", "torero", "hightail", "hogshead", "trek", "reap", "stoker", "idealist", "sepal", "traitor", "fretted", "still", "feaster", "lour", "fig", "floppy", "dystopia", "afield", "postdate", "portly", "drily"], "type": "balloon", "order": 4, "medals": [{"wpm": 15, "score": 3000, "name": "bronze", "accuracy": 70}, {"wpm": 20, "score": 4500, "name": "silver", "accuracy": 80}, {"wpm": 25, "score": 6000, "name": "gold", "accuracy": 90}], "name": "Top Row Balloons"}, {"name": "The Bottom Row", "steps": [{"text": "\n", "instructions": "In this lesson, you will learn the z, x, c, v, b, n and m keys.\n\nPress the ENTER key when you are ready to begin!"}, {"text": "z", "instructions": "Press the z key with your left little finger."}, {"text": "x", "instructions": "Press the x key with your left ring finger."}, {"text": "c", "instructions": "Press the c key with your left middle finger."}, {"text": "v", "instructions": "Press the v key with your left index finger."}, {"text": "b", "instructions": "Press the b key with your left index finger."}, {"text": "n", "instructions": "Press the n key with your right index finger."}, {"text": "m", "instructions": "Press the m key with your right index finger."}, {"text": "xx nn nn cc nn mm mm mm nn zz bb cc xx mm vv zz cc xx xx zz vv vv mm vv cc cc cc xx zz zz vv xx bb nn vv cc mm cc zz zz mm bb vv nn cc bb zz nn nn bb vv xx vv vv mm cc vv vv mm vv", "instructions": "You did it! Practice typing the keys you just learned."}, {"text": "tn nn gb zi km tn lb zd an zl vy rz xo md ob em ac cq pm rz zd zl ax mj cr vy ci mq nl hb mc dn wn zp fb mw bo ne ub ub ib ec ym ix kb bf wn xc sm hm cz cr nq zw bs tn wm cm gz bc", "instructions": "Nice work. Now practice the keys together with the top and middle rows."}, {"text": "enroll joiner clamper bespeak midwife dactyl backhoe bland yclept moniker briny archness affirmer inshore albacore evitable mandate correct imaging swanky uncap bobwhite resound mutually vexed honoured bullhead slangy quantity lysin farming atone gardener tween reverie numerate passably buyer peony maturely bat homogeny mitosis measly unfroze unground vas cliched chalky plainly bris archival skim bicuspid coolant fleece outrun nuzzle serve carcass", "instructions": "Nice work. Now you know all the letters on the keyboard! Time to practice them all."}], "type": "normal", "order": 5, "medals": [{"wpm": 15, "score": 3000, "name": "bronze", "accuracy": 70}, {"wpm": 20, "score": 4500, "name": "silver", "accuracy": 80}, {"wpm": 25, "score": 6000, "name": "gold", "accuracy": 90}], "description": "This lesson teaches you the z, x, c, v, b, n and m keys \non the bottom row of the keyboard."}, {"description": "Now you know the whole alphabet, so let's practice!\nThese are big words, so get ready.", "length": 60, "words": ["needy", "bluff", "funky", "whereby", "meerkat", "biplane", "buggy", "crate", "detach", "baldric", "jussive", "itch", "opulent", "briefing", "kronor", "silkworm", "collect", "nay", "latrine", "unpriced", "nelson", "lens", "gaminess", "perfect", "assuming", "bunter", "convict", "angora", "against", "chicle", "volume", "bailee", "smooch", "stent", "oblatory", "compete", "overcool", "viva", "delimit", "alone", "precinct", "tibia", "narcotic", "lumpily", "dialect", "aviator", "bruising", "finalize", "silently", "dumfound", "cassava", "consumer", "backslap", "joinery", "oogonium", "ungodly", "unisex", "finished", "anthill", "tenably", "synopsis", "centime", "convert", "wetback", "vernal", "mandarin", "syringe", "exodus", "carhop", "circuit", "aardvark", "zither", "daimon", "saintly", "seizable", "founded", "schmeer", "behalf", "advert", "snapshot", "nous", "saponify", "permeate", "pronator", "bedouin", "rocks", "rebind", "maths", "behemoth", "peroxide", "penalty", "delver", "timbre", "marka", "depictor", "gem", "fern", "flavor", "organza", "bungler", "beneath", "systemic", "bravura", "taxying", "sedum", "tomogram", "borrow", "limpness", "ampoule", "execute", "demean", "mower", "cobra", "blading", "portably", "chicness", "diminish", "refocus", "reserve", "befell", "morphia", "entire", "caroller", "product", "unabated", "boogie", "boatel", "undated", "winded", "injurer", "autism", "moneybag", "minutia", "cion", "padlock", "milt", "nights", "unseen", "hardball", "tricorne", "bulge", "blossom", "gauzy", "basicity", "maze", "unblest", "mob", "coho", "survey", "salon", "oceanic", "flatcar", "choleric", "druidic", "pixy", "caulking", "pushcart", "wand", "uncoil", "fling", "remover", "kine", "liana", "bigoted", "satanic", "fasten", "mandala", "monition", "cable", "maraca", "card", "tenpins", "preteen", "coma", "bedevil", "raglan", "impostor", "border", "trusting", "humane", "dankness", "melodic", "burn", "marbled", "notation", "groove", "thwack", "curacy", "monodic", "sunfish", "flagon", "mansard", "tinter", "crystal", "battler", "pocked", "convent", "evilly", "iodine"], "type": "balloon", "order": 6, "medals": [{"wpm": 15, "score": 3000, "name": "bronze", "accuracy": 70}, {"wpm": 20, "score": 4500, "name": "silver", "accuracy": 80}, {"wpm": 25, "score": 6000, "name": "gold", "accuracy": 90}], "name": "Alphabet Balloons"}, {"name": "Left Hand Capitals", "steps": [{"text": "\n", "instructions": "To make a CAPITAL letter, press the letter key while holding down the SHIFT\nkey with the little finger of your other hand.\n\nIn this lesson, you will learn the Q, W, E, R, T, A, S, D, F, G, Z, X, C, V and B keys.\n\nPress the ENTER key when you are ready to begin!"}, {"text": "Q", "instructions": "We'll start with the top row.\n\nPress and hold the SHIFT key with your right little finger, then press the Q key with your left little finger. \n\nLook at the hands below screen if you need help. "}, {"text": "W", "instructions": "Press and hold the SHIFT key with your right little finger, then press the W key with your left ring finger.\n\nRemember: The secret to fast typing is to always use the correct finger!"}, {"text": "E", "instructions": "Press and hold the SHIFT key with your right little finger, then press the E key with your left middle finger."}, {"text": "R", "instructions": "Press and hold the SHIFT key with your right little finger, then press the R key with your left index finger."}, {"text": "T", "instructions": "Press and hold the SHIFT key with your right little finger, then press the T key with your left index finger."}, {"text": "A", "instructions": "Time for the middle row.\n\nPress and hold the SHIFT key with your right little finger, then press the A key with your left little finger."}, {"text": "S", "instructions": "Press and hold the SHIFT key with your right little finger, then press the S key with your left ring finger."}, {"text": "D", "instructions": "Press and hold the SHIFT key with your right little finger, then press the D key with your left middle finger."}, {"text": "F", "instructions": "Press and hold the SHIFT key with your right little finger, then press the F key with your left index finger."}, {"text": "G", "instructions": "Press and hold the SHIFT key with your right little finger, then press the G key with your left index finger."}, {"text": "Z", "instructions": "Now let's do the bottom row.\n\nPress and hold the SHIFT key with your right little finger, then press the Z key with your left little finger."}, {"text": "X", "instructions": "Press and hold the SHIFT key with your right little finger, then press the X key with your left ring finger."}, {"text": "C", "instructions": "Press and hold the SHIFT key with your right little finger, then press the C key with your left middle finger."}, {"text": "V", "instructions": "Press and hold the SHIFT key with your right little finger, then press the V key with your left index finger."}, {"text": "B", "instructions": "Press and hold the SHIFT key with your right little finger, then press the B key with your left index finger."}, {"text": "RR CC XX TT CC VV BB VV XX WW GG AA EE VV FF QQ AA TT EE QQ DD DD VV FF TT AA SS EE WW WW DD EE ZZ CC FF SS CC TT QQ WW VV GG DD XX SS ZZ WW XX XX GG DD RR SS SS VV TT DD DD BB DD", "instructions": "Whew! You did it! Let's get some practice with all those keys.\n\nRemember to look at the hands below if you need a hint!"}, {"text": "TD Sa Br Ze Er TD Gd Za AR Zi TS Ro Vo Ez Gu CR AC Ak Su Ro Za Zh AW Di Am Wa Ae Dn ST En Ey Bh Ts Zs Ec Dy Ce Fo RT RT Eg Cy We Em Es Av Ts Wy Sv En Aq Am Sa Zw Ch TD To Af By Ap", "instructions": "Nice work. Time to mix CAPITALS with regular letters. \n\nBe careful, this part is tricky!"}, {"text": "Dniester Alpine Antalya Tartary Alvin Gordimer Trollope Triad Sphinx Spencer Brady Dalmatia Zeus Qiqihar Quintin Actium Gilman Craiova Blanch Dirk Titicaca Silvia Ruskin Andy Burgundy Cetus Egyptian Deneb Zola Ennius Cos Romblon Ronny Thaddeus Rupert Beryl Cobb Fatima Colbert Rome Bagdad Calvert Cummings Freyja Choctaw Eichmann Simon Bulgar Chauncey Bourbon Roland Tuesday Rumania Sextans Ella Wycliffe Ronny Born Docetist Guianan", "instructions": "Great job. It's time to practice typing real words."}], "type": "normal", "order": 7, "medals": [{"wpm": 10, "score": 3000, "name": "bronze", "accuracy": 70}, {"wpm": 15, "score": 4500, "name": "silver", "accuracy": 80}, {"wpm": 20, "score": 6000, "name": "gold", "accuracy": 90}], "description": "Now that you know the whole alphabet, it's time to get started with \nCAPITAL letters. \n\nThis lesson teaches you the CAPITAL letters which are typed \nby your left hand: Q, W, E, R, T, A, S, D, F, G, Z, X, C, V and B."}, {"name": "Right Hand Capitals", "steps": [{"text": "\n", "instructions": "In this lesson, you will learn the Y, U, I, O, P, H, J, K, L, N and M keys.\n\nRemember to look at the on-screen keyboard below when you need a hint. \n\nPress the ENTER key when you are ready to begin!"}, {"text": "Y", "instructions": "Starting with the top row.\n\nPress and hold the SHIFT key with your left little finger, then press the Y key with your right index finger."}, {"text": "U", "instructions": "Press and hold the SHIFT key with your left little finger, then press the U key with your right index finger."}, {"text": "I", "instructions": "Press and hold the SHIFT key with your left little finger, then press the I key with your right middle finger."}, {"text": "O", "instructions": "Press and hold the SHIFT key with your left little finger, then press the O key with your right ring finger."}, {"text": "P", "instructions": "Press and hold the SHIFT key with your left little finger, then press the P key with your right little finger."}, {"text": "H", "instructions": "Now, adding the middle row.\n\nPress and hold the SHIFT key with your left little finger, then press the H key with your right index finger."}, {"text": "J", "instructions": "Press and hold the SHIFT key with your left little finger, then press the J key with your right index finger."}, {"text": "K", "instructions": "Press and hold the SHIFT key with your left little finger, then press the K key with your right middle finger."}, {"text": "L", "instructions": "Press and hold the SHIFT key with your left little finger, then press the L key with your right ring finger."}, {"text": "N", "instructions": "And last, the bottom row.\n\nPress and hold the SHIFT key with your left little finger, then press the N key with your right index finger."}, {"text": "M", "instructions": "Press and hold the SHIFT key with your left little finger, then press the M key with your right index finger."}, {"text": "II NN LL OO NN NN MM NN LL YY JJ OO UU MM JJ YY PP OO II YY HH HH NN JJ OO PP PP UU YY UU HH UU KK NN JJ PP NN OO YY UU NN JJ HH LL PP KK UU LL LL JJ HH II PP PP MM OO HH HH MM HH", "instructions": "You did it! Practice typing the CAPITAL letters you just learned."}, {"text": "Pe Og HM Yi JA Pi Lh Ye AL Yo Ub PC TO MO LT Is AI DO Oz PC Ye Yo CO MC GI UD EM MT Oe Ku Js HD Pu Yu HU LA IW OL PD PD KG Iq UI Ko Ky II Pt Up Ne Ku FM GI Oi cJ Ib Pi Pr DI HT IA", "instructions": "Nice work. Now put the right hand CAPITALS together into pairs with the other keys you know."}, {"text": "MC Paula Pilipino Orlando Niles Manchu Johanna Juneau Harry Nagoya Uppsala Numidia Peking Jeanie Median Manet Plymouth Kosice Lydian Justine Kilauea Hurston Pilate Lister Lear Mohammed Merle Kiel Marlyn Heather Lett Lapp Planck Harold Mongolic Nauru Pavlov Jackie Klondike Patna Maranon Milne Nauru Laplace Parmesan Oder Papuan Kola Melville Oriental Lipetsk Iqaluit Kamet Herbert Magus Mongolia Planck Patna Lofoten Mizar", "instructions": "It's time to type real words. Congratulations, now you know all the letters on the keyboard!\n\nLet's get some practice."}], "type": "normal", "order": 9, "medals": [{"wpm": 10, "score": 3000, "name": "bronze", "accuracy": 70}, {"wpm": 15, "score": 4500, "name": "silver", "accuracy": 80}, {"wpm": 20, "score": 6000, "name": "gold", "accuracy": 90}], "description": "This lesson adds the CAPITAL letters that are typed with the\nright hand: Y, U, I, O, P, H, J, K, L, N, and M."}, {"description": "Time to practice your CAPITAL letters by popping some balloons!\n\nThis time, try to type as quickly and steadily as you can.", "length": 60, "words": ["Heller", "Nemesis", "Hadrian", "Haiphong", "Nixon", "Lewisham", "Lorene", "Mohegan", "Latvian", "Muzak", "Hamhung", "Napoleon", "Jonathan", "Malory", "Ludhiana", "Malacca", "AWOL", "Humphrey", "Napier", "Leipzig", "Patrick", "Kitty", "Peale", "Jamie", "Malta", "Mitty", "Mexican", "Karen", "Lamb", "Host", "Pegasus", "IOU", "Punjabi", "Kibo", "Islam", "GI", "Poole", "Preston", "Madam", "Yukon", "Pueblo", "Luke", "Nilgiri", "Pepin", "Mendel", "Perkins", "PBX", "Logan", "Lyons", "Jeremy", "Mahatma", "Marietta", "Obadiah", "Perry", "Mohammed", "Nanette", "Kamet", "Procyon", "Proteus", "Judaea", "Ionian", "Plovdiv", "Main", "Pius", "Istrian", "Kim", "Picasso", "Hydra", "Peel", "Yorktown", "Potomac", "Pliny", "STOL", "Keller", "Patti", "Yangon", "Palomar", "Junior", "Mervin", "Harare", "Yokosuka", "Mason", "No", "Pisan", "Manama", "Mahican", "Melinda", "Iasi", "Minorcan", "Jersey", "Langley", "Latakia", "Oakland", "Peruvian", "Masai", "Powys", "Owen", "Jonson", "Makarios", "Lela", "Milicent", "Moselle", "Mariana", "Marcia", "Mulroney", "Permian", "Perceval", "Jacuzzi", "Hiram", "Lon", "Omagh", "Ibo", "Julia", "Mali", "Nabatea", "Menotti", "Hopkins", "Pattie", "FM", "Leonard", "GIGO", "Patmos", "Marconi", "Japanese", "Laverne", "Nikolaev", "Peshawar", "Umbrian", "Nobelist", "Haydn", "Ligurian", "Ocean", "Hogarth", "Linnaeus", "Megrez", "Mabel", "Piura", "Limavady", "Newark", "McLuhan", "Kirin", "IV", "Orpheus", "ATP", "Nannette", "June", "Hanuka", "Lily", "Lucian", "Iacocca", "Hasidic", "Lionel", "Nashua", "Odin", "Moldova", "Midas", "Heep", "Lorenzo", "Leona", "Po", "Lublin", "Metairie", "Yoruba", "Parian", "Ithaki", "Om", "Kabbalah", "Kirby", "Oneida", "Huron", "Iqaluit", "Pepysian", "Phidias", "Moore", "HUD", "Pope", "Hathaway", "Kweiyang", "Hodgkin", "Maya", "Honduras", "Mercury", "Ivorian", "Nagasaki", "Jessie", "Jute", "Lane", "Hasidim", "Langland", "Union", "Kaiserin", "Leighton", "SLR"], "type": "balloon", "order": 10, "medals": [{"wpm": 15, "score": 3000, "name": "bronze", "accuracy": 70}, {"wpm": 20, "score": 4500, "name": "silver", "accuracy": 80}, {"wpm": 25, "score": 6000, "name": "gold", "accuracy": 90}], "name": "Capital Balloons"}]} \ No newline at end of file
+{"lessons": [{"name": "Welcome", "options": {"mistakes": true, "backspace": true}, "steps": [{"text": " ", "mode": "key", "instructions": "Hihowahyah! Ready to learn the secret of fast typing?\nThe secret is: Always use the correct finger to press each key!\n\nTo begin learning, place your hands on the keyboard just like the picture below."}, {"text": " ", "mode": "key", "instructions": "Good job! The space key makes a space between words."}, {"text": "\n", "mode": "key", "instructions": "Now I'll teach you the second key, enter. That's the big key near your right little finger."}, {"text": "\n", "mode": "key", "instructions": "Great! When typing, the enter key makes a new line."}], "type": "normal", "order": 0, "medals": [{"wpm": 0, "score": 3000, "name": "bronze", "accuracy": 25}, {"wpm": 0, "score": 4500, "name": "silver", "accuracy": 50}, {"wpm": 0, "score": 6000, "name": "gold", "accuracy": 100}], "description": "Click Start Lesson to begin your typing adventure."}, {"description": "This lesson teaches you the a, s, d, f, g, h, j, k and l keys \nin the middle of the keyboard.\nThese keys are called the Home Row.", "options": {"mistakes": true, "backspace": true}, "steps": [{"text": "\n", "mode": "key", "instructions": "In this lesson, you will learn the a, s, d, f, g, h, j, k and l keys."}, {"text": "asdfghjklasdfghjklasdfghjklasdfghjkl", "mode": "key", "instructions": "Let's learn the new keys."}, {"text": "ll hh hh jj kk ff ll ss kk jj dd hh dd dd dd ll gg hh aa ss kk hh ll ll ss hh jj ss jj dd ff ll kk ss ss ss ll gg ss gg kk ff ss gg ll dd gg kk kk jj kk jj ss kk ll aa ss jj aa dd", "mode": "text", "instructions": "Way to go! Practice typing the keys you just learned."}, {"text": "ag lg da fa fa ag lf sa sh sf sh ga ff ll da kg fl lf ak kl fa sh kg jj la ak ag af ff kl sk ha dj ll la hs sa ad sl ha fl ff aj sf ha lf sl sh al gl dd fa ll hh dd sl af aa ka ha", "mode": "text", "instructions": "Well done! Now put the keys together into pairs."}, {"text": "aah shahs lash shah saga flash shad dad flak alfalfa lg la lag shahs ask aka shh shag ha lad glad faff flash aah flask half ska aah fa gas saga shag half dash sass ad fa gad jag flag gall fa ssh hag sf aka ska fad ass hag ask gaga add gash la slag shall gala alga flag", "mode": "text", "instructions": "Wonderful! Time to type real words."}], "type": "normal", "order": 1, "medals": [{"wpm": 15, "score": 3000, "name": "bronze", "accuracy": 70}, {"wpm": 20, "score": 4500, "name": "silver", "accuracy": 80}, {"wpm": 25, "score": 6000, "name": "gold", "accuracy": 90}], "name": "The Home Row"}, {"description": "Practice the home row keys in this exciting game!\nDon't let any balloons get by!", "length": 60, "words": ["alga", "shall", "skald", "slag", "saga", "ah", "shh", "ad", "hash", "fall", "gad", "ala", "jag", "salsa", "ha", "falls", "dash", "flag", "half", "ask", "lash", "halala", "fa", "flak", "gag", "all", "ash", "alfalfa", "sh", "dada", "sash", "shad", "hajj", "haj", "halal", "shag", "lag", "gash", "slash", "gal", "algal", "glass", "gall", "has", "hah", "sag", "sass", "gala", "hall", "sal", "as", "flash", "hag", "dad", "flask", "gaff", "had", "shah", "dahl", "add", "ssh", "la", "lass", "gas", "ska", "gaga", "salad", "fad", "glad", "alas", "sad", "aha", "lad"], "type": "balloon", "order": 2, "medals": [{"wpm": 15, "score": 3000, "name": "bronze", "accuracy": 70}, {"wpm": 20, "score": 4500, "name": "silver", "accuracy": 80}, {"wpm": 25, "score": 6000, "name": "gold", "accuracy": 90}], "name": "Home Row Balloons"}, {"name": "The Top Row", "options": {"mistakes": true, "backspace": true}, "steps": [{"text": "\n", "mode": "key", "instructions": "In this lesson, you will learn the q, w, e, r, t, y, u, i, o and p keys."}, {"text": "qwertyuiopqwertyuiopqwertyuiopqwertyuiop", "mode": "key", "instructions": "Let's learn the new keys."}, {"text": "ee oo ii uu yy tt ii oo qq oo rr pp yy yy oo yy yy ee yy ii rr qq qq ww oo yy ee ii pp tt rr tt tt uu ii rr tt ii qq ww uu ee uu oo ee ee ii uu ee pp ee rr pp rr oo tt ii pp ii uu", "mode": "text", "instructions": "Wonderful! Practice typing the keys you just learned."}, {"text": "uy tu kr eu dp fe ej li of it tg yh ud yg aw uf ai yt wd ie yd us of fo ow rj tt rq ri ee yr ar kr eh qt yh tr os yr yk sy iu uh gu yo fw ut au so is ys wr if to es gp iq pe rl sr", "mode": "text", "instructions": "Good job. Now put the keys together into pairs."}, {"text": "dogeared paddler hut degrade ski turd fragile warlike poultry tiptop episode healthy slue risotto tide tug speedway kooky state thesis repeater stealth drift tip list pitiless trapper test for flesh spirea assay leftward hesitate attest lightly tip faille haggard shot garfish flutist wraiths steal life prop sheet fatal quarto ululate ruthless studly draper tepid holder gristle who weekly gyrate stay", "mode": "key", "instructions": "Way to go! Time to type real words."}], "type": "normal", "order": 3, "medals": [{"wpm": 15, "score": 3000, "name": "bronze", "accuracy": 70}, {"wpm": 20, "score": 4500, "name": "silver", "accuracy": 80}, {"wpm": 25, "score": 6000, "name": "gold", "accuracy": 90}], "description": "This lesson teaches you the q, w, e, r, t, y, u, i, o and p keys \non the top row of the keyboard."}, {"description": "Time to practice the home row and top row keys together.\nTry to pop all the balloons!", "length": 60, "words": ["hurl", "fortieth", "rush", "regatta", "flushed", "tragedy", "salaried", "goggle", "papoose", "wraith", "sprawl", "dug", "litre", "polyp", "toehold", "whish", "fit", "faddist", "reorder", "sateless", "thready", "populist", "lagger", "furrow", "flatware", "wildly", "graffiti", "reflow", "fell", "pulpit", "though", "welder", "platelet", "health", "pouter", "fatuity", "auditor", "surly", "deftly", "holiday", "rehire", "apathy", "tattered", "steeped", "prairie", "wild", "deflated", "foyer", "thru", "spy", "swart", "story", "dahlia", "flog", "odiously", "preterit", "purity", "defy", "warily", "ileal", "fridge", "pad", "laity", "dallier", "soiled", "total", "wellhead", "pesewa", "hail", "fright", "ashes", "twirly", "twittery", "quarter", "leprosy", "despair", "resale", "tawdrily", "pother", "flasher", "digress", "rigor", "rootlet", "aloft", "geyser", "soft", "flooded", "tolerate", "deplete", "haul", "wake", "reggae", "flakily", "worship", "soggily", "sweetly", "droop", "floppily", "pedestal", "irate", "foresee", "threader", "repute", "flowery", "guiltily", "parasol", "tow", "fire", "gulf", "data", "heiress", "wooled", "lilt", "japery", "thwart", "fugally", "wisp", "shipper", "par", "right", "raster", "leaded", "rug", "rufous", "pleased", "fetidly", "grouser", "thyroid", "flora", "equalise", "flier", "purdah", "arguer", "askew", "lessee", "fried", "prose", "duper", "rewire", "spoils", "futilely", "yodeller", "gyrate", "hist", "sweep", "striated", "gagger", "littoral", "dowse", "lustrate", "yurt", "hothead", "show", "arrester", "dowdy", "desire", "statute", "profit", "fail", "keelhaul", "allege", "upstate", "reaper", "its", "eureka", "wight", "dire", "to", "grouter", "toil", "softie", "sailor", "outsold", "weakfish", "pupil", "yapper", "hug", "prod", "torero", "hightail", "hogshead", "trek", "reap", "stoker", "idealist", "sepal", "traitor", "fretted", "still", "feaster", "lour", "fig", "floppy", "dystopia", "afield", "postdate", "portly", "drily"], "type": "balloon", "order": 4, "medals": [{"wpm": 15, "score": 3000, "name": "bronze", "accuracy": 70}, {"wpm": 20, "score": 4500, "name": "silver", "accuracy": 80}, {"wpm": 25, "score": 6000, "name": "gold", "accuracy": 90}], "name": "Top Row Balloons"}, {"name": "The Bottom Row", "options": {"mistakes": true, "backspace": true}, "steps": [{"text": "\n", "mode": "key", "instructions": "In this lesson, you will learn the z, x, c, v, b, n and m keys."}, {"text": "zxcvbnmzxcvbnmzxcvbnmzxcvbnm", "mode": "key", "instructions": "Let's learn the new keys."}, {"text": "xx bb xx cc zz cc zz xx bb vv nn cc vv xx xx cc mm zz zz nn nn mm bb zz bb vv cc bb vv xx cc xx cc mm vv mm zz mm xx nn bb vv mm mm nn zz vv vv bb zz zz nn bb mm cc vv nn cc bb xx", "mode": "text", "instructions": "You did it! Practice typing the keys you just learned."}, {"text": "hm bn ev tc sc iz dv xa yz vv tm wm ni av gn tv vn nl ct am sv za pc tn ny en np tn bh ci am lx hn rb xy cu hm bu be yn ov xi un pm tm rc be ck iz ce bb vn uc tc rc zp tv nm tz lb", "mode": "text", "instructions": "Well done! Now put the keys together into pairs."}, {"text": "sunroof hurling xcvi cup reveille bluesy striking homage synoptic heroics naturism corgi firebox hangover egomania groyne dabbed forename scrape laywomen gonad biog backspin signal bromidic pickings obviate vale concave ancient bowlful hunt sangria iceberg resolve ahchoo helping gainer tandoori virgin hank storm telnet doping emblazon prove sexpot nursing airiness judgment snooker mumps fairing condign learn swampy mine compeer perplex verboten", "mode": "text", "instructions": "Way to go! Time to type real words."}], "type": "normal", "order": 5, "medals": [{"wpm": 15, "score": 3000, "name": "bronze", "accuracy": 70}, {"wpm": 20, "score": 4500, "name": "silver", "accuracy": 80}, {"wpm": 25, "score": 6000, "name": "gold", "accuracy": 90}], "description": "This lesson teaches you the z, x, c, v, b, n and m keys \non the bottom row of the keyboard."}, {"description": "Now you know the whole alphabet, so let's practice!\nThese are big words, so get ready.", "length": 60, "words": ["needy", "bluff", "funky", "whereby", "meerkat", "biplane", "buggy", "crate", "detach", "baldric", "jussive", "itch", "opulent", "briefing", "kronor", "silkworm", "collect", "nay", "latrine", "unpriced", "nelson", "lens", "gaminess", "perfect", "assuming", "bunter", "convict", "angora", "against", "chicle", "volume", "bailee", "smooch", "stent", "oblatory", "compete", "overcool", "viva", "delimit", "alone", "precinct", "tibia", "narcotic", "lumpily", "dialect", "aviator", "bruising", "finalize", "silently", "dumfound", "cassava", "consumer", "backslap", "joinery", "oogonium", "ungodly", "unisex", "finished", "anthill", "tenably", "synopsis", "centime", "convert", "wetback", "vernal", "mandarin", "syringe", "exodus", "carhop", "circuit", "aardvark", "zither", "daimon", "saintly", "seizable", "founded", "schmeer", "behalf", "advert", "snapshot", "nous", "saponify", "permeate", "pronator", "bedouin", "rocks", "rebind", "maths", "behemoth", "peroxide", "penalty", "delver", "timbre", "marka", "depictor", "gem", "fern", "flavor", "organza", "bungler", "beneath", "systemic", "bravura", "taxying", "sedum", "tomogram", "borrow", "limpness", "ampoule", "execute", "demean", "mower", "cobra", "blading", "portably", "chicness", "diminish", "refocus", "reserve", "befell", "morphia", "entire", "caroller", "product", "unabated", "boogie", "boatel", "undated", "winded", "injurer", "autism", "moneybag", "minutia", "cion", "padlock", "milt", "nights", "unseen", "hardball", "tricorne", "bulge", "blossom", "gauzy", "basicity", "maze", "unblest", "mob", "coho", "survey", "salon", "oceanic", "flatcar", "choleric", "druidic", "pixy", "caulking", "pushcart", "wand", "uncoil", "fling", "remover", "kine", "liana", "bigoted", "satanic", "fasten", "mandala", "monition", "cable", "maraca", "card", "tenpins", "preteen", "coma", "bedevil", "raglan", "impostor", "border", "trusting", "humane", "dankness", "melodic", "burn", "marbled", "notation", "groove", "thwack", "curacy", "monodic", "sunfish", "flagon", "mansard", "tinter", "crystal", "battler", "pocked", "convent", "evilly", "iodine"], "type": "balloon", "order": 6, "medals": [{"wpm": 15, "score": 3000, "name": "bronze", "accuracy": 70}, {"wpm": 20, "score": 4500, "name": "silver", "accuracy": 80}, {"wpm": 25, "score": 6000, "name": "gold", "accuracy": 90}], "name": "Alphabet Balloons"}, {"name": "Left Hand Capitals", "options": {"mistakes": true, "backspace": true}, "steps": [{"text": "\n", "mode": "key", "instructions": "In this lesson, you will learn the Q, W, E, R, T, A, S, D, F, G, Z, X, C, V and B keys."}, {"text": "QWERTASDFGZXCVBQWERTASDFGZXCVBQWERTASDFGZXCVBQWERTASDFGZXCVB", "mode": "key", "instructions": "Let's learn the new keys."}, {"text": "SS FF XX RR ZZ AA DD FF CC AA AA CC BB GG BB SS WW TT GG XX BB EE QQ CC RR TT EE BB AA CC QQ DD BB VV BB RR BB AA WW QQ VV XX XX TT ZZ SS BB VV XX EE FF WW XX XX VV GG EE AA WW ZZ", "mode": "text", "instructions": "Wonderful! Practice typing the keys you just learned."}, {"text": "CV VC QE AT CD AS VC ZT BQ Ai FC BR ED RD Wi RA SR Ty DT Rn RC CZ FT FD Sk WA RA RF GT kW Du CD GS BA Wh CF Am Em Di Am BQ CF GB TC Gu QB Di RE TD VD SR SB Cm FS VD AD Ti AA Eu QB", "mode": "text", "instructions": "You did it! Now put the keys together into pairs."}, {"text": "Sun EDT TB Coy Bioko DDT Sikh Guy DAT Thimphu EDT Runyon WV SA Tim CARE GTE SAC Eu BR BBC CST RV ESE SARS CBS Bonn VCR AB RDA CBC AFB ETD WAC Simon CRT Sunni Soho FDR Cu STD BTW TA CARE VGA Fuji ER WV WC Eu GE ESE Biko Como ER EEC Ch Amy FD Son", "mode": "text", "instructions": "Well done! Time to type real words."}], "type": "normal", "order": 7, "medals": [{"wpm": 10, "score": 3000, "name": "bronze", "accuracy": 70}, {"wpm": 15, "score": 4500, "name": "silver", "accuracy": 80}, {"wpm": 20, "score": 6000, "name": "gold", "accuracy": 90}], "description": "Now that you know the whole alphabet, it's time to get started with \nCAPITAL letters. \n\nThis lesson teaches you the CAPITAL letters which are typed \nby your left hand: Q, W, E, R, T, A, S, D, F, G, Z, X, C, V and B."}, {"name": "Right Hand Capitals", "options": {"mistakes": true, "backspace": true}, "steps": [{"text": "\n", "mode": "key", "instructions": "In this lesson, you will learn the Y, U, I, O, P, H, J, K, L, N and M keys."}, {"text": "YUIOPHJKLNMYUIOPHJKLNMYUIOPHJKLNMYUIOPHJKLNM", "mode": "key", "instructions": "Let's learn the new keys."}, {"text": "LL MM PP OO NN LL PP PP UU UU HH KK HH KK NN YY MM NN JJ NN II UU HH OO MM LL KK NN PP LL UU OO UU KK LL HH MM OO HH PP YY II LL NN LL LL LL II PP JJ PP MM JJ JJ YY II MM JJ YY YY", "mode": "text", "instructions": "Awesome! Practice typing the keys you just learned."}, {"text": "Oc Mb Jr Iv Lr Pv ON HO NY Lt IN Pf Ut PN KY NH Id Ke Jr HI Ic IH Hg He Oz He Je IN PN PM ON Pe Pb NJ Lr LL NI Le Nb Mt Le Ha Ob Mg OH Ia Od Ja Ha Mc KY Lr Mt La Hz Or Id Yv IL Ya", "mode": "text", "instructions": "Way to go! Now put the keys together into pairs."}, {"text": "Lear Mae Pabst Ltd Ortega Mercer Mesa Ira Margaret Hess Lr Jarred Ob MHz Ned Navarre Lassa Ira Lester Ore Jarrett Le Madras NHL Ives Odets HM Leda Nev Lestrade Hatteras Kerr Lars Herbert IMHO Haw Lars OJ Lara Jeeves Hester Marta Mac Parr Pt Max MO Jewess Herbart Peter ON Hart IOU Leda Mex Herbart NY Herbert Hz Osbert", "mode": "text", "instructions": "Way to go! Time to type real words."}], "type": "normal", "order": 8, "medals": [{"wpm": 10, "score": 3000, "name": "bronze", "accuracy": 70}, {"wpm": 15, "score": 4500, "name": "silver", "accuracy": 80}, {"wpm": 20, "score": 6000, "name": "gold", "accuracy": 90}], "description": "This lesson adds the CAPITAL letters that are typed with the\nright hand: Y, U, I, O, P, H, J, K, L, N, and M."}, {"description": "Time to practice your CAPITAL letters by popping some balloons!\n\nThis time, try to type as quickly and steadily as you can.", "length": 60, "words": ["Heller", "Nemesis", "Hadrian", "Haiphong", "Nixon", "Lewisham", "Lorene", "Mohegan", "Latvian", "Muzak", "Hamhung", "Napoleon", "Jonathan", "Malory", "Ludhiana", "Malacca", "AWOL", "Humphrey", "Napier", "Leipzig", "Patrick", "Kitty", "Peale", "Jamie", "Malta", "Mitty", "Mexican", "Karen", "Lamb", "Host", "Pegasus", "IOU", "Punjabi", "Kibo", "Islam", "GI", "Poole", "Preston", "Madam", "Yukon", "Pueblo", "Luke", "Nilgiri", "Pepin", "Mendel", "Perkins", "PBX", "Logan", "Lyons", "Jeremy", "Mahatma", "Marietta", "Obadiah", "Perry", "Mohammed", "Nanette", "Kamet", "Procyon", "Proteus", "Judaea", "Ionian", "Plovdiv", "Main", "Pius", "Istrian", "Kim", "Picasso", "Hydra", "Peel", "Yorktown", "Potomac", "Pliny", "STOL", "Keller", "Patti", "Yangon", "Palomar", "Junior", "Mervin", "Harare", "Yokosuka", "Mason", "No", "Pisan", "Manama", "Mahican", "Melinda", "Iasi", "Minorcan", "Jersey", "Langley", "Latakia", "Oakland", "Peruvian", "Masai", "Powys", "Owen", "Jonson", "Makarios", "Lela", "Milicent", "Moselle", "Mariana", "Marcia", "Mulroney", "Permian", "Perceval", "Jacuzzi", "Hiram", "Lon", "Omagh", "Ibo", "Julia", "Mali", "Nabatea", "Menotti", "Hopkins", "Pattie", "FM", "Leonard", "GIGO", "Patmos", "Marconi", "Japanese", "Laverne", "Nikolaev", "Peshawar", "Umbrian", "Nobelist", "Haydn", "Ligurian", "Ocean", "Hogarth", "Linnaeus", "Megrez", "Mabel", "Piura", "Limavady", "Newark", "McLuhan", "Kirin", "IV", "Orpheus", "ATP", "Nannette", "June", "Hanuka", "Lily", "Lucian", "Iacocca", "Hasidic", "Lionel", "Nashua", "Odin", "Moldova", "Midas", "Heep", "Lorenzo", "Leona", "Po", "Lublin", "Metairie", "Yoruba", "Parian", "Ithaki", "Om", "Kabbalah", "Kirby", "Oneida", "Huron", "Iqaluit", "Pepysian", "Phidias", "Moore", "HUD", "Pope", "Hathaway", "Kweiyang", "Hodgkin", "Maya", "Honduras", "Mercury", "Ivorian", "Nagasaki", "Jessie", "Jute", "Lane", "Hasidim", "Langland", "Union", "Kaiserin", "Leighton", "SLR"], "type": "balloon", "order": 9, "medals": [{"wpm": 15, "score": 3000, "name": "bronze", "accuracy": 70}, {"wpm": 20, "score": 4500, "name": "silver", "accuracy": 80}, {"wpm": 25, "score": 6000, "name": "gold", "accuracy": 90}], "name": "Capital Balloons"}]} \ No newline at end of file
diff --git a/lessonscreen.py b/lessonscreen.py
index daed55b..a64d3bf 100644
--- a/lessonscreen.py
+++ b/lessonscreen.py
@@ -35,6 +35,19 @@ PARAGRAPH_CODE = u'\xb6'
# Maximium width of a text line in text lesson mode.
LINE_WIDTH = 70
+FINGERS = {
+ 'LP': _('left little finger'),
+ 'LR': _('left ring finger'),
+ 'LM': _('left middle finger'),
+ 'LI': _('left index finger'),
+ 'LT': _('left thumb'),
+ 'RP': _('right little finger'),
+ 'RR': _('right ring finger'),
+ 'RM': _('right middle finger'),
+ 'RI': _('right index finger'),
+ 'RT': _('right thumb'),
+}
+
class LessonScreen(gtk.VBox):
def __init__(self, lesson, keyboard_images, activity):
gtk.VBox.__init__(self)
@@ -74,17 +87,15 @@ class LessonScreen(gtk.VBox):
# Set up font styles.
self.tagtable = gtk.TextTagTable()
instructions_tag = gtk.TextTag('instructions')
- instructions_tag.props.size = 10000
instructions_tag.props.justification = gtk.JUSTIFY_CENTER
self.tagtable.add(instructions_tag)
text_tag = gtk.TextTag('text')
text_tag.props.family = 'Monospace'
- text_tag.props.size = 10000
self.tagtable.add(text_tag)
spacer_tag = gtk.TextTag('spacer')
- spacer_tag.props.size = 10
+ spacer_tag.props.size = 3000
self.tagtable.add(spacer_tag)
image_tag = gtk.TextTag('image')
@@ -93,13 +104,11 @@ class LessonScreen(gtk.VBox):
correct_copy_tag = gtk.TextTag('correct-copy')
correct_copy_tag.props.family = 'Monospace'
- correct_copy_tag.props.size = 10000
correct_copy_tag.props.foreground = '#0000ff'
self.tagtable.add(correct_copy_tag)
incorrect_copy_tag = gtk.TextTag('incorrect-copy')
incorrect_copy_tag.props.family = 'Monospace'
- incorrect_copy_tag.props.size = 10000
incorrect_copy_tag.props.foreground = '#ff0000'
self.tagtable.add(incorrect_copy_tag)
@@ -238,6 +247,13 @@ class LessonScreen(gtk.VBox):
self.text = unicode(step['text'])
self.instructions = unicode(step['instructions'])
+ if step.has_key('mode'):
+ self.mode = step['mode']
+ else:
+ if len(self.text) == 1:
+ self.mode = 'key'
+ else:
+ self.mode = 'text'
# Show report after the last step.
elif self.next_step_idx == len(self.lesson['steps']) and not self.lesson_finished:
@@ -245,6 +261,7 @@ class LessonScreen(gtk.VBox):
self.instructions = self.get_lesson_report()
self.text = '\n'
+ self.mode = 'key'
# Leave this screen when the lesson is finished.
else:
@@ -255,12 +272,6 @@ class LessonScreen(gtk.VBox):
if len(self.text) == 0:
self.text = '\n'
- # Single character steps are handled differently from multi-character steps.
- if len(self.text) == 1:
- self.mode = 'key'
- else:
- self.mode = 'text'
-
# Clear the buffer *before* key steps.
self.lessonbuffer.set_text('')
@@ -274,33 +285,10 @@ class LessonScreen(gtk.VBox):
self.line_marks = {}
self.lessonbuffer.insert_with_tags_by_name(
- self.lessonbuffer.get_end_iter(), '\n\n', 'instructions')
+ self.lessonbuffer.get_end_iter(), '\n', 'instructions')
self.line_marks[0] = self.lessonbuffer.create_mark(None, self.lessonbuffer.get_end_iter(), True)
- # Determine what modifier keys are needed.
- key, state, group = self.keyboard.get_key_state_group_for_letter(self.text[0])
-
- if key:
- if state & gtk.gdk.SHIFT_MASK:
- shift_key = self.keyboard.find_key_by_label('shift')
- pixbuf = self.keyboard.get_key_pixbuf(shift_key, scale=1)
- self.lessonbuffer.insert_pixbuf(self.lessonbuffer.get_end_iter(), pixbuf)
- self.lessonbuffer.insert(self.lessonbuffer.get_end_iter(), ' ')
-
- if state & gtk.gdk.MOD5_MASK:
- altgr_key = self.keyboard.find_key_by_label('altgr')
- pixbuf = self.keyboard.get_key_pixbuf(altgr_key, scale=1)
- self.lessonbuffer.insert_pixbuf(self.lessonbuffer.get_end_iter(), pixbuf)
- self.lessonbuffer.insert(self.lessonbuffer.get_end_iter(), ' ')
-
- pixbuf = self.keyboard.get_key_pixbuf(key, state, group, 1)
- self.lessonbuffer.insert_pixbuf(self.lessonbuffer.get_end_iter(), pixbuf)
-
- self.lessonbuffer.apply_tag_by_name('image',
- self.lessonbuffer.get_iter_at_mark(self.line_marks[0]),
- self.lessonbuffer.get_end_iter())
-
self.lessontext.set_cursor_visible(False)
# Enable hands for key mode.
@@ -324,13 +312,15 @@ class LessonScreen(gtk.VBox):
self.line_marks = {}
line_idx = 0
for l in self.lines:
- # Add a little space between lines. Not working atm.
- #self.lessonbuffer.insert_with_tags_by_name(
- # self.lessonbuffer.get_end_iter(), '\n', 'spacer')
+ # Add a little space between lines.
+ self.lessonbuffer.insert_with_tags_by_name(
+ self.lessonbuffer.get_end_iter(), '\n', 'text')
+ self.lessonbuffer.insert_with_tags_by_name(
+ self.lessonbuffer.get_end_iter(), '\n', 'spacer')
# Add the text to copy.
self.lessonbuffer.insert_with_tags_by_name(
- self.lessonbuffer.get_end_iter(), '\n' + l.encode('utf-8') + '\n', 'text')
+ self.lessonbuffer.get_end_iter(), l.encode('utf-8') + '\n', 'text')
# Leave a marker where we will later insert text.
self.line_marks[line_idx] = self.lessonbuffer.create_mark(None, self.lessonbuffer.get_end_iter(), True)
@@ -381,12 +371,15 @@ class LessonScreen(gtk.VBox):
if self.mode == 'key':
# Check to see if they pressed the correct key.
- if key == self.line[0]:
+ if key == self.line[self.char_idx]:
self.correct_keys += 1
self.total_keys += 1
- # Advance to the next step.
- self.advance_step()
+ # Advance to the next character (or else step).
+ self.char_idx += 1
+ if self.char_idx >= len(self.line):
+ self.advance_step()
+
self.update_stats()
self.hilite_next_key()
@@ -465,24 +458,86 @@ class LessonScreen(gtk.VBox):
return True
def hilite_next_key(self):
- if not self.line:
- return
+ char = self.line[self.char_idx]
+ self.keyboard.set_hilite_letter(char)
+
+ # In Text mode, move the cursor to the insert location.
+ if self.mode == 'text':
+ iter = self.lessonbuffer.get_iter_at_mark(self.line_mark)
+ iter.forward_chars(self.char_idx)
+ self.lessonbuffer.place_cursor(iter)
+
+ # Gain focus (this causes the cursor line to draw).
+ self.lessontext.grab_focus()
+
+ # Scroll the TextView so the cursor is on screen.
+ self.lessontext.scroll_to_mark(self.lessonbuffer.get_insert(), 0)
+
+ # In Key mode, display the finger hint and the key image.
+ if self.mode == 'key':
+ iter = self.lessonbuffer.get_iter_at_mark(self.line_mark)
+ self.lessonbuffer.delete(iter, self.lessonbuffer.get_end_iter())
+
+ # Determine what modifier keys are needed.
+ key, state, group = self.keyboard.get_key_state_group_for_letter(char)
+
+ # Append the instructions and key images.
+ if key:
+ letter = char
+ if letter == PARAGRAPH_CODE:
+ letter = 'enter'
+ if letter == ' ':
+ letter = 'space'
+
+ instructions = ''
+
+ try:
+ finger = FINGERS[key['key-finger']]
+ except:
+ finger = ''
- if len(self.line) > 0:
- char = self.line[self.char_idx]
- self.keyboard.set_hilite_letter(char)
+ if state == gtk.gdk.SHIFT_MASK:
+ # Choose the finger to press the SHIFT key with.
+ if key['key-finger'][0] == 'R':
+ shift_finger = FINGERS['LP']
+ else:
+ shift_finger = FINGERS['RP']
+
+ instructions = _('Press and hold the shift key with your %(finger)s, ') % { 'finger': shift_finger }
+ instructions += _('then press the %(letter)s key with your %(finger)s.') % { 'letter': letter, 'finger': finger }
- # Move the cursor to the insert location.
- iter = self.lessonbuffer.get_iter_at_mark(self.line_mark)
- iter.forward_chars(self.char_idx)
- self.lessonbuffer.place_cursor(iter)
+ elif state == gtk.gdk.MOD5_MASK:
+ instructions = _('Press and hold the altgr key, ')
+ instructions += _('then press the %(letter)s key with your %(finger)s.') % { 'letter': letter, 'finger': finger }
- # Gain focus (this causes the cursor line to draw).
- self.lessontext.grab_focus()
+ elif state == gtk.gdk.SHIFT_MASK | gtk.gdk.MOD5_MASK:
+ instructions = _('Press and hold the altgr and shift keys, ')
+ instructions += _('then press the %(letter)s key with your %(finger)s.') % { 'letter': letter, 'finger': finger }
- # Scroll the TextView so the cursor is on screen.
- self.lessontext.scroll_to_mark(self.lessonbuffer.get_insert(), 0)
+ else:
+ instructions = _('Press the %(letter)s key with your %(finger)s.') % { 'letter': letter, 'finger': finger }
+
+ self.lessonbuffer.insert(self.lessonbuffer.get_end_iter(), instructions + '\n\n')
+
+ if state & gtk.gdk.SHIFT_MASK:
+ shift_key = self.keyboard.find_key_by_label('shift')
+ pixbuf = self.keyboard.get_key_pixbuf(shift_key, scale=1)
+ self.lessonbuffer.insert_pixbuf(self.lessonbuffer.get_end_iter(), pixbuf)
+ self.lessonbuffer.insert(self.lessonbuffer.get_end_iter(), ' ')
+
+ if state & gtk.gdk.MOD5_MASK:
+ altgr_key = self.keyboard.find_key_by_label('altgr')
+ pixbuf = self.keyboard.get_key_pixbuf(altgr_key, scale=1)
+ self.lessonbuffer.insert_pixbuf(self.lessonbuffer.get_end_iter(), pixbuf)
+ self.lessonbuffer.insert(self.lessonbuffer.get_end_iter(), ' ')
+ pixbuf = self.keyboard.get_key_pixbuf(key, state, group, 1)
+ self.lessonbuffer.insert_pixbuf(self.lessonbuffer.get_end_iter(), pixbuf)
+
+ self.lessonbuffer.apply_tag_by_name('image',
+ self.lessonbuffer.get_iter_at_mark(self.line_marks[0]),
+ self.lessonbuffer.get_end_iter())
+
def get_lesson_report(self):
self.update_stats()
diff --git a/locale/ne_NP/LC_MESSAGES/org.laptop.community.TypingTurtle.mo b/locale/ne_NP/LC_MESSAGES/org.laptop.community.TypingTurtle.mo
deleted file mode 100644
index e6e7041..0000000
--- a/locale/ne_NP/LC_MESSAGES/org.laptop.community.TypingTurtle.mo
+++ /dev/null
Binary files differ
diff --git a/locale/ne_NP/activity.linfo b/locale/ne_NP/activity.linfo
deleted file mode 100644
index e0602ad..0000000
--- a/locale/ne_NP/activity.linfo
+++ /dev/null
@@ -1,2 +0,0 @@
-[Activity]
-name = टाईपीङ्ग टर्टल
diff --git a/po/TypingTurtle.pot b/po/TypingTurtle.pot
index fb44216..467b305 100644
--- a/po/TypingTurtle.pot
+++ b/po/TypingTurtle.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-10-22 00:40+0000\n"
+"POT-Creation-Date: 2009-10-28 02:16+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -21,57 +21,70 @@ msgstr ""
msgid "Typing Turtle"
msgstr ""
-#: /home/wadeb/typing-turtle/editlessonlistscreen.py:46
-#: /home/wadeb/typing-turtle/typingturtle.py:90
+#: /home/wadeb/typing-turtle/editlessonlistscreen.py:47
+#: /home/wadeb/typing-turtle/typingturtle.py:92
msgid "Edit Lessons"
msgstr ""
-#: /home/wadeb/typing-turtle/editlessonlistscreen.py:49
+#: /home/wadeb/typing-turtle/editlessonlistscreen.py:50
#: /home/wadeb/typing-turtle/balloongame.py:53
-#: /home/wadeb/typing-turtle/lessonscreen.py:51
+#: /home/wadeb/typing-turtle/lessonscreen.py:64
#: /home/wadeb/typing-turtle/editlessonscreen.py:49
+#: /home/wadeb/typing-turtle/editlessonscreen.py:570
msgid "Go Back"
msgstr ""
-#: /home/wadeb/typing-turtle/editlessonlistscreen.py:73
-#: /home/wadeb/typing-turtle/editlessonscreen.py:252
+#: /home/wadeb/typing-turtle/editlessonlistscreen.py:74
+#: /home/wadeb/typing-turtle/editlessonscreen.py:271
msgid "Name"
msgstr ""
-#: /home/wadeb/typing-turtle/editlessonlistscreen.py:78
-#: /home/wadeb/typing-turtle/editlessonscreen.py:283
+#: /home/wadeb/typing-turtle/editlessonlistscreen.py:79
+#: /home/wadeb/typing-turtle/editlessonscreen.py:302
msgid "Description"
msgstr ""
-#: /home/wadeb/typing-turtle/editlessonlistscreen.py:84
-#: /home/wadeb/typing-turtle/editlessonscreen.py:264
+#: /home/wadeb/typing-turtle/editlessonlistscreen.py:85
+#: /home/wadeb/typing-turtle/editlessonscreen.py:283
msgid "Type"
msgstr ""
-#: /home/wadeb/typing-turtle/editlessonlistscreen.py:93
+#: /home/wadeb/typing-turtle/editlessonlistscreen.py:94
msgid "Import Lessons from Journal"
msgstr ""
-#: /home/wadeb/typing-turtle/editlessonlistscreen.py:98
+#: /home/wadeb/typing-turtle/editlessonlistscreen.py:99
msgid "Export Lessons to Journal"
msgstr ""
-#: /home/wadeb/typing-turtle/editlessonlistscreen.py:156
-#: /home/wadeb/typing-turtle/editlessonscreen.py:169
+#: /home/wadeb/typing-turtle/editlessonlistscreen.py:104
+msgid "Save Lessons to Activity"
+msgstr ""
+
+#: /home/wadeb/typing-turtle/editlessonlistscreen.py:163
+#: /home/wadeb/typing-turtle/editlessonscreen.py:188
msgid "Text"
msgstr ""
-#: /home/wadeb/typing-turtle/editlessonlistscreen.py:158
-#: /home/wadeb/typing-turtle/editlessonscreen.py:271
+#: /home/wadeb/typing-turtle/editlessonlistscreen.py:165
+#: /home/wadeb/typing-turtle/editlessonscreen.py:290
msgid "Balloon Game"
msgstr ""
-#: /home/wadeb/typing-turtle/editlessonlistscreen.py:281
+#: /home/wadeb/typing-turtle/editlessonlistscreen.py:201
+msgid "Delete Lesson?"
+msgstr ""
+
+#: /home/wadeb/typing-turtle/editlessonlistscreen.py:202
+msgid "Deleting the lesson will erase the lesson content."
+msgstr ""
+
+#: /home/wadeb/typing-turtle/editlessonlistscreen.py:300
msgid " (Exported Lessons)"
msgstr ""
#: /home/wadeb/typing-turtle/lessonbuilder.py:261
-#: /home/wadeb/typing-turtle/lessonscreen.py:550
+#: /home/wadeb/typing-turtle/lessonscreen.py:607
msgid "Well done!"
msgstr ""
@@ -84,7 +97,7 @@ msgid "Awesome!"
msgstr ""
#: /home/wadeb/typing-turtle/lessonbuilder.py:264
-#: /home/wadeb/typing-turtle/lessonscreen.py:552
+#: /home/wadeb/typing-turtle/lessonscreen.py:609
msgid "Way to go!"
msgstr ""
@@ -129,6 +142,7 @@ msgid "left index"
msgstr ""
#: /home/wadeb/typing-turtle/lessonbuilder.py:286
+#: /home/wadeb/typing-turtle/lessonscreen.py:43
msgid "left thumb"
msgstr ""
@@ -149,6 +163,7 @@ msgid "right index"
msgstr ""
#: /home/wadeb/typing-turtle/lessonbuilder.py:291
+#: /home/wadeb/typing-turtle/lessonscreen.py:48
msgid "right thumb"
msgstr ""
@@ -169,100 +184,79 @@ msgid ""
"Press the ENTER key when you are ready to begin!"
msgstr ""
-#: /home/wadeb/typing-turtle/lessonbuilder.py:348
-#, python-format
-msgid "Press and hold the SHIFT key with your %(finger)s finger, "
-msgstr ""
-
-#: /home/wadeb/typing-turtle/lessonbuilder.py:349
-#: /home/wadeb/typing-turtle/lessonbuilder.py:353
-#: /home/wadeb/typing-turtle/lessonbuilder.py:357
-#, python-format
-msgid "then press the %(letter)s key with your %(finger)s finger."
-msgstr ""
-
-#: /home/wadeb/typing-turtle/lessonbuilder.py:352
-msgid "Press and hold the ALTGR key, "
-msgstr ""
-
-#: /home/wadeb/typing-turtle/lessonbuilder.py:356
-msgid "Press and hold the ALTGR and SHIFT keys, "
-msgstr ""
-
-#: /home/wadeb/typing-turtle/lessonbuilder.py:360
-#, python-format
-msgid "Press the %(letter)s key with your %(finger)s finger."
+#: /home/wadeb/typing-turtle/lessonbuilder.py:364
+msgid "Let's learn the new keys."
msgstr ""
-#: /home/wadeb/typing-turtle/lessonbuilder.py:365
+#: /home/wadeb/typing-turtle/lessonbuilder.py:367
msgid "Practice typing the keys you just learned."
msgstr ""
-#: /home/wadeb/typing-turtle/lessonbuilder.py:369
+#: /home/wadeb/typing-turtle/lessonbuilder.py:371
msgid "Now put the keys together into pairs."
msgstr ""
-#: /home/wadeb/typing-turtle/lessonbuilder.py:374
+#: /home/wadeb/typing-turtle/lessonbuilder.py:376
msgid "Time to type jumbles."
msgstr ""
-#: /home/wadeb/typing-turtle/lessonbuilder.py:379
+#: /home/wadeb/typing-turtle/lessonbuilder.py:381
msgid "Time to type real words."
msgstr ""
-#: /home/wadeb/typing-turtle/lessonbuilder.py:388
+#: /home/wadeb/typing-turtle/lessonbuilder.py:390
msgid "Hihowahyah! Ready to learn the secret of fast typing?\n"
msgstr ""
-#: /home/wadeb/typing-turtle/lessonbuilder.py:389
+#: /home/wadeb/typing-turtle/lessonbuilder.py:391
msgid ""
"Always use the correct finger to press each key!\n"
"\n"
msgstr ""
-#: /home/wadeb/typing-turtle/lessonbuilder.py:390
+#: /home/wadeb/typing-turtle/lessonbuilder.py:392
msgid "Now, place your hands on the keyboard just like the picture below.\n"
msgstr ""
-#: /home/wadeb/typing-turtle/lessonbuilder.py:391
+#: /home/wadeb/typing-turtle/lessonbuilder.py:393
msgid "When you're ready, press the SPACE bar with your thumb!"
msgstr ""
-#: /home/wadeb/typing-turtle/lessonbuilder.py:395
+#: /home/wadeb/typing-turtle/lessonbuilder.py:397
msgid ""
"Good job! The SPACE bar is used to insert spaces between words.\n"
"\n"
msgstr ""
-#: /home/wadeb/typing-turtle/lessonbuilder.py:396
+#: /home/wadeb/typing-turtle/lessonbuilder.py:398
msgid "Press the SPACE bar again with your thumb."
msgstr ""
-#: /home/wadeb/typing-turtle/lessonbuilder.py:400
+#: /home/wadeb/typing-turtle/lessonbuilder.py:402
msgid "Now I'll teach you the second key, ENTER. "
msgstr ""
-#: /home/wadeb/typing-turtle/lessonbuilder.py:401
+#: /home/wadeb/typing-turtle/lessonbuilder.py:403
msgid ""
"That's the big square key near your right little finger.\n"
"\n"
msgstr ""
-#: /home/wadeb/typing-turtle/lessonbuilder.py:402
+#: /home/wadeb/typing-turtle/lessonbuilder.py:404
msgid "Now, reach your little finger over and press ENTER."
msgstr ""
-#: /home/wadeb/typing-turtle/lessonbuilder.py:406
+#: /home/wadeb/typing-turtle/lessonbuilder.py:408
msgid ""
"Great! When typing, the ENTER key is used to begin a new line.\n"
"\n"
msgstr ""
-#: /home/wadeb/typing-turtle/lessonbuilder.py:407
+#: /home/wadeb/typing-turtle/lessonbuilder.py:409
msgid "Press the ENTER key again with your right little finger."
msgstr ""
-#: /home/wadeb/typing-turtle/lessonbuilder.py:415
+#: /home/wadeb/typing-turtle/lessonbuilder.py:417
msgid "Copy out the following text."
msgstr ""
@@ -330,7 +324,7 @@ msgid "<b>Words Per Minute:</b> %(wpm)d"
msgstr ""
#: /home/wadeb/typing-turtle/medalscreen.py:90
-#: /home/wadeb/typing-turtle/lessonscreen.py:188
+#: /home/wadeb/typing-turtle/lessonscreen.py:197
#, python-format
msgid "<b>Accuracy:</b> %(accuracy)d%%"
msgstr ""
@@ -340,25 +334,82 @@ msgstr ""
msgid "<b>SCORE:</b> %(score)d"
msgstr ""
-#: /home/wadeb/typing-turtle/lessonscreen.py:180
+#: /home/wadeb/typing-turtle/lessonscreen.py:39
+msgid "left little finger"
+msgstr ""
+
+#: /home/wadeb/typing-turtle/lessonscreen.py:40
+msgid "left ring finger"
+msgstr ""
+
+#: /home/wadeb/typing-turtle/lessonscreen.py:41
+msgid "left middle finger"
+msgstr ""
+
+#: /home/wadeb/typing-turtle/lessonscreen.py:42
+msgid "left index finger"
+msgstr ""
+
+#: /home/wadeb/typing-turtle/lessonscreen.py:44
+msgid "right little finger"
+msgstr ""
+
+#: /home/wadeb/typing-turtle/lessonscreen.py:45
+msgid "right ring finger"
+msgstr ""
+
+#: /home/wadeb/typing-turtle/lessonscreen.py:46
+msgid "right middle finger"
+msgstr ""
+
+#: /home/wadeb/typing-turtle/lessonscreen.py:47
+msgid "right index finger"
+msgstr ""
+
+#: /home/wadeb/typing-turtle/lessonscreen.py:189
#, python-format
msgid "<b>WPM:</b> %(wpm)d"
msgstr ""
-#: /home/wadeb/typing-turtle/lessonscreen.py:549
+#: /home/wadeb/typing-turtle/lessonscreen.py:506
+#, python-format
+msgid "Press and hold the shift key with your %(finger)s, "
+msgstr ""
+
+#: /home/wadeb/typing-turtle/lessonscreen.py:507
+#: /home/wadeb/typing-turtle/lessonscreen.py:511
+#: /home/wadeb/typing-turtle/lessonscreen.py:515
+#, python-format
+msgid "then press the %(letter)s key with your %(finger)s."
+msgstr ""
+
+#: /home/wadeb/typing-turtle/lessonscreen.py:510
+msgid "Press and hold the altgr key, "
+msgstr ""
+
+#: /home/wadeb/typing-turtle/lessonscreen.py:514
+msgid "Press and hold the altgr and shift keys, "
+msgstr ""
+
+#: /home/wadeb/typing-turtle/lessonscreen.py:518
+#, python-format
+msgid "Press the %(letter)s key with your %(finger)s."
+msgstr ""
+
+#: /home/wadeb/typing-turtle/lessonscreen.py:606
msgid "Good job!"
msgstr ""
-#: /home/wadeb/typing-turtle/lessonscreen.py:551
+#: /home/wadeb/typing-turtle/lessonscreen.py:608
msgid "Nice work!"
msgstr ""
-#: /home/wadeb/typing-turtle/lessonscreen.py:557
+#: /home/wadeb/typing-turtle/lessonscreen.py:614
#, python-format
msgid "You finished the lesson in %(time)d seconds, with %(errors)d errors.\n"
msgstr ""
-#: /home/wadeb/typing-turtle/lessonscreen.py:559
+#: /home/wadeb/typing-turtle/lessonscreen.py:616
#, python-format
msgid ""
"Your words per minute (WPM) was %(wpm)d, and your accuracy was %(accuracy)d%"
@@ -366,32 +417,32 @@ msgid ""
"\n"
msgstr ""
-#: /home/wadeb/typing-turtle/lessonscreen.py:562
+#: /home/wadeb/typing-turtle/lessonscreen.py:619
#, python-format
msgid "You finished the lesson with %(errors)d errors.\n"
msgstr ""
-#: /home/wadeb/typing-turtle/lessonscreen.py:564
+#: /home/wadeb/typing-turtle/lessonscreen.py:621
#, python-format
msgid ""
"Your accuracy was %(accuracy)d%%.\n"
"\n"
msgstr ""
-#: /home/wadeb/typing-turtle/lessonscreen.py:570
+#: /home/wadeb/typing-turtle/lessonscreen.py:627
#, python-format
msgid "Congratulations! You earned a %(type)s medal!"
msgstr ""
-#: /home/wadeb/typing-turtle/lessonscreen.py:578
+#: /home/wadeb/typing-turtle/lessonscreen.py:635
msgid "You need to practice this lesson more before moving on."
msgstr ""
-#: /home/wadeb/typing-turtle/lessonscreen.py:581
+#: /home/wadeb/typing-turtle/lessonscreen.py:638
msgid "You almost got a medal! Next time, try not to make as many errors."
msgstr ""
-#: /home/wadeb/typing-turtle/lessonscreen.py:584
+#: /home/wadeb/typing-turtle/lessonscreen.py:641
msgid "You almost got a medal! Next time, try to type a little faster."
msgstr ""
@@ -445,59 +496,87 @@ msgstr ""
msgid "Length"
msgstr ""
-#: /home/wadeb/typing-turtle/editlessonscreen.py:99
+#: /home/wadeb/typing-turtle/editlessonscreen.py:89
msgid "Generate!"
msgstr ""
-#: /home/wadeb/typing-turtle/editlessonscreen.py:116
+#: /home/wadeb/typing-turtle/editlessonscreen.py:107
+#: /home/wadeb/typing-turtle/editlessonscreen.py:567
+msgid "Edit Word List"
+msgstr ""
+
+#: /home/wadeb/typing-turtle/editlessonscreen.py:123
#, python-format
msgid "Step #%d"
msgstr ""
-#: /home/wadeb/typing-turtle/editlessonscreen.py:148
+#: /home/wadeb/typing-turtle/editlessonscreen.py:129
+msgid "Keys"
+msgstr ""
+
+#: /home/wadeb/typing-turtle/editlessonscreen.py:130
+#: /home/wadeb/typing-turtle/editlessonscreen.py:381
+msgid "Words"
+msgstr ""
+
+#: /home/wadeb/typing-turtle/editlessonscreen.py:167
msgid "Instructions"
msgstr ""
-#: /home/wadeb/typing-turtle/editlessonscreen.py:211
+#: /home/wadeb/typing-turtle/editlessonscreen.py:230
msgid "Accuracy"
msgstr ""
-#: /home/wadeb/typing-turtle/editlessonscreen.py:212
+#: /home/wadeb/typing-turtle/editlessonscreen.py:231
msgid "WPM"
msgstr ""
-#: /home/wadeb/typing-turtle/editlessonscreen.py:226
+#: /home/wadeb/typing-turtle/editlessonscreen.py:245
msgid "Score"
msgstr ""
-#: /home/wadeb/typing-turtle/editlessonscreen.py:247
+#: /home/wadeb/typing-turtle/editlessonscreen.py:266
msgid "Lesson Details"
msgstr ""
-#: /home/wadeb/typing-turtle/editlessonscreen.py:268
+#: /home/wadeb/typing-turtle/editlessonscreen.py:287
msgid "Normal Lesson"
msgstr ""
-#: /home/wadeb/typing-turtle/editlessonscreen.py:311
-msgid "Automatic Lesson Generator"
+#: /home/wadeb/typing-turtle/editlessonscreen.py:320
+msgid "Options"
msgstr ""
-#: /home/wadeb/typing-turtle/editlessonscreen.py:349
-msgid "Words"
+#: /home/wadeb/typing-turtle/editlessonscreen.py:324
+msgid "Allow Mistakes"
msgstr ""
-#: /home/wadeb/typing-turtle/editlessonscreen.py:372
+#: /home/wadeb/typing-turtle/editlessonscreen.py:326
+msgid "Allow Backspace"
+msgstr ""
+
+#: /home/wadeb/typing-turtle/editlessonscreen.py:347
+msgid "Automatic Lesson Generator"
+msgstr ""
+
+#: /home/wadeb/typing-turtle/editlessonscreen.py:404
msgid "Medal Requirements"
msgstr ""
-#: /home/wadeb/typing-turtle/editlessonscreen.py:380
+#: /home/wadeb/typing-turtle/editlessonscreen.py:411
msgid "Bronze"
msgstr ""
-#: /home/wadeb/typing-turtle/editlessonscreen.py:381
+#: /home/wadeb/typing-turtle/editlessonscreen.py:412
msgid "Silver"
msgstr ""
-#: /home/wadeb/typing-turtle/editlessonscreen.py:382
+#: /home/wadeb/typing-turtle/editlessonscreen.py:413
msgid "Gold"
msgstr ""
+
+#: /home/wadeb/typing-turtle/editlessonscreen.py:580
+msgid ""
+"Type or paste words here, for the Automatic Lesson Generator. If empty, the "
+"dictionary will be used."
+msgstr ""