diff --git a/.env b/.env new file mode 100644 index 0000000..0065ce5 --- /dev/null +++ b/.env @@ -0,0 +1,4 @@ +PORT_PREFIX=80 +DOCKER_IMAGE=gdocs_server +APP_HOST_DIR=. +APP_DOCKER_DIR=/var/gdocs-export/ \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index dc97e7c..be03c24 100644 --- a/Dockerfile +++ b/Dockerfile @@ -35,3 +35,48 @@ RUN apt-get install -y pandoc EXPOSE 12736 WORKDIR /var/gdocs-export/ + + +## ADDITIONS FOR THE APACHE SERVER START HERE. ## +RUN apt-get update && apt-get install -y dialog apt-utils apache2 php5 php5-curl nano +RUN a2enmod rewrite && php5enmod curl +RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections + +# RUN echo 'LC_ALL="en_US.UTF-8"' > /etc/default/locale +# Set locale variables +RUN apt-get install -y locales +RUN locale-gen en_US en_US.UTF-8 +RUN dpkg-reconfigure locales + +#### RVM +# RUN apt-get install software-properties-common -y +# RUN apt-add-repository -y ppa:rael-gc/rvm -y +# RUN apt-get update -y +# RUN apt-get install rvm -y + + + +############################################################ +# Gdocs export server dependencies (Apache, PHP) +############################################################ +RUN ["useradd","-m","-g","www-data","gdocs"] +# Update the default apache site with the config we created. +COPY server/apache-config.conf /etc/apache2/sites-available/000-default.conf +COPY server/envvars /etc/apache2/envvars.bak +RUN cat /etc/apache2/envvars.bak | tr -s '\r' '\n' > /etc/apache2/envvars +RUN ["/bin/bash","-c","source /etc/apache2/envvars"] + + + + + + +# By default start up apache in the foreground, override with /bin/bash for interative. +CMD apachectl -D FOREGROUND + +# allow gdocs to run script as root +RUN printf "\ngdocs ALL=(root) NOPASSWD: /var/gdocs-export/server/scripts/web-convert-gdoc.sh\n" >> /etc/sudoers + + +ARG extra +RUN $extra \ No newline at end of file diff --git a/Makefile b/Makefile index f6ceb1f..4f2d062 100644 --- a/Makefile +++ b/Makefile @@ -1,76 +1,83 @@ +include .env #=============================================================================== # DEFAULT MAKE VARIABLES #=============================================================================== +AUTH_FILE=google-api-authorization.yaml -# defaults to "Test doc for gd-pandoc" -doc = https://docs.google.com/a/evolvingweb.ca/document/d/1dwYaiiy4P0KA7PvNwAP2fsPAf6qMMNzwaq8W66mwyds/edit#heading=h.4lk08p1hx3w +#DATE=$(eval DATE_DIR=$(shell date +%Y-%m)) +#DATE=$(shell date +%Y-%m) -outdir=build -doc_id = $(shell echo $(doc) | sed -e 's@^https.*document/d/@@' -e 's@/edit.*@@') -name = default -input_file = input/$(name).html -OUTPUT=$(outdir)/$(name) -auth_file = google-api-authorization.yaml -docker_workdir=/var/gdocs-export/ -docker_run_cmd = docker run -t -i -v `pwd`:$(docker_workdir) -p 12736:12736 dergachev/gdocs-export +FILE_NAME=default +THEME=sample + +INPUT_FILE_DIR=input +INPUT_FILE=$(INPUT_FILE_DIR)/$(FILE_NAME).html + +OUTPUT_DIR=build +OUTPUT_FILE_DIR=$(OUTPUT_DIR)/$(FILE_NAME) -# directory containing customized header.tex, etc... -theme = sample -all: convert #=============================================================================== # GOOGLE_DRIVE_API TARGETS +# run on Docker container #=============================================================================== install_auth_file: - cp $(workdir)$(auth_file) ~/.google-api.yaml + @cp ${APP_DOCKER_DIR}/${AUTH_FILE} ${APACHE_USER_HOME_DIR}/.google-api.yml +# Download google-api-authorization.yaml +# usage: +# make api_auth api_auth: bundle exec ruby bin/authorize.rb \ - $(CLIENT_ID) $(CLIENT_SECRET) \ + ${GOOGLE_CLIENT_ID} ${GOOGLE_CLIENT_SECRET} \ https://www.googleapis.com/auth/drive.readonly \ - > $(auth_file) + > $(AUTH_FILE) -api_download: install_auth_file +# Download HTML version of the Google document and store it in INPUT_FILE_DIR +# usage: +# make api_download DOC_ID=xxxxx FILE_NAME=xxx +api_download: #install_auth_file + # get DOC_ID from input bundle exec google-api execute \ - -u "https://docs.google.com/feeds/download/documents/export/Export?id=$(doc_id)&exportFormat=html" \ - > $(input_file) + -u "https://docs.google.com/feeds/download/documents/export/Export?id=$(DOC_ID)&exportFormat=html" \ + > $(INPUT_FILE_DIR)/$(FILE_NAME).html #=============================================================================== # PANDOC TARGETS +# run on Docker container #=============================================================================== - latex: - mkdir -p $(OUTPUT) - cp assets/default/* $(OUTPUT) - test -z "$(theme)" || cp assets/$(theme)/* $(OUTPUT) - cp $(input_file) $(OUTPUT)/in.html + mkdir -p $(OUTPUT_FILE_DIR) + cp assets/default/* $(OUTPUT_FILE_DIR) + test -z "$(THEME)" || cp assets/$(THEME)/* $(OUTPUT_FILE_DIR) + cp $(INPUT_FILE) $(OUTPUT_FILE_DIR)/in.html - bundle exec ruby -C$(OUTPUT) "$$PWD/lib/pandoc-preprocess.rb" in.html > $(OUTPUT)/preprocessed.html - pandoc --parse-raw $(OUTPUT)/preprocessed.html -t json > $(OUTPUT)/pre.json - cat $(OUTPUT)/pre.json | ./lib/pandoc-filter.py > $(OUTPUT)/post.json + bundle exec ruby -C$(OUTPUT_FILE_DIR) "$$PWD/lib/pandoc-preprocess.rb" in.html > $(OUTPUT_FILE_DIR)/preprocessed.html + pandoc --parse-raw $(OUTPUT_FILE_DIR)/preprocessed.html -t json > $(OUTPUT_FILE_DIR)/pre.json + cat $(OUTPUT_FILE_DIR)/pre.json | ./lib/pandoc-filter.py > $(OUTPUT_FILE_DIR)/post.json # use pandoc to create metadata.tex, main.tex (these are included by ew-template.tex) - pandoc $(OUTPUT)/post.json --no-wrap -t latex --template $(OUTPUT)/template-metadata.tex > $(OUTPUT)/metadata.tex - pandoc $(OUTPUT)/post.json --chapters --no-wrap -t latex > $(OUTPUT)/main.tex + pandoc $(OUTPUT_FILE_DIR)/post.json --no-wrap -t latex --template $(OUTPUT_FILE_DIR)/template-metadata.tex > $(OUTPUT_FILE_DIR)/metadata.tex + pandoc $(OUTPUT_FILE_DIR)/post.json --chapters --no-wrap -t latex > $(OUTPUT_FILE_DIR)/main.tex # must use -o with docx output format, since its binary - pandoc $(OUTPUT)/post.json -s -t docx -o $(OUTPUT)/$(name).docx - pandoc $(OUTPUT)/post.json -s -t rtf -o $(OUTPUT)/$(name).rtf + pandoc $(OUTPUT_FILE_DIR)/post.json -s -t docx -o $(OUTPUT_FILE_DIR)/$(FILE_NAME).docx + pandoc $(OUTPUT_FILE_DIR)/post.json -s -t rtf -o $(OUTPUT_FILE_DIR)/$(FILE_NAME).rtf pdf: # convert latex to PDF - echo "Created $(OUTPUT)/$(name).tex, compiling into $(name).pdf" + echo "Created $(OUTPUT_FILE_DIR)/$(FILE_NAME).tex, compiling into $(FILE_NAME).pdf" # rubber will set output PDF filename based on latex input filename - cp -f $(OUTPUT)/template.tex $(OUTPUT)/$(name).tex - ( cd $(OUTPUT); latexmk -pdf $(name)) + cp -f $(OUTPUT_FILE_DIR)/template.tex $(OUTPUT_FILE_DIR)/$(FILE_NAME).tex + ( cd $(OUTPUT_FILE_DIR); rubber --pdf $(FILE_NAME)) convert: latex pdf -diff: - /usr/bin/perl "`which latexdiff`" --flatten $(outdir)/$(before)/$(before).tex $(OUTPUT)/$(name).tex > $(OUTPUT)/diff.tex - (cd $(OUTPUT); latexmk -pdf diff) +# diff: +# /usr/bin/perl "`which latexdiff`" --flatten $(outdir)/$(before)/$(before).tex $(OUTPUT)/$(name).tex > $(OUTPUT)/diff.tex +# (cd $(OUTPUT); latexmk -pdf diff) #=============================================================================== @@ -78,27 +85,18 @@ diff: #=============================================================================== build_docker: - @echo "Warning: building can take a while (~15m)." - dpkg -l squid-deb-proxy || sudo apt-get install -y squid-deb-proxy - docker build -t dergachev/gdocs-export . - -docker_debug: - $(docker_run_cmd) /bin/bash - -latest: - docker run -t -i `docker images -q | head -n 1` /bin/bash + docker-compose up -d --build -docker_api_auth: - $(docker_run_cmd) make api_auth CLIENT_ID=$(CLIENT_ID) CLIENT_SECRET=$(CLIENT_SECRET) +access: + # Access docker container as gdocs user + docker exec -it --user ${APACHE_USER} ${DOCKER_CONTAINER} /bin/bash -docker_api_download: - $(docker_run_cmd) make api_download doc_id=$(doc_id) input_file=$(input_file) workdir=$(docker_workdir) +stop: + docker-compose stop -docker_convert: - $(docker_run_cmd) make convert OUTPUT=$(OUTPUT) name=$(name) input_file=$(input_file) theme=$(theme) - -docker_diff: - docker run -t -i -v `pwd`:$(docker_workdir) -p 12736:12736 dergachev/gdocs-export make diff OUTPUT=$(OUTPUT) name=$(name) input_file=$(input_file) before=$(before) +restart: + docker-compose stop + docker-compose start #=============================================================================== # MISC TARGETS @@ -106,3 +104,14 @@ docker_diff: test: bundle exec rspec + +#=============================================================================== +# TEST +# Test build Alex's public document +# https://docs.google.com/document/d/1dwYaiiy4P0KA7PvNwAP2fsPAf6qMMNzwaq8W66mwyds/edit +#=============================================================================== +test_convert: + $(eval DOC_ID=1dwYaiiy4P0KA7PvNwAP2fsPAf6qMMNzwaq8W66mwyds) + $(eval FILE_NAME=sample2) + $(MAKE) api_download DOC_ID=$(DOC_ID) FILE_NAME=$(FILE_NAME) + $(MAKE) convert FILE_NAME=$(FILE_NAME) THEME=ew diff --git a/README.md b/README.md index eb4a9fe..2d5f01b 100644 --- a/README.md +++ b/README.md @@ -15,40 +15,16 @@ Installation ------------ See below for how to get google drive API *client_id* and *client_secret*. -See the `Vagrantfile` for installation steps. See the `Makefile` for usage. -Starts a VM with docker and squid-deb-proxy running, then builds the gdocs-export docker image: +Run the docker container by -```bash -vagrant up -vagrant ssh -cd /vagrant/ - -# pulls the image from index.docker.io (about ~2GB) -docker pull dergachev/gdocs-export ``` - -Alternatively, we can build the image from this repo, but this takes a while -and installing squid-deb-proxy to cache 'apt-get install' downloads is highly -recommended: - -```bash -# optional, caches apt-get downloads in containers -apt-get install -y squid-deb-proxy - -# takes 10-20 minutes -docker build -t dergachev/gdocs-export . +make build_docker ``` -To run the tests, do the following: -```bash -bundle config build.nokogiri --use-system-libraries -bundle install -make test -``` Configuration ------------- @@ -181,3 +157,11 @@ sudo tlmgr install latexmk ``` See http://mg.readthedocs.io/latexmk.html + + +# ==================== + +Authorization issue: +/usr/lib/ruby/1.9.1/webrick/utils.rb:85:in `initialize': Address already in use - bi +lsof -wni tcp:12736 +kill -9 PID diff --git a/build/example/SHbO80B3zYiLwN09wcE1jxTyLWaBsr7llKXblVz0EwCQsT2EsGznwPa4YwxgN3BwyMSEZhyazyYEoA5TNEBswNe6FJ2ZZsw9_E5R3YnzdCYFfcxjoR-rnHg.jpg b/build/example/SHbO80B3zYiLwN09wcE1jxTyLWaBsr7llKXblVz0EwCQsT2EsGznwPa4YwxgN3BwyMSEZhyazyYEoA5TNEBswNe6FJ2ZZsw9_E5R3YnzdCYFfcxjoR-rnHg.jpg deleted file mode 100644 index fe19709..0000000 Binary files a/build/example/SHbO80B3zYiLwN09wcE1jxTyLWaBsr7llKXblVz0EwCQsT2EsGznwPa4YwxgN3BwyMSEZhyazyYEoA5TNEBswNe6FJ2ZZsw9_E5R3YnzdCYFfcxjoR-rnHg.jpg and /dev/null differ diff --git a/build/example/UNlogo.png b/build/example/UNlogo.png deleted file mode 100644 index 34045c9..0000000 Binary files a/build/example/UNlogo.png and /dev/null differ diff --git a/build/example/example.aux b/build/example/example.aux deleted file mode 100644 index b9e9be5..0000000 --- a/build/example/example.aux +++ /dev/null @@ -1,47 +0,0 @@ -\relax -\providecommand\hyper@newdestlabel[2]{} -\providecommand*{\memsetcounter}[2]{} -\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument} -\HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined -\global\let\oldcontentsline\contentsline -\gdef\contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}} -\global\let\oldnewlabel\newlabel -\gdef\newlabel#1#2{\newlabelxx{#1}#2} -\gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}} -\AtEndDocument{\ifx\hyper@anchor\@undefined -\let\contentsline\oldcontentsline -\let\newlabel\oldnewlabel -\fi} -\fi} -\global\let\hyper@last\relax -\gdef\HyperFirstAtBeginDocument#1{#1} -\providecommand\HyField@AuxAddToFields[1]{} -\providecommand\HyField@AuxAddToCoFields[2]{} -\@writefile{lof}{\addvspace {10pt}} -\@writefile{lot}{\addvspace {10pt}} -\@writefile{toc}{\contentsline {chapter}{\chapternumberline {1}Background}{3}{chapter.1}} -\@writefile{lof}{\addvspace {10pt}} -\@writefile{lot}{\addvspace {10pt}} -\@writefile{toc}{\contentsline {chapter}{\chapternumberline {2}Proposed Solution}{4}{chapter.2}} -\@writefile{toc}{\contentsline {section}{\numberline {2.1}Export component}{4}{section.2.1}} -\@writefile{toc}{\contentsline {section}{\numberline {2.2}Import component}{4}{section.2.2}} -\@writefile{toc}{\contentsline {section}{\numberline {2.3}Benefits of our solution}{4}{section.2.3}} -\gdef \LT@i {\LT@entry - {1}{227.84059pt}\LT@entry - {1}{227.84059pt}} -\@writefile{lof}{\addvspace {10pt}} -\@writefile{lot}{\addvspace {10pt}} -\@writefile{toc}{\contentsline {chapter}{\chapternumberline {3}Schedule and Budget}{6}{chapter.3}} -\@writefile{toc}{\contentsline {section}{\numberline {3.1}Table}{6}{section.3.1}} -\@writefile{toc}{\contentsline {section}{\numberline {3.2}Diagram showing how work is split}{7}{section.3.2}} -\@writefile{lof}{\addvspace {10pt}} -\@writefile{lot}{\addvspace {10pt}} -\@writefile{toc}{\contentsline {chapter}{\chapternumberline {4}Terms and Conditions}{8}{chapter.4}} -\@writefile{toc}{\contentsline {section}{\numberline {4.1}Staffing}{8}{section.4.1}} -\@writefile{toc}{\contentsline {section}{\numberline {4.2}Relation to Other Agreements}{8}{section.4.2}} -\@writefile{toc}{\contentsline {section}{\numberline {4.3}Language of Contract}{8}{section.4.3}} -\@writefile{lof}{\addvspace {10pt}} -\@writefile{lot}{\addvspace {10pt}} -\@writefile{toc}{\contentsline {chapter}{\chapternumberline {5}Agreement}{9}{chapter.5}} -\memsetcounter{lastsheet}{10} -\memsetcounter{lastpage}{9} diff --git a/build/example/example.docx b/build/example/example.docx deleted file mode 100644 index 0ba56cf..0000000 Binary files a/build/example/example.docx and /dev/null differ diff --git a/build/example/example.log b/build/example/example.log deleted file mode 100644 index e84778f..0000000 --- a/build/example/example.log +++ /dev/null @@ -1,1387 +0,0 @@ -This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013/Debian) (format=pdflatex 2014.3.26) 27 MAR 2014 21:43 -entering extended mode - restricted \write18 enabled. - %&-line parsing enabled. -**\nonstopmode \input{example.tex} -(./example.tex (./metadata.tex) -(/usr/share/texlive/texmf-dist/tex/latex/memoir/memoir.cls -Document Class: memoir 2013/05/30 v3.7b configurable book, report, article docu -ment class -\onelineskip=\skip41 -\lxvchars=\skip42 -\xlvchars=\skip43 -\@memcnta=\count79 -\c@@memmarkcntra=\count80 -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty -Package: ifpdf 2011/01/30 v2.3 Provides the ifpdf switch (HO) -Package ifpdf Info: pdfTeX in PDF mode is detected. -) -Class memoir Info: An `ifetex' package is being emulated on input line 265. - -(/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty -Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional -) -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifluatex.sty -Package: ifluatex 2010/03/01 v1.3 Provides the ifluatex switch (HO) -Package ifluatex Info: LuaTeX not detected. -) -\stockheight=\skip44 -\stockwidth=\skip45 -\trimtop=\skip46 -\trimedge=\skip47 - -(/usr/share/texlive/texmf-dist/tex/latex/etex-pkg/etex.sty -Package: etex 1998/03/26 v2.0 eTeX basic definition package (PEB) -\et@xins=\count81 -) -LaTeX Font Info: Try loading font information for T1+lmr on input line 740. - -(/usr/share/texmf/tex/latex/lm/t1lmr.fd -File: t1lmr.fd 2009/10/30 v1.6 Font defs for Latin Modern -) -(/usr/share/texlive/texmf-dist/tex/latex/memoir/mem11.clo -File: mem11.clo 2008/01/30 v0.3 memoir class 11pt size option -) -(/usr/share/texmf/tex/latex/lm/lmodern.sty -Package: lmodern 2009/10/30 v1.6 Latin Modern Fonts -LaTeX Font Info: Overwriting symbol font `operators' in version `normal' -(Font) OT1/cmr/m/n --> OT1/lmr/m/n on input line 22. -LaTeX Font Info: Overwriting symbol font `letters' in version `normal' -(Font) OML/cmm/m/it --> OML/lmm/m/it on input line 23. -LaTeX Font Info: Overwriting symbol font `symbols' in version `normal' -(Font) OMS/cmsy/m/n --> OMS/lmsy/m/n on input line 24. -LaTeX Font Info: Overwriting symbol font `largesymbols' in version `normal' -(Font) OMX/cmex/m/n --> OMX/lmex/m/n on input line 25. -LaTeX Font Info: Overwriting symbol font `operators' in version `bold' -(Font) OT1/cmr/bx/n --> OT1/lmr/bx/n on input line 26. -LaTeX Font Info: Overwriting symbol font `letters' in version `bold' -(Font) OML/cmm/b/it --> OML/lmm/b/it on input line 27. -LaTeX Font Info: Overwriting symbol font `symbols' in version `bold' -(Font) OMS/cmsy/b/n --> OMS/lmsy/b/n on input line 28. -LaTeX Font Info: Overwriting symbol font `largesymbols' in version `bold' -(Font) OMX/cmex/m/n --> OMX/lmex/m/n on input line 29. -LaTeX Font Info: Overwriting math alphabet `\mathbf' in version `normal' -(Font) OT1/cmr/bx/n --> OT1/lmr/bx/n on input line 31. -LaTeX Font Info: Overwriting math alphabet `\mathsf' in version `normal' -(Font) OT1/cmss/m/n --> OT1/lmss/m/n on input line 32. -LaTeX Font Info: Overwriting math alphabet `\mathit' in version `normal' -(Font) OT1/cmr/m/it --> OT1/lmr/m/it on input line 33. -LaTeX Font Info: Overwriting math alphabet `\mathtt' in version `normal' -(Font) OT1/cmtt/m/n --> OT1/lmtt/m/n on input line 34. -LaTeX Font Info: Overwriting math alphabet `\mathbf' in version `bold' -(Font) OT1/cmr/bx/n --> OT1/lmr/bx/n on input line 35. -LaTeX Font Info: Overwriting math alphabet `\mathsf' in version `bold' -(Font) OT1/cmss/bx/n --> OT1/lmss/bx/n on input line 36. -LaTeX Font Info: Overwriting math alphabet `\mathit' in version `bold' -(Font) OT1/cmr/bx/it --> OT1/lmr/bx/it on input line 37. -LaTeX Font Info: Overwriting math alphabet `\mathtt' in version `bold' -(Font) OT1/cmtt/m/n --> OT1/lmtt/m/n on input line 38. -) -(/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty -Package: fontenc 2005/09/27 v1.99g Standard LaTeX package - -(/usr/share/texlive/texmf-dist/tex/latex/base/t1enc.def -File: t1enc.def 2005/09/27 v1.99g Standard LaTeX file -LaTeX Font Info: Redeclaring font encoding T1 on input line 43. -)) -\binding=\skip48 -\spinemargin=\skip49 -\foremargin=\skip50 -\uppermargin=\skip51 -\lowermargin=\skip52 -\headdrop=\skip53 -\normalrulethickness=\skip54 -\mem@maxheadheight=\skip55 -\mem@maxfootheight=\skip56 -\headwidth=\skip57 -\c@storedpagenumber=\count82 -\memPD=\dimen102 -\m@mabparskip=\skip58 -\thanksmarkwidth=\skip59 -\thanksmarksep=\skip60 -\droptitle=\skip61 -\c@book=\count83 -\c@part=\count84 -\c@chapter=\count85 -\c@section=\count86 -\c@subsection=\count87 -\c@subsubsection=\count88 -\c@paragraph=\count89 -\c@subparagraph=\count90 -\beforechapskip=\skip62 -\midchapskip=\skip63 -\afterchapskip=\skip64 -\chapindent=\skip65 -\bottomsectionskip=\skip66 -\secindent=\skip67 -\beforesecskip=\skip68 -\aftersecskip=\skip69 -\subsecindent=\skip70 -\beforesubsecskip=\skip71 -\aftersubsecskip=\skip72 -\subsubsecindent=\skip73 -\beforesubsubsecskip=\skip74 -\aftersubsubsecskip=\skip75 -\paraindent=\skip76 -\beforeparaskip=\skip77 -\afterparaskip=\skip78 -\subparaindent=\skip79 -\beforesubparaskip=\skip80 -\aftersubparaskip=\skip81 -\pfbreakskip=\skip82 -\c@@ppsavesec=\count91 -\c@@ppsaveapp=\count92 -\ragrparindent=\dimen103 -\everylistparindent=\dimen104 -\parsepi=\skip83 -\topsepi=\skip84 -\itemsepi=\skip85 -\parsepii=\skip86 -\topsepii=\skip87 -\topsepiii=\skip88 -\itemsepii=\skip89 -\itemsepiii=\skip90 -\partopsepii=\skip91 -\partopsepiii=\skip92 -\m@msavetopsep=\skip93 -\m@msavepartopsep=\skip94 -\@enLab=\toks14 -\abstitleskip=\skip95 -\absleftindent=\skip96 -\abs@leftindent=\dimen105 -\absrightindent=\skip97 -\absparindent=\skip98 -\absparsep=\skip99 -\c@vslineno=\count93 -\c@poemline=\count94 -\c@modulo@vs=\count95 -\c@memfvsline=\count96 -\vleftskip=\skip100 -\vrightskip=\skip101 -\stanzaskip=\skip102 -\versewidth=\skip103 -\vgap=\skip104 -\vindent=\skip105 -\vleftmargin=\dimen106 -\c@verse=\count97 -\c@chrsinstr=\count98 -\beforepoemtitleskip=\skip106 -\afterpoemtitleskip=\skip107 -\c@poem=\count99 -\beforePoemTitleskip=\skip108 -\midPoemTitleskip=\skip109 -\afterPoemTitleskip=\skip110 -\col@sep=\dimen107 -\extrarowheight=\dimen108 -\NC@list=\toks15 -\extratabsurround=\skip111 -\backup@length=\skip112 -\TX@col@width=\dimen109 -\TX@old@table=\dimen110 -\TX@old@col=\dimen111 -\TX@target=\dimen112 -\TX@delta=\dimen113 -\TX@cols=\count100 -\TX@ftn=\toks16 -\heavyrulewidth=\dimen114 -\lightrulewidth=\dimen115 -\cmidrulewidth=\dimen116 -\belowrulesep=\dimen117 -\belowbottomsep=\dimen118 -\aboverulesep=\dimen119 -\abovetopsep=\dimen120 -\cmidrulesep=\dimen121 -\cmidrulekern=\dimen122 -\defaultaddspace=\dimen123 -\@cmidla=\count101 -\@cmidlb=\count102 -\@aboverulesep=\dimen124 -\@belowrulesep=\dimen125 -\@thisruleclass=\count103 -\@lastruleclass=\count104 -\@thisrulewidth=\dimen126 -\ctableftskip=\skip113 -\ctabrightskip=\skip114 -\abovecolumnspenalty=\count105 -\@linestogo=\count106 -\@cellstogo=\count107 -\@cellsincolumn=\count108 -\crtok=\toks17 -\@mincolumnwidth=\dimen127 -\c@newflo@tctr=\count109 -\mem@margin@floatbox=\box26 -\@contcwidth=\skip115 -\@contindw=\skip116 -\abovecaptionskip=\skip117 -\belowcaptionskip=\skip118 -\subfloattopskip=\skip119 -\subfloatcapskip=\skip120 -\subfloatcaptopadj=\skip121 -\subfloatbottomskip=\skip122 -\subfloatlabelskip=\skip123 -\subfloatcapmargin=\dimen128 -\c@@contsubnum=\count110 -\m@mscap@capbox=\box27 -\m@mscap@fbox=\box28 -\sidecapsep=\dimen129 -\sidecapwidth=\dimen130 -\m@m@tempdima=\dimen131 -\m@mscapraise=\dimen132 -\sidecapraise=\dimen133 -\m@mscapmainwidth=\dimen134 -\m@mscaplkern=\dimen135 -\beforeepigraphskip=\skip124 -\afterepigraphskip=\skip125 -\epigraphwidth=\skip126 -\epigraphrule=\skip127 -LaTeX Info: Redefining \em on input line 7492. -LaTeX Info: Redefining \emph on input line 7500. -\tocentryskip=\skip128 -\tocbaseline=\skip129 -\cftparskip=\skip130 -\cftbeforebookskip=\skip131 -\cftbookindent=\dimen136 -\cftbooknumwidth=\dimen137 -\cftbeforepartskip=\skip132 -\cftpartindent=\skip133 -\cftpartnumwidth=\skip134 -\cftbeforechapterskip=\skip135 -\cftchapterindent=\skip136 -\cftchapternumwidth=\skip137 -\cftbeforesectionskip=\skip138 -\cftsectionindent=\skip139 -\cftsectionnumwidth=\skip140 -\cftbeforesubsectionskip=\skip141 -\cftsubsectionindent=\skip142 -\cftsubsectionnumwidth=\skip143 -\cftbeforesubsubsectionskip=\skip144 -\cftsubsubsectionindent=\skip145 -\cftsubsubsectionnumwidth=\skip146 -\cftbeforeparagraphskip=\skip147 -\cftparagraphindent=\skip148 -\cftparagraphnumwidth=\skip149 -\cftbeforesubparagraphskip=\skip150 -\cftsubparagraphindent=\skip151 -\cftsubparagraphnumwidth=\skip152 -\prechapterprecisshift=\dimen138 -\c@maxsecnumdepth=\count111 -\bibindent=\dimen139 -\bibitemsep=\skip153 -\indexcolsep=\skip154 -\indexrule=\skip155 -\indexmarkstyle=\toks18 -\@indexbox=\insert233 -\glossarycolsep=\dimen140 -\glossaryrule=\dimen141 -\sideparvshift=\skip156 -\sideins=\insert232 -\sidebartopsep=\skip157 -\sidebarhsep=\skip158 -\sidebarvsep=\skip159 -\sidebarwidth=\skip160 -\footmarkwidth=\skip161 -\footmarksep=\skip162 -\footparindent=\skip163 -\footinsdim=\skip164 -\footinsv@r=\insert231 -\@mpfootinsv@r=\insert230 -\m@m@k=\count112 -\m@m@h=\dimen142 -\m@mipn@skip=\skip165 -\sidefootins=\insert229 -\sidefootadjust=\skip166 -\sidefootheight=\skip167 -\sidefoothsep=\skip168 -\sidefootvsep=\skip169 -\sidefootwidth=\skip170 -\m@mdownsf=\skip171 -\c@sidefootnote=\count113 -\sidefootmarkwidth=\skip172 -\sidefootmarksep=\skip173 -\sidefootparindent=\skip174 -\c@pagenote=\count114 -\c@pagenoteshadow=\count115 -\mem@pn@lastkern=\skip175 -\every@verbatim=\toks19 -\afterevery@verbatim=\toks20 -\verbatim@line=\toks21 -\tab@position=\count116 -\verbatim@in@stream=\read1 -\verbatimindent=\skip176 -\verbatim@out=\write3 -\bvboxsep=\skip177 -\c@memfbvline=\count117 -\c@bvlinectr=\count118 -\bvnumlength=\skip178 -\fb@frw=\dimen143 -\fb@frh=\dimen144 -\FrameRule=\dimen145 -\FrameSep=\dimen146 -\c@cp@cntr=\count119 -LaTeX Info: Redefining \: on input line 11958. -LaTeX Info: Redefining \! on input line 11960. -\c@ism@mctr=\count120 -\c@xsm@mctr=\count121 -\c@csm@mctr=\count122 -\c@ksm@mctr=\count123 -\c@xksm@mctr=\count124 -\c@cksm@mctr=\count125 -\c@msm@mctr=\count126 -\c@xmsm@mctr=\count127 -\c@cmsm@mctr=\count128 -\c@bsm@mctr=\count129 -\c@workm@mctr=\count130 -\c@sheetsequence=\count131 -\c@lastsheet=\count132 -\c@lastpage=\count133 -\c@figure=\count134 -\c@lofdepth=\count135 -\cftbeforefigureskip=\skip179 -\cftfigureindent=\skip180 -\cftfigurenumwidth=\skip181 -\c@table=\count136 -\c@lotdepth=\count137 -\cftbeforetableskip=\skip182 -\cfttableindent=\skip183 -\cfttablenumwidth=\skip184 -Package abstract [2008/07/23] emulated by memoir. -Package appendix [2008/07/23] emulated by memoir. -Package array [2008/09/09] emulated by memoir. -Package booktabs [2008/07/23] emulated by memoir. -Package ccaption [2008/07/23] emulated by memoir. -Package changepage [2008/07/23] emulated by memoir. -Package chngcntr [2008/07/23] emulated by memoir. -Package chngpage [2008/07/23] emulated by memoir. -Package crop emulated by memoir. -Package dcolumn [2008/07/23] emulated by memoir. -Package delarray [2008/07/23] emulated by memoir. -Package enumerate [2008/07/23] emulated by memoir. -Package epigraph [2008/07/23] emulated by memoir. -Package ifmtarg [2008/07/23] emulated by memoir. -Package ifetex [2008/07/23] emulated by memoir. -Package index [2008/07/23] emulated by memoir. -Package makeidx [2008/07/23] emulated by memoir. -Package moreverb [2008/07/23] emulated by memoir. -Package mparhack [2008/07/23] emulated by memoir. -Package needspace [2008/07/23] emulated by memoir. -Package newfile [2008/07/23] emulated by memoir. -Package nextpage [2008/07/23] emulated by memoir. -Package pagenote [2008/07/23] emulated by memoir. -Package parskip [2008/07/23] emulated by memoir. -Package patchcmd [2008/07/23] emulated by memoir. -Package setspace [2008/07/23] emulated by memoir. -Package shortvrb [2008/07/23] emulated by memoir. -Package showidx [2008/07/23] emulated by memoir. -Package tabularx [2008/07/23] emulated by memoir. -Package titleref [2008/07/23] emulated by memoir. -Package titling [2008/07/23] emulated by memoir. -Package tocbibind [2008/07/23] emulated by memoir. -Package tocloft [2008/07/23] emulated by memoir. -Package tocvsec2 [2008/07/23] emulated by memoir. -Package verbatim [2008/07/23] emulated by memoir. -Package verse [2008/07/23] emulated by memoir. - -(/usr/share/texlive/texmf-dist/tex/latex/memoir/mempatch.sty -Package: mempatch 2009/07/24 v6.0f Patches for memoir class v1.6180339 -)) -(/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty -Package: fontenc 2005/09/27 v1.99g Standard LaTeX package - -(/usr/share/texlive/texmf-dist/tex/latex/base/t1enc.def -File: t1enc.def 2005/09/27 v1.99g Standard LaTeX file -LaTeX Font Info: Redeclaring font encoding T1 on input line 43. -)) -(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty -Package: amssymb 2013/01/14 v3.01 AMS font symbols - -(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty -Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support -\@emptytoks=\toks22 -\symAMSa=\mathgroup4 -\symAMSb=\mathgroup5 -LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' -(Font) U/euf/m/n --> U/euf/b/n on input line 106. -)) -(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty -Package: amsmath 2013/01/14 v2.14 AMS math features -\@mathmargin=\skip185 - -For additional information on amsmath, use the `?' option. -(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty -Package: amstext 2000/06/29 v2.01 - -(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty -File: amsgen.sty 1999/11/30 v2.0 -\@emptytoks=\toks23 -\ex@=\dimen147 -)) -(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty -Package: amsbsy 1999/11/29 v1.2d -\pmbraise@=\dimen148 -) -(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty -Package: amsopn 1999/12/14 v2.01 operator names -) -\inf@bad=\count138 -LaTeX Info: Redefining \frac on input line 210. -\uproot@=\count139 -\leftroot@=\count140 -LaTeX Info: Redefining \overline on input line 306. -\classnum@=\count141 -\DOTSCASE@=\count142 -LaTeX Info: Redefining \ldots on input line 378. -LaTeX Info: Redefining \dots on input line 381. -LaTeX Info: Redefining \cdots on input line 466. -\Mathstrutbox@=\box29 -\strutbox@=\box30 -\big@size=\dimen149 -LaTeX Font Info: Redeclaring font encoding OML on input line 566. -LaTeX Font Info: Redeclaring font encoding OMS on input line 567. -\macc@depth=\count143 -\c@MaxMatrixCols=\count144 -\dotsspace@=\muskip10 -\c@parentequation=\count145 -\dspbrk@lvl=\count146 -\tag@help=\toks24 -\row@=\count147 -\column@=\count148 -\maxfields@=\count149 -\andhelp@=\toks25 -\eqnshift@=\dimen150 -\alignsep@=\dimen151 -\tagshift@=\dimen152 -\tagwidth@=\dimen153 -\totwidth@=\dimen154 -\lineht@=\dimen155 -\@envbody=\toks26 -\multlinegap=\skip186 -\multlinetaggap=\skip187 -\mathdisplay@stack=\toks27 -LaTeX Info: Redefining \[ on input line 2665. -LaTeX Info: Redefining \] on input line 2666. -) -(/usr/share/texlive/texmf-dist/tex/latex/base/fixltx2e.sty -Package: fixltx2e 2006/09/13 v1.1m fixes to LaTeX -LaTeX Info: Redefining \em on input line 420. -LaTeX Info: Redefining \textsubscript on input line 424. -LaTeX Info: The control sequence `\[' is already robust on input line 471. -LaTeX Info: The control sequence `\]' is already robust on input line 472. -) - -****************************************************** -Stock height and width: 794.96999pt by 614.295pt -Top and edge trims: 0pt and 0pt -Page height and width: 794.96999pt by 614.295pt -Text height and width: 650.20029pt by 472pt -Spine and edge margins: 71.13188pt and 71.13188pt -Upper and lower margins: 71.13188pt and 73.63782pt -Headheight and headsep: 13.6pt and 19.8738pt -Footskip: 27.46295pt -Columnsep and columnseprule: 10pt and 0pt -Marginparsep and marginparwidth: 7pt and 57.13188pt -Sidecapsep and sidecapwidth: 7pt and 57pt -Sidebarhsep and sidebarwidth: 7pt and 57pt -Sidebarvsep and sidebartopsep: 13.6pt and 0pt -Sidebarheight: 539.9202pt -Sidefoothsep and sidefootwidth: 7pt and 57pt -Sidefootvsep and sidefootheight: 13.6pt and 539.9202pt -****************************************************** - -(/usr/share/texlive/texmf-dist/tex/latex/microtype/microtype.sty -Package: microtype 2013/05/23 v2.5a Micro-typographical refinements (RS) - -(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty -Package: keyval 1999/03/16 v1.13 key=value parser (DPC) -\KV@toks@=\toks28 -) -\MT@toks=\toks29 -\MT@count=\count150 -LaTeX Info: Redefining \textls on input line 766. -\MT@outer@kern=\dimen156 -LaTeX Info: Redefining \textmicrotypecontext on input line 1285. -\MT@listname@count=\count151 - -(/usr/share/texlive/texmf-dist/tex/latex/microtype/microtype-pdftex.def -File: microtype-pdftex.def 2013/05/23 v2.5a Definitions specific to pdftex (RS) - -LaTeX Info: Redefining \lsstyle on input line 915. -LaTeX Info: Redefining \lslig on input line 915. -\MT@outer@space=\skip188 -) -Package microtype Info: Loading configuration file microtype.cfg. - -(/usr/share/texlive/texmf-dist/tex/latex/microtype/microtype.cfg -File: microtype.cfg 2013/05/23 v2.5a microtype main configuration file (RS) -)) -(/usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty -Package: upquote 2012/04/19 v1.3 upright-quote and grave-accent glyphs in verba -tim - -(/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty -Package: textcomp 2005/09/27 v1.99g Standard LaTeX package -Package textcomp Info: Sub-encoding information: -(textcomp) 5 = only ISO-Adobe without \textcurrency -(textcomp) 4 = 5 + \texteuro -(textcomp) 3 = 4 + \textohm -(textcomp) 2 = 3 + \textestimated + \textcurrency -(textcomp) 1 = TS1 - \textcircled - \t -(textcomp) 0 = TS1 (full) -(textcomp) Font families with sub-encoding setting implement -(textcomp) only a restricted character set as indicated. -(textcomp) Family '?' is the default used for unknown fonts. -(textcomp) See the documentation for details. -Package textcomp Info: Setting ? sub-encoding to TS1/1 on input line 71. - -(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.def -File: ts1enc.def 2001/06/05 v3.0e (jk/car/fm) Standard LaTeX file -) -LaTeX Info: Redefining \oldstylenums on input line 266. -Package textcomp Info: Setting cmr sub-encoding to TS1/0 on input line 281. -Package textcomp Info: Setting cmss sub-encoding to TS1/0 on input line 282. -Package textcomp Info: Setting cmtt sub-encoding to TS1/0 on input line 283. -Package textcomp Info: Setting cmvtt sub-encoding to TS1/0 on input line 284. -Package textcomp Info: Setting cmbr sub-encoding to TS1/0 on input line 285. -Package textcomp Info: Setting cmtl sub-encoding to TS1/0 on input line 286. -Package textcomp Info: Setting ccr sub-encoding to TS1/0 on input line 287. -Package textcomp Info: Setting ptm sub-encoding to TS1/4 on input line 288. -Package textcomp Info: Setting pcr sub-encoding to TS1/4 on input line 289. -Package textcomp Info: Setting phv sub-encoding to TS1/4 on input line 290. -Package textcomp Info: Setting ppl sub-encoding to TS1/3 on input line 291. -Package textcomp Info: Setting pag sub-encoding to TS1/4 on input line 292. -Package textcomp Info: Setting pbk sub-encoding to TS1/4 on input line 293. -Package textcomp Info: Setting pnc sub-encoding to TS1/4 on input line 294. -Package textcomp Info: Setting pzc sub-encoding to TS1/4 on input line 295. -Package textcomp Info: Setting bch sub-encoding to TS1/4 on input line 296. -Package textcomp Info: Setting put sub-encoding to TS1/5 on input line 297. -Package textcomp Info: Setting uag sub-encoding to TS1/5 on input line 298. -Package textcomp Info: Setting ugq sub-encoding to TS1/5 on input line 299. -Package textcomp Info: Setting ul8 sub-encoding to TS1/4 on input line 300. -Package textcomp Info: Setting ul9 sub-encoding to TS1/4 on input line 301. -Package textcomp Info: Setting augie sub-encoding to TS1/5 on input line 302. -Package textcomp Info: Setting dayrom sub-encoding to TS1/3 on input line 303. -Package textcomp Info: Setting dayroms sub-encoding to TS1/3 on input line 304. - -Package textcomp Info: Setting pxr sub-encoding to TS1/0 on input line 305. -Package textcomp Info: Setting pxss sub-encoding to TS1/0 on input line 306. -Package textcomp Info: Setting pxtt sub-encoding to TS1/0 on input line 307. -Package textcomp Info: Setting txr sub-encoding to TS1/0 on input line 308. -Package textcomp Info: Setting txss sub-encoding to TS1/0 on input line 309. -Package textcomp Info: Setting txtt sub-encoding to TS1/0 on input line 310. -Package textcomp Info: Setting lmr sub-encoding to TS1/0 on input line 311. -Package textcomp Info: Setting lmdh sub-encoding to TS1/0 on input line 312. -Package textcomp Info: Setting lmss sub-encoding to TS1/0 on input line 313. -Package textcomp Info: Setting lmssq sub-encoding to TS1/0 on input line 314. -Package textcomp Info: Setting lmvtt sub-encoding to TS1/0 on input line 315. -Package textcomp Info: Setting qhv sub-encoding to TS1/0 on input line 316. -Package textcomp Info: Setting qag sub-encoding to TS1/0 on input line 317. -Package textcomp Info: Setting qbk sub-encoding to TS1/0 on input line 318. -Package textcomp Info: Setting qcr sub-encoding to TS1/0 on input line 319. -Package textcomp Info: Setting qcs sub-encoding to TS1/0 on input line 320. -Package textcomp Info: Setting qpl sub-encoding to TS1/0 on input line 321. -Package textcomp Info: Setting qtm sub-encoding to TS1/0 on input line 322. -Package textcomp Info: Setting qzc sub-encoding to TS1/0 on input line 323. -Package textcomp Info: Setting qhvc sub-encoding to TS1/0 on input line 324. -Package textcomp Info: Setting futs sub-encoding to TS1/4 on input line 325. -Package textcomp Info: Setting futx sub-encoding to TS1/4 on input line 326. -Package textcomp Info: Setting futj sub-encoding to TS1/4 on input line 327. -Package textcomp Info: Setting hlh sub-encoding to TS1/3 on input line 328. -Package textcomp Info: Setting hls sub-encoding to TS1/3 on input line 329. -Package textcomp Info: Setting hlst sub-encoding to TS1/3 on input line 330. -Package textcomp Info: Setting hlct sub-encoding to TS1/5 on input line 331. -Package textcomp Info: Setting hlx sub-encoding to TS1/5 on input line 332. -Package textcomp Info: Setting hlce sub-encoding to TS1/5 on input line 333. -Package textcomp Info: Setting hlcn sub-encoding to TS1/5 on input line 334. -Package textcomp Info: Setting hlcw sub-encoding to TS1/5 on input line 335. -Package textcomp Info: Setting hlcf sub-encoding to TS1/5 on input line 336. -Package textcomp Info: Setting pplx sub-encoding to TS1/3 on input line 337. -Package textcomp Info: Setting pplj sub-encoding to TS1/3 on input line 338. -Package textcomp Info: Setting ptmx sub-encoding to TS1/4 on input line 339. -Package textcomp Info: Setting ptmj sub-encoding to TS1/4 on input line 340. -)) -(/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty -Package: inputenc 2008/03/30 v1.1d Input encoding file -\inpenc@prehook=\toks30 -\inpenc@posthook=\toks31 - -(/usr/share/texlive/texmf-dist/tex/latex/base/utf8.def -File: utf8.def 2008/04/05 v1.1m UTF-8 support for inputenc -Now handling font encoding OML ... -... no UTF-8 mapping file for font encoding OML -Now handling font encoding T1 ... -... processing UTF-8 mapping file for font encoding T1 - -(/usr/share/texlive/texmf-dist/tex/latex/base/t1enc.dfu -File: t1enc.dfu 2008/04/05 v1.1m UTF-8 support for inputenc - defining Unicode char U+00A1 (decimal 161) - defining Unicode char U+00A3 (decimal 163) - defining Unicode char U+00AB (decimal 171) - defining Unicode char U+00BB (decimal 187) - defining Unicode char U+00BF (decimal 191) - defining Unicode char U+00C0 (decimal 192) - defining Unicode char U+00C1 (decimal 193) - defining Unicode char U+00C2 (decimal 194) - defining Unicode char U+00C3 (decimal 195) - defining Unicode char U+00C4 (decimal 196) - defining Unicode char U+00C5 (decimal 197) - defining Unicode char U+00C6 (decimal 198) - defining Unicode char U+00C7 (decimal 199) - defining Unicode char U+00C8 (decimal 200) - defining Unicode char U+00C9 (decimal 201) - defining Unicode char U+00CA (decimal 202) - defining Unicode char U+00CB (decimal 203) - defining Unicode char U+00CC (decimal 204) - defining Unicode char U+00CD (decimal 205) - defining Unicode char U+00CE (decimal 206) - defining Unicode char U+00CF (decimal 207) - defining Unicode char U+00D0 (decimal 208) - defining Unicode char U+00D1 (decimal 209) - defining Unicode char U+00D2 (decimal 210) - defining Unicode char U+00D3 (decimal 211) - defining Unicode char U+00D4 (decimal 212) - defining Unicode char U+00D5 (decimal 213) - defining Unicode char U+00D6 (decimal 214) - defining Unicode char U+00D8 (decimal 216) - defining Unicode char U+00D9 (decimal 217) - defining Unicode char U+00DA (decimal 218) - defining Unicode char U+00DB (decimal 219) - defining Unicode char U+00DC (decimal 220) - defining Unicode char U+00DD (decimal 221) - defining Unicode char U+00DE (decimal 222) - defining Unicode char U+00DF (decimal 223) - defining Unicode char U+00E0 (decimal 224) - defining Unicode char U+00E1 (decimal 225) - defining Unicode char U+00E2 (decimal 226) - defining Unicode char U+00E3 (decimal 227) - defining Unicode char U+00E4 (decimal 228) - defining Unicode char U+00E5 (decimal 229) - defining Unicode char U+00E6 (decimal 230) - defining Unicode char U+00E7 (decimal 231) - defining Unicode char U+00E8 (decimal 232) - defining Unicode char U+00E9 (decimal 233) - defining Unicode char U+00EA (decimal 234) - defining Unicode char U+00EB (decimal 235) - defining Unicode char U+00EC (decimal 236) - defining Unicode char U+00ED (decimal 237) - defining Unicode char U+00EE (decimal 238) - defining Unicode char U+00EF (decimal 239) - defining Unicode char U+00F0 (decimal 240) - defining Unicode char U+00F1 (decimal 241) - defining Unicode char U+00F2 (decimal 242) - defining Unicode char U+00F3 (decimal 243) - defining Unicode char U+00F4 (decimal 244) - defining Unicode char U+00F5 (decimal 245) - defining Unicode char U+00F6 (decimal 246) - defining Unicode char U+00F8 (decimal 248) - defining Unicode char U+00F9 (decimal 249) - defining Unicode char U+00FA (decimal 250) - defining Unicode char U+00FB (decimal 251) - defining Unicode char U+00FC (decimal 252) - defining Unicode char U+00FD (decimal 253) - defining Unicode char U+00FE (decimal 254) - defining Unicode char U+00FF (decimal 255) - defining Unicode char U+0102 (decimal 258) - defining Unicode char U+0103 (decimal 259) - defining Unicode char U+0104 (decimal 260) - defining Unicode char U+0105 (decimal 261) - defining Unicode char U+0106 (decimal 262) - defining Unicode char U+0107 (decimal 263) - defining Unicode char U+010C (decimal 268) - defining Unicode char U+010D (decimal 269) - defining Unicode char U+010E (decimal 270) - defining Unicode char U+010F (decimal 271) - defining Unicode char U+0110 (decimal 272) - defining Unicode char U+0111 (decimal 273) - defining Unicode char U+0118 (decimal 280) - defining Unicode char U+0119 (decimal 281) - defining Unicode char U+011A (decimal 282) - defining Unicode char U+011B (decimal 283) - defining Unicode char U+011E (decimal 286) - defining Unicode char U+011F (decimal 287) - defining Unicode char U+0130 (decimal 304) - defining Unicode char U+0131 (decimal 305) - defining Unicode char U+0132 (decimal 306) - defining Unicode char U+0133 (decimal 307) - defining Unicode char U+0139 (decimal 313) - defining Unicode char U+013A (decimal 314) - defining Unicode char U+013D (decimal 317) - defining Unicode char U+013E (decimal 318) - defining Unicode char U+0141 (decimal 321) - defining Unicode char U+0142 (decimal 322) - defining Unicode char U+0143 (decimal 323) - defining Unicode char U+0144 (decimal 324) - defining Unicode char U+0147 (decimal 327) - defining Unicode char U+0148 (decimal 328) - defining Unicode char U+014A (decimal 330) - defining Unicode char U+014B (decimal 331) - defining Unicode char U+0150 (decimal 336) - defining Unicode char U+0151 (decimal 337) - defining Unicode char U+0152 (decimal 338) - defining Unicode char U+0153 (decimal 339) - defining Unicode char U+0154 (decimal 340) - defining Unicode char U+0155 (decimal 341) - defining Unicode char U+0158 (decimal 344) - defining Unicode char U+0159 (decimal 345) - defining Unicode char U+015A (decimal 346) - defining Unicode char U+015B (decimal 347) - defining Unicode char U+015E (decimal 350) - defining Unicode char U+015F (decimal 351) - defining Unicode char U+0160 (decimal 352) - defining Unicode char U+0161 (decimal 353) - defining Unicode char U+0162 (decimal 354) - defining Unicode char U+0163 (decimal 355) - defining Unicode char U+0164 (decimal 356) - defining Unicode char U+0165 (decimal 357) - defining Unicode char U+016E (decimal 366) - defining Unicode char U+016F (decimal 367) - defining Unicode char U+0170 (decimal 368) - defining Unicode char U+0171 (decimal 369) - defining Unicode char U+0178 (decimal 376) - defining Unicode char U+0179 (decimal 377) - defining Unicode char U+017A (decimal 378) - defining Unicode char U+017B (decimal 379) - defining Unicode char U+017C (decimal 380) - defining Unicode char U+017D (decimal 381) - defining Unicode char U+017E (decimal 382) - defining Unicode char U+200C (decimal 8204) - defining Unicode char U+2013 (decimal 8211) - defining Unicode char U+2014 (decimal 8212) - defining Unicode char U+2018 (decimal 8216) - defining Unicode char U+2019 (decimal 8217) - defining Unicode char U+201A (decimal 8218) - defining Unicode char U+201C (decimal 8220) - defining Unicode char U+201D (decimal 8221) - defining Unicode char U+201E (decimal 8222) - defining Unicode char U+2030 (decimal 8240) - defining Unicode char U+2031 (decimal 8241) - defining Unicode char U+2039 (decimal 8249) - defining Unicode char U+203A (decimal 8250) - defining Unicode char U+2423 (decimal 9251) -) -Now handling font encoding OT1 ... -... processing UTF-8 mapping file for font encoding OT1 - -(/usr/share/texlive/texmf-dist/tex/latex/base/ot1enc.dfu -File: ot1enc.dfu 2008/04/05 v1.1m UTF-8 support for inputenc - defining Unicode char U+00A1 (decimal 161) - defining Unicode char U+00A3 (decimal 163) - defining Unicode char U+00B8 (decimal 184) - defining Unicode char U+00BF (decimal 191) - defining Unicode char U+00C5 (decimal 197) - defining Unicode char U+00C6 (decimal 198) - defining Unicode char U+00D8 (decimal 216) - defining Unicode char U+00DF (decimal 223) - defining Unicode char U+00E6 (decimal 230) - defining Unicode char U+00EC (decimal 236) - defining Unicode char U+00ED (decimal 237) - defining Unicode char U+00EE (decimal 238) - defining Unicode char U+00EF (decimal 239) - defining Unicode char U+00F8 (decimal 248) - defining Unicode char U+0131 (decimal 305) - defining Unicode char U+0141 (decimal 321) - defining Unicode char U+0142 (decimal 322) - defining Unicode char U+0152 (decimal 338) - defining Unicode char U+0153 (decimal 339) - defining Unicode char U+2013 (decimal 8211) - defining Unicode char U+2014 (decimal 8212) - defining Unicode char U+2018 (decimal 8216) - defining Unicode char U+2019 (decimal 8217) - defining Unicode char U+201C (decimal 8220) - defining Unicode char U+201D (decimal 8221) -) -Now handling font encoding OMS ... -... processing UTF-8 mapping file for font encoding OMS - -(/usr/share/texlive/texmf-dist/tex/latex/base/omsenc.dfu -File: omsenc.dfu 2008/04/05 v1.1m UTF-8 support for inputenc - defining Unicode char U+00A7 (decimal 167) - defining Unicode char U+00B6 (decimal 182) - defining Unicode char U+00B7 (decimal 183) - defining Unicode char U+2020 (decimal 8224) - defining Unicode char U+2021 (decimal 8225) - defining Unicode char U+2022 (decimal 8226) -) -Now handling font encoding OMX ... -... no UTF-8 mapping file for font encoding OMX -Now handling font encoding U ... -... no UTF-8 mapping file for font encoding U -Now handling font encoding TS1 ... -... processing UTF-8 mapping file for font encoding TS1 - -(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.dfu -File: ts1enc.dfu 2008/04/05 v1.1m UTF-8 support for inputenc - defining Unicode char U+00A2 (decimal 162) - defining Unicode char U+00A3 (decimal 163) - defining Unicode char U+00A4 (decimal 164) - defining Unicode char U+00A5 (decimal 165) - defining Unicode char U+00A6 (decimal 166) - defining Unicode char U+00A7 (decimal 167) - defining Unicode char U+00A8 (decimal 168) - defining Unicode char U+00A9 (decimal 169) - defining Unicode char U+00AA (decimal 170) - defining Unicode char U+00AC (decimal 172) - defining Unicode char U+00AE (decimal 174) - defining Unicode char U+00AF (decimal 175) - defining Unicode char U+00B0 (decimal 176) - defining Unicode char U+00B1 (decimal 177) - defining Unicode char U+00B2 (decimal 178) - defining Unicode char U+00B3 (decimal 179) - defining Unicode char U+00B4 (decimal 180) - defining Unicode char U+00B5 (decimal 181) - defining Unicode char U+00B6 (decimal 182) - defining Unicode char U+00B7 (decimal 183) - defining Unicode char U+00B9 (decimal 185) - defining Unicode char U+00BA (decimal 186) - defining Unicode char U+00BC (decimal 188) - defining Unicode char U+00BD (decimal 189) - defining Unicode char U+00BE (decimal 190) - defining Unicode char U+00D7 (decimal 215) - defining Unicode char U+00F7 (decimal 247) - defining Unicode char U+0192 (decimal 402) - defining Unicode char U+02C7 (decimal 711) - defining Unicode char U+02D8 (decimal 728) - defining Unicode char U+02DD (decimal 733) - defining Unicode char U+0E3F (decimal 3647) - defining Unicode char U+2016 (decimal 8214) - defining Unicode char U+2020 (decimal 8224) - defining Unicode char U+2021 (decimal 8225) - defining Unicode char U+2022 (decimal 8226) - defining Unicode char U+2030 (decimal 8240) - defining Unicode char U+2031 (decimal 8241) - defining Unicode char U+203B (decimal 8251) - defining Unicode char U+203D (decimal 8253) - defining Unicode char U+2044 (decimal 8260) - defining Unicode char U+204E (decimal 8270) - defining Unicode char U+2052 (decimal 8274) - defining Unicode char U+20A1 (decimal 8353) - defining Unicode char U+20A4 (decimal 8356) - defining Unicode char U+20A6 (decimal 8358) - defining Unicode char U+20A9 (decimal 8361) - defining Unicode char U+20AB (decimal 8363) - defining Unicode char U+20AC (decimal 8364) - defining Unicode char U+20B1 (decimal 8369) - defining Unicode char U+2103 (decimal 8451) - defining Unicode char U+2116 (decimal 8470) - defining Unicode char U+2117 (decimal 8471) - defining Unicode char U+211E (decimal 8478) - defining Unicode char U+2120 (decimal 8480) - defining Unicode char U+2122 (decimal 8482) - defining Unicode char U+2126 (decimal 8486) - defining Unicode char U+2127 (decimal 8487) - defining Unicode char U+212E (decimal 8494) - defining Unicode char U+2190 (decimal 8592) - defining Unicode char U+2191 (decimal 8593) - defining Unicode char U+2192 (decimal 8594) - defining Unicode char U+2193 (decimal 8595) - defining Unicode char U+2329 (decimal 9001) - defining Unicode char U+232A (decimal 9002) - defining Unicode char U+2422 (decimal 9250) - defining Unicode char U+25E6 (decimal 9702) - defining Unicode char U+25EF (decimal 9711) - defining Unicode char U+266A (decimal 9834) -) - defining Unicode char U+00A9 (decimal 169) - defining Unicode char U+00AA (decimal 170) - defining Unicode char U+00AE (decimal 174) - defining Unicode char U+00BA (decimal 186) - defining Unicode char U+02C6 (decimal 710) - defining Unicode char U+02DC (decimal 732) - defining Unicode char U+200C (decimal 8204) - defining Unicode char U+2026 (decimal 8230) - defining Unicode char U+2122 (decimal 8482) - defining Unicode char U+2423 (decimal 9251) -)) -(/usr/share/texlive/texmf-dist/tex/latex/eurosym/eurosym.sty -Package: eurosym 1998/08/06 v1.1 European currency symbol ``Euro'' -\@eurobox=\box31 -) -(/usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty -\fancy@headwidth=\skip189 -\f@ncyO@elh=\skip190 -\f@ncyO@erh=\skip191 -\f@ncyO@olh=\skip192 -\f@ncyO@orh=\skip193 -\f@ncyO@elf=\skip194 -\f@ncyO@erf=\skip195 -\f@ncyO@olf=\skip196 -\f@ncyO@orf=\skip197 -) -(/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty -Package: longtable 2004/02/01 v4.11 Multi-page Table package (DPC) -\LTleft=\skip198 -\LTright=\skip199 -\LTpre=\skip200 -\LTpost=\skip201 -\LTchunksize=\count152 -\LTcapwidth=\dimen157 -\LT@head=\box32 -\LT@firsthead=\box33 -\LT@foot=\box34 -\LT@lastfoot=\box35 -\LT@cols=\count153 -\LT@rows=\count154 -\c@LT@tables=\count155 -\c@LT@chunks=\count156 -\LT@p@ftn=\toks32 -) -(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty -Package: graphicx 1999/02/16 v1.0f Enhanced LaTeX Graphics (DPC,SPQR) - -(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty -Package: graphics 2009/02/05 v1.0o Standard LaTeX Graphics (DPC,SPQR) - -(/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty -Package: trig 1999/03/16 v1.09 sin cos tan (DPC) -) -(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/graphics.cfg -File: graphics.cfg 2010/04/23 v1.9 graphics configuration of TeX Live -) -Package graphics Info: Driver file: pdftex.def on input line 91. - -(/usr/share/texlive/texmf-dist/tex/latex/pdftex-def/pdftex.def -File: pdftex.def 2011/05/27 v0.06d Graphics/color for pdfTeX - -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/infwarerr.sty -Package: infwarerr 2010/04/08 v1.3 Providing info/warning/error messages (HO) -) -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty -Package: ltxcmds 2011/11/09 v1.22 LaTeX kernel commands for general use (HO) -) -\Gread@gobject=\count157 -)) -\Gin@req@height=\dimen158 -\Gin@req@width=\dimen159 -) -(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty -Package: hyperref 2012/11/06 v6.83m Hypertext links for LaTeX - -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty -Package: hobsub-hyperref 2012/05/28 v1.13 Bundle oberdiek, subset hyperref (HO) - - -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty -Package: hobsub-generic 2012/05/28 v1.13 Bundle oberdiek, subset generic (HO) -Package: hobsub 2012/05/28 v1.13 Construct package bundles (HO) -Package hobsub Info: Skipping package `infwarerr' (already loaded). -Package hobsub Info: Skipping package `ltxcmds' (already loaded). -Package hobsub Info: Skipping package `ifluatex' (already loaded). -Package: ifvtex 2010/03/01 v1.5 Detect VTeX and its facilities (HO) -Package ifvtex Info: VTeX not detected. -Package: intcalc 2007/09/27 v1.1 Expandable calculations with integers (HO) -Package hobsub Info: Skipping package `ifpdf' (already loaded). -Package: etexcmds 2011/02/16 v1.5 Avoid name clashes with e-TeX commands (HO) -Package etexcmds Info: Could not find \expanded. -(etexcmds) That can mean that you are not using pdfTeX 1.50 or -(etexcmds) that some package has redefined \expanded. -(etexcmds) In the latter case, load this package earlier. -Package: kvsetkeys 2012/04/25 v1.16 Key value parser (HO) -Package: kvdefinekeys 2011/04/07 v1.3 Define keys (HO) -Package: pdftexcmds 2011/11/29 v0.20 Utility functions of pdfTeX for LuaTeX (HO -) -Package pdftexcmds Info: LuaTeX not detected. -Package pdftexcmds Info: \pdf@primitive is available. -Package pdftexcmds Info: \pdf@ifprimitive is available. -Package pdftexcmds Info: \pdfdraftmode found. -Package: pdfescape 2011/11/25 v1.13 Implements pdfTeX's escape features (HO) -Package: bigintcalc 2012/04/08 v1.3 Expandable calculations on big integers (HO -) -Package: bitset 2011/01/30 v1.1 Handle bit-vector datatype (HO) -Package: uniquecounter 2011/01/30 v1.2 Provide unlimited unique counter (HO) -) -Package hobsub Info: Skipping package `hobsub' (already loaded). -Package: letltxmacro 2010/09/02 v1.4 Let assignment for LaTeX macros (HO) -Package: hopatch 2012/05/28 v1.2 Wrapper for package hooks (HO) -Package: xcolor-patch 2011/01/30 xcolor patch -Package: atveryend 2011/06/30 v1.8 Hooks at the very end of document (HO) -Package atveryend Info: \enddocument detected (standard20110627). -Package: atbegshi 2011/10/05 v1.16 At begin shipout hook (HO) -Package: refcount 2011/10/16 v3.4 Data extraction from label references (HO) -Package: hycolor 2011/01/30 v1.7 Color options for hyperref/bookmark (HO) -) -(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/auxhook.sty -Package: auxhook 2011/03/04 v1.3 Hooks for auxiliary files (HO) -) -(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty -Package: kvoptions 2011/06/30 v3.11 Key value format for package options (HO) -) -\@linkdim=\dimen160 -\Hy@linkcounter=\count158 -\Hy@pagecounter=\count159 - -(/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def -File: pd1enc.def 2012/11/06 v6.83m Hyperref: PDFDocEncoding definition (HO) -Now handling font encoding PD1 ... -... no UTF-8 mapping file for font encoding PD1 -) -\Hy@SavedSpaceFactor=\count160 - -(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/hyperref.cfg -File: hyperref.cfg 2002/06/06 v1.2 hyperref configuration of TeXLive -) -Package hyperref Info: Option `final' set `true' on input line 4319. -Package hyperref Info: Option `unicode' set `true' on input line 4319. - -(/usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def -File: puenc.def 2012/11/06 v6.83m Hyperref: PDF Unicode definition (HO) -Now handling font encoding PU ... -... no UTF-8 mapping file for font encoding PU -) -Package hyperref Info: Hyper figures OFF on input line 4443. -Package hyperref Info: Link nesting OFF on input line 4448. -Package hyperref Info: Hyper index ON on input line 4451. -Package hyperref Info: Plain pages OFF on input line 4458. -Package hyperref Info: Backreferencing OFF on input line 4463. -Package hyperref Info: Implicit mode ON; LaTeX internals redefined. -Package hyperref Info: Bookmarks ON on input line 4688. -\c@Hy@tempcnt=\count161 - -(/usr/share/texlive/texmf-dist/tex/latex/url/url.sty -\Urlmuskip=\muskip11 -Package: url 2006/04/12 ver 3.3 Verb mode for urls, etc. -) -LaTeX Info: Redefining \url on input line 5041. -\XeTeXLinkMargin=\dimen161 -\Fld@menulength=\count162 -\Field@Width=\dimen162 -\Fld@charsize=\dimen163 -Package hyperref Info: Hyper figures OFF on input line 6295. -Package hyperref Info: Link nesting OFF on input line 6300. -Package hyperref Info: Hyper index ON on input line 6303. -Package hyperref Info: backreferencing OFF on input line 6310. -Package hyperref Info: Link coloring OFF on input line 6315. -Package hyperref Info: Link coloring with OCG OFF on input line 6320. -Package hyperref Info: PDF/A mode OFF on input line 6325. -LaTeX Info: Redefining \ref on input line 6365. -LaTeX Info: Redefining \pageref on input line 6369. -\Hy@abspage=\count163 -\c@Item=\count164 -\c@Hfootnote=\count165 -) -(/usr/share/texlive/texmf-dist/tex/latex/memoir/memhfixc.sty -Package: memhfixc 2013/05/30 v1.17 nameref/hyperref package fixes for memoir cl -ass -\c@memhycontfloat=\count166 -\c@Hpagenote=\count167 -) - -Package hyperref Message: Driver (autodetected): hpdftex. - -(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def -File: hpdftex.def 2012/11/06 v6.83m Hyperref driver for pdfTeX -\Fld@listcount=\count168 -\c@bookmark@seq@number=\count169 - -(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty -Package: rerunfilecheck 2011/04/15 v1.7 Rerun checks for auxiliary files (HO) -Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2 -82. -) -\Hy@SectionHShift=\skip202 -) -Package hyperref Info: Option `breaklinks' set `true' on input line 79. - - -Package hyperref Warning: Option `bookmarks' has already been used, -(hyperref) setting the option has no effect on input line 79. - -Package hyperref Info: Option `colorlinks' set `true' on input line 79. - -LaTeX Warning: Unused global option(s): - [openboth,titlepage]. - -(./example.aux) -\openout1 = `example.aux'. - -LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 107. -LaTeX Font Info: ... okay on input line 107. -LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 107. -LaTeX Font Info: ... okay on input line 107. -LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 107. -LaTeX Font Info: ... okay on input line 107. -LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 107. -LaTeX Font Info: ... okay on input line 107. -LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 107. -LaTeX Font Info: ... okay on input line 107. -LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 107. -LaTeX Font Info: ... okay on input line 107. -LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 107. -LaTeX Font Info: Try loading font information for TS1+cmr on input line 107. - - (/usr/share/texlive/texmf-dist/tex/latex/base/ts1cmr.fd -File: ts1cmr.fd 1999/05/25 v2.5h Standard LaTeX font definitions -) -LaTeX Font Info: ... okay on input line 107. -LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 107. -LaTeX Font Info: ... okay on input line 107. -LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 107. -LaTeX Font Info: ... okay on input line 107. -LaTeX Info: Redefining \microtypecontext on input line 107. -Package microtype Info: Generating PDF output. -Package microtype Info: Character protrusion enabled (level 2). -Package microtype Info: Using default protrusion set `alltext'. -Package microtype Info: Automatic font expansion enabled (level 2), -(microtype) stretch: 20, shrink: 20, step: 1, non-selected. -Package microtype Info: Using default expansion set `basictext'. -Package microtype Info: No adjustment of tracking. -Package microtype Info: No adjustment of interword spacing. -Package microtype Info: No adjustment of character kerning. - -(/usr/share/texlive/texmf-dist/tex/latex/microtype/mt-cmr.cfg -File: mt-cmr.cfg 2013/05/19 v2.2 microtype config. file: Computer Modern Roman -(RS) -) -(/usr/share/texlive/texmf-dist/tex/context/base/supp-pdf.mkii -[Loading MPS to PDF converter (version 2006.09.02).] -\scratchcounter=\count170 -\scratchdimen=\dimen164 -\scratchbox=\box36 -\nofMPsegments=\count171 -\nofMParguments=\count172 -\everyMPshowfont=\toks33 -\MPscratchCnt=\count173 -\MPscratchDim=\dimen165 -\MPnumerator=\count174 -\makeMPintoPDFobject=\count175 -\everyMPtoPDFconversion=\toks34 -) (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty -Package: epstopdf-base 2010/02/09 v2.5 Base part for package epstopdf - -(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty -Package: grfext 2010/08/19 v1.1 Manage graphics extensions (HO) -) -Package grfext Info: Graphics extension search list: -(grfext) [.png,.pdf,.jpg,.mps,.jpeg,.jbig2,.jb2,.PNG,.PDF,.JPG,.JPE -G,.JBIG2,.JB2,.eps] -(grfext) \AppendGraphicsExtensions on input line 452. - -(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg -File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv -e -)) -\AtBeginShipoutBox=\box37 - -(/usr/share/texlive/texmf-dist/tex/latex/graphics/color.sty -Package: color 2005/11/14 v1.0j Standard LaTeX Color (DPC) - -(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/color.cfg -File: color.cfg 2007/01/18 v1.5 color configuration of teTeX/TeXLive -) -Package color Info: Driver file: pdftex.def on input line 130. -) -Package hyperref Info: Link coloring ON on input line 107. - -(/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty -Package: nameref 2012/10/27 v2.43 Cross-referencing by name of section - -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/gettitlestring.sty -Package: gettitlestring 2010/12/03 v1.4 Cleanup title references (HO) -) -\c@section@level=\count176 -) -Redoing nameref's sectioning -Redoing nameref's label -LaTeX Info: Redefining \nameref on input line 107. -LaTeX Info: Redefining \ref on input line 107. -LaTeX Info: Redefining \pageref on input line 107. -LaTeX Info: Redefining \nameref on input line 107. -(./example.out) (./example.out) -\@outlinefile=\write4 -\openout4 = `example.out'. - - (./header.tex -Package microtype Info: Character `029' is missing -(microtype) in font `T1/lmr/m/sc/10.95'. -(microtype) Ignoring protrusion settings for this character. -LaTeX Font Info: Try loading font information for OT1+lmr on input line 3. - -(/usr/share/texmf/tex/latex/lm/ot1lmr.fd -File: ot1lmr.fd 2009/10/30 v1.6 Font defs for Latin Modern -) -LaTeX Font Info: Try loading font information for OML+lmm on input line 3. - -(/usr/share/texmf/tex/latex/lm/omllmm.fd -File: omllmm.fd 2009/10/30 v1.6 Font defs for Latin Modern -) -LaTeX Font Info: Try loading font information for OMS+lmsy on input line 3. - -(/usr/share/texmf/tex/latex/lm/omslmsy.fd -File: omslmsy.fd 2009/10/30 v1.6 Font defs for Latin Modern -) -LaTeX Font Info: Try loading font information for OMX+lmex on input line 3. - -(/usr/share/texmf/tex/latex/lm/omxlmex.fd -File: omxlmex.fd 2009/10/30 v1.6 Font defs for Latin Modern -) -LaTeX Font Info: External font `lmex10' loaded for size -(Font) <12> on input line 3. -LaTeX Font Info: External font `lmex10' loaded for size -(Font) <8> on input line 3. -LaTeX Font Info: External font `lmex10' loaded for size -(Font) <6> on input line 3. -LaTeX Font Info: Try loading font information for U+msa on input line 3. - -(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd -File: umsa.fd 2013/01/14 v3.01 AMS symbols A -) -(/usr/share/texlive/texmf-dist/tex/latex/microtype/mt-msa.cfg -File: mt-msa.cfg 2006/02/04 v1.1 microtype config. file: AMS symbols (a) (RS) -) -LaTeX Font Info: Try loading font information for U+msb on input line 3. - -(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd -File: umsb.fd 2013/01/14 v3.01 AMS symbols B -) -(/usr/share/texlive/texmf-dist/tex/latex/microtype/mt-msb.cfg -File: mt-msb.cfg 2005/06/01 v1.0 microtype config. file: AMS symbols (b) (RS) -) - -LaTeX Warning: No \author given. - -<./UNlogo.png, id=56, 602.25pt x 510.90875pt> -File: ./UNlogo.png Graphic file (type png) - -Package pdftex.def Info: ./UNlogo.png used on input line 4. -(pdftex.def) Requested size: 216.81pt x 183.927pt. - [1 - -{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map} <./UNlogo.png>])pdfTeX warn -ing (ext4): destination with the same identifier (name{page.1}) has been alread -y used, duplicate ignored - - \relax -l.109 \input{header.tex} - [1 - -] -LaTeX Font Info: Try loading font information for T1+lmss on input line 115. - - (/usr/share/texmf/tex/latex/lm/t1lmss.fd -File: t1lmss.fd 2009/10/30 v1.6 Font defs for Latin Modern -) -Package microtype Info: Loading generic settings for font family -(microtype) `lmss' (encoding: T1). -(microtype) For optimal results, create family-specific settings. -(microtype) See the microtype manual for details. - -(./example.toc -LaTeX Font Info: External font `lmex10' loaded for size -(Font) <10.95> on input line 1. -) [2] (./main.tex - -Package hyperref Warning: Ignoring empty anchor on input line 3. - -[3 - -] - -Package hyperref Warning: Ignoring empty anchor on input line 15. - - -Package hyperref Warning: Ignoring empty anchor on input line 29. - -LaTeX Font Info: Try loading font information for TS1+lmr on input line 34. -(/usr/share/texmf/tex/latex/lm/ts1lmr.fd -File: ts1lmr.fd 2009/10/30 v1.6 Font defs for Latin Modern -) - -Package hyperref Warning: Ignoring empty anchor on input line 43. - - -Package hyperref Warning: Ignoring empty anchor on input line 57. - -[4 - -] [5] - -Package hyperref Warning: Ignoring empty anchor on input line 69. - - -Package hyperref Warning: Ignoring empty anchor on input line 73. - - -LaTeX Warning: Hyper reference `' on page 6 undefined on input line 77. - - -LaTeX Warning: Hyper reference `' on page 6 undefined on input line 77. - - -Underfull \vbox (badness 10000) detected at line 100 - [] - -[6 - -] - -Package hyperref Warning: Ignoring empty anchor on input line 106. - - - -File: SHbO80B3zYiLwN09wcE1jxTyLWaBsr7llKXblVz0EwCQsT2EsGznwPa4YwxgN3BwyMSEZhyaz -yYEoA5TNEBswNe6FJ2ZZsw9_E5R3YnzdCYFfcxjoR-rnHg.jpg Graphic file (type jpg) - - -Package pdftex.def Info: SHbO80B3zYiLwN09wcE1jxTyLWaBsr7llKXblVz0EwCQsT2EsGznwP -a4YwxgN3BwyMSEZhyazyYEoA5TNEBswNe6FJ2ZZsw9_E5R3YnzdCYFfcxjoR-rnHg.jpg used on i -nput line 110. -(pdftex.def) Requested size: 472.0pt x 394.24515pt. - [7 <./SHbO80B3zYiLwN09wcE1jxTyLWaBsr7llKXblVz0EwCQsT2EsGznwPa4YwxgN3BwyMSEZhya -zyYEoA5TNEBswNe6FJ2ZZsw9_E5R3YnzdCYFfcxjoR-rnHg.jpg>] - -Package hyperref Warning: Ignoring empty anchor on input line 114. - - -Package hyperref Warning: Ignoring empty anchor on input line 116. - - -Package hyperref Warning: Ignoring empty anchor on input line 120. - - -Package hyperref Warning: Ignoring empty anchor on input line 124. - -[8 - -] - -Package hyperref Warning: Ignoring empty anchor on input line 130. - -) [9 - -] -\tf@toc=\write5 -\openout5 = `example.toc'. - -Package atveryend Info: Empty hook `BeforeClearDocument' on input line 120. -Package atveryend Info: Empty hook `AfterLastShipout' on input line 120. - (./example.aux) -Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 120. -Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 120. -Package rerunfilecheck Info: File `example.out' has not changed. -(rerunfilecheck) Checksum: F7D28216A981BF156C8906C5B5516167;1836. - - -LaTeX Warning: There were undefined references. - -Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 120. - ) -Here is how much of TeX's memory you used: - 15471 strings out of 495031 - 220480 string characters out of 6181531 - 346975 words of memory out of 5000000 - 18410 multiletter control sequences out of 15000+600000 - 64769 words of font info for 71 fonts, out of 8000000 for 9000 - 14 hyphenation exceptions out of 8191 - 42i,11n,43p,679b,386s stack positions out of 5000i,500n,10000p,200000b,80000s -{/usr/share/texmf/fonts/enc/dvips/lm/lm-ec.enc}{/usr/share/texmf/fonts/enc/dv -ips/lm/lm-ts1.enc} -Output written on example.pdf (10 pages, 1474886 bytes). -PDF statistics: - 153 PDF objects out of 1000 (max. 8388607) - 131 compressed objects within 2 object streams - 26 named destinations out of 1000 (max. 500000) - 18035 words of extra memory for PDF output out of 20736 (max. 10000000) - diff --git a/build/example/example.out b/build/example/example.out deleted file mode 100644 index fa311d0..0000000 --- a/build/example/example.out +++ /dev/null @@ -1,13 +0,0 @@ -\BOOKMARK [0][-]{chapter.1}{\376\377\000B\000a\000c\000k\000g\000r\000o\000u\000n\000d}{}% 1 -\BOOKMARK [0][-]{chapter.2}{\376\377\000P\000r\000o\000p\000o\000s\000e\000d\000\040\000S\000o\000l\000u\000t\000i\000o\000n}{}% 2 -\BOOKMARK [1][-]{section.2.1}{\376\377\000E\000x\000p\000o\000r\000t\000\040\000c\000o\000m\000p\000o\000n\000e\000n\000t}{chapter.2}% 3 -\BOOKMARK [1][-]{section.2.2}{\376\377\000I\000m\000p\000o\000r\000t\000\040\000c\000o\000m\000p\000o\000n\000e\000n\000t}{chapter.2}% 4 -\BOOKMARK [1][-]{section.2.3}{\376\377\000B\000e\000n\000e\000f\000i\000t\000s\000\040\000o\000f\000\040\000o\000u\000r\000\040\000s\000o\000l\000u\000t\000i\000o\000n}{chapter.2}% 5 -\BOOKMARK [0][-]{chapter.3}{\376\377\000S\000c\000h\000e\000d\000u\000l\000e\000\040\000a\000n\000d\000\040\000B\000u\000d\000g\000e\000t}{}% 6 -\BOOKMARK [1][-]{section.3.1}{\376\377\000T\000a\000b\000l\000e}{chapter.3}% 7 -\BOOKMARK [1][-]{section.3.2}{\376\377\000D\000i\000a\000g\000r\000a\000m\000\040\000s\000h\000o\000w\000i\000n\000g\000\040\000h\000o\000w\000\040\000w\000o\000r\000k\000\040\000i\000s\000\040\000s\000p\000l\000i\000t}{chapter.3}% 8 -\BOOKMARK [0][-]{chapter.4}{\376\377\000T\000e\000r\000m\000s\000\040\000a\000n\000d\000\040\000C\000o\000n\000d\000i\000t\000i\000o\000n\000s}{}% 9 -\BOOKMARK [1][-]{section.4.1}{\376\377\000S\000t\000a\000f\000f\000i\000n\000g}{chapter.4}% 10 -\BOOKMARK [1][-]{section.4.2}{\376\377\000R\000e\000l\000a\000t\000i\000o\000n\000\040\000t\000o\000\040\000O\000t\000h\000e\000r\000\040\000A\000g\000r\000e\000e\000m\000e\000n\000t\000s}{chapter.4}% 11 -\BOOKMARK [1][-]{section.4.3}{\376\377\000L\000a\000n\000g\000u\000a\000g\000e\000\040\000o\000f\000\040\000C\000o\000n\000t\000r\000a\000c\000t}{chapter.4}% 12 -\BOOKMARK [0][-]{chapter.5}{\376\377\000A\000g\000r\000e\000e\000m\000e\000n\000t}{}% 13 diff --git a/build/example/example.pdf b/build/example/example.pdf deleted file mode 100644 index 055d5d1..0000000 Binary files a/build/example/example.pdf and /dev/null differ diff --git a/build/example/example.rtf b/build/example/example.rtf deleted file mode 100644 index ae5e335..0000000 --- a/build/example/example.rtf +++ /dev/null @@ -1,118 +0,0 @@ -{\rtf1\ansi\deff0{\fonttbl{\f0 \fswiss Helvetica;}{\f1 Courier;}} -{\colortbl;\red255\green0\blue0;\red0\green0\blue255;} -\widowctrl\hyphauto - -{\pard \qc \f0 \sa180 \li0 \fi0 \b \fs36 Sample Statement of Work\par} -{\pard \ql \f0 \sa180 \li0 \fi0 \par} -{\pard \ql \f0 \sa180 \li0 \fi0 \par} -{\pard \ql \f0 \sa180 \li0 \fi0 \par} -{\pard \ql \f0 \sa180 \li0 \fi0 \par} -{\pard \ql \f0 \sa180 \li0 \fi0 \par} -{\pard \ql \f0 \sa180 \li0 \fi0 \par} -{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs36 Background\par} -{\pard \ql \f0 \sa180 \li0 \fi0 Every project needs a background. Here\u8217's some lorem ipsum about the project.\par} -{\pard \ql \f0 \sa180 \li0 \fi0 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sit amet arcu elit. Donec at massa et leo auctor fringilla vitae id erat. Nam feugiat velit vitae ornare tristique. Morbi porttitor, orci vel dapibus malesuada, magna libero ultrices massa, nec interdum diam nisi elementum ipsum. Vestibulum elit lorem, pretium id semper ac, aliquam ut dui. Etiam at magna non nibh viverra tristique. Maecenas consectetur vulputate tellus, ac rutrum felis molestie ut. Aenean tincidunt congue cursus. Maecenas in egestas magna, nec pellentesque justo. Phasellus ante quam, faucibus sit amet tellus et, fringilla convallis eros.\par} -{\pard \ql \f0 \sa180 \li0 \fi0 Nullam vitae imperdiet enim. Ut id ultrices leo. In dictum bibendum vestibulum. Donec lobortis condimentum mauris ac interdum. Duis bibendum molestie eleifend. Nunc non neque a neque ornare euismod non ut sapien. Morbi sed diam quis felis commodo vehicula ac et augue. Maecenas pretium justo sit amet imperdiet pharetra.\par} -{\pard \ql \f0 \sa180 \li0 \fi0 Nunc at odio massa. In hac habitasse platea dictumst. Donec posuere erat ac ultrices suscipit. Quisque id velit nulla. Ut in urna orci. Sed at euismod neque. Sed velit velit, fringilla vitae eleifend eget, auctor id mi.\par} -{\pard \ql \f0 \sa180 \li0 \fi0 \par} -{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs36 Proposed Solution\par} -{\pard \ql \f0 \sa180 \li0 \fi0 This wouldn\u8217't be a proposal unless it proposed something. We will re-architect the system into a series of robust robust components:\par} -{\pard \ql \f0 \sa0 \li360 \fi-360 1.\tx360\tab export, a script to export the data from access, validate it, refactor it into a logical format, then output it in plain-text format.\par} -{\pard \ql \f0 \sa0 \li360 \fi-360 2.\tx360\tab import, a simple, robust module to handle file uploads of the cleaned data, and efficiently import this data. It will do sufficient error handling to allow full automation.\sa180\par} -{\pard \ql \f0 \sa180 \li0 \fi0 As we perform the refactoring, we will rewriting the code to ensure it\u8217's documented, easy to test, and easy to update as future needs are identified.\par} -{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs32 Export component\par} -{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab This will be a standalone script responsible for extracting data from source database, and cleaning it up as appropriate.\par} -{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab The output format is human readable JSON files, with a logical, easy to understand structure\par} -{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab Easy to verify output through manual inspection of output\par} -{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab Include comprehensive automated tests to ensure output is correct\sa180\par} -{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs32 Import component\par} -{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab Allows non-technical staff to upload already validated JSON files, and sync the target database accordingly.\par} -{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab Assumes that input data is relatively safe, as it\u8217's produced via the export component\par} -{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab Will be optimized to perform quickly; typical runs will be completed within 60 seconds\par} -{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab Improved validation and error handling\sa180\par} -{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs32 Benefits of our solution\par} -{\pard \ql \f0 \sa180 \li0 \fi0 Here\u8217's some more {\b lorem ipsum}\u160?for you all. Nullam vitae imperdiet enim. Ut id ultrices leo. In dictum bibendum vestibulum. Donec lobortis condimentum mauris ac interdum. Duis bibendum molestie eleifend. Nunc non neque a neque ornare euismod non ut sapien. Morbi sed diam quis felis commodo vehicula ac et augue. Maecenas pretium justo sit amet imperdiet pharetra.\par} -{\pard \ql \f0 \sa180 \li0 \fi0 Nunc at odio massa. In hac habitasse platea dictumst. Donec posuere erat ac ultrices suscipit. Quisque id velit nulla. Ut in urna orci. Sed at euismod neque. Sed velit velit, fringilla vitae eleifend eget, auctor id mi.\par} -{\pard \ql \f0 \sa180 \li0 \fi0 Nullam vitae imperdiet enim. Ut id ultrices leo. In dictum bibendum vestibulum. Donec lobortis condimentum mauris ac interdum. Duis bibendum molestie eleifend. Nunc non neque a neque ornare euismod non ut sapien. Morbi sed diam quis felis commodo vehicula ac et augue. Maecenas pretium justo sit amet imperdiet pharetra.\par} -{\pard \ql \f0 \sa180 \li0 \fi0 Nullam vitae imperdiet enim. Ut id ultrices leo. In dictum bibendum vestibulum. Donec lobortis condimentum mauris ac interdum. Duis bibendum molestie eleifend. Nunc non neque a neque ornare euismod non ut sapien. Morbi sed diam quis felis commodo vehicula ac et augue. Maecenas pretium justo sit amet imperdiet pharetra.\par} -{\pard \ql \f0 \sa180 \li0 \fi0 \par} -{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs36 Schedule and Budget\par} -{\pard \ql \f0 \sa180 \li0 \fi0 The work described in this mandate will take 300 hours to complete, to be performed within 6-8 weeks of the signing of this agreement.\par} -{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs32 Table\par} -{\pard \ql \f0 \sa180 \li0 \fi0 Here is a schedule of the work:\par} -{\pard \ql \f0 \sa180 \li0 \fi0 \par} -{\pard \ql \f0 \sa180 \li0 \fi0 {\field{\*\fldinst{HYPERLINK "#"}}{\fldrslt{\ul - -}}} -{\field{\*\fldinst{HYPERLINK "#"}}{\fldrslt{\ul - -}}} -\par} -{ -\trowd \trgaph120 -\cellx4320\cellx8640 -\trkeep\intbl -{ -{\intbl {\pard \ql \f0 \sa180 \li0 \fi0 gdocs-export:author\par} -\cell} -{\intbl {\pard \ql \f0 \sa180 \li0 \fi0 Alex\par} -\cell} -} -\intbl\row} -{ -\trowd \trgaph120 -\cellx4320\cellx8640 -\trkeep\intbl -{ -{\intbl {\pard \ql \f0 \sa180 \li0 \fi0 1\par} -\cell} -{\intbl {\pard \ql \f0 \sa180 \li0 \fi0 150\par} -\cell} -} -\intbl\row} -{ -\trowd \trgaph120 -\cellx4320\cellx8640 -\trkeep\intbl -{ -{\intbl {\pard \ql \f0 \sa180 \li0 \fi0 2\par} -\cell} -{\intbl {\pard \ql \f0 \sa180 \li0 \fi0 150\par} -\cell} -} -\intbl\row} -{\pard \ql \f0 \sa180 \li0 \fi0 \par} -{\pard \ql \f0 \sa180 \li0 \fi0 \par} -{\pard \ql \f0 \sa180 \li0 \fi0 The following diagram should be on a separate page, to test page break:\par} -{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs32 Diagram showing how work is split\par} -{\pard \ql \f0 \sa180 \li0 \fi0 Every document needs a diagram!\par} -{\pard \ql \f0 \sa180 \li0 \fi0 {\cf1 [image: SHbO80B3zYiLwN09wcE1jxTyLWaBsr7llKXblVz0EwCQsT2EsGznwPa4YwxgN3BwyMSEZhyazyYEoA5TNEBswNe6FJ2ZZsw9_E5R3YnzdCYFfcxjoR-rnHg.jpg]\cf0}\par} -{\pard \ql \f0 \sa180 \li0 \fi0 \par} -{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs36 Terms and Conditions\par} -{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs32 Staffing\par} -{\pard \ql \f0 \sa180 \li0 \fi0 Appropriate staff will be used for the execution of this project.\par} -{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs32 Relation to Other Agreements\par} -{\pard \ql \f0 \sa180 \li0 \fi0 This agreement is governed by the same terms and conditions as some other documents.\par} -{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs32 Language of Contract\par} -{\pard \ql \f0 \sa180 \li0 \fi0 Les parties ont convenu de r\u233?diger cette entente en anglais. Parties have decided that this agreement be formulated in English.\par} -{\pard \ql \f0 \sa180 \li0 \fi0 \par} -{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs36 Agreement\par} -{\pard \ql \f0 \sa180 \li0 \fi0 This document is a contract, and contracts must be signed.\par} -{\pard \ql \f0 \sa180 \li0 \fi0 \par} -{\pard \ql \f0 \sa180 \li0 \fi0 Signed on behalf of {\b Client LLC}:\par} -{\pard \ql \f0 \sa180 \li0 \fi0 \par} -{\pard \ql \f0 \sa180 \li0 \fi0 \u160?\par} -{\pard \ql \f0 \sa180 \li0 \fi0 \u160?\par} -{\pard \ql \f0 \sa180 \li0 \fi0 \par} -{\pard \ql \f0 \sa180 \li0 \fi0 Name and title\par} -{\pard \ql \f0 \sa180 \li0 \fi0 \u160?\par} -{\pard \ql \f0 \sa180 \li0 \fi0 \u160?\par} -{\pard \ql \f0 \sa180 \li0 \fi0 \par} -{\pard \ql \f0 \sa180 \li0 \fi0 Signature and date\par} -{\pard \ql \f0 \sa180 \li0 \fi0 \par} -{\pard \ql \f0 \sa180 \li0 \fi0 Signed by Adam Smith, President of {\b Vendor Inc.:}\par} -{\pard \ql \f0 \sa180 \li0 \fi0 \par} -{\pard \ql \f0 \sa180 \li0 \fi0 \par} -{\pard \ql \f0 \sa180 \li0 \fi0 \par} -{\pard \ql \f0 \sa180 \li0 \fi0 Signature and date\par} -} diff --git a/build/example/example.tex b/build/example/example.tex deleted file mode 100644 index fe3a634..0000000 --- a/build/example/example.tex +++ /dev/null @@ -1,120 +0,0 @@ -% Docs in http://www.tex.ac.uk/ctan/macros/latex/contrib/memoir/memman.pdf - -\input{metadata.tex} - -\documentclass[letterpaper,oldfontcommands,11pt,extrafontsizes,onecolumn,oneside,openboth,final,titlepage]{memoir} -\usepackage[T1]{fontenc} -\usepackage{lmodern} -\usepackage{amssymb,amsmath} -\usepackage{ifxetex,ifluatex} -\usepackage{fixltx2e} % provides \textsubscript - -% reduce page margins to a reasonable size -\setlrmarginsandblock{2.5cm}{2.5cm}{*} -\setulmarginsandblock{2.5cm}{2.5cm}{*} -\checkandfixthelayout - - -% use microtype if available -\IfFileExists{microtype.sty}{\usepackage{microtype}}{} -% use upquote if available, for straight quotes in verbatim environments -\IfFileExists{upquote.sty}{\usepackage{upquote}}{} - -\usepackage[utf8]{inputenc} -\usepackage{eurosym} - -% http://tex.stackexchange.com/questions/37868/fancyhdr-and-memoir -\let\footruleskip\undefined - -\usepackage{fancyhdr} -\renewcommand{\headrulewidth}{0pt} - -% Chapter 2. Project Description ==> 2. Project Description -\renewcommand{\chaptermark}[1]{\markboth{\thechapter.\ #1}{}} - -\fancypagestyle{plain}{ % used for pages that start new chapters - \lhead{} - \chead{} - \rhead{} - \cfoot{} - \rfoot{\thepage/\thelastpage} -} - -\fancypagestyle{gdocs}{ - \lhead{} - \chead{} - \rhead{\itshape{\nouppercase{\leftmark}}} - \cfoot{} - \rfoot{\thepage/\thelastpage} -} - -\pagestyle{gdocs} - -\chapterstyle{komalike} % also consider article, tandh - - -% used for printing google docs templates -\usepackage{longtable} -% used for printing google docs images -\usepackage{graphicx} -% We will generate all images so they have a width \maxwidth. This means -% that they will get their normal width if they fit onto the page, but -% are scaled down if they would overflow the margins. -\makeatletter -\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth -\else\Gin@nat@width\fi} -\makeatother -\let\Oldincludegraphics\includegraphics -\renewcommand{\includegraphics}[1]{\Oldincludegraphics[width=\maxwidth]{#1}} - -% used for google docs links -\usepackage[unicode=true]{hyperref} -\hypersetup{breaklinks=true, - bookmarks=true, - pdfauthor=, %TODO: fix the author - pdftitle=\mytitle, - colorlinks=true, - urlcolor=blue, - linkcolor=magenta, - pdfborder={0 0 0}} - -% Uncommnet to make embedded links print out HREF in footnotes, good for printing -% \renewcommand{\href}[2]{#2\footnote{\url{#1}}} - -\setlength{\parindent}{0pt} -\setlength{\parskip}{7pt plus 2pt minus 1pt} -\setlength{\emergencystretch}{3em} % prevent overfull lines - -% Limits depth of automatic numbering of headings. -% 0 => Only H1 (chapters), 1 => Up to H2 (sections), 2 => Up to H3 (subsections) -\setcounter{secnumdepth}{2} - -% memoir specific variable that lowers the title by 200pt -\setlength{\droptitle}{200pt} - -% customize size and alignment of title and subtitle -\pretitle{\begin{flushleft}} -\title{\bfseries \HUGE \mytitle \\ \vskip .5em \LARGE \mysubtitle} -\posttitle{\par\vskip1em{\normalfont\normalsize\scshape \par\vfill}\end{flushleft}\vskip 0.5em} - -% TODO generate the author somehow -% \author{} - -% Suppress printing todays date. -% TODO: currently looks bad if not blank; make it look good and replace with todays date -\date{} - -\begin{document} - -\input{header.tex} - -\setcounter{tocdepth}{1} -\begin{KeepFromToc} - \hypersetup{linkcolor=black} - \tableofcontents -\end{KeepFromToc} -\pagebreak - -\input{main.tex} - -\end{document} diff --git a/build/example/example.toc b/build/example/example.toc deleted file mode 100644 index b8b37eb..0000000 --- a/build/example/example.toc +++ /dev/null @@ -1,13 +0,0 @@ -\contentsline {chapter}{\chapternumberline {1}Background}{3}{chapter.1} -\contentsline {chapter}{\chapternumberline {2}Proposed Solution}{4}{chapter.2} -\contentsline {section}{\numberline {2.1}Export component}{4}{section.2.1} -\contentsline {section}{\numberline {2.2}Import component}{4}{section.2.2} -\contentsline {section}{\numberline {2.3}Benefits of our solution}{4}{section.2.3} -\contentsline {chapter}{\chapternumberline {3}Schedule and Budget}{6}{chapter.3} -\contentsline {section}{\numberline {3.1}Table}{6}{section.3.1} -\contentsline {section}{\numberline {3.2}Diagram showing how work is split}{7}{section.3.2} -\contentsline {chapter}{\chapternumberline {4}Terms and Conditions}{8}{chapter.4} -\contentsline {section}{\numberline {4.1}Staffing}{8}{section.4.1} -\contentsline {section}{\numberline {4.2}Relation to Other Agreements}{8}{section.4.2} -\contentsline {section}{\numberline {4.3}Language of Contract}{8}{section.4.3} -\contentsline {chapter}{\chapternumberline {5}Agreement}{9}{chapter.5} diff --git a/build/example/header.tex b/build/example/header.tex deleted file mode 100644 index 23db65b..0000000 --- a/build/example/header.tex +++ /dev/null @@ -1,27 +0,0 @@ -\begin{titlingpage} - \maketitle - \vfill - \Oldincludegraphics[width=3in]{./UNlogo.png} -\end{titlingpage} - -\pagebreak - -\textbf{Prepared by:} - -Vendor Inc.,\\49 Seven square\\Montreal, QC H0H 0H0\\phone: (514) -345-6789\\fax: (514) 345-6789\\http://vendor.com - -\textbf{} - -\textbf{Prepared for:} - -Client LLC,\\37 Prime Lane\\Montreal, QC H0H 0H0\\phone: (514) -345-6789\\fax: (514) 345-6789\\http://supplier.com - -\vfill - -CONFIDENTIAL: The contents of this document are confidential and are -intended exclusively for the designated recipients. The contents of this page -is defined in a file called sample-header.tex. Other legal mumbo jumbo\ldots{}. - -\pagebreak diff --git a/build/example/in.html b/build/example/in.html deleted file mode 100644 index 3a7b801..0000000 --- a/build/example/in.html +++ /dev/null @@ -1 +0,0 @@ -Test doc for gd-pandoc

Sample Statement of Work

Every document needs a subtitle...


Background

Every project needs a background. Here’s some lorem ipsum about the project.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sit amet arcu elit. Donec at massa et leo auctor fringilla vitae id erat. Nam feugiat velit vitae ornare tristique. Morbi porttitor, orci vel dapibus malesuada, magna libero ultrices massa, nec interdum diam nisi elementum ipsum. Vestibulum elit lorem, pretium id semper ac, aliquam ut dui. Etiam at magna non nibh viverra tristique. Maecenas consectetur vulputate tellus, ac rutrum felis molestie ut. Aenean tincidunt congue cursus. Maecenas in egestas magna, nec pellentesque justo. Phasellus ante quam, faucibus sit amet tellus et, fringilla convallis eros.

Nullam vitae imperdiet enim. Ut id ultrices leo. In dictum bibendum vestibulum. Donec lobortis condimentum mauris ac interdum. Duis bibendum molestie eleifend. Nunc non neque a neque ornare euismod non ut sapien. Morbi sed diam quis felis commodo vehicula ac et augue. Maecenas pretium justo sit amet imperdiet pharetra.

Nunc at odio massa. In hac habitasse platea dictumst. Donec posuere erat ac ultrices suscipit. Quisque id velit nulla. Ut in urna orci. Sed at euismod neque. Sed velit velit, fringilla vitae eleifend eget, auctor id mi.


Proposed Solution

This wouldn’t be a proposal unless it proposed something. We will re-architect the system into a series of robust robust components:

  1. export, a script to export the data from access, validate it, refactor it into a logical format, then output it in plain-text format.
  2. import, a simple, robust module to handle file uploads of the cleaned data, and efficiently import this data. It will do sufficient error handling to allow full automation.

As we perform the refactoring, we will rewriting the code to ensure it’s documented, easy to test, and easy to update as future needs are identified.

Export component

  • This will be a standalone script responsible for extracting data from source database, and cleaning it up as appropriate.
  • The output format is human readable JSON files, with a logical, easy to understand structure
  • Easy to verify output through manual inspection of output
  • Include comprehensive automated tests to ensure output is correct

Import component

  • Allows non-technical staff to upload already validated JSON files, and sync the target database accordingly.
  • Assumes that input data is relatively safe, as it’s produced via the export component
  • Will be optimized to perform quickly; typical runs will be completed within 60 seconds
  • Improved validation and error handling

Benefits of our solution

Here’s some more lorem ipsum for you all. Nullam vitae imperdiet enim. Ut id ultrices leo. In dictum bibendum vestibulum. Donec lobortis condimentum mauris ac interdum. Duis bibendum molestie eleifend. Nunc non neque a neque ornare euismod non ut sapien. Morbi sed diam quis felis commodo vehicula ac et augue. Maecenas pretium justo sit amet imperdiet pharetra.

Nunc at odio massa. In hac habitasse platea dictumst. Donec posuere erat ac ultrices suscipit. Quisque id velit nulla. Ut in urna orci. Sed at euismod neque. Sed velit velit, fringilla vitae eleifend eget, auctor id mi.

Nullam vitae imperdiet enim. Ut id ultrices leo. In dictum bibendum vestibulum. Donec lobortis condimentum mauris ac interdum. Duis bibendum molestie eleifend. Nunc non neque a neque ornare euismod non ut sapien. Morbi sed diam quis felis commodo vehicula ac et augue. Maecenas pretium justo sit amet imperdiet pharetra.

Nullam vitae imperdiet enim. Ut id ultrices leo. In dictum bibendum vestibulum. Donec lobortis condimentum mauris ac interdum. Duis bibendum molestie eleifend. Nunc non neque a neque ornare euismod non ut sapien. Morbi sed diam quis felis commodo vehicula ac et augue. Maecenas pretium justo sit amet imperdiet pharetra.


Schedule and Budget

The work described in this mandate will take 300 hours to complete, to be performed within 6-8 weeks of the signing of this agreement.

Table

Here is a schedule of the work:

gdocs-export:author

Alex

1

150

2

150

The following diagram should be on a separate page, to test page break:


Diagram showing how work is split

Every document needs a diagram!


Terms and Conditions

Staffing

Appropriate staff will be used for the execution of this project.

Relation to Other Agreements

This agreement is governed by the same terms and conditions as some other documents.

Language of Contract

Les parties ont convenu de rédiger cette entente en anglais. Parties have decided that this agreement be formulated in English.


Agreement

This document is a contract, and contracts must be signed.

Signed on behalf of Client LLC:

 

 


Name and title

 

 


Signature and date

Signed by Adam Smith, President of Vendor Inc.:


Signature and date

diff --git a/build/example/main.tex b/build/example/main.tex deleted file mode 100644 index d837248..0000000 --- a/build/example/main.tex +++ /dev/null @@ -1,156 +0,0 @@ -\pagebreak - -\hyperdef{}{}{\chapter{Background}} - -Every project needs a background. Here's some lorem ipsum about the project. - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sit amet arcu elit. Donec at massa et leo auctor fringilla vitae id erat. Nam feugiat velit vitae ornare tristique. Morbi porttitor, orci vel dapibus malesuada, magna libero ultrices massa, nec interdum diam nisi elementum ipsum. Vestibulum elit lorem, pretium id semper ac, aliquam ut dui. Etiam at magna non nibh viverra tristique. Maecenas consectetur vulputate tellus, ac rutrum felis molestie ut. Aenean tincidunt congue cursus. Maecenas in egestas magna, nec pellentesque justo. Phasellus ante quam, faucibus sit amet tellus et, fringilla convallis eros. - -Nullam vitae imperdiet enim. Ut id ultrices leo. In dictum bibendum vestibulum. Donec lobortis condimentum mauris ac interdum. Duis bibendum molestie eleifend. Nunc non neque a neque ornare euismod non ut sapien. Morbi sed diam quis felis commodo vehicula ac et augue. Maecenas pretium justo sit amet imperdiet pharetra. - -Nunc at odio massa. In hac habitasse platea dictumst. Donec posuere erat ac ultrices suscipit. Quisque id velit nulla. Ut in urna orci. Sed at euismod neque. Sed velit velit, fringilla vitae eleifend eget, auctor id mi. - -\pagebreak - -\hyperdef{}{}{\chapter{Proposed Solution}} - -This wouldn't be a proposal unless it proposed something. We will re-architect the system into a series of robust robust components: - -\begin{enumerate} -\itemsep1pt\parskip0pt\parsep0pt -\item - export, a script to export the data from access, validate it, refactor it into a logical format, then output it in plain-text format. -\item - import, a simple, robust module to handle file uploads of the cleaned data, and efficiently import this data. It will do sufficient error handling to allow full automation. -\end{enumerate} - -As we perform the refactoring, we will rewriting the code to ensure it's documented, easy to test, and easy to update as future needs are identified. - -\hyperdef{}{}{\section{Export component}} - -\begin{itemize} -\itemsep1pt\parskip0pt\parsep0pt -\item - This will be a standalone script responsible for extracting data from source database, and cleaning it up as appropriate. -\item - The output format is human readable JSON files, with a logical, easy to understand structure -\item - Easy to verify output through manual inspection of output -\item - Include comprehensive automated tests to ensure output is correct -\end{itemize} - -\hyperdef{}{}{\section{Import component}} - -\begin{itemize} -\itemsep1pt\parskip0pt\parsep0pt -\item - Allows non-technical staff to upload already validated JSON files, and sync the target database accordingly. -\item - Assumes that input data is relatively safe, as it's produced via the export component -\item - Will be optimized to perform quickly; typical runs will be completed within 60 seconds -\item - Improved validation and error handling -\end{itemize} - -\hyperdef{}{}{\section{Benefits of our solution}} - -Here's some more \textbf{lorem ipsum}~for you all. Nullam vitae imperdiet enim. Ut id ultrices leo. In dictum bibendum vestibulum. Donec lobortis condimentum mauris ac interdum. Duis bibendum molestie eleifend. Nunc non neque a neque ornare euismod non ut sapien. Morbi sed diam quis felis commodo vehicula ac et augue. Maecenas pretium justo sit amet imperdiet pharetra. - -Nunc at odio massa. In hac habitasse platea dictumst. Donec posuere erat ac ultrices suscipit. Quisque id velit nulla. Ut in urna orci. Sed at euismod neque. Sed velit velit, fringilla vitae eleifend eget, auctor id mi. - -Nullam vitae imperdiet enim. Ut id ultrices leo. In dictum bibendum vestibulum. Donec lobortis condimentum mauris ac interdum. Duis bibendum molestie eleifend. Nunc non neque a neque ornare euismod non ut sapien. Morbi sed diam quis felis commodo vehicula ac et augue. Maecenas pretium justo sit amet imperdiet pharetra. - -Nullam vitae imperdiet enim. Ut id ultrices leo. In dictum bibendum vestibulum. Donec lobortis condimentum mauris ac interdum. Duis bibendum molestie eleifend. Nunc non neque a neque ornare euismod non ut sapien. Morbi sed diam quis felis commodo vehicula ac et augue. Maecenas pretium justo sit amet imperdiet pharetra. - -\pagebreak - -\hyperdef{}{}{\chapter{Schedule and Budget}} - -The work described in this mandate will take 300 hours to complete, to be performed within 6-8 weeks of the signing of this agreement. - -\hyperdef{}{}{\section{Table}} - -Here is a schedule of the work: - -\hyperref[]{}\hyperref[]{} - -\begin{longtable}[c]{@{}ll@{}} -\toprule\addlinespace -\begin{minipage}[t]{0.47\columnwidth}\raggedright -gdocs-export:author -\end{minipage} & \begin{minipage}[t]{0.47\columnwidth}\raggedright -Alex -\end{minipage} -\\\addlinespace -\begin{minipage}[t]{0.47\columnwidth}\raggedright -1 -\end{minipage} & \begin{minipage}[t]{0.47\columnwidth}\raggedright -150 -\end{minipage} -\\\addlinespace -\begin{minipage}[t]{0.47\columnwidth}\raggedright -2 -\end{minipage} & \begin{minipage}[t]{0.47\columnwidth}\raggedright -150 -\end{minipage} -\\\addlinespace -\bottomrule -\end{longtable} - -The following diagram should be on a separate page, to test page break: - -\pagebreak - -\hyperdef{}{}{\section{Diagram showing how work is split}} - -Every document needs a diagram! - -\includegraphics{SHbO80B3zYiLwN09wcE1jxTyLWaBsr7llKXblVz0EwCQsT2EsGznwPa4YwxgN3BwyMSEZhyazyYEoA5TNEBswNe6FJ2ZZsw9_E5R3YnzdCYFfcxjoR-rnHg.jpg} - -\pagebreak - -\hyperdef{}{}{\chapter{Terms and Conditions}} - -\hyperdef{}{}{\section{Staffing}} - -Appropriate staff will be used for the execution of this project. - -\hyperdef{}{}{\section{Relation to Other Agreements}} - -This agreement is governed by the same terms and conditions as some other documents. - -\hyperdef{}{}{\section{Language of Contract}} - -Les parties ont convenu de rédiger cette entente en anglais. Parties have decided that this agreement be formulated in English. - -\pagebreak - -\hyperdef{}{}{\chapter{Agreement}} - -This document is a contract, and contracts must be signed. - -Signed on behalf of \textbf{Client LLC}: - -~ - -~ - -\hrulefill - -Name and title - -~ - -~ - -\hrulefill - -Signature and date - -Signed by Adam Smith, President of \textbf{Vendor Inc.:} - -\hrulefill - -Signature and date diff --git a/build/example/metadata.tex b/build/example/metadata.tex deleted file mode 100644 index eff8f6f..0000000 --- a/build/example/metadata.tex +++ /dev/null @@ -1,161 +0,0 @@ -\newcommand{\mytitle}{Sample Statement of Work} -\newcommand{\mysubtitle}{Every document needs a subtitle...} -\newcommand{\mybody}{\pagebreak - -\hyperdef{}{}{\section{Background}} - -Every project needs a background. Here's some lorem ipsum about the project. - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sit amet arcu elit. Donec at massa et leo auctor fringilla vitae id erat. Nam feugiat velit vitae ornare tristique. Morbi porttitor, orci vel dapibus malesuada, magna libero ultrices massa, nec interdum diam nisi elementum ipsum. Vestibulum elit lorem, pretium id semper ac, aliquam ut dui. Etiam at magna non nibh viverra tristique. Maecenas consectetur vulputate tellus, ac rutrum felis molestie ut. Aenean tincidunt congue cursus. Maecenas in egestas magna, nec pellentesque justo. Phasellus ante quam, faucibus sit amet tellus et, fringilla convallis eros. - -Nullam vitae imperdiet enim. Ut id ultrices leo. In dictum bibendum vestibulum. Donec lobortis condimentum mauris ac interdum. Duis bibendum molestie eleifend. Nunc non neque a neque ornare euismod non ut sapien. Morbi sed diam quis felis commodo vehicula ac et augue. Maecenas pretium justo sit amet imperdiet pharetra. - -Nunc at odio massa. In hac habitasse platea dictumst. Donec posuere erat ac ultrices suscipit. Quisque id velit nulla. Ut in urna orci. Sed at euismod neque. Sed velit velit, fringilla vitae eleifend eget, auctor id mi. - -\pagebreak - -\hyperdef{}{}{\section{Proposed Solution}} - -This wouldn't be a proposal unless it proposed something. We will re-architect the system into a series of robust robust components: - -\begin{enumerate} -\itemsep1pt\parskip0pt\parsep0pt -\item - export, a script to export the data from access, validate it, refactor it into a logical format, then output it in plain-text format. -\item - import, a simple, robust module to handle file uploads of the cleaned data, and efficiently import this data. It will do sufficient error handling to allow full automation. -\end{enumerate} - -As we perform the refactoring, we will rewriting the code to ensure it's documented, easy to test, and easy to update as future needs are identified. - -\hyperdef{}{}{\subsection{Export component}} - -\begin{itemize} -\itemsep1pt\parskip0pt\parsep0pt -\item - This will be a standalone script responsible for extracting data from source database, and cleaning it up as appropriate. -\item - The output format is human readable JSON files, with a logical, easy to understand structure -\item - Easy to verify output through manual inspection of output -\item - Include comprehensive automated tests to ensure output is correct -\end{itemize} - -\hyperdef{}{}{\subsection{Import component}} - -\begin{itemize} -\itemsep1pt\parskip0pt\parsep0pt -\item - Allows non-technical staff to upload already validated JSON files, and sync the target database accordingly. -\item - Assumes that input data is relatively safe, as it's produced via the export component -\item - Will be optimized to perform quickly; typical runs will be completed within 60 seconds -\item - Improved validation and error handling -\end{itemize} - -\hyperdef{}{}{\subsection{Benefits of our solution}} - -Here's some more \textbf{lorem ipsum}~for you all. Nullam vitae imperdiet enim. Ut id ultrices leo. In dictum bibendum vestibulum. Donec lobortis condimentum mauris ac interdum. Duis bibendum molestie eleifend. Nunc non neque a neque ornare euismod non ut sapien. Morbi sed diam quis felis commodo vehicula ac et augue. Maecenas pretium justo sit amet imperdiet pharetra. - -Nunc at odio massa. In hac habitasse platea dictumst. Donec posuere erat ac ultrices suscipit. Quisque id velit nulla. Ut in urna orci. Sed at euismod neque. Sed velit velit, fringilla vitae eleifend eget, auctor id mi. - -Nullam vitae imperdiet enim. Ut id ultrices leo. In dictum bibendum vestibulum. Donec lobortis condimentum mauris ac interdum. Duis bibendum molestie eleifend. Nunc non neque a neque ornare euismod non ut sapien. Morbi sed diam quis felis commodo vehicula ac et augue. Maecenas pretium justo sit amet imperdiet pharetra. - -Nullam vitae imperdiet enim. Ut id ultrices leo. In dictum bibendum vestibulum. Donec lobortis condimentum mauris ac interdum. Duis bibendum molestie eleifend. Nunc non neque a neque ornare euismod non ut sapien. Morbi sed diam quis felis commodo vehicula ac et augue. Maecenas pretium justo sit amet imperdiet pharetra. - -\pagebreak - -\hyperdef{}{}{\section{Schedule and Budget}} - -The work described in this mandate will take 300 hours to complete, to be performed within 6-8 weeks of the signing of this agreement. - -\hyperdef{}{}{\subsection{Table}} - -Here is a schedule of the work: - -\hyperref[]{}\hyperref[]{} - -\begin{longtable}[c]{@{}ll@{}} -\toprule\addlinespace -\begin{minipage}[t]{0.47\columnwidth}\raggedright -gdocs-export:author -\end{minipage} & \begin{minipage}[t]{0.47\columnwidth}\raggedright -Alex -\end{minipage} -\\\addlinespace -\begin{minipage}[t]{0.47\columnwidth}\raggedright -1 -\end{minipage} & \begin{minipage}[t]{0.47\columnwidth}\raggedright -150 -\end{minipage} -\\\addlinespace -\begin{minipage}[t]{0.47\columnwidth}\raggedright -2 -\end{minipage} & \begin{minipage}[t]{0.47\columnwidth}\raggedright -150 -\end{minipage} -\\\addlinespace -\bottomrule -\end{longtable} - -The following diagram should be on a separate page, to test page break: - -\pagebreak - -\hyperdef{}{}{\subsection{Diagram showing how work is split}} - -Every document needs a diagram! - -\includegraphics{SHbO80B3zYiLwN09wcE1jxTyLWaBsr7llKXblVz0EwCQsT2EsGznwPa4YwxgN3BwyMSEZhyazyYEoA5TNEBswNe6FJ2ZZsw9_E5R3YnzdCYFfcxjoR-rnHg.jpg} - -\pagebreak - -\hyperdef{}{}{\section{Terms and Conditions}} - -\hyperdef{}{}{\subsection{Staffing}} - -Appropriate staff will be used for the execution of this project. - -\hyperdef{}{}{\subsection{Relation to Other Agreements}} - -This agreement is governed by the same terms and conditions as some other documents. - -\hyperdef{}{}{\subsection{Language of Contract}} - -Les parties ont convenu de rédiger cette entente en anglais. Parties have decided that this agreement be formulated in English. - -\pagebreak - -\hyperdef{}{}{\section{Agreement}} - -This document is a contract, and contracts must be signed. - -Signed on behalf of \textbf{Client LLC}: - -~ - -~ - -\hrulefill - -Name and title - -~ - -~ - -\hrulefill - -Signature and date - -Signed by Adam Smith, President of \textbf{Vendor Inc.:} - -\hrulefill - -Signature and date} - - -% TODO: support table of key-value metadata in google doc diff --git a/build/example/post.json b/build/example/post.json deleted file mode 100644 index 9deafbf..0000000 --- a/build/example/post.json +++ /dev/null @@ -1 +0,0 @@ -[{"unMeta": {"subtitle": {"c": [{"c": "Every", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "document", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "needs", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "a", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "subtitle", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": ".", "t": "Str"}], "t": "MetaInlines"}, "title": {"c": [{"c": "Sample", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Statement", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "of", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Work", "t": "Str"}], "t": "MetaInlines"}}}, [{"c": [], "t": "Para"}, {"c": [], "t": "Para"}, {"c": [], "t": "Para"}, {"c": [], "t": "Para"}, {"c": ["latex", "\\pagebreak"], "t": "RawBlock"}, {"c": [], "t": "Para"}, {"c": [1, ["", ["c1"], []], [{"c": "Background", "t": "Str"}]], "t": "Header"}, {"c": [{"c": "Every", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "project", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "needs", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "a", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "background", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Here", "t": "Str"}, {"c": "\u2019", "t": "Str"}, {"c": "s", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "some", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "lorem", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ipsum", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "about", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "the", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "project", "t": "Str"}, {"c": ".", "t": "Str"}], "t": "Para"}, {"c": [{"c": "Lorem", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ipsum", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "dolor", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "sit", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "amet,", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "consectetur", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "adipiscing", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "elit", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Nulla", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "sit", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "amet", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "arcu", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "elit", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Donec", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "at", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "massa", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "et", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "leo", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "auctor", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "fringilla", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "vitae", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "id", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "erat", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Nam", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "feugiat", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "velit", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "vitae", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ornare", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "tristique", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Morbi", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "porttitor,", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "orci", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "vel", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "dapibus", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "malesuada,", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "magna", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "libero", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ultrices", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "massa,", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "nec", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "interdum", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "diam", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "nisi", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "elementum", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ipsum", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Vestibulum", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "elit", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "lorem,", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "pretium", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "id", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "semper", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ac,", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "aliquam", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ut", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "dui", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Etiam", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "at", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "magna", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "non", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "nibh", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "viverra", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "tristique", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Maecenas", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "consectetur", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "vulputate", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "tellus,", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ac", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "rutrum", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "felis", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "molestie", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ut", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Aenean", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "tincidunt", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "congue", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "cursus", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Maecenas", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "in", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "egestas", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "magna,", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "nec", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "pellentesque", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "justo", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Phasellus", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ante", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "quam,", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "faucibus", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "sit", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "amet", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "tellus", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "et,", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "fringilla", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "convallis", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "eros", "t": "Str"}, {"c": ".", "t": "Str"}], "t": "Para"}, {"c": [{"c": "Nullam", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "vitae", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "imperdiet", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "enim", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Ut", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "id", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ultrices", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "leo", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "In", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "dictum", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "bibendum", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "vestibulum", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Donec", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "lobortis", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "condimentum", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "mauris", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ac", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "interdum", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Duis", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "bibendum", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "molestie", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "eleifend", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Nunc", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "non", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "neque", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "a", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "neque", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ornare", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "euismod", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "non", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ut", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "sapien", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Morbi", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "sed", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "diam", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "quis", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "felis", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "commodo", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "vehicula", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ac", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "et", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "augue", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Maecenas", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "pretium", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "justo", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "sit", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "amet", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "imperdiet", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "pharetra", "t": "Str"}, {"c": ".", "t": "Str"}], "t": "Para"}, {"c": [{"c": "Nunc", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "at", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "odio", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "massa", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "In", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "hac", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "habitasse", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "platea", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "dictumst", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Donec", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "posuere", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "erat", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ac", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ultrices", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "suscipit", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Quisque", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "id", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "velit", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "nulla", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Ut", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "in", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "urna", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "orci", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Sed", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "at", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "euismod", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "neque", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Sed", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "velit", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "velit,", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "fringilla", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "vitae", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "eleifend", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "eget,", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "auctor", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "id", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "mi", "t": "Str"}, {"c": ".", "t": "Str"}], "t": "Para"}, {"c": ["latex", "\\pagebreak"], "t": "RawBlock"}, {"c": [], "t": "Para"}, {"c": [1, ["", ["c1"], []], [{"c": "Proposed", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Solution", "t": "Str"}]], "t": "Header"}, {"c": [{"c": "This", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "wouldn", "t": "Str"}, {"c": "\u2019", "t": "Str"}, {"c": "t", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "be", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "a", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "proposal", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "unless", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "it", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "proposed", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "something", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "We", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "will", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "re", "t": "Str"}, {"c": "-", "t": "Str"}, {"c": "architect", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "the", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "system", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "into", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "a", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "series", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "of", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "robust", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "robust", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "components:", "t": "Str"}], "t": "Para"}, {"c": [[1, {"c": [], "t": "DefaultStyle"}, {"c": [], "t": "DefaultDelim"}], [[{"c": [{"c": "export,", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "a", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "script", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "to", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "export", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "the", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "data", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "from", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "access,", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "validate", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "it,", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "refactor", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "it", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "into", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "a", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "logical", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "format,", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "then", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "output", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "it", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "in", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "plain", "t": "Str"}, {"c": "-", "t": "Str"}, {"c": "text", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "format", "t": "Str"}, {"c": ".", "t": "Str"}], "t": "Plain"}], [{"c": [{"c": "import,", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "a", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "simple,", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "robust", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "module", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "to", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "handle", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "file", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "uploads", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "of", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "the", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "cleaned", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "data,", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "and", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "efficiently", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "import", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "this", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "data", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "It", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "will", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "do", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "sufficient", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "error", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "handling", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "to", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "allow", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "full", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "automation", "t": "Str"}, {"c": ".", "t": "Str"}], "t": "Plain"}]]], "t": "OrderedList"}, {"c": [{"c": "As", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "we", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "perform", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "the", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "refactoring,", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "we", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "will", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "rewriting", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "the", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "code", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "to", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ensure", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "it", "t": "Str"}, {"c": "\u2019", "t": "Str"}, {"c": "s", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "documented,", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "easy", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "to", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "test,", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "and", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "easy", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "to", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "update", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "as", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "future", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "needs", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "are", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "identified", "t": "Str"}, {"c": ".", "t": "Str"}], "t": "Para"}, {"c": [2, ["", ["c1"], []], [{"c": "Export", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "component", "t": "Str"}]], "t": "Header"}, {"c": [[{"c": [{"c": "This", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "will", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "be", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "a", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "standalone", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "script", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "responsible", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "for", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "extracting", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "data", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "from", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "source", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "database,", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "and", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "cleaning", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "it", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "up", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "as", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "appropriate", "t": "Str"}, {"c": ".", "t": "Str"}], "t": "Plain"}], [{"c": [{"c": "The", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "output", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "format", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "is", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "human", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "readable", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "JSON", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "files,", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "with", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "a", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "logical,", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "easy", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "to", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "understand", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "structure", "t": "Str"}], "t": "Plain"}], [{"c": [{"c": "Easy", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "to", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "verify", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "output", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "through", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "manual", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "inspection", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "of", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "output", "t": "Str"}], "t": "Plain"}], [{"c": [{"c": "Include", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "comprehensive", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "automated", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "tests", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "to", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ensure", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "output", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "is", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "correct", "t": "Str"}], "t": "Plain"}]], "t": "BulletList"}, {"c": [2, ["", ["c1"], []], [{"c": "Import", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "component", "t": "Str"}]], "t": "Header"}, {"c": [[{"c": [{"c": "Allows", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "non", "t": "Str"}, {"c": "-", "t": "Str"}, {"c": "technical", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "staff", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "to", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "upload", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "already", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "validated", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "JSON", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "files,", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "and", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "sync", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "the", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "target", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "database", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "accordingly", "t": "Str"}, {"c": ".", "t": "Str"}], "t": "Plain"}], [{"c": [{"c": "Assumes", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "that", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "input", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "data", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "is", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "relatively", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "safe,", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "as", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "it", "t": "Str"}, {"c": "\u2019", "t": "Str"}, {"c": "s", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "produced", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "via", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "the", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "export", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "component", "t": "Str"}], "t": "Plain"}], [{"c": [{"c": "Will", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "be", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "optimized", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "to", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "perform", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "quickly;", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "typical", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "runs", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "will", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "be", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "completed", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "within", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "60", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "seconds", "t": "Str"}], "t": "Plain"}], [{"c": [{"c": "Improved", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "validation", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "and", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "error", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "handling", "t": "Str"}], "t": "Plain"}]], "t": "BulletList"}, {"c": [2, ["", ["c1"], []], [{"c": "Benefits", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "of", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "our", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "solution", "t": "Str"}]], "t": "Header"}, {"c": [{"c": "Here", "t": "Str"}, {"c": "\u2019", "t": "Str"}, {"c": "s", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "some", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "more", "t": "Str"}, {"c": [], "t": "Space"}, {"c": [{"c": "lorem", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ipsum", "t": "Str"}], "t": "Strong"}, {"c": "\u00a0for", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "you", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "all", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Nullam", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "vitae", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "imperdiet", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "enim", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Ut", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "id", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ultrices", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "leo", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "In", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "dictum", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "bibendum", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "vestibulum", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Donec", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "lobortis", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "condimentum", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "mauris", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ac", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "interdum", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Duis", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "bibendum", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "molestie", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "eleifend", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Nunc", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "non", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "neque", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "a", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "neque", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ornare", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "euismod", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "non", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ut", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "sapien", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Morbi", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "sed", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "diam", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "quis", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "felis", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "commodo", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "vehicula", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ac", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "et", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "augue", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Maecenas", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "pretium", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "justo", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "sit", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "amet", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "imperdiet", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "pharetra", "t": "Str"}, {"c": ".", "t": "Str"}], "t": "Para"}, {"c": [{"c": "Nunc", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "at", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "odio", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "massa", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "In", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "hac", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "habitasse", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "platea", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "dictumst", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Donec", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "posuere", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "erat", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ac", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ultrices", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "suscipit", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Quisque", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "id", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "velit", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "nulla", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Ut", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "in", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "urna", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "orci", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Sed", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "at", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "euismod", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "neque", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Sed", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "velit", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "velit,", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "fringilla", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "vitae", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "eleifend", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "eget,", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "auctor", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "id", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "mi", "t": "Str"}, {"c": ".", "t": "Str"}], "t": "Para"}, {"c": [{"c": "Nullam", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "vitae", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "imperdiet", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "enim", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Ut", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "id", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ultrices", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "leo", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "In", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "dictum", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "bibendum", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "vestibulum", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Donec", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "lobortis", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "condimentum", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "mauris", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ac", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "interdum", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Duis", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "bibendum", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "molestie", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "eleifend", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Nunc", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "non", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "neque", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "a", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "neque", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ornare", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "euismod", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "non", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ut", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "sapien", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Morbi", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "sed", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "diam", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "quis", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "felis", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "commodo", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "vehicula", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ac", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "et", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "augue", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Maecenas", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "pretium", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "justo", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "sit", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "amet", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "imperdiet", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "pharetra", "t": "Str"}, {"c": ".", "t": "Str"}], "t": "Para"}, {"c": [{"c": "Nullam", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "vitae", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "imperdiet", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "enim", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Ut", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "id", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ultrices", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "leo", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "In", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "dictum", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "bibendum", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "vestibulum", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Donec", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "lobortis", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "condimentum", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "mauris", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ac", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "interdum", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Duis", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "bibendum", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "molestie", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "eleifend", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Nunc", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "non", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "neque", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "a", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "neque", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ornare", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "euismod", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "non", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ut", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "sapien", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Morbi", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "sed", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "diam", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "quis", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "felis", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "commodo", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "vehicula", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ac", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "et", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "augue", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Maecenas", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "pretium", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "justo", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "sit", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "amet", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "imperdiet", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "pharetra", "t": "Str"}, {"c": ".", "t": "Str"}], "t": "Para"}, {"c": ["latex", "\\pagebreak"], "t": "RawBlock"}, {"c": [], "t": "Para"}, {"c": [1, ["", ["c1"], []], [{"c": "Schedule", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "and", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Budget", "t": "Str"}]], "t": "Header"}, {"c": [{"c": "The", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "work", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "described", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "in", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "this", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "mandate", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "will", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "take", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "300", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "hours", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "to", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "complete,", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "to", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "be", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "performed", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "within", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "6", "t": "Str"}, {"c": "-", "t": "Str"}, {"c": "8", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "weeks", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "of", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "the", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "signing", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "of", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "this", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "agreement", "t": "Str"}, {"c": ".", "t": "Str"}], "t": "Para"}, {"c": [2, ["", ["c1"], []], [{"c": "Table", "t": "Str"}]], "t": "Header"}, {"c": [{"c": "Here", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "is", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "a", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "schedule", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "of", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "the", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "work:", "t": "Str"}], "t": "Para"}, {"c": [], "t": "Para"}, {"c": [{"c": [[], ["#", ""]], "t": "Link"}, {"c": [[], ["#", ""]], "t": "Link"}], "t": "Para"}, {"c": [[], [{"c": [], "t": "AlignLeft"}, {"c": [], "t": "AlignLeft"}], [0.5, 0.5], [], [[[{"c": [{"c": "gdocs", "t": "Str"}, {"c": "-", "t": "Str"}, {"c": "export:author", "t": "Str"}], "t": "Para"}], [{"c": [{"c": "Alex", "t": "Str"}], "t": "Para"}]], [[{"c": [{"c": "1", "t": "Str"}], "t": "Para"}], [{"c": [{"c": "150", "t": "Str"}], "t": "Para"}]], [[{"c": [{"c": "2", "t": "Str"}], "t": "Para"}], [{"c": [{"c": "150", "t": "Str"}], "t": "Para"}]]]], "t": "Table"}, {"c": [], "t": "Para"}, {"c": [{"c": "The", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "following", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "diagram", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "should", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "be", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "on", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "a", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "separate", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "page,", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "to", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "test", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "page", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "break:", "t": "Str"}], "t": "Para"}, {"c": ["latex", "\\pagebreak"], "t": "RawBlock"}, {"c": [2, ["", ["c1"], []], [{"c": "Diagram", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "showing", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "how", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "work", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "is", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "split", "t": "Str"}]], "t": "Header"}, {"c": [{"c": "Every", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "document", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "needs", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "a", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "diagram!", "t": "Str"}], "t": "Para"}, {"c": [{"c": [[], ["SHbO80B3zYiLwN09wcE1jxTyLWaBsr7llKXblVz0EwCQsT2EsGznwPa4YwxgN3BwyMSEZhyazyYEoA5TNEBswNe6FJ2ZZsw9_E5R3YnzdCYFfcxjoR-rnHg.jpg", ""]], "t": "Image"}], "t": "Para"}, {"c": ["latex", "\\pagebreak"], "t": "RawBlock"}, {"c": [], "t": "Para"}, {"c": [1, ["", ["c1"], []], [{"c": "Terms", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "and", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Conditions", "t": "Str"}]], "t": "Header"}, {"c": [2, ["", ["c1"], []], [{"c": "Staffing", "t": "Str"}]], "t": "Header"}, {"c": [{"c": "Appropriate", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "staff", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "will", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "be", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "used", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "for", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "the", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "execution", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "of", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "this", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "project", "t": "Str"}, {"c": ".", "t": "Str"}], "t": "Para"}, {"c": [2, ["", ["c1"], []], [{"c": "Relation", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "to", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Other", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Agreements", "t": "Str"}]], "t": "Header"}, {"c": [{"c": "This", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "agreement", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "is", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "governed", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "by", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "the", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "same", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "terms", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "and", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "conditions", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "as", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "some", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "other", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "documents", "t": "Str"}, {"c": ".", "t": "Str"}], "t": "Para"}, {"c": [2, ["", ["c1"], []], [{"c": "Language", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "of", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Contract", "t": "Str"}]], "t": "Header"}, {"c": [{"c": "Les", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "parties", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "ont", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "convenu", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "de", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "r\u00e9diger", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "cette", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "entente", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "en", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "anglais", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Parties", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "have", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "decided", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "that", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "this", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "agreement", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "be", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "formulated", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "in", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "English", "t": "Str"}, {"c": ".", "t": "Str"}], "t": "Para"}, {"c": ["latex", "\\pagebreak"], "t": "RawBlock"}, {"c": [], "t": "Para"}, {"c": [1, ["", ["c1", "c11"], []], [{"c": "Agreement", "t": "Str"}]], "t": "Header"}, {"c": [{"c": "This", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "document", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "is", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "a", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "contract,", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "and", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "contracts", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "must", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "be", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "signed", "t": "Str"}, {"c": ".", "t": "Str"}], "t": "Para"}, {"c": [], "t": "Para"}, {"c": [{"c": "Signed", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "on", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "behalf", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "of", "t": "Str"}, {"c": [], "t": "Space"}, {"c": [{"c": "Client", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "LLC", "t": "Str"}], "t": "Strong"}, {"c": ":", "t": "Str"}], "t": "Para"}, {"c": [], "t": "Para"}, {"c": [{"c": "\u00a0", "t": "Str"}], "t": "Para"}, {"c": [{"c": "\u00a0", "t": "Str"}], "t": "Para"}, {"c": ["latex", "\\hrulefill"], "t": "RawBlock"}, {"c": [], "t": "Para"}, {"c": [{"c": "Name", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "and", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "title", "t": "Str"}], "t": "Para"}, {"c": [{"c": "\u00a0", "t": "Str"}], "t": "Para"}, {"c": [{"c": "\u00a0", "t": "Str"}], "t": "Para"}, {"c": ["latex", "\\hrulefill"], "t": "RawBlock"}, {"c": [], "t": "Para"}, {"c": [{"c": "Signature", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "and", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "date", "t": "Str"}], "t": "Para"}, {"c": [], "t": "Para"}, {"c": [{"c": "Signed", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "by", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Adam", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Smith,", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "President", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "of", "t": "Str"}, {"c": [], "t": "Space"}, {"c": [{"c": "Vendor", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "Inc", "t": "Str"}, {"c": ".", "t": "Str"}, {"c": ":", "t": "Str"}], "t": "Strong"}], "t": "Para"}, {"c": [], "t": "Para"}, {"c": [], "t": "Para"}, {"c": ["latex", "\\hrulefill"], "t": "RawBlock"}, {"c": [], "t": "Para"}, {"c": [{"c": "Signature", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "and", "t": "Str"}, {"c": [], "t": "Space"}, {"c": "date", "t": "Str"}], "t": "Para"}]] \ No newline at end of file diff --git a/build/example/pre.json b/build/example/pre.json deleted file mode 100644 index 7739b6a..0000000 --- a/build/example/pre.json +++ /dev/null @@ -1 +0,0 @@ -[{"unMeta":{"title":{"t":"MetaInlines","c":[{"t":"Str","c":"Test"},{"t":"Space","c":[]},{"t":"Str","c":"doc"},{"t":"Space","c":[]},{"t":"Str","c":"for"},{"t":"Space","c":[]},{"t":"Str","c":"gd"},{"t":"Str","c":"-"},{"t":"Str","c":"pandoc"}]}}},[{"t":"Header","c":[1,["",["ew-pandoc-title"],[]],[{"t":"Str","c":"Sample"},{"t":"Space","c":[]},{"t":"Str","c":"Statement"},{"t":"Space","c":[]},{"t":"Str","c":"of"},{"t":"Space","c":[]},{"t":"Str","c":"Work"}]]},{"t":"Header","c":[1,["",["ew-pandoc-subtitle"],[]],[{"t":"Str","c":"Every"},{"t":"Space","c":[]},{"t":"Str","c":"document"},{"t":"Space","c":[]},{"t":"Str","c":"needs"},{"t":"Space","c":[]},{"t":"Str","c":"a"},{"t":"Space","c":[]},{"t":"Str","c":"subtitle"},{"t":"Str","c":"."},{"t":"Str","c":"."},{"t":"Str","c":"."}]]},{"t":"Para","c":[]},{"t":"Para","c":[]},{"t":"Para","c":[]},{"t":"Para","c":[]},{"t":"Header","c":[1,["",["ew-pandoc-pagebreak"],[]],[]]},{"t":"Para","c":[]},{"t":"Header","c":[1,["",["c1"],[]],[{"t":"Str","c":"Background"}]]},{"t":"Para","c":[{"t":"Str","c":"Every"},{"t":"Space","c":[]},{"t":"Str","c":"project"},{"t":"Space","c":[]},{"t":"Str","c":"needs"},{"t":"Space","c":[]},{"t":"Str","c":"a"},{"t":"Space","c":[]},{"t":"Str","c":"background"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Here"},{"t":"Str","c":"’"},{"t":"Str","c":"s"},{"t":"Space","c":[]},{"t":"Str","c":"some"},{"t":"Space","c":[]},{"t":"Str","c":"lorem"},{"t":"Space","c":[]},{"t":"Str","c":"ipsum"},{"t":"Space","c":[]},{"t":"Str","c":"about"},{"t":"Space","c":[]},{"t":"Str","c":"the"},{"t":"Space","c":[]},{"t":"Str","c":"project"},{"t":"Str","c":"."}]},{"t":"Para","c":[{"t":"Str","c":"Lorem"},{"t":"Space","c":[]},{"t":"Str","c":"ipsum"},{"t":"Space","c":[]},{"t":"Str","c":"dolor"},{"t":"Space","c":[]},{"t":"Str","c":"sit"},{"t":"Space","c":[]},{"t":"Str","c":"amet,"},{"t":"Space","c":[]},{"t":"Str","c":"consectetur"},{"t":"Space","c":[]},{"t":"Str","c":"adipiscing"},{"t":"Space","c":[]},{"t":"Str","c":"elit"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Nulla"},{"t":"Space","c":[]},{"t":"Str","c":"sit"},{"t":"Space","c":[]},{"t":"Str","c":"amet"},{"t":"Space","c":[]},{"t":"Str","c":"arcu"},{"t":"Space","c":[]},{"t":"Str","c":"elit"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Donec"},{"t":"Space","c":[]},{"t":"Str","c":"at"},{"t":"Space","c":[]},{"t":"Str","c":"massa"},{"t":"Space","c":[]},{"t":"Str","c":"et"},{"t":"Space","c":[]},{"t":"Str","c":"leo"},{"t":"Space","c":[]},{"t":"Str","c":"auctor"},{"t":"Space","c":[]},{"t":"Str","c":"fringilla"},{"t":"Space","c":[]},{"t":"Str","c":"vitae"},{"t":"Space","c":[]},{"t":"Str","c":"id"},{"t":"Space","c":[]},{"t":"Str","c":"erat"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Nam"},{"t":"Space","c":[]},{"t":"Str","c":"feugiat"},{"t":"Space","c":[]},{"t":"Str","c":"velit"},{"t":"Space","c":[]},{"t":"Str","c":"vitae"},{"t":"Space","c":[]},{"t":"Str","c":"ornare"},{"t":"Space","c":[]},{"t":"Str","c":"tristique"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Morbi"},{"t":"Space","c":[]},{"t":"Str","c":"porttitor,"},{"t":"Space","c":[]},{"t":"Str","c":"orci"},{"t":"Space","c":[]},{"t":"Str","c":"vel"},{"t":"Space","c":[]},{"t":"Str","c":"dapibus"},{"t":"Space","c":[]},{"t":"Str","c":"malesuada,"},{"t":"Space","c":[]},{"t":"Str","c":"magna"},{"t":"Space","c":[]},{"t":"Str","c":"libero"},{"t":"Space","c":[]},{"t":"Str","c":"ultrices"},{"t":"Space","c":[]},{"t":"Str","c":"massa,"},{"t":"Space","c":[]},{"t":"Str","c":"nec"},{"t":"Space","c":[]},{"t":"Str","c":"interdum"},{"t":"Space","c":[]},{"t":"Str","c":"diam"},{"t":"Space","c":[]},{"t":"Str","c":"nisi"},{"t":"Space","c":[]},{"t":"Str","c":"elementum"},{"t":"Space","c":[]},{"t":"Str","c":"ipsum"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Vestibulum"},{"t":"Space","c":[]},{"t":"Str","c":"elit"},{"t":"Space","c":[]},{"t":"Str","c":"lorem,"},{"t":"Space","c":[]},{"t":"Str","c":"pretium"},{"t":"Space","c":[]},{"t":"Str","c":"id"},{"t":"Space","c":[]},{"t":"Str","c":"semper"},{"t":"Space","c":[]},{"t":"Str","c":"ac,"},{"t":"Space","c":[]},{"t":"Str","c":"aliquam"},{"t":"Space","c":[]},{"t":"Str","c":"ut"},{"t":"Space","c":[]},{"t":"Str","c":"dui"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Etiam"},{"t":"Space","c":[]},{"t":"Str","c":"at"},{"t":"Space","c":[]},{"t":"Str","c":"magna"},{"t":"Space","c":[]},{"t":"Str","c":"non"},{"t":"Space","c":[]},{"t":"Str","c":"nibh"},{"t":"Space","c":[]},{"t":"Str","c":"viverra"},{"t":"Space","c":[]},{"t":"Str","c":"tristique"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Maecenas"},{"t":"Space","c":[]},{"t":"Str","c":"consectetur"},{"t":"Space","c":[]},{"t":"Str","c":"vulputate"},{"t":"Space","c":[]},{"t":"Str","c":"tellus,"},{"t":"Space","c":[]},{"t":"Str","c":"ac"},{"t":"Space","c":[]},{"t":"Str","c":"rutrum"},{"t":"Space","c":[]},{"t":"Str","c":"felis"},{"t":"Space","c":[]},{"t":"Str","c":"molestie"},{"t":"Space","c":[]},{"t":"Str","c":"ut"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Aenean"},{"t":"Space","c":[]},{"t":"Str","c":"tincidunt"},{"t":"Space","c":[]},{"t":"Str","c":"congue"},{"t":"Space","c":[]},{"t":"Str","c":"cursus"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Maecenas"},{"t":"Space","c":[]},{"t":"Str","c":"in"},{"t":"Space","c":[]},{"t":"Str","c":"egestas"},{"t":"Space","c":[]},{"t":"Str","c":"magna,"},{"t":"Space","c":[]},{"t":"Str","c":"nec"},{"t":"Space","c":[]},{"t":"Str","c":"pellentesque"},{"t":"Space","c":[]},{"t":"Str","c":"justo"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Phasellus"},{"t":"Space","c":[]},{"t":"Str","c":"ante"},{"t":"Space","c":[]},{"t":"Str","c":"quam,"},{"t":"Space","c":[]},{"t":"Str","c":"faucibus"},{"t":"Space","c":[]},{"t":"Str","c":"sit"},{"t":"Space","c":[]},{"t":"Str","c":"amet"},{"t":"Space","c":[]},{"t":"Str","c":"tellus"},{"t":"Space","c":[]},{"t":"Str","c":"et,"},{"t":"Space","c":[]},{"t":"Str","c":"fringilla"},{"t":"Space","c":[]},{"t":"Str","c":"convallis"},{"t":"Space","c":[]},{"t":"Str","c":"eros"},{"t":"Str","c":"."}]},{"t":"Para","c":[{"t":"Str","c":"Nullam"},{"t":"Space","c":[]},{"t":"Str","c":"vitae"},{"t":"Space","c":[]},{"t":"Str","c":"imperdiet"},{"t":"Space","c":[]},{"t":"Str","c":"enim"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Ut"},{"t":"Space","c":[]},{"t":"Str","c":"id"},{"t":"Space","c":[]},{"t":"Str","c":"ultrices"},{"t":"Space","c":[]},{"t":"Str","c":"leo"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"In"},{"t":"Space","c":[]},{"t":"Str","c":"dictum"},{"t":"Space","c":[]},{"t":"Str","c":"bibendum"},{"t":"Space","c":[]},{"t":"Str","c":"vestibulum"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Donec"},{"t":"Space","c":[]},{"t":"Str","c":"lobortis"},{"t":"Space","c":[]},{"t":"Str","c":"condimentum"},{"t":"Space","c":[]},{"t":"Str","c":"mauris"},{"t":"Space","c":[]},{"t":"Str","c":"ac"},{"t":"Space","c":[]},{"t":"Str","c":"interdum"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Duis"},{"t":"Space","c":[]},{"t":"Str","c":"bibendum"},{"t":"Space","c":[]},{"t":"Str","c":"molestie"},{"t":"Space","c":[]},{"t":"Str","c":"eleifend"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Nunc"},{"t":"Space","c":[]},{"t":"Str","c":"non"},{"t":"Space","c":[]},{"t":"Str","c":"neque"},{"t":"Space","c":[]},{"t":"Str","c":"a"},{"t":"Space","c":[]},{"t":"Str","c":"neque"},{"t":"Space","c":[]},{"t":"Str","c":"ornare"},{"t":"Space","c":[]},{"t":"Str","c":"euismod"},{"t":"Space","c":[]},{"t":"Str","c":"non"},{"t":"Space","c":[]},{"t":"Str","c":"ut"},{"t":"Space","c":[]},{"t":"Str","c":"sapien"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Morbi"},{"t":"Space","c":[]},{"t":"Str","c":"sed"},{"t":"Space","c":[]},{"t":"Str","c":"diam"},{"t":"Space","c":[]},{"t":"Str","c":"quis"},{"t":"Space","c":[]},{"t":"Str","c":"felis"},{"t":"Space","c":[]},{"t":"Str","c":"commodo"},{"t":"Space","c":[]},{"t":"Str","c":"vehicula"},{"t":"Space","c":[]},{"t":"Str","c":"ac"},{"t":"Space","c":[]},{"t":"Str","c":"et"},{"t":"Space","c":[]},{"t":"Str","c":"augue"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Maecenas"},{"t":"Space","c":[]},{"t":"Str","c":"pretium"},{"t":"Space","c":[]},{"t":"Str","c":"justo"},{"t":"Space","c":[]},{"t":"Str","c":"sit"},{"t":"Space","c":[]},{"t":"Str","c":"amet"},{"t":"Space","c":[]},{"t":"Str","c":"imperdiet"},{"t":"Space","c":[]},{"t":"Str","c":"pharetra"},{"t":"Str","c":"."}]},{"t":"Para","c":[{"t":"Str","c":"Nunc"},{"t":"Space","c":[]},{"t":"Str","c":"at"},{"t":"Space","c":[]},{"t":"Str","c":"odio"},{"t":"Space","c":[]},{"t":"Str","c":"massa"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"In"},{"t":"Space","c":[]},{"t":"Str","c":"hac"},{"t":"Space","c":[]},{"t":"Str","c":"habitasse"},{"t":"Space","c":[]},{"t":"Str","c":"platea"},{"t":"Space","c":[]},{"t":"Str","c":"dictumst"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Donec"},{"t":"Space","c":[]},{"t":"Str","c":"posuere"},{"t":"Space","c":[]},{"t":"Str","c":"erat"},{"t":"Space","c":[]},{"t":"Str","c":"ac"},{"t":"Space","c":[]},{"t":"Str","c":"ultrices"},{"t":"Space","c":[]},{"t":"Str","c":"suscipit"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Quisque"},{"t":"Space","c":[]},{"t":"Str","c":"id"},{"t":"Space","c":[]},{"t":"Str","c":"velit"},{"t":"Space","c":[]},{"t":"Str","c":"nulla"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Ut"},{"t":"Space","c":[]},{"t":"Str","c":"in"},{"t":"Space","c":[]},{"t":"Str","c":"urna"},{"t":"Space","c":[]},{"t":"Str","c":"orci"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Sed"},{"t":"Space","c":[]},{"t":"Str","c":"at"},{"t":"Space","c":[]},{"t":"Str","c":"euismod"},{"t":"Space","c":[]},{"t":"Str","c":"neque"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Sed"},{"t":"Space","c":[]},{"t":"Str","c":"velit"},{"t":"Space","c":[]},{"t":"Str","c":"velit,"},{"t":"Space","c":[]},{"t":"Str","c":"fringilla"},{"t":"Space","c":[]},{"t":"Str","c":"vitae"},{"t":"Space","c":[]},{"t":"Str","c":"eleifend"},{"t":"Space","c":[]},{"t":"Str","c":"eget,"},{"t":"Space","c":[]},{"t":"Str","c":"auctor"},{"t":"Space","c":[]},{"t":"Str","c":"id"},{"t":"Space","c":[]},{"t":"Str","c":"mi"},{"t":"Str","c":"."}]},{"t":"Header","c":[1,["",["ew-pandoc-pagebreak"],[]],[]]},{"t":"Para","c":[]},{"t":"Header","c":[1,["",["c1"],[]],[{"t":"Str","c":"Proposed"},{"t":"Space","c":[]},{"t":"Str","c":"Solution"}]]},{"t":"Para","c":[{"t":"Str","c":"This"},{"t":"Space","c":[]},{"t":"Str","c":"wouldn"},{"t":"Str","c":"’"},{"t":"Str","c":"t"},{"t":"Space","c":[]},{"t":"Str","c":"be"},{"t":"Space","c":[]},{"t":"Str","c":"a"},{"t":"Space","c":[]},{"t":"Str","c":"proposal"},{"t":"Space","c":[]},{"t":"Str","c":"unless"},{"t":"Space","c":[]},{"t":"Str","c":"it"},{"t":"Space","c":[]},{"t":"Str","c":"proposed"},{"t":"Space","c":[]},{"t":"Str","c":"something"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"We"},{"t":"Space","c":[]},{"t":"Str","c":"will"},{"t":"Space","c":[]},{"t":"Str","c":"re"},{"t":"Str","c":"-"},{"t":"Str","c":"architect"},{"t":"Space","c":[]},{"t":"Str","c":"the"},{"t":"Space","c":[]},{"t":"Str","c":"system"},{"t":"Space","c":[]},{"t":"Str","c":"into"},{"t":"Space","c":[]},{"t":"Str","c":"a"},{"t":"Space","c":[]},{"t":"Str","c":"series"},{"t":"Space","c":[]},{"t":"Str","c":"of"},{"t":"Space","c":[]},{"t":"Str","c":"robust"},{"t":"Space","c":[]},{"t":"Str","c":"robust"},{"t":"Space","c":[]},{"t":"Str","c":"components:"}]},{"t":"OrderedList","c":[[1,{"t":"DefaultStyle","c":[]},{"t":"DefaultDelim","c":[]}],[[{"t":"Plain","c":[{"t":"Str","c":"export,"},{"t":"Space","c":[]},{"t":"Str","c":"a"},{"t":"Space","c":[]},{"t":"Str","c":"script"},{"t":"Space","c":[]},{"t":"Str","c":"to"},{"t":"Space","c":[]},{"t":"Str","c":"export"},{"t":"Space","c":[]},{"t":"Str","c":"the"},{"t":"Space","c":[]},{"t":"Str","c":"data"},{"t":"Space","c":[]},{"t":"Str","c":"from"},{"t":"Space","c":[]},{"t":"Str","c":"access,"},{"t":"Space","c":[]},{"t":"Str","c":"validate"},{"t":"Space","c":[]},{"t":"Str","c":"it,"},{"t":"Space","c":[]},{"t":"Str","c":"refactor"},{"t":"Space","c":[]},{"t":"Str","c":"it"},{"t":"Space","c":[]},{"t":"Str","c":"into"},{"t":"Space","c":[]},{"t":"Str","c":"a"},{"t":"Space","c":[]},{"t":"Str","c":"logical"},{"t":"Space","c":[]},{"t":"Str","c":"format,"},{"t":"Space","c":[]},{"t":"Str","c":"then"},{"t":"Space","c":[]},{"t":"Str","c":"output"},{"t":"Space","c":[]},{"t":"Str","c":"it"},{"t":"Space","c":[]},{"t":"Str","c":"in"},{"t":"Space","c":[]},{"t":"Str","c":"plain"},{"t":"Str","c":"-"},{"t":"Str","c":"text"},{"t":"Space","c":[]},{"t":"Str","c":"format"},{"t":"Str","c":"."}]}],[{"t":"Plain","c":[{"t":"Str","c":"import,"},{"t":"Space","c":[]},{"t":"Str","c":"a"},{"t":"Space","c":[]},{"t":"Str","c":"simple,"},{"t":"Space","c":[]},{"t":"Str","c":"robust"},{"t":"Space","c":[]},{"t":"Str","c":"module"},{"t":"Space","c":[]},{"t":"Str","c":"to"},{"t":"Space","c":[]},{"t":"Str","c":"handle"},{"t":"Space","c":[]},{"t":"Str","c":"file"},{"t":"Space","c":[]},{"t":"Str","c":"uploads"},{"t":"Space","c":[]},{"t":"Str","c":"of"},{"t":"Space","c":[]},{"t":"Str","c":"the"},{"t":"Space","c":[]},{"t":"Str","c":"cleaned"},{"t":"Space","c":[]},{"t":"Str","c":"data,"},{"t":"Space","c":[]},{"t":"Str","c":"and"},{"t":"Space","c":[]},{"t":"Str","c":"efficiently"},{"t":"Space","c":[]},{"t":"Str","c":"import"},{"t":"Space","c":[]},{"t":"Str","c":"this"},{"t":"Space","c":[]},{"t":"Str","c":"data"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"It"},{"t":"Space","c":[]},{"t":"Str","c":"will"},{"t":"Space","c":[]},{"t":"Str","c":"do"},{"t":"Space","c":[]},{"t":"Str","c":"sufficient"},{"t":"Space","c":[]},{"t":"Str","c":"error"},{"t":"Space","c":[]},{"t":"Str","c":"handling"},{"t":"Space","c":[]},{"t":"Str","c":"to"},{"t":"Space","c":[]},{"t":"Str","c":"allow"},{"t":"Space","c":[]},{"t":"Str","c":"full"},{"t":"Space","c":[]},{"t":"Str","c":"automation"},{"t":"Str","c":"."}]}]]]},{"t":"Para","c":[{"t":"Str","c":"As"},{"t":"Space","c":[]},{"t":"Str","c":"we"},{"t":"Space","c":[]},{"t":"Str","c":"perform"},{"t":"Space","c":[]},{"t":"Str","c":"the"},{"t":"Space","c":[]},{"t":"Str","c":"refactoring,"},{"t":"Space","c":[]},{"t":"Str","c":"we"},{"t":"Space","c":[]},{"t":"Str","c":"will"},{"t":"Space","c":[]},{"t":"Str","c":"rewriting"},{"t":"Space","c":[]},{"t":"Str","c":"the"},{"t":"Space","c":[]},{"t":"Str","c":"code"},{"t":"Space","c":[]},{"t":"Str","c":"to"},{"t":"Space","c":[]},{"t":"Str","c":"ensure"},{"t":"Space","c":[]},{"t":"Str","c":"it"},{"t":"Str","c":"’"},{"t":"Str","c":"s"},{"t":"Space","c":[]},{"t":"Str","c":"documented,"},{"t":"Space","c":[]},{"t":"Str","c":"easy"},{"t":"Space","c":[]},{"t":"Str","c":"to"},{"t":"Space","c":[]},{"t":"Str","c":"test,"},{"t":"Space","c":[]},{"t":"Str","c":"and"},{"t":"Space","c":[]},{"t":"Str","c":"easy"},{"t":"Space","c":[]},{"t":"Str","c":"to"},{"t":"Space","c":[]},{"t":"Str","c":"update"},{"t":"Space","c":[]},{"t":"Str","c":"as"},{"t":"Space","c":[]},{"t":"Str","c":"future"},{"t":"Space","c":[]},{"t":"Str","c":"needs"},{"t":"Space","c":[]},{"t":"Str","c":"are"},{"t":"Space","c":[]},{"t":"Str","c":"identified"},{"t":"Str","c":"."}]},{"t":"Header","c":[2,["",["c1"],[]],[{"t":"Str","c":"Export"},{"t":"Space","c":[]},{"t":"Str","c":"component"}]]},{"t":"BulletList","c":[[{"t":"Plain","c":[{"t":"Str","c":"This"},{"t":"Space","c":[]},{"t":"Str","c":"will"},{"t":"Space","c":[]},{"t":"Str","c":"be"},{"t":"Space","c":[]},{"t":"Str","c":"a"},{"t":"Space","c":[]},{"t":"Str","c":"standalone"},{"t":"Space","c":[]},{"t":"Str","c":"script"},{"t":"Space","c":[]},{"t":"Str","c":"responsible"},{"t":"Space","c":[]},{"t":"Str","c":"for"},{"t":"Space","c":[]},{"t":"Str","c":"extracting"},{"t":"Space","c":[]},{"t":"Str","c":"data"},{"t":"Space","c":[]},{"t":"Str","c":"from"},{"t":"Space","c":[]},{"t":"Str","c":"source"},{"t":"Space","c":[]},{"t":"Str","c":"database,"},{"t":"Space","c":[]},{"t":"Str","c":"and"},{"t":"Space","c":[]},{"t":"Str","c":"cleaning"},{"t":"Space","c":[]},{"t":"Str","c":"it"},{"t":"Space","c":[]},{"t":"Str","c":"up"},{"t":"Space","c":[]},{"t":"Str","c":"as"},{"t":"Space","c":[]},{"t":"Str","c":"appropriate"},{"t":"Str","c":"."}]}],[{"t":"Plain","c":[{"t":"Str","c":"The"},{"t":"Space","c":[]},{"t":"Str","c":"output"},{"t":"Space","c":[]},{"t":"Str","c":"format"},{"t":"Space","c":[]},{"t":"Str","c":"is"},{"t":"Space","c":[]},{"t":"Str","c":"human"},{"t":"Space","c":[]},{"t":"Str","c":"readable"},{"t":"Space","c":[]},{"t":"Str","c":"JSON"},{"t":"Space","c":[]},{"t":"Str","c":"files,"},{"t":"Space","c":[]},{"t":"Str","c":"with"},{"t":"Space","c":[]},{"t":"Str","c":"a"},{"t":"Space","c":[]},{"t":"Str","c":"logical,"},{"t":"Space","c":[]},{"t":"Str","c":"easy"},{"t":"Space","c":[]},{"t":"Str","c":"to"},{"t":"Space","c":[]},{"t":"Str","c":"understand"},{"t":"Space","c":[]},{"t":"Str","c":"structure"}]}],[{"t":"Plain","c":[{"t":"Str","c":"Easy"},{"t":"Space","c":[]},{"t":"Str","c":"to"},{"t":"Space","c":[]},{"t":"Str","c":"verify"},{"t":"Space","c":[]},{"t":"Str","c":"output"},{"t":"Space","c":[]},{"t":"Str","c":"through"},{"t":"Space","c":[]},{"t":"Str","c":"manual"},{"t":"Space","c":[]},{"t":"Str","c":"inspection"},{"t":"Space","c":[]},{"t":"Str","c":"of"},{"t":"Space","c":[]},{"t":"Str","c":"output"}]}],[{"t":"Plain","c":[{"t":"Str","c":"Include"},{"t":"Space","c":[]},{"t":"Str","c":"comprehensive"},{"t":"Space","c":[]},{"t":"Str","c":"automated"},{"t":"Space","c":[]},{"t":"Str","c":"tests"},{"t":"Space","c":[]},{"t":"Str","c":"to"},{"t":"Space","c":[]},{"t":"Str","c":"ensure"},{"t":"Space","c":[]},{"t":"Str","c":"output"},{"t":"Space","c":[]},{"t":"Str","c":"is"},{"t":"Space","c":[]},{"t":"Str","c":"correct"}]}]]},{"t":"Header","c":[2,["",["c1"],[]],[{"t":"Str","c":"Import"},{"t":"Space","c":[]},{"t":"Str","c":"component"}]]},{"t":"BulletList","c":[[{"t":"Plain","c":[{"t":"Str","c":"Allows"},{"t":"Space","c":[]},{"t":"Str","c":"non"},{"t":"Str","c":"-"},{"t":"Str","c":"technical"},{"t":"Space","c":[]},{"t":"Str","c":"staff"},{"t":"Space","c":[]},{"t":"Str","c":"to"},{"t":"Space","c":[]},{"t":"Str","c":"upload"},{"t":"Space","c":[]},{"t":"Str","c":"already"},{"t":"Space","c":[]},{"t":"Str","c":"validated"},{"t":"Space","c":[]},{"t":"Str","c":"JSON"},{"t":"Space","c":[]},{"t":"Str","c":"files,"},{"t":"Space","c":[]},{"t":"Str","c":"and"},{"t":"Space","c":[]},{"t":"Str","c":"sync"},{"t":"Space","c":[]},{"t":"Str","c":"the"},{"t":"Space","c":[]},{"t":"Str","c":"target"},{"t":"Space","c":[]},{"t":"Str","c":"database"},{"t":"Space","c":[]},{"t":"Str","c":"accordingly"},{"t":"Str","c":"."}]}],[{"t":"Plain","c":[{"t":"Str","c":"Assumes"},{"t":"Space","c":[]},{"t":"Str","c":"that"},{"t":"Space","c":[]},{"t":"Str","c":"input"},{"t":"Space","c":[]},{"t":"Str","c":"data"},{"t":"Space","c":[]},{"t":"Str","c":"is"},{"t":"Space","c":[]},{"t":"Str","c":"relatively"},{"t":"Space","c":[]},{"t":"Str","c":"safe,"},{"t":"Space","c":[]},{"t":"Str","c":"as"},{"t":"Space","c":[]},{"t":"Str","c":"it"},{"t":"Str","c":"’"},{"t":"Str","c":"s"},{"t":"Space","c":[]},{"t":"Str","c":"produced"},{"t":"Space","c":[]},{"t":"Str","c":"via"},{"t":"Space","c":[]},{"t":"Str","c":"the"},{"t":"Space","c":[]},{"t":"Str","c":"export"},{"t":"Space","c":[]},{"t":"Str","c":"component"}]}],[{"t":"Plain","c":[{"t":"Str","c":"Will"},{"t":"Space","c":[]},{"t":"Str","c":"be"},{"t":"Space","c":[]},{"t":"Str","c":"optimized"},{"t":"Space","c":[]},{"t":"Str","c":"to"},{"t":"Space","c":[]},{"t":"Str","c":"perform"},{"t":"Space","c":[]},{"t":"Str","c":"quickly;"},{"t":"Space","c":[]},{"t":"Str","c":"typical"},{"t":"Space","c":[]},{"t":"Str","c":"runs"},{"t":"Space","c":[]},{"t":"Str","c":"will"},{"t":"Space","c":[]},{"t":"Str","c":"be"},{"t":"Space","c":[]},{"t":"Str","c":"completed"},{"t":"Space","c":[]},{"t":"Str","c":"within"},{"t":"Space","c":[]},{"t":"Str","c":"60"},{"t":"Space","c":[]},{"t":"Str","c":"seconds"}]}],[{"t":"Plain","c":[{"t":"Str","c":"Improved"},{"t":"Space","c":[]},{"t":"Str","c":"validation"},{"t":"Space","c":[]},{"t":"Str","c":"and"},{"t":"Space","c":[]},{"t":"Str","c":"error"},{"t":"Space","c":[]},{"t":"Str","c":"handling"}]}]]},{"t":"Header","c":[2,["",["c1"],[]],[{"t":"Str","c":"Benefits"},{"t":"Space","c":[]},{"t":"Str","c":"of"},{"t":"Space","c":[]},{"t":"Str","c":"our"},{"t":"Space","c":[]},{"t":"Str","c":"solution"}]]},{"t":"Para","c":[{"t":"Str","c":"Here"},{"t":"Str","c":"’"},{"t":"Str","c":"s"},{"t":"Space","c":[]},{"t":"Str","c":"some"},{"t":"Space","c":[]},{"t":"Str","c":"more"},{"t":"Space","c":[]},{"t":"Strong","c":[{"t":"Str","c":"lorem"},{"t":"Space","c":[]},{"t":"Str","c":"ipsum"}]},{"t":"Str","c":" for"},{"t":"Space","c":[]},{"t":"Str","c":"you"},{"t":"Space","c":[]},{"t":"Str","c":"all"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Nullam"},{"t":"Space","c":[]},{"t":"Str","c":"vitae"},{"t":"Space","c":[]},{"t":"Str","c":"imperdiet"},{"t":"Space","c":[]},{"t":"Str","c":"enim"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Ut"},{"t":"Space","c":[]},{"t":"Str","c":"id"},{"t":"Space","c":[]},{"t":"Str","c":"ultrices"},{"t":"Space","c":[]},{"t":"Str","c":"leo"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"In"},{"t":"Space","c":[]},{"t":"Str","c":"dictum"},{"t":"Space","c":[]},{"t":"Str","c":"bibendum"},{"t":"Space","c":[]},{"t":"Str","c":"vestibulum"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Donec"},{"t":"Space","c":[]},{"t":"Str","c":"lobortis"},{"t":"Space","c":[]},{"t":"Str","c":"condimentum"},{"t":"Space","c":[]},{"t":"Str","c":"mauris"},{"t":"Space","c":[]},{"t":"Str","c":"ac"},{"t":"Space","c":[]},{"t":"Str","c":"interdum"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Duis"},{"t":"Space","c":[]},{"t":"Str","c":"bibendum"},{"t":"Space","c":[]},{"t":"Str","c":"molestie"},{"t":"Space","c":[]},{"t":"Str","c":"eleifend"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Nunc"},{"t":"Space","c":[]},{"t":"Str","c":"non"},{"t":"Space","c":[]},{"t":"Str","c":"neque"},{"t":"Space","c":[]},{"t":"Str","c":"a"},{"t":"Space","c":[]},{"t":"Str","c":"neque"},{"t":"Space","c":[]},{"t":"Str","c":"ornare"},{"t":"Space","c":[]},{"t":"Str","c":"euismod"},{"t":"Space","c":[]},{"t":"Str","c":"non"},{"t":"Space","c":[]},{"t":"Str","c":"ut"},{"t":"Space","c":[]},{"t":"Str","c":"sapien"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Morbi"},{"t":"Space","c":[]},{"t":"Str","c":"sed"},{"t":"Space","c":[]},{"t":"Str","c":"diam"},{"t":"Space","c":[]},{"t":"Str","c":"quis"},{"t":"Space","c":[]},{"t":"Str","c":"felis"},{"t":"Space","c":[]},{"t":"Str","c":"commodo"},{"t":"Space","c":[]},{"t":"Str","c":"vehicula"},{"t":"Space","c":[]},{"t":"Str","c":"ac"},{"t":"Space","c":[]},{"t":"Str","c":"et"},{"t":"Space","c":[]},{"t":"Str","c":"augue"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Maecenas"},{"t":"Space","c":[]},{"t":"Str","c":"pretium"},{"t":"Space","c":[]},{"t":"Str","c":"justo"},{"t":"Space","c":[]},{"t":"Str","c":"sit"},{"t":"Space","c":[]},{"t":"Str","c":"amet"},{"t":"Space","c":[]},{"t":"Str","c":"imperdiet"},{"t":"Space","c":[]},{"t":"Str","c":"pharetra"},{"t":"Str","c":"."}]},{"t":"Para","c":[{"t":"Str","c":"Nunc"},{"t":"Space","c":[]},{"t":"Str","c":"at"},{"t":"Space","c":[]},{"t":"Str","c":"odio"},{"t":"Space","c":[]},{"t":"Str","c":"massa"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"In"},{"t":"Space","c":[]},{"t":"Str","c":"hac"},{"t":"Space","c":[]},{"t":"Str","c":"habitasse"},{"t":"Space","c":[]},{"t":"Str","c":"platea"},{"t":"Space","c":[]},{"t":"Str","c":"dictumst"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Donec"},{"t":"Space","c":[]},{"t":"Str","c":"posuere"},{"t":"Space","c":[]},{"t":"Str","c":"erat"},{"t":"Space","c":[]},{"t":"Str","c":"ac"},{"t":"Space","c":[]},{"t":"Str","c":"ultrices"},{"t":"Space","c":[]},{"t":"Str","c":"suscipit"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Quisque"},{"t":"Space","c":[]},{"t":"Str","c":"id"},{"t":"Space","c":[]},{"t":"Str","c":"velit"},{"t":"Space","c":[]},{"t":"Str","c":"nulla"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Ut"},{"t":"Space","c":[]},{"t":"Str","c":"in"},{"t":"Space","c":[]},{"t":"Str","c":"urna"},{"t":"Space","c":[]},{"t":"Str","c":"orci"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Sed"},{"t":"Space","c":[]},{"t":"Str","c":"at"},{"t":"Space","c":[]},{"t":"Str","c":"euismod"},{"t":"Space","c":[]},{"t":"Str","c":"neque"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Sed"},{"t":"Space","c":[]},{"t":"Str","c":"velit"},{"t":"Space","c":[]},{"t":"Str","c":"velit,"},{"t":"Space","c":[]},{"t":"Str","c":"fringilla"},{"t":"Space","c":[]},{"t":"Str","c":"vitae"},{"t":"Space","c":[]},{"t":"Str","c":"eleifend"},{"t":"Space","c":[]},{"t":"Str","c":"eget,"},{"t":"Space","c":[]},{"t":"Str","c":"auctor"},{"t":"Space","c":[]},{"t":"Str","c":"id"},{"t":"Space","c":[]},{"t":"Str","c":"mi"},{"t":"Str","c":"."}]},{"t":"Para","c":[{"t":"Str","c":"Nullam"},{"t":"Space","c":[]},{"t":"Str","c":"vitae"},{"t":"Space","c":[]},{"t":"Str","c":"imperdiet"},{"t":"Space","c":[]},{"t":"Str","c":"enim"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Ut"},{"t":"Space","c":[]},{"t":"Str","c":"id"},{"t":"Space","c":[]},{"t":"Str","c":"ultrices"},{"t":"Space","c":[]},{"t":"Str","c":"leo"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"In"},{"t":"Space","c":[]},{"t":"Str","c":"dictum"},{"t":"Space","c":[]},{"t":"Str","c":"bibendum"},{"t":"Space","c":[]},{"t":"Str","c":"vestibulum"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Donec"},{"t":"Space","c":[]},{"t":"Str","c":"lobortis"},{"t":"Space","c":[]},{"t":"Str","c":"condimentum"},{"t":"Space","c":[]},{"t":"Str","c":"mauris"},{"t":"Space","c":[]},{"t":"Str","c":"ac"},{"t":"Space","c":[]},{"t":"Str","c":"interdum"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Duis"},{"t":"Space","c":[]},{"t":"Str","c":"bibendum"},{"t":"Space","c":[]},{"t":"Str","c":"molestie"},{"t":"Space","c":[]},{"t":"Str","c":"eleifend"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Nunc"},{"t":"Space","c":[]},{"t":"Str","c":"non"},{"t":"Space","c":[]},{"t":"Str","c":"neque"},{"t":"Space","c":[]},{"t":"Str","c":"a"},{"t":"Space","c":[]},{"t":"Str","c":"neque"},{"t":"Space","c":[]},{"t":"Str","c":"ornare"},{"t":"Space","c":[]},{"t":"Str","c":"euismod"},{"t":"Space","c":[]},{"t":"Str","c":"non"},{"t":"Space","c":[]},{"t":"Str","c":"ut"},{"t":"Space","c":[]},{"t":"Str","c":"sapien"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Morbi"},{"t":"Space","c":[]},{"t":"Str","c":"sed"},{"t":"Space","c":[]},{"t":"Str","c":"diam"},{"t":"Space","c":[]},{"t":"Str","c":"quis"},{"t":"Space","c":[]},{"t":"Str","c":"felis"},{"t":"Space","c":[]},{"t":"Str","c":"commodo"},{"t":"Space","c":[]},{"t":"Str","c":"vehicula"},{"t":"Space","c":[]},{"t":"Str","c":"ac"},{"t":"Space","c":[]},{"t":"Str","c":"et"},{"t":"Space","c":[]},{"t":"Str","c":"augue"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Maecenas"},{"t":"Space","c":[]},{"t":"Str","c":"pretium"},{"t":"Space","c":[]},{"t":"Str","c":"justo"},{"t":"Space","c":[]},{"t":"Str","c":"sit"},{"t":"Space","c":[]},{"t":"Str","c":"amet"},{"t":"Space","c":[]},{"t":"Str","c":"imperdiet"},{"t":"Space","c":[]},{"t":"Str","c":"pharetra"},{"t":"Str","c":"."}]},{"t":"Para","c":[{"t":"Str","c":"Nullam"},{"t":"Space","c":[]},{"t":"Str","c":"vitae"},{"t":"Space","c":[]},{"t":"Str","c":"imperdiet"},{"t":"Space","c":[]},{"t":"Str","c":"enim"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Ut"},{"t":"Space","c":[]},{"t":"Str","c":"id"},{"t":"Space","c":[]},{"t":"Str","c":"ultrices"},{"t":"Space","c":[]},{"t":"Str","c":"leo"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"In"},{"t":"Space","c":[]},{"t":"Str","c":"dictum"},{"t":"Space","c":[]},{"t":"Str","c":"bibendum"},{"t":"Space","c":[]},{"t":"Str","c":"vestibulum"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Donec"},{"t":"Space","c":[]},{"t":"Str","c":"lobortis"},{"t":"Space","c":[]},{"t":"Str","c":"condimentum"},{"t":"Space","c":[]},{"t":"Str","c":"mauris"},{"t":"Space","c":[]},{"t":"Str","c":"ac"},{"t":"Space","c":[]},{"t":"Str","c":"interdum"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Duis"},{"t":"Space","c":[]},{"t":"Str","c":"bibendum"},{"t":"Space","c":[]},{"t":"Str","c":"molestie"},{"t":"Space","c":[]},{"t":"Str","c":"eleifend"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Nunc"},{"t":"Space","c":[]},{"t":"Str","c":"non"},{"t":"Space","c":[]},{"t":"Str","c":"neque"},{"t":"Space","c":[]},{"t":"Str","c":"a"},{"t":"Space","c":[]},{"t":"Str","c":"neque"},{"t":"Space","c":[]},{"t":"Str","c":"ornare"},{"t":"Space","c":[]},{"t":"Str","c":"euismod"},{"t":"Space","c":[]},{"t":"Str","c":"non"},{"t":"Space","c":[]},{"t":"Str","c":"ut"},{"t":"Space","c":[]},{"t":"Str","c":"sapien"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Morbi"},{"t":"Space","c":[]},{"t":"Str","c":"sed"},{"t":"Space","c":[]},{"t":"Str","c":"diam"},{"t":"Space","c":[]},{"t":"Str","c":"quis"},{"t":"Space","c":[]},{"t":"Str","c":"felis"},{"t":"Space","c":[]},{"t":"Str","c":"commodo"},{"t":"Space","c":[]},{"t":"Str","c":"vehicula"},{"t":"Space","c":[]},{"t":"Str","c":"ac"},{"t":"Space","c":[]},{"t":"Str","c":"et"},{"t":"Space","c":[]},{"t":"Str","c":"augue"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Maecenas"},{"t":"Space","c":[]},{"t":"Str","c":"pretium"},{"t":"Space","c":[]},{"t":"Str","c":"justo"},{"t":"Space","c":[]},{"t":"Str","c":"sit"},{"t":"Space","c":[]},{"t":"Str","c":"amet"},{"t":"Space","c":[]},{"t":"Str","c":"imperdiet"},{"t":"Space","c":[]},{"t":"Str","c":"pharetra"},{"t":"Str","c":"."}]},{"t":"Header","c":[1,["",["ew-pandoc-pagebreak"],[]],[]]},{"t":"Para","c":[]},{"t":"Header","c":[1,["",["c1"],[]],[{"t":"Str","c":"Schedule"},{"t":"Space","c":[]},{"t":"Str","c":"and"},{"t":"Space","c":[]},{"t":"Str","c":"Budget"}]]},{"t":"Para","c":[{"t":"Str","c":"The"},{"t":"Space","c":[]},{"t":"Str","c":"work"},{"t":"Space","c":[]},{"t":"Str","c":"described"},{"t":"Space","c":[]},{"t":"Str","c":"in"},{"t":"Space","c":[]},{"t":"Str","c":"this"},{"t":"Space","c":[]},{"t":"Str","c":"mandate"},{"t":"Space","c":[]},{"t":"Str","c":"will"},{"t":"Space","c":[]},{"t":"Str","c":"take"},{"t":"Space","c":[]},{"t":"Str","c":"300"},{"t":"Space","c":[]},{"t":"Str","c":"hours"},{"t":"Space","c":[]},{"t":"Str","c":"to"},{"t":"Space","c":[]},{"t":"Str","c":"complete,"},{"t":"Space","c":[]},{"t":"Str","c":"to"},{"t":"Space","c":[]},{"t":"Str","c":"be"},{"t":"Space","c":[]},{"t":"Str","c":"performed"},{"t":"Space","c":[]},{"t":"Str","c":"within"},{"t":"Space","c":[]},{"t":"Str","c":"6"},{"t":"Str","c":"-"},{"t":"Str","c":"8"},{"t":"Space","c":[]},{"t":"Str","c":"weeks"},{"t":"Space","c":[]},{"t":"Str","c":"of"},{"t":"Space","c":[]},{"t":"Str","c":"the"},{"t":"Space","c":[]},{"t":"Str","c":"signing"},{"t":"Space","c":[]},{"t":"Str","c":"of"},{"t":"Space","c":[]},{"t":"Str","c":"this"},{"t":"Space","c":[]},{"t":"Str","c":"agreement"},{"t":"Str","c":"."}]},{"t":"Header","c":[2,["",["c1"],[]],[{"t":"Str","c":"Table"}]]},{"t":"Para","c":[{"t":"Str","c":"Here"},{"t":"Space","c":[]},{"t":"Str","c":"is"},{"t":"Space","c":[]},{"t":"Str","c":"a"},{"t":"Space","c":[]},{"t":"Str","c":"schedule"},{"t":"Space","c":[]},{"t":"Str","c":"of"},{"t":"Space","c":[]},{"t":"Str","c":"the"},{"t":"Space","c":[]},{"t":"Str","c":"work:"}]},{"t":"Para","c":[]},{"t":"Para","c":[{"t":"Link","c":[[],["#",""]]},{"t":"Link","c":[[],["#",""]]}]},{"t":"Table","c":[[],[{"t":"AlignLeft","c":[]},{"t":"AlignLeft","c":[]}],[0.5,0.5],[],[[[{"t":"Para","c":[{"t":"Str","c":"gdocs"},{"t":"Str","c":"-"},{"t":"Str","c":"export:author"}]}],[{"t":"Para","c":[{"t":"Str","c":"Alex"}]}]],[[{"t":"Para","c":[{"t":"Str","c":"1"}]}],[{"t":"Para","c":[{"t":"Str","c":"150"}]}]],[[{"t":"Para","c":[{"t":"Str","c":"2"}]}],[{"t":"Para","c":[{"t":"Str","c":"150"}]}]]]]},{"t":"Para","c":[]},{"t":"Para","c":[{"t":"Str","c":"The"},{"t":"Space","c":[]},{"t":"Str","c":"following"},{"t":"Space","c":[]},{"t":"Str","c":"diagram"},{"t":"Space","c":[]},{"t":"Str","c":"should"},{"t":"Space","c":[]},{"t":"Str","c":"be"},{"t":"Space","c":[]},{"t":"Str","c":"on"},{"t":"Space","c":[]},{"t":"Str","c":"a"},{"t":"Space","c":[]},{"t":"Str","c":"separate"},{"t":"Space","c":[]},{"t":"Str","c":"page,"},{"t":"Space","c":[]},{"t":"Str","c":"to"},{"t":"Space","c":[]},{"t":"Str","c":"test"},{"t":"Space","c":[]},{"t":"Str","c":"page"},{"t":"Space","c":[]},{"t":"Str","c":"break:"}]},{"t":"Header","c":[1,["",["ew-pandoc-pagebreak"],[]],[]]},{"t":"Header","c":[2,["",["c1"],[]],[{"t":"Str","c":"Diagram"},{"t":"Space","c":[]},{"t":"Str","c":"showing"},{"t":"Space","c":[]},{"t":"Str","c":"how"},{"t":"Space","c":[]},{"t":"Str","c":"work"},{"t":"Space","c":[]},{"t":"Str","c":"is"},{"t":"Space","c":[]},{"t":"Str","c":"split"}]]},{"t":"Para","c":[{"t":"Str","c":"Every"},{"t":"Space","c":[]},{"t":"Str","c":"document"},{"t":"Space","c":[]},{"t":"Str","c":"needs"},{"t":"Space","c":[]},{"t":"Str","c":"a"},{"t":"Space","c":[]},{"t":"Str","c":"diagram!"}]},{"t":"Para","c":[{"t":"Image","c":[[],["SHbO80B3zYiLwN09wcE1jxTyLWaBsr7llKXblVz0EwCQsT2EsGznwPa4YwxgN3BwyMSEZhyazyYEoA5TNEBswNe6FJ2ZZsw9_E5R3YnzdCYFfcxjoR-rnHg.jpg",""]]}]},{"t":"Header","c":[1,["",["ew-pandoc-pagebreak"],[]],[]]},{"t":"Para","c":[]},{"t":"Header","c":[1,["",["c1"],[]],[{"t":"Str","c":"Terms"},{"t":"Space","c":[]},{"t":"Str","c":"and"},{"t":"Space","c":[]},{"t":"Str","c":"Conditions"}]]},{"t":"Header","c":[2,["",["c1"],[]],[{"t":"Str","c":"Staffing"}]]},{"t":"Para","c":[{"t":"Str","c":"Appropriate"},{"t":"Space","c":[]},{"t":"Str","c":"staff"},{"t":"Space","c":[]},{"t":"Str","c":"will"},{"t":"Space","c":[]},{"t":"Str","c":"be"},{"t":"Space","c":[]},{"t":"Str","c":"used"},{"t":"Space","c":[]},{"t":"Str","c":"for"},{"t":"Space","c":[]},{"t":"Str","c":"the"},{"t":"Space","c":[]},{"t":"Str","c":"execution"},{"t":"Space","c":[]},{"t":"Str","c":"of"},{"t":"Space","c":[]},{"t":"Str","c":"this"},{"t":"Space","c":[]},{"t":"Str","c":"project"},{"t":"Str","c":"."}]},{"t":"Header","c":[2,["",["c1"],[]],[{"t":"Str","c":"Relation"},{"t":"Space","c":[]},{"t":"Str","c":"to"},{"t":"Space","c":[]},{"t":"Str","c":"Other"},{"t":"Space","c":[]},{"t":"Str","c":"Agreements"}]]},{"t":"Para","c":[{"t":"Str","c":"This"},{"t":"Space","c":[]},{"t":"Str","c":"agreement"},{"t":"Space","c":[]},{"t":"Str","c":"is"},{"t":"Space","c":[]},{"t":"Str","c":"governed"},{"t":"Space","c":[]},{"t":"Str","c":"by"},{"t":"Space","c":[]},{"t":"Str","c":"the"},{"t":"Space","c":[]},{"t":"Str","c":"same"},{"t":"Space","c":[]},{"t":"Str","c":"terms"},{"t":"Space","c":[]},{"t":"Str","c":"and"},{"t":"Space","c":[]},{"t":"Str","c":"conditions"},{"t":"Space","c":[]},{"t":"Str","c":"as"},{"t":"Space","c":[]},{"t":"Str","c":"some"},{"t":"Space","c":[]},{"t":"Str","c":"other"},{"t":"Space","c":[]},{"t":"Str","c":"documents"},{"t":"Str","c":"."}]},{"t":"Header","c":[2,["",["c1"],[]],[{"t":"Str","c":"Language"},{"t":"Space","c":[]},{"t":"Str","c":"of"},{"t":"Space","c":[]},{"t":"Str","c":"Contract"}]]},{"t":"Para","c":[{"t":"Str","c":"Les"},{"t":"Space","c":[]},{"t":"Str","c":"parties"},{"t":"Space","c":[]},{"t":"Str","c":"ont"},{"t":"Space","c":[]},{"t":"Str","c":"convenu"},{"t":"Space","c":[]},{"t":"Str","c":"de"},{"t":"Space","c":[]},{"t":"Str","c":"rédiger"},{"t":"Space","c":[]},{"t":"Str","c":"cette"},{"t":"Space","c":[]},{"t":"Str","c":"entente"},{"t":"Space","c":[]},{"t":"Str","c":"en"},{"t":"Space","c":[]},{"t":"Str","c":"anglais"},{"t":"Str","c":"."},{"t":"Space","c":[]},{"t":"Str","c":"Parties"},{"t":"Space","c":[]},{"t":"Str","c":"have"},{"t":"Space","c":[]},{"t":"Str","c":"decided"},{"t":"Space","c":[]},{"t":"Str","c":"that"},{"t":"Space","c":[]},{"t":"Str","c":"this"},{"t":"Space","c":[]},{"t":"Str","c":"agreement"},{"t":"Space","c":[]},{"t":"Str","c":"be"},{"t":"Space","c":[]},{"t":"Str","c":"formulated"},{"t":"Space","c":[]},{"t":"Str","c":"in"},{"t":"Space","c":[]},{"t":"Str","c":"English"},{"t":"Str","c":"."}]},{"t":"Header","c":[1,["",["ew-pandoc-pagebreak"],[]],[]]},{"t":"Para","c":[]},{"t":"Header","c":[1,["",["c1","c11"],[]],[{"t":"Str","c":"Agreement"}]]},{"t":"Para","c":[{"t":"Str","c":"This"},{"t":"Space","c":[]},{"t":"Str","c":"document"},{"t":"Space","c":[]},{"t":"Str","c":"is"},{"t":"Space","c":[]},{"t":"Str","c":"a"},{"t":"Space","c":[]},{"t":"Str","c":"contract,"},{"t":"Space","c":[]},{"t":"Str","c":"and"},{"t":"Space","c":[]},{"t":"Str","c":"contracts"},{"t":"Space","c":[]},{"t":"Str","c":"must"},{"t":"Space","c":[]},{"t":"Str","c":"be"},{"t":"Space","c":[]},{"t":"Str","c":"signed"},{"t":"Str","c":"."}]},{"t":"Para","c":[]},{"t":"Para","c":[{"t":"Str","c":"Signed"},{"t":"Space","c":[]},{"t":"Str","c":"on"},{"t":"Space","c":[]},{"t":"Str","c":"behalf"},{"t":"Space","c":[]},{"t":"Str","c":"of"},{"t":"Space","c":[]},{"t":"Strong","c":[{"t":"Str","c":"Client"},{"t":"Space","c":[]},{"t":"Str","c":"LLC"}]},{"t":"Str","c":":"}]},{"t":"Para","c":[]},{"t":"Para","c":[{"t":"Str","c":" "}]},{"t":"Para","c":[{"t":"Str","c":" "}]},{"t":"HorizontalRule","c":[]},{"t":"Para","c":[]},{"t":"Para","c":[{"t":"Str","c":"Name"},{"t":"Space","c":[]},{"t":"Str","c":"and"},{"t":"Space","c":[]},{"t":"Str","c":"title"}]},{"t":"Para","c":[{"t":"Str","c":" "}]},{"t":"Para","c":[{"t":"Str","c":" "}]},{"t":"HorizontalRule","c":[]},{"t":"Para","c":[]},{"t":"Para","c":[{"t":"Str","c":"Signature"},{"t":"Space","c":[]},{"t":"Str","c":"and"},{"t":"Space","c":[]},{"t":"Str","c":"date"}]},{"t":"Para","c":[]},{"t":"Para","c":[{"t":"Str","c":"Signed"},{"t":"Space","c":[]},{"t":"Str","c":"by"},{"t":"Space","c":[]},{"t":"Str","c":"Adam"},{"t":"Space","c":[]},{"t":"Str","c":"Smith,"},{"t":"Space","c":[]},{"t":"Str","c":"President"},{"t":"Space","c":[]},{"t":"Str","c":"of"},{"t":"Space","c":[]},{"t":"Strong","c":[{"t":"Str","c":"Vendor"},{"t":"Space","c":[]},{"t":"Str","c":"Inc"},{"t":"Str","c":"."},{"t":"Str","c":":"}]}]},{"t":"Para","c":[]},{"t":"Para","c":[]},{"t":"HorizontalRule","c":[]},{"t":"Para","c":[]},{"t":"Para","c":[{"t":"Str","c":"Signature"},{"t":"Space","c":[]},{"t":"Str","c":"and"},{"t":"Space","c":[]},{"t":"Str","c":"date"}]}]] diff --git a/build/example/preprocessed.html b/build/example/preprocessed.html deleted file mode 100644 index 67e2d2f..0000000 --- a/build/example/preprocessed.html +++ /dev/null @@ -1,137 +0,0 @@ - - - -Test doc for gd-pandoc - - - - -

Sample Statement of Work

-

Every document needs a subtitle...

-

-

-

-

-

-

-

-Background -

-

Every project needs a background. Here’s some lorem ipsum about the project.

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sit amet arcu elit. Donec at massa et leo auctor fringilla vitae id erat. Nam feugiat velit vitae ornare tristique. Morbi porttitor, orci vel dapibus malesuada, magna libero ultrices massa, nec interdum diam nisi elementum ipsum. Vestibulum elit lorem, pretium id semper ac, aliquam ut dui. Etiam at magna non nibh viverra tristique. Maecenas consectetur vulputate tellus, ac rutrum felis molestie ut. Aenean tincidunt congue cursus. Maecenas in egestas magna, nec pellentesque justo. Phasellus ante quam, faucibus sit amet tellus et, fringilla convallis eros.

-

Nullam vitae imperdiet enim. Ut id ultrices leo. In dictum bibendum vestibulum. Donec lobortis condimentum mauris ac interdum. Duis bibendum molestie eleifend. Nunc non neque a neque ornare euismod non ut sapien. Morbi sed diam quis felis commodo vehicula ac et augue. Maecenas pretium justo sit amet imperdiet pharetra.

-

Nunc at odio massa. In hac habitasse platea dictumst. Donec posuere erat ac ultrices suscipit. Quisque id velit nulla. Ut in urna orci. Sed at euismod neque. Sed velit velit, fringilla vitae eleifend eget, auctor id mi.

-

-

-

-Proposed Solution -

-

This wouldn’t be a proposal unless it proposed something. We will re-architect the system into a series of robust robust components:

-
    -
  1. export, a script to export the data from access, validate it, refactor it into a logical format, then output it in plain-text format.
  2. -
  3. import, a simple, robust module to handle file uploads of the cleaned data, and efficiently import this data. It will do sufficient error handling to allow full automation.
  4. -
-

As we perform the refactoring, we will rewriting the code to ensure it’s documented, easy to test, and easy to update as future needs are identified.

-

-Export component -

-
    -
  • This will be a standalone script responsible for extracting data from source database, and cleaning it up as appropriate.
  • -
  • The output format is human readable JSON files, with a logical, easy to understand structure
  • -
  • Easy to verify output through manual inspection of output
  • -
  • Include comprehensive automated tests to ensure output is correct
  • -
-

-Import component -

-
    -
  • Allows non-technical staff to upload already validated JSON files, and sync the target database accordingly.
  • -
  • Assumes that input data is relatively safe, as it’s produced via the export component
  • -
  • Will be optimized to perform quickly; typical runs will be completed within 60 seconds
  • -
  • Improved validation and error handling
  • -
-

-Benefits of our solution -

-

Here’s some more lorem ipsum for you all. Nullam vitae imperdiet enim. Ut id ultrices leo. In dictum bibendum vestibulum. Donec lobortis condimentum mauris ac interdum. Duis bibendum molestie eleifend. Nunc non neque a neque ornare euismod non ut sapien. Morbi sed diam quis felis commodo vehicula ac et augue. Maecenas pretium justo sit amet imperdiet pharetra.

-

Nunc at odio massa. In hac habitasse platea dictumst. Donec posuere erat ac ultrices suscipit. Quisque id velit nulla. Ut in urna orci. Sed at euismod neque. Sed velit velit, fringilla vitae eleifend eget, auctor id mi.

-

Nullam vitae imperdiet enim. Ut id ultrices leo. In dictum bibendum vestibulum. Donec lobortis condimentum mauris ac interdum. Duis bibendum molestie eleifend. Nunc non neque a neque ornare euismod non ut sapien. Morbi sed diam quis felis commodo vehicula ac et augue. Maecenas pretium justo sit amet imperdiet pharetra.

-

Nullam vitae imperdiet enim. Ut id ultrices leo. In dictum bibendum vestibulum. Donec lobortis condimentum mauris ac interdum. Duis bibendum molestie eleifend. Nunc non neque a neque ornare euismod non ut sapien. Morbi sed diam quis felis commodo vehicula ac et augue. Maecenas pretium justo sit amet imperdiet pharetra.

-

-

-

-Schedule and Budget -

-

The work described in this mandate will take 300 hours to complete, to be performed within 6-8 weeks of the signing of this agreement.

-

-Table -

-

Here is a schedule of the work:

-

- - - - - - - - - - - - - -

gdocs-export:author

Alex

1

150

2

150

-

-

The following diagram should be on a separate page, to test page break:

-

-

-Diagram showing how work is split -

-

Every document needs a diagram!

-

-

-

-

-Terms and Conditions -

-

-Staffing -

-

Appropriate staff will be used for the execution of this project.

-

-Relation to Other Agreements -

-

This agreement is governed by the same terms and conditions as some other documents.

-

-Language of Contract -

-

Les parties ont convenu de rédiger cette entente en anglais. Parties have decided that this agreement be formulated in English.

-

-

-

-Agreement -

-

This document is a contract, and contracts must be signed.

-

-

Signed on behalf of Client LLC:

-

-

 

-

 

-
-

-

Name and title

-

 

-

 

-
-

-

Signature and date

-

-

Signed by Adam Smith, President of Vendor Inc.:

-

-

-
-

-

Signature and date

- - diff --git a/build/example/template-metadata.tex b/build/example/template-metadata.tex deleted file mode 100644 index 918d410..0000000 --- a/build/example/template-metadata.tex +++ /dev/null @@ -1,6 +0,0 @@ -\newcommand{\mytitle}{$title$} -\newcommand{\mysubtitle}{$subtitle$} -\newcommand{\mybody}{$body$} - - -% TODO: support table of key-value metadata in google doc diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..f48e210 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,17 @@ +version: '3.1' + +services: + gdocs: + build: + context: . + dockerfile: Dockerfile + args: + extra: chmod -R 777 ${APP_DOCKER_DIR} + container_name: ${DOCKER_IMAGE}_container + ports: + - "${PORT_PREFIX}36:${PORT_PREFIX}36" + - "${PORT_PREFIX}80:80" + volumes: + - "${APP_HOST_DIR}:${APP_DOCKER_DIR}" + tty: true + restart: always diff --git a/lib/pandoc-filter.py b/lib/pandoc-filter.py index bb69e4e..fb954e2 100755 --- a/lib/pandoc-filter.py +++ b/lib/pandoc-filter.py @@ -1,43 +1,31 @@ #!/usr/bin/env python - import json import sys - """ Pandoc filter to convert all level 2+ headers to paragraphs with emphasized text. """ - from pandocfilters import walk, RawBlock, RawInline, Span, attributes, Str - def isH1WithClass(key, value, className): return key == 'Header' and value[0] == 1 and className in value[1][1] - def isSubTitle(key, value): return isH1WithClass(key, value, u'ew-pandoc-subtitle') - def isHeader(key, value): return isH1WithClass(key, value, u'ew-pandoc-header') - def isFooter(key, value): return isH1WithClass(key, value, u'ew-pandoc-footer') - # hacky workaround for pandoc's not supporting def isUnderline(key, value): # if key == 'Span' and value[0][1] == ['underline']: # sys.stderr.write( json.dumps(value[0]) + "\n") return key == 'Span' and value[0][1] == ['underline'] - # see https://github.com/jgm/pandoc/issues/1063 def isTitle(key, value): return isH1WithClass(key, value, u'ew-pandoc-title') - def isPageBreak(key, value): return isH1WithClass(key, value, u'ew-pandoc-pagebreak') - def isHr(key, value): return key == 'HorizontalRule' - # key is a pandoc type, generally "Header", "String" "Para",... # value is either a string (if key is String) or a list otherwise. # If a list, value's structure depends on type @@ -66,55 +54,42 @@ def extract_metadata(key, value, format, meta): if isFooter(key,value): meta["footer"] = { "c": value[2], "t": "MetaInlines" } return [] - def fix_hr(key, value, format, meta): if key == "HorizontalRule": return RawBlock('latex', '\\hrulefill') - def fix_pagebreaks(key, value, format, meta): if isPageBreak(key,value): return RawBlock('latex', '\\pagebreak') - def fix_underline(key, value, format, meta): if isUnderline(key,value): return [ RawInline('latex', '\\uline{'), Span(value[0], value[1]), RawInline('latex', '}') ] - def toJSONFilter(): doc = json.loads(sys.stdin.read()) if len(sys.argv) > 1: format = sys.argv[1] else: format = "" - newfmt = 'pandoc-api-version' in doc - # first, process metadata (title and subtitle) if newfmt: result_meta = doc['meta'] else: result_meta = doc[0]['unMeta'] doc = walk(doc, extract_metadata, format, result_meta) - # We need a title, use a default if unset if 'title' not in result_meta: title = {'c': 'Untitled', 't': 'Str'} result_meta['title'] = { "c": [title], "t": "MetaInlines" } - if newfmt: doc['meta'] = result_meta else: doc[0]['unMeta'] = result_meta - # then, fix page breaks doc = walk(doc, fix_pagebreaks, format, result_meta) - # then, fix underline doc = walk(doc, fix_underline, format, result_meta) - # then, customize horizontal rules (otherwise they're hardcoded in Writers/LaTeX.hs) doc = walk(doc, fix_hr, format, result_meta) - json.dump(doc, sys.stdout) - if __name__ == "__main__": toJSONFilter() diff --git a/server/.DS_Store b/server/.DS_Store new file mode 100644 index 0000000..df4d001 Binary files /dev/null and b/server/.DS_Store differ diff --git a/server/apache-config.conf b/server/apache-config.conf new file mode 100644 index 0000000..2ded17e --- /dev/null +++ b/server/apache-config.conf @@ -0,0 +1,21 @@ + + ServerAdmin me@mydomain.com + DocumentRoot /var/gdocs-export/server/www + + + Options Indexes FollowSymLinks MultiViews + AllowOverride All + Order allow,deny + Allow from all + Require all granted + RewriteEngine On + RewriteBase / + RewriteCond %{REQUEST_URI} !^$ + RewriteRule "^(\w+)\/([\w_]+).*$" "index.php?path=$1&id=$2" [QSA,L] + + + + ErrorLog ${APACHE_LOG_DIR}/error.log + CustomLog ${APACHE_LOG_DIR}/access.log combined + + diff --git a/server/envvars b/server/envvars new file mode 100644 index 0000000..9799c3f --- /dev/null +++ b/server/envvars @@ -0,0 +1,38 @@ +# envvars - default environment variables for apache2ctl +# this won't be correct after changing uid +unset HOME +# for supporting multiple apache2 instances +if [ "${APACHE_CONFDIR##/etc/apache2-}" != "${APACHE_CONFDIR}" ] ; then + SUFFIX="-${APACHE_CONFDIR##/etc/apache2-}" +else + SUFFIX= +fi +# Since there is no sane way to get the parsed apache2 config in scripts, some +# settings are defined via environment variables and then used in apache2ctl, +# /etc/init.d/apache2, /etc/logrotate.d/apache2, etc. +export APACHE_RUN_USER=gdocs +export APACHE_RUN_GROUP=www-data +# temporary state file location. This might be changed to /run in Wheezy+1 +export APACHE_PID_FILE=/var/run/apache2/apache2$SUFFIX.pid +export APACHE_RUN_DIR=/var/run/apache2$SUFFIX +export APACHE_LOCK_DIR=/var/lock/apache2$SUFFIX +# Only /var/log/apache2 is handled by /etc/logrotate.d/apache2. +export APACHE_LOG_DIR=/var/log/apache2$SUFFIX +## The locale used by some modules like mod_dav +export LANG=C +## Uncomment the following line to use the system default locale instead: +#. /etc/default/locale +export LANG +## The command to get the status for 'apache2ctl status'. +## Some packages providing 'www-browser' need '--dump' instead of '-dump'. +#export APACHE_LYNX='www-browser -dump' +## If you need a higher file descriptor limit, uncomment and adjust the +## following line (default is 8192): +#APACHE_ULIMIT_MAX_FILES='ulimit -n 65536' +## If you would like to pass arguments to the web server, add them below +## to the APACHE_ARGUMENTS environment. +#export APACHE_ARGUMENTS='' +## Enable the debug mode for maintainer scripts. +## This will produce a verbose output on package installations of web server modules and web application +## installations which interact with Apache +#export APACHE2_MAINTSCRIPT_DEBUG=1 diff --git a/server/scripts/web-convert-gdoc.sh b/server/scripts/web-convert-gdoc.sh new file mode 100755 index 0000000..b46b0ca --- /dev/null +++ b/server/scripts/web-convert-gdoc.sh @@ -0,0 +1,34 @@ +#!/bin/sh + +cd /var/gdocs-export +make api_download DOC_ID=$1 FILE_NAME=$2 +make convert FILE_NAME=$2 THEME=ew + +# if [ ! -d input/2018-07 ] then \ +# mkdir input/2018-07 \ +# fi; +# bundlecd /elif [[ condition ]]; then +# #statements +# echo "OH" +# # get DOC_ID from input +# bundle exec google-api execute \ +# -u "https://docs.google.com/feeds/download/documents/export/Export?id=1dwYaiiy4P0KA7PvNwAP2fsPAf6qMMNzwaq8W66mwyds&exportFormat=html&ndplr=1" \ +# > input/2018-07/test2.html + + +# make convert OUTPUT=$(OUTPUT_DIR)/$(FILE_NAME) FILE_NAME=$(FILE_NAME) THEME=ew + +# Download HTML version of the Gdoc document +# make api_download doc_id=${DOC_ID} input_file=input/${DOC_NAME}.html workdir=${GDOCS_DIR}/ +# # cp ${GDOCS_DIR}/google-api-authorization.yaml /home/gdocs/.google-api.yml +# # +# # GDOC_DOWNLOAD_URL="https://docs.google.com/feeds/download/documents/export/Export?id=${DOC_ID}&exportFormat=html" +# # echo ${GDOC_DOWNLOAD_URL} +# # bundle exec google-api execute -u ${GDOC_DOWNLOAD_URL} > input/${DOC_NAME}.html +# +# # +# # # Convert the file into PDF +# make convert OUTPUT=build/${DOC_NAME} name=${DOC_NAME} input_file=input/${DOC_NAME}.html theme=ew +# # +# # # Copy the PDF file into /output folder +# cp ${GDOCS_DIR}/build/${DOC_NAME}/${DOC_NAME}.pdf ${GDOCS_DIR}/server/www/output diff --git a/server/www/composer.json b/server/www/composer.json new file mode 100644 index 0000000..1c39e0b --- /dev/null +++ b/server/www/composer.json @@ -0,0 +1,14 @@ +{ + "name": "robertng/gdocs", + "description": "Gdocs export PHP server", + "authors": [ + { + "name": "Robert Ngo", + "email": "robert.ngo@evolvingweb.ca" + } + ], + "require": { + "google/apiclient": "^2.0", + "guzzlehttp/guzzle": "~6.0" + } +} diff --git a/server/www/composer.lock b/server/www/composer.lock new file mode 100644 index 0000000..65034b9 --- /dev/null +++ b/server/www/composer.lock @@ -0,0 +1,848 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "8a45fe83c12ae1bd2b128e73638e16a5", + "packages": [ + { + "name": "firebase/php-jwt", + "version": "v5.0.0", + "source": { + "type": "git", + "url": "https://github.com/firebase/php-jwt.git", + "reference": "9984a4d3a32ae7673d6971ea00bae9d0a1abba0e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/9984a4d3a32ae7673d6971ea00bae9d0a1abba0e", + "reference": "9984a4d3a32ae7673d6971ea00bae9d0a1abba0e", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": " 4.8.35" + }, + "type": "library", + "autoload": { + "psr-4": { + "Firebase\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Neuman Vong", + "email": "neuman+pear@twilio.com", + "role": "Developer" + }, + { + "name": "Anant Narayanan", + "email": "anant@php.net", + "role": "Developer" + } + ], + "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", + "homepage": "https://github.com/firebase/php-jwt", + "time": "2017-06-27T22:17:23+00:00" + }, + { + "name": "google/apiclient", + "version": "v2.2.2", + "source": { + "type": "git", + "url": "https://github.com/google/google-api-php-client.git", + "reference": "4e0fd83510e579043e10e565528b323b7c2b3c81" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/google/google-api-php-client/zipball/4e0fd83510e579043e10e565528b323b7c2b3c81", + "reference": "4e0fd83510e579043e10e565528b323b7c2b3c81", + "shasum": "" + }, + "require": { + "firebase/php-jwt": "~2.0|~3.0|~4.0|~5.0", + "google/apiclient-services": "~0.13", + "google/auth": "^1.0", + "guzzlehttp/guzzle": "~5.3.1|~6.0", + "guzzlehttp/psr7": "^1.2", + "monolog/monolog": "^1.17", + "php": ">=5.4", + "phpseclib/phpseclib": "~0.3.10|~2.0" + }, + "require-dev": { + "cache/filesystem-adapter": "^0.3.2", + "phpunit/phpunit": "~4.8.36", + "squizlabs/php_codesniffer": "~2.3", + "symfony/css-selector": "~2.1", + "symfony/dom-crawler": "~2.1" + }, + "suggest": { + "cache/filesystem-adapter": "For caching certs and tokens (using Google_Client::setCache)" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-0": { + "Google_": "src/" + }, + "classmap": [ + "src/Google/Service/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "Client library for Google APIs", + "homepage": "http://developers.google.com/api-client-library/php", + "keywords": [ + "google" + ], + "time": "2018-06-20T15:52:20+00:00" + }, + { + "name": "google/apiclient-services", + "version": "v0.64", + "source": { + "type": "git", + "url": "https://github.com/google/google-api-php-client-services.git", + "reference": "0250aa8cadbe58e790aa07d736b675f3bdd87a1c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/google/google-api-php-client-services/zipball/0250aa8cadbe58e790aa07d736b675f3bdd87a1c", + "reference": "0250aa8cadbe58e790aa07d736b675f3bdd87a1c", + "shasum": "" + }, + "require": { + "php": ">=5.4" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "autoload": { + "psr-0": { + "Google_Service_": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "Client library for Google APIs", + "homepage": "http://developers.google.com/api-client-library/php", + "keywords": [ + "google" + ], + "time": "2018-06-30T00:22:51+00:00" + }, + { + "name": "google/auth", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/google/google-auth-library-php.git", + "reference": "8f7c96146b2c62d3f4c6bbc4b5bb8a8e396b0b71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/google/google-auth-library-php/zipball/8f7c96146b2c62d3f4c6bbc4b5bb8a8e396b0b71", + "reference": "8f7c96146b2c62d3f4c6bbc4b5bb8a8e396b0b71", + "shasum": "" + }, + "require": { + "firebase/php-jwt": "~2.0|~3.0|~4.0|~5.0", + "guzzlehttp/guzzle": "~5.3.1|~6.0", + "guzzlehttp/psr7": "^1.2", + "php": ">=5.4", + "psr/cache": "^1.0", + "psr/http-message": "^1.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^1.11", + "guzzlehttp/promises": "0.1.1|^1.3", + "phpunit/phpunit": "^4.8.36|^5.7", + "sebastian/comparator": ">=1.2.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Google\\Auth\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "Google Auth Library for PHP", + "homepage": "http://github.com/google/google-auth-library-php", + "keywords": [ + "Authentication", + "google", + "oauth2" + ], + "time": "2018-04-06T19:26:30+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "6.3.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "shasum": "" + }, + "require": { + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4", + "php": ">=5.5" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.0" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.3-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "time": "2018-04-22T15:46:56+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "time": "2016-12-20T10:07:11+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2017-03-20T17:10:46+00:00" + }, + { + "name": "guzzlehttp/ringphp", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/RingPHP.git", + "reference": "dbbb91d7f6c191e5e405e900e3102ac7f261bc0b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/RingPHP/zipball/dbbb91d7f6c191e5e405e900e3102ac7f261bc0b", + "reference": "dbbb91d7f6c191e5e405e900e3102ac7f261bc0b", + "shasum": "" + }, + "require": { + "guzzlehttp/streams": "~3.0", + "php": ">=5.4.0", + "react/promise": "~2.0" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "ext-curl": "Guzzle will use specific adapters if cURL is present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Ring\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Provides a simple API and specification that abstracts away the details of HTTP into a single PHP function.", + "time": "2015-05-20T03:37:09+00:00" + }, + { + "name": "guzzlehttp/streams", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/streams.git", + "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/streams/zipball/47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5", + "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Stream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Provides a simple abstraction over streams of data", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "Guzzle", + "stream" + ], + "time": "2014-10-12T19:18:40+00:00" + }, + { + "name": "monolog/monolog", + "version": "1.23.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4", + "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "psr/log": "~1.0" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "graylog2/gelf-php": "~1.0", + "jakub-onderka/php-parallel-lint": "0.9", + "php-amqplib/php-amqplib": "~2.4", + "php-console/php-console": "^3.1.3", + "phpunit/phpunit": "~4.5", + "phpunit/phpunit-mock-objects": "2.3.0", + "ruflin/elastica": ">=0.90 <3.0", + "sentry/sentry": "^0.13", + "swiftmailer/swiftmailer": "^5.3|^6.0" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mongo": "Allow sending log messages to a MongoDB server", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "php-console/php-console": "Allow sending log messages to Google Chrome", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server", + "sentry/sentry": "Allow sending log messages to a Sentry server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "http://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "time": "2017-06-19T01:22:40+00:00" + }, + { + "name": "phpseclib/phpseclib", + "version": "2.0.11", + "source": { + "type": "git", + "url": "https://github.com/phpseclib/phpseclib.git", + "reference": "7053f06f91b3de78e143d430e55a8f7889efc08b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/7053f06f91b3de78e143d430e55a8f7889efc08b", + "reference": "7053f06f91b3de78e143d430e55a8f7889efc08b", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phing/phing": "~2.7", + "phpunit/phpunit": "^4.8.35|^5.7|^6.0", + "sami/sami": "~2.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "suggest": { + "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", + "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", + "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", + "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." + }, + "type": "library", + "autoload": { + "files": [ + "phpseclib/bootstrap.php" + ], + "psr-4": { + "phpseclib\\": "phpseclib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jim Wigginton", + "email": "terrafrost@php.net", + "role": "Lead Developer" + }, + { + "name": "Patrick Monnerat", + "email": "pm@datasphere.ch", + "role": "Developer" + }, + { + "name": "Andreas Fischer", + "email": "bantu@phpbb.com", + "role": "Developer" + }, + { + "name": "Hans-Jürgen Petrich", + "email": "petrich@tronic-media.com", + "role": "Developer" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "role": "Developer" + } + ], + "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", + "homepage": "http://phpseclib.sourceforge.net", + "keywords": [ + "BigInteger", + "aes", + "asn.1", + "asn1", + "blowfish", + "crypto", + "cryptography", + "encryption", + "rsa", + "security", + "sftp", + "signature", + "signing", + "ssh", + "twofish", + "x.509", + "x509" + ], + "time": "2018-04-15T16:55:05+00:00" + }, + { + "name": "psr/cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "time": "2016-08-06T20:24:11+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10T12:19:37+00:00" + }, + { + "name": "react/promise", + "version": "v2.7.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/promise.git", + "reference": "f4edc2581617431aea50430749db55cc3fc031b3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/promise/zipball/f4edc2581617431aea50430749db55cc3fc031b3", + "reference": "f4edc2581617431aea50430749db55cc3fc031b3", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com" + } + ], + "description": "A lightweight implementation of CommonJS Promises/A for PHP", + "keywords": [ + "promise", + "promises" + ], + "time": "2018-06-13T15:59:06+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [] +} diff --git a/server/www/css/app.css b/server/www/css/app.css new file mode 100644 index 0000000..5c01c43 --- /dev/null +++ b/server/www/css/app.css @@ -0,0 +1,5 @@ +.page-title { + text-align: center; + margin-top: 2em; + margin-bottom: 1em; +} diff --git a/server/www/download1.php b/server/www/download1.php new file mode 100644 index 0000000..72fe9ec --- /dev/null +++ b/server/www/download1.php @@ -0,0 +1,40 @@ +setApplicationName('Google Drive API PHP Quickstart'); +$client->setScopes(Google_Service_Drive::DRIVE_READONLY); +$client->setAuthConfig('credentials.json'); +$client->setAccessType('offline'); +// + +if(file_exists('token.json')) { + $token = json_decode(file_get_contents('token.json')); + $client->setAccessToken($token->access_token); +} + +// Build service +$service = new Google_Service_Drive($client); + +$doc_id = $_GET['doc_id']; +$doc_name = date('Ymd') . '--' . $_GET['doc_name']; +$theme = (isset($_GET['theme'])) ? $_GET['theme'] : 'default'; + +$response = $service->files->export($doc_id, 'text/html'); +$content = $response->getBody(); + +$input_folder = date('Y-m'); + +$file = "/var/gdocs-export/input/{$input_folder}/{$doc_name}.html"; +$fp = fopen($file, 'wb'); +fwrite($fp, $content); +fclose($fp); + +$command = "cd /var/gdocs-export && make convert FILE_NAME={$doc_name} THEME=ew"; +shell_exec($command); + +echo 'Done'; diff --git a/server/www/index.php b/server/www/index.php new file mode 100644 index 0000000..5fcd236 --- /dev/null +++ b/server/www/index.php @@ -0,0 +1,162 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GPL v3 + * @link https://github.com/dergachev/gdocs-export + * + * PHP version 5 + */ + +error_reporting(E_ALL); +ini_set('display_errors', 1); + +define('GDOCS_DIR', "/var/gdocs-export"); + + +/** + * Sets a response code, and a message to go along with it. + * + * @param int $status Response code for the page. + * @param string $message The message. + * + * @return bool + */ +function endit($status, $message) +{ + return http_response_code($status) && die($message); +} + +/** + * Downloads the gdoc and stores it on the server. + * + * @return bool + */ +function upload() +{ + if (isset($_REQUEST['id']) === true || isset($_REQUEST['token']) === true) { + endit(400, "Bad Request."); + } + + $gdocCurl = curl_init( + "https://docs.google.com/document/d/".$_REQUEST['id']."/export?format=html" + ); + curl_setopt( + $gdocCurl, + CURLOPT_HTTPHEADER, + array("Authorization: Bearer ".$_REQUEST['token']) + ); + $fp = fopen(GDOCS_DIR."/input/".$_REQUEST['id'].'.html', "w"); + curl_setopt($gdocCurl, CURLOPT_FOLLOWLOCATION, true); + curl_setopt($gdocCurl, CURLOPT_FILE, $fp); + curl_setopt($gdocCurl, CURLOPT_RETURNTRANSFER, true); + + $content = curl_exec($gdocCurl); + + //print_r($content); print_r(curl_errno($gdocCurl)); + + $httpCode = curl_getinfo($gdocCurl, CURLINFO_HTTP_CODE); + if ($httpCode >= 400) { + curl_close($gdocCurl); + fclose($fp); + return endit($httpCode, "Invalid Request."); + } else { + fwrite($fp, $content); + curl_close($gdocCurl); + fclose($fp); + return endit(200, 'File successfully uploaded to the server.'); + } +} + +/** + * Downloads the gdoc and stores it on the server. + * + * @return bool + */ +function convert() +{ + isset($_REQUEST['id']) or die(400); + file_exists( + GDOCS_DIR."/input/".$_REQUEST['id'].".html" + ) or endit( + 404, + "File not found." + ); + $command = "make -C ".GDOCS_DIR." convert FILE_NAME=".$_REQUEST['id']; + exec($command, $irrelevant, $status); + !$status or endit(500, "Conversion failed."); + return endit(200, 'File successfully converted.'); +} + +/** + * Downloads the gdoc and stores it on the server. + * + * @return void + */ +function download() +{ + isset($_REQUEST['id']) or endit(400, "Bad Request."); + $format = isset($_REQUEST['format']) === true ? $_REQUEST['format'] : "pdf"; + $path = GDOCS_DIR."/build/" . $_REQUEST['id']."/".$_REQUEST['id'].".".$format; + file_exists($path) or endit(404, "File not found."); + $fname = (isset($_REQUEST['name']) === true ? $_REQUEST['name'] : $_REQUEST['id']).".".$format; + header('Content-Description: File Transfer'); + header('Content-Type: application/octet-stream'); + header('Content-Disposition: attachment; filename="'.basename($fname).'"'); + header('Expires: 0'); + header('Cache-Control: must-revalidate'); + header('Content-Length: '.filesize($path)); + readfile($path); + exit; +} + +switch($_REQUEST['path']){ +case "upload": + upload(); + break; +case "convert": + convert(); + break; +case "download": + download(); + break; +default: + endit(400, "Invalid path."); +} +/* What comes below is the old code, that currently serves no role. It is kept for easy reference. +// Check for security key +if(!isset($_GET['key']) || + !(isset($_GET['key']) && $_GET['key'] === KEY)) { + $errors[] = 'Key not found'; +} +if(!isset($_GET['doc_id'])) $errors[] = 'Doc ID not found'; +if(!isset($_GET['doc_name'])) $errors[] = 'Doc name not found'; + +if(!empty($errors)) { + $message = new Message(400, 'Bad Request', $errors); + $message->render(); +} + +// All good, move on to generate the fancy PDF +$doc_id = $_GET['doc_id']; +$doc_name = time() . '--' . $_GET['doc_name']; +$theme = (isset($_GET['theme'])) ? $_GET['theme'] : 'default'; + +$command = GDOCS_DIR . "/server/scripts/web-convert-gdoc.sh {$doc_id} {$doc_name} {$theme}"; +$output = system($command); + + +if(file_exists(GDOCS_DIR . '/server/www/output/' . $doc_name . '.pdf')) { + $url = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['HTTP_HOST'] . '/output/' . $doc_name . '.pdf'; + $message = new Message(200, 'Success', array(), array('file' => $url)); + $message->render(); +} else { + $text = "File {$doc_name}.pdf failed to generate"; + $message = new Message(403, 'Error', array($text)); + $message->render(); +} + +*/ \ No newline at end of file diff --git a/server/www/quickstart.php b/server/www/quickstart.php new file mode 100644 index 0000000..0e36423 --- /dev/null +++ b/server/www/quickstart.php @@ -0,0 +1,83 @@ +setApplicationName('Google Drive API PHP Quickstart'); + $client->setScopes(Google_Service_Drive::DRIVE_READONLY); + $client->setAuthConfig('credentials.json'); + $client->setAccessType('offline'); + + // Load previously authorized credentials from a file. + $credentialsPath = 'token.json'; + if (file_exists($credentialsPath)) { + $accessToken = json_decode(file_get_contents($credentialsPath), true); + } else { + // Request authorization from the user. + $authUrl = $client->createAuthUrl(); + printf("Open the following link in your browser:\n%s\n", $authUrl); + print 'Enter verification code: '; + $authCode = trim(fgets(STDIN)); + + // Exchange authorization code for an access token. + $accessToken = $client->fetchAccessTokenWithAuthCode($authCode); + + // Store the credentials to disk. + if (!file_exists(dirname($credentialsPath))) { + mkdir(dirname($credentialsPath), 0700, true); + } + file_put_contents($credentialsPath, json_encode($accessToken)); + printf("Credentials saved to %s\n", $credentialsPath); + } + $client->setAccessToken($accessToken); + + // Refresh the token if it's expired. + if ($client->isAccessTokenExpired()) { + $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken()); + file_put_contents($credentialsPath, json_encode($client->getAccessToken())); + } + return $client; +} + + +// Get the API client and construct the service object. +$client = getClient(); +$service = new Google_Service_Drive($client); + +// $fileId = '1dwYaiiy4P0KA7PvNwAP2fsPAf6qMMNzwaq8W66mwyds'; +$fileId = '1dwYaiiy4P0KA7PvNwAP2fsPAf6qMMNzwaq8W66mwyds'; +$response = $service->files->export($fileId, 'text/html'); + +$content = $response->getBody(); + +$file = '/var/gdocs-export/input/test.html'; +$fp = fopen($file, 'wb'); +fwrite($fp, $content); +fclose($fp); + + +//print $content; + +// $content = $response->getBody()->getContents(); +// print $content; + + +// $results = $service->files->listFiles($optParams); +// +// if (count($results->getFiles()) == 0) { +// print "No files found.\n"; +// } else { +// print "Files:\n"; +// foreach ($results->getFiles() as $file) { +// printf("%s (%s)\n", $file->getName(), $file->getId()); +// } +// }