Initial commit
Initial commit til Git. V2 er deployed
@@ -0,0 +1,74 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net5.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="5.0.0" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="12.0.1" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ESCPOS_NET\ESCPOS_NET.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Update="abe-lincoln.png">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="images\abe-lincoln.png">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="images\kitten.jpg">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="images\pd-logo-100.png">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="images\pd-logo-200.png">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="images\pd-logo-300.bmp">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="images\pd-logo-300.gif">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="images\pd-logo-300.jpg">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="images\pd-logo-300.png">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="images\pd-logo-400.png">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="images\pd-logo-500.png">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="images\pd-logo-600.png">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="images\pd-logo.png">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="images\pd-logo.svg">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="images\Portal_Companion_Cube.jpg">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="kitten.jpg">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="pd-logo.svg">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="test-files\output-juliogamasso.bin">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -0,0 +1,267 @@
|
||||
using ESCPOS_NET.Emitters;
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Linq;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using System.Threading;
|
||||
|
||||
namespace ESCPOS_NET.ConsoleTest
|
||||
{
|
||||
internal class Program
|
||||
{
|
||||
private static BasePrinter printer;
|
||||
private static ICommandEmitter e;
|
||||
|
||||
static void Main(string[] args)
|
||||
{
|
||||
|
||||
Console.WriteLine("Welcome to the ESCPOS_NET Test Application!");
|
||||
Console.Write("Would you like to see all debug messages? (y/n): ");
|
||||
var response = Console.ReadLine().Trim().ToLowerInvariant();
|
||||
var logLevel = LogLevel.Information;
|
||||
if (response.Length >= 1 && response[0] == 'y')
|
||||
{
|
||||
Console.WriteLine("Debugging enabled!");
|
||||
logLevel = LogLevel.Trace;
|
||||
}
|
||||
var factory = LoggerFactory.Create(b => b.AddConsole().SetMinimumLevel(logLevel));
|
||||
var logger = factory.CreateLogger<Program>();
|
||||
ESCPOS_NET.Logging.Logger = logger;
|
||||
|
||||
Console.WriteLine("1 ) Test Serial Port");
|
||||
Console.WriteLine("2 ) Test Network Printer");
|
||||
Console.Write("Choice: ");
|
||||
string comPort = "";
|
||||
string baudRate;
|
||||
string ip;
|
||||
string networkPort;
|
||||
response = Console.ReadLine();
|
||||
var valid = new List<string> { "1", "2" };
|
||||
if (!valid.Contains(response))
|
||||
{
|
||||
response = "1";
|
||||
}
|
||||
|
||||
int choice = int.Parse(response);
|
||||
|
||||
if (choice == 1)
|
||||
{
|
||||
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
||||
{
|
||||
while (!comPort.StartsWith("COM"))
|
||||
{
|
||||
Console.Write("COM Port (enter for default COM5): ");
|
||||
comPort = Console.ReadLine();
|
||||
if (string.IsNullOrWhiteSpace(comPort))
|
||||
{
|
||||
comPort = "COM5";
|
||||
}
|
||||
}
|
||||
Console.Write("Baud Rate (enter for default 115200): ");
|
||||
baudRate = Console.ReadLine();
|
||||
if (string.IsNullOrWhiteSpace(baudRate))
|
||||
{
|
||||
baudRate = "115200";
|
||||
}
|
||||
printer = new SerialPrinter(portName: comPort, baudRate: 115200);
|
||||
}
|
||||
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
|
||||
{
|
||||
Console.Write("File / virtual com path (eg. /dev/usb/lp0): ");
|
||||
comPort = Console.ReadLine();
|
||||
if (string.IsNullOrWhiteSpace(comPort))
|
||||
{
|
||||
comPort = "/dev/usb/lp0";
|
||||
}
|
||||
printer = new FilePrinter(filePath: comPort, false);
|
||||
}
|
||||
}
|
||||
else if (choice == 2)
|
||||
{
|
||||
Console.Write("IP Address (eg. 192.168.1.240): ");
|
||||
ip = Console.ReadLine();
|
||||
if (string.IsNullOrWhiteSpace(ip))
|
||||
{
|
||||
ip = "192.168.254.202";
|
||||
}
|
||||
Console.Write("TCP Port (enter for default 9100): ");
|
||||
networkPort = Console.ReadLine();
|
||||
if (string.IsNullOrWhiteSpace(networkPort))
|
||||
{
|
||||
networkPort = "9100";
|
||||
}
|
||||
printer = new NetworkPrinter(settings: new NetworkPrinterSettings() { ConnectionString = $"{ip}:{networkPort}" });
|
||||
}
|
||||
|
||||
bool monitor = false;
|
||||
Thread.Sleep(500);
|
||||
Console.Write("Turn on Live Status Back Monitoring? (y/n): ");
|
||||
response = Console.ReadLine().Trim().ToLowerInvariant();
|
||||
if (response.Length >= 1 && response[0] == 'y')
|
||||
{
|
||||
monitor = true;
|
||||
}
|
||||
|
||||
e = new EPSON();
|
||||
var testCases = new Dictionary<Option, string>()
|
||||
{
|
||||
{ Option.SingleLinePrinting, "Single Line Printing" },
|
||||
{ Option.MultiLinePrinting, "Multi-line Printing" },
|
||||
{ Option.LineSpacing, "Line Spacing" },
|
||||
{ Option.BarcodeStyles, "Barcode Styles" },
|
||||
{ Option.BarcodeTypes, "Barcode Types" },
|
||||
{ Option.TwoDimensionCodes, "2D Codes" },
|
||||
{ Option.TextStyles, "Text Styles" },
|
||||
{ Option.FullReceipt, "Full Receipt" },
|
||||
{ Option.CodePages, "Code Pages (Euro, Katakana, Etc)" },
|
||||
{ Option.Images, "Images" },
|
||||
{ Option.LegacyImages, "Legacy Images" },
|
||||
{ Option.LargeByteArrays, "Large Byte Arrays" },
|
||||
{ Option.CashDrawerPin2, "Cash Drawer Pin2" },
|
||||
{ Option.CashDrawerPin5, "Cash Drawer Pin5" },
|
||||
{ Option.Exit, "Exit" }
|
||||
|
||||
};
|
||||
while (true)
|
||||
{
|
||||
foreach (var item in testCases)
|
||||
{
|
||||
Console.WriteLine($"{(int)item.Key} : {item.Value}");
|
||||
}
|
||||
Console.Write("Execute Test: ");
|
||||
|
||||
if (!int.TryParse(Console.ReadLine(), out choice) || !Enum.IsDefined(typeof(Option), choice))
|
||||
{
|
||||
Console.WriteLine("Invalid entry. Please try again.");
|
||||
continue;
|
||||
}
|
||||
|
||||
var enumChoice = (Option)choice;
|
||||
if (enumChoice == Option.Exit)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Console.Clear();
|
||||
|
||||
if (monitor)
|
||||
{
|
||||
printer.Write(e.Initialize());
|
||||
printer.Write(e.Enable());
|
||||
printer.Write(e.EnableAutomaticStatusBack());
|
||||
}
|
||||
Setup(monitor);
|
||||
|
||||
printer?.Write(e.PrintLine($"== [ Start {testCases[enumChoice]} ] =="));
|
||||
|
||||
switch (enumChoice)
|
||||
{
|
||||
case Option.SingleLinePrinting:
|
||||
printer.Write(Tests.SingleLinePrinting(e));
|
||||
break;
|
||||
case Option.MultiLinePrinting:
|
||||
printer.Write(Tests.MultiLinePrinting(e));
|
||||
break;
|
||||
case Option.LineSpacing:
|
||||
printer.Write(Tests.LineSpacing(e));
|
||||
break;
|
||||
case Option.BarcodeStyles:
|
||||
printer.Write(Tests.BarcodeStyles(e));
|
||||
break;
|
||||
case Option.BarcodeTypes:
|
||||
printer.Write(Tests.BarcodeTypes(e));
|
||||
break;
|
||||
case Option.TwoDimensionCodes:
|
||||
printer.Write(Tests.TwoDimensionCodes(e));
|
||||
break;
|
||||
case Option.TextStyles:
|
||||
printer.Write(Tests.TextStyles(e));
|
||||
break;
|
||||
case Option.FullReceipt:
|
||||
printer.Write(Tests.Receipt(e));
|
||||
break;
|
||||
case Option.Images:
|
||||
printer.Write(Tests.Images(e, false));
|
||||
break;
|
||||
case Option.LegacyImages:
|
||||
printer.Write(Tests.Images(e, true));
|
||||
break;
|
||||
case Option.LargeByteArrays:
|
||||
try
|
||||
{
|
||||
printer.Write(Tests.TestLargeByteArrays(e));
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine($"Aborting print due to test failure. Exception: {e?.Message}, Stack Trace: {e?.GetBaseException()?.StackTrace}");
|
||||
}
|
||||
break;
|
||||
case Option.CashDrawerPin2:
|
||||
printer.Write(Tests.CashDrawerOpenPin2(e));
|
||||
break;
|
||||
case Option.CashDrawerPin5:
|
||||
printer.Write(Tests.CashDrawerOpenPin5(e));
|
||||
break;
|
||||
default:
|
||||
Console.WriteLine("Invalid entry.");
|
||||
break;
|
||||
}
|
||||
|
||||
Setup(monitor);
|
||||
printer?.Write(e.PrintLine($"== [ End {testCases[enumChoice]} ] =="));
|
||||
printer?.Write(e.PartialCutAfterFeed(5));
|
||||
|
||||
// TODO: also make an automatic runner that runs all tests (command line).
|
||||
}
|
||||
}
|
||||
|
||||
public enum Option
|
||||
{
|
||||
SingleLinePrinting = 1,
|
||||
MultiLinePrinting,
|
||||
LineSpacing,
|
||||
BarcodeStyles,
|
||||
BarcodeTypes,
|
||||
TwoDimensionCodes,
|
||||
TextStyles,
|
||||
FullReceipt,
|
||||
CodePages,
|
||||
Images,
|
||||
LegacyImages,
|
||||
LargeByteArrays,
|
||||
CashDrawerPin2,
|
||||
CashDrawerPin5,
|
||||
Exit = 99
|
||||
}
|
||||
|
||||
private static void StatusChanged(object sender, EventArgs ps)
|
||||
{
|
||||
var status = (PrinterStatusEventArgs)ps;
|
||||
if (status == null) { Console.WriteLine("Status was null - unable to read status from printer."); return; }
|
||||
Console.WriteLine($"Printer Online Status: {status.IsPrinterOnline}");
|
||||
Console.WriteLine(JsonConvert.SerializeObject(status));
|
||||
}
|
||||
private static bool _hasEnabledStatusMonitoring = false;
|
||||
|
||||
private static void Setup(bool enableStatusBackMonitoring)
|
||||
{
|
||||
if (printer != null)
|
||||
{
|
||||
// Only register status monitoring once.
|
||||
if (!_hasEnabledStatusMonitoring)
|
||||
{
|
||||
printer.StatusChanged += StatusChanged;
|
||||
_hasEnabledStatusMonitoring = true;
|
||||
}
|
||||
printer?.Write(e.Initialize());
|
||||
printer?.Write(e.Enable());
|
||||
if (enableStatusBackMonitoring)
|
||||
{
|
||||
printer.Write(e.EnableAutomaticStatusBack());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
using ESCPOS_NET.Emitters;
|
||||
using ESCPOS_NET.Utilities;
|
||||
|
||||
namespace ESCPOS_NET.ConsoleTest
|
||||
{
|
||||
public static partial class Tests
|
||||
{
|
||||
private const string websiteString = "https://github.com/lukevp/ESC-POS-.NET/";
|
||||
public static byte[][] TwoDimensionCodes(ICommandEmitter e) => new byte[][] {
|
||||
e.PrintLine("PDF417:"),
|
||||
e.Print2DCode(TwoDimensionCodeType.PDF417, websiteString),
|
||||
e.PrintLine(),
|
||||
|
||||
e.PrintLine("PDF417 (TINY):"),
|
||||
e.Print2DCode(TwoDimensionCodeType.PDF417, websiteString, Size2DCode.TINY),
|
||||
e.PrintLine(),
|
||||
|
||||
e.PrintLine("PDF417 (LARGE):"),
|
||||
e.Print2DCode(TwoDimensionCodeType.PDF417, websiteString, Size2DCode.LARGE),
|
||||
e.PrintLine(),
|
||||
|
||||
e.PrintLine("QRCODE MODEL 1:"),
|
||||
e.Print2DCode(TwoDimensionCodeType.QRCODE_MODEL1, websiteString),
|
||||
e.PrintLine(),
|
||||
|
||||
e.PrintLine("QRCODE MODEL 2:"),
|
||||
e.PrintQRCode(websiteString),
|
||||
e.PrintLine(),
|
||||
|
||||
e.PrintLine("QRCODE MICRO:"),
|
||||
e.Print2DCode(TwoDimensionCodeType.QRCODE_MICRO, "github.com/lukevp"),
|
||||
e.PrintLine(),
|
||||
|
||||
e.PrintLine("QRCODE MODEL 1 (TINY):"),
|
||||
e.Print2DCode(TwoDimensionCodeType.QRCODE_MODEL1, websiteString, Size2DCode.TINY),
|
||||
e.PrintLine(),
|
||||
|
||||
e.PrintLine("QRCODE MODEL 1 (LARGE):"),
|
||||
e.Print2DCode(TwoDimensionCodeType.QRCODE_MODEL1, websiteString, Size2DCode.LARGE),
|
||||
e.PrintLine()
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
using ESCPOS_NET.Emitters;
|
||||
using ESCPOS_NET.Utilities;
|
||||
|
||||
namespace ESCPOS_NET.ConsoleTest
|
||||
{
|
||||
|
||||
public static partial class Tests
|
||||
{
|
||||
public static byte[][] BarcodeStyles(ICommandEmitter e) => new byte[][] {
|
||||
//TODO: test all widths and put bar in front in label
|
||||
e.PrintLine("Thinnest Width:"),
|
||||
e.SetBarcodeHeightInDots(300),
|
||||
e.SetBarWidth(BarWidth.Thinnest),
|
||||
e.PrintBarcode(BarcodeType.UPC_A, "012345678905"),
|
||||
|
||||
e.PrintLine("Thin Width:"),
|
||||
e.SetBarcodeHeightInDots(300),
|
||||
e.SetBarWidth(BarWidth.Thin),
|
||||
e.PrintBarcode(BarcodeType.UPC_A, "012345678905"),
|
||||
|
||||
e.PrintLine("Default Width:"),
|
||||
e.SetBarcodeHeightInDots(300),
|
||||
e.SetBarWidth(BarWidth.Default),
|
||||
e.PrintBarcode(BarcodeType.UPC_A, "012345678905"),
|
||||
|
||||
e.PrintLine("Thicker Width:"),
|
||||
e.SetBarcodeHeightInDots(300),
|
||||
e.SetBarWidth(BarWidth.Thick),
|
||||
e.PrintBarcode(BarcodeType.UPC_A, "012345678905"),
|
||||
|
||||
e.PrintLine("Thickest Width:"),
|
||||
e.SetBarcodeHeightInDots(300),
|
||||
e.SetBarWidth(BarWidth.Thickest),
|
||||
e.PrintBarcode(BarcodeType.UPC_A, "012345678905"),
|
||||
|
||||
|
||||
e.PrintLine("Short (50 dots):"),
|
||||
e.SetBarcodeHeightInDots(50),
|
||||
e.SetBarWidth(BarWidth.Default),
|
||||
e.PrintBarcode(BarcodeType.UPC_A, "012345678905"),
|
||||
|
||||
e.PrintLine("Tall (255 dots):"),
|
||||
e.SetBarcodeHeightInDots(255),
|
||||
e.PrintBarcode(BarcodeType.UPC_A, "012345678905"),
|
||||
|
||||
e.PrintLine("Label Above:"),
|
||||
e.SetBarcodeHeightInDots(50),
|
||||
e.SetBarLabelPosition(BarLabelPrintPosition.Above),
|
||||
e.PrintBarcode(BarcodeType.UPC_A, "012345678905"),
|
||||
|
||||
e.PrintLine("Label Above and Below:"),
|
||||
e.SetBarLabelPosition(BarLabelPrintPosition.Both),
|
||||
e.PrintBarcode(BarcodeType.UPC_A, "012345678905"),
|
||||
|
||||
e.PrintLine("Label Below:"),
|
||||
e.SetBarLabelPosition(BarLabelPrintPosition.Below),
|
||||
e.PrintBarcode(BarcodeType.UPC_A, "012345678905"),
|
||||
|
||||
e.PrintLine("Font B Label Below:"),
|
||||
e.SetBarLabelFontB(true),
|
||||
e.PrintBarcode(BarcodeType.UPC_A, "012345678905")
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
using ESCPOS_NET.Emitters;
|
||||
using ESCPOS_NET.Utilities;
|
||||
|
||||
namespace ESCPOS_NET.ConsoleTest
|
||||
{
|
||||
|
||||
public static partial class Tests
|
||||
{
|
||||
public static byte[][] BarcodeTypes(ICommandEmitter e) => new byte[][] {
|
||||
e.SetBarcodeHeightInDots(600),
|
||||
e.SetBarWidth(BarWidth.Thinnest),
|
||||
e.SetBarLabelPosition(BarLabelPrintPosition.Below),
|
||||
|
||||
e.PrintLine("CODABAR_NW_7:"),
|
||||
e.PrintBarcode(BarcodeType.CODABAR_NW_7, "A31117013206375B"),
|
||||
|
||||
e.PrintLine("CODE128:"),
|
||||
e.PrintBarcode(BarcodeType.CODE128, "ESC_POS_NET"),
|
||||
e.PrintLine(),
|
||||
|
||||
e.PrintLine("CODE128 Type C:"),
|
||||
e.PrintBarcode(BarcodeType.CODE128, "123456789101", BarcodeCode.CODE_C),
|
||||
e.PrintLine(),
|
||||
|
||||
e.PrintLine("CODE39:"),
|
||||
e.PrintBarcode(BarcodeType.CODE39, "*ESC-POS-NET*"),
|
||||
e.PrintLine(),
|
||||
|
||||
e.PrintLine("CODE93:"),
|
||||
e.PrintBarcode(BarcodeType.CODE93, "*ESC_POS_NET*"),
|
||||
e.PrintLine(),
|
||||
|
||||
e.PrintLine("GS1_128:"),
|
||||
e.PrintBarcode(BarcodeType.GS1_128, "(01)9501234567890*"),
|
||||
e.PrintLine(),
|
||||
|
||||
e.PrintLine("GS1_DATABAR_EXPANDED:"),
|
||||
e.PrintBarcode(BarcodeType.GS1_DATABAR_EXPANDED, "0001234567890"),
|
||||
e.PrintLine(),
|
||||
|
||||
e.PrintLine("GS1_DATABAR_LIMITED:"),
|
||||
e.PrintBarcode(BarcodeType.GS1_DATABAR_LIMITED, "0001234567890"),
|
||||
e.PrintLine(),
|
||||
|
||||
e.PrintLine("GS1_DATABAR_OMNIDIRECTIONAL:"),
|
||||
e.PrintBarcode(BarcodeType.GS1_DATABAR_OMNIDIRECTIONAL, "0001234567890"),
|
||||
e.PrintLine(),
|
||||
|
||||
e.PrintLine("GS1_DATABAR_TRUNCATED:"),
|
||||
e.PrintBarcode(BarcodeType.GS1_DATABAR_TRUNCATED, "0001234567890"),
|
||||
e.PrintLine(),
|
||||
|
||||
e.PrintLine("ITF:"),
|
||||
e.PrintBarcode(BarcodeType.ITF, "1234567895"),
|
||||
e.PrintLine(),
|
||||
|
||||
e.PrintLine("JAN13_EAN13:"),
|
||||
e.PrintBarcode(BarcodeType.JAN13_EAN13, "5901234123457"),
|
||||
e.PrintLine(),
|
||||
|
||||
e.PrintLine("JAN8_EAN8:"),
|
||||
e.PrintBarcode(BarcodeType.JAN8_EAN8, "96385074"),
|
||||
e.PrintLine(),
|
||||
|
||||
e.PrintLine("UPC_A:"),
|
||||
e.PrintBarcode(BarcodeType.UPC_A, "042100005264"),
|
||||
e.PrintLine(),
|
||||
|
||||
e.PrintLine("UPC_E:"),
|
||||
e.PrintBarcode(BarcodeType.UPC_E, "425261"),
|
||||
e.PrintLine()
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
using ESCPOS_NET.Emitters;
|
||||
using ESCPOS_NET.Utilities;
|
||||
|
||||
namespace ESCPOS_NET.ConsoleTest
|
||||
{
|
||||
public static partial class Tests
|
||||
{
|
||||
public static byte[][] CashDrawerOpenPin2(ICommandEmitter e) => new byte[][] {
|
||||
e.CashDrawerOpenPin2()
|
||||
};
|
||||
|
||||
public static byte[][] CashDrawerOpenPin5(ICommandEmitter e) => new byte[][] {
|
||||
e.CashDrawerOpenPin5()
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
using ESCPOS_NET.Emitters;
|
||||
using ESCPOS_NET.Utilities;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
||||
namespace ESCPOS_NET.ConsoleTest
|
||||
{
|
||||
public static partial class Tests
|
||||
{
|
||||
public static byte[][] CodePages(ICommandEmitter e, CodePage codePage) {
|
||||
List<byte[]> test = new List<byte[]>();
|
||||
test.Add(e.LeftAlign());
|
||||
test.Add(e.PrintLine("Empty space = space or non-printable character."));
|
||||
test.Add(e.PrintLine("Each row represents the first hex digit."));
|
||||
test.Add(e.PrintLine("Each column represents the second hex digit."));
|
||||
test.Add(e.PrintLine("For example, row 7, column A, represents"));
|
||||
test.Add(e.PrintLine("the character with hex 0x7A."));
|
||||
test.Add(e.PrintLine());
|
||||
test.Add(e.PrintLine("Character Table for Code Page:"));
|
||||
test.Add(e.PrintLine(codePage + " (Page " + ((int)codePage) + ")"));
|
||||
test.Add(e.PrintLine("=========================="));
|
||||
test.Add(e.PrintLine());
|
||||
test.Add(e.PrintLine(" 0 1 2 3 4 5 6 7 8 9 A B C D E F "));
|
||||
// Set CodePage to test codepage.
|
||||
test.Add(e.CodePage(codePage));
|
||||
for (int d1 = 0; d1 < 0x10; d1++)
|
||||
{
|
||||
|
||||
var upperDigit = d1.ToString("x1").ToUpperInvariant();
|
||||
test.Add(e.Print(upperDigit + " "));
|
||||
for (int d2 = 0; d2 < 0x10; d2++)
|
||||
{
|
||||
var digit = d1 * 0x10 + d2;
|
||||
if (digit <= 0x20) digit = 0x20;
|
||||
test.Add(e.Print((char)digit + " "));
|
||||
}
|
||||
test.Add(e.PrintLine());
|
||||
}
|
||||
// Set CodePage back to default
|
||||
test.Add(e.CodePage(CodePage.PC437_USA_STANDARD_EUROPE_DEFAULT));
|
||||
test.Add(e.PrintLine());
|
||||
return test.ToArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
using ESCPOS_NET.Emitters;
|
||||
using ESCPOS_NET.Utilities;
|
||||
using System.IO;
|
||||
|
||||
namespace ESCPOS_NET.ConsoleTest
|
||||
{
|
||||
public static partial class Tests
|
||||
{
|
||||
public static byte[][] Images(ICommandEmitter e, bool isLegacy) => new byte[][] {
|
||||
e.CenterAlign(),
|
||||
e.PrintLine("Test PNG images with widths 100 - 600 px,"),
|
||||
e.PrintLine("at native resolution"),
|
||||
e.PrintLine("-- pd-logo-100.png --"),
|
||||
e.PrintImage(File.ReadAllBytes("images/pd-logo-100.png"), true, isLegacy),
|
||||
e.PrintLine("-- pd-logo-200.png --"),
|
||||
e.PrintImage(File.ReadAllBytes("images/pd-logo-200.png"), true, isLegacy),
|
||||
e.PrintLine("-- pd-logo-300.png --"),
|
||||
e.PrintImage(File.ReadAllBytes("images/pd-logo-300.png"), true, isLegacy),
|
||||
e.PrintLine("-- pd-logo-400.png --"),
|
||||
e.PrintImage(File.ReadAllBytes("images/pd-logo-400.png"), true, isLegacy),
|
||||
e.PrintLine("-- pd-logo-500.png --"),
|
||||
e.PrintImage(File.ReadAllBytes("images/pd-logo-500.png"), true, isLegacy),
|
||||
e.PrintLine("-- pd-logo-600.png --"),
|
||||
e.PrintImage(File.ReadAllBytes("images/pd-logo-600.png"), true, isLegacy),
|
||||
e.PrintLine("Test resizing 600 px image to 300px"),
|
||||
e.PrintLine("-- pd-logo-600.png /300 --"),
|
||||
e.PrintImage(File.ReadAllBytes("images/pd-logo-600.png"), true, isLegacy, 300),
|
||||
e.PrintLine("Test image with taller height than width"),
|
||||
e.PrintLine("-- abe-lincoln.png /300 --"),
|
||||
e.PrintImage(File.ReadAllBytes("images/abe-lincoln.png"), true, isLegacy, 300),
|
||||
e.PrintLine("Test 300px image resized to all remainders of 8,"),
|
||||
e.PrintLine("to ensure overflow checking"),
|
||||
e.PrintLine("-- pd-logo-300.png /296 (0 remainder) --"),
|
||||
e.PrintImage(File.ReadAllBytes("images/pd-logo-300.png"), true, isLegacy, 296),
|
||||
e.PrintLine("-- pd-logo-300.png /297 (1 remainder) --"),
|
||||
e.PrintImage(File.ReadAllBytes("images/pd-logo-300.png"), true, isLegacy, 297),
|
||||
e.PrintLine("-- pd-logo-300.png /298 (2 remainder) --"),
|
||||
e.PrintImage(File.ReadAllBytes("images/pd-logo-300.png"), true, isLegacy, 298),
|
||||
e.PrintLine("-- pd-logo-300.png /299 (3 remainder) --"),
|
||||
e.PrintImage(File.ReadAllBytes("images/pd-logo-300.png"), true, isLegacy, 299),
|
||||
e.PrintLine("-- pd-logo-300.png /300 (4 remainder) --"),
|
||||
e.PrintImage(File.ReadAllBytes("images/pd-logo-300.png"), true, isLegacy, 300),
|
||||
e.PrintLine("-- pd-logo-300.png /301 (5 remainder) --"),
|
||||
e.PrintImage(File.ReadAllBytes("images/pd-logo-300.png"), true, isLegacy, 301),
|
||||
e.PrintLine("-- pd-logo-300.png /302 (6 remainder) --"),
|
||||
e.PrintImage(File.ReadAllBytes("images/pd-logo-300.png"), true, isLegacy, 302),
|
||||
e.PrintLine("-- pd-logo-300.png /303 (7 remainder) --"),
|
||||
e.PrintImage(File.ReadAllBytes("images/pd-logo-300.png"), true, isLegacy, 303),
|
||||
e.PrintLine("Test 300px image in JPG format"),
|
||||
e.PrintLine("-- pd-logo-300.jpg --"),
|
||||
e.PrintImage(File.ReadAllBytes("images/pd-logo-300.jpg"), true, isLegacy),
|
||||
e.PrintLine("Test 300px image in BMP format"),
|
||||
e.PrintLine("-- pd-logo-300.jpg --"),
|
||||
e.PrintImage(File.ReadAllBytes("images/pd-logo-300.bmp"), true, isLegacy),
|
||||
e.PrintLine("Test 300px image in GIF format"),
|
||||
e.PrintLine("-- pd-logo-300.jpg --"),
|
||||
e.PrintImage(File.ReadAllBytes("images/pd-logo-300.gif"), true, isLegacy),
|
||||
e.PrintLine("Test full color image converted"),
|
||||
e.PrintLine("to black and white and interpolated"),
|
||||
e.PrintLine("-- kitten.jpg --"),
|
||||
e.PrintImage(File.ReadAllBytes("images/kitten.jpg"), true, isLegacy, 500),
|
||||
e.PrintLine("-- portal companion cube.jpg --"),
|
||||
e.PrintImage(File.ReadAllBytes("images/Portal_Companion_Cube.jpg"), true, isLegacy, 500)
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,105 @@
|
||||
using ESCPOS_NET.Emitters;
|
||||
using ESCPOS_NET.Utilities;
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
namespace ESCPOS_NET.ConsoleTest
|
||||
{
|
||||
public static partial class Tests
|
||||
{
|
||||
public static byte[] TestLargeByteArrays(ICommandEmitter e)
|
||||
{
|
||||
var kitten = e.PrintImage(File.ReadAllBytes("images/kitten.jpg"), true, true, 500);
|
||||
var cube = e.PrintImage(File.ReadAllBytes("images/Portal_Companion_Cube.jpg"), true, true, 500);
|
||||
var expectedResult = ByteSplicer.Combine(
|
||||
e.CenterAlign(),
|
||||
kitten,
|
||||
cube,
|
||||
kitten,
|
||||
cube,
|
||||
kitten,
|
||||
cube,
|
||||
kitten,
|
||||
cube,
|
||||
kitten,
|
||||
cube,
|
||||
kitten,
|
||||
cube,
|
||||
kitten,
|
||||
cube,
|
||||
kitten,
|
||||
cube,
|
||||
kitten,
|
||||
cube,
|
||||
kitten,
|
||||
cube
|
||||
);
|
||||
MemoryPrinter mp = new MemoryPrinter();
|
||||
mp.Write(expectedResult);
|
||||
var response = mp.GetAllData();
|
||||
bool hasErrors = false;
|
||||
if (expectedResult.Length != response.Length)
|
||||
{
|
||||
Console.WriteLine($"Error: MemoryPrinter length mismatch - ${response.Length}, expected ${expectedResult.Length}");
|
||||
hasErrors = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < expectedResult.Length; i++)
|
||||
{
|
||||
if (expectedResult[i] != response[i])
|
||||
{
|
||||
Console.WriteLine($"Error: MemoryPrinter data mismatch - ${expectedResult[i]}, expected ${response[i]}, at location ${i}");
|
||||
hasErrors = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!hasErrors)
|
||||
{
|
||||
Console.WriteLine("MemoryPrinter: ALL OK!");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("MemoryPrinter: Errors occured during testing, aborting!");
|
||||
throw new ArgumentException();
|
||||
}
|
||||
|
||||
Random r = new Random();
|
||||
var filename = $"{r.NextDouble().ToString()}.tmp";
|
||||
using (FilePrinter fp = new FilePrinter(filename, true))
|
||||
{
|
||||
fp.Write(expectedResult);
|
||||
}
|
||||
response = File.ReadAllBytes(filename);
|
||||
hasErrors = false;
|
||||
if (expectedResult.Length != response.Length)
|
||||
{
|
||||
Console.WriteLine($"Error: FilePrinter length mismatch - ${response.Length}, expected ${expectedResult.Length}");
|
||||
hasErrors = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < expectedResult.Length; i++)
|
||||
{
|
||||
if (expectedResult[i] != response[i])
|
||||
{
|
||||
Console.WriteLine($"Error: FilePrinter data mismatch - ${expectedResult[i]}, expected ${response[i]}, at location ${i}");
|
||||
hasErrors = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!hasErrors)
|
||||
{
|
||||
Console.WriteLine("FilePrinter: ALL OK!");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("FilePrinter: Errors occured during testing, aborting!");
|
||||
throw new ArgumentException();
|
||||
}
|
||||
|
||||
return expectedResult;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
using ESCPOS_NET.Emitters;
|
||||
using ESCPOS_NET.Utilities;
|
||||
|
||||
namespace ESCPOS_NET.ConsoleTest
|
||||
{
|
||||
public static partial class Tests
|
||||
{
|
||||
public static byte[][] LineSpacing(ICommandEmitter e) => new byte[][] {
|
||||
e.SetLineSpacingInDots(200),
|
||||
e.PrintLine("This is the default spacing."),
|
||||
e.SetLineSpacingInDots(15),
|
||||
e.PrintLine("This has 200 dots of spacing above."),
|
||||
e.ResetLineSpacing(),
|
||||
e.PrintLine("This has 15 dots of spacing above."),
|
||||
e.PrintLine("This has the default spacing.")
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
using ESCPOS_NET.Emitters;
|
||||
using ESCPOS_NET.Utilities;
|
||||
|
||||
namespace ESCPOS_NET.ConsoleTest
|
||||
{
|
||||
public static partial class Tests
|
||||
{
|
||||
public static byte[][] MultiLinePrinting(ICommandEmitter e) => new byte[][] {
|
||||
e.Print("Multiline Test: Windows...\r\nOSX...\rUnix...\n"),
|
||||
//TODO: sanitize test.
|
||||
e.PrintLine("Feeding 250 dots."),
|
||||
e.FeedDots(250),
|
||||
e.PrintLine("Feeding 3 lines."),
|
||||
e.FeedLines(3),
|
||||
e.PrintLine("Done Feeding."),
|
||||
e.PrintLine("Reverse Feeding 6 lines."),
|
||||
e.FeedLinesReverse(6),
|
||||
e.PrintLine("Done Reverse Feeding.")
|
||||
};
|
||||
|
||||
public static byte[][] SingleLinePrinting(ICommandEmitter e) => new byte[][] {
|
||||
e.Print("Single Test Line Of Text\r\n"),
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
using ESCPOS_NET.Emitters;
|
||||
using ESCPOS_NET.Utilities;
|
||||
using System.IO;
|
||||
|
||||
namespace ESCPOS_NET.ConsoleTest
|
||||
{
|
||||
public static partial class Tests
|
||||
{
|
||||
public static byte[][] Receipt(ICommandEmitter e) => new byte[][] {
|
||||
e.CenterAlign(),
|
||||
e.PrintImage(File.ReadAllBytes("images/pd-logo-300.png"), true),
|
||||
e.PrintLine(),
|
||||
e.SetBarcodeHeightInDots(360),
|
||||
e.SetBarWidth(BarWidth.Default),
|
||||
e.SetBarLabelPosition(BarLabelPrintPosition.None),
|
||||
e.PrintBarcode(BarcodeType.ITF, "0123456789"),
|
||||
e.PrintLine("B&H PHOTO & VIDEO"),
|
||||
e.PrintLine("420 NINTH AVE."),
|
||||
e.PrintLine("NEW YORK, NY 10001"),
|
||||
e.PrintLine("(212) 502-6380 - (800)947-9975"),
|
||||
e.SetStyles(PrintStyle.Underline),
|
||||
e.PrintLine("www.bhphotovideo.com"),
|
||||
e.SetStyles(PrintStyle.None),
|
||||
e.PrintLine(),
|
||||
e.LeftAlign(),
|
||||
e.PrintLine("Order: 123456789 Date: 02/01/19"),
|
||||
e.PrintLine(),
|
||||
e.PrintLine(),
|
||||
e.SetStyles(PrintStyle.FontB),
|
||||
e.PrintLine("1 TRITON LOW-NOISE IN-LINE MICROPHONE PREAMP"),
|
||||
e.PrintLine(" TRFETHEAD/FETHEAD 89.95 89.95"),
|
||||
e.PrintLine("----------------------------------------------------------------"),
|
||||
e.RightAlign(),
|
||||
e.PrintLine("SUBTOTAL 89.95"),
|
||||
e.PrintLine("Total Order: 89.95"),
|
||||
e.PrintLine("Total Payment: 89.95"),
|
||||
e.PrintLine(),
|
||||
e.LeftAlign(),
|
||||
e.SetStyles(PrintStyle.Bold | PrintStyle.FontB),
|
||||
e.PrintLine("SOLD TO: SHIP TO:"),
|
||||
e.SetStyles(PrintStyle.FontB),
|
||||
e.PrintLine(" LUKE PAIREEPINART LUKE PAIREEPINART"),
|
||||
e.PrintLine(" 123 FAKE ST. 123 FAKE ST."),
|
||||
e.PrintLine(" DECATUR, IL 12345 DECATUR, IL 12345"),
|
||||
e.PrintLine(" (123)456-7890 (123)456-7890"),
|
||||
e.PrintLine(" CUST: 87654321"),
|
||||
e.PrintLine(),
|
||||
e.PrintLine()
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
using ESCPOS_NET.Emitters;
|
||||
using ESCPOS_NET.Utilities;
|
||||
|
||||
namespace ESCPOS_NET.ConsoleTest
|
||||
{
|
||||
|
||||
public static partial class Tests
|
||||
{
|
||||
public static byte[][] TextStyles(ICommandEmitter e) => new byte[][] {
|
||||
e.SetStyles(PrintStyle.None),
|
||||
e.Print("Default: The quick brown fox jumped over the lazy dogs.\n"),
|
||||
e.SetStyles(PrintStyle.FontB),
|
||||
e.Print("Font B: The quick brown fox jumped over the lazy dogs.\n"),
|
||||
e.SetStyles(PrintStyle.Bold),
|
||||
e.Print("Bold: The quick brown fox jumped over the lazy dogs.\n"),
|
||||
e.SetStyles(PrintStyle.Underline),
|
||||
e.Print("Underline: The quick brown fox jumped over the lazy dogs.\n"),
|
||||
e.SetStyles(PrintStyle.DoubleWidth),
|
||||
e.Print("DoubleWidth: The quick brown fox jumped over the lazy dogs.\n"),
|
||||
e.SetStyles(PrintStyle.DoubleHeight),
|
||||
e.Print("DoubleHeight: The quick brown fox jumped over the lazy dogs.\n"),
|
||||
e.SetStyles(PrintStyle.FontB | PrintStyle.DoubleHeight | PrintStyle.DoubleWidth | PrintStyle.Underline | PrintStyle.Bold),
|
||||
e.Print("All Styles: The quick brown fox jumped over the lazy dogs.\n"),
|
||||
e.SetStyles(PrintStyle.None),
|
||||
e.ReverseMode(true),
|
||||
e.PrintLine("REVERSE MODE: The quick brown fox jumped over the lazy dogs."),
|
||||
e.SetStyles(PrintStyle.FontB | PrintStyle.DoubleHeight | PrintStyle.DoubleWidth),
|
||||
e.PrintLine("REVERSE MODE: The quick brown fox jumped over the lazy dogs."),
|
||||
e.SetStyles(PrintStyle.None),
|
||||
e.ReverseMode(false),
|
||||
e.SetStyles(PrintStyle.None),
|
||||
e.RightCharacterSpacing(5),
|
||||
e.PrintLine("Right space 5: The quick brown fox jumped over the lazy dogs."),
|
||||
e.RightCharacterSpacing(0),
|
||||
e.SetStyles(PrintStyle.None),
|
||||
e.UpsideDownMode(true),
|
||||
e.PrintLine("Upside Down Mode: The quick brown fox jumped over the lazy dogs."),
|
||||
e.UpsideDownMode(false)
|
||||
};
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 3.6 KiB |
|
After Width: | Height: | Size: 7.6 KiB |
|
After Width: | Height: | Size: 84 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 27 KiB |
@@ -0,0 +1,172 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
|
||||
<svg
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:ns1="http://sozi.baierouge.fr"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
id="Layer_1"
|
||||
sodipodi:docname="public-domain-logo-slightly-nicer.svg"
|
||||
enable-background="new 0.995 1.495 88 31"
|
||||
xml:space="preserve"
|
||||
viewBox="0.995 1.495 671.6875 215.625"
|
||||
version="1.1"
|
||||
y="0px"
|
||||
x="0px"
|
||||
inkscape:version="0.48.3.1 r9886"
|
||||
><sodipodi:namedview
|
||||
id="namedview43"
|
||||
fit-margin-left="0"
|
||||
inkscape:zoom="0.3"
|
||||
borderopacity="1"
|
||||
inkscape:current-layer="Layer_1"
|
||||
inkscape:cx="450.19344"
|
||||
inkscape:cy="-104.995"
|
||||
inkscape:window-maximized="1"
|
||||
showgrid="false"
|
||||
fit-margin-right="0"
|
||||
bordercolor="#666666"
|
||||
inkscape:window-x="0"
|
||||
guidetolerance="10"
|
||||
objecttolerance="10"
|
||||
inkscape:window-y="24"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
pagecolor="#ffffff"
|
||||
gridtolerance="10"
|
||||
inkscape:window-height="1124"
|
||||
showborder="false"
|
||||
fit-margin-top="0"
|
||||
/>
|
||||
<g
|
||||
id="g4285"
|
||||
transform="translate(-224.16 380.12)"
|
||||
><rect
|
||||
id="rect3914-6"
|
||||
style="stroke-linejoin:round;fill-rule:evenodd;stroke:#000000;stroke-linecap:round;stroke-width:4.9835;fill:#ffffff"
|
||||
rx="16.992"
|
||||
ry="13.212"
|
||||
height="210.65"
|
||||
width="666.71"
|
||||
y="-376.14"
|
||||
x="227.64"
|
||||
/><path
|
||||
id="path11-9-3-7"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m411.62-355.34c25.35 19.694 41.867 51.242 41.874 86.922-0.008 32.459-13.679 61.507-35.231 81.323h457.33v-168.24h-463.97z"
|
||||
/><g
|
||||
id="g15-9-3-0"
|
||||
transform="matrix(8.4847 0 0 8.4847 226.81 -409.82)"
|
||||
><path
|
||||
id="path17-8-7-0"
|
||||
style="fill:#ffffff"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m36.739 8.557c0.392 0 0.728 0.059 1.002 0.173 0.276 0.116 0.5 0.268 0.674 0.456 0.173 0.189 0.299 0.405 0.379 0.647 0.079 0.241 0.118 0.493 0.118 0.753 0 0.253-0.039 0.503-0.118 0.749-0.08 0.244-0.206 0.462-0.379 0.65-0.174 0.188-0.397 0.341-0.674 0.456-0.274 0.115-0.61 0.173-1.002 0.173h-1.452v2.267h-1.382v-6.324h2.834zm-0.379 2.976c0.158 0 0.312-0.012 0.457-0.035 0.147-0.023 0.276-0.069 0.388-0.137 0.111-0.068 0.201-0.164 0.269-0.288s0.101-0.287 0.101-0.487c0-0.201-0.033-0.363-0.101-0.488-0.067-0.123-0.157-0.22-0.269-0.286-0.111-0.069-0.24-0.114-0.388-0.138-0.146-0.024-0.299-0.036-0.457-0.036h-1.073v1.896l1.073-0.001z"
|
||||
/><path
|
||||
id="path19-2-5-5"
|
||||
style="fill:#ffffff"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m44.751 14.398c-0.476 0.417-1.133 0.625-1.972 0.625-0.851 0-1.509-0.207-1.976-0.62-0.466-0.413-0.699-1.052-0.699-1.913v-3.933h1.381v3.934c0 0.171 0.016 0.339 0.045 0.506 0.029 0.165 0.091 0.311 0.185 0.438 0.094 0.125 0.225 0.229 0.392 0.309s0.392 0.119 0.673 0.119c0.493 0 0.833-0.109 1.021-0.332 0.188-0.221 0.282-0.568 0.282-1.04v-3.934h1.382v3.934c-0.001 0.855-0.239 1.491-0.714 1.907z"
|
||||
/><path
|
||||
id="path21-0-4-6"
|
||||
style="fill:#ffffff"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m50.069 8.557c0.301 0 0.572 0.027 0.817 0.081 0.246 0.053 0.459 0.14 0.636 0.26 0.176 0.121 0.312 0.282 0.407 0.483 0.099 0.201 0.146 0.45 0.146 0.745 0 0.318-0.071 0.584-0.217 0.796-0.144 0.212-0.355 0.388-0.637 0.522 0.387 0.112 0.676 0.309 0.865 0.589 0.191 0.281 0.286 0.619 0.286 1.015 0 0.319-0.062 0.595-0.185 0.829-0.123 0.232-0.289 0.422-0.498 0.57-0.207 0.148-0.445 0.257-0.713 0.328-0.269 0.07-0.541 0.105-0.822 0.105h-3.044v-6.323h2.959zm-0.173 2.56c0.246 0 0.447-0.059 0.606-0.178 0.157-0.118 0.237-0.309 0.237-0.576 0-0.147-0.026-0.269-0.08-0.362-0.053-0.095-0.122-0.168-0.211-0.222-0.088-0.053-0.188-0.09-0.303-0.109-0.115-0.022-0.233-0.032-0.356-0.032h-1.294v1.479h1.401zm0.078 2.685c0.135 0 0.264-0.014 0.387-0.04 0.125-0.026 0.231-0.072 0.326-0.133 0.094-0.062 0.168-0.147 0.227-0.254 0.056-0.104 0.083-0.241 0.083-0.406 0-0.325-0.093-0.557-0.271-0.696-0.184-0.138-0.425-0.208-0.724-0.208h-1.505v1.737h1.477z"
|
||||
/><path
|
||||
id="path23-9-1-0"
|
||||
style="fill:#ffffff"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m55.142 8.557v5.155h3.062v1.169h-4.444v-6.324h1.382z"
|
||||
/><path
|
||||
id="path25-4-8-8"
|
||||
style="fill:#ffffff"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m60.748 8.557v6.324h-1.382v-6.324h1.382z"
|
||||
/><path
|
||||
id="path27-9-0-7"
|
||||
style="fill:#ffffff"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m66.45 10.244c-0.082-0.132-0.184-0.248-0.307-0.349-0.125-0.101-0.265-0.179-0.421-0.235-0.153-0.057-0.315-0.085-0.487-0.085-0.312 0-0.574 0.062-0.791 0.183-0.217 0.12-0.396 0.283-0.527 0.486-0.137 0.204-0.232 0.436-0.296 0.695-0.062 0.26-0.093 0.529-0.093 0.806 0 0.267 0.031 0.525 0.093 0.776s0.159 0.477 0.296 0.677c0.134 0.201 0.311 0.361 0.527 0.483 0.217 0.12 0.479 0.181 0.791 0.181 0.424 0 0.754-0.129 0.99-0.389s0.383-0.602 0.437-1.028h1.337c-0.034 0.396-0.126 0.753-0.271 1.072-0.146 0.318-0.34 0.591-0.58 0.815s-0.521 0.395-0.846 0.513c-0.322 0.119-0.678 0.178-1.064 0.178-0.48 0-0.914-0.084-1.299-0.252-0.383-0.17-0.709-0.399-0.972-0.696-0.265-0.295-0.468-0.641-0.606-1.04-0.143-0.399-0.213-0.829-0.213-1.29 0-0.472 0.07-0.91 0.213-1.314 0.141-0.404 0.344-0.757 0.606-1.058 0.263-0.302 0.589-0.537 0.972-0.709 0.385-0.172 0.816-0.258 1.299-0.258 0.347 0 0.675 0.051 0.98 0.15 0.309 0.102 0.583 0.248 0.827 0.439 0.243 0.191 0.444 0.43 0.603 0.713 0.16 0.283 0.258 0.608 0.301 0.974h-1.339c-0.024-0.159-0.078-0.305-0.16-0.438z"
|
||||
/><path
|
||||
id="path29-7-0-4"
|
||||
style="fill:#ffffff"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m36.615 17.415c0.405 0 0.782 0.064 1.131 0.193 0.35 0.131 0.651 0.326 0.906 0.586s0.455 0.584 0.599 0.975c0.144 0.389 0.216 0.848 0.216 1.372 0 0.462-0.059 0.888-0.176 1.274-0.118 0.391-0.295 0.728-0.532 1.012-0.238 0.283-0.534 0.506-0.89 0.668-0.354 0.162-0.772 0.244-1.254 0.244h-2.71v-6.324h2.71zm-0.096 5.154c0.199 0 0.393-0.031 0.581-0.097s0.354-0.174 0.502-0.323c0.146-0.151 0.264-0.349 0.352-0.59 0.088-0.242 0.132-0.537 0.132-0.887 0-0.316-0.031-0.605-0.093-0.863-0.062-0.257-0.162-0.478-0.304-0.658-0.141-0.186-0.326-0.324-0.559-0.422-0.231-0.099-0.517-0.146-0.858-0.146h-0.984v3.984h1.231v0.002z"
|
||||
/><path
|
||||
id="path31-9-8-2"
|
||||
style="fill:#ffffff"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m40.8 19.289c0.141-0.405 0.344-0.759 0.606-1.06 0.265-0.304 0.589-0.537 0.973-0.709 0.385-0.172 0.816-0.258 1.298-0.258 0.487 0 0.921 0.086 1.303 0.258 0.383 0.172 0.705 0.405 0.969 0.709 0.265 0.301 0.467 0.652 0.605 1.06 0.143 0.403 0.213 0.843 0.213 1.313 0 0.461-0.07 0.892-0.213 1.288-0.141 0.397-0.343 0.746-0.605 1.041-0.264 0.296-0.586 0.526-0.969 0.694-0.382 0.168-0.814 0.253-1.303 0.253-0.481 0-0.913-0.085-1.298-0.253-0.384-0.168-0.708-0.398-0.973-0.694-0.263-0.295-0.466-0.644-0.606-1.041-0.141-0.396-0.211-0.827-0.211-1.288 0-0.47 0.07-0.91 0.211-1.313zm1.262 2.089c0.062 0.252 0.16 0.479 0.295 0.68 0.135 0.199 0.312 0.36 0.527 0.48 0.218 0.121 0.481 0.184 0.792 0.184 0.312 0 0.576-0.062 0.792-0.184 0.219-0.12 0.395-0.281 0.529-0.48 0.134-0.201 0.232-0.428 0.295-0.68 0.062-0.25 0.092-0.509 0.092-0.773 0-0.276-0.029-0.547-0.092-0.807-0.062-0.261-0.161-0.49-0.295-0.695-0.137-0.203-0.312-0.365-0.529-0.486-0.216-0.12-0.48-0.182-0.792-0.182-0.311 0-0.574 0.062-0.792 0.182-0.216 0.121-0.393 0.283-0.527 0.486-0.135 0.205-0.233 0.437-0.295 0.695s-0.093 0.527-0.093 0.807c0.001 0.264 0.032 0.523 0.093 0.773z"
|
||||
/><path
|
||||
id="path33-4-9-1"
|
||||
style="fill:#ffffff"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m50.092 17.415 1.47 4.35h0.021l1.391-4.35h1.944v6.324h-1.294v-4.482h-0.019l-1.541 4.482h-1.062l-1.54-4.438h-0.019v4.438h-1.295v-6.324h1.944z"
|
||||
/><path
|
||||
id="path35-8-7-3"
|
||||
style="fill:#ffffff"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m59.765 17.415 2.35 6.324h-1.436l-0.475-1.408h-2.35l-0.494 1.408h-1.392l2.377-6.324h1.42zm0.079 3.88-0.793-2.321h-0.019l-0.816 2.321h1.628z"
|
||||
/><path
|
||||
id="path37-6-1-3"
|
||||
style="fill:#ffffff"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m64.547 17.415v6.324h-1.382v-6.324h1.382z"
|
||||
/><path
|
||||
id="path39-3-0-1"
|
||||
style="fill:#ffffff"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m67.603 17.415 2.623 4.242h0.018v-4.242h1.295v6.324h-1.383l-2.613-4.234h-0.018v4.234h-1.295v-6.324h1.373z"
|
||||
/></g
|
||||
><path
|
||||
id="path3912-1-5"
|
||||
d="m336.08-360.91c-51.67 0-93.562 40.444-93.562 90.336 0 49.885 41.892 90.336 93.57 90.336 51.67 0 93.562-40.452 93.562-90.336-0.008-49.893-41.9-90.336-93.57-90.336z"
|
||||
style="stroke:#000000;stroke-width:10.267;fill:none"
|
||||
inkscape:connector-curvature="0"
|
||||
/><path
|
||||
id="path27-9-4-1-6"
|
||||
d="m359.71-299.7c-1.4695-2.3655-3.2974-4.4444-5.5016-6.2543-2.2401-1.81-4.7489-3.2077-7.5445-4.2113-2.7418-1.0215-5.645-1.5232-8.7273-1.5232-5.5912 0-10.286 1.111-14.175 3.2794-3.8887 2.1505-7.0965 5.0715-9.444 8.7094-2.4552 3.6558-4.1576 7.8133-5.3045 12.455-1.1111 4.6593-1.6666 9.4799-1.6666 14.444 0 4.7848 0.55549 9.4082 1.6666 13.906 1.1111 4.498 2.8494 8.5481 5.3045 12.132 2.4013 3.602 5.5732 6.4693 9.444 8.6556 3.8888 2.1505 8.5839 3.2436 14.175 3.2436 7.5983 0 13.512-2.3117 17.741-6.9711 4.2293-4.6593 6.8635-10.788 7.8313-18.422h23.96c-0.60926 7.0965-2.258 13.494-4.8564 19.211-2.6164 5.6987-6.093 10.591-10.394 14.605-4.3009 4.0142-9.3366 7.0786-15.161 9.1933-5.7704 2.1325-12.15 3.1898-19.067 3.1898-8.6019 0-16.379-1.5053-23.279-4.5159-6.8635-3.0465-12.706-7.1503-17.419-12.473-4.749-5.2866-8.3868-11.487-10.86-18.637-2.5626-7.1503-3.817-14.856-3.817-23.117 0-8.4585 1.2544-16.308 3.817-23.547 2.5268-7.2399 6.1647-13.566 10.86-18.96 4.7131-5.412 10.555-9.6233 17.419-12.706 6.8994-3.0823 14.623-4.6235 23.279-4.6235 6.2184 0 12.096 0.91395 17.562 2.6881 5.5374 1.8279 10.448 4.4443 14.82 7.8671 4.3547 3.4228 7.9568 7.7058 10.806 12.777 2.8672 5.0715 4.6235 10.896 5.394 17.455h-23.996c-0.42988-2.8493-1.3978-5.4658-2.8673-7.8492z"
|
||||
style="fill:#000000"
|
||||
inkscape:connector-curvature="0"
|
||||
/><path
|
||||
id="path4039-5-1"
|
||||
d="m250.51-308.07 174.92 51.631"
|
||||
style="stroke-linejoin:round;stroke:#000000;stroke-linecap:round;stroke-width:10.267;fill:none"
|
||||
inkscape:connector-curvature="0"
|
||||
/></g
|
||||
><metadata
|
||||
><rdf:RDF
|
||||
><cc:Work
|
||||
><dc:format
|
||||
>image/svg+xml</dc:format
|
||||
><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage"
|
||||
/><cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/publicdomain/"
|
||||
/><dc:publisher
|
||||
><cc:Agent
|
||||
rdf:about="http://openclipart.org/"
|
||||
><dc:title
|
||||
>Openclipart</dc:title
|
||||
></cc:Agent
|
||||
></dc:publisher
|
||||
></cc:Work
|
||||
><cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/publicdomain/"
|
||||
><cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Reproduction"
|
||||
/><cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Distribution"
|
||||
/><cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#DerivativeWorks"
|
||||
/></cc:License
|
||||
></rdf:RDF
|
||||
></metadata
|
||||
></svg
|
||||
>
|
||||
|
After Width: | Height: | Size: 12 KiB |