Code Monkey home page Code Monkey logo

md2googleslides's Introduction

Generate Google Slides from markdown & HTML. Run from the command line or embed in another application.

This project was developed as an example of how to use the Slides API.

While it does not yet produce stunningly beautiful decks, you are encouraged to use this tool for quickly prototyping presentations.

Contributions are welcome.

Installation and usage

For command line use, install md2gslides globally:

npm install -g md2gslides

Then get your OAuth client ID credentials:

  • Create (or reuse) a developer project at https://console.developers.google.com
  • Enable Google Slides API at API library page
  • Go to Credentials page and click "+ Create credentials" at the top
  • Select "OAuth client ID" authorization credentials
  • Choose type "Computer Application" and give it some name.
  • Download client credentials file.
  • Copy it to client_id.json (name has to match) and save to ~/.md2googleslides.

After installing, import your slides by running:

md2gslides slides.md --title "Talk Title"

This will generate new Google Slides in your account with title Talk Title.

NOTE: The first time the command is run you will be prompted for authorization. OAuth token credentials are stored locally in a file named ~/.md2googleslides/credentials.json.

Each time you will run the above comment, new slide deck will be generated. In order to work on exactly the same deck, just get the ID of the already generated slides. For example, you can use following command:

# To reuse deck available at: https://docs.google.com/presentation/d/<some id>/edit#
md2gslides slides.md --title "Talk Title" --append <some id> --erase

Supported markdown rules

md2gslides uses a subset of the CommonMark and Github Flavored Markdown rules for markdown.

Slides

Each slide is typically represented by a header, followed by zero or more block elements.

Begin a new slide with a horizontal rule (---). The separator may be omitted for the first slide.

The following examples show how to create slides of various layouts:

Title slide

    ---

    # This is a title slide
    ## Your name here

Title slide

Section title slides

    ---

    # This is a section title

Section title slide

Section title & body slides

    ---

    # Section title & body slide

    ## This is a subtitle

    This is the body

Section title & body slide

Title & body slides

    ---

    # Title & body slide

    This is the slide body.

Title & body slide

Main point slide

Add {.big} to the title to make a slide with one big point

    ---

    # This is the main point {.big}

Main point slide

Big number slide

Use {.big} on a header in combination with a body too.

    ---

    # 100% {.big}

    This is the body

Big number slide

Two column slides

Separate columns with {.column}. The marker must appear on its own line with a blank both before and after.

    ---

    # Two column layout

    This is the left column

    {.column}

    This is the right column

Two column slide

Themes

md2googleslides does not edit or control any theme related options. Just set a base theme you want on Google Slides directly. Even if you will use --append option for deck reuse, theme will be not changed.

Images

Inline images

Images can be placed on slides using image tags. Multiple images can be included. Mulitple images in a single paragraph are arranged in columns, mutiple paragraphs arranged as rows.

Note: Images are currently scaled and centered to fit the slide template.

    ---

    # Slides can have images

    ![](https://placekitten.com/900/900)

Slide with image

Background images

Set the background image of a slide by adding {.background} to the end of an image URL.

    ---

    # Slides can have background images

    ![](https://placekitten.com/1600/900){.background}

Slide with background image

Videos

Include YouTube videos with a modified image tag.

    ---

    # Slides can have videos

    @[youtube](MG8KADiRbOU)

Slide with video

Speaker notes

Include speaker notes for a slide using HTML comments. Text inside the comments may include markdown for formatting, though only text formatting is allowed. Videos, images, and tables are ignored inside speaker notes.

    ---

    # Slide title

    ![](https://placekitten.com/1600/900){.background}

    <!--
    These are speaker notes.
    -->

Formatting

Basic formatting rules are allowed, including:

  • Bold
  • Italics
  • Code
  • Strikethrough
  • Hyperlinks
  • Ordered lists
  • Unordered lists

The following markdown illustrates a few common styles.

**Bold**, *italics*, and ~~strikethrough~~ may be used.

Ordered lists:
1. Item 1
1. Item 2
  1. Item 2.1

Unordered lists:
* Item 1
* Item 2
  * Item 2.1

Additionally, a subset of inline HTML tags are supported for styling.

  • <span>
  • <sup>
  • <sub>
  • <em>
  • <i>
  • <strong>
  • <b>

Supported CSS styles for use with <span> elements:

  • color
  • background-color
  • font-weight: bold
  • font-style: italic
  • text-decoration: underline
  • text-decoration: line-through
  • font-family
  • font-variant: small-caps
  • font-size (must use points for units)

You may also use {style="..."} attributes after markdown elements to apply styles. This can be used on headers, inline elements, code blocks, etc.

Emoji

Use Github style emoji in your text using the :emoji:.

The following example inserts emoji in the header and body of the slide.

### I :heart: cats

:heart_eyes_cat:

Code blocks

Both indented and fenced code blocks are supported, with syntax highlighting.

The following example renders highlighted code.

### Hello World

```javascript
console.log('Hello world');
```

To change the syntax highlight theme specify the --style <theme> option on the command line. All highlight.js themes are supported. For example, to use the github theme

md2gslides slides.md --style github

You can also apply additional style changes to the entire block, such as changing the font size:

### Hello World

```javascript
console.log('Hello world');
```{style="font-size: 36pt"}

Tables

Tables are supported via GFM syntax.

Note: Including tables and other block elements on the same slide may produce poor results with overlapping elements. Either avoid or manually adjust the layout after generating the slides.

The following generates a 2x5 table on the slide.

### Top pets in the United States

Animal | Number
-------|--------
Fish   | 142 million
Cats   | 88 million
Dogs   | 75 million
Birds  | 16 million

Local images

Images referencing local paths temporarily uploaded and hosted to file.io. File.io is an emphemeral file serving service that generates short-lived random URLs to the upload file and deletes content shortly after use.

Since local images are uploaded to a thrid party, explicit opt-in is required to use this feature. Include the --use-fileio option to opt-in to uploading images. This applies to file-based images as well as automatically rasterized content like math expressions and SVGs.

Image rasterization

Slides can also include generated images, using $$$ fenced blocks for the data. Currently supported generated images are math expression (TeX and MathML) as well as SVG. Rasterized images are treated like local images are require opt-in to uploading images to a 3rd party service via the --use-fileio option.

Using TeX:

# How about some math?

$$$ math
\cos (2\theta) = \cos^2 \theta - \sin^2 \theta
$$$

SVG

# Or some SVG?

$$$ svg
<svg xmlns="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink"
     viewBox="0 0 48 48">
  <defs>
    <path id="a" d="M44.5 20H24v8.5h11.8C34.7 33.9 30.1 37 24 37c-7.2 0-13-5.8-13-13s5.8-13 13-13c3.1 0 5.9 1.1 8.1 2.9l6.4-6.4C34.6 4.1 29.6 2 24 2 11.8 2 2 11.8 2 24s9.8 22 22 22c11 0 21-8 21-22 0-1.3-.2-2.7-.5-4z"/>
  </defs>
  <clipPath id="b">
    <use xlink:href="#a" overflow="visible"/>
  </clipPath>
  <path clip-path="url(#b)" fill="#EA4335" d="M0 11l17 13 7-6.1L48 14V0H0z"/>
  <path clip-path="url(#b)" fill="#34A853" d="M0 37l30-23 7.9 1L48 0v48H0z"/>
  <path clip-path="url(#b)" fill="#4285F4" d="M48 48L17 24l-4-3 35-10z"/>
</svg>
$$$

Like local images, generated images are temporarily served via file.io.

Pull requests for other image generators (e.g. mermaid, chartjs, etc.) are welcome!

Reading from standard input

You can also pipe markdown into the tool by omitting the file name argument.

Contributing

With the exception of /bin/md2gslides.js, TypeScript is used throughout and compiled with Babel. Mocha and Chai are used for testing.

Before anything, ensure you have all dependencies:

npm install

To compile:

npm run compile

To run unit tests:

npm run test

To lint/format tests:

npm run lint

See CONTRIBUTING for additional terms.

License

This library is licensed under Apache 2.0. Full license text is available in LICENSE.

md2googleslides's People

Contributors

artwr avatar bwplotka avatar dependabot[bot] avatar googleworkspace-bot avatar grant avatar hai-ld avatar jimexist avatar jpoehnelt avatar kospl avatar miriam avatar mlaigre avatar nicholasjackson avatar renovate[bot] avatar rossmeissl avatar sqrrrl avatar wescpy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

md2googleslides's Issues

Authorisation Error

Just tried to run md2gslides and got the following error:

Sign in with Google temporarily disabled for this app
This app has not been verified yet by Google in order to use Google Sign In.

Would have thought Google would allow its own devs access!

Code Blocks Font Size?

I'm finding it painful to work around not having any control over the font size of the generated code blocks. Do you have any suggestions or workarounds for making the font size smaller? I didn't see a font-size option for the span tags.

Code block language type should not be enforced

It appears to be impossible to specify a code block without specifying a language. If you do, you get:

Unable to generate slides: Error: Unknown language: ` ` is not registered

It would be great to not have to specify a language, but just have unformatted text. It does not appear that the language types are based on linguist, which is most common here. Is there a list of supported languages?

Error: Something went wrong installing the "sharp" module

Hello. This seems in install okay,this is the output:

npm WARN prepublish-on-install As of npm@5, `prepublish` scripts are deprecated.
npm WARN prepublish-on-install Use `prepare` for build steps and `prepublishOnly` for upload-only.
npm WARN prepublish-on-install See the deprecation note in `npm help scripts` for more information.

> [email protected] prepublish /home/cliffy/md2googleslides
> npm run compile


> [email protected] compile /home/cliffy/md2googleslides
> babel --extensions '.ts,.js' --source-maps both -d lib/ src/

Successfully compiled 17 files with Babel.
npm WARN [email protected] requires a peer of acorn@^6.0.0 || ^7.0.0 but none is installed. You must install peer dependencies yourself.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

audited 742 packages in 4.7s

27 packages are looking for funding
  run `npm fund` for details

found 2 vulnerabilities (1 low, 1 moderate)
  run `npm audit fix` to fix them, or `npm audit` for details

But it won't seem to run. I am running Ubuntu 20.04 LTS with Node v14.2.0. I've tried a complete reinstall of node. This has worked great for me in Windows, I'm a bit shaky with Linux, sorry if I've missed something glaring.

This could be related to #68

I tried node version 13.7.0 as mentioned in the fixed issue above and I still get the same error.

Thanks

/usr/local/lib/node_modules/md2gslides/node_modules/sharp/lib/constructor.js:34
  throw new Error(error);
  ^

Error: 
Something went wrong installing the "sharp" module

Cannot find module '../build/Release/sharp.node'
Require stack:
- /usr/local/lib/node_modules/md2gslides/node_modules/sharp/lib/constructor.js
- /usr/local/lib/node_modules/md2gslides/node_modules/sharp/lib/index.js
- /usr/local/lib/node_modules/md2gslides/lib/images/svg.js
- /usr/local/lib/node_modules/md2gslides/lib/images/generate.js
- /usr/local/lib/node_modules/md2gslides/lib/slide_generator.js
- /usr/local/lib/node_modules/md2gslides/bin/md2gslides.js

- Run "npm rebuild --verbose sharp" and look for errors
- Consult the installation documentation at https://sharp.pixelplumbing.com/install
- Search for this error at https://github.com/lovell/sharp/issues

    at Object.<anonymous> (/usr/local/lib/node_modules/md2gslides/node_modules/sharp/lib/constructor.js:34:9)
    at Module._compile (internal/modules/cjs/loader.js:1176:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1196:10)
    at Module.load (internal/modules/cjs/loader.js:1040:32)
    at Function.Module._load (internal/modules/cjs/loader.js:929:14)
    at Module.require (internal/modules/cjs/loader.js:1080:19)
    at require (internal/modules/cjs/helpers.js:72:18)
    at Object.<anonymous> (/usr/local/lib/node_modules/md2gslides/node_modules/sharp/lib/index.js:3:15)
    at Module._compile (internal/modules/cjs/loader.js:1176:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1196:10)```

Unable to upload local image in Windows

Let's say I have a local image file called my-code-doesnt-work.jpg alongside my markdown slide and I simply add it to the slide like this:

---
# Title

![](my-code-doesnt-work.jpg)
---

When I executed the converter, error message popped out as follows:

Unable to generate slides: { [Error: ENOENT: no such file or directory, open 'c:\c:\git\others\not-so-personal-notes\Stretch\slides\my-code-doesnt-work.jpg']

After some hacking I was able to pinpoint the cause to this line of code:
https://github.com/gsuitedevs/md2googleslides/blob/master/src/images/probe.ts#L62

I used console.log to print the parsedUrl.pathname and the result was

/c:/git/others/not-so-personal-notes/Stretch/slides/my-code-doesnt-work.jpg

Then it was passed to fs.createReadStream(path); and that's where the error came from.

I can hack it to resolve my issue by using fs.createReadStream(path.substring(1)); but obviously it's not an ideal solution and I have no idea whether it will affect macos / linux or not.

Any ideas?

Code block line highlighting?

Hey! This is awesome! I was like, "I wonder if I can turn my markdown into slides somehow...". Thank you! Does this support line highlighting in code blocks? Thx!

Footnotes

A {.footnote} attribute to apply to elements would be very useful! I don't know if that's compatible with Slides' layouts.

Image captions

Text appearing in the same block as an image could be uploaded as a caption; I think right now any text on a slide with an image is ignored. Again, if that fits with Slides' layouts.

Read from STDIN

It would be great to be able to pipe Markdown to md2googleslides rather than having to save to a file first! Thank you ❤️

Code blocks aren't working

Neither the simple example in the README...

screenshot 2018-09-01 at 21 57 24

... nor the more complex examples/example.md file render blocks of code in monospaced font...

screenshot 2018-09-01 at 21 54 57

Timeout, unable to generate slides

I've been able to generate slides previously but recently it's been timing out. The app is still authenticated and an empty presentation is created so I don't see an issue there.

Is there a setting or modification I can make to extend the timeout and/or enable debug logging?

md2gslides -u [email protected] -t TestPresentation1 -e -n example.md
Unable to generate slides: { Error: ETIMEDOUT
    at Timeout._onTimeout (/usr/local/lib/node_modules/md2gslides/node_modules/request/request.js:759:15)
    at ontimeout (timers.js:469:11)
    at tryOnTimeout (timers.js:304:5)
    at Timer.listOnTimeout (timers.js:264:5) code: 'ETIMEDOUT', connect: false }
Error: ETIMEDOUT
    at Timeout._onTimeout (/usr/local/lib/node_modules/md2gslides/node_modules/request/request.js:759:15)
    at ontimeout (timers.js:469:11)
    at tryOnTimeout (timers.js:304:5)
    at Timer.listOnTimeout (timers.js:264:5)
{
  "code": "ETIMEDOUT",
  "connect": false
}

Note, this was trying to generate a presentation based on the example.md in the examples/ folder. It worked previously as mentioned so there seems to be something else at fault here.

GoogleSlides2md

I want to convert google slides to md files is there any package

failed to install using 'npm install -g md2gslides'

I tried to install on MacOSX Mojave 10.14.5 (18F132), but got this error message:

mylaptop:~ sharuzzamanahmatraslan$ npm install -g md2gslides
npm WARN deprecated [email protected]: use String.prototype.padStart()
/usr/local/bin/md2gslides -> /usr/local/lib/node_modules/md2gslides/bin/md2gslides.js

[email protected] install /usr/local/lib/node_modules/md2gslides/node_modules/sharp
(node install/libvips && node install/dll-copy && prebuild-install) || (node-gyp rebuild && node install/dll-copy)

info sharp Using cached /Users/sharuzzamanahmatraslan/.npm/_libvips/libvips-8.7.0-darwin-x64.tar.gz
prebuild-install WARN install No prebuilt binaries found (target=12.1.0 runtime=node arch=x64 libc= platform=darwin)
TOUCH Release/obj.target/libvips-cpp.stamp
CXX(target) Release/obj.target/sharp/src/common.o
In file included from ../src/common.cc:27:
../src/common.h:78:20: error: no member named 'Handle' in namespace 'v8'
bool HasAttr(v8::Handlev8::Object obj, std::string attr);
~~~~^
../src/common.h:78:37: error: expected '(' for function-style cast or type construction
bool HasAttr(v8::Handlev8::Object obj, std::string attr);
~~~~~~~~~~^
../src/common.h:78:39: error: use of undeclared identifier 'obj'
bool HasAttr(v8::Handlev8::Object obj, std::string attr);
^
../src/common.h:78:56: error: expected '(' for function-style cast or type construction
bool HasAttr(v8::Handlev8::Object obj, std::string attr);
~~~~~~~~~~~ ^
../src/common.h:79:29: error: no member named 'Handle' in namespace 'v8'
std::string AttrAsStr(v8::Handlev8::Object obj, std::string attr);
~~~~^
../src/common.h:79:46: error: expected '(' for function-style cast or type construction
std::string AttrAsStr(v8::Handlev8::Object obj, std::string attr);
~~~~~~~~~~^
../src/common.h:79:48: error: use of undeclared identifier 'obj'
std::string AttrAsStr(v8::Handlev8::Object obj, std::string attr);
^
../src/common.h:79:65: error: expected '(' for function-style cast or type construction
std::string AttrAsStr(v8::Handlev8::Object obj, std::string attr);
~~~~~~~~~~~ ^
../src/common.h:80:38: error: no member named 'Handle' in namespace 'v8'
std::vector AttrAsRgba(v8::Handlev8::Object obj, std::string attr);
~~~~^
../src/common.h:80:55: error: expected '(' for function-style cast or type construction
std::vector AttrAsRgba(v8::Handlev8::Object obj, std::string attr);
~~~~~~~~~~^
../src/common.h:80:57: error: use of undeclared identifier 'obj'
std::vector AttrAsRgba(v8::Handlev8::Object obj, std::string attr);
^
../src/common.h:80:74: error: expected '(' for function-style cast or type construction
std::vector AttrAsRgba(v8::Handlev8::Object obj, std::string attr);
~~~~~~~~~~~ ^
../src/common.h:81:37: warning: variable templates are a C++14 extension [-Wc++14-extensions]
template v8::Local AttrAs(v8::Handlev8::Object obj, std::string attr) {
^
../src/common.h:81:48: error: no member named 'Handle' in namespace 'v8'
template v8::Local AttrAs(v8::Handlev8::Object obj, std::string attr) {
~~~~^
../src/common.h:81:65: error: expected '(' for function-style cast or type construction
template v8::Local AttrAs(v8::Handlev8::Object obj, std::string attr) {
~~~~~~~~~~^
../src/common.h:81:67: error: use of undeclared identifier 'obj'
template v8::Local AttrAs(v8::Handlev8::Object obj, std::string attr) {
^
../src/common.h:81:84: error: expected '(' for function-style cast or type construction
template v8::Local AttrAs(v8::Handlev8::Object obj, std::string attr) {
~~~~~~~~~~~ ^
../src/common.h:81:89: error: expected ';' at end of declaration
template v8::Local AttrAs(v8::Handlev8::Object obj, std::string attr) {
^
;
../src/common.h:81:90: error: expected unqualified-id
template v8::Local AttrAs(v8::Handlev8::Object obj, std::string attr) {
^
../src/common.h:84:26: warning: variable templates are a C++14 extension [-Wc++14-extensions]
template T AttrTo(v8::Handlev8::Object obj, std::string attr) {
^
../src/common.h:84:37: error: no member named 'Handle' in namespace 'v8'
template T AttrTo(v8::Handlev8::Object obj, std::string attr) {
~~~~^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
2 warnings and 20 errors generated.
make: *** [Release/obj.target/sharp/src/common.o] Error 1
gyp ERR! build error
gyp ERR! stack Error: make failed with exit code: 2
gyp ERR! stack at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:262:23)
gyp ERR! stack at ChildProcess.emit (events.js:196:13)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:256:12)
gyp ERR! System Darwin 18.6.0
gyp ERR! command "/usr/local/Cellar/node/12.1.0/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /usr/local/lib/node_modules/md2gslides/node_modules/sharp
gyp ERR! node -v v12.1.0
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] install: (node install/libvips && node install/dll-copy && prebuild-install) || (node-gyp rebuild && node install/dll-copy)
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR! /Users/sharuzzamanahmatraslan/.npm/_logs/2019-05-16T15_05_08_149Z-debug.log

Thank you

Compatibility with Remark.js

Remark.js is an awesome tool for creating html slide with markdown and it also supports an external .md file.
The external .md file has some syntax that md2googleslides doesn't support and generate an error when I upload .md file to drive.
It would be awesome if this tool could support the Remark.js styling syntax like:

background-image: url(img/image.jpg)
class: center, middle

or

.center[ ![Alt Text](some_domain.tld/img/my_image.jpg) ]

Thanks

Make this a Google Slides script

It would be great if this was a script we can run in Google Slides.
Ideally I can open a dropdown with a text area and paste my markdown there, press save and see the slide deck automatically changing itself. I can always visualise and edit the source markdown from the tab and make further changes. What do you think about this?

Error when trying to export supported markdown

Hi,

I am using the as slides.md and getting a #comment error:

# This is a title slide
## Your name here
---
# This is a section title
---
# Section title & body slide
## This is a subtitle
This is the body
---
# Title & body slide
This is the slide body.
---
# This is the main point {.big}
---
# 100% {.big}
This is the body
---
# Two column layout
This is the left column
{.column}
This is the right column
---
# Slides can have images
![](https://placekitten.com/900/900)
---
# Slides can have background images
![](https://placekitten.com/1600/900){.background}
---
# Slides can have videos
@[youtube](MG8KADiRbOU)
---
# Slide title
![](https://placekitten.com/1600/900){.background}
<!--
These are speaker notes.
-->
---
**Bold**, *italics*, and ~~strikethrough~~ may be used.

Ordered lists:
1. Item 1
1. Item 2
  1. Item 2.1

Unordered lists:
* Item 1
* Item 2
  * Item 2.1
---
### I :heart: cats
:heart_eyes_cat:
---
### Hello World
```javascript
console.log('Hello world');

Error:

Unable to generate slides: Error: Unsupported inline HTML element: #comment
    at inlineTokenRules.html_inline (/usr/lib/node_modules/md2gslides/lib/extract_slides.js:274:23)
    at processMarkdownToken (/usr/lib/node_modules/md2gslides/lib/extract_slides.js:84:9)
    at inlineTokenRules.inline (/usr/lib/node_modules/md2gslides/lib/extract_slides.js:229:13)
    at processMarkdownToken (/usr/lib/node_modules/md2gslides/lib/extract_slides.js:84:9)
    at processTokens (/usr/lib/node_modules/md2gslides/lib/extract_slides.js:73:9)
    at extractSlides (/usr/lib/node_modules/md2gslides/lib/extract_slides.js:61:5)
    at SlideGenerator.generateFromMarkdown (/usr/lib/node_modules/md2gslides/lib/slide_generator.js:86:27)
    at generateSlides (/usr/lib/node_modules/md2gslides/bin/md2gslides.js:179:27)
    at tryCallOne (/usr/lib/node_modules/md2gslides/node_modules/promise/lib/core.js:37:12)
    at /usr/lib/node_modules/md2gslides/node_modules/promise/lib/core.js:123:15
    at flush (/usr/lib/node_modules/md2gslides/node_modules/asap/raw.js:50:29)
    at process._tickCallback (internal/process/next_tick.js:61:11)
Error: Unsupported inline HTML element: #comment
    at inlineTokenRules.html_inline (/usr/lib/node_modules/md2gslides/lib/extract_slides.js:274:23)
    at processMarkdownToken (/usr/lib/node_modules/md2gslides/lib/extract_slides.js:84:9)
    at inlineTokenRules.inline (/usr/lib/node_modules/md2gslides/lib/extract_slides.js:229:13)
    at processMarkdownToken (/usr/lib/node_modules/md2gslides/lib/extract_slides.js:84:9)
    at processTokens (/usr/lib/node_modules/md2gslides/lib/extract_slides.js:73:9)
    at extractSlides (/usr/lib/node_modules/md2gslides/lib/extract_slides.js:61:5)
    at SlideGenerator.generateFromMarkdown (/usr/lib/node_modules/md2gslides/lib/slide_generator.js:86:27)
    at generateSlides (/usr/lib/node_modules/md2gslides/bin/md2gslides.js:179:27)
    at tryCallOne (/usr/lib/node_modules/md2gslides/node_modules/promise/lib/core.js:37:12)
    at /usr/lib/node_modules/md2gslides/node_modules/promise/lib/core.js:123:15
    at flush (/usr/lib/node_modules/md2gslides/node_modules/asap/raw.js:50:29)
    at process._tickCallback (internal/process/next_tick.js:61:11)
{}

Just trying to see everything md2googleslides supports in markdown.

Thanks

Support local images

When I try to convert a slide deck, the images used in my markdown cannot be found by md2googleslides:

Unable to generate slides: Error: Invalid URI "images/PyMC3.png"

This is despite the images directory being in place in the current directory.

Two Column Layout only for paragraphs - No Bullets.

When I apply bullet formatting to text in the two column layout slide the layout reverts to songle column.

---
# Two column layout

This is the left column

+ This is another row <-- Making this a bullet makes slide single column layout

{.column}

This is the right column

This is another row

I was expecting to create two columns of bulleted lists, side by slide on one slide.

Can't convert example code

Hi! I'm unable to convert the example documents given to a gSlide. It appears to be something to do with the parser (at least, that's where the error is). I installed via npm.

Markdown I wrote:

---

# Title!
## Example!

Error I got:

lyneca at lynux in ~/Documents
$ md2gslides git.md
Unable to generate slides: TypeError: Cannot read property 'references' of undefined
    at Array.link (/home/lyneca/.nvm/versions/node/v8.2.1/lib/node_modules/md2gslides/node_modules/markdown-it/lib/rules_inline/link.js:101:25)
    at ParserInline.tokenize (/home/lyneca/.nvm/versions/node/v8.2.1/lib/node_modules/md2gslides/node_modules/markdown-it/lib/parser_inline.js:135:22)
    at ParserInline.parse (/home/lyneca/.nvm/versions/node/v8.2.1/lib/node_modules/md2gslides/node_modules/markdown-it/lib/parser_inline.js:163:8)
    at Array.inline (/home/lyneca/.nvm/versions/node/v8.2.1/lib/node_modules/md2gslides/node_modules/markdown-it/lib/rules_core/inline.js:10:23)
    at Core.process (/home/lyneca/.nvm/versions/node/v8.2.1/lib/node_modules/md2gslides/node_modules/markdown-it/lib/parser_core.js:51:13)
    at MarkdownIt.parse (/home/lyneca/.nvm/versions/node/v8.2.1/lib/node_modules/md2gslides/node_modules/markdown-it/lib/index.js:523:13)
    at parseMarkdown (/home/lyneca/.nvm/versions/node/v8.2.1/lib/node_modules/md2gslides/lib/extract_slides.js:77:19)
    at extractSlides (/home/lyneca/.nvm/versions/node/v8.2.1/lib/node_modules/md2gslides/lib/extract_slides.js:56:18)
    at SlideGenerator.generateFromMarkdown (/home/lyneca/.nvm/versions/node/v8.2.1/lib/node_modules/md2gslides/lib/slide_generator.js:86:27)
    at generateSlides (/home/lyneca/.nvm/versions/node/v8.2.1/lib/node_modules/md2gslides/bin/md2gslides.js:177:27)
    at tryCallOne (/home/lyneca/.nvm/versions/node/v8.2.1/lib/node_modules/md2gslides/node_modules/promise/lib/core.js:37:12)
    at /home/lyneca/.nvm/versions/node/v8.2.1/lib/node_modules/md2gslides/node_modules/promise/lib/core.js:123:15
    at flush (/home/lyneca/.nvm/versions/node/v8.2.1/lib/node_modules/md2gslides/node_modules/asap/raw.js:50:29)
    at _combinedTickCallback (internal/process/next_tick.js:131:7)
    at process._tickCallback (internal/process/next_tick.js:180:9)
TypeError: Cannot read property 'references' of undefined
    at Array.link (/home/lyneca/.nvm/versions/node/v8.2.1/lib/node_modules/md2gslides/node_modules/markdown-it/lib/rules_inline/link.js:101:25)
    at ParserInline.tokenize (/home/lyneca/.nvm/versions/node/v8.2.1/lib/node_modules/md2gslides/node_modules/markdown-it/lib/parser_inline.js:135:22)
    at ParserInline.parse (/home/lyneca/.nvm/versions/node/v8.2.1/lib/node_modules/md2gslides/node_modules/markdown-it/lib/parser_inline.js:163:8)
    at Array.inline (/home/lyneca/.nvm/versions/node/v8.2.1/lib/node_modules/md2gslides/node_modules/markdown-it/lib/rules_core/inline.js:10:23)
    at Core.process (/home/lyneca/.nvm/versions/node/v8.2.1/lib/node_modules/md2gslides/node_modules/markdown-it/lib/parser_core.js:51:13)
    at MarkdownIt.parse (/home/lyneca/.nvm/versions/node/v8.2.1/lib/node_modules/md2gslides/node_modules/markdown-it/lib/index.js:523:13)
    at parseMarkdown (/home/lyneca/.nvm/versions/node/v8.2.1/lib/node_modules/md2gslides/lib/extract_slides.js:77:19)
    at extractSlides (/home/lyneca/.nvm/versions/node/v8.2.1/lib/node_modules/md2gslides/lib/extract_slides.js:56:18)
    at SlideGenerator.generateFromMarkdown (/home/lyneca/.nvm/versions/node/v8.2.1/lib/node_modules/md2gslides/lib/slide_generator.js:86:27)
    at generateSlides (/home/lyneca/.nvm/versions/node/v8.2.1/lib/node_modules/md2gslides/bin/md2gslides.js:177:27)
    at tryCallOne (/home/lyneca/.nvm/versions/node/v8.2.1/lib/node_modules/md2gslides/node_modules/promise/lib/core.js:37:12)
    at /home/lyneca/.nvm/versions/node/v8.2.1/lib/node_modules/md2gslides/node_modules/promise/lib/core.js:123:15
    at flush (/home/lyneca/.nvm/versions/node/v8.2.1/lib/node_modules/md2gslides/node_modules/asap/raw.js:50:29)
    at _combinedTickCallback (internal/process/next_tick.js:131:7)
    at process._tickCallback (internal/process/next_tick.js:180:9)
{}

install fail with node v13.7.0 because of [email protected]

tried both on mac 10.13.6 and linux 4.14.150+

Badly need help.

npm WARN deprecated [email protected]: core-js@<3 is no longer maintained and not recommended for usage due to the number of issues. Please, upgrade your dependencies to the actual version of core-js@3.
npm WARN deprecated [email protected]: use String.prototype.padStart()
/opt/conda/bin/md2gslides -> /opt/conda/lib/node_modules/md2gslides/bin/md2gslides.js

> [email protected] install /opt/conda/lib/node_modules/md2gslides/node_modules/sharp
> (node install/libvips && node install/dll-copy && prebuild-install) || (node-gyp rebuild && node install/dll-copy)

info sharp Downloading https://github.com/lovell/sharp-libvips/releases/download/v8.7.0/libvips-8.7.0-linux-x64.tar.gz
prebuild-install WARN install No prebuilt binaries found (target=13.7.0 runtime=node arch=x64 libc= platform=linux)
make: Entering directory '/opt/conda/lib/node_modules/md2gslides/node_modules/sharp/build'
  TOUCH Release/obj.target/libvips-cpp.stamp
  CXX(target) Release/obj.target/sharp/src/common.o
In file included from ../src/common.cc:27:0:
../src/common.h:78:20: error: ‘Handle’ is not a member of ‘v8’
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr);
                    ^~~~~~
../src/common.h:78:37: error: expected primary-expression before ‘>’ token
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr);
                                     ^
../src/common.h:78:39: error: ‘obj’ was not declared in this scope
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr);
                                       ^~~
../src/common.h:78:56: error: expected primary-expression before ‘attr’
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr);
                                                        ^~~~
../src/common.h:78:60: error: expression list treated as compound expression in initializer [-fpermissive]
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr);
                                                            ^
../src/common.h:79:29: error: ‘Handle’ is not a member of ‘v8’
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr);
                             ^~~~~~
../src/common.h:79:46: error: expected primary-expression before ‘>’ token
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr);
                                              ^
../src/common.h:79:48: error: ‘obj’ was not declared in this scope
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr);
                                                ^~~
../src/common.h:79:65: error: expected primary-expression before ‘attr’
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr);
                                                                 ^~~~
../src/common.h:80:38: error: ‘Handle’ is not a member of ‘v8’
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr);
                                      ^~~~~~
../src/common.h:80:55: error: expected primary-expression before ‘>’ token
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr);
                                                       ^
../src/common.h:80:57: error: ‘obj’ was not declared in this scope
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr);
                                                         ^~~
../src/common.h:80:74: error: expected primary-expression before ‘attr’
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr);
                                                                          ^~~~
../src/common.h:81:48: error: ‘Handle’ is not a member of ‘v8’
   template<typename T> v8::Local<T> AttrAs(v8::Handle<v8::Object> obj, std::string attr) {
                                                ^~~~~~
../src/common.h:81:65: error: expected primary-expression before ‘>’ token
   template<typename T> v8::Local<T> AttrAs(v8::Handle<v8::Object> obj, std::string attr) {
                                                                 ^
../src/common.h:81:67: error: ‘obj’ was not declared in this scope
   template<typename T> v8::Local<T> AttrAs(v8::Handle<v8::Object> obj, std::string attr) {
                                                                   ^~~
../src/common.h:81:84: error: expected primary-expression before ‘attr’
   template<typename T> v8::Local<T> AttrAs(v8::Handle<v8::Object> obj, std::string attr) {
                                                                                    ^~~~
../src/common.h:81:37: warning: variable templates only available with -std=c++14 or -std=gnu++14
   template<typename T> v8::Local<T> AttrAs(v8::Handle<v8::Object> obj, std::string attr) {
                                     ^~~~~~
../src/common.h:81:90: error: expected ‘;’ before ‘{’ token
   template<typename T> v8::Local<T> AttrAs(v8::Handle<v8::Object> obj, std::string attr) {
                                                                                          ^
../src/common.h:84:37: error: ‘Handle’ is not a member of ‘v8’
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, std::string attr) {
                                     ^~~~~~
../src/common.h:84:54: error: expected primary-expression before ‘>’ token
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, std::string attr) {
                                                      ^
../src/common.h:84:56: error: ‘obj’ was not declared in this scope
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, std::string attr) {
                                                        ^~~
../src/common.h:84:73: error: expected primary-expression before ‘attr’
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, std::string attr) {
                                                                         ^~~~
../src/common.h:84:26: warning: variable templates only available with -std=c++14 or -std=gnu++14
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, std::string attr) {
                          ^~~~~~
../src/common.h:84:79: error: expected ‘;’ before ‘{’ token
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, std::string attr) {
                                                                               ^
../src/common.h:87:37: error: ‘Handle’ is not a member of ‘v8’
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, int attr) {
                                     ^~~~~~
../src/common.h:87:54: error: expected primary-expression before ‘>’ token
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, int attr) {
                                                      ^
../src/common.h:87:56: error: ‘obj’ was not declared in this scope
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, int attr) {
                                                        ^~~
../src/common.h:87:61: error: expected primary-expression before ‘int’
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, int attr) {
                                                             ^~~
../src/common.h:84:26: warning: variable templates only available with -std=c++14 or -std=gnu++14
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, std::string attr) {
                          ^~~~~~
../src/common.h:87:71: error: expected ‘;’ before ‘{’ token
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, int attr) {
                                                                       ^
../src/common.h:93:9: error: ‘Handle’ is not a member of ‘v8’
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist);
         ^~~~~~
../src/common.h:93:26: error: expected primary-expression before ‘>’ token
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist);
                          ^
../src/common.h:93:28: error: ‘input’ was not declared in this scope
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist);
                            ^~~~~
../src/common.h:93:28: note: suggested alternative: ‘ino_t’
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist);
                            ^~~~~
                            ino_t
../src/common.h:93:70: error: expected primary-expression before ‘&’ token
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist);
                                                                      ^
../src/common.h:93:71: error: ‘buffersToPersist’ was not declared in this scope
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist);
                                                                       ^~~~~~~~~~~~~~~~
../src/common.h:93:87: error: expression list treated as compound expression in initializer [-fpermissive]
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist);
                                                                                       ^
../src/common.cc:34:20: error: redefinition of ‘bool sharp::HasAttr’
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr) {
                    ^~~~~~
In file included from ../src/common.cc:27:0:
../src/common.h:78:8: note: ‘bool sharp::HasAttr’ previously defined here
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr);
        ^~~~~~~
../src/common.cc:34:20: error: ‘Handle’ is not a member of ‘v8’
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr) {
                    ^~~~~~
../src/common.cc:34:37: error: expected primary-expression before ‘>’ token
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr) {
                                     ^
../src/common.cc:34:39: error: ‘obj’ was not declared in this scope
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr) {
                                       ^~~
../src/common.cc:34:56: error: expected primary-expression before ‘attr’
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr) {
                                                        ^~~~
../src/common.cc:37:29: error: redefinition of ‘std::string sharp::AttrAsStr’
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr) {
                             ^~~~~~
In file included from ../src/common.cc:27:0:
../src/common.h:79:15: note: ‘std::string sharp::AttrAsStr’ previously declared here
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr);
               ^~~~~~~~~
../src/common.cc:37:29: error: ‘Handle’ is not a member of ‘v8’
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr) {
                             ^~~~~~
../src/common.cc:37:46: error: expected primary-expression before ‘>’ token
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr) {
                                              ^
../src/common.cc:37:48: error: ‘obj’ was not declared in this scope
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr) {
                                                ^~~
../src/common.cc:37:65: error: expected primary-expression before ‘attr’
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr) {
                                                                 ^~~~
../src/common.cc:40:38: error: redefinition of ‘std::vector<double> sharp::AttrAsRgba’
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr) {
                                      ^~~~~~
In file included from ../src/common.cc:27:0:
../src/common.h:80:23: note: ‘std::vector<double> sharp::AttrAsRgba’ previously declared here
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr);
                       ^~~~~~~~~~
../src/common.cc:40:38: error: ‘Handle’ is not a member of ‘v8’
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr) {
                                      ^~~~~~
../src/common.cc:40:55: error: expected primary-expression before ‘>’ token
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr) {
                                                       ^
../src/common.cc:40:57: error: ‘obj’ was not declared in this scope
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr) {
                                                         ^~~
../src/common.cc:40:74: error: expected primary-expression before ‘attr’
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr) {
                                                                          ^~~~
../src/common.cc:51:9: error: redefinition of ‘sharp::InputDescriptor* sharp::CreateInputDescriptor’
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist
         ^~~~~~
In file included from ../src/common.cc:27:0:
../src/common.h:92:20: note: ‘sharp::InputDescriptor* sharp::CreateInputDescriptor’ previously defined here
   InputDescriptor* CreateInputDescriptor(
                    ^~~~~~~~~~~~~~~~~~~~~
../src/common.cc:51:9: error: ‘Handle’ is not a member of ‘v8’
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist
         ^~~~~~
../src/common.cc:51:26: error: expected primary-expression before ‘>’ token
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist
                          ^
../src/common.cc:51:28: error: ‘input’ was not declared in this scope
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist
                            ^~~~~
../src/common.cc:51:28: note: suggested alternative: ‘ino_t’
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist
                            ^~~~~
                            ino_t
../src/common.cc:51:70: error: expected primary-expression before ‘&’ token
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist
                                                                      ^
../src/common.cc:51:71: error: ‘buffersToPersist’ was not declared in this scope
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist
                                                                       ^~~~~~~~~~~~~~~~
cc1plus: warning: unrecognized command line option ‘-Wno-cast-function-type’
sharp.target.mk:134: recipe for target 'Release/obj.target/sharp/src/common.o' failed
make: *** [Release/obj.target/sharp/src/common.o] Error 1
make: Leaving directory '/opt/conda/lib/node_modules/md2gslides/node_modules/sharp/build'
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/opt/conda/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:194:23)
gyp ERR! stack     at ChildProcess.emit (events.js:321:20)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:275:12)
gyp ERR! System Linux 4.14.150+
gyp ERR! command "/opt/conda/bin/node" "/opt/conda/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /opt/conda/lib/node_modules/md2gslides/node_modules/sharp
gyp ERR! node -v v13.7.0
gyp ERR! node-gyp -v v5.0.5
gyp ERR! not ok 
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] install: `(node install/libvips && node install/dll-copy && prebuild-install) || (node-gyp rebuild && node install/dll-copy)`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the [email protected] install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/jovyan/.npm/_logs/2020-02-01T23_42_29_529Z-debug.log
jovyan@jupyter-jun-2exiong-40climate-2ecom:~$ npm install -g md2gslides
npm WARN deprecated [email protected]: core-js@<3 is no longer maintained and not recommended for usage due to the number of issues. Please, upgrade your dependencies to the actual version of core-js@3.
npm WARN deprecated [email protected]: use String.prototype.padStart()
/opt/conda/bin/md2gslides -> /opt/conda/lib/node_modules/md2gslides/bin/md2gslides.js

> [email protected] install /opt/conda/lib/node_modules/md2gslides/node_modules/sharp
> (node install/libvips && node install/dll-copy && prebuild-install) || (node-gyp rebuild && node install/dll-copy)

info sharp Downloading https://github.com/lovell/sharp-libvips/releases/download/v8.7.0/libvips-8.7.0-linux-x64.tar.gz
prebuild-install WARN install No prebuilt binaries found (target=13.7.0 runtime=node arch=x64 libc= platform=linux)
make: Entering directory '/opt/conda/lib/node_modules/md2gslides/node_modules/sharp/build'
  TOUCH Release/obj.target/libvips-cpp.stamp
  CXX(target) Release/obj.target/sharp/src/common.o
In file included from ../src/common.cc:27:0:
../src/common.h:78:20: error: ‘Handle’ is not a member of ‘v8’
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr);
                    ^~~~~~
../src/common.h:78:37: error: expected primary-expression before ‘>’ token
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr);
                                     ^
../src/common.h:78:39: error: ‘obj’ was not declared in this scope
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr);
                                       ^~~
../src/common.h:78:56: error: expected primary-expression before ‘attr’
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr);
                                                        ^~~~
../src/common.h:78:60: error: expression list treated as compound expression in initializer [-fpermissive]
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr);
                                                            ^
../src/common.h:79:29: error: ‘Handle’ is not a member of ‘v8’
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr);
                             ^~~~~~
../src/common.h:79:46: error: expected primary-expression before ‘>’ token
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr);
                                              ^
../src/common.h:79:48: error: ‘obj’ was not declared in this scope
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr);
                                                ^~~
../src/common.h:79:65: error: expected primary-expression before ‘attr’
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr);
                                                                 ^~~~
../src/common.h:80:38: error: ‘Handle’ is not a member of ‘v8’
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr);
                                      ^~~~~~
../src/common.h:80:55: error: expected primary-expression before ‘>’ token
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr);
                                                       ^
../src/common.h:80:57: error: ‘obj’ was not declared in this scope
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr);
                                                         ^~~
../src/common.h:80:74: error: expected primary-expression before ‘attr’
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr);
                                                                          ^~~~
../src/common.h:81:48: error: ‘Handle’ is not a member of ‘v8’
   template<typename T> v8::Local<T> AttrAs(v8::Handle<v8::Object> obj, std::string attr) {
                                                ^~~~~~
../src/common.h:81:65: error: expected primary-expression before ‘>’ token
   template<typename T> v8::Local<T> AttrAs(v8::Handle<v8::Object> obj, std::string attr) {
                                                                 ^
../src/common.h:81:67: error: ‘obj’ was not declared in this scope
   template<typename T> v8::Local<T> AttrAs(v8::Handle<v8::Object> obj, std::string attr) {
                                                                   ^~~
../src/common.h:81:84: error: expected primary-expression before ‘attr’
   template<typename T> v8::Local<T> AttrAs(v8::Handle<v8::Object> obj, std::string attr) {
                                                                                    ^~~~
../src/common.h:81:37: warning: variable templates only available with -std=c++14 or -std=gnu++14
   template<typename T> v8::Local<T> AttrAs(v8::Handle<v8::Object> obj, std::string attr) {
                                     ^~~~~~
../src/common.h:81:90: error: expected ‘;’ before ‘{’ token
   template<typename T> v8::Local<T> AttrAs(v8::Handle<v8::Object> obj, std::string attr) {
                                                                                          ^
../src/common.h:84:37: error: ‘Handle’ is not a member of ‘v8’
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, std::string attr) {
                                     ^~~~~~
../src/common.h:84:54: error: expected primary-expression before ‘>’ token
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, std::string attr) {
                                                      ^
../src/common.h:84:56: error: ‘obj’ was not declared in this scope
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, std::string attr) {
                                                        ^~~
../src/common.h:84:73: error: expected primary-expression before ‘attr’
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, std::string attr) {
                                                                         ^~~~
../src/common.h:84:26: warning: variable templates only available with -std=c++14 or -std=gnu++14
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, std::string attr) {
                          ^~~~~~
../src/common.h:84:79: error: expected ‘;’ before ‘{’ token
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, std::string attr) {
                                                                               ^
../src/common.h:87:37: error: ‘Handle’ is not a member of ‘v8’
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, int attr) {
                                     ^~~~~~
../src/common.h:87:54: error: expected primary-expression before ‘>’ token
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, int attr) {
                                                      ^
../src/common.h:87:56: error: ‘obj’ was not declared in this scope
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, int attr) {
                                                        ^~~
../src/common.h:87:61: error: expected primary-expression before ‘int’
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, int attr) {
                                                             ^~~
../src/common.h:84:26: warning: variable templates only available with -std=c++14 or -std=gnu++14
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, std::string attr) {
                          ^~~~~~
../src/common.h:87:71: error: expected ‘;’ before ‘{’ token
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, int attr) {
                                                                       ^
../src/common.h:93:9: error: ‘Handle’ is not a member of ‘v8’
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist);
         ^~~~~~
../src/common.h:93:26: error: expected primary-expression before ‘>’ token
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist);
                          ^
../src/common.h:93:28: error: ‘input’ was not declared in this scope
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist);
                            ^~~~~
../src/common.h:93:28: note: suggested alternative: ‘ino_t’
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist);
                            ^~~~~
                            ino_t
../src/common.h:93:70: error: expected primary-expression before ‘&’ token
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist);
                                                                      ^
../src/common.h:93:71: error: ‘buffersToPersist’ was not declared in this scope
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist);
                                                                       ^~~~~~~~~~~~~~~~
../src/common.h:93:87: error: expression list treated as compound expression in initializer [-fpermissive]
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist);
                                                                                       ^
../src/common.cc:34:20: error: redefinition of ‘bool sharp::HasAttr’
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr) {
                    ^~~~~~
In file included from ../src/common.cc:27:0:
../src/common.h:78:8: note: ‘bool sharp::HasAttr’ previously defined here
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr);
        ^~~~~~~
../src/common.cc:34:20: error: ‘Handle’ is not a member of ‘v8’
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr) {
                    ^~~~~~
../src/common.cc:34:37: error: expected primary-expression before ‘>’ token
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr) {
                                     ^
../src/common.cc:34:39: error: ‘obj’ was not declared in this scope
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr) {
                                       ^~~
../src/common.cc:34:56: error: expected primary-expression before ‘attr’
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr) {
                                                        ^~~~
../src/common.cc:37:29: error: redefinition of ‘std::string sharp::AttrAsStr’
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr) {
                             ^~~~~~
In file included from ../src/common.cc:27:0:
../src/common.h:79:15: note: ‘std::string sharp::AttrAsStr’ previously declared here
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr);
               ^~~~~~~~~
../src/common.cc:37:29: error: ‘Handle’ is not a member of ‘v8’
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr) {
                             ^~~~~~
../src/common.cc:37:46: error: expected primary-expression before ‘>’ token
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr) {
                                              ^
../src/common.cc:37:48: error: ‘obj’ was not declared in this scope
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr) {
                                                ^~~
../src/common.cc:37:65: error: expected primary-expression before ‘attr’
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr) {
                                                                 ^~~~
../src/common.cc:40:38: error: redefinition of ‘std::vector<double> sharp::AttrAsRgba’
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr) {
                                      ^~~~~~
In file included from ../src/common.cc:27:0:
../src/common.h:80:23: note: ‘std::vector<double> sharp::AttrAsRgba’ previously declared here
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr);
                       ^~~~~~~~~~
../src/common.cc:40:38: error: ‘Handle’ is not a member of ‘v8’
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr) {
                                      ^~~~~~
../src/common.cc:40:55: error: expected primary-expression before ‘>’ token
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr) {
                                                       ^
../src/common.cc:40:57: error: ‘obj’ was not declared in this scope
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr) {
                                                         ^~~
../src/common.cc:40:74: error: expected primary-expression before ‘attr’
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr) {
                                                                          ^~~~
../src/common.cc:51:9: error: redefinition of ‘sharp::InputDescriptor* sharp::CreateInputDescriptor’
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist
         ^~~~~~
In file included from ../src/common.cc:27:0:
../src/common.h:92:20: note: ‘sharp::InputDescriptor* sharp::CreateInputDescriptor’ previously defined here
   InputDescriptor* CreateInputDescriptor(
                    ^~~~~~~~~~~~~~~~~~~~~
../src/common.cc:51:9: error: ‘Handle’ is not a member of ‘v8’
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist
         ^~~~~~
../src/common.cc:51:26: error: expected primary-expression before ‘>’ token
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist
                          ^
../src/common.cc:51:28: error: ‘input’ was not declared in this scope
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist
                            ^~~~~
../src/common.cc:51:28: note: suggested alternative: ‘ino_t’
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist
                            ^~~~~
                            ino_t
../src/common.cc:51:70: error: expected primary-expression before ‘&’ token
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist
                                                                      ^
../src/common.cc:51:71: error: ‘buffersToPersist’ was not declared in this scope
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist
                                                                       ^~~~~~~~~~~~~~~~
cc1plus: warning: unrecognized command line option ‘-Wno-cast-function-type’
sharp.target.mk:134: recipe for target 'Release/obj.target/sharp/src/common.o' failed
make: *** [Release/obj.target/sharp/src/common.o] Error 1
make: Leaving directory '/opt/conda/lib/node_modules/md2gslides/node_modules/sharp/build'
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/opt/conda/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:194:23)
gyp ERR! stack     at ChildProcess.emit (events.js:321:20)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:275:12)
gyp ERR! System Linux 4.14.150+
gyp ERR! command "/opt/conda/bin/node" "/opt/conda/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /opt/conda/lib/node_modules/md2gslides/node_modules/sharp
gyp ERR! node -v v13.7.0
gyp ERR! node-gyp -v v5.0.5
gyp ERR! not ok 
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] install: `(node install/libvips && node install/dll-copy && prebuild-install) || (node-gyp rebuild && node install/dll-copy)`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the [email protected] install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/jovyan/.npm/_logs/2020-02-01T23_42_29_529Z-debug.logjovyan@jupyter-jun-2exiong-40climate-2ecom:~$ npm install -g md2gslides
npm WARN deprecated [email protected]: core-js@<3 is no longer maintained and not recommended for usage due to the number of issues. Please, upgrade your dependencies to the actual version of core-js@3.
npm WARN deprecated [email protected]: use String.prototype.padStart()
/opt/conda/bin/md2gslides -> /opt/conda/lib/node_modules/md2gslides/bin/md2gslides.js

> [email protected] install /opt/conda/lib/node_modules/md2gslides/node_modules/sharp
> (node install/libvips && node install/dll-copy && prebuild-install) || (node-gyp rebuild && node install/dll-copy)

info sharp Downloading https://github.com/lovell/sharp-libvips/releases/download/v8.7.0/libvips-8.7.0-linux-x64.tar.gz
prebuild-install WARN install No prebuilt binaries found (target=13.7.0 runtime=node arch=x64 libc= platform=linux)
make: Entering directory '/opt/conda/lib/node_modules/md2gslides/node_modules/sharp/build'
  TOUCH Release/obj.target/libvips-cpp.stamp
  CXX(target) Release/obj.target/sharp/src/common.o
In file included from ../src/common.cc:27:0:
../src/common.h:78:20: error: ‘Handle’ is not a member of ‘v8’
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr);
                    ^~~~~~
../src/common.h:78:37: error: expected primary-expression before ‘>’ token
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr);
                                     ^
../src/common.h:78:39: error: ‘obj’ was not declared in this scope
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr);
                                       ^~~
../src/common.h:78:56: error: expected primary-expression before ‘attr’
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr);
                                                        ^~~~
../src/common.h:78:60: error: expression list treated as compound expression in initializer [-fpermissive]
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr);
                                                            ^
../src/common.h:79:29: error: ‘Handle’ is not a member of ‘v8’
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr);
                             ^~~~~~
../src/common.h:79:46: error: expected primary-expression before ‘>’ token
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr);
                                              ^
../src/common.h:79:48: error: ‘obj’ was not declared in this scope
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr);
                                                ^~~
../src/common.h:79:65: error: expected primary-expression before ‘attr’
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr);
                                                                 ^~~~
../src/common.h:80:38: error: ‘Handle’ is not a member of ‘v8’
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr);
                                      ^~~~~~
../src/common.h:80:55: error: expected primary-expression before ‘>’ token
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr);
                                                       ^
../src/common.h:80:57: error: ‘obj’ was not declared in this scope
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr);
                                                         ^~~
../src/common.h:80:74: error: expected primary-expression before ‘attr’
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr);
                                                                          ^~~~
../src/common.h:81:48: error: ‘Handle’ is not a member of ‘v8’
   template<typename T> v8::Local<T> AttrAs(v8::Handle<v8::Object> obj, std::string attr) {
                                                ^~~~~~
../src/common.h:81:65: error: expected primary-expression before ‘>’ token
   template<typename T> v8::Local<T> AttrAs(v8::Handle<v8::Object> obj, std::string attr) {
                                                                 ^
../src/common.h:81:67: error: ‘obj’ was not declared in this scope
   template<typename T> v8::Local<T> AttrAs(v8::Handle<v8::Object> obj, std::string attr) {
                                                                   ^~~
../src/common.h:81:84: error: expected primary-expression before ‘attr’
   template<typename T> v8::Local<T> AttrAs(v8::Handle<v8::Object> obj, std::string attr) {
                                                                                    ^~~~
../src/common.h:81:37: warning: variable templates only available with -std=c++14 or -std=gnu++14
   template<typename T> v8::Local<T> AttrAs(v8::Handle<v8::Object> obj, std::string attr) {
                                     ^~~~~~
../src/common.h:81:90: error: expected ‘;’ before ‘{’ token
   template<typename T> v8::Local<T> AttrAs(v8::Handle<v8::Object> obj, std::string attr) {
                                                                                          ^
../src/common.h:84:37: error: ‘Handle’ is not a member of ‘v8’
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, std::string attr) {
                                     ^~~~~~
../src/common.h:84:54: error: expected primary-expression before ‘>’ token
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, std::string attr) {
                                                      ^
../src/common.h:84:56: error: ‘obj’ was not declared in this scope
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, std::string attr) {
                                                        ^~~
../src/common.h:84:73: error: expected primary-expression before ‘attr’
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, std::string attr) {
                                                                         ^~~~
../src/common.h:84:26: warning: variable templates only available with -std=c++14 or -std=gnu++14
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, std::string attr) {
                          ^~~~~~
../src/common.h:84:79: error: expected ‘;’ before ‘{’ token
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, std::string attr) {
                                                                               ^
../src/common.h:87:37: error: ‘Handle’ is not a member of ‘v8’
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, int attr) {
                                     ^~~~~~
../src/common.h:87:54: error: expected primary-expression before ‘>’ token
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, int attr) {
                                                      ^
../src/common.h:87:56: error: ‘obj’ was not declared in this scope
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, int attr) {
                                                        ^~~
../src/common.h:87:61: error: expected primary-expression before ‘int’
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, int attr) {
                                                             ^~~
../src/common.h:84:26: warning: variable templates only available with -std=c++14 or -std=gnu++14
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, std::string attr) {
                          ^~~~~~
../src/common.h:87:71: error: expected ‘;’ before ‘{’ token
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, int attr) {
                                                                       ^
../src/common.h:93:9: error: ‘Handle’ is not a member of ‘v8’
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist);
         ^~~~~~
../src/common.h:93:26: error: expected primary-expression before ‘>’ token
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist);
                          ^
../src/common.h:93:28: error: ‘input’ was not declared in this scope
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist);
                            ^~~~~
../src/common.h:93:28: note: suggested alternative: ‘ino_t’
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist);
                            ^~~~~
                            ino_t
../src/common.h:93:70: error: expected primary-expression before ‘&’ token
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist);
                                                                      ^
../src/common.h:93:71: error: ‘buffersToPersist’ was not declared in this scope
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist);
                                                                       ^~~~~~~~~~~~~~~~
../src/common.h:93:87: error: expression list treated as compound expression in initializer [-fpermissive]
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist);
                                                                                       ^
../src/common.cc:34:20: error: redefinition of ‘bool sharp::HasAttr’
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr) {
                    ^~~~~~
In file included from ../src/common.cc:27:0:
../src/common.h:78:8: note: ‘bool sharp::HasAttr’ previously defined here
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr);
        ^~~~~~~
../src/common.cc:34:20: error: ‘Handle’ is not a member of ‘v8’
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr) {
                    ^~~~~~
../src/common.cc:34:37: error: expected primary-expression before ‘>’ token
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr) {
                                     ^
../src/common.cc:34:39: error: ‘obj’ was not declared in this scope
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr) {
                                       ^~~
../src/common.cc:34:56: error: expected primary-expression before ‘attr’
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr) {
                                                        ^~~~
../src/common.cc:37:29: error: redefinition of ‘std::string sharp::AttrAsStr’
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr) {
                             ^~~~~~
In file included from ../src/common.cc:27:0:
../src/common.h:79:15: note: ‘std::string sharp::AttrAsStr’ previously declared here
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr);
               ^~~~~~~~~
../src/common.cc:37:29: error: ‘Handle’ is not a member of ‘v8’
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr) {
                             ^~~~~~
../src/common.cc:37:46: error: expected primary-expression before ‘>’ token
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr) {
                                              ^
../src/common.cc:37:48: error: ‘obj’ was not declared in this scope
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr) {
                                                ^~~
../src/common.cc:37:65: error: expected primary-expression before ‘attr’
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr) {
                                                                 ^~~~
../src/common.cc:40:38: error: redefinition of ‘std::vector<double> sharp::AttrAsRgba’
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr) {
                                      ^~~~~~
In file included from ../src/common.cc:27:0:
../src/common.h:80:23: note: ‘std::vector<double> sharp::AttrAsRgba’ previously declared here
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr);
                       ^~~~~~~~~~
../src/common.cc:40:38: error: ‘Handle’ is not a member of ‘v8’
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr) {
                                      ^~~~~~
../src/common.cc:40:55: error: expected primary-expression before ‘>’ token
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr) {
                                                       ^
../src/common.cc:40:57: error: ‘obj’ was not declared in this scope
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr) {
                                                         ^~~
../src/common.cc:40:74: error: expected primary-expression before ‘attr’
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr) {
                                                                          ^~~~
../src/common.cc:51:9: error: redefinition of ‘sharp::InputDescriptor* sharp::CreateInputDescriptor’
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist
         ^~~~~~
In file included from ../src/common.cc:27:0:
../src/common.h:92:20: note: ‘sharp::InputDescriptor* sharp::CreateInputDescriptor’ previously defined here
   InputDescriptor* CreateInputDescriptor(
                    ^~~~~~~~~~~~~~~~~~~~~
../src/common.cc:51:9: error: ‘Handle’ is not a member of ‘v8’
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist
         ^~~~~~
../src/common.cc:51:26: error: expected primary-expression before ‘>’ token
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist
                          ^
../src/common.cc:51:28: error: ‘input’ was not declared in this scope
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist
                            ^~~~~
../src/common.cc:51:28: note: suggested alternative: ‘ino_t’
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist
                            ^~~~~
                            ino_t
../src/common.cc:51:70: error: expected primary-expression before ‘&’ token
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist
                                                                      ^
../src/common.cc:51:71: error: ‘buffersToPersist’ was not declared in this scope
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist
                                                                       ^~~~~~~~~~~~~~~~
cc1plus: warning: unrecognized command line option ‘-Wno-cast-function-type’
sharp.target.mk:134: recipe for target 'Release/obj.target/sharp/src/common.o' failed
make: *** [Release/obj.target/sharp/src/common.o] Error 1
make: Leaving directory '/opt/conda/lib/node_modules/md2gslides/node_modules/sharp/build'
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/opt/conda/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:194:23)
gyp ERR! stack     at ChildProcess.emit (events.js:321:20)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:275:12)
gyp ERR! System Linux 4.14.150+
gyp ERR! command "/opt/conda/bin/node" "/opt/conda/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /opt/conda/lib/node_modules/md2gslides/node_modules/sharp
gyp ERR! node -v v13.7.0
gyp ERR! node-gyp -v v5.0.5
gyp ERR! not ok 
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] install: `(node install/libvips && node install/dll-copy && prebuild-install) || (node-gyp rebuild && node install/dll-copy)`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the [email protected] install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/jovyan/.npm/_logs/2020-02-01T23_42_29_529Z-debug.logjovyan@jupyter-jun-2exiong-40climate-2ecom:~$ npm install -g md2gslides
npm WARN deprecated [email protected]: core-js@<3 is no longer maintained and not recommended for usage due to the number of issues. Please, upgrade your dependencies to the actual version of core-js@3.
npm WARN deprecated [email protected]: use String.prototype.padStart()
/opt/conda/bin/md2gslides -> /opt/conda/lib/node_modules/md2gslides/bin/md2gslides.js

> [email protected] install /opt/conda/lib/node_modules/md2gslides/node_modules/sharp
> (node install/libvips && node install/dll-copy && prebuild-install) || (node-gyp rebuild && node install/dll-copy)

info sharp Downloading https://github.com/lovell/sharp-libvips/releases/download/v8.7.0/libvips-8.7.0-linux-x64.tar.gz
prebuild-install WARN install No prebuilt binaries found (target=13.7.0 runtime=node arch=x64 libc= platform=linux)
make: Entering directory '/opt/conda/lib/node_modules/md2gslides/node_modules/sharp/build'
  TOUCH Release/obj.target/libvips-cpp.stamp
  CXX(target) Release/obj.target/sharp/src/common.o
In file included from ../src/common.cc:27:0:
../src/common.h:78:20: error: ‘Handle’ is not a member of ‘v8’
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr);
                    ^~~~~~
../src/common.h:78:37: error: expected primary-expression before ‘>’ token
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr);
                                     ^
../src/common.h:78:39: error: ‘obj’ was not declared in this scope
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr);
                                       ^~~
../src/common.h:78:56: error: expected primary-expression before ‘attr’
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr);
                                                        ^~~~
../src/common.h:78:60: error: expression list treated as compound expression in initializer [-fpermissive]
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr);
                                                            ^
../src/common.h:79:29: error: ‘Handle’ is not a member of ‘v8’
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr);
                             ^~~~~~
../src/common.h:79:46: error: expected primary-expression before ‘>’ token
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr);
                                              ^
../src/common.h:79:48: error: ‘obj’ was not declared in this scope
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr);
                                                ^~~
../src/common.h:79:65: error: expected primary-expression before ‘attr’
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr);
                                                                 ^~~~
../src/common.h:80:38: error: ‘Handle’ is not a member of ‘v8’
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr);
                                      ^~~~~~
../src/common.h:80:55: error: expected primary-expression before ‘>’ token
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr);
                                                       ^
../src/common.h:80:57: error: ‘obj’ was not declared in this scope
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr);
                                                         ^~~
../src/common.h:80:74: error: expected primary-expression before ‘attr’
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr);
                                                                          ^~~~
../src/common.h:81:48: error: ‘Handle’ is not a member of ‘v8’
   template<typename T> v8::Local<T> AttrAs(v8::Handle<v8::Object> obj, std::string attr) {
                                                ^~~~~~
../src/common.h:81:65: error: expected primary-expression before ‘>’ token
   template<typename T> v8::Local<T> AttrAs(v8::Handle<v8::Object> obj, std::string attr) {
                                                                 ^
../src/common.h:81:67: error: ‘obj’ was not declared in this scope
   template<typename T> v8::Local<T> AttrAs(v8::Handle<v8::Object> obj, std::string attr) {
                                                                   ^~~
../src/common.h:81:84: error: expected primary-expression before ‘attr’
   template<typename T> v8::Local<T> AttrAs(v8::Handle<v8::Object> obj, std::string attr) {
                                                                                    ^~~~
../src/common.h:81:37: warning: variable templates only available with -std=c++14 or -std=gnu++14
   template<typename T> v8::Local<T> AttrAs(v8::Handle<v8::Object> obj, std::string attr) {
                                     ^~~~~~
../src/common.h:81:90: error: expected ‘;’ before ‘{’ token
   template<typename T> v8::Local<T> AttrAs(v8::Handle<v8::Object> obj, std::string attr) {
                                                                                          ^
../src/common.h:84:37: error: ‘Handle’ is not a member of ‘v8’
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, std::string attr) {
                                     ^~~~~~
../src/common.h:84:54: error: expected primary-expression before ‘>’ token
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, std::string attr) {
                                                      ^
../src/common.h:84:56: error: ‘obj’ was not declared in this scope
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, std::string attr) {
                                                        ^~~
../src/common.h:84:73: error: expected primary-expression before ‘attr’
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, std::string attr) {
                                                                         ^~~~
../src/common.h:84:26: warning: variable templates only available with -std=c++14 or -std=gnu++14
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, std::string attr) {
                          ^~~~~~
../src/common.h:84:79: error: expected ‘;’ before ‘{’ token
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, std::string attr) {
                                                                               ^
../src/common.h:87:37: error: ‘Handle’ is not a member of ‘v8’
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, int attr) {
                                     ^~~~~~
../src/common.h:87:54: error: expected primary-expression before ‘>’ token
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, int attr) {
                                                      ^
../src/common.h:87:56: error: ‘obj’ was not declared in this scope
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, int attr) {
                                                        ^~~
../src/common.h:87:61: error: expected primary-expression before ‘int’
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, int attr) {
                                                             ^~~
../src/common.h:84:26: warning: variable templates only available with -std=c++14 or -std=gnu++14
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, std::string attr) {
                          ^~~~~~
../src/common.h:87:71: error: expected ‘;’ before ‘{’ token
   template<typename T> T AttrTo(v8::Handle<v8::Object> obj, int attr) {
                                                                       ^
../src/common.h:93:9: error: ‘Handle’ is not a member of ‘v8’
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist);
         ^~~~~~
../src/common.h:93:26: error: expected primary-expression before ‘>’ token
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist);
                          ^
../src/common.h:93:28: error: ‘input’ was not declared in this scope
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist);
                            ^~~~~
../src/common.h:93:28: note: suggested alternative: ‘ino_t’
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist);
                            ^~~~~
                            ino_t
../src/common.h:93:70: error: expected primary-expression before ‘&’ token
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist);
                                                                      ^
../src/common.h:93:71: error: ‘buffersToPersist’ was not declared in this scope
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist);
                                                                       ^~~~~~~~~~~~~~~~
../src/common.h:93:87: error: expression list treated as compound expression in initializer [-fpermissive]
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist);
                                                                                       ^
../src/common.cc:34:20: error: redefinition of ‘bool sharp::HasAttr’
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr) {
                    ^~~~~~
In file included from ../src/common.cc:27:0:
../src/common.h:78:8: note: ‘bool sharp::HasAttr’ previously defined here
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr);
        ^~~~~~~
../src/common.cc:34:20: error: ‘Handle’ is not a member of ‘v8’
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr) {
                    ^~~~~~
../src/common.cc:34:37: error: expected primary-expression before ‘>’ token
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr) {
                                     ^
../src/common.cc:34:39: error: ‘obj’ was not declared in this scope
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr) {
                                       ^~~
../src/common.cc:34:56: error: expected primary-expression before ‘attr’
   bool HasAttr(v8::Handle<v8::Object> obj, std::string attr) {
                                                        ^~~~
../src/common.cc:37:29: error: redefinition of ‘std::string sharp::AttrAsStr’
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr) {
                             ^~~~~~
In file included from ../src/common.cc:27:0:
../src/common.h:79:15: note: ‘std::string sharp::AttrAsStr’ previously declared here
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr);
               ^~~~~~~~~
../src/common.cc:37:29: error: ‘Handle’ is not a member of ‘v8’
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr) {
                             ^~~~~~
../src/common.cc:37:46: error: expected primary-expression before ‘>’ token
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr) {
                                              ^
../src/common.cc:37:48: error: ‘obj’ was not declared in this scope
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr) {
                                                ^~~
../src/common.cc:37:65: error: expected primary-expression before ‘attr’
   std::string AttrAsStr(v8::Handle<v8::Object> obj, std::string attr) {
                                                                 ^~~~
../src/common.cc:40:38: error: redefinition of ‘std::vector<double> sharp::AttrAsRgba’
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr) {
                                      ^~~~~~
In file included from ../src/common.cc:27:0:
../src/common.h:80:23: note: ‘std::vector<double> sharp::AttrAsRgba’ previously declared here
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr);
                       ^~~~~~~~~~
../src/common.cc:40:38: error: ‘Handle’ is not a member of ‘v8’
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr) {
                                      ^~~~~~
../src/common.cc:40:55: error: expected primary-expression before ‘>’ token
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr) {
                                                       ^
../src/common.cc:40:57: error: ‘obj’ was not declared in this scope
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr) {
                                                         ^~~
../src/common.cc:40:74: error: expected primary-expression before ‘attr’
   std::vector<double> AttrAsRgba(v8::Handle<v8::Object> obj, std::string attr) {
                                                                          ^~~~
../src/common.cc:51:9: error: redefinition of ‘sharp::InputDescriptor* sharp::CreateInputDescriptor’
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist
         ^~~~~~
In file included from ../src/common.cc:27:0:
../src/common.h:92:20: note: ‘sharp::InputDescriptor* sharp::CreateInputDescriptor’ previously defined here
   InputDescriptor* CreateInputDescriptor(
                    ^~~~~~~~~~~~~~~~~~~~~
../src/common.cc:51:9: error: ‘Handle’ is not a member of ‘v8’
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist
         ^~~~~~
../src/common.cc:51:26: error: expected primary-expression before ‘>’ token
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist
                          ^
../src/common.cc:51:28: error: ‘input’ was not declared in this scope
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist
                            ^~~~~
../src/common.cc:51:28: note: suggested alternative: ‘ino_t’
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist
                            ^~~~~
                            ino_t
../src/common.cc:51:70: error: expected primary-expression before ‘&’ token
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist
                                                                      ^
../src/common.cc:51:71: error: ‘buffersToPersist’ was not declared in this scope
     v8::Handle<v8::Object> input, std::vector<v8::Local<v8::Object>> &buffersToPersist
                                                                       ^~~~~~~~~~~~~~~~
cc1plus: warning: unrecognized command line option ‘-Wno-cast-function-type’
sharp.target.mk:134: recipe for target 'Release/obj.target/sharp/src/common.o' failed
make: *** [Release/obj.target/sharp/src/common.o] Error 1
make: Leaving directory '/opt/conda/lib/node_modules/md2gslides/node_modules/sharp/build'
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/opt/conda/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:194:23)
gyp ERR! stack     at ChildProcess.emit (events.js:321:20)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:275:12)
gyp ERR! System Linux 4.14.150+
gyp ERR! command "/opt/conda/bin/node" "/opt/conda/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /opt/conda/lib/node_modules/md2gslides/node_modules/sharp
gyp ERR! node -v v13.7.0
gyp ERR! node-gyp -v v5.0.5
gyp ERR! not ok 
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] install: `(node install/libvips && node install/dll-copy && prebuild-install) || (node-gyp rebuild && node install/dll-copy)`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the [email protected] install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/jovyan/.npm/_logs/2020-02-01T23_42_29_529Z-debug.log

Missing code block highlighting (same background color as the slide)

When inserting code blocks in the Markdown document, the syntax highlighting works but the code block itself is not highlighted.
Below is a sample Markdown document to illustrate my issue:


Start a new project with the template

$ sudo apt-get install cookiecutter
$ cookiecutter someurl foo
$ cd foo && ls
hackage/
tools/
data MyData q =
  MyData
  { name    :: String
  , content :: q
  }

class LatexShowable a
  where toLatex :: a -> String

f :: (LatexShowable a) => a -> IO ()
f = print . toLatex

Here is the Google slide generated with

md2gslides slides.md --style atom-one-dark

image

As you can see, the code blocks do not stand out from the rest of the slide the way the code blocks in this very issue do (by being included in a rectangle with a different background color). Is this something that can be fixed?

I've tried with other --style options (github, tomorrow-night, etc.) but the highlighting of the code block itself is the same.

Other than that, thanks for the great tool! I really like being able to put syntax highlighted code in my slides.

Error: Cannot find module '../lib/auth'

Hello !

I really ❤️ md2gslides ! Thank you very much.
I am even writing an article about it (in French) :)
I'd like to create a minimal docker image with it but I'm having problems installing it from the sources (I confess I am a noob in node).
*I am using the sources because I'd like to use the --copy and {layout=...} options

Could you please help me?

Here is the log :

# npm install -g https://github.com/gsuitedevs/md2googleslides
/usr/local/bin/md2gslides -> /usr/local/lib/node_modules/md2gslides/bin/md2gslides.js
+ [email protected]
added 169 packages from 477 contributors in 27.138s
# md2gslides
module.js:550
    throw err;
    ^

Error: Cannot find module '../lib/auth'
    at Function.Module._resolveFilename (module.js:548:15)
    at Function.Module._load (module.js:475:25)
    at Module.require (module.js:597:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/usr/local/lib/node_modules/md2gslides/bin/md2gslides.js:25:24)
    at Module._compile (module.js:653:30)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)

ESOCKETTIMEDOUT

I've been having this error since noon. Tried on different computers.

Unable to generate slides: { Error: ESOCKETTIMEDOUT
at ClientRequest. (/usr/local/lib/node_modules/md2gslides/node_modules/request/request.js:816:19)
at Object.onceWrapper (events.js:281:20)
at ClientRequest.emit (events.js:193:13)
at TLSSocket.emitRequestTimeout (_http_client.js:669:40)
at Object.onceWrapper (events.js:281:20)
at TLSSocket.emit (events.js:193:13)
at TLSSocket.Socket._onTimeout (net.js:450:8)
at listOnTimeout (internal/timers.js:535:17)
at processTimers (internal/timers.js:479:7) code: 'ESOCKETTIMEDOUT', connect: false }

Any way to specify folder in Drive to save to?

I LOVE this. It increases my productivity significantly. However, it would be so much better if I could specify where the generates slides are saved on my drive. Or even if I generate one time and move it, if I can push changes to the new location.

Are there any technical hurdles that I'm unaware of? I'd be happy to contribute code but want to make sure I'm not trying to build something you've already considered and decided against.

TypeError: Cannot read property 'references' of undefined

Using node v9.8.0, it seems to fail when trying to convert the document:

Unable to generate slides: TypeError: Cannot read property 'references' of undefined
    at Array.link (/usr/lib/node_modules/md2gslides/node_modules/markdown-it/lib/rules_inline/link.js:101:26)
    at ParserInline.tokenize (/usr/lib/node_modules/md2gslides/node_modules/markdown-it/lib/parser_inline.js:135:22)
    at ParserInline.parse (/usr/lib/node_modules/md2gslides/node_modules/markdown-it/lib/parser_inline.js:163:8)
    at Array.inline (/usr/lib/node_modules/md2gslides/node_modules/markdown-it/lib/rules_core/inline.js:10:23)
    at Core.process (/usr/lib/node_modules/md2gslides/node_modules/markdown-it/lib/parser_core.js:51:13)
    at MarkdownIt.parse (/usr/lib/node_modules/md2gslides/node_modules/markdown-it/lib/index.js:523:13)
    at parseMarkdown (/usr/lib/node_modules/md2gslides/lib/extract_slides.js:77:19)
    at extractSlides (/usr/lib/node_modules/md2gslides/lib/extract_slides.js:56:18)
    at SlideGenerator.generateFromMarkdown (/usr/lib/node_modules/md2gslides/lib/slide_generator.js:86:27)
    at generateSlides (/usr/lib/node_modules/md2gslides/bin/md2gslides.js:177:27)
    at tryCallOne (/usr/lib/node_modules/md2gslides/node_modules/promise/lib/core.js:37:12)
    at /usr/lib/node_modules/md2gslides/node_modules/promise/lib/core.js:123:15
    at flush (/usr/lib/node_modules/md2gslides/node_modules/asap/raw.js:50:29)
    at process._tickCallback (internal/process/next_tick.js:112:11)
TypeError: Cannot read property 'references' of undefined
    at Array.link (/usr/lib/node_modules/md2gslides/node_modules/markdown-it/lib/rules_inline/link.js:101:26)
    at ParserInline.tokenize (/usr/lib/node_modules/md2gslides/node_modules/markdown-it/lib/parser_inline.js:135:22)
    at ParserInline.parse (/usr/lib/node_modules/md2gslides/node_modules/markdown-it/lib/parser_inline.js:163:8)
    at Array.inline (/usr/lib/node_modules/md2gslides/node_modules/markdown-it/lib/rules_core/inline.js:10:23)
    at Core.process (/usr/lib/node_modules/md2gslides/node_modules/markdown-it/lib/parser_core.js:51:13)
    at MarkdownIt.parse (/usr/lib/node_modules/md2gslides/node_modules/markdown-it/lib/index.js:523:13)
    at parseMarkdown (/usr/lib/node_modules/md2gslides/lib/extract_slides.js:77:19)
    at extractSlides (/usr/lib/node_modules/md2gslides/lib/extract_slides.js:56:18)
    at SlideGenerator.generateFromMarkdown (/usr/lib/node_modules/md2gslides/lib/slide_generator.js:86:27)
    at generateSlides (/usr/lib/node_modules/md2gslides/bin/md2gslides.js:177:27)
    at tryCallOne (/usr/lib/node_modules/md2gslides/node_modules/promise/lib/core.js:37:12)
    at /usr/lib/node_modules/md2gslides/node_modules/promise/lib/core.js:123:15
    at flush (/usr/lib/node_modules/md2gslides/node_modules/asap/raw.js:50:29)
    at process._tickCallback (internal/process/next_tick.js:112:11)
{}

Internal 500 error with specific link formats

When slides are formatted with a title and a link with text following it in a bullet point (denoted with either - or *), it seems to throw an error.

For example, the following slide would error out

---
# Slide title

- text bullet

- [This is hyperlink text](http://www.example.com/) this is text after the hyperlink
---

But the following slide would be fine:

---
# Slide title

- text bullet

- This is text before the hyperlink, [this is hyperlink text](http://www.example.com/) this is text after the hyperlink
---

And the error message is as follows:

{
  "code": 500,
  "errors": [
    {
      "message": "Internal error encountered.",
      "domain": "global",
      "reason": "backendError"
    }
  ]
}

CodeSurfer-like dynamic code highlighting, zoom in and zoom out transformations.

Hello 👋

Thanks for this awesome tool! We can't wait to use it for our future consistent presentations 💪

Problem

There is one important missing feature in Googe slides and that's why for the latest conference presentations we went for MDX Deck + CodeSurfer

The missing feature is dynamic code highlights, zoom-in, zoom-out transition so you can explain line by line what you are changing. We did this presentation on GoDays and FOSDEM and the feedback was extremely positive. The audience could follow the code much easier and we could explain more than just using static slides with limited size.

You can see the code and effect here: https://github.com/kakkoyun/are-you-testing-your-observability

The tradeoff was enormous though. The MDX Deck has some bugs and it's extremely tedious to set up, use, and build. Especially if you are not a frontend developer - you are essentially building a website. It's brittle, impossible to make it work for all projector resolutions etc, generating PDF's is impossible and you cannot link to one slide. We wrote more CSS than content 🤦

How to solve it?

So we are looking for another solution that will give us dynamic code, zoom in, zoom outs, and dynamic highlight transformations.

Do you think it will be possible to add some pseudo markdown components that will allow doing so? Do you think it is possible? Would you accept such a contribution? We are happy to help, just we definitely need some pointers 🤗

Proposal

The idea would be to base on markdown code blocks with code surfer FOCUS:

`` `go 2:3,4[2:3]

Line1
Line2
Line3

`` `

This will highlight line 2 3 and second, third and fourth character of line 4.

Then we would need some way of describing which slides would be part of the transformation e.g.:

`` `go 2 <slide204>

Line1
Line2

newline
`` `

This will focus our code block on line 2, and animate removal of line3 and animate addition of newline. What to animate will be based on diff from code block on slide 204.
I think with just this simple logic we could achieve a lot and generate Google slides with code and transformations which will add, remove, change fonts etc..

Sounds doable? 🤔 Thanks for help in advance!

cc @kakkoyun

Bullet animation?

Does the Google Slides API support Animations? My specific use case is revealing bulleted list items one by one on click ("by paragraph" mode) but I suppose this could be a more general question.

If so, would you be willing to support it?

❤️ ❤️ ❤️

SVG not working - apparently local image

Good:

md2gslides slides.md works without the SVG slide from my minimal example.

Bad:

If I include the SVG from the example, I get the message Unable to generate slides: Local images require --use-fileio option

You can see what I tried here. I have a self-describing comment that shows right up to where it works.

What else I tried:

I also tried cloning the md2googleslides repo, cd examples and running md2gslides example.md, but I get this message instead:

Unable to generate slides: { ProbeError: unrecognized file format
    at ParserStream.parserEnd (/Users/howard/.nvm/versions/node/v10.13.0/lib/node_modules/md2gslides/node_modules/probe-image-size/stream.js:29:24)
    at Object.onceWrapper (events.js:273:13)
    at ParserStream.emit (events.js:182:13)
    at endReadableNT (_stream_readable.js:1094:12)
    at process._tickCallback (internal/process/next_tick.js:63:19)
  name: 'ProbeError',
  message: 'unrecognized file format',
  code: 'ECONTENT' }

Sorry if I'm missing something obvious. This tool is interesting.

Images Not Aligned In Two Column Layout

When I try to have a slide with two columns and an image on the right side, I have to align that image when I generate my slides. Here's an example slide:

# Foo

- Foo bullet
- Bar bullet
- Baz bullet

{.column}

![](https://upload.wikimedia.org/wikipedia/commons/thumb/2/2f/Google_2015_logo.svg/1200px-Google_2015_logo.svg.png)

Thanks for the tool! Really enjoy being able to create my decks and have them be available for PRs!

Math support

md2googleslides is a very useful tool. Thanks for the great work. - One feature that is missing (or I couldn't find) is math support (similar to here: http://bit.ly/2RUnjKO). Are there any plans to add it in the future?

Working but styles not being used

I got everything working but the styles from highlight.js. It isn't a path issue, as I've tested for that... but whatever theme I choose it still just uploads the same way (white background with black text), even if I change the default theme to something else. I don't see any errors anywhere, it just seems to check for the style file and then ignore it. Any ideas?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.