asker-tool 2.1.3 → 2.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +17 -17
  3. data/lib/asker.rb +40 -83
  4. data/lib/asker/application.rb +1 -1
  5. data/lib/asker/checker.rb +42 -25
  6. data/lib/asker/cli.rb +1 -1
  7. data/lib/asker/data/world.rb +2 -0
  8. data/lib/asker/{exporter/code_screen_exporter.rb → displayer/code_displayer.rb} +6 -6
  9. data/lib/asker/{exporter/concept_ai_screen_exporter.rb → displayer/concept_ai_displayer.rb} +27 -29
  10. data/lib/asker/displayer/concept_displayer.rb +27 -0
  11. data/lib/asker/displayer/stats_displayer.rb +13 -0
  12. data/lib/asker/exporter/code_gift_exporter.rb +10 -11
  13. data/lib/asker/exporter/concept_ai_gift_exporter.rb +9 -9
  14. data/lib/asker/exporter/concept_ai_yaml_exporter.rb +2 -4
  15. data/lib/asker/exporter/concept_doc_exporter.rb +9 -15
  16. data/lib/asker/exporter/output_file_exporter.rb +18 -0
  17. data/lib/asker/files/example-concept.haml +25 -8
  18. data/lib/asker/formatter/concept_string_formatter.rb +9 -8
  19. data/lib/asker/lang/lang.rb +3 -4
  20. data/lib/asker/lang/locales/du/templates.yaml +50 -0
  21. data/lib/asker/lang/locales/en/connectors.yaml +44 -0
  22. data/lib/asker/lang/locales/en/mistakes.yaml +37 -0
  23. data/lib/asker/lang/locales/en/templates.yaml +29 -0
  24. data/lib/asker/lang/locales/es/connectors.yaml +92 -0
  25. data/lib/asker/lang/locales/es/mistakes.yaml +82 -0
  26. data/lib/asker/lang/locales/es/templates.yaml +29 -0
  27. data/lib/asker/lang/locales/fr/connectors.yaml +92 -0
  28. data/lib/asker/lang/locales/fr/mistakes.yaml +82 -0
  29. data/lib/asker/lang/locales/fr/templates.yaml +29 -0
  30. data/lib/asker/lang/locales/javascript/connectors.yaml +11 -0
  31. data/lib/asker/lang/locales/javascript/mistakes.yaml +30 -0
  32. data/lib/asker/lang/locales/javascript/templates.yaml +3 -0
  33. data/lib/asker/lang/locales/math/connectors.yaml +2 -0
  34. data/lib/asker/lang/locales/math/mistakes.yaml +2 -0
  35. data/lib/asker/lang/locales/math/templates.yaml +1 -0
  36. data/lib/asker/lang/locales/python/connectors.yaml +11 -0
  37. data/lib/asker/lang/locales/python/mistakes.yaml +26 -0
  38. data/lib/asker/lang/locales/python/templates.yaml +3 -0
  39. data/lib/asker/lang/locales/ruby/connectors.yaml +11 -0
  40. data/lib/asker/lang/locales/ruby/mistakes.yaml +33 -0
  41. data/lib/asker/lang/locales/ruby/templates.yaml +3 -0
  42. data/lib/asker/lang/locales/sql/connectors.yaml +6 -0
  43. data/lib/asker/lang/locales/sql/mistakes.yaml +11 -0
  44. data/lib/asker/lang/locales/sql/templates.yaml +2 -0
  45. data/lib/asker/loader/input_loader.rb +22 -5
  46. data/lib/asker/loader/project_loader.rb +25 -24
  47. data/lib/asker/logger.rb +1 -2
  48. data/lib/asker/project.rb +5 -3
  49. data/lib/asker/skeleton.rb +25 -24
  50. metadata +47 -63
  51. data/docs/changelog/v2.1.md +0 -99
  52. data/docs/commands.md +0 -12
  53. data/docs/contributions.md +0 -18
  54. data/docs/history.md +0 -40
  55. data/docs/idea.md +0 -44
  56. data/docs/inputs/README.md +0 -39
  57. data/docs/inputs/code.md +0 -69
  58. data/docs/inputs/concepts.md +0 -142
  59. data/docs/inputs/jedi.md +0 -68
  60. data/docs/inputs/tables.md +0 -112
  61. data/docs/inputs/templates.md +0 -87
  62. data/docs/install/README.md +0 -38
  63. data/docs/install/manual.md +0 -26
  64. data/docs/install/scripts.md +0 -38
  65. data/docs/revise/asker-file.md +0 -41
  66. data/docs/revise/buenas-practicas/01-convocatoria.md +0 -30
  67. data/docs/revise/buenas-practicas/02-formulario.md +0 -35
  68. data/docs/revise/buenas-practicas/03-descripcion.md +0 -63
  69. data/docs/revise/buenas-practicas/04-resultados.md +0 -17
  70. data/docs/revise/buenas-practicas/05-reproducir.md +0 -10
  71. data/docs/revise/ejemplos/01/README.md +0 -27
  72. data/docs/revise/ejemplos/02/README.md +0 -31
  73. data/docs/revise/ejemplos/03/README.md +0 -31
  74. data/docs/revise/ejemplos/04/README.md +0 -37
  75. data/docs/revise/ejemplos/05/README.md +0 -25
  76. data/docs/revise/ejemplos/06/README.md +0 -43
  77. data/docs/revise/ejemplos/README.md +0 -11
  78. data/docs/revise/projects.md +0 -74
  79. data/lib/asker/exporter/concept_screen_exporter.rb +0 -25
  80. data/lib/asker/exporter/main.rb +0 -9
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'terminal-table'
4
+ require_relative '../logger'
4
5
 
5
6
  # Export Code into Screen
6
- module CodeScreenExporter
7
- def self.export_all(codes)
8
- project = Project.instance
9
- return if project.show_mode == :none || codes.nil? || codes.size.zero?
7
+ module CodeDisplayer
8
+ def self.show(codes)
9
+ return if codes.nil? || codes.size.zero?
10
10
 
11
11
  total_c = total_q = total_e = 0
12
12
  my_screen_table = Terminal::Table.new do |st|
@@ -39,7 +39,7 @@ module CodeScreenExporter
39
39
  Rainbow((total_q / total_e.to_f).round(2)).bright]
40
40
  return unless total_c.positive?
41
41
 
42
- project.verboseln "\n[INFO] Showing CODE statistics"
43
- project.verboseln my_screen_table.to_s
42
+ Logger.verboseln "\n[INFO] Showing CODE statistics"
43
+ Logger.verboseln my_screen_table.to_s
44
44
  end
45
45
  end
@@ -1,28 +1,27 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'terminal-table'
4
+ require_relative '../logger'
4
5
 
5
- # Show ConceptAI info on screen
6
- class ConceptAIScreenExporter
7
- def self.export_all(concepts_ai)
8
- @concepts_ai = concepts_ai
9
- project = Project.instance
10
- return if project.show_mode == :none
11
-
6
+ # Display ConceptAI stat on screen
7
+ class ConceptAIDisplayer
8
+ ##
9
+ # Display ConceptAI stat on screen
10
+ # @param concepts_ai (Array)
11
+ def self.show(concepts_ai)
12
12
  # Create table HEAD
13
13
  screen_table = Terminal::Table.new do |st|
14
14
  st << ['Concept','Questions','Entries','xFactor',
15
15
  'd','b','f','i','s','t']
16
16
  st << :separator
17
17
  end
18
-
19
18
  # Create table BODY
20
19
  total = {}
21
20
  total[:q] = total[:e] = total[:c] = 0
22
21
  total[:sd] = total[:sb] = total[:sf] = 0
23
22
  total[:si] = total[:ss] = total[:st] = 0
24
23
 
25
- @concepts_ai.each do |concept_ai|
24
+ concepts_ai.each do |concept_ai|
26
25
  if concept_ai.process?
27
26
  e = concept_ai.texts.size
28
27
  concept_ai.tables.each { |t| e += t.fields.size * t.rows.size }
@@ -51,7 +50,7 @@ class ConceptAIScreenExporter
51
50
  return if total[:c] == 0 # No concepts to be process?
52
51
 
53
52
  # Add row with excluded questions
54
- export_excluded_questions(screen_table, @concepts_ai)
53
+ export_excluded_questions(screen_table, concepts_ai)
55
54
 
56
55
  # Create table TAIL
57
56
  screen_table.add_separator
@@ -62,10 +61,10 @@ class ConceptAIScreenExporter
62
61
  total[:sd], total[:sb], total[:sf],
63
62
  total[:si], total[:ss], total[:st]]
64
63
  export_notes
65
- project.verbose screen_table.to_s + "\n"
64
+ Logger.verbose "#{screen_table}\n"
66
65
  end
67
66
 
68
- def self.export_excluded_questions(screen_table, concepts_ai)
67
+ private_class_method def self.export_excluded_questions(screen_table, concepts_ai)
69
68
  # Create table BODY
70
69
  total = {}
71
70
  total[:q] = total[:c] = 0
@@ -94,22 +93,21 @@ class ConceptAIScreenExporter
94
93
  total[:ss], total[:st]]
95
94
  end
96
95
 
97
- def self.export_notes
98
- p = Project.instance
99
- p.verbose "\n[INFO] Showing CONCEPT statistics\n"
100
- p.verbose ' * Exclude questions: ' +
101
- Application.instance.config['questions']['exclude'].to_s
102
- p.verbose ' * Annotations:'
103
- p.verbose ' ├── (d) Definitions <= Concept.def'
104
- p.verbose ' ├── (b) Table Matching <= ' \
105
- 'Concept.table.rows.columns'
106
- p.verbose ' ├── (f) Tables 1 Field <= Concept.table.fields.size==1'
107
- p.verbose ' ├── (i) Images URL <= ' \
108
- "Concept.def{:type => 'image_url'}"
109
- p.verbose ' ├── (s) Sequences <= ' \
110
- "Concept.table{:sequence => '...'}"
111
- p.verbose ' └── (t) Table Rows&Cols <= ' \
112
- 'Concept.table.rows.columns'
113
- p.verbose "\n"
96
+ private_class_method def self.export_notes
97
+ Logger.verbose "\n[INFO] Showing CONCEPT statistics\n"
98
+ Logger.verbose ' * Exclude questions: ' +
99
+ Application.instance.config['questions']['exclude'].to_s
100
+ Logger.verbose ' * Annotations:'
101
+ Logger.verbose ' ├── (d) Definitions <= Concept.def'
102
+ Logger.verbose ' ├── (b) Table Matching <= ' \
103
+ 'Concept.table.rows.columns'
104
+ Logger.verbose ' ├── (f) Tables 1 Field <= Concept.table.fields.size==1'
105
+ Logger.verbose ' ├── (i) Images URL <= ' \
106
+ "Concept.def{:type => 'image_url'}"
107
+ Logger.verbose ' ├── (s) Sequences <= ' \
108
+ "Concept.table{:sequence => '...'}"
109
+ Logger.verbose ' └── (t) Table Rows&Cols <= ' \
110
+ 'Concept.table.rows.columns'
111
+ Logger.verbose "\n"
114
112
  end
115
113
  end
@@ -0,0 +1,27 @@
1
+
2
+ require_relative '../formatter/concept_string_formatter'
3
+ require_relative '../logger'
4
+
5
+ # Show Concept Data on screen
6
+ module ConceptDisplayer
7
+ ##
8
+ # Show concepts on screen
9
+ # @param concepts (Array)
10
+ # @param show_mode (Symbol)
11
+ def self.show(concepts, show_mode = :default)
12
+ return if show_mode == :none
13
+ msg = "\n[INFO] Showing concept data (#{Rainbow(show_mode).bright})"
14
+ Logger.verbose msg
15
+ case show_mode
16
+ when :resume
17
+ s = "* Concepts (#{concepts.count}): "
18
+ concepts.each { |c| s += c.name + ', ' }
19
+ Logger.verbose s
20
+ when :default
21
+ # Only show Concepts with process attr true
22
+ concepts.each do |c|
23
+ Logger.verbose ConceptStringFormatter.to_s(c) if c.process?
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,13 @@
1
+ require_relative 'concept_ai_displayer'
2
+ require_relative 'code_displayer'
3
+
4
+ # Display Stats on screen.
5
+ module StatsDisplayer
6
+ def self.show(data, show_mode)
7
+ return if show_mode == :none
8
+
9
+ # show_final_results
10
+ ConceptAIDisplayer.show(data[:concepts_ai])
11
+ CodeDisplayer.show(data[:codes])
12
+ end
13
+ end
@@ -1,31 +1,30 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../project'
4
3
  require_relative '../formatter/question_gift_formatter'
5
4
 
6
- # UNDER DEVELOPMENT
7
5
  # Use to export questions from Code to gift format
8
6
  module CodeGiftExporter
9
- def self.export_all(codes)
10
- codes.each do |code|
11
- code.make_questions
12
- export code
13
- end
7
+ ##
8
+ # Export an Array of codes to gift format file
9
+ # @param codes (Array)
10
+ def self.export_all(codes, file)
11
+ codes.each { |code| export(code, file) }
14
12
  end
15
13
 
16
- def self.export(code)
14
+ ##
15
+ # Export 1 code to gift format file
16
+ # @param code (Code)
17
+ def self.export(code, file)
17
18
  return false unless code.process?
18
19
 
19
- file = Project.instance.outputfile
20
20
  file.write head(code)
21
-
22
21
  code.questions.each do |question|
23
22
  file.write QuestionGiftFormatter.to_s(question)
24
23
  end
25
24
  true
26
25
  end
27
26
 
28
- def self.head(code)
27
+ private_class_method def self.head(code)
29
28
  s = "\n"
30
29
  s += '// ' + '=' * 50 + "\n"
31
30
  s += "// Code #{code.type}: #{code.filename} (#{code.questions.size})\n"
@@ -3,20 +3,20 @@
3
3
  require_relative '../project'
4
4
  require_relative '../formatter/question_gift_formatter'
5
5
 
6
- # Use to export data from ConceptIA to gift format
6
+ # Export ConceptIA data to gift to outputfile
7
7
  module ConceptAIGiftExporter
8
- def self.export_all(concepts_ai)
9
- concepts_ai.each { |concept_ai| export(concept_ai) }
8
+ ##
9
+ # Export list of ConceptAI into outpufile
10
+ def self.export_all(concepts_ai, project)
11
+ concepts_ai.each { |concept_ai| export(concept_ai, project) }
10
12
  end
11
-
12
- def self.export(concept_ai)
13
+
14
+ def self.export(concept_ai, project)
13
15
  return unless concept_ai.process?
14
16
 
15
- file = Project.instance.outputfile
17
+ file = project.get(:outputfile)
16
18
  file.write head(concept_ai.name)
17
-
18
- stages = Project.instance.stages
19
- stages.each_key do |stage|
19
+ project.stages.each_key do |stage|
20
20
  concept_ai.questions[stage].each do |question|
21
21
  file.write(QuestionGiftFormatter.to_s(question))
22
22
  end
@@ -1,21 +1,19 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  require 'yaml'
4
- require_relative '../project'
5
4
  require_relative '../formatter/question_hash_formatter'
6
5
 
7
6
  # Use to export data from ConceptIA to YAML format
8
7
  module ConceptAIYAMLExporter
9
- def self.export_all(concepts_ai)
8
+ def self.export_all(concepts_ai, project)
10
9
  questions = []
11
10
  concepts_ai.each do |concept_ai|
12
11
  questions += get_questions_from concept_ai
13
12
  end
14
- project = Project.instance
15
13
  params = { lang: project.get(:lang) ,
16
14
  projectname: project.get(:projectname) }
17
15
  output = { params: params, questions: questions }
18
- project.yamlfile.write(output.to_yaml)
16
+ project.get(:yamlfile).write(output.to_yaml)
19
17
  end
20
18
 
21
19
  def self.get_questions_from(concept_ai)
@@ -1,21 +1,15 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
- require_relative '../project'
4
3
  require_relative '../formatter/concept_doc_formatter'
5
4
 
6
- class ConceptDocExporter
7
-
8
- def initialize(concepts)
9
- @concepts = concepts
10
- end
11
-
12
- def export
13
- file = Project.instance.lessonfile
14
- @concepts.each do |concept|
15
- if concept.process
16
- file.write(ConceptDocFormatter.to_s(concept))
17
- end
5
+ ##
6
+ # Export Concept to Doc file
7
+ module ConceptDocExporter
8
+ ##
9
+ # Export arrya of concepts to doc
10
+ def self.export_all(concepts, file)
11
+ concepts.each do |concept|
12
+ file.write(ConceptDocFormatter.to_s(concept)) if concept.process
18
13
  end
19
14
  end
20
-
21
15
  end
@@ -0,0 +1,18 @@
1
+ require_relative 'concept_ai_gift_exporter'
2
+ require_relative 'code_gift_exporter'
3
+ require_relative 'concept_ai_yaml_exporter'
4
+ require_relative 'concept_doc_exporter'
5
+
6
+ # Export Output data:
7
+ # * Gift (ConceptAI, Code)
8
+ # * YAML
9
+ # * Doc (txt)
10
+ module OutputFileExporter
11
+ def self.export(data, project)
12
+ ConceptAIGiftExporter.export_all(data[:concepts_ai], project)
13
+ # UNDER DEVELOPMENT
14
+ CodeGiftExporter.export_all(data[:codes], project.get(:outputfile))
15
+ ConceptAIYAMLExporter.export_all(data[:concepts_ai], project)
16
+ ConceptDocExporter.export_all(data[:concepts], project.get(:lessonfile))
17
+ end
18
+ end
@@ -1,13 +1,30 @@
1
- %map{ :lang => 'en', :context => 'list,of,words,to,define,context', :version => '1'}
1
+ %map{ :lang => 'en', :context => 'music, band', :version => '1'}
2
2
 
3
3
  %concept
4
- %names Example1
5
- %tags list,of,words,to,define,this,concept
6
- %def Definition 1 of Example1
4
+ %names AC/DC, ACDC
5
+ %tags single, seat, leg, backrest
6
+ %tags rock, band, australia
7
+ %def Australian rock band formed by Scottish-born brothers Malcolm and Angus Young
8
+ %table{ :fields => 'members'}
9
+ %row Bon Scott
10
+ %row Angus Young
11
+ %row Malcolm Young
12
+ %row Phil Rudd
13
+ %row Cliff Williams
7
14
  %table{ :fields => 'attribute, value'}
8
15
  %row
9
- %col attr1
10
- %col value1
16
+ %col Genres
17
+ %col Hard rock blues rock rock and roll
11
18
  %row
12
- %col attr2
13
- %col value2
19
+ %col Years active
20
+ %col 1973-present
21
+ %row
22
+ %col Formed in
23
+ %col Sydney
24
+ %table{ :fields => 'Albums', :sequence => 'Albums sorted by date'}
25
+ %row Albums High Voltage
26
+ %row Powerage
27
+ %row Highway to Hell
28
+ %row Back in Black
29
+ %row Ballbreaker
30
+ %row Rock or Bust
@@ -11,14 +11,14 @@ module ConceptStringFormatter
11
11
  # @return String
12
12
  def self.to_s(concept)
13
13
  tt = Terminal::Table.new
14
- rows = get_tt_rows(concept)
15
- rows.each { |row| tt.add_row row }
14
+ get_tt_rows(concept).each { |row| tt.add_row row }
16
15
  "#{tt}\n"
17
16
  end
18
17
 
19
18
  # rubocop:disable Metrics/AbcSize
20
19
  # rubocop:disable Metrics/MethodLength
21
- def self.get_tt_rows(concept)
20
+ # rubocop:disable Layout/LineLength
21
+ private_class_method def self.get_tt_rows(concept)
22
22
  rows = []
23
23
  rows << [Rainbow(concept.id.to_s).bright,
24
24
  Rainbow(concept.name(:screen)).white.bg(:blue).bright +
@@ -31,14 +31,15 @@ module ConceptStringFormatter
31
31
  rows << [Rainbow('Referenced by').blue,
32
32
  concept.referenced_by.join(', ')[0...70].to_s]
33
33
  rows << format_texts(concept)
34
- rows << [Rainbow('.def(images)').blue, concept.images.size.to_s]
35
- rows << format_tables(concept)
34
+ rows << [Rainbow('.def(images)').blue, concept.images.size.to_s] unless concept.images.size.zero?
35
+ rows << format_tables(concept) unless concept.tables.count.zero?
36
36
  rows << format_neighbors(concept)
37
37
  end
38
38
  # rubocop:enable Metrics/AbcSize
39
39
  # rubocop:enable Metrics/MethodLength
40
+ # rubocop:enable Layout/LineLength
40
41
 
41
- def self.format_texts(concept)
42
+ private_class_method def self.format_texts(concept)
42
43
  list = []
43
44
  concept.texts.each do |i|
44
45
  if i.size < 60
@@ -50,14 +51,14 @@ module ConceptStringFormatter
50
51
  [Rainbow('.def(text)').blue, list.join("\n")]
51
52
  end
52
53
 
53
- def self.format_tables(concept)
54
+ private_class_method def self.format_tables(concept)
54
55
  return [] if concept.tables.count.zero?
55
56
 
56
57
  list = concept.tables.map(&:to_s)
57
58
  [Rainbow('.tables').color(:blue), list.join("\n")]
58
59
  end
59
60
 
60
- def self.format_neighbors(concept)
61
+ private_class_method def self.format_neighbors(concept)
61
62
  list = concept.neighbors[0..4].map do |i|
62
63
  i[:concept].name(:screen) + '(' + i[:value].to_s[0..4] + ')'
63
64
  end
@@ -3,6 +3,7 @@
3
3
  require 'erb'
4
4
  require 'yaml'
5
5
  require_relative 'text_actions'
6
+ require_relative '../logger'
6
7
 
7
8
  # Lang#lang
8
9
  class Lang
@@ -27,9 +28,8 @@ class Lang
27
28
  begin
28
29
  @templates = YAML.load(File.new(filename))
29
30
  rescue StandardError => e
30
- p = Project.instance
31
- p.vervose "[ERROR] lang.initialize(): Reading YAML file <#{filename}>"
32
- p.vervose "[ADVISE] Revise apostrophe into string without \\ char\n"
31
+ Logger.verboseln "[ERROR] lang.initialize(): Reading YAML file <#{filename}>"
32
+ Logger.verboseln "[ADVISE] Revise apostrophe into string without \\ char\n"
33
33
  raise e
34
34
  end
35
35
  filename = File.join(dirbase, 'locales', @code, 'connectors.yaml')
@@ -38,5 +38,4 @@ class Lang
38
38
  filename = File.join(dirbase, 'locales', @code, 'mistakes.yaml')
39
39
  @mistakes = YAML.load(File.new(filename))
40
40
  end
41
-
42
41
  end
@@ -0,0 +1,50 @@
1
+ ---
2
+ :none: keine Antwort ist richtig
3
+ :error: Fehler
4
+ :misspelling: Rechtschreibfehler
5
+ :true: richtig
6
+ :false: falsch
7
+ :d1: 'Bedeutung \: <i><%=text1%></i><br/> Wählen Sie die dazu passende Option aus, die am besten zu der vorstehenden Bedeutung passt.<br/>'
8
+ :d2: 'Bedeutung des Begriffs <b><%=text1%></b>\:<br/> <i><%=text2%></i><br/>'
9
+ :d3: 'Bedeutung des Begriffs <b><%=text1%></b>\:<br/> <i><%=text2%></i><br/></br><p> Bemerkung: Ein Fragezeichnen stellt einen Buchstaben dar, und ein Sternchen steht für ein Wort oder mehrere Wörter.</p>'
10
+ :d4: 'Bedeutung des Begriffs <b><%=text1%></b>\:<br/> <i><%=text2%></i><br/><br/>(Setzen Sie die Wörter in die Lücken ein)'
11
+
12
+ :b1: 'En relación al concepto <b><%=text1%></b>, asocia cada "<%=text2%>" con su "<%=text3%>".<br/>'
13
+ :f1: 'Los siguientes elementos son "<%=text2%>" del concepto <b><%=text1%></b>\:<ul><li><%=text3%></li></ul>'
14
+ :f2: 'Los siguientes elementos son "<%=text2%>".<br/>Selecciona la opción que no pertenezca al concepto <b><%=text1%></b>.'
15
+ :f3: 'Los siguientes elementos son "<%=text2%>" del concepto <b><%=text1%></b>\:<br><p><%=text3%></p>(Coloca cada palabra en su posición correcta dentro del texto)'
16
+ :i1: '<img src="<%=text1%>" alt\="image" width="400" height="300"><br/>Elige la opción que mejor se corresponda con la imagen anterior.<br/>'
17
+ :i2: '<img src="<%=text1%>" alt\="image" width="400" height="300"><br/>La imagen anterior corresponde a <b><%=text2%></b>.'
18
+ :i3: '<img src="<%=text1%>" alt\="image" width="400" height="300"><br/>Escribe la opción <%=text2%>, que mejor corresponda con la imagen anterior.<br/>'
19
+ :i4: '<img src="<%=text1%>" alt\="image" width="400" height="300"><br/>Definición\: <i><%=text2%></i><br/><br/>(Coloca cada palabra en su posición correcta dentro del texto)'
20
+ :s1: 'En relación al concepto <b><%=text1%></b>, ordena cada "<%=text2%>" de modo que se cumpla el criterio "<%=text3%>".<br/>'
21
+ :t1table: 'Concepto <b><%=text1%></b><br/><%=text2%>\: [*]<br/><%=text3%>\: "<%=text4%>"<br/>Elige la opción correcta.<br/>'
22
+ :t2table: 'Concepto <b><%=text1%></b><br/><%=text2%>\: [*]<br/><%=text3%>\: "<%=text4%>"<br/>Elige la opción correcta.<br/>'
23
+ :t3table: 'Concepto <b><%=text1%></b><br/><%=text2%>\: "<%=text3%>"<br/><%=text4%>: [*]<br/>Elige la opción correcta.<br/>'
24
+ :t4table: 'Concepto <b><%=text1%></b><br/><%=text2%>\: "<%=text3%>"<br/><%=text4%>: [*]<br/>Elige la opción correcta.<br/>'
25
+ :t5table: 'Concepto <b><%=text1%></b><br/>La asociación siguiente es correcta\:<br/><ul><li><%=text2%>\: "<%=text3%>"</li><li><%=text4%>\: "<%=text5%>"</li></ul>'
26
+ :t6table: 'Concepto <b><%=text1%></b><br/>La asociación siguiente es correcta\:<br/><ul><li><%=text2%>\: "<%=text3%>"</li><li><%=text4%>\: "<%=text5%>"</li></ul>'
27
+ :t7table: 'Concepto <b><%=text1%></b><br/>La asociación siguiente es correcta\:<br/><ul><li><%=text2%>\: "<%=text3%>"</li><li><%=text4%>\: "<%=text5%>"</li></ul>'
28
+ :t8table: 'Concepto <b><%=text1%></b><br/>Completa la siguiente asociación\:<br/><ul><li><%=text2%>\: "<%=text3%>"</li><li><%=text4%>\: [*]</li></ul>Escribir una palabra.<br/>'
29
+ :t9table: 'Concepto <b><%=text1%></b><br/>Completa la siguiente asociación\:<br/><ul><li><%=text2%>\: "<%=text3%>"</li><li><%=text4%>\: <%=text5%></li></ul>Escribir <%=text6%> palabras.<br/>'
30
+ :code1: '<pre><%=text1%></pre><br/><p>Escribir el número de línea donde está el primer error. Escribir 0 si no hay ningún error.</p>'
31
+
32
+ B1: In Bezug auf den Begriff (+++++), verbinden Sie die passenden Begriffe.
33
+ F1: Die folgenden Elemente sind (+++++) des Begriffs (++++)
34
+ F2: Die folgenden Elemente sind (+++++) Wählen Sie die Antwortmöglichkeit aus, die nicht zum Begriff (++++) passt
35
+ F3: Die folgenden Elemente sind (+++++) des Begriffs (++++) (Setzen Sie die Wörter in die Lücken ein)
36
+ I1: Wählen Sie die Antwortmöglichkeit, die am besten zu dem gezeigten Bild passt.
37
+ I2: Das gezeigte Bild gehört zu (++++)
38
+ I3: Setzen Sie die Antwort ein (+++), die am besten zu dem gezeigten Bild passt.
39
+ I4: Bedeutung (Setzen Sie die Wörter in die Lücken ein)
40
+ S1: Beziehen Sie sich auf den Begriff (+++++) und ordnen Sie die richtigen Lösungen zu.
41
+ T1: Begriff / Wählen Sie die richtige Lösung aus.
42
+ T2: Begriff / Wählen Sie die richtige Lösung aus.
43
+ T3: Begriff / Wählen Sie die richtige Lösung aus.
44
+ T4: Begriff / Wählen Sie die richtige Lösung aus.
45
+ T5: Begriff / Die Lösung ist richtig
46
+ T6: Begriff / Die Lösung ist richtig
47
+ T7: Begriff / Die Lösung ist richtig
48
+ T8: Begriff / Vervollständigen Sie / Schreiben Sie einen Begriff
49
+ T9: Begriff / Verbinden Sie / Schreiben Sie fogende Begriffe
50
+ Code1: Nennen Sie die Nummer der Zeile, in der sich der erste Fehler befindet / Wenn es keinen Fehler gibt, setzen Sie 0 ein.