1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- # Copyright (c) 2017 Ghostkeeper
- # The PostProcessingPlugin is released under the terms of the AGPLv3 or higher.
- import re #To perform the search and replace.
- from ..Script import Script
- class SearchAndReplace(Script):
- """Performs a search-and-replace on all g-code.
- Due to technical limitations, the search can't cross the border between
- layers.
- """
- def getSettingDataString(self):
- return """{
- "name": "Search and Replace",
- "key": "SearchAndReplace",
- "metadata": {},
- "version": 2,
- "settings":
- {
- "search":
- {
- "label": "Search",
- "description": "All occurrences of this text will get replaced by the replacement text.",
- "type": "str",
- "default_value": ""
- },
- "replace":
- {
- "label": "Replace",
- "description": "The search text will get replaced by this text.",
- "type": "str",
- "default_value": ""
- },
- "is_regex":
- {
- "label": "Use Regular Expressions",
- "description": "When enabled, the search text will be interpreted as a regular expression.",
- "type": "bool",
- "default_value": false
- }
- }
- }"""
- def execute(self, data):
- search_string = self.getSettingValueByKey("search")
- if not self.getSettingValueByKey("is_regex"):
- search_string = re.escape(search_string) #Need to search for the actual string, not as a regex.
- search_regex = re.compile(search_string)
- replace_string = self.getSettingValueByKey("replace")
- for layer_number, layer in enumerate(data):
- data[layer_number] = re.sub(search_regex, replace_string, layer) #Replace all.
- return data
|