class Spreadtheword::LaTeX
Public Class Methods
new(title, author, topics, getTranslation, gitlab)
click to toggle source
# File lib/spreadtheword/latex.rb, line 4 def initialize title, author, topics, getTranslation, gitlab @title = title @author = author @topics = topics @getTranslation = getTranslation @gitlab = gitlab end
Public Instance Methods
escape(str)
click to toggle source
# File lib/spreadtheword/latex.rb, line 161 def escape str return 'N/A' unless str.present? if @getTranslation && str =~ Spreadtheword::NONASCII str = @getTranslation.call(str) end str.gsub(Spreadtheword::NONASCII, '').gsub('\\', '\\textbackslash ').gsub('&', '\\\&').gsub('%', '\\%').gsub('$', '\\$').gsub('#', '\\#').gsub('_', '\\_').gsub('{', '\\{').gsub('}', '\\}').gsub('~', '\\textasciitilde ').gsub('^', '\\textasciicircum ') end
printDevelopers(values)
click to toggle source
# File lib/spreadtheword/latex.rb, line 102 def printDevelopers(values) developers = {} values.each do |x| developers[x[:commit].author] ||= [] developers[x[:commit].author] << x end ret = %Q_ \\subsection{Developers} \\begin{enumerate} _ devArr = developers.map do |k,v| [ v.size, %Q_ \\item #{escape k.titleize} ($#{format('%.2f', v.size*100.0 / values.size)}\\%$) _, k, v ] end devArr.sort! do |x,y| y[0] <=> x[0] end devArr.each do |x| ret += x[1] end ret += %Q_ \\end{enumerate} _ devArr.each do |dev| k = dev[2] v = dev[3] ret += %Q_ \\subsection{#{escape k.titleize}'s Commit Messages} \\begin{enumerate} _ reverseH = {} uniqM = v.map do |x| msg = x[:commit].msg.to_s.strip.humanize reverseH[msg] = x msg end.uniq.sort uniqM.each do |msg| x = reverseH[msg] if @gitlab ret += %Q_ \\item \\href{#{@gitlab.scheme}://#{@gitlab.host}/#{x[:commit].gitlabProject[:namespace]}/#{x[:commit].gitlabProject[:project]}/commit/#{x[:commit].shaHash}}{#{escape msg}} _ else ret += %Q_ \\item #{escape msg} _ end end ret += %Q_ \\end{enumerate} _ end ret end
sections()
click to toggle source
# File lib/spreadtheword/latex.rb, line 49 def sections ret = '' @topics.each do |topic| k=topic[0] v=topic[1] next if k.nil? first = v[0] title = k description = '' url = '' if :gitlab == first[:origin] title = first[:title] description = first[:payload].description url = first[:payload].web_url elsif :wrike == first[:origin] title = first[:title] description = Nokogiri::HTML(first[:payload]['description'].gsub('<br />', "\n\n")).text url = first[:payload][:spreadthewordPermalink] end ret += %Q_ \\section{#{escape title.titleize}} \\subsection{Background} \\url{#{escape url}} _ if description.present? description.strip! description[0] = description[0].upcase ret += %Q_ \\subsection{Description} #{escape description} _ end ret += printDevelopers(v) ret += %Q_ \\newpage _ end topicNil = @topics.find{|x| x[0].nil?} if topicNil ret += %Q_ \\section{Others} _ ret += printDevelopers(topicNil[1]) end ret end
write!()
click to toggle source
# File lib/spreadtheword/latex.rb, line 12 def write! puts %Q_ % !TEX TS-program = pdflatex % !TEX encoding = UTF-8 Unicode \\documentclass[11pt]{article} % use larger type; default would be 10pt \\usepackage{hyperref} \\usepackage[utf8]{inputenc} % set input encoding (not needed with XeLaTeX) \\usepackage{geometry} % to change the page dimensions \\geometry{a4paper} % or letterpaper (US) or a5paper or.... \\usepackage{graphicx} % support the \\includegraphics command and options \\usepackage{booktabs} % for much better looking tables \\usepackage{array} % for better arrays (eg matrices) in maths \\usepackage{paralist} % very flexible & customisable lists (eg. enumerate/itemize, etc.) \\usepackage{verbatim} % adds environment for commenting out blocks of text & for better verbatim \\usepackage{subfig} % make it possible to include more than one captioned figure/table in a single float \\usepackage{fancyhdr} % This should be set AFTER setting up the page geometry \\pagestyle{fancy} % options: empty , plain , fancy \\renewcommand{\\headrulewidth}{0pt} % customise the layout... \\lhead{}\\chead{}\\rhead{} \\lfoot{}\\cfoot{\\thepage}\\rfoot{} \\usepackage[nottoc,notlof,notlot]{tocbibind} % Put the bibliography in the ToC \\usepackage[titles,subfigure]{tocloft} % Alter the style of the Table of Contents \\renewcommand{\\cftsecfont}{\\rmfamily\\mdseries\\upshape} \\renewcommand{\\cftsecpagefont}{\\rmfamily\\mdseries\\upshape} % No bold! \\title{#{@title}} \\author{#{@author}} \\begin{document} \\maketitle \\setcounter{tocdepth}{1} \\tableofcontents \\newpage #{sections} \\end{document} _ end