Sublime Forum

ExportHtml Plugin (rename from PrintHtml)

#1

@agibsonsw started a plugin to print code to an HTML styled with Sublime Text’s syntax highlighting. We started collaborating together, and I polished it up and added a number of features. With @agibsonsw permission I am posting the plugin here.

Features

  • Print to HTML using any tmTheme for syntax highlighting
  • Can handle any language supported by ST2
  • Supports bold and italic theme font styles as well
  • Configurable output
  • Format suitable for copying and pasting in emails
  • 2 included tmTheme files for color and grayscale printing (but any can be used)
  • Print only selections (multi-select supported)
  • Print and show highlights (multi-select supported)
  • Toggle gutter on/off in browser view
  • Automatically open browser print dialog (optional)
  • Enable/disable configurable word wrapping

Please read the readme for more information.

Repository: github.com/facelessuser/ExportHtml

I know there is already a print to HTML plugin now on Package Control. I also know that people are a little picky about plugins that provide similar features on Package Control. If you would like to see this plugin on Package Control, please let me know. I think this offers a unique set of features, but I will leave it up the user base to decide.

Edit: Renamed package

0 Likes

#2

@agibsonsw and I were discussing this and were not sure if people would be interested in this feature or not, please let us know.

Basically it is a feature which allows you to annotate the document before you print it to HTML. Then in the HTML, the selections you annotated will be underlined. When you mouse over the underlined word(s), a tooltip with your annotation will be shown.

Please chime in and let me know if this is a feature you would be interested in. It is already done, I just need to know if there is interest.

I meant HTML not email in the picture below, but I already made the picture :smile:.

0 Likes

#3

Great plugin, thanks to both of you !

Please put it on Package Control, IMHO your concept to generate HTML is way better than using Pygments module (no offense to other plugin author which is good too).

And this is your first issue (facelessuser: the issues management is not enabled in your github repository):
On Windows when opening in the browser, the page is opened 2 times.
It is caused by the desktop module that return None as status:

def open(url, desktop=None, wait=0, status=False): ... elif desktop_in_use == "Windows": # NOTE: This returns None in current implementations. return os.startfile(url)
BTW, what’s the problem with webbrowser.open() that you have to use desktop module ?

0 Likes

#4

Issues is now enabled.

Will do.

[quote=“bizoo”]
On Windows when opening in the browser, the page is opened 2 times.
It is caused by the desktop module that return None as status:

def open(url, desktop=None, wait=0, status=False): ... elif desktop_in_use == "Windows": # NOTE: This returns None in current implementations. return os.startfile(url)
BTW, what’s the problem with webbrowser.open() that you have to use desktop module ?[/quote]

Others have tried webbrowser as well, and have had issus in dealing with Linux. Webbrowser doesn’t handle Gnome, KDE, XFCE, etc. very well. It stands to reason that maybe I should just check the platform and use Desktop only for Linux. I was going for a universal method that just defaulted to webbrowser if a bad status returned (happens in Mac sometimes if the browser is not open). I will address this sometime today. I wasn’t noticing the issue on my Windows box at work, but I can clearly see how that case is an issue.

Thanks for the feedback!

0 Likes

#5

@bizoo, problem should be fixed now (might need to restart after updating due to dependency inclusion). If it is still an issue, create a issue on github and I will look deeper into it.

0 Likes

#6

Thanks for all the work (both you and @agibsonsw). This is easily one of my favorite plugins now. :smile:

I’d love to see the annotation feature added. One of my uses for this is that I run my own local wordpress install as kind of a knowledge base/snippet management tool for my work. Being able to drop in snippets like this, with annotations, would be awesome. Then I wouldn’t have to rely on syntax highlighting plugins.

0 Likes

#7

This is an excellent approach! Put it on package-control pls! :smiley:

this is still happening…

0 Likes

#8

He just fixed it a few minutes ago… grab it again and try it out. It’s working for me now. :smile:

0 Likes

#9

[quote=“seth007”]This is an excellent approach! Put it on package-control pls! :smiley:

this is still happening…[/quote]

Yeah, I am an idiot :blush: . I set it to always open two tabs opposed to not open two tabs.

It should be fixed now…really this time :smile:. I just had confirmation form @SeanWcom that it is now working.

Edit: looks like he confirmed here as well.

0 Likes

#10

[quote=“SeanWcom”]Thanks for all the work (both you and @agibsonsw). This is easily one of my favorite plugins now. :smile:

I’d love to see the annotation feature added. One of my uses for this is that I run my own local wordpress install as kind of a knowledge base/snippet management tool for my work. Being able to drop in snippets like this, with annotations, would be awesome. Then I wouldn’t have to rely on syntax highlighting plugins.[/quote]

Not a problem, probably later today. What is does is allow you to go into a read only state and add annotations before printing. Just print before leaving annotation mode. You can try out the annotation branch now before I merge it in (it still has the two tab bug though). Annotations are forgotten when leaving annotation mode . It is difficult to track the regions when undo can bring them back form the dead and redo can remove them. So it is simply a commenting method before printing.

github.com/facelessuser/PrintHt … nnotations

Let me know what you think, sorry thee is no documentation on it yet, but the commands should be available in the command palette.

0 Likes

#11

Fixed as promised! Thanks for this plugin, I will use it a lot. :laughing:

0 Likes

#12

I just tested out your annotation branch - I like!! The commands are simple enough, and I love the HTML output it creates.

How possible is it to add the annotate commands to the context menu? If the only item on there was “Toggle Annotation Mode” that would be pretty clean. Then when it’s toggled, you could show a flyout menu for the misc annotation commands… something along those lines.

I’m typically a hotkey fanatic, but there’s no way I’d remember all the keys for annotation. I could always ctrl-shift-p and use the commands that way of course…

Either way, I love it and will definitely use it. :smile:

0 Likes

#13

I will look into context menus. I think the idea of having all the commands appear is a good idea. If context doesn’t pan out, I will have one command that will show a quick panel of all the annotation commands.

0 Likes

#14

Context menu will be no problem. I will also have it so that the commands will only be enabled if they can be used. So if you want to annotate a selection, you must have a selection for it to not be grayed out etc. All commands will still be available via the command palette as well. Maybe down the road I will consolidate them into a quick panel menu.

I will also add a little status message in the status bar letting you know you are in Annotation Mode.

I will try to get it into tonight. Documentation might happen later if I am lazy.

0 Likes

#15

Convert code to forum post. I have seen @castles_made_sand_post posting with highlighted text, and figured now that we have the framework to print HTML color coded, why not forum posts as well.

Here is an example. I still have work to do, but stay tuned.

[pre=#000000] 396 def convert_view_to_post(self, the_post):
397 for line in self.view.split_by_newlines(sublime.Region(self.end, self.size)):
398 self.size = line.end()
399 line = self.convert_line_to_post()
400 the_post.write(self.print_line(line, self.curr_row))
401 self.curr_row += 1
402
403 def format_text(self, line, text, the_colour, the_style, highlight=False):
404 code = (FORUM_CODE % {“color”: the_colour, “content”: text}).replace(’\n’, ‘’)
405 line.append(code)
406
407 def convert_line_to_post(self):
408 line = ]
409 hl_found = False
410
411 # Continue highlight form last line
412 if self.hl_continue != None:
413 self.curr_hl = self.hl_continue
414 self.hl_continue = None[/pre]

0 Likes

#16

Be nice if *someone *added similar annotations- with simple sample code - to the ST API page :smile: . This small improvement could make a big difference.

0 Likes

#17

That is going to be it. It should support bold and italic as well.

No Gutter
[pre=#FFFFFF]* def* convert_view_to_post(self,* the_post*):
for line in self.view.split_by_newlines(sublime.Region(self.end, self.size)):
self.empty_space = None
self.size = line.end()
line = self.convert_line_to_post()
the_post.write(self.print_line(line, self.curr_row))
self.curr_row += 1[/pre]

Gutter
[pre=#FFFFFF] 149 * def* convert_view_to_post(self,* the_post*):
150 for line in self.view.split_by_newlines(sublime.Region(self.end, self.size)):
151 self.empty_space = None
152 self.size = line.end()
153 line = self.convert_line_to_post()
154 the_post.write(self.print_line(line, self.curr_row))
155 self.curr_row += 1[/pre]

Forum posts will only work in forums that allow “[pre’]”, “”, "", and "" blocks. If you use any forum syntax blocks in your code, it will mess things up since there is really no way to escape forum blocks. Gutter numbers are allowed, but fancy styling of the gutter will not be allowed though due to the limitations of the forum post syntax; the default foreground and background color will be used. Highlighting selections will also specific words will also not be allowed due to limitations of the forum post syntax. It will copy the the code to your clipboard and/or open the code in a sublime view.

0 Likes

#18

Ok, that’s too cool.

0 Likes

#19

It’s rather beside the point (sorry!), but I was wondering about the provenance of the Print-Color theme. It looks like a black-on-white Monokai. Did you make it for this plugin or did you derive it from somewhere else?

0 Likes

#20

I took the base Monokai Bright and darkened all of the colors or changed them to look decent on a white background. Changed the background to white, styled the gutter, choose a suitable color for selections etc., adjusted line coloring, blah, blah, blah. You get the idea. Colors were tweaked and adjusted where they made sense. Colors like yellow needed far more aggressive tweaking to work on white.

The Grayscale was also derived from Monokai Bright. Gutted out all colors and left only what changed the font style. Changed all text to black except comments which were light gray color…you get the idea.

I just needed something that looked okay printed, and I needed a template, so I grabbed Monokai Bright and forced it to meet my needs. So in short, I heavily modded it for this plugin.

Probably should mention that in the readme.

0 Likes