diff --git a/src/WinPrint.Console/WinPrint.Console.csproj b/src/WinPrint.Console/WinPrint.Console.csproj
index 3e53c59..719b5fd 100644
--- a/src/WinPrint.Console/WinPrint.Console.csproj
+++ b/src/WinPrint.Console/WinPrint.Console.csproj
@@ -9,7 +9,7 @@
winprint
- 2.0.4.100
+ 2.0.4.103
Kindel Systems
winprint
Charlie Kindel
diff --git a/src/WinPrint.Core/ViewModels/SheetViewModel.cs b/src/WinPrint.Core/ViewModels/SheetViewModel.cs
index b9ccfc0..bcd8ee5 100644
--- a/src/WinPrint.Core/ViewModels/SheetViewModel.cs
+++ b/src/WinPrint.Core/ViewModels/SheetViewModel.cs
@@ -194,19 +194,17 @@ protected void OnReflowProgress(string msg) {
ReflowProgress?.Invoke(this, msg);
}
- public bool CacheEnabled { get => _cacheEnabled; set => SetField(ref _cacheEnabled, value); }
-
- private bool _cacheEnabled = false;
-
+ public class SheetViewModelSettingsChangedEvent {
+ public bool Reflow { get; set; }
+ public string PropertyName { get; set; }
+ }
// if bool is true, reflow. Otherwise just paint
- public event EventHandler SettingsChanged;
- protected void OnSettingsChanged(bool reflow) {
+ public event EventHandler SettingsChanged;
+ protected void OnSettingsChanged(bool reflow, string propertyName) {
LogService.TraceMessage();
- SettingsChanged?.Invoke(this, reflow);
- }
- // Caching of pages as bitmaps. Enables faster paint/zoom as well as usage from XAML
- private List _cachedSheets = new List();
+ SettingsChanged?.Invoke(this, new SheetViewModelSettingsChangedEvent() { Reflow = reflow, PropertyName = propertyName }) ;
+ }
public SheetViewModel() {
}
@@ -225,8 +223,6 @@ public void Reset() {
ContentEngine.PropertyChanged -= OnContentEnginePropertyChanged();
ContentEngine = null;
}
-
- ClearCache();
_numPages = 0;
}
@@ -269,17 +265,17 @@ public void SetSheet(SheetSettings newSheet) {
}
if (_headerVM != null) {
- _headerVM.SettingsChanged -= (s, reflow) => OnSettingsChanged(reflow);
+ _headerVM.SettingsChanged -= (s, reflow) => OnSettingsChanged(reflow, "Header");
}
Header = new HeaderViewModel(this, newSheet.Header);
- _headerVM.SettingsChanged += (s, reflow) => OnSettingsChanged(reflow);
+ _headerVM.SettingsChanged += (s, reflow) => OnSettingsChanged(reflow, "Header");
if (_footerVM != null) {
- _footerVM.SettingsChanged -= (s, reflow) => OnSettingsChanged(reflow);
+ _footerVM.SettingsChanged -= (s, reflow) => OnSettingsChanged(reflow, "Footer");
}
Footer = new FooterViewModel(this, newSheet.Footer);
- _footerVM.SettingsChanged += (s, reflow) => OnSettingsChanged(reflow);
+ _footerVM.SettingsChanged += (s, reflow) => OnSettingsChanged(reflow, "Footer");
// Subscribe to all settings properties
newSheet.PropertyChanged += OnSheetPropertyChanged();
@@ -532,10 +528,6 @@ public async Task ReflowAsync() {
Ready = false;
- if (CacheEnabled) {
- ClearCache();
- }
-
if (ContentEngine is null) {
LogService.TraceMessage("SheetViewModel.ReflowAsync - ContentEngine is null");
return;
@@ -590,18 +582,6 @@ public SheetSettings FindSheet(string sheetName, out string sheetID) {
return sheet;
}
- private void ClearCache() {
- if (!CacheEnabled) {
- return;// throw new InvalidOperationException("Cache is not enabled!");
- }
-
- LogService.TraceMessage();
- foreach (var i in _cachedSheets) {
- i.Dispose();
- }
- _cachedSheets.Clear();
- }
-
private System.ComponentModel.PropertyChangedEventHandler OnSheetPropertyChanged() {
return (s, e) => {
var reflow = false;
@@ -643,7 +623,7 @@ private System.ComponentModel.PropertyChangedEventHandler OnSheetPropertyChanged
default:
throw new InvalidOperationException($"Property change not handled: {e.PropertyName}");
}
- OnSettingsChanged(reflow);
+ OnSettingsChanged(reflow, e.PropertyName);
};
}
@@ -710,7 +690,7 @@ private System.ComponentModel.PropertyChangedEventHandler OnContentSettingsPrope
default:
throw new InvalidOperationException($"Property change not handled: {e.PropertyName}");
}
- OnSettingsChanged(reflow);
+ OnSettingsChanged(reflow, e.PropertyName);
};
}
@@ -738,7 +718,7 @@ private System.ComponentModel.PropertyChangedEventHandler OnContentEnginePropert
return;
}
- OnSettingsChanged(reflow);
+ OnSettingsChanged(reflow, e.PropertyName);
};
}
@@ -813,38 +793,6 @@ public void PrintSheet(Graphics graphics, int sheetNum) {
graphics.Restore(state);
}
-
- ///
- /// Returns an Image with the specified sheet painted on it. Image will be of the size & resolution of the selected printer.
- ///
- /// Sheet to print. 1-based.
- ///
- public Image GetCachedSheet(Graphics graphics, int sheetNum) {
- if (!CacheEnabled) {
- throw new InvalidOperationException("Cache is not enabled!");
- }
-
- const int dpiMultiplier = 1;
- float xDpi = PrinterResolution.X * dpiMultiplier;
- float yDpi = PrinterResolution.Y * dpiMultiplier;
- var xRes = (int)(Bounds.Width / 100 * xDpi);
- var yRes = (int)(Bounds.Height / 100 * yDpi);
- if (_cachedSheets.Count < sheetNum) {
- // Create a new bitmap object with the resolution of a printer page
- var bmp = new Bitmap(xRes, yRes);
- //bmp.SetResolution(xDpi, yDpi);
-
- // Obtain a Graphics object from that bitmap
- var g = Graphics.FromImage(bmp);
- g.PageUnit = GraphicsUnit.Pixel;
- PaintSheet(g, sheetNum);
- _cachedSheets.Add(bmp);
- }
-
- LogService.TraceMessage($"GetCachedSheet({sheetNum}) returning image.");
- return _cachedSheets[sheetNum - 1];
- }
-
private void PaintSheet(Graphics g, int sheetNum) {
LogService.TraceMessage($"{sheetNum}");
// background needs to be filled image scaling to work right
diff --git a/src/WinPrint.Core/WinPrint.Core.csproj b/src/WinPrint.Core/WinPrint.Core.csproj
index 203aff6..f6997e9 100644
--- a/src/WinPrint.Core/WinPrint.Core.csproj
+++ b/src/WinPrint.Core/WinPrint.Core.csproj
@@ -4,7 +4,7 @@
netcoreapp3.1
AnyCPU;x64;x86
- 2.0.4.100
+ 2.0.4.105
Kindel Systems
winprint
Charlie Kindel
diff --git a/src/WinPrint.Installer/setup.cs b/src/WinPrint.Installer/setup.cs
index 630c288..71293f1 100644
--- a/src/WinPrint.Installer/setup.cs
+++ b/src/WinPrint.Installer/setup.cs
@@ -13,7 +13,6 @@ private static void Main() {
var versionFile = $"{sourceBaseDir}\\WinPrint.Core.dll";
Debug.WriteLine($"version path: {versionFile}");
var info = FileVersionInfo.GetVersionInfo(versionFile);
-
var feature = new Feature(new Id("winprint"));
var project = new Project(info.ProductName, new EnvironmentVariable("PATH", "[INSTALLDIR]") { Part = EnvVarPart.last }) {
@@ -40,21 +39,6 @@ private static void Main() {
new ExeFileShortcut("WinPrint", "[INSTALLDIR]winprintgui.exe", arguments: ""))
},
- //Binaries = new[] {
- //},
-
- //Actions = new[] {
- // new InstalledFileAction("winprintgui_exe", "")
- // {
- // Step = Step.InstallFinalize,
- // When = When.After,
- // Return = Return.asyncNoWait,
- // Execute = Execute.immediate,
- // Impersonate = true,
- // //Condition = Feature.BeingInstall(),
- // }
- //},
-
Properties = new[]{
//setting property to be used in install condition
new Property("ALLUSERS", "1"),
@@ -68,7 +52,7 @@ private static void Main() {
project.SourceBaseDir = sourceBaseDir;
project.OutDir = outDir;
- project.Version = new Version(info.ProductVersion); //new Version("2.0.1.10040");
+ project.Version = new Version(info.ProductVersion);
project.MajorUpgrade = new MajorUpgrade {
Schedule = UpgradeSchedule.afterInstallInitialize,
AllowSameVersionUpgrades = true,
@@ -76,8 +60,6 @@ private static void Main() {
};
project.Platform = Platform.x64;
- //project.LicenceFile = "license.rtf";
-
project.ControlPanelInfo.Comments = $"winprint by Charlie Kindel";
project.ControlPanelInfo.Readme = "https://tig.github.io/winprint";
project.ControlPanelInfo.HelpLink = "https://tig.github.io/winprint";
@@ -86,16 +68,9 @@ private static void Main() {
project.ControlPanelInfo.Manufacturer = info.CompanyName;
project.ControlPanelInfo.InstallLocation = "[INSTALLDIR]";
project.ControlPanelInfo.NoModify = true;
- //project.ControlPanelInfo.NoRepair = true,
- //project.ControlPanelInfo.NoRemove = true,
- //project.ControlPanelInfo.SystemComponent = true, //if set will not be shown in Control Panel
project.PreserveTempFiles = true;
- //project.UI = WUI.WixUI_ProgressOnly;
-
- //project.RemoveDialogsBetween(NativeDialogs.WelcomeDlg, NativeDialogs.);
-
//project.SetNetFxPrerequisite("NETFRAMEWORK20='#1'");
project.EmbeddedUI = new EmbeddedAssembly(System.Reflection.Assembly.GetExecutingAssembly().Location);
diff --git a/src/WinPrint.WinForms/MainWindow.Designer.cs b/src/WinPrint.WinForms/MainWindow.Designer.cs
index cd7c23c..95704c0 100644
--- a/src/WinPrint.WinForms/MainWindow.Designer.cs
+++ b/src/WinPrint.WinForms/MainWindow.Designer.cs
@@ -99,6 +99,7 @@ private void InitializeComponent()
this.dummyButton.Location = new System.Drawing.Point(0, 33);
this.dummyButton.Margin = new System.Windows.Forms.Padding(0);
this.dummyButton.Name = "dummyButton";
+ this.dummyButton.Padding = new System.Windows.Forms.Padding(20);
this.dummyButton.Size = new System.Drawing.Size(835, 647);
this.dummyButton.TabIndex = 0;
this.dummyButton.Text = "dummyButton";
@@ -373,11 +374,6 @@ private void InitializeComponent()
// padding
//
this.padding.DecimalPlaces = 2;
- this.padding.Increment = new decimal(new int[] {
- 1,
- 0,
- 0,
- 131072});
this.padding.Location = new System.Drawing.Point(92, 82);
this.padding.Name = "padding";
this.padding.Size = new System.Drawing.Size(57, 23);
@@ -405,37 +401,17 @@ private void InitializeComponent()
// columns
//
this.columns.Location = new System.Drawing.Point(92, 53);
- this.columns.Minimum = new decimal(new int[] {
- 1,
- 0,
- 0,
- 0});
this.columns.Name = "columns";
this.columns.Size = new System.Drawing.Size(57, 23);
this.columns.TabIndex = 13;
- this.columns.Value = new decimal(new int[] {
- 1,
- 0,
- 0,
- 0});
this.columns.ValueChanged += new System.EventHandler(this.columns_ValueChanged);
//
// rows
//
this.rows.Location = new System.Drawing.Point(92, 23);
- this.rows.Minimum = new decimal(new int[] {
- 1,
- 0,
- 0,
- 0});
this.rows.Name = "rows";
this.rows.Size = new System.Drawing.Size(57, 23);
this.rows.TabIndex = 13;
- this.rows.Value = new decimal(new int[] {
- 1,
- 0,
- 0,
- 0});
this.rows.ValueChanged += new System.EventHandler(this.rows_ValueChanged);
//
// groupMargins
@@ -469,20 +445,10 @@ private void InitializeComponent()
//
this.leftMargin.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.leftMargin.DecimalPlaces = 2;
- this.leftMargin.Increment = new decimal(new int[] {
- 1,
- 0,
- 0,
- 131072});
this.leftMargin.Location = new System.Drawing.Point(38, 50);
this.leftMargin.Name = "leftMargin";
this.leftMargin.Size = new System.Drawing.Size(57, 23);
this.leftMargin.TabIndex = 4;
- this.leftMargin.Value = new decimal(new int[] {
- 25,
- 0,
- 0,
- 131072});
this.leftMargin.ValueChanged += new System.EventHandler(this.leftMargin_ValueChanged);
//
// labelRight
@@ -498,20 +464,10 @@ private void InitializeComponent()
//
this.rightMargin.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.rightMargin.DecimalPlaces = 2;
- this.rightMargin.Increment = new decimal(new int[] {
- 1,
- 0,
- 0,
- 131072});
this.rightMargin.Location = new System.Drawing.Point(144, 50);
this.rightMargin.Name = "rightMargin";
this.rightMargin.Size = new System.Drawing.Size(57, 23);
this.rightMargin.TabIndex = 3;
- this.rightMargin.Value = new decimal(new int[] {
- 25,
- 0,
- 0,
- 131072});
this.rightMargin.ValueChanged += new System.EventHandler(this.rightMargin_ValueChanged);
//
// labelBottom
@@ -527,20 +483,10 @@ private void InitializeComponent()
//
this.bottomMargin.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.bottomMargin.DecimalPlaces = 2;
- this.bottomMargin.Increment = new decimal(new int[] {
- 1,
- 0,
- 0,
- 131072});
this.bottomMargin.Location = new System.Drawing.Point(92, 80);
this.bottomMargin.Name = "bottomMargin";
this.bottomMargin.Size = new System.Drawing.Size(57, 23);
this.bottomMargin.TabIndex = 4;
- this.bottomMargin.Value = new decimal(new int[] {
- 25,
- 0,
- 0,
- 131072});
this.bottomMargin.ValueChanged += new System.EventHandler(this.bottomMargin_ValueChanged);
//
// labelTop
@@ -556,20 +502,10 @@ private void InitializeComponent()
//
this.topMargin.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.topMargin.DecimalPlaces = 2;
- this.topMargin.Increment = new decimal(new int[] {
- 1,
- 0,
- 0,
- 131072});
this.topMargin.Location = new System.Drawing.Point(92, 19);
this.topMargin.Name = "topMargin";
this.topMargin.Size = new System.Drawing.Size(57, 23);
this.topMargin.TabIndex = 1;
- this.topMargin.Value = new decimal(new int[] {
- 25,
- 0,
- 0,
- 131072});
this.topMargin.ValueChanged += new System.EventHandler(this.topMargin_ValueChanged);
//
// comboBoxSheet
diff --git a/src/WinPrint.WinForms/MainWindow.cs b/src/WinPrint.WinForms/MainWindow.cs
index 01d0b41..c5be9f1 100644
--- a/src/WinPrint.WinForms/MainWindow.cs
+++ b/src/WinPrint.WinForms/MainWindow.cs
@@ -43,6 +43,7 @@ public MainWindow() {
BackColor = dummyButton.BackColor,
Location = dummyButton.Location,
Margin = dummyButton.Margin,
+ Padding = dummyButton.Padding,
Name = "printPreview",
Size = dummyButton.Size,
MinimumSize = new Size(0, 0),
@@ -351,17 +352,26 @@ private void PropertyChangedEventHandler(object sender, PropertyChangedEventArgs
}
}
- private void SettingsChangedEventHandler(object o, bool reflow) {
+ private void SettingsChangedEventHandler(object o, SheetViewModel.SheetViewModelSettingsChangedEvent e) {
if (InvokeRequired) {
- BeginInvoke((Action)(() => SettingsChangedEventHandler(o, reflow)));
+ BeginInvoke((Action)(() => SettingsChangedEventHandler(o, e)));
}
else {
- LogService.TraceMessage($"{reflow}");
- if (reflow) {
+ LogService.TraceMessage($"{e.Reflow}");
+ if (e.Reflow) {
LoadFile();
}
else {
- //printPreview.Invalidate();
+ //if (e.PropertyName.Equals("Header")) {
+ // printPreview.Invalidate(Rectangle.Round(printPreview.SheetViewModel.Header.Bounds));
+ //}
+ //else if (e.PropertyName.Equals("Footer")) {
+ // printPreview.Invalidate(Rectangle.Round(printPreview.SheetViewModel.Footer.Bounds));
+ //}
+ //else {
+ // printPreview.Invalidate();
+ //}
+ printPreview.Invalidate();
}
}
}
diff --git a/src/WinPrint.WinForms/PrintPreview.cs b/src/WinPrint.WinForms/PrintPreview.cs
index 8cc05ad..4f4d448 100644
--- a/src/WinPrint.WinForms/PrintPreview.cs
+++ b/src/WinPrint.WinForms/PrintPreview.cs
@@ -38,6 +38,7 @@ public SheetViewModel SheetViewModel {
public int Zoom { get; set; }
public PrintPreview() {
+ //DoubleBuffered = true;
InitializeComponent();
CurrentSheet = 1;
Zoom = 100;
@@ -95,7 +96,7 @@ private void ZoomOut() {
protected override void OnResize(EventArgs e) {
Invalidate();
- base.OnResize(e);
+ //base.OnResize(e);
}
protected override void OnClick(EventArgs e) {
@@ -197,25 +198,17 @@ protected override void OnTextChanged(EventArgs e) {
Invalidate(GetTextRect(Graphics.FromHwnd(Handle)));
}
- // Minimum padding around print preview control (paper)
- private const int _pagePadding = 20;
protected override void OnPaint(PaintEventArgs e) {
if (e is null) {
throw new ArgumentNullException(nameof(e));
}
-
LogService.TraceMessage($"PrintPreview.Text: {Text} - clip: {e.ClipRectangle}");
- //base.OnPaint(e);
-
- // Paint background
- using var backBrush = new SolidBrush(BackColor);
- e.Graphics.FillRectangle(backBrush, ClientRectangle);
if (_svm != null && _svm.Ready) {
var state = e.Graphics.Save();
// Calculate scale and location
- var paperSize = new Size(ClientSize.Width - _pagePadding, ClientSize.Height - _pagePadding);
+ var paperSize = new Size(ClientSize.Width - Padding.Horizontal, ClientSize.Height - Padding.Vertical);
double w = _svm.Bounds.Width;
double h = _svm.Bounds.Height;
var scalingX = paperSize.Width / w;
@@ -228,13 +221,18 @@ protected override void OnPaint(PaintEventArgs e) {
var previewSize = new Size((int)(w * scale), (int)(h * scale));
LogService.TraceMessage($"previewSize {previewSize.Width}, {previewSize.Height}");
- // Don't do anything if the window's been shrunk too far or GDI+ will crash
+ // Don't do anything if the windows been shrunk too far or GDI+ will crash
if (previewSize.Width > 10 && previewSize.Height > 10) {
- // Center
+ // TODO: Enable panning
if (Zoom <= 100) {
+ // Center
e.Graphics.TranslateTransform((ClientSize.Width / 2) - (previewSize.Width / 2), (ClientSize.Height / 2) - (previewSize.Height / 2));
}
+ else {
+ // Top centered
+ e.Graphics.TranslateTransform((ClientSize.Width / 2) - (previewSize.Width / 2), Padding.Top);
+ }
// Scale for client size & zoom
e.Graphics.ScaleTransform((float)scale, (float)scale);
@@ -242,28 +240,10 @@ protected override void OnPaint(PaintEventArgs e) {
// Paint the background white
e.Graphics.FillRectangle(Brushes.White, _svm.Bounds);
- //if (!svm.Loading && !svm.Reflowing) {
- if (_svm.CacheEnabled) {
- e.Graphics.InterpolationMode = InterpolationMode.HighQualityBilinear;
- var img = _svm.GetCachedSheet(e.Graphics, CurrentSheet);
- //e.Graphics.DrawImage(img,
- // new Rectangle((int)svm.PrintableArea.Left, (int)svm.PrintableArea.Top, (int)(img.Width), (int)(img.Height)),
- // 0F, 0F, img.Width, img.Height,
- // GraphicsUnit.Pixel);
- e.Graphics.DrawImageUnscaledAndClipped(img,
- new Rectangle(_svm.Bounds.Left, _svm.Bounds.Top, _svm.Bounds.Width, _svm.Bounds.Height));
- e.Graphics.Restore(state);
- }
- else {
- _svm.PrintSheet(e.Graphics, CurrentSheet);
- }
- //}
+ _svm.PrintSheet(e.Graphics, CurrentSheet);
}
e.Graphics.Restore(state);
}
- else {
- //e.Graphics.FillRectangle(Brushes.White, Rectangle.Inflate(ClientRectangle, -_pagePadding, -_pagePadding));
- }
// If we're zoomed, paint zoom factor
if (Zoom != 100) {
diff --git a/src/WinPrint.WinForms/WinPrint.WinForms.csproj b/src/WinPrint.WinForms/WinPrint.WinForms.csproj
index 1ceec5f..8acb6d2 100644
--- a/src/WinPrint.WinForms/WinPrint.WinForms.csproj
+++ b/src/WinPrint.WinForms/WinPrint.WinForms.csproj
@@ -12,7 +12,7 @@
winprint GUI
winprintgui
- 2.0.4.100
+ 2.0.4.101
Kindel Systems
winprint
Charlie Kindel
diff --git a/src/WinPrint.WinForms/WinPrint.WinForms.msbump b/src/WinPrint.WinForms/WinPrint.WinForms.msbump
index 4844542..fee6de8 100644
--- a/src/WinPrint.WinForms/WinPrint.WinForms.msbump
+++ b/src/WinPrint.WinForms/WinPrint.WinForms.msbump
@@ -1,7 +1,7 @@
{
Configurations: {
"Debug": {
- BumpRevision: false
+ BumpRevision: true
},
"Release": {
diff --git a/tools/generate-associations.js b/tools/generate-associations.js
index c005f22..85afaa6 100644
--- a/tools/generate-associations.js
+++ b/tools/generate-associations.js
@@ -1,11 +1,28 @@
-// Imports file-extension to langauge mapping from both
-// prismjs and lang-map and outputs a JSDON document that
+// Imports file-extension to language mapping from both
+// prismjs and lang-map and outputs a JSON document that
// follows the vscode schema for extension mapping.
// PrismJS language definitions trump for my solution.
const fs = require('fs');
var map = require('lang-map');
var components = require('prismjs/components.js');
+var {PythonShell} = require( 'python-shell');
+
+var options = {
+ mode: 'text',
+ pythonPath: 'C:\Python38',
+ pythonOptions: ['-u'],
+ scriptPath: 'C:\Python38\Lib\site-packages\pygments',
+ args: ['value1', 'value2', 'value3']
+};
+
+PythonShell.run('my_script.py', options, function (err, results) {
+ if (err)
+ throw err;
+ // Results is an array consisting of messages collected during execution
+ console.log('results: %j', results);
+});
+
// vscode files.associations is not an array. Use a dictionary instead.
var assocDict = {};
var languages = [];
@@ -58,7 +75,7 @@ for (var key in components.languages) {
});
}
- langTemp.aliases.forEach(a => {
+ langTemp.aliases.forEach(a => {
map.extensions(a).forEach(ext =>{
// Add it to the extensions for this langauge defn
if (extensions.find(element => element == '.' + ext) == undefined)
@@ -77,12 +94,12 @@ for (var key in components.languages) {
// create JSON doc conforming to vscode spec. associations is not an array
// languages is
-var output = {
+var output = {
'files.associations' : assocDict,
'languages' : languages
};
-var file = "../winforms/WinPrint.Core/Properties/languages.json";
+var file = "prism_languages.json";
fs.writeFile(file, JSON.stringify(output, null, ' '), function (err) {
if (err) {
return console.log(err);
diff --git a/tools/package-lock.json b/tools/package-lock.json
new file mode 100644
index 0000000..022cbae
--- /dev/null
+++ b/tools/package-lock.json
@@ -0,0 +1,65 @@
+{
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "clipboard": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.6.tgz",
+ "integrity": "sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg==",
+ "requires": {
+ "good-listener": "^1.2.2",
+ "select": "^1.1.2",
+ "tiny-emitter": "^2.0.0"
+ }
+ },
+ "delegate": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz",
+ "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw=="
+ },
+ "good-listener": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz",
+ "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=",
+ "requires": {
+ "delegate": "^3.1.2"
+ }
+ },
+ "lang-map": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/lang-map/-/lang-map-0.4.0.tgz",
+ "integrity": "sha1-3jiwd4Ogp9sLwILGxf9pxW41SrU=",
+ "requires": {
+ "language-map": "^1.1.0"
+ }
+ },
+ "language-map": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/language-map/-/language-map-1.4.0.tgz",
+ "integrity": "sha512-5XHMCqKQ/14VXwJTKZX7MZwsVyTrR0bwCsRBwrBq3nP4w7liMJiR0ixXgI29EF/T1/U6be8cYK2y0ibWW9kx2w=="
+ },
+ "prismjs": {
+ "version": "1.20.0",
+ "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.20.0.tgz",
+ "integrity": "sha512-AEDjSrVNkynnw6A+B1DsFkd6AVdTnp+/WoUixFRULlCLZVRZlVQMVWio/16jv7G1FscUxQxOQhWwApgbnxr6kQ==",
+ "requires": {
+ "clipboard": "^2.0.0"
+ }
+ },
+ "python-shell": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/python-shell/-/python-shell-1.0.8.tgz",
+ "integrity": "sha512-jMKagerg3alm6j+Prq5t/M3dTgEppy5vC6ns+LqAjfuHiT8olfK3PMokpqpeEcWEqvDnUcAOhp6SQzaLBtTzRw=="
+ },
+ "select": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz",
+ "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0="
+ },
+ "tiny-emitter": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz",
+ "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q=="
+ }
+ }
+}
diff --git a/tools/prism_languages.json b/tools/prism_languages.json
new file mode 100644
index 0000000..e69de29