       }
     }
     
+    indent()
+    output(")")
+    
     if terminateLine {
-      print(")")
-    } else {
-      indent()
-      output(")")
+      self.terminateLine()
     }
   }
 
   // TODO: Some way to integrate this with conversion...
   mutating func printAsPattern(
-    _ member: DSLTree.CustomCharacterClass.Member
+    _ member: DSLTree.CustomCharacterClass.Member,
+    wrap: Bool = true
   ) {
     switch member {
     case let .custom(ccc):

    // Also in the same vein, if we have a few atom members but no
    // nonAtomMembers, then we can emit a single .anyOf(...) for them.
    if !charMembers.isEmpty, nonCharMembers.isEmpty {
      if terminateLine {
        print(".anyOf(\(charMembers._quoted))")
      } else {
        indent()
        output(".anyOf(\(charMembers._quoted))")
      }
      return
    }
    

    // If we only have 1 member, then we can emit it without the extra
    // CharacterClass initialization
    if ccc.members.count == 1 {
      printAsPattern(ccc.members[0], wrap: wrap)
      
      if terminateLine {
        self.terminateLine()
