Skip to content

Commit

Permalink
Fixed markdown spacing with escape sequences, refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
CGrassin committed Mar 9, 2023
1 parent c1f7303 commit 62db872
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 25 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,3 +57,5 @@ For C/C++ and Python format, there is a checkbox to use the pin name instead of
## License

This plugin is published under MIT license.

*View my other KiCad plugin:* https://github.com/CGrassin/kicad-auto-silkscreen
48 changes: 24 additions & 24 deletions pinout_plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,19 +34,18 @@ def pad_is_power(pad):
def pad_is_passive(pad):
return 'passive' in pad.GetPinType()

def str_to_C_variable(string, prefix = "pin_"):
out = prefix + string
def str_to_C_variable(string):
out = string
out = re.sub(r'[ /]', '_', out)
out = re.sub(r'-', 'N', out)
out = re.sub(r'\+', 'P', out)
out = re.sub(r'[^a-zA-Z0-9\_]', '', out)
out = re.sub(r'_+', '_', out)
return out

def str_to_C_define(string):
return str_to_C_variable(string).upper()

def escape_html(string, decorate=False):
"""Escapes the special characters in a HTML string.
"""
out = re.sub(r'&', '&', string)
out = re.sub(r'<', '&lt;', out)
out = re.sub(r'>', '&gt;', out)
Expand Down Expand Up @@ -124,7 +123,7 @@ def set_output(self, selection):
output_formater = self.python_dict_format
elif selection == SELECTOR['wireviz']:
output_formater = self.wireviz_format
output = "connectors:\n"
output += "connectors:\n"
elif selection == SELECTOR['fpga_xdc']:
output_formater = self.xdc_format
elif selection == SELECTOR['fpga_pdc']:
Expand All @@ -135,7 +134,7 @@ def set_output(self, selection):
output += output_formater(component)
self.set_result(output)

def csv_format(self, component, sep=",", quote="\""): # FIXME unsafe
def csv_format(self, component, sep=",", quote="\""):
output = ""
pinout = get_pins(component)
for pad in pinout:
Expand All @@ -149,25 +148,25 @@ def csv_format(self, component, sep=",", quote="\""): # FIXME unsafe
def list_format(self, component):
return self.csv_format(component, "\t", "")

def html_format(self, component): # FIXME HTML escape chars
def html_format(self, component):
output = "<p>Pinout for "+escape_html(component.GetReference())+" ("+escape_html(component.GetValue())+"):</p>\n"
output += "<table>\n"
output += "\t<tr><th>Pin number</th><th>Pin name</th><th>Pin net</th></tr>\n"
pinout = get_pins(component)
for pad in pinout:
output += ("\t<tr><td>" + escape_html(pad.GetNumber()) + "</td><td>" +
escape_html(pad.GetPinFunction(),True) + "</td><td>" +
escape_html(pad.GetPinFunction(), True) + "</td><td>" +
escape_html(get_pin_name_unless_NC(pad), True) + "</td></tr>\n")
output += "</table>\n"
return output

def c_enum_format(self, component):
added_vars = []
output = "enum pinout_" + str_to_C_variable(component.GetReference(),"") + "{\n" # FIXME unsafe
output = "enum pinout_" + str_to_C_variable(component.GetReference()) + "{\n" # FIXME unsafe
pinout = get_pins(component)
for pad in pinout:
var_name = str_to_C_variable(pad.GetNetname())
var_value = filter_pinname(pad.GetPinFunction(),self.get_pin_name_filter()) if self.is_pinname_not_number() else pad.GetNumber()
var_name = str_to_C_variable("pin_" + pad.GetNetname())
var_value = filter_pinname(pad.GetPinFunction(), self.get_pin_name_filter()) if self.is_pinname_not_number() else pad.GetNumber()

if var_name in added_vars or not var_value.isdigit() or not pad_is_connected(pad) or pad_is_power(pad):
output += "//"
Expand All @@ -182,8 +181,8 @@ def c_define_format(self, component):
output = "// Pinout for "+component.GetReference()+" ("+component.GetValue()+")\n"
pinout = get_pins(component)
for pad in pinout:
var_name = str_to_C_define(pad.GetNetname())
var_value = filter_pinname(pad.GetPinFunction(),self.get_pin_name_filter()) if self.is_pinname_not_number() else pad.GetNumber()
var_name = str_to_C_variable("pin_" + pad.GetNetname()).upper()
var_value = filter_pinname(pad.GetPinFunction(), self.get_pin_name_filter()) if self.is_pinname_not_number() else pad.GetNumber()

if var_name in added_vars or not pad_is_connected(pad) or pad_is_power(pad):
output += "// "
Expand All @@ -194,10 +193,10 @@ def c_define_format(self, component):

def python_dict_format(self, component):
added_vars = []
output = "pinout_"+str_to_C_variable(component.GetReference(),"")+" = {\n"
output = "pinout_"+str_to_C_variable(component.GetReference())+" = {\n"
pinout = get_pins(component)
for pad in pinout:
var_name = str_to_C_variable(pad.GetNetname())
var_name = str_to_C_variable("pin_" + pad.GetNetname())
var_value = filter_pinname(pad.GetPinFunction(),self.get_pin_name_filter()) if self.is_pinname_not_number() else pad.GetNumber()

if var_name in added_vars or not pad_is_connected(pad) or pad_is_power(pad):
Expand All @@ -217,18 +216,19 @@ def markdown_format(self, component):
pinout = get_pins(component)
max_len_num, max_len_name, max_fn_name = len('Pin number'),len('Pin net'), len('Pin name')
for pad in pinout:
max_fn_name = max(max_fn_name, len(pad.GetPinFunction()))
max_len_num = max(max_len_num, len(pad.GetNumber()))
max_len_name = max(max_len_name, len( get_pin_name_unless_NC(pad)))
max_fn_name = max(max_fn_name, len(escape_markdown(pad.GetPinFunction())))
max_len_num = max(max_len_num, len(escape_markdown(pad.GetNumber())))
max_len_name = max(max_len_name, len(escape_markdown(get_pin_name_unless_NC(pad))))

output += ("| Pin number" + ' '*(max_len_num-len('Pin number')) + " | Pin name" +
' '*(max_fn_name-len('Pin name')) + " | Pin net" + ' '*(max_len_name-len('Pin net')) + " |\n")
output +="|---"+'-'*(max_len_num-1)+"|---"+'-'*(max_fn_name-1)+"|---"+'-'*(max_len_name-1)+"|\n"

for pad in pinout:
output += ("| " + escape_markdown(pad.GetNumber()) + ' '*(max_len_num-len(pad.GetNumber())) + " | " + escape_markdown(pad.GetPinFunction()) +
' '*(max_fn_name-len(pad.GetPinFunction())) + " | " + escape_markdown(get_pin_name_unless_NC(pad)) +
' '*(max_len_name-len(get_pin_name_unless_NC(pad))) + " |\n")
output += ("| " + escape_markdown(pad.GetNumber()) + ' '*(max_len_num-len(escape_markdown(pad.GetNumber()))) +
" | " + escape_markdown(pad.GetPinFunction()) + ' '*(max_fn_name-len(escape_markdown(pad.GetPinFunction()))) +
" | " + escape_markdown(get_pin_name_unless_NC(pad)) + ' '*(max_len_name-len(escape_markdown(get_pin_name_unless_NC(pad)))) +
" |\n")
return output

def wireviz_format(self, component):
Expand All @@ -249,7 +249,7 @@ def xdc_format(self, component):
output = "## Pinout generated for "+component.GetReference()+" ("+component.GetValue()+")\n"
pinout = get_pins(component)
for pad in pinout:
var_name = str_to_C_variable(pad.GetNetname())
var_name = str_to_C_variable("pin_" + pad.GetNetname())
if var_name in added_vars or not pad_is_connected(pad) or pad_is_power(pad) or pad_is_passive(pad):
output += "# "
else:
Expand All @@ -262,7 +262,7 @@ def pdc_format(self, component):
output = "## Pinout generated for "+component.GetReference()+" ("+component.GetValue()+")\n"
pinout = get_pins(component)
for pad in pinout:
var_name = str_to_C_variable(pad.GetNetname())
var_name = str_to_C_variable("pin_" + pad.GetNetname())
if var_name in added_vars or not pad_is_connected(pad) or pad_is_power(pad) or pad_is_passive(pad):
output += "# "
else:
Expand Down
2 changes: 1 addition & 1 deletion resources/metadata.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
},
"versions": [
{
"version": "1.0",
"version": "1.1",
"status": "stable",
"kicad_version": "6.0",
"kicad_version_max": "7.0"
Expand Down

0 comments on commit 62db872

Please sign in to comment.