Class: Studium::CreatePdfFileForThisExamTopic

Inherits:
Base
  • Object
show all
Defined in:
lib/studium/pdf/create_pdf_file_for_this_exam_topic.rb

Overview

Studium::CreatePdfFileForThisExamTopic

Constant Summary collapse

NAMESPACE =
#

NAMESPACE

#
inspect
USE_THIS_FONT =
#

USE_THIS_FONT

We have to pick an existing font.

The following Array may be of help if you wish to pick another font:

["Courier", "Courier-Bold", "Courier-BoldOblique", "Courier-Oblique",
 "Helvetica", "Helvetica-Bold", "Helvetica-BoldOblique", "Helvetica-Oblique",
 "Symbol", "Times-Bold", "Times-BoldItalic", "Times-Italic", "Times-Roman",
 "ZapfDingbats", "Liberation"]
#
'Courier'
USE_THIS_FONT_SIZE =
#

USE_THIS_FONT_SIZE

#
10

Constants inherited from Base

Base::ARRAY_HTML_COLOURS_IN_USE, Base::CHECK_FOR_INCORRECT_ENTRIES_IN_THE_QUESTION_ANSWER_FILE_THAT_SHOULD_BE_COMMENTS, Base::COLOURS, Base::COMMON_YEAR_DAYS_IN_MONTH, Base::GRAY, Base::LEFT_PADDING, Base::N_CHARACTERS_PER_LINE, Base::UNICODE_RIGHT_ARROW

Constants included from Colours

Studium::Colours::COLOURS

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#add_proper_year_entry_to_this_line, #already_solved_this_lva_number?, #append_what_into, #available_topics_as_short_name, #average_grade, #bachelor_master_or_diploma, #base_dir?, #be_silent, #be_verbose?, #beautiful_url, #change_directory, #cheering_person, #cliner, #colour_for_ects_points, #colourize_percentage, #commandline_arguments?, #commandline_arguments_joined, #commandline_arguments_with_hyphens?, #convert_this_array_of_lectures_into_the_full_dataset, #copy, #cpruby, #create_directory, #create_file, #csv_file?, #current_month?, #datum?, #day_month_year, #debug?, #delete_file, #directory_of_the_exam_topics?, #directory_to_my_exam_topics, #directory_to_the_exam_topics?, #disable_colours, #disable_colours_globally, #do_not_be_verbose, #do_not_use_opn, #do_these_curricula_include_both_a_bachelor_and_a_master_curriculum?, #does_this_line_include_a_german_weekday?, #does_this_line_include_a_html_colour?, #e, #ecomment, #editor?, #ee, #enable_colours, #enable_colours_globally, #enable_debug, #encoding?, #english_to_german_weekday, #ensure_main_encoding, #ensure_that_the_log_directory_exists, #eparse, #erev, #esystem, #etomato, #exit_program, #expand_topic, #extract_dd_mm_yyyy, #file_lecture_information?, #file_read_with_proper_encoding, #filter_away_invalid_questions, #find_corresponding_exam_topic, #first_argument?, #first_non_hyphen_argument?, #from_curriculum_id_to_university, #german_date_notation, #german_weekday?, #german_weekdays?, #has_a_bachelor_curriculum?, #has_a_master_curriculum?, #has_this_exam_topic_been_solved?, #has_year_entry?, #hh_mm_ss_dd_mm_yyyy, #horizontal_bar?, #html_log_directory?, #is_a_master_lecture?, #is_a_weekday?, #is_connected_to_the_www?, #is_on_roebe?, #is_prüfungsimmanent?, #is_this_a_valid_html_colour?, #is_this_day_today?, #konsole_support?, #last_file?, #lectures_from_indi1, #lectures_from_indi2, #lectures_from_indi3, #lectures_from_indi4, #lectures_from_the_bachelor_genetik_curriculum, #lectures_from_the_individual_vektor_curricula, #load_yaml_dataset, #move_file, #n_days_difference_from_today_to_this_day, #no_ext_name, #no_file_at, #number_to_month, #obtain, #obtain_lectures_from_this_curriculum, #open_in_editor, #opnn, #path_to_exam_topic?, #read_dataset_from_a_curriculum_file, #read_in_exam_dataset_from_this_file, #read_this_file_with_default_encoding, #readlines_from_this_input_file, #register_sigint, #remove_empty_strings, #remove_escape_sequences, #remove_internal_comments, #remove_leading_comments, #remove_leading_weekday_names_from, #remove_newlines, #remove_tags_from_this_input, #rename_kde_konsole_tab, #rename_konsole_tab?, #replace_all_html_colours_in_this, #replace_bold_token_with_default_colour, #replace_italic_token_with_default_colour, #replace_italic_token_with_this_colour, #replace_regular_numbers_with_unicode_numbers, #replace_underline_token_with_default_colour, #replace_underline_token_with_this_colour, #return_all_bachelor_lectures, #return_all_exams_on_this_day, #return_all_numbers_from, #return_all_registered_curricula, #return_all_steop_lectures, #return_current_year, #return_dataset_for_this_topic, #return_dataset_from_this_curriculum_file, #return_dd_mm_yy_and_time_from, #return_directory_for, #return_ects_points_from_these_lectures, #return_either_grey_or_the_custom_colour_for_answers, #return_either_grey_or_the_custom_colour_for_questions, #return_file_for_this_curriculum, #return_german_name_for_this_english_month, #return_german_weekday_of?, #return_hh_mm_ss_from, #return_hour_from_this, #return_lectures_from_bachelor_vektor_curriculum, #return_lectures_with_at_the_least_one_upcoming_exam, #return_local_path_of_this_pwdstud, #return_lva_number_of_this_lecture, #return_month_fitting_to_this_input, #return_n_days_until_monday, #return_n_days_until_sunday, #return_n_exam_questions_in, #return_n_questions_were_answered_for_this_topic, #return_name_of_the_weekday, #return_name_of_this_curriculum, #return_name_of_this_curriculum_based_on_its_id_number, #return_opnn, #return_passed_courses, #return_pwd, #return_random_curriculum, #return_sanitized_dataset_from_the_file_lecture_information, #return_solved_lectures, #return_steop_lectures, #return_the_remote_homepage_url, #return_this_line_has_n_characters_as_html_colour_tags, #return_title_from_this_curriculum_file, #rev, #right_arrow?, #rinstall2, #roebe_exam_directory?, #ruby_src_dir_at_home?, #runmode?, #sanitize_this_topic, #sanitize_url, #select_lectures_with_this_key, #set_be_quiet, #set_be_verbose, #set_commandline_arguments, #set_commandline_mode, #set_runmode, #set_this_cd_alias_to, #set_www_mode, #sfancy, #shall_we_make_use_of_unicode_symbols?, #show_todays_date, #simp, #sort_these_lecture_names_by_time, #spacer, #swarn, #this_month_has_n_days?, #total_ects_points_passed, #translate_dd_mm_yyyy_to_weekday, #try_to_require_the_rcfiles, #turn_this_array_into_the_full_dataset, #unicode_blocks_line, #use_colours?, #use_opn?, #vertical_bar?, #web_liner, #weekday?, #weekdays?, #word_wrap, #write_what_into, #www_connection_is_unavailable, #www_mode?, #yaml_dir?

Methods included from Colours

#bold_blue, #bold_red, #bold_yellow, #cadetblue, #chartreuse, crimson, #darkgray, darkgreen, darkseagreen, deepskyblue, #deepskyblue, default_colour, #dimgray, disable_colours, #dodgerblue, e, #efancy, enable_colours, #ewarn, #forestgreen, gold, #grey, lightblue, lightgreen, #lightslategray, #lightsteelblue, #mediumorchid, #mediumseagreen, #oldlace, #olivedrab, orange, orangered, #orchid, palevioletred, #papayawhip, rev, royalblue, sdir, #sdir, sfancy, #sfancy, sfile, #sfile, simp, #simp, slateblue, steelblue, #steelblue, #swarn, swarn, #teal, turquoise, use_colours?, use_this_colour_for_exam_answers, use_this_colour_for_exam_questions, #yellow

Constructor Details

#initialize(commandline_arguments = nil, run_already = true) ⇒ CreatePdfFileForThisExamTopic

#

initialize

#


73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/studium/pdf/create_pdf_file_for_this_exam_topic.rb', line 73

def initialize(
    commandline_arguments = nil,
    run_already           = true
  )
  reset
  set_commandline_arguments(
    commandline_arguments
  )
  # ======================================================================= #
  # === Handle blocks given to this class next
  # ======================================================================= #
  if block_given?
    yielded = yield
    if yielded.is_a? Hash
      # =================================================================== #
      # === :may_we_exit_if_prawn_is_not_installed
      # =================================================================== #
      if yielded.has_key? :may_we_exit_if_prawn_is_not_installed
        set_may_we_exit_if_prawn_is_not_installed(
          yielded[:may_we_exit_if_prawn_is_not_installed]
        )
      end
    end
  end
  run if run_already
end

Class Method Details

.[](i = '') ⇒ Object

#

Studium::CreatePdfFileForThisExamTopic[]

#


286
287
288
# File 'lib/studium/pdf/create_pdf_file_for_this_exam_topic.rb', line 286

def self.[](i = '')
  new(i)
end

.set_the_exam_topic(i) ⇒ Object

#

Studium::CreatePdfFileForThisExamTopic.set_the_exam_topic

#


66
67
68
# File 'lib/studium/pdf/create_pdf_file_for_this_exam_topic.rb', line 66

def self.set_the_exam_topic(i)
  @the_exam_topic = i
end

.the_exam_topic?Boolean

#

Studium::CreatePdfFileForThisExamTopic.the_exam_topic?

#

Returns:

  • (Boolean)


59
60
61
# File 'lib/studium/pdf/create_pdf_file_for_this_exam_topic.rb', line 59

def self.the_exam_topic?
  @the_exam_topic
end

.to_windows_1252_encoding(i) ⇒ Object

#

to_windows_1252_encoding

#


179
180
181
182
183
# File 'lib/studium/pdf/create_pdf_file_for_this_exam_topic.rb', line 179

def self.to_windows_1252_encoding(i)
  i.encode(
    'Windows-1252', invalid: :replace, undef: :replace, replace: ''
  )
end

Instance Method Details

#consider_uploading_the_pdf_fileObject

#

consider_uploading_the_pdf_file

#


151
152
153
154
155
156
# File 'lib/studium/pdf/create_pdf_file_for_this_exam_topic.rb', line 151

def consider_uploading_the_pdf_file
  _ = @store_the_pdf_file_here
  if is_on_roebe? and File.exist?(_)
    Studium.upload_pdf(_)
  end
end

#do_require_prawn(may_we_exit_if_prawn_is_not_installed = @may_we_exit_if_prawn_is_not_installed) ⇒ Object

#

do_require_prawn (require prawn tag)

#


161
162
163
164
165
166
167
168
169
170
171
172
173
174
# File 'lib/studium/pdf/create_pdf_file_for_this_exam_topic.rb', line 161

def do_require_prawn(
    may_we_exit_if_prawn_is_not_installed = @may_we_exit_if_prawn_is_not_installed
  )
  begin
    require 'prawn'
    Prawn::Font::AFM.hide_m17n_warning = true
  rescue LoadError
    e 'prawn is not installed. Consider installing it via'
    e
    e '  gem install prawn'
    e
    exit if may_we_exit_if_prawn_is_not_installed
  end
end

#exam_topic?Boolean

#

exam_topic?

The first argument given will be the exam topic that is to be used.

#

Returns:

  • (Boolean)


124
125
126
127
# File 'lib/studium/pdf/create_pdf_file_for_this_exam_topic.rb', line 124

def exam_topic?
  _ = @commandline_arguments.first
  return find_corresponding_exam_topic(_)
end

#open_the_pdf_file_after_it_has_been_createdObject

#

open_the_pdf_file_after_it_has_been_created

This will open the .pdf file that was generated, but only on systems that have is_on_roebe? enabled - aka my home system.

#


142
143
144
145
146
# File 'lib/studium/pdf/create_pdf_file_for_this_exam_topic.rb', line 142

def open_the_pdf_file_after_it_has_been_created
  if File.exist?(@store_the_pdf_file_here) and is_on_roebe?
    open_this_pdf_file(@store_the_pdf_file_here)
  end
end

#open_this_pdf_file(i) ⇒ Object

#

open_this_pdf_file

#


211
212
213
214
# File 'lib/studium/pdf/create_pdf_file_for_this_exam_topic.rb', line 211

def open_this_pdf_file(i)
  require 'roebe'
  ::Roebe.open(i)
end

#resetObject

#

reset (reset tag)

#


103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/studium/pdf/create_pdf_file_for_this_exam_topic.rb', line 103

def reset
  super()
  # ======================================================================= #
  # === @namespace
  # ======================================================================= #
  @namespace = NAMESPACE
  # ======================================================================= #
  # === @shall_we_try_to_upload_the_pdf_file
  # ======================================================================= #
  @shall_we_try_to_upload_the_pdf_file = false
  # ======================================================================= #
  # === @may_we_exit_if_prawn_is_not_installed
  # ======================================================================= #
  @may_we_exit_if_prawn_is_not_installed = true
end

#runObject

#

run (run tag)

#


219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
# File 'lib/studium/pdf/create_pdf_file_for_this_exam_topic.rb', line 219

def run
  Studium::CreatePdfFileForThisExamTopic.set_the_exam_topic(exam_topic?)
  dataset = return_dataset_for_this_topic(the_exam_topic?)
  do_require_prawn
  opnn; e 'The exam topic was: '+sfancy(the_exam_topic?)
  @store_the_pdf_file_here = log_dir?+the_exam_topic?.to_s+'.pdf'
  opnn; e 'We will store at:'
  e
  e "  #{sfile(@store_the_pdf_file_here)}"
  e
  Prawn::Document.generate(@store_the_pdf_file_here) {
    font USE_THIS_FONT
    font_size USE_THIS_FONT_SIZE
    text(
      Studium::CreatePdfFileForThisExamTopic.to_windows_1252_encoding(
             'Exam topic: '+
             ::Studium::CreatePdfFileForThisExamTopic.the_exam_topic?.tr('_',' ').capitalize+
             N+N
      )
    )
    # ===================================================================== #
    # Iterate over our exam dataset next.
    # ===================================================================== #
    dataset.each {|this_exam_question_answer_line|
      # =================================================================== #
      # We will first modify this line a bit - remove trailing " []"
      # for instance.
      # =================================================================== #
      this_exam_question_answer_line = this_exam_question_answer_line.strip
      if this_exam_question_answer_line.end_with? ' []'
        this_exam_question_answer_line.sub!(/ \[\]$/,'')
      end
      if this_exam_question_answer_line.include?('<ud>') or
         this_exam_question_answer_line.include?('<u>') or
         this_exam_question_answer_line.include?('</')
        this_exam_question_answer_line = ::Studium.remove_tags(this_exam_question_answer_line)
      end
      _ = this_exam_question_answer_line
      # =================================================================== #
      # Handle URLs first, aka entries that include "http":
      # =================================================================== #
      if _.include? 'http'
        _ =~ /URL: (http.+)/
        match = $1.to_s.dup
        text(
          Studium::CreatePdfFileForThisExamTopic.to_windows_1252_encoding(
            "<link href='#{match}'>#{match}</link>"
          ),
          inline_format: true,
          style: :bold,
        )
      else
        indent(8) {
          text(
            Studium::CreatePdfFileForThisExamTopic.to_windows_1252_encoding(_)
          )
        }
      end
    }
  }
  open_the_pdf_file_after_it_has_been_created
  consider_uploading_the_pdf_file if @shall_we_try_to_upload_the_pdf_file
end

#set_may_we_exit_if_prawn_is_not_installed(i = true) ⇒ Object

#

set_may_we_exit_if_prawn_is_not_installed

#


204
205
206
# File 'lib/studium/pdf/create_pdf_file_for_this_exam_topic.rb', line 204

def set_may_we_exit_if_prawn_is_not_installed(i = true)
  @may_we_exit_if_prawn_is_not_installed = i
end

#store_where?Boolean

#

store_where?

#

Returns:

  • (Boolean)


197
198
199
# File 'lib/studium/pdf/create_pdf_file_for_this_exam_topic.rb', line 197

def store_where?
  @store_the_pdf_file_here
end

#the_exam_topic?Boolean

#

the_exam_topic?

#

Returns:

  • (Boolean)


132
133
134
# File 'lib/studium/pdf/create_pdf_file_for_this_exam_topic.rb', line 132

def the_exam_topic?
  Studium::CreatePdfFileForThisExamTopic.the_exam_topic?
end

#to_windows_1252_encoding(i) ⇒ Object

#

to_windows_1252_encoding

#


188
189
190
191
192
# File 'lib/studium/pdf/create_pdf_file_for_this_exam_topic.rb', line 188

def to_windows_1252_encoding(i)
  i.encode(
    'Windows-1252', invalid: :replace, undef: :replace, replace: ''
  )
end