meerk40t 0.9.7910__py2.py3-none-any.whl → 0.9.7940__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- meerk40t/balormk/controller.py +46 -13
- meerk40t/balormk/livelightjob.py +34 -7
- meerk40t/core/bindalias.py +12 -4
- meerk40t/core/cutcode/plotcut.py +2 -1
- meerk40t/core/elements/branches.py +35 -14
- meerk40t/core/elements/clipboard.py +10 -12
- meerk40t/core/elements/elements.py +23 -0
- meerk40t/core/elements/files.py +1 -1
- meerk40t/core/elements/geometry.py +48 -14
- meerk40t/core/elements/grid.py +56 -24
- meerk40t/core/elements/offset_clpr.py +2 -4
- meerk40t/core/elements/placements.py +17 -22
- meerk40t/core/elements/render.py +30 -11
- meerk40t/core/elements/shapes.py +206 -126
- meerk40t/core/node/effect_hatch.py +8 -7
- meerk40t/core/node/effect_warp.py +7 -2
- meerk40t/core/node/effect_wobble.py +8 -2
- meerk40t/core/node/op_image.py +79 -25
- meerk40t/core/spoolers.py +1 -1
- meerk40t/core/units.py +4 -0
- meerk40t/grbl/emulator.py +10 -8
- meerk40t/grbl/gcodejob.py +11 -3
- meerk40t/grbl/plugin.py +10 -1
- meerk40t/gui/help_assets/help_assets.py +402 -43
- meerk40t/gui/plugin.py +12 -0
- meerk40t/gui/tips.py +78 -41
- meerk40t/gui/wxmmain.py +99 -4
- meerk40t/lihuiyu/driver.py +46 -9
- meerk40t/main.py +1 -1
- meerk40t/ruida/emulator.py +13 -10
- meerk40t/ruida/plugin.py +5 -0
- meerk40t/ruida/rdjob.py +5 -5
- meerk40t/tools/geomstr.py +15 -0
- {meerk40t-0.9.7910.dist-info → meerk40t-0.9.7940.dist-info}/METADATA +1 -1
- {meerk40t-0.9.7910.dist-info → meerk40t-0.9.7940.dist-info}/RECORD +40 -40
- {meerk40t-0.9.7910.dist-info → meerk40t-0.9.7940.dist-info}/LICENSE +0 -0
- {meerk40t-0.9.7910.dist-info → meerk40t-0.9.7940.dist-info}/WHEEL +0 -0
- {meerk40t-0.9.7910.dist-info → meerk40t-0.9.7940.dist-info}/entry_points.txt +0 -0
- {meerk40t-0.9.7910.dist-info → meerk40t-0.9.7940.dist-info}/top_level.txt +0 -0
- {meerk40t-0.9.7910.dist-info → meerk40t-0.9.7940.dist-info}/zip-safe +0 -0
@@ -259,6 +259,356 @@ russian_wordlist_howto = """
|
|
259
259
|
|
260
260
|
Для полного набора директив форматирования см.: https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior
|
261
261
|
"""
|
262
|
+
spanish_wordlist_howto = """
|
263
|
+
Las Listas de Palabras le permiten crear elementos de texto en su diseño que contienen texto de marcador de posición que se reemplaza en el momento de la grabación desde esta Lista de Palabras. Así puede grabar varios elementos con diferentes textos sin tener que cambiar su diseño cada vez.
|
264
|
+
|
265
|
+
Un marcador de posición consiste en un nombre dentro de llaves, por ejemplo '{NOMBRE}'. Utilice el nombre en el Editor de Listas de Palabras para asociarlo con el marcador de posición y este será reemplazado por el texto que ingrese en el Contenido de la Lista de Palabras asociada.
|
266
|
+
|
267
|
+
Por ejemplo, imagine que quiere crear un conjunto de etiquetas de reserva de asientos para una cena, cada una con el nombre de una persona diferente. Habiendo creado el contorno de la etiqueta, por ejemplo un rectángulo, use la herramienta de texto para crear un elemento de texto que contenga lo siguiente:
|
268
|
+
'Este asiento está reservado para {NOMBRE}'
|
269
|
+
|
270
|
+
Luego use el editor de Listas de Palabras para crear una o más entradas como sigue:
|
271
|
+
|-----------|------|-------|
|
272
|
+
| Nombre | Tipo | Índice|
|
273
|
+
|-----------|------|-------|
|
274
|
+
| nombre | Texto| 0 |
|
275
|
+
|-----------|------|-------|
|
276
|
+
Después haga clic en la fila 'nombre' y agregue varios elementos al panel de Contenidos, por ejemplo:
|
277
|
+
Pablo
|
278
|
+
David
|
279
|
+
Andy
|
280
|
+
Ahora, cuando ejecute la grabación, obtendrá etiquetas individuales con diferentes nombres, por ejemplo 'Este asiento está reservado para Andy'.
|
281
|
+
|
282
|
+
Puede usar tantos nombres de marcadores de posición como desee en los campos de texto de su diseño.
|
283
|
+
|
284
|
+
El valor 'Índice' en la tabla de la Lista de Palabras indica qué entrada de la lista de contenidos se usará a continuación, cero significa la primera entrada. El índice se incrementa automáticamente en uno al final de cada grabación.
|
285
|
+
|
286
|
+
Pero suponga que por eficiencia ahora quiere grabar dos etiquetas de reserva de asientos al mismo tiempo, cada una con un nombre diferente de la misma lista. En este caso, si la primera etiqueta usa '{NOMBRE#+0}' y la segunda '{NOMBRE#+1}' (note el signo más). '{NOMBRE}' o '{NOMBRE#+0}' usa la entrada actual (apuntada por el valor de Índice), '{NOMBRE#+1}' usa la siguiente entrada después de la actual, etc.
|
287
|
+
|
288
|
+
Con el uso anterior, puede usar estos valores tantas veces como desee en su diseño. Para avanzar el índice debe hacer clic en los botones Anterior / Siguiente en la barra de herramientas.
|
289
|
+
|
290
|
+
Como alternativa a ingresar manualmente los valores de la lista de palabras usando este editor, puede usar un archivo CSV estándar separado por comas. Los nombres de los marcadores de posición se definen en la línea de encabezado estándar del CSV (la primera línea del archivo CSV), y el contenido se toma de todas las líneas siguientes. La forma más fácil de crear un archivo CSV es usando una hoja de cálculo, por ejemplo Excel, aunque para sitios de comercio electrónico su sitio web podría crear automáticamente el archivo CSV a partir de los pedidos realizados en línea por los clientes.
|
291
|
+
|
292
|
+
Las entradas cargadas desde un archivo CSV se muestran como Tipo CSV, y puede establecer los valores de Índice para todas las entradas CSV al mismo tiempo.
|
293
|
+
|
294
|
+
Nota: Si su CSV no tiene una línea de encabezado, las columnas se llamarán 'column_1', 'column_2', etc.
|
295
|
+
|
296
|
+
La lista de palabras también contiene algunas entradas especiales (que pueden ser especialmente útiles para diseños de calibración):
|
297
|
+
* 'version' - Versión de Meerk40t
|
298
|
+
* 'date' - Fecha de inicio de la grabación
|
299
|
+
* 'time' - Hora de inicio de la grabación
|
300
|
+
* 'op_device' - Dispositivo en el que está grabando
|
301
|
+
* 'op_speed' - Velocidad de la operación actual
|
302
|
+
* 'op_power' - PPI de la operación actual
|
303
|
+
* 'op_dpi' - DPI de la operación actual (raster)
|
304
|
+
* 'op_passes' - Pasadas de la operación actual
|
305
|
+
|
306
|
+
Los marcadores de posición para 'date' y 'time' también pueden contener directivas de formato que le permiten formatearlos según sus convenciones locales, por ejemplo:
|
307
|
+
{date@%d.%m.%Y} - 31.12.2022
|
308
|
+
{time@%H:%M} - 23:59
|
309
|
+
|
310
|
+
Para un conjunto completo de directivas de formato, consulte: https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior
|
311
|
+
"""
|
312
|
+
chinese_wordlist_howto = """
|
313
|
+
单词列表允许您在设计中创建包含占位符文本的文本元素,这些占位符文本将在烧录时由该单词列表中的内容替换。这样,您可以在不每次更改设计的情况下烧录多个带有不同文本的项目。
|
314
|
+
|
315
|
+
占位符由大括号中的名称组成,例如“{FIRSTNAME}”。您可以在单词列表编辑器中使用该名称将其与占位符关联,占位符将被您在相关单词列表内容中输入的文本替换。
|
316
|
+
|
317
|
+
例如,假设您想为晚宴创建一组座位预留标签,每个标签上都有不同的名字。创建好标签轮廓(例如一个矩形)后,使用文本绘图工具创建一个包含如下内容的文本元素:
|
318
|
+
“此座位保留给{FIRSTNAME}”
|
319
|
+
|
320
|
+
然后,您可以使用单词列表编辑器创建一个或多个如下条目:
|
321
|
+
|-----------|------|-------|
|
322
|
+
| 名称 | 类型 | 索引 |
|
323
|
+
|-----------|------|-------|
|
324
|
+
| firstname | 文本 | 0 |
|
325
|
+
|-----------|------|-------|
|
326
|
+
然后点击“firstname”行,在内容面板中添加多个项目,例如:
|
327
|
+
保罗
|
328
|
+
大卫
|
329
|
+
安迪
|
330
|
+
现在,当您执行烧录时,您将获得带有不同名字的单独座位标签,例如“此座位保留给安迪”。
|
331
|
+
|
332
|
+
您可以在设计的文本字段中使用任意数量的不同占位符名称。
|
333
|
+
|
334
|
+
单词列表表中的“索引”值指示下一个将使用内容列表中的哪个条目,零表示第一个条目。每次烧录结束时,索引会自动加一。
|
335
|
+
|
336
|
+
但假设为了提高效率,您现在想同时烧录两个座位预留标签,每个标签都来自同一个列表但名字不同。在这种情况下,如果第一个标签使用“{NAME#+0}”,第二个使用“{NAME#+1}”(注意加号)。 “{NAME}”或“{NAME#+0}”使用当前条目(由索引值指向), “{NAME#+1}”使用当前条目之后的下一个条目,依此类推。
|
337
|
+
|
338
|
+
通过上述用法,您可以在设计中多次使用这些值。要推进索引,您需要点击工具栏上的上一个/下一个按钮。
|
339
|
+
|
340
|
+
除了使用此单词列表编辑器手动输入单词列表值外,您还可以使用标准逗号分隔的CSV文件。占位符名称在标准CSV头行(CSV文件的第一行)中定义,内容则取自所有后续行。创建CSV文件的最简单方法是使用电子表格(如Excel),当然对于电商网站,您的网站也可以根据客户在线下单自动创建CSV文件。
|
341
|
+
|
342
|
+
从CSV文件加载的条目显示为类型CSV,您可以同时为所有CSV条目设置索引值。
|
343
|
+
|
344
|
+
注意:如果您的CSV没有头行,列将被命名为“column_1”、“column_2”等。
|
345
|
+
|
346
|
+
单词列表还包含一些特殊条目(对于校准设计可能特别有用):
|
347
|
+
* 'version' - Meerk40t版本
|
348
|
+
* 'date' - 烧录开始日期
|
349
|
+
* 'time' - 烧录开始时间
|
350
|
+
* 'op_device' - 您正在烧录的设备
|
351
|
+
* 'op_speed' - 当前操作的速度
|
352
|
+
* 'op_power' - 当前操作的PPI
|
353
|
+
* 'op_dpi' - 当前(光栅)操作的DPI
|
354
|
+
* 'op_passes' - 当前操作的遍数
|
355
|
+
|
356
|
+
“date”和“time”的占位符还可以包含格式指令,允许您根据本地习惯对其进行格式化,例如:
|
357
|
+
{date@%Y.%m.%d} - 2022.12.31
|
358
|
+
{time@%H:%M} - 23:59
|
359
|
+
|
360
|
+
完整的格式指令请参见:https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior
|
361
|
+
"""
|
362
|
+
hungarian_wordlist_howto = """
|
363
|
+
A Szólisták lehetővé teszik, hogy a tervezésben olyan szövegelemeket hozzon létre, amelyek helyőrző szöveget tartalmaznak, és ezeket a szólistából származó tartalommal cseréli ki az égetés során. Így több elemet is égethet különböző szövegekkel anélkül, hogy minden alkalommal módosítania kellene a tervet.
|
364
|
+
|
365
|
+
A helyőrző egy név, amely kapcsos zárójelek között van, például '{KERESZTNÉV}'. A Szólista szerkesztőben ezt a nevet használja a helyőrzőhöz való társításhoz, és a helyőrzőt az Ön által a kapcsolódó Szólista tartalmába beírt szöveg váltja fel.
|
366
|
+
|
367
|
+
Például, ha vacsorához szeretne ülésfoglaló címkéket készíteni, mindegyiken más-más névvel, akkor hozzon létre egy névcímke körvonalat (például egy téglalapot), majd a Szöveg eszközzel hozzon létre egy szövegelemet, amely a következőt tartalmazza:
|
368
|
+
'Ez a hely {KERESZTNÉV} számára van fenntartva'
|
369
|
+
|
370
|
+
Ezután a Szólista szerkesztővel hozzon létre egy vagy több bejegyzést az alábbiak szerint:
|
371
|
+
|-----------|------|-------|
|
372
|
+
| Név | Típus| Index |
|
373
|
+
|-----------|------|-------|
|
374
|
+
| keresztnev| Szöveg| 0 |
|
375
|
+
|-----------|------|-------|
|
376
|
+
Ezután kattintson a 'keresztnev' sorra, és adjon hozzá több elemet a Tartalom panelhez, például:
|
377
|
+
Pál
|
378
|
+
Dávid
|
379
|
+
András
|
380
|
+
Most, amikor végrehajtja az égetést, egyedi helycímkéket kap, amelyek különböző neveket tartalmaznak, például 'Ez a hely András számára van fenntartva'.
|
381
|
+
|
382
|
+
A tervezés szövegmezőiben annyi különböző helyőrző nevet használhat, amennyit csak szeretne.
|
383
|
+
|
384
|
+
A Szólista táblázat 'Index' értéke azt jelzi, hogy a Tartalom listából melyik bejegyzést használja legközelebb, a nulla az első bejegyzést jelenti. Az index minden égetés végén automatikusan eggyel növekszik.
|
385
|
+
|
386
|
+
Ha azonban hatékonyság szempontjából most két ülésfoglaló címkét szeretne egyszerre égetni, mindegyik más-más névvel ugyanabból a listából, akkor az első címke '{NÉV#+0}', a második pedig '{NÉV#+1}' (figyelje a plusz jelet). A '{NÉV}' vagy '{NÉV#+0}' a jelenlegi bejegyzést használja (amelyre az Index érték mutat), a '{NÉV#+1}' a jelenlegi utáni következő bejegyzést stb.
|
387
|
+
|
388
|
+
A fenti használattal ezeket az értékeket annyiszor használhatja a tervezésben, ahányszor csak szeretné. Az index előrehaladásához kattintson az Előző/Következő gombokra az eszköztáron.
|
389
|
+
|
390
|
+
A szólista értékeit nemcsak manuálisan viheti be a Szólista szerkesztővel, hanem használhat szabványos, vesszővel elválasztott CSV-fájlt is. A helyőrző neveket a szabványos CSV-fejléc sorban (a CSV-fájl első sora) határozza meg, a tartalmat pedig az összes következő sorból veszi. A CSV-fájl létrehozásának legegyszerűbb módja egy táblázatkezelő, például az Excel használata, de például webáruházak esetén a weboldal automatikusan létrehozhatja a CSV-fájlt az online leadott rendelésekből.
|
391
|
+
|
392
|
+
A CSV-fájlból betöltött bejegyzések típusa CSV-ként jelenik meg, és az összes CSV-bejegyzés indexértékét egyszerre beállíthatja.
|
393
|
+
|
394
|
+
Megjegyzés: Ha a CSV-fájlban nincs fejlécsor, az oszlopokat 'column_1', 'column_2' stb. néven nevezi el.
|
395
|
+
|
396
|
+
A szólista néhány speciális bejegyzést is tartalmaz (amelyek különösen hasznosak lehetnek kalibrációs tervekhez):
|
397
|
+
* 'version' - Meerk40t verzió
|
398
|
+
* 'date' - Az égetés kezdési dátuma
|
399
|
+
* 'time' - Az égetés kezdési ideje
|
400
|
+
* 'op_device' - Az eszköz, amelyen éget
|
401
|
+
* 'op_speed' - Az aktuális művelet sebessége
|
402
|
+
* 'op_power' - Az aktuális művelet PPI-je
|
403
|
+
* 'op_dpi' - Az aktuális (raszteres) művelet DPI-je
|
404
|
+
* 'op_passes' - Az aktuális művelet átfutásai
|
405
|
+
|
406
|
+
A 'date' és 'time' helyőrzők formázási utasításokat is tartalmazhatnak, amelyek lehetővé teszik, hogy azokat a helyi szokásoknak megfelelően formázza, például:
|
407
|
+
{date@%Y.%m.%d} - 2022.12.31
|
408
|
+
{time@%H:%M} - 23:59
|
409
|
+
|
410
|
+
A formátumutasítások teljes készletéhez lásd: https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior
|
411
|
+
"""
|
412
|
+
portuguese_wordlist_howto = """
|
413
|
+
As Listas de Palavras permitem criar elementos de texto no seu design que contêm texto de espaço reservado, substituído no momento da gravação pelo conteúdo desta Lista de Palavras. Assim, pode gravar vários itens com textos diferentes sem ter de alterar o design de cada vez.
|
414
|
+
|
415
|
+
Um espaço reservado consiste num nome entre chavetas, por exemplo '{NOME}'. Utilize o nome no Editor de Listas de Palavras para o associar ao espaço reservado e este será substituído pelo texto que inserir no Conteúdo da Lista de Palavras associada.
|
416
|
+
|
417
|
+
Por exemplo, imagine que quer criar um conjunto de etiquetas de reserva de lugares para um jantar, cada uma com o nome de uma pessoa diferente. Depois de criar o contorno da etiqueta, por exemplo um retângulo, utilize a ferramenta de texto para criar um elemento de texto com o seguinte conteúdo:
|
418
|
+
'Este lugar está reservado para {NOME}'
|
419
|
+
|
420
|
+
Depois, utilize o editor de Listas de Palavras para criar uma ou mais entradas como segue:
|
421
|
+
|-----------|------|-------|
|
422
|
+
| Nome | Tipo | Índice|
|
423
|
+
|-----------|------|-------|
|
424
|
+
| nome | Texto| 0 |
|
425
|
+
|-----------|------|-------|
|
426
|
+
Depois clique na linha 'nome' e adicione vários itens ao painel de Conteúdo, por exemplo:
|
427
|
+
Paulo
|
428
|
+
David
|
429
|
+
Andy
|
430
|
+
Agora, ao executar a gravação, obterá etiquetas individuais com nomes diferentes, por exemplo 'Este lugar está reservado para Andy'.
|
431
|
+
|
432
|
+
Pode usar tantos nomes de espaços reservados quantos quiser nos campos de texto do seu design.
|
433
|
+
|
434
|
+
O valor 'Índice' na tabela da Lista de Palavras indica qual entrada da lista de conteúdos será usada a seguir, sendo zero a primeira entrada. O índice é automaticamente incrementado em um no final de cada gravação.
|
435
|
+
|
436
|
+
Mas suponha que, por eficiência, agora quer gravar duas etiquetas de reserva de lugares ao mesmo tempo, cada uma com um nome diferente da mesma lista. Neste caso, se a primeira etiqueta usar '{NOME#+0}' e a segunda '{NOME#+1}' (note o sinal de mais). '{NOME}' ou '{NOME#+0}' usa a entrada atual (apontada pelo valor do Índice), '{NOME#+1}' usa a próxima entrada após a atual, etc.
|
437
|
+
|
438
|
+
Com o uso acima, pode usar estes valores quantas vezes quiser no seu design. Para avançar o índice, deve clicar nos botões Anterior / Seguinte na barra de ferramentas.
|
439
|
+
|
440
|
+
Como alternativa à introdução manual dos valores da lista de palavras usando este editor, pode usar um ficheiro CSV padrão separado por vírgulas. Os nomes dos espaços reservados são definidos na linha de cabeçalho padrão do CSV (a primeira linha do ficheiro CSV), e o conteúdo é retirado de todas as linhas seguintes. A forma mais fácil de criar um ficheiro CSV é usando uma folha de cálculo, por exemplo o Excel, mas para sites de comércio eletrónico o seu site pode criar automaticamente o ficheiro CSV a partir das encomendas feitas online pelos clientes.
|
441
|
+
|
442
|
+
As entradas carregadas de um ficheiro CSV são apresentadas como Tipo CSV, e pode definir os valores de Índice para todas as entradas CSV ao mesmo tempo.
|
443
|
+
|
444
|
+
Nota: Se o seu CSV não tiver uma linha de cabeçalho, as colunas serão nomeadas 'column_1', 'column_2', etc.
|
445
|
+
|
446
|
+
A lista de palavras também contém algumas entradas especiais (que podem ser especialmente úteis para designs de calibração):
|
447
|
+
* 'version' - Versão do Meerk40t
|
448
|
+
* 'date' - Data de início da gravação
|
449
|
+
* 'time' - Hora de início da gravação
|
450
|
+
* 'op_device' - Dispositivo em que está a gravar
|
451
|
+
* 'op_speed' - Velocidade da operação atual
|
452
|
+
* 'op_power' - PPI da operação atual
|
453
|
+
* 'op_dpi' - DPI da operação atual (raster)
|
454
|
+
* 'op_passes' - Passagens da operação atual
|
455
|
+
|
456
|
+
Os espaços reservados para 'date' e 'time' também podem conter diretivas de formatação que permitem formatá-los de acordo com as suas convenções locais, por exemplo:
|
457
|
+
{date@%d.%m.%Y} - 31.12.2022
|
458
|
+
{time@%H:%M} - 23:59
|
459
|
+
|
460
|
+
Para um conjunto completo de diretivas de formato, consulte: https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior
|
461
|
+
"""
|
462
|
+
portuguese_brazilian_wordlist_howto = """
|
463
|
+
As Listas de Palavras permitem criar elementos de texto no seu design que contêm texto de espaço reservado, substituído no momento da gravação pelo conteúdo desta Lista de Palavras. Assim, pode gravar vários itens com textos diferentes sem ter de alterar o design de cada vez.
|
464
|
+
|
465
|
+
Um espaço reservado consiste num nome entre chaves, por exemplo '{NOME}'. Utilize o nome no Editor de Listas de Palavras para o associar ao espaço reservado e este será substituído pelo texto que inserir no Conteúdo da Lista de Palavras associada.
|
466
|
+
|
467
|
+
Por exemplo, imagine que quer criar um conjunto de etiquetas de reserva de lugares para um jantar, cada uma com o nome de uma pessoa diferente. Depois de criar o contorno da etiqueta, por exemplo um retângulo, utilize a ferramenta de texto para criar um elemento de texto com o seguinte conteúdo:
|
468
|
+
'Este lugar está reservado para {NOME}'
|
469
|
+
|
470
|
+
Depois, utilize o editor de Listas de Palavras para criar uma ou mais entradas como segue:
|
471
|
+
|-----------|------|-------|
|
472
|
+
| Nome | Tipo | Índice|
|
473
|
+
|-----------|------|-------|
|
474
|
+
| nome | Texto| 0 |
|
475
|
+
|-----------|------|-------|
|
476
|
+
Depois clique na linha 'nome' e adicione vários itens ao painel de Conteúdo, por exemplo:
|
477
|
+
Paulo
|
478
|
+
David
|
479
|
+
Andy
|
480
|
+
Agora, ao executar a gravação, obterá etiquetas individuais com nomes diferentes, por exemplo 'Este lugar está reservado para Andy'.
|
481
|
+
|
482
|
+
Pode usar tantos nomes de espaços reservados quantos quiser nos campos de texto do seu design.
|
483
|
+
|
484
|
+
O valor 'Índice' na tabela da Lista de Palavras indica qual entrada da lista de conteúdos será usada a seguir, sendo zero a primeira entrada. O índice é automaticamente incrementado em um no final de cada gravação.
|
485
|
+
|
486
|
+
Mas suponha que, por eficiência, agora quer gravar duas etiquetas de reserva de lugares ao mesmo tempo, cada uma com um nome diferente da mesma lista. Neste caso, se a primeira etiqueta usar '{NOME#+0}' e a segunda '{NOME#+1}' (note o sinal de mais). '{NOME}' ou '{NOME#+0}' usa a entrada atual (apontada pelo valor do Índice), '{NOME#+1}' usa a próxima entrada após a atual, etc.
|
487
|
+
|
488
|
+
Com o uso acima, pode usar estes valores quantas vezes quiser no seu design. Para avançar o índice, deve clicar nos botões Anterior / Seguinte na barra de ferramentas.
|
489
|
+
|
490
|
+
Como alternativa à introdução manual dos valores da lista de palavras usando este editor, pode usar um ficheiro CSV padrão separado por vírgulas. Os nomes dos espaços reservados são definidos na linha de cabeçalho padrão do CSV (a primeira linha do ficheiro CSV), e o conteúdo é retirado de todas as linhas seguintes. A forma mais fácil de criar um ficheiro CSV é usando uma folha de cálculo, por exemplo o Excel, mas para sites de comércio eletrónico o seu site pode criar automaticamente o ficheiro CSV a partir das encomendas feitas online pelos clientes.
|
491
|
+
|
492
|
+
As entradas carregadas de um ficheiro CSV são apresentadas como Tipo CSV, e pode definir os valores de Índice para todas as entradas CSV ao mesmo tempo.
|
493
|
+
|
494
|
+
Nota: Se o seu CSV não tiver uma linha de cabeçalho, as colunas serão nomeadas 'column_1', 'column_2', etc.
|
495
|
+
|
496
|
+
A lista de palavras também contém algumas entradas especiais (que podem ser especialmente úteis para designs de calibração):
|
497
|
+
* 'version' - Versão do Meerk40t
|
498
|
+
* 'date' - Data de início da gravação
|
499
|
+
* 'time' - Hora de início da gravação
|
500
|
+
* 'op_device' - Dispositivo em que está a gravar
|
501
|
+
* 'op_speed' - Velocidade da operação atual
|
502
|
+
* 'op_power' - PPI da operação atual
|
503
|
+
* 'op_dpi' - DPI da operação atual (raster)
|
504
|
+
* 'op_passes' - Passagens da operação atual
|
505
|
+
|
506
|
+
Os espaços reservados para 'date' e 'time' também podem conter diretivas de formatação que permitem formatá-los de acordo com as suas convenções locais, por exemplo:
|
507
|
+
{date@%d.%m.%Y} - 31.12.2022
|
508
|
+
{time@%H:%M} - 23:59
|
509
|
+
|
510
|
+
Para um conjunto completo de diretivas de formato, consulte: https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior
|
511
|
+
"""
|
512
|
+
japanese_wordlist_howto = """
|
513
|
+
ワードリストを使用すると、デザイン内のテキスト要素にプレースホルダーテキストを含めることができ、焼成時にこのワードリストから内容に置き換えられます。これにより、毎回デザインを変更することなく、異なるテキストを持つ複数のアイテムを焼成できます。
|
514
|
+
|
515
|
+
プレースホルダーは中括弧内の名前で構成されます。例: '{FIRSTNAME}'。ワードリストエディタでこの名前を使用してプレースホルダーと関連付けると、関連付けられたワードリストの内容に入力したテキストでプレースホルダーが置き換えられます。
|
516
|
+
|
517
|
+
この機能の使用例として、ディナーパーティーの席予約タグを作成したいとします。各タグには異なる人の名前が入っています。名札の輪郭(例:長方形)を作成した後、テキスト描画ツールを使用して次の内容を含むテキスト要素を作成します:
|
518
|
+
「この席は{FIRSTNAME}のために予約されています」
|
519
|
+
|
520
|
+
次に、このワードリストエディタを使用して、次のようなエントリを1つ以上作成します:
|
521
|
+
|-----------|------|-------|
|
522
|
+
| 名前 | 種類 | インデックス |
|
523
|
+
|-----------|------|-------|
|
524
|
+
| firstname | テキスト | 0 |
|
525
|
+
|-----------|------|-------|
|
526
|
+
次に「firstname」行をクリックし、内容ペインにいくつかの項目を追加します。例:
|
527
|
+
ポール
|
528
|
+
デイビッド
|
529
|
+
アンディ
|
530
|
+
これで焼成を実行すると、「この席はアンディのために予約されています」のように、異なる名前が入った個別の席札が得られます。
|
531
|
+
|
532
|
+
デザインのテキストフィールドには、好きなだけ多くの異なるプレースホルダー名を使用できます。
|
533
|
+
|
534
|
+
ワードリストテーブルの「インデックス」値は、次に使用される内容リストのエントリを示します。ゼロは最初のエントリを意味します。インデックスは各焼成の最後に自動的に1つ増加します。
|
535
|
+
|
536
|
+
効率のために、同じリストから異なる名前を持つ2つの席予約タグを同時に焼成したい場合、最初のタグは「{NAME#+0}」、2番目は「{NAME#+1}」(プラス記号に注意)を使用します。「{NAME}」または「{NAME#+0}」は現在のエントリ(インデックス値が指すもの)を使用し、「{NAME#+1}」は現在の次のエントリを使用します。
|
537
|
+
|
538
|
+
上記の使い方で、これらの値はデザイン内で何度でも使用できます。インデックスを進めるには、ツールバーの前/次ボタンをクリックします。
|
539
|
+
|
540
|
+
このワードリストエディタを使用して手動で値を入力する代わりに、標準のカンマ区切りCSVファイルを使用することもできます。プレースホルダー名は標準のCSVヘッダー行(CSVファイルの最初の行)で定義され、内容はすべての後続行から取得されます。CSVファイルを作成する最も簡単な方法は、Excelなどのスプレッドシートを使用することです。ECサイトの場合、ウェブサイトが顧客の注文から自動的にCSVファイルを作成することもできます。
|
541
|
+
|
542
|
+
CSVファイルから読み込まれたエントリはタイプCSVとして表示され、すべてのCSVエントリのインデックス値を同時に設定できます。
|
543
|
+
|
544
|
+
注意:CSVにヘッダー行がない場合、列は「column_1」、「column_2」などと名付けられます。
|
545
|
+
|
546
|
+
ワードリストには、いくつかの特別なエントリも含まれています(キャリブレーションデザインに特に便利です):
|
547
|
+
* 'version' - Meerk40tバージョン
|
548
|
+
* 'date' - 焼成開始日
|
549
|
+
* 'time' - 焼成開始時刻
|
550
|
+
* 'op_device' - 使用しているデバイス
|
551
|
+
* 'op_speed' - 現在の操作の速度
|
552
|
+
* 'op_power' - 現在の操作のPPI
|
553
|
+
* 'op_dpi' - 現在(ラスター)操作のDPI
|
554
|
+
* 'op_passes' - 現在の操作のパス数
|
555
|
+
|
556
|
+
「date」と「time」のプレースホルダーには、ローカルの規則に従ってフォーマットできる書式指定子を含めることもできます。例:
|
557
|
+
{date@%Y.%m.%d} - 2022.12.31
|
558
|
+
{time@%H:%M} - 23:59
|
559
|
+
|
560
|
+
書式指定子の完全なセットについては、https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior を参照してください。
|
561
|
+
"""
|
562
|
+
dutch_wordlist_howto = """
|
563
|
+
Met Woordenlijsten kunt u textelementen in uw ontwerp maken die tijdelijke tekst bevatten die bij het branden wordt vervangen door deze Woordenlijst. U kunt dan meerdere items met verschillende tekst branden zonder uw ontwerp telkens te hoeven wijzigen.
|
564
|
+
|
565
|
+
Een tijdelijke aanduiding bestaat uit een naam tussen accolades, bijvoorbeeld '{VOORNAAM}'. U gebruikt de naam in de Woordenlijst-editor om deze te koppelen aan de tijdelijke aanduiding en de tijdelijke aanduiding wordt vervangen door de tekst die u invoert in de bijbehorende Woordenlijst-inhoud.
|
566
|
+
|
567
|
+
Als voorbeeld van hoe deze functionaliteit wordt gebruikt, stel dat u een set zitplaatsreserveringslabels voor een diner wilt maken, elk met een andere naam. Nadat u het snijpad voor de naamlabelomtrek hebt gemaakt, bijvoorbeeld een rechthoek, gebruikt u het tekstgereedschap om een textelement te maken met de volgende inhoud:
|
568
|
+
'Deze stoel is gereserveerd voor {VOORNAAM}'
|
569
|
+
|
570
|
+
Gebruik vervolgens deze Woordenlijst-editor om een of meer items als volgt te maken:
|
571
|
+
|-----------|------|-------|
|
572
|
+
| Naam | Type | Index |
|
573
|
+
|-----------|------|-------|
|
574
|
+
| voornaam | Tekst| 0 |
|
575
|
+
|-----------|------|-------|
|
576
|
+
Klik vervolgens op de rij 'voornaam' en voeg meerdere items toe aan het inhoudspaneel, bijvoorbeeld:
|
577
|
+
Paul
|
578
|
+
David
|
579
|
+
Andy
|
580
|
+
Wanneer u nu het branden uitvoert, krijgt u individuele plaatslabels met verschillende namen, bijvoorbeeld 'Deze stoel is gereserveerd voor Andy'.
|
581
|
+
|
582
|
+
U kunt zoveel verschillende tijdelijke aanduidingsnamen gebruiken als u wilt in tekstvelden in uw ontwerp.
|
583
|
+
|
584
|
+
De 'Index'-waarde in de Woordenlijsttabel geeft aan welk item in de inhoudslijst de volgende keer wordt gebruikt, waarbij nul het eerste item betekent. De index wordt automatisch met één verhoogd aan het einde van elke brand.
|
585
|
+
|
586
|
+
Stel dat u nu om efficiëntie twee zitplaatsreserveringslabels tegelijk wilt branden, elk met een andere naam uit dezelfde lijst. In dit geval, als het eerste label '{NAAM#+0}' gebruikt en het tweede '{NAAM#+1}' (let op het plusteken). '{NAAM}' of '{NAAM#+0}' gebruikt het huidige item (aangegeven door de Index-waarde), '{NAAM#+1}' gebruikt het volgende item na het huidige, enzovoort.
|
587
|
+
|
588
|
+
Met het bovenstaande gebruik kunt u deze waarden zo vaak gebruiken als u wilt in uw ontwerp. Om de index te verhogen, moet u op de Vorige / Volgende knoppen in de werkbalk klikken.
|
589
|
+
|
590
|
+
Als alternatief voor het handmatig invoeren van de waarden van de woordenlijst met deze editor, kunt u een standaard door komma's gescheiden CSV-bestand gebruiken. De tijdelijke aanduidingsnamen worden gedefinieerd in de standaard CSV-kopregel (de eerste regel in het CSV-bestand), en de inhoud wordt vervolgens uit alle volgende regels gehaald. De eenvoudigste manier om een CSV-bestand te maken is met een spreadsheet, bijvoorbeeld Excel, maar voor webwinkels kan uw website het CSV-bestand automatisch aanmaken op basis van online geplaatste bestellingen van klanten.
|
591
|
+
|
592
|
+
Items die uit een CSV-bestand zijn geladen, worden weergegeven als Type CSV, en u kunt de Index-waarden voor alle CSV-items tegelijk instellen.
|
593
|
+
|
594
|
+
Opmerking: als uw CSV geen kopregel heeft, worden de kolommen 'column_1', 'column_2', enz. genoemd.
|
595
|
+
|
596
|
+
De woordenlijst bevat ook enkele speciale items (die vooral handig kunnen zijn voor kalibratieontwerpen):
|
597
|
+
* 'version' - Meerk40t-versie
|
598
|
+
* 'date' - Datum waarop het branden is gestart
|
599
|
+
* 'time' - Tijd waarop het branden is gestart
|
600
|
+
* 'op_device' - Apparaat waarop u brandt
|
601
|
+
* 'op_speed' - Snelheid van de huidige bewerking
|
602
|
+
* 'op_power' - PPI van de huidige bewerking
|
603
|
+
* 'op_dpi' - DPI van de huidige (raster) bewerking
|
604
|
+
* 'op_passes' - Aantal passes van de huidige bewerking
|
605
|
+
|
606
|
+
De tijdelijke aanduidingen voor 'date' en 'time' kunnen ook opmaakopdrachten bevatten waarmee u ze kunt opmaken volgens uw lokale conventies, bijvoorbeeld:
|
607
|
+
{date@%d.%m.%Y} - 31.12.2022
|
608
|
+
{time@%H:%M} - 23:59
|
609
|
+
|
610
|
+
Voor een volledige set opmaakopdrachten, zie: https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior
|
611
|
+
"""
|
262
612
|
|
263
613
|
english_material_howto = """
|
264
614
|
The Material Library Manager allows to create, maintain, use and manage operations that are customized to provide a desired effect with a given material (hence the name Material Library).
|
@@ -285,58 +635,67 @@ russian_material_howto = """
|
|
285
635
|
Параметры, которые вы хотите использовать, например, для резки акрила, очень отличаются от тех, которые вы хотите использовать для гравировки изображения на сланце.
|
286
636
|
Вы можете поделиться такими настройками материала с сообществом MeerK40t и можете извлечь пользу из вкладов других, загружая и используя их настройки.
|
287
637
|
"""
|
638
|
+
spanish_material_howto = """
|
639
|
+
El Gestor de la Biblioteca de Materiales permite crear, mantener, usar y gestionar operaciones que están personalizadas para proporcionar un efecto deseado con un material dado (de ahí el nombre Biblioteca de Materiales).
|
640
|
+
Los parámetros que desea utilizar, por ejemplo, para cortar acrílico son muy diferentes de los que desea utilizar para grabar una imagen en pizarra.
|
641
|
+
Puede compartir dicha configuración de material con la comunidad de MeerK40t y beneficiarse de las contribuciones de otros cargando y utilizando sus configuraciones.
|
642
|
+
"""
|
643
|
+
chinese_material_howto = """
|
644
|
+
材料库管理器允许您创建、维护、使用和管理针对特定材料定制的操作(因此称为材料库)。
|
645
|
+
例如,用于切割亚克力的参数与用于在石板上雕刻图像的参数非常不同。
|
646
|
+
您可以与MeerK40t社区分享此类材料设置,也可以通过加载和使用他人的设置来受益于他人的贡献。
|
647
|
+
"""
|
648
|
+
hungarian_material_howto = """
|
649
|
+
Az Anyagkönyvtár kezelő lehetővé teszi, hogy létrehozzon, karbantartson, használjon és kezeljen olyan műveleteket, amelyek egy adott anyaghoz igazított hatást biztosítanak (innen az Anyagkönyvtár elnevezés).
|
650
|
+
Az akril vágásához használt paraméterek például nagyon eltérnek azoktól, amelyeket pala gravírozásához használna.
|
651
|
+
Az ilyen anyagbeállításokat megoszthatja a MeerK40t közösséggel, és mások hozzájárulásaiból is profitálhat, ha betölti és használja az ő beállításaikat.
|
652
|
+
"""
|
653
|
+
portuguese_material_howto = """
|
654
|
+
O Gerenciador de Biblioteca de Materiais permite criar, manter, usar e gerenciar operações que são personalizadas para fornecer um efeito desejado com um determinado material (daí o nome Biblioteca de Materiais).
|
655
|
+
Os parâmetros que você deseja usar, por exemplo, para cortar acrílico, são muito diferentes dos que você deseja usar para gravar uma imagem em ardósia.
|
656
|
+
Você pode compartilhar essa configuração de material com a comunidade MeerK40t e pode se beneficiar das contribuições de outros carregando e usando suas configurações.
|
657
|
+
"""
|
658
|
+
portuguese_brazilian_material_howto = """
|
659
|
+
O Gerenciador de Biblioteca de Materiais permite criar, manter, usar e gerenciar operações que são personalizadas para fornecer um efeito desejado com um determinado material (daí o nome Biblioteca de Materiais).
|
660
|
+
Os parâmetros que você deseja usar, por exemplo, para cortar acrílico, são muito diferentes dos que você deseja usar para gravar uma imagem em ardósia.
|
661
|
+
Você pode compartilhar essa configuração de material com a comunidade MeerK40t e pode se beneficiar das contribuições de outros carregando e usando suas configurações.
|
662
|
+
"""
|
663
|
+
japanese_material_howto = """
|
664
|
+
マテリアルライブラリマネージャーは、特定の材料で望ましい効果を得るためにカスタマイズされた操作を作成、維持、使用、管理することができます(そのため「マテリアルライブラリ」と呼ばれます)。
|
665
|
+
例えば、アクリルをカットするために使用するパラメータは、スレートに画像を彫刻するために使用するパラメータとは大きく異なります。
|
666
|
+
このようなマテリアル設定をMeerK40tコミュニティと共有したり、他の人の設定を読み込んで利用することで、その貢献から恩恵を受けることができます。
|
667
|
+
"""
|
668
|
+
dutch_material_howto = """
|
669
|
+
De Materialenbibliotheekbeheerder stelt u in staat om bewerkingen te maken, te onderhouden, te gebruiken en te beheren die zijn aangepast om een gewenst effect te bereiken met een bepaald materiaal (vandaar de naam Materialenbibliotheek).
|
670
|
+
De parameters die u bijvoorbeeld wilt gebruiken voor het snijden van acryl zijn heel anders dan die voor het graveren van een afbeelding op leisteen.
|
671
|
+
U kunt dergelijke materiaalsinstellingen delen met de MeerK40t-gemeenschap en profiteren van de bijdragen van anderen door hun instellingen te laden en te gebruiken.
|
672
|
+
"""
|
288
673
|
|
289
674
|
|
290
675
|
def asset(context, asset):
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
if language == 4: # ("es", "español", wx.LANGUAGE_SPANISH),
|
307
|
-
lang = "spanish"
|
308
|
-
# Language #05 : zh - 中文
|
309
|
-
if language == 5: # ("zh", "中文", wx.LANGUAGE_CHINESE),
|
310
|
-
lang = "chinese"
|
311
|
-
# Language #06 : hu - Magyar
|
312
|
-
if language == 6: # ("hu", "Magyar", wx.LANGUAGE_HUNGARIAN),
|
313
|
-
lang = "hungarian"
|
314
|
-
# Language #07 : pt_PT - português
|
315
|
-
if language == 7: # ("pt_PT", "português", wx.LANGUAGE_PORTUGUESE),
|
316
|
-
lang = "portuguese"
|
317
|
-
# Language #08 : pt_BR - português brasileiro
|
318
|
-
if (
|
319
|
-
language == 8
|
320
|
-
): # ("pt_BR", "português brasileiro", wx.LANGUAGE_PORTUGUESE_BRAZILIAN),
|
321
|
-
lang = "portuguese_brazilian"
|
322
|
-
# Language #09 : ja - 日本
|
323
|
-
if language == 9: # ("ja", "日本", wx.LANGUAGE_JAPANESE),
|
324
|
-
lang = "japanese"
|
325
|
-
# Language #10 : nl - Nederlands
|
326
|
-
if language == 10: # ("nl", "Nederlands", wx.LANGUAGE_DUTCH),
|
327
|
-
lang = "dutch"
|
328
|
-
# Language #11 : ru - русский
|
329
|
-
if language == 11: # ("ru", "русский", wx.LANGUAGE_RUSSIAN),
|
330
|
-
lang = "russian"
|
331
|
-
|
676
|
+
language_map = {
|
677
|
+
0: "english",
|
678
|
+
1: "italian",
|
679
|
+
2: "french",
|
680
|
+
3: "german",
|
681
|
+
4: "spanish",
|
682
|
+
5: "chinese",
|
683
|
+
6: "hungarian",
|
684
|
+
7: "portuguese",
|
685
|
+
8: "portuguese_brazilian",
|
686
|
+
9: "japanese",
|
687
|
+
10: "dutch",
|
688
|
+
11: "russian",
|
689
|
+
}
|
690
|
+
lang = language_map.get(getattr(context, "language", 0), "english")
|
332
691
|
text = ""
|
333
692
|
try:
|
334
693
|
text = globals()[f"{lang}_{asset}"]
|
335
694
|
except KeyError:
|
336
695
|
try:
|
337
|
-
text = globals()["english_"
|
696
|
+
text = globals()[f"english_{asset}"]
|
338
697
|
except KeyError:
|
339
698
|
pass
|
340
|
-
if text and text
|
699
|
+
if text and text.startswith("\n"):
|
341
700
|
return text[1:]
|
342
701
|
return text
|
meerk40t/gui/plugin.py
CHANGED
@@ -111,6 +111,18 @@ and a wxpython version <= 4.1.1."""
|
|
111
111
|
"page": "Gui",
|
112
112
|
"section": "General",
|
113
113
|
},
|
114
|
+
{
|
115
|
+
"attr": "remember_main_pos",
|
116
|
+
"object": kernel.root,
|
117
|
+
"default": True,
|
118
|
+
"type": bool,
|
119
|
+
"label": _("Remember main window position"),
|
120
|
+
"tip": _(
|
121
|
+
"Should MeerK40t remember its last position on the screen?"
|
122
|
+
),
|
123
|
+
"page": "Gui",
|
124
|
+
"section": "General",
|
125
|
+
},
|
114
126
|
{
|
115
127
|
"attr": "windows_save",
|
116
128
|
"object": kernel.root,
|
meerk40t/gui/tips.py
CHANGED
@@ -466,11 +466,30 @@ class TipPanel(wx.Panel):
|
|
466
466
|
if successful:
|
467
467
|
# Store the result to the local cache file
|
468
468
|
if len(content):
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
469
|
+
successful = False
|
470
|
+
# Try to write the content to the local file.
|
471
|
+
for codepage in ["utf-8", "cp1252"]:
|
472
|
+
try:
|
473
|
+
with open(self.local_file, mode="w", encoding=codepage) as f:
|
474
|
+
f.write(content)
|
475
|
+
successful = True
|
476
|
+
break
|
477
|
+
except (
|
478
|
+
UnicodeDecodeError,
|
479
|
+
OSError,
|
480
|
+
RuntimeError,
|
481
|
+
PermissionError,
|
482
|
+
FileNotFoundError,
|
483
|
+
):
|
484
|
+
pass
|
485
|
+
if not successful:
|
486
|
+
# If we still failed, try with surrogateescape
|
487
|
+
# This is a workaround for some unicode issues.
|
488
|
+
try:
|
489
|
+
with open(self.local_file, mode="w") as f:
|
490
|
+
f.write(content)
|
491
|
+
except (OSError, RuntimeError, PermissionError, FileNotFoundError):
|
492
|
+
pass
|
474
493
|
|
475
494
|
def load_tips_from_local_cache(self):
|
476
495
|
def comparable_version(version):
|
@@ -506,42 +525,60 @@ class TipPanel(wx.Panel):
|
|
506
525
|
myversion = comparable_version(self.context.kernel.version)
|
507
526
|
|
508
527
|
try:
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
528
|
+
content = ""
|
529
|
+
codepages = ["utf-8", "cp1252"]
|
530
|
+
for codepage in codepages:
|
531
|
+
try:
|
532
|
+
with open(self.local_file, mode="r", encoding=codepage) as f:
|
533
|
+
content = f.read()
|
534
|
+
break
|
535
|
+
except UnicodeDecodeError:
|
536
|
+
content = ""
|
537
|
+
if not content:
|
538
|
+
with open(
|
539
|
+
self.local_file,
|
540
|
+
mode="r",
|
541
|
+
encoding="utf-8",
|
542
|
+
errors="surrogateescape",
|
543
|
+
) as f:
|
544
|
+
content = f.read()
|
545
|
+
|
546
|
+
lines = content.splitlines()
|
547
|
+
ver = ""
|
548
|
+
tip = ""
|
549
|
+
cmd = ""
|
550
|
+
img = ""
|
551
|
+
lastline_was_tip = False
|
552
|
+
for line in lines:
|
553
|
+
cline = line.strip()
|
554
|
+
if cline.startswith("#") or len(cline) == 0:
|
555
|
+
continue
|
556
|
+
if cline.startswith("tip="):
|
557
|
+
lastline_was_tip = True
|
558
|
+
# Store previous
|
559
|
+
add_tip(tip, cmd, img, ver, myversion)
|
560
|
+
ver = ""
|
561
|
+
tip = cline[len("tip=") :]
|
562
|
+
cmd = ""
|
563
|
+
img = ""
|
564
|
+
elif cline.startswith("version="):
|
565
|
+
lastline_was_tip = False
|
566
|
+
ver = cline[len("version=") :]
|
567
|
+
elif cline.startswith("cmd="):
|
568
|
+
lastline_was_tip = False
|
569
|
+
cmd = cline[len("cmd=") :]
|
570
|
+
elif cline.startswith("image="):
|
571
|
+
lastline_was_tip = False
|
572
|
+
img = cline[len("image=") :]
|
573
|
+
elif cline.startswith("img="):
|
574
|
+
lastline_was_tip = False
|
575
|
+
img = cline[len("img=") :]
|
576
|
+
else:
|
577
|
+
if lastline_was_tip:
|
578
|
+
tip += "\n" + cline
|
579
|
+
|
580
|
+
# Something pending?
|
581
|
+
add_tip(tip, cmd, img, ver, myversion)
|
545
582
|
|
546
583
|
except (OSError, RuntimeError, PermissionError, FileNotFoundError):
|
547
584
|
return
|