mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-05-25 02:38:55 -06:00
fixes to Det and ComplSlash in Chi
This commit is contained in:
@@ -33,7 +33,7 @@ concrete CatChi of Cat = CommonX - [Tense, Temp, Adv] ** open ResChi, Prelude in
|
|||||||
|
|
||||||
VP = ResChi.VP ;
|
VP = ResChi.VP ;
|
||||||
Comp = ResChi.VP ;
|
Comp = ResChi.VP ;
|
||||||
VPSlash = ResChi.VP ** {c2 : Preposition} ;
|
VPSlash = ResChi.VP ** {c2 : Preposition ; isPre : Bool} ; -- whether the missing arg is before verb
|
||||||
|
|
||||||
-- Adjective
|
-- Adjective
|
||||||
|
|
||||||
@@ -43,7 +43,8 @@ concrete CatChi of Cat = CommonX - [Tense, Temp, Adv] ** open ResChi, Prelude in
|
|||||||
|
|
||||||
CN = ResChi.Noun ;
|
CN = ResChi.Noun ;
|
||||||
NP, Pron = ResChi.NP ;
|
NP, Pron = ResChi.NP ;
|
||||||
Det, Quant = Determiner ;
|
Det = Determiner ;
|
||||||
|
Quant = Determiner ** {pl : Str} ;
|
||||||
Predet = {s : Str} ; ----
|
Predet = {s : Str} ; ----
|
||||||
Ord = {s : Str} ;
|
Ord = {s : Str} ;
|
||||||
Num = {s : Str ; numType : NumType} ;
|
Num = {s : Str ; numType : NumType} ;
|
||||||
@@ -52,7 +53,8 @@ concrete CatChi of Cat = CommonX - [Tense, Temp, Adv] ** open ResChi, Prelude in
|
|||||||
|
|
||||||
-- Numeral
|
-- Numeral
|
||||||
|
|
||||||
Numeral, Card, Digits = {s : Str} ;
|
Numeral = {s,p : Str} ;
|
||||||
|
Card, Digits = {s : Str} ;
|
||||||
|
|
||||||
-- Structural
|
-- Structural
|
||||||
|
|
||||||
|
|||||||
@@ -17,35 +17,25 @@ lin
|
|||||||
green_A = mkA "绿" ; -- "lv"
|
green_A = mkA "绿" ; -- "lv"
|
||||||
walk_V = mkV "走" ; -- "zou"
|
walk_V = mkV "走" ; -- "zou"
|
||||||
sleep_V = mkV "睡" ; -- "shui"
|
sleep_V = mkV "睡" ; -- "shui"
|
||||||
---- arrive_V = mkV "到" "了" [] [] "过"; -- "dao"
|
|
||||||
love_V2 = mkV2 "爱" ; -- "ai"
|
love_V2 = mkV2 "爱" ; -- "ai"
|
||||||
watch_V2 = mkV2 "看" ; -- "kan"
|
watch_V2 = mkV2 "看" ; -- "kan"
|
||||||
--- please2_V2 = mkV "麻烦" ; -- "mafan"
|
|
||||||
--- believe_VS = mkV "相信" ; -- "xiangxin"
|
|
||||||
know_VS = mkV "知道" ; -- "zhidao"
|
know_VS = mkV "知道" ; -- "zhidao"
|
||||||
wonder_VQ = mkV "好奇" ; -- "haoqi"
|
wonder_VQ = mkV "好奇" ; -- "haoqi"
|
||||||
john_PN = mkPN "约翰" ; -- "yuehan"
|
john_PN = mkPN "约翰" ; -- "yuehan"
|
||||||
--- mary_PN = mkPN "玛丽" ; -- "mali"
|
|
||||||
|
|
||||||
|
|
||||||
-- Swadesh
|
-- Swadesh
|
||||||
|
|
||||||
--big_A = mkA "大" ;
|
|
||||||
long_A = mkA "长" ;
|
long_A = mkA "长" ;
|
||||||
wide_A = mkA "宽" ;
|
wide_A = mkA "宽" ;
|
||||||
thick_A = mkA "厚" ;
|
thick_A = mkA "厚" ;
|
||||||
heavy_A = mkA "重" ;
|
heavy_A = mkA "重" ;
|
||||||
--small_A = mkA "小" ;
|
|
||||||
short_A = mkA "短" ;
|
short_A = mkA "短" ;
|
||||||
narrow_A = mkA "窄" ;
|
narrow_A = mkA "窄" ;
|
||||||
thin_A = mkA "薄" ; -- [mark] for person mkA "瘦"
|
thin_A = mkA "薄" ; -- [mark] for person mkA "瘦"
|
||||||
--woman_N = mkN "女人" ;
|
|
||||||
--man(adult_N = mkN "男人" ;
|
|
||||||
--man(human_N = mkN "人" ;
|
|
||||||
child_N = mkN "孩子" ;
|
child_N = mkN "孩子" ;
|
||||||
wife_N = mkN "妻子" ;
|
wife_N = mkN "妻子" ;
|
||||||
husband_N = mkN "丈夫" ;
|
husband_N = mkN "丈夫" ;
|
||||||
--father_N = mkN "父亲" ;
|
|
||||||
animal_N = mkN "动物" "只"; -- [mark] added classifier for nouns
|
animal_N = mkN "动物" "只"; -- [mark] added classifier for nouns
|
||||||
fish_N = mkN "鱼" "条";
|
fish_N = mkN "鱼" "条";
|
||||||
bird_N = mkN "鸟" "只";
|
bird_N = mkN "鸟" "只";
|
||||||
@@ -53,7 +43,6 @@ dog_N = mkN "狗" "只";
|
|||||||
louse_N = mkN "虱" "只";
|
louse_N = mkN "虱" "只";
|
||||||
snake_N = mkN "蛇" "条";
|
snake_N = mkN "蛇" "条";
|
||||||
worm_N = mkN "虫" "只";
|
worm_N = mkN "虫" "只";
|
||||||
--tree_N = mkN "树" ;
|
|
||||||
forest_N = mkN "森林" "片";
|
forest_N = mkN "森林" "片";
|
||||||
stick_N = mkN "树枝" ;
|
stick_N = mkN "树枝" ;
|
||||||
fruit_N = mkN "水果" ;
|
fruit_N = mkN "水果" ;
|
||||||
@@ -105,11 +94,9 @@ breathe_V = mkV "呼吸" ;
|
|||||||
laugh_V = mkV "笑" ;
|
laugh_V = mkV "笑" ;
|
||||||
see_V2 = mkV2 "看" ;
|
see_V2 = mkV2 "看" ;
|
||||||
hear_V2 = mkV2 "听" ;
|
hear_V2 = mkV2 "听" ;
|
||||||
--know_V = mkV "知道" ;
|
|
||||||
think_V = mkV "想" ;
|
think_V = mkV "想" ;
|
||||||
smell_V = mkV "闻" ; -- [mark] "嗅" -> "闻", "闻" is the common form for smell.
|
smell_V = mkV "闻" ; -- [mark] "嗅" -> "闻", "闻" is the common form for smell.
|
||||||
fear_V2 = mkV2 "怕" ;
|
fear_V2 = mkV2 "怕" ;
|
||||||
--sleep_V = mkV "睡" ;
|
|
||||||
live_V = mkV "活" ;
|
live_V = mkV "活" ;
|
||||||
die_V = mkV "死" ;
|
die_V = mkV "死" ;
|
||||||
kill_V2 = mkV2 "杀" ;
|
kill_V2 = mkV2 "杀" ;
|
||||||
@@ -123,7 +110,6 @@ scratch_V2 = mkV2 "搔" ;
|
|||||||
dig_V = mkV "挖" ;
|
dig_V = mkV "挖" ;
|
||||||
swim_V = mkV "游泳" ;
|
swim_V = mkV "游泳" ;
|
||||||
fly_V = mkV "飞" ;
|
fly_V = mkV "飞" ;
|
||||||
--walk_V = mkV "走" ;
|
|
||||||
come_V = mkV "来" ;
|
come_V = mkV "来" ;
|
||||||
lie_V = mkV "躺" ;
|
lie_V = mkV "躺" ;
|
||||||
sit_V = mkV "坐" ;
|
sit_V = mkV "坐" ;
|
||||||
@@ -174,7 +160,6 @@ burn_V = mkV "烧" ;
|
|||||||
road_N = mkN "路" "条";
|
road_N = mkN "路" "条";
|
||||||
mountain_N = mkN "山" "座";
|
mountain_N = mkN "山" "座";
|
||||||
red_A = mkA "红" ;
|
red_A = mkA "红" ;
|
||||||
--green_A = mkA "绿" ;
|
|
||||||
yellow_A = mkA "黄" ;
|
yellow_A = mkA "黄" ;
|
||||||
white_A = mkA "白" ;
|
white_A = mkA "白" ;
|
||||||
black_A = mkA "黑" ;
|
black_A = mkA "黑" ;
|
||||||
@@ -199,7 +184,7 @@ wet_A = mkA "湿" ;
|
|||||||
dry_A = mkA "干" ;
|
dry_A = mkA "干" ;
|
||||||
correct_A = mkA "对" ;
|
correct_A = mkA "对" ;
|
||||||
near_A = mkA "近" ;
|
near_A = mkA "近" ;
|
||||||
far_A = mkA "远" ;
|
--far_A = mkA "远" ;
|
||||||
left_Ord = ss "左" ;
|
left_Ord = ss "左" ;
|
||||||
right_Ord = ss "右" ;
|
right_Ord = ss "右" ;
|
||||||
name_N = mkN "名字" ; -- [mark] "名" --> "名字"
|
name_N = mkN "名字" ; -- [mark] "名" --> "名字"
|
||||||
@@ -234,10 +219,8 @@ cow_N = mkN "牛" "头";
|
|||||||
do_V2 = mkV2 "做" ;
|
do_V2 = mkV2 "做" ;
|
||||||
doctor_N = mkN "医生" "名";
|
doctor_N = mkN "医生" "名";
|
||||||
door_N = mkN "门" "扇";
|
door_N = mkN "门" "扇";
|
||||||
---easy_A2V = mkA "容易" ;
|
|
||||||
factory_N = mkN "工厂" "间";
|
factory_N = mkN "工厂" "间";
|
||||||
far_Adv = mkAdv "远" ;
|
far_Adv = mkAdv "远" ;
|
||||||
---father_N2 = mkN2 "父亲" ;
|
|
||||||
fear_VS = mkVS (mkV "怕") ;
|
fear_VS = mkVS (mkV "怕") ;
|
||||||
find_V2 = mkV2 "发现" ;
|
find_V2 = mkV2 "发现" ;
|
||||||
forget_V2 = mkV2 "忘" ;
|
forget_V2 = mkV2 "忘" ;
|
||||||
@@ -245,20 +228,13 @@ friend_N = mkN "朋友" ;
|
|||||||
girl_N = mkN "姑娘" ;
|
girl_N = mkN "姑娘" ;
|
||||||
give_V3 = mkV3 "给" ;
|
give_V3 = mkV3 "给" ;
|
||||||
go_V = mkV "去" ;
|
go_V = mkV "去" ;
|
||||||
--go_N = mkN "往" ;
|
|
||||||
grammar_N = mkN "语法" ;
|
grammar_N = mkN "语法" ;
|
||||||
hat_N = mkN "帽子" "顶";
|
hat_N = mkN "帽子" "顶";
|
||||||
--take_N = mkN "带" ;
|
|
||||||
--have_N = mkN "有" ;
|
|
||||||
--take_N = mkN "带" ;
|
|
||||||
--have_N = mkN "有" ;
|
|
||||||
hill_N = mkN "山" "座";
|
hill_N = mkN "山" "座";
|
||||||
hope_VS = mkV "希望" ;
|
hope_VS = mkV "希望" ;
|
||||||
horse_N = mkN "马" "匹";
|
horse_N = mkN "马" "匹";
|
||||||
hot_A = mkA "热" ;
|
hot_A = mkA "热" ;
|
||||||
--how many_N = mkN "多少" ;
|
|
||||||
important_A = mkA "重要" ;
|
important_A = mkA "重要" ;
|
||||||
--heavy_A = mkA "重" ;
|
|
||||||
industry_N = mkN "工业" [];
|
industry_N = mkN "工业" [];
|
||||||
jump_V = mkV "跳" ;
|
jump_V = mkV "跳" ;
|
||||||
know_V2 = mkV2 "知道" ;
|
know_V2 = mkV2 "知道" ;
|
||||||
@@ -266,16 +242,11 @@ know_VQ = mkV "知道" ;
|
|||||||
lamp_N = mkN "灯" "盏";
|
lamp_N = mkN "灯" "盏";
|
||||||
language_N = mkN "语言" "种";
|
language_N = mkN "语言" "种";
|
||||||
learn_V2 = mkV2 "学" ;
|
learn_V2 = mkV2 "学" ;
|
||||||
--leave_N = mkN "离开" ;
|
|
||||||
leave_V2 = mkV2 "离开" ; --[mark] "离" --> "离开", "离" itself is either a morpheme, or a marker indicating distance
|
leave_V2 = mkV2 "离开" ; --[mark] "离" --> "离开", "离" itself is either a morpheme, or a marker indicating distance
|
||||||
--walk_N = mkN "走" ;
|
|
||||||
like_V2 = mkV2 "喜欢" ;
|
like_V2 = mkV2 "喜欢" ;
|
||||||
--be willing_N = mkN "愿意" ;
|
|
||||||
listen_V2 = mkV2 "听" ;
|
listen_V2 = mkV2 "听" ;
|
||||||
lose_V2 = mkV2 "丢" ;
|
lose_V2 = mkV2 "丢" ;
|
||||||
--love_N = mkN "喜欢" ;
|
|
||||||
love_V2 = mkV2 "爱" ;
|
love_V2 = mkV2 "爱" ;
|
||||||
---mother_N2 = mkN2 "妈" ;
|
|
||||||
music_N = mkN "音乐" [] ; -- [mark] usually without classifier
|
music_N = mkN "音乐" [] ; -- [mark] usually without classifier
|
||||||
newspaper_N = mkN "报纸" "张"; --[mark] "报" --> "报纸"
|
newspaper_N = mkN "报纸" "张"; --[mark] "报" --> "报纸"
|
||||||
now_Adv = mkAdv "现在" ;
|
now_Adv = mkAdv "现在" ;
|
||||||
@@ -283,91 +254,43 @@ number_N = mkN "号码" ; -- [mark] "号" --> "号码"
|
|||||||
open_V2 = mkV2 "开" ;
|
open_V2 = mkV2 "开" ;
|
||||||
paint_V2A = mkV2A (mkV "画") ;
|
paint_V2A = mkV2A (mkV "画") ;
|
||||||
paper_N = mkN "纸" "张";
|
paper_N = mkN "纸" "张";
|
||||||
--place_N = mkN "地方" ;
|
|
||||||
--part_N = mkN "部分" ;
|
|
||||||
pen_N = mkN "笔" "只";
|
pen_N = mkN "笔" "只";
|
||||||
--pen_N = mkN "钢笔" "只";
|
|
||||||
person_N = mkN "人" ;
|
person_N = mkN "人" ;
|
||||||
--beat_N = mkN "打" ;
|
|
||||||
--pull_N = mkN "拉" ;
|
|
||||||
play_V2 = mkV2 "玩" ; --[mark] "玩儿" --> "玩"
|
play_V2 = mkV2 "玩" ; --[mark] "玩儿" --> "玩"
|
||||||
--perform_N = mkN "表演" ;
|
|
||||||
--have_N = mkN "有" ;
|
|
||||||
put_V2 = mkV2 "摆" ;
|
put_V2 = mkV2 "摆" ;
|
||||||
--let go_N = mkN "放" ;
|
|
||||||
question_N = mkN "问题" ;
|
question_N = mkN "问题" ;
|
||||||
|
|
||||||
--be enough_N = mkN "够" ;
|
|
||||||
--very_N = mkN "很" ;
|
|
||||||
rain_V0 = mkV "下雨";
|
rain_V0 = mkV "下雨";
|
||||||
read_V2 = mkV2 "读" ;
|
read_V2 = mkV2 "读" ;
|
||||||
reason_N = mkN "道理" ;
|
reason_N = mkN "道理" ;
|
||||||
restaurant_N = mkN "饭店" "间";
|
restaurant_N = mkN "饭店" "间";
|
||||||
--appropriate_N = mkN "合适" ;
|
|
||||||
--correct_N = mkN "正确" ;
|
|
||||||
--run_N = mkN "跑步" ;
|
|
||||||
run_V = mkV "跑" ;
|
run_V = mkV "跑" ;
|
||||||
--road_N = mkN "道" ;
|
|
||||||
school_N = mkN "学校" "所";
|
school_N = mkN "学校" "所";
|
||||||
science_N = mkN "科学" []; -- [mark] usually without classifier
|
science_N = mkN "科学" []; -- [mark] usually without classifier
|
||||||
sell_V3 = mkV3 "卖" ;
|
sell_V3 = mkV3 "卖" ;
|
||||||
--go_N = mkN "去" ;
|
|
||||||
send_V3 = mkV3 "寄" ;
|
send_V3 = mkV3 "寄" ;
|
||||||
--clap_N = mkN "拍" ;
|
|
||||||
sheep_N = mkN "羊" "只";
|
sheep_N = mkN "羊" "只";
|
||||||
ship_N = mkN "船" "艘";
|
ship_N = mkN "船" "艘";
|
||||||
shoe_N = mkN "鞋" "只";
|
shoe_N = mkN "鞋" "只";
|
||||||
shop_N = mkN "商店" "间";
|
shop_N = mkN "商店" "间";
|
||||||
--of that kind_N = mkN "那样" ;
|
|
||||||
--what_N = mkN "什么" ;
|
|
||||||
song_N = mkN "歌" "首";
|
song_N = mkN "歌" "首";
|
||||||
--tell_N = mkN "讲" ;
|
|
||||||
speak_V2 = mkV2 "说" ;
|
speak_V2 = mkV2 "说" ;
|
||||||
--road_N = mkN "道" ;
|
|
||||||
--live_N = mkN "住" ;
|
|
||||||
--act as_N = mkN "当" ;
|
|
||||||
student_N = mkN "学生" "名" ;
|
student_N = mkN "学生" "名" ;
|
||||||
table_N = mkN "桌子" "张";
|
table_N = mkN "桌子" "张";
|
||||||
--word_N = mkN "话" ;
|
|
||||||
talk_V3 = mkV3 "说" ;
|
talk_V3 = mkV3 "说" ;
|
||||||
--talk_N = mkN "谈" ;
|
|
||||||
--education_N = mkN "教育" ;
|
|
||||||
teach_V2 = mkV2 "教" ;
|
teach_V2 = mkV2 "教" ;
|
||||||
--coach_N = mkN "辅导" ;
|
|
||||||
--teacher_N = mkN "先生" ;
|
|
||||||
--master worker_N = mkN "师傅" ;
|
|
||||||
teacher_N = mkN "老师" "名";
|
teacher_N = mkN "老师" "名";
|
||||||
television_N = mkN "电视" "台";
|
television_N = mkN "电视" "台";
|
||||||
--that_N = mkN "那个" ;
|
|
||||||
--that_N = mkN "那" ;
|
|
||||||
--from_N = mkN "从" ;
|
|
||||||
--by way of_N = mkN "通过" ;
|
|
||||||
--towards_N = mkN "向" ;
|
|
||||||
--and_N = mkN "和" ;
|
|
||||||
today_Adv = mkAdv "今天" ;
|
today_Adv = mkAdv "今天" ;
|
||||||
--now_N = mkN "现在" ;
|
|
||||||
--also_N = mkN "也" ;
|
|
||||||
train_N = mkN "火车" "辆";
|
train_N = mkN "火车" "辆";
|
||||||
travel_V = mkV "旅行" ;
|
travel_V = mkV "旅行" ;
|
||||||
--below_N = mkN "下边" ;
|
|
||||||
--understand_N = mkN "了解" ;
|
|
||||||
understand_V2 = mkV2 "懂" ;
|
understand_V2 = mkV2 "懂" ;
|
||||||
--recognize_N = mkN "认识" ;
|
|
||||||
--open up_N = mkN "通" ;
|
|
||||||
university_N = mkN "大学" "所";
|
university_N = mkN "大学" "所";
|
||||||
wait_V2 = mkV2 "等" ;
|
wait_V2 = mkV2 "等" ;
|
||||||
--need_N = mkN "需要" ;
|
|
||||||
watch_V2 = mkV2 "看" ;
|
watch_V2 = mkV2 "看" ;
|
||||||
--time_N = mkN "时候" ;
|
|
||||||
--wait_N = mkN "等" ;
|
|
||||||
--what_N = mkN "什么" ;
|
|
||||||
--how_N = mkN "怎么" ;
|
|
||||||
win_V2 = mkV2 "赢" ;
|
win_V2 = mkV2 "赢" ;
|
||||||
--window_N = mkN "窗户" ;
|
|
||||||
window_N = mkN "窗" "扇";
|
window_N = mkN "窗" "扇";
|
||||||
wine_N = mkN "酒" "瓶";
|
wine_N = mkN "酒" "瓶";
|
||||||
--leave_N = mkN "离" ;
|
|
||||||
--do_N = mkN "作" ;
|
|
||||||
write_V2 = mkV2 "写" ;
|
write_V2 = mkV2 "写" ;
|
||||||
young_A = mkA "年轻" ;
|
young_A = mkA "年轻" ;
|
||||||
|
|
||||||
@@ -427,7 +350,7 @@ war_N = mkN "战争" "场" ; -- [mark] rewritten
|
|||||||
wood_N = mkN "木头" "块" ; -- [mark] "木" --> "木头"
|
wood_N = mkN "木头" "块" ; -- [mark] "木" --> "木头"
|
||||||
|
|
||||||
|
|
||||||
-- just missing
|
-- from scratch, by Jolene
|
||||||
|
|
||||||
lin
|
lin
|
||||||
alas_Interj = ssword "唉" ;
|
alas_Interj = ssword "唉" ;
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ concrete NounChi of Noun = CatChi ** open ResChi, Prelude in {
|
|||||||
UsePN pn = pn ;
|
UsePN pn = pn ;
|
||||||
UsePron p = p ;
|
UsePron p = p ;
|
||||||
|
|
||||||
DetNP det = det ;
|
DetNP det = {s = det.s ++ ge_s} ; ----
|
||||||
|
|
||||||
PredetNP pred np = mkNP (pred.s ++ possessive_s ++ np.s) ;
|
PredetNP pred np = mkNP (pred.s ++ possessive_s ++ np.s) ;
|
||||||
|
|
||||||
@@ -19,7 +19,10 @@ concrete NounChi of Noun = CatChi ** open ResChi, Prelude in {
|
|||||||
AdvNP np adv = mkNP (adv.s ++ possessive_s ++ np.s) ;
|
AdvNP np adv = mkNP (adv.s ++ possessive_s ++ np.s) ;
|
||||||
|
|
||||||
DetQuant quant num = {
|
DetQuant quant num = {
|
||||||
s = quant.s ++ num.s ;
|
s = case num.numType of {
|
||||||
|
NTFull => quant.pl ++ num.s ; -- to avoid yi in indef
|
||||||
|
_ => quant.s ++ num.s
|
||||||
|
} ;
|
||||||
detType = case num.numType of {
|
detType = case num.numType of {
|
||||||
NTFull => DTNum ; -- five
|
NTFull => DTNum ; -- five
|
||||||
NTVoid n => case quant.detType of {
|
NTVoid n => case quant.detType of {
|
||||||
@@ -33,15 +36,12 @@ concrete NounChi of Noun = CatChi ** open ResChi, Prelude in {
|
|||||||
s = quant.s ++ num.s ++ ord.s ;
|
s = quant.s ++ num.s ++ ord.s ;
|
||||||
detType = case num.numType of {
|
detType = case num.numType of {
|
||||||
NTFull => DTNum ; -- five
|
NTFull => DTNum ; -- five
|
||||||
NTVoid n => case quant.detType of {
|
NTVoid n => DTFull n -- these/this ; also our, when ord is present
|
||||||
DTPoss => DTPoss ; -- our
|
|
||||||
_ => DTFull n -- these/this
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
PossPron p = {
|
PossPron p = {
|
||||||
s = p.s ++ possessive_s ;
|
s,pl = p.s ++ possessive_s ;
|
||||||
detType = DTPoss
|
detType = DTPoss
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -52,15 +52,15 @@ concrete NounChi of Noun = CatChi ** open ResChi, Prelude in {
|
|||||||
NumDigits d = d ** {numType = NTFull} ;
|
NumDigits d = d ** {numType = NTFull} ;
|
||||||
OrdDigits d = {s = ordinal_s ++ d.s} ;
|
OrdDigits d = {s = ordinal_s ++ d.s} ;
|
||||||
|
|
||||||
NumNumeral numeral = numeral ** {hasC = True} ;
|
NumNumeral numeral = {s = numeral.p} ; -- liang instead of yi
|
||||||
OrdNumeral numeral = {s = ordinal_s ++ numeral.s} ;
|
OrdNumeral numeral = {s = ordinal_s ++ numeral.s} ;
|
||||||
|
|
||||||
AdNum adn num = {s = adn.s ++ num.s ; hasC = True} ;
|
AdNum adn num = {s = adn.s ++ num.s ; hasC = True} ;
|
||||||
|
|
||||||
OrdSuperl a = {s = superlative_s ++ a.s} ;
|
OrdSuperl a = {s = superlative_s ++ a.s} ;
|
||||||
|
|
||||||
DefArt = mkDet the_s ;
|
DefArt = mkQuant [] [] DTPoss ; -- use that_Quant if you want the_s
|
||||||
IndefArt = mkDet yi_s ; ---- in the plural ?
|
IndefArt = mkQuant yi_s [] (DTFull Sg) ; -- empty in the plural
|
||||||
|
|
||||||
MassNP cn = cn ;
|
MassNP cn = cn ;
|
||||||
|
|
||||||
|
|||||||
@@ -16,55 +16,53 @@ oper Wan : Zero => Str =
|
|||||||
|
|
||||||
oper mkD : Str -> Str -> Str = \x,_ -> word x ; -- hiding the "formal" version
|
oper mkD : Str -> Str -> Str = \x,_ -> word x ; -- hiding the "formal" version
|
||||||
|
|
||||||
--lincat Numeral = {s : Str} ;
|
lincat Digit = {s,p : Str} ;
|
||||||
lincat Digit = {s : Str} ;
|
lincat Sub10 = {s,p : Str} ;
|
||||||
lincat Sub10 = {s : Str} ;
|
lincat Sub100 = {inh : Zero ; s,p : Bform => Str} ;
|
||||||
lincat Sub100 = {inh : Zero ; s : Bform => Str} ;
|
lincat Sub1000 = {inh : Zero ; s,p : Qform => Str} ;
|
||||||
lincat Sub1000 = {inh : Zero ; s : Qform => Str} ;
|
lincat Sub1000000 = {s,p : Str} ;
|
||||||
lincat Sub1000000 = {s : Str} ;
|
lin num x0 = x0 ;
|
||||||
lin num x0 =
|
|
||||||
{s = x0.s} ;
|
|
||||||
|
|
||||||
-- 一二三四五六七八九十一百千
|
-- 一二三四五六七八九十一百千
|
||||||
--
|
--
|
||||||
|
|
||||||
lin n2 =
|
lin n2 =
|
||||||
{s = mkD "二" "贰"} ;
|
{s = mkD "二" "贰" ; p = "两"} ;
|
||||||
lin n3 =
|
lin n3 =
|
||||||
{s = mkD "三" "叁"} ;
|
{s,p = mkD "三" "叁"} ;
|
||||||
lin n4 =
|
lin n4 =
|
||||||
{s = mkD "四" "肆"} ;
|
{s,p = mkD "四" "肆"} ;
|
||||||
lin n5 =
|
lin n5 =
|
||||||
{s = mkD "五" "伍"} ;
|
{s,p = mkD "五" "伍"} ;
|
||||||
lin n6 =
|
lin n6 =
|
||||||
{s = mkD "六" "陆"} ;
|
{s,p = mkD "六" "陆"} ;
|
||||||
lin n7 =
|
lin n7 =
|
||||||
{s = mkD "七" "柒"} ;
|
{s,p = mkD "七" "柒"} ;
|
||||||
lin n8 =
|
lin n8 =
|
||||||
{s = mkD "八" "捌"} ;
|
{s,p = mkD "八" "捌"} ;
|
||||||
lin n9 =
|
lin n9 =
|
||||||
{s = mkD "九" "玖"} ;
|
{s,p = mkD "九" "玖"} ;
|
||||||
lin pot01 =
|
lin pot01 =
|
||||||
{s = mkD "一" "壹"} ;
|
{s,p = mkD "一" "壹"} ;
|
||||||
lin pot0 d =
|
lin pot0 d =
|
||||||
{s = d.s} ;
|
{s = d.s ; p = d.p} ;
|
||||||
lin pot110 =
|
lin pot110 =
|
||||||
{inh = nozero ;
|
{inh = nozero ;
|
||||||
s = table {
|
s,p = table {
|
||||||
shi => mkD "一十" "壹拾" ;
|
shi => mkD "一十" "壹拾" ;
|
||||||
shi0 => mkD "一十" "壹拾" ;
|
shi0 => mkD "一十" "壹拾" ;
|
||||||
wan => mkD "一万" "壹万" ;
|
wan => mkD "一万" "壹万" ;
|
||||||
wan0 => mkD "一万" "壹万"}} ;
|
wan0 => mkD "一万" "壹万"}} ;
|
||||||
lin pot111 =
|
lin pot111 =
|
||||||
{inh = nozero ;
|
{inh = nozero ;
|
||||||
s = table {
|
s,p = table {
|
||||||
shi => mkD "十一" "拾壹" ;
|
shi => mkD "十一" "拾壹" ;
|
||||||
shi0 => mkD "一十一" "壹拾壹" ;
|
shi0 => mkD "一十一" "壹拾壹" ;
|
||||||
wan => mkD "十一万" "拾壹万" ;
|
wan => mkD "十一万" "拾壹万" ;
|
||||||
wan0 => mkD "十一万" "拾壹万"}} ;
|
wan0 => mkD "十一万" "拾壹万"}} ;
|
||||||
lin pot1to19 d =
|
lin pot1to19 d =
|
||||||
{inh = nozero ;
|
{inh = nozero ;
|
||||||
s = table {
|
s,p = table {
|
||||||
shi => mkD "一十" "壹拾" ++ d.s ;
|
shi => mkD "一十" "壹拾" ++ d.s ;
|
||||||
shi0 => mkD "一十" "壹拾" ;
|
shi0 => mkD "一十" "壹拾" ;
|
||||||
wan => mkD "一万" "壹万" ++ d.s ++ mkD "千" "仟" ;
|
wan => mkD "一万" "壹万" ++ d.s ++ mkD "千" "仟" ;
|
||||||
@@ -75,17 +73,23 @@ lin pot0as1 n =
|
|||||||
shi => n.s ;
|
shi => n.s ;
|
||||||
shi0 => n.s ;
|
shi0 => n.s ;
|
||||||
wan => n.s ++ mkD "千" "仟" ;
|
wan => n.s ++ mkD "千" "仟" ;
|
||||||
wan0 => n.s ++ mkD "千" "仟"}} ;
|
wan0 => n.s ++ mkD "千" "仟"} ;
|
||||||
|
p = table {
|
||||||
|
shi => n.p ;
|
||||||
|
shi0 => n.s ;
|
||||||
|
wan => n.s ++ mkD "千" "仟" ;
|
||||||
|
wan0 => n.s ++ mkD "千" "仟"}
|
||||||
|
} ;
|
||||||
lin pot1 d =
|
lin pot1 d =
|
||||||
{inh = zero ;
|
{inh = zero ;
|
||||||
s = table {
|
s,p = table {
|
||||||
shi => d.s ++ mkD "十" "拾" ;
|
shi => d.s ++ mkD "十" "拾" ;
|
||||||
shi0 => d.s ++ mkD "十" "拾" ;
|
shi0 => d.s ++ mkD "十" "拾" ;
|
||||||
wan0 => d.s ++ "万" ;
|
wan0 => d.s ++ "万" ;
|
||||||
wan => d.s ++ "万"}} ;
|
wan => d.s ++ "万"}} ;
|
||||||
lin pot1plus d e =
|
lin pot1plus d e =
|
||||||
{inh = nozero ;
|
{inh = nozero ;
|
||||||
s = table {
|
s,p = table {
|
||||||
shi => d.s ++ mkD "十" "拾" ++ e.s ;
|
shi => d.s ++ mkD "十" "拾" ++ e.s ;
|
||||||
shi0 => d.s ++ mkD "十" "拾" ++ e.s ;
|
shi0 => d.s ++ mkD "十" "拾" ++ e.s ;
|
||||||
wan => d.s ++ "万" ++ e.s ++ mkD "千" "仟" ;
|
wan => d.s ++ "万" ++ e.s ++ mkD "千" "仟" ;
|
||||||
@@ -96,27 +100,32 @@ lin pot1as2 n =
|
|||||||
bai => n.s ! shi ;
|
bai => n.s ! shi ;
|
||||||
bai0 => n.s ! shi ;
|
bai0 => n.s ! shi ;
|
||||||
shiwan => n.s ! wan ;
|
shiwan => n.s ! wan ;
|
||||||
|
shiwan0 => n.s ! wan0} ;
|
||||||
|
p = table {
|
||||||
|
bai => n.p ! shi ;
|
||||||
|
bai0 => n.s ! shi ;
|
||||||
|
shiwan => n.s ! wan ;
|
||||||
shiwan0 => n.s ! wan0}} ;
|
shiwan0 => n.s ! wan0}} ;
|
||||||
lin pot2 d =
|
lin pot2 d =
|
||||||
{inh = zero ;
|
{inh = zero ;
|
||||||
s = table {
|
s,p = table {
|
||||||
bai => d.s ++ mkD "百" "佰" ;
|
bai => d.s ++ mkD "百" "佰" ;
|
||||||
bai0 => d.s ++ mkD "百" "佰" ;
|
bai0 => d.s ++ mkD "百" "佰" ;
|
||||||
shiwan0 => d.s ++ mkD "十万" "拾万" ;
|
shiwan0 => d.s ++ mkD "十万" "拾万" ;
|
||||||
shiwan => d.s ++ mkD "十万" "拾万"}} ;
|
shiwan => d.s ++ mkD "十万" "拾万"}} ;
|
||||||
lin pot2plus d e =
|
lin pot2plus d e =
|
||||||
{inh = nozero ;
|
{inh = nozero ;
|
||||||
s = table {
|
s,p = table {
|
||||||
bai => d.s ++ mkD "" "佰" ++ (ling ! <e.inh,e.inh>) ++ e.s ! shi0 ;
|
bai => d.s ++ mkD "" "佰" ++ (ling ! <e.inh,e.inh>) ++ e.s ! shi0 ;
|
||||||
bai0 => d.s ++ mkD "" "佰" ++ (ling ! <e.inh,e.inh>) ++ e.s ! shi0 ;
|
bai0 => d.s ++ mkD "" "佰" ++ (ling ! <e.inh,e.inh>) ++ e.s ! shi0 ;
|
||||||
shiwan => d.s ++ mkD "" "拾" ++ (Wan ! (e.inh)) ++ e.s ! wan ;
|
shiwan => d.s ++ mkD "" "拾" ++ (Wan ! (e.inh)) ++ e.s ! wan ;
|
||||||
shiwan0 => d.s ++ mkD "" "拾" ++ (Wan ! (e.inh)) ++ e.s ! wan0}} ;
|
shiwan0 => d.s ++ mkD "" "拾" ++ (Wan ! (e.inh)) ++ e.s ! wan0}} ;
|
||||||
lin pot2as3 n =
|
lin pot2as3 n =
|
||||||
{s = n.s ! bai} ;
|
{s = n.s ! bai ; p = n.p ! bai} ;
|
||||||
lin pot3 n =
|
lin pot3 n =
|
||||||
{s = n.s ! shiwan} ;
|
{s,p = n.s ! shiwan} ;
|
||||||
lin pot3plus n m =
|
lin pot3plus n m =
|
||||||
{s = (n.s ! shiwan0) ++ (ling ! <n.inh,m.inh>) ++ m.s ! bai0} ;
|
{s,p = (n.s ! shiwan0) ++ (ling ! <n.inh,m.inh>) ++ m.s ! bai0} ;
|
||||||
|
|
||||||
|
|
||||||
-- numerals as sequences of digits
|
-- numerals as sequences of digits
|
||||||
|
|||||||
@@ -287,6 +287,14 @@ p. 242 coverbs
|
|||||||
p. 255 disyllabic prepositions
|
p. 255 disyllabic prepositions
|
||||||
|
|
||||||
|
|
||||||
|
Today's work 6h AR, 3h Jolene. Total 29h.
|
||||||
|
|
||||||
|
Jolene worked 3 weeks for the extended mini Chinese. This means the complete (but not yet perfect) Chinese
|
||||||
|
RGL implementation took 4 person weeks altogether. The remaining immediate fixes shouldn't take a lot of time.
|
||||||
|
However, there is a lot of Chinese that we will leave outside the common RGL abstract syntax.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ resource ResChi = ParamX ** open Prelude in {
|
|||||||
exclmark_s = "!" ;
|
exclmark_s = "!" ;
|
||||||
ge_s = "个" ;
|
ge_s = "个" ;
|
||||||
di_s = "是" ; -- used in QuestSlash
|
di_s = "是" ; -- used in QuestSlash
|
||||||
|
ba_s = "把" ;
|
||||||
|
|
||||||
emptyStr = [] ;
|
emptyStr = [] ;
|
||||||
|
|
||||||
@@ -188,6 +189,7 @@ param
|
|||||||
|
|
||||||
oper
|
oper
|
||||||
Determiner = {s : Str ; detType : DetType} ;
|
Determiner = {s : Str ; detType : DetType} ;
|
||||||
|
Quantifier = Determiner ** {pl : Str} ;
|
||||||
|
|
||||||
mkDet = overload {
|
mkDet = overload {
|
||||||
mkDet : Str -> Determiner = \s -> {s = s ; detType = DTFull Sg} ;
|
mkDet : Str -> Determiner = \s -> {s = s ; detType = DTFull Sg} ;
|
||||||
@@ -195,7 +197,11 @@ oper
|
|||||||
mkDet : Str -> DetType -> Determiner = \s,d -> {s = s ; detType = d} ;
|
mkDet : Str -> DetType -> Determiner = \s,d -> {s = s ; detType = d} ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkQuant : Str -> {s : Str} = ss ;
|
mkQuant = overload {
|
||||||
|
mkQuant : Str -> Quantifier = \s -> {s,pl = s ; detType = DTFull Sg} ;
|
||||||
|
mkQuant : Str -> DetType -> Quantifier = \s,d -> {s,pl = s ; detType = d} ;
|
||||||
|
mkQuant : Str -> Str -> DetType -> Quantifier = \s,p,d -> {s = s ; detType = d ; pl = p} ;
|
||||||
|
} ;
|
||||||
|
|
||||||
pronNP : (s : Str) -> NP = \s -> {
|
pronNP : (s : Str) -> NP = \s -> {
|
||||||
s = word s
|
s = word s
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ concrete StructuralChi of Structural = CatChi **
|
|||||||
lin
|
lin
|
||||||
every_Det = mkDet "每" Sg ;
|
every_Det = mkDet "每" Sg ;
|
||||||
|
|
||||||
this_Quant = mkDet "这" ;
|
this_Quant = mkQuant "这" ;
|
||||||
that_Quant = mkDet "那" ;
|
that_Quant = mkQuant "那" ;
|
||||||
|
|
||||||
i_Pron = pronNP "我" ;
|
i_Pron = pronNP "我" ;
|
||||||
youSg_Pron = pronNP "你" ;
|
youSg_Pron = pronNP "你" ;
|
||||||
@@ -24,8 +24,6 @@ lin
|
|||||||
possess_Prep = mkPrep "的" [];
|
possess_Prep = mkPrep "的" [];
|
||||||
with_Prep = mkPrep "一起" "和";
|
with_Prep = mkPrep "一起" "和";
|
||||||
|
|
||||||
ba_s = "把" ;
|
|
||||||
|
|
||||||
and_Conj = {s = table {
|
and_Conj = {s = table {
|
||||||
CPhr CNPhrase => mkConjForm "和" ;
|
CPhr CNPhrase => mkConjForm "和" ;
|
||||||
CPhr CAPhrase => mkConjForm "而" ;
|
CPhr CAPhrase => mkConjForm "而" ;
|
||||||
@@ -71,9 +69,9 @@ under_Prep = mkPrep "下" ;
|
|||||||
why_IAdv = mkIAdvL "为什么" ;
|
why_IAdv = mkIAdvL "为什么" ;
|
||||||
too_AdA = mkAdA "太" ;
|
too_AdA = mkAdA "太" ;
|
||||||
|
|
||||||
before_Prep = mkPrep "从前" ; --s
|
before_Prep = mkPrep "从前" ;
|
||||||
between_Prep = mkPrep "之间" ; --s
|
between_Prep = mkPrep "之间" ;
|
||||||
but_PConj = mkPConjL "但是" ; --s
|
but_PConj = mkPConjL "但是" ;
|
||||||
|
|
||||||
|
|
||||||
can_VV = mkVerb "能" [] [] [] [] "不" ;
|
can_VV = mkVerb "能" [] [] [] [] "不" ;
|
||||||
@@ -83,23 +81,16 @@ but_PConj = mkPConjL "但是" ; --s
|
|||||||
can8know_VV = mkV "会" [] [] [] [] "不" ; ----
|
can8know_VV = mkV "会" [] [] [] [] "不" ; ----
|
||||||
|
|
||||||
|
|
||||||
except_Prep = mkPrep "除了" "以外" ; --s
|
except_Prep = mkPrep "除了" "以外" ;
|
||||||
for_Prep = mkPrep "为了" ; --s
|
for_Prep = mkPrep "为了" ;
|
||||||
from_Prep = mkPrep "从" ; --s
|
from_Prep = mkPrep "从" ;
|
||||||
---how8many_IDet = mkIDet "几" ; --s
|
in8front_Prep = mkPrep "前边" ;
|
||||||
---how8much_IDet = mkIDet "多少" ; --s
|
it_Pron = pronNP "它" ;
|
||||||
in8front_Prep = mkPrep "前边" ; --s
|
much_Det = mkDet "多" Sg ;
|
||||||
it_Pron = pronNP "它" ; --s
|
no_Quant = mkQuant "不" ;
|
||||||
---less_CAdv = mkCAdv "少" ; --s
|
|
||||||
much_Det = mkDet "多" Sg ; --s
|
|
||||||
---more_CAdv = mkCAdv "更" ; --s
|
|
||||||
---most_Predet = mkPredet "最" ; --s
|
|
||||||
no_Quant = mkDet "不" ; --s
|
|
||||||
not_Predet = ssword "不" ;
|
not_Predet = ssword "不" ;
|
||||||
---only_Predet = mkPredet "只" ; --s
|
otherwise_PConj = mkPConjL "还是" ;
|
||||||
otherwise_PConj = mkPConjL "还是" ; --s
|
to_Prep = mkPrep "往" ;
|
||||||
to_Prep = mkPrep "往" ; --s
|
|
||||||
---which_IQuant = mkIQuant "哪" ; --s
|
|
||||||
|
|
||||||
have_V2 = mkV2 "有" ;
|
have_V2 = mkV2 "有" ;
|
||||||
|
|
||||||
@@ -109,7 +100,7 @@ no_Utt = ss neg_s ;
|
|||||||
oper
|
oper
|
||||||
mkConjForm : Str -> {s1,s2 : Str} = \s -> {s1 = [] ; s2 = word s} ;
|
mkConjForm : Str -> {s1,s2 : Str} = \s -> {s1 = [] ; s2 = word s} ;
|
||||||
|
|
||||||
-- manually by AR
|
-- manually by AR, Jolene
|
||||||
|
|
||||||
lin
|
lin
|
||||||
always_AdV = ssword "一直" ;
|
always_AdV = ssword "一直" ;
|
||||||
@@ -159,7 +150,8 @@ there7from_Adv = mkAdv "从那里" ; -- from there
|
|||||||
there7to_Adv = mkAdv "到那里" ;
|
there7to_Adv = mkAdv "到那里" ;
|
||||||
therefore_PConj = ssword "因此" ;
|
therefore_PConj = ssword "因此" ;
|
||||||
through_Prep = mkPrep "通过" ;
|
through_Prep = mkPrep "通过" ;
|
||||||
which_IQuant = ssword [] ; -- [mark] in sent, it depends on the context
|
which_IQuant = mkIQuant "哪" ;
|
||||||
|
--which_IQuant = ssword [] ; -- [mark] in sent, it depends on the context
|
||||||
without_Prep = mkPrep "没有" [];
|
without_Prep = mkPrep "没有" [];
|
||||||
youPol_Pron = ssword "您" ; -- polite you
|
youPol_Pron = ssword "您" ; -- polite you
|
||||||
|
|
||||||
|
|||||||
@@ -5,16 +5,16 @@ concrete VerbChi of Verb = CatChi ** open ResChi, Prelude in {
|
|||||||
lin
|
lin
|
||||||
UseV = predV ;
|
UseV = predV ;
|
||||||
|
|
||||||
SlashV2a v = predV v ** {c2 = v.c2} ;
|
SlashV2a v = predV v ** {c2 = v.c2 ; isPre = False} ;
|
||||||
|
|
||||||
Slash2V3 v np = insertObj np (predV v) ** {c2 = v.c3} ; ---- to check arg order
|
Slash2V3 v np = insertObj np (predV v) ** {c2 = v.c3 ; isPre = True} ;
|
||||||
Slash3V3 v np = insertObj np (predV v) ** {c2 = v.c2} ;
|
Slash3V3 v np = insertObj np (predV v) ** {c2 = v.c2 ; isPre = False} ;
|
||||||
|
|
||||||
SlashV2A v ap = insertObj ap (predV v) ** {c2 = v.c2} ;
|
SlashV2A v ap = insertObj ap (predV v) ** {c2 = v.c2 ; isPre = True} ;
|
||||||
|
|
||||||
SlashV2V v vp = insertObj (mkNP (infVP vp)) (predV v) ** {c2 = v.c2} ;
|
SlashV2V v vp = insertObj (mkNP (infVP vp)) (predV v) ** {c2 = v.c2 ; isPre = True} ;
|
||||||
SlashV2S v s = insertObj s (predV v) ** {c2 = v.c2} ;
|
SlashV2S v s = insertObj s (predV v) ** {c2 = v.c2 ; isPre = True} ;
|
||||||
SlashV2Q v q = insertObj q (predV v) ** {c2 = v.c2} ;
|
SlashV2Q v q = insertObj q (predV v) ** {c2 = v.c2 ; isPre = True} ;
|
||||||
|
|
||||||
ComplVV v vp = {
|
ComplVV v vp = {
|
||||||
verb = v ;
|
verb = v ;
|
||||||
@@ -26,16 +26,19 @@ concrete VerbChi of Verb = CatChi ** open ResChi, Prelude in {
|
|||||||
ComplVQ v q = insertObj q (predV v) ;
|
ComplVQ v q = insertObj q (predV v) ;
|
||||||
ComplVA v ap = insertObj ap (predV v) ;
|
ComplVA v ap = insertObj ap (predV v) ;
|
||||||
|
|
||||||
ComplSlash vp np = insertObj (mkNP (appPrep vp.c2 np.s)) vp ;
|
ComplSlash vp np = case vp.isPre of {
|
||||||
|
True => insertAdv (mkNP (ba_s ++ np.s)) vp ; --- ba or vp.c2 ?
|
||||||
|
False => insertObj (mkNP (appPrep vp.c2 np.s)) vp
|
||||||
|
} ;
|
||||||
|
|
||||||
UseComp comp = comp ;
|
UseComp comp = comp ;
|
||||||
|
|
||||||
SlashVV v vp = ---- too simple?
|
SlashVV v vp = ---- too simple?
|
||||||
insertObj (mkNP (infVP vp)) (predV v) ** {c2 = vp.c2} ;
|
insertObj (mkNP (infVP vp)) (predV v) ** {c2 = vp.c2 ; isPre = vp.isPre} ;
|
||||||
|
|
||||||
SlashV2VNP v np vp =
|
SlashV2VNP v np vp =
|
||||||
insertObj np
|
insertObj np
|
||||||
(insertObj (mkNP (infVP vp)) (predV v)) ** {c2 = vp.c2} ;
|
(insertObj (mkNP (infVP vp)) (predV v)) ** {c2 = vp.c2 ; isPre = vp.isPre} ;
|
||||||
|
|
||||||
AdvVP vp adv = case adv.advType of {
|
AdvVP vp adv = case adv.advType of {
|
||||||
ATManner => insertObj (ss (deVAdv_s ++ adv.s)) vp ; -- he sleeps well
|
ATManner => insertObj (ss (deVAdv_s ++ adv.s)) vp ; -- he sleeps well
|
||||||
|
|||||||
Reference in New Issue
Block a user