diff --git a/tools/ruljos2wccl.py b/tools/ruljos2wccl.py
index 906f0bfede2137ac9f67a799db8bebc0052bab24..4d15451d8d0ae17b85f670675f646c65d616f053 100755
--- a/tools/ruljos2wccl.py
+++ b/tools/ruljos2wccl.py
@@ -13,11 +13,23 @@ NOTE: this is based on very naive heuristics.
 # TODO agr bits
 # TODO isbig -> regex
 
-p_brackets = re.compile(u'{(\\s*"[^"]*"(\\s*,\\s*"[^"]*")*\\s*)}', re.U)
+p_strset = re.compile(u'{(\\s*"[^"]*"(\\s*,\\s*"[^"]*")*\\s*)}', re.U)
+p_negposref = re.compile(u'\$\-([0-9]+)([A-Z][A-Za-z0-9]*)')
+p_posposref = re.compile(u'\$[\+]?([0-9]+)([A-Z][A-Za-z0-9]*)')
+p_isbig = re.compile(u'isbig\(([^)]*)\)', re.U)
+p_hasnum = re.compile(u'hasnum\(([^)]*)\)', re.U)
+p_agr = re.compile(u'(w?agr[a-z]*)\\s*\(\\s*([\-0-9]+)\\s*,\\s*([\-0-9]+)\\s*,\\s*({[^}]*})\\s*,\\s*([\-0-9]+)\\s*\)', re.U)
 
 def jos2ccl(what):
+	what = what.replace('{none}', '{}')
 	what = what.replace('flex[', 'class[')
-	return p_brackets.sub(u'[\\1]', what)
+	what = p_negposref.sub(u'$\\2 - \\1', what)
+	what = p_posposref.sub(u'$\\2 + \\1', what)
+	what = p_strset.sub(u'[\\1]', what)
+	what = p_isbig.sub(u'regex(\\1, "\\\\\\p{Lu}.*")', what)
+	what = p_hasnum.sub(u'regex(\\1, ".*[0-9].*")', what)
+	what = p_agr.sub(u'\\1(\\2, \\3, \\4)', what)
+	return what
 	
 class IndentWriter:
 	def __init__(self, out, baseindent = 0):