english: change comma-list to fit my brain better.
We can always map-index in the caller if you want it before passing the parts in.windows-high-dpi
							parent
							
								
									f960c51878
								
							
						
					
					
						commit
						be657a20fb
					
				|  | @ -87,29 +87,27 @@ IN: english | |||
| { "the" } [ "geese" ?plural-article ] unit-test | ||||
| { "a" }   [ "sheep" ?plural-article ] unit-test | ||||
| 
 | ||||
| { { "" } } | ||||
|     [ { } "or" simple-comma-list ] unit-test | ||||
| { { } } [ { } "or" comma-list ] unit-test | ||||
| 
 | ||||
| { { { "a" } } } | ||||
|     [ { "a" } "or" simple-comma-list ] unit-test | ||||
| { { "a" } } [ { "a" } "or" comma-list ] unit-test | ||||
| 
 | ||||
| { { { "a" } { " or " "b" } } } | ||||
|     [ { "a" "b" } "or" simple-comma-list ] unit-test | ||||
| { { "a" " or " "b" } } | ||||
| [ { "a" "b" } "or" comma-list ] unit-test | ||||
| 
 | ||||
| { { { "a" ", " } { "b" } { ", or " "c" } } } | ||||
|     [ { "a" "b" "c" } "or" simple-comma-list ] unit-test | ||||
| { { "a" ", " "b" ", or " "c" } } | ||||
| [ { "a" "b" "c" } "or" comma-list ] unit-test | ||||
| 
 | ||||
| { { { "a" ", " } { "b" ", " } { "x" } { ", and " "c" } } } | ||||
|     [ { "a" "b" "x" "c" } "and" simple-comma-list ] unit-test | ||||
| { { "a" ", " "b" ", " "x" ", and " "c" } } | ||||
| [ { "a" "b" "x" "c" } "and" comma-list ] unit-test | ||||
| 
 | ||||
| { { | ||||
|     { "an " { $link object } ", " } | ||||
|     { "a " { $link pair } ", " } | ||||
|     { "a " { $link number } ", " } | ||||
|     { "an " { $link array } ", " } | ||||
|     { "a " { $link string } ", " } | ||||
|     { "a " { $link sequence } } | ||||
|     { ", or " "an " { $link assoc } } | ||||
|     { "an " { $link object } } ", " | ||||
|     { "a " { $link pair } } ", " | ||||
|     { "a " { $link number } } ", " | ||||
|     { "an " { $link array } } ", " | ||||
|     { "a " { $link string } } ", " | ||||
|     { "a " { $link sequence } } ", or " | ||||
|     { "an " { $link assoc } } | ||||
| } } [ | ||||
|     { object pair number array string sequence assoc } | ||||
|     or-markup-example | ||||
|  | @ -121,6 +119,5 @@ IN: english | |||
| } } [ { object } or-markup-example ] unit-test | ||||
| 
 | ||||
| { { | ||||
|     { "an " { $link object } } | ||||
|     { " or " "a " { $link pair } } | ||||
|     { "an " { $link object } } " or " { "a " { $link pair } } | ||||
| } } [ { object pair } or-markup-example ] unit-test | ||||
|  |  | |||
|  | @ -168,32 +168,23 @@ PRIVATE> | |||
| : ?plural-article ( word -- article ) | ||||
|     dup singular? [ a/an ] [ drop "the" ] if ; | ||||
| 
 | ||||
| : comma-list-by ( parts quot conjunction  -- clause-seq ) | ||||
|     ! using map-index for maximum flexibility | ||||
|     [ '[ _ call( x n -- x ) ] map-index | ||||
|         ! not using oxford comma for 2 objects: "a, or b"; instead it's "a or b" | ||||
|         dup length 2 > ", " " " ? " " | ||||
|     ] dip glue | ||||
| 
 | ||||
|     over length { | ||||
|         { [ dup 0 = ] [ 3drop { "" } ] } | ||||
|         { [ dup 1 = ] [ 2drop ] } | ||||
|         [ drop [ unclip-last [ | ||||
|                 dup length 1 - '[ _ - zero? [ ", " suffix ] unless ] map-index | ||||
|             ] dip ] dip prefix suffix | ||||
|         ] | ||||
|     } cond ; | ||||
| 
 | ||||
| : simple-comma-list ( parts conjunction -- parts' ) | ||||
|     [ drop 1array ] swap comma-list-by ; | ||||
| : comma-list ( parts conjunction  -- clause-seq ) | ||||
|     [ | ||||
|         V{ } clone [ | ||||
|             [ '[ ", " _ push ] ] [ '[ _ push ] ] bi interleave | ||||
|         ] keep { } like | ||||
|     ] dip over length dup 3 >= [ | ||||
|         [ 3 > ", " " " ? " " surround ] [ 2 - pick set-nth ] bi | ||||
|     ] [ 2drop ] if ; | ||||
| 
 | ||||
| : or-markup-example ( classes -- markup ) | ||||
|     [ drop dup word? [ | ||||
|     [ | ||||
|         dup word? [ | ||||
|             [ name>> a/an " " append ] [ \ $link swap 2array ] bi 2array | ||||
|         ] [ | ||||
|             [ "\"" ?head drop a/an ] keep 1array \ $snippet prefix " " swap 3array | ||||
|         ] if | ||||
|     ] "or" comma-list-by ; | ||||
|     ] map "or" comma-list ; | ||||
| 
 | ||||
| : $or-markup-example ( classes -- ) | ||||
|     or-markup-example print-element ; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue