sskatex 0.9.20 → 0.9.23
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.
- checksums.yaml +4 -4
 - data/lib/sskatex.rb +70 -54
 - data/test/test_all.rb +1 -2
 - metadata +2 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: e2480466e5a2d88c34e63efd8c390690826d19ea
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 2546f31dd06272e182cbacba9670143ada7239f9
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: c5432c7f576e02bf636f938dda1dd891118c8e75b8abb530df630a6a5eb8bb7db0ceb01ae21c9a0b3efa88f3c2f78303a5e048c58cc42d4ec260c60dcad366fd
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 06ac0855602e741da342d1186b2131cbacb2ff73de1fcba000bcb31efb88b2176518168f4d48305553786489c2bcc3cedc3c77b468869f9685191fc333b617fe
         
     | 
    
        data/lib/sskatex.rb
    CHANGED
    
    | 
         @@ -159,11 +159,10 @@ class SsKaTeX 
     | 
|
| 
       159 
159 
     | 
    
         
             
                end
         
     | 
| 
       160 
160 
     | 
    
         
             
              end
         
     | 
| 
       161 
161 
     | 
    
         | 
| 
       162 
     | 
    
         
            -
              # This can be used for monitoring or debugging.  
     | 
| 
      
 162 
     | 
    
         
            +
              # This can be used for monitoring or debugging. Must be either +nil+ or a
         
     | 
| 
       163 
163 
     | 
    
         
             
              #     proc {|level, &block| ...}
         
     | 
| 
       164 
     | 
    
         
            -
              # the  
     | 
| 
       165 
     | 
    
         
            -
              # 
     | 
| 
       166 
     | 
    
         
            -
              # with the log message constructed in the given block. _level_ is one of:
         
     | 
| 
      
 164 
     | 
    
         
            +
              # where the _block_ is used for on-demand construction of the log message.
         
     | 
| 
      
 165 
     | 
    
         
            +
              # _level_ is one of:
         
     | 
| 
       167 
166 
     | 
    
         
             
              #
         
     | 
| 
       168 
167 
     | 
    
         
             
              # +:verbose+::
         
     | 
| 
       169 
168 
     | 
    
         
             
              #   For information about the effective engine configuration.
         
     | 
| 
         @@ -172,11 +171,30 @@ class SsKaTeX 
     | 
|
| 
       172 
171 
     | 
    
         
             
              #   For the Javascript expressions used when converting TeX.
         
     | 
| 
       173 
172 
     | 
    
         
             
              #   Issued once per TeX snippet.
         
     | 
| 
       174 
173 
     | 
    
         
             
              #
         
     | 
| 
       175 
     | 
    
         
            -
              # For example, to  
     | 
| 
       176 
     | 
    
         
            -
              #      
     | 
| 
       177 
     | 
    
         
            -
              #  
     | 
| 
      
 174 
     | 
    
         
            +
              # For example, to trace +:verbose+ but not +:debug+ messages, set #logger to
         
     | 
| 
      
 175 
     | 
    
         
            +
              #     lambda {|level, &block| warn(block.call) if level == :verbose}
         
     | 
| 
      
 176 
     | 
    
         
            +
              # If #logger is +nil+, no logging will be done.
         
     | 
| 
       178 
177 
     | 
    
         
             
              attr_accessor :logger
         
     | 
| 
       179 
178 
     | 
    
         | 
| 
      
 179 
     | 
    
         
            +
              protected
         
     | 
| 
      
 180 
     | 
    
         
            +
             
     | 
| 
      
 181 
     | 
    
         
            +
              # Generic shortcut for logging
         
     | 
| 
      
 182 
     | 
    
         
            +
              def log(logger = @logger, level, &msg)
         
     | 
| 
      
 183 
     | 
    
         
            +
                logger.call(level, &msg) if logger
         
     | 
| 
      
 184 
     | 
    
         
            +
              end
         
     | 
| 
      
 185 
     | 
    
         
            +
             
     | 
| 
      
 186 
     | 
    
         
            +
              # Shortcut for logging debug-level messages
         
     | 
| 
      
 187 
     | 
    
         
            +
              def logd(logger = @logger, &msg)
         
     | 
| 
      
 188 
     | 
    
         
            +
                log(logger, :debug, &msg)
         
     | 
| 
      
 189 
     | 
    
         
            +
              end
         
     | 
| 
      
 190 
     | 
    
         
            +
             
     | 
| 
      
 191 
     | 
    
         
            +
              # Shortcut for logging verbose-level messages
         
     | 
| 
      
 192 
     | 
    
         
            +
              def logv(logger = @logger, &msg)
         
     | 
| 
      
 193 
     | 
    
         
            +
                log(logger, :verbose, &msg)
         
     | 
| 
      
 194 
     | 
    
         
            +
              end
         
     | 
| 
      
 195 
     | 
    
         
            +
             
     | 
| 
      
 196 
     | 
    
         
            +
              public
         
     | 
| 
      
 197 
     | 
    
         
            +
             
     | 
| 
       180 
198 
     | 
    
         
             
              # A dictionary with the used configuration options.
         
     | 
| 
       181 
199 
     | 
    
         
             
              # The resulting effective option values can be read from the same-named
         
     | 
| 
       182 
200 
     | 
    
         
             
              # attributes #katex_js, #katex_opts, #js_dir, #js_libs, #js_run.
         
     | 
| 
         @@ -203,44 +221,45 @@ class SsKaTeX 
     | 
|
| 
       203 
221 
     | 
    
         
             
                @config = cfg
         
     | 
| 
       204 
222 
     | 
    
         
             
              end
         
     | 
| 
       205 
223 
     | 
    
         | 
| 
       206 
     | 
    
         
            -
              # Create a new instance configured with keyword arguments 
     | 
| 
       207 
     | 
    
         
            -
              # The  
     | 
| 
       208 
     | 
    
         
            -
              #  
     | 
| 
       209 
     | 
    
         
            -
              #  
     | 
| 
       210 
     | 
    
         
            -
               
     | 
| 
       211 
     | 
    
         
            -
             
     | 
| 
      
 224 
     | 
    
         
            +
              # Create a new instance configured with keyword arguments and optional logger.
         
     | 
| 
      
 225 
     | 
    
         
            +
              # The arguments are just stored by reference; no further action is taken until
         
     | 
| 
      
 226 
     | 
    
         
            +
              # parts of the configuration are actually needed in other method calls.
         
     | 
| 
      
 227 
     | 
    
         
            +
              # The dictionary with the keyword arguments can be accessed as #config.
         
     | 
| 
      
 228 
     | 
    
         
            +
              # The logger can be accessed as #logger.
         
     | 
| 
      
 229 
     | 
    
         
            +
              def initialize(cfg = {}, &logger)
         
     | 
| 
      
 230 
     | 
    
         
            +
                @logger = logger
         
     | 
| 
       212 
231 
     | 
    
         
             
                self.config = cfg
         
     | 
| 
       213 
232 
     | 
    
         
             
              end
         
     | 
| 
       214 
233 
     | 
    
         | 
| 
       215 
     | 
    
         
            -
              #  
     | 
| 
       216 
     | 
    
         
            -
              #  
     | 
| 
      
 234 
     | 
    
         
            +
              # Identifies the Javascript engine to be used. Defined identifiers include:
         
     | 
| 
      
 235 
     | 
    
         
            +
              # +:RubyRacer+, +:RubyRhino+, +:Duktape+, +:MiniRacer+, +:Node+,
         
     | 
| 
       217 
236 
     | 
    
         
             
              # +:JavaScriptCore+, +:Spidermonkey+, +:JScript+, +:V8+, and +:Disabled+;
         
     | 
| 
       218 
237 
     | 
    
         
             
              # that last one would raise an error on first run (by #js_context).
         
     | 
| 
       219 
238 
     | 
    
         
             
              # Which engines are actually available depends on your installation.
         
     | 
| 
       220 
239 
     | 
    
         
             
              #
         
     | 
| 
       221 
     | 
    
         
            -
              # #js_run is determined on demand as follows  
     | 
| 
       222 
     | 
    
         
            -
              # If #config[ +:js_run+ ] is not defined, the contents of the 
     | 
| 
       223 
     | 
    
         
            -
              # variable +EXECJS_RUNTIME+ will be considered instead; and if 
     | 
| 
       224 
     | 
    
         
            -
              # defined, an automatic choice will be made. For more information, 
     | 
| 
       225 
     | 
    
         
            -
              #  
     | 
| 
      
 240 
     | 
    
         
            +
              # #js_run is determined on first demand as follows, then logged and cached
         
     | 
| 
      
 241 
     | 
    
         
            +
              # for reuse. If #config[ +:js_run+ ] is not defined, the contents of the
         
     | 
| 
      
 242 
     | 
    
         
            +
              # environment variable +EXECJS_RUNTIME+ will be considered instead; and if
         
     | 
| 
      
 243 
     | 
    
         
            +
              # that is not defined, an automatic choice will be made. For more information,
         
     | 
| 
      
 244 
     | 
    
         
            +
              # use the logger to show +:verbose+ messages and consult the documentation of
         
     | 
| 
       226 
245 
     | 
    
         
             
              # ExecJS[https://github.com/rails/execjs#execjs].
         
     | 
| 
       227 
     | 
    
         
            -
               
     | 
| 
      
 246 
     | 
    
         
            +
              # If a block is given, it is used instead of the logger set with #logger=.
         
     | 
| 
      
 247 
     | 
    
         
            +
              def js_run(&logger)
         
     | 
| 
       228 
248 
     | 
    
         
             
                @js_run ||= begin
         
     | 
| 
       229 
     | 
    
         
            -
                   
     | 
| 
       230 
     | 
    
         
            -
             
     | 
| 
       231 
     | 
    
         
            -
                  log.call {"Available JS runtimes: #{Utils.js_runtimes.join(', ')}"}
         
     | 
| 
      
 249 
     | 
    
         
            +
                  logger ||= @logger
         
     | 
| 
      
 250 
     | 
    
         
            +
                  logv(logger) {"Available JS runtimes: #{Utils.js_runtimes.join(', ')}"}
         
     | 
| 
       232 
251 
     | 
    
         
             
                  jsrun = (@config[:js_run] ||
         
     | 
| 
       233 
252 
     | 
    
         
             
                           ENV_EXECJS_RUNTIME ||
         
     | 
| 
       234 
253 
     | 
    
         
             
                           Utils::JSRUN_TOSYM[ExecJS::Runtimes.best_available] ||
         
     | 
| 
       235 
254 
     | 
    
         
             
                           'Disabled').to_s.to_sym
         
     | 
| 
       236 
     | 
    
         
            -
                   
     | 
| 
      
 255 
     | 
    
         
            +
                  logv(logger) {"Selected JS runtime: #{jsrun}"}
         
     | 
| 
       237 
256 
     | 
    
         
             
                  jsrun
         
     | 
| 
       238 
257 
     | 
    
         
             
                end
         
     | 
| 
       239 
258 
     | 
    
         
             
              end
         
     | 
| 
       240 
259 
     | 
    
         | 
| 
       241 
     | 
    
         
            -
              # The +ExecJS::Runtime+ subclass  
     | 
| 
       242 
     | 
    
         
            -
              def js_runtime
         
     | 
| 
       243 
     | 
    
         
            -
                @js_runtime ||= Utils::JSRUN_FROMSYM[js_run]
         
     | 
| 
      
 260 
     | 
    
         
            +
              # The +ExecJS::Runtime+ subclass corresponding to #js_run(&logger).
         
     | 
| 
      
 261 
     | 
    
         
            +
              def js_runtime(&logger)
         
     | 
| 
      
 262 
     | 
    
         
            +
                @js_runtime ||= Utils::JSRUN_FROMSYM[js_run(&logger)]
         
     | 
| 
       244 
263 
     | 
    
         
             
              end
         
     | 
| 
       245 
264 
     | 
    
         | 
| 
       246 
265 
     | 
    
         
             
              # The path to a directory with Javascript helper files as specified by
         
     | 
| 
         @@ -304,51 +323,48 @@ class SsKaTeX 
     | 
|
| 
       304 
323 
     | 
    
         | 
| 
       305 
324 
     | 
    
         
             
              # The concatenation of the contents of the files in #js_libs, in #katex_js,
         
     | 
| 
       306 
325 
     | 
    
         
             
              # and a JS variable definition for #katex_opts, each item followed by a
         
     | 
| 
       307 
     | 
    
         
            -
              # newline. Created at first use 
     | 
| 
       308 
     | 
    
         
            -
              # before #js_context.
         
     | 
| 
       309 
     | 
    
         
            -
               
     | 
| 
      
 326 
     | 
    
         
            +
              # newline. Created at first use, with filenames and #katex_opts logged.
         
     | 
| 
      
 327 
     | 
    
         
            +
              # Can be used to validate JS contents before a #js_context is created.
         
     | 
| 
      
 328 
     | 
    
         
            +
              # If a block is given, it is used instead of the logger set with #logger=.
         
     | 
| 
      
 329 
     | 
    
         
            +
              def js_source(&logger)
         
     | 
| 
       310 
330 
     | 
    
         
             
                @js_source ||= begin
         
     | 
| 
       311 
     | 
    
         
            -
                   
     | 
| 
      
 331 
     | 
    
         
            +
                  logger ||= @logger
         
     | 
| 
       312 
332 
     | 
    
         | 
| 
       313 
     | 
    
         
            -
                  # Concatenate sources
         
     | 
| 
       314 
333 
     | 
    
         
             
                  js = ''
         
     | 
| 
       315 
334 
     | 
    
         
             
                  js_libs.each do |libfile|
         
     | 
| 
       316 
335 
     | 
    
         
             
                    absfile = File.expand_path(libfile, js_dir)
         
     | 
| 
       317 
     | 
    
         
            -
                     
     | 
| 
      
 336 
     | 
    
         
            +
                    logv(logger) {"Loading JS file: #{absfile}"}
         
     | 
| 
       318 
337 
     | 
    
         
             
                    js << IO.read(absfile, external_encoding: Encoding::UTF_8) << "\n"
         
     | 
| 
       319 
338 
     | 
    
         
             
                  end
         
     | 
| 
       320 
     | 
    
         
            -
                   
     | 
| 
      
 339 
     | 
    
         
            +
                  logv(logger) {"Loading KaTeX JS file: #{katex_js}"}
         
     | 
| 
       321 
340 
     | 
    
         
             
                  js << IO.read(katex_js, external_encoding: Encoding::UTF_8) << "\n"
         
     | 
| 
       322 
341 
     | 
    
         | 
| 
       323 
     | 
    
         
            -
                  # Initialize JS variable katex_opts
         
     | 
| 
       324 
342 
     | 
    
         
             
                  js_katex_opts = "var katex_opts = #{katex_opts.to_json}"
         
     | 
| 
       325 
     | 
    
         
            -
                   
     | 
| 
      
 343 
     | 
    
         
            +
                  logv(logger) {"JS eval: #{js_katex_opts}"}
         
     | 
| 
       326 
344 
     | 
    
         
             
                  js << js_katex_opts << "\n"
         
     | 
| 
       327 
345 
     | 
    
         
             
                end
         
     | 
| 
       328 
346 
     | 
    
         
             
              end
         
     | 
| 
       329 
347 
     | 
    
         | 
| 
       330 
     | 
    
         
            -
              # The JS engine context  
     | 
| 
       331 
     | 
    
         
            -
              #  
     | 
| 
       332 
     | 
    
         
            -
              def js_context
         
     | 
| 
       333 
     | 
    
         
            -
                @js_context ||= js_runtime.compile(js_source)
         
     | 
| 
      
 348 
     | 
    
         
            +
              # The JS engine context obtained by letting the #js_runtime(&logger) compile
         
     | 
| 
      
 349 
     | 
    
         
            +
              # the #js_source(&logger). Created at first use e.g. by #call.
         
     | 
| 
      
 350 
     | 
    
         
            +
              def js_context(&logger)
         
     | 
| 
      
 351 
     | 
    
         
            +
                @js_context ||= js_runtime(&logger).compile(js_source(&logger))
         
     | 
| 
       334 
352 
     | 
    
         
             
              end
         
     | 
| 
       335 
353 
     | 
    
         | 
| 
       336 
     | 
    
         
            -
              # Given a TeX math fragment _tex_  
     | 
| 
       337 
     | 
    
         
            -
              #  
     | 
| 
       338 
     | 
    
         
            -
              # KaTeX compile the math fragment. Return the resulting HTML string.
         
     | 
| 
      
 354 
     | 
    
         
            +
              # Given a TeX math fragment _tex_ and a boolean _display_mode_ (+true+ for
         
     | 
| 
      
 355 
     | 
    
         
            +
              # block, default +false+ for inline), run the JS engine (using #js_context)
         
     | 
| 
      
 356 
     | 
    
         
            +
              # and let KaTeX compile the math fragment. Return the resulting HTML string.
         
     | 
| 
       339 
357 
     | 
    
         
             
              # Can raise errors if something in the process fails.
         
     | 
| 
       340 
     | 
    
         
            -
               
     | 
| 
       341 
     | 
    
         
            -
             
     | 
| 
      
 358 
     | 
    
         
            +
              # If a block is given, it is used instead of the logger set with #logger=.
         
     | 
| 
      
 359 
     | 
    
         
            +
              def call(tex, display_mode = false, &logger)
         
     | 
| 
      
 360 
     | 
    
         
            +
                logger ||= @logger
         
     | 
| 
      
 361 
     | 
    
         
            +
                ctx = js_context(&logger)
         
     | 
| 
       342 
362 
     | 
    
         
             
                js = "tex_to_html(#{Utils.js_quote(tex)}, #{display_mode.to_json}, katex_opts)"
         
     | 
| 
       343 
     | 
    
         
            -
                 
     | 
| 
      
 363 
     | 
    
         
            +
                logd(logger) {"JS eval: #{js}"}
         
     | 
| 
       344 
364 
     | 
    
         
             
                ans = ctx.eval(js)
         
     | 
| 
       345 
     | 
    
         
            -
                 
     | 
| 
       346 
     | 
    
         
            -
            KaTeX conversion failed 
     | 
| 
       347 
     | 
    
         
            -
             
     | 
| 
       348 
     | 
    
         
            -
            #{tex}
         
     | 
| 
       349 
     | 
    
         
            -
            Output:
         
     | 
| 
       350 
     | 
    
         
            -
            #{ans}
         
     | 
| 
       351 
     | 
    
         
            -
            MSG
         
     | 
| 
      
 365 
     | 
    
         
            +
                unless ans && ans.start_with?('<') && ans.end_with?('>')
         
     | 
| 
      
 366 
     | 
    
         
            +
                  raise "KaTeX conversion failed!\nInput:\n#{tex}\nOutput:\n#{ans}"
         
     | 
| 
      
 367 
     | 
    
         
            +
                end
         
     | 
| 
       352 
368 
     | 
    
         
             
                ans
         
     | 
| 
       353 
369 
     | 
    
         
             
              end
         
     | 
| 
       354 
370 
     | 
    
         
             
            end
         
     | 
    
        data/test/test_all.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: sskatex
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.9. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.9.23
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Christian Cornelssen
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2017-11- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2017-11-23 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: execjs
         
     |