pandoc 1.9.1 → 1.9.1.1
raw patch · 14 files changed
+145/−71 lines, 14 filesbinary-addedPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- INSTALL +31/−0
- changelog +34/−0
- pandoc.cabal +3/−2
- reference.docx binary
- s5/default/blank.gif binary
- s5/default/bodybg.gif binary
- s5/default/slides.min.js +0/−1
- src/Tests/Helpers.hs +4/−6
- src/Tests/Readers/LaTeX.hs +18/−18
- src/Text/Pandoc/Readers/LaTeX.hs +40/−40
- src/Text/Pandoc/Writers/Docx.hs +10/−1
- src/pandoc.hs +2/−2
- templates/default.html5 +2/−0
- tests/latex-reader.native +1/−1
INSTALL view
@@ -94,6 +94,37 @@ generate a script that can be run to register the package at install time. +Creating a relocatable Windows binary+-------------------------------------++On Windows it is possible to compile pandoc such that it+(and its data files) are "relocatable." You can put the relocatable+binary in any directory (even on a USB drive), and it will look for its+data files there.++ cabal install --flags="embed_data_files" citeproc-hs+ cabal install --flags="executable -library" --datasubdir=++You can find `pandoc.exe` in `dist/build/pandoc`. Copy this wherever+you please, and copy the following data files to the same place:++ README+ COPYRIGHT+ COPYING+ reference.odt+ reference.docx+ epub.css+ default.csl+ templates/+ data/+ s5/+ slidy/+ dzslides/+ pcre-license.txt+ pcre3.dll++This is essentially what the binary installer does.+ [zip-archive]: http://hackage.haskell.org/package/zip-archive [highlighting-kate]: http://hackage.haskell.org/package/highlighting-kate [blaze-html]: http://hackage.haskell.org/package/blaze-html
changelog view
@@ -1,3 +1,37 @@+pandoc (1.9.1.1)++ * Better handling of raw latex environments in markdown. Now++ \begin{equation}+ a_1+ \end{equation}++ turns into a raw latex block as expected.++ * Improvements to LaTeX reader:++ + Skip options after block commands.+ + Correctly handle `{\\}` in braced.+ + Added a needed 'try'.+ + Citations: add `, ` to suffix if it doesn't start with space or+ punctuation. Otherwise we get no space between the year and the+ suffix in author-date styles.++ * Added two needed data files for S5. This fixes a problem with+ `pandoc -t s5 --self-contained`. Also removed `slides.min.js`,+ which was no longer being used.++ * Fixed some minor problems in `reference.docx`:+ name on "Date" style, `xCs` instead of `xIs`.++ * Fixed a problem creating docx files using a reference docx+ modified using Word. The problem seems to be that Word+ modifies `_rels/.rels`, changing the Type of the Relationship to+ `docProps/core.xml`. Pandoc now changes this back to the correct+ value if it has been altered, fixing the problem.++ * Fixed html5 template so it works properly with highlighting.+ pandoc (1.9.1) * LaTeX reader:
pandoc.cabal view
@@ -1,5 +1,5 @@ Name: pandoc-Version: 1.9.1+Version: 1.9.1.1 Cabal-Version: >= 1.10 Build-Type: Custom License: GPL@@ -59,7 +59,6 @@ data/LaTeXMathML.js, data/MathMLinHTML.js, -- data for S5 writer- s5/default/slides.min.js, s5/default/slides.js, s5/default/s5-core.css, s5/default/framing.css,@@ -69,6 +68,8 @@ s5/default/print.css, s5/default/slides.css, s5/default/iepngfix.htc,+ s5/default/blank.gif,+ s5/default/bodybg.gif, -- data for slidy writer slidy/styles/slidy.css, slidy/scripts/slidy.js.gz,
reference.docx view
binary file changed (8294 → 8299 bytes)
+ s5/default/blank.gif view
binary file changed (absent → 49 bytes)
+ s5/default/bodybg.gif view
binary file changed (absent → 10119 bytes)
− s5/default/slides.min.js
@@ -1,1 +0,0 @@-var undef;var slideCSS="";var snum=0;var smax=1;var incpos=0;var number=undef;var s5mode=true;var defaultView="slideshow";var controlVis="visible";var isIE=navigator.appName=="Microsoft Internet Explorer"&&navigator.userAgent.indexOf("Opera")<1?1:0;var isOp=navigator.userAgent.indexOf("Opera")>-1?1:0;var isGe=navigator.userAgent.indexOf("Gecko")>-1&&navigator.userAgent.indexOf("Safari")<1?1:0;function hasClass(a,b){if(!a.className){return false}return(a.className.search("(^|\\s)"+b+"(\\s|$)")!=-1)}function hasValue(a,b){if(!a){return false}return(a.search("(^|\\s)"+b+"(\\s|$)")!=-1)}function removeClass(a,b){if(!a){return}a.className=a.className.replace(new RegExp("(^|\\s)"+b+"(\\s|$)"),RegExp.$1+RegExp.$2)}function addClass(a,b){if(!a||hasClass(a,b)){return}if(a.className){a.className+=" "+b}else{a.className=b}}function GetElementsWithClassName(a,c){var d=document.getElementsByTagName(a);var e=new Array();for(var b=0;b<d.length;b++){if(hasClass(d[b],c)){e[e.length]=d[b]}}return e}function isParentOrSelf(a,b){if(a==null||a.nodeName=="BODY"){return false}else{if(a.id==b){return true}else{return isParentOrSelf(a.parentNode,b)}}}function nodeValue(d){var a="";if(d.nodeType==1){var c=d.childNodes;for(var b=0;b<c.length;++b){a+=nodeValue(c[b])}}else{if(d.nodeType==3){a=d.nodeValue}}return(a)}function slideLabel(){var f=GetElementsWithClassName("*","slide");var g=document.getElementById("jumplist");smax=f.length;for(var c=0;c<smax;c++){var e=f[c];var i="slide"+c.toString();e.setAttribute("id",i);if(isOp){continue}var d="";var b=e.firstChild;if(!b){continue}while(b&&b.nodeType==3){b=b.nextSibling}if(!b){continue}var h=b.childNodes;for(var a=0;a<h.length;a++){d+=nodeValue(h[a])}g.options[g.length]=new Option(c+" : "+d,c)}}function currentSlide(){var a;if(document.getElementById){a=document.getElementById("currentSlide")}else{a=document.currentSlide}a.innerHTML='<span id="csHere">'+snum+'</span> <span id="csSep">/</span> <span id="csTotal">'+(smax-1)+"</span>";if(snum==0){a.style.visibility="hidden"}else{a.style.visibility="visible"}}function go(c){if(document.getElementById("slideProj").disabled||c==0){return}var b=document.getElementById("jumplist");var g="slide"+snum;var e=document.getElementById(g);if(incrementals[snum].length>0){for(var a=0;a<incrementals[snum].length;a++){removeClass(incrementals[snum][a],"current");removeClass(incrementals[snum][a],"incremental")}}if(c!="j"){snum+=c;lmax=smax-1;if(snum>lmax){snum=lmax}if(snum<0){snum=0}}else{snum=parseInt(b.value)}var f="slide"+snum;var d=document.getElementById(f);if(!d){d=document.getElementById("slide0");snum=0}if(c<0){incpos=incrementals[snum].length}else{incpos=0}if(incrementals[snum].length>0&&incpos==0){for(var a=0;a<incrementals[snum].length;a++){if(hasClass(incrementals[snum][a],"current")){incpos=a+1}else{addClass(incrementals[snum][a],"incremental")}}}if(incrementals[snum].length>0&&incpos>0){addClass(incrementals[snum][incpos-1],"current")}e.style.visibility="hidden";d.style.visibility="visible";b.selectedIndex=snum;currentSlide();number=0}function goTo(a){if(a>=smax||a==snum){return}go(a-snum)}function subgo(a){if(a>0){removeClass(incrementals[snum][incpos-1],"current");removeClass(incrementals[snum][incpos],"incremental");addClass(incrementals[snum][incpos],"current");incpos++}else{incpos--;removeClass(incrementals[snum][incpos],"current");addClass(incrementals[snum][incpos],"incremental");addClass(incrementals[snum][incpos-1],"current")}}function toggle(){var b=GetElementsWithClassName("*","slide");var d=document.getElementById("slideProj");var c=document.getElementById("outlineStyle");if(!d.disabled){d.disabled=true;c.disabled=false;s5mode=false;fontSize("1em");for(var e=0;e<smax;e++){var a=b[e];a.style.visibility="visible"}}else{d.disabled=false;c.disabled=true;s5mode=true;fontScale();for(var e=0;e<smax;e++){var a=b[e];a.style.visibility="hidden"}b[snum].style.visibility="visible"}}function showHide(a){var b=GetElementsWithClassName("*","hideme")[0];switch(a){case"s":b.style.visibility="visible";break;case"h":b.style.visibility="hidden";break;case"k":if(b.style.visibility!="visible"){b.style.visibility="visible"}else{b.style.visibility="hidden"}break}}function keys(a){if(!a){a=event;a.which=a.keyCode}if(a.which==84){toggle();return}if(s5mode){switch(a.which){case 10:case 13:if(window.event&&isParentOrSelf(window.event.srcElement,"controls")){return}if(a.target&&isParentOrSelf(a.target,"controls")){return}if(number!=undef){goTo(number);break}case 32:case 34:case 39:case 40:if(number!=undef){go(number)}else{if(!incrementals[snum]||incpos>=incrementals[snum].length){go(1)}else{subgo(1)}}break;case 33:case 37:case 38:if(number!=undef){go(-1*number)}else{if(!incrementals[snum]||incpos<=0){go(-1)}else{subgo(-1)}}break;case 36:goTo(0);break;case 35:goTo(smax-1);break;case 67:showHide("k");break}if(a.which<48||a.which>57){number=undef}else{if(window.event&&isParentOrSelf(window.event.srcElement,"controls")){return}if(a.target&&isParentOrSelf(a.target,"controls")){return}number=(((number!=undef)?number:0)*10)+(a.which-48)}}return false}function clicker(b){number=undef;var a;if(window.event){a=window.event.srcElement;b=window.event}else{a=b.target}if(a.getAttribute("href")!=null||hasValue(a.rel,"external")||isParentOrSelf(a,"controls")||isParentOrSelf(a,"embed")||isParentOrSelf(a,"object")){return true}if(!b.which||b.which==1){if(!incrementals[snum]||incpos>=incrementals[snum].length){go(1)}else{subgo(1)}}}function findSlide(d){var c=null;var b=GetElementsWithClassName("*","slide");for(var a=0;a<b.length;a++){var e=b[a];if((e.name&&e.name==d)||(e.id&&e.id==d)){c=e;break}}while(c!=null&&c.nodeName!="BODY"){if(hasClass(c,"slide")){return parseInt(c.id.slice(5))}c=c.parentNode}return null}function slideJump(){if(window.location.hash==null){return}var b=/^#slide(\d+)$/;var c=b.exec(window.location.hash);var a=null;if(c!=null){a=parseInt(c[1])}else{a=findSlide(window.location.hash.slice(1))}if(a!=null){go(a-snum)}}function fixLinks(){var f=window.location.href;f=f.slice(0,f.length-window.location.hash.length);var g=document.getElementsByTagName("A");for(var e=0;e<g.length;e++){var b=g[e].href;var d=b.match("#slide[0-9]{1,2}");if((d)&&(d[0].slice(0,1)=="#")){var c=findSlide(d[0].slice(1));if(c!=null){if(g[e].addEventListener){g[e].addEventListener("click",new Function("e","if (document.getElementById('slideProj').disabled) return;go("+c+" - snum); if (e.preventDefault) e.preventDefault();"),true)}else{if(g[e].attachEvent){g[e].attachEvent("onclick",new Function("","if (document.getElementById('slideProj').disabled) return;go("+c+" - snum); event.returnValue = false;"))}}}}}}function externalLinks(){if(!document.getElementsByTagName){return}var c=document.getElementsByTagName("a");for(var b=0;b<c.length;b++){var a=c[b];if(a.getAttribute("href")&&hasValue(a.rel,"external")){a.target="_blank";addClass(a,"external")}}}function createControls(){var e=document.getElementById("controls");if(!e){return}var c=" onmouseover=\"showHide('s');\" onmouseout=\"showHide('h');\"";var d,a="";if(controlVis=="hidden"){d=c}else{a=c}e.innerHTML='<form action="#" id="controlForm"'+d+'><div id="navLinks"><a accesskey="t" id="toggle" href="javascript:toggle();">Ø</a><a accesskey="z" id="prev" href="javascript:go(-1);">«</a><a accesskey="x" id="next" href="javascript:go(1);">»</a><div id="navList"'+a+'><select id="jumplist" onchange="go(\'j\');"></select></div></div></form>';if(controlVis=="hidden"){var b=document.getElementById("navLinks")}else{var b=document.getElementById("jumplist")}addClass(b,"hideme")}function fontScale(){if(!s5mode){return false}var f=22;var a=32;if(window.innerHeight){var c=window.innerHeight;var e=window.innerWidth}else{if(document.documentElement.clientHeight){var c=document.documentElement.clientHeight;var e=document.documentElement.clientWidth}else{if(document.body.clientHeight){var c=document.body.clientHeight;var e=document.body.clientWidth}else{var c=700;var e=1024}}}var b=Math.min(Math.round(c/f),Math.round(e/a));fontSize(b+"px");if(isGe){var d=document.getElementsByTagName("body")[0];d.style.display="none";d.style.display="block"}}function fontSize(a){if(!(s5ss=document.getElementById("s5ss"))){if(!isIE){document.getElementsByTagName("head")[0].appendChild(s5ss=document.createElement("style"));s5ss.setAttribute("media","screen, projection");s5ss.setAttribute("id","s5ss")}else{document.createStyleSheet();document.s5ss=document.styleSheets[document.styleSheets.length-1]}}if(!isIE){while(s5ss.lastChild){s5ss.removeChild(s5ss.lastChild)}s5ss.appendChild(document.createTextNode("body {font-size: "+a+" !important;}"))}else{document.s5ss.addRule("body","font-size: "+a+" !important;")}}function notOperaFix(){slideCSS=document.getElementById("slideProj").href;var b=document.getElementById("slideProj");var a=document.getElementById("outlineStyle");b.setAttribute("media","screen");a.disabled=true;if(isGe){b.setAttribute("href","null");b.setAttribute("href",slideCSS)}if(isIE&&document.styleSheets&&document.styleSheets[0]){document.styleSheets[0].addRule("img","behavior: url(ui/default/iepngfix.htc)");document.styleSheets[0].addRule("div","behavior: url(ui/default/iepngfix.htc)");document.styleSheets[0].addRule(".slide","behavior: url(ui/default/iepngfix.htc)")}}function getIncrementals(e){var d=new Array();if(!e){return d}var c=e.childNodes;for(var b=0;b<c.length;b++){var f=c[b];if(hasClass(f,"incremental")){if(f.nodeName=="OL"||f.nodeName=="UL"){removeClass(f,"incremental");for(var a=0;a<f.childNodes.length;a++){if(f.childNodes[a].nodeType==1){addClass(f.childNodes[a],"incremental")}}}else{d[d.length]=f;removeClass(f,"incremental")}}if(hasClass(f,"show-first")){if(f.nodeName=="OL"||f.nodeName=="UL"){removeClass(f,"show-first");if(f.childNodes[isGe].nodeType==1){removeClass(f.childNodes[isGe],"incremental")}}else{d[d.length]=f}}d=d.concat(getIncrementals(f))}return d}function createIncrementals(){var b=new Array();for(var a=0;a<smax;a++){b[a]=getIncrementals(document.getElementById("slide"+a))}return b}function defaultCheck(){var a=document.getElementsByTagName("meta");for(var b=0;b<a.length;b++){if(a[b].name=="defaultView"){defaultView=a[b].content}if(a[b].name=="controlVis"){controlVis=a[b].content}}}function trap(a){if(!a){a=event;a.which=a.keyCode}try{modifierKey=a.ctrlKey||a.altKey||a.metaKey}catch(a){modifierKey=false}return modifierKey||a.which==0}function startup(){defaultCheck();if(!isOp){createControls()}slideLabel();fixLinks();externalLinks();fontScale();if(!isOp){notOperaFix();incrementals=createIncrementals();slideJump();if(defaultView=="outline"){toggle()}document.onkeyup=keys;document.onkeypress=trap;document.onclick=clicker}}window.onload=startup;window.onresize=function(){setTimeout("fontScale()",50)};
src/Tests/Helpers.hs view
@@ -69,15 +69,13 @@ vividize :: (DI,String) -> String vividize (B,s) = s-vividize (_,s) = vivid s+vividize (F,s) = s+vividize (S,s) = setSGRCode [SetColor Background Dull Red+ , SetColor Foreground Vivid White] ++ s+ ++ setSGRCode [Reset] property :: QP.Testable a => TestName -> a -> Test property = testProperty--vivid :: String -> String-vivid s = setSGRCode [SetColor Background Dull Red- , SetColor Foreground Vivid White] ++ s- ++ setSGRCode [Reset] infix 5 =?> (=?>) :: a -> b -> (a,b)
src/Tests/Readers/LaTeX.hs view
@@ -78,14 +78,14 @@ =?> para (cite [baseCitation] (rt "\\citet{item1}")) , "suffix" =: "\\citet[p.~30]{item1}" =?> para- (cite [baseCitation{ citationSuffix = toList $ text "p.\160\&30" }] (rt "\\citet[p.~30]{item1}"))+ (cite [baseCitation{ citationSuffix = toList $ text ", p.\160\&30" }] (rt "\\citet[p.~30]{item1}")) , "suffix long" =: "\\citet[p.~30, with suffix]{item1}" =?> para (cite [baseCitation{ citationSuffix =- toList $ text "p.\160\&30, with suffix" }] (rt "\\citet[p.~30, with suffix]{item1}"))+ toList $ text ", p.\160\&30, with suffix" }] (rt "\\citet[p.~30, with suffix]{item1}")) , "multiple" =: "\\citeauthor{item1} \\citetext{\\citeyear{item1}; \\citeyear[p.~30]{item2}; \\citealp[see also][]{item3}}" =?> para (cite [baseCitation{ citationMode = AuthorInText } ,baseCitation{ citationMode = SuppressAuthor- , citationSuffix = [Str "p.\160\&30"]+ , citationSuffix = [Str ",",Space,Str "p.\160\&30"] , citationId = "item2" } ,baseCitation{ citationId = "item3" , citationPrefix = [Str "see",Space,Str "also"]@@ -94,28 +94,28 @@ , "group" =: "\\citetext{\\citealp[see][p.~34--35]{item1}; \\citealp[also][chap. 3]{item3}}" =?> para (cite [baseCitation{ citationMode = NormalCitation , citationPrefix = [Str "see"]- , citationSuffix = [Str "p.\160\&34\8211\&35"] }+ , citationSuffix = [Str ",",Space,Str "p.\160\&34\8211\&35"] } ,baseCitation{ citationMode = NormalCitation , citationId = "item3" , citationPrefix = [Str "also"]- , citationSuffix = [Str "chap.",Space,Str "3"] }+ , citationSuffix = [Str ",",Space,Str "chap.",Space,Str "3"] } ] (rt "\\citetext{\\citealp[see][p.~34--35]{item1}; \\citealp[also][chap. 3]{item3}}")) , "suffix and locator" =: "\\citep[pp.~33, 35--37, and nowhere else]{item1}" =?> para (cite [baseCitation{ citationMode = NormalCitation- , citationSuffix = [Str "pp.\160\&33,",Space,Str "35\8211\&37,",Space,Str "and",Space,Str "nowhere",Space, Str "else"] }] (rt "\\citep[pp.~33, 35--37, and nowhere else]{item1}"))+ , citationSuffix = [Str ",",Space,Str "pp.\160\&33,",Space,Str "35\8211\&37,",Space,Str "and",Space,Str "nowhere",Space, Str "else"] }] (rt "\\citep[pp.~33, 35--37, and nowhere else]{item1}")) , "suffix only" =: "\\citep[and nowhere else]{item1}" =?> para (cite [baseCitation{ citationMode = NormalCitation- , citationSuffix = toList $ text "and nowhere else" }] (rt "\\citep[and nowhere else]{item1}"))+ , citationSuffix = toList $ text ", and nowhere else" }] (rt "\\citep[and nowhere else]{item1}")) , "no author" =: "\\citeyearpar{item1}, and now Doe with a locator \\citeyearpar[p.~44]{item2}" =?> para (cite [baseCitation{ citationMode = SuppressAuthor }] (rt "\\citeyearpar{item1}") <> text ", and now Doe with a locator " <> cite [baseCitation{ citationMode = SuppressAuthor- , citationSuffix = [Str "p.\160\&44"]+ , citationSuffix = [Str ",",Space,Str "p.\160\&44"] , citationId = "item2" }] (rt "\\citeyearpar[p.~44]{item2}")) , "markup" =: "\\citep[\\emph{see}][p. \\textbf{32}]{item1}" =?> para (cite [baseCitation{ citationMode = NormalCitation , citationPrefix = [Emph [Str "see"]]- , citationSuffix = [Str "p.",Space,+ , citationSuffix = [Str ",",Space,Str "p.",Space, Strong [Str "32"]] }] (rt "\\citep[\\emph{see}][p. \\textbf{32}]{item1}")) ] @@ -125,14 +125,14 @@ =?> para (cite [baseCitation] (rt "\\textcite{item1}")) , "suffix" =: "\\textcite[p.~30]{item1}" =?> para- (cite [baseCitation{ citationSuffix = toList $ text "p.\160\&30" }] (rt "\\textcite[p.~30]{item1}"))+ (cite [baseCitation{ citationSuffix = toList $ text ", p.\160\&30" }] (rt "\\textcite[p.~30]{item1}")) , "suffix long" =: "\\textcite[p.~30, with suffix]{item1}" =?> para (cite [baseCitation{ citationSuffix =- toList $ text "p.\160\&30, with suffix" }] (rt "\\textcite[p.~30, with suffix]{item1}"))+ toList $ text ", p.\160\&30, with suffix" }] (rt "\\textcite[p.~30, with suffix]{item1}")) , "multiple" =: "\\textcites{item1}[p.~30]{item2}[see also][]{item3}" =?> para (cite [baseCitation{ citationMode = AuthorInText } ,baseCitation{ citationMode = NormalCitation- , citationSuffix = [Str "p.\160\&30"]+ , citationSuffix = [Str ",",Space,Str "p.\160\&30"] , citationId = "item2" } ,baseCitation{ citationId = "item3" , citationPrefix = [Str "see",Space,Str "also"]@@ -141,28 +141,28 @@ , "group" =: "\\autocites[see][p.~34--35]{item1}[also][chap. 3]{item3}" =?> para (cite [baseCitation{ citationMode = NormalCitation , citationPrefix = [Str "see"]- , citationSuffix = [Str "p.\160\&34\8211\&35"] }+ , citationSuffix = [Str ",",Space,Str "p.\160\&34\8211\&35"] } ,baseCitation{ citationMode = NormalCitation , citationId = "item3" , citationPrefix = [Str "also"]- , citationSuffix = [Str "chap.",Space,Str "3"] }+ , citationSuffix = [Str ",",Space,Str "chap.",Space,Str "3"] } ] (rt "\\autocites[see][p.~34--35]{item1}[also][chap. 3]{item3}")) , "suffix and locator" =: "\\autocite[pp.~33, 35--37, and nowhere else]{item1}" =?> para (cite [baseCitation{ citationMode = NormalCitation- , citationSuffix = [Str "pp.\160\&33,",Space,Str "35\8211\&37,",Space,Str "and",Space,Str "nowhere",Space, Str "else"] }] (rt "\\autocite[pp.~33, 35--37, and nowhere else]{item1}"))+ , citationSuffix = [Str ",",Space,Str "pp.\160\&33,",Space,Str "35\8211\&37,",Space,Str "and",Space,Str "nowhere",Space, Str "else"] }] (rt "\\autocite[pp.~33, 35--37, and nowhere else]{item1}")) , "suffix only" =: "\\autocite[and nowhere else]{item1}" =?> para (cite [baseCitation{ citationMode = NormalCitation- , citationSuffix = toList $ text "and nowhere else" }] (rt "\\autocite[and nowhere else]{item1}"))+ , citationSuffix = toList $ text ", and nowhere else" }] (rt "\\autocite[and nowhere else]{item1}")) , "no author" =: "\\autocite*{item1}, and now Doe with a locator \\autocite*[p.~44]{item2}" =?> para (cite [baseCitation{ citationMode = SuppressAuthor }] (rt "\\autocite*{item1}") <> text ", and now Doe with a locator " <> cite [baseCitation{ citationMode = SuppressAuthor- , citationSuffix = [Str "p.\160\&44"]+ , citationSuffix = [Str ",",Space,Str "p.\160\&44"] , citationId = "item2" }] (rt "\\autocite*[p.~44]{item2}")) , "markup" =: "\\autocite[\\emph{see}][p. \\textbf{32}]{item1}" =?> para (cite [baseCitation{ citationMode = NormalCitation , citationPrefix = [Emph [Str "see"]]- , citationSuffix = [Str "p.",Space,+ , citationSuffix = [Str ",",Space,Str "p.",Space, Strong [Str "32"]] }] (rt "\\autocite[\\emph{see}][p. \\textbf{32}]{item1}")) , "parencite" =: "\\parencite{item1}" =?> para (cite [baseCitation{ citationMode = NormalCitation }] (rt "\\parencite{item1}"))
src/Text/Pandoc/Readers/LaTeX.hs view
@@ -41,7 +41,7 @@ import Data.Char ( chr, ord ) import Control.Monad import Text.Pandoc.Builder-import Data.Char (isLetter)+import Data.Char (isLetter, isPunctuation, isSpace) import Control.Applicative import Data.Monoid import System.FilePath (replaceExtension)@@ -120,6 +120,7 @@ ( many1 (satisfy (\c -> c /= '\\' && c /= '}' && c /= '{')) <|> try (string "\\}") <|> try (string "\\{")+ <|> try (string "\\\\") <|> ((\x -> "{" ++ x ++ "}") <$> braced) <|> count 1 anyChar ) (char '}'))@@ -172,6 +173,7 @@ <|> (str <$> count 1 tildeEscape) <|> (str <$> string "]") <|> (str <$> string "#") -- TODO print warning?+ <|> (str <$> string "&") -- TODO print warning? -- <|> (str <$> count 1 (satisfy (\c -> c /= '\\' && c /='\n' && c /='}' && c /='{'))) -- eat random leftover characters inlines :: LP Inlines@@ -208,28 +210,28 @@ -- eat an optional argument and one or more arguments in braces ignoreInlines :: String -> (String, LP Inlines) ignoreInlines name = (name, doraw <|> (mempty <$ optargs))- where optargs = optional opt *> skipMany (optional sp *> braced)+ where optargs = skipopts *> skipMany (try $ optional sp *> braced) contseq = '\\':name doraw = (rawInline "latex" . (contseq ++) . snd) <$> (getState >>= guard . stateParseRaw >> (withRaw optargs)) ignoreBlocks :: String -> (String, LP Blocks) ignoreBlocks name = (name, doraw <|> (mempty <$ optargs))- where optargs = optional opt *> skipMany (optional sp *> braced)+ where optargs = skipopts *> skipMany (try $ optional sp *> braced) contseq = '\\':name doraw = (rawBlock "latex" . (contseq ++) . snd) <$> (getState >>= guard . stateParseRaw >> (withRaw optargs)) blockCommands :: M.Map String (LP Blocks) blockCommands = M.fromList $- [ ("par", pure mempty)- , ("title", mempty <$ (tok >>= addTitle))- , ("subtitle", mempty <$ (tok >>= addSubtitle))- , ("author", mempty <$ authors)- -- in letter class, temp. store address & sig as title, author- , ("address", mempty <$ (tok >>= addTitle))- , ("signature", mempty <$ authors)- , ("date", mempty <$ (tok >>= addDate))+ [ ("par", mempty <$ skipopts)+ , ("title", mempty <$ (skipopts *> tok >>= addTitle))+ , ("subtitle", mempty <$ (skipopts *> tok >>= addSubtitle))+ , ("author", mempty <$ (skipopts *> authors))+ -- -- in letter class, temp. store address & sig as title, author+ , ("address", mempty <$ (skipopts *> tok >>= addTitle))+ , ("signature", mempty <$ (skipopts *> authors))+ , ("date", mempty <$ (skipopts *> tok >>= addDate)) -- sectioning , ("chapter", updateState (\s -> s{ stateHasChapters = True }) *> section 0) , ("section", section 1)@@ -241,14 +243,14 @@ , ("frametitle", section 3) , ("framesubtitle", section 4) -- letters- , ("opening", (para . trimInlines) <$> tok)- , ("closing", closing)+ , ("opening", (para . trimInlines) <$> (skipopts *> tok))+ , ("closing", skipopts *> closing) --- , ("rule", optional opt *> tok *> tok *> pure horizontalRule)+ , ("rule", skipopts *> tok *> tok *> pure horizontalRule) , ("begin", mzero) -- these are here so they won't be interpreted as inline , ("end", mzero)- , ("item", loose_item)- , ("documentclass", optional opt *> braced *> preamble)+ , ("item", skipopts *> loose_item)+ , ("documentclass", skipopts *> braced *> preamble) ] ++ map ignoreBlocks -- these commands will be ignored unless --parse-raw is specified, -- in which case they will appear as raw latex blocks@@ -291,8 +293,7 @@ section lvl = do hasChapters <- stateHasChapters `fmap` getState let lvl' = if hasChapters then lvl + 1 else lvl- optional sp- optional opt+ skipopts contents <- grouped inline return $ header lvl' contents @@ -310,7 +311,7 @@ Nothing | parseRaw -> (rawInline "latex" . (('\\':name') ++)) <$>- (withRaw (optional opt *> many braced)+ (withRaw (skipopts *> many braced) >>= applyMacros' . snd) | otherwise -> return mempty @@ -399,7 +400,7 @@ , ("href", (unescapeURL <$> braced <* optional sp) >>= \url -> tok >>= \lab -> pure (link url "" lab))- , ("includegraphics", optional opt *> (unescapeURL <$> braced) >>=+ , ("includegraphics", skipopts *> (unescapeURL <$> braced) >>= (\src -> pure (image src "" (str "image")))) , ("cite", citation "cite" NormalCitation False) , ("citep", citation "citep" NormalCitation False)@@ -573,6 +574,9 @@ opt :: LP Inlines opt = bracketed inline <* optional sp +skipopts :: LP ()+skipopts = skipMany opt+ inlineText :: LP Inlines inlineText = str <$> many1 inlineChar @@ -619,7 +623,7 @@ include :: LP ([FilePath], String) include = do name <- controlSeq "include" <|> controlSeq "usepackage"- optional opt+ skipopts fs <- (splitBy (==',')) <$> braced rest <- getInput let fs' = if name == "include"@@ -648,15 +652,7 @@ return (r,rest) rawLaTeXBlock :: GenParser Char ParserState String-rawLaTeXBlock =- (rawLaTeXEnvironment <|> (snd <$> withRaw blockCommand)) >>= applyMacros'--rawLaTeXEnvironment :: GenParser Char ParserState String-rawLaTeXEnvironment = try $ do- controlSeq "begin"- name <- braced- let addBegin x = "\\begin{" ++ name ++ "}" ++ x- addBegin <$> (withRaw (env name blocks) >>= applyMacros' . snd)+rawLaTeXBlock = snd <$> withRaw (environment <|> blockCommand) rawLaTeXInline :: GenParser Char ParserState Inline rawLaTeXInline = do@@ -720,7 +716,7 @@ return $ para (trimInlines contents) <> sigs item :: LP Blocks-item = blocks *> controlSeq "item" *> optional opt *> blocks+item = blocks *> controlSeq "item" *> skipopts *> blocks loose_item :: LP Blocks loose_item = do@@ -758,7 +754,7 @@ verbEnv :: String -> LP String verbEnv name = do- optional opt+ skipopts optional blankline let endEnv = try $ controlSeq "end" *> braced >>= guard . (== name) res <- manyTill anyChar endEnv@@ -804,20 +800,24 @@ -- citations -addPrefix :: Inlines -> [Citation] -> [Citation]-addPrefix p (k:ks) = k {citationPrefix = toList p ++ citationPrefix k} : ks+addPrefix :: [Inline] -> [Citation] -> [Citation]+addPrefix p (k:ks) = k {citationPrefix = p ++ citationPrefix k} : ks addPrefix _ _ = [] -addSuffix :: Inlines -> [Citation] -> [Citation]+addSuffix :: [Inline] -> [Citation] -> [Citation] addSuffix s ks@(_:_) =- let k = last ks- in init ks ++ [k {citationSuffix = citationSuffix k ++ toList s}]+ let k = last ks+ s' = case s of+ (Str (c:_):_)+ | not (isPunctuation c || isSpace c) -> Str "," : Space : s+ _ -> s+ in init ks ++ [k {citationSuffix = citationSuffix k ++ s'}] addSuffix _ _ = [] simpleCiteArgs :: LP [Citation] simpleCiteArgs = try $ do- first <- optionMaybe opt- second <- optionMaybe opt+ first <- optionMaybe $ toList <$> opt+ second <- optionMaybe $ toList <$> opt char '{' keys <- manyTill citationLabel (char '}') let (pre, suf) = case (first , second ) of@@ -854,7 +854,7 @@ complexNatbibCitation :: CitationMode -> LP Inlines complexNatbibCitation mode = try $ do- let ils = (trimInlines . mconcat) <$>+ let ils = (toList . trimInlines . mconcat) <$> many (notFollowedBy (oneOf "\\};") >> inline) let parseOne = try $ do skipSpaces
src/Text/Pandoc/Writers/Docx.hs view
@@ -166,8 +166,17 @@ : mknode "dcterms:modified" [("xsi:type","dcterms:W3CDTF")] () -- put current time here : map (mknode "dc:creator" [] . stringify) auths let docPropsEntry = toEntry docPropsPath epochtime $ fromString $ showTopElement' docProps+ let relsPath = "_rels/.rels"+ rels <- case findEntryByPath relsPath refArchive of+ Just e -> return $ toString $ fromEntry e+ Nothing -> err 57 "could not find .rels/_rels in reference docx"+ -- fix .rels/_rels, which can get screwed up when reference.docx is edited by Word+ let rels' = substitute "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties"+ "http://schemas.openxmlformats.org/officedocument/2006/relationships/metadata/core-properties"+ rels+ let relsEntry = toEntry relsPath epochtime $ fromString rels' let archive = foldr addEntryToArchive refArchive $- contentEntry : relEntry : numEntry : styleEntry : docPropsEntry : imageEntries+ relsEntry : contentEntry : relEntry : numEntry : styleEntry : docPropsEntry : imageEntries return $ fromArchive archive styleToOpenXml :: Style -> [Element]
src/pandoc.hs view
@@ -67,8 +67,8 @@ compileInfo :: String compileInfo =- "\nCompiled with citeproc-hs " ++ VERSION_citeproc_hs ++ " and " ++- "highlighting-kate " ++ VERSION_highlighting_kate +++ "\nCompiled with citeproc-hs " ++ VERSION_citeproc_hs ++ ", texmath " +++ VERSION_texmath ++ ", highlighting-kate " ++ VERSION_highlighting_kate ++ ".\nSyntax highlighting is supported for the following languages:\n " ++ wrapWords 4 78 languages
templates/default.html5 view
@@ -14,7 +14,9 @@ <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> $if(highlighting-css)$+ <style type="text/css"> $highlighting-css$+ </style> $endif$ $for(css)$ <link rel="stylesheet" href="$css$">
tests/latex-reader.native view
@@ -259,7 +259,7 @@ ,HorizontalRule ,Header 1 [Str "LaTeX"] ,BulletList- [[Para [Cite [Citation {citationId = "smith.1899", citationPrefix = [], citationSuffix = [Str "22-23"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [RawInline "latex" "\\cite[22-23]{smith.1899}"]]]+ [[Para [Cite [Citation {citationId = "smith.1899", citationPrefix = [], citationSuffix = [Str ",",Space,Str "22-23"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [RawInline "latex" "\\cite[22-23]{smith.1899}"]]] ,[Para [RawInline "latex" "\\doublespacing"]] ,[Para [Math InlineMath "2+2=4"]] ,[Para [Math InlineMath "x \\in y"]]