Index: compile_rules_graph.py ================================================================== --- compile_rules_graph.py +++ compile_rules_graph.py @@ -460,9 +460,9 @@ # Result return { "graph_callables": sPyCallables, "graph_callablesJS": sJSCallables, "rules_graphs": str(dAllGraph), - "rules_graphsJS": str(dAllGraph).replace("True", "true").replace("False", "false"), + "rules_graphsJS": str(dAllGraph), "rules_actions": str(dACTIONS), - "rules_actionsJS": str(dACTIONS).replace("True", "true").replace("False", "false") + "rules_actionsJS": jsconv.pyActionsToString(dACTIONS) } Index: compile_rules_js_convert.py ================================================================== --- compile_rules_js_convert.py +++ compile_rules_js_convert.py @@ -161,5 +161,13 @@ "convert to a list of codes (numbers or strings)" if not sGroupsPositioningCode: return None return [ int(sCode) if sCode.isdigit() or (sCode[0:1] == "-" and sCode[1:].isdigit()) else sCode \ for sCode in sGroupsPositioningCode.split(",") ] + + +def pyActionsToString (dActions): + for sKey, aValue in dActions.items(): + if aValue[2] == "-": + aValue[3] = aValue[3].replace(" ", " ") # nbsp --> nnbsp + aValue[10] = aValue[10].replace("« ", "« ").replace(" »", " »").replace(" :", " :").replace(" :", " :") + return str(dActions).replace("True", "true").replace("False", "false");